├── 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 |
| Name | 13 |Eggs | 14 |Points | 15 |
|---|---|---|
| {{ p.name }} | 19 |{{ p.number_of_eggs }} | 20 |{{ p.score }} | 21 |
| Name | 12 |Points | 13 |QR-Code | 14 |
|---|---|---|
| {{ e.name }} | 18 |{{ e.points }} | 19 |
| Image | 12 |Name | 13 |Catches | 14 |Points | 15 |Description | 16 |
|---|---|---|---|---|
|
20 | {% if e.image %}
21 | |
24 | {{ e.name }} | 25 |{{ e.number_of_catches }} 26 | | {{ e.points }} | 27 |{{ e.description }} 28 | |
| Egg | 20 |Points | 21 |Date | 22 | 23 | {% for c in catches %} 24 |
|---|---|---|
| 26 | {{ c.egg.name }} 27 | | 28 |29 | {{ c.egg.points }} 30 | | 31 |32 | {{ c.date }} 33 | | 34 |
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 |Catch virtual eggs by scanning QR-codes
13 | 14 |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 |Suprizes.
23 | 24 |Eggs can be found in SQ Pub, cafeteria and parking. No eggs will be placed in offices and common areas.
27 | 28 |Yes. An egg can be caught once by each player.
31 | 32 |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 |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 |11 |
12 |
13 |
14 | 15 |
| Image | 20 |Name | 21 |Catches | 22 |Points | 23 |Description | 24 |
|---|---|---|---|---|
|
28 | {% if e.image %}
29 | |
32 | {{ e.name }} | 33 |{{ e.number_of_catches }} 34 | | {{ e.points }} | 35 |{{ e.description }} 36 | |
| Name | 45 |Eggs | 46 |Points | 47 |
|---|---|---|
| {{ p.name }} | 51 |{{ p.number_of_eggs }} | 52 |{{ p.score }} | 53 |
{{ egg.description }}
13 | 14 | {% if egg.is_toxic %} 15 | {% load static %} 16 |
17 | {% endif %}
18 |
19 | {% if egg.image %}
20 | 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 |
48 | 49 | {% endif %} 50 | 51 | {% endif %} 52 | 53 | {% if player %} 54 | 55 | {% if just_caught %} 56 |Caught {{ catch.date }}
59 | {% endif %} 60 | 61 | {% endif %} 62 | 63 |{{ egg.name }} was caught by {{ catches.count }} players.
64 | 65 || Date | 68 |Egg | 69 |Player | 70 |
|---|---|---|
| {{c.date}} | 74 |{{ c.egg.name }} | 75 |{{ c.player.name }} | 76 |
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 | Date
17 | Egg
18 | Player
19 |
20 | {% for c in catches %}
21 |
22 | {{c.date}}
23 | {{ c.egg.name }}
24 | {{ c.player.name }}
25 |
26 | {% endfor %}
27 |
28 |
29 | 🏅 Leaderboard
30 |
31 |
32 |
33 |
34 | Player
35 | Eggs
36 | Score
37 |
38 | {% for p in players_by_eggs_and_score %}
39 |
40 | {{ forloop.counter }}
41 | {{ p.name }}
42 | {{ p.number_of_eggs }}
43 | {{ p.score }}
44 |
45 | {% endfor %}
46 |
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 | - Catch an egg
12 |
- Query players by name
13 |
- Players list
14 |
- Player detail
15 |
- Eggs list
16 |
- Egg detail by id
17 |
- Egg detail by code
18 |
- Egg detail
19 |
- Catches list for player
20 |
- EuroChicken
21 |
- 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"]}
--------------------------------------------------------------------------------