tag:blogger.com,1999:blog-9428099647447797372024-03-18T20:09:53.544-07:00Topical SalveTemporary relief for a meandering mind.Andrewhttp://www.blogger.com/profile/04682028947461698922noreply@blogger.comBlogger876125tag:blogger.com,1999:blog-942809964744779737.post-88017688516725669632022-12-02T16:38:00.000-08:002022-12-02T16:38:42.524-08:00Challenger Bread Pan and the Breville Smart Oven Air Fryer ProDoes the <a href="https://challengerbreadware.com/the-pan/" target="_blank">Challenger Bread Pan</a> fit in the <a href="https://www.breville.com/us/en/products/ovens/bov900.html?sku=BOV900BSSUSC" target="_blank">Breville Smart Oven Air Fryer Pro</a> countertop oven?<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiDxQxkhrHibETF3Kq2Zldz-vNNIGJAS7HdwMCJHnp608XD-EKiCyM79zClWshUPpzVgjZ9oNZboY_Cn0eLKgB6kTHsiWeB0vvtSU8jtiHt5mgMkc4PFovFn31PNkeGFyYwp049Llc1eDfYpH8RGe9dPMwnFIqvXG-XqaYmVCQybN_NbsDdzvrnVIsg/s800/challenger_in_breville-800-no-exif.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="600" data-original-width="800" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiDxQxkhrHibETF3Kq2Zldz-vNNIGJAS7HdwMCJHnp608XD-EKiCyM79zClWshUPpzVgjZ9oNZboY_Cn0eLKgB6kTHsiWeB0vvtSU8jtiHt5mgMkc4PFovFn31PNkeGFyYwp049Llc1eDfYpH8RGe9dPMwnFIqvXG-XqaYmVCQybN_NbsDdzvrnVIsg/s320/challenger_in_breville-800-no-exif.jpg" width="320" /></a></div><br /><p>Yes, it does. But I would not want to try maneuvering the Challenger Bread Pan in and out of the Breville when it's at bread-baking temperature (250C / 480F). There just isn't that much space for your oven mitts between the walls of the oven and the bread pan.</p><p>I think you're much better off with a standard 6 quart Dutch Oven (assuming a metal knob for the lid), or something like this <a href="https://www.lodgecastiron.com/product/double-dutch-oven?sku=L8DD3" target="_blank">Lodge Double Dutch Oven</a>, which you can more easily maneuver in and out of a Breville.</p><p>I baked bread exclusively in a Dutch Oven with my Breville for more than two years. You can achieve great results with that combination. You just have to account for how close the heating elements are to the bread. Perhaps I'll write a post about that someday.<br /></p>Andrewhttp://www.blogger.com/profile/04682028947461698922noreply@blogger.comtag:blogger.com,1999:blog-942809964744779737.post-76002980721231339312021-03-15T06:00:00.001-07:002021-03-15T06:00:06.757-07:00Daylight Saving Time<p>Once again, the United States has suffered another "spring forward", and the thoughts of permanent Daylight Saving Time enters the consciousness of its citizens and representatives. It's a very popular opinion to hold, banishing the time change. For some reason, people glom onto permanent Daylight Savings Time instead of permanent Standard Time, like Arizona and Hawaii have done. I never understood that.</p><p>Opting out of Daylight Saving Time is allowed under federal law, so states can stick with Standard Time. If a representative really believes in permanent Daylight Saving Time, it can be emulated by adopting permanent Standard Time, and mandating state government offices open an hour earlier than they currently do. Problem solved, and it's implementable under current federal law.</p><p>The other question I wonder is if people understand the implications of non-shifting time zones. Let's take four examples from the Pacific Time Zone, from north to south:</p>
<table>
<tbody><tr><th>City</th><th>Earliest Sunrise</th><th>Latest Sunrise</th><th>Earliest Sunset</th><th>Latest Sunset</th></tr>
<tr><td>Seattle, Washington</td><td>4:11 AM PST <br /> 5:11 AM PDT</td><td>7:57 AM PST <br /> 8:57 AM PDT</td><td>4:17 PM PST <br /> 5:17 PM PDT</td><td>8:11 PM PST <br /> 9:11 PM PDT</td></tr>
<tr><td>Portland, Oregon</td><td>4:21 AM PST <br /> 5:21 AM PDT</td><td>7:50 AM PST <br /> 8:50 AM PDT</td><td>4:27 PM PST <br /> 5:27 PM PDT</td><td>8:03 PM PST <br /> 9:03 PM PDT</td></tr>
<tr><td>San Francisco, California</td><td>4:47 AM PST <br /> 5:47 AM PDT</td><td>7:25 AM PST <br /> 8:25 AM PDT</td><td>4:50 PM PST <br /> 5:50 PM PDT</td><td>7:35 PM PST <br /> 8:35 PM PDT</td></tr>
<tr><td>San Diego, California</td><td>4:40 AM PST <br /> 5:40 AM PDT</td><td>6:51 AM PST <br /> 7:51 AM PDT</td><td>4:41 PM PST <br /> 5:41 PM PDT</td><td>7:00 PM PST <br /> 8:00 PM PDT</td></tr>
</tbody></table><p style="text-align: left;">If the West Coast of the United States stuck with Standard Time, the sun would rise in the four o'clock hour in the summers. Conversely, if the West Coast stuck with Daylight Saving Time, in the winter, the sun wouldn't rise until almost nine in the morning. Except in San Diego, because it's so far East.</p><p style="text-align: left;">So is not implementing a time switch twice a year preferred? I don't think you can ask someone from Arizona or Hawaii. Both states seem well situated for their time zones, with reasonable sunrise and sunset ranges. The time switch is certainly a painful adjustment, no matter if you're gaining or losing an hour.</p>Andrewhttp://www.blogger.com/profile/04682028947461698922noreply@blogger.comtag:blogger.com,1999:blog-942809964744779737.post-71742845502313257472021-01-24T06:00:00.001-08:002021-01-24T06:00:04.222-08:00Word of the Day: Ad Hominem<p> This week's word of the day sketch is <a href="https://www.merriam-webster.com/word-of-the-day/ad-hominem-2021-01-23" target="_blank">ad hominem</a>.</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgYmeBhxSnsLJ5QX4BjxjNQkeQP891n2An3VvILh04ckOwXNeLYVG0MnfmfLxErJW9raajlaWuD0kTa0PY2DqkO0Leno1b2Sw-BPr3hHPo2QQy_gViC3_vXx-C84HF9Ilw0UsskBxSJWrI/s800/2021-01-22-ad-hominem.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="618" data-original-width="800" height="309" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgYmeBhxSnsLJ5QX4BjxjNQkeQP891n2An3VvILh04ckOwXNeLYVG0MnfmfLxErJW9raajlaWuD0kTa0PY2DqkO0Leno1b2Sw-BPr3hHPo2QQy_gViC3_vXx-C84HF9Ilw0UsskBxSJWrI/w400-h309/2021-01-22-ad-hominem.png" width="400" /></a></div><br /><p>Annoyingly, brushes don't seem to scale when zooming in and out of documents in Krita. Is it an old Wacom tablet thing, a Linux thing, or just a thing, I wonder?</p>Andrewhttp://www.blogger.com/profile/04682028947461698922noreply@blogger.comtag:blogger.com,1999:blog-942809964744779737.post-52956600203923609882021-01-18T06:00:00.002-08:002021-01-18T06:00:01.763-08:00Word of the Day: Effusive<p>2020 was supposed to be the year I attempted Inktober, or something similar. But October came and went, and I completely forget about it. "Next year," I told myself, as I did the year before, and the year before that. But why wait? Getting word prompts is easy. Online dictionaries readily offer them up. Merriam-Webster even has permalinks to theirs.</p><p>One drawing a day seems a bit onerous. One per week seems more reasonable, so I came up with the following "rules":</p><p></p><ul style="text-align: left;"><li>Read the definition of the Saturday Word of the Day on Merriam-Webster.com. Draw it and post it here before the next Saturday.</li><li>Is Saturday's Word of the Day just utterly uninspiring? Choose a different word of the day from the previous week. But use Saturday's if at all possible.</li><li>If you miss a week, get back on the proverbial horse.</li></ul><p style="text-align: left;">I expect it'll be a bunch of quick sketches at first. I may put more effort into it once I get comfortable drawing on my very old Wacom tablet (the one I was using to draw Home Run) in Krita.</p><p style="text-align: left;">With that, the inaugural Word of the Day sketch is <a href=" https://www.merriam-webster.com/word-of-the-day/effusive-2021-01-16" target="_blank">effusive</a>.</p><p></p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhZ_6m6oCboF_lgT-Lfv76cOHI0lnOk7vuc9-uwqrlfl7KSfM6mM_xtp853uv5TASpKZGRuCKwDf2zpRkESWrYh1B9MwN2KJ4ifs2EboRbx0VcS12Fu0ABzBvHbaQrZ6PJBbIjDPInZo_I/s800/2021-01-16-effusive.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="618" data-original-width="800" height="309" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhZ_6m6oCboF_lgT-Lfv76cOHI0lnOk7vuc9-uwqrlfl7KSfM6mM_xtp853uv5TASpKZGRuCKwDf2zpRkESWrYh1B9MwN2KJ4ifs2EboRbx0VcS12Fu0ABzBvHbaQrZ6PJBbIjDPInZo_I/w400-h309/2021-01-16-effusive.png" width="400" /></a></div><br /><p></p>Andrewhttp://www.blogger.com/profile/04682028947461698922noreply@blogger.comtag:blogger.com,1999:blog-942809964744779737.post-71928508523143134392020-11-23T13:38:00.001-08:002020-11-23T13:41:05.652-08:00Custom-Edited Image Printing on a Canon Selphy CP910<div style="text-align: left;">I recently had need to print an image I created in Gimp on a Canon Selphy CP910, and encountered more difficulty than I expected. Seaching for solutions on the Internet brought up very little useful information, so I thought I would write a quick note here, and maybe the search engine bots will take a liking to it.</div><div style="text-align: left;"><br />The Canon Selphy is a dye sublimation photo printer that makes 4 inch x 6 inch prints on photo-quality paper. It's very good for printing "snaps" from your digital camera. But if you edit your prints before you try to print, there is a chance the Selphy will refuse to print your image. And to reinforce its stance that you should only print originals, it will advance the ink cartridge, and you will get one fewer print off the cartridge. Money down the drain. Here is one use case that can cause that to happen:</div><div style="text-align: left;"><br />I needed to print a couple head shots for identification. The image had to fit within a 2 inch square, and the face had to fit within a minimum and maximum portion of that square. "No problem," I thought. I could take a couple of head shots with my DSLR, crop and resize them in Gimp, and combine them into one 4x6 image to save on printing. I could even add boxes to indicate where to trim the photos.</div><div style="text-align: left;"><br />A 4x6 photo has an image ratio of 1:1.5. At 300 dpi, that's 1200 pixels x 1800 pixels, so that's the size I created my document in Gimp. After scaling my head shots so they fit within the ID requirements at that resolution, I imported them as layers into my Gimp document, and added nice, red boxes around the head shots to indicate where to cut. Then I exported the composite image as a jpeg, stuck it on an SD card, and went to print it on the Selphy.</div><div style="text-align: left;"><br />"Unable to print photo," the Selphy informed me, as it spit out a blank photo, and advanced the ink cartridge.</div><div style="text-align: left;"><br />Looking for solutions on the Internet, someone suggested that maybe putting the original image's EXIF data in the composite image would help. So I tried that.</div><div style="text-align: left;"><br />"Unable to print photo," said the Selphy, and advanced the ink cartridge.</div><div style="text-align: left;"><br />"Maybe if I use a Windows box to create the image instead of my Linux one?" I thought. I spun up Gimp on Windows and re-exported the image.</div><div style="text-align: left;"><br />"Unable to print photo," said the Selphy, and advanced the ink cartridge.</div><div style="text-align: left;"><br />Then I remembered that some years ago, I created a photo booth out of an old DSLR and a Raspberry Pi. It took multiple photos and composited them together using Image Magick. Those images successfully printed on the Selphy, and were effectively created on Linux, so maybe it was Gimp? I converted a PNG exported from Gimp to a jpeg using Image Magick and tried to print that.</div><div style="text-align: left;"><br />"Unable to print photo," said the Selphy, and advanced the ink cartridge.</div><div style="text-align: left;"><br />I dug up an old photo booth image, and examined its image information. The photo booth image had an image ratio of 1:1.48, so I cropped my composite image in Gimp, and exported it.</div><div style="text-align: left;"><br />Et voila! The Selphy happily printed my image.</div><div style="text-align: left;"><br />Moral of the story: If you want to crop an image, or create a new one on your computer to print on a Canon Selphy (at least the CP910), don't make the image ratio 1:1.5! Other ratios may work, but 1:1.48 works for sure.</div>Andrewhttp://www.blogger.com/profile/04682028947461698922noreply@blogger.comtag:blogger.com,1999:blog-942809964744779737.post-14294131819596157022019-11-01T19:17:00.000-07:002019-11-10T14:30:03.557-08:00Fixing a Stuck Door on the Breville BOV900 Smart Oven<div class="separator" style="clear: both; text-align: left;">
Like many people who have purchased a Breville BOV900, after about a year of use, the door got stuck open. At first with enough jiggling, the door would close, but eventually, it got stuck, rendering the oven useless.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
This actually happened to me twice. The first time, I got a replacement oven under warranty. The second time, I decided it wasn't worth the hassle, and searched for a replacement. I quickly found out that there really isn't an equivalent oven on the market, so I decided to see if I could repair the door.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
As it turns out, fixing the stuck door is rather easy. To do it, you will need a #1 Phillips screwdriver with a narrow neck, a T10 Torx driver, and needle nose pliers.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Disclaimer: I do not guarantee that the steps shown to fix a stuck door on the Breville BOV900 will work for you. By following these instructions, the user takes responsibility for any and all outcomes, including, but not limited to, voiding the warranty, rendering the oven useless, destruction of any property, and physical harm to oneself and/or other.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Before attempting to fix your oven, unplug it, and remove the racks and crumb tray.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
To disassemble your oven, you need to remove 12 #1 Phillips screws from the rear of the oven that are holding the top on.</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi91ffvyt824KGyc-Anfc4KXn1G6ydlWwFTy66jet_FXZJnTEuIh0n9gbK4y-Vr-QXdBqfWLZhQPk-n7_DdTotPAVVXoB-rhM4dE_d_BeUG4oE1PGfLIHcfYsqSAAneVcZWS6bZr_PJZiY/s1600/back_screws_marked.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1200" data-original-width="1600" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi91ffvyt824KGyc-Anfc4KXn1G6ydlWwFTy66jet_FXZJnTEuIh0n9gbK4y-Vr-QXdBqfWLZhQPk-n7_DdTotPAVVXoB-rhM4dE_d_BeUG4oE1PGfLIHcfYsqSAAneVcZWS6bZr_PJZiY/s320/back_screws_marked.jpg" width="320" /></a></div>
<br />
You will also need to remove four T10 Torx screws from the sides of the oven (two on each side).<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjK4y_CVcYm8kMF07CeAFwratWURgHKp0lB4_X6uC7BX2YdJXyLdL6LD5mTZ4A8nld1jS6_6hXxgB-7PGhc8Ckm4L3iqSL_6hIPSKnu2oxHgI-vS7I9Ck4ym8piftvIwu8h-KROpoeqnNU/s1600/side_screws_marked.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1200" data-original-width="1600" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjK4y_CVcYm8kMF07CeAFwratWURgHKp0lB4_X6uC7BX2YdJXyLdL6LD5mTZ4A8nld1jS6_6hXxgB-7PGhc8Ckm4L3iqSL_6hIPSKnu2oxHgI-vS7I9Ck4ym8piftvIwu8h-KROpoeqnNU/s320/side_screws_marked.jpg" width="320" /></a></div>
<br />
<br />
Finally, remove the six #1 Phillips screws in recessed holes on the bottom of the oven.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjSbA9QNQ-WtIwnf-dBt6PSSkqnG9cZUQrpnvaj8lDeLs-ztTI3bgQCjj2bPI7aFdwKis5HuwI2-CNo3jlPBkzogbA7H-HYfzqJNy93o9eP8tQ80XT2hMMJW0P07dSAwCdzdqtf4aB-D6U/s1600/bottom_screws_marked.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1200" data-original-width="1600" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjSbA9QNQ-WtIwnf-dBt6PSSkqnG9cZUQrpnvaj8lDeLs-ztTI3bgQCjj2bPI7aFdwKis5HuwI2-CNo3jlPBkzogbA7H-HYfzqJNy93o9eP8tQ80XT2hMMJW0P07dSAwCdzdqtf4aB-D6U/s320/bottom_screws_marked.jpg" width="320" /></a></div>
<br />
Once that is accomplished, you should be able to slide the top of the oven off, or at least maneuver it sufficiently out of the way to facilitate the repair.<br />
<br />
On the left side of the oven (the side without the controls), you will find a leaf switch that is controlled by the door lever. When the door closes, the door lever is supposed to press down on the leaf switch, closing it. When the door opens, pressure is released off the leaf switch, and it opens. The switch tells the oven's microcontroller whether the door is open or not.<br />
<br />
With enough heat cycles, things deform enough that the leaf and the door lever interfere with each other, preventing the closing of the door. Instead of getting pushed down by the door lever, the leaf gets pushed up and back, stopping the door from closing.<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjDr_J1vKZZRK1Qz6Ea648Xuqo4R8-xuMFq5u3GvjAQYZes1QnIrqwErx9fcP1EzVhMe9voXA6ruMBTD_rJotm_6MSILRv0MGjjpM0mo3AXjQBzAF3Xosc6uEAkDQy55PXVx8RQ3z_Xme4/s1600/jammed_front.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="1600" data-original-width="1200" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjDr_J1vKZZRK1Qz6Ea648Xuqo4R8-xuMFq5u3GvjAQYZes1QnIrqwErx9fcP1EzVhMe9voXA6ruMBTD_rJotm_6MSILRv0MGjjpM0mo3AXjQBzAF3Xosc6uEAkDQy55PXVx8RQ3z_Xme4/s320/jammed_front.jpg" width="240" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">High Five?</td></tr>
</tbody></table>
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj7IXgRaOV6Pw-fWesz8iwjub0wriU2BZoV5S1N817pdWTqjTaPcHgaCcXuazzHd1pNoieTo0VLqWpkIGBvrO9rNKt6YesZp4ursp2k_9VDwol_0KBjSst99TGtlBhElZoluOYSbTpJ8uU/s1600/jammped_rear.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="1600" data-original-width="1200" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj7IXgRaOV6Pw-fWesz8iwjub0wriU2BZoV5S1N817pdWTqjTaPcHgaCcXuazzHd1pNoieTo0VLqWpkIGBvrO9rNKt6YesZp4ursp2k_9VDwol_0KBjSst99TGtlBhElZoluOYSbTpJ8uU/s320/jammped_rear.jpg" width="240" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">This helps no one.</td></tr>
</tbody></table>
<br />
To fix this, use the needle nose pliers to bend the tip of the leaf spring down a bit. You don't have to bend much of the spring -- less than 5 mm (1/4 inch) ought to do. And you don't have to bend it down much. Just enough to clear the door lever. Call it 30 degrees.<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg9PhvRmk-FUnLUuxcKoJ01boEL_6ic5eoE2-_015fdfj5akWZu76mBF-uxpnUKBocE32tH6TQNlT_bVkBqH2_pIENe_EMBx2Q8svToK1e1kCAeTGFe0coBslz8SDWgOLWAUkqC6zmwSDc/s1600/bent_switch.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="1600" data-original-width="1200" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg9PhvRmk-FUnLUuxcKoJ01boEL_6ic5eoE2-_015fdfj5akWZu76mBF-uxpnUKBocE32tH6TQNlT_bVkBqH2_pIENe_EMBx2Q8svToK1e1kCAeTGFe0coBslz8SDWgOLWAUkqC6zmwSDc/s320/bent_switch.jpg" width="240" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Duck and Cover.</td></tr>
</tbody></table>
<div class="separator" style="clear: both; text-align: left;">
Once the leaf is sufficiently bent, the door lever should, once again, press down on it when closed.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Before:</div>
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='320' height='266' src='https://www.blogger.com/video.g?token=AD6v5dwKedesld9_FlCt-MqLVkrWT_IyVr9AcpEvTkozTGk1OJWXWEkm9RPFVNd0BiuCpQ6o-dUH69a1zPF9GqyGGw' class='b-hbp-video b-uploaded' frameborder='0'></iframe></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
After:</div>
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='320' height='266' src='https://www.blogger.com/video.g?token=AD6v5dwd3XhTjl4HnhykoVcuFMGd8S4pYH5JBiXq4N8_I-IUkTh4YW-gvp2_aBx5JpodVSzVAsXcZm76QdMIojq7YA' class='b-hbp-video b-uploaded' frameborder='0'></iframe></div>
<br />
To put the top back on your oven, make sure the slots on it facing the front of the oven slide over the silicon gasket, and it seats properly. Then put all the screws back. Don't forget to replace the crumb tray and the racks and to plug in the oven.<br />
<br />
Enjoy your working oven, and hope Breville fixes this design flaw in the next model.Andrewhttp://www.blogger.com/profile/04682028947461698922noreply@blogger.comtag:blogger.com,1999:blog-942809964744779737.post-43393539845380852982019-01-12T06:00:00.000-08:002019-01-12T06:00:04.242-08:00Bettering YourselfIt's the beginning of a new year, the traditional time to make New Year's resolutions. My resolution every year, even if I don't explicitly state it, is to try to be a better person.<br />
<br />
Now, what "better person" means has evolved over time -- at least in the specifics. And over time, I've found pieces on the Internet written by much better writers than me that talk about how to be a better person in whatever specific they were writing about that had some good advice or observation.<br />
<br />
This sort of writing has captured my interest more and more the older I get. It's going to culminate in a "what would you tell your 25-year-old self?" essay, no doubt, some time in the future (not any time soon, I hope). Consider this research for that essay.<br />
<br />
First, a series of articles by David Brady from his blog, Heart, Mind, Code / Why Dave Why about loyalty in the workplace.<br />
<br />
<a href="https://heartmindcode.wordpress.com/2013/08/16/loyalty-and-layoffs/">https://heartmindcode.wordpress.com/2013/08/16/loyalty-and-layoffs/</a><br />
<a href="https://heartmindcode.wordpress.com/2013/09/04/loyalty-and-trust/">https://heartmindcode.wordpress.com/2013/09/04/loyalty-and-trust/</a><br />
<a href="https://heartmindcode.wordpress.com/2013/08/25/loyalty-and-the-headsman/">https://heartmindcode.wordpress.com/2013/08/25/loyalty-and-the-headsman/</a><br />
<a href="https://heartmindcode.wordpress.com/2013/11/07/loyalty-and-daring/">https://heartmindcode.wordpress.com/2013/11/07/loyalty-and-daring/</a><br />
<br />
Next, Kate Heddleston's excellent article on being a team player.<br />
<br />
<a href="https://www.kateheddleston.com/blog/becoming-a-10x-developer">https://www.kateheddleston.com/blog/becoming-a-10x-developer</a><br />
<br />
Talin's collection of essays, which I described to my colleagues as "old person knowledge", do a nice job covering the soft skills one picks up as a professional engineer (or pretty much professional anything-that-involves-working-in-a-company).<br />
<br />
<a href="https://medium.com/machine-words/engineering-insights-15ed954bbcf7">https://medium.com/machine-words/engineering-insights-15ed954bbcf7</a><br />
<br />
And on being a better person in general, Brady Haran's conversation with Cliff Stoll on the Numberphile Podcast may bring a tear to your eye. Well worth the hour to listen to.<br />
<br />
<a href="https://www.youtube.com/watch?v=lxdcBD4ppF0">https://www.youtube.com/watch?v=lxdcBD4ppF0</a><br />
<br />
I may re-post this entry occasionally as I add more links. It'll be much easier to find when I need it if it's near the top of the stack, and it'll help make this blog look like it actually contains something, now that Home Run reruns are complete.Andrewhttp://www.blogger.com/profile/04682028947461698922noreply@blogger.comtag:blogger.com,1999:blog-942809964744779737.post-22094257800232067802018-11-19T06:00:00.000-08:002018-11-19T06:00:07.956-08:00Decoding Morse Code From VideoThe following post is available as a Jupyter Notebook from <a href="https://github.com/AndrewWasHere/video-morse-decoder" target="_blank">the GitHub repo</a>. You can download all the videos from there, or you should be able to watch the full color version here:<br />
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='320' height='266' src='https://www.blogger.com/video.g?token=AD6v5dyf9Y-Eu--NSZryyvJe3CHQXmVmUJyw3aOi8r1Z_hr7glJjxWjUBDt_dDhs_EVgcex3-Qc49nPoX9CJ7pAKaA' class='b-hbp-video b-uploaded' frameborder='0'></iframe></div>
<br />
<script src="https://cdnjs.cloudflare.com/ajax/libs/require.js/2.1.10/require.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script>
<style type="text/css">
/*!
*
* Twitter Bootstrap
*
*/
/*!
* Bootstrap v3.3.7 (http://getbootstrap.com)
* Copyright 2011-2016 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
*/
/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */
html {
font-family: sans-serif;
-ms-text-size-adjust: 100%;
-webkit-text-size-adjust: 100%;
}
body {
margin: 0;
}
article,
aside,
details,
figcaption,
figure,
footer,
header,
hgroup,
main,
menu,
nav,
section,
summary {
display: block;
}
audio,
canvas,
progress,
video {
display: inline-block;
vertical-align: baseline;
}
audio:not([controls]) {
display: none;
height: 0;
}
[hidden],
template {
display: none;
}
a {
background-color: transparent;
}
a:active,
a:hover {
outline: 0;
}
abbr[title] {
border-bottom: 1px dotted;
}
b,
strong {
font-weight: bold;
}
dfn {
font-style: italic;
}
h1 {
font-size: 2em;
margin: 0.67em 0;
}
mark {
background: #ff0;
color: #000;
}
small {
font-size: 80%;
}
sub,
sup {
font-size: 75%;
line-height: 0;
position: relative;
vertical-align: baseline;
}
sup {
top: -0.5em;
}
sub {
bottom: -0.25em;
}
img {
border: 0;
}
svg:not(:root) {
overflow: hidden;
}
figure {
margin: 1em 40px;
}
hr {
box-sizing: content-box;
height: 0;
}
pre {
overflow: auto;
}
code,
kbd,
pre,
samp {
font-family: monospace, monospace;
font-size: 1em;
}
button,
input,
optgroup,
select,
textarea {
color: inherit;
font: inherit;
margin: 0;
}
button {
overflow: visible;
}
button,
select {
text-transform: none;
}
button,
html input[type="button"],
input[type="reset"],
input[type="submit"] {
-webkit-appearance: button;
cursor: pointer;
}
button[disabled],
html input[disabled] {
cursor: default;
}
button::-moz-focus-inner,
input::-moz-focus-inner {
border: 0;
padding: 0;
}
input {
line-height: normal;
}
input[type="checkbox"],
input[type="radio"] {
box-sizing: border-box;
padding: 0;
}
input[type="number"]::-webkit-inner-spin-button,
input[type="number"]::-webkit-outer-spin-button {
height: auto;
}
input[type="search"] {
-webkit-appearance: textfield;
box-sizing: content-box;
}
input[type="search"]::-webkit-search-cancel-button,
input[type="search"]::-webkit-search-decoration {
-webkit-appearance: none;
}
fieldset {
border: 1px solid #c0c0c0;
margin: 0 2px;
padding: 0.35em 0.625em 0.75em;
}
legend {
border: 0;
padding: 0;
}
textarea {
overflow: auto;
}
optgroup {
font-weight: bold;
}
table {
border-collapse: collapse;
border-spacing: 0;
}
td,
th {
padding: 0;
}
/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */
@media print {
*,
*:before,
*:after {
background: transparent !important;
color: #000 !important;
box-shadow: none !important;
text-shadow: none !important;
}
a,
a:visited {
text-decoration: underline;
}
a[href]:after {
content: " (" attr(href) ")";
}
abbr[title]:after {
content: " (" attr(title) ")";
}
a[href^="#"]:after,
a[href^="javascript:"]:after {
content: "";
}
pre,
blockquote {
border: 1px solid #999;
page-break-inside: avoid;
}
thead {
display: table-header-group;
}
tr,
img {
page-break-inside: avoid;
}
img {
max-width: 100% !important;
}
p,
h2,
h3 {
orphans: 3;
widows: 3;
}
h2,
h3 {
page-break-after: avoid;
}
.navbar {
display: none;
}
.btn > .caret,
.dropup > .btn > .caret {
border-top-color: #000 !important;
}
.label {
border: 1px solid #000;
}
.table {
border-collapse: collapse !important;
}
.table td,
.table th {
background-color: #fff !important;
}
.table-bordered th,
.table-bordered td {
border: 1px solid #ddd !important;
}
}
@font-face {
font-family: 'Glyphicons Halflings';
src: url('../components/bootstrap/fonts/glyphicons-halflings-regular.eot');
src: url('../components/bootstrap/fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../components/bootstrap/fonts/glyphicons-halflings-regular.woff2') format('woff2'), url('../components/bootstrap/fonts/glyphicons-halflings-regular.woff') format('woff'), url('../components/bootstrap/fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../components/bootstrap/fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg');
}
.glyphicon {
position: relative;
top: 1px;
display: inline-block;
font-family: 'Glyphicons Halflings';
font-style: normal;
font-weight: normal;
line-height: 1;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
.glyphicon-asterisk:before {
content: "\002a";
}
.glyphicon-plus:before {
content: "\002b";
}
.glyphicon-euro:before,
.glyphicon-eur:before {
content: "\20ac";
}
.glyphicon-minus:before {
content: "\2212";
}
.glyphicon-cloud:before {
content: "\2601";
}
.glyphicon-envelope:before {
content: "\2709";
}
.glyphicon-pencil:before {
content: "\270f";
}
.glyphicon-glass:before {
content: "\e001";
}
.glyphicon-music:before {
content: "\e002";
}
.glyphicon-search:before {
content: "\e003";
}
.glyphicon-heart:before {
content: "\e005";
}
.glyphicon-star:before {
content: "\e006";
}
.glyphicon-star-empty:before {
content: "\e007";
}
.glyphicon-user:before {
content: "\e008";
}
.glyphicon-film:before {
content: "\e009";
}
.glyphicon-th-large:before {
content: "\e010";
}
.glyphicon-th:before {
content: "\e011";
}
.glyphicon-th-list:before {
content: "\e012";
}
.glyphicon-ok:before {
content: "\e013";
}
.glyphicon-remove:before {
content: "\e014";
}
.glyphicon-zoom-in:before {
content: "\e015";
}
.glyphicon-zoom-out:before {
content: "\e016";
}
.glyphicon-off:before {
content: "\e017";
}
.glyphicon-signal:before {
content: "\e018";
}
.glyphicon-cog:before {
content: "\e019";
}
.glyphicon-trash:before {
content: "\e020";
}
.glyphicon-home:before {
content: "\e021";
}
.glyphicon-file:before {
content: "\e022";
}
.glyphicon-time:before {
content: "\e023";
}
.glyphicon-road:before {
content: "\e024";
}
.glyphicon-download-alt:before {
content: "\e025";
}
.glyphicon-download:before {
content: "\e026";
}
.glyphicon-upload:before {
content: "\e027";
}
.glyphicon-inbox:before {
content: "\e028";
}
.glyphicon-play-circle:before {
content: "\e029";
}
.glyphicon-repeat:before {
content: "\e030";
}
.glyphicon-refresh:before {
content: "\e031";
}
.glyphicon-list-alt:before {
content: "\e032";
}
.glyphicon-lock:before {
content: "\e033";
}
.glyphicon-flag:before {
content: "\e034";
}
.glyphicon-headphones:before {
content: "\e035";
}
.glyphicon-volume-off:before {
content: "\e036";
}
.glyphicon-volume-down:before {
content: "\e037";
}
.glyphicon-volume-up:before {
content: "\e038";
}
.glyphicon-qrcode:before {
content: "\e039";
}
.glyphicon-barcode:before {
content: "\e040";
}
.glyphicon-tag:before {
content: "\e041";
}
.glyphicon-tags:before {
content: "\e042";
}
.glyphicon-book:before {
content: "\e043";
}
.glyphicon-bookmark:before {
content: "\e044";
}
.glyphicon-print:before {
content: "\e045";
}
.glyphicon-camera:before {
content: "\e046";
}
.glyphicon-font:before {
content: "\e047";
}
.glyphicon-bold:before {
content: "\e048";
}
.glyphicon-italic:before {
content: "\e049";
}
.glyphicon-text-height:before {
content: "\e050";
}
.glyphicon-text-width:before {
content: "\e051";
}
.glyphicon-align-left:before {
content: "\e052";
}
.glyphicon-align-center:before {
content: "\e053";
}
.glyphicon-align-right:before {
content: "\e054";
}
.glyphicon-align-justify:before {
content: "\e055";
}
.glyphicon-list:before {
content: "\e056";
}
.glyphicon-indent-left:before {
content: "\e057";
}
.glyphicon-indent-right:before {
content: "\e058";
}
.glyphicon-facetime-video:before {
content: "\e059";
}
.glyphicon-picture:before {
content: "\e060";
}
.glyphicon-map-marker:before {
content: "\e062";
}
.glyphicon-adjust:before {
content: "\e063";
}
.glyphicon-tint:before {
content: "\e064";
}
.glyphicon-edit:before {
content: "\e065";
}
.glyphicon-share:before {
content: "\e066";
}
.glyphicon-check:before {
content: "\e067";
}
.glyphicon-move:before {
content: "\e068";
}
.glyphicon-step-backward:before {
content: "\e069";
}
.glyphicon-fast-backward:before {
content: "\e070";
}
.glyphicon-backward:before {
content: "\e071";
}
.glyphicon-play:before {
content: "\e072";
}
.glyphicon-pause:before {
content: "\e073";
}
.glyphicon-stop:before {
content: "\e074";
}
.glyphicon-forward:before {
content: "\e075";
}
.glyphicon-fast-forward:before {
content: "\e076";
}
.glyphicon-step-forward:before {
content: "\e077";
}
.glyphicon-eject:before {
content: "\e078";
}
.glyphicon-chevron-left:before {
content: "\e079";
}
.glyphicon-chevron-right:before {
content: "\e080";
}
.glyphicon-plus-sign:before {
content: "\e081";
}
.glyphicon-minus-sign:before {
content: "\e082";
}
.glyphicon-remove-sign:before {
content: "\e083";
}
.glyphicon-ok-sign:before {
content: "\e084";
}
.glyphicon-question-sign:before {
content: "\e085";
}
.glyphicon-info-sign:before {
content: "\e086";
}
.glyphicon-screenshot:before {
content: "\e087";
}
.glyphicon-remove-circle:before {
content: "\e088";
}
.glyphicon-ok-circle:before {
content: "\e089";
}
.glyphicon-ban-circle:before {
content: "\e090";
}
.glyphicon-arrow-left:before {
content: "\e091";
}
.glyphicon-arrow-right:before {
content: "\e092";
}
.glyphicon-arrow-up:before {
content: "\e093";
}
.glyphicon-arrow-down:before {
content: "\e094";
}
.glyphicon-share-alt:before {
content: "\e095";
}
.glyphicon-resize-full:before {
content: "\e096";
}
.glyphicon-resize-small:before {
content: "\e097";
}
.glyphicon-exclamation-sign:before {
content: "\e101";
}
.glyphicon-gift:before {
content: "\e102";
}
.glyphicon-leaf:before {
content: "\e103";
}
.glyphicon-fire:before {
content: "\e104";
}
.glyphicon-eye-open:before {
content: "\e105";
}
.glyphicon-eye-close:before {
content: "\e106";
}
.glyphicon-warning-sign:before {
content: "\e107";
}
.glyphicon-plane:before {
content: "\e108";
}
.glyphicon-calendar:before {
content: "\e109";
}
.glyphicon-random:before {
content: "\e110";
}
.glyphicon-comment:before {
content: "\e111";
}
.glyphicon-magnet:before {
content: "\e112";
}
.glyphicon-chevron-up:before {
content: "\e113";
}
.glyphicon-chevron-down:before {
content: "\e114";
}
.glyphicon-retweet:before {
content: "\e115";
}
.glyphicon-shopping-cart:before {
content: "\e116";
}
.glyphicon-folder-close:before {
content: "\e117";
}
.glyphicon-folder-open:before {
content: "\e118";
}
.glyphicon-resize-vertical:before {
content: "\e119";
}
.glyphicon-resize-horizontal:before {
content: "\e120";
}
.glyphicon-hdd:before {
content: "\e121";
}
.glyphicon-bullhorn:before {
content: "\e122";
}
.glyphicon-bell:before {
content: "\e123";
}
.glyphicon-certificate:before {
content: "\e124";
}
.glyphicon-thumbs-up:before {
content: "\e125";
}
.glyphicon-thumbs-down:before {
content: "\e126";
}
.glyphicon-hand-right:before {
content: "\e127";
}
.glyphicon-hand-left:before {
content: "\e128";
}
.glyphicon-hand-up:before {
content: "\e129";
}
.glyphicon-hand-down:before {
content: "\e130";
}
.glyphicon-circle-arrow-right:before {
content: "\e131";
}
.glyphicon-circle-arrow-left:before {
content: "\e132";
}
.glyphicon-circle-arrow-up:before {
content: "\e133";
}
.glyphicon-circle-arrow-down:before {
content: "\e134";
}
.glyphicon-globe:before {
content: "\e135";
}
.glyphicon-wrench:before {
content: "\e136";
}
.glyphicon-tasks:before {
content: "\e137";
}
.glyphicon-filter:before {
content: "\e138";
}
.glyphicon-briefcase:before {
content: "\e139";
}
.glyphicon-fullscreen:before {
content: "\e140";
}
.glyphicon-dashboard:before {
content: "\e141";
}
.glyphicon-paperclip:before {
content: "\e142";
}
.glyphicon-heart-empty:before {
content: "\e143";
}
.glyphicon-link:before {
content: "\e144";
}
.glyphicon-phone:before {
content: "\e145";
}
.glyphicon-pushpin:before {
content: "\e146";
}
.glyphicon-usd:before {
content: "\e148";
}
.glyphicon-gbp:before {
content: "\e149";
}
.glyphicon-sort:before {
content: "\e150";
}
.glyphicon-sort-by-alphabet:before {
content: "\e151";
}
.glyphicon-sort-by-alphabet-alt:before {
content: "\e152";
}
.glyphicon-sort-by-order:before {
content: "\e153";
}
.glyphicon-sort-by-order-alt:before {
content: "\e154";
}
.glyphicon-sort-by-attributes:before {
content: "\e155";
}
.glyphicon-sort-by-attributes-alt:before {
content: "\e156";
}
.glyphicon-unchecked:before {
content: "\e157";
}
.glyphicon-expand:before {
content: "\e158";
}
.glyphicon-collapse-down:before {
content: "\e159";
}
.glyphicon-collapse-up:before {
content: "\e160";
}
.glyphicon-log-in:before {
content: "\e161";
}
.glyphicon-flash:before {
content: "\e162";
}
.glyphicon-log-out:before {
content: "\e163";
}
.glyphicon-new-window:before {
content: "\e164";
}
.glyphicon-record:before {
content: "\e165";
}
.glyphicon-save:before {
content: "\e166";
}
.glyphicon-open:before {
content: "\e167";
}
.glyphicon-saved:before {
content: "\e168";
}
.glyphicon-import:before {
content: "\e169";
}
.glyphicon-export:before {
content: "\e170";
}
.glyphicon-send:before {
content: "\e171";
}
.glyphicon-floppy-disk:before {
content: "\e172";
}
.glyphicon-floppy-saved:before {
content: "\e173";
}
.glyphicon-floppy-remove:before {
content: "\e174";
}
.glyphicon-floppy-save:before {
content: "\e175";
}
.glyphicon-floppy-open:before {
content: "\e176";
}
.glyphicon-credit-card:before {
content: "\e177";
}
.glyphicon-transfer:before {
content: "\e178";
}
.glyphicon-cutlery:before {
content: "\e179";
}
.glyphicon-header:before {
content: "\e180";
}
.glyphicon-compressed:before {
content: "\e181";
}
.glyphicon-earphone:before {
content: "\e182";
}
.glyphicon-phone-alt:before {
content: "\e183";
}
.glyphicon-tower:before {
content: "\e184";
}
.glyphicon-stats:before {
content: "\e185";
}
.glyphicon-sd-video:before {
content: "\e186";
}
.glyphicon-hd-video:before {
content: "\e187";
}
.glyphicon-subtitles:before {
content: "\e188";
}
.glyphicon-sound-stereo:before {
content: "\e189";
}
.glyphicon-sound-dolby:before {
content: "\e190";
}
.glyphicon-sound-5-1:before {
content: "\e191";
}
.glyphicon-sound-6-1:before {
content: "\e192";
}
.glyphicon-sound-7-1:before {
content: "\e193";
}
.glyphicon-copyright-mark:before {
content: "\e194";
}
.glyphicon-registration-mark:before {
content: "\e195";
}
.glyphicon-cloud-download:before {
content: "\e197";
}
.glyphicon-cloud-upload:before {
content: "\e198";
}
.glyphicon-tree-conifer:before {
content: "\e199";
}
.glyphicon-tree-deciduous:before {
content: "\e200";
}
.glyphicon-cd:before {
content: "\e201";
}
.glyphicon-save-file:before {
content: "\e202";
}
.glyphicon-open-file:before {
content: "\e203";
}
.glyphicon-level-up:before {
content: "\e204";
}
.glyphicon-copy:before {
content: "\e205";
}
.glyphicon-paste:before {
content: "\e206";
}
.glyphicon-alert:before {
content: "\e209";
}
.glyphicon-equalizer:before {
content: "\e210";
}
.glyphicon-king:before {
content: "\e211";
}
.glyphicon-queen:before {
content: "\e212";
}
.glyphicon-pawn:before {
content: "\e213";
}
.glyphicon-bishop:before {
content: "\e214";
}
.glyphicon-knight:before {
content: "\e215";
}
.glyphicon-baby-formula:before {
content: "\e216";
}
.glyphicon-tent:before {
content: "\26fa";
}
.glyphicon-blackboard:before {
content: "\e218";
}
.glyphicon-bed:before {
content: "\e219";
}
.glyphicon-apple:before {
content: "\f8ff";
}
.glyphicon-erase:before {
content: "\e221";
}
.glyphicon-hourglass:before {
content: "\231b";
}
.glyphicon-lamp:before {
content: "\e223";
}
.glyphicon-duplicate:before {
content: "\e224";
}
.glyphicon-piggy-bank:before {
content: "\e225";
}
.glyphicon-scissors:before {
content: "\e226";
}
.glyphicon-bitcoin:before {
content: "\e227";
}
.glyphicon-btc:before {
content: "\e227";
}
.glyphicon-xbt:before {
content: "\e227";
}
.glyphicon-yen:before {
content: "\00a5";
}
.glyphicon-jpy:before {
content: "\00a5";
}
.glyphicon-ruble:before {
content: "\20bd";
}
.glyphicon-rub:before {
content: "\20bd";
}
.glyphicon-scale:before {
content: "\e230";
}
.glyphicon-ice-lolly:before {
content: "\e231";
}
.glyphicon-ice-lolly-tasted:before {
content: "\e232";
}
.glyphicon-education:before {
content: "\e233";
}
.glyphicon-option-horizontal:before {
content: "\e234";
}
.glyphicon-option-vertical:before {
content: "\e235";
}
.glyphicon-menu-hamburger:before {
content: "\e236";
}
.glyphicon-modal-window:before {
content: "\e237";
}
.glyphicon-oil:before {
content: "\e238";
}
.glyphicon-grain:before {
content: "\e239";
}
.glyphicon-sunglasses:before {
content: "\e240";
}
.glyphicon-text-size:before {
content: "\e241";
}
.glyphicon-text-color:before {
content: "\e242";
}
.glyphicon-text-background:before {
content: "\e243";
}
.glyphicon-object-align-top:before {
content: "\e244";
}
.glyphicon-object-align-bottom:before {
content: "\e245";
}
.glyphicon-object-align-horizontal:before {
content: "\e246";
}
.glyphicon-object-align-left:before {
content: "\e247";
}
.glyphicon-object-align-vertical:before {
content: "\e248";
}
.glyphicon-object-align-right:before {
content: "\e249";
}
.glyphicon-triangle-right:before {
content: "\e250";
}
.glyphicon-triangle-left:before {
content: "\e251";
}
.glyphicon-triangle-bottom:before {
content: "\e252";
}
.glyphicon-triangle-top:before {
content: "\e253";
}
.glyphicon-console:before {
content: "\e254";
}
.glyphicon-superscript:before {
content: "\e255";
}
.glyphicon-subscript:before {
content: "\e256";
}
.glyphicon-menu-left:before {
content: "\e257";
}
.glyphicon-menu-right:before {
content: "\e258";
}
.glyphicon-menu-down:before {
content: "\e259";
}
.glyphicon-menu-up:before {
content: "\e260";
}
* {
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
}
*:before,
*:after {
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
}
html {
font-size: 10px;
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
}
body {
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
font-size: 13px;
line-height: 1.42857143;
color: #000;
background-color: #fff;
}
input,
button,
select,
textarea {
font-family: inherit;
font-size: inherit;
line-height: inherit;
}
a {
color: #337ab7;
text-decoration: none;
}
a:hover,
a:focus {
color: #23527c;
text-decoration: underline;
}
a:focus {
outline: 5px auto -webkit-focus-ring-color;
outline-offset: -2px;
}
figure {
margin: 0;
}
img {
vertical-align: middle;
}
.img-responsive,
.thumbnail > img,
.thumbnail a > img,
.carousel-inner > .item > img,
.carousel-inner > .item > a > img {
display: block;
max-width: 100%;
height: auto;
}
.img-rounded {
border-radius: 3px;
}
.img-thumbnail {
padding: 4px;
line-height: 1.42857143;
background-color: #fff;
border: 1px solid #ddd;
border-radius: 2px;
-webkit-transition: all 0.2s ease-in-out;
-o-transition: all 0.2s ease-in-out;
transition: all 0.2s ease-in-out;
display: inline-block;
max-width: 100%;
height: auto;
}
.img-circle {
border-radius: 50%;
}
hr {
margin-top: 18px;
margin-bottom: 18px;
border: 0;
border-top: 1px solid #eeeeee;
}
.sr-only {
position: absolute;
width: 1px;
height: 1px;
margin: -1px;
padding: 0;
overflow: hidden;
clip: rect(0, 0, 0, 0);
border: 0;
}
.sr-only-focusable:active,
.sr-only-focusable:focus {
position: static;
width: auto;
height: auto;
margin: 0;
overflow: visible;
clip: auto;
}
[role="button"] {
cursor: pointer;
}
h1,
h2,
h3,
h4,
h5,
h6,
.h1,
.h2,
.h3,
.h4,
.h5,
.h6 {
font-family: inherit;
font-weight: 500;
line-height: 1.1;
color: inherit;
}
h1 small,
h2 small,
h3 small,
h4 small,
h5 small,
h6 small,
.h1 small,
.h2 small,
.h3 small,
.h4 small,
.h5 small,
.h6 small,
h1 .small,
h2 .small,
h3 .small,
h4 .small,
h5 .small,
h6 .small,
.h1 .small,
.h2 .small,
.h3 .small,
.h4 .small,
.h5 .small,
.h6 .small {
font-weight: normal;
line-height: 1;
color: #777777;
}
h1,
.h1,
h2,
.h2,
h3,
.h3 {
margin-top: 18px;
margin-bottom: 9px;
}
h1 small,
.h1 small,
h2 small,
.h2 small,
h3 small,
.h3 small,
h1 .small,
.h1 .small,
h2 .small,
.h2 .small,
h3 .small,
.h3 .small {
font-size: 65%;
}
h4,
.h4,
h5,
.h5,
h6,
.h6 {
margin-top: 9px;
margin-bottom: 9px;
}
h4 small,
.h4 small,
h5 small,
.h5 small,
h6 small,
.h6 small,
h4 .small,
.h4 .small,
h5 .small,
.h5 .small,
h6 .small,
.h6 .small {
font-size: 75%;
}
h1,
.h1 {
font-size: 33px;
}
h2,
.h2 {
font-size: 27px;
}
h3,
.h3 {
font-size: 23px;
}
h4,
.h4 {
font-size: 17px;
}
h5,
.h5 {
font-size: 13px;
}
h6,
.h6 {
font-size: 12px;
}
p {
margin: 0 0 9px;
}
.lead {
margin-bottom: 18px;
font-size: 14px;
font-weight: 300;
line-height: 1.4;
}
@media () {
.lead {
font-size: 19.5px;
}
}
small,
.small {
font-size: 92%;
}
mark,
.mark {
background-color: #fcf8e3;
padding: .2em;
}
.text-left {
text-align: left;
}
.text-right {
text-align: right;
}
.text-center {
text-align: center;
}
.text-justify {
text-align: justify;
}
.text-nowrap {
white-space: nowrap;
}
.text-lowercase {
text-transform: lowercase;
}
.text-uppercase {
text-transform: uppercase;
}
.text-capitalize {
text-transform: capitalize;
}
.text-muted {
color: #777777;
}
.text-primary {
color: #337ab7;
}
a.text-primary:hover,
a.text-primary:focus {
color: #286090;
}
.text-success {
color: #3c763d;
}
a.text-success:hover,
a.text-success:focus {
color: #2b542c;
}
.text-info {
color: #31708f;
}
a.text-info:hover,
a.text-info:focus {
color: #245269;
}
.text-warning {
color: #8a6d3b;
}
a.text-warning:hover,
a.text-warning:focus {
color: #66512c;
}
.text-danger {
color: #a94442;
}
a.text-danger:hover,
a.text-danger:focus {
color: #843534;
}
.bg-primary {
color: #fff;
background-color: #337ab7;
}
a.bg-primary:hover,
a.bg-primary:focus {
background-color: #286090;
}
.bg-success {
background-color: #dff0d8;
}
a.bg-success:hover,
a.bg-success:focus {
background-color: #c1e2b3;
}
.bg-info {
background-color: #d9edf7;
}
a.bg-info:hover,
a.bg-info:focus {
background-color: #afd9ee;
}
.bg-warning {
background-color: #fcf8e3;
}
a.bg-warning:hover,
a.bg-warning:focus {
background-color: #f7ecb5;
}
.bg-danger {
background-color: #f2dede;
}
a.bg-danger:hover,
a.bg-danger:focus {
background-color: #e4b9b9;
}
.page-header {
padding-bottom: 8px;
margin: 36px 0 18px;
border-bottom: 1px solid #eeeeee;
}
ul,
ol {
margin-top: 0;
margin-bottom: 9px;
}
ul ul,
ol ul,
ul ol,
ol ol {
margin-bottom: 0;
}
.list-unstyled {
padding-left: 0;
list-style: none;
}
.list-inline {
padding-left: 0;
list-style: none;
margin-left: -5px;
}
.list-inline > li {
display: inline-block;
padding-left: 5px;
padding-right: 5px;
}
dl {
margin-top: 0;
margin-bottom: 18px;
}
dt,
dd {
line-height: 1.42857143;
}
dt {
font-weight: bold;
}
dd {
margin-left: 0;
}
@media () {
.dl-horizontal dt {
float: left;
width: 160px;
clear: left;
text-align: right;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.dl-horizontal dd {
margin-left: 180px;
}
}
abbr[title],
abbr[data-original-title] {
cursor: help;
border-bottom: 1px dotted #777777;
}
.initialism {
font-size: 90%;
text-transform: uppercase;
}
blockquote {
padding: 9px 18px;
margin: 0 0 18px;
font-size: inherit;
border-left: 5px solid #eeeeee;
}
blockquote p:last-child,
blockquote ul:last-child,
blockquote ol:last-child {
margin-bottom: 0;
}
blockquote footer,
blockquote small,
blockquote .small {
display: block;
font-size: 80%;
line-height: 1.42857143;
color: #777777;
}
blockquote footer:before,
blockquote small:before,
blockquote .small:before {
content: '\2014 \00A0';
}
.blockquote-reverse,
blockquote.pull-right {
padding-right: 15px;
padding-left: 0;
border-right: 5px solid #eeeeee;
border-left: 0;
text-align: right;
}
.blockquote-reverse footer:before,
blockquote.pull-right footer:before,
.blockquote-reverse small:before,
blockquote.pull-right small:before,
.blockquote-reverse .small:before,
blockquote.pull-right .small:before {
content: '';
}
.blockquote-reverse footer:after,
blockquote.pull-right footer:after,
.blockquote-reverse small:after,
blockquote.pull-right small:after,
.blockquote-reverse .small:after,
blockquote.pull-right .small:after {
content: '\00A0 \2014';
}
address {
margin-bottom: 18px;
font-style: normal;
line-height: 1.42857143;
}
code,
kbd,
pre,
samp {
font-family: monospace;
}
code {
padding: 2px 4px;
font-size: 90%;
color: #c7254e;
background-color: #f9f2f4;
border-radius: 2px;
}
kbd {
padding: 2px 4px;
font-size: 90%;
color: #888;
background-color: transparent;
border-radius: 1px;
box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.25);
}
kbd kbd {
padding: 0;
font-size: 100%;
font-weight: bold;
box-shadow: none;
}
pre {
display: block;
padding: 8.5px;
margin: 0 0 9px;
font-size: 12px;
line-height: 1.42857143;
word-break: break-all;
word-wrap: break-word;
color: #333333;
background-color: #f5f5f5;
border: 1px solid #ccc;
border-radius: 2px;
}
pre code {
padding: 0;
font-size: inherit;
color: inherit;
white-space: pre-wrap;
background-color: transparent;
border-radius: 0;
}
.pre-scrollable {
max-height: 340px;
overflow-y: scroll;
}
.container {
margin-right: auto;
margin-left: auto;
padding-left: 0px;
padding-right: 0px;
}
@media () {
.container {
width: 768px;
}
}
@media () {
.container {
width: 940px;
}
}
@media () {
.container {
width: 1140px;
}
}
.container-fluid {
margin-right: auto;
margin-left: auto;
padding-left: 0px;
padding-right: 0px;
}
.row {
margin-left: 0px;
margin-right: 0px;
}
.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 {
position: relative;
min-height: 1px;
padding-left: 0px;
padding-right: 0px;
}
.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 {
float: left;
}
.col-xs-12 {
width: 100%;
}
.col-xs-11 {
width: 91.66666667%;
}
.col-xs-10 {
width: 83.33333333%;
}
.col-xs-9 {
width: 75%;
}
.col-xs-8 {
width: 66.66666667%;
}
.col-xs-7 {
width: 58.33333333%;
}
.col-xs-6 {
width: 50%;
}
.col-xs-5 {
width: 41.66666667%;
}
.col-xs-4 {
width: 33.33333333%;
}
.col-xs-3 {
width: 25%;
}
.col-xs-2 {
width: 16.66666667%;
}
.col-xs-1 {
width: 8.33333333%;
}
.col-xs-pull-12 {
right: 100%;
}
.col-xs-pull-11 {
right: 91.66666667%;
}
.col-xs-pull-10 {
right: 83.33333333%;
}
.col-xs-pull-9 {
right: 75%;
}
.col-xs-pull-8 {
right: 66.66666667%;
}
.col-xs-pull-7 {
right: 58.33333333%;
}
.col-xs-pull-6 {
right: 50%;
}
.col-xs-pull-5 {
right: 41.66666667%;
}
.col-xs-pull-4 {
right: 33.33333333%;
}
.col-xs-pull-3 {
right: 25%;
}
.col-xs-pull-2 {
right: 16.66666667%;
}
.col-xs-pull-1 {
right: 8.33333333%;
}
.col-xs-pull-0 {
right: auto;
}
.col-xs-push-12 {
left: 100%;
}
.col-xs-push-11 {
left: 91.66666667%;
}
.col-xs-push-10 {
left: 83.33333333%;
}
.col-xs-push-9 {
left: 75%;
}
.col-xs-push-8 {
left: 66.66666667%;
}
.col-xs-push-7 {
left: 58.33333333%;
}
.col-xs-push-6 {
left: 50%;
}
.col-xs-push-5 {
left: 41.66666667%;
}
.col-xs-push-4 {
left: 33.33333333%;
}
.col-xs-push-3 {
left: 25%;
}
.col-xs-push-2 {
left: 16.66666667%;
}
.col-xs-push-1 {
left: 8.33333333%;
}
.col-xs-push-0 {
left: auto;
}
.col-xs-offset-12 {
margin-left: 100%;
}
.col-xs-offset-11 {
margin-left: 91.66666667%;
}
.col-xs-offset-10 {
margin-left: 83.33333333%;
}
.col-xs-offset-9 {
margin-left: 75%;
}
.col-xs-offset-8 {
margin-left: 66.66666667%;
}
.col-xs-offset-7 {
margin-left: 58.33333333%;
}
.col-xs-offset-6 {
margin-left: 50%;
}
.col-xs-offset-5 {
margin-left: 41.66666667%;
}
.col-xs-offset-4 {
margin-left: 33.33333333%;
}
.col-xs-offset-3 {
margin-left: 25%;
}
.col-xs-offset-2 {
margin-left: 16.66666667%;
}
.col-xs-offset-1 {
margin-left: 8.33333333%;
}
.col-xs-offset-0 {
margin-left: 0%;
}
@media () {
.col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 {
float: left;
}
.col-sm-12 {
width: 100%;
}
.col-sm-11 {
width: 91.66666667%;
}
.col-sm-10 {
width: 83.33333333%;
}
.col-sm-9 {
width: 75%;
}
.col-sm-8 {
width: 66.66666667%;
}
.col-sm-7 {
width: 58.33333333%;
}
.col-sm-6 {
width: 50%;
}
.col-sm-5 {
width: 41.66666667%;
}
.col-sm-4 {
width: 33.33333333%;
}
.col-sm-3 {
width: 25%;
}
.col-sm-2 {
width: 16.66666667%;
}
.col-sm-1 {
width: 8.33333333%;
}
.col-sm-pull-12 {
right: 100%;
}
.col-sm-pull-11 {
right: 91.66666667%;
}
.col-sm-pull-10 {
right: 83.33333333%;
}
.col-sm-pull-9 {
right: 75%;
}
.col-sm-pull-8 {
right: 66.66666667%;
}
.col-sm-pull-7 {
right: 58.33333333%;
}
.col-sm-pull-6 {
right: 50%;
}
.col-sm-pull-5 {
right: 41.66666667%;
}
.col-sm-pull-4 {
right: 33.33333333%;
}
.col-sm-pull-3 {
right: 25%;
}
.col-sm-pull-2 {
right: 16.66666667%;
}
.col-sm-pull-1 {
right: 8.33333333%;
}
.col-sm-pull-0 {
right: auto;
}
.col-sm-push-12 {
left: 100%;
}
.col-sm-push-11 {
left: 91.66666667%;
}
.col-sm-push-10 {
left: 83.33333333%;
}
.col-sm-push-9 {
left: 75%;
}
.col-sm-push-8 {
left: 66.66666667%;
}
.col-sm-push-7 {
left: 58.33333333%;
}
.col-sm-push-6 {
left: 50%;
}
.col-sm-push-5 {
left: 41.66666667%;
}
.col-sm-push-4 {
left: 33.33333333%;
}
.col-sm-push-3 {
left: 25%;
}
.col-sm-push-2 {
left: 16.66666667%;
}
.col-sm-push-1 {
left: 8.33333333%;
}
.col-sm-push-0 {
left: auto;
}
.col-sm-offset-12 {
margin-left: 100%;
}
.col-sm-offset-11 {
margin-left: 91.66666667%;
}
.col-sm-offset-10 {
margin-left: 83.33333333%;
}
.col-sm-offset-9 {
margin-left: 75%;
}
.col-sm-offset-8 {
margin-left: 66.66666667%;
}
.col-sm-offset-7 {
margin-left: 58.33333333%;
}
.col-sm-offset-6 {
margin-left: 50%;
}
.col-sm-offset-5 {
margin-left: 41.66666667%;
}
.col-sm-offset-4 {
margin-left: 33.33333333%;
}
.col-sm-offset-3 {
margin-left: 25%;
}
.col-sm-offset-2 {
margin-left: 16.66666667%;
}
.col-sm-offset-1 {
margin-left: 8.33333333%;
}
.col-sm-offset-0 {
margin-left: 0%;
}
}
@media () {
.col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 {
float: left;
}
.col-md-12 {
width: 100%;
}
.col-md-11 {
width: 91.66666667%;
}
.col-md-10 {
width: 83.33333333%;
}
.col-md-9 {
width: 75%;
}
.col-md-8 {
width: 66.66666667%;
}
.col-md-7 {
width: 58.33333333%;
}
.col-md-6 {
width: 50%;
}
.col-md-5 {
width: 41.66666667%;
}
.col-md-4 {
width: 33.33333333%;
}
.col-md-3 {
width: 25%;
}
.col-md-2 {
width: 16.66666667%;
}
.col-md-1 {
width: 8.33333333%;
}
.col-md-pull-12 {
right: 100%;
}
.col-md-pull-11 {
right: 91.66666667%;
}
.col-md-pull-10 {
right: 83.33333333%;
}
.col-md-pull-9 {
right: 75%;
}
.col-md-pull-8 {
right: 66.66666667%;
}
.col-md-pull-7 {
right: 58.33333333%;
}
.col-md-pull-6 {
right: 50%;
}
.col-md-pull-5 {
right: 41.66666667%;
}
.col-md-pull-4 {
right: 33.33333333%;
}
.col-md-pull-3 {
right: 25%;
}
.col-md-pull-2 {
right: 16.66666667%;
}
.col-md-pull-1 {
right: 8.33333333%;
}
.col-md-pull-0 {
right: auto;
}
.col-md-push-12 {
left: 100%;
}
.col-md-push-11 {
left: 91.66666667%;
}
.col-md-push-10 {
left: 83.33333333%;
}
.col-md-push-9 {
left: 75%;
}
.col-md-push-8 {
left: 66.66666667%;
}
.col-md-push-7 {
left: 58.33333333%;
}
.col-md-push-6 {
left: 50%;
}
.col-md-push-5 {
left: 41.66666667%;
}
.col-md-push-4 {
left: 33.33333333%;
}
.col-md-push-3 {
left: 25%;
}
.col-md-push-2 {
left: 16.66666667%;
}
.col-md-push-1 {
left: 8.33333333%;
}
.col-md-push-0 {
left: auto;
}
.col-md-offset-12 {
margin-left: 100%;
}
.col-md-offset-11 {
margin-left: 91.66666667%;
}
.col-md-offset-10 {
margin-left: 83.33333333%;
}
.col-md-offset-9 {
margin-left: 75%;
}
.col-md-offset-8 {
margin-left: 66.66666667%;
}
.col-md-offset-7 {
margin-left: 58.33333333%;
}
.col-md-offset-6 {
margin-left: 50%;
}
.col-md-offset-5 {
margin-left: 41.66666667%;
}
.col-md-offset-4 {
margin-left: 33.33333333%;
}
.col-md-offset-3 {
margin-left: 25%;
}
.col-md-offset-2 {
margin-left: 16.66666667%;
}
.col-md-offset-1 {
margin-left: 8.33333333%;
}
.col-md-offset-0 {
margin-left: 0%;
}
}
@media () {
.col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 {
float: left;
}
.col-lg-12 {
width: 100%;
}
.col-lg-11 {
width: 91.66666667%;
}
.col-lg-10 {
width: 83.33333333%;
}
.col-lg-9 {
width: 75%;
}
.col-lg-8 {
width: 66.66666667%;
}
.col-lg-7 {
width: 58.33333333%;
}
.col-lg-6 {
width: 50%;
}
.col-lg-5 {
width: 41.66666667%;
}
.col-lg-4 {
width: 33.33333333%;
}
.col-lg-3 {
width: 25%;
}
.col-lg-2 {
width: 16.66666667%;
}
.col-lg-1 {
width: 8.33333333%;
}
.col-lg-pull-12 {
right: 100%;
}
.col-lg-pull-11 {
right: 91.66666667%;
}
.col-lg-pull-10 {
right: 83.33333333%;
}
.col-lg-pull-9 {
right: 75%;
}
.col-lg-pull-8 {
right: 66.66666667%;
}
.col-lg-pull-7 {
right: 58.33333333%;
}
.col-lg-pull-6 {
right: 50%;
}
.col-lg-pull-5 {
right: 41.66666667%;
}
.col-lg-pull-4 {
right: 33.33333333%;
}
.col-lg-pull-3 {
right: 25%;
}
.col-lg-pull-2 {
right: 16.66666667%;
}
.col-lg-pull-1 {
right: 8.33333333%;
}
.col-lg-pull-0 {
right: auto;
}
.col-lg-push-12 {
left: 100%;
}
.col-lg-push-11 {
left: 91.66666667%;
}
.col-lg-push-10 {
left: 83.33333333%;
}
.col-lg-push-9 {
left: 75%;
}
.col-lg-push-8 {
left: 66.66666667%;
}
.col-lg-push-7 {
left: 58.33333333%;
}
.col-lg-push-6 {
left: 50%;
}
.col-lg-push-5 {
left: 41.66666667%;
}
.col-lg-push-4 {
left: 33.33333333%;
}
.col-lg-push-3 {
left: 25%;
}
.col-lg-push-2 {
left: 16.66666667%;
}
.col-lg-push-1 {
left: 8.33333333%;
}
.col-lg-push-0 {
left: auto;
}
.col-lg-offset-12 {
margin-left: 100%;
}
.col-lg-offset-11 {
margin-left: 91.66666667%;
}
.col-lg-offset-10 {
margin-left: 83.33333333%;
}
.col-lg-offset-9 {
margin-left: 75%;
}
.col-lg-offset-8 {
margin-left: 66.66666667%;
}
.col-lg-offset-7 {
margin-left: 58.33333333%;
}
.col-lg-offset-6 {
margin-left: 50%;
}
.col-lg-offset-5 {
margin-left: 41.66666667%;
}
.col-lg-offset-4 {
margin-left: 33.33333333%;
}
.col-lg-offset-3 {
margin-left: 25%;
}
.col-lg-offset-2 {
margin-left: 16.66666667%;
}
.col-lg-offset-1 {
margin-left: 8.33333333%;
}
.col-lg-offset-0 {
margin-left: 0%;
}
}
table {
background-color: transparent;
}
caption {
padding-top: 8px;
padding-bottom: 8px;
color: #777777;
text-align: left;
}
th {
text-align: left;
}
.table {
width: 100%;
max-width: 100%;
margin-bottom: 18px;
}
.table > thead > tr > th,
.table > tbody > tr > th,
.table > tfoot > tr > th,
.table > thead > tr > td,
.table > tbody > tr > td,
.table > tfoot > tr > td {
padding: 8px;
line-height: 1.42857143;
vertical-align: top;
border-top: 1px solid #ddd;
}
.table > thead > tr > th {
vertical-align: bottom;
border-bottom: 2px solid #ddd;
}
.table > caption + thead > tr:first-child > th,
.table > colgroup + thead > tr:first-child > th,
.table > thead:first-child > tr:first-child > th,
.table > caption + thead > tr:first-child > td,
.table > colgroup + thead > tr:first-child > td,
.table > thead:first-child > tr:first-child > td {
border-top: 0;
}
.table > tbody + tbody {
border-top: 2px solid #ddd;
}
.table .table {
background-color: #fff;
}
.table-condensed > thead > tr > th,
.table-condensed > tbody > tr > th,
.table-condensed > tfoot > tr > th,
.table-condensed > thead > tr > td,
.table-condensed > tbody > tr > td,
.table-condensed > tfoot > tr > td {
padding: 5px;
}
.table-bordered {
border: 1px solid #ddd;
}
.table-bordered > thead > tr > th,
.table-bordered > tbody > tr > th,
.table-bordered > tfoot > tr > th,
.table-bordered > thead > tr > td,
.table-bordered > tbody > tr > td,
.table-bordered > tfoot > tr > td {
border: 1px solid #ddd;
}
.table-bordered > thead > tr > th,
.table-bordered > thead > tr > td {
border-bottom-width: 2px;
}
.table-striped > tbody > tr:nth-of-type(odd) {
background-color: #f9f9f9;
}
.table-hover > tbody > tr:hover {
background-color: #f5f5f5;
}
table col[class*="col-"] {
position: static;
float: none;
display: table-column;
}
table td[class*="col-"],
table th[class*="col-"] {
position: static;
float: none;
display: table-cell;
}
.table > thead > tr > td.active,
.table > tbody > tr > td.active,
.table > tfoot > tr > td.active,
.table > thead > tr > th.active,
.table > tbody > tr > th.active,
.table > tfoot > tr > th.active,
.table > thead > tr.active > td,
.table > tbody > tr.active > td,
.table > tfoot > tr.active > td,
.table > thead > tr.active > th,
.table > tbody > tr.active > th,
.table > tfoot > tr.active > th {
background-color: #f5f5f5;
}
.table-hover > tbody > tr > td.active:hover,
.table-hover > tbody > tr > th.active:hover,
.table-hover > tbody > tr.active:hover > td,
.table-hover > tbody > tr:hover > .active,
.table-hover > tbody > tr.active:hover > th {
background-color: #e8e8e8;
}
.table > thead > tr > td.success,
.table > tbody > tr > td.success,
.table > tfoot > tr > td.success,
.table > thead > tr > th.success,
.table > tbody > tr > th.success,
.table > tfoot > tr > th.success,
.table > thead > tr.success > td,
.table > tbody > tr.success > td,
.table > tfoot > tr.success > td,
.table > thead > tr.success > th,
.table > tbody > tr.success > th,
.table > tfoot > tr.success > th {
background-color: #dff0d8;
}
.table-hover > tbody > tr > td.success:hover,
.table-hover > tbody > tr > th.success:hover,
.table-hover > tbody > tr.success:hover > td,
.table-hover > tbody > tr:hover > .success,
.table-hover > tbody > tr.success:hover > th {
background-color: #d0e9c6;
}
.table > thead > tr > td.info,
.table > tbody > tr > td.info,
.table > tfoot > tr > td.info,
.table > thead > tr > th.info,
.table > tbody > tr > th.info,
.table > tfoot > tr > th.info,
.table > thead > tr.info > td,
.table > tbody > tr.info > td,
.table > tfoot > tr.info > td,
.table > thead > tr.info > th,
.table > tbody > tr.info > th,
.table > tfoot > tr.info > th {
background-color: #d9edf7;
}
.table-hover > tbody > tr > td.info:hover,
.table-hover > tbody > tr > th.info:hover,
.table-hover > tbody > tr.info:hover > td,
.table-hover > tbody > tr:hover > .info,
.table-hover > tbody > tr.info:hover > th {
background-color: #c4e3f3;
}
.table > thead > tr > td.warning,
.table > tbody > tr > td.warning,
.table > tfoot > tr > td.warning,
.table > thead > tr > th.warning,
.table > tbody > tr > th.warning,
.table > tfoot > tr > th.warning,
.table > thead > tr.warning > td,
.table > tbody > tr.warning > td,
.table > tfoot > tr.warning > td,
.table > thead > tr.warning > th,
.table > tbody > tr.warning > th,
.table > tfoot > tr.warning > th {
background-color: #fcf8e3;
}
.table-hover > tbody > tr > td.warning:hover,
.table-hover > tbody > tr > th.warning:hover,
.table-hover > tbody > tr.warning:hover > td,
.table-hover > tbody > tr:hover > .warning,
.table-hover > tbody > tr.warning:hover > th {
background-color: #faf2cc;
}
.table > thead > tr > td.danger,
.table > tbody > tr > td.danger,
.table > tfoot > tr > td.danger,
.table > thead > tr > th.danger,
.table > tbody > tr > th.danger,
.table > tfoot > tr > th.danger,
.table > thead > tr.danger > td,
.table > tbody > tr.danger > td,
.table > tfoot > tr.danger > td,
.table > thead > tr.danger > th,
.table > tbody > tr.danger > th,
.table > tfoot > tr.danger > th {
background-color: #f2dede;
}
.table-hover > tbody > tr > td.danger:hover,
.table-hover > tbody > tr > th.danger:hover,
.table-hover > tbody > tr.danger:hover > td,
.table-hover > tbody > tr:hover > .danger,
.table-hover > tbody > tr.danger:hover > th {
background-color: #ebcccc;
}
.table-responsive {
overflow-x: auto;
min-height: 0.01%;
}
@media screen and (max-width: 767px) {
.table-responsive {
width: 100%;
margin-bottom: 13.5px;
overflow-y: hidden;
-ms-overflow-style: -ms-autohiding-scrollbar;
border: 1px solid #ddd;
}
.table-responsive > .table {
margin-bottom: 0;
}
.table-responsive > .table > thead > tr > th,
.table-responsive > .table > tbody > tr > th,
.table-responsive > .table > tfoot > tr > th,
.table-responsive > .table > thead > tr > td,
.table-responsive > .table > tbody > tr > td,
.table-responsive > .table > tfoot > tr > td {
white-space: nowrap;
}
.table-responsive > .table-bordered {
border: 0;
}
.table-responsive > .table-bordered > thead > tr > th:first-child,
.table-responsive > .table-bordered > tbody > tr > th:first-child,
.table-responsive > .table-bordered > tfoot > tr > th:first-child,
.table-responsive > .table-bordered > thead > tr > td:first-child,
.table-responsive > .table-bordered > tbody > tr > td:first-child,
.table-responsive > .table-bordered > tfoot > tr > td:first-child {
border-left: 0;
}
.table-responsive > .table-bordered > thead > tr > th:last-child,
.table-responsive > .table-bordered > tbody > tr > th:last-child,
.table-responsive > .table-bordered > tfoot > tr > th:last-child,
.table-responsive > .table-bordered > thead > tr > td:last-child,
.table-responsive > .table-bordered > tbody > tr > td:last-child,
.table-responsive > .table-bordered > tfoot > tr > td:last-child {
border-right: 0;
}
.table-responsive > .table-bordered > tbody > tr:last-child > th,
.table-responsive > .table-bordered > tfoot > tr:last-child > th,
.table-responsive > .table-bordered > tbody > tr:last-child > td,
.table-responsive > .table-bordered > tfoot > tr:last-child > td {
border-bottom: 0;
}
}
fieldset {
padding: 0;
margin: 0;
border: 0;
min-width: 0;
}
legend {
display: block;
width: 100%;
padding: 0;
margin-bottom: 18px;
font-size: 19.5px;
line-height: inherit;
color: #333333;
border: 0;
border-bottom: 1px solid #e5e5e5;
}
label {
display: inline-block;
max-width: 100%;
margin-bottom: 5px;
font-weight: bold;
}
input[type="search"] {
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
}
input[type="radio"],
input[type="checkbox"] {
margin: 4px 0 0;
margin-top: 1px \9;
line-height: normal;
}
input[type="file"] {
display: block;
}
input[type="range"] {
display: block;
width: 100%;
}
select[multiple],
select[size] {
height: auto;
}
input[type="file"]:focus,
input[type="radio"]:focus,
input[type="checkbox"]:focus {
outline: 5px auto -webkit-focus-ring-color;
outline-offset: -2px;
}
output {
display: block;
padding-top: 7px;
font-size: 13px;
line-height: 1.42857143;
color: #555555;
}
.form-control {
display: block;
width: 100%;
height: 32px;
padding: 6px 12px;
font-size: 13px;
line-height: 1.42857143;
color: #555555;
background-color: #fff;
background-image: none;
border: 1px solid #ccc;
border-radius: 2px;
-webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
-webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
-o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
}
.form-control:focus {
border-color: #66afe9;
outline: 0;
-webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);
box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);
}
.form-control::-moz-placeholder {
color: #999;
opacity: 1;
}
.form-control:-ms-input-placeholder {
color: #999;
}
.form-control::-webkit-input-placeholder {
color: #999;
}
.form-control::-ms-expand {
border: 0;
background-color: transparent;
}
.form-control[disabled],
.form-control[readonly],
fieldset[disabled] .form-control {
background-color: #eeeeee;
opacity: 1;
}
.form-control[disabled],
fieldset[disabled] .form-control {
cursor: not-allowed;
}
textarea.form-control {
height: auto;
}
input[type="search"] {
-webkit-appearance: none;
}
@media screen and (-webkit-min-device-pixel-ratio: 0) {
input[type="date"].form-control,
input[type="time"].form-control,
input[type="datetime-local"].form-control,
input[type="month"].form-control {
line-height: 32px;
}
input[type="date"].input-sm,
input[type="time"].input-sm,
input[type="datetime-local"].input-sm,
input[type="month"].input-sm,
.input-group-sm input[type="date"],
.input-group-sm input[type="time"],
.input-group-sm input[type="datetime-local"],
.input-group-sm input[type="month"] {
line-height: 30px;
}
input[type="date"].input-lg,
input[type="time"].input-lg,
input[type="datetime-local"].input-lg,
input[type="month"].input-lg,
.input-group-lg input[type="date"],
.input-group-lg input[type="time"],
.input-group-lg input[type="datetime-local"],
.input-group-lg input[type="month"] {
line-height: 45px;
}
}
.form-group {
margin-bottom: 15px;
}
.radio,
.checkbox {
position: relative;
display: block;
margin-top: 10px;
margin-bottom: 10px;
}
.radio label,
.checkbox label {
min-height: 18px;
padding-left: 20px;
margin-bottom: 0;
font-weight: normal;
cursor: pointer;
}
.radio input[type="radio"],
.radio-inline input[type="radio"],
.checkbox input[type="checkbox"],
.checkbox-inline input[type="checkbox"] {
position: absolute;
margin-left: -20px;
margin-top: 4px \9;
}
.radio + .radio,
.checkbox + .checkbox {
margin-top: -5px;
}
.radio-inline,
.checkbox-inline {
position: relative;
display: inline-block;
padding-left: 20px;
margin-bottom: 0;
vertical-align: middle;
font-weight: normal;
cursor: pointer;
}
.radio-inline + .radio-inline,
.checkbox-inline + .checkbox-inline {
margin-top: 0;
margin-left: 10px;
}
input[type="radio"][disabled],
input[type="checkbox"][disabled],
input[type="radio"].disabled,
input[type="checkbox"].disabled,
fieldset[disabled] input[type="radio"],
fieldset[disabled] input[type="checkbox"] {
cursor: not-allowed;
}
.radio-inline.disabled,
.checkbox-inline.disabled,
fieldset[disabled] .radio-inline,
fieldset[disabled] .checkbox-inline {
cursor: not-allowed;
}
.radio.disabled label,
.checkbox.disabled label,
fieldset[disabled] .radio label,
fieldset[disabled] .checkbox label {
cursor: not-allowed;
}
.form-control-static {
padding-top: 7px;
padding-bottom: 7px;
margin-bottom: 0;
min-height: 31px;
}
.form-control-static.input-lg,
.form-control-static.input-sm {
padding-left: 0;
padding-right: 0;
}
.input-sm {
height: 30px;
padding: 5px 10px;
font-size: 12px;
line-height: 1.5;
border-radius: 1px;
}
select.input-sm {
height: 30px;
line-height: 30px;
}
textarea.input-sm,
select[multiple].input-sm {
height: auto;
}
.form-group-sm .form-control {
height: 30px;
padding: 5px 10px;
font-size: 12px;
line-height: 1.5;
border-radius: 1px;
}
.form-group-sm select.form-control {
height: 30px;
line-height: 30px;
}
.form-group-sm textarea.form-control,
.form-group-sm select[multiple].form-control {
height: auto;
}
.form-group-sm .form-control-static {
height: 30px;
min-height: 30px;
padding: 6px 10px;
font-size: 12px;
line-height: 1.5;
}
.input-lg {
height: 45px;
padding: 10px 16px;
font-size: 17px;
line-height: 1.3333333;
border-radius: 3px;
}
select.input-lg {
height: 45px;
line-height: 45px;
}
textarea.input-lg,
select[multiple].input-lg {
height: auto;
}
.form-group-lg .form-control {
height: 45px;
padding: 10px 16px;
font-size: 17px;
line-height: 1.3333333;
border-radius: 3px;
}
.form-group-lg select.form-control {
height: 45px;
line-height: 45px;
}
.form-group-lg textarea.form-control,
.form-group-lg select[multiple].form-control {
height: auto;
}
.form-group-lg .form-control-static {
height: 45px;
min-height: 35px;
padding: 11px 16px;
font-size: 17px;
line-height: 1.3333333;
}
.has-feedback {
position: relative;
}
.has-feedback .form-control {
padding-right: 40px;
}
.form-control-feedback {
position: absolute;
top: 0;
right: 0;
z-index: 2;
display: block;
width: 32px;
height: 32px;
line-height: 32px;
text-align: center;
pointer-events: none;
}
.input-lg + .form-control-feedback,
.input-group-lg + .form-control-feedback,
.form-group-lg .form-control + .form-control-feedback {
width: 45px;
height: 45px;
line-height: 45px;
}
.input-sm + .form-control-feedback,
.input-group-sm + .form-control-feedback,
.form-group-sm .form-control + .form-control-feedback {
width: 30px;
height: 30px;
line-height: 30px;
}
.has-success .help-block,
.has-success .control-label,
.has-success .radio,
.has-success .checkbox,
.has-success .radio-inline,
.has-success .checkbox-inline,
.has-success.radio label,
.has-success.checkbox label,
.has-success.radio-inline label,
.has-success.checkbox-inline label {
color: #3c763d;
}
.has-success .form-control {
border-color: #3c763d;
-webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
}
.has-success .form-control:focus {
border-color: #2b542c;
-webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168;
box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168;
}
.has-success .input-group-addon {
color: #3c763d;
border-color: #3c763d;
background-color: #dff0d8;
}
.has-success .form-control-feedback {
color: #3c763d;
}
.has-warning .help-block,
.has-warning .control-label,
.has-warning .radio,
.has-warning .checkbox,
.has-warning .radio-inline,
.has-warning .checkbox-inline,
.has-warning.radio label,
.has-warning.checkbox label,
.has-warning.radio-inline label,
.has-warning.checkbox-inline label {
color: #8a6d3b;
}
.has-warning .form-control {
border-color: #8a6d3b;
-webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
}
.has-warning .form-control:focus {
border-color: #66512c;
-webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b;
box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b;
}
.has-warning .input-group-addon {
color: #8a6d3b;
border-color: #8a6d3b;
background-color: #fcf8e3;
}
.has-warning .form-control-feedback {
color: #8a6d3b;
}
.has-error .help-block,
.has-error .control-label,
.has-error .radio,
.has-error .checkbox,
.has-error .radio-inline,
.has-error .checkbox-inline,
.has-error.radio label,
.has-error.checkbox label,
.has-error.radio-inline label,
.has-error.checkbox-inline label {
color: #a94442;
}
.has-error .form-control {
border-color: #a94442;
-webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
}
.has-error .form-control:focus {
border-color: #843534;
-webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;
box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;
}
.has-error .input-group-addon {
color: #a94442;
border-color: #a94442;
background-color: #f2dede;
}
.has-error .form-control-feedback {
color: #a94442;
}
.has-feedback label ~ .form-control-feedback {
top: 23px;
}
.has-feedback label.sr-only ~ .form-control-feedback {
top: 0;
}
.help-block {
display: block;
margin-top: 5px;
margin-bottom: 10px;
color: #404040;
}
@media () {
.form-inline .form-group {
display: inline-block;
margin-bottom: 0;
vertical-align: middle;
}
.form-inline .form-control {
display: inline-block;
width: auto;
vertical-align: middle;
}
.form-inline .form-control-static {
display: inline-block;
}
.form-inline .input-group {
display: inline-table;
vertical-align: middle;
}
.form-inline .input-group .input-group-addon,
.form-inline .input-group .input-group-btn,
.form-inline .input-group .form-control {
width: auto;
}
.form-inline .input-group > .form-control {
width: 100%;
}
.form-inline .control-label {
margin-bottom: 0;
vertical-align: middle;
}
.form-inline .radio,
.form-inline .checkbox {
display: inline-block;
margin-top: 0;
margin-bottom: 0;
vertical-align: middle;
}
.form-inline .radio label,
.form-inline .checkbox label {
padding-left: 0;
}
.form-inline .radio input[type="radio"],
.form-inline .checkbox input[type="checkbox"] {
position: relative;
margin-left: 0;
}
.form-inline .has-feedback .form-control-feedback {
top: 0;
}
}
.form-horizontal .radio,
.form-horizontal .checkbox,
.form-horizontal .radio-inline,
.form-horizontal .checkbox-inline {
margin-top: 0;
margin-bottom: 0;
padding-top: 7px;
}
.form-horizontal .radio,
.form-horizontal .checkbox {
min-height: 25px;
}
.form-horizontal .form-group {
margin-left: 0px;
margin-right: 0px;
}
@media () {
.form-horizontal .control-label {
text-align: right;
margin-bottom: 0;
padding-top: 7px;
}
}
.form-horizontal .has-feedback .form-control-feedback {
right: 0px;
}
@media () {
.form-horizontal .form-group-lg .control-label {
padding-top: 11px;
font-size: 17px;
}
}
@media () {
.form-horizontal .form-group-sm .control-label {
padding-top: 6px;
font-size: 12px;
}
}
.btn {
display: inline-block;
margin-bottom: 0;
font-weight: normal;
text-align: center;
vertical-align: middle;
touch-action: manipulation;
cursor: pointer;
background-image: none;
border: 1px solid transparent;
white-space: nowrap;
padding: 6px 12px;
font-size: 13px;
line-height: 1.42857143;
border-radius: 2px;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
.btn:focus,
.btn:active:focus,
.btn.active:focus,
.btn.focus,
.btn:active.focus,
.btn.active.focus {
outline: 5px auto -webkit-focus-ring-color;
outline-offset: -2px;
}
.btn:hover,
.btn:focus,
.btn.focus {
color: #333;
text-decoration: none;
}
.btn:active,
.btn.active {
outline: 0;
background-image: none;
-webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
}
.btn.disabled,
.btn[disabled],
fieldset[disabled] .btn {
cursor: not-allowed;
opacity: 0.65;
filter: alpha(opacity=65);
-webkit-box-shadow: none;
box-shadow: none;
}
a.btn.disabled,
fieldset[disabled] a.btn {
pointer-events: none;
}
.btn-default {
color: #333;
background-color: #fff;
border-color: #ccc;
}
.btn-default:focus,
.btn-default.focus {
color: #333;
background-color: #e6e6e6;
border-color: #8c8c8c;
}
.btn-default:hover {
color: #333;
background-color: #e6e6e6;
border-color: #adadad;
}
.btn-default:active,
.btn-default.active,
.open > .dropdown-toggle.btn-default {
color: #333;
background-color: #e6e6e6;
border-color: #adadad;
}
.btn-default:active:hover,
.btn-default.active:hover,
.open > .dropdown-toggle.btn-default:hover,
.btn-default:active:focus,
.btn-default.active:focus,
.open > .dropdown-toggle.btn-default:focus,
.btn-default:active.focus,
.btn-default.active.focus,
.open > .dropdown-toggle.btn-default.focus {
color: #333;
background-color: #d4d4d4;
border-color: #8c8c8c;
}
.btn-default:active,
.btn-default.active,
.open > .dropdown-toggle.btn-default {
background-image: none;
}
.btn-default.disabled:hover,
.btn-default[disabled]:hover,
fieldset[disabled] .btn-default:hover,
.btn-default.disabled:focus,
.btn-default[disabled]:focus,
fieldset[disabled] .btn-default:focus,
.btn-default.disabled.focus,
.btn-default[disabled].focus,
fieldset[disabled] .btn-default.focus {
background-color: #fff;
border-color: #ccc;
}
.btn-default .badge {
color: #fff;
background-color: #333;
}
.btn-primary {
color: #fff;
background-color: #337ab7;
border-color: #2e6da4;
}
.btn-primary:focus,
.btn-primary.focus {
color: #fff;
background-color: #286090;
border-color: #122b40;
}
.btn-primary:hover {
color: #fff;
background-color: #286090;
border-color: #204d74;
}
.btn-primary:active,
.btn-primary.active,
.open > .dropdown-toggle.btn-primary {
color: #fff;
background-color: #286090;
border-color: #204d74;
}
.btn-primary:active:hover,
.btn-primary.active:hover,
.open > .dropdown-toggle.btn-primary:hover,
.btn-primary:active:focus,
.btn-primary.active:focus,
.open > .dropdown-toggle.btn-primary:focus,
.btn-primary:active.focus,
.btn-primary.active.focus,
.open > .dropdown-toggle.btn-primary.focus {
color: #fff;
background-color: #204d74;
border-color: #122b40;
}
.btn-primary:active,
.btn-primary.active,
.open > .dropdown-toggle.btn-primary {
background-image: none;
}
.btn-primary.disabled:hover,
.btn-primary[disabled]:hover,
fieldset[disabled] .btn-primary:hover,
.btn-primary.disabled:focus,
.btn-primary[disabled]:focus,
fieldset[disabled] .btn-primary:focus,
.btn-primary.disabled.focus,
.btn-primary[disabled].focus,
fieldset[disabled] .btn-primary.focus {
background-color: #337ab7;
border-color: #2e6da4;
}
.btn-primary .badge {
color: #337ab7;
background-color: #fff;
}
.btn-success {
color: #fff;
background-color: #5cb85c;
border-color: #4cae4c;
}
.btn-success:focus,
.btn-success.focus {
color: #fff;
background-color: #449d44;
border-color: #255625;
}
.btn-success:hover {
color: #fff;
background-color: #449d44;
border-color: #398439;
}
.btn-success:active,
.btn-success.active,
.open > .dropdown-toggle.btn-success {
color: #fff;
background-color: #449d44;
border-color: #398439;
}
.btn-success:active:hover,
.btn-success.active:hover,
.open > .dropdown-toggle.btn-success:hover,
.btn-success:active:focus,
.btn-success.active:focus,
.open > .dropdown-toggle.btn-success:focus,
.btn-success:active.focus,
.btn-success.active.focus,
.open > .dropdown-toggle.btn-success.focus {
color: #fff;
background-color: #398439;
border-color: #255625;
}
.btn-success:active,
.btn-success.active,
.open > .dropdown-toggle.btn-success {
background-image: none;
}
.btn-success.disabled:hover,
.btn-success[disabled]:hover,
fieldset[disabled] .btn-success:hover,
.btn-success.disabled:focus,
.btn-success[disabled]:focus,
fieldset[disabled] .btn-success:focus,
.btn-success.disabled.focus,
.btn-success[disabled].focus,
fieldset[disabled] .btn-success.focus {
background-color: #5cb85c;
border-color: #4cae4c;
}
.btn-success .badge {
color: #5cb85c;
background-color: #fff;
}
.btn-info {
color: #fff;
background-color: #5bc0de;
border-color: #46b8da;
}
.btn-info:focus,
.btn-info.focus {
color: #fff;
background-color: #31b0d5;
border-color: #1b6d85;
}
.btn-info:hover {
color: #fff;
background-color: #31b0d5;
border-color: #269abc;
}
.btn-info:active,
.btn-info.active,
.open > .dropdown-toggle.btn-info {
color: #fff;
background-color: #31b0d5;
border-color: #269abc;
}
.btn-info:active:hover,
.btn-info.active:hover,
.open > .dropdown-toggle.btn-info:hover,
.btn-info:active:focus,
.btn-info.active:focus,
.open > .dropdown-toggle.btn-info:focus,
.btn-info:active.focus,
.btn-info.active.focus,
.open > .dropdown-toggle.btn-info.focus {
color: #fff;
background-color: #269abc;
border-color: #1b6d85;
}
.btn-info:active,
.btn-info.active,
.open > .dropdown-toggle.btn-info {
background-image: none;
}
.btn-info.disabled:hover,
.btn-info[disabled]:hover,
fieldset[disabled] .btn-info:hover,
.btn-info.disabled:focus,
.btn-info[disabled]:focus,
fieldset[disabled] .btn-info:focus,
.btn-info.disabled.focus,
.btn-info[disabled].focus,
fieldset[disabled] .btn-info.focus {
background-color: #5bc0de;
border-color: #46b8da;
}
.btn-info .badge {
color: #5bc0de;
background-color: #fff;
}
.btn-warning {
color: #fff;
background-color: #f0ad4e;
border-color: #eea236;
}
.btn-warning:focus,
.btn-warning.focus {
color: #fff;
background-color: #ec971f;
border-color: #985f0d;
}
.btn-warning:hover {
color: #fff;
background-color: #ec971f;
border-color: #d58512;
}
.btn-warning:active,
.btn-warning.active,
.open > .dropdown-toggle.btn-warning {
color: #fff;
background-color: #ec971f;
border-color: #d58512;
}
.btn-warning:active:hover,
.btn-warning.active:hover,
.open > .dropdown-toggle.btn-warning:hover,
.btn-warning:active:focus,
.btn-warning.active:focus,
.open > .dropdown-toggle.btn-warning:focus,
.btn-warning:active.focus,
.btn-warning.active.focus,
.open > .dropdown-toggle.btn-warning.focus {
color: #fff;
background-color: #d58512;
border-color: #985f0d;
}
.btn-warning:active,
.btn-warning.active,
.open > .dropdown-toggle.btn-warning {
background-image: none;
}
.btn-warning.disabled:hover,
.btn-warning[disabled]:hover,
fieldset[disabled] .btn-warning:hover,
.btn-warning.disabled:focus,
.btn-warning[disabled]:focus,
fieldset[disabled] .btn-warning:focus,
.btn-warning.disabled.focus,
.btn-warning[disabled].focus,
fieldset[disabled] .btn-warning.focus {
background-color: #f0ad4e;
border-color: #eea236;
}
.btn-warning .badge {
color: #f0ad4e;
background-color: #fff;
}
.btn-danger {
color: #fff;
background-color: #d9534f;
border-color: #d43f3a;
}
.btn-danger:focus,
.btn-danger.focus {
color: #fff;
background-color: #c9302c;
border-color: #761c19;
}
.btn-danger:hover {
color: #fff;
background-color: #c9302c;
border-color: #ac2925;
}
.btn-danger:active,
.btn-danger.active,
.open > .dropdown-toggle.btn-danger {
color: #fff;
background-color: #c9302c;
border-color: #ac2925;
}
.btn-danger:active:hover,
.btn-danger.active:hover,
.open > .dropdown-toggle.btn-danger:hover,
.btn-danger:active:focus,
.btn-danger.active:focus,
.open > .dropdown-toggle.btn-danger:focus,
.btn-danger:active.focus,
.btn-danger.active.focus,
.open > .dropdown-toggle.btn-danger.focus {
color: #fff;
background-color: #ac2925;
border-color: #761c19;
}
.btn-danger:active,
.btn-danger.active,
.open > .dropdown-toggle.btn-danger {
background-image: none;
}
.btn-danger.disabled:hover,
.btn-danger[disabled]:hover,
fieldset[disabled] .btn-danger:hover,
.btn-danger.disabled:focus,
.btn-danger[disabled]:focus,
fieldset[disabled] .btn-danger:focus,
.btn-danger.disabled.focus,
.btn-danger[disabled].focus,
fieldset[disabled] .btn-danger.focus {
background-color: #d9534f;
border-color: #d43f3a;
}
.btn-danger .badge {
color: #d9534f;
background-color: #fff;
}
.btn-link {
color: #337ab7;
font-weight: normal;
border-radius: 0;
}
.btn-link,
.btn-link:active,
.btn-link.active,
.btn-link[disabled],
fieldset[disabled] .btn-link {
background-color: transparent;
-webkit-box-shadow: none;
box-shadow: none;
}
.btn-link,
.btn-link:hover,
.btn-link:focus,
.btn-link:active {
border-color: transparent;
}
.btn-link:hover,
.btn-link:focus {
color: #23527c;
text-decoration: underline;
background-color: transparent;
}
.btn-link[disabled]:hover,
fieldset[disabled] .btn-link:hover,
.btn-link[disabled]:focus,
fieldset[disabled] .btn-link:focus {
color: #777777;
text-decoration: none;
}
.btn-lg,
.btn-group-lg > .btn {
padding: 10px 16px;
font-size: 17px;
line-height: 1.3333333;
border-radius: 3px;
}
.btn-sm,
.btn-group-sm > .btn {
padding: 5px 10px;
font-size: 12px;
line-height: 1.5;
border-radius: 1px;
}
.btn-xs,
.btn-group-xs > .btn {
padding: 1px 5px;
font-size: 12px;
line-height: 1.5;
border-radius: 1px;
}
.btn-block {
display: block;
width: 100%;
}
.btn-block + .btn-block {
margin-top: 5px;
}
input[type="submit"].btn-block,
input[type="reset"].btn-block,
input[type="button"].btn-block {
width: 100%;
}
.fade {
opacity: 0;
-webkit-transition: opacity 0.15s linear;
-o-transition: opacity 0.15s linear;
transition: opacity 0.15s linear;
}
.fade.in {
opacity: 1;
}
.collapse {
display: none;
}
.collapse.in {
display: block;
}
tr.collapse.in {
display: table-row;
}
tbody.collapse.in {
display: table-row-group;
}
.collapsing {
position: relative;
height: 0;
overflow: hidden;
-webkit-transition-property: height, visibility;
transition-property: height, visibility;
-webkit-transition-duration: 0.35s;
transition-duration: 0.35s;
-webkit-transition-timing-function: ease;
transition-timing-function: ease;
}
.caret {
display: inline-block;
width: 0;
height: 0;
margin-left: 2px;
vertical-align: middle;
border-top: 4px dashed;
border-top: 4px solid \9;
border-right: 4px solid transparent;
border-left: 4px solid transparent;
}
.dropup,
.dropdown {
position: relative;
}
.dropdown-toggle:focus {
outline: 0;
}
.dropdown-menu {
position: absolute;
top: 100%;
left: 0;
z-index: 1000;
display: none;
float: left;
min-width: 160px;
padding: 5px 0;
margin: 2px 0 0;
list-style: none;
font-size: 13px;
text-align: left;
background-color: #fff;
border: 1px solid #ccc;
border: 1px solid rgba(0, 0, 0, 0.15);
border-radius: 2px;
-webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);
box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);
background-clip: padding-box;
}
.dropdown-menu.pull-right {
right: 0;
left: auto;
}
.dropdown-menu .divider {
height: 1px;
margin: 8px 0;
overflow: hidden;
background-color: #e5e5e5;
}
.dropdown-menu > li > a {
display: block;
padding: 3px 20px;
clear: both;
font-weight: normal;
line-height: 1.42857143;
color: #333333;
white-space: nowrap;
}
.dropdown-menu > li > a:hover,
.dropdown-menu > li > a:focus {
text-decoration: none;
color: #262626;
background-color: #f5f5f5;
}
.dropdown-menu > .active > a,
.dropdown-menu > .active > a:hover,
.dropdown-menu > .active > a:focus {
color: #fff;
text-decoration: none;
outline: 0;
background-color: #337ab7;
}
.dropdown-menu > .disabled > a,
.dropdown-menu > .disabled > a:hover,
.dropdown-menu > .disabled > a:focus {
color: #777777;
}
.dropdown-menu > .disabled > a:hover,
.dropdown-menu > .disabled > a:focus {
text-decoration: none;
background-color: transparent;
background-image: none;
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
cursor: not-allowed;
}
.open > .dropdown-menu {
display: block;
}
.open > a {
outline: 0;
}
.dropdown-menu-right {
left: auto;
right: 0;
}
.dropdown-menu-left {
left: 0;
right: auto;
}
.dropdown-header {
display: block;
padding: 3px 20px;
font-size: 12px;
line-height: 1.42857143;
color: #777777;
white-space: nowrap;
}
.dropdown-backdrop {
position: fixed;
left: 0;
right: 0;
bottom: 0;
top: 0;
z-index: 990;
}
.pull-right > .dropdown-menu {
right: 0;
left: auto;
}
.dropup .caret,
.navbar-fixed-bottom .dropdown .caret {
border-top: 0;
border-bottom: 4px dashed;
border-bottom: 4px solid \9;
content: "";
}
.dropup .dropdown-menu,
.navbar-fixed-bottom .dropdown .dropdown-menu {
top: auto;
bottom: 100%;
margin-bottom: 2px;
}
@media () {
.navbar-right .dropdown-menu {
left: auto;
right: 0;
}
.navbar-right .dropdown-menu-left {
left: 0;
right: auto;
}
}
.btn-group,
.btn-group-vertical {
position: relative;
display: inline-block;
vertical-align: middle;
}
.btn-group > .btn,
.btn-group-vertical > .btn {
position: relative;
float: left;
}
.btn-group > .btn:hover,
.btn-group-vertical > .btn:hover,
.btn-group > .btn:focus,
.btn-group-vertical > .btn:focus,
.btn-group > .btn:active,
.btn-group-vertical > .btn:active,
.btn-group > .btn.active,
.btn-group-vertical > .btn.active {
z-index: 2;
}
.btn-group .btn + .btn,
.btn-group .btn + .btn-group,
.btn-group .btn-group + .btn,
.btn-group .btn-group + .btn-group {
margin-left: -1px;
}
.btn-toolbar {
margin-left: -5px;
}
.btn-toolbar .btn,
.btn-toolbar .btn-group,
.btn-toolbar .input-group {
float: left;
}
.btn-toolbar > .btn,
.btn-toolbar > .btn-group,
.btn-toolbar > .input-group {
margin-left: 5px;
}
.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {
border-radius: 0;
}
.btn-group > .btn:first-child {
margin-left: 0;
}
.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) {
border-bottom-right-radius: 0;
border-top-right-radius: 0;
}
.btn-group > .btn:last-child:not(:first-child),
.btn-group > .dropdown-toggle:not(:first-child) {
border-bottom-left-radius: 0;
border-top-left-radius: 0;
}
.btn-group > .btn-group {
float: left;
}
.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {
border-radius: 0;
}
.btn-group > .btn-group:first-child:not(:last-child) > .btn:last-child,
.btn-group > .btn-group:first-child:not(:last-child) > .dropdown-toggle {
border-bottom-right-radius: 0;
border-top-right-radius: 0;
}
.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child {
border-bottom-left-radius: 0;
border-top-left-radius: 0;
}
.btn-group .dropdown-toggle:active,
.btn-group.open .dropdown-toggle {
outline: 0;
}
.btn-group > .btn + .dropdown-toggle {
padding-left: 8px;
padding-right: 8px;
}
.btn-group > .btn-lg + .dropdown-toggle {
padding-left: 12px;
padding-right: 12px;
}
.btn-group.open .dropdown-toggle {
-webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
}
.btn-group.open .dropdown-toggle.btn-link {
-webkit-box-shadow: none;
box-shadow: none;
}
.btn .caret {
margin-left: 0;
}
.btn-lg .caret {
border-width: 5px 5px 0;
border-bottom-width: 0;
}
.dropup .btn-lg .caret {
border-width: 0 5px 5px;
}
.btn-group-vertical > .btn,
.btn-group-vertical > .btn-group,
.btn-group-vertical > .btn-group > .btn {
display: block;
float: none;
width: 100%;
max-width: 100%;
}
.btn-group-vertical > .btn-group > .btn {
float: none;
}
.btn-group-vertical > .btn + .btn,
.btn-group-vertical > .btn + .btn-group,
.btn-group-vertical > .btn-group + .btn,
.btn-group-vertical > .btn-group + .btn-group {
margin-top: -1px;
margin-left: 0;
}
.btn-group-vertical > .btn:not(:first-child):not(:last-child) {
border-radius: 0;
}
.btn-group-vertical > .btn:first-child:not(:last-child) {
border-top-right-radius: 2px;
border-top-left-radius: 2px;
border-bottom-right-radius: 0;
border-bottom-left-radius: 0;
}
.btn-group-vertical > .btn:last-child:not(:first-child) {
border-top-right-radius: 0;
border-top-left-radius: 0;
border-bottom-right-radius: 2px;
border-bottom-left-radius: 2px;
}
.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {
border-radius: 0;
}
.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child,
.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle {
border-bottom-right-radius: 0;
border-bottom-left-radius: 0;
}
.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {
border-top-right-radius: 0;
border-top-left-radius: 0;
}
.btn-group-justified {
display: table;
width: 100%;
table-layout: fixed;
border-collapse: separate;
}
.btn-group-justified > .btn,
.btn-group-justified > .btn-group {
float: none;
display: table-cell;
width: 1%;
}
.btn-group-justified > .btn-group .btn {
width: 100%;
}
.btn-group-justified > .btn-group .dropdown-menu {
left: auto;
}
[data-toggle="buttons"] > .btn input[type="radio"],
[data-toggle="buttons"] > .btn-group > .btn input[type="radio"],
[data-toggle="buttons"] > .btn input[type="checkbox"],
[data-toggle="buttons"] > .btn-group > .btn input[type="checkbox"] {
position: absolute;
clip: rect(0, 0, 0, 0);
pointer-events: none;
}
.input-group {
position: relative;
display: table;
border-collapse: separate;
}
.input-group[class*="col-"] {
float: none;
padding-left: 0;
padding-right: 0;
}
.input-group .form-control {
position: relative;
z-index: 2;
float: left;
width: 100%;
margin-bottom: 0;
}
.input-group .form-control:focus {
z-index: 3;
}
.input-group-lg > .form-control,
.input-group-lg > .input-group-addon,
.input-group-lg > .input-group-btn > .btn {
height: 45px;
padding: 10px 16px;
font-size: 17px;
line-height: 1.3333333;
border-radius: 3px;
}
select.input-group-lg > .form-control,
select.input-group-lg > .input-group-addon,
select.input-group-lg > .input-group-btn > .btn {
height: 45px;
line-height: 45px;
}
textarea.input-group-lg > .form-control,
textarea.input-group-lg > .input-group-addon,
textarea.input-group-lg > .input-group-btn > .btn,
select[multiple].input-group-lg > .form-control,
select[multiple].input-group-lg > .input-group-addon,
select[multiple].input-group-lg > .input-group-btn > .btn {
height: auto;
}
.input-group-sm > .form-control,
.input-group-sm > .input-group-addon,
.input-group-sm > .input-group-btn > .btn {
height: 30px;
padding: 5px 10px;
font-size: 12px;
line-height: 1.5;
border-radius: 1px;
}
select.input-group-sm > .form-control,
select.input-group-sm > .input-group-addon,
select.input-group-sm > .input-group-btn > .btn {
height: 30px;
line-height: 30px;
}
textarea.input-group-sm > .form-control,
textarea.input-group-sm > .input-group-addon,
textarea.input-group-sm > .input-group-btn > .btn,
select[multiple].input-group-sm > .form-control,
select[multiple].input-group-sm > .input-group-addon,
select[multiple].input-group-sm > .input-group-btn > .btn {
height: auto;
}
.input-group-addon,
.input-group-btn,
.input-group .form-control {
display: table-cell;
}
.input-group-addon:not(:first-child):not(:last-child),
.input-group-btn:not(:first-child):not(:last-child),
.input-group .form-control:not(:first-child):not(:last-child) {
border-radius: 0;
}
.input-group-addon,
.input-group-btn {
width: 1%;
white-space: nowrap;
vertical-align: middle;
}
.input-group-addon {
padding: 6px 12px;
font-size: 13px;
font-weight: normal;
line-height: 1;
color: #555555;
text-align: center;
background-color: #eeeeee;
border: 1px solid #ccc;
border-radius: 2px;
}
.input-group-addon.input-sm {
padding: 5px 10px;
font-size: 12px;
border-radius: 1px;
}
.input-group-addon.input-lg {
padding: 10px 16px;
font-size: 17px;
border-radius: 3px;
}
.input-group-addon input[type="radio"],
.input-group-addon input[type="checkbox"] {
margin-top: 0;
}
.input-group .form-control:first-child,
.input-group-addon:first-child,
.input-group-btn:first-child > .btn,
.input-group-btn:first-child > .btn-group > .btn,
.input-group-btn:first-child > .dropdown-toggle,
.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),
.input-group-btn:last-child > .btn-group:not(:last-child) > .btn {
border-bottom-right-radius: 0;
border-top-right-radius: 0;
}
.input-group-addon:first-child {
border-right: 0;
}
.input-group .form-control:last-child,
.input-group-addon:last-child,
.input-group-btn:last-child > .btn,
.input-group-btn:last-child > .btn-group > .btn,
.input-group-btn:last-child > .dropdown-toggle,
.input-group-btn:first-child > .btn:not(:first-child),
.input-group-btn:first-child > .btn-group:not(:first-child) > .btn {
border-bottom-left-radius: 0;
border-top-left-radius: 0;
}
.input-group-addon:last-child {
border-left: 0;
}
.input-group-btn {
position: relative;
font-size: 0;
white-space: nowrap;
}
.input-group-btn > .btn {
position: relative;
}
.input-group-btn > .btn + .btn {
margin-left: -1px;
}
.input-group-btn > .btn:hover,
.input-group-btn > .btn:focus,
.input-group-btn > .btn:active {
z-index: 2;
}
.input-group-btn:first-child > .btn,
.input-group-btn:first-child > .btn-group {
margin-right: -1px;
}
.input-group-btn:last-child > .btn,
.input-group-btn:last-child > .btn-group {
z-index: 2;
margin-left: -1px;
}
.nav {
margin-bottom: 0;
padding-left: 0;
list-style: none;
}
.nav > li {
position: relative;
display: block;
}
.nav > li > a {
position: relative;
display: block;
padding: 10px 15px;
}
.nav > li > a:hover,
.nav > li > a:focus {
text-decoration: none;
background-color: #eeeeee;
}
.nav > li.disabled > a {
color: #777777;
}
.nav > li.disabled > a:hover,
.nav > li.disabled > a:focus {
color: #777777;
text-decoration: none;
background-color: transparent;
cursor: not-allowed;
}
.nav .open > a,
.nav .open > a:hover,
.nav .open > a:focus {
background-color: #eeeeee;
border-color: #337ab7;
}
.nav .nav-divider {
height: 1px;
margin: 8px 0;
overflow: hidden;
background-color: #e5e5e5;
}
.nav > li > a > img {
max-width: none;
}
.nav-tabs {
border-bottom: 1px solid #ddd;
}
.nav-tabs > li {
float: left;
margin-bottom: -1px;
}
.nav-tabs > li > a {
margin-right: 2px;
line-height: 1.42857143;
border: 1px solid transparent;
border-radius: 2px 2px 0 0;
}
.nav-tabs > li > a:hover {
border-color: #eeeeee #eeeeee #ddd;
}
.nav-tabs > li.active > a,
.nav-tabs > li.active > a:hover,
.nav-tabs > li.active > a:focus {
color: #555555;
background-color: #fff;
border: 1px solid #ddd;
border-bottom-color: transparent;
cursor: default;
}
.nav-tabs.nav-justified {
width: 100%;
border-bottom: 0;
}
.nav-tabs.nav-justified > li {
float: none;
}
.nav-tabs.nav-justified > li > a {
text-align: center;
margin-bottom: 5px;
}
.nav-tabs.nav-justified > .dropdown .dropdown-menu {
top: auto;
left: auto;
}
@media () {
.nav-tabs.nav-justified > li {
display: table-cell;
width: 1%;
}
.nav-tabs.nav-justified > li > a {
margin-bottom: 0;
}
}
.nav-tabs.nav-justified > li > a {
margin-right: 0;
border-radius: 2px;
}
.nav-tabs.nav-justified > .active > a,
.nav-tabs.nav-justified > .active > a:hover,
.nav-tabs.nav-justified > .active > a:focus {
border: 1px solid #ddd;
}
@media () {
.nav-tabs.nav-justified > li > a {
border-bottom: 1px solid #ddd;
border-radius: 2px 2px 0 0;
}
.nav-tabs.nav-justified > .active > a,
.nav-tabs.nav-justified > .active > a:hover,
.nav-tabs.nav-justified > .active > a:focus {
border-bottom-color: #fff;
}
}
.nav-pills > li {
float: left;
}
.nav-pills > li > a {
border-radius: 2px;
}
.nav-pills > li + li {
margin-left: 2px;
}
.nav-pills > li.active > a,
.nav-pills > li.active > a:hover,
.nav-pills > li.active > a:focus {
color: #fff;
background-color: #337ab7;
}
.nav-stacked > li {
float: none;
}
.nav-stacked > li + li {
margin-top: 2px;
margin-left: 0;
}
.nav-justified {
width: 100%;
}
.nav-justified > li {
float: none;
}
.nav-justified > li > a {
text-align: center;
margin-bottom: 5px;
}
.nav-justified > .dropdown .dropdown-menu {
top: auto;
left: auto;
}
@media () {
.nav-justified > li {
display: table-cell;
width: 1%;
}
.nav-justified > li > a {
margin-bottom: 0;
}
}
.nav-tabs-justified {
border-bottom: 0;
}
.nav-tabs-justified > li > a {
margin-right: 0;
border-radius: 2px;
}
.nav-tabs-justified > .active > a,
.nav-tabs-justified > .active > a:hover,
.nav-tabs-justified > .active > a:focus {
border: 1px solid #ddd;
}
@media () {
.nav-tabs-justified > li > a {
border-bottom: 1px solid #ddd;
border-radius: 2px 2px 0 0;
}
.nav-tabs-justified > .active > a,
.nav-tabs-justified > .active > a:hover,
.nav-tabs-justified > .active > a:focus {
border-bottom-color: #fff;
}
}
.tab-content > .tab-pane {
display: none;
}
.tab-content > .active {
display: block;
}
.nav-tabs .dropdown-menu {
margin-top: -1px;
border-top-right-radius: 0;
border-top-left-radius: 0;
}
.navbar {
position: relative;
min-height: 30px;
margin-bottom: 18px;
border: 1px solid transparent;
}
@media () {
.navbar {
border-radius: 2px;
}
}
@media () {
.navbar-header {
float: left;
}
}
.navbar-collapse {
overflow-x: visible;
padding-right: 0px;
padding-left: 0px;
border-top: 1px solid transparent;
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1);
-webkit-overflow-scrolling: touch;
}
.navbar-collapse.in {
overflow-y: auto;
}
@media () {
.navbar-collapse {
width: auto;
border-top: 0;
box-shadow: none;
}
.navbar-collapse.collapse {
display: block !important;
height: auto !important;
padding-bottom: 0;
overflow: visible !important;
}
.navbar-collapse.in {
overflow-y: visible;
}
.navbar-fixed-top .navbar-collapse,
.navbar-static-top .navbar-collapse,
.navbar-fixed-bottom .navbar-collapse {
padding-left: 0;
padding-right: 0;
}
}
.navbar-fixed-top .navbar-collapse,
.navbar-fixed-bottom .navbar-collapse {
max-height: 340px;
}
@media (max-device-width: 540px) and (orientation: landscape) {
.navbar-fixed-top .navbar-collapse,
.navbar-fixed-bottom .navbar-collapse {
max-height: 200px;
}
}
.container > .navbar-header,
.container-fluid > .navbar-header,
.container > .navbar-collapse,
.container-fluid > .navbar-collapse {
margin-right: 0px;
margin-left: 0px;
}
@media () {
.container > .navbar-header,
.container-fluid > .navbar-header,
.container > .navbar-collapse,
.container-fluid > .navbar-collapse {
margin-right: 0;
margin-left: 0;
}
}
.navbar-static-top {
z-index: 1000;
border-width: 0 0 1px;
}
@media () {
.navbar-static-top {
border-radius: 0;
}
}
.navbar-fixed-top,
.navbar-fixed-bottom {
position: fixed;
right: 0;
left: 0;
z-index: 1030;
}
@media () {
.navbar-fixed-top,
.navbar-fixed-bottom {
border-radius: 0;
}
}
.navbar-fixed-top {
top: 0;
border-width: 0 0 1px;
}
.navbar-fixed-bottom {
bottom: 0;
margin-bottom: 0;
border-width: 1px 0 0;
}
.navbar-brand {
float: left;
padding: 6px 0px;
font-size: 17px;
line-height: 18px;
height: 30px;
}
.navbar-brand:hover,
.navbar-brand:focus {
text-decoration: none;
}
.navbar-brand > img {
display: block;
}
@media () {
.navbar > .container .navbar-brand,
.navbar > .container-fluid .navbar-brand {
margin-left: 0px;
}
}
.navbar-toggle {
position: relative;
float: right;
margin-right: 0px;
padding: 9px 10px;
margin-top: -2px;
margin-bottom: -2px;
background-color: transparent;
background-image: none;
border: 1px solid transparent;
border-radius: 2px;
}
.navbar-toggle:focus {
outline: 0;
}
.navbar-toggle .icon-bar {
display: block;
width: 22px;
height: 2px;
border-radius: 1px;
}
.navbar-toggle .icon-bar + .icon-bar {
margin-top: 4px;
}
@media () {
.navbar-toggle {
display: none;
}
}
.navbar-nav {
margin: 3px 0px;
}
.navbar-nav > li > a {
padding-top: 10px;
padding-bottom: 10px;
line-height: 18px;
}
@media (max-width: 540px) {
.navbar-nav .open .dropdown-menu {
position: static;
float: none;
width: auto;
margin-top: 0;
background-color: transparent;
border: 0;
box-shadow: none;
}
.navbar-nav .open .dropdown-menu > li > a,
.navbar-nav .open .dropdown-menu .dropdown-header {
padding: 5px 15px 5px 25px;
}
.navbar-nav .open .dropdown-menu > li > a {
line-height: 18px;
}
.navbar-nav .open .dropdown-menu > li > a:hover,
.navbar-nav .open .dropdown-menu > li > a:focus {
background-image: none;
}
}
@media () {
.navbar-nav {
float: left;
margin: 0;
}
.navbar-nav > li {
float: left;
}
.navbar-nav > li > a {
padding-top: 6px;
padding-bottom: 6px;
}
}
.navbar-form {
margin-left: 0px;
margin-right: 0px;
padding: 10px 0px;
border-top: 1px solid transparent;
border-bottom: 1px solid transparent;
-webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);
margin-top: -1px;
margin-bottom: -1px;
}
@media () {
.navbar-form .form-group {
display: inline-block;
margin-bottom: 0;
vertical-align: middle;
}
.navbar-form .form-control {
display: inline-block;
width: auto;
vertical-align: middle;
}
.navbar-form .form-control-static {
display: inline-block;
}
.navbar-form .input-group {
display: inline-table;
vertical-align: middle;
}
.navbar-form .input-group .input-group-addon,
.navbar-form .input-group .input-group-btn,
.navbar-form .input-group .form-control {
width: auto;
}
.navbar-form .input-group > .form-control {
width: 100%;
}
.navbar-form .control-label {
margin-bottom: 0;
vertical-align: middle;
}
.navbar-form .radio,
.navbar-form .checkbox {
display: inline-block;
margin-top: 0;
margin-bottom: 0;
vertical-align: middle;
}
.navbar-form .radio label,
.navbar-form .checkbox label {
padding-left: 0;
}
.navbar-form .radio input[type="radio"],
.navbar-form .checkbox input[type="checkbox"] {
position: relative;
margin-left: 0;
}
.navbar-form .has-feedback .form-control-feedback {
top: 0;
}
}
@media (max-width: 540px) {
.navbar-form .form-group {
margin-bottom: 5px;
}
.navbar-form .form-group:last-child {
margin-bottom: 0;
}
}
@media () {
.navbar-form {
width: auto;
border: 0;
margin-left: 0;
margin-right: 0;
padding-top: 0;
padding-bottom: 0;
-webkit-box-shadow: none;
box-shadow: none;
}
}
.navbar-nav > li > .dropdown-menu {
margin-top: 0;
border-top-right-radius: 0;
border-top-left-radius: 0;
}
.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {
margin-bottom: 0;
border-top-right-radius: 2px;
border-top-left-radius: 2px;
border-bottom-right-radius: 0;
border-bottom-left-radius: 0;
}
.navbar-btn {
margin-top: -1px;
margin-bottom: -1px;
}
.navbar-btn.btn-sm {
margin-top: 0px;
margin-bottom: 0px;
}
.navbar-btn.btn-xs {
margin-top: 4px;
margin-bottom: 4px;
}
.navbar-text {
margin-top: 6px;
margin-bottom: 6px;
}
@media () {
.navbar-text {
float: left;
margin-left: 0px;
margin-right: 0px;
}
}
@media () {
.navbar-left {
float: left !important;
float: left;
}
.navbar-right {
float: right !important;
float: right;
margin-right: 0px;
}
.navbar-right ~ .navbar-right {
margin-right: 0;
}
}
.navbar-default {
background-color: #f8f8f8;
border-color: #e7e7e7;
}
.navbar-default .navbar-brand {
color: #777;
}
.navbar-default .navbar-brand:hover,
.navbar-default .navbar-brand:focus {
color: #5e5e5e;
background-color: transparent;
}
.navbar-default .navbar-text {
color: #777;
}
.navbar-default .navbar-nav > li > a {
color: #777;
}
.navbar-default .navbar-nav > li > a:hover,
.navbar-default .navbar-nav > li > a:focus {
color: #333;
background-color: transparent;
}
.navbar-default .navbar-nav > .active > a,
.navbar-default .navbar-nav > .active > a:hover,
.navbar-default .navbar-nav > .active > a:focus {
color: #555;
background-color: #e7e7e7;
}
.navbar-default .navbar-nav > .disabled > a,
.navbar-default .navbar-nav > .disabled > a:hover,
.navbar-default .navbar-nav > .disabled > a:focus {
color: #ccc;
background-color: transparent;
}
.navbar-default .navbar-toggle {
border-color: #ddd;
}
.navbar-default .navbar-toggle:hover,
.navbar-default .navbar-toggle:focus {
background-color: #ddd;
}
.navbar-default .navbar-toggle .icon-bar {
background-color: #888;
}
.navbar-default .navbar-collapse,
.navbar-default .navbar-form {
border-color: #e7e7e7;
}
.navbar-default .navbar-nav > .open > a,
.navbar-default .navbar-nav > .open > a:hover,
.navbar-default .navbar-nav > .open > a:focus {
background-color: #e7e7e7;
color: #555;
}
@media (max-width: 540px) {
.navbar-default .navbar-nav .open .dropdown-menu > li > a {
color: #777;
}
.navbar-default .navbar-nav .open .dropdown-menu > li > a:hover,
.navbar-default .navbar-nav .open .dropdown-menu > li > a:focus {
color: #333;
background-color: transparent;
}
.navbar-default .navbar-nav .open .dropdown-menu > .active > a,
.navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover,
.navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus {
color: #555;
background-color: #e7e7e7;
}
.navbar-default .navbar-nav .open .dropdown-menu > .disabled > a,
.navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover,
.navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus {
color: #ccc;
background-color: transparent;
}
}
.navbar-default .navbar-link {
color: #777;
}
.navbar-default .navbar-link:hover {
color: #333;
}
.navbar-default .btn-link {
color: #777;
}
.navbar-default .btn-link:hover,
.navbar-default .btn-link:focus {
color: #333;
}
.navbar-default .btn-link[disabled]:hover,
fieldset[disabled] .navbar-default .btn-link:hover,
.navbar-default .btn-link[disabled]:focus,
fieldset[disabled] .navbar-default .btn-link:focus {
color: #ccc;
}
.navbar-inverse {
background-color: #222;
border-color: #080808;
}
.navbar-inverse .navbar-brand {
color: #9d9d9d;
}
.navbar-inverse .navbar-brand:hover,
.navbar-inverse .navbar-brand:focus {
color: #fff;
background-color: transparent;
}
.navbar-inverse .navbar-text {
color: #9d9d9d;
}
.navbar-inverse .navbar-nav > li > a {
color: #9d9d9d;
}
.navbar-inverse .navbar-nav > li > a:hover,
.navbar-inverse .navbar-nav > li > a:focus {
color: #fff;
background-color: transparent;
}
.navbar-inverse .navbar-nav > .active > a,
.navbar-inverse .navbar-nav > .active > a:hover,
.navbar-inverse .navbar-nav > .active > a:focus {
color: #fff;
background-color: #080808;
}
.navbar-inverse .navbar-nav > .disabled > a,
.navbar-inverse .navbar-nav > .disabled > a:hover,
.navbar-inverse .navbar-nav > .disabled > a:focus {
color: #444;
background-color: transparent;
}
.navbar-inverse .navbar-toggle {
border-color: #333;
}
.navbar-inverse .navbar-toggle:hover,
.navbar-inverse .navbar-toggle:focus {
background-color: #333;
}
.navbar-inverse .navbar-toggle .icon-bar {
background-color: #fff;
}
.navbar-inverse .navbar-collapse,
.navbar-inverse .navbar-form {
border-color: #101010;
}
.navbar-inverse .navbar-nav > .open > a,
.navbar-inverse .navbar-nav > .open > a:hover,
.navbar-inverse .navbar-nav > .open > a:focus {
background-color: #080808;
color: #fff;
}
@media (max-width: 540px) {
.navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header {
border-color: #080808;
}
.navbar-inverse .navbar-nav .open .dropdown-menu .divider {
background-color: #080808;
}
.navbar-inverse .navbar-nav .open .dropdown-menu > li > a {
color: #9d9d9d;
}
.navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover,
.navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus {
color: #fff;
background-color: transparent;
}
.navbar-inverse .navbar-nav .open .dropdown-menu > .active > a,
.navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover,
.navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus {
color: #fff;
background-color: #080808;
}
.navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a,
.navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover,
.navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus {
color: #444;
background-color: transparent;
}
}
.navbar-inverse .navbar-link {
color: #9d9d9d;
}
.navbar-inverse .navbar-link:hover {
color: #fff;
}
.navbar-inverse .btn-link {
color: #9d9d9d;
}
.navbar-inverse .btn-link:hover,
.navbar-inverse .btn-link:focus {
color: #fff;
}
.navbar-inverse .btn-link[disabled]:hover,
fieldset[disabled] .navbar-inverse .btn-link:hover,
.navbar-inverse .btn-link[disabled]:focus,
fieldset[disabled] .navbar-inverse .btn-link:focus {
color: #444;
}
.breadcrumb {
padding: 8px 15px;
margin-bottom: 18px;
list-style: none;
background-color: #f5f5f5;
border-radius: 2px;
}
.breadcrumb > li {
display: inline-block;
}
.breadcrumb > li + li:before {
content: "/\00a0";
padding: 0 5px;
color: #5e5e5e;
}
.breadcrumb > .active {
color: #777777;
}
.pagination {
display: inline-block;
padding-left: 0;
margin: 18px 0;
border-radius: 2px;
}
.pagination > li {
display: inline;
}
.pagination > li > a,
.pagination > li > span {
position: relative;
float: left;
padding: 6px 12px;
line-height: 1.42857143;
text-decoration: none;
color: #337ab7;
background-color: #fff;
border: 1px solid #ddd;
margin-left: -1px;
}
.pagination > li:first-child > a,
.pagination > li:first-child > span {
margin-left: 0;
border-bottom-left-radius: 2px;
border-top-left-radius: 2px;
}
.pagination > li:last-child > a,
.pagination > li:last-child > span {
border-bottom-right-radius: 2px;
border-top-right-radius: 2px;
}
.pagination > li > a:hover,
.pagination > li > span:hover,
.pagination > li > a:focus,
.pagination > li > span:focus {
z-index: 2;
color: #23527c;
background-color: #eeeeee;
border-color: #ddd;
}
.pagination > .active > a,
.pagination > .active > span,
.pagination > .active > a:hover,
.pagination > .active > span:hover,
.pagination > .active > a:focus,
.pagination > .active > span:focus {
z-index: 3;
color: #fff;
background-color: #337ab7;
border-color: #337ab7;
cursor: default;
}
.pagination > .disabled > span,
.pagination > .disabled > span:hover,
.pagination > .disabled > span:focus,
.pagination > .disabled > a,
.pagination > .disabled > a:hover,
.pagination > .disabled > a:focus {
color: #777777;
background-color: #fff;
border-color: #ddd;
cursor: not-allowed;
}
.pagination-lg > li > a,
.pagination-lg > li > span {
padding: 10px 16px;
font-size: 17px;
line-height: 1.3333333;
}
.pagination-lg > li:first-child > a,
.pagination-lg > li:first-child > span {
border-bottom-left-radius: 3px;
border-top-left-radius: 3px;
}
.pagination-lg > li:last-child > a,
.pagination-lg > li:last-child > span {
border-bottom-right-radius: 3px;
border-top-right-radius: 3px;
}
.pagination-sm > li > a,
.pagination-sm > li > span {
padding: 5px 10px;
font-size: 12px;
line-height: 1.5;
}
.pagination-sm > li:first-child > a,
.pagination-sm > li:first-child > span {
border-bottom-left-radius: 1px;
border-top-left-radius: 1px;
}
.pagination-sm > li:last-child > a,
.pagination-sm > li:last-child > span {
border-bottom-right-radius: 1px;
border-top-right-radius: 1px;
}
.pager {
padding-left: 0;
margin: 18px 0;
list-style: none;
text-align: center;
}
.pager li {
display: inline;
}
.pager li > a,
.pager li > span {
display: inline-block;
padding: 5px 14px;
background-color: #fff;
border: 1px solid #ddd;
border-radius: 15px;
}
.pager li > a:hover,
.pager li > a:focus {
text-decoration: none;
background-color: #eeeeee;
}
.pager .next > a,
.pager .next > span {
float: right;
}
.pager .previous > a,
.pager .previous > span {
float: left;
}
.pager .disabled > a,
.pager .disabled > a:hover,
.pager .disabled > a:focus,
.pager .disabled > span {
color: #777777;
background-color: #fff;
cursor: not-allowed;
}
.label {
display: inline;
padding: .2em .6em .3em;
font-size: 75%;
font-weight: bold;
line-height: 1;
color: #fff;
text-align: center;
white-space: nowrap;
vertical-align: baseline;
border-radius: .25em;
}
a.label:hover,
a.label:focus {
color: #fff;
text-decoration: none;
cursor: pointer;
}
.label:empty {
display: none;
}
.btn .label {
position: relative;
top: -1px;
}
.label-default {
background-color: #777777;
}
.label-default[href]:hover,
.label-default[href]:focus {
background-color: #5e5e5e;
}
.label-primary {
background-color: #337ab7;
}
.label-primary[href]:hover,
.label-primary[href]:focus {
background-color: #286090;
}
.label-success {
background-color: #5cb85c;
}
.label-success[href]:hover,
.label-success[href]:focus {
background-color: #449d44;
}
.label-info {
background-color: #5bc0de;
}
.label-info[href]:hover,
.label-info[href]:focus {
background-color: #31b0d5;
}
.label-warning {
background-color: #f0ad4e;
}
.label-warning[href]:hover,
.label-warning[href]:focus {
background-color: #ec971f;
}
.label-danger {
background-color: #d9534f;
}
.label-danger[href]:hover,
.label-danger[href]:focus {
background-color: #c9302c;
}
.badge {
display: inline-block;
min-width: 10px;
padding: 3px 7px;
font-size: 12px;
font-weight: bold;
color: #fff;
line-height: 1;
vertical-align: middle;
white-space: nowrap;
text-align: center;
background-color: #777777;
border-radius: 10px;
}
.badge:empty {
display: none;
}
.btn .badge {
position: relative;
top: -1px;
}
.btn-xs .badge,
.btn-group-xs > .btn .badge {
top: 0;
padding: 1px 5px;
}
a.badge:hover,
a.badge:focus {
color: #fff;
text-decoration: none;
cursor: pointer;
}
.list-group-item.active > .badge,
.nav-pills > .active > a > .badge {
color: #337ab7;
background-color: #fff;
}
.list-group-item > .badge {
float: right;
}
.list-group-item > .badge + .badge {
margin-right: 5px;
}
.nav-pills > li > a > .badge {
margin-left: 3px;
}
.jumbotron {
padding-top: 30px;
padding-bottom: 30px;
margin-bottom: 30px;
color: inherit;
background-color: #eeeeee;
}
.jumbotron h1,
.jumbotron .h1 {
color: inherit;
}
.jumbotron p {
margin-bottom: 15px;
font-size: 20px;
font-weight: 200;
}
.jumbotron > hr {
border-top-color: #d5d5d5;
}
.container .jumbotron,
.container-fluid .jumbotron {
border-radius: 3px;
padding-left: 0px;
padding-right: 0px;
}
.jumbotron .container {
max-width: 100%;
}
@media screen and (min-width: 768px) {
.jumbotron {
padding-top: 48px;
padding-bottom: 48px;
}
.container .jumbotron,
.container-fluid .jumbotron {
padding-left: 60px;
padding-right: 60px;
}
.jumbotron h1,
.jumbotron .h1 {
font-size: 59px;
}
}
.thumbnail {
display: block;
padding: 4px;
margin-bottom: 18px;
line-height: 1.42857143;
background-color: #fff;
border: 1px solid #ddd;
border-radius: 2px;
-webkit-transition: border 0.2s ease-in-out;
-o-transition: border 0.2s ease-in-out;
transition: border 0.2s ease-in-out;
}
.thumbnail > img,
.thumbnail a > img {
margin-left: auto;
margin-right: auto;
}
a.thumbnail:hover,
a.thumbnail:focus,
a.thumbnail.active {
border-color: #337ab7;
}
.thumbnail .caption {
padding: 9px;
color: #000;
}
.alert {
padding: 15px;
margin-bottom: 18px;
border: 1px solid transparent;
border-radius: 2px;
}
.alert h4 {
margin-top: 0;
color: inherit;
}
.alert .alert-link {
font-weight: bold;
}
.alert > p,
.alert > ul {
margin-bottom: 0;
}
.alert > p + p {
margin-top: 5px;
}
.alert-dismissable,
.alert-dismissible {
padding-right: 35px;
}
.alert-dismissable .close,
.alert-dismissible .close {
position: relative;
top: -2px;
right: -21px;
color: inherit;
}
.alert-success {
background-color: #dff0d8;
border-color: #d6e9c6;
color: #3c763d;
}
.alert-success hr {
border-top-color: #c9e2b3;
}
.alert-success .alert-link {
color: #2b542c;
}
.alert-info {
background-color: #d9edf7;
border-color: #bce8f1;
color: #31708f;
}
.alert-info hr {
border-top-color: #a6e1ec;
}
.alert-info .alert-link {
color: #245269;
}
.alert-warning {
background-color: #fcf8e3;
border-color: #faebcc;
color: #8a6d3b;
}
.alert-warning hr {
border-top-color: #f7e1b5;
}
.alert-warning .alert-link {
color: #66512c;
}
.alert-danger {
background-color: #f2dede;
border-color: #ebccd1;
color: #a94442;
}
.alert-danger hr {
border-top-color: #e4b9c0;
}
.alert-danger .alert-link {
color: #843534;
}
@-webkit-keyframes progress-bar-stripes {
from {
background-position: 40px 0;
}
to {
background-position: 0 0;
}
}
@keyframes progress-bar-stripes {
from {
background-position: 40px 0;
}
to {
background-position: 0 0;
}
}
.progress {
overflow: hidden;
height: 18px;
margin-bottom: 18px;
background-color: #f5f5f5;
border-radius: 2px;
-webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
}
.progress-bar {
float: left;
width: 0%;
height: 100%;
font-size: 12px;
line-height: 18px;
color: #fff;
text-align: center;
background-color: #337ab7;
-webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);
box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);
-webkit-transition: width 0.6s ease;
-o-transition: width 0.6s ease;
transition: width 0.6s ease;
}
.progress-striped .progress-bar,
.progress-bar-striped {
background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
background-size: 40px 40px;
}
.progress.active .progress-bar,
.progress-bar.active {
-webkit-animation: progress-bar-stripes 2s linear infinite;
-o-animation: progress-bar-stripes 2s linear infinite;
animation: progress-bar-stripes 2s linear infinite;
}
.progress-bar-success {
background-color: #5cb85c;
}
.progress-striped .progress-bar-success {
background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
}
.progress-bar-info {
background-color: #5bc0de;
}
.progress-striped .progress-bar-info {
background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
}
.progress-bar-warning {
background-color: #f0ad4e;
}
.progress-striped .progress-bar-warning {
background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
}
.progress-bar-danger {
background-color: #d9534f;
}
.progress-striped .progress-bar-danger {
background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
}
.media {
margin-top: 15px;
}
.media:first-child {
margin-top: 0;
}
.media,
.media-body {
zoom: 1;
overflow: hidden;
}
.media-body {
width: 10000px;
}
.media-object {
display: block;
}
.media-object.img-thumbnail {
max-width: none;
}
.media-right,
.media > .pull-right {
padding-left: 10px;
}
.media-left,
.media > .pull-left {
padding-right: 10px;
}
.media-left,
.media-right,
.media-body {
display: table-cell;
vertical-align: top;
}
.media-middle {
vertical-align: middle;
}
.media-bottom {
vertical-align: bottom;
}
.media-heading {
margin-top: 0;
margin-bottom: 5px;
}
.media-list {
padding-left: 0;
list-style: none;
}
.list-group {
margin-bottom: 20px;
padding-left: 0;
}
.list-group-item {
position: relative;
display: block;
padding: 10px 15px;
margin-bottom: -1px;
background-color: #fff;
border: 1px solid #ddd;
}
.list-group-item:first-child {
border-top-right-radius: 2px;
border-top-left-radius: 2px;
}
.list-group-item:last-child {
margin-bottom: 0;
border-bottom-right-radius: 2px;
border-bottom-left-radius: 2px;
}
a.list-group-item,
button.list-group-item {
color: #555;
}
a.list-group-item .list-group-item-heading,
button.list-group-item .list-group-item-heading {
color: #333;
}
a.list-group-item:hover,
button.list-group-item:hover,
a.list-group-item:focus,
button.list-group-item:focus {
text-decoration: none;
color: #555;
background-color: #f5f5f5;
}
button.list-group-item {
width: 100%;
text-align: left;
}
.list-group-item.disabled,
.list-group-item.disabled:hover,
.list-group-item.disabled:focus {
background-color: #eeeeee;
color: #777777;
cursor: not-allowed;
}
.list-group-item.disabled .list-group-item-heading,
.list-group-item.disabled:hover .list-group-item-heading,
.list-group-item.disabled:focus .list-group-item-heading {
color: inherit;
}
.list-group-item.disabled .list-group-item-text,
.list-group-item.disabled:hover .list-group-item-text,
.list-group-item.disabled:focus .list-group-item-text {
color: #777777;
}
.list-group-item.active,
.list-group-item.active:hover,
.list-group-item.active:focus {
z-index: 2;
color: #fff;
background-color: #337ab7;
border-color: #337ab7;
}
.list-group-item.active .list-group-item-heading,
.list-group-item.active:hover .list-group-item-heading,
.list-group-item.active:focus .list-group-item-heading,
.list-group-item.active .list-group-item-heading > small,
.list-group-item.active:hover .list-group-item-heading > small,
.list-group-item.active:focus .list-group-item-heading > small,
.list-group-item.active .list-group-item-heading > .small,
.list-group-item.active:hover .list-group-item-heading > .small,
.list-group-item.active:focus .list-group-item-heading > .small {
color: inherit;
}
.list-group-item.active .list-group-item-text,
.list-group-item.active:hover .list-group-item-text,
.list-group-item.active:focus .list-group-item-text {
color: #c7ddef;
}
.list-group-item-success {
color: #3c763d;
background-color: #dff0d8;
}
a.list-group-item-success,
button.list-group-item-success {
color: #3c763d;
}
a.list-group-item-success .list-group-item-heading,
button.list-group-item-success .list-group-item-heading {
color: inherit;
}
a.list-group-item-success:hover,
button.list-group-item-success:hover,
a.list-group-item-success:focus,
button.list-group-item-success:focus {
color: #3c763d;
background-color: #d0e9c6;
}
a.list-group-item-success.active,
button.list-group-item-success.active,
a.list-group-item-success.active:hover,
button.list-group-item-success.active:hover,
a.list-group-item-success.active:focus,
button.list-group-item-success.active:focus {
color: #fff;
background-color: #3c763d;
border-color: #3c763d;
}
.list-group-item-info {
color: #31708f;
background-color: #d9edf7;
}
a.list-group-item-info,
button.list-group-item-info {
color: #31708f;
}
a.list-group-item-info .list-group-item-heading,
button.list-group-item-info .list-group-item-heading {
color: inherit;
}
a.list-group-item-info:hover,
button.list-group-item-info:hover,
a.list-group-item-info:focus,
button.list-group-item-info:focus {
color: #31708f;
background-color: #c4e3f3;
}
a.list-group-item-info.active,
button.list-group-item-info.active,
a.list-group-item-info.active:hover,
button.list-group-item-info.active:hover,
a.list-group-item-info.active:focus,
button.list-group-item-info.active:focus {
color: #fff;
background-color: #31708f;
border-color: #31708f;
}
.list-group-item-warning {
color: #8a6d3b;
background-color: #fcf8e3;
}
a.list-group-item-warning,
button.list-group-item-warning {
color: #8a6d3b;
}
a.list-group-item-warning .list-group-item-heading,
button.list-group-item-warning .list-group-item-heading {
color: inherit;
}
a.list-group-item-warning:hover,
button.list-group-item-warning:hover,
a.list-group-item-warning:focus,
button.list-group-item-warning:focus {
color: #8a6d3b;
background-color: #faf2cc;
}
a.list-group-item-warning.active,
button.list-group-item-warning.active,
a.list-group-item-warning.active:hover,
button.list-group-item-warning.active:hover,
a.list-group-item-warning.active:focus,
button.list-group-item-warning.active:focus {
color: #fff;
background-color: #8a6d3b;
border-color: #8a6d3b;
}
.list-group-item-danger {
color: #a94442;
background-color: #f2dede;
}
a.list-group-item-danger,
button.list-group-item-danger {
color: #a94442;
}
a.list-group-item-danger .list-group-item-heading,
button.list-group-item-danger .list-group-item-heading {
color: inherit;
}
a.list-group-item-danger:hover,
button.list-group-item-danger:hover,
a.list-group-item-danger:focus,
button.list-group-item-danger:focus {
color: #a94442;
background-color: #ebcccc;
}
a.list-group-item-danger.active,
button.list-group-item-danger.active,
a.list-group-item-danger.active:hover,
button.list-group-item-danger.active:hover,
a.list-group-item-danger.active:focus,
button.list-group-item-danger.active:focus {
color: #fff;
background-color: #a94442;
border-color: #a94442;
}
.list-group-item-heading {
margin-top: 0;
margin-bottom: 5px;
}
.list-group-item-text {
margin-bottom: 0;
line-height: 1.3;
}
.panel {
margin-bottom: 18px;
background-color: #fff;
border: 1px solid transparent;
border-radius: 2px;
-webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);
box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);
}
.panel-body {
padding: 15px;
}
.panel-heading {
padding: 10px 15px;
border-bottom: 1px solid transparent;
border-top-right-radius: 1px;
border-top-left-radius: 1px;
}
.panel-heading > .dropdown .dropdown-toggle {
color: inherit;
}
.panel-title {
margin-top: 0;
margin-bottom: 0;
font-size: 15px;
color: inherit;
}
.panel-title > a,
.panel-title > small,
.panel-title > .small,
.panel-title > small > a,
.panel-title > .small > a {
color: inherit;
}
.panel-footer {
padding: 10px 15px;
background-color: #f5f5f5;
border-top: 1px solid #ddd;
border-bottom-right-radius: 1px;
border-bottom-left-radius: 1px;
}
.panel > .list-group,
.panel > .panel-collapse > .list-group {
margin-bottom: 0;
}
.panel > .list-group .list-group-item,
.panel > .panel-collapse > .list-group .list-group-item {
border-width: 1px 0;
border-radius: 0;
}
.panel > .list-group:first-child .list-group-item:first-child,
.panel > .panel-collapse > .list-group:first-child .list-group-item:first-child {
border-top: 0;
border-top-right-radius: 1px;
border-top-left-radius: 1px;
}
.panel > .list-group:last-child .list-group-item:last-child,
.panel > .panel-collapse > .list-group:last-child .list-group-item:last-child {
border-bottom: 0;
border-bottom-right-radius: 1px;
border-bottom-left-radius: 1px;
}
.panel > .panel-heading + .panel-collapse > .list-group .list-group-item:first-child {
border-top-right-radius: 0;
border-top-left-radius: 0;
}
.panel-heading + .list-group .list-group-item:first-child {
border-top-width: 0;
}
.list-group + .panel-footer {
border-top-width: 0;
}
.panel > .table,
.panel > .table-responsive > .table,
.panel > .panel-collapse > .table {
margin-bottom: 0;
}
.panel > .table caption,
.panel > .table-responsive > .table caption,
.panel > .panel-collapse > .table caption {
padding-left: 15px;
padding-right: 15px;
}
.panel > .table:first-child,
.panel > .table-responsive:first-child > .table:first-child {
border-top-right-radius: 1px;
border-top-left-radius: 1px;
}
.panel > .table:first-child > thead:first-child > tr:first-child,
.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child,
.panel > .table:first-child > tbody:first-child > tr:first-child,
.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child {
border-top-left-radius: 1px;
border-top-right-radius: 1px;
}
.panel > .table:first-child > thead:first-child > tr:first-child td:first-child,
.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child,
.panel > .table:first-child > tbody:first-child > tr:first-child td:first-child,
.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child,
.panel > .table:first-child > thead:first-child > tr:first-child th:first-child,
.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child,
.panel > .table:first-child > tbody:first-child > tr:first-child th:first-child,
.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child {
border-top-left-radius: 1px;
}
.panel > .table:first-child > thead:first-child > tr:first-child td:last-child,
.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child,
.panel > .table:first-child > tbody:first-child > tr:first-child td:last-child,
.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child,
.panel > .table:first-child > thead:first-child > tr:first-child th:last-child,
.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child,
.panel > .table:first-child > tbody:first-child > tr:first-child th:last-child,
.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child {
border-top-right-radius: 1px;
}
.panel > .table:last-child,
.panel > .table-responsive:last-child > .table:last-child {
border-bottom-right-radius: 1px;
border-bottom-left-radius: 1px;
}
.panel > .table:last-child > tbody:last-child > tr:last-child,
.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child,
.panel > .table:last-child > tfoot:last-child > tr:last-child,
.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child {
border-bottom-left-radius: 1px;
border-bottom-right-radius: 1px;
}
.panel > .table:last-child > tbody:last-child > tr:last-child td:first-child,
.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child,
.panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child,
.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child,
.panel > .table:last-child > tbody:last-child > tr:last-child th:first-child,
.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child,
.panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child,
.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child {
border-bottom-left-radius: 1px;
}
.panel > .table:last-child > tbody:last-child > tr:last-child td:last-child,
.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child,
.panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child,
.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child,
.panel > .table:last-child > tbody:last-child > tr:last-child th:last-child,
.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child,
.panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child,
.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child {
border-bottom-right-radius: 1px;
}
.panel > .panel-body + .table,
.panel > .panel-body + .table-responsive,
.panel > .table + .panel-body,
.panel > .table-responsive + .panel-body {
border-top: 1px solid #ddd;
}
.panel > .table > tbody:first-child > tr:first-child th,
.panel > .table > tbody:first-child > tr:first-child td {
border-top: 0;
}
.panel > .table-bordered,
.panel > .table-responsive > .table-bordered {
border: 0;
}
.panel > .table-bordered > thead > tr > th:first-child,
.panel > .table-responsive > .table-bordered > thead > tr > th:first-child,
.panel > .table-bordered > tbody > tr > th:first-child,
.panel > .table-responsive > .table-bordered > tbody > tr > th:first-child,
.panel > .table-bordered > tfoot > tr > th:first-child,
.panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child,
.panel > .table-bordered > thead > tr > td:first-child,
.panel > .table-responsive > .table-bordered > thead > tr > td:first-child,
.panel > .table-bordered > tbody > tr > td:first-child,
.panel > .table-responsive > .table-bordered > tbody > tr > td:first-child,
.panel > .table-bordered > tfoot > tr > td:first-child,
.panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child {
border-left: 0;
}
.panel > .table-bordered > thead > tr > th:last-child,
.panel > .table-responsive > .table-bordered > thead > tr > th:last-child,
.panel > .table-bordered > tbody > tr > th:last-child,
.panel > .table-responsive > .table-bordered > tbody > tr > th:last-child,
.panel > .table-bordered > tfoot > tr > th:last-child,
.panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child,
.panel > .table-bordered > thead > tr > td:last-child,
.panel > .table-responsive > .table-bordered > thead > tr > td:last-child,
.panel > .table-bordered > tbody > tr > td:last-child,
.panel > .table-responsive > .table-bordered > tbody > tr > td:last-child,
.panel > .table-bordered > tfoot > tr > td:last-child,
.panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child {
border-right: 0;
}
.panel > .table-bordered > thead > tr:first-child > td,
.panel > .table-responsive > .table-bordered > thead > tr:first-child > td,
.panel > .table-bordered > tbody > tr:first-child > td,
.panel > .table-responsive > .table-bordered > tbody > tr:first-child > td,
.panel > .table-bordered > thead > tr:first-child > th,
.panel > .table-responsive > .table-bordered > thead > tr:first-child > th,
.panel > .table-bordered > tbody > tr:first-child > th,
.panel > .table-responsive > .table-bordered > tbody > tr:first-child > th {
border-bottom: 0;
}
.panel > .table-bordered > tbody > tr:last-child > td,
.panel > .table-responsive > .table-bordered > tbody > tr:last-child > td,
.panel > .table-bordered > tfoot > tr:last-child > td,
.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td,
.panel > .table-bordered > tbody > tr:last-child > th,
.panel > .table-responsive > .table-bordered > tbody > tr:last-child > th,
.panel > .table-bordered > tfoot > tr:last-child > th,
.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th {
border-bottom: 0;
}
.panel > .table-responsive {
border: 0;
margin-bottom: 0;
}
.panel-group {
margin-bottom: 18px;
}
.panel-group .panel {
margin-bottom: 0;
border-radius: 2px;
}
.panel-group .panel + .panel {
margin-top: 5px;
}
.panel-group .panel-heading {
border-bottom: 0;
}
.panel-group .panel-heading + .panel-collapse > .panel-body,
.panel-group .panel-heading + .panel-collapse > .list-group {
border-top: 1px solid #ddd;
}
.panel-group .panel-footer {
border-top: 0;
}
.panel-group .panel-footer + .panel-collapse .panel-body {
border-bottom: 1px solid #ddd;
}
.panel-default {
border-color: #ddd;
}
.panel-default > .panel-heading {
color: #333333;
background-color: #f5f5f5;
border-color: #ddd;
}
.panel-default > .panel-heading + .panel-collapse > .panel-body {
border-top-color: #ddd;
}
.panel-default > .panel-heading .badge {
color: #f5f5f5;
background-color: #333333;
}
.panel-default > .panel-footer + .panel-collapse > .panel-body {
border-bottom-color: #ddd;
}
.panel-primary {
border-color: #337ab7;
}
.panel-primary > .panel-heading {
color: #fff;
background-color: #337ab7;
border-color: #337ab7;
}
.panel-primary > .panel-heading + .panel-collapse > .panel-body {
border-top-color: #337ab7;
}
.panel-primary > .panel-heading .badge {
color: #337ab7;
background-color: #fff;
}
.panel-primary > .panel-footer + .panel-collapse > .panel-body {
border-bottom-color: #337ab7;
}
.panel-success {
border-color: #d6e9c6;
}
.panel-success > .panel-heading {
color: #3c763d;
background-color: #dff0d8;
border-color: #d6e9c6;
}
.panel-success > .panel-heading + .panel-collapse > .panel-body {
border-top-color: #d6e9c6;
}
.panel-success > .panel-heading .badge {
color: #dff0d8;
background-color: #3c763d;
}
.panel-success > .panel-footer + .panel-collapse > .panel-body {
border-bottom-color: #d6e9c6;
}
.panel-info {
border-color: #bce8f1;
}
.panel-info > .panel-heading {
color: #31708f;
background-color: #d9edf7;
border-color: #bce8f1;
}
.panel-info > .panel-heading + .panel-collapse > .panel-body {
border-top-color: #bce8f1;
}
.panel-info > .panel-heading .badge {
color: #d9edf7;
background-color: #31708f;
}
.panel-info > .panel-footer + .panel-collapse > .panel-body {
border-bottom-color: #bce8f1;
}
.panel-warning {
border-color: #faebcc;
}
.panel-warning > .panel-heading {
color: #8a6d3b;
background-color: #fcf8e3;
border-color: #faebcc;
}
.panel-warning > .panel-heading + .panel-collapse > .panel-body {
border-top-color: #faebcc;
}
.panel-warning > .panel-heading .badge {
color: #fcf8e3;
background-color: #8a6d3b;
}
.panel-warning > .panel-footer + .panel-collapse > .panel-body {
border-bottom-color: #faebcc;
}
.panel-danger {
border-color: #ebccd1;
}
.panel-danger > .panel-heading {
color: #a94442;
background-color: #f2dede;
border-color: #ebccd1;
}
.panel-danger > .panel-heading + .panel-collapse > .panel-body {
border-top-color: #ebccd1;
}
.panel-danger > .panel-heading .badge {
color: #f2dede;
background-color: #a94442;
}
.panel-danger > .panel-footer + .panel-collapse > .panel-body {
border-bottom-color: #ebccd1;
}
.embed-responsive {
position: relative;
display: block;
height: 0;
padding: 0;
overflow: hidden;
}
.embed-responsive .embed-responsive-item,
.embed-responsive iframe,
.embed-responsive embed,
.embed-responsive object,
.embed-responsive video {
position: absolute;
top: 0;
left: 0;
bottom: 0;
height: 100%;
width: 100%;
border: 0;
}
.embed-responsive-16by9 {
padding-bottom: 56.25%;
}
.embed-responsive-4by3 {
padding-bottom: 75%;
}
.well {
min-height: 20px;
padding: 19px;
margin-bottom: 20px;
background-color: #f5f5f5;
border: 1px solid #e3e3e3;
border-radius: 2px;
-webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
}
.well blockquote {
border-color: #ddd;
border-color: rgba(0, 0, 0, 0.15);
}
.well-lg {
padding: 24px;
border-radius: 3px;
}
.well-sm {
padding: 9px;
border-radius: 1px;
}
.close {
float: right;
font-size: 19.5px;
font-weight: bold;
line-height: 1;
color: #000;
text-shadow: 0 1px 0 #fff;
opacity: 0.2;
filter: alpha(opacity=20);
}
.close:hover,
.close:focus {
color: #000;
text-decoration: none;
cursor: pointer;
opacity: 0.5;
filter: alpha(opacity=50);
}
button.close {
padding: 0;
cursor: pointer;
background: transparent;
border: 0;
-webkit-appearance: none;
}
.modal-open {
overflow: hidden;
}
.modal {
display: none;
overflow: hidden;
position: fixed;
top: 0;
right: 0;
bottom: 0;
left: 0;
z-index: 1050;
-webkit-overflow-scrolling: touch;
outline: 0;
}
.modal.fade .modal-dialog {
-webkit-transform: translate(0, -25%);
-ms-transform: translate(0, -25%);
-o-transform: translate(0, -25%);
transform: translate(0, -25%);
-webkit-transition: -webkit-transform 0.3s ease-out;
-moz-transition: -moz-transform 0.3s ease-out;
-o-transition: -o-transform 0.3s ease-out;
transition: transform 0.3s ease-out;
}
.modal.in .modal-dialog {
-webkit-transform: translate(0, 0);
-ms-transform: translate(0, 0);
-o-transform: translate(0, 0);
transform: translate(0, 0);
}
.modal-open .modal {
overflow-x: hidden;
overflow-y: auto;
}
.modal-dialog {
position: relative;
width: auto;
margin: 10px;
}
.modal-content {
position: relative;
background-color: #fff;
border: 1px solid #999;
border: 1px solid rgba(0, 0, 0, 0.2);
border-radius: 3px;
-webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);
box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);
background-clip: padding-box;
outline: 0;
}
.modal-backdrop {
position: fixed;
top: 0;
right: 0;
bottom: 0;
left: 0;
z-index: 1040;
background-color: #000;
}
.modal-backdrop.fade {
opacity: 0;
filter: alpha(opacity=0);
}
.modal-backdrop.in {
opacity: 0.5;
filter: alpha(opacity=50);
}
.modal-header {
padding: 15px;
border-bottom: 1px solid #e5e5e5;
}
.modal-header .close {
margin-top: -2px;
}
.modal-title {
margin: 0;
line-height: 1.42857143;
}
.modal-body {
position: relative;
padding: 15px;
}
.modal-footer {
padding: 15px;
text-align: right;
border-top: 1px solid #e5e5e5;
}
.modal-footer .btn + .btn {
margin-left: 5px;
margin-bottom: 0;
}
.modal-footer .btn-group .btn + .btn {
margin-left: -1px;
}
.modal-footer .btn-block + .btn-block {
margin-left: 0;
}
.modal-scrollbar-measure {
position: absolute;
top: -9999px;
width: 50px;
height: 50px;
overflow: scroll;
}
@media () {
.modal-dialog {
width: 600px;
margin: 30px auto;
}
.modal-content {
-webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);
box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);
}
.modal-sm {
width: 300px;
}
}
@media () {
.modal-lg {
width: 900px;
}
}
.tooltip {
position: absolute;
z-index: 1070;
display: block;
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
font-style: normal;
font-weight: normal;
letter-spacing: normal;
line-break: auto;
line-height: 1.42857143;
text-align: left;
text-align: start;
text-decoration: none;
text-shadow: none;
text-transform: none;
white-space: normal;
word-break: normal;
word-spacing: normal;
word-wrap: normal;
font-size: 12px;
opacity: 0;
filter: alpha(opacity=0);
}
.tooltip.in {
opacity: 0.9;
filter: alpha(opacity=90);
}
.tooltip.top {
margin-top: -3px;
padding: 5px 0;
}
.tooltip.right {
margin-left: 3px;
padding: 0 5px;
}
.tooltip.bottom {
margin-top: 3px;
padding: 5px 0;
}
.tooltip.left {
margin-left: -3px;
padding: 0 5px;
}
.tooltip-inner {
max-width: 200px;
padding: 3px 8px;
color: #fff;
text-align: center;
background-color: #000;
border-radius: 2px;
}
.tooltip-arrow {
position: absolute;
width: 0;
height: 0;
border-color: transparent;
border-style: solid;
}
.tooltip.top .tooltip-arrow {
bottom: 0;
left: 50%;
margin-left: -5px;
border-width: 5px 5px 0;
border-top-color: #000;
}
.tooltip.top-left .tooltip-arrow {
bottom: 0;
right: 5px;
margin-bottom: -5px;
border-width: 5px 5px 0;
border-top-color: #000;
}
.tooltip.top-right .tooltip-arrow {
bottom: 0;
left: 5px;
margin-bottom: -5px;
border-width: 5px 5px 0;
border-top-color: #000;
}
.tooltip.right .tooltip-arrow {
top: 50%;
left: 0;
margin-top: -5px;
border-width: 5px 5px 5px 0;
border-right-color: #000;
}
.tooltip.left .tooltip-arrow {
top: 50%;
right: 0;
margin-top: -5px;
border-width: 5px 0 5px 5px;
border-left-color: #000;
}
.tooltip.bottom .tooltip-arrow {
top: 0;
left: 50%;
margin-left: -5px;
border-width: 0 5px 5px;
border-bottom-color: #000;
}
.tooltip.bottom-left .tooltip-arrow {
top: 0;
right: 5px;
margin-top: -5px;
border-width: 0 5px 5px;
border-bottom-color: #000;
}
.tooltip.bottom-right .tooltip-arrow {
top: 0;
left: 5px;
margin-top: -5px;
border-width: 0 5px 5px;
border-bottom-color: #000;
}
.popover {
position: absolute;
top: 0;
left: 0;
z-index: 1060;
display: none;
max-width: 276px;
padding: 1px;
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
font-style: normal;
font-weight: normal;
letter-spacing: normal;
line-break: auto;
line-height: 1.42857143;
text-align: left;
text-align: start;
text-decoration: none;
text-shadow: none;
text-transform: none;
white-space: normal;
word-break: normal;
word-spacing: normal;
word-wrap: normal;
font-size: 13px;
background-color: #fff;
background-clip: padding-box;
border: 1px solid #ccc;
border: 1px solid rgba(0, 0, 0, 0.2);
border-radius: 3px;
-webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
}
.popover.top {
margin-top: -10px;
}
.popover.right {
margin-left: 10px;
}
.popover.bottom {
margin-top: 10px;
}
.popover.left {
margin-left: -10px;
}
.popover-title {
margin: 0;
padding: 8px 14px;
font-size: 13px;
background-color: #f7f7f7;
border-bottom: 1px solid #ebebeb;
border-radius: 2px 2px 0 0;
}
.popover-content {
padding: 9px 14px;
}
.popover > .arrow,
.popover > .arrow:after {
position: absolute;
display: block;
width: 0;
height: 0;
border-color: transparent;
border-style: solid;
}
.popover > .arrow {
border-width: 11px;
}
.popover > .arrow:after {
border-width: 10px;
content: "";
}
.popover.top > .arrow {
left: 50%;
margin-left: -11px;
border-bottom-width: 0;
border-top-color: #999999;
border-top-color: rgba(0, 0, 0, 0.25);
bottom: -11px;
}
.popover.top > .arrow:after {
content: " ";
bottom: 1px;
margin-left: -10px;
border-bottom-width: 0;
border-top-color: #fff;
}
.popover.right > .arrow {
top: 50%;
left: -11px;
margin-top: -11px;
border-left-width: 0;
border-right-color: #999999;
border-right-color: rgba(0, 0, 0, 0.25);
}
.popover.right > .arrow:after {
content: " ";
left: 1px;
bottom: -10px;
border-left-width: 0;
border-right-color: #fff;
}
.popover.bottom > .arrow {
left: 50%;
margin-left: -11px;
border-top-width: 0;
border-bottom-color: #999999;
border-bottom-color: rgba(0, 0, 0, 0.25);
top: -11px;
}
.popover.bottom > .arrow:after {
content: " ";
top: 1px;
margin-left: -10px;
border-top-width: 0;
border-bottom-color: #fff;
}
.popover.left > .arrow {
top: 50%;
right: -11px;
margin-top: -11px;
border-right-width: 0;
border-left-color: #999999;
border-left-color: rgba(0, 0, 0, 0.25);
}
.popover.left > .arrow:after {
content: " ";
right: 1px;
border-right-width: 0;
border-left-color: #fff;
bottom: -10px;
}
.carousel {
position: relative;
}
.carousel-inner {
position: relative;
overflow: hidden;
width: 100%;
}
.carousel-inner > .item {
display: none;
position: relative;
-webkit-transition: 0.6s ease-in-out left;
-o-transition: 0.6s ease-in-out left;
transition: 0.6s ease-in-out left;
}
.carousel-inner > .item > img,
.carousel-inner > .item > a > img {
line-height: 1;
}
@media all and (transform-3d), (-webkit-transform-3d) {
.carousel-inner > .item {
-webkit-transition: -webkit-transform 0.6s ease-in-out;
-moz-transition: -moz-transform 0.6s ease-in-out;
-o-transition: -o-transform 0.6s ease-in-out;
transition: transform 0.6s ease-in-out;
-webkit-backface-visibility: hidden;
-moz-backface-visibility: hidden;
backface-visibility: hidden;
-webkit-perspective: 1000px;
-moz-perspective: 1000px;
perspective: 1000px;
}
.carousel-inner > .item.next,
.carousel-inner > .item.active.right {
-webkit-transform: translate3d(100%, 0, 0);
transform: translate3d(100%, 0, 0);
left: 0;
}
.carousel-inner > .item.prev,
.carousel-inner > .item.active.left {
-webkit-transform: translate3d(-100%, 0, 0);
transform: translate3d(-100%, 0, 0);
left: 0;
}
.carousel-inner > .item.next.left,
.carousel-inner > .item.prev.right,
.carousel-inner > .item.active {
-webkit-transform: translate3d(0, 0, 0);
transform: translate3d(0, 0, 0);
left: 0;
}
}
.carousel-inner > .active,
.carousel-inner > .next,
.carousel-inner > .prev {
display: block;
}
.carousel-inner > .active {
left: 0;
}
.carousel-inner > .next,
.carousel-inner > .prev {
position: absolute;
top: 0;
width: 100%;
}
.carousel-inner > .next {
left: 100%;
}
.carousel-inner > .prev {
left: -100%;
}
.carousel-inner > .next.left,
.carousel-inner > .prev.right {
left: 0;
}
.carousel-inner > .active.left {
left: -100%;
}
.carousel-inner > .active.right {
left: 100%;
}
.carousel-control {
position: absolute;
top: 0;
left: 0;
bottom: 0;
width: 15%;
opacity: 0.5;
filter: alpha(opacity=50);
font-size: 20px;
color: #fff;
text-align: center;
text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6);
background-color: rgba(0, 0, 0, 0);
}
.carousel-control.left {
background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);
background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);
background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);
background-repeat: repeat-x;
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);
}
.carousel-control.right {
left: auto;
right: 0;
background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);
background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);
background-image: linear-gradient(to right, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);
background-repeat: repeat-x;
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);
}
.carousel-control:hover,
.carousel-control:focus {
outline: 0;
color: #fff;
text-decoration: none;
opacity: 0.9;
filter: alpha(opacity=90);
}
.carousel-control .icon-prev,
.carousel-control .icon-next,
.carousel-control .glyphicon-chevron-left,
.carousel-control .glyphicon-chevron-right {
position: absolute;
top: 50%;
margin-top: -10px;
z-index: 5;
display: inline-block;
}
.carousel-control .icon-prev,
.carousel-control .glyphicon-chevron-left {
left: 50%;
margin-left: -10px;
}
.carousel-control .icon-next,
.carousel-control .glyphicon-chevron-right {
right: 50%;
margin-right: -10px;
}
.carousel-control .icon-prev,
.carousel-control .icon-next {
width: 20px;
height: 20px;
line-height: 1;
font-family: serif;
}
.carousel-control .icon-prev:before {
content: '\2039';
}
.carousel-control .icon-next:before {
content: '\203a';
}
.carousel-indicators {
position: absolute;
bottom: 10px;
left: 50%;
z-index: 15;
width: 60%;
margin-left: -30%;
padding-left: 0;
list-style: none;
text-align: center;
}
.carousel-indicators li {
display: inline-block;
width: 10px;
height: 10px;
margin: 1px;
text-indent: -999px;
border: 1px solid #fff;
border-radius: 10px;
cursor: pointer;
background-color: #000 \9;
background-color: rgba(0, 0, 0, 0);
}
.carousel-indicators .active {
margin: 0;
width: 12px;
height: 12px;
background-color: #fff;
}
.carousel-caption {
position: absolute;
left: 15%;
right: 15%;
bottom: 20px;
z-index: 10;
padding-top: 20px;
padding-bottom: 20px;
color: #fff;
text-align: center;
text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6);
}
.carousel-caption .btn {
text-shadow: none;
}
@media screen and (min-width: 768px) {
.carousel-control .glyphicon-chevron-left,
.carousel-control .glyphicon-chevron-right,
.carousel-control .icon-prev,
.carousel-control .icon-next {
width: 30px;
height: 30px;
margin-top: -10px;
font-size: 30px;
}
.carousel-control .glyphicon-chevron-left,
.carousel-control .icon-prev {
margin-left: -10px;
}
.carousel-control .glyphicon-chevron-right,
.carousel-control .icon-next {
margin-right: -10px;
}
.carousel-caption {
left: 20%;
right: 20%;
padding-bottom: 30px;
}
.carousel-indicators {
bottom: 20px;
}
}
.clearfix:before,
.clearfix:after,
.dl-horizontal dd:before,
.dl-horizontal dd:after,
.container:before,
.container:after,
.container-fluid:before,
.container-fluid:after,
.row:before,
.row:after,
.form-horizontal .form-group:before,
.form-horizontal .form-group:after,
.btn-toolbar:before,
.btn-toolbar:after,
.btn-group-vertical > .btn-group:before,
.btn-group-vertical > .btn-group:after,
.nav:before,
.nav:after,
.navbar:before,
.navbar:after,
.navbar-header:before,
.navbar-header:after,
.navbar-collapse:before,
.navbar-collapse:after,
.pager:before,
.pager:after,
.panel-body:before,
.panel-body:after,
.modal-header:before,
.modal-header:after,
.modal-footer:before,
.modal-footer:after,
.item_buttons:before,
.item_buttons:after {
content: " ";
display: table;
}
.clearfix:after,
.dl-horizontal dd:after,
.container:after,
.container-fluid:after,
.row:after,
.form-horizontal .form-group:after,
.btn-toolbar:after,
.btn-group-vertical > .btn-group:after,
.nav:after,
.navbar:after,
.navbar-header:after,
.navbar-collapse:after,
.pager:after,
.panel-body:after,
.modal-header:after,
.modal-footer:after,
.item_buttons:after {
clear: both;
}
.center-block {
display: block;
margin-left: auto;
margin-right: auto;
}
.pull-right {
float: right !important;
}
.pull-left {
float: left !important;
}
.hide {
display: none !important;
}
.show {
display: block !important;
}
.invisible {
visibility: hidden;
}
.text-hide {
font: 0/0 a;
color: transparent;
text-shadow: none;
background-color: transparent;
border: 0;
}
.hidden {
display: none !important;
}
.affix {
position: fixed;
}
@-ms-viewport {
width: device-width;
}
.visible-xs,
.visible-sm,
.visible-md,
.visible-lg {
display: none !important;
}
.visible-xs-block,
.visible-xs-inline,
.visible-xs-inline-block,
.visible-sm-block,
.visible-sm-inline,
.visible-sm-inline-block,
.visible-md-block,
.visible-md-inline,
.visible-md-inline-block,
.visible-lg-block,
.visible-lg-inline,
.visible-lg-inline-block {
display: none !important;
}
@media (max-width: 767px) {
.visible-xs {
display: block !important;
}
table.visible-xs {
display: table !important;
}
tr.visible-xs {
display: table-row !important;
}
th.visible-xs,
td.visible-xs {
display: table-cell !important;
}
}
@media (max-width: 767px) {
.visible-xs-block {
display: block !important;
}
}
@media (max-width: 767px) {
.visible-xs-inline {
display: inline !important;
}
}
@media (max-width: 767px) {
.visible-xs-inline-block {
display: inline-block !important;
}
}
@media () {
.visible-sm {
display: block !important;
}
table.visible-sm {
display: table !important;
}
tr.visible-sm {
display: table-row !important;
}
th.visible-sm,
td.visible-sm {
display: table-cell !important;
}
}
@media () {
.visible-sm-block {
display: block !important;
}
}
@media () {
.visible-sm-inline {
display: inline !important;
}
}
@media () {
.visible-sm-inline-block {
display: inline-block !important;
}
}
@media () {
.visible-md {
display: block !important;
}
table.visible-md {
display: table !important;
}
tr.visible-md {
display: table-row !important;
}
th.visible-md,
td.visible-md {
display: table-cell !important;
}
}
@media () {
.visible-md-block {
display: block !important;
}
}
@media () {
.visible-md-inline {
display: inline !important;
}
}
@media () {
.visible-md-inline-block {
display: inline-block !important;
}
}
@media () {
.visible-lg {
display: block !important;
}
table.visible-lg {
display: table !important;
}
tr.visible-lg {
display: table-row !important;
}
th.visible-lg,
td.visible-lg {
display: table-cell !important;
}
}
@media () {
.visible-lg-block {
display: block !important;
}
}
@media () {
.visible-lg-inline {
display: inline !important;
}
}
@media () {
.visible-lg-inline-block {
display: inline-block !important;
}
}
@media (max-width: 767px) {
.hidden-xs {
display: none !important;
}
}
@media () {
.hidden-sm {
display: none !important;
}
}
@media () {
.hidden-md {
display: none !important;
}
}
@media () {
.hidden-lg {
display: none !important;
}
}
.visible-print {
display: none !important;
}
@media print {
.visible-print {
display: block !important;
}
table.visible-print {
display: table !important;
}
tr.visible-print {
display: table-row !important;
}
th.visible-print,
td.visible-print {
display: table-cell !important;
}
}
.visible-print-block {
display: none !important;
}
@media print {
.visible-print-block {
display: block !important;
}
}
.visible-print-inline {
display: none !important;
}
@media print {
.visible-print-inline {
display: inline !important;
}
}
.visible-print-inline-block {
display: none !important;
}
@media print {
.visible-print-inline-block {
display: inline-block !important;
}
}
@media print {
.hidden-print {
display: none !important;
}
}
/*!
*
* Font Awesome
*
*/
/*!
* Font Awesome 4.2.0 by @davegandy - http://fontawesome.io - @fontawesome
* License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
*/
/* FONT PATH
* -------------------------- */
@font-face {
font-family: 'FontAwesome';
src: url('../components/font-awesome/fonts/fontawesome-webfont.eot?v=4.2.0');
src: url('../components/font-awesome/fonts/fontawesome-webfont.eot?#iefix&v=4.2.0') format('embedded-opentype'), url('../components/font-awesome/fonts/fontawesome-webfont.woff?v=4.2.0') format('woff'), url('../components/font-awesome/fonts/fontawesome-webfont.ttf?v=4.2.0') format('truetype'), url('../components/font-awesome/fonts/fontawesome-webfont.svg?v=4.2.0#fontawesomeregular') format('svg');
font-weight: normal;
font-style: normal;
}
.fa {
display: inline-block;
font: normal normal normal 14px/1 FontAwesome;
font-size: inherit;
text-rendering: auto;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
/* makes the font 33% larger relative to the icon container */
.fa-lg {
font-size: 1.33333333em;
line-height: 0.75em;
vertical-align: -15%;
}
.fa-2x {
font-size: 2em;
}
.fa-3x {
font-size: 3em;
}
.fa-4x {
font-size: 4em;
}
.fa-5x {
font-size: 5em;
}
.fa-fw {
width: 1.28571429em;
text-align: center;
}
.fa-ul {
padding-left: 0;
margin-left: 2.14285714em;
list-style-type: none;
}
.fa-ul > li {
position: relative;
}
.fa-li {
position: absolute;
left: -2.14285714em;
width: 2.14285714em;
top: 0.14285714em;
text-align: center;
}
.fa-li.fa-lg {
left: -1.85714286em;
}
.fa-border {
padding: .2em .25em .15em;
border: solid 0.08em #eee;
border-radius: .1em;
}
.pull-right {
float: right;
}
.pull-left {
float: left;
}
.fa.pull-left {
margin-right: .3em;
}
.fa.pull-right {
margin-left: .3em;
}
.fa-spin {
-webkit-animation: fa-spin 2s infinite linear;
animation: fa-spin 2s infinite linear;
}
@-webkit-keyframes fa-spin {
0% {
-webkit-transform: rotate(0deg);
transform: rotate(0deg);
}
100% {
-webkit-transform: rotate(359deg);
transform: rotate(359deg);
}
}
@keyframes fa-spin {
0% {
-webkit-transform: rotate(0deg);
transform: rotate(0deg);
}
100% {
-webkit-transform: rotate(359deg);
transform: rotate(359deg);
}
}
.fa-rotate-90 {
filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1);
-webkit-transform: rotate(90deg);
-ms-transform: rotate(90deg);
transform: rotate(90deg);
}
.fa-rotate-180 {
filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2);
-webkit-transform: rotate(180deg);
-ms-transform: rotate(180deg);
transform: rotate(180deg);
}
.fa-rotate-270 {
filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3);
-webkit-transform: rotate(270deg);
-ms-transform: rotate(270deg);
transform: rotate(270deg);
}
.fa-flip-horizontal {
filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1);
-webkit-transform: scale(-1, 1);
-ms-transform: scale(-1, 1);
transform: scale(-1, 1);
}
.fa-flip-vertical {
filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1);
-webkit-transform: scale(1, -1);
-ms-transform: scale(1, -1);
transform: scale(1, -1);
}
:root .fa-rotate-90,
:root .fa-rotate-180,
:root .fa-rotate-270,
:root .fa-flip-horizontal,
:root .fa-flip-vertical {
filter: none;
}
.fa-stack {
position: relative;
display: inline-block;
width: 2em;
height: 2em;
line-height: 2em;
vertical-align: middle;
}
.fa-stack-1x,
.fa-stack-2x {
position: absolute;
left: 0;
width: 100%;
text-align: center;
}
.fa-stack-1x {
line-height: inherit;
}
.fa-stack-2x {
font-size: 2em;
}
.fa-inverse {
color: #fff;
}
/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen
readers do not read off random characters that represent icons */
.fa-glass:before {
content: "\f000";
}
.fa-music:before {
content: "\f001";
}
.fa-search:before {
content: "\f002";
}
.fa-envelope-o:before {
content: "\f003";
}
.fa-heart:before {
content: "\f004";
}
.fa-star:before {
content: "\f005";
}
.fa-star-o:before {
content: "\f006";
}
.fa-user:before {
content: "\f007";
}
.fa-film:before {
content: "\f008";
}
.fa-th-large:before {
content: "\f009";
}
.fa-th:before {
content: "\f00a";
}
.fa-th-list:before {
content: "\f00b";
}
.fa-check:before {
content: "\f00c";
}
.fa-remove:before,
.fa-close:before,
.fa-times:before {
content: "\f00d";
}
.fa-search-plus:before {
content: "\f00e";
}
.fa-search-minus:before {
content: "\f010";
}
.fa-power-off:before {
content: "\f011";
}
.fa-signal:before {
content: "\f012";
}
.fa-gear:before,
.fa-cog:before {
content: "\f013";
}
.fa-trash-o:before {
content: "\f014";
}
.fa-home:before {
content: "\f015";
}
.fa-file-o:before {
content: "\f016";
}
.fa-clock-o:before {
content: "\f017";
}
.fa-road:before {
content: "\f018";
}
.fa-download:before {
content: "\f019";
}
.fa-arrow-circle-o-down:before {
content: "\f01a";
}
.fa-arrow-circle-o-up:before {
content: "\f01b";
}
.fa-inbox:before {
content: "\f01c";
}
.fa-play-circle-o:before {
content: "\f01d";
}
.fa-rotate-right:before,
.fa-repeat:before {
content: "\f01e";
}
.fa-refresh:before {
content: "\f021";
}
.fa-list-alt:before {
content: "\f022";
}
.fa-lock:before {
content: "\f023";
}
.fa-flag:before {
content: "\f024";
}
.fa-headphones:before {
content: "\f025";
}
.fa-volume-off:before {
content: "\f026";
}
.fa-volume-down:before {
content: "\f027";
}
.fa-volume-up:before {
content: "\f028";
}
.fa-qrcode:before {
content: "\f029";
}
.fa-barcode:before {
content: "\f02a";
}
.fa-tag:before {
content: "\f02b";
}
.fa-tags:before {
content: "\f02c";
}
.fa-book:before {
content: "\f02d";
}
.fa-bookmark:before {
content: "\f02e";
}
.fa-print:before {
content: "\f02f";
}
.fa-camera:before {
content: "\f030";
}
.fa-font:before {
content: "\f031";
}
.fa-bold:before {
content: "\f032";
}
.fa-italic:before {
content: "\f033";
}
.fa-text-height:before {
content: "\f034";
}
.fa-text-width:before {
content: "\f035";
}
.fa-align-left:before {
content: "\f036";
}
.fa-align-center:before {
content: "\f037";
}
.fa-align-right:before {
content: "\f038";
}
.fa-align-justify:before {
content: "\f039";
}
.fa-list:before {
content: "\f03a";
}
.fa-dedent:before,
.fa-outdent:before {
content: "\f03b";
}
.fa-indent:before {
content: "\f03c";
}
.fa-video-camera:before {
content: "\f03d";
}
.fa-photo:before,
.fa-image:before,
.fa-picture-o:before {
content: "\f03e";
}
.fa-pencil:before {
content: "\f040";
}
.fa-map-marker:before {
content: "\f041";
}
.fa-adjust:before {
content: "\f042";
}
.fa-tint:before {
content: "\f043";
}
.fa-edit:before,
.fa-pencil-square-o:before {
content: "\f044";
}
.fa-share-square-o:before {
content: "\f045";
}
.fa-check-square-o:before {
content: "\f046";
}
.fa-arrows:before {
content: "\f047";
}
.fa-step-backward:before {
content: "\f048";
}
.fa-fast-backward:before {
content: "\f049";
}
.fa-backward:before {
content: "\f04a";
}
.fa-play:before {
content: "\f04b";
}
.fa-pause:before {
content: "\f04c";
}
.fa-stop:before {
content: "\f04d";
}
.fa-forward:before {
content: "\f04e";
}
.fa-fast-forward:before {
content: "\f050";
}
.fa-step-forward:before {
content: "\f051";
}
.fa-eject:before {
content: "\f052";
}
.fa-chevron-left:before {
content: "\f053";
}
.fa-chevron-right:before {
content: "\f054";
}
.fa-plus-circle:before {
content: "\f055";
}
.fa-minus-circle:before {
content: "\f056";
}
.fa-times-circle:before {
content: "\f057";
}
.fa-check-circle:before {
content: "\f058";
}
.fa-question-circle:before {
content: "\f059";
}
.fa-info-circle:before {
content: "\f05a";
}
.fa-crosshairs:before {
content: "\f05b";
}
.fa-times-circle-o:before {
content: "\f05c";
}
.fa-check-circle-o:before {
content: "\f05d";
}
.fa-ban:before {
content: "\f05e";
}
.fa-arrow-left:before {
content: "\f060";
}
.fa-arrow-right:before {
content: "\f061";
}
.fa-arrow-up:before {
content: "\f062";
}
.fa-arrow-down:before {
content: "\f063";
}
.fa-mail-forward:before,
.fa-share:before {
content: "\f064";
}
.fa-expand:before {
content: "\f065";
}
.fa-compress:before {
content: "\f066";
}
.fa-plus:before {
content: "\f067";
}
.fa-minus:before {
content: "\f068";
}
.fa-asterisk:before {
content: "\f069";
}
.fa-exclamation-circle:before {
content: "\f06a";
}
.fa-gift:before {
content: "\f06b";
}
.fa-leaf:before {
content: "\f06c";
}
.fa-fire:before {
content: "\f06d";
}
.fa-eye:before {
content: "\f06e";
}
.fa-eye-slash:before {
content: "\f070";
}
.fa-warning:before,
.fa-exclamation-triangle:before {
content: "\f071";
}
.fa-plane:before {
content: "\f072";
}
.fa-calendar:before {
content: "\f073";
}
.fa-random:before {
content: "\f074";
}
.fa-comment:before {
content: "\f075";
}
.fa-magnet:before {
content: "\f076";
}
.fa-chevron-up:before {
content: "\f077";
}
.fa-chevron-down:before {
content: "\f078";
}
.fa-retweet:before {
content: "\f079";
}
.fa-shopping-cart:before {
content: "\f07a";
}
.fa-folder:before {
content: "\f07b";
}
.fa-folder-open:before {
content: "\f07c";
}
.fa-arrows-v:before {
content: "\f07d";
}
.fa-arrows-h:before {
content: "\f07e";
}
.fa-bar-chart-o:before,
.fa-bar-chart:before {
content: "\f080";
}
.fa-twitter-square:before {
content: "\f081";
}
.fa-facebook-square:before {
content: "\f082";
}
.fa-camera-retro:before {
content: "\f083";
}
.fa-key:before {
content: "\f084";
}
.fa-gears:before,
.fa-cogs:before {
content: "\f085";
}
.fa-comments:before {
content: "\f086";
}
.fa-thumbs-o-up:before {
content: "\f087";
}
.fa-thumbs-o-down:before {
content: "\f088";
}
.fa-star-half:before {
content: "\f089";
}
.fa-heart-o:before {
content: "\f08a";
}
.fa-sign-out:before {
content: "\f08b";
}
.fa-linkedin-square:before {
content: "\f08c";
}
.fa-thumb-tack:before {
content: "\f08d";
}
.fa-external-link:before {
content: "\f08e";
}
.fa-sign-in:before {
content: "\f090";
}
.fa-trophy:before {
content: "\f091";
}
.fa-github-square:before {
content: "\f092";
}
.fa-upload:before {
content: "\f093";
}
.fa-lemon-o:before {
content: "\f094";
}
.fa-phone:before {
content: "\f095";
}
.fa-square-o:before {
content: "\f096";
}
.fa-bookmark-o:before {
content: "\f097";
}
.fa-phone-square:before {
content: "\f098";
}
.fa-twitter:before {
content: "\f099";
}
.fa-facebook:before {
content: "\f09a";
}
.fa-github:before {
content: "\f09b";
}
.fa-unlock:before {
content: "\f09c";
}
.fa-credit-card:before {
content: "\f09d";
}
.fa-rss:before {
content: "\f09e";
}
.fa-hdd-o:before {
content: "\f0a0";
}
.fa-bullhorn:before {
content: "\f0a1";
}
.fa-bell:before {
content: "\f0f3";
}
.fa-certificate:before {
content: "\f0a3";
}
.fa-hand-o-right:before {
content: "\f0a4";
}
.fa-hand-o-left:before {
content: "\f0a5";
}
.fa-hand-o-up:before {
content: "\f0a6";
}
.fa-hand-o-down:before {
content: "\f0a7";
}
.fa-arrow-circle-left:before {
content: "\f0a8";
}
.fa-arrow-circle-right:before {
content: "\f0a9";
}
.fa-arrow-circle-up:before {
content: "\f0aa";
}
.fa-arrow-circle-down:before {
content: "\f0ab";
}
.fa-globe:before {
content: "\f0ac";
}
.fa-wrench:before {
content: "\f0ad";
}
.fa-tasks:before {
content: "\f0ae";
}
.fa-filter:before {
content: "\f0b0";
}
.fa-briefcase:before {
content: "\f0b1";
}
.fa-arrows-alt:before {
content: "\f0b2";
}
.fa-group:before,
.fa-users:before {
content: "\f0c0";
}
.fa-chain:before,
.fa-link:before {
content: "\f0c1";
}
.fa-cloud:before {
content: "\f0c2";
}
.fa-flask:before {
content: "\f0c3";
}
.fa-cut:before,
.fa-scissors:before {
content: "\f0c4";
}
.fa-copy:before,
.fa-files-o:before {
content: "\f0c5";
}
.fa-paperclip:before {
content: "\f0c6";
}
.fa-save:before,
.fa-floppy-o:before {
content: "\f0c7";
}
.fa-square:before {
content: "\f0c8";
}
.fa-navicon:before,
.fa-reorder:before,
.fa-bars:before {
content: "\f0c9";
}
.fa-list-ul:before {
content: "\f0ca";
}
.fa-list-ol:before {
content: "\f0cb";
}
.fa-strikethrough:before {
content: "\f0cc";
}
.fa-underline:before {
content: "\f0cd";
}
.fa-table:before {
content: "\f0ce";
}
.fa-magic:before {
content: "\f0d0";
}
.fa-truck:before {
content: "\f0d1";
}
.fa-pinterest:before {
content: "\f0d2";
}
.fa-pinterest-square:before {
content: "\f0d3";
}
.fa-google-plus-square:before {
content: "\f0d4";
}
.fa-google-plus:before {
content: "\f0d5";
}
.fa-money:before {
content: "\f0d6";
}
.fa-caret-down:before {
content: "\f0d7";
}
.fa-caret-up:before {
content: "\f0d8";
}
.fa-caret-left:before {
content: "\f0d9";
}
.fa-caret-right:before {
content: "\f0da";
}
.fa-columns:before {
content: "\f0db";
}
.fa-unsorted:before,
.fa-sort:before {
content: "\f0dc";
}
.fa-sort-down:before,
.fa-sort-desc:before {
content: "\f0dd";
}
.fa-sort-up:before,
.fa-sort-asc:before {
content: "\f0de";
}
.fa-envelope:before {
content: "\f0e0";
}
.fa-linkedin:before {
content: "\f0e1";
}
.fa-rotate-left:before,
.fa-undo:before {
content: "\f0e2";
}
.fa-legal:before,
.fa-gavel:before {
content: "\f0e3";
}
.fa-dashboard:before,
.fa-tachometer:before {
content: "\f0e4";
}
.fa-comment-o:before {
content: "\f0e5";
}
.fa-comments-o:before {
content: "\f0e6";
}
.fa-flash:before,
.fa-bolt:before {
content: "\f0e7";
}
.fa-sitemap:before {
content: "\f0e8";
}
.fa-umbrella:before {
content: "\f0e9";
}
.fa-paste:before,
.fa-clipboard:before {
content: "\f0ea";
}
.fa-lightbulb-o:before {
content: "\f0eb";
}
.fa-exchange:before {
content: "\f0ec";
}
.fa-cloud-download:before {
content: "\f0ed";
}
.fa-cloud-upload:before {
content: "\f0ee";
}
.fa-user-md:before {
content: "\f0f0";
}
.fa-stethoscope:before {
content: "\f0f1";
}
.fa-suitcase:before {
content: "\f0f2";
}
.fa-bell-o:before {
content: "\f0a2";
}
.fa-coffee:before {
content: "\f0f4";
}
.fa-cutlery:before {
content: "\f0f5";
}
.fa-file-text-o:before {
content: "\f0f6";
}
.fa-building-o:before {
content: "\f0f7";
}
.fa-hospital-o:before {
content: "\f0f8";
}
.fa-ambulance:before {
content: "\f0f9";
}
.fa-medkit:before {
content: "\f0fa";
}
.fa-fighter-jet:before {
content: "\f0fb";
}
.fa-beer:before {
content: "\f0fc";
}
.fa-h-square:before {
content: "\f0fd";
}
.fa-plus-square:before {
content: "\f0fe";
}
.fa-angle-double-left:before {
content: "\f100";
}
.fa-angle-double-right:before {
content: "\f101";
}
.fa-angle-double-up:before {
content: "\f102";
}
.fa-angle-double-down:before {
content: "\f103";
}
.fa-angle-left:before {
content: "\f104";
}
.fa-angle-right:before {
content: "\f105";
}
.fa-angle-up:before {
content: "\f106";
}
.fa-angle-down:before {
content: "\f107";
}
.fa-desktop:before {
content: "\f108";
}
.fa-laptop:before {
content: "\f109";
}
.fa-tablet:before {
content: "\f10a";
}
.fa-mobile-phone:before,
.fa-mobile:before {
content: "\f10b";
}
.fa-circle-o:before {
content: "\f10c";
}
.fa-quote-left:before {
content: "\f10d";
}
.fa-quote-right:before {
content: "\f10e";
}
.fa-spinner:before {
content: "\f110";
}
.fa-circle:before {
content: "\f111";
}
.fa-mail-reply:before,
.fa-reply:before {
content: "\f112";
}
.fa-github-alt:before {
content: "\f113";
}
.fa-folder-o:before {
content: "\f114";
}
.fa-folder-open-o:before {
content: "\f115";
}
.fa-smile-o:before {
content: "\f118";
}
.fa-frown-o:before {
content: "\f119";
}
.fa-meh-o:before {
content: "\f11a";
}
.fa-gamepad:before {
content: "\f11b";
}
.fa-keyboard-o:before {
content: "\f11c";
}
.fa-flag-o:before {
content: "\f11d";
}
.fa-flag-checkered:before {
content: "\f11e";
}
.fa-terminal:before {
content: "\f120";
}
.fa-code:before {
content: "\f121";
}
.fa-mail-reply-all:before,
.fa-reply-all:before {
content: "\f122";
}
.fa-star-half-empty:before,
.fa-star-half-full:before,
.fa-star-half-o:before {
content: "\f123";
}
.fa-location-arrow:before {
content: "\f124";
}
.fa-crop:before {
content: "\f125";
}
.fa-code-fork:before {
content: "\f126";
}
.fa-unlink:before,
.fa-chain-broken:before {
content: "\f127";
}
.fa-question:before {
content: "\f128";
}
.fa-info:before {
content: "\f129";
}
.fa-exclamation:before {
content: "\f12a";
}
.fa-superscript:before {
content: "\f12b";
}
.fa-subscript:before {
content: "\f12c";
}
.fa-eraser:before {
content: "\f12d";
}
.fa-puzzle-piece:before {
content: "\f12e";
}
.fa-microphone:before {
content: "\f130";
}
.fa-microphone-slash:before {
content: "\f131";
}
.fa-shield:before {
content: "\f132";
}
.fa-calendar-o:before {
content: "\f133";
}
.fa-fire-extinguisher:before {
content: "\f134";
}
.fa-rocket:before {
content: "\f135";
}
.fa-maxcdn:before {
content: "\f136";
}
.fa-chevron-circle-left:before {
content: "\f137";
}
.fa-chevron-circle-right:before {
content: "\f138";
}
.fa-chevron-circle-up:before {
content: "\f139";
}
.fa-chevron-circle-down:before {
content: "\f13a";
}
.fa-html5:before {
content: "\f13b";
}
.fa-css3:before {
content: "\f13c";
}
.fa-anchor:before {
content: "\f13d";
}
.fa-unlock-alt:before {
content: "\f13e";
}
.fa-bullseye:before {
content: "\f140";
}
.fa-ellipsis-h:before {
content: "\f141";
}
.fa-ellipsis-v:before {
content: "\f142";
}
.fa-rss-square:before {
content: "\f143";
}
.fa-play-circle:before {
content: "\f144";
}
.fa-ticket:before {
content: "\f145";
}
.fa-minus-square:before {
content: "\f146";
}
.fa-minus-square-o:before {
content: "\f147";
}
.fa-level-up:before {
content: "\f148";
}
.fa-level-down:before {
content: "\f149";
}
.fa-check-square:before {
content: "\f14a";
}
.fa-pencil-square:before {
content: "\f14b";
}
.fa-external-link-square:before {
content: "\f14c";
}
.fa-share-square:before {
content: "\f14d";
}
.fa-compass:before {
content: "\f14e";
}
.fa-toggle-down:before,
.fa-caret-square-o-down:before {
content: "\f150";
}
.fa-toggle-up:before,
.fa-caret-square-o-up:before {
content: "\f151";
}
.fa-toggle-right:before,
.fa-caret-square-o-right:before {
content: "\f152";
}
.fa-euro:before,
.fa-eur:before {
content: "\f153";
}
.fa-gbp:before {
content: "\f154";
}
.fa-dollar:before,
.fa-usd:before {
content: "\f155";
}
.fa-rupee:before,
.fa-inr:before {
content: "\f156";
}
.fa-cny:before,
.fa-rmb:before,
.fa-yen:before,
.fa-jpy:before {
content: "\f157";
}
.fa-ruble:before,
.fa-rouble:before,
.fa-rub:before {
content: "\f158";
}
.fa-won:before,
.fa-krw:before {
content: "\f159";
}
.fa-bitcoin:before,
.fa-btc:before {
content: "\f15a";
}
.fa-file:before {
content: "\f15b";
}
.fa-file-text:before {
content: "\f15c";
}
.fa-sort-alpha-asc:before {
content: "\f15d";
}
.fa-sort-alpha-desc:before {
content: "\f15e";
}
.fa-sort-amount-asc:before {
content: "\f160";
}
.fa-sort-amount-desc:before {
content: "\f161";
}
.fa-sort-numeric-asc:before {
content: "\f162";
}
.fa-sort-numeric-desc:before {
content: "\f163";
}
.fa-thumbs-up:before {
content: "\f164";
}
.fa-thumbs-down:before {
content: "\f165";
}
.fa-youtube-square:before {
content: "\f166";
}
.fa-youtube:before {
content: "\f167";
}
.fa-xing:before {
content: "\f168";
}
.fa-xing-square:before {
content: "\f169";
}
.fa-youtube-play:before {
content: "\f16a";
}
.fa-dropbox:before {
content: "\f16b";
}
.fa-stack-overflow:before {
content: "\f16c";
}
.fa-instagram:before {
content: "\f16d";
}
.fa-flickr:before {
content: "\f16e";
}
.fa-adn:before {
content: "\f170";
}
.fa-bitbucket:before {
content: "\f171";
}
.fa-bitbucket-square:before {
content: "\f172";
}
.fa-tumblr:before {
content: "\f173";
}
.fa-tumblr-square:before {
content: "\f174";
}
.fa-long-arrow-down:before {
content: "\f175";
}
.fa-long-arrow-up:before {
content: "\f176";
}
.fa-long-arrow-left:before {
content: "\f177";
}
.fa-long-arrow-right:before {
content: "\f178";
}
.fa-apple:before {
content: "\f179";
}
.fa-windows:before {
content: "\f17a";
}
.fa-android:before {
content: "\f17b";
}
.fa-linux:before {
content: "\f17c";
}
.fa-dribbble:before {
content: "\f17d";
}
.fa-skype:before {
content: "\f17e";
}
.fa-foursquare:before {
content: "\f180";
}
.fa-trello:before {
content: "\f181";
}
.fa-female:before {
content: "\f182";
}
.fa-male:before {
content: "\f183";
}
.fa-gittip:before {
content: "\f184";
}
.fa-sun-o:before {
content: "\f185";
}
.fa-moon-o:before {
content: "\f186";
}
.fa-archive:before {
content: "\f187";
}
.fa-bug:before {
content: "\f188";
}
.fa-vk:before {
content: "\f189";
}
.fa-weibo:before {
content: "\f18a";
}
.fa-renren:before {
content: "\f18b";
}
.fa-pagelines:before {
content: "\f18c";
}
.fa-stack-exchange:before {
content: "\f18d";
}
.fa-arrow-circle-o-right:before {
content: "\f18e";
}
.fa-arrow-circle-o-left:before {
content: "\f190";
}
.fa-toggle-left:before,
.fa-caret-square-o-left:before {
content: "\f191";
}
.fa-dot-circle-o:before {
content: "\f192";
}
.fa-wheelchair:before {
content: "\f193";
}
.fa-vimeo-square:before {
content: "\f194";
}
.fa-turkish-lira:before,
.fa-try:before {
content: "\f195";
}
.fa-plus-square-o:before {
content: "\f196";
}
.fa-space-shuttle:before {
content: "\f197";
}
.fa-slack:before {
content: "\f198";
}
.fa-envelope-square:before {
content: "\f199";
}
.fa-wordpress:before {
content: "\f19a";
}
.fa-openid:before {
content: "\f19b";
}
.fa-institution:before,
.fa-bank:before,
.fa-university:before {
content: "\f19c";
}
.fa-mortar-board:before,
.fa-graduation-cap:before {
content: "\f19d";
}
.fa-yahoo:before {
content: "\f19e";
}
.fa-google:before {
content: "\f1a0";
}
.fa-reddit:before {
content: "\f1a1";
}
.fa-reddit-square:before {
content: "\f1a2";
}
.fa-stumbleupon-circle:before {
content: "\f1a3";
}
.fa-stumbleupon:before {
content: "\f1a4";
}
.fa-delicious:before {
content: "\f1a5";
}
.fa-digg:before {
content: "\f1a6";
}
.fa-pied-piper:before {
content: "\f1a7";
}
.fa-pied-piper-alt:before {
content: "\f1a8";
}
.fa-drupal:before {
content: "\f1a9";
}
.fa-joomla:before {
content: "\f1aa";
}
.fa-language:before {
content: "\f1ab";
}
.fa-fax:before {
content: "\f1ac";
}
.fa-building:before {
content: "\f1ad";
}
.fa-child:before {
content: "\f1ae";
}
.fa-paw:before {
content: "\f1b0";
}
.fa-spoon:before {
content: "\f1b1";
}
.fa-cube:before {
content: "\f1b2";
}
.fa-cubes:before {
content: "\f1b3";
}
.fa-behance:before {
content: "\f1b4";
}
.fa-behance-square:before {
content: "\f1b5";
}
.fa-steam:before {
content: "\f1b6";
}
.fa-steam-square:before {
content: "\f1b7";
}
.fa-recycle:before {
content: "\f1b8";
}
.fa-automobile:before,
.fa-car:before {
content: "\f1b9";
}
.fa-cab:before,
.fa-taxi:before {
content: "\f1ba";
}
.fa-tree:before {
content: "\f1bb";
}
.fa-spotify:before {
content: "\f1bc";
}
.fa-deviantart:before {
content: "\f1bd";
}
.fa-soundcloud:before {
content: "\f1be";
}
.fa-database:before {
content: "\f1c0";
}
.fa-file-pdf-o:before {
content: "\f1c1";
}
.fa-file-word-o:before {
content: "\f1c2";
}
.fa-file-excel-o:before {
content: "\f1c3";
}
.fa-file-powerpoint-o:before {
content: "\f1c4";
}
.fa-file-photo-o:before,
.fa-file-picture-o:before,
.fa-file-image-o:before {
content: "\f1c5";
}
.fa-file-zip-o:before,
.fa-file-archive-o:before {
content: "\f1c6";
}
.fa-file-sound-o:before,
.fa-file-audio-o:before {
content: "\f1c7";
}
.fa-file-movie-o:before,
.fa-file-video-o:before {
content: "\f1c8";
}
.fa-file-code-o:before {
content: "\f1c9";
}
.fa-vine:before {
content: "\f1ca";
}
.fa-codepen:before {
content: "\f1cb";
}
.fa-jsfiddle:before {
content: "\f1cc";
}
.fa-life-bouy:before,
.fa-life-buoy:before,
.fa-life-saver:before,
.fa-support:before,
.fa-life-ring:before {
content: "\f1cd";
}
.fa-circle-o-notch:before {
content: "\f1ce";
}
.fa-ra:before,
.fa-rebel:before {
content: "\f1d0";
}
.fa-ge:before,
.fa-empire:before {
content: "\f1d1";
}
.fa-git-square:before {
content: "\f1d2";
}
.fa-git:before {
content: "\f1d3";
}
.fa-hacker-news:before {
content: "\f1d4";
}
.fa-tencent-weibo:before {
content: "\f1d5";
}
.fa-qq:before {
content: "\f1d6";
}
.fa-wechat:before,
.fa-weixin:before {
content: "\f1d7";
}
.fa-send:before,
.fa-paper-plane:before {
content: "\f1d8";
}
.fa-send-o:before,
.fa-paper-plane-o:before {
content: "\f1d9";
}
.fa-history:before {
content: "\f1da";
}
.fa-circle-thin:before {
content: "\f1db";
}
.fa-header:before {
content: "\f1dc";
}
.fa-paragraph:before {
content: "\f1dd";
}
.fa-sliders:before {
content: "\f1de";
}
.fa-share-alt:before {
content: "\f1e0";
}
.fa-share-alt-square:before {
content: "\f1e1";
}
.fa-bomb:before {
content: "\f1e2";
}
.fa-soccer-ball-o:before,
.fa-futbol-o:before {
content: "\f1e3";
}
.fa-tty:before {
content: "\f1e4";
}
.fa-binoculars:before {
content: "\f1e5";
}
.fa-plug:before {
content: "\f1e6";
}
.fa-slideshare:before {
content: "\f1e7";
}
.fa-twitch:before {
content: "\f1e8";
}
.fa-yelp:before {
content: "\f1e9";
}
.fa-newspaper-o:before {
content: "\f1ea";
}
.fa-wifi:before {
content: "\f1eb";
}
.fa-calculator:before {
content: "\f1ec";
}
.fa-paypal:before {
content: "\f1ed";
}
.fa-google-wallet:before {
content: "\f1ee";
}
.fa-cc-visa:before {
content: "\f1f0";
}
.fa-cc-mastercard:before {
content: "\f1f1";
}
.fa-cc-discover:before {
content: "\f1f2";
}
.fa-cc-amex:before {
content: "\f1f3";
}
.fa-cc-paypal:before {
content: "\f1f4";
}
.fa-cc-stripe:before {
content: "\f1f5";
}
.fa-bell-slash:before {
content: "\f1f6";
}
.fa-bell-slash-o:before {
content: "\f1f7";
}
.fa-trash:before {
content: "\f1f8";
}
.fa-copyright:before {
content: "\f1f9";
}
.fa-at:before {
content: "\f1fa";
}
.fa-eyedropper:before {
content: "\f1fb";
}
.fa-paint-brush:before {
content: "\f1fc";
}
.fa-birthday-cake:before {
content: "\f1fd";
}
.fa-area-chart:before {
content: "\f1fe";
}
.fa-pie-chart:before {
content: "\f200";
}
.fa-line-chart:before {
content: "\f201";
}
.fa-lastfm:before {
content: "\f202";
}
.fa-lastfm-square:before {
content: "\f203";
}
.fa-toggle-off:before {
content: "\f204";
}
.fa-toggle-on:before {
content: "\f205";
}
.fa-bicycle:before {
content: "\f206";
}
.fa-bus:before {
content: "\f207";
}
.fa-ioxhost:before {
content: "\f208";
}
.fa-angellist:before {
content: "\f209";
}
.fa-cc:before {
content: "\f20a";
}
.fa-shekel:before,
.fa-sheqel:before,
.fa-ils:before {
content: "\f20b";
}
.fa-meanpath:before {
content: "\f20c";
}
/*!
*
* IPython base
*
*/
.modal.fade .modal-dialog {
-webkit-transform: translate(0, 0);
-ms-transform: translate(0, 0);
-o-transform: translate(0, 0);
transform: translate(0, 0);
}
code {
color: #000;
}
pre {
font-size: inherit;
line-height: inherit;
}
label {
font-weight: normal;
}
/* Make the page background atleast 100% the height of the view port */
/* Make the page itself atleast 70% the height of the view port */
.border-box-sizing {
box-sizing: border-box;
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
}
.corner-all {
border-radius: 2px;
}
.no-padding {
padding: 0px;
}
/* Flexible box model classes */
/* Taken from Alex Russell http://infrequently.org/2009/08/css-3-progress/ */
/* This file is a compatability layer. It allows the usage of flexible box
model layouts accross multiple browsers, including older browsers. The newest,
universal implementation of the flexible box model is used when available (see
`Modern browsers` comments below). Browsers that are known to implement this
new spec completely include:
Firefox 28.0+
Chrome 29.0+
Internet Explorer 11+
Opera 17.0+
Browsers not listed, including Safari, are supported via the styling under the
`Old browsers` comments below.
*/
.hbox {
/* Old browsers */
display: -webkit-box;
-webkit-box-orient: horizontal;
-webkit-box-align: stretch;
display: -moz-box;
-moz-box-orient: horizontal;
-moz-box-align: stretch;
display: box;
box-orient: horizontal;
box-align: stretch;
/* Modern browsers */
display: flex;
flex-direction: row;
align-items: stretch;
}
.hbox > * {
/* Old browsers */
-webkit-box-flex: 0;
-moz-box-flex: 0;
box-flex: 0;
/* Modern browsers */
flex: none;
}
.vbox {
/* Old browsers */
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-box-align: stretch;
display: -moz-box;
-moz-box-orient: vertical;
-moz-box-align: stretch;
display: box;
box-orient: vertical;
box-align: stretch;
/* Modern browsers */
display: flex;
flex-direction: column;
align-items: stretch;
}
.vbox > * {
/* Old browsers */
-webkit-box-flex: 0;
-moz-box-flex: 0;
box-flex: 0;
/* Modern browsers */
flex: none;
}
.hbox.reverse,
.vbox.reverse,
.reverse {
/* Old browsers */
-webkit-box-direction: reverse;
-moz-box-direction: reverse;
box-direction: reverse;
/* Modern browsers */
flex-direction: row-reverse;
}
.hbox.box-flex0,
.vbox.box-flex0,
.box-flex0 {
/* Old browsers */
-webkit-box-flex: 0;
-moz-box-flex: 0;
box-flex: 0;
/* Modern browsers */
flex: none;
width: auto;
}
.hbox.box-flex1,
.vbox.box-flex1,
.box-flex1 {
/* Old browsers */
-webkit-box-flex: 1;
-moz-box-flex: 1;
box-flex: 1;
/* Modern browsers */
flex: 1;
}
.hbox.box-flex,
.vbox.box-flex,
.box-flex {
/* Old browsers */
/* Old browsers */
-webkit-box-flex: 1;
-moz-box-flex: 1;
box-flex: 1;
/* Modern browsers */
flex: 1;
}
.hbox.box-flex2,
.vbox.box-flex2,
.box-flex2 {
/* Old browsers */
-webkit-box-flex: 2;
-moz-box-flex: 2;
box-flex: 2;
/* Modern browsers */
flex: 2;
}
.box-group1 {
/* Deprecated */
-webkit-box-flex-group: 1;
-moz-box-flex-group: 1;
box-flex-group: 1;
}
.box-group2 {
/* Deprecated */
-webkit-box-flex-group: 2;
-moz-box-flex-group: 2;
box-flex-group: 2;
}
.hbox.start,
.vbox.start,
.start {
/* Old browsers */
-webkit-box-pack: start;
-moz-box-pack: start;
box-pack: start;
/* Modern browsers */
justify-content: flex-start;
}
.hbox.end,
.vbox.end,
.end {
/* Old browsers */
-webkit-box-pack: end;
-moz-box-pack: end;
box-pack: end;
/* Modern browsers */
justify-content: flex-end;
}
.hbox.center,
.vbox.center,
.center {
/* Old browsers */
-webkit-box-pack: center;
-moz-box-pack: center;
box-pack: center;
/* Modern browsers */
justify-content: center;
}
.hbox.baseline,
.vbox.baseline,
.baseline {
/* Old browsers */
-webkit-box-pack: baseline;
-moz-box-pack: baseline;
box-pack: baseline;
/* Modern browsers */
justify-content: baseline;
}
.hbox.stretch,
.vbox.stretch,
.stretch {
/* Old browsers */
-webkit-box-pack: stretch;
-moz-box-pack: stretch;
box-pack: stretch;
/* Modern browsers */
justify-content: stretch;
}
.hbox.align-start,
.vbox.align-start,
.align-start {
/* Old browsers */
-webkit-box-align: start;
-moz-box-align: start;
box-align: start;
/* Modern browsers */
align-items: flex-start;
}
.hbox.align-end,
.vbox.align-end,
.align-end {
/* Old browsers */
-webkit-box-align: end;
-moz-box-align: end;
box-align: end;
/* Modern browsers */
align-items: flex-end;
}
.hbox.align-center,
.vbox.align-center,
.align-center {
/* Old browsers */
-webkit-box-align: center;
-moz-box-align: center;
box-align: center;
/* Modern browsers */
align-items: center;
}
.hbox.align-baseline,
.vbox.align-baseline,
.align-baseline {
/* Old browsers */
-webkit-box-align: baseline;
-moz-box-align: baseline;
box-align: baseline;
/* Modern browsers */
align-items: baseline;
}
.hbox.align-stretch,
.vbox.align-stretch,
.align-stretch {
/* Old browsers */
-webkit-box-align: stretch;
-moz-box-align: stretch;
box-align: stretch;
/* Modern browsers */
align-items: stretch;
}
div.error {
margin: 2em;
text-align: center;
}
div.error > h1 {
font-size: 500%;
line-height: normal;
}
div.error > p {
font-size: 200%;
line-height: normal;
}
div.traceback-wrapper {
text-align: left;
max-width: 800px;
margin: auto;
}
/**
* Primary styles
*
* Author: Jupyter Development Team
*/
body {
background-color: #fff;
/* This makes sure that the body covers the entire window and needs to
be in a different element than the display: box in wrapper below */
position: absolute;
left: 0px;
right: 0px;
top: 0px;
bottom: 0px;
overflow: visible;
}
body > #header {
/* Initially hidden to prevent FLOUC */
display: none;
background-color: #fff;
/* Display over codemirror */
position: relative;
z-index: 100;
}
body > #header #header-container {
padding-bottom: 5px;
padding-top: 5px;
box-sizing: border-box;
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
}
body > #header .header-bar {
width: 100%;
height: 1px;
background: #e7e7e7;
margin-bottom: -1px;
}
@media print {
body > #header {
display: none !important;
}
}
#header-spacer {
width: 100%;
visibility: hidden;
}
@media print {
#header-spacer {
display: none;
}
}
#ipython_notebook {
padding-left: 0px;
padding-top: 1px;
padding-bottom: 1px;
}
@media (max-width: 991px) {
#ipython_notebook {
margin-left: 10px;
}
}
[dir="rtl"] #ipython_notebook {
float: right !important;
}
#noscript {
width: auto;
padding-top: 16px;
padding-bottom: 16px;
text-align: center;
font-size: 22px;
color: red;
font-weight: bold;
}
#ipython_notebook img {
height: 28px;
}
#site {
width: 100%;
display: none;
box-sizing: border-box;
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
overflow: auto;
}
@media print {
#site {
height: auto !important;
}
}
/* Smaller buttons */
.ui-button .ui-button-text {
padding: 0.2em 0.8em;
font-size: 77%;
}
input.ui-button {
padding: 0.3em 0.9em;
}
span#login_widget {
float: right;
}
span#login_widget > .button,
#logout {
color: #333;
background-color: #fff;
border-color: #ccc;
}
span#login_widget > .button:focus,
#logout:focus,
span#login_widget > .button.focus,
#logout.focus {
color: #333;
background-color: #e6e6e6;
border-color: #8c8c8c;
}
span#login_widget > .button:hover,
#logout:hover {
color: #333;
background-color: #e6e6e6;
border-color: #adadad;
}
span#login_widget > .button:active,
#logout:active,
span#login_widget > .button.active,
#logout.active,
.open > .dropdown-togglespan#login_widget > .button,
.open > .dropdown-toggle#logout {
color: #333;
background-color: #e6e6e6;
border-color: #adadad;
}
span#login_widget > .button:active:hover,
#logout:active:hover,
span#login_widget > .button.active:hover,
#logout.active:hover,
.open > .dropdown-togglespan#login_widget > .button:hover,
.open > .dropdown-toggle#logout:hover,
span#login_widget > .button:active:focus,
#logout:active:focus,
span#login_widget > .button.active:focus,
#logout.active:focus,
.open > .dropdown-togglespan#login_widget > .button:focus,
.open > .dropdown-toggle#logout:focus,
span#login_widget > .button:active.focus,
#logout:active.focus,
span#login_widget > .button.active.focus,
#logout.active.focus,
.open > .dropdown-togglespan#login_widget > .button.focus,
.open > .dropdown-toggle#logout.focus {
color: #333;
background-color: #d4d4d4;
border-color: #8c8c8c;
}
span#login_widget > .button:active,
#logout:active,
span#login_widget > .button.active,
#logout.active,
.open > .dropdown-togglespan#login_widget > .button,
.open > .dropdown-toggle#logout {
background-image: none;
}
span#login_widget > .button.disabled:hover,
#logout.disabled:hover,
span#login_widget > .button[disabled]:hover,
#logout[disabled]:hover,
fieldset[disabled] span#login_widget > .button:hover,
fieldset[disabled] #logout:hover,
span#login_widget > .button.disabled:focus,
#logout.disabled:focus,
span#login_widget > .button[disabled]:focus,
#logout[disabled]:focus,
fieldset[disabled] span#login_widget > .button:focus,
fieldset[disabled] #logout:focus,
span#login_widget > .button.disabled.focus,
#logout.disabled.focus,
span#login_widget > .button[disabled].focus,
#logout[disabled].focus,
fieldset[disabled] span#login_widget > .button.focus,
fieldset[disabled] #logout.focus {
background-color: #fff;
border-color: #ccc;
}
span#login_widget > .button .badge,
#logout .badge {
color: #fff;
background-color: #333;
}
.nav-header {
text-transform: none;
}
#header > span {
margin-top: 10px;
}
.modal_stretch .modal-dialog {
/* Old browsers */
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-box-align: stretch;
display: -moz-box;
-moz-box-orient: vertical;
-moz-box-align: stretch;
display: box;
box-orient: vertical;
box-align: stretch;
/* Modern browsers */
display: flex;
flex-direction: column;
align-items: stretch;
min-height: 80vh;
}
.modal_stretch .modal-dialog .modal-body {
max-height: calc(100vh - 200px);
overflow: auto;
flex: 1;
}
@media () {
.modal .modal-dialog {
width: 700px;
}
}
@media () {
select.form-control {
margin-left: 12px;
margin-right: 12px;
}
}
/*!
*
* IPython auth
*
*/
.center-nav {
display: inline-block;
margin-bottom: -4px;
}
/*!
*
* IPython tree view
*
*/
/* We need an invisible input field on top of the sentense*/
/* "Drag file onto the list ..." */
.alternate_upload {
background-color: none;
display: inline;
}
.alternate_upload.form {
padding: 0;
margin: 0;
}
.alternate_upload input.fileinput {
text-align: center;
vertical-align: middle;
display: inline;
opacity: 0;
z-index: 2;
width: 12ex;
margin-right: -12ex;
}
.alternate_upload .btn-upload {
height: 22px;
}
/**
* Primary styles
*
* Author: Jupyter Development Team
*/
[dir="rtl"] #tabs li {
float: right;
}
ul#tabs {
margin-bottom: 4px;
}
[dir="rtl"] ul#tabs {
margin-right: 0px;
}
ul#tabs a {
padding-top: 6px;
padding-bottom: 4px;
}
ul.breadcrumb a:focus,
ul.breadcrumb a:hover {
text-decoration: none;
}
ul.breadcrumb i.icon-home {
font-size: 16px;
margin-right: 4px;
}
ul.breadcrumb span {
color: #5e5e5e;
}
.list_toolbar {
padding: 4px 0 4px 0;
vertical-align: middle;
}
.list_toolbar .tree-buttons {
padding-top: 1px;
}
[dir="rtl"] .list_toolbar .tree-buttons {
float: left !important;
}
[dir="rtl"] .list_toolbar .pull-right {
padding-top: 1px;
float: left !important;
}
[dir="rtl"] .list_toolbar .pull-left {
float: right !important;
}
.dynamic-buttons {
padding-top: 3px;
display: inline-block;
}
.list_toolbar [class*="span"] {
min-height: 24px;
}
.list_header {
font-weight: bold;
background-color: #EEE;
}
.list_placeholder {
font-weight: bold;
padding-top: 4px;
padding-bottom: 4px;
padding-left: 7px;
padding-right: 7px;
}
.list_container {
margin-top: 4px;
margin-bottom: 20px;
border: 1px solid #ddd;
border-radius: 2px;
}
.list_container > div {
border-bottom: 1px solid #ddd;
}
.list_container > div:hover .list-item {
background-color: red;
}
.list_container > div:last-child {
border: none;
}
.list_item:hover .list_item {
background-color: #ddd;
}
.list_item a {
text-decoration: none;
}
.list_item:hover {
background-color: #fafafa;
}
.list_header > div,
.list_item > div {
padding-top: 4px;
padding-bottom: 4px;
padding-left: 7px;
padding-right: 7px;
line-height: 22px;
}
.list_header > div input,
.list_item > div input {
margin-right: 7px;
margin-left: 14px;
vertical-align: baseline;
line-height: 22px;
position: relative;
top: -1px;
}
.list_header > div .item_link,
.list_item > div .item_link {
margin-left: -1px;
vertical-align: baseline;
line-height: 22px;
}
.new-file input[type=checkbox] {
visibility: hidden;
}
.item_name {
line-height: 22px;
height: 24px;
}
.item_icon {
font-size: 14px;
color: #5e5e5e;
margin-right: 7px;
margin-left: 7px;
line-height: 22px;
vertical-align: baseline;
}
.item_buttons {
line-height: 1em;
margin-left: -5px;
}
.item_buttons .btn,
.item_buttons .btn-group,
.item_buttons .input-group {
float: left;
}
.item_buttons > .btn,
.item_buttons > .btn-group,
.item_buttons > .input-group {
margin-left: 5px;
}
.item_buttons .btn {
min-width: 13ex;
}
.item_buttons .running-indicator {
padding-top: 4px;
color: #5cb85c;
}
.item_buttons .kernel-name {
padding-top: 4px;
color: #5bc0de;
margin-right: 7px;
float: left;
}
.toolbar_info {
height: 24px;
line-height: 24px;
}
.list_item input:not([type=checkbox]) {
padding-top: 3px;
padding-bottom: 3px;
height: 22px;
line-height: 14px;
margin: 0px;
}
.highlight_text {
color: blue;
}
#project_name {
display: inline-block;
padding-left: 7px;
margin-left: -2px;
}
#project_name > .breadcrumb {
padding: 0px;
margin-bottom: 0px;
background-color: transparent;
font-weight: bold;
}
#tree-selector {
padding-right: 0px;
}
[dir="rtl"] #tree-selector a {
float: right;
}
#button-select-all {
min-width: 50px;
}
#select-all {
margin-left: 7px;
margin-right: 2px;
}
.menu_icon {
margin-right: 2px;
}
.tab-content .row {
margin-left: 0px;
margin-right: 0px;
}
.folder_icon:before {
display: inline-block;
font: normal normal normal 14px/1 FontAwesome;
font-size: inherit;
text-rendering: auto;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
content: "\f114";
}
.folder_icon:before.pull-left {
margin-right: .3em;
}
.folder_icon:before.pull-right {
margin-left: .3em;
}
.notebook_icon:before {
display: inline-block;
font: normal normal normal 14px/1 FontAwesome;
font-size: inherit;
text-rendering: auto;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
content: "\f02d";
position: relative;
top: -1px;
}
.notebook_icon:before.pull-left {
margin-right: .3em;
}
.notebook_icon:before.pull-right {
margin-left: .3em;
}
.running_notebook_icon:before {
display: inline-block;
font: normal normal normal 14px/1 FontAwesome;
font-size: inherit;
text-rendering: auto;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
content: "\f02d";
position: relative;
top: -1px;
color: #5cb85c;
}
.running_notebook_icon:before.pull-left {
margin-right: .3em;
}
.running_notebook_icon:before.pull-right {
margin-left: .3em;
}
.file_icon:before {
display: inline-block;
font: normal normal normal 14px/1 FontAwesome;
font-size: inherit;
text-rendering: auto;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
content: "\f016";
position: relative;
top: -2px;
}
.file_icon:before.pull-left {
margin-right: .3em;
}
.file_icon:before.pull-right {
margin-left: .3em;
}
#notebook_toolbar .pull-right {
padding-top: 0px;
margin-right: -1px;
}
ul#new-menu {
left: auto;
right: 0;
}
[dir="rtl"] #new-menu {
text-align: right;
}
.kernel-menu-icon {
padding-right: 12px;
width: 24px;
content: "\f096";
}
.kernel-menu-icon:before {
content: "\f096";
}
.kernel-menu-icon-current:before {
content: "\f00c";
}
#tab_content {
padding-top: 20px;
}
#running .panel-group .panel {
margin-top: 3px;
margin-bottom: 1em;
}
#running .panel-group .panel .panel-heading {
background-color: #EEE;
padding-top: 4px;
padding-bottom: 4px;
padding-left: 7px;
padding-right: 7px;
line-height: 22px;
}
#running .panel-group .panel .panel-heading a:focus,
#running .panel-group .panel .panel-heading a:hover {
text-decoration: none;
}
#running .panel-group .panel .panel-body {
padding: 0px;
}
#running .panel-group .panel .panel-body .list_container {
margin-top: 0px;
margin-bottom: 0px;
border: 0px;
border-radius: 0px;
}
#running .panel-group .panel .panel-body .list_container .list_item {
border-bottom: 1px solid #ddd;
}
#running .panel-group .panel .panel-body .list_container .list_item:last-child {
border-bottom: 0px;
}
[dir="rtl"] #running .col-sm-8 {
float: right !important;
}
.delete-button {
display: none;
}
.duplicate-button {
display: none;
}
.rename-button {
display: none;
}
.shutdown-button {
display: none;
}
.dynamic-instructions {
display: inline-block;
padding-top: 4px;
}
/*!
*
* IPython text editor webapp
*
*/
.selected-keymap i.fa {
padding: 0px 5px;
}
.selected-keymap i.fa:before {
content: "\f00c";
}
#mode-menu {
overflow: auto;
max-height: 20em;
}
.edit_app #header {
-webkit-box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);
box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);
}
.edit_app #menubar .navbar {
/* Use a negative 1 bottom margin, so the border overlaps the border of the
header */
margin-bottom: -1px;
}
.dirty-indicator {
display: inline-block;
font: normal normal normal 14px/1 FontAwesome;
font-size: inherit;
text-rendering: auto;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
width: 20px;
}
.dirty-indicator.pull-left {
margin-right: .3em;
}
.dirty-indicator.pull-right {
margin-left: .3em;
}
.dirty-indicator-dirty {
display: inline-block;
font: normal normal normal 14px/1 FontAwesome;
font-size: inherit;
text-rendering: auto;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
width: 20px;
}
.dirty-indicator-dirty.pull-left {
margin-right: .3em;
}
.dirty-indicator-dirty.pull-right {
margin-left: .3em;
}
.dirty-indicator-clean {
display: inline-block;
font: normal normal normal 14px/1 FontAwesome;
font-size: inherit;
text-rendering: auto;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
width: 20px;
}
.dirty-indicator-clean.pull-left {
margin-right: .3em;
}
.dirty-indicator-clean.pull-right {
margin-left: .3em;
}
.dirty-indicator-clean:before {
display: inline-block;
font: normal normal normal 14px/1 FontAwesome;
font-size: inherit;
text-rendering: auto;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
content: "\f00c";
}
.dirty-indicator-clean:before.pull-left {
margin-right: .3em;
}
.dirty-indicator-clean:before.pull-right {
margin-left: .3em;
}
#filename {
font-size: 16pt;
display: table;
padding: 0px 5px;
}
#current-mode {
padding-left: 5px;
padding-right: 5px;
}
#texteditor-backdrop {
padding-top: 20px;
padding-bottom: 20px;
}
@media not print {
#texteditor-backdrop {
background-color: #EEE;
}
}
@media print {
#texteditor-backdrop #texteditor-container .CodeMirror-gutter,
#texteditor-backdrop #texteditor-container .CodeMirror-gutters {
background-color: #fff;
}
}
@media not print {
#texteditor-backdrop #texteditor-container .CodeMirror-gutter,
#texteditor-backdrop #texteditor-container .CodeMirror-gutters {
background-color: #fff;
}
}
@media not print {
#texteditor-backdrop #texteditor-container {
padding: 0px;
background-color: #fff;
-webkit-box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);
box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);
}
}
/*!
*
* IPython notebook
*
*/
/* CSS font colors for translated ANSI colors. */
.ansibold {
font-weight: bold;
}
/* use dark versions for foreground, to improve visibility */
.ansiblack {
color: black;
}
.ansired {
color: darkred;
}
.ansigreen {
color: darkgreen;
}
.ansiyellow {
color: #c4a000;
}
.ansiblue {
color: darkblue;
}
.ansipurple {
color: darkviolet;
}
.ansicyan {
color: steelblue;
}
.ansigray {
color: gray;
}
/* and light for background, for the same reason */
.ansibgblack {
background-color: black;
}
.ansibgred {
background-color: red;
}
.ansibggreen {
background-color: green;
}
.ansibgyellow {
background-color: yellow;
}
.ansibgblue {
background-color: blue;
}
.ansibgpurple {
background-color: magenta;
}
.ansibgcyan {
background-color: cyan;
}
.ansibggray {
background-color: gray;
}
div.cell {
/* Old browsers */
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-box-align: stretch;
display: -moz-box;
-moz-box-orient: vertical;
-moz-box-align: stretch;
display: box;
box-orient: vertical;
box-align: stretch;
/* Modern browsers */
display: flex;
flex-direction: column;
align-items: stretch;
border-radius: 2px;
box-sizing: border-box;
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
border-width: 1px;
border-style: solid;
border-color: transparent;
width: 100%;
padding: 5px;
/* This acts as a spacer between cells, that is outside the border */
margin: 0px;
outline: none;
border-left-width: 1px;
padding-left: 5px;
background: linear-gradient(to right, transparent -40px, transparent 1px, transparent 1px, transparent 100%);
}
div.cell.jupyter-soft-selected {
border-left-color: #90CAF9;
border-left-color: #E3F2FD;
border-left-width: 1px;
padding-left: 5px;
border-right-color: #E3F2FD;
border-right-width: 1px;
background: #E3F2FD;
}
@media print {
div.cell.jupyter-soft-selected {
border-color: transparent;
}
}
div.cell.selected {
border-color: #ababab;
border-left-width: 0px;
padding-left: 6px;
background: linear-gradient(to right, #42A5F5 -40px, #42A5F5 5px, transparent 5px, transparent 100%);
}
@media print {
div.cell.selected {
border-color: transparent;
}
}
div.cell.selected.jupyter-soft-selected {
border-left-width: 0;
padding-left: 6px;
background: linear-gradient(to right, #42A5F5 -40px, #42A5F5 7px, #E3F2FD 7px, #E3F2FD 100%);
}
.edit_mode div.cell.selected {
border-color: #66BB6A;
border-left-width: 0px;
padding-left: 6px;
background: linear-gradient(to right, #66BB6A -40px, #66BB6A 5px, transparent 5px, transparent 100%);
}
@media print {
.edit_mode div.cell.selected {
border-color: transparent;
}
}
.prompt {
/* This needs to be wide enough for 3 digit prompt numbers: In[100]: */
min-width: 14ex;
/* This padding is tuned to match the padding on the CodeMirror editor. */
padding: 0.4em;
margin: 0px;
font-family: monospace;
text-align: right;
/* This has to match that of the the CodeMirror class line-height below */
line-height: 1.21429em;
/* Don't highlight prompt number selection */
-webkit-touch-callout: none;
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
/* Use default cursor */
cursor: default;
}
@media (max-width: 540px) {
.prompt {
text-align: left;
}
}
div.inner_cell {
min-width: 0;
/* Old browsers */
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-box-align: stretch;
display: -moz-box;
-moz-box-orient: vertical;
-moz-box-align: stretch;
display: box;
box-orient: vertical;
box-align: stretch;
/* Modern browsers */
display: flex;
flex-direction: column;
align-items: stretch;
/* Old browsers */
-webkit-box-flex: 1;
-moz-box-flex: 1;
box-flex: 1;
/* Modern browsers */
flex: 1;
}
/* input_area and input_prompt must match in top border and margin for alignment */
div.input_area {
border: 1px solid #cfcfcf;
border-radius: 2px;
background: #f7f7f7;
line-height: 1.21429em;
}
/* This is needed so that empty prompt areas can collapse to zero height when there
is no content in the output_subarea and the prompt. The main purpose of this is
to make sure that empty JavaScript output_subareas have no height. */
div.prompt:empty {
padding-top: 0;
padding-bottom: 0;
}
div.unrecognized_cell {
padding: 5px 5px 5px 0px;
/* Old browsers */
display: -webkit-box;
-webkit-box-orient: horizontal;
-webkit-box-align: stretch;
display: -moz-box;
-moz-box-orient: horizontal;
-moz-box-align: stretch;
display: box;
box-orient: horizontal;
box-align: stretch;
/* Modern browsers */
display: flex;
flex-direction: row;
align-items: stretch;
}
div.unrecognized_cell .inner_cell {
border-radius: 2px;
padding: 5px;
font-weight: bold;
color: red;
border: 1px solid #cfcfcf;
background: #eaeaea;
}
div.unrecognized_cell .inner_cell a {
color: inherit;
text-decoration: none;
}
div.unrecognized_cell .inner_cell a:hover {
color: inherit;
text-decoration: none;
}
@media (max-width: 540px) {
div.unrecognized_cell > div.prompt {
display: none;
}
}
div.code_cell {
/* avoid page breaking on code cells when printing */
}
@media print {
div.code_cell {
page-break-inside: avoid;
}
}
/* any special styling for code cells that are currently running goes here */
div.input {
page-break-inside: avoid;
/* Old browsers */
display: -webkit-box;
-webkit-box-orient: horizontal;
-webkit-box-align: stretch;
display: -moz-box;
-moz-box-orient: horizontal;
-moz-box-align: stretch;
display: box;
box-orient: horizontal;
box-align: stretch;
/* Modern browsers */
display: flex;
flex-direction: row;
align-items: stretch;
}
@media (max-width: 540px) {
div.input {
/* Old browsers */
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-box-align: stretch;
display: -moz-box;
-moz-box-orient: vertical;
-moz-box-align: stretch;
display: box;
box-orient: vertical;
box-align: stretch;
/* Modern browsers */
display: flex;
flex-direction: column;
align-items: stretch;
}
}
/* input_area and input_prompt must match in top border and margin for alignment */
div.input_prompt {
color: #303F9F;
border-top: 1px solid transparent;
}
div.input_area > div.highlight {
margin: 0.4em;
border: none;
padding: 0px;
background-color: transparent;
}
div.input_area > div.highlight > pre {
margin: 0px;
border: none;
padding: 0px;
background-color: transparent;
}
/* The following gets added to the if it is detected that the user has a
* monospace font with inconsistent normal/bold/italic height. See
* notebookmain.js. Such fonts will have keywords vertically offset with
* respect to the rest of the text. The user should select a better font.
* See: https://github.com/ipython/ipython/issues/1503
*
* .CodeMirror span {
* vertical-align: bottom;
* }
*/
.CodeMirror {
line-height: 1.21429em;
/* Changed from 1em to our global default */
font-size: 14px;
height: auto;
/* Changed to auto to autogrow */
background: none;
/* Changed from white to allow our bg to show through */
}
.CodeMirror-scroll {
/* The CodeMirror docs are a bit fuzzy on if overflow-y should be hidden or visible.*/
/* We have found that if it is visible, vertical scrollbars appear with font size changes.*/
overflow-y: hidden;
overflow-x: auto;
}
.CodeMirror-lines {
/* In CM2, this used to be 0.4em, but in CM3 it went to 4px. We need the em value because */
/* we have set a different line-height and want this to scale with that. */
padding: 0.4em;
}
.CodeMirror-linenumber {
padding: 0 8px 0 4px;
}
.CodeMirror-gutters {
border-bottom-left-radius: 2px;
border-top-left-radius: 2px;
}
.CodeMirror pre {
/* In CM3 this went to 4px from 0 in CM2. We need the 0 value because of how we size */
/* .CodeMirror-lines */
padding: 0;
border: 0;
border-radius: 0;
}
/*
Original style from softwaremaniacs.org (c) Ivan Sagalaev <Maniac@SoftwareManiacs.Org>
Adapted from GitHub theme
*/
.highlight-base {
color: #000;
}
.highlight-variable {
color: #000;
}
.highlight-variable-2 {
color: #1a1a1a;
}
.highlight-variable-3 {
color: #333333;
}
.highlight-string {
color: #BA2121;
}
.highlight-comment {
color: #408080;
font-style: italic;
}
.highlight-number {
color: #080;
}
.highlight-atom {
color: #88F;
}
.highlight-keyword {
color: #008000;
font-weight: bold;
}
.highlight-builtin {
color: #008000;
}
.highlight-error {
color: #f00;
}
.highlight-operator {
color: #AA22FF;
font-weight: bold;
}
.highlight-meta {
color: #AA22FF;
}
/* previously not defined, copying from default codemirror */
.highlight-def {
color: #00f;
}
.highlight-string-2 {
color: #f50;
}
.highlight-qualifier {
color: #555;
}
.highlight-bracket {
color: #997;
}
.highlight-tag {
color: #170;
}
.highlight-attribute {
color: #00c;
}
.highlight-header {
color: blue;
}
.highlight-quote {
color: #090;
}
.highlight-link {
color: #00c;
}
/* apply the same style to codemirror */
.cm-s-ipython span.cm-keyword {
color: #008000;
font-weight: bold;
}
.cm-s-ipython span.cm-atom {
color: #88F;
}
.cm-s-ipython span.cm-number {
color: #080;
}
.cm-s-ipython span.cm-def {
color: #00f;
}
.cm-s-ipython span.cm-variable {
color: #000;
}
.cm-s-ipython span.cm-operator {
color: #AA22FF;
font-weight: bold;
}
.cm-s-ipython span.cm-variable-2 {
color: #1a1a1a;
}
.cm-s-ipython span.cm-variable-3 {
color: #333333;
}
.cm-s-ipython span.cm-comment {
color: #408080;
font-style: italic;
}
.cm-s-ipython span.cm-string {
color: #BA2121;
}
.cm-s-ipython span.cm-string-2 {
color: #f50;
}
.cm-s-ipython span.cm-meta {
color: #AA22FF;
}
.cm-s-ipython span.cm-qualifier {
color: #555;
}
.cm-s-ipython span.cm-builtin {
color: #008000;
}
.cm-s-ipython span.cm-bracket {
color: #997;
}
.cm-s-ipython span.cm-tag {
color: #170;
}
.cm-s-ipython span.cm-attribute {
color: #00c;
}
.cm-s-ipython span.cm-header {
color: blue;
}
.cm-s-ipython span.cm-quote {
color: #090;
}
.cm-s-ipython span.cm-link {
color: #00c;
}
.cm-s-ipython span.cm-error {
color: #f00;
}
.cm-s-ipython span.cm-tab {
background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAMCAYAAAAkuj5RAAAAAXNSR0IArs4c6QAAAGFJREFUSMft1LsRQFAQheHPowAKoACx3IgEKtaEHujDjORSgWTH/ZOdnZOcM/sgk/kFFWY0qV8foQwS4MKBCS3qR6ixBJvElOobYAtivseIE120FaowJPN75GMu8j/LfMwNjh4HUpwg4LUAAAAASUVORK5CYII=);
background-position: right;
background-repeat: no-repeat;
}
div.output_wrapper {
/* this position must be relative to enable descendents to be absolute within it */
position: relative;
/* Old browsers */
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-box-align: stretch;
display: -moz-box;
-moz-box-orient: vertical;
-moz-box-align: stretch;
display: box;
box-orient: vertical;
box-align: stretch;
/* Modern browsers */
display: flex;
flex-direction: column;
align-items: stretch;
z-index: 1;
}
/* class for the output area when it should be height-limited */
div.output_scroll {
/* ideally, this would be max-height, but FF barfs all over that */
height: 24em;
/* FF needs this *and the wrapper* to specify full width, or it will shrinkwrap */
width: 100%;
overflow: auto;
border-radius: 2px;
-webkit-box-shadow: inset 0 2px 8px rgba(0, 0, 0, 0.8);
box-shadow: inset 0 2px 8px rgba(0, 0, 0, 0.8);
display: block;
}
/* output div while it is collapsed */
div.output_collapsed {
margin: 0px;
padding: 0px;
/* Old browsers */
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-box-align: stretch;
display: -moz-box;
-moz-box-orient: vertical;
-moz-box-align: stretch;
display: box;
box-orient: vertical;
box-align: stretch;
/* Modern browsers */
display: flex;
flex-direction: column;
align-items: stretch;
}
div.out_prompt_overlay {
height: 100%;
padding: 0px 0.4em;
position: absolute;
border-radius: 2px;
}
div.out_prompt_overlay:hover {
/* use inner shadow to get border that is computed the same on WebKit/FF */
-webkit-box-shadow: inset 0 0 1px #000;
box-shadow: inset 0 0 1px #000;
background: rgba(240, 240, 240, 0.5);
}
div.output_prompt {
color: #D84315;
}
/* This class is the outer container of all output sections. */
div.output_area {
padding: 0px;
page-break-inside: avoid;
/* Old browsers */
display: -webkit-box;
-webkit-box-orient: horizontal;
-webkit-box-align: stretch;
display: -moz-box;
-moz-box-orient: horizontal;
-moz-box-align: stretch;
display: box;
box-orient: horizontal;
box-align: stretch;
/* Modern browsers */
display: flex;
flex-direction: row;
align-items: stretch;
}
div.output_area .MathJax_Display {
text-align: left !important;
}
div.output_area .rendered_html table {
margin-left: 0;
margin-right: 0;
}
div.output_area .rendered_html img {
margin-left: 0;
margin-right: 0;
}
div.output_area img,
div.output_area svg {
max-width: 100%;
height: auto;
}
div.output_area img.unconfined,
div.output_area svg.unconfined {
max-width: none;
}
/* This is needed to protect the pre formating from global settings such
as that of bootstrap */
.output {
/* Old browsers */
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-box-align: stretch;
display: -moz-box;
-moz-box-orient: vertical;
-moz-box-align: stretch;
display: box;
box-orient: vertical;
box-align: stretch;
/* Modern browsers */
display: flex;
flex-direction: column;
align-items: stretch;
}
@media (max-width: 540px) {
div.output_area {
/* Old browsers */
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-box-align: stretch;
display: -moz-box;
-moz-box-orient: vertical;
-moz-box-align: stretch;
display: box;
box-orient: vertical;
box-align: stretch;
/* Modern browsers */
display: flex;
flex-direction: column;
align-items: stretch;
}
}
div.output_area pre {
margin: 0;
padding: 0;
border: 0;
vertical-align: baseline;
color: black;
background-color: transparent;
border-radius: 0;
}
/* This class is for the output subarea inside the output_area and after
the prompt div. */
div.output_subarea {
overflow-x: auto;
padding: 0.4em;
/* Old browsers */
-webkit-box-flex: 1;
-moz-box-flex: 1;
box-flex: 1;
/* Modern browsers */
flex: 1;
max-width: calc(100% - 14ex);
}
div.output_scroll div.output_subarea {
overflow-x: visible;
}
/* The rest of the output_* classes are for special styling of the different
output types */
/* all text output has this class: */
div.output_text {
text-align: left;
color: #000;
/* This has to match that of the the CodeMirror class line-height below */
line-height: 1.21429em;
}
/* stdout/stderr are 'text' as well as 'stream', but execute_result/error are *not* streams */
div.output_stderr {
background: #fdd;
/* very light red background for stderr */
}
div.output_latex {
text-align: left;
}
/* Empty output_javascript divs should have no height */
div.output_javascript:empty {
padding: 0;
}
.js-error {
color: darkred;
}
/* raw_input styles */
div.raw_input_container {
line-height: 1.21429em;
padding-top: 5px;
}
pre.raw_input_prompt {
/* nothing needed here. */
}
input.raw_input {
font-family: monospace;
font-size: inherit;
color: inherit;
width: auto;
/* make sure input baseline aligns with prompt */
vertical-align: baseline;
/* padding + margin = 0.5em between prompt and cursor */
padding: 0em 0.25em;
margin: 0em 0.25em;
}
input.raw_input:focus {
box-shadow: none;
}
p.p-space {
margin-bottom: 10px;
}
div.output_unrecognized {
padding: 5px;
font-weight: bold;
color: red;
}
div.output_unrecognized a {
color: inherit;
text-decoration: none;
}
div.output_unrecognized a:hover {
color: inherit;
text-decoration: none;
}
.rendered_html {
color: #000;
/* any extras will just be numbers: */
}
.rendered_html em {
font-style: italic;
}
.rendered_html strong {
font-weight: bold;
}
.rendered_html u {
text-decoration: underline;
}
.rendered_html :link {
text-decoration: underline;
}
.rendered_html :visited {
text-decoration: underline;
}
.rendered_html h1 {
font-size: 185.7%;
margin: 1.08em 0 0 0;
font-weight: bold;
line-height: 1.0;
}
.rendered_html h2 {
font-size: 157.1%;
margin: 1.27em 0 0 0;
font-weight: bold;
line-height: 1.0;
}
.rendered_html h3 {
font-size: 128.6%;
margin: 1.55em 0 0 0;
font-weight: bold;
line-height: 1.0;
}
.rendered_html h4 {
font-size: 100%;
margin: 2em 0 0 0;
font-weight: bold;
line-height: 1.0;
}
.rendered_html h5 {
font-size: 100%;
margin: 2em 0 0 0;
font-weight: bold;
line-height: 1.0;
font-style: italic;
}
.rendered_html h6 {
font-size: 100%;
margin: 2em 0 0 0;
font-weight: bold;
line-height: 1.0;
font-style: italic;
}
.rendered_html h1:first-child {
margin-top: 0.538em;
}
.rendered_html h2:first-child {
margin-top: 0.636em;
}
.rendered_html h3:first-child {
margin-top: 0.777em;
}
.rendered_html h4:first-child {
margin-top: 1em;
}
.rendered_html h5:first-child {
margin-top: 1em;
}
.rendered_html h6:first-child {
margin-top: 1em;
}
.rendered_html ul {
list-style: disc;
margin: 0em 2em;
padding-left: 0px;
}
.rendered_html ul ul {
list-style: square;
margin: 0em 2em;
}
.rendered_html ul ul ul {
list-style: circle;
margin: 0em 2em;
}
.rendered_html ol {
list-style: decimal;
margin: 0em 2em;
padding-left: 0px;
}
.rendered_html ol ol {
list-style: upper-alpha;
margin: 0em 2em;
}
.rendered_html ol ol ol {
list-style: lower-alpha;
margin: 0em 2em;
}
.rendered_html ol ol ol ol {
list-style: lower-roman;
margin: 0em 2em;
}
.rendered_html ol ol ol ol ol {
list-style: decimal;
margin: 0em 2em;
}
.rendered_html * + ul {
margin-top: 1em;
}
.rendered_html * + ol {
margin-top: 1em;
}
.rendered_html hr {
color: black;
background-color: black;
}
.rendered_html pre {
margin: 1em 2em;
}
.rendered_html pre,
.rendered_html code {
border: 0;
background-color: #fff;
color: #000;
font-size: 100%;
padding: 0px;
}
.rendered_html blockquote {
margin: 1em 2em;
}
.rendered_html table {
margin-left: auto;
margin-right: auto;
border: 1px solid black;
border-collapse: collapse;
}
.rendered_html tr,
.rendered_html th,
.rendered_html td {
border: 1px solid black;
border-collapse: collapse;
margin: 1em 2em;
}
.rendered_html td,
.rendered_html th {
text-align: left;
vertical-align: middle;
padding: 4px;
}
.rendered_html th {
font-weight: bold;
}
.rendered_html * + table {
margin-top: 1em;
}
.rendered_html p {
text-align: left;
}
.rendered_html * + p {
margin-top: 1em;
}
.rendered_html img {
display: block;
margin-left: auto;
margin-right: auto;
}
.rendered_html * + img {
margin-top: 1em;
}
.rendered_html img,
.rendered_html svg {
max-width: 100%;
height: auto;
}
.rendered_html img.unconfined,
.rendered_html svg.unconfined {
max-width: none;
}
div.text_cell {
/* Old browsers */
display: -webkit-box;
-webkit-box-orient: horizontal;
-webkit-box-align: stretch;
display: -moz-box;
-moz-box-orient: horizontal;
-moz-box-align: stretch;
display: box;
box-orient: horizontal;
box-align: stretch;
/* Modern browsers */
display: flex;
flex-direction: row;
align-items: stretch;
}
@media (max-width: 540px) {
div.text_cell > div.prompt {
display: none;
}
}
div.text_cell_render {
/*font-family: "Helvetica Neue", Arial, Helvetica, Geneva, sans-serif;*/
outline: none;
resize: none;
width: inherit;
border-style: none;
padding: 0.5em 0.5em 0.5em 0.4em;
color: #000;
box-sizing: border-box;
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
}
a.anchor-link:link {
text-decoration: none;
padding: 0px 20px;
visibility: hidden;
}
h1:hover .anchor-link,
h2:hover .anchor-link,
h3:hover .anchor-link,
h4:hover .anchor-link,
h5:hover .anchor-link,
h6:hover .anchor-link {
visibility: visible;
}
.text_cell.rendered .input_area {
display: none;
}
.text_cell.rendered .rendered_html {
overflow-x: auto;
overflow-y: hidden;
}
.text_cell.unrendered .text_cell_render {
display: none;
}
.cm-header-1,
.cm-header-2,
.cm-header-3,
.cm-header-4,
.cm-header-5,
.cm-header-6 {
font-weight: bold;
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
}
.cm-header-1 {
font-size: 185.7%;
}
.cm-header-2 {
font-size: 157.1%;
}
.cm-header-3 {
font-size: 128.6%;
}
.cm-header-4 {
font-size: 110%;
}
.cm-header-5 {
font-size: 100%;
font-style: italic;
}
.cm-header-6 {
font-size: 100%;
font-style: italic;
}
/*!
*
* IPython notebook webapp
*
*/
@media (max-width: 767px) {
.notebook_app {
padding-left: 0px;
padding-right: 0px;
}
}
#ipython-main-app {
box-sizing: border-box;
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
height: 100%;
}
div#notebook_panel {
margin: 0px;
padding: 0px;
box-sizing: border-box;
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
height: 100%;
}
div#notebook {
font-size: 14px;
line-height: 20px;
overflow-y: hidden;
overflow-x: auto;
width: 100%;
/* This spaces the page away from the edge of the notebook area */
padding-top: 20px;
margin: 0px;
outline: none;
box-sizing: border-box;
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
min-height: 100%;
}
@media not print {
#notebook-container {
padding: 15px;
background-color: #fff;
min-height: 0;
-webkit-box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);
box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);
}
}
@media print {
#notebook-container {
width: 100%;
}
}
div.ui-widget-content {
border: 1px solid #ababab;
outline: none;
}
pre.dialog {
background-color: #f7f7f7;
border: 1px solid #ddd;
border-radius: 2px;
padding: 0.4em;
padding-left: 2em;
}
p.dialog {
padding: 0.2em;
}
/* Word-wrap output correctly. This is the CSS3 spelling, though Firefox seems
to not honor it correctly. Webkit browsers (Chrome, rekonq, Safari) do.
*/
pre,
code,
kbd,
samp {
white-space: pre-wrap;
}
#fonttest {
font-family: monospace;
}
p {
margin-bottom: 0;
}
.end_space {
min-height: 100px;
transition: height .2s ease;
}
.notebook_app > #header {
-webkit-box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);
box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);
}
@media not print {
.notebook_app {
background-color: #EEE;
}
}
kbd {
border-style: solid;
border-width: 1px;
box-shadow: none;
margin: 2px;
padding-left: 2px;
padding-right: 2px;
padding-top: 1px;
padding-bottom: 1px;
}
/* CSS for the cell toolbar */
.celltoolbar {
border: thin solid #CFCFCF;
border-bottom: none;
background: #EEE;
border-radius: 2px 2px 0px 0px;
width: 100%;
height: 29px;
padding-right: 4px;
/* Old browsers */
display: -webkit-box;
-webkit-box-orient: horizontal;
-webkit-box-align: stretch;
display: -moz-box;
-moz-box-orient: horizontal;
-moz-box-align: stretch;
display: box;
box-orient: horizontal;
box-align: stretch;
/* Modern browsers */
display: flex;
flex-direction: row;
align-items: stretch;
/* Old browsers */
-webkit-box-pack: end;
-moz-box-pack: end;
box-pack: end;
/* Modern browsers */
justify-content: flex-end;
display: -webkit-flex;
}
@media print {
.celltoolbar {
display: none;
}
}
.ctb_hideshow {
display: none;
vertical-align: bottom;
}
/* ctb_show is added to the ctb_hideshow div to show the cell toolbar.
Cell toolbars are only shown when the ctb_global_show class is also set.
*/
.ctb_global_show .ctb_show.ctb_hideshow {
display: block;
}
.ctb_global_show .ctb_show + .input_area,
.ctb_global_show .ctb_show + div.text_cell_input,
.ctb_global_show .ctb_show ~ div.text_cell_render {
border-top-right-radius: 0px;
border-top-left-radius: 0px;
}
.ctb_global_show .ctb_show ~ div.text_cell_render {
border: 1px solid #cfcfcf;
}
.celltoolbar {
font-size: 87%;
padding-top: 3px;
}
.celltoolbar select {
display: block;
width: 100%;
height: 32px;
padding: 6px 12px;
font-size: 13px;
line-height: 1.42857143;
color: #555555;
background-color: #fff;
background-image: none;
border: 1px solid #ccc;
border-radius: 2px;
-webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
-webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
-o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
height: 30px;
padding: 5px 10px;
font-size: 12px;
line-height: 1.5;
border-radius: 1px;
width: inherit;
font-size: inherit;
height: 22px;
padding: 0px;
display: inline-block;
}
.celltoolbar select:focus {
border-color: #66afe9;
outline: 0;
-webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);
box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);
}
.celltoolbar select::-moz-placeholder {
color: #999;
opacity: 1;
}
.celltoolbar select:-ms-input-placeholder {
color: #999;
}
.celltoolbar select::-webkit-input-placeholder {
color: #999;
}
.celltoolbar select::-ms-expand {
border: 0;
background-color: transparent;
}
.celltoolbar select[disabled],
.celltoolbar select[readonly],
fieldset[disabled] .celltoolbar select {
background-color: #eeeeee;
opacity: 1;
}
.celltoolbar select[disabled],
fieldset[disabled] .celltoolbar select {
cursor: not-allowed;
}
textarea.celltoolbar select {
height: auto;
}
select.celltoolbar select {
height: 30px;
line-height: 30px;
}
textarea.celltoolbar select,
select[multiple].celltoolbar select {
height: auto;
}
.celltoolbar label {
margin-left: 5px;
margin-right: 5px;
}
.completions {
position: absolute;
z-index: 110;
overflow: hidden;
border: 1px solid #ababab;
border-radius: 2px;
-webkit-box-shadow: 0px 6px 10px -1px #adadad;
box-shadow: 0px 6px 10px -1px #adadad;
line-height: 1;
}
.completions select {
background: white;
outline: none;
border: none;
padding: 0px;
margin: 0px;
overflow: auto;
font-family: monospace;
font-size: 110%;
color: #000;
width: auto;
}
.completions select option.context {
color: #286090;
}
#kernel_logo_widget {
float: right !important;
float: right;
}
#kernel_logo_widget .current_kernel_logo {
display: none;
margin-top: -1px;
margin-bottom: -1px;
width: 32px;
height: 32px;
}
#menubar {
box-sizing: border-box;
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
margin-top: 1px;
}
#menubar .navbar {
border-top: 1px;
border-radius: 0px 0px 2px 2px;
margin-bottom: 0px;
}
#menubar .navbar-toggle {
float: left;
padding-top: 7px;
padding-bottom: 7px;
border: none;
}
#menubar .navbar-collapse {
clear: left;
}
.nav-wrapper {
border-bottom: 1px solid #e7e7e7;
}
i.menu-icon {
padding-top: 4px;
}
ul#help_menu li a {
overflow: hidden;
padding-right: 2.2em;
}
ul#help_menu li a i {
margin-right: -1.2em;
}
.dropdown-submenu {
position: relative;
}
.dropdown-submenu > .dropdown-menu {
top: 0;
left: 100%;
margin-top: -6px;
margin-left: -1px;
}
.dropdown-submenu:hover > .dropdown-menu {
display: block;
}
.dropdown-submenu > a:after {
display: inline-block;
font: normal normal normal 14px/1 FontAwesome;
font-size: inherit;
text-rendering: auto;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
display: block;
content: "\f0da";
float: right;
color: #333333;
margin-top: 2px;
margin-right: -10px;
}
.dropdown-submenu > a:after.pull-left {
margin-right: .3em;
}
.dropdown-submenu > a:after.pull-right {
margin-left: .3em;
}
.dropdown-submenu:hover > a:after {
color: #262626;
}
.dropdown-submenu.pull-left {
float: none;
}
.dropdown-submenu.pull-left > .dropdown-menu {
left: -100%;
margin-left: 10px;
}
#notification_area {
float: right !important;
float: right;
z-index: 10;
}
.indicator_area {
float: right !important;
float: right;
color: #777;
margin-left: 5px;
margin-right: 5px;
width: 11px;
z-index: 10;
text-align: center;
width: auto;
}
#kernel_indicator {
float: right !important;
float: right;
color: #777;
margin-left: 5px;
margin-right: 5px;
width: 11px;
z-index: 10;
text-align: center;
width: auto;
border-left: 1px solid;
}
#kernel_indicator .kernel_indicator_name {
padding-left: 5px;
padding-right: 5px;
}
#modal_indicator {
float: right !important;
float: right;
color: #777;
margin-left: 5px;
margin-right: 5px;
width: 11px;
z-index: 10;
text-align: center;
width: auto;
}
#readonly-indicator {
float: right !important;
float: right;
color: #777;
margin-left: 5px;
margin-right: 5px;
width: 11px;
z-index: 10;
text-align: center;
width: auto;
margin-top: 2px;
margin-bottom: 0px;
margin-left: 0px;
margin-right: 0px;
display: none;
}
.modal_indicator:before {
width: 1.28571429em;
text-align: center;
}
.edit_mode .modal_indicator:before {
display: inline-block;
font: normal normal normal 14px/1 FontAwesome;
font-size: inherit;
text-rendering: auto;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
content: "\f040";
}
.edit_mode .modal_indicator:before.pull-left {
margin-right: .3em;
}
.edit_mode .modal_indicator:before.pull-right {
margin-left: .3em;
}
.command_mode .modal_indicator:before {
display: inline-block;
font: normal normal normal 14px/1 FontAwesome;
font-size: inherit;
text-rendering: auto;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
content: ' ';
}
.command_mode .modal_indicator:before.pull-left {
margin-right: .3em;
}
.command_mode .modal_indicator:before.pull-right {
margin-left: .3em;
}
.kernel_idle_icon:before {
display: inline-block;
font: normal normal normal 14px/1 FontAwesome;
font-size: inherit;
text-rendering: auto;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
content: "\f10c";
}
.kernel_idle_icon:before.pull-left {
margin-right: .3em;
}
.kernel_idle_icon:before.pull-right {
margin-left: .3em;
}
.kernel_busy_icon:before {
display: inline-block;
font: normal normal normal 14px/1 FontAwesome;
font-size: inherit;
text-rendering: auto;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
content: "\f111";
}
.kernel_busy_icon:before.pull-left {
margin-right: .3em;
}
.kernel_busy_icon:before.pull-right {
margin-left: .3em;
}
.kernel_dead_icon:before {
display: inline-block;
font: normal normal normal 14px/1 FontAwesome;
font-size: inherit;
text-rendering: auto;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
content: "\f1e2";
}
.kernel_dead_icon:before.pull-left {
margin-right: .3em;
}
.kernel_dead_icon:before.pull-right {
margin-left: .3em;
}
.kernel_disconnected_icon:before {
display: inline-block;
font: normal normal normal 14px/1 FontAwesome;
font-size: inherit;
text-rendering: auto;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
content: "\f127";
}
.kernel_disconnected_icon:before.pull-left {
margin-right: .3em;
}
.kernel_disconnected_icon:before.pull-right {
margin-left: .3em;
}
.notification_widget {
color: #777;
z-index: 10;
background: rgba(240, 240, 240, 0.5);
margin-right: 4px;
color: #333;
background-color: #fff;
border-color: #ccc;
}
.notification_widget:focus,
.notification_widget.focus {
color: #333;
background-color: #e6e6e6;
border-color: #8c8c8c;
}
.notification_widget:hover {
color: #333;
background-color: #e6e6e6;
border-color: #adadad;
}
.notification_widget:active,
.notification_widget.active,
.open > .dropdown-toggle.notification_widget {
color: #333;
background-color: #e6e6e6;
border-color: #adadad;
}
.notification_widget:active:hover,
.notification_widget.active:hover,
.open > .dropdown-toggle.notification_widget:hover,
.notification_widget:active:focus,
.notification_widget.active:focus,
.open > .dropdown-toggle.notification_widget:focus,
.notification_widget:active.focus,
.notification_widget.active.focus,
.open > .dropdown-toggle.notification_widget.focus {
color: #333;
background-color: #d4d4d4;
border-color: #8c8c8c;
}
.notification_widget:active,
.notification_widget.active,
.open > .dropdown-toggle.notification_widget {
background-image: none;
}
.notification_widget.disabled:hover,
.notification_widget[disabled]:hover,
fieldset[disabled] .notification_widget:hover,
.notification_widget.disabled:focus,
.notification_widget[disabled]:focus,
fieldset[disabled] .notification_widget:focus,
.notification_widget.disabled.focus,
.notification_widget[disabled].focus,
fieldset[disabled] .notification_widget.focus {
background-color: #fff;
border-color: #ccc;
}
.notification_widget .badge {
color: #fff;
background-color: #333;
}
.notification_widget.warning {
color: #fff;
background-color: #f0ad4e;
border-color: #eea236;
}
.notification_widget.warning:focus,
.notification_widget.warning.focus {
color: #fff;
background-color: #ec971f;
border-color: #985f0d;
}
.notification_widget.warning:hover {
color: #fff;
background-color: #ec971f;
border-color: #d58512;
}
.notification_widget.warning:active,
.notification_widget.warning.active,
.open > .dropdown-toggle.notification_widget.warning {
color: #fff;
background-color: #ec971f;
border-color: #d58512;
}
.notification_widget.warning:active:hover,
.notification_widget.warning.active:hover,
.open > .dropdown-toggle.notification_widget.warning:hover,
.notification_widget.warning:active:focus,
.notification_widget.warning.active:focus,
.open > .dropdown-toggle.notification_widget.warning:focus,
.notification_widget.warning:active.focus,
.notification_widget.warning.active.focus,
.open > .dropdown-toggle.notification_widget.warning.focus {
color: #fff;
background-color: #d58512;
border-color: #985f0d;
}
.notification_widget.warning:active,
.notification_widget.warning.active,
.open > .dropdown-toggle.notification_widget.warning {
background-image: none;
}
.notification_widget.warning.disabled:hover,
.notification_widget.warning[disabled]:hover,
fieldset[disabled] .notification_widget.warning:hover,
.notification_widget.warning.disabled:focus,
.notification_widget.warning[disabled]:focus,
fieldset[disabled] .notification_widget.warning:focus,
.notification_widget.warning.disabled.focus,
.notification_widget.warning[disabled].focus,
fieldset[disabled] .notification_widget.warning.focus {
background-color: #f0ad4e;
border-color: #eea236;
}
.notification_widget.warning .badge {
color: #f0ad4e;
background-color: #fff;
}
.notification_widget.success {
color: #fff;
background-color: #5cb85c;
border-color: #4cae4c;
}
.notification_widget.success:focus,
.notification_widget.success.focus {
color: #fff;
background-color: #449d44;
border-color: #255625;
}
.notification_widget.success:hover {
color: #fff;
background-color: #449d44;
border-color: #398439;
}
.notification_widget.success:active,
.notification_widget.success.active,
.open > .dropdown-toggle.notification_widget.success {
color: #fff;
background-color: #449d44;
border-color: #398439;
}
.notification_widget.success:active:hover,
.notification_widget.success.active:hover,
.open > .dropdown-toggle.notification_widget.success:hover,
.notification_widget.success:active:focus,
.notification_widget.success.active:focus,
.open > .dropdown-toggle.notification_widget.success:focus,
.notification_widget.success:active.focus,
.notification_widget.success.active.focus,
.open > .dropdown-toggle.notification_widget.success.focus {
color: #fff;
background-color: #398439;
border-color: #255625;
}
.notification_widget.success:active,
.notification_widget.success.active,
.open > .dropdown-toggle.notification_widget.success {
background-image: none;
}
.notification_widget.success.disabled:hover,
.notification_widget.success[disabled]:hover,
fieldset[disabled] .notification_widget.success:hover,
.notification_widget.success.disabled:focus,
.notification_widget.success[disabled]:focus,
fieldset[disabled] .notification_widget.success:focus,
.notification_widget.success.disabled.focus,
.notification_widget.success[disabled].focus,
fieldset[disabled] .notification_widget.success.focus {
background-color: #5cb85c;
border-color: #4cae4c;
}
.notification_widget.success .badge {
color: #5cb85c;
background-color: #fff;
}
.notification_widget.info {
color: #fff;
background-color: #5bc0de;
border-color: #46b8da;
}
.notification_widget.info:focus,
.notification_widget.info.focus {
color: #fff;
background-color: #31b0d5;
border-color: #1b6d85;
}
.notification_widget.info:hover {
color: #fff;
background-color: #31b0d5;
border-color: #269abc;
}
.notification_widget.info:active,
.notification_widget.info.active,
.open > .dropdown-toggle.notification_widget.info {
color: #fff;
background-color: #31b0d5;
border-color: #269abc;
}
.notification_widget.info:active:hover,
.notification_widget.info.active:hover,
.open > .dropdown-toggle.notification_widget.info:hover,
.notification_widget.info:active:focus,
.notification_widget.info.active:focus,
.open > .dropdown-toggle.notification_widget.info:focus,
.notification_widget.info:active.focus,
.notification_widget.info.active.focus,
.open > .dropdown-toggle.notification_widget.info.focus {
color: #fff;
background-color: #269abc;
border-color: #1b6d85;
}
.notification_widget.info:active,
.notification_widget.info.active,
.open > .dropdown-toggle.notification_widget.info {
background-image: none;
}
.notification_widget.info.disabled:hover,
.notification_widget.info[disabled]:hover,
fieldset[disabled] .notification_widget.info:hover,
.notification_widget.info.disabled:focus,
.notification_widget.info[disabled]:focus,
fieldset[disabled] .notification_widget.info:focus,
.notification_widget.info.disabled.focus,
.notification_widget.info[disabled].focus,
fieldset[disabled] .notification_widget.info.focus {
background-color: #5bc0de;
border-color: #46b8da;
}
.notification_widget.info .badge {
color: #5bc0de;
background-color: #fff;
}
.notification_widget.danger {
color: #fff;
background-color: #d9534f;
border-color: #d43f3a;
}
.notification_widget.danger:focus,
.notification_widget.danger.focus {
color: #fff;
background-color: #c9302c;
border-color: #761c19;
}
.notification_widget.danger:hover {
color: #fff;
background-color: #c9302c;
border-color: #ac2925;
}
.notification_widget.danger:active,
.notification_widget.danger.active,
.open > .dropdown-toggle.notification_widget.danger {
color: #fff;
background-color: #c9302c;
border-color: #ac2925;
}
.notification_widget.danger:active:hover,
.notification_widget.danger.active:hover,
.open > .dropdown-toggle.notification_widget.danger:hover,
.notification_widget.danger:active:focus,
.notification_widget.danger.active:focus,
.open > .dropdown-toggle.notification_widget.danger:focus,
.notification_widget.danger:active.focus,
.notification_widget.danger.active.focus,
.open > .dropdown-toggle.notification_widget.danger.focus {
color: #fff;
background-color: #ac2925;
border-color: #761c19;
}
.notification_widget.danger:active,
.notification_widget.danger.active,
.open > .dropdown-toggle.notification_widget.danger {
background-image: none;
}
.notification_widget.danger.disabled:hover,
.notification_widget.danger[disabled]:hover,
fieldset[disabled] .notification_widget.danger:hover,
.notification_widget.danger.disabled:focus,
.notification_widget.danger[disabled]:focus,
fieldset[disabled] .notification_widget.danger:focus,
.notification_widget.danger.disabled.focus,
.notification_widget.danger[disabled].focus,
fieldset[disabled] .notification_widget.danger.focus {
background-color: #d9534f;
border-color: #d43f3a;
}
.notification_widget.danger .badge {
color: #d9534f;
background-color: #fff;
}
div#pager {
background-color: #fff;
font-size: 14px;
line-height: 20px;
overflow: hidden;
display: none;
position: fixed;
bottom: 0px;
width: 100%;
max-height: 50%;
padding-top: 8px;
-webkit-box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);
box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);
/* Display over codemirror */
z-index: 100;
/* Hack which prevents jquery ui resizable from changing top. */
top: auto !important;
}
div#pager pre {
line-height: 1.21429em;
color: #000;
background-color: #f7f7f7;
padding: 0.4em;
}
div#pager #pager-button-area {
position: absolute;
top: 8px;
right: 20px;
}
div#pager #pager-contents {
position: relative;
overflow: auto;
width: 100%;
height: 100%;
}
div#pager #pager-contents #pager-container {
position: relative;
padding: 15px 0px;
box-sizing: border-box;
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
}
div#pager .ui-resizable-handle {
top: 0px;
height: 8px;
background: #f7f7f7;
border-top: 1px solid #cfcfcf;
border-bottom: 1px solid #cfcfcf;
/* This injects handle bars (a short, wide = symbol) for
the resize handle. */
}
div#pager .ui-resizable-handle::after {
content: '';
top: 2px;
left: 50%;
height: 3px;
width: 30px;
margin-left: -15px;
position: absolute;
border-top: 1px solid #cfcfcf;
}
.quickhelp {
/* Old browsers */
display: -webkit-box;
-webkit-box-orient: horizontal;
-webkit-box-align: stretch;
display: -moz-box;
-moz-box-orient: horizontal;
-moz-box-align: stretch;
display: box;
box-orient: horizontal;
box-align: stretch;
/* Modern browsers */
display: flex;
flex-direction: row;
align-items: stretch;
line-height: 1.8em;
}
.shortcut_key {
display: inline-block;
width: 21ex;
text-align: right;
font-family: monospace;
}
.shortcut_descr {
display: inline-block;
/* Old browsers */
-webkit-box-flex: 1;
-moz-box-flex: 1;
box-flex: 1;
/* Modern browsers */
flex: 1;
}
span.save_widget {
margin-top: 6px;
}
span.save_widget span.filename {
height: 1em;
line-height: 1em;
padding: 3px;
margin-left: 16px;
border: none;
font-size: 146.5%;
border-radius: 2px;
}
span.save_widget span.filename:hover {
background-color: #e6e6e6;
}
span.checkpoint_status,
span.autosave_status {
font-size: small;
}
@media (max-width: 767px) {
span.save_widget {
font-size: small;
}
span.checkpoint_status,
span.autosave_status {
display: none;
}
}
@media () {
span.checkpoint_status {
display: none;
}
span.autosave_status {
font-size: x-small;
}
}
.toolbar {
padding: 0px;
margin-left: -5px;
margin-top: 2px;
margin-bottom: 5px;
box-sizing: border-box;
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
}
.toolbar select,
.toolbar label {
width: auto;
vertical-align: middle;
margin-right: 2px;
margin-bottom: 0px;
display: inline;
font-size: 92%;
margin-left: 0.3em;
margin-right: 0.3em;
padding: 0px;
padding-top: 3px;
}
.toolbar .btn {
padding: 2px 8px;
}
.toolbar .btn-group {
margin-top: 0px;
margin-left: 5px;
}
#maintoolbar {
margin-bottom: -3px;
margin-top: -8px;
border: 0px;
min-height: 27px;
margin-left: 0px;
padding-top: 11px;
padding-bottom: 3px;
}
#maintoolbar .navbar-text {
float: none;
vertical-align: middle;
text-align: right;
margin-left: 5px;
margin-right: 0px;
margin-top: 0px;
}
.select-xs {
height: 24px;
}
.pulse,
.dropdown-menu > li > a.pulse,
li.pulse > a.dropdown-toggle,
li.pulse.open > a.dropdown-toggle {
background-color: #F37626;
color: white;
}
/**
* Primary styles
*
* Author: Jupyter Development Team
*/
/** WARNING IF YOU ARE EDITTING THIS FILE, if this is a .css file, It has a lot
* of chance of beeing generated from the ../less/[samename].less file, you can
* try to get back the less file by reverting somme commit in history
**/
/*
* We'll try to get something pretty, so we
* have some strange css to have the scroll bar on
* the left with fix button on the top right of the tooltip
*/
@-moz-keyframes fadeOut {
from {
opacity: 1;
}
to {
opacity: 0;
}
}
@-webkit-keyframes fadeOut {
from {
opacity: 1;
}
to {
opacity: 0;
}
}
@-moz-keyframes fadeIn {
from {
opacity: 0;
}
to {
opacity: 1;
}
}
@-webkit-keyframes fadeIn {
from {
opacity: 0;
}
to {
opacity: 1;
}
}
/*properties of tooltip after "expand"*/
.bigtooltip {
overflow: auto;
height: 200px;
-webkit-transition-property: height;
-webkit-transition-duration: 500ms;
-moz-transition-property: height;
-moz-transition-duration: 500ms;
transition-property: height;
transition-duration: 500ms;
}
/*properties of tooltip before "expand"*/
.smalltooltip {
-webkit-transition-property: height;
-webkit-transition-duration: 500ms;
-moz-transition-property: height;
-moz-transition-duration: 500ms;
transition-property: height;
transition-duration: 500ms;
text-overflow: ellipsis;
overflow: hidden;
height: 80px;
}
.tooltipbuttons {
position: absolute;
padding-right: 15px;
top: 0px;
right: 0px;
}
.tooltiptext {
/*avoid the button to overlap on some docstring*/
padding-right: 30px;
}
.ipython_tooltip {
max-width: 700px;
/*fade-in animation when inserted*/
-webkit-animation: fadeOut 400ms;
-moz-animation: fadeOut 400ms;
animation: fadeOut 400ms;
-webkit-animation: fadeIn 400ms;
-moz-animation: fadeIn 400ms;
animation: fadeIn 400ms;
vertical-align: middle;
background-color: #f7f7f7;
overflow: visible;
border: #ababab 1px solid;
outline: none;
padding: 3px;
margin: 0px;
padding-left: 7px;
font-family: monospace;
min-height: 50px;
-moz-box-shadow: 0px 6px 10px -1px #adadad;
-webkit-box-shadow: 0px 6px 10px -1px #adadad;
box-shadow: 0px 6px 10px -1px #adadad;
border-radius: 2px;
position: absolute;
z-index: 1000;
}
.ipython_tooltip a {
float: right;
}
.ipython_tooltip .tooltiptext pre {
border: 0;
border-radius: 0;
font-size: 100%;
background-color: #f7f7f7;
}
.pretooltiparrow {
left: 0px;
margin: 0px;
top: -16px;
width: 40px;
height: 16px;
overflow: hidden;
position: absolute;
}
.pretooltiparrow:before {
background-color: #f7f7f7;
border: 1px #ababab solid;
z-index: 11;
content: "";
position: absolute;
left: 15px;
top: 10px;
width: 25px;
height: 25px;
-webkit-transform: rotate(45deg);
-moz-transform: rotate(45deg);
-ms-transform: rotate(45deg);
-o-transform: rotate(45deg);
}
ul.typeahead-list i {
margin-left: -10px;
width: 18px;
}
ul.typeahead-list {
max-height: 80vh;
overflow: auto;
}
ul.typeahead-list > li > a {
/** Firefox bug **/
/* see https://github.com/jupyter/notebook/issues/559 */
white-space: normal;
}
.cmd-palette .modal-body {
padding: 7px;
}
.cmd-palette form {
background: white;
}
.cmd-palette input {
outline: none;
}
.no-shortcut {
display: none;
}
.command-shortcut:before {
content: "(command)";
padding-right: 3px;
color: #777777;
}
.edit-shortcut:before {
content: "(edit)";
padding-right: 3px;
color: #777777;
}
#find-and-replace #replace-preview .match,
#find-and-replace #replace-preview .insert {
background-color: #BBDEFB;
border-color: #90CAF9;
border-style: solid;
border-width: 1px;
border-radius: 0px;
}
#find-and-replace #replace-preview .replace .match {
background-color: #FFCDD2;
border-color: #EF9A9A;
border-radius: 0px;
}
#find-and-replace #replace-preview .replace .insert {
background-color: #C8E6C9;
border-color: #A5D6A7;
border-radius: 0px;
}
#find-and-replace #replace-preview {
max-height: 60vh;
overflow: auto;
}
#find-and-replace #replace-preview pre {
padding: 5px 10px;
}
.terminal-app {
background: #EEE;
}
.terminal-app #header {
background: #fff;
-webkit-box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);
box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);
}
.terminal-app .terminal {
width: 100%;
float: left;
font-family: monospace;
color: white;
background: black;
padding: 0.4em;
border-radius: 2px;
-webkit-box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.4);
box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.4);
}
.terminal-app .terminal,
.terminal-app .terminal dummy-screen {
line-height: 1em;
font-size: 14px;
}
.terminal-app .terminal .xterm-rows {
padding: 10px;
}
.terminal-app .terminal-cursor {
color: black;
background: white;
}
.terminal-app #terminado-container {
margin-top: 20px;
}
/*# sourceMappingURL=style.min.css.map */
</style>
<style type="text/css">
.highlight .hll { background-color: #ffffcc }
.highlight { background: #f8f8f8; }
.highlight .c { color: #408080; font-style: italic } /* Comment */
.highlight .err { border: 1px solid #FF0000 } /* Error */
.highlight .k { color: #008000; font-weight: bold } /* Keyword */
.highlight .o { color: #666666 } /* Operator */
.highlight .ch { color: #408080; font-style: italic } /* Comment.Hashbang */
.highlight .cm { color: #408080; font-style: italic } /* Comment.Multiline */
.highlight .cp { color: #BC7A00 } /* Comment.Preproc */
.highlight .cpf { color: #408080; font-style: italic } /* Comment.PreprocFile */
.highlight .c1 { color: #408080; font-style: italic } /* Comment.Single */
.highlight .cs { color: #408080; font-style: italic } /* Comment.Special */
.highlight .gd { color: #A00000 } /* Generic.Deleted */
.highlight .ge { font-style: italic } /* Generic.Emph */
.highlight .gr { color: #FF0000 } /* Generic.Error */
.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */
.highlight .gi { color: #00A000 } /* Generic.Inserted */
.highlight .go { color: #888888 } /* Generic.Output */
.highlight .gp { color: #000080; font-weight: bold } /* Generic.Prompt */
.highlight .gs { font-weight: bold } /* Generic.Strong */
.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */
.highlight .gt { color: #0044DD } /* Generic.Traceback */
.highlight .kc { color: #008000; font-weight: bold } /* Keyword.Constant */
.highlight .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */
.highlight .kn { color: #008000; font-weight: bold } /* Keyword.Namespace */
.highlight .kp { color: #008000 } /* Keyword.Pseudo */
.highlight .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */
.highlight .kt { color: #B00040 } /* Keyword.Type */
.highlight .m { color: #666666 } /* Literal.Number */
.highlight .s { color: #BA2121 } /* Literal.String */
.highlight .na { color: #7D9029 } /* Name.Attribute */
.highlight .nb { color: #008000 } /* Name.Builtin */
.highlight .nc { color: #0000FF; font-weight: bold } /* Name.Class */
.highlight .no { color: #880000 } /* Name.Constant */
.highlight .nd { color: #AA22FF } /* Name.Decorator */
.highlight .ni { color: #999999; font-weight: bold } /* Name.Entity */
.highlight .ne { color: #D2413A; font-weight: bold } /* Name.Exception */
.highlight .nf { color: #0000FF } /* Name.Function */
.highlight .nl { color: #A0A000 } /* Name.Label */
.highlight .nn { color: #0000FF; font-weight: bold } /* Name.Namespace */
.highlight .nt { color: #008000; font-weight: bold } /* Name.Tag */
.highlight .nv { color: #19177C } /* Name.Variable */
.highlight .ow { color: #AA22FF; font-weight: bold } /* Operator.Word */
.highlight .w { color: #bbbbbb } /* Text.Whitespace */
.highlight .mb { color: #666666 } /* Literal.Number.Bin */
.highlight .mf { color: #666666 } /* Literal.Number.Float */
.highlight .mh { color: #666666 } /* Literal.Number.Hex */
.highlight .mi { color: #666666 } /* Literal.Number.Integer */
.highlight .mo { color: #666666 } /* Literal.Number.Oct */
.highlight .sa { color: #BA2121 } /* Literal.String.Affix */
.highlight .sb { color: #BA2121 } /* Literal.String.Backtick */
.highlight .sc { color: #BA2121 } /* Literal.String.Char */
.highlight .dl { color: #BA2121 } /* Literal.String.Delimiter */
.highlight .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */
.highlight .s2 { color: #BA2121 } /* Literal.String.Double */
.highlight .se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */
.highlight .sh { color: #BA2121 } /* Literal.String.Heredoc */
.highlight .si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */
.highlight .sx { color: #008000 } /* Literal.String.Other */
.highlight .sr { color: #BB6688 } /* Literal.String.Regex */
.highlight .s1 { color: #BA2121 } /* Literal.String.Single */
.highlight .ss { color: #19177C } /* Literal.String.Symbol */
.highlight .bp { color: #008000 } /* Name.Builtin.Pseudo */
.highlight .fm { color: #0000FF } /* Name.Function.Magic */
.highlight .vc { color: #19177C } /* Name.Variable.Class */
.highlight .vg { color: #19177C } /* Name.Variable.Global */
.highlight .vi { color: #19177C } /* Name.Variable.Instance */
.highlight .vm { color: #19177C } /* Name.Variable.Magic */
.highlight .il { color: #666666 } /* Literal.Number.Integer.Long */
</style>
<style type="text/css">
/* Temporary definitions which will become obsolete with Notebook release 5.0 */
.ansi-black-fg { color: #3E424D; }
.ansi-black-bg { background-color: #3E424D; }
.ansi-black-intense-fg { color: #282C36; }
.ansi-black-intense-bg { background-color: #282C36; }
.ansi-red-fg { color: #E75C58; }
.ansi-red-bg { background-color: #E75C58; }
.ansi-red-intense-fg { color: #B22B31; }
.ansi-red-intense-bg { background-color: #B22B31; }
.ansi-green-fg { color: #00A250; }
.ansi-green-bg { background-color: #00A250; }
.ansi-green-intense-fg { color: #007427; }
.ansi-green-intense-bg { background-color: #007427; }
.ansi-yellow-fg { color: #DDB62B; }
.ansi-yellow-bg { background-color: #DDB62B; }
.ansi-yellow-intense-fg { color: #B27D12; }
.ansi-yellow-intense-bg { background-color: #B27D12; }
.ansi-blue-fg { color: #208FFB; }
.ansi-blue-bg { background-color: #208FFB; }
.ansi-blue-intense-fg { color: #0065CA; }
.ansi-blue-intense-bg { background-color: #0065CA; }
.ansi-magenta-fg { color: #D160C4; }
.ansi-magenta-bg { background-color: #D160C4; }
.ansi-magenta-intense-fg { color: #A03196; }
.ansi-magenta-intense-bg { background-color: #A03196; }
.ansi-cyan-fg { color: #60C6C8; }
.ansi-cyan-bg { background-color: #60C6C8; }
.ansi-cyan-intense-fg { color: #258F8F; }
.ansi-cyan-intense-bg { background-color: #258F8F; }
.ansi-white-fg { color: #C5C1B4; }
.ansi-white-bg { background-color: #C5C1B4; }
.ansi-white-intense-fg { color: #A1A6B2; }
.ansi-white-intense-bg { background-color: #A1A6B2; }
.ansi-bold { font-weight: bold; }
</style>
<style type="text/css">
/* Overrides of notebook CSS for static HTML export */
body {
overflow: visible;
padding: 8px;
}
div#notebook {
overflow: visible;
border-top: none;
}@media print {
div.cell {
display: block;
page-break-inside: avoid;
}
div.output_wrapper {
display: block;
page-break-inside: avoid;
}
div.output {
display: block;
page-break-inside: avoid;
}
}
</style>
<!-- Custom stylesheet, it must be in the same directory as the html file -->
<link rel="stylesheet" href="custom.css">
<!-- Loading mathjax macro -->
<!-- Load mathjax -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS_HTML"></script>
<!-- MathJax configuration -->
<script type="text/x-mathjax-config">
MathJax.Hub.Config({
tex2jax: {
inlineMath: [ ['$','$'], ["\\(","\\)"] ],
displayMath: [ ['$$','$$'], ["\\[","\\]"] ],
processEscapes: true,
processEnvironments: true
},
// Center justify equations in code and markdown cells. Elsewhere
// we use CSS to left justify single line equations in code cells.
displayAlign: 'center',
"HTML-CSS": {
styles: {'.MathJax_Display': {"margin": 0}},
linebreaks: { automatic: true }
}
});
</script>
<!-- End of mathjax configuration -->
<div tabindex="-1" id="notebook" class="border-box-sizing">
<div class="container" id="notebook-container">
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h1 id="Art-With-a-Message">Art With a Message<a class="anchor-link" href="#Art-With-a-Message">¶</a></h1><p>In August of 2018, while walking around UCSD, I noticed a large, blinking light atop Urey Hall. Observing the flashes, it became clear quite quickly that it was blinking Morse Code. The question was, what did it say? Not being fluent in Morse, I captured the flashes the best I could with my phone in hopes of decoding the message offline.</p>
<p>The thought of watching a video over and over trying to decode dots and dashes from a signal lamp did not leave me terribly excited, so I decided to try doing it programmatically. Some thresholding, a little Forier Analysis, filtering, and a Morse Code tree should tease out the message from the video. Overall, a great project for learning some OpenCV. Sadly, my shaky cell phone video was not conducive to being easily analysed, so I vowed to return with a tripod and a better camera for some solid video.</p>
<p>Unfortunately, the light disappeared after that. Until November, when it was mounted on a light pole between Urey Hall and Mayer Hall, signalling proudly above campus. I got as high and as close as I could and still have a view of the light -- the top level of the molecular bridge between Bonner and Mayer Halls -- and set up my tripod and camera with my largest lens to record around 10 minutes of video. Since I was shooting with a "real" camera instead of my phone, I stopped down the aperture and quickened the shutter speed to get a nice, stable, contrasty video (exceptin' the bounce when I pressed the record button).</p>
<p>When I got to my computer, I shrunk the video down to a more managable, yet viewable size, and stripped the audio. It looked like this, only the lights blinked:</p>
<p>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEio-9ALHs2a5SXHzjR-f_u7Voq6HeDXOtJ-u-jGSZJ_nyGNe11FZvCK5JrDRCmkAaNX9nVgdm_HNNydC9sFDQM9zRMSn2omdydonrTByU8D6RoFYjOSqM2em2AQd5Dq6U42sZAzvdl5G4w/s1600/20181110-thumbnail.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="480" data-original-width="854" height="360" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEio-9ALHs2a5SXHzjR-f_u7Voq6HeDXOtJ-u-jGSZJ_nyGNe11FZvCK5JrDRCmkAaNX9nVgdm_HNNydC9sFDQM9zRMSn2omdydonrTByU8D6RoFYjOSqM2em2AQd5Dq6U42sZAzvdl5G4w/s640/20181110-thumbnail.png" width="640" /></a></div>
</p>
<p>I actually made a grayscale version of the video, because it's easier to play with (only one set of magnitudes to deal with instead of three). Video conversions were done with ffmpeg, because ffmpeg is awesome.</p>
<p>With some usable video captured, the first thing to do was to make an OpenCV environment in Anaconda so I could play around in a Jupyter Notebook. On Linux, that's simple enough, since OpenCV is included.</p>
<pre><code>$ conda create --name opencv
$ source activate opencv
$ conda install -n opencv opencv matplotlib
$ jupyter notebook</code></pre>
<p>Once we created a notebook to play in (this very one!), we could import our libraries, and switch to present tense in our narrative.</p>
</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In [1]:</div>
<div class="inner_cell">
<div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="kn">import</span> <span class="nn">numpy</span> <span class="k">as</span> <span class="nn">np</span>
<span class="kn">import</span> <span class="nn">matplotlib.pyplot</span> <span class="k">as</span> <span class="nn">plt</span>
<span class="kn">import</span> <span class="nn">cv2</span>
</pre></div>
</div>
</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In [2]:</div>
<div class="inner_cell">
<div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="n">cv2</span><span class="o">.</span><span class="n">__version__</span>
</pre></div>
</div>
</div>
</div>
<div class="output_wrapper">
<div class="output">
<div class="output_area">
<div class="prompt output_prompt">Out[2]:</div>
<div class="output_text output_subarea output_execute_result">
<pre>'3.4.2'</pre>
</div>
</div>
</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h2 id="Getting-Our-Feet-Wet">Getting Our Feet Wet<a class="anchor-link" href="#Getting-Our-Feet-Wet">¶</a></h2>
</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<p>First thing first, we need to be able to read our video. According to the
<a href="https://docs.opencv.org/3.0-beta/doc/py_tutorials/py_gui/py_video_display/py_video_display.html">OpenCV Python Video tutorial</a>,
that's just a matter of calling <code>cv2.VideoCapture()</code> with the path to the file as an argument. As long as <code>cap.isOpened()</code> is <code>True</code>, we are playing with video data.</p>
</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In [3]:</div>
<div class="inner_cell">
<div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="n">video</span> <span class="o">=</span> <span class="s1">'20181110-854x480-gray.mov'</span>
<span class="n">cap</span> <span class="o">=</span> <span class="n">cv2</span><span class="o">.</span><span class="n">VideoCapture</span><span class="p">(</span><span class="n">video</span><span class="p">)</span>
<span class="n">cap</span><span class="o">.</span><span class="n">isOpened</span><span class="p">()</span>
</pre></div>
</div>
</div>
</div>
<div class="output_wrapper">
<div class="output">
<div class="output_area">
<div class="prompt output_prompt">Out[3]:</div>
<div class="output_text output_subarea output_execute_result">
<pre>True</pre>
</div>
</div>
</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In [4]:</div>
<div class="inner_cell">
<div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="n">ret</span><span class="p">,</span> <span class="n">frame</span> <span class="o">=</span> <span class="n">cap</span><span class="o">.</span><span class="n">read</span><span class="p">()</span>
<span class="n">ret</span><span class="p">,</span> <span class="nb">type</span><span class="p">(</span><span class="n">frame</span><span class="p">)</span>
</pre></div>
</div>
</div>
</div>
<div class="output_wrapper">
<div class="output">
<div class="output_area">
<div class="prompt output_prompt">Out[4]:</div>
<div class="output_text output_subarea output_execute_result">
<pre>(True, numpy.ndarray)</pre>
</div>
</div>
</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<p>So the frame is an ndarray. At this point, we're essentially playing in numpy. So much for learning much OpenCV.</p>
</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In [5]:</div>
<div class="inner_cell">
<div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="n">cap</span><span class="o">.</span><span class="n">release</span><span class="p">()</span>
</pre></div>
</div>
</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h2 id="Analysing-the-Data">Analysing the Data<a class="anchor-link" href="#Analysing-the-Data">¶</a></h2><p>Our first attack is going to be a simple threshold on the max value of the video frame. To make things even easier on us, we can crop the video so it only contains the highest contrast part. Specifically, the contents of the red box in this image:</p>
<p>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEidMK2KZoDiWZWrielN5R_t1Iiv6KivAgHyNjvKbR2D-1ZiKanX24NYgsstDgw0LbZjw8NuADKML9czEYusIzhqJ_GRjAunsN3T7s6VCjS6xUkpvdxrEI3sWgIJrDpn2-PN6B3oDpMWVNQ/s1600/20181110-crop.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="480" data-original-width="854" height="360" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEidMK2KZoDiWZWrielN5R_t1Iiv6KivAgHyNjvKbR2D-1ZiKanX24NYgsstDgw0LbZjw8NuADKML9czEYusIzhqJ_GRjAunsN3T7s6VCjS6xUkpvdxrEI3sWgIJrDpn2-PN6B3oDpMWVNQ/s640/20181110-crop.png" width="640" /></a></div>
</p>
<p>Using our favorite image editing program, we know that the coordinates of the upper left corner of that box is at 440, 190, and it's 15 pixels wide and 60 pixels tall. Exactly the information ffmpeg needs to crop the video for us.</p>
<p><code>$ ffmpeg -i 20181110-854x4800-gray.mov -vf crop=15:60:440:190 20181110-crop.mov</code></p>
<p>To help with analysis, being able to visualize the data always helps, so let's create some helper functions to do that to avoid boilerplate.</p>
</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In [6]:</div>
<div class="inner_cell">
<div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="o">%</span><span class="k">matplotlib</span> inline
<span class="k">def</span> <span class="nf">plot</span><span class="p">(</span><span class="n">signal</span><span class="p">,</span> <span class="n">width</span><span class="p">,</span> <span class="n">title</span><span class="p">,</span> <span class="n">xlabel</span><span class="p">,</span> <span class="n">ylabel</span><span class="p">):</span>
<span class="sd">"""Plot the first `width` samples of `signal`."""</span>
<span class="n">fig</span> <span class="o">=</span> <span class="n">plt</span><span class="o">.</span><span class="n">figure</span><span class="p">()</span>
<span class="n">ax</span> <span class="o">=</span> <span class="n">fig</span><span class="o">.</span><span class="n">add_subplot</span><span class="p">(</span><span class="mi">111</span><span class="p">)</span>
<span class="n">ax</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">arange</span><span class="p">(</span><span class="n">width</span><span class="p">),</span> <span class="n">signal</span><span class="p">[:</span><span class="n">width</span><span class="p">])</span>
<span class="n">ax</span><span class="o">.</span><span class="n">set_title</span><span class="p">(</span><span class="n">title</span><span class="p">)</span>
<span class="n">ax</span><span class="o">.</span><span class="n">set_xlabel</span><span class="p">(</span><span class="n">xlabel</span><span class="p">)</span>
<span class="n">ax</span><span class="o">.</span><span class="n">set_ylabel</span><span class="p">(</span><span class="n">ylabel</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">histogram</span><span class="p">(</span><span class="n">signal</span><span class="p">,</span> <span class="n">title</span><span class="p">,</span> <span class="n">xlabel</span><span class="p">):</span>
<span class="sd">"""Plot histogram of `signal`"""</span>
<span class="n">fig</span> <span class="o">=</span> <span class="n">plt</span><span class="o">.</span><span class="n">figure</span><span class="p">()</span>
<span class="n">ax</span> <span class="o">=</span> <span class="n">fig</span><span class="o">.</span><span class="n">add_subplot</span><span class="p">(</span><span class="mi">111</span><span class="p">)</span>
<span class="n">dist</span><span class="p">,</span> <span class="n">bins</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">histogram</span><span class="p">(</span><span class="n">signal</span><span class="p">,</span> <span class="n">bins</span><span class="o">=</span><span class="n">np</span><span class="o">.</span><span class="n">arange</span><span class="p">(</span><span class="n">signal</span><span class="o">.</span><span class="n">max</span><span class="p">()))</span>
<span class="n">ax</span><span class="o">.</span><span class="n">bar</span><span class="p">(</span><span class="n">bins</span><span class="p">[:</span><span class="o">-</span><span class="mi">1</span><span class="p">],</span> <span class="n">dist</span><span class="p">)</span>
<span class="n">ax</span><span class="o">.</span><span class="n">set_title</span><span class="p">(</span><span class="n">title</span><span class="p">)</span>
<span class="n">ax</span><span class="o">.</span><span class="n">set_xlabel</span><span class="p">(</span><span class="n">xlabel</span><span class="p">)</span>
<span class="n">ax</span><span class="o">.</span><span class="n">set_ylabel</span><span class="p">(</span><span class="s1">'Count'</span><span class="p">)</span>
</pre></div>
</div>
</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<p>Next, a function to return the brightest pixel value for each frame of video:</p>
</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In [7]:</div>
<div class="inner_cell">
<div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="k">def</span> <span class="nf">frame_maxes</span><span class="p">(</span><span class="n">fname</span><span class="p">):</span>
<span class="sd">""" Generate the max values in each frame of the video file `fname`"""</span>
<span class="n">cap</span> <span class="o">=</span> <span class="n">cv2</span><span class="o">.</span><span class="n">VideoCapture</span><span class="p">(</span><span class="n">fname</span><span class="p">)</span>
<span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
<span class="n">ret</span><span class="p">,</span> <span class="n">frame</span> <span class="o">=</span> <span class="n">cap</span><span class="o">.</span><span class="n">read</span><span class="p">()</span>
<span class="k">if</span> <span class="n">ret</span><span class="p">:</span>
<span class="k">yield</span> <span class="n">np</span><span class="o">.</span><span class="n">max</span><span class="p">(</span><span class="n">frame</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">break</span>
<span class="n">cap</span><span class="o">.</span><span class="n">release</span><span class="p">()</span>
</pre></div>
</div>
</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In [8]:</div>
<div class="inner_cell">
<div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="c1"># Max values as an ndarray. </span>
<span class="n">video</span> <span class="o">=</span> <span class="s1">'20181110-crop.mov'</span>
<span class="n">fmax_crop</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">([</span><span class="n">m</span> <span class="k">for</span> <span class="n">m</span> <span class="ow">in</span> <span class="n">frame_maxes</span><span class="p">(</span><span class="n">video</span><span class="p">)],</span> <span class="n">dtype</span><span class="o">=</span><span class="nb">int</span><span class="p">)</span>
<span class="n">plot</span><span class="p">(</span><span class="n">fmax_crop</span><span class="p">,</span> <span class="mi">200</span><span class="p">,</span> <span class="s1">'Max Pixel Intensity'</span><span class="p">,</span> <span class="s1">'Frame'</span><span class="p">,</span> <span class="s1">'Max Pixel Intensity'</span><span class="p">)</span>
</pre></div>
</div>
</div>
</div>
<div class="output_wrapper">
<div class="output">
<div class="output_area">
<div class="prompt"></div>
<div class="output_png output_subarea ">
<img src="data:image/png;base64,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
"
>
</div>
</div>
</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<p>This looks very promising. Looks like we can threshold the max values to determine our on/off points.</p>
</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In [9]:</div>
<div class="inner_cell">
<div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="n">threshold</span> <span class="o">=</span> <span class="mi">125</span>
<span class="n">signal_crop</span> <span class="o">=</span> <span class="n">fmax_crop</span> <span class="o">></span> <span class="n">threshold</span>
</pre></div>
</div>
</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In [10]:</div>
<div class="inner_cell">
<div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="n">plot</span><span class="p">(</span><span class="n">signal_crop</span><span class="p">,</span> <span class="mi">200</span><span class="p">,</span> <span class="s1">'Signal value by frame'</span><span class="p">,</span> <span class="s1">'Frame'</span><span class="p">,</span> <span class="s1">'Signal (high/low)'</span><span class="p">)</span>
</pre></div>
</div>
</div>
</div>
<div class="output_wrapper">
<div class="output">
<div class="output_area">
<div class="prompt"></div>
<div class="output_png output_subarea ">
<img src="data:image/png;base64,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
"
>
</div>
</div>
</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<p>To turn this into Morse Code, we need to be able to distingush dots, dashes, letter breaks and word breaks. Each of those is determined by the length of a 'high' or 'low' run, and those runs are determined by the transition edges. So lets find the indexes of the transition edges, and see what our run lengths are.</p>
</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In [11]:</div>
<div class="inner_cell">
<div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="n">signal_crop</span> <span class="o">=</span> <span class="n">signal_crop</span><span class="o">.</span><span class="n">astype</span><span class="p">(</span><span class="nb">int</span><span class="p">)</span>
<span class="n">edges_crop</span> <span class="o">=</span> <span class="n">signal_crop</span><span class="p">[</span><span class="mi">1</span><span class="p">:]</span> <span class="o">-</span> <span class="n">signal_crop</span><span class="p">[:</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span>
<span class="n">edge_crop_idx</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">where</span><span class="p">(</span><span class="n">edges_crop</span> <span class="o">!=</span> <span class="mi">0</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
</pre></div>
</div>
</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In [12]:</div>
<div class="inner_cell">
<div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="k">def</span> <span class="nf">signal_runs</span><span class="p">(</span><span class="n">edges</span><span class="p">,</span> <span class="n">edge_idx</span><span class="p">):</span>
<span class="sd">"""Returns number of frames each 'high' and 'low' run are."""</span>
<span class="n">runs</span> <span class="o">=</span> <span class="n">edge_idx</span> <span class="o">-</span> <span class="n">np</span><span class="o">.</span><span class="n">concatenate</span><span class="p">((</span><span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">([</span><span class="mi">0</span><span class="p">],</span> <span class="n">dtype</span><span class="o">=</span><span class="nb">int</span><span class="p">),</span> <span class="n">edge_idx</span><span class="p">[:</span><span class="o">-</span><span class="mi">1</span><span class="p">]))</span>
<span class="k">if</span> <span class="n">edges</span><span class="p">[</span><span class="n">edge_idx</span><span class="p">[</span><span class="mi">0</span><span class="p">]]</span> <span class="o">></span> <span class="mi">0</span><span class="p">:</span>
<span class="c1"># First transition was low to high.</span>
<span class="n">highs</span> <span class="o">=</span> <span class="n">runs</span><span class="p">[</span><span class="mi">1</span><span class="p">::</span><span class="mi">2</span><span class="p">]</span>
<span class="n">lows</span> <span class="o">=</span> <span class="n">runs</span><span class="p">[::</span><span class="mi">2</span><span class="p">]</span>
<span class="k">else</span><span class="p">:</span>
<span class="c1"># First transition was high to low.</span>
<span class="n">highs</span> <span class="o">=</span> <span class="n">runs</span><span class="p">[::</span><span class="mi">2</span><span class="p">]</span>
<span class="n">lows</span> <span class="o">=</span> <span class="n">runs</span><span class="p">[</span><span class="mi">1</span><span class="p">::</span><span class="mi">2</span><span class="p">]</span>
<span class="k">return</span> <span class="n">highs</span><span class="p">,</span> <span class="n">lows</span>
</pre></div>
</div>
</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In [13]:</div>
<div class="inner_cell">
<div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="n">highs</span><span class="p">,</span> <span class="n">lows</span> <span class="o">=</span> <span class="n">signal_runs</span><span class="p">(</span><span class="n">edges_crop</span><span class="p">,</span> <span class="n">edge_crop_idx</span><span class="p">)</span>
</pre></div>
</div>
</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In [14]:</div>
<div class="inner_cell">
<div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="n">histogram</span><span class="p">(</span><span class="n">highs</span><span class="p">,</span> <span class="s1">'Highs'</span><span class="p">,</span> <span class="s1">'Duration (frames)'</span><span class="p">)</span>
<span class="n">histogram</span><span class="p">(</span><span class="n">lows</span><span class="p">,</span> <span class="s1">'Lows'</span><span class="p">,</span> <span class="s1">'Duration (frames)'</span><span class="p">)</span>
</pre></div>
</div>
</div>
</div>
<div class="output_wrapper">
<div class="output">
<div class="output_area">
<div class="prompt"></div>
<div class="output_png output_subarea ">
<img src="data:image/png;base64,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
"
>
</div>
</div>
<div class="output_area">
<div class="prompt"></div>
<div class="output_png output_subarea ">
<img src="data:image/png;base64,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
"
>
</div>
</div>
</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<p>'High' run durations are mostly 6 or 18 frames in length, which makes sense since a 'dash' is supposed to be three times longer than a 'dot' in Morse Code. 'Low' run durations are mostly 6, 18, and 43 frames in length, corresponding to 'high' signal separations, symbol separations, and word separations respectively.</p>
<p>We have all the information we need. Now we need a function to decode it all.</p>
</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h2 id="Decoding-the-Message">Decoding the Message<a class="anchor-link" href="#Decoding-the-Message">¶</a></h2>
</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In [15]:</div>
<div class="inner_cell">
<div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="k">def</span> <span class="nf">morse_decode</span><span class="p">(</span><span class="n">edges</span><span class="p">,</span> <span class="n">edge_idx</span><span class="p">,</span> <span class="n">dot_dash_boundary</span><span class="p">,</span> <span class="n">dash_space_boundary</span><span class="p">):</span>
<span class="sd">"""Decode Morse Code message in `edges` and `edge_idx`."""</span>
<span class="n">morse_lookup</span> <span class="o">=</span> <span class="p">{</span>
<span class="s1">'.-'</span><span class="p">:</span> <span class="s1">'A'</span><span class="p">,</span>
<span class="s1">'-...'</span><span class="p">:</span> <span class="s1">'B'</span><span class="p">,</span>
<span class="s1">'-.-.'</span><span class="p">:</span> <span class="s1">'C'</span><span class="p">,</span>
<span class="s1">'-..'</span><span class="p">:</span> <span class="s1">'D'</span><span class="p">,</span>
<span class="s1">'.'</span><span class="p">:</span> <span class="s1">'E'</span><span class="p">,</span>
<span class="s1">'..-.'</span><span class="p">:</span> <span class="s1">'F'</span><span class="p">,</span>
<span class="s1">'--.'</span><span class="p">:</span> <span class="s1">'G'</span><span class="p">,</span>
<span class="s1">'....'</span><span class="p">:</span> <span class="s1">'H'</span><span class="p">,</span>
<span class="s1">'..'</span><span class="p">:</span> <span class="s1">'I'</span><span class="p">,</span>
<span class="s1">'.---'</span><span class="p">:</span> <span class="s1">'J'</span><span class="p">,</span>
<span class="s1">'-.-'</span><span class="p">:</span> <span class="s1">'K'</span><span class="p">,</span>
<span class="s1">'.-..'</span><span class="p">:</span> <span class="s1">'L'</span><span class="p">,</span>
<span class="s1">'--'</span><span class="p">:</span> <span class="s1">'M'</span><span class="p">,</span>
<span class="s1">'-.'</span><span class="p">:</span> <span class="s1">'N'</span><span class="p">,</span>
<span class="s1">'---'</span><span class="p">:</span> <span class="s1">'O'</span><span class="p">,</span>
<span class="s1">'.--.'</span><span class="p">:</span> <span class="s1">'P'</span><span class="p">,</span>
<span class="s1">'--.-'</span><span class="p">:</span> <span class="s1">'Q'</span><span class="p">,</span>
<span class="s1">'.-.'</span><span class="p">:</span> <span class="s1">'R'</span><span class="p">,</span>
<span class="s1">'...'</span><span class="p">:</span> <span class="s1">'S'</span><span class="p">,</span>
<span class="s1">'-'</span><span class="p">:</span> <span class="s1">'T'</span><span class="p">,</span>
<span class="s1">'..-'</span><span class="p">:</span> <span class="s1">'U'</span><span class="p">,</span>
<span class="s1">'...-'</span><span class="p">:</span> <span class="s1">'V'</span><span class="p">,</span>
<span class="s1">'.--'</span><span class="p">:</span> <span class="s1">'W'</span><span class="p">,</span>
<span class="s1">'-..-'</span><span class="p">:</span> <span class="s1">'X'</span><span class="p">,</span>
<span class="s1">'-.--'</span><span class="p">:</span> <span class="s1">'Y'</span><span class="p">,</span>
<span class="s1">'--..'</span><span class="p">:</span> <span class="s1">'Z'</span><span class="p">,</span>
<span class="s1">'.----'</span><span class="p">:</span> <span class="s1">'1'</span><span class="p">,</span>
<span class="s1">'..---'</span><span class="p">:</span> <span class="s1">'2'</span><span class="p">,</span>
<span class="s1">'...--'</span><span class="p">:</span> <span class="s1">'3'</span><span class="p">,</span>
<span class="s1">'....-'</span><span class="p">:</span> <span class="s1">'4'</span><span class="p">,</span>
<span class="s1">'.....'</span><span class="p">:</span> <span class="s1">'5'</span><span class="p">,</span>
<span class="s1">'-....'</span><span class="p">:</span> <span class="s1">'6'</span><span class="p">,</span>
<span class="s1">'--...'</span><span class="p">:</span> <span class="s1">'7'</span><span class="p">,</span>
<span class="s1">'---..'</span><span class="p">:</span> <span class="s1">'8'</span><span class="p">,</span>
<span class="s1">'----.'</span><span class="p">:</span> <span class="s1">'9'</span><span class="p">,</span>
<span class="s1">'-----'</span><span class="p">:</span> <span class="s1">'0'</span>
<span class="p">}</span>
<span class="n">message</span> <span class="o">=</span> <span class="p">[]</span>
<span class="n">morse</span> <span class="o">=</span> <span class="p">[]</span>
<span class="n">signal_high</span> <span class="o">=</span> <span class="n">edges</span><span class="p">[</span><span class="n">edge_idx</span><span class="p">[</span><span class="mi">0</span><span class="p">]]</span> <span class="o"><</span> <span class="mi">0</span>
<span class="n">durations</span> <span class="o">=</span> <span class="n">edge_idx</span> <span class="o">-</span> <span class="n">np</span><span class="o">.</span><span class="n">concatenate</span><span class="p">((</span><span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">([</span><span class="mi">0</span><span class="p">],</span> <span class="n">dtype</span><span class="o">=</span><span class="nb">int</span><span class="p">),</span> <span class="n">edge_idx</span><span class="p">[:</span><span class="o">-</span><span class="mi">1</span><span class="p">]))</span>
<span class="k">for</span> <span class="n">duration</span> <span class="ow">in</span> <span class="n">durations</span><span class="o">.</span><span class="n">tolist</span><span class="p">():</span>
<span class="k">if</span> <span class="n">signal_high</span><span class="p">:</span>
<span class="c1"># `duration` is for a 'high' signal.</span>
<span class="n">morse</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s1">'.'</span> <span class="k">if</span> <span class="n">duration</span> <span class="o"><</span> <span class="n">dot_dash_boundary</span> <span class="k">else</span> <span class="s1">'-'</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="c1"># `duration` is for a 'low' signal.</span>
<span class="c1"># We can ignore signal ('.'/'-') boundaries.</span>
<span class="k">if</span> <span class="n">duration</span> <span class="o">></span> <span class="n">dot_dash_boundary</span><span class="p">:</span>
<span class="c1"># Symbol boundary. Decode.</span>
<span class="n">message</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">morse_lookup</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">''</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">morse</span><span class="p">),</span> <span class="s1">'?'</span><span class="p">))</span>
<span class="n">morse</span> <span class="o">=</span> <span class="p">[]</span> <span class="c1"># Reset signal aggregation.</span>
<span class="k">if</span> <span class="n">duration</span> <span class="o">></span> <span class="n">dash_space_boundary</span><span class="p">:</span>
<span class="c1"># Word boundary. Inject word break into message.</span>
<span class="n">message</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s1">' '</span><span class="p">)</span>
<span class="n">signal_high</span> <span class="o">=</span> <span class="ow">not</span> <span class="n">signal_high</span>
<span class="k">return</span> <span class="s1">''</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">message</span><span class="p">)</span>
</pre></div>
</div>
</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In [16]:</div>
<div class="inner_cell">
<div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="n">morse_decode</span><span class="p">(</span><span class="n">edges_crop</span><span class="p">,</span> <span class="n">edge_crop_idx</span><span class="p">,</span> <span class="mi">10</span><span class="p">,</span> <span class="mi">30</span><span class="p">)</span>
</pre></div>
</div>
</div>
</div>
<div class="output_wrapper">
<div class="output">
<div class="output_area">
<div class="prompt output_prompt">Out[16]:</div>
<div class="output_text output_subarea output_execute_result">
<pre>'WUGHT WHAT HATH GOD WROUGLT WHAT HATH GOD WROUGHT WHAT HATH GOD WROUGHT WHAT HATH GOD WROUGHT WHAT HATH GOD WROUGHT WHAT HATH GOD WROUGHT WHAT HATH GOD WROUGHT EMHAT HATH GOD WROUGHT WHAT HATH GOD WROUGHT WHAT HATH GOD WROUGHT WHAT HATH GOD WROUGHT WHAT HATH GOD WROUGHT WHAT HATH GOD WROUGHT WHAT HATH GOD WROUGHT WHAT HATH GOD WROUGHT WHAT HATH GOD WROUGHT WHAT HATH GOD WROUGHT WH'</pre>
</div>
</div>
</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<p><a href="https://en.wikipedia.org/wiki/Baltimore%E2%80%93Washington_telegraph_line">"What hath god wrought"</a>, an appropriate first message for a Morse signalling lamp. No doubt UCSD will change the message occasionally.</p>
</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h2 id="Beyond-Softballs">Beyond Softballs<a class="anchor-link" href="#Beyond-Softballs">¶</a></h2><p>Thresholding works well for the cropped video. And the original video looks like it would have a good signal to noise ratio as well. Let's see how this code works on the uncropped, grayscale video (Note: this takes quite a bit longer to run than with the cropped video).</p>
</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In [17]:</div>
<div class="inner_cell">
<div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="n">video</span> <span class="o">=</span> <span class="s1">'20181110-854x480-gray.mov'</span>
<span class="n">fmax_full</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">([</span><span class="n">m</span> <span class="k">for</span> <span class="n">m</span> <span class="ow">in</span> <span class="n">frame_maxes</span><span class="p">(</span><span class="n">video</span><span class="p">)],</span> <span class="n">dtype</span><span class="o">=</span><span class="nb">int</span><span class="p">)</span>
<span class="n">plot</span><span class="p">(</span><span class="n">fmax_full</span><span class="p">,</span> <span class="mi">200</span><span class="p">,</span> <span class="s1">'Max Pixel Intensity'</span><span class="p">,</span> <span class="s1">'Frame'</span><span class="p">,</span> <span class="s1">'Max Pixel Intensity'</span><span class="p">)</span>
</pre></div>
</div>
</div>
</div>
<div class="output_wrapper">
<div class="output">
<div class="output_area">
<div class="prompt"></div>
<div class="output_png output_subarea ">
<img src="data:image/png;base64,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
"
>
</div>
</div>
</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<p>For this to work, the threshold value will need to be raised. This makes sense, since there are brighter static pixels in the image from the tower.</p>
</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In [18]:</div>
<div class="inner_cell">
<div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="n">threshold</span> <span class="o">=</span> <span class="mi">220</span>
<span class="n">signal_full</span> <span class="o">=</span> <span class="n">fmax_full</span> <span class="o">></span> <span class="n">threshold</span>
<span class="n">signal_full</span> <span class="o">=</span> <span class="n">signal_full</span><span class="o">.</span><span class="n">astype</span><span class="p">(</span><span class="nb">int</span><span class="p">)</span>
<span class="n">edges_full</span> <span class="o">=</span> <span class="n">signal_full</span><span class="p">[</span><span class="mi">1</span><span class="p">:]</span> <span class="o">-</span> <span class="n">signal_full</span><span class="p">[:</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span>
<span class="n">edge_full_idx</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">where</span><span class="p">(</span><span class="n">edges_full</span> <span class="o">!=</span> <span class="mi">0</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
<span class="n">morse_decode</span><span class="p">(</span><span class="n">edges_full</span><span class="p">,</span> <span class="n">edge_full_idx</span><span class="p">,</span> <span class="mi">10</span><span class="p">,</span> <span class="mi">30</span><span class="p">)</span>
</pre></div>
</div>
</div>
</div>
<div class="output_wrapper">
<div class="output">
<div class="output_area">
<div class="prompt output_prompt">Out[18]:</div>
<div class="output_text output_subarea output_execute_result">
<pre>'WUGHT WHAT HATH GOD WROUGLT WHAT HATH GOD WROUGHT WHAT HATH GOD WROUGHT WHAT HATH GOD WROUGHT WHAT HATH GOD WROUGHT WHAT HATH GOD WROUGHT WHAT HATH GOD WROUGHT EMHAT HATH GOD WROUGHT WHAT HATH GOD WROUGHT WHAT HATH GOD WROUGHT WHAT HATH GOD WROUGHT WHAT HATH GOD WROUGHT WHAT HATH GOD WROUGHT WHAT HATH GOD WROUGHT WHAT HATH GOD WROUGHT WHAT HATH GOD WROUGHT WHAT HATH GOD WROUGHT WH'</pre>
</div>
</div>
</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<p>While this is all well and good, manually determining the threshold every time I want to decode a video of the signalling tower goes against my laziness principle. What we need is an automatic threshold detector.</p>
<p>Looking at the <code>fmax</code> plots, we can see that the pixel intensities cluster around two values. This can be more easily seen with a histogram.</p>
</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In [19]:</div>
<div class="inner_cell">
<div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="n">histogram</span><span class="p">(</span><span class="n">fmax_full</span><span class="p">,</span> <span class="s1">'Max Intensities by Frame (full)'</span><span class="p">,</span> <span class="s1">'Intensities'</span><span class="p">)</span>
<span class="n">histogram</span><span class="p">(</span><span class="n">fmax_crop</span><span class="p">,</span> <span class="s1">'Max Intensities by Frame (crop)'</span><span class="p">,</span> <span class="s1">'Intensities'</span><span class="p">)</span>
</pre></div>
</div>
</div>
</div>
<div class="output_wrapper">
<div class="output">
<div class="output_area">
<div class="prompt"></div>
<div class="output_png output_subarea ">
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAY4AAAEWCAYAAABxMXBSAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvIxREBQAAHqBJREFUeJzt3XucHFWd9/HP18SACJhABjYmkQkQL9FVzA4YFy8ICASUsD4i8KgkimZZQWUVd4PsCuuuK64XFBdxo+QhXB4iIi7RhMXIRbxAYLgFQkBGRDIEk4EQQFEw+Ns/6gyp9HTPdM10d81Mvu/Xq19ddep01anupL9zTlVXKSIwMzOr1wvKboCZmY0sDg4zMyvEwWFmZoU4OMzMrBAHh5mZFeLgMDOzQhwcZjmSVks6oJ/lV0ma2+BtXi/pQ41c50gg6fOSTsnN/52k9ZJ+J2nXAV47T9LPcvMhae80/RVJJzav5ebgMAAkPSjpWUkTK8rvSP8p2xu8vfa03rF11n/+i6GZIuLVEXF92uaZki6uWD47IhY3ux2DkXtPf5d73Fl2u6qR1AYcD/xXmn8h8BXgkIjYMSIeG8LqvwicLmnc0Ftq1Tg4LO/XwHG9M5L+EnhRec2xQRqfvnx3jIjXVatQb2A30TxgeUT8Ic3vDmwPrB7qiiPiEeBe4Mihrsuqc3BY3kVkfwX2mgtcmK8g6QhJt0t6UtJaSWfmlh0j6QFJO6f52ZJ+m/667JekCySdK2mZpKckrZS0V1p2Q6p2Z/or+phU/o7UI9ok6ReSXptb34OSTpW0StITkr4jafu0bKKkH6bXbZT0U0kvyL3uYEmHAZ8Gjsn/5V45rCTpg5LWSHpc0tWS9kjlknS2pA1p+6skvaaft2AvSTenuldK2iWtZ5mkj1a8V6skHTXQe1rxmnmSfp7atBE4U9Jekq6V9JikRyVdIml8xXv4qbS930s6X9LuabjuKUk/ljQhV39W+hw2SbpT/Qz5AbOBn6TXvRy4L5VvSm3q0yOtfO8HcD1wRJ11raiI8MMPgAeBg8n+A78KGAOsBfYAAmhP9Q4A/pLsj47XAuuBo3LruQS4ANgVWAe8o8b22tN6x6b5C4CNwH7A2LSeJbn6Aeydm58JbADekNo6N+3Ddrn9uRl4KbALsAY4MS37PPBN4IXp8WZA+fchTZ8JXFzR7uuBD6Xpo4Cu9H6NBf4J+EVadihwKzAeUKozqcZ7cT3wMPAa4MXA93q3C7wHWJmr+zrgMWDcQO9pxbJ5wGbgo6mtLwL2Bt4ObAe0ATcAX634N3ETWW9gcnq/bwNen15zLXBGqjs5tevw9G/j7Wm+rcY+9wD79vPvoc++VLz384Cf9fPv413AbWX/vxqtD/c4rFJvr+PtZN39h/MLI+L6iLgrIv4cEauAS4G35qqcBBxI9p/8BxHxwwLbviIibo6IzWTBsU8/dT8M/FdErIyI5yI77vAMMCtX55yIWBcRG4Ef5Nb3J2ASsEdE/Ckifhrp26agvwU+HxFrUpv/Hdgn9Tr+BOwEvJIslNZENoRSy0URcXdE/B74Z+A9ksYAVwLTJU1P9d4PfCcinu1nXY+mv/o3STo1V74uIr4eEZsj4g8R0RURKyLimYjoITvG8NaKdX09ItZHxMPAT8lC7PaIeAb4PlmIALyPbOhpefq3sQLoJAuSasYDT/WzD0P1VNqGNYGDwypdBPxfsr/oLqxcKOkNkq6T1CPpCeBE4PkD6hGxCfgu2V/PXy647d/mpp8Gduyn7h7AJ3NfkJuAqWQ9jIHW90WynsKP0tDagoLtzLfha7ntbyTrXUyOiGuB/wTOBdZLWtg7hFfD2tz0b8h6QhPTF/RlwPvScNpxZJ9RfyZGxPj0+FKNbSBpN0lLJD0s6UngYnKfZbI+N/2HKvO97+kewNEVn8ebyAK6msfJgrVZdgI2NXH92zQHh20lIn5DdpD8cOCKKlX+P7AUmBoRLyEb8lHvQkn7AB8k64mc08SmrgU+l/uCHB8RO0TEpQO9MCKeiohPRsSewDuBT0g6qFrVOtrwtxVteFFE/CJt55yI+Cvg1cDLgU/1s66puemXkfVYHk3zi4H3AgcBT0fEjQPtYw2V+/P5VPbaiNiZrNegPq+qz1qyXlP+vXhxRJxVo/4qsveklt+n5x1yZX9RoD2vAoblGWWjgYPDqjkBODANm1TaCdgYEX+UtB9Z7wSAdPD5YrKDyh8AJkv6SIPatB7YMzf/LeDE1AOSpBcrO3A/4F+x6aD63pIEPAk8lx7Vttnee+C8im8Cp0l6dVrvSyQdnab3TW17IdmX4B9rbKPX+yTNkLQD8Fng8oh4DiAFxZ/JenAD9TaK2An4HdkB6cn0H2wDuRh4p6RDJY2RtL2kAyRNqVF/OX2HxZ6Xhs4eJntfxkj6ILBXgfa8FbiqQH0rwMFhfUTEryKis8bijwCflfQU8BmyYZRenwe6I+K8NMTyPuDfcuPzQ3EmsDgNg7wnte/DZMNBj5MNPc2rc13TgR+TfWneCHwj0m83Knw3PT8m6bbKhRHxfeALwJI01HM32dlCADuThdvjZENPjwFfqlxHzkVkJwj8luy01I9VLL+Q7KSEi2mcfyE7yeAJYBnVe5h1iYi1wByyPxp6yHogn6L2d8yFwOGS+jvd+8NpHY+R9dp+UU9bJE0CZgD/XVfjrbDeM0nMbBiTdDwwPyLeVHZbGkXSvwMbIuKrDV7vl4FfRcQ3Grle28LBYTbMpeGra8l6Rn1OWDBrNQ9VmQ1jkg4lG/pZT3Ziglnp3OMwM7NC3OMwM7NCyr7QWVNMnDgx2tvby26GmdmIcuuttz4aEQNeW25UBkd7ezudnbXOJjUzs2ok/aaeeh6qMjOzQhwcZmZWiIPDzMwKcXCYmVkhDg4zMyvEwWFmZoU4OMzMrJCmBYekRZI2SLq7ovyjku6TtFrSf+TKT5PUlZYdmis/LJV1DeFObWZm1iDN/AHgBWT3Snj+ap6S3kZ2zf7XRsQzknZL5TOAY8muuf9S4MeSeu8Odi7Z/a+7gVskLY2Ie5rYbjMz60fTehwRcQPZPZjz/g44K93kh4jYkMrnAEsi4pmI+DXZTXn2S4+uiHggIp4FlqS6ZmZWoX3BspZsp9XHOF4OvFnSSkk/kbRvKp9MdsewXt2prFa5mZmVpNXXqhoLTABmAfsCl0naE1CVukH1YKt6HXhJ84H5AC972csa0lgzM+ur1T2ObuCKyNwM/BmYmMqn5upNAdb1U95HRCyMiI6I6GhrG/DijmZmNkitDo7/Bg4ESAe/xwGPAkuBYyVtJ2kaMB24GbgFmC5pmqRxZAfQl7a4zWZmltO0oSpJlwIHABMldQNnAIuARekU3WeBuZHdgnC1pMuAe4DNwEkR8Vxaz8nA1cAYYFFErG5Wm83MbGBNC46IOK7GovfVqP854HNVypcDyxvYNDMzGwL/ctzMzApxcJiZWSEODjMzK8TBYWZmhTg4zMysEAeHmZkV4uAwM7NCHBxmZlaIg8PMzApxcJiZWSEODjMzK8TBYWZmhTg4zMysEAeHmZkV4uAwM7NCHBxmZlaIg8PMzAppWnBIWiRpQ7pNbOWyUyWFpIlpXpLOkdQlaZWkmbm6cyXdnx5zm9VeMzOrTzN7HBcAh1UWSpoKvB14KFc8G5ieHvOB81LdXcjuVf4GYD/gDEkTmthmMzMbQNOCIyJuADZWWXQ28A9A5MrmABdG5iZgvKRJwKHAiojYGBGPAyuoEkZmZtY6LT3GIelI4OGIuLNi0WRgbW6+O5XVKq+27vmSOiV19vT0NLDVZmaW17LgkLQDcDrwmWqLq5RFP+V9CyMWRkRHRHS0tbUNvqFmZtavVvY49gKmAXdKehCYAtwm6S/IehJTc3WnAOv6KTczs5K0LDgi4q6I2C0i2iOinSwUZkbEb4GlwPHp7KpZwBMR8QhwNXCIpAnpoPghqczMzErSzNNxLwVuBF4hqVvSCf1UXw48AHQB3wI+AhARG4F/BW5Jj8+mMjMzK8nYZq04Io4bYHl7bjqAk2rUWwQsamjjzMxs0PzLcTMzK8TBYWZmhTg4zMysEAeHmZkV4uAwM7NCHBxmZlaIg8PMzApxcJiZWSEODjMzK8TBYWZmhTg4zMysEAeHmZkV4uAwM7NCHBxmZlaIg8PMzApxcJiZWSEODjMzK6SZt45dJGmDpLtzZV+UdK+kVZK+L2l8btlpkrok3Sfp0Fz5YamsS9KCZrXXzMzq08wexwXAYRVlK4DXRMRrgV8CpwFImgEcC7w6veYbksZIGgOcC8wGZgDHpbpmZlaSpgVHRNwAbKwo+1FEbE6zNwFT0vQcYElEPBMRvwa6gP3SoysiHoiIZ4Elqa6ZmZWkzGMcHwSuStOTgbW5Zd2prFZ5H5LmS+qU1NnT09OE5pqZGZQUHJJOBzYDl/QWVakW/ZT3LYxYGBEdEdHR1tbWmIaamVkfY1u9QUlzgXcAB0VEbwh0A1Nz1aYA69J0rXIzMytBS3sckg4D/hE4MiKezi1aChwraTtJ04DpwM3ALcB0SdMkjSM7gL60lW02M7OtNa3HIelS4ABgoqRu4Ayys6i2A1ZIArgpIk6MiNWSLgPuIRvCOikinkvrORm4GhgDLIqI1c1qs5mZDaxpwRERx1UpPr+f+p8DPlelfDmwvIFNMzOzIfAvx83MrBAHh5mZFeLgMDOzQhwcZmZWiIPDzMwKcXCYmVkhDg4zMyvEwWFmZoU4OMzMrBAHh5mZFeLgMDOzQhwcZmZWiIPDzMwKcXCYmVkhDg4zMyvEwWFmZoU0LTgkLZK0QdLdubJdJK2QdH96npDKJekcSV2SVkmamXvN3FT//nS/cjMzK1EzexwXAIdVlC0AromI6cA1aR5gNtl9xqcD84HzIAsaslvOvgHYDzijN2zMzKwcTQuOiLgB2FhRPAdYnKYXA0flyi+MzE3AeEmTgEOBFRGxMSIeB1bQN4zMzKyFWn2MY/eIeAQgPe+WyicDa3P1ulNZrfI+JM2X1Cmps6enp+ENNzOzzHA5OK4qZdFPed/CiIUR0RERHW1tbQ1tnJmZbdHq4FifhqBIzxtSeTcwNVdvCrCun3IzMytJq4NjKdB7ZtRc4Mpc+fHp7KpZwBNpKOtq4BBJE9JB8UNSmZmZlWRss1Ys6VLgAGCipG6ys6POAi6TdALwEHB0qr4cOBzoAp4GPgAQERsl/StwS6r32YioPOBuZmYt1LTgiIjjaiw6qErdAE6qsZ5FwKIGNs3MzIZguBwcNzOzEcLBYWZmhdQVHJL2r6fMzMxGv3p7HF+vs8zMzEa5fg+OS3oj8NdAm6RP5BbtDIxpZsPMzGx4GuisqnHAjqneTrnyJ4F3N6tRZmY2fPUbHBHxE+Anki6IiN+0qE1mZjaM1fs7ju0kLQTa86+JiAOb0SgzMxu+6g2O7wLfBL4NPNe85piZ2XBXb3BsjojzmtoSMzMbEeo9HfcHkj4iaVK6/esu6e58Zma2jam3x9F7RdtP5coC2LOxzTEzs+GuruCIiGnNboiZmY0MdQWHpOOrlUfEhY1tjpmZDXf1DlXtm5venuzS6LcBDg4zs21MvUNVH83PS3oJcFFTWmRmZsPaYC+r/jQwvZENMTOzkaHeYxw/IDuLCrKLG74KuGywG5X098CH0jrvIrtV7CRgCbAL2TDY+yPiWUnbkQ2J/RXwGHBMRDw42G2bmdnQ1HuM40u56c3AbyKiezAblDQZ+BgwIyL+IOky4Fiye46fHRFLJH0TOAE4Lz0/HhF7SzoW+AJwzGC2bWZmQ1fXUFW62OG9ZFfInQA8O8TtjgVeJGkssAPwCHAgcHlavhg4Kk3PSfOk5QdJ0hC3b2Zmg1TvHQDfA9wMHA28B1gpaVCXVY+Ih8l6MA+RBcYTwK3ApojYnKp1A5PT9GRgbXrt5lR/1yptnC+pU1JnT0/PYJpmZmZ1qHeo6nRg34jYACCpDfgxW3oIdZM0gawXMQ3YRHYBxdlVqvYeU6nWu4g+BRELgYUAHR0dfZabmVlj1HtW1Qt6QyN5rMBrKx0M/DoieiLiT8AVZHcZHJ+GrgCmAOvSdDcwFSAtfwmwcZDbNjOzIar3y/9/JF0taZ6kecAyYPkgt/kQMEvSDulYxUHAPcB1bLmr4FzgyjS9lC3Xyno3cG1EuEdhZlaSge45vjewe0R8StK7gDeRDR3dCFwymA1GxEpJl5OdcrsZuJ1siGkZsETSv6Wy89NLzgcuktRF1tM4djDbNTOzxhjoGMdXgU8DRMQVZMNKSOpIy945mI1GxBnAGRXFDwD7Van7R7KD8mZmNgwMNFTVHhGrKgsjopPsNrJmZraNGSg4tu9n2Ysa2RAzMxsZBgqOWyR9uLJQ0glkv70wM7NtzEDHOE4Bvi/pvWwJig5gHPA3zWyYmZkNT/0GR0SsB/5a0tuA16TiZRFxbdNbZmZmw1K99+O4jux3FmZmto0b7K+/zcxsG+XgMDOzQhwcZmZWiIPDzMwKcXCYmVkhDg4zMyvEwWFmZoU4OMzMrBAHh5mZFeLgMDOzQhwcZmZWSCnBIWm8pMsl3StpjaQ3StpF0gpJ96fnCamuJJ0jqUvSKkkzy2izmZllyupxfA34n4h4JfA6YA2wALgmIqYD16R5gNnA9PSYD5zX+uaamVmvlgeHpJ2BtwDnA0TEsxGxCZgDLE7VFgNHpek5wIWRuQkYL2lSi5ttZmZJGT2OPYEe4P9Jul3StyW9GNg9Ih4BSM+7pfqTgbW513ensq1Imi+pU1JnT09Pc/fAzGwbVkZwjAVmAudFxOuB37NlWKoaVSmLPgURCyOiIyI62traGtNSMzPro4zg6Aa6I2Jlmr+cLEjW9w5BpecNufpTc6+fAqxrUVvNzKxCy4MjIn4LrJX0ilR0EHAPsBSYm8rmAlem6aXA8ensqlnAE71DWmZm1np13Tq2CT4KXCJpHPAA8AGyELtM0gnAQ8DRqe5y4HCgC3g61TUzs5KUEhwRcQfQUWXRQVXqBnBS0xtlZmZ18S/HzcysEAeHmZkV4uAwM7NCHBxmZlaIg8PMzApxcJiZWSEODjMzK8TBYWZmhTg4zMysEAeHmZkV4uAwM7NCHBxmZlaIg8PMzApxcJiZWSEODjMzK8TBYWZmhZQWHJLGSLpd0g/T/DRJKyXdL+k76e6ASNouzXel5e1ltdnMGq99wbKym2AFldnj+DiwJjf/BeDsiJgOPA6ckMpPAB6PiL2Bs1M9MzMrSSnBIWkKcATw7TQv4EDg8lRlMXBUmp6T5knLD0r1zcysBGX1OL4K/APw5zS/K7ApIjan+W5gcpqeDKwFSMufSPW3Imm+pE5JnT09Pc1su5nZNq3lwSHpHcCGiLg1X1ylatSxbEtBxMKI6IiIjra2tga01Mzq5eMU25axJWxzf+BISYcD2wM7k/VAxksam3oVU4B1qX43MBXoljQWeAmwsfXNNjMzKKHHERGnRcSUiGgHjgWujYj3AtcB707V5gJXpumlaZ60/NqI6NPjMLNyudex7RhOv+P4R+ATkrrIjmGcn8rPB3ZN5Z8AFpTUPjMbwFDDw+EzMpQxVPW8iLgeuD5NPwDsV6XOH4GjW9owMytV+4JlPHjWEWU3w2oYTj0OMxulavUk3MMYmRwcZmajQCtD2MFhZoW0L1jW1C8p90KGPweHmQ3KUL7gHQ4jm4PDzMwKcXCYWSnc6xi5HBxmZlaIg8PMzApxcJhZ3QYzvOQhqdHHwWFmLeEAGT0cHGbWUA6I1mv1e+7gMDOzQhwcZtY07n2MTg4OMxuWHDrDl4PDzMwKcXCYmVkhDg4zMyuk5cEhaaqk6yStkbRa0sdT+S6SVki6Pz1PSOWSdI6kLkmrJM1sdZvNzGyLMnocm4FPRsSrgFnASZJmkN1L/JqImA5cw5Z7i88GpqfHfOC81jfZzMx6tTw4IuKRiLgtTT8FrAEmA3OAxanaYuCoND0HuDAyNwHjJU1qcbPNrEQ+w2p4KfUYh6R24PXASmD3iHgEsnABdkvVJgNrcy/rTmWV65ovqVNSZ09PTzObbWYlcoiUr7TgkLQj8D3glIh4sr+qVcqiT0HEwojoiIiOtra2RjXTzIYJB8bwUUpwSHohWWhcEhFXpOL1vUNQ6XlDKu8GpuZePgVY16q2mtnw4fAYHso4q0rA+cCaiPhKbtFSYG6angtcmSs/Pp1dNQt4ondIy8yaz1/WVmlsCdvcH3g/cJekO1LZp4GzgMsknQA8BBydli0HDge6gKeBD7S2uWZmltfy4IiIn1H9uAXAQVXqB3BSUxtlZmZ18y/HzcysEAeHmdkIVdbxJweHmdXkA+NWjYPDzMwKcXCYmVkhDg4zMyvEwWFmZoU4OMysDx8Ut/44OMysqpEQHiOhjaORg8PMbAQqMzQdHGa2Ff8VbwNxcJiZWSEODjMb0dxDaj0Hh5mZFeLgMLMRb1vrdZS9vw4OMwPK/zKykcPBYWZmhYyY4JB0mKT7JHVJWlB2e8xGg/YFy0ZNT6PafozmfSvTiAgOSWOAc4HZwAzgOEkzym2V2cgz3L6ALFPrc6ksHy5B3/J7jg/SfkBXRDwAIGkJMAe4p9RWmQ0j7QuW8eBZR9Qs7/3CqVZvOHwZNVp/X8a970f+faj3fcm/l/2V57dRT/3e6Vrlw4kiouw2DEjSu4HDIuJDaf79wBsi4uRcnfnA/DT7CuC+IWxyIvDoEF4/0nh/Rzfv7+jWyP3dIyLaBqo0UnocqlK2VeJFxEJgYUM2JnVGREcj1jUSeH9HN+/v6FbG/o6IYxxANzA1Nz8FWFdSW8zMtmkjJThuAaZLmiZpHHAssLTkNpmZbZNGxFBVRGyWdDJwNTAGWBQRq5u4yYYMeY0g3t/Rzfs7urV8f0fEwXEzMxs+RspQlZmZDRMODjMzK8TBUWFbuLSJpAcl3SXpDkmdqWwXSSsk3Z+eJ5TdzsGStEjSBkl358qq7p8y56TPe5WkmeW1fHBq7O+Zkh5On/Edkg7PLTst7e99kg4tp9WDI2mqpOskrZG0WtLHU/mo/Hz72d9yP9+I8CM9yA68/wrYExgH3AnMKLtdTdjPB4GJFWX/ASxI0wuAL5TdziHs31uAmcDdA+0fcDhwFdlvhWYBK8tuf4P290zg1Cp1Z6R/19sB09K/9zFl70OBfZ0EzEzTOwG/TPs0Kj/ffva31M/XPY6tPX9pk4h4Fui9tMm2YA6wOE0vBo4qsS1DEhE3ABsrimvt3xzgwsjcBIyXNKk1LW2MGvtbyxxgSUQ8ExG/BrrI/t2PCBHxSETclqafAtYAkxmln28/+1tLSz5fB8fWJgNrc/Pd9P8hjVQB/EjSrelSLQC7R8QjkP1jBXYrrXXNUWv/RvNnfnIanlmUG3ocNfsrqR14PbCSbeDzrdhfKPHzdXBsbcBLm4wS+0fETLKrDZ8k6S1lN6hEo/UzPw/YC9gHeAT4ciofFfsraUfge8ApEfFkf1WrlI2G/S3183VwbG2buLRJRKxLzxuA75N1Zdf3duHT84byWtgUtfZvVH7mEbE+Ip6LiD8D32LLcMWI319JLyT7Er0kIq5IxaP28622v2V/vg6OrY36S5tIerGknXqngUOAu8n2c26qNhe4spwWNk2t/VsKHJ/OvpkFPNE75DGSVYzj/w3ZZwzZ/h4raTtJ04DpwM2tbt9gSRJwPrAmIr6SWzQqP99a+1v651v2WQPD7UF2FsYvyc5GOL3s9jRh//YkO+viTmB17z4CuwLXAPen513KbusQ9vFSsu77n8j+Ajuh1v6Rde3PTZ/3XUBH2e1v0P5elPZnVfoymZSrf3ra3/uA2WW3v+C+vols6GUVcEd6HD5aP99+9rfUz9eXHDEzs0I8VGVmZoU4OMzMrBAHh5mZFeLgMDOzQhwcZmZWiIPDLEfS7+qoc4qkHRq83ZdKujxN71NxtdMjR+uVmm1k8um4ZjmSfhcROw5Q50Gy3wM82qQ2zEvrP7kZ6zcbKvc4zKqQdICk6yVdLuleSZekXx9/DHgpcJ2k61LdQyTdKOk2Sd9N1xXqve/Jv6TyuyS9MpW/NXcfhdsl7SSpXdLd6YoFnwWOScuPkTRP0n+m17ZJ+p6kW9Jj/1rrLON9s22Dg8OsttcDp5Dd42BPsotDnkN27Z+3RcTbJE0E/gk4OLILR3YCn8it49FUfh5waio7FTgpIvYB3gz8obdyZJfz/wzwnYjYJyK+U9GmrwFnR8S+wP8Bvj3QOs0abWzZDTAbxm6OiG4ASXcA7cDPKurMIguWn2eXFWIccGNuee9F+G4F3pWmfw58RdIlwBUR0Z1eW4+DgRm5+jun3kWfdda7QrOiHBxmtT2Tm36O6v9fBKyIiOMGWMfzr4+IsyQtI7vm0E2SDgb+WGebXgC8MSIqexR91hkR99a5TrNCPFRlVtxTZLfxBLgJ2F/S3gCSdpD08v5eLGmviLgrIr5ANrT1yn7WX+lHwPMHzSXtU+c6zRrGwWFW3ELgKknXRUQPMA+4VNIqsiAZ6Ev7lHQg/E6yYxFXVSy/jmw46g5Jx1Qs+xjQke78dg9wYp3rNGsYn45rZmaFuMdhZmaFODjMzKwQB4eZmRXi4DAzs0IcHGZmVoiDw8zMCnFwmJlZIf8LZz27klgbZKsAAAAASUVORK5CYII=
"
>
</div>
</div>
<div class="output_area">
<div class="prompt"></div>
<div class="output_png output_subarea ">
<img src="data:image/png;base64,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
"
>
</div>
</div>
</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<p>Intuitively, a good threshold value looks like it would be halfway between the mean values of the two clusters. This can be calculated iteratively by guessing an initial threshold value (say, halfway between the min and max values), grouping the the signal into two bins (below and above the threshold), calculating the means of those bins, recomputing the threshold, and repeating until the threshold doesn't move (much).</p>
</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In [20]:</div>
<div class="inner_cell">
<div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="k">def</span> <span class="nf">compute_threshold</span><span class="p">(</span><span class="n">signal</span><span class="p">,</span> <span class="n">tolerance</span><span class="p">):</span>
<span class="sd">"""Return theshold value to split `signal` into two bins."""</span>
<span class="c1"># Initial threshold guess is the halfway point.</span>
<span class="n">threshold</span> <span class="o">=</span> <span class="n">signal</span><span class="o">.</span><span class="n">min</span><span class="p">()</span> <span class="o">+</span> <span class="p">((</span><span class="n">signal</span><span class="o">.</span><span class="n">max</span><span class="p">()</span> <span class="o">-</span> <span class="n">signal</span><span class="o">.</span><span class="n">min</span><span class="p">())</span> <span class="o">/</span> <span class="mi">2</span><span class="p">)</span>
<span class="n">last_threshold</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">while</span> <span class="nb">abs</span><span class="p">(</span><span class="n">threshold</span> <span class="o">-</span> <span class="n">last_threshold</span><span class="p">)</span> <span class="o">></span> <span class="n">tolerance</span><span class="p">:</span>
<span class="n">low</span> <span class="o">=</span> <span class="n">signal</span><span class="p">[</span><span class="n">signal</span> <span class="o"><</span> <span class="n">threshold</span><span class="p">]</span><span class="o">.</span><span class="n">mean</span><span class="p">()</span>
<span class="n">high</span> <span class="o">=</span> <span class="n">signal</span><span class="p">[</span><span class="n">signal</span> <span class="o">>=</span> <span class="n">threshold</span><span class="p">]</span><span class="o">.</span><span class="n">mean</span><span class="p">()</span>
<span class="n">last_threshold</span> <span class="o">=</span> <span class="n">threshold</span>
<span class="n">threshold</span> <span class="o">=</span> <span class="n">low</span> <span class="o">+</span> <span class="p">((</span><span class="n">high</span> <span class="o">-</span> <span class="n">low</span><span class="p">)</span> <span class="o">/</span> <span class="mi">2</span><span class="p">)</span>
<span class="k">return</span> <span class="n">threshold</span>
</pre></div>
</div>
</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In [21]:</div>
<div class="inner_cell">
<div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="n">compute_threshold</span><span class="p">(</span><span class="n">fmax_crop</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span> <span class="n">compute_threshold</span><span class="p">(</span><span class="n">fmax_full</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
</pre></div>
</div>
</div>
</div>
<div class="output_wrapper">
<div class="output">
<div class="output_area">
<div class="prompt output_prompt">Out[21]:</div>
<div class="output_text output_subarea output_execute_result">
<pre>(134.62130336304722, 216.18292914064398)</pre>
</div>
</div>
</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<p>I eyeballed 125 and 220 as thresholds. Not too bad.</p>
<p>We can also use the threshold computation to figure out the dot-dash threshold, and (in a hacky way) the dash-space threshold.</p>
<p>Now, we can write a function that takes a video file as input and outputs the Morse Code recorded within. The function calculates all thresholds for itself, so you should be able to record Morse Code from another source (say, the <a href="https://en.wikipedia.org/wiki/Capitol_Records_Building">Capitol Records Building</a> in Los Angeles) and decode the message.</p>
</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In [22]:</div>
<div class="inner_cell">
<div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="k">def</span> <span class="nf">decode_morse_video</span><span class="p">(</span><span class="n">path</span><span class="p">):</span>
<span class="sd">"""Decode Morse Code from video file `path`"""</span>
<span class="n">fmax</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">([</span><span class="n">m</span> <span class="k">for</span> <span class="n">m</span> <span class="ow">in</span> <span class="n">frame_maxes</span><span class="p">(</span><span class="n">path</span><span class="p">)],</span> <span class="n">dtype</span><span class="o">=</span><span class="nb">int</span><span class="p">)</span>
<span class="n">threshold</span> <span class="o">=</span> <span class="n">compute_threshold</span><span class="p">(</span><span class="n">fmax</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
<span class="n">signal</span> <span class="o">=</span> <span class="p">(</span><span class="n">fmax</span> <span class="o">></span> <span class="n">threshold</span><span class="p">)</span><span class="o">.</span><span class="n">astype</span><span class="p">(</span><span class="nb">int</span><span class="p">)</span>
<span class="n">edges</span> <span class="o">=</span> <span class="n">signal</span><span class="p">[</span><span class="mi">1</span><span class="p">:]</span> <span class="o">-</span> <span class="n">signal</span><span class="p">[:</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span>
<span class="n">edge_idx</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">where</span><span class="p">(</span><span class="n">edges</span> <span class="o">!=</span> <span class="mi">0</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
<span class="n">highs</span><span class="p">,</span> <span class="n">lows</span> <span class="o">=</span> <span class="n">signal_runs</span><span class="p">(</span><span class="n">edges</span><span class="p">,</span> <span class="n">edge_idx</span><span class="p">)</span>
<span class="n">dot_dash_threshold</span> <span class="o">=</span> <span class="n">compute_threshold</span><span class="p">(</span><span class="n">highs</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
<span class="c1"># Filter out the dots to threshold the dash-space threshold.</span>
<span class="n">dash_space_threshold</span> <span class="o">=</span> <span class="n">compute_threshold</span><span class="p">(</span><span class="n">lows</span><span class="p">[</span><span class="n">lows</span> <span class="o">></span> <span class="n">dot_dash_threshold</span><span class="p">],</span> <span class="mi">1</span><span class="p">)</span>
<span class="k">return</span> <span class="n">morse_decode</span><span class="p">(</span><span class="n">edges</span><span class="p">,</span> <span class="n">edge_idx</span><span class="p">,</span> <span class="n">dot_dash_threshold</span><span class="p">,</span> <span class="n">dash_space_threshold</span><span class="p">)</span>
</pre></div>
</div>
</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In [23]:</div>
<div class="inner_cell">
<div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="n">decode_morse_video</span><span class="p">(</span><span class="s1">'20181110-crop.mov'</span><span class="p">)</span>
</pre></div>
</div>
</div>
</div>
<div class="output_wrapper">
<div class="output">
<div class="output_area">
<div class="prompt output_prompt">Out[23]:</div>
<div class="output_text output_subarea output_execute_result">
<pre>'WUGHT WHAT HATH GOD WROUGLT WHAT HATH GOD WROUGHT WHAT HATH GOD WROUGHT WHAT HATH GOD WROUGHT WHAT HATH GOD WROUGHT WHAT HATH GOD WROUGHT WHAT HATH GOD WROUGHT EMHAT HATH GOD WROUGHT WHAT HATH GOD WROUGHT WHAT HATH GOD WROUGHT WHAT HATH GOD WROUGHT WHAT HATH GOD WROUGHT WHAT HATH GOD WROUGHT WHAT HATH GOD WROUGHT WHAT HATH GOD WROUGHT WHAT HATH GOD WROUGHT WHAT HATH GOD WROUGHT WH'</pre>
</div>
</div>
</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In [24]:</div>
<div class="inner_cell">
<div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="n">decode_morse_video</span><span class="p">(</span><span class="s1">'20181110-854x480-gray.mov'</span><span class="p">)</span>
</pre></div>
</div>
</div>
</div>
<div class="output_wrapper">
<div class="output">
<div class="output_area">
<div class="prompt output_prompt">Out[24]:</div>
<div class="output_text output_subarea output_execute_result">
<pre>'WUGHT WHAT HATH GOD WROUGLT WHAT HATH GOD WROUGHT WHAT HATH GOD WROUGHT WHAT HATH GOD WROUGHT WHAT HATH GOD WROUGHT WHAT HATH GOD WROUGHT WHAT HATH GOD WROUGHT EMHAT HATH GOD WROUGHT WHAT HATH GOD WROUGHT WHAT HATH GOD WROUGHT WHAT HATH GOD WROUGHT WHAT HATH GOD WROUGHT WHAT HATH GOD WROUGHT WHAT HATH GOD WROUGHT WHAT HATH GOD WROUGHT WHAT HATH GOD WROUGHT WHAT HATH GOD WROUGHT WH'</pre>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
Andrewhttp://www.blogger.com/profile/04682028947461698922noreply@blogger.comtag:blogger.com,1999:blog-942809964744779737.post-49305835670171984472018-11-03T06:00:00.000-07:002018-11-03T06:00:07.041-07:00Home Run #816: Finis<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj1xkfE_1wfehlOkNaxkJ76FQ90yIi_Z50m_EQ-CQIztT-qyFMLiRRKqMWqnY10mZngHX74pvFgTC7cHQsmtGiO474JRL9pCf6_24SrNxPo644B-VKnHgXznEKsHijdIfG9O7JFnMNmG4M/s1600/20090303.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="335" data-original-width="1024" height="208" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj1xkfE_1wfehlOkNaxkJ76FQ90yIi_Z50m_EQ-CQIztT-qyFMLiRRKqMWqnY10mZngHX74pvFgTC7cHQsmtGiO474JRL9pCf6_24SrNxPo644B-VKnHgXznEKsHijdIfG9O7JFnMNmG4M/s640/20090303.png" width="640" /></a></div>
Originally published on 3 March 2009.<br />
<br />
That's all, folks. 816 strips (assuming I didn't miscount this time and that my local archive is, indeed, complete) across seven years. I hope posting them on Blogger allows Home Run to be rediscovered by some of the original readers of the strip, and maybe even discovered by new readers.<br />
<br />
In its day, Home Run had a readership estimated to be in the low thousands. While I was producing it, I received some fan mail, some criticism, and more than one request to reuse images. That right there exceeded my expectations.<br />
<br />
Take good care of them, Google.Andrewhttp://www.blogger.com/profile/04682028947461698922noreply@blogger.comtag:blogger.com,1999:blog-942809964744779737.post-49716211168261487222018-10-27T06:04:00.000-07:002018-10-27T06:04:09.668-07:00Home Run #815: Loafing Around 5<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi1MTpUzhAsmPbYRQUr4TZUVU0k4ulJrU5qHAMYoeYbGr343cIF07k45w0cYD_ouOl2pez2kgEBJEQXkxTUg8FyaGiqrPu5K3wV5kJ9PYcPwK2wgb5aVfIvUVo-O0tBsOlYOWtLME0csF0/s1600/20090121.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="332" data-original-width="1024" height="206" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi1MTpUzhAsmPbYRQUr4TZUVU0k4ulJrU5qHAMYoeYbGr343cIF07k45w0cYD_ouOl2pez2kgEBJEQXkxTUg8FyaGiqrPu5K3wV5kJ9PYcPwK2wgb5aVfIvUVo-O0tBsOlYOWtLME0csF0/s640/20090121.png" width="640" /></a></div>
Originally published on 21 January 2009.Andrewhttp://www.blogger.com/profile/04682028947461698922noreply@blogger.comtag:blogger.com,1999:blog-942809964744779737.post-27229954164511243072018-10-27T06:03:00.000-07:002018-10-27T06:03:01.093-07:00Home Run #814: Loafing Around 4<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjNDNSXBPoNR61cC_X7SiADcx6UC5rwV-NAR7DsizTEbnRKufb8d3_h0X5jMcfQu1FM3xYAMX1foRflSofwIuBcTYv7oSm4GqbGHy-bouA-vvehrpgrOCTmX6ReoCzFOKZjht8-oP_FeBs/s1600/20090120.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="338" data-original-width="1024" height="210" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjNDNSXBPoNR61cC_X7SiADcx6UC5rwV-NAR7DsizTEbnRKufb8d3_h0X5jMcfQu1FM3xYAMX1foRflSofwIuBcTYv7oSm4GqbGHy-bouA-vvehrpgrOCTmX6ReoCzFOKZjht8-oP_FeBs/s640/20090120.png" width="640" /></a></div>
Originally published on 20 January 2009.Andrewhttp://www.blogger.com/profile/04682028947461698922noreply@blogger.comtag:blogger.com,1999:blog-942809964744779737.post-91201586105885172812018-10-27T06:02:00.000-07:002018-10-27T06:02:18.994-07:00Home Run #813: Loafing Around 3<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgDvH9vB703Qm6JIwiqrjVfzoK3Gw5dmCqglyRpgy-5PYaW0sw4gEh0z6WmzElu_4AOBpUYh8w8etHHhXnCPJLnzc_aYy5WyoiVSMMABMZsoQIE0eVZIEBn1hV1W5sKmr3xzP63PggiHFw/s1600/20090115.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="333" data-original-width="1024" height="208" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgDvH9vB703Qm6JIwiqrjVfzoK3Gw5dmCqglyRpgy-5PYaW0sw4gEh0z6WmzElu_4AOBpUYh8w8etHHhXnCPJLnzc_aYy5WyoiVSMMABMZsoQIE0eVZIEBn1hV1W5sKmr3xzP63PggiHFw/s640/20090115.png" width="640" /></a></div>
Originally published on 15 January 2009.Andrewhttp://www.blogger.com/profile/04682028947461698922noreply@blogger.comtag:blogger.com,1999:blog-942809964744779737.post-61639104534792665112018-10-27T06:01:00.000-07:002018-10-27T06:01:00.425-07:00Home Run #812: Loafing Around 2<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhUVxdRdbUCqnMl-4WYr3eX7qvf4MC4h_uXt7xVDbkWvJEt0aUpy3_uehewjFp1p_a6Vil9JUSj6aIVJlE6ESyW-BUQaTNAvl0IgjixLu6Lh89JUhKF1NILfRlpd2E0w33YeT5R20B0wRY/s1600/20090114.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="688" data-original-width="1024" height="430" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhUVxdRdbUCqnMl-4WYr3eX7qvf4MC4h_uXt7xVDbkWvJEt0aUpy3_uehewjFp1p_a6Vil9JUSj6aIVJlE6ESyW-BUQaTNAvl0IgjixLu6Lh89JUhKF1NILfRlpd2E0w33YeT5R20B0wRY/s640/20090114.png" width="640" /></a></div>
Originally published on 14 January 2009.Andrewhttp://www.blogger.com/profile/04682028947461698922noreply@blogger.comtag:blogger.com,1999:blog-942809964744779737.post-69841451315838721762018-10-27T06:00:00.000-07:002018-10-27T06:00:00.145-07:00Home Run #811: Loafing Around 1<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEghTcn3cpZZngiNGEIWAmQC5EIQ_PeKevafUUAztAGFA4SlzEzJindQvZs_i2SU7faKq7Ho1mclj7aBORV9y4dESv8XmLm064AR2ldt9PRtrXkRYHFhSZmI7YzrTzNA0HELAE23meQHTfw/s1600/20090113.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="332" data-original-width="1024" height="206" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEghTcn3cpZZngiNGEIWAmQC5EIQ_PeKevafUUAztAGFA4SlzEzJindQvZs_i2SU7faKq7Ho1mclj7aBORV9y4dESv8XmLm064AR2ldt9PRtrXkRYHFhSZmI7YzrTzNA0HELAE23meQHTfw/s640/20090113.png" width="640" /></a></div>
Originally published on 13 January 2009.Andrewhttp://www.blogger.com/profile/04682028947461698922noreply@blogger.comtag:blogger.com,1999:blog-942809964744779737.post-70545367082096008892018-10-20T06:03:00.000-07:002018-10-20T06:03:00.230-07:00Home Run #810: Noel<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhMtkT0YHBpfv6Oer6j1k9UjS2LwozubAz2d-nTL8HtjohbwiUqh0yy_zauvZZeA1C7M4G5KQ4VOCfVaPML7lR6ozO5JT5byRefa5Xb5k3IFzTbtl6mZJ9zPyQa_k3K46nDG9lzBX7zRBA/s1600/20081225.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="333" data-original-width="1024" height="208" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhMtkT0YHBpfv6Oer6j1k9UjS2LwozubAz2d-nTL8HtjohbwiUqh0yy_zauvZZeA1C7M4G5KQ4VOCfVaPML7lR6ozO5JT5byRefa5Xb5k3IFzTbtl6mZJ9zPyQa_k3K46nDG9lzBX7zRBA/s640/20081225.png" width="640" /></a></div>
Originally published on 25 December 2008.Andrewhttp://www.blogger.com/profile/04682028947461698922noreply@blogger.comtag:blogger.com,1999:blog-942809964744779737.post-71083449388882239422018-10-20T06:02:00.000-07:002018-10-20T06:02:06.638-07:00Home Run #809: Patterns<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjLTKk681y875VRUj858rD5RRg1VW3OEU6xfM0pwwePfByjvWZT91DyWJxlK0ZxSP0ZqSsZDw3_lYfjjDP6HHhdwZoOoHy5weIE9sB56EZ00v8wFktJd7kW1gppx-mxJEOs6-2PTqZjE3Y/s1600/20081216.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="336" data-original-width="1024" height="210" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjLTKk681y875VRUj858rD5RRg1VW3OEU6xfM0pwwePfByjvWZT91DyWJxlK0ZxSP0ZqSsZDw3_lYfjjDP6HHhdwZoOoHy5weIE9sB56EZ00v8wFktJd7kW1gppx-mxJEOs6-2PTqZjE3Y/s640/20081216.png" width="640" /></a></div>
Originally published on 16 December 2008.Andrewhttp://www.blogger.com/profile/04682028947461698922noreply@blogger.comtag:blogger.com,1999:blog-942809964744779737.post-49875291592327353002018-10-20T06:01:00.000-07:002018-10-20T06:01:13.013-07:00Home Run #808: Wetware 2<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhdEKQWM0b8fXQQ4b22pzadSrSA72Wc8FH48rtYIdn9mznBojI3p2Alg3MatfCas-MRNkAhM0MTwIHd-Fp6llwIR8AXibiw_8xa_gAy1H9PB_biYRX1Bi-MihfNiPMEtpCNoUcKuf7Io3k/s1600/20081104.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="334" data-original-width="1024" height="208" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhdEKQWM0b8fXQQ4b22pzadSrSA72Wc8FH48rtYIdn9mznBojI3p2Alg3MatfCas-MRNkAhM0MTwIHd-Fp6llwIR8AXibiw_8xa_gAy1H9PB_biYRX1Bi-MihfNiPMEtpCNoUcKuf7Io3k/s640/20081104.png" width="640" /></a></div>
Originally published on 4 November 2008.Andrewhttp://www.blogger.com/profile/04682028947461698922noreply@blogger.comtag:blogger.com,1999:blog-942809964744779737.post-60543368354884930142018-10-20T06:00:00.000-07:002018-10-20T06:00:02.738-07:00Home Run #807: Wetware 1<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhdzyQ35i_bMXUKoFKJan6ITMCD4v99bTDY9VRoxMJM5QFlNZ45Y6ndSKJLEAvFfoqnIfSfpZKkE7isnW3jDj9ypme8F_pwZxMFqHk-Tly_Zeu0HsGcVzqqjcej2ibKhHBvg2MvfS3Up34/s1600/20080729.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="333" data-original-width="1024" height="208" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhdzyQ35i_bMXUKoFKJan6ITMCD4v99bTDY9VRoxMJM5QFlNZ45Y6ndSKJLEAvFfoqnIfSfpZKkE7isnW3jDj9ypme8F_pwZxMFqHk-Tly_Zeu0HsGcVzqqjcej2ibKhHBvg2MvfS3Up34/s640/20080729.png" width="640" /></a></div>
Originally published on 29 July 2008.Andrewhttp://www.blogger.com/profile/04682028947461698922noreply@blogger.comtag:blogger.com,1999:blog-942809964744779737.post-65671105529163136352018-10-13T06:02:00.000-07:002018-10-13T06:02:01.728-07:00Home Run #806: Take Pictures Further 3<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh65-FfC3p6QYkudPvF6mWv2xozF_jNcipKlg4bCjBxxoyahvaMMuvgYoKCgYuaA-eovSy43F8c789ILfBwWkDMJybnBtp6wzzl6Nf09VxtfYUNIed4JYO2M_ByDg3Z1tbcvx6DgKOjzQA/s1600/20080724.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="333" data-original-width="1024" height="208" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh65-FfC3p6QYkudPvF6mWv2xozF_jNcipKlg4bCjBxxoyahvaMMuvgYoKCgYuaA-eovSy43F8c789ILfBwWkDMJybnBtp6wzzl6Nf09VxtfYUNIed4JYO2M_ByDg3Z1tbcvx6DgKOjzQA/s640/20080724.png" width="640" /></a></div>
Originally published on 24 July 2008.Andrewhttp://www.blogger.com/profile/04682028947461698922noreply@blogger.comtag:blogger.com,1999:blog-942809964744779737.post-27191182767147006802018-10-13T06:01:00.000-07:002018-10-13T06:01:00.225-07:00Home Run #805: Take Pictures Further 2<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEieHqeMMv0ArI0UF05TMMK2_natQGtsMJz-fmnEKnlVLxU22_t3KX8QazG6GjbpMn6PSArK-RqNTj48ULebwN-so7cvk_rzL-ZlFbRkQxbOYjCmEexNHXGN6EjNFCPP2GkkgriL5zPCd34/s1600/20080723.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="334" data-original-width="1024" height="208" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEieHqeMMv0ArI0UF05TMMK2_natQGtsMJz-fmnEKnlVLxU22_t3KX8QazG6GjbpMn6PSArK-RqNTj48ULebwN-so7cvk_rzL-ZlFbRkQxbOYjCmEexNHXGN6EjNFCPP2GkkgriL5zPCd34/s640/20080723.png" width="640" /></a></div>
Originally published on 23 July 2008.Andrewhttp://www.blogger.com/profile/04682028947461698922noreply@blogger.comtag:blogger.com,1999:blog-942809964744779737.post-84232791298956777002018-10-13T06:00:00.000-07:002018-10-13T06:00:11.799-07:00Home Run #804: Take Pictures Further 1<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEje50wx14BEQC8nEGb1My8EB5FPEh0aMmN7XJUY04o_uuV-uKLe3Tury-K_N5tgqqmdHYuynnRpoUk1WEoBCH88MA2LnvV6zU7x21C0cYYOheW25_5A8ts0TXK2xOXqlyVlh1afORLcemk/s1600/20080722.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="333" data-original-width="1024" height="208" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEje50wx14BEQC8nEGb1My8EB5FPEh0aMmN7XJUY04o_uuV-uKLe3Tury-K_N5tgqqmdHYuynnRpoUk1WEoBCH88MA2LnvV6zU7x21C0cYYOheW25_5A8ts0TXK2xOXqlyVlh1afORLcemk/s640/20080722.png" width="640" /></a></div>
Originally published on 22 July 2008.Andrewhttp://www.blogger.com/profile/04682028947461698922noreply@blogger.comtag:blogger.com,1999:blog-942809964744779737.post-88082450909820530062018-10-06T06:03:00.000-07:002018-10-06T06:03:15.125-07:00Home Run #803: Extreme Martial Arts<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhxzLeEGzaQJefY5ndTS28xZCKFgKiCP8y7S8S5IijdiyeTdu9u1Zcz1z3GZiCrB7endBiVgPUhGbyFGrKRz_8bX7MnrgdhNT8Q0bfKbTrmatNBKnuPbaVeLQtivIFJO6C4f4W-fY5LaIM/s1600/20080710.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="336" data-original-width="1024" height="210" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhxzLeEGzaQJefY5ndTS28xZCKFgKiCP8y7S8S5IijdiyeTdu9u1Zcz1z3GZiCrB7endBiVgPUhGbyFGrKRz_8bX7MnrgdhNT8Q0bfKbTrmatNBKnuPbaVeLQtivIFJO6C4f4W-fY5LaIM/s640/20080710.png" width="640" /></a></div>
Originally published on 10 July 2008.Andrewhttp://www.blogger.com/profile/04682028947461698922noreply@blogger.comtag:blogger.com,1999:blog-942809964744779737.post-6253499804157547602018-10-06T06:02:00.000-07:002018-10-06T06:02:16.967-07:00Home Run #802: Pedal Power<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_JSZ7_-ZLVizmSMfsepcuO9fvV8cytJdLhfEEdEbtgyRP3L9Fu4V7y6pW-GvPIR6dsqaksVb2CmZE1KqvMZwzG8n-6oT5oLyyFSTNYurIlliBp1QI4mHtYnWfCbQCaNKBszKXkl1qLIM/s1600/20080709.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="337" data-original-width="1024" height="210" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_JSZ7_-ZLVizmSMfsepcuO9fvV8cytJdLhfEEdEbtgyRP3L9Fu4V7y6pW-GvPIR6dsqaksVb2CmZE1KqvMZwzG8n-6oT5oLyyFSTNYurIlliBp1QI4mHtYnWfCbQCaNKBszKXkl1qLIM/s640/20080709.png" width="640" /></a></div>
Originally published on 9 July 2008.Andrewhttp://www.blogger.com/profile/04682028947461698922noreply@blogger.comtag:blogger.com,1999:blog-942809964744779737.post-2285498284104971312018-10-06T06:01:00.000-07:002018-10-06T06:01:00.423-07:00Home Run #801: Ukulele Underground<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjfqgvSzjuZ4vfMlf_ldScyYEFH5oCkhELj32KqSVFmY-7pu-POVPAEZWVoniH47FdO9AEmFnMpctRu8sgYUI0knGaYN1sCjliajHYe60mD9MCmD0JtXqJ9NOavVHwxDwK1vbxU69K8P4U/s1600/20080708.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="335" data-original-width="1024" height="208" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjfqgvSzjuZ4vfMlf_ldScyYEFH5oCkhELj32KqSVFmY-7pu-POVPAEZWVoniH47FdO9AEmFnMpctRu8sgYUI0knGaYN1sCjliajHYe60mD9MCmD0JtXqJ9NOavVHwxDwK1vbxU69K8P4U/s640/20080708.png" width="640" /></a></div>
Originally published on 8 July 2008.<br />
<br />
Hey look! <a href="https://ukuleleunderground.com/" target="_blank">They still exist</a> (as of this writing)! And they've monetized!Andrewhttp://www.blogger.com/profile/04682028947461698922noreply@blogger.comtag:blogger.com,1999:blog-942809964744779737.post-5483235415170792722018-10-06T06:00:00.000-07:002018-10-06T06:00:12.450-07:00Home Run #800: Must Be Emilie's Little Brother<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgz3V5MDXBD8XNoPXCbgKELoyfBMMe6AAOtFBTGJ_StHyua6WlNbnUAC6tZCWDVh9-7ISfB0d7HLjA-Y8bAuk97ackmjSJIX13yGCpRIj2Una-iaiqntloSLDjHiWB-gWuirz5RJNlous0/s1600/20080610.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="333" data-original-width="1024" height="208" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgz3V5MDXBD8XNoPXCbgKELoyfBMMe6AAOtFBTGJ_StHyua6WlNbnUAC6tZCWDVh9-7ISfB0d7HLjA-Y8bAuk97ackmjSJIX13yGCpRIj2Una-iaiqntloSLDjHiWB-gWuirz5RJNlous0/s640/20080610.png" width="640" /></a></div>
Originally published on 10 June 2008.Andrewhttp://www.blogger.com/profile/04682028947461698922noreply@blogger.com