From a7aa4deb8690e392bd5b10bb4a39499089f9733a Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Sat, 24 Jan 2015 18:05:54 -0800 Subject: [PATCH] Site updated at 2015-01-25 02:05:54 UTC --- Screen Shot 2015-01-11 at 23.09.06 .png | Bin 21513 -> 0 bytes atom.xml | 2 +- blog/categories/architecture/atom.xml | 2 +- blog/categories/component/atom.xml | 2 +- blog/categories/website/atom.xml | 2 +- components/automation.html | 356 ++++++++++++++++++++ components/browser.html | 169 ++++++++++ components/chromecast.html | 231 +++++++++++++ components/device_sun_light_trigger.html | 172 ++++++++++ components/device_tracker.html | 181 ++++++++++ components/discovery.html | 160 +++++++++ components/downloader.html | 173 ++++++++++ components/index.html | 148 +------- components/keyboard.html | 159 +++++++++ components/light.html | 244 ++++++++++++++ components/notify.html | 183 ++++++++++ components/simple_alarm.html | 159 +++++++++ components/sun.html | 204 +++++++++++ components/switch.html | 164 +++++++++ components/tellstick_sensor.html | 156 +++++++++ components/thermostat.html | 162 +++++++++ components/wink.html | 169 ++++++++++ developers/creating_components.html | 18 +- getting-started/index.html | 147 ++++---- getting-started/troubleshooting.html | 152 +++++++++ images/screenshots/more-info-dialog-sun.png | Bin 0 -> 34095 bytes sitemap.xml | 146 ++++++-- stylesheets/screen.css | 2 +- 28 files changed, 3432 insertions(+), 231 deletions(-) delete mode 100644 Screen Shot 2015-01-11 at 23.09.06 .png create mode 100644 components/automation.html create mode 100644 components/browser.html create mode 100644 components/chromecast.html create mode 100644 components/device_sun_light_trigger.html create mode 100644 components/device_tracker.html create mode 100644 components/discovery.html create mode 100644 components/downloader.html create mode 100644 components/keyboard.html create mode 100644 components/light.html create mode 100644 components/notify.html create mode 100644 components/simple_alarm.html create mode 100644 components/sun.html create mode 100644 components/switch.html create mode 100644 components/tellstick_sensor.html create mode 100644 components/thermostat.html create mode 100644 components/wink.html create mode 100644 getting-started/troubleshooting.html create mode 100644 images/screenshots/more-info-dialog-sun.png diff --git a/Screen Shot 2015-01-11 at 23.09.06 .png b/Screen Shot 2015-01-11 at 23.09.06 .png deleted file mode 100644 index 356e848f043f89ebba4b41cbaf564db2770b0f89..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21513 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 nTKmWDpSb*OM8W^rd7(iSm - 2015-01-13T08:35:22-08:00 + 2015-01-24T18:05:43-08:00 https://home-assistant.io/ diff --git a/blog/categories/architecture/atom.xml b/blog/categories/architecture/atom.xml index eedf1e1c37..9db31f71e0 100644 --- a/blog/categories/architecture/atom.xml +++ b/blog/categories/architecture/atom.xml @@ -4,7 +4,7 @@ <![CDATA[Category: architecture | Home Assistant]]> - 2015-01-13T08:35:22-08:00 + 2015-01-24T18:05:43-08:00 https://home-assistant.io/ diff --git a/blog/categories/component/atom.xml b/blog/categories/component/atom.xml index 214483b436..8246d82b70 100644 --- a/blog/categories/component/atom.xml +++ b/blog/categories/component/atom.xml @@ -4,7 +4,7 @@ <![CDATA[Category: component | Home Assistant]]> - 2015-01-13T08:35:22-08:00 + 2015-01-24T18:05:43-08:00 https://home-assistant.io/ diff --git a/blog/categories/website/atom.xml b/blog/categories/website/atom.xml index c6dc972258..8586e19ad7 100644 --- a/blog/categories/website/atom.xml +++ b/blog/categories/website/atom.xml @@ -4,7 +4,7 @@ <![CDATA[Category: website | Home Assistant]]> - 2015-01-13T08:35:22-08:00 + 2015-01-24T18:05:43-08:00 https://home-assistant.io/ diff --git a/components/automation.html b/components/automation.html new file mode 100644 index 0000000000..4a353484c2 --- /dev/null +++ b/components/automation.html @@ -0,0 +1,356 @@ + + + + + + + + + + + + Automation - Home Assistant + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+
+ +
+ + +
+ + +
+

+ Automation +

+
+
+ + +

This page will talk about automating Home Assistant using the automation component. For more advanced ways of automation, see the create a component page.

+ +

Each part of automation consists of two parts: the trigger part and the action part. The final result will look something like this:

+ +
1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+
[automation]
+# Optional alias that the logs will use to refer to the entry
+alias=Sunset notification
+
+# Type of trigger and informatino for the trigger
+platform=state
+state_entity_id=sun.sun
+state_from=above_horizon
+state_to=below_horizon
+
+# Action to be done when trigger activated
+execute_service=notify.notify
+service_data={"message":"The sun has set"}
+ + +

Setting up triggers

+ +

Time-based automation

+ +

This allows you to trigger actions whenever the time matches your filter. You can setup filters to match on hours, minutes and seconds. Any filter that you omit will match all values.

+ +

Here are some example values:

+ +
1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+
# Match at the start of every hour
+platform=time
+time_minutes=0
+time_seconds=0
+
+# Match at 4pm
+platform=time
+time_hours=16
+time_minutes=0
+time_seconds=0
+
+ + + + +

+Home Assistant checks your time filters every 3 seconds. That means that the value of seconds will only be 0, 3, 6, 9…60. Setting up a filter for `time_seconds=10` will never fire! +

+ + +

State-based automation

+ +

This allows you to trigger actions based on state changes of any entity within Home Assistant. You can omit the state_from and state_to to match all.

+ +
1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+
# Match when the sun sets
+platform=state
+state_entity_id=sun.sun
+state_from=above_horizon
+state_to=below_horizon
+
+# Match when a person comes home
+platform=state
+state_entity_id=device_tracker.Paulus_OnePlus_One
+state_from=not_home
+state_to=home
+
+# Match when a light turns on
+platform=state
+state_entity_id=light.Ceiling
+state_from=off
+state_to=on
+ + +

Setting up the action

+ +

Currently the only supported action is calling a service. Services are what devices expose to be controlled, so this will allow us to control anything that Home Assistant can control.

+ +
1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+
# Turn the lights Ceiling and Wall on.
+execute_service=light.turn_on
+service_entity_id=light.Ceiling,light.Wall
+
+# Turn the lights Ceiling and Wall on and turn them red.
+execute_service=light.turn_on
+service_entity_id=light.Ceiling,light.Wall
+service_data={"rgb_color": [255, 0, 0]}
+
+# Notify the user
+execute_service=notify.notify
+service_data={"message":"YAY"}
+ + +

Putting it all together

+ +

For every combination of a trigger and an action we will have to combine the configuration lines and add it to an automation component entry in home-assistant.conf. You can add an optional alias key to the configuration to make the logs more understandable. To setup multiple entries, append 2, 3 etc to the section name. An example of a home-assistant.conf file:

+ +
1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+
[automation]
+alias=Sunset notification
+
+platform=state
+state_entity_id=sun.sun
+state_from=above_horizon
+state_to=below_horizon
+
+execute_service=notify.notify
+service_data={"message":"The sun has set"}
+
+[automation 2]
+alias=Turn lights off at 8am in the morning
+
+platform=time
+time_hours=8
+time_minutes=0
+time_seconds=0
+
+execute_service=light.turn_off
+
+[automation 3]
+alias=Turn lights in study room on when Paulus comes home
+
+platform=state
+state_entity_id=device_tracker.Paulus_OnePlus
+state_from=not_home
+state_to=home
+
+execute_service=homeassistant.turn_on
+service_entity_id=group.Study_Room
+ + + + +

+All configuration entries have to be sequential. If you have [automation], [automation 2] and [automation 4] then the last one will not be processed. +

+ + + +
+ + +
+ + +
+
+ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/components/browser.html b/components/browser.html new file mode 100644 index 0000000000..a82b6cbdc8 --- /dev/null +++ b/components/browser.html @@ -0,0 +1,169 @@ + + + + + + + + + + + + Browser - Home Assistant + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+
+ +
+ + +
+ + +
+

+ Browser +

+
+
+ + +

The browser component provides a service to open urls in the default browser on the host machine.

+ +

To load this component, add the following lines to your home-assistant.conf:

+ +
1
+
[browser]
+ + +

Service browser/browse_url

+ + + + + + + + + + + + + + + + +
Service data attribute Optional Description
url no The url to open
+ + + +
+ + +
+ + +
+
+ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/components/chromecast.html b/components/chromecast.html new file mode 100644 index 0000000000..5e050485fc --- /dev/null +++ b/components/chromecast.html @@ -0,0 +1,231 @@ + + + + + + + + + + + + Chromecast - Home Assistant + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+
+ +
+ + +
+ + +
+

+ Chromecast +

+
+
+ + +

+Chromecasts have recently received a new API which is not yet supported by Home Assistant. Therefore we currently can only detect them and do not know what they are up to. +

+ + +

+ +

Interacts with Chromecasts on your network. Will be automatically discovered if you setup the discovery component. Can also be forced to load by adding the following lines to your home-assistant.conf:

+ +
1
+
[chromecast]
+ + +

Services

+ +

Media control services

+ +

Available services: turn_off, volume_up, volume_down, media_play_pause, media_play, media_pause, media_next_track

+ + + + + + + + + + + + + + + + +
Service data attribute Optional Description
entity_id yes Target a specific chromecast. Defaults to all.
+ + +

Media play services

+ +

There are three services to start playing YouTube video’s on the ChromeCast.

+ +

Service chromecast/play_youtube_video

+ +

Service to start playing a YouTube vide on the Chromecast.

+ + + + + + + + + + + + + + + + + + + + + +
Service data attribute Optional Description
entity_id yes Target a specific chromecast. Defaults to all.
video no YouTube video to be played, ie. L0MK7qz13bU
+ + +

Service chromecast/start_fireplace and chromecast/start_epic_sax

+ +

Will either start a fireplace or Epic Sax Guy 10h on the Chromecast.

+ + + + + + + + + + + + + + + + +
Service data attribute Optional Description
entity_id yes Target a specific chromecast. Defaults to all.
+ + + +
+ + +
+ + +
+
+ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/components/device_sun_light_trigger.html b/components/device_sun_light_trigger.html new file mode 100644 index 0000000000..b127a1ecc6 --- /dev/null +++ b/components/device_sun_light_trigger.html @@ -0,0 +1,172 @@ + + + + + + + + + + + + Automating your lights - Home Assistant + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+
+ +
+ + +
+ + +
+

+ Automating Your Lights +

+
+
+ + +

Home Assistant has a built-in component called device_sun_light_trigger to help you automate your lights. The component will:

+ +
    +
  • Fade in the lights when the sun is setting and there are people home
  • +
  • Turn on the lights when people get home after the sun has set
  • +
  • Turn off the lights when all people leave the house
  • +
+ + +

This component requires the components sun, device_tracker and light to be enabled.

+ +

To enable this component, add the following lines to your home-assistant.conf:

+ +
1
+2
+3
+4
+5
+6
+7
+
[device_sun_light_trigger]
+# Specify a specific light/group of lights that has to be turned on
+light_group=group.living_room
+# Specify which light profile to use when turning lights on
+light_profile=relax
+# Disable lights being turned off when everybody leaves the house
+disable_turn_off=1
+ + +

The options light_group, light_profile and disable_turn_off are optional.

+ + +
+ + +
+ + +
+
+ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/components/device_tracker.html b/components/device_tracker.html new file mode 100644 index 0000000000..abea8f0d60 --- /dev/null +++ b/components/device_tracker.html @@ -0,0 +1,181 @@ + + + + + + + + + + + + Device tracking - Home Assistant + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+
+ +
+ + +
+ + +
+

+ Device Tracking +

+
+
+ + +

Home Assistant can get information from your wireless router to track which devices are connected. There are three different types of supported wireless routers: tomato, netgear and luci (OpenWRT). To get started add the following lines to your home-assistant.conf (example for Netgear):

+ +
1
+2
+3
+4
+5
+
[device_tracker]
+platform=netgear
+host=192.168.1.1
+username=admin
+password=MY_PASSWORD
+ + + + +

+Tomato requires an extra config variable called `http_id`. The value can be obtained by logging in to the Tomato admin interface and search for `http_id` in the page source code. +

+ + + + +

+Before the Luci scanner can be used you have to install the luci RPC package on OpenWRT: opkg install luci-mod-rpc. +

+ + +

Once tracking, the device_tracker component will maintain a file in your config dir called known_devices.csv. Edit this file to adjust which devices have to be tracked. Here you can also setup a url for each device to be used as the entity picture.

+ +

As an alternative to the router-based device tracking, it is possible to directly scan the network for devices by using nmap. The IP addresses to scan can be specified in any format that nmap understands, including the network-prefix notation (192.168.1.1/24) and the range notation (192.168.1.1-255).

+ +
1
+2
+3
+
[device_tracker]
+platform=nmap_tracker
+hosts=192.168.1.1/24
+ + + +
+ + +
+ + +
+
+ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/components/discovery.html b/components/discovery.html new file mode 100644 index 0000000000..0ab62ddb34 --- /dev/null +++ b/components/discovery.html @@ -0,0 +1,160 @@ + + + + + + + + + + + + Discovery - Home Assistant + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+
+ +
+ + +
+ + +
+

+ Discovery +

+
+
+ + +

Home Assistant can discover and automatically configure zeroconf/mDNS and uPnP devices on your network. Currently the discovery component can detect:

+ +
    +
  • Google Chromecast
  • +
  • Belkin WeMo switches
  • +
  • Philips Hue
  • +
+ + +

It will be able to add Google Chreomcasts and Belkin WeMo switches automatically, for Philips Hue it will require some configuration from the user.

+ +

To load this component, add the following lines to your home-assistant.conf:

+ +
1
+
[discovery]
+ + +

If you are developing a new platform, please read how to make your platform discoverable.

+ + +
+ + +
+ + +
+
+ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/components/downloader.html b/components/downloader.html new file mode 100644 index 0000000000..709a7ee355 --- /dev/null +++ b/components/downloader.html @@ -0,0 +1,173 @@ + + + + + + + + + + + + Downloader - Home Assistant + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+
+ +
+ + +
+ + +
+

+ Downloader +

+
+
+ + +

The downloader component provides a service to download files. It will raise an error and not continue to set itself up when the download directory does not exist.

+ +

To enable it, add the following lines to your home-assistant.conf:

+ +
1
+2
+
[downloader]
+download_dir=downloads
+ + +

Service downloader/download_file

+ +

Download the specified url.

+ + + + + + + + + + + + + + + + +
Service data attribute Optional Description
url no The url of the file to download.
+ + + +
+ + +
+ + +
+
+ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/components/index.html b/components/index.html index 3d34fd692d..38414e85fb 100644 --- a/components/index.html +++ b/components/index.html @@ -95,142 +95,28 @@
-

sun

- -

Tracks the state of the sun and when the next sun rising and setting will occur.

- -

Depends on: config variables common/latitude and common/longitude

+

Home Assistant consists of the following built-in components:

-

device_tracker

- -

Keeps track of which devices are currently home.

- -
    -
  • Sets the state per device and maintains a combined state called all_devices.
  • -
  • Keeps track of known devices in the file config/known_devices.csv.
  • -
- - -

Supported platforms:

- -
    -
  • netgear for Netgear routers that support their SOAP API
  • -
  • luci for routers running OpenWRT
  • -
  • tomato for routers running Tomato
  • -
  • nmap for using nmap to scan IP ranges on the network
  • -
- - -

light

- -

Keeps track which lights are turned on and can control the lights. It has 4 built-in light profiles which you’re able to extend by putting a light_profiles.csv file in your config dir.

- -
    -
  • Maintains a state per light and a combined state all_light.
  • -
  • Registers services light/turn_on and light/turn_off to control the lights.
  • -
- - -

Optional service data:

- -
    -
  • entity_id - only act on specified lights. Else targets all.
  • -
  • transition_seconds - seconds to take to switch to new state.
  • -
  • profile - which light profile to use.
  • -
  • xy_color - two comma seperated floats that represent the color in XY
  • -
  • rgb_color - three comma seperated integers that represent the color in RGB
  • -
  • brightness - integer between 0 and 255 for how bright the color should be
  • -
  • flash - tell light to flash, can be either value short or long
  • -
- - -

Supported platforms:

- -
    -
  • hue for Philips Hue
  • -
- - -

switch

- -

Keeps track which switches are in the network, their state and allows you to control them.

- -
    -
  • Maintains a state per switch and a combined state all_switches.
  • -
  • Registers services switch/turn_on and switch/turn_off to control switches.
  • -
- - -

Optional service data:

- -
    -
  • entity_id - only act on specific switch. Else targets all.
  • -
- - -

Supported platforms:

- -
    -
  • wemo for Belkin WeMo switches
  • -
  • tellstick for Tellstick switches
  • -
- - -

device_sun_light_trigger

- -

Turns lights on or off using a light control component based on state of the sun and devices that are home.

- -

Depends on: light control, track_sun, device_tracker

- -
    -
  • Turns lights off when all devices leave home.
  • -
  • Turns lights on when a device is home while sun is setting.
  • -
  • Turns lights on when a device gets home after sun set.
  • -
- - -

chromecast

- -

Registers 7 services to control playback on a Chromecast: turn_off, volume_up, volume_down, media_play_pause, media_play, media_pause, media_next_track.

- -

Registers three services to start playing YouTube video’s on the ChromeCast.

- -

Service chromecast/play_youtube_video starts playing the specified video on the YouTube app on the ChromeCast. Specify video using video in service_data.

- -

Service chromecast/start_fireplace will start a YouTube movie simulating a fireplace and the chromecast/start_epic_sax service will start playing Epic Sax Guy 10h version.

- -

keyboard

- -

Registers services that will simulate key presses on the keyboard. It currently offers the following Buttons as a Service (BaaS): keyboard/volume_up, keyboard/volume_down and keyboard/media_play_pause -This actor depends on: PyUserInput

- -

downloader

- -

Registers service downloader/download_file that will download files. File to download is specified in the url field in the service data.

- -

browser

- -

Registers service browser/browse_url that opens url as specified in event_data in the system default browser.

- -

tellstick_sensor

- -

Shows the values of that sensors that is connected to your Tellstick.

- -

simple_alarm

- -

Will provide simple alarm functionality. Will flash a light shortly if a known device comes home. Will flash the lights red if the lights turn on while no one is home.

- -

Depends on device_tracker, light.

- -

Config options: -known_light: entity id of the light/light group to target to flash when a known device comes home -unknown_light: entity if of the light/light group to target when a light is turned on while no one is at home.

- diff --git a/components/keyboard.html b/components/keyboard.html new file mode 100644 index 0000000000..98bbd1d74a --- /dev/null +++ b/components/keyboard.html @@ -0,0 +1,159 @@ + + + + + + + + + + + + Keyboard - Home Assistant + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+
+ +
+ + +
+ + +
+

+ Keyboard +

+
+
+ + +

The keyboard component simulates key presses on the host machine. It currently offers the following Buttons as a Service (BaaS):

+ +
    +
  • keyboard/volume_up
  • +
  • keyboard/volume_down
  • +
  • keyboard/volume_mute
  • +
  • keyboard/media_play_pause
  • +
  • keyboard/media_next_track
  • +
  • keyboard/media_prev_track
  • +
+ + +

To load this component, add the following lines to your home-assistant.conf:

+ +
1
+
[keyboard]
+ + + +
+ + +
+ + +
+
+ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/components/light.html b/components/light.html new file mode 100644 index 0000000000..68dbb9351e --- /dev/null +++ b/components/light.html @@ -0,0 +1,244 @@ + + + + + + + + + + + + Lights - Home Assistant + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+
+ +
+ + +
+ + +
+

+ Lights +

+
+
+ + +

This component allows you to track and control various light bulbs.

+ +

It has 4 built-in light profiles which you’re able to extend by putting a light_profiles.csv file in your config dir.

+ +

It supports the following platforms:

+ +
    +
  • hue for Philips Hue
  • +
  • wink for Wink
  • +
+ + +

Preferred way to setup the Philips Hue platform is through the the discovery component. For the Wink light platform enable the wink component.

+ +

If you really feel like enabling the light component directly, add the following lines to your home-assistant.conf:

+ +
1
+2
+
[light]
+platform=hue
+ + + + +

+The light component supports multiple entries in home-assistant.conf by appending a sequential number to the section: [light 2], [light 3] etc. +

+ + +

Service light.turn_on

+ +

Turns one or multiple lights on.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Service data attribute Optional Description
entity_id no Only act on specified lights. Else targets all.
transition_seconds no Seconds to take to switch to new state.
profile no Which light profile to use.
xy_color no Two comma seperated floats that represent the color in XY
rgb_color no Three comma seperated integers that represent the color in RGB
brightness no Integer between 0 and 255 for how bright the color should be
flash no Tell light to flash, can be either value short or long
+ + +

Service light.turn_off

+ +

Turns one or multiple lights off.

+ + + + + + + + + + + + + + + + +
Service data attribute Optional Description
entity_id no Only act on specified lights. Else targets all.
+ + + +
+ + +
+ + +
+
+ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/components/notify.html b/components/notify.html new file mode 100644 index 0000000000..179d13b2a6 --- /dev/null +++ b/components/notify.html @@ -0,0 +1,183 @@ + + + + + + + + + + + + Notifications - Home Assistant + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+
+ +
+ + +
+ + +
+

+ Notifications +

+
+
+ + +

One of the things most people want at some point in their home automation is to get notified when certain events occur. For this reason there is a notify component in Home Assistant.

+ +

Home Assistant currently supports the awesome PushBullet, a free service to send information between your phones, browsers and friends.

+ +

To add PushBullet to your installation, add the following to your home-assistant.conf file:

+ +
1
+2
+3
+
[notify]
+platform=pushbullet
+api_key=YOUR_API_KEY
+ + +

Automation example

+ +

Notifications are great to be used within Home Automation. Below is a an example configuration that you can add to your home-assistant.conf to be notified when the sun sets.

+ +
1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+
[automation]
+alias=Sun set notification
+
+platform=state
+state_entity_id=sun.sun
+state_from=above_horizon
+state_to=below_horizon
+
+execute_service=notify.notify
+service_data={"message":"YAY"}
+ + +

For more automation examples, see the getting started with automation page.

+ + +
+ + +
+ + +
+
+ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/components/simple_alarm.html b/components/simple_alarm.html new file mode 100644 index 0000000000..2d78829e03 --- /dev/null +++ b/components/simple_alarm.html @@ -0,0 +1,159 @@ + + + + + + + + + + + + Intruder Alerts - Home Assistant + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+
+ +
+ + +
+ + +
+

+ Intruder Alerts +

+
+
+ + +

The component simple_alarm is capable of detecting intruders. It does so by checking if lights are being turned on while there is no one at home. When this happens it will turn the lights red, flash them for 30 seconds and send a message via the notifiy component. It will also flash a specific light when a known person comes home.

+ +

This component depends on the compoments device_tracker and light being setup.

+ +

To set it up, add the following lines to your home-assistant.conf:

+ +
1
+2
+3
+4
+5
+
[simple_alarm]
+# Which light/light group has to flash when a known device comes home
+known_light=light.Bowl
+# Which light/light group has to flash red when light turns on while no one home
+unknown_light=group.living_room
+ + + +
+ + +
+ + +
+
+ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/components/sun.html b/components/sun.html new file mode 100644 index 0000000000..f081965de8 --- /dev/null +++ b/components/sun.html @@ -0,0 +1,204 @@ + + + + + + + + + + + + Tracking the Sun - Home Assistant + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+
+ +
+ + +
+ + +
+

+ Tracking the Sun +

+
+
+ + +

The sun component will use your current location to track if the sun is above or below the horizon. This is a common ingredient within Home Automation.

+ +

To set it up, add the following lines to your home-assistant.conf:

+ +
1
+2
+3
+
[homeassistant]
+latitude=32.87336
+longitude=-117.22743
+ + + + +

+ +

+ + +

Implementation Details

+ +

Maintains entity sun.sun.

+ + + + + + + + + + + + + + + + + + +
Possible state Description
above_horizon When the sun is above the horizon.
below_horizon When the sun is below the horizon.
+ + + + + + + + + + + + + + + + + + + +
State Attributes Description
next_rising Date and time of the next sun rising
nest_setting Date and time of the next sun setting
+ + + +
+ + +
+ + +
+
+ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/components/switch.html b/components/switch.html new file mode 100644 index 0000000000..158b6609e7 --- /dev/null +++ b/components/switch.html @@ -0,0 +1,164 @@ + + + + + + + + + + + + Lights - Home Assistant + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+
+ +
+ + +
+ + +
+

+ Lights +

+
+
+ + +

Keeps track which switches are in the network, their state and allows you to control them.

+ +
    +
  • Maintains a state per switch and a combined state all_switches.
  • +
  • Registers services switch/turn_on and switch/turn_off to control switches.
  • +
+ + +

Optional service data:

+ +
    +
  • entity_id - only act on specific switch. Else targets all.
  • +
+ + +

Supported platforms:

+ +
    +
  • wemo for Belkin WeMo switches
  • +
  • tellstick for Tellstick switches
  • +
+ + + +
+ + +
+ + +
+
+ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/components/tellstick_sensor.html b/components/tellstick_sensor.html new file mode 100644 index 0000000000..a7e4bc8a92 --- /dev/null +++ b/components/tellstick_sensor.html @@ -0,0 +1,156 @@ + + + + + + + + + + + + Tellstick Sensors - Home Assistant + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+
+ +
+ + +
+ + +
+

+ Tellstick Sensors +

+
+
+ + +

Shows the values of that sensors that is connected to your Tellstick.

+ +

To enable it, add the following lines to your home-assistant.conf:

+ +
1
+
[tellstick_sensor]
+ + + + +

+This component is going to be merged into the sensor component. +

+ + + +
+ + +
+ + +
+
+ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/components/thermostat.html b/components/thermostat.html new file mode 100644 index 0000000000..9d827081bc --- /dev/null +++ b/components/thermostat.html @@ -0,0 +1,162 @@ + + + + + + + + + + + + Adding thermostats - Home Assistant + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+
+ +
+ + +
+ + +
+

+ Adding Thermostats +

+
+
+ + +

Thermostats offer Home Assistant a peek into the current and target temperature in a house. Some thermostats will also offer an away mode that will lower use of heating/cooling. The only supported thermostat right now is the Nest thermostat.

+ +

To set it up, add the following information to your home-assistant.conf file:

+ +
1
+2
+3
+4
+
[thermostat]
+platform=nest
+username=myemail@mydomain.com
+password=mypassword
+ + + + +

+ +

+ + + +
+ + +
+ + +
+
+ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/components/wink.html b/components/wink.html new file mode 100644 index 0000000000..f18e644c57 --- /dev/null +++ b/components/wink.html @@ -0,0 +1,169 @@ + + + + + + + + + + + + Wink hub - Home Assistant + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+
+ +
+ + +
+ + +
+

+ Wink Hub +

+
+
+ + +

Wink is a home automation hub that can control a whole wide range of devices on the market. Or, as they say in their own words:

+ +
Wink offers one, quick and simple way to connect people with the products they rely on every day in their home.
+ + +

Home Assistant integrates the Wink hub and allows you to get the status and control connected switches, lights and sensors.

+ +

To get started with the Wink API, you will first need to get yourself an API access token. Because it is very difficult right now to get access to their API, John McLaughlin has created the form below to get you one.

+ + + + +

After you have gotten your access token, add the following to your home-assitant.conf:

+ +
1
+2
+
[wink]
+access_token=YOUR_ACCESS_TOKEN
+ + +

This will connect to the Wink hub and automatically set up any lights, switches and sensors that it finds.

+ +

+The Wink hub can only be accessed via the cloud. This means it requires an active internet connection and you will experience delays when controlling devices (~3s) and getting an updated device state (~15s). +

+ + + +
+ + +
+ + +
+
+ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/developers/creating_components.html b/developers/creating_components.html index 9d51503521..28ab65f803 100644 --- a/developers/creating_components.html +++ b/developers/creating_components.html @@ -96,7 +96,23 @@

Home Assistant offers built-in components but it -is easy to built your own.

+is easy to built your own. If you are the kind of person that likes to learn from code rather then guide then head over to the config/custom_compnents folder in the repository for two example components.

+ +

The first is hello_world.py, which is the classic Hello World example for Home Assistant. The second one is example.py which showcases various ways you can tap into Home Assistant to be notified when certain events occur.

+ +

If you want to load these components in Home Assistant, add the following lines to your home-assistant.conf file:

+ +
1
+2
+3
+4
+
[hello_world]
+
+[example]
+target=TARGET_ENTITY
+ + +

TARGET_ENTITY should be one of your devices that can be turned on and off, ie a light or a switch. Example value could be light.Ceiling or switch.AC (if you have these devices with those names).

Loading components

diff --git a/getting-started/index.html b/getting-started/index.html index 95b30ee6bc..fa3584b8c5 100644 --- a/getting-started/index.html +++ b/getting-started/index.html @@ -95,22 +95,42 @@
-

Installing Home Assistant and running it is easy. Make sure you have Python 3 installed and execute the following code in your console:

+

Installing and running Home Assistant is easy. Make sure you have Python 3.4 and git installed and execute the following code in a console:

1
 2
 3
 4
-5
 
git clone --recursive https://github.com/balloob/home-assistant.git
 cd home-assistant
-pip3 install -r requirements.txt
-
-python3 -m homeassistant
+python3 -m pip install -r requirements.txt
+python3 -m homeassistant --open-ui
 
-

This will start the Home Assistant server and create an initial configuration file config/home-assistant.conf that is setup for demo mode. It will launch its web interface on http://127.0.0.1:8123. The default password is ‘password’.

+

Running these commands will:

+ +
    +
  1. Download Home Assistant
  2. +
  3. Navigate to downloaded files
  4. +
  5. Install the dependencies
  6. +
  7. Launch Home Assistant and serve web interface on http://localhost:8123
  8. +
+ + +

If you run into any issues, please see the troubleshooting page.

+ +

+ You can run Home Assistant in demo mode by appending --demo-mode to line 4. +

+ + + + +

+ If you want to update to the latest version in the future, run: scripts/update. +

+

If you’re using Docker, you can use

@@ -119,82 +139,65 @@ -

After you got the demo mode running it is time to customize your configuration and enable some built-in components. See /config/home-assistant.conf.example for an example configuration.

+

Configuring Home Assistant

+ +

The configuration for Home Assistant lives by default in the config folder. The file home-assistant.conf is the main file that contains which components will be loaded and what their configuration is. An example configuration file is located at config/home-assistant.conf.example.

+ +

When launched for the first time, Home Assistant will write a default configuration enabling the web interface and device discovery. It can take up to a minute for your devices to be discovered and show up in the interface.

+ +

+ You will have to restart Home Assistant for changes in home-assistant.conf to take effect. +

+ + +

Password protecting the web interface

+ +

The first thing you want to add is a password for the web interface. Use your favourite text editor to open the file /config/home-assistant.conf. Look for the line that says [http] and add the line api_password=YOUR_PASSWORD below. Your configuration should now look like this:

+ +
1
+2
+3
+4
+
[http]
+api_password=YOUR_PASSWORD
+
+[discovery]
+
+ + +

You can append ?api_password=YOUR_PASSWORD to any url to log in automatically.

+

Adding devices and services

+ +

Home Assistant will be able to automatically discover and configure any Google Chromecasts, Belkin WeMo switches and Philips Hue bridges in your network if you have the discovery component enabled (which is by default).

+ +

Not all devices can be discovered, so if you hae any of the following devices or services, please see their respective pages for installation instructions:

+ + -

-For the light and switch component, you can specify multiple platforms by using sequential sections: [switch], [switch 2], [switch 3] etc -

+

Setting up Home Automation

+

When all your devices are set up it’s time to put the cherry on the pie: automation. There are many ways to automate your home with Home Assistant so we have divided it into a couple of topics:

-

Philips Hue

- -

To get Philips Hue working you will have to connect Home Assistant to the Hue bridge.

- -

Run the following command from your config dir and follow the instructions:

- -
1
-
python3 -m phue --host HUE_BRIDGE_IP_ADDRESS --config-file-path phue.conf
-
- - -

After that add the following lines to your home-assistant.conf:

- -
1
-2
-
[light]
-platform=hue
-
- - -

Wireless router

- -

Your wireless router is used to track which devices are connected. Three different types of wireless routers are currently supported: tomato, netgear and luci (OpenWRT). To get started add the following lines to your home-assistant.conf (example for Netgear):

- -
1
-2
-3
-4
-5
-
[device_tracker]
-platform=netgear
-host=192.168.1.1
-username=admin
-password=MY_PASSWORD
-
- - - - -

-Tomato requires an extra config variable called `http_id`. The value can be obtained by logging in to the Tomato admin interface and search for `http_id` in the page source code. -

- - - - -

-Before the Luci scanner can be used you have to install the luci RPC package on OpenWRT: opkg install luci-mod-rpc. -

- - -

Once tracking, the device_tracker component will maintain a file in your config dir called known_devices.csv. Edit this file to adjust which devices have to be tracked. Here you can also setup a url for each device to be used as the entity picture.

- -

As an alternative to the router-based device tracking, it is possible to directly scan the network for devices by using nmap. The IP addresses to scan can be specified in any format that nmap understands, including the network-prefix notation (192.168.1.1/24) and the range notation (192.168.1.1-255).

- -
1
-2
-3
-
[device_tracker]
-platform=nmap_tracker
-hosts=192.168.1.1/24
-
+ diff --git a/getting-started/troubleshooting.html b/getting-started/troubleshooting.html new file mode 100644 index 0000000000..8bfddfc4cb --- /dev/null +++ b/getting-started/troubleshooting.html @@ -0,0 +1,152 @@ + + + + + + + + + + + + Troubleshooting - Home Assistant + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+
+ +
+ + + + + +
+ + +
+
+ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/images/screenshots/more-info-dialog-sun.png b/images/screenshots/more-info-dialog-sun.png new file mode 100644 index 0000000000000000000000000000000000000000..adca5669b978c426475c17904560d8bb6359df41 GIT binary patch literal 34095 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®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 UhQsNHx?!=3qNYN%-1CtC1NQiS`2YX_ literal 0 HcmV?d00001 diff --git a/sitemap.xml b/sitemap.xml index ed1570e48f..0af25dbf57 100644 --- a/sitemap.xml +++ b/sitemap.xml @@ -27,67 +27,169 @@ https://home-assistant.io/developers/add_new_platform.html - 2015-01-13T08:35:22-08:00 + 2015-01-24T18:05:43-08:00 weekly 0.7 https://home-assistant.io/developers/api.html - 2015-01-13T08:35:22-08:00 + 2015-01-24T18:05:43-08:00 weekly 0.7 https://home-assistant.io/developers/architecture.html - 2015-01-13T08:35:22-08:00 + 2015-01-24T18:05:43-08:00 + weekly + 0.7 + + + https://home-assistant.io/components/automation.html + 2015-01-24T18:05:43-08:00 + weekly + 0.7 + + + https://home-assistant.io/components/browser.html + 2015-01-24T18:05:43-08:00 + weekly + 0.7 + + + https://home-assistant.io/components/chromecast.html + 2015-01-24T18:05:43-08:00 weekly 0.7 https://home-assistant.io/developers/creating_components.html - 2015-01-13T08:35:22-08:00 + 2015-01-24T18:05:43-08:00 + weekly + 0.7 + + + https://home-assistant.io/components/device_sun_light_trigger.html + 2015-01-24T18:05:43-08:00 + weekly + 0.7 + + + https://home-assistant.io/components/device_tracker.html + 2015-01-24T18:05:43-08:00 + weekly + 0.7 + + + https://home-assistant.io/components/discovery.html + 2015-01-24T18:05:43-08:00 + weekly + 0.7 + + + https://home-assistant.io/components/downloader.html + 2015-01-24T18:05:43-08:00 weekly 0.7 https://home-assistant.io/developers/frontend.html - 2015-01-13T08:35:22-08:00 + 2015-01-24T18:05:43-08:00 weekly 0.7 https://home-assistant.io/blog/ - 2015-01-13T08:35:22-08:00 - weekly - 0.7 - - - https://home-assistant.io/blog/archives/ - 2015-01-13T08:35:22-08:00 + 2015-01-24T18:05:43-08:00 weekly 0.7 https://home-assistant.io/ - 2015-01-13T08:35:22-08:00 + 2015-01-24T18:05:43-08:00 weekly 1.0 - https://home-assistant.io/components/ - 2015-01-13T08:35:22-08:00 - weekly - 0.7 - - - https://home-assistant.io/getting-started/ - 2015-01-13T08:35:22-08:00 + https://home-assistant.io/blog/archives/ + 2015-01-24T18:05:43-08:00 weekly 0.7 https://home-assistant.io/developers/ - 2015-01-13T08:35:22-08:00 + 2015-01-24T18:05:43-08:00 + weekly + 0.7 + + + https://home-assistant.io/getting-started/ + 2015-01-24T18:05:43-08:00 + weekly + 0.7 + + + https://home-assistant.io/components/ + 2015-01-24T18:05:43-08:00 + weekly + 0.7 + + + https://home-assistant.io/components/keyboard.html + 2015-01-24T18:05:43-08:00 + weekly + 0.7 + + + https://home-assistant.io/components/light.html + 2015-01-24T18:05:43-08:00 + weekly + 0.7 + + + https://home-assistant.io/components/notify.html + 2015-01-24T18:05:43-08:00 + weekly + 0.7 + + + https://home-assistant.io/components/simple_alarm.html + 2015-01-24T18:05:43-08:00 + weekly + 0.7 + + + https://home-assistant.io/components/sun.html + 2015-01-24T18:05:43-08:00 + weekly + 0.7 + + + https://home-assistant.io/components/switch.html + 2015-01-24T18:05:43-08:00 + weekly + 0.7 + + + https://home-assistant.io/components/tellstick_sensor.html + 2015-01-24T18:05:43-08:00 + weekly + 0.7 + + + https://home-assistant.io/components/thermostat.html + 2015-01-24T18:05:43-08:00 + weekly + 0.7 + + + https://home-assistant.io/getting-started/troubleshooting.html + 2015-01-24T18:05:43-08:00 + weekly + 0.7 + + + https://home-assistant.io/components/wink.html + 2015-01-24T18:05:43-08:00 weekly 0.7 diff --git a/stylesheets/screen.css b/stylesheets/screen.css index 5aa9fe666a..d18be0008f 100644 --- a/stylesheets/screen.css +++ b/stylesheets/screen.css @@ -26,4 +26,4 @@ * Email: dave@fontawesome.io * Twitter: http://twitter.com/davegandy * Work: Lead Product Designer @ Kyruus - http://kyruus.com - */@font-face{font-family:'FontAwesome';src:url("../font/fontawesome-webfont.eot?v=3.2.1");src:url("../font/fontawesome-webfont.eot?#iefix&v=3.2.1") format("embedded-opentype"),url("../font/fontawesome-webfont.woff?v=3.2.1") format("woff"),url("../font/fontawesome-webfont.ttf?v=3.2.1") format("truetype"),url("../font/fontawesome-webfont.svg#fontawesomeregular?v=3.2.1") format("svg");font-weight:normal;font-style:normal}[class^="icon-"],[class*=" icon-"]{font-family:FontAwesome;font-weight:normal;font-style:normal;text-decoration:inherit;-webkit-font-smoothing:antialiased;*margin-right:.3em}[class^="icon-"]:before,[class*=" icon-"]:before{text-decoration:inherit;display:inline-block;speak:none}.icon-large:before{vertical-align:-10%;font-size:1.33333em}a [class^="icon-"],a [class*=" icon-"]{display:inline}[class^="icon-"].icon-fixed-width,[class*=" icon-"].icon-fixed-width{display:inline-block;width:1.14286em;text-align:right;padding-right:0.28571em}[class^="icon-"].icon-fixed-width.icon-large,[class*=" icon-"].icon-fixed-width.icon-large{width:1.42857em}.icons-ul{margin-left:2.14286em;list-style-type:none}.icons-ul>li{position:relative}.icons-ul .icon-li{position:absolute;left:-2.14286em;width:2.14286em;text-align:center;line-height:inherit}[class^="icon-"].hide,[class*=" icon-"].hide{display:none}.icon-muted{color:#eee}.icon-light{color:#fff}.icon-dark{color:#333}.icon-border{border:solid 1px #eee;padding:.2em .25em .15em;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.icon-2x{font-size:2em}.icon-2x.icon-border{border-width:2px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.icon-3x{font-size:3em}.icon-3x.icon-border{border-width:3px;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.icon-4x{font-size:4em}.icon-4x.icon-border{border-width:4px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.icon-5x{font-size:5em}.icon-5x.icon-border{border-width:5px;-webkit-border-radius:7px;-moz-border-radius:7px;border-radius:7px}.pull-right{float:right}.pull-left{float:left}[class^="icon-"].pull-left,[class*=" icon-"].pull-left{margin-right:.3em}[class^="icon-"].pull-right,[class*=" icon-"].pull-right{margin-left:.3em}.icon-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:-35%}.icon-stack [class^="icon-"],.icon-stack [class*=" icon-"]{display:block;text-align:center;position:absolute;width:100%;height:100%;font-size:1em;line-height:inherit;*line-height:2em}.icon-stack .icon-stack-base{font-size:2em;*line-height:1em}.icon-spin{display:inline-block;-moz-animation:spin 2s infinite linear;-o-animation:spin 2s infinite linear;-webkit-animation:spin 2s infinite linear;animation:spin 2s infinite linear}a .icon-stack,a .icon-spin{display:inline-block;text-decoration:none}@-moz-keyframes spin{0%{-moz-transform:rotate(0deg)}100%{-moz-transform:rotate(359deg)}}@-webkit-keyframes spin{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg)}}@-o-keyframes spin{0%{-o-transform:rotate(0deg)}100%{-o-transform:rotate(359deg)}}@-ms-keyframes spin{0%{-ms-transform:rotate(0deg)}100%{-ms-transform:rotate(359deg)}}@keyframes spin{0%{transform:rotate(0deg)}100%{transform:rotate(359deg)}}.icon-rotate-90:before{-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg);filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1)}.icon-rotate-180:before{-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg);filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2)}.icon-rotate-270:before{-webkit-transform:rotate(270deg);-moz-transform:rotate(270deg);-ms-transform:rotate(270deg);-o-transform:rotate(270deg);transform:rotate(270deg);filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3)}.icon-flip-horizontal:before{-webkit-transform:scale(-1, 1);-moz-transform:scale(-1, 1);-ms-transform:scale(-1, 1);-o-transform:scale(-1, 1);transform:scale(-1, 1)}.icon-flip-vertical:before{-webkit-transform:scale(1, -1);-moz-transform:scale(1, -1);-ms-transform:scale(1, -1);-o-transform:scale(1, -1);transform:scale(1, -1)}a .icon-rotate-90:before,a .icon-rotate-180:before,a .icon-rotate-270:before,a .icon-flip-horizontal:before,a .icon-flip-vertical:before{display:inline-block}.icon-glass:before{content:"\f000"}.icon-music:before{content:"\f001"}.icon-search:before{content:"\f002"}.icon-envelope-alt:before{content:"\f003"}.icon-heart:before{content:"\f004"}.icon-star:before{content:"\f005"}.icon-star-empty:before{content:"\f006"}.icon-user:before{content:"\f007"}.icon-film:before{content:"\f008"}.icon-th-large:before{content:"\f009"}.icon-th:before{content:"\f00a"}.icon-th-list:before{content:"\f00b"}.icon-ok:before{content:"\f00c"}.icon-remove:before{content:"\f00d"}.icon-zoom-in:before{content:"\f00e"}.icon-zoom-out:before{content:"\f010"}.icon-power-off:before,.icon-off:before{content:"\f011"}.icon-signal:before{content:"\f012"}.icon-gear:before,.icon-cog:before{content:"\f013"}.icon-trash:before{content:"\f014"}.icon-home:before{content:"\f015"}.icon-file-alt:before{content:"\f016"}.icon-time:before{content:"\f017"}.icon-road:before{content:"\f018"}.icon-download-alt:before{content:"\f019"}.icon-download:before{content:"\f01a"}.icon-upload:before{content:"\f01b"}.icon-inbox:before{content:"\f01c"}.icon-play-circle:before{content:"\f01d"}.icon-rotate-right:before,.icon-repeat:before{content:"\f01e"}.icon-refresh:before{content:"\f021"}.icon-list-alt:before{content:"\f022"}.icon-lock:before{content:"\f023"}.icon-flag:before{content:"\f024"}.icon-headphones:before{content:"\f025"}.icon-volume-off:before{content:"\f026"}.icon-volume-down:before{content:"\f027"}.icon-volume-up:before{content:"\f028"}.icon-qrcode:before{content:"\f029"}.icon-barcode:before{content:"\f02a"}.icon-tag:before{content:"\f02b"}.icon-tags:before{content:"\f02c"}.icon-book:before{content:"\f02d"}.icon-bookmark:before{content:"\f02e"}.icon-print:before{content:"\f02f"}.icon-camera:before{content:"\f030"}.icon-font:before{content:"\f031"}.icon-bold:before{content:"\f032"}.icon-italic:before{content:"\f033"}.icon-text-height:before{content:"\f034"}.icon-text-width:before{content:"\f035"}.icon-align-left:before{content:"\f036"}.icon-align-center:before{content:"\f037"}.icon-align-right:before{content:"\f038"}.icon-align-justify:before{content:"\f039"}.icon-list:before{content:"\f03a"}.icon-indent-left:before{content:"\f03b"}.icon-indent-right:before{content:"\f03c"}.icon-facetime-video:before{content:"\f03d"}.icon-picture:before{content:"\f03e"}.icon-pencil:before{content:"\f040"}.icon-map-marker:before{content:"\f041"}.icon-adjust:before{content:"\f042"}.icon-tint:before{content:"\f043"}.icon-edit:before{content:"\f044"}.icon-share:before{content:"\f045"}.icon-check:before{content:"\f046"}.icon-move:before{content:"\f047"}.icon-step-backward:before{content:"\f048"}.icon-fast-backward:before{content:"\f049"}.icon-backward:before{content:"\f04a"}.icon-play:before{content:"\f04b"}.icon-pause:before{content:"\f04c"}.icon-stop:before{content:"\f04d"}.icon-forward:before{content:"\f04e"}.icon-fast-forward:before{content:"\f050"}.icon-step-forward:before{content:"\f051"}.icon-eject:before{content:"\f052"}.icon-chevron-left:before{content:"\f053"}.icon-chevron-right:before{content:"\f054"}.icon-plus-sign:before{content:"\f055"}.icon-minus-sign:before{content:"\f056"}.icon-remove-sign:before{content:"\f057"}.icon-ok-sign:before{content:"\f058"}.icon-question-sign:before{content:"\f059"}.icon-info-sign:before{content:"\f05a"}.icon-screenshot:before{content:"\f05b"}.icon-remove-circle:before{content:"\f05c"}.icon-ok-circle:before{content:"\f05d"}.icon-ban-circle:before{content:"\f05e"}.icon-arrow-left:before{content:"\f060"}.icon-arrow-right:before{content:"\f061"}.icon-arrow-up:before{content:"\f062"}.icon-arrow-down:before{content:"\f063"}.icon-mail-forward:before,.icon-share-alt:before{content:"\f064"}.icon-resize-full:before{content:"\f065"}.icon-resize-small:before{content:"\f066"}.icon-plus:before{content:"\f067"}.icon-minus:before{content:"\f068"}.icon-asterisk:before{content:"\f069"}.icon-exclamation-sign:before{content:"\f06a"}.icon-gift:before{content:"\f06b"}.icon-leaf:before{content:"\f06c"}.icon-fire:before{content:"\f06d"}.icon-eye-open:before{content:"\f06e"}.icon-eye-close:before{content:"\f070"}.icon-warning-sign:before{content:"\f071"}.icon-plane:before{content:"\f072"}.icon-calendar:before{content:"\f073"}.icon-random:before{content:"\f074"}.icon-comment:before{content:"\f075"}.icon-magnet:before{content:"\f076"}.icon-chevron-up:before{content:"\f077"}.icon-chevron-down:before{content:"\f078"}.icon-retweet:before{content:"\f079"}.icon-shopping-cart:before{content:"\f07a"}.icon-folder-close:before{content:"\f07b"}.icon-folder-open:before{content:"\f07c"}.icon-resize-vertical:before{content:"\f07d"}.icon-resize-horizontal:before{content:"\f07e"}.icon-bar-chart:before{content:"\f080"}.icon-twitter-sign:before{content:"\f081"}.icon-facebook-sign:before{content:"\f082"}.icon-camera-retro:before{content:"\f083"}.icon-key:before{content:"\f084"}.icon-gears:before,.icon-cogs:before{content:"\f085"}.icon-comments:before{content:"\f086"}.icon-thumbs-up-alt:before{content:"\f087"}.icon-thumbs-down-alt:before{content:"\f088"}.icon-star-half:before{content:"\f089"}.icon-heart-empty:before{content:"\f08a"}.icon-signout:before{content:"\f08b"}.icon-linkedin-sign:before{content:"\f08c"}.icon-pushpin:before{content:"\f08d"}.icon-external-link:before{content:"\f08e"}.icon-signin:before{content:"\f090"}.icon-trophy:before{content:"\f091"}.icon-github-sign:before{content:"\f092"}.icon-upload-alt:before{content:"\f093"}.icon-lemon:before{content:"\f094"}.icon-phone:before{content:"\f095"}.icon-unchecked:before,.icon-check-empty:before{content:"\f096"}.icon-bookmark-empty:before{content:"\f097"}.icon-phone-sign:before{content:"\f098"}.icon-twitter:before{content:"\f099"}.icon-facebook:before{content:"\f09a"}.icon-github:before{content:"\f09b"}.icon-unlock:before{content:"\f09c"}.icon-credit-card:before{content:"\f09d"}.icon-rss:before{content:"\f09e"}.icon-hdd:before{content:"\f0a0"}.icon-bullhorn:before{content:"\f0a1"}.icon-bell:before{content:"\f0a2"}.icon-certificate:before{content:"\f0a3"}.icon-hand-right:before{content:"\f0a4"}.icon-hand-left:before{content:"\f0a5"}.icon-hand-up:before{content:"\f0a6"}.icon-hand-down:before{content:"\f0a7"}.icon-circle-arrow-left:before{content:"\f0a8"}.icon-circle-arrow-right:before{content:"\f0a9"}.icon-circle-arrow-up:before{content:"\f0aa"}.icon-circle-arrow-down:before{content:"\f0ab"}.icon-globe:before{content:"\f0ac"}.icon-wrench:before{content:"\f0ad"}.icon-tasks:before{content:"\f0ae"}.icon-filter:before{content:"\f0b0"}.icon-briefcase:before{content:"\f0b1"}.icon-fullscreen:before{content:"\f0b2"}.icon-group:before{content:"\f0c0"}.icon-link:before{content:"\f0c1"}.icon-cloud:before{content:"\f0c2"}.icon-beaker:before{content:"\f0c3"}.icon-cut:before{content:"\f0c4"}.icon-copy:before{content:"\f0c5"}.icon-paperclip:before,.icon-paper-clip:before{content:"\f0c6"}.icon-save:before{content:"\f0c7"}.icon-sign-blank:before{content:"\f0c8"}.icon-reorder:before{content:"\f0c9"}.icon-list-ul:before{content:"\f0ca"}.icon-list-ol:before{content:"\f0cb"}.icon-strikethrough:before{content:"\f0cc"}.icon-underline:before{content:"\f0cd"}.icon-table:before{content:"\f0ce"}.icon-magic:before{content:"\f0d0"}.icon-truck:before{content:"\f0d1"}.icon-pinterest:before{content:"\f0d2"}.icon-pinterest-sign:before{content:"\f0d3"}.icon-google-plus-sign:before{content:"\f0d4"}.icon-google-plus:before{content:"\f0d5"}.icon-money:before{content:"\f0d6"}.icon-caret-down:before{content:"\f0d7"}.icon-caret-up:before{content:"\f0d8"}.icon-caret-left:before{content:"\f0d9"}.icon-caret-right:before{content:"\f0da"}.icon-columns:before{content:"\f0db"}.icon-sort:before{content:"\f0dc"}.icon-sort-down:before{content:"\f0dd"}.icon-sort-up:before{content:"\f0de"}.icon-envelope:before{content:"\f0e0"}.icon-linkedin:before{content:"\f0e1"}.icon-rotate-left:before,.icon-undo:before{content:"\f0e2"}.icon-legal:before{content:"\f0e3"}.icon-dashboard:before{content:"\f0e4"}.icon-comment-alt:before{content:"\f0e5"}.icon-comments-alt:before{content:"\f0e6"}.icon-bolt:before{content:"\f0e7"}.icon-sitemap:before{content:"\f0e8"}.icon-umbrella:before{content:"\f0e9"}.icon-paste:before{content:"\f0ea"}.icon-lightbulb:before{content:"\f0eb"}.icon-exchange:before{content:"\f0ec"}.icon-cloud-download:before{content:"\f0ed"}.icon-cloud-upload:before{content:"\f0ee"}.icon-user-md:before{content:"\f0f0"}.icon-stethoscope:before{content:"\f0f1"}.icon-suitcase:before{content:"\f0f2"}.icon-bell-alt:before{content:"\f0f3"}.icon-coffee:before{content:"\f0f4"}.icon-food:before{content:"\f0f5"}.icon-file-text-alt:before{content:"\f0f6"}.icon-building:before{content:"\f0f7"}.icon-hospital:before{content:"\f0f8"}.icon-ambulance:before{content:"\f0f9"}.icon-medkit:before{content:"\f0fa"}.icon-fighter-jet:before{content:"\f0fb"}.icon-beer:before{content:"\f0fc"}.icon-h-sign:before{content:"\f0fd"}.icon-plus-sign-alt:before{content:"\f0fe"}.icon-double-angle-left:before{content:"\f100"}.icon-double-angle-right:before{content:"\f101"}.icon-double-angle-up:before{content:"\f102"}.icon-double-angle-down:before{content:"\f103"}.icon-angle-left:before{content:"\f104"}.icon-angle-right:before{content:"\f105"}.icon-angle-up:before{content:"\f106"}.icon-angle-down:before{content:"\f107"}.icon-desktop:before{content:"\f108"}.icon-laptop:before{content:"\f109"}.icon-tablet:before{content:"\f10a"}.icon-mobile-phone:before{content:"\f10b"}.icon-circle-blank:before{content:"\f10c"}.icon-quote-left:before{content:"\f10d"}.icon-quote-right:before{content:"\f10e"}.icon-spinner:before{content:"\f110"}.icon-circle:before{content:"\f111"}.icon-mail-reply:before,.icon-reply:before{content:"\f112"}.icon-github-alt:before{content:"\f113"}.icon-folder-close-alt:before{content:"\f114"}.icon-folder-open-alt:before{content:"\f115"}.icon-expand-alt:before{content:"\f116"}.icon-collapse-alt:before{content:"\f117"}.icon-smile:before{content:"\f118"}.icon-frown:before{content:"\f119"}.icon-meh:before{content:"\f11a"}.icon-gamepad:before{content:"\f11b"}.icon-keyboard:before{content:"\f11c"}.icon-flag-alt:before{content:"\f11d"}.icon-flag-checkered:before{content:"\f11e"}.icon-terminal:before{content:"\f120"}.icon-code:before{content:"\f121"}.icon-reply-all:before{content:"\f122"}.icon-mail-reply-all:before{content:"\f122"}.icon-star-half-full:before,.icon-star-half-empty:before{content:"\f123"}.icon-location-arrow:before{content:"\f124"}.icon-crop:before{content:"\f125"}.icon-code-fork:before{content:"\f126"}.icon-unlink:before{content:"\f127"}.icon-question:before{content:"\f128"}.icon-info:before{content:"\f129"}.icon-exclamation:before{content:"\f12a"}.icon-superscript:before{content:"\f12b"}.icon-subscript:before{content:"\f12c"}.icon-eraser:before{content:"\f12d"}.icon-puzzle-piece:before{content:"\f12e"}.icon-microphone:before{content:"\f130"}.icon-microphone-off:before{content:"\f131"}.icon-shield:before{content:"\f132"}.icon-calendar-empty:before{content:"\f133"}.icon-fire-extinguisher:before{content:"\f134"}.icon-rocket:before{content:"\f135"}.icon-maxcdn:before{content:"\f136"}.icon-chevron-sign-left:before{content:"\f137"}.icon-chevron-sign-right:before{content:"\f138"}.icon-chevron-sign-up:before{content:"\f139"}.icon-chevron-sign-down:before{content:"\f13a"}.icon-html5:before{content:"\f13b"}.icon-css3:before{content:"\f13c"}.icon-anchor:before{content:"\f13d"}.icon-unlock-alt:before{content:"\f13e"}.icon-bullseye:before{content:"\f140"}.icon-ellipsis-horizontal:before{content:"\f141"}.icon-ellipsis-vertical:before{content:"\f142"}.icon-rss-sign:before{content:"\f143"}.icon-play-sign:before{content:"\f144"}.icon-ticket:before{content:"\f145"}.icon-minus-sign-alt:before{content:"\f146"}.icon-check-minus:before{content:"\f147"}.icon-level-up:before{content:"\f148"}.icon-level-down:before{content:"\f149"}.icon-check-sign:before{content:"\f14a"}.icon-edit-sign:before{content:"\f14b"}.icon-external-link-sign:before{content:"\f14c"}.icon-share-sign:before{content:"\f14d"}.icon-compass:before{content:"\f14e"}.icon-collapse:before{content:"\f150"}.icon-collapse-top:before{content:"\f151"}.icon-expand:before{content:"\f152"}.icon-euro:before,.icon-eur:before{content:"\f153"}.icon-gbp:before{content:"\f154"}.icon-dollar:before,.icon-usd:before{content:"\f155"}.icon-rupee:before,.icon-inr:before{content:"\f156"}.icon-yen:before,.icon-jpy:before{content:"\f157"}.icon-renminbi:before,.icon-cny:before{content:"\f158"}.icon-won:before,.icon-krw:before{content:"\f159"}.icon-bitcoin:before,.icon-btc:before{content:"\f15a"}.icon-file:before{content:"\f15b"}.icon-file-text:before{content:"\f15c"}.icon-sort-by-alphabet:before{content:"\f15d"}.icon-sort-by-alphabet-alt:before{content:"\f15e"}.icon-sort-by-attributes:before{content:"\f160"}.icon-sort-by-attributes-alt:before{content:"\f161"}.icon-sort-by-order:before{content:"\f162"}.icon-sort-by-order-alt:before{content:"\f163"}.icon-thumbs-up:before{content:"\f164"}.icon-thumbs-down:before{content:"\f165"}.icon-youtube-sign:before{content:"\f166"}.icon-youtube:before{content:"\f167"}.icon-xing:before{content:"\f168"}.icon-xing-sign:before{content:"\f169"}.icon-youtube-play:before{content:"\f16a"}.icon-dropbox:before{content:"\f16b"}.icon-stackexchange:before{content:"\f16c"}.icon-instagram:before{content:"\f16d"}.icon-flickr:before{content:"\f16e"}.icon-adn:before{content:"\f170"}.icon-bitbucket:before{content:"\f171"}.icon-bitbucket-sign:before{content:"\f172"}.icon-tumblr:before{content:"\f173"}.icon-tumblr-sign:before{content:"\f174"}.icon-long-arrow-down:before{content:"\f175"}.icon-long-arrow-up:before{content:"\f176"}.icon-long-arrow-left:before{content:"\f177"}.icon-long-arrow-right:before{content:"\f178"}.icon-apple:before{content:"\f179"}.icon-windows:before{content:"\f17a"}.icon-android:before{content:"\f17b"}.icon-linux:before{content:"\f17c"}.icon-dribbble:before{content:"\f17d"}.icon-skype:before{content:"\f17e"}.icon-foursquare:before{content:"\f180"}.icon-trello:before{content:"\f181"}.icon-female:before{content:"\f182"}.icon-male:before{content:"\f183"}.icon-gittip:before{content:"\f184"}.icon-sun:before{content:"\f185"}.icon-moon:before{content:"\f186"}.icon-archive:before{content:"\f187"}.icon-bug:before{content:"\f188"}.icon-vk:before{content:"\f189"}.icon-weibo:before{content:"\f18a"}.icon-renren:before{content:"\f18b"}body,html{background-color:#f5f5f5;color:#222;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;height:100%}a{color:#049cdb;text-decoration:none}a:visited{color:#0378a9}.menu a{color:#049cdb}.gist{font-size:0.75em}@media only screen and (max-width: 480px){.title.indent::before{display:none}}.title.indent::before{content:"// ";color:#049cdb}.divider,.usp hr,.hero hr{border:none;border-bottom:2px solid #049cdb;clear:both;margin:2em 0}article.post img,article.page img,article.listing img{border:5px solid #fff;border-radius:3px;box-shadow:0 0 3px rgba(0,0,0,0.25)}article.post img.right,article.page img.right,article.listing img.right{float:right;margin:0 0 10px 20px}article.post img.left,article.page img.left,article.listing img.left{float:left;margin:0 20px 10px 0}.grid-wrapper{margin:auto;max-width:1100px;padding:0 25px}.grid-center{text-align:center}.grid-center>.grid__item{text-align:left}body>header{-webkit-box-shadow:0 0 3px rgba(0,0,0,0.25);-moz-box-shadow:0 0 3px rgba(0,0,0,0.25);-ms-box-shadow:0 0 3px rgba(0,0,0,0.25);-o-box-shadow:0 0 3px rgba(0,0,0,0.25);box-shadow:0 0 3px rgba(0,0,0,0.25);background-color:#fff;margin-bottom:2em}body>header .site-title{color:#222;font-size:1.7em;font-weight:bold;line-height:2.5em}body{-webkit-animation:bugfix infinite 1s}@-webkit-keyframes bugfix{from{padding:0}to{padding:0}}.header{position:relative}#toggle,.toggle{display:none}.menu li{list-style:none;float:left}@media only screen and (max-width: 790px){.menu{display:none;opacity:0;width:100%;position:absolute;right:0}.menu li{display:block;width:100%;margin:0}.menu li a{display:block;width:100%;text-decoration:none;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.toggle{display:block;position:relative;cursor:pointer;-webkit-touch-callout:none;-webkit-user-select:none;user-select:none}#toggle:checked ~ .menu{display:block;opacity:1;z-index:999}}ul.menu li{position:relative}ul.menu li:hover ul{display:block}ul.menu li ul{display:none;z-index:10;position:absolute;top:68px;margin-left:0;background-color:white}ul.menu li ul li{white-space:nowrap;float:none}ul.menu li ul li a{display:block;padding:20px 10px}ul.menu li ul li a:hover,ul.menu li ul li a:focus{background:#eee}header .grid{height:68px}.menu{margin:0;top:68px}.menu li a{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-transition:all 0.25s linear;-moz-transition:all 0.25s linear;-o-transition:all 0.25s linear;transition:all 0.25s linear;display:block;padding:32px 20px;text-decoration:none;font-weight:normal;font-size:16px;line-height:1}.menu>li>a:hover,.menu>li>a:focus{background:#f5f5f5;box-shadow:inset 0px 5px #049cdb;color:#049cdb;padding:40px 20px 24px}.toggle{z-index:20}@media only screen and (max-width: 790px){.menu{background:#fff;border-top:1px solid #049cdb;border-bottom:4px solid #049cdb}.menu,.menu li,.menu li a{height:auto}.menu li a{padding:15px 15px !important}.menu li a:hover,.menu li a:focus{background:#eee;box-shadow:inset 5px 0px #049cdb;padding:15px 15px 15px 25px}.toggle{position:absolute;top:17px;right:10px}.toggle::after{-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-transition:all 0.5s linear;-moz-transition:all 0.5s linear;-o-transition:all 0.5s linear;transition:all 0.5s linear;font-family:"FontAwesome";content:"\f0c9";display:inline-block;width:100%;padding:10px 15px;background:#049cdb;text-align:center;font-size:12px;color:#fff;white-space:nowrap}.toggle:hover::after{background:#0383b8}#toggle:checked+.toggle::after{content:attr(data-close)}ul.menu li ul{display:block;position:relative;top:0}}#page-wrap{min-height:100%;margin-bottom:-100px}#page-wrap::after{content:"";display:block;height:100px}body>footer{-webkit-box-shadow:0 0 3px rgba(0,0,0,0.25);-moz-box-shadow:0 0 3px rgba(0,0,0,0.25);-ms-box-shadow:0 0 3px rgba(0,0,0,0.25);-o-box-shadow:0 0 3px rgba(0,0,0,0.25);box-shadow:0 0 3px rgba(0,0,0,0.25);background-color:#fff;margin-top:3em}.copyright{margin:0;padding:20px 0}article blockquote{border-left:2px solid #049cdb;color:#484848;font-family:Georgia,"Times New Roman",Times,serif;font-size:1.25em;font-style:italic;padding-left:15px}article blockquote footer{float:right;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:0.8em}article blockquote footer strong::after{content:" \2014 "}article blockquote footer a{text-decoration:underline}article .pullquote-left::before,article .pullquote-right::before{border:medium none;color:#049cdb;content:"\201C" attr(data-pullquote) "\201D";float:right;font-family:Georgia,"Times New Roman",Times,serif;font-size:1.4em;font-style:italic;line-height:1.45em;margin:0.3em 0 1em 1.5em;padding:0;position:relative;top:7px;width:45%}@media only screen and (max-width: 480px){article .pullquote-left::before,article .pullquote-right::before{border-top:1px dotted #049cdb;border-bottom:1px dotted #049cdb;padding:0 10px;width:100%}}article .tags{display:inline}article .tags li{margin-right:2px}article .tags li::after{content:","}article .tags li:last-child::after{content:""}article .tags li a{color:#555;text-decoration:none}article .tags li a:hover{text-decoration:underline}article .meta{font-size:12px;padding:0 0 5px}article .meta>*{margin-right:15px;white-space:nowrap}article .meta>*:last-child{margin-right:0}article .meta .comments::before{content:"\f075";font-family:"FontAwesome";padding-right:3px}article.listing{margin-bottom:20px}article.listing h1{margin-bottom:0}article.listing h1 a{color:#049cdb;text-decoration:none}article.listing .entry-content{margin:10px 0}article.listing+hr{border:none;border-bottom:1px solid #049cdb}@media only screen and (max-width: 480px){article.post .tags{clear:both;margin-top:7px}}article.post h1{margin-bottom:0}article.post .meta{border-bottom:1px solid #049cdb;margin-bottom:20px}#archive-list article h1{margin-bottom:0}.sans,html .gist .gist-file .gist-meta{font-family:"Helvetica Neue",Arial,sans-serif}.mono,pre,p code,li code{font-family:Menlo,Monaco,"Andale Mono","lucida console","Courier New",monospace}.highlight table{margin-bottom:0}.highlight .gutter,.highlight .code{padding:0}.highlight .gutter .line-number{display:block}.highlight,html .gist .gist-file .gist-syntax .gist-highlight{border:1px solid #05232b !important}.highlight table td.code,html .gist .gist-file .gist-syntax .gist-highlight table td.code{width:100%}.highlight .line-numbers,html .gist .gist-file .gist-syntax .highlight .line_numbers{text-align:right;font-size:13px;line-height:1.45em;background:#073642 url('/images/noise.png?1419195603') top left !important;border-right:1px solid #00232c !important;-webkit-box-shadow:#083e4b -1px 0 inset;-moz-box-shadow:#083e4b -1px 0 inset;-ms-box-shadow:#083e4b -1px 0 inset;-o-box-shadow:#083e4b -1px 0 inset;box-shadow:#083e4b -1px 0 inset;text-shadow:#021014 0 -1px;padding:.8em !important;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.highlight .line-numbers span,html .gist .gist-file .gist-syntax .highlight .line_numbers span{color:#586e75 !important}figure.code,.gist-file,pre{-webkit-box-shadow:rgba(0,0,0,0.06) 0 0 10px;-moz-box-shadow:rgba(0,0,0,0.06) 0 0 10px;-ms-box-shadow:rgba(0,0,0,0.06) 0 0 10px;-o-box-shadow:rgba(0,0,0,0.06) 0 0 10px;box-shadow:rgba(0,0,0,0.06) 0 0 10px}figure.code .highlight pre,.gist-file .highlight pre,pre .highlight pre{-webkit-box-shadow:none;-moz-box-shadow:none;-ms-box-shadow:none;-o-box-shadow:none;box-shadow:none}.gist .highlight *::-moz-selection,figure.code .highlight *::-moz-selection{background:#386774;color:inherit;text-shadow:#002b36 0 1px}.gist .highlight *::-webkit-selection,figure.code .highlight *::-webkit-selection{background:#386774;color:inherit;text-shadow:#002b36 0 1px}.gist .highlight *::selection,figure.code .highlight *::selection{background:#386774;color:inherit;text-shadow:#002b36 0 1px}html .gist .gist-file{margin-bottom:1.8em;position:relative;border:none;padding-top:26px !important}html .gist .gist-file .highlight{margin-bottom:0}html .gist .gist-file .gist-syntax{border-bottom:0 !important;background:none !important}html .gist .gist-file .gist-syntax .gist-highlight{background:#002b36 !important}html .gist .gist-file .gist-syntax .highlight pre{padding:0}html .gist .gist-file .gist-meta{padding:.6em 0.8em;border:1px solid #083e4b !important;color:#586e75;font-size:.7em !important;background:#073642 url('/images/noise.png?1419195603') top left;line-height:1.5em}html .gist .gist-file .gist-meta a{color:#75878b !important}html .gist .gist-file .gist-meta a:hover{color:#93a1a1 !important}html .gist .gist-file .gist-meta a[href*='#file']{position:absolute;top:0;left:0;right:-10px;color:#474747 !important}html .gist .gist-file .gist-meta a[href*='#file']:hover{color:#049cdb !important}html .gist .gist-file .gist-meta a[href*=raw]{top:.4em}pre{background:#002b36 url('/images/noise.png?1419195603') top left;-webkit-border-radius:0.4em;-moz-border-radius:0.4em;border-radius:0.4em;border:1px solid #05232b;line-height:1.45em;font-size:13px;margin-bottom:2.1em;padding:.8em 1em;color:#93a1a1;overflow:auto}h3.filename+pre{-webkit-border-radius:0px;-moz-border-radius:0px;border-radius:0px}p code,li code{display:inline-block;white-space:no-wrap;background:#fff;font-size:.8em;line-height:1.5em;color:#555;border:1px solid #ddd;-webkit-border-radius:0.4em;-moz-border-radius:0.4em;border-radius:0.4em;padding:0 .3em;margin:-1px 0}p pre code,li pre code{font-size:1em !important;background:none;border:none}.pre-code,html .gist .gist-file .gist-syntax .highlight pre,.highlight code{font-family:Menlo,Monaco,"Andale Mono","lucida console","Courier New",monospace !important;overflow:scroll;overflow-y:hidden;display:block;padding:.8em;overflow-x:auto;line-height:1.45em;background:#002b36 url('/images/noise.png?1419195603') top left !important;color:#93a1a1 !important}.pre-code span,html .gist .gist-file .gist-syntax .highlight pre span,.highlight code span{color:#93a1a1 !important}.pre-code span,html .gist .gist-file .gist-syntax .highlight pre span,.highlight code span{font-style:normal !important;font-weight:normal !important}.pre-code .c,html .gist .gist-file .gist-syntax .highlight pre .c,.highlight code .c{color:#586e75 !important;font-style:italic !important}.pre-code .cm,html .gist .gist-file .gist-syntax .highlight pre .cm,.highlight code .cm{color:#586e75 !important;font-style:italic !important}.pre-code .cp,html .gist .gist-file .gist-syntax .highlight pre .cp,.highlight code .cp{color:#586e75 !important;font-style:italic !important}.pre-code .c1,html .gist .gist-file .gist-syntax .highlight pre .c1,.highlight code .c1{color:#586e75 !important;font-style:italic !important}.pre-code .cs,html .gist .gist-file .gist-syntax .highlight pre .cs,.highlight code .cs{color:#586e75 !important;font-weight:bold !important;font-style:italic !important}.pre-code .err,html .gist .gist-file .gist-syntax .highlight pre .err,.highlight code .err{color:#dc322f !important;background:none !important}.pre-code .k,html .gist .gist-file .gist-syntax .highlight pre .k,.highlight code .k{color:#cb4b16 !important}.pre-code .o,html .gist .gist-file .gist-syntax .highlight pre .o,.highlight code .o{color:#93a1a1 !important;font-weight:bold !important}.pre-code .p,html .gist .gist-file .gist-syntax .highlight pre .p,.highlight code .p{color:#93a1a1 !important}.pre-code .ow,html .gist .gist-file .gist-syntax .highlight pre .ow,.highlight code .ow{color:#2aa198 !important;font-weight:bold !important}.pre-code .gd,html .gist .gist-file .gist-syntax .highlight pre .gd,.highlight code .gd{color:#93a1a1 !important;background-color:#372c34 !important;display:inline-block}.pre-code .gd .x,html .gist .gist-file .gist-syntax .highlight pre .gd .x,.highlight code .gd .x{color:#93a1a1 !important;background-color:#4d2d33 !important;display:inline-block}.pre-code .ge,html .gist .gist-file .gist-syntax .highlight pre .ge,.highlight code .ge{color:#93a1a1 !important;font-style:italic !important}.pre-code .gh,html .gist .gist-file .gist-syntax .highlight pre .gh,.highlight code .gh{color:#586e75 !important}.pre-code .gi,html .gist .gist-file .gist-syntax .highlight pre .gi,.highlight code .gi{color:#93a1a1 !important;background-color:#1a412b !important;display:inline-block}.pre-code .gi .x,html .gist .gist-file .gist-syntax .highlight pre .gi .x,.highlight code .gi .x{color:#93a1a1 !important;background-color:#355720 !important;display:inline-block}.pre-code .gs,html .gist .gist-file .gist-syntax .highlight pre .gs,.highlight code .gs{color:#93a1a1 !important;font-weight:bold !important}.pre-code .gu,html .gist .gist-file .gist-syntax .highlight pre .gu,.highlight code .gu{color:#6c71c4 !important}.pre-code .kc,html .gist .gist-file .gist-syntax .highlight pre .kc,.highlight code .kc{color:#859900 !important;font-weight:bold !important}.pre-code .kd,html .gist .gist-file .gist-syntax .highlight pre .kd,.highlight code .kd{color:#268bd2 !important}.pre-code .kp,html .gist .gist-file .gist-syntax .highlight pre .kp,.highlight code .kp{color:#cb4b16 !important;font-weight:bold !important}.pre-code .kr,html .gist .gist-file .gist-syntax .highlight pre .kr,.highlight code .kr{color:#d33682 !important;font-weight:bold !important}.pre-code .kt,html .gist .gist-file .gist-syntax .highlight pre .kt,.highlight code .kt{color:#2aa198 !important}.pre-code .n,html .gist .gist-file .gist-syntax .highlight pre .n,.highlight code .n{color:#268bd2 !important}.pre-code .na,html .gist .gist-file .gist-syntax .highlight pre .na,.highlight code .na{color:#268bd2 !important}.pre-code .nb,html .gist .gist-file .gist-syntax .highlight pre .nb,.highlight code .nb{color:#859900 !important}.pre-code .nc,html .gist .gist-file .gist-syntax .highlight pre .nc,.highlight code .nc{color:#d33682 !important}.pre-code .no,html .gist .gist-file .gist-syntax .highlight pre .no,.highlight code .no{color:#b58900 !important}.pre-code .nl,html .gist .gist-file .gist-syntax .highlight pre .nl,.highlight code .nl{color:#859900 !important}.pre-code .ne,html .gist .gist-file .gist-syntax .highlight pre .ne,.highlight code .ne{color:#268bd2 !important;font-weight:bold !important}.pre-code .nf,html .gist .gist-file .gist-syntax .highlight pre .nf,.highlight code .nf{color:#268bd2 !important;font-weight:bold !important}.pre-code .nn,html .gist .gist-file .gist-syntax .highlight pre .nn,.highlight code .nn{color:#b58900 !important}.pre-code .nt,html .gist .gist-file .gist-syntax .highlight pre .nt,.highlight code .nt{color:#268bd2 !important;font-weight:bold !important}.pre-code .nx,html .gist .gist-file .gist-syntax .highlight pre .nx,.highlight code .nx{color:#b58900 !important}.pre-code .vg,html .gist .gist-file .gist-syntax .highlight pre .vg,.highlight code .vg{color:#268bd2 !important}.pre-code .vi,html .gist .gist-file .gist-syntax .highlight pre .vi,.highlight code .vi{color:#268bd2 !important}.pre-code .nv,html .gist .gist-file .gist-syntax .highlight pre .nv,.highlight code .nv{color:#268bd2 !important}.pre-code .mf,html .gist .gist-file .gist-syntax .highlight pre .mf,.highlight code .mf{color:#2aa198 !important}.pre-code .m,html .gist .gist-file .gist-syntax .highlight pre .m,.highlight code .m{color:#2aa198 !important}.pre-code .mh,html .gist .gist-file .gist-syntax .highlight pre .mh,.highlight code .mh{color:#2aa198 !important}.pre-code .mi,html .gist .gist-file .gist-syntax .highlight pre .mi,.highlight code .mi{color:#2aa198 !important}.pre-code .s,html .gist .gist-file .gist-syntax .highlight pre .s,.highlight code .s{color:#2aa198 !important}.pre-code .sd,html .gist .gist-file .gist-syntax .highlight pre .sd,.highlight code .sd{color:#2aa198 !important}.pre-code .s2,html .gist .gist-file .gist-syntax .highlight pre .s2,.highlight code .s2{color:#2aa198 !important}.pre-code .se,html .gist .gist-file .gist-syntax .highlight pre .se,.highlight code .se{color:#dc322f !important}.pre-code .si,html .gist .gist-file .gist-syntax .highlight pre .si,.highlight code .si{color:#268bd2 !important}.pre-code .sr,html .gist .gist-file .gist-syntax .highlight pre .sr,.highlight code .sr{color:#2aa198 !important}.pre-code .s1,html .gist .gist-file .gist-syntax .highlight pre .s1,.highlight code .s1{color:#2aa198 !important}.pre-code div .gd,html .gist .gist-file .gist-syntax .highlight pre div .gd,.highlight code div .gd,.pre-code div .gd .x,html .gist .gist-file .gist-syntax .highlight pre div .gd .x,.highlight code div .gd .x,.pre-code div .gi,html .gist .gist-file .gist-syntax .highlight pre div .gi,.highlight code div .gi,.pre-code div .gi .x,html .gist .gist-file .gist-syntax .highlight pre div .gi .x,.highlight code div .gi .x{display:inline-block;width:100%}.highlight,.gist-highlight{margin-bottom:1.8em;background:#002b36;overflow-y:hidden;overflow-x:auto}.highlight pre,.gist-highlight pre{background:none;-webkit-border-radius:0px;-moz-border-radius:0px;border-radius:0px;border:none;padding:0;margin-bottom:0}pre::-webkit-scrollbar,.highlight::-webkit-scrollbar,.gist-highlight::-webkit-scrollbar{height:.5em;background:rgba(255,255,255,0.15)}pre::-webkit-scrollbar-thumb:horizontal,.highlight::-webkit-scrollbar-thumb:horizontal,.gist-highlight::-webkit-scrollbar-thumb:horizontal{background:rgba(255,255,255,0.2);-webkit-border-radius:4px;border-radius:4px}.highlight code{background:#000}figure.code{background:none;padding:0;border:0;margin-bottom:1.5em}figure.code pre{margin-bottom:0}figure.code figcaption{position:relative}figure.code .highlight{margin-bottom:0}.code-title,html .gist .gist-file .gist-meta a[href*='#file'],h3.filename,figure.code figcaption{text-align:center;font-size:13px;line-height:2em;text-shadow:#cbcccc 0 1px 0;color:#474747;font-weight:normal;margin-bottom:0;-webkit-border-radius:5px 5px 0 0;-moz-border-radius:5px 5px 0 0;border-radius:5px 5px 0 0;font-family:"Helvetica Neue", Arial, "Lucida Grande", "Lucida Sans Unicode", Lucida, sans-serif;background:#aaa url('/images/code_bg.png?1419195603') top repeat-x;border:1px solid #565656;border-top-color:#cbcbcb;border-left-color:#a5a5a5;border-right-color:#a5a5a5;border-bottom:0}.download-source,html .gist .gist-file .gist-meta a[href*=raw],figure.code figcaption a{position:absolute;right:.8em;color:#666 !important;z-index:1;font-size:13px;text-shadow:#cbcccc 0 1px 0;padding-left:3em}@media only screen and (min-width: 1024px){.aside-module:first-child .title{margin-top:0}}.aside-module .title{border-bottom:1px solid #049cdb;color:#333;margin:1em 0 0.5em;padding-bottom:5px}.aside-module .title .btn{border-bottom-left-radius:0;border-bottom-right-radius:0;padding:5px 10px;text-decoration:none}.aside-module .loading{display:block;font-size:2em;text-align:center}#github-repos li p{font-size:0.6em;margin-bottom:0}#pinboard .pin-item>p{margin-bottom:0}#pinboard .pin-item>p a:hover{text-decoration:underline}#pinboard .pin-item>p a::after{content:","}#pinboard .pin-item>p a:last-child::after{content:""}@media only screen and (min-width: 481px){.social ul{-webkit-column-count:2;-moz-column-count:2;column-count:2;-webkit-column-gap:10px;-moz-column-gap:10px;column-gap:10px}}.social a{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;background-color:#e8e8e8;border:1px solid #dcdcdc;border-radius:4px;color:#222;display:inline-block;font-size:0.8em;margin-bottom:7px;padding:1em;padding-right:0.5em;position:relative;text-decoration:none;width:100%;z-index:5;-webkit-transition:box-shadow 200ms,color 400ms,transform 400ms;-moz-transition:box-shadow 200ms,color 400ms,transform 400ms;-o-transition:box-shadow 200ms,color 400ms,transform 400ms;transition:box-shadow 200ms,color 400ms,transform 400ms}.social a:hover{color:#fff !important;text-decoration:none;text-shadow:1px 1px 0 rgba(0,0,0,0.25);z-index:7}.social a:hover::before{border:1px solid #000;height:100%;top:0;width:100%}.social a::before{background-color:#222;border-radius:4px;content:"";height:1px;position:absolute;top:50%;left:0%;width:0;z-index:-1;-webkit-transition:border 200ms,height 200ms 200ms,top 200ms 200ms,width 200ms;-moz-transition:border 200ms,height 200ms 200ms,top 200ms 200ms,width 200ms;-o-transition:border 200ms,height 200ms 200ms,top 200ms 200ms,width 200ms;transition:border 200ms,height 200ms 200ms,top 200ms 200ms,width 200ms}.social a i{font-size:2em;line-height:0.8em;margin-right:0.35em}.social a.adn{color:#4a484c}.social a.adn::before{background-color:#4a484c;border-color:#3d3c3f}.social a.dribbble{color:#ea4c89}.social a.dribbble::before{background-color:#ea4c89;border-color:#e7357a}.social a.facebook{color:#3b5998}.social a.facebook::before{background-color:#3b5998;border-color:#344e86}.social a.github{color:#333}.social a.github::before{background-color:#333;border-color:#262626}.social a.gplus{color:#db4a39}.social a.gplus::before{background-color:#db4a39;border-color:#d43927}.social a.linkedin{color:#4875b4}.social a.linkedin::before{background-color:#4875b4;border-color:#4169a2}.social a.pinterest{color:#cc2127}.social a.pinterest::before{background-color:#cc2127;border-color:#b61d23}.social a.stackoverflow{color:#fe7a15}.social a.stackoverflow::before{background-color:#fe7a15;border-color:#f86c01}.social a.twitter{color:#00a0d1}.social a.twitter::before{background-color:#00a0d1;border-color:#008cb7}.social a.youtube{color:#cc181e}.social a.youtube::before{background-color:#cc181e;border-color:#b5151b}.usp{text-align:center}@media only screen and (min-width: 481px) and (max-width: 1023px){.usp{margin-bottom:25px}}.usp .icon i{-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%;border:10px solid #049cdb;color:#222;display:inline-block;font-size:6em;height:1.85em;line-height:normal;padding:0.3em;width:1.85em}.usp .title{color:#222;font-size:1.1em;line-height:3em;margin:0;text-align:center;text-transform:capitalize}.usp .title+hr{margin:0;margin-bottom:1em}.usp hr{margin-bottom:1em}.usp p{text-align:left}.hero{background-color:#0b6b94;background-position:0 50%;-webkit-background-size:cover;-moz-background-size:cover;-o-background-size:cover;background-size:cover;border-bottom:1px solid #fff;color:#fff;font-weight:bold;margin-top:-2em;margin-bottom:1.5em;padding:50px 0;position:relative}.hero>.grid-wrapper{position:relative;z-index:7}.hero .credit{font-size:0.75em;font-style:italic;position:absolute;bottom:0;right:10px;z-index:7}.hero .credit a{border-bottom:1px solid;color:#fff;text-decoration:none}.hero .credit .licence{border:none}.hero .avatar{text-align:center}@media only screen and (max-width: 1023px){.hero .avatar{margin-bottom:30px}}.hero .avatar img{-webkit-border-radius:100%;-moz-border-radius:100%;border-radius:100%;border:10px solid #049cdb}.hero h1{font-size:3.5em;line-height:1em;text-shadow:2px 2px 0 rgba(0,0,0,0.75)}.hero hr{box-shadow:1px 1px 0 rgba(0,0,0,0.75)}.hero p{text-shadow:1px 1px 0 rgba(0,0,0,0.75)}.hero p small{color:#eee;font-size:.65em}.pull-left{float:left}.pull-right{float:right}.clearfix,article blockquote{*zoom:1}.clearfix::before,article blockquote::before,.clearfix::after,article blockquote::after{display:table;content:"";line-height:0}.clearfix::after,article blockquote::after{clear:both}ul.unstyled,ul.inline,article ul.tags,ul.divided,ol.unstyled,ol.inline,article ol.tags,ol.divided{list-style-type:none;margin:0}ul.inline,article ul.tags,ol.inline,article ol.tags{list-style-type:none}ul.inline>li,article ul.tags>li,ol.inline>li,article ol.tags>li{display:inline}ul.divided>li,ol.divided>li{border-top:1px solid #fff;border-bottom:1px solid #e8e8e8;padding:0.5em 0}ul.divided>li:first-child,ol.divided>li:first-child{border-top:none;padding-top:0}ul.divided>li:last-child,ol.divided>li:last-child{border-bottom:none}.btn{background-color:#0494d1;background-image:-moz-linear-gradient(top, #049cdb, #048ac2);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#049cdb), to(#048ac2));background-image:-webkit-linear-gradient(top, #049cdb, #048ac2);background-image:-o-linear-gradient(top, #049cdb, #048ac2);background-image:linear-gradient(to bottom, #049cdb,#048ac2);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FF049CDB', endColorstr='#FF048AC2', GradientType=0);-webkit-box-shadow:0 0 3px rgba(0,0,0,0.25);-moz-box-shadow:0 0 3px rgba(0,0,0,0.25);-ms-box-shadow:0 0 3px rgba(0,0,0,0.25);-o-box-shadow:0 0 3px rgba(0,0,0,0.25);box-shadow:0 0 3px rgba(0,0,0,0.25);border-radius:3px;color:#fff;display:inline-block;padding:7px 15px;text-decoration:none;text-shadow:1px 1px 0 rgba(0,0,0,0.25)}.btn:hover{text-decoration:underline}.btn:visited{color:#fff}.grid{letter-spacing:-1rem}.opera:-o-prefocus,.grid{word-spacing:-1rem}.grid__item{letter-spacing:normal;word-spacing:normal}@media only screen and (min-width: 481px){.flex{display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-box-direction:normal;-moz-box-direction:normal;-webkit-box-orient:horizontal;-moz-box-orient:horizontal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-box-pack:start;-moz-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start;-webkit-align-content:stretch;-ms-flex-line-pack:stretch;align-content:stretch;-webkit-box-align:start;-moz-box-align:start;-webkit-align-items:flex-start;-ms-flex-align:start;align-items:flex-start}.flex__item{-webkit-box-ordinal-group:1;-moz-box-ordinal-group:1;-webkit-order:0;-ms-flex-order:0;order:0;-webkit-box-flex:0;-moz-box-flex:0;-webkit-flex:0 1 auto;-ms-flex:0 1 auto;flex:0 1 auto;-webkit-align-self:center;-ms-flex-item-align:center;align-self:center}}.ha-title{white-space:nowrap}.ha-title img{width:40px;vertical-align:middle}.usp ul{text-align:left;margin-left:27px;margin-top:-18px}.hero-buttons a{margin:0 30px 10px 0}.hero-buttons a:last-child{margin:0}article.post img,article.post table,article.page img,article.page table,article.listing img,article.listing table{border-radius:3px;box-shadow:rgba(0,0,0,0.06) 0 0 10px}article.post img.no-shadow,article.page img.no-shadow,article.listing img.no-shadow{border:0;box-shadow:none}article.post>table,article.page>table,article.listing>table{background-color:#F3FCF5}article.post p.img,article.page p.img,article.listing p.img{background-color:#FFF;border-radius:5px;text-align:center;padding-bottom:3px;font-size:.9rem;box-shadow:rgba(0,0,0,0.06) 0 0 10px}article.post p.img img,article.page p.img img,article.listing p.img img{display:block;box-shadow:none;margin:0 auto}article.post li,article.page li,article.listing li{margin-bottom:10px}article.post li:last-child,article.page li:last-child,article.listing li:last-child{margin-bottom:0}p.note{position:relative;background:#e7f2fa;padding:40px 12px 6px 12px;box-shadow:rgba(0,0,0,0.06) 0 0 10px}p.note::before{font-family:"FontAwesome";content:"\f05a" " Note " attr(data-title);background-color:#6ab0de;color:white;font-weight:bold;border-top-left-radius:3px;border-top-right-radius:3px;padding:6px 14px;line-height:1.5em;position:absolute;top:0;left:0;right:0}p.note.warning{background-color:#F7F9E1}p.note.warning::before{background-color:#bbb90d;content:"\f071" " Warning " attr(data-title)} + */@font-face{font-family:'FontAwesome';src:url("../font/fontawesome-webfont.eot?v=3.2.1");src:url("../font/fontawesome-webfont.eot?#iefix&v=3.2.1") format("embedded-opentype"),url("../font/fontawesome-webfont.woff?v=3.2.1") format("woff"),url("../font/fontawesome-webfont.ttf?v=3.2.1") format("truetype"),url("../font/fontawesome-webfont.svg#fontawesomeregular?v=3.2.1") format("svg");font-weight:normal;font-style:normal}[class^="icon-"],[class*=" icon-"]{font-family:FontAwesome;font-weight:normal;font-style:normal;text-decoration:inherit;-webkit-font-smoothing:antialiased;*margin-right:.3em}[class^="icon-"]:before,[class*=" icon-"]:before{text-decoration:inherit;display:inline-block;speak:none}.icon-large:before{vertical-align:-10%;font-size:1.33333em}a [class^="icon-"],a [class*=" icon-"]{display:inline}[class^="icon-"].icon-fixed-width,[class*=" icon-"].icon-fixed-width{display:inline-block;width:1.14286em;text-align:right;padding-right:0.28571em}[class^="icon-"].icon-fixed-width.icon-large,[class*=" icon-"].icon-fixed-width.icon-large{width:1.42857em}.icons-ul{margin-left:2.14286em;list-style-type:none}.icons-ul>li{position:relative}.icons-ul .icon-li{position:absolute;left:-2.14286em;width:2.14286em;text-align:center;line-height:inherit}[class^="icon-"].hide,[class*=" icon-"].hide{display:none}.icon-muted{color:#eee}.icon-light{color:#fff}.icon-dark{color:#333}.icon-border{border:solid 1px #eee;padding:.2em .25em .15em;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.icon-2x{font-size:2em}.icon-2x.icon-border{border-width:2px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.icon-3x{font-size:3em}.icon-3x.icon-border{border-width:3px;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.icon-4x{font-size:4em}.icon-4x.icon-border{border-width:4px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.icon-5x{font-size:5em}.icon-5x.icon-border{border-width:5px;-webkit-border-radius:7px;-moz-border-radius:7px;border-radius:7px}.pull-right{float:right}.pull-left{float:left}[class^="icon-"].pull-left,[class*=" icon-"].pull-left{margin-right:.3em}[class^="icon-"].pull-right,[class*=" icon-"].pull-right{margin-left:.3em}.icon-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:-35%}.icon-stack [class^="icon-"],.icon-stack [class*=" icon-"]{display:block;text-align:center;position:absolute;width:100%;height:100%;font-size:1em;line-height:inherit;*line-height:2em}.icon-stack .icon-stack-base{font-size:2em;*line-height:1em}.icon-spin{display:inline-block;-moz-animation:spin 2s infinite linear;-o-animation:spin 2s infinite linear;-webkit-animation:spin 2s infinite linear;animation:spin 2s infinite linear}a .icon-stack,a .icon-spin{display:inline-block;text-decoration:none}@-moz-keyframes spin{0%{-moz-transform:rotate(0deg)}100%{-moz-transform:rotate(359deg)}}@-webkit-keyframes spin{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg)}}@-o-keyframes spin{0%{-o-transform:rotate(0deg)}100%{-o-transform:rotate(359deg)}}@-ms-keyframes spin{0%{-ms-transform:rotate(0deg)}100%{-ms-transform:rotate(359deg)}}@keyframes spin{0%{transform:rotate(0deg)}100%{transform:rotate(359deg)}}.icon-rotate-90:before{-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg);filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1)}.icon-rotate-180:before{-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg);filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2)}.icon-rotate-270:before{-webkit-transform:rotate(270deg);-moz-transform:rotate(270deg);-ms-transform:rotate(270deg);-o-transform:rotate(270deg);transform:rotate(270deg);filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3)}.icon-flip-horizontal:before{-webkit-transform:scale(-1, 1);-moz-transform:scale(-1, 1);-ms-transform:scale(-1, 1);-o-transform:scale(-1, 1);transform:scale(-1, 1)}.icon-flip-vertical:before{-webkit-transform:scale(1, -1);-moz-transform:scale(1, -1);-ms-transform:scale(1, -1);-o-transform:scale(1, -1);transform:scale(1, -1)}a .icon-rotate-90:before,a .icon-rotate-180:before,a .icon-rotate-270:before,a .icon-flip-horizontal:before,a .icon-flip-vertical:before{display:inline-block}.icon-glass:before{content:"\f000"}.icon-music:before{content:"\f001"}.icon-search:before{content:"\f002"}.icon-envelope-alt:before{content:"\f003"}.icon-heart:before{content:"\f004"}.icon-star:before{content:"\f005"}.icon-star-empty:before{content:"\f006"}.icon-user:before{content:"\f007"}.icon-film:before{content:"\f008"}.icon-th-large:before{content:"\f009"}.icon-th:before{content:"\f00a"}.icon-th-list:before{content:"\f00b"}.icon-ok:before{content:"\f00c"}.icon-remove:before{content:"\f00d"}.icon-zoom-in:before{content:"\f00e"}.icon-zoom-out:before{content:"\f010"}.icon-power-off:before,.icon-off:before{content:"\f011"}.icon-signal:before{content:"\f012"}.icon-gear:before,.icon-cog:before{content:"\f013"}.icon-trash:before{content:"\f014"}.icon-home:before{content:"\f015"}.icon-file-alt:before{content:"\f016"}.icon-time:before{content:"\f017"}.icon-road:before{content:"\f018"}.icon-download-alt:before{content:"\f019"}.icon-download:before{content:"\f01a"}.icon-upload:before{content:"\f01b"}.icon-inbox:before{content:"\f01c"}.icon-play-circle:before{content:"\f01d"}.icon-rotate-right:before,.icon-repeat:before{content:"\f01e"}.icon-refresh:before{content:"\f021"}.icon-list-alt:before{content:"\f022"}.icon-lock:before{content:"\f023"}.icon-flag:before{content:"\f024"}.icon-headphones:before{content:"\f025"}.icon-volume-off:before{content:"\f026"}.icon-volume-down:before{content:"\f027"}.icon-volume-up:before{content:"\f028"}.icon-qrcode:before{content:"\f029"}.icon-barcode:before{content:"\f02a"}.icon-tag:before{content:"\f02b"}.icon-tags:before{content:"\f02c"}.icon-book:before{content:"\f02d"}.icon-bookmark:before{content:"\f02e"}.icon-print:before{content:"\f02f"}.icon-camera:before{content:"\f030"}.icon-font:before{content:"\f031"}.icon-bold:before{content:"\f032"}.icon-italic:before{content:"\f033"}.icon-text-height:before{content:"\f034"}.icon-text-width:before{content:"\f035"}.icon-align-left:before{content:"\f036"}.icon-align-center:before{content:"\f037"}.icon-align-right:before{content:"\f038"}.icon-align-justify:before{content:"\f039"}.icon-list:before{content:"\f03a"}.icon-indent-left:before{content:"\f03b"}.icon-indent-right:before{content:"\f03c"}.icon-facetime-video:before{content:"\f03d"}.icon-picture:before{content:"\f03e"}.icon-pencil:before{content:"\f040"}.icon-map-marker:before{content:"\f041"}.icon-adjust:before{content:"\f042"}.icon-tint:before{content:"\f043"}.icon-edit:before{content:"\f044"}.icon-share:before{content:"\f045"}.icon-check:before{content:"\f046"}.icon-move:before{content:"\f047"}.icon-step-backward:before{content:"\f048"}.icon-fast-backward:before{content:"\f049"}.icon-backward:before{content:"\f04a"}.icon-play:before{content:"\f04b"}.icon-pause:before{content:"\f04c"}.icon-stop:before{content:"\f04d"}.icon-forward:before{content:"\f04e"}.icon-fast-forward:before{content:"\f050"}.icon-step-forward:before{content:"\f051"}.icon-eject:before{content:"\f052"}.icon-chevron-left:before{content:"\f053"}.icon-chevron-right:before{content:"\f054"}.icon-plus-sign:before{content:"\f055"}.icon-minus-sign:before{content:"\f056"}.icon-remove-sign:before{content:"\f057"}.icon-ok-sign:before{content:"\f058"}.icon-question-sign:before{content:"\f059"}.icon-info-sign:before{content:"\f05a"}.icon-screenshot:before{content:"\f05b"}.icon-remove-circle:before{content:"\f05c"}.icon-ok-circle:before{content:"\f05d"}.icon-ban-circle:before{content:"\f05e"}.icon-arrow-left:before{content:"\f060"}.icon-arrow-right:before{content:"\f061"}.icon-arrow-up:before{content:"\f062"}.icon-arrow-down:before{content:"\f063"}.icon-mail-forward:before,.icon-share-alt:before{content:"\f064"}.icon-resize-full:before{content:"\f065"}.icon-resize-small:before{content:"\f066"}.icon-plus:before{content:"\f067"}.icon-minus:before{content:"\f068"}.icon-asterisk:before{content:"\f069"}.icon-exclamation-sign:before{content:"\f06a"}.icon-gift:before{content:"\f06b"}.icon-leaf:before{content:"\f06c"}.icon-fire:before{content:"\f06d"}.icon-eye-open:before{content:"\f06e"}.icon-eye-close:before{content:"\f070"}.icon-warning-sign:before{content:"\f071"}.icon-plane:before{content:"\f072"}.icon-calendar:before{content:"\f073"}.icon-random:before{content:"\f074"}.icon-comment:before{content:"\f075"}.icon-magnet:before{content:"\f076"}.icon-chevron-up:before{content:"\f077"}.icon-chevron-down:before{content:"\f078"}.icon-retweet:before{content:"\f079"}.icon-shopping-cart:before{content:"\f07a"}.icon-folder-close:before{content:"\f07b"}.icon-folder-open:before{content:"\f07c"}.icon-resize-vertical:before{content:"\f07d"}.icon-resize-horizontal:before{content:"\f07e"}.icon-bar-chart:before{content:"\f080"}.icon-twitter-sign:before{content:"\f081"}.icon-facebook-sign:before{content:"\f082"}.icon-camera-retro:before{content:"\f083"}.icon-key:before{content:"\f084"}.icon-gears:before,.icon-cogs:before{content:"\f085"}.icon-comments:before{content:"\f086"}.icon-thumbs-up-alt:before{content:"\f087"}.icon-thumbs-down-alt:before{content:"\f088"}.icon-star-half:before{content:"\f089"}.icon-heart-empty:before{content:"\f08a"}.icon-signout:before{content:"\f08b"}.icon-linkedin-sign:before{content:"\f08c"}.icon-pushpin:before{content:"\f08d"}.icon-external-link:before{content:"\f08e"}.icon-signin:before{content:"\f090"}.icon-trophy:before{content:"\f091"}.icon-github-sign:before{content:"\f092"}.icon-upload-alt:before{content:"\f093"}.icon-lemon:before{content:"\f094"}.icon-phone:before{content:"\f095"}.icon-unchecked:before,.icon-check-empty:before{content:"\f096"}.icon-bookmark-empty:before{content:"\f097"}.icon-phone-sign:before{content:"\f098"}.icon-twitter:before{content:"\f099"}.icon-facebook:before{content:"\f09a"}.icon-github:before{content:"\f09b"}.icon-unlock:before{content:"\f09c"}.icon-credit-card:before{content:"\f09d"}.icon-rss:before{content:"\f09e"}.icon-hdd:before{content:"\f0a0"}.icon-bullhorn:before{content:"\f0a1"}.icon-bell:before{content:"\f0a2"}.icon-certificate:before{content:"\f0a3"}.icon-hand-right:before{content:"\f0a4"}.icon-hand-left:before{content:"\f0a5"}.icon-hand-up:before{content:"\f0a6"}.icon-hand-down:before{content:"\f0a7"}.icon-circle-arrow-left:before{content:"\f0a8"}.icon-circle-arrow-right:before{content:"\f0a9"}.icon-circle-arrow-up:before{content:"\f0aa"}.icon-circle-arrow-down:before{content:"\f0ab"}.icon-globe:before{content:"\f0ac"}.icon-wrench:before{content:"\f0ad"}.icon-tasks:before{content:"\f0ae"}.icon-filter:before{content:"\f0b0"}.icon-briefcase:before{content:"\f0b1"}.icon-fullscreen:before{content:"\f0b2"}.icon-group:before{content:"\f0c0"}.icon-link:before{content:"\f0c1"}.icon-cloud:before{content:"\f0c2"}.icon-beaker:before{content:"\f0c3"}.icon-cut:before{content:"\f0c4"}.icon-copy:before{content:"\f0c5"}.icon-paperclip:before,.icon-paper-clip:before{content:"\f0c6"}.icon-save:before{content:"\f0c7"}.icon-sign-blank:before{content:"\f0c8"}.icon-reorder:before{content:"\f0c9"}.icon-list-ul:before{content:"\f0ca"}.icon-list-ol:before{content:"\f0cb"}.icon-strikethrough:before{content:"\f0cc"}.icon-underline:before{content:"\f0cd"}.icon-table:before{content:"\f0ce"}.icon-magic:before{content:"\f0d0"}.icon-truck:before{content:"\f0d1"}.icon-pinterest:before{content:"\f0d2"}.icon-pinterest-sign:before{content:"\f0d3"}.icon-google-plus-sign:before{content:"\f0d4"}.icon-google-plus:before{content:"\f0d5"}.icon-money:before{content:"\f0d6"}.icon-caret-down:before{content:"\f0d7"}.icon-caret-up:before{content:"\f0d8"}.icon-caret-left:before{content:"\f0d9"}.icon-caret-right:before{content:"\f0da"}.icon-columns:before{content:"\f0db"}.icon-sort:before{content:"\f0dc"}.icon-sort-down:before{content:"\f0dd"}.icon-sort-up:before{content:"\f0de"}.icon-envelope:before{content:"\f0e0"}.icon-linkedin:before{content:"\f0e1"}.icon-rotate-left:before,.icon-undo:before{content:"\f0e2"}.icon-legal:before{content:"\f0e3"}.icon-dashboard:before{content:"\f0e4"}.icon-comment-alt:before{content:"\f0e5"}.icon-comments-alt:before{content:"\f0e6"}.icon-bolt:before{content:"\f0e7"}.icon-sitemap:before{content:"\f0e8"}.icon-umbrella:before{content:"\f0e9"}.icon-paste:before{content:"\f0ea"}.icon-lightbulb:before{content:"\f0eb"}.icon-exchange:before{content:"\f0ec"}.icon-cloud-download:before{content:"\f0ed"}.icon-cloud-upload:before{content:"\f0ee"}.icon-user-md:before{content:"\f0f0"}.icon-stethoscope:before{content:"\f0f1"}.icon-suitcase:before{content:"\f0f2"}.icon-bell-alt:before{content:"\f0f3"}.icon-coffee:before{content:"\f0f4"}.icon-food:before{content:"\f0f5"}.icon-file-text-alt:before{content:"\f0f6"}.icon-building:before{content:"\f0f7"}.icon-hospital:before{content:"\f0f8"}.icon-ambulance:before{content:"\f0f9"}.icon-medkit:before{content:"\f0fa"}.icon-fighter-jet:before{content:"\f0fb"}.icon-beer:before{content:"\f0fc"}.icon-h-sign:before{content:"\f0fd"}.icon-plus-sign-alt:before{content:"\f0fe"}.icon-double-angle-left:before{content:"\f100"}.icon-double-angle-right:before{content:"\f101"}.icon-double-angle-up:before{content:"\f102"}.icon-double-angle-down:before{content:"\f103"}.icon-angle-left:before{content:"\f104"}.icon-angle-right:before{content:"\f105"}.icon-angle-up:before{content:"\f106"}.icon-angle-down:before{content:"\f107"}.icon-desktop:before{content:"\f108"}.icon-laptop:before{content:"\f109"}.icon-tablet:before{content:"\f10a"}.icon-mobile-phone:before{content:"\f10b"}.icon-circle-blank:before{content:"\f10c"}.icon-quote-left:before{content:"\f10d"}.icon-quote-right:before{content:"\f10e"}.icon-spinner:before{content:"\f110"}.icon-circle:before{content:"\f111"}.icon-mail-reply:before,.icon-reply:before{content:"\f112"}.icon-github-alt:before{content:"\f113"}.icon-folder-close-alt:before{content:"\f114"}.icon-folder-open-alt:before{content:"\f115"}.icon-expand-alt:before{content:"\f116"}.icon-collapse-alt:before{content:"\f117"}.icon-smile:before{content:"\f118"}.icon-frown:before{content:"\f119"}.icon-meh:before{content:"\f11a"}.icon-gamepad:before{content:"\f11b"}.icon-keyboard:before{content:"\f11c"}.icon-flag-alt:before{content:"\f11d"}.icon-flag-checkered:before{content:"\f11e"}.icon-terminal:before{content:"\f120"}.icon-code:before{content:"\f121"}.icon-reply-all:before{content:"\f122"}.icon-mail-reply-all:before{content:"\f122"}.icon-star-half-full:before,.icon-star-half-empty:before{content:"\f123"}.icon-location-arrow:before{content:"\f124"}.icon-crop:before{content:"\f125"}.icon-code-fork:before{content:"\f126"}.icon-unlink:before{content:"\f127"}.icon-question:before{content:"\f128"}.icon-info:before{content:"\f129"}.icon-exclamation:before{content:"\f12a"}.icon-superscript:before{content:"\f12b"}.icon-subscript:before{content:"\f12c"}.icon-eraser:before{content:"\f12d"}.icon-puzzle-piece:before{content:"\f12e"}.icon-microphone:before{content:"\f130"}.icon-microphone-off:before{content:"\f131"}.icon-shield:before{content:"\f132"}.icon-calendar-empty:before{content:"\f133"}.icon-fire-extinguisher:before{content:"\f134"}.icon-rocket:before{content:"\f135"}.icon-maxcdn:before{content:"\f136"}.icon-chevron-sign-left:before{content:"\f137"}.icon-chevron-sign-right:before{content:"\f138"}.icon-chevron-sign-up:before{content:"\f139"}.icon-chevron-sign-down:before{content:"\f13a"}.icon-html5:before{content:"\f13b"}.icon-css3:before{content:"\f13c"}.icon-anchor:before{content:"\f13d"}.icon-unlock-alt:before{content:"\f13e"}.icon-bullseye:before{content:"\f140"}.icon-ellipsis-horizontal:before{content:"\f141"}.icon-ellipsis-vertical:before{content:"\f142"}.icon-rss-sign:before{content:"\f143"}.icon-play-sign:before{content:"\f144"}.icon-ticket:before{content:"\f145"}.icon-minus-sign-alt:before{content:"\f146"}.icon-check-minus:before{content:"\f147"}.icon-level-up:before{content:"\f148"}.icon-level-down:before{content:"\f149"}.icon-check-sign:before{content:"\f14a"}.icon-edit-sign:before{content:"\f14b"}.icon-external-link-sign:before{content:"\f14c"}.icon-share-sign:before{content:"\f14d"}.icon-compass:before{content:"\f14e"}.icon-collapse:before{content:"\f150"}.icon-collapse-top:before{content:"\f151"}.icon-expand:before{content:"\f152"}.icon-euro:before,.icon-eur:before{content:"\f153"}.icon-gbp:before{content:"\f154"}.icon-dollar:before,.icon-usd:before{content:"\f155"}.icon-rupee:before,.icon-inr:before{content:"\f156"}.icon-yen:before,.icon-jpy:before{content:"\f157"}.icon-renminbi:before,.icon-cny:before{content:"\f158"}.icon-won:before,.icon-krw:before{content:"\f159"}.icon-bitcoin:before,.icon-btc:before{content:"\f15a"}.icon-file:before{content:"\f15b"}.icon-file-text:before{content:"\f15c"}.icon-sort-by-alphabet:before{content:"\f15d"}.icon-sort-by-alphabet-alt:before{content:"\f15e"}.icon-sort-by-attributes:before{content:"\f160"}.icon-sort-by-attributes-alt:before{content:"\f161"}.icon-sort-by-order:before{content:"\f162"}.icon-sort-by-order-alt:before{content:"\f163"}.icon-thumbs-up:before{content:"\f164"}.icon-thumbs-down:before{content:"\f165"}.icon-youtube-sign:before{content:"\f166"}.icon-youtube:before{content:"\f167"}.icon-xing:before{content:"\f168"}.icon-xing-sign:before{content:"\f169"}.icon-youtube-play:before{content:"\f16a"}.icon-dropbox:before{content:"\f16b"}.icon-stackexchange:before{content:"\f16c"}.icon-instagram:before{content:"\f16d"}.icon-flickr:before{content:"\f16e"}.icon-adn:before{content:"\f170"}.icon-bitbucket:before{content:"\f171"}.icon-bitbucket-sign:before{content:"\f172"}.icon-tumblr:before{content:"\f173"}.icon-tumblr-sign:before{content:"\f174"}.icon-long-arrow-down:before{content:"\f175"}.icon-long-arrow-up:before{content:"\f176"}.icon-long-arrow-left:before{content:"\f177"}.icon-long-arrow-right:before{content:"\f178"}.icon-apple:before{content:"\f179"}.icon-windows:before{content:"\f17a"}.icon-android:before{content:"\f17b"}.icon-linux:before{content:"\f17c"}.icon-dribbble:before{content:"\f17d"}.icon-skype:before{content:"\f17e"}.icon-foursquare:before{content:"\f180"}.icon-trello:before{content:"\f181"}.icon-female:before{content:"\f182"}.icon-male:before{content:"\f183"}.icon-gittip:before{content:"\f184"}.icon-sun:before{content:"\f185"}.icon-moon:before{content:"\f186"}.icon-archive:before{content:"\f187"}.icon-bug:before{content:"\f188"}.icon-vk:before{content:"\f189"}.icon-weibo:before{content:"\f18a"}.icon-renren:before{content:"\f18b"}body,html{background-color:#f5f5f5;color:#222;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;height:100%}a{color:#049cdb;text-decoration:none}a:visited{color:#0378a9}.menu a{color:#049cdb}.gist{font-size:0.75em}@media only screen and (max-width: 480px){.title.indent::before{display:none}}.title.indent::before{content:"// ";color:#049cdb}.divider,.usp hr,.hero hr{border:none;border-bottom:2px solid #049cdb;clear:both;margin:2em 0}article.post img,article.page img,article.listing img{border:5px solid #fff;border-radius:3px;box-shadow:0 0 3px rgba(0,0,0,0.25)}article.post img.right,article.page img.right,article.listing img.right{float:right;margin:0 0 10px 20px}article.post img.left,article.page img.left,article.listing img.left{float:left;margin:0 20px 10px 0}.grid-wrapper{margin:auto;max-width:1100px;padding:0 25px}.grid-center{text-align:center}.grid-center>.grid__item{text-align:left}body>header{-webkit-box-shadow:0 0 3px rgba(0,0,0,0.25);-moz-box-shadow:0 0 3px rgba(0,0,0,0.25);-ms-box-shadow:0 0 3px rgba(0,0,0,0.25);-o-box-shadow:0 0 3px rgba(0,0,0,0.25);box-shadow:0 0 3px rgba(0,0,0,0.25);background-color:#fff;margin-bottom:2em}body>header .site-title{color:#222;font-size:1.7em;font-weight:bold;line-height:2.5em}body{-webkit-animation:bugfix infinite 1s}@-webkit-keyframes bugfix{from{padding:0}to{padding:0}}.header{position:relative}#toggle,.toggle{display:none}.menu li{list-style:none;float:left}@media only screen and (max-width: 790px){.menu{display:none;opacity:0;width:100%;position:absolute;right:0}.menu li{display:block;width:100%;margin:0}.menu li a{display:block;width:100%;text-decoration:none;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.toggle{display:block;position:relative;cursor:pointer;-webkit-touch-callout:none;-webkit-user-select:none;user-select:none}#toggle:checked ~ .menu{display:block;opacity:1;z-index:999}}ul.menu li{position:relative}ul.menu li:hover ul{display:block}ul.menu li ul{display:none;z-index:10;position:absolute;top:68px;margin-left:0;background-color:white}ul.menu li ul li{white-space:nowrap;float:none}ul.menu li ul li a{display:block;padding:20px 10px}ul.menu li ul li a:hover,ul.menu li ul li a:focus{background:#eee}header .grid{height:68px}.menu{margin:0;top:68px}.menu li a{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-transition:all 0.25s linear;-moz-transition:all 0.25s linear;-o-transition:all 0.25s linear;transition:all 0.25s linear;display:block;padding:32px 20px;text-decoration:none;font-weight:normal;font-size:16px;line-height:1}.menu>li>a:hover,.menu>li>a:focus{background:#f5f5f5;box-shadow:inset 0px 5px #049cdb;color:#049cdb;padding:40px 20px 24px}.toggle{z-index:20}@media only screen and (max-width: 790px){.menu{background:#fff;border-top:1px solid #049cdb;border-bottom:4px solid #049cdb}.menu,.menu li,.menu li a{height:auto}.menu li a{padding:15px 15px !important}.menu li a:hover,.menu li a:focus{background:#eee;box-shadow:inset 5px 0px #049cdb;padding:15px 15px 15px 25px}.toggle{position:absolute;top:17px;right:10px}.toggle::after{-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-transition:all 0.5s linear;-moz-transition:all 0.5s linear;-o-transition:all 0.5s linear;transition:all 0.5s linear;font-family:"FontAwesome";content:"\f0c9";display:inline-block;width:100%;padding:10px 15px;background:#049cdb;text-align:center;font-size:12px;color:#fff;white-space:nowrap}.toggle:hover::after{background:#0383b8}#toggle:checked+.toggle::after{content:attr(data-close)}ul.menu li ul{display:block;position:relative;top:0}}#page-wrap{min-height:100%;margin-bottom:-100px}#page-wrap::after{content:"";display:block;height:100px}body>footer{-webkit-box-shadow:0 0 3px rgba(0,0,0,0.25);-moz-box-shadow:0 0 3px rgba(0,0,0,0.25);-ms-box-shadow:0 0 3px rgba(0,0,0,0.25);-o-box-shadow:0 0 3px rgba(0,0,0,0.25);box-shadow:0 0 3px rgba(0,0,0,0.25);background-color:#fff;margin-top:3em}.copyright{margin:0;padding:20px 0}article blockquote{border-left:2px solid #049cdb;color:#484848;font-family:Georgia,"Times New Roman",Times,serif;font-size:1.25em;font-style:italic;padding-left:15px}article blockquote footer{float:right;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:0.8em}article blockquote footer strong::after{content:" \2014 "}article blockquote footer a{text-decoration:underline}article .pullquote-left::before,article .pullquote-right::before{border:medium none;color:#049cdb;content:"\201C" attr(data-pullquote) "\201D";float:right;font-family:Georgia,"Times New Roman",Times,serif;font-size:1.4em;font-style:italic;line-height:1.45em;margin:0.3em 0 1em 1.5em;padding:0;position:relative;top:7px;width:45%}@media only screen and (max-width: 480px){article .pullquote-left::before,article .pullquote-right::before{border-top:1px dotted #049cdb;border-bottom:1px dotted #049cdb;padding:0 10px;width:100%}}article .tags{display:inline}article .tags li{margin-right:2px}article .tags li::after{content:","}article .tags li:last-child::after{content:""}article .tags li a{color:#555;text-decoration:none}article .tags li a:hover{text-decoration:underline}article .meta{font-size:12px;padding:0 0 5px}article .meta>*{margin-right:15px;white-space:nowrap}article .meta>*:last-child{margin-right:0}article .meta .comments::before{content:"\f075";font-family:"FontAwesome";padding-right:3px}article.listing{margin-bottom:20px}article.listing h1{margin-bottom:0}article.listing h1 a{color:#049cdb;text-decoration:none}article.listing .entry-content{margin:10px 0}article.listing+hr{border:none;border-bottom:1px solid #049cdb}@media only screen and (max-width: 480px){article.post .tags{clear:both;margin-top:7px}}article.post h1{margin-bottom:0}article.post .meta{border-bottom:1px solid #049cdb;margin-bottom:20px}#archive-list article h1{margin-bottom:0}.sans,html .gist .gist-file .gist-meta{font-family:"Helvetica Neue",Arial,sans-serif}.mono,pre,p code,li code{font-family:Menlo,Monaco,"Andale Mono","lucida console","Courier New",monospace}.highlight table{margin-bottom:0}.highlight .gutter,.highlight .code{padding:0}.highlight .gutter .line-number{display:block}.highlight,html .gist .gist-file .gist-syntax .gist-highlight{border:1px solid #05232b !important}.highlight table td.code,html .gist .gist-file .gist-syntax .gist-highlight table td.code{width:100%}.highlight .line-numbers,html .gist .gist-file .gist-syntax .highlight .line_numbers{text-align:right;font-size:13px;line-height:1.45em;background:#073642 url('/images/noise.png?1419195603') top left !important;border-right:1px solid #00232c !important;-webkit-box-shadow:#083e4b -1px 0 inset;-moz-box-shadow:#083e4b -1px 0 inset;-ms-box-shadow:#083e4b -1px 0 inset;-o-box-shadow:#083e4b -1px 0 inset;box-shadow:#083e4b -1px 0 inset;text-shadow:#021014 0 -1px;padding:.8em !important;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.highlight .line-numbers span,html .gist .gist-file .gist-syntax .highlight .line_numbers span{color:#586e75 !important}figure.code,.gist-file,pre{-webkit-box-shadow:rgba(0,0,0,0.06) 0 0 10px;-moz-box-shadow:rgba(0,0,0,0.06) 0 0 10px;-ms-box-shadow:rgba(0,0,0,0.06) 0 0 10px;-o-box-shadow:rgba(0,0,0,0.06) 0 0 10px;box-shadow:rgba(0,0,0,0.06) 0 0 10px}figure.code .highlight pre,.gist-file .highlight pre,pre .highlight pre{-webkit-box-shadow:none;-moz-box-shadow:none;-ms-box-shadow:none;-o-box-shadow:none;box-shadow:none}.gist .highlight *::-moz-selection,figure.code .highlight *::-moz-selection{background:#386774;color:inherit;text-shadow:#002b36 0 1px}.gist .highlight *::-webkit-selection,figure.code .highlight *::-webkit-selection{background:#386774;color:inherit;text-shadow:#002b36 0 1px}.gist .highlight *::selection,figure.code .highlight *::selection{background:#386774;color:inherit;text-shadow:#002b36 0 1px}html .gist .gist-file{margin-bottom:1.8em;position:relative;border:none;padding-top:26px !important}html .gist .gist-file .highlight{margin-bottom:0}html .gist .gist-file .gist-syntax{border-bottom:0 !important;background:none !important}html .gist .gist-file .gist-syntax .gist-highlight{background:#002b36 !important}html .gist .gist-file .gist-syntax .highlight pre{padding:0}html .gist .gist-file .gist-meta{padding:.6em 0.8em;border:1px solid #083e4b !important;color:#586e75;font-size:.7em !important;background:#073642 url('/images/noise.png?1419195603') top left;line-height:1.5em}html .gist .gist-file .gist-meta a{color:#75878b !important}html .gist .gist-file .gist-meta a:hover{color:#93a1a1 !important}html .gist .gist-file .gist-meta a[href*='#file']{position:absolute;top:0;left:0;right:-10px;color:#474747 !important}html .gist .gist-file .gist-meta a[href*='#file']:hover{color:#049cdb !important}html .gist .gist-file .gist-meta a[href*=raw]{top:.4em}pre{background:#002b36 url('/images/noise.png?1419195603') top left;-webkit-border-radius:0.4em;-moz-border-radius:0.4em;border-radius:0.4em;border:1px solid #05232b;line-height:1.45em;font-size:13px;margin-bottom:2.1em;padding:.8em 1em;color:#93a1a1;overflow:auto}h3.filename+pre{-webkit-border-radius:0px;-moz-border-radius:0px;border-radius:0px}p code,li code{display:inline-block;white-space:no-wrap;background:#fff;font-size:.8em;line-height:1.5em;color:#555;border:1px solid #ddd;-webkit-border-radius:0.4em;-moz-border-radius:0.4em;border-radius:0.4em;padding:0 .3em;margin:-1px 0}p pre code,li pre code{font-size:1em !important;background:none;border:none}.pre-code,html .gist .gist-file .gist-syntax .highlight pre,.highlight code{font-family:Menlo,Monaco,"Andale Mono","lucida console","Courier New",monospace !important;overflow:scroll;overflow-y:hidden;display:block;padding:.8em;overflow-x:auto;line-height:1.45em;background:#002b36 url('/images/noise.png?1419195603') top left !important;color:#93a1a1 !important}.pre-code span,html .gist .gist-file .gist-syntax .highlight pre span,.highlight code span{color:#93a1a1 !important}.pre-code span,html .gist .gist-file .gist-syntax .highlight pre span,.highlight code span{font-style:normal !important;font-weight:normal !important}.pre-code .c,html .gist .gist-file .gist-syntax .highlight pre .c,.highlight code .c{color:#586e75 !important;font-style:italic !important}.pre-code .cm,html .gist .gist-file .gist-syntax .highlight pre .cm,.highlight code .cm{color:#586e75 !important;font-style:italic !important}.pre-code .cp,html .gist .gist-file .gist-syntax .highlight pre .cp,.highlight code .cp{color:#586e75 !important;font-style:italic !important}.pre-code .c1,html .gist .gist-file .gist-syntax .highlight pre .c1,.highlight code .c1{color:#586e75 !important;font-style:italic !important}.pre-code .cs,html .gist .gist-file .gist-syntax .highlight pre .cs,.highlight code .cs{color:#586e75 !important;font-weight:bold !important;font-style:italic !important}.pre-code .err,html .gist .gist-file .gist-syntax .highlight pre .err,.highlight code .err{color:#dc322f !important;background:none !important}.pre-code .k,html .gist .gist-file .gist-syntax .highlight pre .k,.highlight code .k{color:#cb4b16 !important}.pre-code .o,html .gist .gist-file .gist-syntax .highlight pre .o,.highlight code .o{color:#93a1a1 !important;font-weight:bold !important}.pre-code .p,html .gist .gist-file .gist-syntax .highlight pre .p,.highlight code .p{color:#93a1a1 !important}.pre-code .ow,html .gist .gist-file .gist-syntax .highlight pre .ow,.highlight code .ow{color:#2aa198 !important;font-weight:bold !important}.pre-code .gd,html .gist .gist-file .gist-syntax .highlight pre .gd,.highlight code .gd{color:#93a1a1 !important;background-color:#372c34 !important;display:inline-block}.pre-code .gd .x,html .gist .gist-file .gist-syntax .highlight pre .gd .x,.highlight code .gd .x{color:#93a1a1 !important;background-color:#4d2d33 !important;display:inline-block}.pre-code .ge,html .gist .gist-file .gist-syntax .highlight pre .ge,.highlight code .ge{color:#93a1a1 !important;font-style:italic !important}.pre-code .gh,html .gist .gist-file .gist-syntax .highlight pre .gh,.highlight code .gh{color:#586e75 !important}.pre-code .gi,html .gist .gist-file .gist-syntax .highlight pre .gi,.highlight code .gi{color:#93a1a1 !important;background-color:#1a412b !important;display:inline-block}.pre-code .gi .x,html .gist .gist-file .gist-syntax .highlight pre .gi .x,.highlight code .gi .x{color:#93a1a1 !important;background-color:#355720 !important;display:inline-block}.pre-code .gs,html .gist .gist-file .gist-syntax .highlight pre .gs,.highlight code .gs{color:#93a1a1 !important;font-weight:bold !important}.pre-code .gu,html .gist .gist-file .gist-syntax .highlight pre .gu,.highlight code .gu{color:#6c71c4 !important}.pre-code .kc,html .gist .gist-file .gist-syntax .highlight pre .kc,.highlight code .kc{color:#859900 !important;font-weight:bold !important}.pre-code .kd,html .gist .gist-file .gist-syntax .highlight pre .kd,.highlight code .kd{color:#268bd2 !important}.pre-code .kp,html .gist .gist-file .gist-syntax .highlight pre .kp,.highlight code .kp{color:#cb4b16 !important;font-weight:bold !important}.pre-code .kr,html .gist .gist-file .gist-syntax .highlight pre .kr,.highlight code .kr{color:#d33682 !important;font-weight:bold !important}.pre-code .kt,html .gist .gist-file .gist-syntax .highlight pre .kt,.highlight code .kt{color:#2aa198 !important}.pre-code .n,html .gist .gist-file .gist-syntax .highlight pre .n,.highlight code .n{color:#268bd2 !important}.pre-code .na,html .gist .gist-file .gist-syntax .highlight pre .na,.highlight code .na{color:#268bd2 !important}.pre-code .nb,html .gist .gist-file .gist-syntax .highlight pre .nb,.highlight code .nb{color:#859900 !important}.pre-code .nc,html .gist .gist-file .gist-syntax .highlight pre .nc,.highlight code .nc{color:#d33682 !important}.pre-code .no,html .gist .gist-file .gist-syntax .highlight pre .no,.highlight code .no{color:#b58900 !important}.pre-code .nl,html .gist .gist-file .gist-syntax .highlight pre .nl,.highlight code .nl{color:#859900 !important}.pre-code .ne,html .gist .gist-file .gist-syntax .highlight pre .ne,.highlight code .ne{color:#268bd2 !important;font-weight:bold !important}.pre-code .nf,html .gist .gist-file .gist-syntax .highlight pre .nf,.highlight code .nf{color:#268bd2 !important;font-weight:bold !important}.pre-code .nn,html .gist .gist-file .gist-syntax .highlight pre .nn,.highlight code .nn{color:#b58900 !important}.pre-code .nt,html .gist .gist-file .gist-syntax .highlight pre .nt,.highlight code .nt{color:#268bd2 !important;font-weight:bold !important}.pre-code .nx,html .gist .gist-file .gist-syntax .highlight pre .nx,.highlight code .nx{color:#b58900 !important}.pre-code .vg,html .gist .gist-file .gist-syntax .highlight pre .vg,.highlight code .vg{color:#268bd2 !important}.pre-code .vi,html .gist .gist-file .gist-syntax .highlight pre .vi,.highlight code .vi{color:#268bd2 !important}.pre-code .nv,html .gist .gist-file .gist-syntax .highlight pre .nv,.highlight code .nv{color:#268bd2 !important}.pre-code .mf,html .gist .gist-file .gist-syntax .highlight pre .mf,.highlight code .mf{color:#2aa198 !important}.pre-code .m,html .gist .gist-file .gist-syntax .highlight pre .m,.highlight code .m{color:#2aa198 !important}.pre-code .mh,html .gist .gist-file .gist-syntax .highlight pre .mh,.highlight code .mh{color:#2aa198 !important}.pre-code .mi,html .gist .gist-file .gist-syntax .highlight pre .mi,.highlight code .mi{color:#2aa198 !important}.pre-code .s,html .gist .gist-file .gist-syntax .highlight pre .s,.highlight code .s{color:#2aa198 !important}.pre-code .sd,html .gist .gist-file .gist-syntax .highlight pre .sd,.highlight code .sd{color:#2aa198 !important}.pre-code .s2,html .gist .gist-file .gist-syntax .highlight pre .s2,.highlight code .s2{color:#2aa198 !important}.pre-code .se,html .gist .gist-file .gist-syntax .highlight pre .se,.highlight code .se{color:#dc322f !important}.pre-code .si,html .gist .gist-file .gist-syntax .highlight pre .si,.highlight code .si{color:#268bd2 !important}.pre-code .sr,html .gist .gist-file .gist-syntax .highlight pre .sr,.highlight code .sr{color:#2aa198 !important}.pre-code .s1,html .gist .gist-file .gist-syntax .highlight pre .s1,.highlight code .s1{color:#2aa198 !important}.pre-code div .gd,html .gist .gist-file .gist-syntax .highlight pre div .gd,.highlight code div .gd,.pre-code div .gd .x,html .gist .gist-file .gist-syntax .highlight pre div .gd .x,.highlight code div .gd .x,.pre-code div .gi,html .gist .gist-file .gist-syntax .highlight pre div .gi,.highlight code div .gi,.pre-code div .gi .x,html .gist .gist-file .gist-syntax .highlight pre div .gi .x,.highlight code div .gi .x{display:inline-block;width:100%}.highlight,.gist-highlight{margin-bottom:1.8em;background:#002b36;overflow-y:hidden;overflow-x:auto}.highlight pre,.gist-highlight pre{background:none;-webkit-border-radius:0px;-moz-border-radius:0px;border-radius:0px;border:none;padding:0;margin-bottom:0}pre::-webkit-scrollbar,.highlight::-webkit-scrollbar,.gist-highlight::-webkit-scrollbar{height:.5em;background:rgba(255,255,255,0.15)}pre::-webkit-scrollbar-thumb:horizontal,.highlight::-webkit-scrollbar-thumb:horizontal,.gist-highlight::-webkit-scrollbar-thumb:horizontal{background:rgba(255,255,255,0.2);-webkit-border-radius:4px;border-radius:4px}.highlight code{background:#000}figure.code{background:none;padding:0;border:0;margin-bottom:1.5em}figure.code pre{margin-bottom:0}figure.code figcaption{position:relative}figure.code .highlight{margin-bottom:0}.code-title,html .gist .gist-file .gist-meta a[href*='#file'],h3.filename,figure.code figcaption{text-align:center;font-size:13px;line-height:2em;text-shadow:#cbcccc 0 1px 0;color:#474747;font-weight:normal;margin-bottom:0;-webkit-border-radius:5px 5px 0 0;-moz-border-radius:5px 5px 0 0;border-radius:5px 5px 0 0;font-family:"Helvetica Neue", Arial, "Lucida Grande", "Lucida Sans Unicode", Lucida, sans-serif;background:#aaa url('/images/code_bg.png?1419195603') top repeat-x;border:1px solid #565656;border-top-color:#cbcbcb;border-left-color:#a5a5a5;border-right-color:#a5a5a5;border-bottom:0}.download-source,html .gist .gist-file .gist-meta a[href*=raw],figure.code figcaption a{position:absolute;right:.8em;color:#666 !important;z-index:1;font-size:13px;text-shadow:#cbcccc 0 1px 0;padding-left:3em}@media only screen and (min-width: 1024px){.aside-module:first-child .title{margin-top:0}}.aside-module .title{border-bottom:1px solid #049cdb;color:#333;margin:1em 0 0.5em;padding-bottom:5px}.aside-module .title .btn{border-bottom-left-radius:0;border-bottom-right-radius:0;padding:5px 10px;text-decoration:none}.aside-module .loading{display:block;font-size:2em;text-align:center}#github-repos li p{font-size:0.6em;margin-bottom:0}#pinboard .pin-item>p{margin-bottom:0}#pinboard .pin-item>p a:hover{text-decoration:underline}#pinboard .pin-item>p a::after{content:","}#pinboard .pin-item>p a:last-child::after{content:""}@media only screen and (min-width: 481px){.social ul{-webkit-column-count:2;-moz-column-count:2;column-count:2;-webkit-column-gap:10px;-moz-column-gap:10px;column-gap:10px}}.social a{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;background-color:#e8e8e8;border:1px solid #dcdcdc;border-radius:4px;color:#222;display:inline-block;font-size:0.8em;margin-bottom:7px;padding:1em;padding-right:0.5em;position:relative;text-decoration:none;width:100%;z-index:5;-webkit-transition:box-shadow 200ms,color 400ms,transform 400ms;-moz-transition:box-shadow 200ms,color 400ms,transform 400ms;-o-transition:box-shadow 200ms,color 400ms,transform 400ms;transition:box-shadow 200ms,color 400ms,transform 400ms}.social a:hover{color:#fff !important;text-decoration:none;text-shadow:1px 1px 0 rgba(0,0,0,0.25);z-index:7}.social a:hover::before{border:1px solid #000;height:100%;top:0;width:100%}.social a::before{background-color:#222;border-radius:4px;content:"";height:1px;position:absolute;top:50%;left:0%;width:0;z-index:-1;-webkit-transition:border 200ms,height 200ms 200ms,top 200ms 200ms,width 200ms;-moz-transition:border 200ms,height 200ms 200ms,top 200ms 200ms,width 200ms;-o-transition:border 200ms,height 200ms 200ms,top 200ms 200ms,width 200ms;transition:border 200ms,height 200ms 200ms,top 200ms 200ms,width 200ms}.social a i{font-size:2em;line-height:0.8em;margin-right:0.35em}.social a.adn{color:#4a484c}.social a.adn::before{background-color:#4a484c;border-color:#3d3c3f}.social a.dribbble{color:#ea4c89}.social a.dribbble::before{background-color:#ea4c89;border-color:#e7357a}.social a.facebook{color:#3b5998}.social a.facebook::before{background-color:#3b5998;border-color:#344e86}.social a.github{color:#333}.social a.github::before{background-color:#333;border-color:#262626}.social a.gplus{color:#db4a39}.social a.gplus::before{background-color:#db4a39;border-color:#d43927}.social a.linkedin{color:#4875b4}.social a.linkedin::before{background-color:#4875b4;border-color:#4169a2}.social a.pinterest{color:#cc2127}.social a.pinterest::before{background-color:#cc2127;border-color:#b61d23}.social a.stackoverflow{color:#fe7a15}.social a.stackoverflow::before{background-color:#fe7a15;border-color:#f86c01}.social a.twitter{color:#00a0d1}.social a.twitter::before{background-color:#00a0d1;border-color:#008cb7}.social a.youtube{color:#cc181e}.social a.youtube::before{background-color:#cc181e;border-color:#b5151b}.usp{text-align:center}@media only screen and (min-width: 481px) and (max-width: 1023px){.usp{margin-bottom:25px}}.usp .icon i{-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%;border:10px solid #049cdb;color:#222;display:inline-block;font-size:6em;height:1.85em;line-height:normal;padding:0.3em;width:1.85em}.usp .title{color:#222;font-size:1.1em;line-height:3em;margin:0;text-align:center;text-transform:capitalize}.usp .title+hr{margin:0;margin-bottom:1em}.usp hr{margin-bottom:1em}.usp p{text-align:left}.hero{background-color:#0b6b94;background-position:0 50%;-webkit-background-size:cover;-moz-background-size:cover;-o-background-size:cover;background-size:cover;border-bottom:1px solid #fff;color:#fff;font-weight:bold;margin-top:-2em;margin-bottom:1.5em;padding:50px 0;position:relative}.hero>.grid-wrapper{position:relative;z-index:7}.hero .credit{font-size:0.75em;font-style:italic;position:absolute;bottom:0;right:10px;z-index:7}.hero .credit a{border-bottom:1px solid;color:#fff;text-decoration:none}.hero .credit .licence{border:none}.hero .avatar{text-align:center}@media only screen and (max-width: 1023px){.hero .avatar{margin-bottom:30px}}.hero .avatar img{-webkit-border-radius:100%;-moz-border-radius:100%;border-radius:100%;border:10px solid #049cdb}.hero h1{font-size:3.5em;line-height:1em;text-shadow:2px 2px 0 rgba(0,0,0,0.75)}.hero hr{box-shadow:1px 1px 0 rgba(0,0,0,0.75)}.hero p{text-shadow:1px 1px 0 rgba(0,0,0,0.75)}.hero p small{color:#eee;font-size:.65em}.pull-left{float:left}.pull-right{float:right}.clearfix,article blockquote{*zoom:1}.clearfix::before,article blockquote::before,.clearfix::after,article blockquote::after{display:table;content:"";line-height:0}.clearfix::after,article blockquote::after{clear:both}ul.unstyled,ul.inline,article ul.tags,ul.divided,ol.unstyled,ol.inline,article ol.tags,ol.divided{list-style-type:none;margin:0}ul.inline,article ul.tags,ol.inline,article ol.tags{list-style-type:none}ul.inline>li,article ul.tags>li,ol.inline>li,article ol.tags>li{display:inline}ul.divided>li,ol.divided>li{border-top:1px solid #fff;border-bottom:1px solid #e8e8e8;padding:0.5em 0}ul.divided>li:first-child,ol.divided>li:first-child{border-top:none;padding-top:0}ul.divided>li:last-child,ol.divided>li:last-child{border-bottom:none}.btn{background-color:#0494d1;background-image:-moz-linear-gradient(top, #049cdb, #048ac2);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#049cdb), to(#048ac2));background-image:-webkit-linear-gradient(top, #049cdb, #048ac2);background-image:-o-linear-gradient(top, #049cdb, #048ac2);background-image:linear-gradient(to bottom, #049cdb,#048ac2);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FF049CDB', endColorstr='#FF048AC2', GradientType=0);-webkit-box-shadow:0 0 3px rgba(0,0,0,0.25);-moz-box-shadow:0 0 3px rgba(0,0,0,0.25);-ms-box-shadow:0 0 3px rgba(0,0,0,0.25);-o-box-shadow:0 0 3px rgba(0,0,0,0.25);box-shadow:0 0 3px rgba(0,0,0,0.25);border-radius:3px;color:#fff;display:inline-block;padding:7px 15px;text-decoration:none;text-shadow:1px 1px 0 rgba(0,0,0,0.25)}.btn:hover{text-decoration:underline}.btn:visited{color:#fff}.grid{letter-spacing:-1rem}.opera:-o-prefocus,.grid{word-spacing:-1rem}.grid__item{letter-spacing:normal;word-spacing:normal}@media only screen and (min-width: 481px){.flex{display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-box-direction:normal;-moz-box-direction:normal;-webkit-box-orient:horizontal;-moz-box-orient:horizontal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-box-pack:start;-moz-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start;-webkit-align-content:stretch;-ms-flex-line-pack:stretch;align-content:stretch;-webkit-box-align:start;-moz-box-align:start;-webkit-align-items:flex-start;-ms-flex-align:start;align-items:flex-start}.flex__item{-webkit-box-ordinal-group:1;-moz-box-ordinal-group:1;-webkit-order:0;-ms-flex-order:0;order:0;-webkit-box-flex:0;-moz-box-flex:0;-webkit-flex:0 1 auto;-ms-flex:0 1 auto;flex:0 1 auto;-webkit-align-self:center;-ms-flex-item-align:center;align-self:center}}.ha-title{white-space:nowrap}.ha-title img{width:40px;vertical-align:middle}.usp ul{text-align:left;margin-left:27px;margin-top:-18px}.hero-buttons a{margin:0 30px 10px 0}.hero-buttons a:last-child{margin:0}article.post img,article.post table,article.page img,article.page table,article.listing img,article.listing table{border-radius:3px;box-shadow:rgba(0,0,0,0.06) 0 0 10px}article.post img.no-shadow,article.page img.no-shadow,article.listing img.no-shadow{border:0;box-shadow:none}article.post>table,article.page>table,article.listing>table{background-color:#F3FCF5}article.post p.img,article.page p.img,article.listing p.img{background-color:#FFF;border-radius:5px;text-align:center;padding-bottom:3px;font-size:.9rem;box-shadow:rgba(0,0,0,0.06) 0 0 10px}article.post p.img img,article.page p.img img,article.listing p.img img{display:block;box-shadow:none;margin:0 auto}article.post li,article.page li,article.listing li{margin-bottom:10px}article.post li>p,article.page li>p,article.listing li>p{margin-bottom:0}article.post li:last-child,article.page li:last-child,article.listing li:last-child{margin-bottom:0}p.note{position:relative;background:#e7f2fa;padding:40px 12px 6px 12px;box-shadow:rgba(0,0,0,0.06) 0 0 10px}p.note::before{font-family:"FontAwesome";content:"\f05a" " Note " attr(data-title);background-color:#6ab0de;color:white;font-weight:bold;border-top-left-radius:3px;border-top-right-radius:3px;padding:6px 14px;line-height:1.5em;position:absolute;top:0;left:0;right:0}p.note.warning{background-color:#F7F9E1}p.note.warning::before{background-color:#bbb90d;content:"\f071" " Warning " attr(data-title)}