├── django ├── eggcatch │ ├── __init__.py │ ├── tests.py │ ├── apps.py │ ├── templates │ │ ├── players.html │ │ ├── eggs_codes.html │ │ ├── eggs.html │ │ ├── player_detail.html │ │ ├── faq.html │ │ ├── combos.html │ │ ├── egg_detail.html │ │ ├── index.html │ │ ├── base.html │ │ └── api.html │ ├── admin.py │ ├── urls.py │ ├── models.py │ └── views.py ├── sqpub │ ├── __init__.py │ ├── wsgi.py │ ├── urls.py │ └── settings.py ├── db.sqlite3 ├── site_media │ ├── img │ │ ├── bg.jpg │ │ ├── bg2.jpg │ │ ├── bg-dark.jpg │ │ ├── eggs.jpeg │ │ ├── bg2-dark.jpg │ │ └── bg-less-dark.jpg │ ├── toxic.jpg │ ├── egg │ │ └── None │ │ │ ├── ACEN.PNG │ │ │ ├── BART.PNG │ │ │ ├── EGO.PNG │ │ │ ├── HALO.PNG │ │ │ ├── PLAY.PNG │ │ │ ├── TOOD.PNG │ │ │ ├── lisa.PNG │ │ │ ├── magg.PNG │ │ │ ├── ESTROP.PNG │ │ │ ├── EXPLO.PNG │ │ │ ├── Eggbad.JPG │ │ │ ├── Egglego.JPG │ │ │ ├── Eggpool.JPG │ │ │ ├── MARIO.PNG │ │ │ ├── PEACG.PNG │ │ │ ├── PICASSO.PNG │ │ │ ├── PLAYU.PNG │ │ │ ├── SELPHIE.PNG │ │ │ ├── SMILEY.PNG │ │ │ ├── SPIDY.PNG │ │ │ ├── ZAltan.PNG │ │ │ ├── loove.PNG │ │ │ ├── vENON.PNG │ │ │ ├── EggDriver.JPG │ │ │ ├── EggGolum.JPG │ │ │ ├── EggPanda.JPG │ │ │ ├── EggRabbit.JPG │ │ │ ├── EggScuba.JPG │ │ │ ├── EggShumi.PNG │ │ │ ├── EggSkater.JPG │ │ │ ├── Eggangry.JPG │ │ │ ├── Eggbatman.JPG │ │ │ ├── Eggdisco.JPG │ │ │ ├── Egggandaf.JPG │ │ │ ├── Eggmarley.JPG │ │ │ ├── Eggplant.JPG │ │ │ ├── Eggredou.JPG │ │ │ ├── SAM_2961.JPG │ │ │ ├── SAM_2962.JPG │ │ │ ├── SAM_2963.JPG │ │ │ ├── SAM_2964.JPG │ │ │ ├── SAM_2965.JPG │ │ │ ├── SAM_2967.JPG │ │ │ ├── SAM_2968.JPG │ │ │ ├── SAM_2969.JPG │ │ │ ├── SAM_2970.JPG │ │ │ ├── SAM_2971.JPG │ │ │ ├── SAM_2972.JPG │ │ │ ├── SAM_2973.JPG │ │ │ ├── SAM_2974.JPG │ │ │ ├── SAM_2975.JPG │ │ │ ├── SAM_2976.JPG │ │ │ ├── SAM_2978.JPG │ │ │ ├── SAM_2979.JPG │ │ │ ├── SAM_2980.JPG │ │ │ ├── SAM_2981.JPG │ │ │ ├── SAM_2982.JPG │ │ │ ├── SAM_2983.JPG │ │ │ ├── SAM_2984.JPG │ │ │ ├── SAM_2985.JPG │ │ │ ├── SAM_2986.JPG │ │ │ ├── SAM_2987.JPG │ │ │ ├── SAM_2989.JPG │ │ │ ├── SAM_2990.JPG │ │ │ ├── SAM_2991.JPG │ │ │ ├── SAM_2992.JPG │ │ │ ├── SAM_2993.JPG │ │ │ ├── SAM_2994.JPG │ │ │ ├── SAM_2995.JPG │ │ │ ├── SAM_2996.JPG │ │ │ ├── SAM_2998.JPG │ │ │ ├── SAM_2999.JPG │ │ │ ├── SAM_3000.JPG │ │ │ ├── SAM_3001.JPG │ │ │ ├── SAM_3002.JPG │ │ │ ├── SAM_3003.JPG │ │ │ ├── SAM_3004.JPG │ │ │ ├── SAM_3008.JPG │ │ │ ├── eggichon.png │ │ │ ├── AGE_DE_GLACE.PNG │ │ │ ├── Eggcalibur.JPG │ │ │ ├── Eggjasmine.JPG │ │ │ ├── Egglicorne.JPG │ │ │ ├── Eggsorcist.JPG │ │ │ ├── SHObf3GNGN-6.png │ │ │ └── egg_mr__burns__eggcellent_by_cpsnewestproxy-d8ghdql.jpg │ └── css │ │ ├── fonts │ │ ├── glyphicons-halflings-regular.eot │ │ ├── glyphicons-halflings-regular.ttf │ │ ├── glyphicons-halflings-regular.woff │ │ ├── glyphicons-halflings-regular.woff2 │ │ └── fonts │ │ │ ├── glyphicons-halflings-regular.eot │ │ │ ├── glyphicons-halflings-regular.ttf │ │ │ ├── glyphicons-halflings-regular.woff │ │ │ └── glyphicons-halflings-regular.woff2 │ │ ├── sqpub.css │ │ └── bootstrap │ │ ├── bootstrap-theme.min.css │ │ ├── bootstrap-theme.min.css.map │ │ ├── bootstrap-theme.css │ │ └── bootstrap-theme.css.map └── manage.py ├── img ├── tv.jpg ├── egg.jpg ├── ceremony.jpg ├── look_end.png ├── look_old.png ├── new_catch.png ├── first_floor.jpg └── leaderboard.png ├── LICENSE ├── .gitignore └── README.md /django/eggcatch/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /django/sqpub/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /img/tv.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/EasterEggs/master/img/tv.jpg -------------------------------------------------------------------------------- /img/egg.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/EasterEggs/master/img/egg.jpg -------------------------------------------------------------------------------- /django/db.sqlite3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/EasterEggs/master/django/db.sqlite3 -------------------------------------------------------------------------------- /img/ceremony.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/EasterEggs/master/img/ceremony.jpg -------------------------------------------------------------------------------- /img/look_end.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/EasterEggs/master/img/look_end.png -------------------------------------------------------------------------------- /img/look_old.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/EasterEggs/master/img/look_old.png -------------------------------------------------------------------------------- /img/new_catch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/EasterEggs/master/img/new_catch.png -------------------------------------------------------------------------------- /img/first_floor.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/EasterEggs/master/img/first_floor.jpg -------------------------------------------------------------------------------- /img/leaderboard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/EasterEggs/master/img/leaderboard.png -------------------------------------------------------------------------------- /django/eggcatch/tests.py: -------------------------------------------------------------------------------- 1 | from django.test import TestCase 2 | 3 | # Create your tests here. 4 | -------------------------------------------------------------------------------- /django/site_media/img/bg.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/EasterEggs/master/django/site_media/img/bg.jpg -------------------------------------------------------------------------------- /django/site_media/toxic.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/EasterEggs/master/django/site_media/toxic.jpg -------------------------------------------------------------------------------- /django/site_media/img/bg2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/EasterEggs/master/django/site_media/img/bg2.jpg -------------------------------------------------------------------------------- /django/site_media/img/bg-dark.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/EasterEggs/master/django/site_media/img/bg-dark.jpg -------------------------------------------------------------------------------- /django/site_media/img/eggs.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/EasterEggs/master/django/site_media/img/eggs.jpeg -------------------------------------------------------------------------------- /django/site_media/egg/None/ACEN.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/EasterEggs/master/django/site_media/egg/None/ACEN.PNG -------------------------------------------------------------------------------- /django/site_media/egg/None/BART.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/EasterEggs/master/django/site_media/egg/None/BART.PNG -------------------------------------------------------------------------------- /django/site_media/egg/None/EGO.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/EasterEggs/master/django/site_media/egg/None/EGO.PNG -------------------------------------------------------------------------------- /django/site_media/egg/None/HALO.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/EasterEggs/master/django/site_media/egg/None/HALO.PNG -------------------------------------------------------------------------------- /django/site_media/egg/None/PLAY.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/EasterEggs/master/django/site_media/egg/None/PLAY.PNG -------------------------------------------------------------------------------- /django/site_media/egg/None/TOOD.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/EasterEggs/master/django/site_media/egg/None/TOOD.PNG -------------------------------------------------------------------------------- /django/site_media/egg/None/lisa.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/EasterEggs/master/django/site_media/egg/None/lisa.PNG -------------------------------------------------------------------------------- /django/site_media/egg/None/magg.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/EasterEggs/master/django/site_media/egg/None/magg.PNG -------------------------------------------------------------------------------- /django/site_media/img/bg2-dark.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/EasterEggs/master/django/site_media/img/bg2-dark.jpg -------------------------------------------------------------------------------- /django/site_media/egg/None/ESTROP.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/EasterEggs/master/django/site_media/egg/None/ESTROP.PNG -------------------------------------------------------------------------------- /django/site_media/egg/None/EXPLO.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/EasterEggs/master/django/site_media/egg/None/EXPLO.PNG -------------------------------------------------------------------------------- /django/site_media/egg/None/Eggbad.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/EasterEggs/master/django/site_media/egg/None/Eggbad.JPG -------------------------------------------------------------------------------- /django/site_media/egg/None/Egglego.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/EasterEggs/master/django/site_media/egg/None/Egglego.JPG -------------------------------------------------------------------------------- /django/site_media/egg/None/Eggpool.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/EasterEggs/master/django/site_media/egg/None/Eggpool.JPG -------------------------------------------------------------------------------- /django/site_media/egg/None/MARIO.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/EasterEggs/master/django/site_media/egg/None/MARIO.PNG -------------------------------------------------------------------------------- /django/site_media/egg/None/PEACG.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/EasterEggs/master/django/site_media/egg/None/PEACG.PNG -------------------------------------------------------------------------------- /django/site_media/egg/None/PICASSO.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/EasterEggs/master/django/site_media/egg/None/PICASSO.PNG -------------------------------------------------------------------------------- /django/site_media/egg/None/PLAYU.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/EasterEggs/master/django/site_media/egg/None/PLAYU.PNG -------------------------------------------------------------------------------- /django/site_media/egg/None/SELPHIE.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/EasterEggs/master/django/site_media/egg/None/SELPHIE.PNG -------------------------------------------------------------------------------- /django/site_media/egg/None/SMILEY.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/EasterEggs/master/django/site_media/egg/None/SMILEY.PNG -------------------------------------------------------------------------------- /django/site_media/egg/None/SPIDY.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/EasterEggs/master/django/site_media/egg/None/SPIDY.PNG -------------------------------------------------------------------------------- /django/site_media/egg/None/ZAltan.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/EasterEggs/master/django/site_media/egg/None/ZAltan.PNG -------------------------------------------------------------------------------- /django/site_media/egg/None/loove.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/EasterEggs/master/django/site_media/egg/None/loove.PNG -------------------------------------------------------------------------------- /django/site_media/egg/None/vENON.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/EasterEggs/master/django/site_media/egg/None/vENON.PNG -------------------------------------------------------------------------------- /django/site_media/img/bg-less-dark.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/EasterEggs/master/django/site_media/img/bg-less-dark.jpg -------------------------------------------------------------------------------- /django/site_media/egg/None/EggDriver.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/EasterEggs/master/django/site_media/egg/None/EggDriver.JPG -------------------------------------------------------------------------------- /django/site_media/egg/None/EggGolum.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/EasterEggs/master/django/site_media/egg/None/EggGolum.JPG -------------------------------------------------------------------------------- /django/site_media/egg/None/EggPanda.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/EasterEggs/master/django/site_media/egg/None/EggPanda.JPG -------------------------------------------------------------------------------- /django/site_media/egg/None/EggRabbit.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/EasterEggs/master/django/site_media/egg/None/EggRabbit.JPG -------------------------------------------------------------------------------- /django/site_media/egg/None/EggScuba.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/EasterEggs/master/django/site_media/egg/None/EggScuba.JPG -------------------------------------------------------------------------------- /django/site_media/egg/None/EggShumi.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/EasterEggs/master/django/site_media/egg/None/EggShumi.PNG -------------------------------------------------------------------------------- /django/site_media/egg/None/EggSkater.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/EasterEggs/master/django/site_media/egg/None/EggSkater.JPG -------------------------------------------------------------------------------- /django/site_media/egg/None/Eggangry.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/EasterEggs/master/django/site_media/egg/None/Eggangry.JPG -------------------------------------------------------------------------------- /django/site_media/egg/None/Eggbatman.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/EasterEggs/master/django/site_media/egg/None/Eggbatman.JPG -------------------------------------------------------------------------------- /django/site_media/egg/None/Eggdisco.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/EasterEggs/master/django/site_media/egg/None/Eggdisco.JPG -------------------------------------------------------------------------------- /django/site_media/egg/None/Egggandaf.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/EasterEggs/master/django/site_media/egg/None/Egggandaf.JPG -------------------------------------------------------------------------------- /django/site_media/egg/None/Eggmarley.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/EasterEggs/master/django/site_media/egg/None/Eggmarley.JPG -------------------------------------------------------------------------------- /django/site_media/egg/None/Eggplant.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/EasterEggs/master/django/site_media/egg/None/Eggplant.JPG -------------------------------------------------------------------------------- /django/site_media/egg/None/Eggredou.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/EasterEggs/master/django/site_media/egg/None/Eggredou.JPG -------------------------------------------------------------------------------- /django/site_media/egg/None/SAM_2961.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/EasterEggs/master/django/site_media/egg/None/SAM_2961.JPG -------------------------------------------------------------------------------- /django/site_media/egg/None/SAM_2962.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/EasterEggs/master/django/site_media/egg/None/SAM_2962.JPG -------------------------------------------------------------------------------- /django/site_media/egg/None/SAM_2963.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/EasterEggs/master/django/site_media/egg/None/SAM_2963.JPG -------------------------------------------------------------------------------- /django/site_media/egg/None/SAM_2964.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/EasterEggs/master/django/site_media/egg/None/SAM_2964.JPG -------------------------------------------------------------------------------- /django/site_media/egg/None/SAM_2965.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/EasterEggs/master/django/site_media/egg/None/SAM_2965.JPG -------------------------------------------------------------------------------- /django/site_media/egg/None/SAM_2967.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/EasterEggs/master/django/site_media/egg/None/SAM_2967.JPG -------------------------------------------------------------------------------- /django/site_media/egg/None/SAM_2968.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/EasterEggs/master/django/site_media/egg/None/SAM_2968.JPG -------------------------------------------------------------------------------- /django/site_media/egg/None/SAM_2969.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/EasterEggs/master/django/site_media/egg/None/SAM_2969.JPG -------------------------------------------------------------------------------- /django/site_media/egg/None/SAM_2970.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/EasterEggs/master/django/site_media/egg/None/SAM_2970.JPG -------------------------------------------------------------------------------- /django/site_media/egg/None/SAM_2971.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/EasterEggs/master/django/site_media/egg/None/SAM_2971.JPG -------------------------------------------------------------------------------- /django/site_media/egg/None/SAM_2972.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/EasterEggs/master/django/site_media/egg/None/SAM_2972.JPG -------------------------------------------------------------------------------- /django/site_media/egg/None/SAM_2973.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/EasterEggs/master/django/site_media/egg/None/SAM_2973.JPG -------------------------------------------------------------------------------- /django/site_media/egg/None/SAM_2974.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/EasterEggs/master/django/site_media/egg/None/SAM_2974.JPG -------------------------------------------------------------------------------- /django/site_media/egg/None/SAM_2975.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/EasterEggs/master/django/site_media/egg/None/SAM_2975.JPG -------------------------------------------------------------------------------- /django/site_media/egg/None/SAM_2976.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/EasterEggs/master/django/site_media/egg/None/SAM_2976.JPG -------------------------------------------------------------------------------- /django/site_media/egg/None/SAM_2978.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/EasterEggs/master/django/site_media/egg/None/SAM_2978.JPG -------------------------------------------------------------------------------- /django/site_media/egg/None/SAM_2979.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/EasterEggs/master/django/site_media/egg/None/SAM_2979.JPG -------------------------------------------------------------------------------- /django/site_media/egg/None/SAM_2980.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/EasterEggs/master/django/site_media/egg/None/SAM_2980.JPG -------------------------------------------------------------------------------- /django/site_media/egg/None/SAM_2981.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/EasterEggs/master/django/site_media/egg/None/SAM_2981.JPG -------------------------------------------------------------------------------- /django/site_media/egg/None/SAM_2982.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/EasterEggs/master/django/site_media/egg/None/SAM_2982.JPG -------------------------------------------------------------------------------- /django/site_media/egg/None/SAM_2983.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/EasterEggs/master/django/site_media/egg/None/SAM_2983.JPG -------------------------------------------------------------------------------- /django/site_media/egg/None/SAM_2984.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/EasterEggs/master/django/site_media/egg/None/SAM_2984.JPG -------------------------------------------------------------------------------- /django/site_media/egg/None/SAM_2985.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/EasterEggs/master/django/site_media/egg/None/SAM_2985.JPG -------------------------------------------------------------------------------- /django/site_media/egg/None/SAM_2986.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/EasterEggs/master/django/site_media/egg/None/SAM_2986.JPG -------------------------------------------------------------------------------- /django/site_media/egg/None/SAM_2987.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/EasterEggs/master/django/site_media/egg/None/SAM_2987.JPG -------------------------------------------------------------------------------- /django/site_media/egg/None/SAM_2989.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/EasterEggs/master/django/site_media/egg/None/SAM_2989.JPG -------------------------------------------------------------------------------- /django/site_media/egg/None/SAM_2990.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/EasterEggs/master/django/site_media/egg/None/SAM_2990.JPG -------------------------------------------------------------------------------- /django/site_media/egg/None/SAM_2991.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/EasterEggs/master/django/site_media/egg/None/SAM_2991.JPG -------------------------------------------------------------------------------- /django/site_media/egg/None/SAM_2992.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/EasterEggs/master/django/site_media/egg/None/SAM_2992.JPG -------------------------------------------------------------------------------- /django/site_media/egg/None/SAM_2993.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/EasterEggs/master/django/site_media/egg/None/SAM_2993.JPG -------------------------------------------------------------------------------- /django/site_media/egg/None/SAM_2994.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/EasterEggs/master/django/site_media/egg/None/SAM_2994.JPG -------------------------------------------------------------------------------- /django/site_media/egg/None/SAM_2995.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/EasterEggs/master/django/site_media/egg/None/SAM_2995.JPG -------------------------------------------------------------------------------- /django/site_media/egg/None/SAM_2996.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/EasterEggs/master/django/site_media/egg/None/SAM_2996.JPG -------------------------------------------------------------------------------- /django/site_media/egg/None/SAM_2998.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/EasterEggs/master/django/site_media/egg/None/SAM_2998.JPG -------------------------------------------------------------------------------- /django/site_media/egg/None/SAM_2999.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/EasterEggs/master/django/site_media/egg/None/SAM_2999.JPG -------------------------------------------------------------------------------- /django/site_media/egg/None/SAM_3000.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/EasterEggs/master/django/site_media/egg/None/SAM_3000.JPG -------------------------------------------------------------------------------- /django/site_media/egg/None/SAM_3001.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/EasterEggs/master/django/site_media/egg/None/SAM_3001.JPG -------------------------------------------------------------------------------- /django/site_media/egg/None/SAM_3002.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/EasterEggs/master/django/site_media/egg/None/SAM_3002.JPG -------------------------------------------------------------------------------- /django/site_media/egg/None/SAM_3003.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/EasterEggs/master/django/site_media/egg/None/SAM_3003.JPG -------------------------------------------------------------------------------- /django/site_media/egg/None/SAM_3004.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/EasterEggs/master/django/site_media/egg/None/SAM_3004.JPG -------------------------------------------------------------------------------- /django/site_media/egg/None/SAM_3008.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/EasterEggs/master/django/site_media/egg/None/SAM_3008.JPG -------------------------------------------------------------------------------- /django/site_media/egg/None/eggichon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/EasterEggs/master/django/site_media/egg/None/eggichon.png -------------------------------------------------------------------------------- /django/site_media/egg/None/AGE_DE_GLACE.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/EasterEggs/master/django/site_media/egg/None/AGE_DE_GLACE.PNG -------------------------------------------------------------------------------- /django/site_media/egg/None/Eggcalibur.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/EasterEggs/master/django/site_media/egg/None/Eggcalibur.JPG -------------------------------------------------------------------------------- /django/site_media/egg/None/Eggjasmine.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/EasterEggs/master/django/site_media/egg/None/Eggjasmine.JPG -------------------------------------------------------------------------------- /django/site_media/egg/None/Egglicorne.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/EasterEggs/master/django/site_media/egg/None/Egglicorne.JPG -------------------------------------------------------------------------------- /django/site_media/egg/None/Eggsorcist.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/EasterEggs/master/django/site_media/egg/None/Eggsorcist.JPG -------------------------------------------------------------------------------- /django/site_media/egg/None/SHObf3GNGN-6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/EasterEggs/master/django/site_media/egg/None/SHObf3GNGN-6.png -------------------------------------------------------------------------------- /django/site_media/css/fonts/glyphicons-halflings-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/EasterEggs/master/django/site_media/css/fonts/glyphicons-halflings-regular.eot -------------------------------------------------------------------------------- /django/site_media/css/fonts/glyphicons-halflings-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/EasterEggs/master/django/site_media/css/fonts/glyphicons-halflings-regular.ttf -------------------------------------------------------------------------------- /django/site_media/css/fonts/glyphicons-halflings-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/EasterEggs/master/django/site_media/css/fonts/glyphicons-halflings-regular.woff -------------------------------------------------------------------------------- /django/site_media/css/fonts/glyphicons-halflings-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/EasterEggs/master/django/site_media/css/fonts/glyphicons-halflings-regular.woff2 -------------------------------------------------------------------------------- /django/eggcatch/apps.py: -------------------------------------------------------------------------------- 1 | from __future__ import unicode_literals 2 | 3 | from django.apps import AppConfig 4 | 5 | 6 | class EggcatchConfig(AppConfig): 7 | name = 'eggcatch' 8 | -------------------------------------------------------------------------------- /django/site_media/css/fonts/fonts/glyphicons-halflings-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/EasterEggs/master/django/site_media/css/fonts/fonts/glyphicons-halflings-regular.eot -------------------------------------------------------------------------------- /django/site_media/css/fonts/fonts/glyphicons-halflings-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/EasterEggs/master/django/site_media/css/fonts/fonts/glyphicons-halflings-regular.ttf -------------------------------------------------------------------------------- /django/site_media/css/fonts/fonts/glyphicons-halflings-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/EasterEggs/master/django/site_media/css/fonts/fonts/glyphicons-halflings-regular.woff -------------------------------------------------------------------------------- /django/site_media/css/fonts/fonts/glyphicons-halflings-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/EasterEggs/master/django/site_media/css/fonts/fonts/glyphicons-halflings-regular.woff2 -------------------------------------------------------------------------------- /django/site_media/egg/None/egg_mr__burns__eggcellent_by_cpsnewestproxy-d8ghdql.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nst/EasterEggs/master/django/site_media/egg/None/egg_mr__burns__eggcellent_by_cpsnewestproxy-d8ghdql.jpg -------------------------------------------------------------------------------- /django/sqpub/wsgi.py: -------------------------------------------------------------------------------- 1 | """ 2 | WSGI config for sqpub project. 3 | 4 | It exposes the WSGI callable as a module-level variable named ``application``. 5 | 6 | For more information on this file, see 7 | https://docs.djangoproject.com/en/1.10/howto/deployment/wsgi/ 8 | """ 9 | 10 | import os 11 | 12 | from django.core.wsgi import get_wsgi_application 13 | 14 | os.environ.setdefault("DJANGO_SETTINGS_MODULE", "sqpub.settings") 15 | 16 | application = get_wsgi_application() 17 | -------------------------------------------------------------------------------- /django/eggcatch/templates/players.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | 3 | {% block title %} SQPub Easter Eggs {% endblock %} 4 | 5 | {% block content %} 6 | 7 |

All {{ players.count }} Players

8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | {% for p in players %} 17 | 18 | 19 | 20 | 21 | 22 | {% endfor %} 23 |
NameEggsPoints
{{ p.name }}{{ p.number_of_eggs }}{{ p.score }}
24 | 25 | {% endblock %} 26 | -------------------------------------------------------------------------------- /django/eggcatch/templates/eggs_codes.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | 3 | {% block title %} SQPub Easter Eggs {% endblock %} 4 | 5 | {% block content %} 6 | 7 |

All {{ eggs.count }} Eggs QR-Codes

8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | {% for e in eggs %} 16 | 17 | 18 | 19 | 20 | 21 | {% endfor %} 22 |
NamePointsQR-Code
{{ e.name }}{{ e.points }}
23 |

24 | 25 | {% endblock %} 26 | -------------------------------------------------------------------------------- /django/eggcatch/admin.py: -------------------------------------------------------------------------------- 1 | from django.contrib import admin 2 | 3 | # Register your models here. 4 | 5 | from .models import Egg, Player, Catch 6 | 7 | #admin.site.register(Egg) 8 | admin.site.register(Player) 9 | admin.site.register(Catch) 10 | 11 | class EggAdmin(admin.ModelAdmin): 12 | list_display = ('image_tag', 'name', 'points', 'number_of_catches', 'description') 13 | list_display_links = ['name'] 14 | search_fields = ['name'] 15 | list_per_page = 100 16 | 17 | def image_tag(self, obj): 18 | if obj.image and hasattr(obj.image, 'url'): 19 | return u'' % obj.image.url 20 | return None 21 | image_tag.allow_tags = True 22 | image_tag.short_description = 'Image' 23 | 24 | admin.site.register(Egg, EggAdmin) 25 | -------------------------------------------------------------------------------- /django/eggcatch/templates/eggs.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | 3 | {% block title %} SQPub Easter Eggs {% endblock %} 4 | 5 | {% block content %} 6 | 7 |

All {{ eggs.count }} Eggs

8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | {% for e in eggs %} 18 | 19 | 24 | 25 | 27 | 29 | {% endfor %} 30 |
ImageNameCatchesPointsDescription
20 | {% if e.image %} 21 | 22 | {% endif %} 23 | {{ e.name }}{{ e.number_of_catches }} 26 | {{ e.points }}{{ e.description }} 28 |
31 |

32 | 33 | {% endblock %} 34 | -------------------------------------------------------------------------------- /django/manage.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | import os 3 | import sys 4 | 5 | if __name__ == "__main__": 6 | os.environ.setdefault("DJANGO_SETTINGS_MODULE", "sqpub.settings") 7 | try: 8 | from django.core.management import execute_from_command_line 9 | except ImportError: 10 | # The above import may fail for some other reason. Ensure that the 11 | # issue is really that Django is missing to avoid masking other 12 | # exceptions on Python 2. 13 | try: 14 | import django 15 | except ImportError: 16 | raise ImportError( 17 | "Couldn't import Django. Are you sure it's installed and " 18 | "available on your PYTHONPATH environment variable? Did you " 19 | "forget to activate a virtual environment?" 20 | ) 21 | raise 22 | execute_from_command_line(sys.argv) 23 | -------------------------------------------------------------------------------- /django/sqpub/urls.py: -------------------------------------------------------------------------------- 1 | """sqpub URL Configuration 2 | 3 | The `urlpatterns` list routes URLs to views. For more information please see: 4 | https://docs.djangoproject.com/en/1.10/topics/http/urls/ 5 | Examples: 6 | Function views 7 | 1. Add an import: from my_app import views 8 | 2. Add a URL to urlpatterns: url(r'^$', views.home, name='home') 9 | Class-based views 10 | 1. Add an import: from other_app.views import Home 11 | 2. Add a URL to urlpatterns: url(r'^$', Home.as_view(), name='home') 12 | Including another URLconf 13 | 1. Import the include() function: from django.conf.urls import url, include 14 | 2. Add a URL to urlpatterns: url(r'^blog/', include('blog.urls')) 15 | """ 16 | from django.conf.urls import include, url 17 | from django.contrib import admin 18 | 19 | urlpatterns = [ 20 | url(r'^admin/', admin.site.urls), 21 | url(r'', include('eggcatch.urls')), 22 | ] 23 | -------------------------------------------------------------------------------- /django/eggcatch/templates/player_detail.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | 3 | {% block title %} {{ player.name }} {% endblock %} 4 | 5 | {% block content %} 6 | 7 |

8 | 🐰 {{ player.name }} 9 | 10 | {{ player.number_of_eggs }} egg{{ player.number_of_eggs|pluralize }}, {{ player.score }} points 11 | 12 |

13 |
14 | 15 |

Catches

16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | {% for c in catches %} 24 | 25 | 28 | 31 | 34 | 35 | {% endfor %} 36 |
EggPointsDate
26 | {{ c.egg.name }} 27 | 29 | {{ c.egg.points }} 30 | 32 | {{ c.date }} 33 |
37 | 38 |

Back to Leaderboard

39 | 40 | {% endblock %} 41 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2017 Nicolas Seriot 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /django/site_media/css/sqpub.css: -------------------------------------------------------------------------------- 1 | body { 2 | background-color: red; 3 | background: url('../img/bg2-dark.jpg') no-repeat center center fixed; 4 | -webkit-background-size: cover; 5 | -moz-background-size: cover; 6 | -o-background-size: cover; 7 | background-size: cover; 8 | min-height: 100%; 9 | padding: 0px 10px; 10 | } 11 | 12 | .no-padding { 13 | padding: 0px; 14 | } 15 | 16 | .navbar-wrapper { 17 | position: absolute; 18 | top: 0; 19 | right: 0; 20 | left: 0; 21 | z-index: 20; 22 | } 23 | 24 | .navbar-wrapper > .container { 25 | padding-right: 0; 26 | padding-left: 0; 27 | } 28 | .navbar-wrapper .navbar { 29 | padding-right: 15px; 30 | padding-left: 15px; 31 | } 32 | .navbar-wrapper .navbar .container { 33 | width: auto; 34 | } 35 | 36 | .main { 37 | margin-top: 100px; 38 | padding-left: 25px; 39 | padding-right: 25px; 40 | padding-bottom: 30px; 41 | background-color: rgba(255, 255, 255, 0.92); 42 | border-top-left-radius: 4px; 43 | border-top-right-radius: 4px; 44 | } 45 | 46 | @media (min-width: 768px) { 47 | .navbar-wrapper { 48 | margin-top: 20px; 49 | } 50 | .navbar-wrapper .navbar { 51 | padding-right: 0; 52 | padding-left: 0; 53 | } 54 | .navbar-wrapper .navbar { 55 | border-radius: 4px; 56 | } 57 | .main { 58 | margin-top: 140px; 59 | } 60 | } 61 | -------------------------------------------------------------------------------- /django/eggcatch/templates/faq.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | 3 | {% block title %} SQPub Easter Eggs - FAQ {% endblock %} 4 | 5 | {% block content %} 6 | 7 |

SQPub Easter Eggs - FAQ

8 |
9 | 10 |

How to play?

11 | 12 |

Catch virtual eggs by scanning QR-codes

13 | 14 |

When does the game start and end?

15 | 16 |

The eggs can be caught from Wednesday 5th April to Wednesday 19th April.

17 | 18 |

A closing ceremony will take place at SQ Pub that evening.

19 | 20 |

What do we win?

21 | 22 |

Suprizes.

23 | 24 |

Where do I find eggs?

25 | 26 |

Eggs can be found in SQ Pub, cafeteria and parking. No eggs will be placed in offices and common areas.

27 | 28 |

Can I give my eggs to someone else?

29 | 30 |

Yes. An egg can be caught once by each player.

31 | 32 |

Can I propose new eggs?

33 | 34 |

You can submit your own eggs to the organizers. If they're cute and fun, they'll probably get part of the game.

35 | 36 |

Who runs this game?

37 | 38 |

The game is organized by Caroline from SQ Pub and Nicolas S. from SWD.

39 | 40 |

Feel free to ask them any question regarding the game you may have.

41 | 42 |

Is there an API?

43 | 44 |

Yes!

45 | 46 | {% endblock %} 47 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Byte-compiled / optimized / DLL files 2 | __pycache__/ 3 | *.py[cod] 4 | *$py.class 5 | 6 | # C extensions 7 | *.so 8 | 9 | # Distribution / packaging 10 | .Python 11 | env/ 12 | build/ 13 | develop-eggs/ 14 | dist/ 15 | downloads/ 16 | eggs/ 17 | .eggs/ 18 | lib/ 19 | lib64/ 20 | parts/ 21 | sdist/ 22 | var/ 23 | *.egg-info/ 24 | .installed.cfg 25 | *.egg 26 | 27 | # PyInstaller 28 | # Usually these files are written by a python script from a template 29 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 30 | *.manifest 31 | *.spec 32 | 33 | # Installer logs 34 | pip-log.txt 35 | pip-delete-this-directory.txt 36 | 37 | # Unit test / coverage reports 38 | htmlcov/ 39 | .tox/ 40 | .coverage 41 | .coverage.* 42 | .cache 43 | nosetests.xml 44 | coverage.xml 45 | *,cover 46 | .hypothesis/ 47 | 48 | # Translations 49 | *.mo 50 | *.pot 51 | 52 | # Django stuff: 53 | *.log 54 | local_settings.py 55 | 56 | # Flask stuff: 57 | instance/ 58 | .webassets-cache 59 | 60 | # Scrapy stuff: 61 | .scrapy 62 | 63 | # Sphinx documentation 64 | docs/_build/ 65 | 66 | # PyBuilder 67 | target/ 68 | 69 | # IPython Notebook 70 | .ipynb_checkpoints 71 | 72 | # pyenv 73 | .python-version 74 | 75 | # celery beat schedule file 76 | celerybeat-schedule 77 | 78 | # dotenv 79 | .env 80 | 81 | # virtualenv 82 | venv/ 83 | ENV/ 84 | 85 | # Spyder project settings 86 | .spyderproject 87 | 88 | # Rope project settings 89 | .ropeproject 90 | -------------------------------------------------------------------------------- /django/eggcatch/templates/combos.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | 3 | {% block title %} SQPub Easter Eggs {% endblock %} 4 | 5 | {% block content %} 6 | 7 |

Combos

8 |
9 | 10 |

Caro + Nicolas

11 |

Simpsons

12 |

Countries

13 |

Money Money

14 | 15 |

{{ eggs.count }} Eggs

16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | {% for e in eggs %} 26 | 27 | 32 | 33 | 35 | 37 | {% endfor %} 38 |
ImageNameCatchesPointsDescription
28 | {% if e.image %} 29 | 30 | {% endif %} 31 | {{ e.name }}{{ e.number_of_catches }} 34 | {{ e.points }}{{ e.description }} 36 |
39 | 40 |

{{ players.count }} Winners

41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | {% for p in winners %} 49 | 50 | 51 | 52 | 53 | 54 | {% endfor %} 55 |
NameEggsPoints
{{ p.name }}{{ p.number_of_eggs }}{{ p.score }}
56 | 57 | {% endblock %} 58 | -------------------------------------------------------------------------------- /django/eggcatch/templates/egg_detail.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | 3 | {% block title %} 🥚 {{ egg.name }} {% endblock %} 4 | 5 | {% block content %} 6 | 7 |

8 | {{ egg.name }} 9 | {{ egg.points }} points 10 |

11 | 12 |

{{ egg.description }}

13 | 14 | {% if egg.is_toxic %} 15 | {% load static %} 16 | Toxic Egg 17 | {% endif %} 18 | 19 | {% if egg.image %} 20 | 21 | {% endif %} 22 | 23 |
24 | 25 | {% if catch %} 26 | {% else %} 27 | 28 |

29 | {% if allow_catch %} 30 | {% if player %} 31 | Catch for {{ player.name }} 32 | {% else %} 33 | Enter a name that identifies yourself. 34 | {% endif %} 35 | {% endif %} 36 | 37 | {% if allow_catch %} 38 |

39 | {% if player %} 40 | 41 | {% else %} 42 | Player: 43 | {% endif %} 44 | {% csrf_token %} 45 | 46 | 47 |
48 |

49 | {% endif %} 50 | 51 | {% endif %} 52 | 53 | {% if player %} 54 | 55 | {% if just_caught %} 56 |

NEW CATCH!!!

57 | {% elif catch %} 58 |

Caught {{ catch.date }}

59 | {% endif %} 60 | 61 | {% endif %} 62 | 63 |

{{ egg.name }} was caught by {{ catches.count }} players.

64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | {% for c in catches %} 72 | 73 | 74 | 75 | 76 | 77 | {% endfor %} 78 |
DateEggPlayer
{{c.date}}{{ c.egg.name }}{{ c.player.name }}
79 | 80 | {% if player %} 81 |

Back to Leaderboard

82 | {% endif %} 83 | 84 | {% endblock %} 85 | -------------------------------------------------------------------------------- /django/eggcatch/urls.py: -------------------------------------------------------------------------------- 1 | from django.conf.urls import url 2 | 3 | from . import views 4 | 5 | from django.conf.urls.static import static 6 | from django.conf import settings 7 | 8 | urlpatterns = [ 9 | url(r'^$', views.index, name='index'), 10 | url(r'^faq/$', views.faq, name='faq'), 11 | url(r'^eggs/$', views.eggs, name='eggs'), 12 | url(r'^eggs_codes/$', views.eggs_codes, name='eggs_codes'), 13 | url(r'^egg/catch_action/$', views.catch_action, name='catch_action'), 14 | url(r'^egg/(?P[a-z0-9]{32})/$', views.egg_detail_from_code, name='egg'), 15 | url(r'^egg/(?P[0-9]+)/$', views.egg_detail_from_id, name='egg'), 16 | url(r'^player/(?P[0-9]+)/$', views.player_detail, name='player'), 17 | url(r'^player/eurochicken/(?P[a-z0-9]{32})/$', views.player_eurochicken, name='player_eurochicken'), 18 | url(r'^players/$', views.players, name='players'), 19 | url(r'^logout/$', views.logout, name='logout'), 20 | 21 | url(r'^combos/.*$', views.combos, name='combos'), 22 | 23 | url(r'^api/$', views.api_description, name='api_description'), 24 | url(r'^api/players/name/(?P.*)/$', views.api_player_name, name='api_player_name'), 25 | url(r'^api/catch_create/$', views.api_catch_create, name='api_catch_create'), 26 | url(r'^api/egg/(?P[a-z0-9]{32})/$', views.api_egg_code, name='api_egg_code'), 27 | url(r'^api/egg/(?P[0-9]+)/$', views.api_egg_id, name='api_egg_id'), 28 | url(r'^api/player/(?P[0-9]+)/catches/$', views.api_player_catches, name='api_player_catches'), 29 | url(r'^api/player/(?P[0-9]+)/$', views.api_player, name='api_player'), 30 | url(r'^api/eggs/$', views.api_eggs, name='api_eggs'), 31 | url(r'^api/players/$', views.api_players, name='api_players'), 32 | url(r'^api/catches/$', views.api_catches, name='api_catches'), 33 | 34 | url(r'^api/player/(?P[0-9]+)/eurochicken/$', views.api_player_eurochicken, name='api_player_eurochicken'), 35 | url(r'^api/player/(?P[0-9]+)/eurochicken/(?P[a-z0-9]{32})/$', views.api_player_eurochicken_catch, name='api_player_eurochicken_catch') 36 | ] 37 | 38 | urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT) 39 | 40 | urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) 41 | -------------------------------------------------------------------------------- /django/eggcatch/templates/index.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | 3 | {% block title %} SQPub Easter Eggs {% endblock %} 4 | 5 | {% block content %} 6 | 7 |

SQ Pub Easter Eggs

8 |
9 | 10 | {% if player %} 11 | 12 |

🥚 Latest catches

13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | {% for c in catches %} 21 | 22 | 23 | 24 | 25 | 26 | {% endfor %} 27 |
DateEggPlayer
{{c.date}}{{ c.egg.name }}{{ c.player.name }}
28 | 29 |

🏅 Leaderboard

30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | {% for p in players_by_eggs_and_score %} 39 | 40 | 41 | 42 | 43 | 44 | 45 | {% endfor %} 46 |
PlayerEggsScore
{{ forloop.counter }}{{ p.name }}{{ p.number_of_eggs }}{{ p.score }}
47 | 48 | {% if player.egg_eurochicken %} 49 |

🐔 EuroChicken: Pickup {{ player.egg_eurochicken.name }}

50 |

{% if player.egg_eurochicken.image %}{% endif %}

51 | {% else %} 52 |

🐔 EuroChicken

53 |

Next EuroChicken: {{ player.next_eurochicken_start }}

54 |

EuroChicken will let you pick a random egg among all the ones that were already caught.

55 | {% endif %} 56 | 57 |
58 | 59 |

Playing as {{ player.name }}, {{ player.number_of_eggs }} egg{{ player.number_of_eggs|pluralize }}, {{ player.score }} points.

60 | 61 |

[All Players] [All Eggs] [REST API]

62 | 63 |

[Expo Mobile App] by Stéphane G.

64 | 65 |

[Logout]

66 | 67 | {% else %} 68 | 69 |

70 | To win: 71 |

    72 |
  • scan the QR-codes starting April 5th 73 |
  • catch them all! 74 |
  • attend closing ceremony on Wednesday, 19th April 75 |
76 |

77 | 78 | {% endif %} 79 | 80 | 86 | 87 | {% endblock %} 88 | -------------------------------------------------------------------------------- /django/eggcatch/templates/base.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | {% block title %}{% endblock %} 12 | 13 | 14 | 15 |
16 | 17 | 18 | 60 | 61 |
62 | {% block content %} 63 | {% endblock %} 64 |
65 |
66 | 67 | 68 | 69 | 70 | 73 | 74 | 75 | 76 | -------------------------------------------------------------------------------- /django/sqpub/settings.py: -------------------------------------------------------------------------------- 1 | """ 2 | Django settings for sqpub project. 3 | 4 | Generated by 'django-admin startproject' using Django 1.10.5. 5 | 6 | For more information on this file, see 7 | https://docs.djangoproject.com/en/1.10/topics/settings/ 8 | 9 | For the full list of settings and their values, see 10 | https://docs.djangoproject.com/en/1.10/ref/settings/ 11 | """ 12 | 13 | import os 14 | 15 | # Build paths inside the project like this: os.path.join(BASE_DIR, ...) 16 | BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) 17 | 18 | 19 | # Quick-start development settings - unsuitable for production 20 | # See https://docs.djangoproject.com/en/1.10/howto/deployment/checklist/ 21 | 22 | # SECURITY WARNING: keep the secret key used in production secret! 23 | SECRET_KEY = 'm-+0!!@pamax2+hh$kn4$p5aysq^sn@m5s5*a*znw5j@c4e^@+' 24 | 25 | # SECURITY WARNING: don't run with debug turned on in production! 26 | DEBUG = True 27 | 28 | ALLOWED_HOSTS = [] 29 | 30 | 31 | # Application definition 32 | 33 | INSTALLED_APPS = [ 34 | 'eggcatch.apps.EggcatchConfig', 35 | 'django.contrib.admin', 36 | 'django.contrib.auth', 37 | 'django.contrib.contenttypes', 38 | 'django.contrib.sessions', 39 | 'django.contrib.messages', 40 | 'django.contrib.staticfiles', 41 | ] 42 | 43 | MIDDLEWARE = [ 44 | 'django.middleware.security.SecurityMiddleware', 45 | 'django.contrib.sessions.middleware.SessionMiddleware', 46 | 'django.middleware.common.CommonMiddleware', 47 | 'django.middleware.csrf.CsrfViewMiddleware', 48 | 'django.contrib.auth.middleware.AuthenticationMiddleware', 49 | 'django.contrib.messages.middleware.MessageMiddleware', 50 | 'django.middleware.clickjacking.XFrameOptionsMiddleware', 51 | ] 52 | 53 | ROOT_URLCONF = 'sqpub.urls' 54 | 55 | TEMPLATES = [ 56 | { 57 | 'BACKEND': 'django.template.backends.django.DjangoTemplates', 58 | 'DIRS': [], 59 | 'APP_DIRS': True, 60 | 'OPTIONS': { 61 | 'context_processors': [ 62 | 'django.template.context_processors.debug', 63 | 'django.template.context_processors.request', 64 | 'django.contrib.auth.context_processors.auth', 65 | 'django.contrib.messages.context_processors.messages', 66 | ], 67 | }, 68 | }, 69 | ] 70 | 71 | WSGI_APPLICATION = 'sqpub.wsgi.application' 72 | 73 | 74 | # Database 75 | # https://docs.djangoproject.com/en/1.10/ref/settings/#databases 76 | 77 | DATABASES = { 78 | 'default': { 79 | 'ENGINE': 'django.db.backends.sqlite3', 80 | 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), 81 | } 82 | } 83 | 84 | 85 | # Password validation 86 | # https://docs.djangoproject.com/en/1.10/ref/settings/#auth-password-validators 87 | 88 | AUTH_PASSWORD_VALIDATORS = [ 89 | { 90 | 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', 91 | }, 92 | { 93 | 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator', 94 | }, 95 | { 96 | 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator', 97 | }, 98 | { 99 | 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator', 100 | }, 101 | ] 102 | 103 | 104 | # Internationalization 105 | # https://docs.djangoproject.com/en/1.10/topics/i18n/ 106 | 107 | LANGUAGE_CODE = 'en-us' 108 | 109 | TIME_ZONE = 'CET' 110 | 111 | USE_I18N = True 112 | 113 | USE_L10N = True 114 | 115 | USE_TZ = True 116 | 117 | 118 | # Static files (CSS, JavaScript, Images) 119 | # https://docs.djangoproject.com/en/1.10/howto/static-files/ 120 | 121 | MEDIA_ROOT = '/Users/nst/Projects/SQPub/django/site_media/' 122 | MEDIA_URL = '/media/' 123 | 124 | STATIC_ROOT = os.path.join(BASE_DIR, 'static/') 125 | STATIC_URL = '/static/' 126 | 127 | HOSTNAME = "http://127.0.0.1:8000" 128 | #HOSTNAME = "http://sqpub.ch" 129 | -------------------------------------------------------------------------------- /django/eggcatch/models.py: -------------------------------------------------------------------------------- 1 | from __future__ import unicode_literals 2 | 3 | from django.db import models 4 | from django.utils.encoding import python_2_unicode_compatible 5 | from django.conf import settings 6 | 7 | import os 8 | import uuid 9 | import random 10 | import datetime 11 | from django.utils import timezone 12 | 13 | from PIL import Image 14 | 15 | from django.db.models import Count, Sum 16 | 17 | from django.contrib import admin 18 | 19 | # Create your models here. 20 | 21 | def get_image_path(instance, filename): 22 | return os.path.join("egg", str(instance.id), filename) 23 | 24 | @python_2_unicode_compatible # only if you need to support Python 2 25 | class Egg(models.Model): 26 | name = models.CharField(max_length=64, unique=True) 27 | points = models.SmallIntegerField(default=10) 28 | code = models.CharField(max_length=32, editable=True, blank=True, unique=True) 29 | description = models.CharField(max_length=256, blank=True) 30 | comment_private = models.CharField(max_length=256, blank=True) 31 | image = models.ImageField(upload_to=get_image_path, blank=True, null=True) 32 | 33 | #slug_field = 'code' 34 | #slug_url_kwarg = 'code' 35 | 36 | #def get_object(self): 37 | # return get_object_or_404(Egg, code=self.pk) 38 | 39 | @classmethod 40 | def random_caught_egg(self): 41 | all_caught_eggs = Egg.objects.exclude(catch=None) 42 | print(all_caught_eggs) 43 | if len(all_caught_eggs) == 0: 44 | print "-- -> None" 45 | return None 46 | 47 | random_egg = random.choice(all_caught_eggs) 48 | return random_egg 49 | 50 | def is_toxic(self): 51 | return self.points < 0 52 | 53 | def number_of_catches(self): 54 | catches = Catch.objects.filter(egg=self) 55 | return catches.count() 56 | 57 | def clean(self): 58 | if self.code == "": 59 | self.code = uuid.uuid4().hex 60 | 61 | def __str__(self): 62 | return self.name 63 | 64 | def image_url(self): 65 | if not self.image: 66 | return None 67 | return settings.HOSTNAME + self.image.url 68 | 69 | def json_public(self): 70 | return { 71 | 'id':self.id, 72 | 'name':self.name, 73 | 'points':self.points, 74 | 'description':self.description, 75 | 'number_of_catches':self.number_of_catches(), 76 | 'image_url':self.image_url() 77 | } 78 | 79 | @python_2_unicode_compatible # only if you need to support Python 2 80 | class Player(models.Model): 81 | name = models.CharField(max_length=64, unique=True) 82 | last_eurochicken = models.DateTimeField('last eurochicken', default=datetime.datetime.now, blank=True, null=True) 83 | egg_eurochicken = models.ForeignKey(Egg, on_delete=models.CASCADE, blank=True, null=True) 84 | code_eurochicken = models.CharField(max_length=32, editable=True, blank=True) 85 | 86 | def setup_eurochicken_if_needed(self): 87 | next_ec = self.next_eurochicken_start() 88 | #print "--------- next_ec:", next_ec 89 | do_setup = timezone.now() > next_ec 90 | if do_setup and self.egg_eurochicken == None: 91 | self.egg_eurochicken = Egg.random_caught_egg() 92 | self.code_eurochicken = uuid.uuid4().hex 93 | self.save() 94 | #print "--------- egg_eurochicken", self.egg_eurochicken 95 | #print "-- has?", player.has_egg(free_egg) 96 | 97 | def pickup_eurochicken_catch(self, code): 98 | 99 | if code != self.code_eurochicken: 100 | print "-- bad ec code:", code 101 | return 102 | 103 | c = None 104 | just_caught = False 105 | 106 | if self.egg_eurochicken != None and self.egg_eurochicken not in self.eggs(): 107 | c = Catch() 108 | c.player = self 109 | c.egg = self.egg_eurochicken 110 | c.date = datetime.datetime.now() 111 | c.save() 112 | just_caught = True 113 | elif self.egg_eurochicken != None: 114 | c = Catch.objects.filter(player=self, egg=self.egg_eurochicken).first() 115 | else: 116 | pass 117 | 118 | self.egg_eurochicken = None 119 | self.hash_eurochicken = None 120 | self.last_eurochicken = datetime.datetime.now() 121 | self.save() 122 | 123 | return (c, just_caught) 124 | 125 | def last_eurochicken_for_seconds(self): 126 | no_ec_for = timezone.now() - self.last_eurochicken 127 | return no_ec_for.seconds 128 | 129 | def next_eurochicken_start(self): 130 | return self.last_eurochicken + datetime.timedelta(hours=2) 131 | 132 | def has_egg(self, egg): 133 | qs = Catch.objects.filter(player=self, egg=egg) 134 | return len(qs) > 0 135 | 136 | def has_eggs(self, the_eggs): 137 | if len(the_eggs) == 0: 138 | return False 139 | 140 | for e in the_eggs: 141 | if not self.has_egg(e): 142 | return False 143 | return True 144 | 145 | def eggs(self): 146 | return Egg.objects.filter(catch__player=self) 147 | 148 | def score(self): 149 | d = Player.objects.filter(id=self.id).annotate(score=Sum('catch__egg__points')).values('score')[0] 150 | return d['score'] 151 | 152 | def catches(self): 153 | return Catch.objects.filter(player=self).order_by('date') 154 | 155 | def number_of_eggs(self): 156 | return self.catch_set.all().count() 157 | 158 | def __str__(self): 159 | return self.name 160 | 161 | def json_public(self): 162 | return {'id': self.id, 'name':self.name, 'score':self.score(), 'number_of_eggs':self.number_of_eggs()} 163 | 164 | @python_2_unicode_compatible # only if you need to support Python 2 165 | class Catch(models.Model): 166 | egg = models.ForeignKey(Egg, on_delete=models.CASCADE) 167 | player = models.ForeignKey(Player, on_delete=models.CASCADE) 168 | date = models.DateTimeField('catch date') 169 | 170 | def json_public(self): 171 | return {'id':self.id, 'date':self.date, 'egg_id':self.egg.id, 'player_id':self.player_id} 172 | 173 | def json_public_full(self): 174 | return {'id':self.id, 'date':self.date, 'egg':self.egg.json_public(), 'player':self.player.json_public()} 175 | 176 | def __str__(self): 177 | return self.date.strftime('%Y-%m-%d %H:%M:%S') + " " + self.player.name + " " + self.egg.name 178 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # EasterEggs 2 | A social game that consists in catching QR-codes 3 | 4 | "SQPub Easter Eggs" is an online, social game that ran for two weeks during the Easter period. 5 | 6 | The game was made as an animation for our corporate pub. 7 | 8 | Basically, the game is a virtual egg catch, where eggs consist in an egg-shaped piece of paper with a printed QR code inside. 9 | 10 | The QR code contains the secret URL of an egg, such as `http://sqpub.ch/egg/6059abf965fc4ca4a612ee9972001b57`. Opening this URL lets the player see the egg name / points / image and actually "catch" the egg. The egg can still be caught by other players. 11 | 12 | Every day, the barmaid prints and hides a few eggs in the company premises such as the pub, the cafeteria, the terrace or the stairs. 13 | 14 | 15 | 16 | 17 | In order to play, people just need to scan an egg. If they never played before, they have to enter a nickname. 18 | 19 | From there, players can access the whole web site and check the leaderboard, the latest catches, other player's eggs and also the list of players that caught a specific egg. 20 | 21 | From time to time, the leaderboard was displayed in a big screen in the cafeteria. 22 | 23 | Also, we tried to add new stuff regularly to keep the game interesting. 24 | 25 | 26 | 27 | For the record, here is a rough chronology of what we did. 28 | 29 | | Date | Description | 30 | | ------ | ----------- | 31 | | 2017-03-27 | Testing week
A handful of testers had access to both sample code and the admin part. They could discuss and report issue through a WhatsApp group. At the end of the test period, their profiles were cleared and the admin password was changed. | 32 | | 2017-04-04 | Game announced by email to the whole company | 33 | | 2017-04-05 | Game starts | 34 | | 2017-04-07 | REST API
I implemented a REST API, so that players could build their own tools. Someone built an Expo mobile app https://expo.io/@onigoetz/egg-hunt. In particular, this app lets players catch eggs and store them locally before sending them to the server, in order to delay the catch appearance in the leaderboard. | 35 | | 2017-04-09 | Added list of all eggs + list of all players | 36 | | 2017-04-10 | Giant egg displayed on cafeteria screen | 37 | | 2017-04-10 | New web design using Bootstrap | 38 | | 2017-04-12 | Fox steal eggs (not published)
The idea was that an egg catch would randomly turn into a fox, that would steal or break one of your eggs. | 39 | | 2017-04-13 | Follow-up email to the whole company | 40 | | 2017-04-13 | EuroChicken lottery
I added this feature to meet the following needs: 1) I wanted the players to be able to play during the 4 days of the Easter week end, when most people were not present at work and 2) I wanted to flatten the leaderboard and help the players with just a couple of eggs. After a fixed delay (2 hours the 1st day, 8 hours after) EuroChicken gives you an egg picked randomly among all the eggs that were already caught. The lottery helped in balahadn't caught yet. | 41 | | 2017-04-19 | List combo winners (sets of eggs that go together, eg. the Simpson family members, etc) | 42 | | 2017-04-19 | Totem roulette (not published)
The idea here was to provide a giant egg on top of a totem. During the closing ceremony, people would have the choice to scan it and randomly win or lose some eggs. We chose not to do it because we did not find a fair rule, and also because destructive actions should not be possible when playing on behalf of other players. | 43 | | 2017-04-20 | Game ends
Closing ceremony at the pub. | 44 | 45 | 46 | 47 | #### Authentication 48 | 49 | An interesting characteristic of the game is that players are identified, but not authenticated. That is, they have no password, they only declare their name, so everybody can play on behalf of others. 50 | 51 | As a result, it was difficult to add cool but destructive features such as a fox breaking eggs or eggs with negative points. 52 | 53 | But overall, the lack of authentication was a key part of the quick onboarding and the whole game simplicity. 54 | 55 | #### Presentation 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | We observed that the structure of the main page (Latest Catches, Leaderbord and EuroChicken) was critical to the game success. 64 | 65 | Indeed, the first table lists the 5 last catches. Players would check it carefully, because when they saw very recent catches, they looked around and tried to spot the catchers and guess where the eggs were. 66 | 67 | Also, displaying the top 15 players does exacerbate the competition, since winners don't want to lose their rank. 68 | 69 | Finally, displaying the EuroChicken countdown on the main page was an efficient incentive to make people check the main page regularly. 70 | 71 | Regarding the design / CSS aspect, I started by including `https://unpkg.com/awsm.css/dist/awsm.min.cs` which is a very simple and effective way to set a minimal style to your vanilla HTML. But someone told me it was ugly, and one of our trainees proposed that we use Bootstrap. 72 | 73 | #### Player Strategies 74 | 75 | Players developed unexpected strategies. 76 | 77 | Some of them kept the URLs, either to trade them against with other players, or to delay the catch just to deceive other players. 78 | 79 | #### Technology and Source Code 80 | 81 | The technology stack is a GoDaddy server running the Django / SQLite. 82 | 83 | QR codes are an external API to display QR codes: 84 | 85 | https://api.qrserver.com/v1/create-qr-code/?size=150x150&data=http://sqpub.ch/egg/a9d526314457402187b6e1aa8f4f2e02 86 | 87 | Altogether, server and domain name did cost 60 CHF for one year, which is very little money compared to all the fun we had. 88 | 89 | The whole source code is available on https://github.com/nst/EasterEggs 90 | 91 | #### Conclusion 92 | 93 | Here are some key figures to support everyone's opinion that the game was an unexpected success. 94 | 95 | - 60 players cought 2 or more eggs 96 | - 1305 catches overall 97 | - the pub was crowded for the closing ceremony a Wednesday evening 98 | 99 | It was a great lot of fun to see people going crazy about hunting a worthless but scarce 32 bits hashes. People who had never talked before started chatting, exchanging hints and discussing about the game. 100 | 101 | #### Next Year 102 | 103 | Next year, I intend to run a variation of this game, but with the thrill of the "Survivor" or "Koh Lanta" TV shows. 104 | 105 | Players will typically be split into the red and the yellow teams. From there, you can imagine every kind of sadistic mutation among teams, like each week the two worse hunters, or less voted hunters, change team with their eggs. Each day or so, a challenge or a new rule could help spicing up the game. I have 300+ days to think about it. 106 | 107 | #### Code 108 | 109 | Run the project on your machine: `python manage.py runserver` 110 | 111 | Database credentials: `sqpub` / `changeme123` 112 | -------------------------------------------------------------------------------- /django/eggcatch/templates/api.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | 3 | {% block title %} SQPub Easter Eggs - REST API {% endblock %} 4 | 5 | {% block content %} 6 | 7 |

SQPub Easter Eggs - REST API

8 | 9 |

10 |

    11 |
  1. Catch an egg 12 |
  2. Query players by name 13 |
  3. Players list 14 |
  4. Player detail 15 |
  5. Eggs list 16 |
  6. Egg detail by id 17 |
  7. Egg detail by code 18 |
  8. Egg detail 19 |
  9. Catches list for player 20 |
  10. EuroChicken 21 |
  11. EuroChicken Catch 22 |
23 |

24 | 25 |

26 | 1. Catch an egg
27 | POST /api/catch_create/ 28 |

29 | 30 |

Sample request and response:

31 | 32 |
curl -X POST \
 33 | -F "player_id=75" \
 34 | -F "egg_code=453361b74ccf47fcb9e05ea60c56746b" \
 35 | "http://sqpub.ch/api/catch_create/"
 36 | 
 37 | {
 38 |   "catch": {
 39 |     "date": "2017-04-05T08:34:41.250Z", 
 40 |     "player": {
 41 |       "number_of_eggs": 22, 
 42 |       "score": 1280, 
 43 |       "id": 68, 
 44 |       "name": "nst021"
 45 |     }, 
 46 |     "egg": {
 47 |       "number_of_catches": 37, 
 48 |       "points": 30, 
 49 |       "image_url": "http://sqpub.ch/media/egg/None/SAM_2964.JPG", 
 50 |       "name": "EggBob", 
 51 |       "description": ""
 52 |     }
 53 |   }, 
 54 |   "is_new_catch": false
 55 | }
56 | 57 |

Sample errors:

58 | 59 |
HTTP 400 {"error_message":"player_id POST param is missing"}
 60 | HTTP 400 {"error_message":"egg_code POST param is missing"}
 61 | 
 62 | HTTP 404 {"error_message":"player with id 123 not found"}
 63 | HTTP 404 {"error_message":"egg with code 123 not found"}
64 | 65 |

66 | 2. Query players by name
67 | GET /api/players/name/:PLAYER_NAME/ 68 |

69 | 70 |

Sample request and response:

71 | 72 |
curl "http://sqpub.ch/api/players/name/SQKaf/"
 73 | 
 74 | [{"eggs": 3, "score": 130, "id": 75, "name": "SQKaf"}]
 75 | 
76 | 77 |

78 | 3. Players List
79 | GET /api/players/ 80 |

81 | 82 |

Sample request and response:

83 | 84 |
curl "http://sqpub.ch/api/players/"
 85 | 
 86 | [
 87 |   {
 88 |     "score": 15, 
 89 |     "number_of_eggs": 1, 
 90 |     "id": 1, 
 91 |     "name": "myself"
 92 |   }, 
 93 |   {
 94 |     "score": 50, 
 95 |     "number_of_eggs": 4, 
 96 |     "id": 2, 
 97 |     "name": "asd"
 98 |   }
 99 | ]
100 | 
101 | 102 |

103 | 4. Player detail
104 | GET /api/player/:ID/ 105 |

106 | 107 |

Sample request and response:

108 | 109 |
curl "http://sqpub.ch/api/player/75/"
110 | 
111 | {
112 |   "score": 130, 
113 |   "number_of_eggs": 3, 
114 |   "id": 75, 
115 |   "name": "SQKaf"
116 | }
117 | 
118 | 119 |

Sample error:

120 | 121 |
HTTP 404 {"error_message":"player with id 123 not found"}
122 | 123 |

124 | 5. Eggs List
125 | GET /api/eggs/ 126 |

127 | 128 |

Sample request and response:

129 | 130 |
curl "http://sqpub.ch/api/eggs/"
131 | 
132 | [
133 |   {
134 |     "description": "", 
135 |     "number_of_catches": 1, 
136 |     "points": 10, 
137 |     "image_url": "http://sqpub.ch/media/egg/x/test.png", 
138 |     "id": 4, 
139 |     "name": "test"
140 |   }, 
141 |   {
142 |     "description": "bla bla bla", 
143 |     "number_of_catches": 1, 
144 |     "points": 10, 
145 |     "image_url": null, 
146 |     "id": 5, 
147 |     "name": "miaou"
148 |   }
149 | ]
150 | 
151 | 152 |

153 | 6. Egg detail by id
154 | GET /api/egg/:ID/ 155 |

156 | 157 |

Sample request and response:

158 | 159 |
curl "http://sqpub.ch/api/egg/57/"
160 | 
161 | {
162 |   "description": "", 
163 |   "number_of_catches": 35, 
164 |   "points": 50, 
165 |   "image_url": "http://sqpub.ch/media/egg/None/egg_mr__burns__eggcellent_by_cpsnewestproxy-d8ghdql.jpg", 
166 |   "id": 57, 
167 |   "name": "Eggcellent"
168 | }
169 | 170 |

Sample error:

171 | 172 |
HTTP 404 {"error_message":"egg with id 123 not found"}
173 | 174 |

175 | 7. Egg detail by code
176 | GET /api/egg/:CODE/ 177 |

178 | 179 |

Sample request and response:

180 | 181 |
curl "http://sqpub.ch/api/egg/39295ba0f55548258dfffcbbd54acafd/"
182 | 
183 | {
184 |   "description": "", 
185 |   "number_of_catches": 35, 
186 |   "points": 50, 
187 |   "image_url": "http://sqpub.ch/media/egg/None/egg_mr__burns__eggcellent_by_cpsnewestproxy-d8ghdql.jpg", 
188 |   "id": 57, 
189 |   "name": "Eggcellent"
190 | }
191 | 192 |

Sample error:

193 | 194 |
HTTP 404 {"error_message":"egg with code 39295ba0f55548258dfffcbbd54acafd not found"}
195 | 196 |

197 | 8. Catches List
198 | GET /api/catches/ 199 |

200 | 201 |

Sample request and response:

202 | 203 |
curl "http://sqpub.ch/api/catches/"
204 | 
205 | [
206 |   {
207 |     "id": 1, 
208 |     "player_id": 7, 
209 |     "date": "2017-04-07T19:28:52.855Z", 
210 |     "egg_id": 3
211 |   }, 
212 |   {
213 |     "id": 2, 
214 |     "player_id": 4, 
215 |     "date": "2017-03-27T18:32:59.706Z", 
216 |     "egg_id": 5
217 |   }
218 | ]
219 | 
220 | 221 |

222 | 9. Catches List for Player
223 | GET /api/catches/player/:ID/catches/ 224 |

225 | 226 |

Sample request and response:

227 | 228 |
curl "http://sqpub.ch/api/player/2/catches/"
229 | 
230 | [
231 |   {
232 |     "id": 1, 
233 |     "player_id": 2, 
234 |     "date": "2017-04-07T19:28:52.855Z", 
235 |     "egg_id": 3
236 |   }, 
237 |   {
238 |     "id": 2, 
239 |     "player_id": 2, 
240 |     "date": "2017-03-27T18:32:59.706Z", 
241 |     "egg_id": 5
242 |   }
243 | ]
244 | 
245 | 246 |

247 | 10. EuroChicken
248 | GET /api/player/:ID/eurochicken/ 249 |

250 | 251 |

Sample request and response when EuroChicken has not started:

252 | 253 |
curl "http://sqpub.ch/api/player/12/eurochicken/"
254 | 
255 | {
256 |   "proposed_egg": null, 
257 |   "proposed_egg_catch_url": null, 
258 |   "next_eurochicken_start": "2017-04-13T12:59:02Z"
259 | }
260 | 
261 | 262 |

Sample request and response when EuroChicken has started:

263 | 264 |
curl "http://sqpub.ch/api/player/12/eurochicken/"
265 | 
266 | {
267 |   "proposed_egg": {
268 |     "description": "", 
269 |     "number_of_catches": 5, 
270 |     "points": 15, 
271 |     "image_url": null, 
272 |     "id": 2, 
273 |     "name": "Eggcellent"
274 |   }, 
275 |   "proposed_egg_catch_code": "b315e70fe0bc458597870c05c3fe71fa", 
276 |   "next_eurochicken_start": "2017-04-13T10:55:02Z"
277 | }
278 | 
279 | 280 |

Sample error:

281 | 282 |
HTTP 404 {"error_message":"player with id 12 not found"}
283 | 284 |

285 | 11. EuroChicken Catch
286 | GET /api/player/:ID/eurochicken/:CODE/ 287 |

288 | 289 |

Sample request and response when EuroChicken is available:

290 | 291 |
curl "http://sqpub.ch/api/player/12/eurochicken/127e5c3962d04e05a62d65b47734a126/"
292 | 
293 | {
294 |   "catch": {
295 |     "date": "2017-04-12T23:25:57.905Z", 
296 |     "player": {
297 |       "score": 50, 
298 |       "number_of_eggs": 4, 
299 |       "id": 12, 
300 |       "name": "yxc"
301 |     }, 
302 |     "egg": {
303 |       "description": "", 
304 |       "number_of_catches": 5, 
305 |       "points": 15, 
306 |       "image_url": null, 
307 |       "id": 2, 
308 |       "name": "Eggcellent"
309 |     }, 
310 |     "id": 21
311 |   }, 
312 |   "is_new_catch": false
313 | }
314 | 
315 | 316 |

Sample errors:

317 | 318 |
319 | HTTP 404 {"error_message": "player with id 12 not found"}
320 | HTTP 400 {"error_message": "player cannot use eurochicken code 127e5c3962d04e05a62d65b47734a126"}
321 | 
322 | 323 | {% endblock %} 324 | -------------------------------------------------------------------------------- /django/eggcatch/views.py: -------------------------------------------------------------------------------- 1 | from django.shortcuts import get_object_or_404, render 2 | from django.http import HttpResponse, HttpResponseRedirect 3 | from django.urls import reverse 4 | from django.views import generic 5 | from django.db.models import Count, Sum 6 | from django.http import JsonResponse 7 | 8 | from django.views.decorators.csrf import csrf_exempt 9 | 10 | import uuid 11 | 12 | import datetime 13 | from datetime import timedelta 14 | from django.utils import timezone 15 | 16 | from .models import Egg, Player, Catch 17 | 18 | # Create your views here. 19 | 20 | def current_player(request): 21 | if 'player_id' not in request.COOKIES: 22 | return None 23 | 24 | player_id = request.COOKIES['player_id'] 25 | 26 | try: 27 | player = Player.objects.get(id=player_id) 28 | return player 29 | except: 30 | pass 31 | 32 | return None 33 | 34 | def catch_action(request): 35 | 36 | print(request.POST) 37 | 38 | player = None 39 | 40 | code = request.POST['code'] 41 | 42 | if 'player_id' in request.POST: 43 | player_id = request.POST['player_id'] 44 | 45 | try: 46 | player = Player.objects.get(id=player_id) 47 | response = HttpResponseRedirect(reverse('egg', kwargs={'code': code})) 48 | response.set_cookie('player_id', player.id) 49 | return response 50 | except: 51 | pass 52 | 53 | if 'player_name' in request.POST: 54 | player_name = request.POST['player_name'] 55 | 56 | if len(player_name.strip()) == 0: 57 | return HttpResponseRedirect(reverse('egg', kwargs={'code': code})) 58 | 59 | try: 60 | player = Player.objects.get(name=player_name) 61 | except: 62 | player = Player(name=player_name) 63 | player.save() 64 | 65 | response = HttpResponseRedirect(reverse('egg', kwargs={'code': code})) 66 | response.set_cookie('player_id', player.id, max_age=60*60*24*30) # 1 month 67 | return response 68 | 69 | return logout(self) 70 | 71 | # Always return an HttpResponseRedirect after successfully dealing 72 | # with POST data. This prevents data from being posted twice if a 73 | # user hits the Back button. 74 | 75 | def player_detail(request, id): 76 | 77 | player = get_object_or_404(Player, id=id) 78 | catches = Catch.objects.filter(player=player).order_by('-date') 79 | 80 | return render(request, 'player_detail.html', {'player': player, 'catches': catches}) 81 | 82 | def logout(request): 83 | response = HttpResponseRedirect(reverse('index', kwargs={})) 84 | response.delete_cookie('player_id') 85 | return response 86 | 87 | def player_eurochicken(request, code): 88 | player = current_player(request) 89 | if not player: 90 | return HttpResponseRedirect(reverse('index', kwargs={})) 91 | 92 | if player.code_eurochicken != code: 93 | return HttpResponseRedirect(reverse('index', kwargs={})) 94 | 95 | (catch, just_caught) = player.pickup_eurochicken_catch(code) 96 | if not catch: 97 | print "-- could not pickup ec with code" 98 | return HttpResponseRedirect(reverse('index', kwargs={})) 99 | 100 | catches = Catch.objects.filter(egg=catch.egg) 101 | 102 | return render(request, 'egg_detail.html', {'allow_catch':True, 'egg': catch.egg, 'player':player, 'catch':catch, 'just_caught':just_caught, 'catches':catches}) 103 | 104 | def index(request): 105 | 106 | player = None 107 | catches = [] 108 | players = [] 109 | player_name = None 110 | 111 | player = current_player(request) 112 | if player: 113 | player.setup_eurochicken_if_needed() 114 | 115 | if 'player_id' in request.COOKIES and not player: 116 | print("player %s does not exist" % player_name) 117 | response = HttpResponseRedirect(reverse('index', kwargs={})) 118 | response.delete_cookie('player_id') 119 | return response 120 | 121 | catches = Catch.objects.order_by("-date")[:5] 122 | 123 | #players_by_eggs = Player.objects.all().annotate(num_catch=Count('catch')).order_by('-num_catch')[:10] 124 | 125 | players_by_eggs_and_score = Player.objects.all().annotate(eggs=Count('catch'), score=Sum('catch__egg__points')).order_by('-eggs', '-score')[:15] # TODO: add 'catch__date' 126 | 127 | return render( 128 | request, 129 | 'index.html', 130 | { 131 | 'player':player, 132 | 'players_by_eggs_and_score': players_by_eggs_and_score, 133 | 'catches': catches 134 | } 135 | ) 136 | 137 | def egg_detail_from_id(request, id): 138 | 139 | player = current_player(request) 140 | 141 | egg = get_object_or_404(Egg, id=id) 142 | 143 | catch = Catch.objects.filter(player=player, egg=egg).first() 144 | 145 | catches = Catch.objects.filter(egg=egg).order_by("-date") 146 | 147 | return render(request, 'egg_detail.html', {'allow_catch':False, 'egg': egg, 'player':player, 'catch':catch, 'just_caught':False, 'catches':catches}) 148 | 149 | def players(request): 150 | 151 | #if not request.user.is_superuser: 152 | # response = HttpResponseRedirect(reverse('index', kwargs={})) 153 | # return response 154 | 155 | if not current_player(request): 156 | return HttpResponseRedirect(reverse('index')) 157 | 158 | players_by_eggs_and_score = Player.objects.all().annotate(eggs=Count('catch'), score=Sum('catch__egg__points')).order_by('-eggs', '-score') 159 | 160 | return render(request, 'players.html', {'players': players_by_eggs_and_score}) 161 | 162 | def faq(request): 163 | 164 | return render(request, 'faq.html') 165 | 166 | def eggs(request): 167 | 168 | #if not request.user.is_superuser: 169 | # response = HttpResponseRedirect(reverse('index', kwargs={})) 170 | # return response 171 | 172 | if not current_player(request): 173 | return HttpResponseRedirect(reverse('index')) 174 | 175 | eggs = Egg.objects.all().annotate(catch_count=Count('catch')).order_by('catch_count') 176 | 177 | return render(request, 'eggs.html', {'eggs': eggs}) 178 | 179 | def eggs_codes(request): 180 | 181 | if not request.user.is_superuser: 182 | response = HttpResponseRedirect(reverse('index', kwargs={})) 183 | return response 184 | 185 | eggs = Egg.objects.all() 186 | 187 | return render(request, 'eggs_codes.html', {'eggs': eggs}) 188 | 189 | def egg_detail_from_code(request, code): 190 | 191 | player = current_player(request) 192 | 193 | egg = get_object_or_404(Egg, code=code) 194 | 195 | catch = Catch.objects.filter(player=player, egg=egg).first() 196 | 197 | just_caught = False 198 | if player and not catch: 199 | # TODO: ensure egg is not owned yet? 200 | catch = Catch(player=player, egg=egg, date=datetime.datetime.now()) 201 | catch.save() 202 | just_caught = True 203 | 204 | catches = Catch.objects.filter(egg=egg) 205 | 206 | return render(request, 'egg_detail.html', {'allow_catch':True, 'egg': egg, 'player':player, 'catch':catch, 'just_caught':just_caught, 'catches':catches}) 207 | 208 | def combos(request): 209 | ids_separated_with_comma = request.path.split('/')[-1] 210 | if not ids_separated_with_comma: 211 | return render(request, 'combos.html', {'winners':[], 'eggs':[]}) 212 | 213 | # return HttpResponseRedirect(reverse('index', kwargs={})) 214 | 215 | ids = ids_separated_with_comma.split(',') 216 | 217 | eggs = map(lambda x:Egg.objects.filter(id=x).first(), ids) 218 | 219 | players = Player.objects.all().annotate(eggs=Count('catch'), score=Sum('catch__egg__points')).order_by('-eggs', '-score') 220 | 221 | winners = [] 222 | 223 | for p in players: 224 | print "p:", p 225 | if p.has_eggs(eggs): 226 | winners.append(p) 227 | print "w", p 228 | 229 | return render(request, 'combos.html', {'winners':winners, 'eggs':eggs}) 230 | 231 | def api_description(request): 232 | 233 | return render(request, 'api.html') 234 | 235 | @csrf_exempt 236 | def api_catch_create(request): 237 | # POST /api/catch_create/ 238 | 239 | print(request.POST) 240 | 241 | ## Egg 242 | 243 | if not 'egg_code' in request.POST: 244 | response = JsonResponse({"error_message":"egg_code POST param is missing"}) 245 | response.status_code = 400 246 | return response 247 | 248 | egg_code = request.POST['egg_code'] 249 | 250 | try: 251 | egg = Egg.objects.get(code=egg_code) 252 | except: 253 | response = JsonResponse({"error_message":"egg with code %s not found" % egg_code}) 254 | response.status_code = 404 255 | return response 256 | 257 | ## Player 258 | 259 | if not 'player_id' in request.POST: 260 | response = JsonResponse({"error_message":"player_id POST param is missing"}) 261 | response.status_code = 400 262 | return response 263 | 264 | player_id = request.POST['player_id'] 265 | 266 | try: 267 | player = Player.objects.get(id=player_id) 268 | except: 269 | response = JsonResponse({"error_message":"player with id %s not found" % player_id}) 270 | response.status_code = 404 271 | return response 272 | 273 | ## Catch 274 | 275 | catch = Catch.objects.filter(player=player, egg=egg).first() 276 | 277 | is_new_catch = False 278 | if not catch: 279 | catch = Catch(player=player, egg=egg, date=datetime.datetime.now()) 280 | catch.save() 281 | is_new_catch = True 282 | 283 | return JsonResponse({'catch':catch.json_public_full(), 'is_new_catch':is_new_catch}, json_dumps_params={'indent': 2}) 284 | 285 | def api_player_name(request, name): 286 | # GET /api/players/name/:PLAYER_NAME 287 | 288 | players = Player.objects.filter(name=name) 289 | 290 | dictionaries = map(lambda p:p.json_public(), players) 291 | 292 | return JsonResponse(dictionaries, json_dumps_params={'indent': 2}, safe=False) 293 | 294 | def api_player(request, id): 295 | # GET /api/player/:ID 296 | 297 | try: 298 | player = Player.objects.get(id=id) 299 | except: 300 | response = JsonResponse({"error_message":"player with id %s not found" % id}) 301 | response.status_code = 404 302 | return response 303 | 304 | return JsonResponse(player.json_public(), json_dumps_params={'indent': 2}) 305 | 306 | def api_egg_id(request, id): 307 | # GET /api/egg/:ID 308 | 309 | try: 310 | egg = Egg.objects.get(id=id) 311 | except: 312 | response = JsonResponse({"error_message":"egg with id %s not found" % id}) 313 | response.status_code = 404 314 | return response 315 | 316 | return JsonResponse(egg.json_public(), json_dumps_params={'indent': 2}) 317 | 318 | def api_egg_code(request, code): 319 | # GET /api/egg/:CODE 320 | 321 | try: 322 | egg = Egg.objects.get(code=code) 323 | except: 324 | response = JsonResponse({"error_message":"egg with code %s not found" % code}) 325 | response.status_code = 404 326 | return response 327 | 328 | return JsonResponse(egg.json_public(), json_dumps_params={'indent': 2}) 329 | 330 | def api_players(request): 331 | # GET /api/players 332 | 333 | players = Player.objects.all() 334 | 335 | dictionaries = map(lambda p:p.json_public(), players) 336 | 337 | return JsonResponse(dictionaries, json_dumps_params={'indent': 2}, safe=False) 338 | 339 | def api_eggs(request): 340 | # GET /api/eggs 341 | 342 | eggs = Egg.objects.all() 343 | 344 | dictionaries = map(lambda e:e.json_public(), eggs) 345 | 346 | return JsonResponse(dictionaries, json_dumps_params={'indent': 2}, safe=False) 347 | 348 | def api_catches(request): 349 | # GET /api/catches 350 | 351 | catches = Catch.objects.all().order_by('-date') 352 | 353 | dictionaries = map(lambda c:c.json_public(), catches) 354 | 355 | return JsonResponse(dictionaries, json_dumps_params={'indent': 2}, safe=False) 356 | 357 | def api_player_catches(request, id): 358 | # GET /api/player/:ID/catches 359 | 360 | try: 361 | player = Player.objects.get(id=id) 362 | except: 363 | response = JsonResponse({"error_message":"player with id %s not found" % id}) 364 | response.status_code = 404 365 | return response 366 | 367 | catches = player.catch_set.order_by('-date') 368 | 369 | dictionaries = map(lambda c:c.json_public(), catches) 370 | 371 | return JsonResponse(dictionaries, json_dumps_params={'indent': 2}, safe=False) 372 | 373 | def api_player_eurochicken(request, player_id): 374 | # GET /api/player/:ID/eurochicken/ 375 | 376 | try: 377 | player = Player.objects.get(id=player_id) 378 | player.setup_eurochicken_if_needed() 379 | except: 380 | response = JsonResponse({"error_message":"player with id %s not found" % player_id}) 381 | response.status_code = 404 382 | return response 383 | 384 | egg_ec_json = None 385 | egg_ec_catch_code = None 386 | if player.egg_eurochicken: 387 | egg_ec_json = player.egg_eurochicken.json_public() 388 | egg_ec_catch_code = player.code_eurochicken 389 | 390 | d = {'next_eurochicken_start':player.next_eurochicken_start(), 391 | 'proposed_egg':egg_ec_json, 392 | 'proposed_egg_catch_code':egg_ec_catch_code} 393 | 394 | return JsonResponse(d, json_dumps_params={'indent': 2}, safe=False) 395 | 396 | def api_player_eurochicken_catch(request, player_id, code): 397 | # GET /api/player/:ID/eurochicken/:CODE/ 398 | try: 399 | player = Player.objects.get(id=player_id) 400 | player.setup_eurochicken_if_needed() 401 | except: 402 | response = JsonResponse({"error_message":"player with id %s not found" % player_id}) 403 | response.status_code = 404 404 | return response 405 | 406 | if player.code_eurochicken != code: 407 | response = JsonResponse({"error_message":"player cannot use eurochicken code %s" % code}) 408 | response.status_code = 400 409 | return response 410 | 411 | (catch, just_caught) = player.pickup_eurochicken_catch(code) 412 | if not catch: 413 | response = JsonResponse({"error_message":"player cannot use eurochicken code %s" % code}) 414 | response.status_code = 400 415 | return response 416 | 417 | return JsonResponse({'catch':catch.json_public_full(), 'is_new_catch':just_caught}, json_dumps_params={'indent': 2}) 418 | 419 | #class DetailView(generic.DetailView): 420 | # model = Egg 421 | # template_name = 'egg_detail.html' 422 | -------------------------------------------------------------------------------- /django/site_media/css/bootstrap/bootstrap-theme.min.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * Bootstrap v3.3.7 (http://getbootstrap.com) 3 | * Copyright 2011-2016 Twitter, Inc. 4 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) 5 | */.btn-danger,.btn-default,.btn-info,.btn-primary,.btn-success,.btn-warning{text-shadow:0 -1px 0 rgba(0,0,0,.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075)}.btn-danger.active,.btn-danger:active,.btn-default.active,.btn-default:active,.btn-info.active,.btn-info:active,.btn-primary.active,.btn-primary:active,.btn-success.active,.btn-success:active,.btn-warning.active,.btn-warning:active{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-danger.disabled,.btn-danger[disabled],.btn-default.disabled,.btn-default[disabled],.btn-info.disabled,.btn-info[disabled],.btn-primary.disabled,.btn-primary[disabled],.btn-success.disabled,.btn-success[disabled],.btn-warning.disabled,.btn-warning[disabled],fieldset[disabled] .btn-danger,fieldset[disabled] .btn-default,fieldset[disabled] .btn-info,fieldset[disabled] .btn-primary,fieldset[disabled] .btn-success,fieldset[disabled] .btn-warning{-webkit-box-shadow:none;box-shadow:none}.btn-danger .badge,.btn-default .badge,.btn-info .badge,.btn-primary .badge,.btn-success .badge,.btn-warning .badge{text-shadow:none}.btn.active,.btn:active{background-image:none}.btn-default{text-shadow:0 1px 0 #fff;background-image:-webkit-linear-gradient(top,#fff 0,#e0e0e0 100%);background-image:-o-linear-gradient(top,#fff 0,#e0e0e0 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e0e0e0));background-image:linear-gradient(to bottom,#fff 0,#e0e0e0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#dbdbdb;border-color:#ccc}.btn-default:focus,.btn-default:hover{background-color:#e0e0e0;background-position:0 -15px}.btn-default.active,.btn-default:active{background-color:#e0e0e0;border-color:#dbdbdb}.btn-default.disabled,.btn-default.disabled.active,.btn-default.disabled.focus,.btn-default.disabled:active,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled],.btn-default[disabled].active,.btn-default[disabled].focus,.btn-default[disabled]:active,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default,fieldset[disabled] .btn-default.active,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:active,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{background-color:#e0e0e0;background-image:none}.btn-primary{background-image:-webkit-linear-gradient(top,#337ab7 0,#265a88 100%);background-image:-o-linear-gradient(top,#337ab7 0,#265a88 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#265a88));background-image:linear-gradient(to bottom,#337ab7 0,#265a88 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#245580}.btn-primary:focus,.btn-primary:hover{background-color:#265a88;background-position:0 -15px}.btn-primary.active,.btn-primary:active{background-color:#265a88;border-color:#245580}.btn-primary.disabled,.btn-primary.disabled.active,.btn-primary.disabled.focus,.btn-primary.disabled:active,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled],.btn-primary[disabled].active,.btn-primary[disabled].focus,.btn-primary[disabled]:active,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary,fieldset[disabled] .btn-primary.active,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:active,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#265a88;background-image:none}.btn-success{background-image:-webkit-linear-gradient(top,#5cb85c 0,#419641 100%);background-image:-o-linear-gradient(top,#5cb85c 0,#419641 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5cb85c),to(#419641));background-image:linear-gradient(to bottom,#5cb85c 0,#419641 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#3e8f3e}.btn-success:focus,.btn-success:hover{background-color:#419641;background-position:0 -15px}.btn-success.active,.btn-success:active{background-color:#419641;border-color:#3e8f3e}.btn-success.disabled,.btn-success.disabled.active,.btn-success.disabled.focus,.btn-success.disabled:active,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled],.btn-success[disabled].active,.btn-success[disabled].focus,.btn-success[disabled]:active,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success,fieldset[disabled] .btn-success.active,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:active,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{background-color:#419641;background-image:none}.btn-info{background-image:-webkit-linear-gradient(top,#5bc0de 0,#2aabd2 100%);background-image:-o-linear-gradient(top,#5bc0de 0,#2aabd2 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5bc0de),to(#2aabd2));background-image:linear-gradient(to bottom,#5bc0de 0,#2aabd2 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#28a4c9}.btn-info:focus,.btn-info:hover{background-color:#2aabd2;background-position:0 -15px}.btn-info.active,.btn-info:active{background-color:#2aabd2;border-color:#28a4c9}.btn-info.disabled,.btn-info.disabled.active,.btn-info.disabled.focus,.btn-info.disabled:active,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled],.btn-info[disabled].active,.btn-info[disabled].focus,.btn-info[disabled]:active,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info,fieldset[disabled] .btn-info.active,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:active,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{background-color:#2aabd2;background-image:none}.btn-warning{background-image:-webkit-linear-gradient(top,#f0ad4e 0,#eb9316 100%);background-image:-o-linear-gradient(top,#f0ad4e 0,#eb9316 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f0ad4e),to(#eb9316));background-image:linear-gradient(to bottom,#f0ad4e 0,#eb9316 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#e38d13}.btn-warning:focus,.btn-warning:hover{background-color:#eb9316;background-position:0 -15px}.btn-warning.active,.btn-warning:active{background-color:#eb9316;border-color:#e38d13}.btn-warning.disabled,.btn-warning.disabled.active,.btn-warning.disabled.focus,.btn-warning.disabled:active,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled],.btn-warning[disabled].active,.btn-warning[disabled].focus,.btn-warning[disabled]:active,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning,fieldset[disabled] .btn-warning.active,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:active,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{background-color:#eb9316;background-image:none}.btn-danger{background-image:-webkit-linear-gradient(top,#d9534f 0,#c12e2a 100%);background-image:-o-linear-gradient(top,#d9534f 0,#c12e2a 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9534f),to(#c12e2a));background-image:linear-gradient(to bottom,#d9534f 0,#c12e2a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#b92c28}.btn-danger:focus,.btn-danger:hover{background-color:#c12e2a;background-position:0 -15px}.btn-danger.active,.btn-danger:active{background-color:#c12e2a;border-color:#b92c28}.btn-danger.disabled,.btn-danger.disabled.active,.btn-danger.disabled.focus,.btn-danger.disabled:active,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled],.btn-danger[disabled].active,.btn-danger[disabled].focus,.btn-danger[disabled]:active,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger,fieldset[disabled] .btn-danger.active,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:active,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{background-color:#c12e2a;background-image:none}.img-thumbnail,.thumbnail{-webkit-box-shadow:0 1px 2px rgba(0,0,0,.075);box-shadow:0 1px 2px rgba(0,0,0,.075)}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{background-color:#e8e8e8;background-image:-webkit-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-o-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#e8e8e8));background-image:linear-gradient(to bottom,#f5f5f5 0,#e8e8e8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);background-repeat:repeat-x}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{background-color:#2e6da4;background-image:-webkit-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2e6da4));background-image:linear-gradient(to bottom,#337ab7 0,#2e6da4 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);background-repeat:repeat-x}.navbar-default{background-image:-webkit-linear-gradient(top,#fd8c65 0,#fd6732 100%);background-image:-o-linear-gradient(top,#fd8c65 0,#fd6732 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fd8c65),to(#fd6732));background-image:linear-gradient(to bottom,#fd8c65 0,#fd6732 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffd8c65', endColorstr='#fffd6732', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-radius:4px;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 5px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 5px rgba(0,0,0,.075)}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.open>a{background-image:-webkit-linear-gradient(top,#f24102 0,#fd4707 100%);background-image:-o-linear-gradient(top,#f24102 0,#fd4707 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f24102),to(#fd4707));background-image:linear-gradient(to bottom,#f24102 0,#fd4707 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff24102', endColorstr='#fffd4707', GradientType=0);background-repeat:repeat-x;-webkit-box-shadow:inset 0 3px 9px rgba(0,0,0,.075);box-shadow:inset 0 3px 9px rgba(0,0,0,.075)}.navbar-brand,.navbar-nav>li>a{text-shadow:0 1px 0 rgba(255,255,255,.25)}.navbar-inverse{background-image:-webkit-linear-gradient(top,#3c3c3c 0,#222 100%);background-image:-o-linear-gradient(top,#3c3c3c 0,#222 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#3c3c3c),to(#222));background-image:linear-gradient(to bottom,#3c3c3c 0,#222 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-radius:4px}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.open>a{background-image:-webkit-linear-gradient(top,#080808 0,#0f0f0f 100%);background-image:-o-linear-gradient(top,#080808 0,#0f0f0f 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#080808),to(#0f0f0f));background-image:linear-gradient(to bottom,#080808 0,#0f0f0f 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0);background-repeat:repeat-x;-webkit-box-shadow:inset 0 3px 9px rgba(0,0,0,.25);box-shadow:inset 0 3px 9px rgba(0,0,0,.25)}.navbar-inverse .navbar-brand,.navbar-inverse .navbar-nav>li>a{text-shadow:0 -1px 0 rgba(0,0,0,.25)}.navbar-fixed-bottom,.navbar-fixed-top,.navbar-static-top{border-radius:0}@media (max-width:767px){.navbar .navbar-nav .open .dropdown-menu>.active>a,.navbar .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar .navbar-nav .open .dropdown-menu>.active>a:hover{color:#fff;background-image:-webkit-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2e6da4));background-image:linear-gradient(to bottom,#337ab7 0,#2e6da4 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);background-repeat:repeat-x}}.alert{text-shadow:0 1px 0 rgba(255,255,255,.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.25),0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 1px 0 rgba(255,255,255,.25),0 1px 2px rgba(0,0,0,.05)}.alert-success{background-image:-webkit-linear-gradient(top,#dff0d8 0,#c8e5bc 100%);background-image:-o-linear-gradient(top,#dff0d8 0,#c8e5bc 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#dff0d8),to(#c8e5bc));background-image:linear-gradient(to bottom,#dff0d8 0,#c8e5bc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);background-repeat:repeat-x;border-color:#b2dba1}.alert-info{background-image:-webkit-linear-gradient(top,#d9edf7 0,#b9def0 100%);background-image:-o-linear-gradient(top,#d9edf7 0,#b9def0 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9edf7),to(#b9def0));background-image:linear-gradient(to bottom,#d9edf7 0,#b9def0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);background-repeat:repeat-x;border-color:#9acfea}.alert-warning{background-image:-webkit-linear-gradient(top,#fcf8e3 0,#f8efc0 100%);background-image:-o-linear-gradient(top,#fcf8e3 0,#f8efc0 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fcf8e3),to(#f8efc0));background-image:linear-gradient(to bottom,#fcf8e3 0,#f8efc0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);background-repeat:repeat-x;border-color:#f5e79e}.alert-danger{background-image:-webkit-linear-gradient(top,#f2dede 0,#e7c3c3 100%);background-image:-o-linear-gradient(top,#f2dede 0,#e7c3c3 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f2dede),to(#e7c3c3));background-image:linear-gradient(to bottom,#f2dede 0,#e7c3c3 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);background-repeat:repeat-x;border-color:#dca7a7}.progress{background-image:-webkit-linear-gradient(top,#ebebeb 0,#f5f5f5 100%);background-image:-o-linear-gradient(top,#ebebeb 0,#f5f5f5 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#f5f5f5));background-image:linear-gradient(to bottom,#ebebeb 0,#f5f5f5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);background-repeat:repeat-x}.progress-bar{background-image:-webkit-linear-gradient(top,#337ab7 0,#286090 100%);background-image:-o-linear-gradient(top,#337ab7 0,#286090 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#286090));background-image:linear-gradient(to bottom,#337ab7 0,#286090 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0);background-repeat:repeat-x}.progress-bar-success{background-image:-webkit-linear-gradient(top,#5cb85c 0,#449d44 100%);background-image:-o-linear-gradient(top,#5cb85c 0,#449d44 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5cb85c),to(#449d44));background-image:linear-gradient(to bottom,#5cb85c 0,#449d44 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);background-repeat:repeat-x}.progress-bar-info{background-image:-webkit-linear-gradient(top,#5bc0de 0,#31b0d5 100%);background-image:-o-linear-gradient(top,#5bc0de 0,#31b0d5 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5bc0de),to(#31b0d5));background-image:linear-gradient(to bottom,#5bc0de 0,#31b0d5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);background-repeat:repeat-x}.progress-bar-warning{background-image:-webkit-linear-gradient(top,#f0ad4e 0,#ec971f 100%);background-image:-o-linear-gradient(top,#f0ad4e 0,#ec971f 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f0ad4e),to(#ec971f));background-image:linear-gradient(to bottom,#f0ad4e 0,#ec971f 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);background-repeat:repeat-x}.progress-bar-danger{background-image:-webkit-linear-gradient(top,#d9534f 0,#c9302c 100%);background-image:-o-linear-gradient(top,#d9534f 0,#c9302c 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9534f),to(#c9302c));background-image:linear-gradient(to bottom,#d9534f 0,#c9302c 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);background-repeat:repeat-x}.progress-bar-striped{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.list-group{border-radius:4px;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.075);box-shadow:0 1px 2px rgba(0,0,0,.075)}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{text-shadow:0 -1px 0 #286090;background-image:-webkit-linear-gradient(top,#337ab7 0,#2b669a 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2b669a 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2b669a));background-image:linear-gradient(to bottom,#337ab7 0,#2b669a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0);background-repeat:repeat-x;border-color:#2b669a}.list-group-item.active .badge,.list-group-item.active:focus .badge,.list-group-item.active:hover .badge{text-shadow:none}.panel{-webkit-box-shadow:0 1px 2px rgba(0,0,0,.05);box-shadow:0 1px 2px rgba(0,0,0,.05)}.panel-default>.panel-heading{background-image:-webkit-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-o-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#e8e8e8));background-image:linear-gradient(to bottom,#f5f5f5 0,#e8e8e8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);background-repeat:repeat-x}.panel-primary>.panel-heading{background-image:-webkit-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2e6da4));background-image:linear-gradient(to bottom,#337ab7 0,#2e6da4 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);background-repeat:repeat-x}.panel-success>.panel-heading{background-image:-webkit-linear-gradient(top,#dff0d8 0,#d0e9c6 100%);background-image:-o-linear-gradient(top,#dff0d8 0,#d0e9c6 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#dff0d8),to(#d0e9c6));background-image:linear-gradient(to bottom,#dff0d8 0,#d0e9c6 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);background-repeat:repeat-x}.panel-info>.panel-heading{background-image:-webkit-linear-gradient(top,#d9edf7 0,#c4e3f3 100%);background-image:-o-linear-gradient(top,#d9edf7 0,#c4e3f3 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9edf7),to(#c4e3f3));background-image:linear-gradient(to bottom,#d9edf7 0,#c4e3f3 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);background-repeat:repeat-x}.panel-warning>.panel-heading{background-image:-webkit-linear-gradient(top,#fcf8e3 0,#faf2cc 100%);background-image:-o-linear-gradient(top,#fcf8e3 0,#faf2cc 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fcf8e3),to(#faf2cc));background-image:linear-gradient(to bottom,#fcf8e3 0,#faf2cc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);background-repeat:repeat-x}.panel-danger>.panel-heading{background-image:-webkit-linear-gradient(top,#f2dede 0,#ebcccc 100%);background-image:-o-linear-gradient(top,#f2dede 0,#ebcccc 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f2dede),to(#ebcccc));background-image:linear-gradient(to bottom,#f2dede 0,#ebcccc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);background-repeat:repeat-x}.well{background-image:-webkit-linear-gradient(top,#e8e8e8 0,#f5f5f5 100%);background-image:-o-linear-gradient(top,#e8e8e8 0,#f5f5f5 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#e8e8e8),to(#f5f5f5));background-image:linear-gradient(to bottom,#e8e8e8 0,#f5f5f5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);background-repeat:repeat-x;border-color:#dcdcdc;-webkit-box-shadow:inset 0 1px 3px rgba(0,0,0,.05),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 3px rgba(0,0,0,.05),0 1px 0 rgba(255,255,255,.1)} 6 | /*# sourceMappingURL=bootstrap-theme.min.css.map */ -------------------------------------------------------------------------------- /django/site_media/css/bootstrap/bootstrap-theme.min.css.map: -------------------------------------------------------------------------------- 1 | {"version":3,"sources":["less/theme.less","less/mixins/vendor-prefixes.less","less/mixins/gradients.less","less/mixins/reset-filter.less"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Bootstrap v3.3.7 (http://getbootstrap.com)\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n\n//\n// Load core variables and mixins\n// --------------------------------------------------\n\n@import \"variables.less\";\n@import \"mixins.less\";\n\n\n//\n// Buttons\n// --------------------------------------------------\n\n// Common styles\n.btn-default,\n.btn-primary,\n.btn-success,\n.btn-info,\n.btn-warning,\n.btn-danger {\n text-shadow: 0 -1px 0 rgba(0,0,0,.2);\n @shadow: inset 0 1px 0 rgba(255,255,255,.15), 0 1px 1px rgba(0,0,0,.075);\n .box-shadow(@shadow);\n\n // Reset the shadow\n &:active,\n &.active {\n .box-shadow(inset 0 3px 5px rgba(0,0,0,.125));\n }\n\n &.disabled,\n &[disabled],\n fieldset[disabled] & {\n .box-shadow(none);\n }\n\n .badge {\n text-shadow: none;\n }\n}\n\n// Mixin for generating new styles\n.btn-styles(@btn-color: #555) {\n #gradient > .vertical(@start-color: @btn-color; @end-color: darken(@btn-color, 12%));\n .reset-filter(); // Disable gradients for IE9 because filter bleeds through rounded corners; see https://github.com/twbs/bootstrap/issues/10620\n background-repeat: repeat-x;\n border-color: darken(@btn-color, 14%);\n\n &:hover,\n &:focus {\n background-color: darken(@btn-color, 12%);\n background-position: 0 -15px;\n }\n\n &:active,\n &.active {\n background-color: darken(@btn-color, 12%);\n border-color: darken(@btn-color, 14%);\n }\n\n &.disabled,\n &[disabled],\n fieldset[disabled] & {\n &,\n &:hover,\n &:focus,\n &.focus,\n &:active,\n &.active {\n background-color: darken(@btn-color, 12%);\n background-image: none;\n }\n }\n}\n\n// Common styles\n.btn {\n // Remove the gradient for the pressed/active state\n &:active,\n &.active {\n background-image: none;\n }\n}\n\n// Apply the mixin to the buttons\n.btn-default { .btn-styles(@btn-default-bg); text-shadow: 0 1px 0 #fff; border-color: #ccc; }\n.btn-primary { .btn-styles(@btn-primary-bg); }\n.btn-success { .btn-styles(@btn-success-bg); }\n.btn-info { .btn-styles(@btn-info-bg); }\n.btn-warning { .btn-styles(@btn-warning-bg); }\n.btn-danger { .btn-styles(@btn-danger-bg); }\n\n\n//\n// Images\n// --------------------------------------------------\n\n.thumbnail,\n.img-thumbnail {\n .box-shadow(0 1px 2px rgba(0,0,0,.075));\n}\n\n\n//\n// Dropdowns\n// --------------------------------------------------\n\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n #gradient > .vertical(@start-color: @dropdown-link-hover-bg; @end-color: darken(@dropdown-link-hover-bg, 5%));\n background-color: darken(@dropdown-link-hover-bg, 5%);\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n #gradient > .vertical(@start-color: @dropdown-link-active-bg; @end-color: darken(@dropdown-link-active-bg, 5%));\n background-color: darken(@dropdown-link-active-bg, 5%);\n}\n\n\n//\n// Navbar\n// --------------------------------------------------\n\n// Default navbar\n.navbar-default {\n #gradient > .vertical(@start-color: lighten(@navbar-default-bg, 10%); @end-color: @navbar-default-bg);\n .reset-filter(); // Remove gradient in IE<10 to fix bug where dropdowns don't get triggered\n border-radius: @navbar-border-radius;\n @shadow: inset 0 1px 0 rgba(255,255,255,.15), 0 1px 5px rgba(0,0,0,.075);\n .box-shadow(@shadow);\n\n .navbar-nav > .open > a,\n .navbar-nav > .active > a {\n #gradient > .vertical(@start-color: darken(@navbar-default-link-active-bg, 5%); @end-color: darken(@navbar-default-link-active-bg, 2%));\n .box-shadow(inset 0 3px 9px rgba(0,0,0,.075));\n }\n}\n.navbar-brand,\n.navbar-nav > li > a {\n text-shadow: 0 1px 0 rgba(255,255,255,.25);\n}\n\n// Inverted navbar\n.navbar-inverse {\n #gradient > .vertical(@start-color: lighten(@navbar-inverse-bg, 10%); @end-color: @navbar-inverse-bg);\n .reset-filter(); // Remove gradient in IE<10 to fix bug where dropdowns don't get triggered; see https://github.com/twbs/bootstrap/issues/10257\n border-radius: @navbar-border-radius;\n .navbar-nav > .open > a,\n .navbar-nav > .active > a {\n #gradient > .vertical(@start-color: @navbar-inverse-link-active-bg; @end-color: lighten(@navbar-inverse-link-active-bg, 2.5%));\n .box-shadow(inset 0 3px 9px rgba(0,0,0,.25));\n }\n\n .navbar-brand,\n .navbar-nav > li > a {\n text-shadow: 0 -1px 0 rgba(0,0,0,.25);\n }\n}\n\n// Undo rounded corners in static and fixed navbars\n.navbar-static-top,\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n border-radius: 0;\n}\n\n// Fix active state of dropdown items in collapsed mode\n@media (max-width: @grid-float-breakpoint-max) {\n .navbar .navbar-nav .open .dropdown-menu > .active > a {\n &,\n &:hover,\n &:focus {\n color: #fff;\n #gradient > .vertical(@start-color: @dropdown-link-active-bg; @end-color: darken(@dropdown-link-active-bg, 5%));\n }\n }\n}\n\n\n//\n// Alerts\n// --------------------------------------------------\n\n// Common styles\n.alert {\n text-shadow: 0 1px 0 rgba(255,255,255,.2);\n @shadow: inset 0 1px 0 rgba(255,255,255,.25), 0 1px 2px rgba(0,0,0,.05);\n .box-shadow(@shadow);\n}\n\n// Mixin for generating new styles\n.alert-styles(@color) {\n #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 7.5%));\n border-color: darken(@color, 15%);\n}\n\n// Apply the mixin to the alerts\n.alert-success { .alert-styles(@alert-success-bg); }\n.alert-info { .alert-styles(@alert-info-bg); }\n.alert-warning { .alert-styles(@alert-warning-bg); }\n.alert-danger { .alert-styles(@alert-danger-bg); }\n\n\n//\n// Progress bars\n// --------------------------------------------------\n\n// Give the progress background some depth\n.progress {\n #gradient > .vertical(@start-color: darken(@progress-bg, 4%); @end-color: @progress-bg)\n}\n\n// Mixin for generating new styles\n.progress-bar-styles(@color) {\n #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 10%));\n}\n\n// Apply the mixin to the progress bars\n.progress-bar { .progress-bar-styles(@progress-bar-bg); }\n.progress-bar-success { .progress-bar-styles(@progress-bar-success-bg); }\n.progress-bar-info { .progress-bar-styles(@progress-bar-info-bg); }\n.progress-bar-warning { .progress-bar-styles(@progress-bar-warning-bg); }\n.progress-bar-danger { .progress-bar-styles(@progress-bar-danger-bg); }\n\n// Reset the striped class because our mixins don't do multiple gradients and\n// the above custom styles override the new `.progress-bar-striped` in v3.2.0.\n.progress-bar-striped {\n #gradient > .striped();\n}\n\n\n//\n// List groups\n// --------------------------------------------------\n\n.list-group {\n border-radius: @border-radius-base;\n .box-shadow(0 1px 2px rgba(0,0,0,.075));\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n text-shadow: 0 -1px 0 darken(@list-group-active-bg, 10%);\n #gradient > .vertical(@start-color: @list-group-active-bg; @end-color: darken(@list-group-active-bg, 7.5%));\n border-color: darken(@list-group-active-border, 7.5%);\n\n .badge {\n text-shadow: none;\n }\n}\n\n\n//\n// Panels\n// --------------------------------------------------\n\n// Common styles\n.panel {\n .box-shadow(0 1px 2px rgba(0,0,0,.05));\n}\n\n// Mixin for generating new styles\n.panel-heading-styles(@color) {\n #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 5%));\n}\n\n// Apply the mixin to the panel headings only\n.panel-default > .panel-heading { .panel-heading-styles(@panel-default-heading-bg); }\n.panel-primary > .panel-heading { .panel-heading-styles(@panel-primary-heading-bg); }\n.panel-success > .panel-heading { .panel-heading-styles(@panel-success-heading-bg); }\n.panel-info > .panel-heading { .panel-heading-styles(@panel-info-heading-bg); }\n.panel-warning > .panel-heading { .panel-heading-styles(@panel-warning-heading-bg); }\n.panel-danger > .panel-heading { .panel-heading-styles(@panel-danger-heading-bg); }\n\n\n//\n// Wells\n// --------------------------------------------------\n\n.well {\n #gradient > .vertical(@start-color: darken(@well-bg, 5%); @end-color: @well-bg);\n border-color: darken(@well-bg, 10%);\n @shadow: inset 0 1px 3px rgba(0,0,0,.05), 0 1px 0 rgba(255,255,255,.1);\n .box-shadow(@shadow);\n}\n","// Vendor Prefixes\n//\n// All vendor mixins are deprecated as of v3.2.0 due to the introduction of\n// Autoprefixer in our Gruntfile. They have been removed in v4.\n\n// - Animations\n// - Backface visibility\n// - Box shadow\n// - Box sizing\n// - Content columns\n// - Hyphens\n// - Placeholder text\n// - Transformations\n// - Transitions\n// - User Select\n\n\n// Animations\n.animation(@animation) {\n -webkit-animation: @animation;\n -o-animation: @animation;\n animation: @animation;\n}\n.animation-name(@name) {\n -webkit-animation-name: @name;\n animation-name: @name;\n}\n.animation-duration(@duration) {\n -webkit-animation-duration: @duration;\n animation-duration: @duration;\n}\n.animation-timing-function(@timing-function) {\n -webkit-animation-timing-function: @timing-function;\n animation-timing-function: @timing-function;\n}\n.animation-delay(@delay) {\n -webkit-animation-delay: @delay;\n animation-delay: @delay;\n}\n.animation-iteration-count(@iteration-count) {\n -webkit-animation-iteration-count: @iteration-count;\n animation-iteration-count: @iteration-count;\n}\n.animation-direction(@direction) {\n -webkit-animation-direction: @direction;\n animation-direction: @direction;\n}\n.animation-fill-mode(@fill-mode) {\n -webkit-animation-fill-mode: @fill-mode;\n animation-fill-mode: @fill-mode;\n}\n\n// Backface visibility\n// Prevent browsers from flickering when using CSS 3D transforms.\n// Default value is `visible`, but can be changed to `hidden`\n\n.backface-visibility(@visibility) {\n -webkit-backface-visibility: @visibility;\n -moz-backface-visibility: @visibility;\n backface-visibility: @visibility;\n}\n\n// Drop shadows\n//\n// Note: Deprecated `.box-shadow()` as of v3.1.0 since all of Bootstrap's\n// supported browsers that have box shadow capabilities now support it.\n\n.box-shadow(@shadow) {\n -webkit-box-shadow: @shadow; // iOS <4.3 & Android <4.1\n box-shadow: @shadow;\n}\n\n// Box sizing\n.box-sizing(@boxmodel) {\n -webkit-box-sizing: @boxmodel;\n -moz-box-sizing: @boxmodel;\n box-sizing: @boxmodel;\n}\n\n// CSS3 Content Columns\n.content-columns(@column-count; @column-gap: @grid-gutter-width) {\n -webkit-column-count: @column-count;\n -moz-column-count: @column-count;\n column-count: @column-count;\n -webkit-column-gap: @column-gap;\n -moz-column-gap: @column-gap;\n column-gap: @column-gap;\n}\n\n// Optional hyphenation\n.hyphens(@mode: auto) {\n word-wrap: break-word;\n -webkit-hyphens: @mode;\n -moz-hyphens: @mode;\n -ms-hyphens: @mode; // IE10+\n -o-hyphens: @mode;\n hyphens: @mode;\n}\n\n// Placeholder text\n.placeholder(@color: @input-color-placeholder) {\n // Firefox\n &::-moz-placeholder {\n color: @color;\n opacity: 1; // Override Firefox's unusual default opacity; see https://github.com/twbs/bootstrap/pull/11526\n }\n &:-ms-input-placeholder { color: @color; } // Internet Explorer 10+\n &::-webkit-input-placeholder { color: @color; } // Safari and Chrome\n}\n\n// Transformations\n.scale(@ratio) {\n -webkit-transform: scale(@ratio);\n -ms-transform: scale(@ratio); // IE9 only\n -o-transform: scale(@ratio);\n transform: scale(@ratio);\n}\n.scale(@ratioX; @ratioY) {\n -webkit-transform: scale(@ratioX, @ratioY);\n -ms-transform: scale(@ratioX, @ratioY); // IE9 only\n -o-transform: scale(@ratioX, @ratioY);\n transform: scale(@ratioX, @ratioY);\n}\n.scaleX(@ratio) {\n -webkit-transform: scaleX(@ratio);\n -ms-transform: scaleX(@ratio); // IE9 only\n -o-transform: scaleX(@ratio);\n transform: scaleX(@ratio);\n}\n.scaleY(@ratio) {\n -webkit-transform: scaleY(@ratio);\n -ms-transform: scaleY(@ratio); // IE9 only\n -o-transform: scaleY(@ratio);\n transform: scaleY(@ratio);\n}\n.skew(@x; @y) {\n -webkit-transform: skewX(@x) skewY(@y);\n -ms-transform: skewX(@x) skewY(@y); // See https://github.com/twbs/bootstrap/issues/4885; IE9+\n -o-transform: skewX(@x) skewY(@y);\n transform: skewX(@x) skewY(@y);\n}\n.translate(@x; @y) {\n -webkit-transform: translate(@x, @y);\n -ms-transform: translate(@x, @y); // IE9 only\n -o-transform: translate(@x, @y);\n transform: translate(@x, @y);\n}\n.translate3d(@x; @y; @z) {\n -webkit-transform: translate3d(@x, @y, @z);\n transform: translate3d(@x, @y, @z);\n}\n.rotate(@degrees) {\n -webkit-transform: rotate(@degrees);\n -ms-transform: rotate(@degrees); // IE9 only\n -o-transform: rotate(@degrees);\n transform: rotate(@degrees);\n}\n.rotateX(@degrees) {\n -webkit-transform: rotateX(@degrees);\n -ms-transform: rotateX(@degrees); // IE9 only\n -o-transform: rotateX(@degrees);\n transform: rotateX(@degrees);\n}\n.rotateY(@degrees) {\n -webkit-transform: rotateY(@degrees);\n -ms-transform: rotateY(@degrees); // IE9 only\n -o-transform: rotateY(@degrees);\n transform: rotateY(@degrees);\n}\n.perspective(@perspective) {\n -webkit-perspective: @perspective;\n -moz-perspective: @perspective;\n perspective: @perspective;\n}\n.perspective-origin(@perspective) {\n -webkit-perspective-origin: @perspective;\n -moz-perspective-origin: @perspective;\n perspective-origin: @perspective;\n}\n.transform-origin(@origin) {\n -webkit-transform-origin: @origin;\n -moz-transform-origin: @origin;\n -ms-transform-origin: @origin; // IE9 only\n transform-origin: @origin;\n}\n\n\n// Transitions\n\n.transition(@transition) {\n -webkit-transition: @transition;\n -o-transition: @transition;\n transition: @transition;\n}\n.transition-property(@transition-property) {\n -webkit-transition-property: @transition-property;\n transition-property: @transition-property;\n}\n.transition-delay(@transition-delay) {\n -webkit-transition-delay: @transition-delay;\n transition-delay: @transition-delay;\n}\n.transition-duration(@transition-duration) {\n -webkit-transition-duration: @transition-duration;\n transition-duration: @transition-duration;\n}\n.transition-timing-function(@timing-function) {\n -webkit-transition-timing-function: @timing-function;\n transition-timing-function: @timing-function;\n}\n.transition-transform(@transition) {\n -webkit-transition: -webkit-transform @transition;\n -moz-transition: -moz-transform @transition;\n -o-transition: -o-transform @transition;\n transition: transform @transition;\n}\n\n\n// User select\n// For selecting text on the page\n\n.user-select(@select) {\n -webkit-user-select: @select;\n -moz-user-select: @select;\n -ms-user-select: @select; // IE10+\n user-select: @select;\n}\n","// Gradients\n\n#gradient {\n\n // Horizontal gradient, from left to right\n //\n // Creates two color stops, start and end, by specifying a color and position for each color stop.\n // Color stops are not available in IE9 and below.\n .horizontal(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n background-image: -webkit-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Opera 12\n background-image: linear-gradient(to right, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n background-repeat: repeat-x;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\",argb(@start-color),argb(@end-color))); // IE9 and down\n }\n\n // Vertical gradient, from top to bottom\n //\n // Creates two color stops, start and end, by specifying a color and position for each color stop.\n // Color stops are not available in IE9 and below.\n .vertical(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n background-image: -webkit-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Opera 12\n background-image: linear-gradient(to bottom, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n background-repeat: repeat-x;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",argb(@start-color),argb(@end-color))); // IE9 and down\n }\n\n .directional(@start-color: #555; @end-color: #333; @deg: 45deg) {\n background-repeat: repeat-x;\n background-image: -webkit-linear-gradient(@deg, @start-color, @end-color); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(@deg, @start-color, @end-color); // Opera 12\n background-image: linear-gradient(@deg, @start-color, @end-color); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n }\n .horizontal-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n background-image: -webkit-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n background-image: -o-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n background-image: linear-gradient(to right, @start-color, @mid-color @color-stop, @end-color);\n background-repeat: no-repeat;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n }\n .vertical-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n background-image: -webkit-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-image: -o-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-image: linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-repeat: no-repeat;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n }\n .radial(@inner-color: #555; @outer-color: #333) {\n background-image: -webkit-radial-gradient(circle, @inner-color, @outer-color);\n background-image: radial-gradient(circle, @inner-color, @outer-color);\n background-repeat: no-repeat;\n }\n .striped(@color: rgba(255,255,255,.15); @angle: 45deg) {\n background-image: -webkit-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n background-image: linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n }\n}\n","// Reset filters for IE\n//\n// When you need to remove a gradient background, do not forget to use this to reset\n// the IE filter for IE9 and below.\n\n.reset-filter() {\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(enabled = false)\"));\n}\n"]} -------------------------------------------------------------------------------- /django/site_media/css/bootstrap/bootstrap-theme.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * Bootstrap v3.3.7 (http://getbootstrap.com) 3 | * Copyright 2011-2016 Twitter, Inc. 4 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) 5 | */ 6 | .btn-default, 7 | .btn-primary, 8 | .btn-success, 9 | .btn-info, 10 | .btn-warning, 11 | .btn-danger { 12 | text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2); 13 | -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075); 14 | box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075); 15 | } 16 | .btn-default:active, 17 | .btn-primary:active, 18 | .btn-success:active, 19 | .btn-info:active, 20 | .btn-warning:active, 21 | .btn-danger:active, 22 | .btn-default.active, 23 | .btn-primary.active, 24 | .btn-success.active, 25 | .btn-info.active, 26 | .btn-warning.active, 27 | .btn-danger.active { 28 | -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); 29 | box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); 30 | } 31 | .btn-default.disabled, 32 | .btn-primary.disabled, 33 | .btn-success.disabled, 34 | .btn-info.disabled, 35 | .btn-warning.disabled, 36 | .btn-danger.disabled, 37 | .btn-default[disabled], 38 | .btn-primary[disabled], 39 | .btn-success[disabled], 40 | .btn-info[disabled], 41 | .btn-warning[disabled], 42 | .btn-danger[disabled], 43 | fieldset[disabled] .btn-default, 44 | fieldset[disabled] .btn-primary, 45 | fieldset[disabled] .btn-success, 46 | fieldset[disabled] .btn-info, 47 | fieldset[disabled] .btn-warning, 48 | fieldset[disabled] .btn-danger { 49 | -webkit-box-shadow: none; 50 | box-shadow: none; 51 | } 52 | .btn-default .badge, 53 | .btn-primary .badge, 54 | .btn-success .badge, 55 | .btn-info .badge, 56 | .btn-warning .badge, 57 | .btn-danger .badge { 58 | text-shadow: none; 59 | } 60 | .btn:active, 61 | .btn.active { 62 | background-image: none; 63 | } 64 | .btn-default { 65 | background-image: -webkit-linear-gradient(top, #fff 0%, #e0e0e0 100%); 66 | background-image: -o-linear-gradient(top, #fff 0%, #e0e0e0 100%); 67 | background-image: linear-gradient(to bottom, #fff 0%, #e0e0e0 100%); 68 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0); 69 | filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); 70 | background-repeat: repeat-x; 71 | border-color: #dbdbdb; 72 | text-shadow: 0 1px 0 #fff; 73 | border-color: #ccc; 74 | } 75 | .btn-default:hover, 76 | .btn-default:focus { 77 | background-color: #e0e0e0; 78 | background-position: 0 -15px; 79 | } 80 | .btn-default:active, 81 | .btn-default.active { 82 | background-color: #e0e0e0; 83 | border-color: #dbdbdb; 84 | } 85 | .btn-default.disabled, 86 | .btn-default[disabled], 87 | fieldset[disabled] .btn-default, 88 | .btn-default.disabled:hover, 89 | .btn-default[disabled]:hover, 90 | fieldset[disabled] .btn-default:hover, 91 | .btn-default.disabled:focus, 92 | .btn-default[disabled]:focus, 93 | fieldset[disabled] .btn-default:focus, 94 | .btn-default.disabled.focus, 95 | .btn-default[disabled].focus, 96 | fieldset[disabled] .btn-default.focus, 97 | .btn-default.disabled:active, 98 | .btn-default[disabled]:active, 99 | fieldset[disabled] .btn-default:active, 100 | .btn-default.disabled.active, 101 | .btn-default[disabled].active, 102 | fieldset[disabled] .btn-default.active { 103 | background-color: #e0e0e0; 104 | background-image: none; 105 | } 106 | .btn-primary { 107 | background-image: -webkit-linear-gradient(top, #337ab7 0%, #265a88 100%); 108 | background-image: -o-linear-gradient(top, #337ab7 0%, #265a88 100%); 109 | background-image: linear-gradient(to bottom, #337ab7 0%, #265a88 100%); 110 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0); 111 | filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); 112 | background-repeat: repeat-x; 113 | border-color: #245580; 114 | } 115 | .btn-primary:hover, 116 | .btn-primary:focus { 117 | background-color: #265a88; 118 | background-position: 0 -15px; 119 | } 120 | .btn-primary:active, 121 | .btn-primary.active { 122 | background-color: #265a88; 123 | border-color: #245580; 124 | } 125 | .btn-primary.disabled, 126 | .btn-primary[disabled], 127 | fieldset[disabled] .btn-primary, 128 | .btn-primary.disabled:hover, 129 | .btn-primary[disabled]:hover, 130 | fieldset[disabled] .btn-primary:hover, 131 | .btn-primary.disabled:focus, 132 | .btn-primary[disabled]:focus, 133 | fieldset[disabled] .btn-primary:focus, 134 | .btn-primary.disabled.focus, 135 | .btn-primary[disabled].focus, 136 | fieldset[disabled] .btn-primary.focus, 137 | .btn-primary.disabled:active, 138 | .btn-primary[disabled]:active, 139 | fieldset[disabled] .btn-primary:active, 140 | .btn-primary.disabled.active, 141 | .btn-primary[disabled].active, 142 | fieldset[disabled] .btn-primary.active { 143 | background-color: #265a88; 144 | background-image: none; 145 | } 146 | .btn-success { 147 | background-image: -webkit-linear-gradient(top, #5cb85c 0%, #419641 100%); 148 | background-image: -o-linear-gradient(top, #5cb85c 0%, #419641 100%); 149 | background-image: linear-gradient(to bottom, #5cb85c 0%, #419641 100%); 150 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0); 151 | filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); 152 | background-repeat: repeat-x; 153 | border-color: #3e8f3e; 154 | } 155 | .btn-success:hover, 156 | .btn-success:focus { 157 | background-color: #419641; 158 | background-position: 0 -15px; 159 | } 160 | .btn-success:active, 161 | .btn-success.active { 162 | background-color: #419641; 163 | border-color: #3e8f3e; 164 | } 165 | .btn-success.disabled, 166 | .btn-success[disabled], 167 | fieldset[disabled] .btn-success, 168 | .btn-success.disabled:hover, 169 | .btn-success[disabled]:hover, 170 | fieldset[disabled] .btn-success:hover, 171 | .btn-success.disabled:focus, 172 | .btn-success[disabled]:focus, 173 | fieldset[disabled] .btn-success:focus, 174 | .btn-success.disabled.focus, 175 | .btn-success[disabled].focus, 176 | fieldset[disabled] .btn-success.focus, 177 | .btn-success.disabled:active, 178 | .btn-success[disabled]:active, 179 | fieldset[disabled] .btn-success:active, 180 | .btn-success.disabled.active, 181 | .btn-success[disabled].active, 182 | fieldset[disabled] .btn-success.active { 183 | background-color: #419641; 184 | background-image: none; 185 | } 186 | .btn-info { 187 | background-image: -webkit-linear-gradient(top, #5bc0de 0%, #2aabd2 100%); 188 | background-image: -o-linear-gradient(top, #5bc0de 0%, #2aabd2 100%); 189 | background-image: linear-gradient(to bottom, #5bc0de 0%, #2aabd2 100%); 190 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0); 191 | filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); 192 | background-repeat: repeat-x; 193 | border-color: #28a4c9; 194 | } 195 | .btn-info:hover, 196 | .btn-info:focus { 197 | background-color: #2aabd2; 198 | background-position: 0 -15px; 199 | } 200 | .btn-info:active, 201 | .btn-info.active { 202 | background-color: #2aabd2; 203 | border-color: #28a4c9; 204 | } 205 | .btn-info.disabled, 206 | .btn-info[disabled], 207 | fieldset[disabled] .btn-info, 208 | .btn-info.disabled:hover, 209 | .btn-info[disabled]:hover, 210 | fieldset[disabled] .btn-info:hover, 211 | .btn-info.disabled:focus, 212 | .btn-info[disabled]:focus, 213 | fieldset[disabled] .btn-info:focus, 214 | .btn-info.disabled.focus, 215 | .btn-info[disabled].focus, 216 | fieldset[disabled] .btn-info.focus, 217 | .btn-info.disabled:active, 218 | .btn-info[disabled]:active, 219 | fieldset[disabled] .btn-info:active, 220 | .btn-info.disabled.active, 221 | .btn-info[disabled].active, 222 | fieldset[disabled] .btn-info.active { 223 | background-color: #2aabd2; 224 | background-image: none; 225 | } 226 | .btn-warning { 227 | background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #eb9316 100%); 228 | background-image: -o-linear-gradient(top, #f0ad4e 0%, #eb9316 100%); 229 | background-image: linear-gradient(to bottom, #f0ad4e 0%, #eb9316 100%); 230 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0); 231 | filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); 232 | background-repeat: repeat-x; 233 | border-color: #e38d13; 234 | } 235 | .btn-warning:hover, 236 | .btn-warning:focus { 237 | background-color: #eb9316; 238 | background-position: 0 -15px; 239 | } 240 | .btn-warning:active, 241 | .btn-warning.active { 242 | background-color: #eb9316; 243 | border-color: #e38d13; 244 | } 245 | .btn-warning.disabled, 246 | .btn-warning[disabled], 247 | fieldset[disabled] .btn-warning, 248 | .btn-warning.disabled:hover, 249 | .btn-warning[disabled]:hover, 250 | fieldset[disabled] .btn-warning:hover, 251 | .btn-warning.disabled:focus, 252 | .btn-warning[disabled]:focus, 253 | fieldset[disabled] .btn-warning:focus, 254 | .btn-warning.disabled.focus, 255 | .btn-warning[disabled].focus, 256 | fieldset[disabled] .btn-warning.focus, 257 | .btn-warning.disabled:active, 258 | .btn-warning[disabled]:active, 259 | fieldset[disabled] .btn-warning:active, 260 | .btn-warning.disabled.active, 261 | .btn-warning[disabled].active, 262 | fieldset[disabled] .btn-warning.active { 263 | background-color: #eb9316; 264 | background-image: none; 265 | } 266 | .btn-danger { 267 | background-image: -webkit-linear-gradient(top, #d9534f 0%, #c12e2a 100%); 268 | background-image: -o-linear-gradient(top, #d9534f 0%, #c12e2a 100%); 269 | background-image: linear-gradient(to bottom, #d9534f 0%, #c12e2a 100%); 270 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0); 271 | filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); 272 | background-repeat: repeat-x; 273 | border-color: #b92c28; 274 | } 275 | .btn-danger:hover, 276 | .btn-danger:focus { 277 | background-color: #c12e2a; 278 | background-position: 0 -15px; 279 | } 280 | .btn-danger:active, 281 | .btn-danger.active { 282 | background-color: #c12e2a; 283 | border-color: #b92c28; 284 | } 285 | .btn-danger.disabled, 286 | .btn-danger[disabled], 287 | fieldset[disabled] .btn-danger, 288 | .btn-danger.disabled:hover, 289 | .btn-danger[disabled]:hover, 290 | fieldset[disabled] .btn-danger:hover, 291 | .btn-danger.disabled:focus, 292 | .btn-danger[disabled]:focus, 293 | fieldset[disabled] .btn-danger:focus, 294 | .btn-danger.disabled.focus, 295 | .btn-danger[disabled].focus, 296 | fieldset[disabled] .btn-danger.focus, 297 | .btn-danger.disabled:active, 298 | .btn-danger[disabled]:active, 299 | fieldset[disabled] .btn-danger:active, 300 | .btn-danger.disabled.active, 301 | .btn-danger[disabled].active, 302 | fieldset[disabled] .btn-danger.active { 303 | background-color: #c12e2a; 304 | background-image: none; 305 | } 306 | .thumbnail, 307 | .img-thumbnail { 308 | -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075); 309 | box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075); 310 | } 311 | .dropdown-menu > li > a:hover, 312 | .dropdown-menu > li > a:focus { 313 | background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%); 314 | background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%); 315 | background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%); 316 | background-repeat: repeat-x; 317 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0); 318 | background-color: #e8e8e8; 319 | } 320 | .dropdown-menu > .active > a, 321 | .dropdown-menu > .active > a:hover, 322 | .dropdown-menu > .active > a:focus { 323 | background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%); 324 | background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%); 325 | background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%); 326 | background-repeat: repeat-x; 327 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0); 328 | background-color: #2e6da4; 329 | } 330 | .navbar-default { 331 | background-image: -webkit-linear-gradient(top, #fd8c65 0%, #fd6732 100%); 332 | background-image: -o-linear-gradient(top, #fd8c65 0%, #fd6732 100%); 333 | background-image: linear-gradient(to bottom, #fd8c65 0%, #fd6732 100%); 334 | background-repeat: repeat-x; 335 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffd8c65', endColorstr='#fffd6732', GradientType=0); 336 | filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); 337 | border-radius: 4px; 338 | -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 5px rgba(0, 0, 0, 0.075); 339 | box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 5px rgba(0, 0, 0, 0.075); 340 | } 341 | .navbar-default .navbar-nav > .open > a, 342 | .navbar-default .navbar-nav > .active > a { 343 | background-image: -webkit-linear-gradient(top, #f24102 0%, #fd4707 100%); 344 | background-image: -o-linear-gradient(top, #f24102 0%, #fd4707 100%); 345 | background-image: linear-gradient(to bottom, #f24102 0%, #fd4707 100%); 346 | background-repeat: repeat-x; 347 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff24102', endColorstr='#fffd4707', GradientType=0); 348 | -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.075); 349 | box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.075); 350 | } 351 | .navbar-brand, 352 | .navbar-nav > li > a { 353 | text-shadow: 0 1px 0 rgba(255, 255, 255, 0.25); 354 | } 355 | .navbar-inverse { 356 | background-image: -webkit-linear-gradient(top, #3c3c3c 0%, #222 100%); 357 | background-image: -o-linear-gradient(top, #3c3c3c 0%, #222 100%); 358 | background-image: linear-gradient(to bottom, #3c3c3c 0%, #222 100%); 359 | background-repeat: repeat-x; 360 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0); 361 | filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); 362 | border-radius: 4px; 363 | } 364 | .navbar-inverse .navbar-nav > .open > a, 365 | .navbar-inverse .navbar-nav > .active > a { 366 | background-image: -webkit-linear-gradient(top, #080808 0%, #0f0f0f 100%); 367 | background-image: -o-linear-gradient(top, #080808 0%, #0f0f0f 100%); 368 | background-image: linear-gradient(to bottom, #080808 0%, #0f0f0f 100%); 369 | background-repeat: repeat-x; 370 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0); 371 | -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.25); 372 | box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.25); 373 | } 374 | .navbar-inverse .navbar-brand, 375 | .navbar-inverse .navbar-nav > li > a { 376 | text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); 377 | } 378 | .navbar-static-top, 379 | .navbar-fixed-top, 380 | .navbar-fixed-bottom { 381 | border-radius: 0; 382 | } 383 | @media (max-width: 767px) { 384 | .navbar .navbar-nav .open .dropdown-menu > .active > a, 385 | .navbar .navbar-nav .open .dropdown-menu > .active > a:hover, 386 | .navbar .navbar-nav .open .dropdown-menu > .active > a:focus { 387 | color: #fff; 388 | background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%); 389 | background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%); 390 | background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%); 391 | background-repeat: repeat-x; 392 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0); 393 | } 394 | } 395 | .alert { 396 | text-shadow: 0 1px 0 rgba(255, 255, 255, 0.2); 397 | -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05); 398 | box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05); 399 | } 400 | .alert-success { 401 | background-image: -webkit-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%); 402 | background-image: -o-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%); 403 | background-image: linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%); 404 | background-repeat: repeat-x; 405 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0); 406 | border-color: #b2dba1; 407 | } 408 | .alert-info { 409 | background-image: -webkit-linear-gradient(top, #d9edf7 0%, #b9def0 100%); 410 | background-image: -o-linear-gradient(top, #d9edf7 0%, #b9def0 100%); 411 | background-image: linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%); 412 | background-repeat: repeat-x; 413 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0); 414 | border-color: #9acfea; 415 | } 416 | .alert-warning { 417 | background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%); 418 | background-image: -o-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%); 419 | background-image: linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%); 420 | background-repeat: repeat-x; 421 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0); 422 | border-color: #f5e79e; 423 | } 424 | .alert-danger { 425 | background-image: -webkit-linear-gradient(top, #f2dede 0%, #e7c3c3 100%); 426 | background-image: -o-linear-gradient(top, #f2dede 0%, #e7c3c3 100%); 427 | background-image: linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%); 428 | background-repeat: repeat-x; 429 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0); 430 | border-color: #dca7a7; 431 | } 432 | .progress { 433 | background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%); 434 | background-image: -o-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%); 435 | background-image: linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%); 436 | background-repeat: repeat-x; 437 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0); 438 | } 439 | .progress-bar { 440 | background-image: -webkit-linear-gradient(top, #337ab7 0%, #286090 100%); 441 | background-image: -o-linear-gradient(top, #337ab7 0%, #286090 100%); 442 | background-image: linear-gradient(to bottom, #337ab7 0%, #286090 100%); 443 | background-repeat: repeat-x; 444 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0); 445 | } 446 | .progress-bar-success { 447 | background-image: -webkit-linear-gradient(top, #5cb85c 0%, #449d44 100%); 448 | background-image: -o-linear-gradient(top, #5cb85c 0%, #449d44 100%); 449 | background-image: linear-gradient(to bottom, #5cb85c 0%, #449d44 100%); 450 | background-repeat: repeat-x; 451 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0); 452 | } 453 | .progress-bar-info { 454 | background-image: -webkit-linear-gradient(top, #5bc0de 0%, #31b0d5 100%); 455 | background-image: -o-linear-gradient(top, #5bc0de 0%, #31b0d5 100%); 456 | background-image: linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%); 457 | background-repeat: repeat-x; 458 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0); 459 | } 460 | .progress-bar-warning { 461 | background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #ec971f 100%); 462 | background-image: -o-linear-gradient(top, #f0ad4e 0%, #ec971f 100%); 463 | background-image: linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%); 464 | background-repeat: repeat-x; 465 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0); 466 | } 467 | .progress-bar-danger { 468 | background-image: -webkit-linear-gradient(top, #d9534f 0%, #c9302c 100%); 469 | background-image: -o-linear-gradient(top, #d9534f 0%, #c9302c 100%); 470 | background-image: linear-gradient(to bottom, #d9534f 0%, #c9302c 100%); 471 | background-repeat: repeat-x; 472 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0); 473 | } 474 | .progress-bar-striped { 475 | background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); 476 | background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); 477 | background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); 478 | } 479 | .list-group { 480 | border-radius: 4px; 481 | -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075); 482 | box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075); 483 | } 484 | .list-group-item.active, 485 | .list-group-item.active:hover, 486 | .list-group-item.active:focus { 487 | text-shadow: 0 -1px 0 #286090; 488 | background-image: -webkit-linear-gradient(top, #337ab7 0%, #2b669a 100%); 489 | background-image: -o-linear-gradient(top, #337ab7 0%, #2b669a 100%); 490 | background-image: linear-gradient(to bottom, #337ab7 0%, #2b669a 100%); 491 | background-repeat: repeat-x; 492 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0); 493 | border-color: #2b669a; 494 | } 495 | .list-group-item.active .badge, 496 | .list-group-item.active:hover .badge, 497 | .list-group-item.active:focus .badge { 498 | text-shadow: none; 499 | } 500 | .panel { 501 | -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); 502 | box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); 503 | } 504 | .panel-default > .panel-heading { 505 | background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%); 506 | background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%); 507 | background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%); 508 | background-repeat: repeat-x; 509 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0); 510 | } 511 | .panel-primary > .panel-heading { 512 | background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%); 513 | background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%); 514 | background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%); 515 | background-repeat: repeat-x; 516 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0); 517 | } 518 | .panel-success > .panel-heading { 519 | background-image: -webkit-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%); 520 | background-image: -o-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%); 521 | background-image: linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%); 522 | background-repeat: repeat-x; 523 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0); 524 | } 525 | .panel-info > .panel-heading { 526 | background-image: -webkit-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%); 527 | background-image: -o-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%); 528 | background-image: linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%); 529 | background-repeat: repeat-x; 530 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0); 531 | } 532 | .panel-warning > .panel-heading { 533 | background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%); 534 | background-image: -o-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%); 535 | background-image: linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%); 536 | background-repeat: repeat-x; 537 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0); 538 | } 539 | .panel-danger > .panel-heading { 540 | background-image: -webkit-linear-gradient(top, #f2dede 0%, #ebcccc 100%); 541 | background-image: -o-linear-gradient(top, #f2dede 0%, #ebcccc 100%); 542 | background-image: linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%); 543 | background-repeat: repeat-x; 544 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0); 545 | } 546 | .well { 547 | background-image: -webkit-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%); 548 | background-image: -o-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%); 549 | background-image: linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%); 550 | background-repeat: repeat-x; 551 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0); 552 | border-color: #dcdcdc; 553 | -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.05), 0 1px 0 rgba(255, 255, 255, 0.1); 554 | box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.05), 0 1px 0 rgba(255, 255, 255, 0.1); 555 | } 556 | /*# sourceMappingURL=bootstrap-theme.css.map */ -------------------------------------------------------------------------------- /django/site_media/css/bootstrap/bootstrap-theme.css.map: -------------------------------------------------------------------------------- 1 | {"version":3,"sources":["less/theme.less","less/mixins/vendor-prefixes.less","less/mixins/gradients.less","less/mixins/reset-filter.less"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Bootstrap v3.3.7 (http://getbootstrap.com)\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n\n//\n// Load core variables and mixins\n// --------------------------------------------------\n\n@import \"variables.less\";\n@import \"mixins.less\";\n\n\n//\n// Buttons\n// --------------------------------------------------\n\n// Common styles\n.btn-default,\n.btn-primary,\n.btn-success,\n.btn-info,\n.btn-warning,\n.btn-danger {\n text-shadow: 0 -1px 0 rgba(0,0,0,.2);\n @shadow: inset 0 1px 0 rgba(255,255,255,.15), 0 1px 1px rgba(0,0,0,.075);\n .box-shadow(@shadow);\n\n // Reset the shadow\n &:active,\n &.active {\n .box-shadow(inset 0 3px 5px rgba(0,0,0,.125));\n }\n\n &.disabled,\n &[disabled],\n fieldset[disabled] & {\n .box-shadow(none);\n }\n\n .badge {\n text-shadow: none;\n }\n}\n\n// Mixin for generating new styles\n.btn-styles(@btn-color: #555) {\n #gradient > .vertical(@start-color: @btn-color; @end-color: darken(@btn-color, 12%));\n .reset-filter(); // Disable gradients for IE9 because filter bleeds through rounded corners; see https://github.com/twbs/bootstrap/issues/10620\n background-repeat: repeat-x;\n border-color: darken(@btn-color, 14%);\n\n &:hover,\n &:focus {\n background-color: darken(@btn-color, 12%);\n background-position: 0 -15px;\n }\n\n &:active,\n &.active {\n background-color: darken(@btn-color, 12%);\n border-color: darken(@btn-color, 14%);\n }\n\n &.disabled,\n &[disabled],\n fieldset[disabled] & {\n &,\n &:hover,\n &:focus,\n &.focus,\n &:active,\n &.active {\n background-color: darken(@btn-color, 12%);\n background-image: none;\n }\n }\n}\n\n// Common styles\n.btn {\n // Remove the gradient for the pressed/active state\n &:active,\n &.active {\n background-image: none;\n }\n}\n\n// Apply the mixin to the buttons\n.btn-default { .btn-styles(@btn-default-bg); text-shadow: 0 1px 0 #fff; border-color: #ccc; }\n.btn-primary { .btn-styles(@btn-primary-bg); }\n.btn-success { .btn-styles(@btn-success-bg); }\n.btn-info { .btn-styles(@btn-info-bg); }\n.btn-warning { .btn-styles(@btn-warning-bg); }\n.btn-danger { .btn-styles(@btn-danger-bg); }\n\n\n//\n// Images\n// --------------------------------------------------\n\n.thumbnail,\n.img-thumbnail {\n .box-shadow(0 1px 2px rgba(0,0,0,.075));\n}\n\n\n//\n// Dropdowns\n// --------------------------------------------------\n\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n #gradient > .vertical(@start-color: @dropdown-link-hover-bg; @end-color: darken(@dropdown-link-hover-bg, 5%));\n background-color: darken(@dropdown-link-hover-bg, 5%);\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n #gradient > .vertical(@start-color: @dropdown-link-active-bg; @end-color: darken(@dropdown-link-active-bg, 5%));\n background-color: darken(@dropdown-link-active-bg, 5%);\n}\n\n\n//\n// Navbar\n// --------------------------------------------------\n\n// Default navbar\n.navbar-default {\n #gradient > .vertical(@start-color: lighten(@navbar-default-bg, 10%); @end-color: @navbar-default-bg);\n .reset-filter(); // Remove gradient in IE<10 to fix bug where dropdowns don't get triggered\n border-radius: @navbar-border-radius;\n @shadow: inset 0 1px 0 rgba(255,255,255,.15), 0 1px 5px rgba(0,0,0,.075);\n .box-shadow(@shadow);\n\n .navbar-nav > .open > a,\n .navbar-nav > .active > a {\n #gradient > .vertical(@start-color: darken(@navbar-default-link-active-bg, 5%); @end-color: darken(@navbar-default-link-active-bg, 2%));\n .box-shadow(inset 0 3px 9px rgba(0,0,0,.075));\n }\n}\n.navbar-brand,\n.navbar-nav > li > a {\n text-shadow: 0 1px 0 rgba(255,255,255,.25);\n}\n\n// Inverted navbar\n.navbar-inverse {\n #gradient > .vertical(@start-color: lighten(@navbar-inverse-bg, 10%); @end-color: @navbar-inverse-bg);\n .reset-filter(); // Remove gradient in IE<10 to fix bug where dropdowns don't get triggered; see https://github.com/twbs/bootstrap/issues/10257\n border-radius: @navbar-border-radius;\n .navbar-nav > .open > a,\n .navbar-nav > .active > a {\n #gradient > .vertical(@start-color: @navbar-inverse-link-active-bg; @end-color: lighten(@navbar-inverse-link-active-bg, 2.5%));\n .box-shadow(inset 0 3px 9px rgba(0,0,0,.25));\n }\n\n .navbar-brand,\n .navbar-nav > li > a {\n text-shadow: 0 -1px 0 rgba(0,0,0,.25);\n }\n}\n\n// Undo rounded corners in static and fixed navbars\n.navbar-static-top,\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n border-radius: 0;\n}\n\n// Fix active state of dropdown items in collapsed mode\n@media (max-width: @grid-float-breakpoint-max) {\n .navbar .navbar-nav .open .dropdown-menu > .active > a {\n &,\n &:hover,\n &:focus {\n color: #fff;\n #gradient > .vertical(@start-color: @dropdown-link-active-bg; @end-color: darken(@dropdown-link-active-bg, 5%));\n }\n }\n}\n\n\n//\n// Alerts\n// --------------------------------------------------\n\n// Common styles\n.alert {\n text-shadow: 0 1px 0 rgba(255,255,255,.2);\n @shadow: inset 0 1px 0 rgba(255,255,255,.25), 0 1px 2px rgba(0,0,0,.05);\n .box-shadow(@shadow);\n}\n\n// Mixin for generating new styles\n.alert-styles(@color) {\n #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 7.5%));\n border-color: darken(@color, 15%);\n}\n\n// Apply the mixin to the alerts\n.alert-success { .alert-styles(@alert-success-bg); }\n.alert-info { .alert-styles(@alert-info-bg); }\n.alert-warning { .alert-styles(@alert-warning-bg); }\n.alert-danger { .alert-styles(@alert-danger-bg); }\n\n\n//\n// Progress bars\n// --------------------------------------------------\n\n// Give the progress background some depth\n.progress {\n #gradient > .vertical(@start-color: darken(@progress-bg, 4%); @end-color: @progress-bg)\n}\n\n// Mixin for generating new styles\n.progress-bar-styles(@color) {\n #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 10%));\n}\n\n// Apply the mixin to the progress bars\n.progress-bar { .progress-bar-styles(@progress-bar-bg); }\n.progress-bar-success { .progress-bar-styles(@progress-bar-success-bg); }\n.progress-bar-info { .progress-bar-styles(@progress-bar-info-bg); }\n.progress-bar-warning { .progress-bar-styles(@progress-bar-warning-bg); }\n.progress-bar-danger { .progress-bar-styles(@progress-bar-danger-bg); }\n\n// Reset the striped class because our mixins don't do multiple gradients and\n// the above custom styles override the new `.progress-bar-striped` in v3.2.0.\n.progress-bar-striped {\n #gradient > .striped();\n}\n\n\n//\n// List groups\n// --------------------------------------------------\n\n.list-group {\n border-radius: @border-radius-base;\n .box-shadow(0 1px 2px rgba(0,0,0,.075));\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n text-shadow: 0 -1px 0 darken(@list-group-active-bg, 10%);\n #gradient > .vertical(@start-color: @list-group-active-bg; @end-color: darken(@list-group-active-bg, 7.5%));\n border-color: darken(@list-group-active-border, 7.5%);\n\n .badge {\n text-shadow: none;\n }\n}\n\n\n//\n// Panels\n// --------------------------------------------------\n\n// Common styles\n.panel {\n .box-shadow(0 1px 2px rgba(0,0,0,.05));\n}\n\n// Mixin for generating new styles\n.panel-heading-styles(@color) {\n #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 5%));\n}\n\n// Apply the mixin to the panel headings only\n.panel-default > .panel-heading { .panel-heading-styles(@panel-default-heading-bg); }\n.panel-primary > .panel-heading { .panel-heading-styles(@panel-primary-heading-bg); }\n.panel-success > .panel-heading { .panel-heading-styles(@panel-success-heading-bg); }\n.panel-info > .panel-heading { .panel-heading-styles(@panel-info-heading-bg); }\n.panel-warning > .panel-heading { .panel-heading-styles(@panel-warning-heading-bg); }\n.panel-danger > .panel-heading { .panel-heading-styles(@panel-danger-heading-bg); }\n\n\n//\n// Wells\n// --------------------------------------------------\n\n.well {\n #gradient > .vertical(@start-color: darken(@well-bg, 5%); @end-color: @well-bg);\n border-color: darken(@well-bg, 10%);\n @shadow: inset 0 1px 3px rgba(0,0,0,.05), 0 1px 0 rgba(255,255,255,.1);\n .box-shadow(@shadow);\n}\n","// Vendor Prefixes\n//\n// All vendor mixins are deprecated as of v3.2.0 due to the introduction of\n// Autoprefixer in our Gruntfile. They have been removed in v4.\n\n// - Animations\n// - Backface visibility\n// - Box shadow\n// - Box sizing\n// - Content columns\n// - Hyphens\n// - Placeholder text\n// - Transformations\n// - Transitions\n// - User Select\n\n\n// Animations\n.animation(@animation) {\n -webkit-animation: @animation;\n -o-animation: @animation;\n animation: @animation;\n}\n.animation-name(@name) {\n -webkit-animation-name: @name;\n animation-name: @name;\n}\n.animation-duration(@duration) {\n -webkit-animation-duration: @duration;\n animation-duration: @duration;\n}\n.animation-timing-function(@timing-function) {\n -webkit-animation-timing-function: @timing-function;\n animation-timing-function: @timing-function;\n}\n.animation-delay(@delay) {\n -webkit-animation-delay: @delay;\n animation-delay: @delay;\n}\n.animation-iteration-count(@iteration-count) {\n -webkit-animation-iteration-count: @iteration-count;\n animation-iteration-count: @iteration-count;\n}\n.animation-direction(@direction) {\n -webkit-animation-direction: @direction;\n animation-direction: @direction;\n}\n.animation-fill-mode(@fill-mode) {\n -webkit-animation-fill-mode: @fill-mode;\n animation-fill-mode: @fill-mode;\n}\n\n// Backface visibility\n// Prevent browsers from flickering when using CSS 3D transforms.\n// Default value is `visible`, but can be changed to `hidden`\n\n.backface-visibility(@visibility) {\n -webkit-backface-visibility: @visibility;\n -moz-backface-visibility: @visibility;\n backface-visibility: @visibility;\n}\n\n// Drop shadows\n//\n// Note: Deprecated `.box-shadow()` as of v3.1.0 since all of Bootstrap's\n// supported browsers that have box shadow capabilities now support it.\n\n.box-shadow(@shadow) {\n -webkit-box-shadow: @shadow; // iOS <4.3 & Android <4.1\n box-shadow: @shadow;\n}\n\n// Box sizing\n.box-sizing(@boxmodel) {\n -webkit-box-sizing: @boxmodel;\n -moz-box-sizing: @boxmodel;\n box-sizing: @boxmodel;\n}\n\n// CSS3 Content Columns\n.content-columns(@column-count; @column-gap: @grid-gutter-width) {\n -webkit-column-count: @column-count;\n -moz-column-count: @column-count;\n column-count: @column-count;\n -webkit-column-gap: @column-gap;\n -moz-column-gap: @column-gap;\n column-gap: @column-gap;\n}\n\n// Optional hyphenation\n.hyphens(@mode: auto) {\n word-wrap: break-word;\n -webkit-hyphens: @mode;\n -moz-hyphens: @mode;\n -ms-hyphens: @mode; // IE10+\n -o-hyphens: @mode;\n hyphens: @mode;\n}\n\n// Placeholder text\n.placeholder(@color: @input-color-placeholder) {\n // Firefox\n &::-moz-placeholder {\n color: @color;\n opacity: 1; // Override Firefox's unusual default opacity; see https://github.com/twbs/bootstrap/pull/11526\n }\n &:-ms-input-placeholder { color: @color; } // Internet Explorer 10+\n &::-webkit-input-placeholder { color: @color; } // Safari and Chrome\n}\n\n// Transformations\n.scale(@ratio) {\n -webkit-transform: scale(@ratio);\n -ms-transform: scale(@ratio); // IE9 only\n -o-transform: scale(@ratio);\n transform: scale(@ratio);\n}\n.scale(@ratioX; @ratioY) {\n -webkit-transform: scale(@ratioX, @ratioY);\n -ms-transform: scale(@ratioX, @ratioY); // IE9 only\n -o-transform: scale(@ratioX, @ratioY);\n transform: scale(@ratioX, @ratioY);\n}\n.scaleX(@ratio) {\n -webkit-transform: scaleX(@ratio);\n -ms-transform: scaleX(@ratio); // IE9 only\n -o-transform: scaleX(@ratio);\n transform: scaleX(@ratio);\n}\n.scaleY(@ratio) {\n -webkit-transform: scaleY(@ratio);\n -ms-transform: scaleY(@ratio); // IE9 only\n -o-transform: scaleY(@ratio);\n transform: scaleY(@ratio);\n}\n.skew(@x; @y) {\n -webkit-transform: skewX(@x) skewY(@y);\n -ms-transform: skewX(@x) skewY(@y); // See https://github.com/twbs/bootstrap/issues/4885; IE9+\n -o-transform: skewX(@x) skewY(@y);\n transform: skewX(@x) skewY(@y);\n}\n.translate(@x; @y) {\n -webkit-transform: translate(@x, @y);\n -ms-transform: translate(@x, @y); // IE9 only\n -o-transform: translate(@x, @y);\n transform: translate(@x, @y);\n}\n.translate3d(@x; @y; @z) {\n -webkit-transform: translate3d(@x, @y, @z);\n transform: translate3d(@x, @y, @z);\n}\n.rotate(@degrees) {\n -webkit-transform: rotate(@degrees);\n -ms-transform: rotate(@degrees); // IE9 only\n -o-transform: rotate(@degrees);\n transform: rotate(@degrees);\n}\n.rotateX(@degrees) {\n -webkit-transform: rotateX(@degrees);\n -ms-transform: rotateX(@degrees); // IE9 only\n -o-transform: rotateX(@degrees);\n transform: rotateX(@degrees);\n}\n.rotateY(@degrees) {\n -webkit-transform: rotateY(@degrees);\n -ms-transform: rotateY(@degrees); // IE9 only\n -o-transform: rotateY(@degrees);\n transform: rotateY(@degrees);\n}\n.perspective(@perspective) {\n -webkit-perspective: @perspective;\n -moz-perspective: @perspective;\n perspective: @perspective;\n}\n.perspective-origin(@perspective) {\n -webkit-perspective-origin: @perspective;\n -moz-perspective-origin: @perspective;\n perspective-origin: @perspective;\n}\n.transform-origin(@origin) {\n -webkit-transform-origin: @origin;\n -moz-transform-origin: @origin;\n -ms-transform-origin: @origin; // IE9 only\n transform-origin: @origin;\n}\n\n\n// Transitions\n\n.transition(@transition) {\n -webkit-transition: @transition;\n -o-transition: @transition;\n transition: @transition;\n}\n.transition-property(@transition-property) {\n -webkit-transition-property: @transition-property;\n transition-property: @transition-property;\n}\n.transition-delay(@transition-delay) {\n -webkit-transition-delay: @transition-delay;\n transition-delay: @transition-delay;\n}\n.transition-duration(@transition-duration) {\n -webkit-transition-duration: @transition-duration;\n transition-duration: @transition-duration;\n}\n.transition-timing-function(@timing-function) {\n -webkit-transition-timing-function: @timing-function;\n transition-timing-function: @timing-function;\n}\n.transition-transform(@transition) {\n -webkit-transition: -webkit-transform @transition;\n -moz-transition: -moz-transform @transition;\n -o-transition: -o-transform @transition;\n transition: transform @transition;\n}\n\n\n// User select\n// For selecting text on the page\n\n.user-select(@select) {\n -webkit-user-select: @select;\n -moz-user-select: @select;\n -ms-user-select: @select; // IE10+\n user-select: @select;\n}\n","// Gradients\n\n#gradient {\n\n // Horizontal gradient, from left to right\n //\n // Creates two color stops, start and end, by specifying a color and position for each color stop.\n // Color stops are not available in IE9 and below.\n .horizontal(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n background-image: -webkit-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Opera 12\n background-image: linear-gradient(to right, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n background-repeat: repeat-x;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\",argb(@start-color),argb(@end-color))); // IE9 and down\n }\n\n // Vertical gradient, from top to bottom\n //\n // Creates two color stops, start and end, by specifying a color and position for each color stop.\n // Color stops are not available in IE9 and below.\n .vertical(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n background-image: -webkit-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Opera 12\n background-image: linear-gradient(to bottom, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n background-repeat: repeat-x;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",argb(@start-color),argb(@end-color))); // IE9 and down\n }\n\n .directional(@start-color: #555; @end-color: #333; @deg: 45deg) {\n background-repeat: repeat-x;\n background-image: -webkit-linear-gradient(@deg, @start-color, @end-color); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(@deg, @start-color, @end-color); // Opera 12\n background-image: linear-gradient(@deg, @start-color, @end-color); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n }\n .horizontal-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n background-image: -webkit-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n background-image: -o-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n background-image: linear-gradient(to right, @start-color, @mid-color @color-stop, @end-color);\n background-repeat: no-repeat;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n }\n .vertical-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n background-image: -webkit-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-image: -o-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-image: linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-repeat: no-repeat;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n }\n .radial(@inner-color: #555; @outer-color: #333) {\n background-image: -webkit-radial-gradient(circle, @inner-color, @outer-color);\n background-image: radial-gradient(circle, @inner-color, @outer-color);\n background-repeat: no-repeat;\n }\n .striped(@color: rgba(255,255,255,.15); @angle: 45deg) {\n background-image: -webkit-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n background-image: linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n }\n}\n","// Reset filters for IE\n//\n// When you need to remove a gradient background, do not forget to use this to reset\n// the IE filter for IE9 and below.\n\n.reset-filter() {\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(enabled = false)\"));\n}\n"]} --------------------------------------------------------------------------------