diff --git a/atom.xml b/atom.xml index 1b14c863a1..3d30b78eaa 100644 --- a/atom.xml +++ b/atom.xml @@ -4,7 +4,7 @@ <![CDATA[Home Assistant]]> - 2015-09-13T10:51:21-07:00 + 2015-09-17T23:41:36-07:00 https://home-assistant.io/ @@ -14,79 +14,64 @@ - <![CDATA[Home Assistant meets IFTTT]]> - - 2015-09-13T09:28:00-07:00 - https://home-assistant.io/blog/2015/09/13/home-assistant-meets-ifttt - Today we announce the release of Home Assistant v0.7.2 which includes brand new support by -@sfam to integrate with IFTTT. IFTTT stands for If This, Then That and is a -webservice that integrates with almost every possible webservice out there. Adding Home -Assistant to this mix means Home Assistant can connect with all via IFTTT.

- -

It is now possible to disable your irregation system if it is going to be cloudy tomorrow or tweet -if your smoke alarm goes off.

- -

- -

- - -

Head over to the setup instructions to get started with IFTTT. Click the -read more button for some example recipes.

+ <![CDATA[Remote Monitoring with Glances]]> + + 2015-09-18T02:00:00-07:00 + https://home-assistant.io/blog/2015/09/18/monitoring-with-glances-and-home-assistant + +Inspried by a feature requests I started looking into the available options to do monitoring of remote hosts. The feature request is about displaying system information in a similar way than the systemmonitor sensor does it for the local system. After a while I started to think that it would be a nice addition for a small home network where no full-blown system monitoring setup is present.

-

In each of the following examples, make sure to replace the XXX in the url with your correct -host address and api password.

+

The basic problem is to get the data from the remote host. Starting with psutil that is used by the systemmonitor sensor, a possible solution is only a click away and named Glances. Glances has a nice curses-based interface and a RESTful API.

-

Turn off irregation system when not needed

+

The Glances sensor sensor uses that API to get all needed data.

+ +

In this post a default Fedora 22 Workstation installation is used on the host that should be monitored. In fact, it doesn’t matter if the system is the local one or a remote one as long as Glances is available. With some adjustments it should work on your own systems too. The difference will be the package and the firewall management tools.

+ +

First some extra packages are needed beside Glances, especially the bottle webserver. I guess that Glances is available for your distribution as well. Otherwise follow those instructions.

+ +
1
+
sudo dnf -y install glances python-bottle
+ + +

On Fedora the Firewall settings are strict. Let’s open port 61208 to allow other hosts to connect to that port. This is not needed if you just want to observe your local machine.

+ +
1
+2
+
sudo firewall-cmd --permanent --add-port=61208/tcp
+sudo firewall-cmd --reload
+
+ + +

Launch glances and keep an eye on the output.

+ +
1
+2
+
glances -w
+Glances web server started on http://0.0.0.0:61208/
+
+ + +

Now browse to http://IP_ADRRESS:61208/. You should see the webified view of Glances.

- + + Glances web interface

-

Maker channel setup:

+

Another check is to access the API located at http://IP_ADRRESS:61208/api/2/mem/used and to confirm that a detail about your memory usage is provided as a JSON response. If so, you are good to proceed.

- - - - - - - - - - - - - - - - - - - - - - - - - -
Field Value
URL http://xxx.xxx.xxx.xxx:8123/api/services/switch/turn_off?api_password=xxxxxxxx
METHOD POST
CONTENT TYPE application/json
BODY { “entity_id”: “switch.irrigation” }
+
1
+2
+
curl -X GET http://IP_ADDRESS:61208/api/2/mem/used
+{"used": 203943936}
+
-

Tweet when important events happen

- -

- -

- - -

This will tweet a message when a MQTT message is received that the smoke alarm has been triggered. -Setup Maker channel with event name HA_FIRE_ALARM and Twitter channel to tweet the message in -value1.

+

Add the glances sensor entry to your configuration.yaml file and restart Home Assistant then.

1
 2
@@ -96,127 +81,26 @@ Setup Maker channel with event name HA_FIRE_ALARM and Twitter chann
 6
 7
 8
-9
-10
-
# Configuration.yaml entry
-automation:
-  alias: Post a tweet when fire alarm is triggered
-
-  platform: mqtt
-  mqtt_topic: home/alarm/fire
-  mqtt_payload: 'on'
-
-  execute_service: ifttt.trigger
-  service_data: {"event":"HA_FIRE_ALARM", "value1":"The fire alarm just triggered!"}
+
# Example configuration.yaml entry
+  - platform: glances
+    name: NAS
+    host: IP_ADDRESS
+    resources:
+      - 'disk_use_percent'
+      - 'disk_use'
+      - 'disk_free'
 
-

Turn on lights when I get home

+

If there are no error in the log file then you should see your new sensors.

- + + The Glances sensors

-

Maker channel setup:

- - - - - - - - - - - - - - - - - - - - - - - - - - -
Field Value
URL http://xxx.xxx.xxx.xxx:8123/api/services/light/turn_on?api_password=xxxxxxxx
METHOD POST
CONTENT TYPE application/json
BODY { “entity_id”: “light.kitchen” }
- - -

Flash lights when a new PR comes in for Home Assistant

- -

- -

- - -

Maker channel setup:

- - - - - - - - - - - - - - - - - - - - - - - - - - -
Field Value
URL http://xxx.xxx.xxx.xxx:8123/api/services/light/turn_on?api_password=xxxxxxxx
METHOD POST
CONTENT TYPE application/json
BODY { “entity_id”: “group.all_lights”, “flash”:“yes” }
- - -

Fire events when pressing the DO button

- -

- -

- - -

Maker channel setup:

- - - - - - - - - - - - - - - - - - - - - - -
Field Value
URL http://xxx.xxx.xxx.xxx:8123/api/events/do_button_pressed?api_password=xxxxxxxx
METHOD POST
CONTENT TYPE application/json
- +

Glances has a couple of optional dependencies which are extenting the range of provided information. This means that it would be possible to get details about the RAID system, HDD temperature, IP addresses, sensors, etc., please create a Pull request with your additions or a Feature request if you want see more details in your Home Assistant frontend.

]]>
diff --git a/blog/2014/12/18/website-launched/index.html b/blog/2014/12/18/website-launched/index.html index 973cca685b..634b1b10ab 100644 --- a/blog/2014/12/18/website-launched/index.html +++ b/blog/2014/12/18/website-launched/index.html @@ -213,7 +213,7 @@
  • - Home Assistant meets IFTTT + Remote Monitoring with Glances
  • diff --git a/blog/2014/12/26/home-control-home-automation-and-the-smart-home/index.html b/blog/2014/12/26/home-control-home-automation-and-the-smart-home/index.html index fa095c4533..0a0697f302 100644 --- a/blog/2014/12/26/home-control-home-automation-and-the-smart-home/index.html +++ b/blog/2014/12/26/home-control-home-automation-and-the-smart-home/index.html @@ -275,7 +275,7 @@ This article will try to explain how they all relate.

  • - Home Assistant meets IFTTT + Remote Monitoring with Glances
  • diff --git a/blog/2015/01/04/hey-pushbullet-nice-talking-to-you/index.html b/blog/2015/01/04/hey-pushbullet-nice-talking-to-you/index.html index 03ed8c47ea..aad75e04c7 100644 --- a/blog/2015/01/04/hey-pushbullet-nice-talking-to-you/index.html +++ b/blog/2015/01/04/hey-pushbullet-nice-talking-to-you/index.html @@ -257,7 +257,7 @@
  • - Home Assistant meets IFTTT + Remote Monitoring with Glances
  • diff --git a/blog/2015/01/11/bootstrapping-your-setup-with-discovery/index.html b/blog/2015/01/11/bootstrapping-your-setup-with-discovery/index.html index 873ac09f15..bdda4e5630 100644 --- a/blog/2015/01/11/bootstrapping-your-setup-with-discovery/index.html +++ b/blog/2015/01/11/bootstrapping-your-setup-with-discovery/index.html @@ -225,7 +225,7 @@
  • - Home Assistant meets IFTTT + Remote Monitoring with Glances
  • diff --git a/blog/2015/01/13/nest-in-da-house/index.html b/blog/2015/01/13/nest-in-da-house/index.html index 256dce995b..bda42feba1 100644 --- a/blog/2015/01/13/nest-in-da-house/index.html +++ b/blog/2015/01/13/nest-in-da-house/index.html @@ -232,7 +232,7 @@
  • - Home Assistant meets IFTTT + Remote Monitoring with Glances
  • diff --git a/blog/2015/01/24/release-notes/index.html b/blog/2015/01/24/release-notes/index.html index b520b4b2d1..e6846992e6 100644 --- a/blog/2015/01/24/release-notes/index.html +++ b/blog/2015/01/24/release-notes/index.html @@ -237,7 +237,7 @@ Home Assistant now supports --open-ui and --demo-mode
  • - Home Assistant meets IFTTT + Remote Monitoring with Glances
  • diff --git a/blog/2015/02/08/looking-at-the-past/index.html b/blog/2015/02/08/looking-at-the-past/index.html index e556c8453b..381617d3e0 100644 --- a/blog/2015/02/08/looking-at-the-past/index.html +++ b/blog/2015/02/08/looking-at-the-past/index.html @@ -255,7 +255,7 @@ Events are saved in a local database. Google Graphs is used to draw the graph. D
  • - Home Assistant meets IFTTT + Remote Monitoring with Glances
  • diff --git a/blog/2015/02/24/streaming-updates/index.html b/blog/2015/02/24/streaming-updates/index.html index 5910c2ae4e..b0aac8ee3a 100644 --- a/blog/2015/02/24/streaming-updates/index.html +++ b/blog/2015/02/24/streaming-updates/index.html @@ -233,7 +233,7 @@
  • - Home Assistant meets IFTTT + Remote Monitoring with Glances
  • diff --git a/blog/2015/03/01/home-assistant-migrating-to-yaml/index.html b/blog/2015/03/01/home-assistant-migrating-to-yaml/index.html index 8a3c7af28b..b3aa76cb98 100644 --- a/blog/2015/03/01/home-assistant-migrating-to-yaml/index.html +++ b/blog/2015/03/01/home-assistant-migrating-to-yaml/index.html @@ -220,7 +220,7 @@ YAML allows the use of lists, which should make the configuration file a bit mor
  • - Home Assistant meets IFTTT + Remote Monitoring with Glances
  • diff --git a/blog/2015/03/08/new-logo/index.html b/blog/2015/03/08/new-logo/index.html index 17c76df95a..b44c924393 100644 --- a/blog/2015/03/08/new-logo/index.html +++ b/blog/2015/03/08/new-logo/index.html @@ -221,7 +221,7 @@ The old logo, the new detailed logo and the new simple logo.
  • - Home Assistant meets IFTTT + Remote Monitoring with Glances
  • diff --git a/blog/2015/03/11/release-notes/index.html b/blog/2015/03/11/release-notes/index.html index 0e9144c17d..f784620583 100644 --- a/blog/2015/03/11/release-notes/index.html +++ b/blog/2015/03/11/release-notes/index.html @@ -267,7 +267,7 @@ An initial version of voice control for Home Assistant has landed. The current i
  • - Home Assistant meets IFTTT + Remote Monitoring with Glances
  • diff --git a/blog/2015/03/22/release-notes/index.html b/blog/2015/03/22/release-notes/index.html index 3c511bf948..734cf82a5e 100644 --- a/blog/2015/03/22/release-notes/index.html +++ b/blog/2015/03/22/release-notes/index.html @@ -340,7 +340,7 @@ James Cole has also contributed support for the
  • - Home Assistant meets IFTTT + Remote Monitoring with Glances
  • diff --git a/blog/2015/04/25/release-notes/index.html b/blog/2015/04/25/release-notes/index.html index 6c425cb81e..ed7d8d0cc9 100644 --- a/blog/2015/04/25/release-notes/index.html +++ b/blog/2015/04/25/release-notes/index.html @@ -356,7 +356,7 @@ James has also contributed support for integrating Transmission into Home Assist
  • - Home Assistant meets IFTTT + Remote Monitoring with Glances
  • diff --git a/blog/2015/05/09/utc-time-zone-awareness/index.html b/blog/2015/05/09/utc-time-zone-awareness/index.html index ccc5939c4b..a6dfb70ba3 100644 --- a/blog/2015/05/09/utc-time-zone-awareness/index.html +++ b/blog/2015/05/09/utc-time-zone-awareness/index.html @@ -245,7 +245,7 @@
  • - Home Assistant meets IFTTT + Remote Monitoring with Glances
  • diff --git a/blog/2015/05/14/release-notes/index.html b/blog/2015/05/14/release-notes/index.html index 8f8243a4cd..5715e34796 100644 --- a/blog/2015/05/14/release-notes/index.html +++ b/blog/2015/05/14/release-notes/index.html @@ -382,7 +382,7 @@ Before diving into the newly supported devices and services, I want to highlight
  • - Home Assistant meets IFTTT + Remote Monitoring with Glances
  • diff --git a/blog/2015/06/10/release-notes/index.html b/blog/2015/06/10/release-notes/index.html index eb0e392527..bc2834c8c6 100644 --- a/blog/2015/06/10/release-notes/index.html +++ b/blog/2015/06/10/release-notes/index.html @@ -461,7 +461,7 @@ This switch platform allows you to control your motion detection setting on your
  • - Home Assistant meets IFTTT + Remote Monitoring with Glances
  • diff --git a/blog/2015/07/11/ip-cameras-arduino-kodi-efergy-support/index.html b/blog/2015/07/11/ip-cameras-arduino-kodi-efergy-support/index.html index 07811e4237..911e3125b7 100644 --- a/blog/2015/07/11/ip-cameras-arduino-kodi-efergy-support/index.html +++ b/blog/2015/07/11/ip-cameras-arduino-kodi-efergy-support/index.html @@ -405,7 +405,7 @@ Fabian has added support for Forecast.io to g
  • - Home Assistant meets IFTTT + Remote Monitoring with Glances
  • diff --git a/blog/2015/08/09/mqtt-raspberry-pi-squeezebox-asuswrt-support/index.html b/blog/2015/08/09/mqtt-raspberry-pi-squeezebox-asuswrt-support/index.html index f79320feae..d189d631ac 100644 --- a/blog/2015/08/09/mqtt-raspberry-pi-squeezebox-asuswrt-support/index.html +++ b/blog/2015/08/09/mqtt-raspberry-pi-squeezebox-asuswrt-support/index.html @@ -368,7 +368,7 @@ Support for Temper temperature sensors has been contributed by - Home Assistant meets IFTTT + Remote Monitoring with Glances diff --git a/blog/2015/08/17/verisure-and-modern-tp-link-router-support/index.html b/blog/2015/08/17/verisure-and-modern-tp-link-router-support/index.html index a190ac7dbf..b397120241 100644 --- a/blog/2015/08/17/verisure-and-modern-tp-link-router-support/index.html +++ b/blog/2015/08/17/verisure-and-modern-tp-link-router-support/index.html @@ -246,7 +246,7 @@ Home Assistant support to integrate your Ver
  • - Home Assistant meets IFTTT + Remote Monitoring with Glances
  • diff --git a/blog/2015/08/26/laundry-automation-with-moteino-mqtt-and-home-assistant/index.html b/blog/2015/08/26/laundry-automation-with-moteino-mqtt-and-home-assistant/index.html index 182cf89b2a..db63075a49 100644 --- a/blog/2015/08/26/laundry-automation-with-moteino-mqtt-and-home-assistant/index.html +++ b/blog/2015/08/26/laundry-automation-with-moteino-mqtt-and-home-assistant/index.html @@ -430,7 +430,7 @@
  • - Home Assistant meets IFTTT + Remote Monitoring with Glances
  • diff --git a/blog/2015/08/31/version-7-revamped-ui-and-improved-distribution/index.html b/blog/2015/08/31/version-7-revamped-ui-and-improved-distribution/index.html index 69a87db308..3dc025f2b0 100644 --- a/blog/2015/08/31/version-7-revamped-ui-and-improved-distribution/index.html +++ b/blog/2015/08/31/version-7-revamped-ui-and-improved-distribution/index.html @@ -376,7 +376,7 @@ or AM2302 device.

  • - Home Assistant meets IFTTT + Remote Monitoring with Glances
  • diff --git a/blog/2015/09/11/different-ways-to-use-mqtt-with-home-assistant/index.html b/blog/2015/09/11/different-ways-to-use-mqtt-with-home-assistant/index.html index c5ead31798..4603cc6f24 100644 --- a/blog/2015/09/11/different-ways-to-use-mqtt-with-home-assistant/index.html +++ b/blog/2015/09/11/different-ways-to-use-mqtt-with-home-assistant/index.html @@ -515,7 +515,7 @@ The MQTT support was added to H
  • - Home Assistant meets IFTTT + Remote Monitoring with Glances
  • diff --git a/blog/2015/09/13/home-assistant-meets-ifttt/index.html b/blog/2015/09/18/monitoring-with-glances-and-home-assistant/index.html similarity index 52% rename from blog/2015/09/13/home-assistant-meets-ifttt/index.html rename to blog/2015/09/18/monitoring-with-glances-and-home-assistant/index.html index 5a5d7bd864..c3be9c26ec 100644 --- a/blog/2015/09/13/home-assistant-meets-ifttt/index.html +++ b/blog/2015/09/18/monitoring-with-glances-and-home-assistant/index.html @@ -9,21 +9,21 @@ - Home Assistant meets IFTTT - Home Assistant + Remote Monitoring with Glances - Home Assistant - + - + - + - - + + @@ -96,7 +96,7 @@
    -

    Home Assistant meets IFTTT

    +

    Remote Monitoring with Glances

    @@ -113,11 +113,11 @@ - + - + three minutes reading time @@ -129,8 +129,6 @@
  • how-to
  • -
  • release-notes
  • - @@ -147,75 +145,60 @@ -

    Today we announce the release of Home Assistant v0.7.2 which includes brand new support by -@sfam to integrate with IFTTT. IFTTT stands for If This, Then That and is a -webservice that integrates with almost every possible webservice out there. Adding Home -Assistant to this mix means Home Assistant can connect with all via IFTTT.

    - -

    It is now possible to disable your irregation system if it is going to be cloudy tomorrow or tweet -if your smoke alarm goes off.

    - -

    - -

    - - -

    Head over to the setup instructions to get started with IFTTT. Click the -read more button for some example recipes.

    +

    +Inspried by a feature requests I started looking into the available options to do monitoring of remote hosts. The feature request is about displaying system information in a similar way than the systemmonitor sensor does it for the local system. After a while I started to think that it would be a nice addition for a small home network where no full-blown system monitoring setup is present.

    -

    In each of the following examples, make sure to replace the XXX in the url with your correct -host address and api password.

    +

    The basic problem is to get the data from the remote host. Starting with psutil that is used by the systemmonitor sensor, a possible solution is only a click away and named Glances. Glances has a nice curses-based interface and a RESTful API.

    -

    Turn off irregation system when not needed

    +

    The Glances sensor sensor uses that API to get all needed data.

    + +

    In this post a default Fedora 22 Workstation installation is used on the host that should be monitored. In fact, it doesn’t matter if the system is the local one or a remote one as long as Glances is available. With some adjustments it should work on your own systems too. The difference will be the package and the firewall management tools.

    + +

    First some extra packages are needed beside Glances, especially the bottle webserver. I guess that Glances is available for your distribution as well. Otherwise follow those instructions.

    + +
    1
    +
    sudo dnf -y install glances python-bottle
    + + +

    On Fedora the Firewall settings are strict. Let’s open port 61208 to allow other hosts to connect to that port. This is not needed if you just want to observe your local machine.

    + +
    1
    +2
    +
    sudo firewall-cmd --permanent --add-port=61208/tcp
    +sudo firewall-cmd --reload
    +
    + + +

    Launch glances and keep an eye on the output.

    + +
    1
    +2
    +
    glances -w
    +Glances web server started on http://0.0.0.0:61208/
    +
    + + +

    Now browse to http://IP_ADRRESS:61208/. You should see the webified view of Glances.

    - + + Glances web interface

    -

    Maker channel setup:

    +

    Another check is to access the API located at http://IP_ADRRESS:61208/api/2/mem/used and to confirm that a detail about your memory usage is provided as a JSON response. If so, you are good to proceed.

    - - - - - - - - - - - - - - - - - - - - - - - - - -
    Field Value
    URL http://xxx.xxx.xxx.xxx:8123/api/services/switch/turn_off?api_password=xxxxxxxx
    METHOD POST
    CONTENT TYPE application/json
    BODY { “entity_id”: “switch.irrigation” }
    +
    1
    +2
    +
    curl -X GET http://IP_ADDRESS:61208/api/2/mem/used
    +{"used": 203943936}
    +
    -

    Tweet when important events happen

    - -

    - -

    - - -

    This will tweet a message when a MQTT message is received that the smoke alarm has been triggered. -Setup Maker channel with event name HA_FIRE_ALARM and Twitter channel to tweet the message in -value1.

    +

    Add the glances sensor entry to your configuration.yaml file and restart Home Assistant then.

    1
     2
    @@ -225,127 +208,26 @@ Setup Maker channel with event name HA_FIRE_ALARM and Twitter chann
     6
     7
     8
    -9
    -10
    -
    # Configuration.yaml entry
    -automation:
    -  alias: Post a tweet when fire alarm is triggered
    -
    -  platform: mqtt
    -  mqtt_topic: home/alarm/fire
    -  mqtt_payload: 'on'
    -
    -  execute_service: ifttt.trigger
    -  service_data: {"event":"HA_FIRE_ALARM", "value1":"The fire alarm just triggered!"}
    +
    # Example configuration.yaml entry
    +  - platform: glances
    +    name: NAS
    +    host: IP_ADDRESS
    +    resources:
    +      - 'disk_use_percent'
    +      - 'disk_use'
    +      - 'disk_free'
     
    -

    Turn on lights when I get home

    +

    If there are no error in the log file then you should see your new sensors.

    - + + The Glances sensors

    -

    Maker channel setup:

    - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Field Value
    URL http://xxx.xxx.xxx.xxx:8123/api/services/light/turn_on?api_password=xxxxxxxx
    METHOD POST
    CONTENT TYPE application/json
    BODY { “entity_id”: “light.kitchen” }
    - - -

    Flash lights when a new PR comes in for Home Assistant

    - -

    - -

    - - -

    Maker channel setup:

    - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Field Value
    URL http://xxx.xxx.xxx.xxx:8123/api/services/light/turn_on?api_password=xxxxxxxx
    METHOD POST
    CONTENT TYPE application/json
    BODY { “entity_id”: “group.all_lights”, “flash”:“yes” }
    - - -

    Fire events when pressing the DO button

    - -

    - -

    - - -

    Maker channel setup:

    - - - - - - - - - - - - - - - - - - - - - - -
    Field Value
    URL http://xxx.xxx.xxx.xxx:8123/api/events/do_button_pressed?api_password=xxxxxxxx
    METHOD POST
    CONTENT TYPE application/json
    - +

    Glances has a couple of optional dependencies which are extenting the range of provided information. This means that it would be possible to get details about the RAID system, HDD temperature, IP addresses, sensors, etc., please create a Pull request with your additions or a Feature request if you want see more details in your Home Assistant frontend.

    @@ -372,15 +254,15 @@ Setup Maker channel with event name HA_FIRE_ALARM and Twitter chann Tweet + data-url="https://home-assistant.io/blog/2015/09/18/monitoring-with-glances-and-home-assistant/" + data-counturl="https://home-assistant.io/blog/2015/09/18/monitoring-with-glances-and-home-assistant/" >Tweet
    @@ -484,8 +366,8 @@ Setup Maker channel with event name HA_FIRE_ALARM and Twitter chann // var disqus_developer = 1; - var disqus_identifier = 'https://home-assistant.io/blog/2015/09/13/home-assistant-meets-ifttt/'; - var disqus_url = 'https://home-assistant.io/blog/2015/09/13/home-assistant-meets-ifttt/'; + var disqus_identifier = 'https://home-assistant.io/blog/2015/09/18/monitoring-with-glances-and-home-assistant/'; + var disqus_url = 'https://home-assistant.io/blog/2015/09/18/monitoring-with-glances-and-home-assistant/'; var disqus_script = 'embed.js'; (function () { diff --git a/blog/archives/index.html b/blog/archives/index.html index 57f9b22950..8fb9e29379 100644 --- a/blog/archives/index.html +++ b/blog/archives/index.html @@ -22,7 +22,7 @@ - + @@ -117,12 +117,12 @@
    -
    -

    Home Assistant meets IFTTT

    +

    Remote Monitoring with Glances

    @@ -134,8 +134,6 @@
  • how-to
  • -
  • release-notes
  • - @@ -1028,7 +1026,7 @@
  • - Home Assistant meets IFTTT + Remote Monitoring with Glances
  • diff --git a/blog/categories/architecture/atom.xml b/blog/categories/architecture/atom.xml index 365593890a..14749b07af 100644 --- a/blog/categories/architecture/atom.xml +++ b/blog/categories/architecture/atom.xml @@ -4,7 +4,7 @@ <![CDATA[Category: architecture | Home Assistant]]> - 2015-09-13T10:51:21-07:00 + 2015-09-17T23:41:36-07:00 https://home-assistant.io/ diff --git a/blog/categories/architecture/index.html b/blog/categories/architecture/index.html index 9ea925ec55..0b1eb873a8 100644 --- a/blog/categories/architecture/index.html +++ b/blog/categories/architecture/index.html @@ -207,7 +207,7 @@
  • - Home Assistant meets IFTTT + Remote Monitoring with Glances
  • diff --git a/blog/categories/branding/atom.xml b/blog/categories/branding/atom.xml index 2ad08ce3bb..d323a70966 100644 --- a/blog/categories/branding/atom.xml +++ b/blog/categories/branding/atom.xml @@ -4,7 +4,7 @@ <![CDATA[Category: branding | Home Assistant]]> - 2015-09-13T10:51:21-07:00 + 2015-09-17T23:41:36-07:00 https://home-assistant.io/ diff --git a/blog/categories/branding/index.html b/blog/categories/branding/index.html index fe9f9eabe7..0e662bd62c 100644 --- a/blog/categories/branding/index.html +++ b/blog/categories/branding/index.html @@ -207,7 +207,7 @@
  • - Home Assistant meets IFTTT + Remote Monitoring with Glances
  • diff --git a/blog/categories/component/atom.xml b/blog/categories/component/atom.xml index dff89391c4..331311d14a 100644 --- a/blog/categories/component/atom.xml +++ b/blog/categories/component/atom.xml @@ -4,7 +4,7 @@ <![CDATA[Category: component | Home Assistant]]> - 2015-09-13T10:51:21-07:00 + 2015-09-17T23:41:36-07:00 https://home-assistant.io/ diff --git a/blog/categories/component/index.html b/blog/categories/component/index.html index 180fb8dd74..f3824d81b3 100644 --- a/blog/categories/component/index.html +++ b/blog/categories/component/index.html @@ -320,7 +320,7 @@
  • - Home Assistant meets IFTTT + Remote Monitoring with Glances
  • diff --git a/blog/categories/core/atom.xml b/blog/categories/core/atom.xml index 4438734b5e..e2ca33cebc 100644 --- a/blog/categories/core/atom.xml +++ b/blog/categories/core/atom.xml @@ -4,7 +4,7 @@ <![CDATA[Category: core | Home Assistant]]> - 2015-09-13T10:51:21-07:00 + 2015-09-17T23:41:36-07:00 https://home-assistant.io/ diff --git a/blog/categories/core/index.html b/blog/categories/core/index.html index 16701beed3..b99904b355 100644 --- a/blog/categories/core/index.html +++ b/blog/categories/core/index.html @@ -244,7 +244,7 @@
  • - Home Assistant meets IFTTT + Remote Monitoring with Glances
  • diff --git a/blog/categories/frontend/atom.xml b/blog/categories/frontend/atom.xml index c0c2c54482..07fafecb60 100644 --- a/blog/categories/frontend/atom.xml +++ b/blog/categories/frontend/atom.xml @@ -4,7 +4,7 @@ <![CDATA[Category: frontend | Home Assistant]]> - 2015-09-13T10:51:21-07:00 + 2015-09-17T23:41:36-07:00 https://home-assistant.io/ diff --git a/blog/categories/frontend/index.html b/blog/categories/frontend/index.html index 35af7bdf8d..bb69e6938e 100644 --- a/blog/categories/frontend/index.html +++ b/blog/categories/frontend/index.html @@ -246,7 +246,7 @@
  • - Home Assistant meets IFTTT + Remote Monitoring with Glances
  • diff --git a/blog/categories/how-to/atom.xml b/blog/categories/how-to/atom.xml index f10eda6eec..0c3e06a80f 100644 --- a/blog/categories/how-to/atom.xml +++ b/blog/categories/how-to/atom.xml @@ -4,7 +4,7 @@ <![CDATA[Category: how-to | Home Assistant]]> - 2015-09-13T10:51:21-07:00 + 2015-09-17T23:41:36-07:00 https://home-assistant.io/ @@ -14,198 +14,74 @@ - <![CDATA[Home Assistant meets IFTTT]]> - - 2015-09-13T09:28:00-07:00 - https://home-assistant.io/blog/2015/09/13/home-assistant-meets-ifttt - Today we announce the release of Home Assistant v0.7.2 which includes brand new support by -@sfam to integrate with IFTTT. IFTTT stands for If This, Then That and is a -webservice that integrates with almost every possible webservice out there. Adding Home -Assistant to this mix means Home Assistant can connect with all via IFTTT.

    - -

    It is now possible to disable your irregation system if it is going to be cloudy tomorrow or tweet -if your smoke alarm goes off.

    - -

    - -

    - - -

    Head over to the setup instructions to get started with IFTTT. Click the -read more button for some example recipes.

    + <![CDATA[Remote Monitoring with Glances]]> + + 2015-09-18T02:00:00-07:00 + https://home-assistant.io/blog/2015/09/18/monitoring-with-glances-and-home-assistant + +Inspried by a feature requests I started looking into the available options to do monitoring of remote hosts. The feature request is about displaying system information in a similar way than the systemmonitor sensor does it for the local system. After a while I started to think that it would be a nice addition for a small home network where no full-blown system monitoring setup is present.

    -

    In each of the following examples, make sure to replace the XXX in the url with your correct -host address and api password.

    +

    The basic problem is to get the data from the remote host. Starting with psutil that is used by the systemmonitor sensor, a possible solution is only a click away and named Glances. Glances has a nice curses-based interface and a RESTful API.

    -

    Turn off irregation system when not needed

    +

    The Glances sensor sensor uses that API to get all needed data.

    -

    - -

    +

    In this post a default Fedora 22 Workstation installation is used on the host that should be monitored. In fact, it doesn’t matter if the system is the local one or a remote one as long as Glances is available. With some adjustments it should work on your own systems too. The difference will be the package and the firewall management tools.

    +

    First some extra packages are needed beside Glances, especially the bottle webserver. I guess that Glances is available for your distribution as well. Otherwise follow those instructions.

    -

    Maker channel setup:

    - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Field Value
    URL http://xxx.xxx.xxx.xxx:8123/api/services/switch/turn_off?api_password=xxxxxxxx
    METHOD POST
    CONTENT TYPE application/json
    BODY { “entity_id”: “switch.irrigation” }
    - - -

    Tweet when important events happen

    - -

    - -

    - - -

    This will tweet a message when a MQTT message is received that the smoke alarm has been triggered. -Setup Maker channel with event name HA_FIRE_ALARM and Twitter channel to tweet the message in -value1.

    - -
    # Configuration.yaml entry
    -automation:
    -  alias: Post a tweet when fire alarm is triggered
    -
    -  platform: mqtt
    -  mqtt_topic: home/alarm/fire
    -  mqtt_payload: 'on'
    -
    -  execute_service: ifttt.trigger
    -  service_data: {"event":"HA_FIRE_ALARM", "value1":"The fire alarm just triggered!"}
    +
    sudo dnf -y install glances python-bottle
     
    -

    Turn on lights when I get home

    +

    On Fedora the Firewall settings are strict. Let’s open port 61208 to allow other hosts to connect to that port. This is not needed if you just want to observe your local machine.

    + +
    sudo firewall-cmd --permanent --add-port=61208/tcp
    +sudo firewall-cmd --reload
    +
    + +

    Launch glances and keep an eye on the output.

    + +
    glances -w
    +Glances web server started on http://0.0.0.0:61208/
    +
    + +

    Now browse to http://IP_ADRRESS:61208/. You should see the webified view of Glances.

    - + + Glances web interface

    -

    Maker channel setup:

    +

    Another check is to access the API located at http://IP_ADRRESS:61208/api/2/mem/used and to confirm that a detail about your memory usage is provided as a JSON response. If so, you are good to proceed.

    - - - - - - - - - - - - - - - - - - - - - - - - - -
    Field Value
    URL http://xxx.xxx.xxx.xxx:8123/api/services/light/turn_on?api_password=xxxxxxxx
    METHOD POST
    CONTENT TYPE application/json
    BODY { “entity_id”: “light.kitchen” }
    +
    curl -X GET http://IP_ADDRESS:61208/api/2/mem/used
    +{"used": 203943936}
    +
    +

    Add the glances sensor entry to your configuration.yaml file and restart Home Assistant then.

    -

    Flash lights when a new PR comes in for Home Assistant

    +
    # Example configuration.yaml entry
    +  - platform: glances
    +    name: NAS
    +    host: IP_ADDRESS
    +    resources:
    +      - 'disk_use_percent'
    +      - 'disk_use'
    +      - 'disk_free'
    +
    + +

    If there are no error in the log file then you should see your new sensors.

    - + + The Glances sensors

    -

    Maker channel setup:

    - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Field Value
    URL http://xxx.xxx.xxx.xxx:8123/api/services/light/turn_on?api_password=xxxxxxxx
    METHOD POST
    CONTENT TYPE application/json
    BODY { “entity_id”: “group.all_lights”, “flash”:“yes” }
    - - -

    Fire events when pressing the DO button

    - -

    - -

    - - -

    Maker channel setup:

    - - - - - - - - - - - - - - - - - - - - - - -
    Field Value
    URL http://xxx.xxx.xxx.xxx:8123/api/events/do_button_pressed?api_password=xxxxxxxx
    METHOD POST
    CONTENT TYPE application/json
    - +

    Glances has a couple of optional dependencies which are extenting the range of provided information. This means that it would be possible to get details about the RAID system, HDD temperature, IP addresses, sensors, etc., please create a Pull request with your additions or a Feature request if you want see more details in your Home Assistant frontend.

    ]]> diff --git a/blog/categories/how-to/index.html b/blog/categories/how-to/index.html index 18b7ee8e84..1b97eba40a 100644 --- a/blog/categories/how-to/index.html +++ b/blog/categories/how-to/index.html @@ -117,12 +117,12 @@
    -
    -

    Home Assistant meets IFTTT

    +

    Remote Monitoring with Glances

    @@ -134,8 +134,6 @@
  • how-to
  • -
  • release-notes
  • - @@ -246,7 +244,7 @@
  • - Home Assistant meets IFTTT + Remote Monitoring with Glances
  • diff --git a/blog/categories/release-notes/atom.xml b/blog/categories/release-notes/atom.xml index a3dc94524b..fd32df389e 100644 --- a/blog/categories/release-notes/atom.xml +++ b/blog/categories/release-notes/atom.xml @@ -4,7 +4,7 @@ <![CDATA[Category: release-notes | Home Assistant]]> - 2015-09-13T10:51:21-07:00 + 2015-09-17T23:41:36-07:00 https://home-assistant.io/ @@ -13,202 +13,6 @@ Octopress - - <![CDATA[Home Assistant meets IFTTT]]> - - 2015-09-13T09:28:00-07:00 - https://home-assistant.io/blog/2015/09/13/home-assistant-meets-ifttt - Today we announce the release of Home Assistant v0.7.2 which includes brand new support by -@sfam to integrate with IFTTT. IFTTT stands for If This, Then That and is a -webservice that integrates with almost every possible webservice out there. Adding Home -Assistant to this mix means Home Assistant can connect with all via IFTTT.

    - -

    It is now possible to disable your irregation system if it is going to be cloudy tomorrow or tweet -if your smoke alarm goes off.

    - -

    - -

    - - -

    Head over to the setup instructions to get started with IFTTT. Click the -read more button for some example recipes.

    - - - - -

    In each of the following examples, make sure to replace the XXX in the url with your correct -host address and api password.

    - -

    Turn off irregation system when not needed

    - -

    - -

    - - -

    Maker channel setup:

    - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Field Value
    URL http://xxx.xxx.xxx.xxx:8123/api/services/switch/turn_off?api_password=xxxxxxxx
    METHOD POST
    CONTENT TYPE application/json
    BODY { “entity_id”: “switch.irrigation” }
    - - -

    Tweet when important events happen

    - -

    - -

    - - -

    This will tweet a message when a MQTT message is received that the smoke alarm has been triggered. -Setup Maker channel with event name HA_FIRE_ALARM and Twitter channel to tweet the message in -value1.

    - -
    # Configuration.yaml entry
    -automation:
    -  alias: Post a tweet when fire alarm is triggered
    -
    -  platform: mqtt
    -  mqtt_topic: home/alarm/fire
    -  mqtt_payload: 'on'
    -
    -  execute_service: ifttt.trigger
    -  service_data: {"event":"HA_FIRE_ALARM", "value1":"The fire alarm just triggered!"}
    -
    - -

    Turn on lights when I get home

    - -

    - -

    - - -

    Maker channel setup:

    - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Field Value
    URL http://xxx.xxx.xxx.xxx:8123/api/services/light/turn_on?api_password=xxxxxxxx
    METHOD POST
    CONTENT TYPE application/json
    BODY { “entity_id”: “light.kitchen” }
    - - -

    Flash lights when a new PR comes in for Home Assistant

    - -

    - -

    - - -

    Maker channel setup:

    - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Field Value
    URL http://xxx.xxx.xxx.xxx:8123/api/services/light/turn_on?api_password=xxxxxxxx
    METHOD POST
    CONTENT TYPE application/json
    BODY { “entity_id”: “group.all_lights”, “flash”:“yes” }
    - - -

    Fire events when pressing the DO button

    - -

    - -

    - - -

    Maker channel setup:

    - - - - - - - - - - - - - - - - - - - - - - -
    Field Value
    URL http://xxx.xxx.xxx.xxx:8123/api/events/do_button_pressed?api_password=xxxxxxxx
    METHOD POST
    CONTENT TYPE application/json
    - -]]>
    -
    - <![CDATA[Verisure devices and modern TP-Link routers now supported]]> @@ -643,6 +447,124 @@ switch: username: YOUR_USERNAME password: YOUR_PASSWORD
    +]]>
    +
    + + + <![CDATA[Release notes for May 14, 2015]]> + + 2015-05-14T22:25:00-07:00 + https://home-assistant.io/blog/2015/05/14/release-notes + Almost three busy weeks have past since the last release. We used this time to finally make the overhaul to use UTC as the internal date time format. We added a bunch of test coverage in the process to make sure the transition went smoothly. Pleas see the blog post about the UTC refactor for backwards incompatible changes.

    + +

    This release includes a significant startup boost for the frontend and a fix for Wemo discovery after their latest firmware upgrade.

    + +

    I would like to give a big shout out to our newest contributor fabaff for taking the time to improve the documentation.

    + +

    +To update to the latest version, run scripts/update. Please report any issues on GitHub. +

    + + + + + + + +

    Overwriting Entity Attributes
    +Before diving into the newly supported devices and services, I want to highlight an awesome configuration enhancement by rmkraus: overwriting entity attributes.

    + +

    These new configuration settings allow you to overwrite entity state attributes. The main usage for this is being able to overwrite attributes that influence how an entity is shown in the interface.

    + +
    # Example configuration.yaml entry
    +homeassistant:
    +  customize:
    +    light.bowl:
    +      # hides this entity from the interface
    +      hidden: true
    +    light.ceiling:
    +      # Replaces the state badge with given picture
    +      entity_picture: http://graph.facebook.com/schoutsen/picture
    +
    + +

    MySensors
    + +Andythigpen and Theolind have added support for the MySensors platform to Home Assistant.

    + +
    # Example configuration.yaml entry
    +sensor:
    +  platform: mysensors
    +  port: /dev/ttyACM0
    +
    + +

    OpenWeatherMap
    + +Fabaff has contributed support for OpenWeatherMap. This will allow you to integrate local meteorological data into Home Assistant.

    + +
    # Example configuration.yaml entry
    +sensor:
    +  platform: openweathermap
    +  api_key: YOUR_API_KEY
    +  monitored_variables:
    +    - type: 'weather'
    +    - type: 'temperature'
    +    - type: 'wind_speed'
    +    - type: 'humidity'
    +    - type: 'pressure'
    +    - type: 'clouds'
    +    - type: 'rain'
    +    - type: 'snow'
    +
    + +

    InstaPush
    + +Fabaff has contributed support for InstaPush. This will allow you send messages from Home Assistant to your iOS and Android devices.

    + +
    # Example configuration.yaml entry
    +notify:
    +    platform: instapush
    +    # Get those by creating a new application, event, and tracker on https://instapush.im
    +    api_key: ABCDEFGHJKLMNOPQRSTUVXYZ
    +    app_secret: ABCDEFGHJKLMNOPQRSTUVXYZ
    +    event: ABCDEFGHJKLMNOPQRSTUVXYZ
    +    tracker: ABCDEFGHJKLMNOPQRSTUVXYZ
    +
    + +

    XMPP
    + +Fabaff has contributed support for Jabber/XMPP. This will allow you send messages from Home Assistant to anyone on Jabber/XMPP.

    + +
    # Example configuration.yaml entry
    +notify:
    +    platform: xmpp
    +    sender: YOUR_JID
    +    password: YOUR_JABBER_ACCOUNT_PASSWORD
    +    recipient: YOUR_RECIPIENT
    +
    + +

    Notify My Android
    + +Fabaff has contributed support for Notify My Android. This will allow you to send messages from Home Assistant to your Android device.

    + +
    # Example configuration.yaml entry
    +notify:
    +    platform: nma
    +    # Get this by registering a new application on http://www.notifymyandroid.com/
    +    api_key: ABCDEFGHJKLMNOPQRSTUVXYZ
    +
    + +

    Time & Date sensor
    +Fabaff has contributed a time & date sensor. This will allow you to show the current time/date on the dashboard.

    + +
    # Example configuration.yaml entry
    +sensor:
    +  platform: time_date
    +  monitored_variables:
    +    - type: 'time'
    +    - type: 'date'
    +    - type: 'date_time'
    +    - type: 'time_date'
    +
    ]]>
    diff --git a/blog/categories/release-notes/index.html b/blog/categories/release-notes/index.html index 5acccb672a..11d11007e4 100644 --- a/blog/categories/release-notes/index.html +++ b/blog/categories/release-notes/index.html @@ -114,45 +114,6 @@ - - - -
    - -
    @@ -542,7 +503,7 @@
  • - Home Assistant meets IFTTT + Remote Monitoring with Glances
  • diff --git a/blog/categories/user-stories/atom.xml b/blog/categories/user-stories/atom.xml index 4744a17ae3..53070d51c5 100644 --- a/blog/categories/user-stories/atom.xml +++ b/blog/categories/user-stories/atom.xml @@ -4,7 +4,7 @@ <![CDATA[Category: user-stories | Home Assistant]]> - 2015-09-13T10:51:21-07:00 + 2015-09-17T23:41:36-07:00 https://home-assistant.io/ diff --git a/blog/categories/user-stories/index.html b/blog/categories/user-stories/index.html index 86f61bae7a..570bea585a 100644 --- a/blog/categories/user-stories/index.html +++ b/blog/categories/user-stories/index.html @@ -244,7 +244,7 @@
  • - Home Assistant meets IFTTT + Remote Monitoring with Glances
  • diff --git a/blog/categories/website/atom.xml b/blog/categories/website/atom.xml index 332c94937b..d5e8d51d0c 100644 --- a/blog/categories/website/atom.xml +++ b/blog/categories/website/atom.xml @@ -4,7 +4,7 @@ <![CDATA[Category: website | Home Assistant]]> - 2015-09-13T10:51:21-07:00 + 2015-09-17T23:41:36-07:00 https://home-assistant.io/ diff --git a/blog/categories/website/index.html b/blog/categories/website/index.html index 9d8e17fc21..4642293f61 100644 --- a/blog/categories/website/index.html +++ b/blog/categories/website/index.html @@ -207,7 +207,7 @@
  • - Home Assistant meets IFTTT + Remote Monitoring with Glances
  • diff --git a/blog/index.html b/blog/index.html index 1d2bf7a66b..c28e9ba2d3 100644 --- a/blog/index.html +++ b/blog/index.html @@ -22,7 +22,7 @@ - + @@ -100,7 +100,7 @@

    - Home Assistant meets IFTTT + Remote Monitoring with Glances

    @@ -118,11 +118,11 @@ - + - + three minutes reading time @@ -134,15 +134,13 @@
  • how-to
  • -
  • release-notes
  • - Comments
    @@ -153,24 +151,11 @@
    -

    Today we announce the release of Home Assistant v0.7.2 which includes brand new support by -@sfam to integrate with IFTTT. IFTTT stands for If This, Then That and is a -webservice that integrates with almost every possible webservice out there. Adding Home -Assistant to this mix means Home Assistant can connect with all via IFTTT.

    - -

    It is now possible to disable your irregation system if it is going to be cloudy tomorrow or tweet -if your smoke alarm goes off.

    - -

    - -

    +

    +Inspried by a feature requests I started looking into the available options to do monitoring of remote hosts. The feature request is about displaying system information in a similar way than the systemmonitor sensor does it for the local system. After a while I started to think that it would be a nice addition for a small home network where no full-blown system monitoring setup is present.

    -

    Head over to the setup instructions to get started with IFTTT. Click the -read more button for some example recipes.

    - - - Read on → + Read on →
    diff --git a/components/arduino.html b/components/arduino.html index ba445414f0..8924cd1d63 100644 --- a/components/arduino.html +++ b/components/arduino.html @@ -146,94 +146,14 @@ A word of caution: The Arduino boards are not storing states. This means that wi

    -

    Switch Configuration

    - -

    Support for switching pins is limited to high/on and low/off of the digital pins. PWM (pin 3,5,6,9,10, and 11 on a Arduino Uno) is not supported yet.

    - -

    To enable the Arduino switch pins with Home Assistant, add the following section to your configuration.yaml file:

    - -
    1
    -2
    -3
    -4
    -5
    -6
    -7
    -8
    -9
    -10
    -
    # Example configuration.yaml entry
    -switch:
    -  platform: arduino
    -  pins:
    -    11:
    -      name: Fan Office
    -      type: digital
    -    12:
    -      name: Light Desk
    -      type: digital
    -
    - - -

    Configuration variables:

    +

    Building on top of the Arduino component

      -
    • pins array (Required): Pins to use. - -
        -
      • name: Name that will be used in the frontend for the pin.
      • -
      • type: The type of the pin. At the moment only ‘digital’ is supported.
      • -
      -
    • +
    • Arduino Sensor
    • +
    • Arduino Switch
    -

    The digital pins are numbered from 0 to 13. The available pins are 2 till 13. For testing purposes you can use pin 13 because with that pin you can control the internal LED.

    - -

    Sensor Configuration

    - -

    The sensor platform allow you to get an numerical values from an analog input pin. Usually between 0 and 1024.

    - -

    To enable an Arduino sensor with Home Assistant, add the following section to your configuration.yaml file:

    - -
    1
    -2
    -3
    -4
    -5
    -6
    -7
    -8
    -9
    -10
    -
    # Example configuration.yaml entry
    -sensor:
    -  platform: arduino
    -  pins:
    -    1:
    -      name: Door switch
    -      type: analog
    -    0:
    -      name: Brightness
    -      type: analog
    -
    - - -

    Configuration variables:

    - -
      -
    • pins array (Required): Pins to use. - -
        -
      • name: Name that will be used in the frontend for the pin.
      • -
      • type: The type of the pin. At the moment only ‘analog’ is supported.
      • -
      -
    • -
    - - -

    The 6 analog pins are numbered from A0 to A5.

    - diff --git a/components/camera.foscam.html b/components/camera.foscam.html new file mode 100644 index 0000000000..a711b34bcd --- /dev/null +++ b/components/camera.foscam.html @@ -0,0 +1,185 @@ + + + + + + + + + + + + Foscam IP camera support - Home Assistant + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    + +
    + + +
    + + +
    +

    + Foscam IP Camera Support +

    +
    +
    + + +

    +The foscam platform allows you to watch the live stream of your Foscam IP camera in Home Assistant.

    + +

    To enable your Foscam IP camera in your installation, add the following to your configuration.yaml file:

    + +
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +
    # Example configuration.yaml entry
    +camera:
    +  platform: foscam
    +  ip: 192.168.0.123
    +  name: Door Camera
    +  port: 88
    +  username: USERNAME
    +  password: PASSWORD
    +
    + + +

    Configuration variables:

    + +
      +
    • ip Required: The IP address your camera.
    • +
    • port Optional: The port that the camera is running on. The default is 88.
    • +
    • name Optional: This parameter allows you to override the name of your camera.
    • +
    • username Required: The username for accessing your camera.
    • +
    • password Required: The password for accessing your camera.
    • +
    + + + +
    + + +
    + + +
    +
    + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/components/device_tracker.html b/components/device_tracker.html index a60ed4e68a..25a8a2f4bc 100644 --- a/components/device_tracker.html +++ b/components/device_tracker.html @@ -129,16 +129,20 @@ 4 5 6 +7
    # Example configuration.yaml entry for Netgear device
     device_tracker:
       platform: netgear
       host: 192.168.1.1
       username: admin
       password: YOUR_PASSWORD
    +  track_new_devices: yes
     
    -

    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.

    +

    By default, the device tracker will add all found devices into the known_devices.yaml. It will default to displaying them in the UI as well. To disable displaying new devices in the UI, change the value of track_new_devices: to no.

    + +

    Once tracking, the device_tracker component will maintain a file in your config dir called known_devices.yaml. 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 and set whether the device will be show in the UI when in away state..

    diff --git a/components/device_tracker.luci.html b/components/device_tracker.luci.html index 3c4ad0d887..030fab17c2 100644 --- a/components/device_tracker.luci.html +++ b/components/device_tracker.luci.html @@ -126,7 +126,7 @@ Before this scanner can be used you have to install the luci RPC package on Open diff --git a/components/device_tracker.mqtt.html b/components/device_tracker.mqtt.html new file mode 100644 index 0000000000..f1cb69dc8d --- /dev/null +++ b/components/device_tracker.mqtt.html @@ -0,0 +1,185 @@ + + + + + + + + + + + + MQTT device tracker support - Home Assistant + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    + +
    + + +
    + + +
    +

    + MQTT Device Tracker Support +

    +
    +
    + + +

    +Before this tracker allows the detection of devices which are able to send MQTT messages.

    + +
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +
    # Example configuration.yaml entry
    +device_tracker:
    +  platform: mqtt
    +  qos: 1
    +  devices:
    +    paulus_oneplus: /location/paulus
    +    annetherese_n4: /location/annetherese
    +
    + + +

    Configuration variables:

    + +
      +
    • qos (Required): Quality of service, default to 0.
    • +
    • devices (Required): Array of devices to track. + +
        +
      • ‘device_name’ (Required): Name to use followed by the topic.
      • +
      +
    • +
    + + +

    See the device tracker component page for instructions how to configure the people to be tracked.

    + + +
    + + +
    + + +
    +
    + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/components/index.html b/components/index.html index 950fbb8e87..20e91f497e 100644 --- a/components/index.html +++ b/components/index.html @@ -219,7 +219,7 @@ - aREST sensors monitors values from aREST enabled devices and switch toggles those pin. + aREST sensors observe and switches controls the pins of aREST enabled devices. @@ -270,6 +270,11 @@ OpenWRT routers + + + MQTT devices + + Netgear routers @@ -368,6 +373,10 @@ IP camera integrates a generic IP camera or image url. + + Foscam let you see your live stream. + + SABnzbd clients monitors queue and download speeds. @@ -387,7 +396,12 @@ - Command line issues command line commands. + Command line switches and sensors issues command line commands to do or the get something. + + + + + Glances tracks system information on remote hosts. diff --git a/components/media_player.itunes.html b/components/media_player.itunes.html index 39e23d8bad..151796e851 100644 --- a/components/media_player.itunes.html +++ b/components/media_player.itunes.html @@ -109,9 +109,12 @@ itunes-api from Home Assistant. Play, pause, or skip songs remotely on iTunes running on your Mac.

    +

    Your AirPlay speakers will also be exposed as simple media players inside Home + Assistant. They will be available to be turned on or off or set their volume.

    +

    iTunes itself can not be remotely controlled. In order to control your iTunes, -you’ll need to install middleware named `itunes-api`. `itunes-api` is a simple REST +you’ll need to install middleware named itunes-api. itunes-api is a simple REST server that talks to a local instance of iTunes via Applescript. It’s very easy to set up and run. You can find more about it on it’s [GitHub repo](https://github.com/maddox/itunes-api).

    diff --git a/components/scene.html b/components/scene.html index a451c133f6..6ff4de9be6 100644 --- a/components/scene.html +++ b/components/scene.html @@ -115,6 +115,16 @@ 7 8 9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19
    # Example configuration.yaml entry
     scene:
       - name: Romantic
    @@ -124,6 +134,16 @@
             state: on
             color: [0.33, 0.66]
             brightness: 200
    +
    + - name: all_lights_on
    +   entities:
    +      group.all_lights:
    +        state: on
    +
    + - name: all_lights_off
    +   entities:
    +      group.all_lights:
    +        state: off
     
    diff --git a/components/sensor.arduino.html b/components/sensor.arduino.html new file mode 100644 index 0000000000..53bd620b8a --- /dev/null +++ b/components/sensor.arduino.html @@ -0,0 +1,193 @@ + + + + + + + + + + + + Arduino sensor support - Home Assistant + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    + +
    + + +
    + + +
    +

    + Arduino Sensor Support +

    +
    +
    + + +

    +The arduino sensor platform allows allow you to get an numerical values from an analog input pin of an Arduino board. Usually the value is between 0 and 1024.

    + +

    To enable an Arduino sensor with Home Assistant, add the following section to your configuration.yaml file:

    + +
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +
    # Example configuration.yaml entry
    +sensor:
    +  platform: arduino
    +  pins:
    +    1:
    +      name: Door switch
    +      type: analog
    +    0:
    +      name: Brightness
    +      type: analog
    +
    + + +

    Configuration variables:

    + +
      +
    • pins (Required): Array of pins to use. The number corresponds with the pin numbering schema of your board. + +
        +
      • name: Name that will be used in the frontend for the pin.
      • +
      • type: The type of the pin. At the moment only ‘analog’ is supported.
      • +
      +
    • +
    + + +

    The 6 analog pins of an Arduino UNO are numbered from A0 to A5.

    + + +
    + + +
    + + +
    +
    + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/components/sensor.command_sensor.html b/components/sensor.command_sensor.html new file mode 100644 index 0000000000..c23d752b8c --- /dev/null +++ b/components/sensor.command_sensor.html @@ -0,0 +1,279 @@ + + + + + + + + + + + + Command line sensors support - Home Assistant + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    + +
    + + +
    + + +
    +

    + Command Line Sensors Support +

    +
    +
    + + +

    +A sensor platform that issues specific commands git get data. This might very well become our most platform as it allows anyone to integrate any type of switch into Home Assistant that can be controlled from the command line, including calling other scripts!

    + +

    To enable it, add the following lines to your configuration.yaml:

    + +
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +
    # Example configuration.yaml entry
    +sensor:
    +  platform: command_sensor
    +  command: SENSOR_COMMAND
    +  name: "Command sensor"
    +  unit_of_measurement: "°C"
    +  correction_factor: 0.4921
    +
    + + +

    Configuration variables:

    + +
      +
    • command (Required): The action to take to get the value.
    • +
    • name (Optional): Name of the command sensor.
    • +
    • unit_of_measurement (Optional): Defines the units of measurement of the sensor, if any.
    • +
    • correction_factor (Optional): A float value to do some basic calculations.
    • +
    + + +

    Examples

    + +

    In this section you find some real life examples of how to use this sensor.

    + +

    Hard drive temperature

    + +

    There are several days to get the temperature of your hard drive. A simple solution is to use hddtemp.

    + +
    1
    +
    hddtemp -n /dev/sda
    +
    + + +

    To use those information, the entry for a sensor in the configuration.yaml file will look like this.

    + +
    1
    +2
    +3
    +4
    +5
    +6
    +
    # Example configuration.yaml entry
    +sensor:
    +  platform: command_sensor
    +  name: HD Temperature
    +  command: "hddtemp -n /dev/sda"
    +  unit_of_measurement: "°C"
    +
    + + +

    CPU temperature

    + +

    Thanks to the proc file system various details about a system can be retrieved. Here the CPU temperature +is of interest. Add something similar to your configuration.yaml file:

    + +
    1
    +2
    +3
    +4
    +5
    +6
    +
    # Example configuration.yaml entry
    +  - platform: command_sensor
    +    name: CPU Temperature
    +    command: "cat /sys/class/thermal/thermal_zone0/temp"
    +    unit_of_measurement: "°C"
    +    correction_factor: 0.001
    +
    + + +

    The correction_factor will make sure that the value is shown in a useful format in the frontend.

    + +

    Use an external script

    + +

    The example is doing the same as the aREST sensor but with an external Python script. It should give you an idea about interacting with devices which are exposing a REST API.

    + +

    The one-line script to retrieve a value is shown below. Of course would it be possible to use this directly in the configuration.yaml file but need extra care about the quotation marks.

    + +
    1
    +
    python3 -c "import requests; print(requests.get('http://10.0.0.48/analog/2').json()['return_value'])"
    +
    + + +

    The script (saved as arest-value.py) that is used looks like the example below.

    + +
    1
    +2
    +3
    +4
    +5
    +
    #!/usr/bin/python3
    +#
    +from requests import get
    +response = get('http://10.0.0.48/analog/2')
    +print(response.json()['return_value'])
    +
    + + +

    To use the script you need to add something like the following to your configuration.yaml file.

    + +
    1
    +2
    +3
    +4
    +5
    +6
    +
    # Example configuration.yaml entry
    +sensor:
    +  platform: command_sensor
    +  name: Brightness
    +  command: "python3 /path/to/script/arest-value.py"
    +  unit_of_measurement: "°C"
    +
    + + + + + +
    + + +
    + + +
    +
    + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/components/sensor.glances.html b/components/sensor.glances.html new file mode 100644 index 0000000000..d69248db9a --- /dev/null +++ b/components/sensor.glances.html @@ -0,0 +1,237 @@ + + + + + + + + + + + + Glances sensor support - Home Assistant + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    + +
    + + +
    + + +
    +

    + Glances Sensor Support +

    +
    +
    + + +

    +The glances sensor platform is consuming the system information provided by the Glances API. This enables one to track remote host and display their stats in Home Assistant.

    + +

    This sensors needs a running isntance of glances on the host:

    + +
    1
    +2
    +
    glances -w
    +Glances web server started on http://0.0.0.0:61208/
    +
    + + +

    To enable the glances sensor, add the following lines to your configuration.yaml:

    + +
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    +21
    +
    # Example configuration.yaml entry
    +sensor:
    +  platform: glances
    +  name: Glances sensor
    +  host: IP_ADDRESS
    +  port: 61208
    +  resources:
    +    - 'disk_use_percent'
    +    - 'disk_use'
    +    - 'disk_free'
    +    - 'memory_use_percent'
    +    - 'memory_use'
    +    - 'memory_free'
    +    - 'swap_use_percent'
    +    - 'swap_use'
    +    - 'swap_free'
    +    - 'processor_load'
    +    - 'process_running'
    +    - 'process_total'
    +    - 'process_thread'
    +    - 'process_sleeping'
    +
    + + +

    Configuration variables:

    + +
      +
    • host (Required): The IP address of your host, eg. 192.168.1.32.
    • +
    • port (Option): The network port to connect to. Default is 61208.
    • +
    • name (Optional): Name of the Glances sensor.
    • +
    • resources (Required): Entries to monitor. + +
        +
      • ‘disk_use_percent’: Used disk space in percent
      • +
      • ‘disk_use’: Used disk space
      • +
      • ‘disk_free’: Free disk space
      • +
      • ‘memory_use_percent’: Used memory in percent
      • +
      • ‘memory_use’: Used memory
      • +
      • ‘memory_free’: Free memory
      • +
      • ‘swap_use_percent’: Used swap space in percent
      • +
      • ‘swap_use’: Used swap space
      • +
      • ‘swap_free’: Free swap space
      • +
      • ‘processor_load’: Load
      • +
      • ‘process_running’: Number of running processes
      • +
      • ‘process_total’: Total number of processes
      • +
      • ‘process_thread’: Number of threads
      • +
      • ‘process_sleeping’: Number of sleeping processes
      • +
      +
    • +
    + + + +
    + + +
    + + +
    +
    + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/components/switch.arduino.html b/components/switch.arduino.html new file mode 100644 index 0000000000..c8c6cd46ed --- /dev/null +++ b/components/switch.arduino.html @@ -0,0 +1,193 @@ + + + + + + + + + + + + Arduino switch support - Home Assistant + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    + +
    + + +
    + + +
    +

    + Arduino Switch Support +

    +
    +
    + + +

    +The arduino switch platform allows you to control the digital pins of your Arduino board. Support for switching pins is limited to high/on and low/off of the digital pins. PWM (pin 3,5,6,9,10, and 11 on an Arduino Uno) is not supported yet.

    + +

    To enable the Arduino pins with Home Assistant, add the following section to your configuration.yaml file:

    + +
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +
    # Example configuration.yaml entry
    +switch:
    +  platform: arduino
    +  pins:
    +    11:
    +      name: Fan Office
    +      type: digital
    +    12:
    +      name: Light Desk
    +      type: digital
    +
    + + +

    Configuration variables:

    + +
      +
    • pins (Required): Array of pins to use. The number corresponds with the pin numbering schema of your board. + +
        +
      • name: Name that will be used in the frontend for the pin.
      • +
      • type: The type of the pin. At the moment only ‘digital’ is supported.
      • +
      +
    • +
    + + +

    The digital pins are numbered from 0 to 13. The available pins are 2 till 13. For testing purposes you can use pin 13 because with that pin you can control the internal LED.

    + + +
    + + +
    + + +
    +
    + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/developers/credits.html b/developers/credits.html index 0756fd6712..1bc4b64fdb 100644 --- a/developers/credits.html +++ b/developers/credits.html @@ -133,24 +133,31 @@
  • Greg Dowling
  • Guillem Barba
  • Gustav Ahlberg
  • +
  • Heathbar
  • Issac Kelly
  • James Cole
  • Jeffrey Tang
  • +
  • Jeff Schroeder
  • John McLaughlin
  • John Williams
  • +
  • Jon Maddox
  • Joseph Piron
  • Julien Danjou
  • kixam
  • MakeMeASandwich
  • Markus Stenberg
  • Michael Arnauts
  • +
  • Michael Gilbert
  • +
  • Nolan Gilley
  • miniconfig
  • Per Sandström
  • Piratonym
  • Rev Michael Greb
  • +
  • rhooper
  • rkabadi
  • Ryan Kraus
  • sfam
  • +
  • Stefan Jonasson
  • Theodor Lindquist
  • vitorespindola
  • wind-rider
  • diff --git a/developers/python_api.html b/developers/python_api.html index 356888db28..b2c92c6e75 100644 --- a/developers/python_api.html +++ b/developers/python_api.html @@ -106,7 +106,9 @@

    In the package homeassistant.remote a Python API on top of the HTTP API can be found.

    -

    The two snippets below shows how to use the homeassistant.remote package:

    +

    This page is not a full documentation it’s more a collection of some example. A simple way to get all current entities is to visit the “Set State” page in the “Developer Tools”. For the examples below just choose one from the available entries. Here the sensor sensor.office_temperature and the switch switch.livingroom_pin_2 are used.

    + +

    First import the module and setup the basics.

    1
     2
    @@ -114,12 +116,12 @@
     4
     
    import homeassistant.remote as remote
     
    -api = remote.API("host", "password")
    -living_room = remote.get_state(api, 'group.living_room')
    +api = remote.API('host', 'password')
    +print(remote.validate_api(api))
     
    - +

    This snippets shows how to use the homeassistant.remote package in another way.

    1
     2
    @@ -129,14 +131,167 @@
     6
     
    import homeassistant.remote as remote
     
    -api = remote.API("host", "password")
    +api = remote.API('host', 'password')
     hass = remote.HomeAssistant(api)
     hass.start()
     living_room = hass.states.get('group.living_room')
     
    +

    Get details about servies and events

    +

    Similar to the output in the “Developer Tools” of the frontend

    + +
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +13
    +
    import homeassistant.remote as remote
    +
    +api = remote.API('host', 'password')
    +
    +print('-- Available services:')
    +services = remote.get_services(api)
    +for service in services:
    +    print(service['services'])
    +
    +print('\n-- Available event')
    +events = remote.get_event_listeners(api)
    +for event in events:
    +    print(event)
    +
    + + +

    Get the state of an entity

    + +

    To get the details of a single entity the get_state method is used.

    + +
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +
    import homeassistant.remote as remote
    +
    +api = remote.API('host', 'password')
    +office_temperature = remote.get_state(api, 'sensor.office_temperature')
    +print('{} is {} {}.'.format(office_temperature.attributes['friendly_name'],
    +                            office_temperature.state,
    +                            office_temperature.attributes['unit_of_measurement']
    +                            )
    +      )
    +
    + + +

    The output is composed out of the details which are stored for this entity.

    + +
    1
    +
    Office Temperature is 19 °C.
    +
    + + +

    The exact same thing is working for a switch. The difference is that both entities have different attributes.

    + +
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +
    import homeassistant.remote as remote
    +
    +api = remote.API('host', 'password')
    +switch_livingroom = remote.get_state(api, 'switch.livingroom_pin_2')
    +print('{} is {}.'.format(switch_livingroom.attributes['friendly_name'],
    +                         switch_livingroom.state
    +                         )
    +      )
    +
    + + +

    Set the state of an entity

    + +

    Of course, it’s possible to set the state.

    + +
    1
    +2
    +3
    +4
    +5
    +
    import homeassistant.remote as remote
    +from homeassistant.const import STATE_ON
    +
    +remote.set_state(api, 'sensor.office_temperature', new_state=123)
    +remote.set_state(api, 'switch.livingroom_pin_2', new_state=STATE_ON)
    +
    + + +

    The state will be set to those value until the next update occurs.

    + +

    Blinking all entites of a domain

    + +

    If you want to turn on all entities of a domain, just a service which was retrieved by get_services.

    + +
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +
    import time
    +import homeassistant.remote as remote
    +
    +domain = 'switch'
    +
    +remote.call_service(api, domain, 'turn_on')
    +time.sleep(10)
    +remote.call_service(api, domain, 'turn_off')
    +
    + + +

    Control a single entity

    + +

    To turn on or off a single switch, the ID of the entity is needed as attribute.

    + +
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +
    import time
    +import homeassistant.remote as remote
    +
    +domain = 'switch'
    +switch_name = 'switch.livingroom_pin_2'
    +
    +remote.call_service(api, domain, 'turn_on', {'entity_id': '{}'.format(switch_name)})
    +time.sleep(5)
    +remote.call_service(api, domain, 'turn_off', {'entity_id': '{}'.format(switch_name)})
    +
    + + +

    For more details please check the source of homeassistant.remote.

    diff --git a/developers/rest_api.html b/developers/rest_api.html index d4d189e412..82d59bf78a 100644 --- a/developers/rest_api.html +++ b/developers/rest_api.html @@ -107,7 +107,7 @@

    Home Assistant runs a web server accessible on port 8123.

    @@ -121,7 +121,7 @@ 3
    curl -X GET \
         -H "x-ha-access: YOUR_PASSWORD" \
    -    http://localhost:8123/api
    +    http://localhost:8123/api/
     
    diff --git a/getting-started/advanced.html b/getting-started/advanced.html index 8f8721e98a..4de01c9960 100644 --- a/getting-started/advanced.html +++ b/getting-started/advanced.html @@ -109,8 +109,10 @@

    + -

    + +

    Many linux distributions use the Upstart system (or similar) for managing daemons. Typically, systems based on Debian 7 or previous use Upstart. This includes Ubuntu releases before 15.04 and all current Raspian releases. If you are unsure if your system is using Upstart, you may check with the following command:

    @@ -209,6 +211,34 @@ Newer linux distributions are trending towards using systemd for managing daemon

    +

    +Setting up Home Assistant to run as a background service is simple. OS X will +start it on boot and make sure it’s always running.

    + +

    To get Home Assistant installed as a background service, run:

    + +

    1
    +2
    +3
    +
    $ hass –install-osx
    +
    +Home Assistant has been installed.         Open it here: http://localhost:8123
    +

    + +

    Home Assistant will log to ~/Library/Logs/homeassistant.log

    + +

    To uninstall the service, run:

    + +

    1
    +2
    +3
    +
    $ hass –uninstall-osx
    +
    +Home Assistant has been uninstalled.
    +

    + +

    +

    « Back to Getting Started

    diff --git a/images/blog/2015-09-glances/sensors.png b/images/blog/2015-09-glances/sensors.png new file mode 100644 index 0000000000..bd51461e57 Binary files /dev/null and b/images/blog/2015-09-glances/sensors.png differ diff --git a/images/blog/2015-09-glances/web-glances.png b/images/blog/2015-09-glances/web-glances.png new file mode 100644 index 0000000000..b5999dfd10 Binary files /dev/null and b/images/blog/2015-09-glances/web-glances.png differ diff --git a/images/blog/2015-09-ifttt/og_facebook.png b/images/blog/2015-09-ifttt/og_facebook.png deleted file mode 100644 index 18ab31a495..0000000000 Binary files a/images/blog/2015-09-ifttt/og_facebook.png and /dev/null differ diff --git a/images/blog/2015-09-ifttt/recipe-do.png b/images/blog/2015-09-ifttt/recipe-do.png deleted file mode 100644 index d678d5324c..0000000000 Binary files a/images/blog/2015-09-ifttt/recipe-do.png and /dev/null differ diff --git a/images/blog/2015-09-ifttt/recipe-geo.png b/images/blog/2015-09-ifttt/recipe-geo.png deleted file mode 100644 index 2d8359d06d..0000000000 Binary files a/images/blog/2015-09-ifttt/recipe-geo.png and /dev/null differ diff --git a/images/blog/2015-09-ifttt/recipe-github.png b/images/blog/2015-09-ifttt/recipe-github.png deleted file mode 100644 index 3029228bde..0000000000 Binary files a/images/blog/2015-09-ifttt/recipe-github.png and /dev/null differ diff --git a/images/blog/2015-09-ifttt/recipe-twitter.png b/images/blog/2015-09-ifttt/recipe-twitter.png deleted file mode 100644 index 74f40fbcee..0000000000 Binary files a/images/blog/2015-09-ifttt/recipe-twitter.png and /dev/null differ diff --git a/images/blog/2015-09-ifttt/recipe-weather.png b/images/blog/2015-09-ifttt/recipe-weather.png deleted file mode 100644 index 149f5d5951..0000000000 Binary files a/images/blog/2015-09-ifttt/recipe-weather.png and /dev/null differ diff --git a/images/blog/2015-09-ifttt/splash.png b/images/blog/2015-09-ifttt/splash.png deleted file mode 100644 index ab82760d5e..0000000000 Binary files a/images/blog/2015-09-ifttt/splash.png and /dev/null differ diff --git a/images/supported_brands/foscam.png b/images/supported_brands/foscam.png new file mode 100644 index 0000000000..af91c29cba Binary files /dev/null and b/images/supported_brands/foscam.png differ diff --git a/images/supported_brands/glances.png b/images/supported_brands/glances.png new file mode 100644 index 0000000000..1108619b31 Binary files /dev/null and b/images/supported_brands/glances.png differ diff --git a/sitemap.xml b/sitemap.xml index faa0083266..a248218783 100644 --- a/sitemap.xml +++ b/sitemap.xml @@ -1,8 +1,8 @@ - https://home-assistant.io/blog/2015/09/13/home-assistant-meets-ifttt/ - 2015-09-13T09:28:00-07:00 + https://home-assistant.io/blog/2015/09/18/monitoring-with-glances-and-home-assistant/ + 2015-09-18T02:00:00-07:00 0.8 @@ -117,649 +117,685 @@ https://home-assistant.io/developers/add_new_platform.html - 2015-09-13T10:51:21-07:00 + 2015-09-17T23:41:36-07:00 weekly 0.7 https://home-assistant.io/getting-started/advanced.html - 2015-09-13T10:51:21-07:00 + 2015-09-17T23:41:36-07:00 weekly 0.7 https://home-assistant.io/getting-started/android.html - 2015-09-13T10:51:21-07:00 + 2015-09-17T23:41:36-07:00 weekly 0.7 https://home-assistant.io/developers/api.html - 2015-09-13T10:51:21-07:00 + 2015-09-17T23:41:36-07:00 weekly 0.7 https://home-assistant.io/developers/architecture.html - 2015-09-13T10:51:21-07:00 + 2015-09-17T23:41:36-07:00 weekly 0.7 https://home-assistant.io/components/arduino.html - 2015-09-13T10:51:21-07:00 + 2015-09-17T23:41:36-07:00 weekly 0.7 https://home-assistant.io/components/automation.html - 2015-09-13T10:51:21-07:00 + 2015-09-17T23:41:36-07:00 weekly 0.7 https://home-assistant.io/components/browser.html - 2015-09-13T10:51:21-07:00 + 2015-09-17T23:41:36-07:00 + weekly + 0.7 + + + https://home-assistant.io/components/camera.foscam.html + 2015-09-17T23:41:36-07:00 weekly 0.7 https://home-assistant.io/components/camera.generic.html - 2015-09-13T10:51:21-07:00 + 2015-09-17T23:41:36-07:00 weekly 0.7 https://home-assistant.io/getting-started/configuration.html - 2015-09-13T10:51:21-07:00 + 2015-09-17T23:41:36-07:00 weekly 0.7 https://home-assistant.io/components/configurator.html - 2015-09-13T10:51:21-07:00 + 2015-09-17T23:41:36-07:00 weekly 0.7 https://home-assistant.io/components/conversation.html - 2015-09-13T10:51:21-07:00 + 2015-09-17T23:41:36-07:00 weekly 0.7 https://home-assistant.io/developers/creating_components.html - 2015-09-13T10:51:21-07:00 + 2015-09-17T23:41:36-07:00 weekly 0.7 https://home-assistant.io/developers/credits.html - 2015-09-13T10:51:21-07:00 + 2015-09-17T23:41:36-07:00 weekly 0.7 https://home-assistant.io/components/device_sun_light_trigger.html - 2015-09-13T10:51:21-07:00 + 2015-09-17T23:41:36-07:00 weekly 0.7 https://home-assistant.io/components/device_tracker.actiontec.html - 2015-09-13T10:51:21-07:00 + 2015-09-17T23:41:36-07:00 weekly 0.7 https://home-assistant.io/components/device_tracker.aruba.html - 2015-09-13T10:51:21-07:00 + 2015-09-17T23:41:36-07:00 weekly 0.7 https://home-assistant.io/components/device_tracker.asuswrt.html - 2015-09-13T10:51:21-07:00 + 2015-09-17T23:41:36-07:00 weekly 0.7 https://home-assistant.io/components/device_tracker.ddwrt.html - 2015-09-13T10:51:21-07:00 + 2015-09-17T23:41:36-07:00 weekly 0.7 https://home-assistant.io/components/device_tracker.luci.html - 2015-09-13T10:51:21-07:00 + 2015-09-17T23:41:36-07:00 weekly 0.7 https://home-assistant.io/components/device_tracker.html - 2015-09-13T10:51:21-07:00 + 2015-09-17T23:41:36-07:00 + weekly + 0.7 + + + https://home-assistant.io/components/device_tracker.mqtt.html + 2015-09-17T23:41:36-07:00 weekly 0.7 https://home-assistant.io/components/device_tracker.netgear.html - 2015-09-13T10:51:21-07:00 + 2015-09-17T23:41:36-07:00 weekly 0.7 https://home-assistant.io/components/device_tracker.nmap_scanner.html - 2015-09-13T10:51:21-07:00 + 2015-09-17T23:41:36-07:00 weekly 0.7 https://home-assistant.io/components/device_tracker.thomson.html - 2015-09-13T10:51:21-07:00 + 2015-09-17T23:41:36-07:00 weekly 0.7 https://home-assistant.io/components/device_tracker.tomato.html - 2015-09-13T10:51:21-07:00 + 2015-09-17T23:41:36-07:00 weekly 0.7 https://home-assistant.io/components/device_tracker.tplink.html - 2015-09-13T10:51:21-07:00 + 2015-09-17T23:41:36-07:00 weekly 0.7 https://home-assistant.io/components/discovery.html - 2015-09-13T10:51:21-07:00 + 2015-09-17T23:41:36-07:00 weekly 0.7 https://home-assistant.io/components/downloader.html - 2015-09-13T10:51:21-07:00 + 2015-09-17T23:41:36-07:00 weekly 0.7 https://home-assistant.io/developers/frontend.html - 2015-09-13T10:51:21-07:00 + 2015-09-17T23:41:36-07:00 weekly 0.7 https://home-assistant.io/components/group.html - 2015-09-13T10:51:21-07:00 + 2015-09-17T23:41:36-07:00 weekly 0.7 https://home-assistant.io/components/history.html - 2015-09-13T10:51:21-07:00 + 2015-09-17T23:41:36-07:00 weekly 0.7 https://home-assistant.io/components/ifttt.html - 2015-09-13T10:51:21-07:00 + 2015-09-17T23:41:36-07:00 + weekly + 0.7 + + + https://home-assistant.io/blog/ + 2015-09-17T23:41:36-07:00 weekly 0.7 https://home-assistant.io/blog/archives/ - 2015-09-13T10:51:21-07:00 + 2015-09-17T23:41:36-07:00 weekly 0.7 https://home-assistant.io/ - 2015-09-13T10:51:21-07:00 + 2015-09-17T23:41:36-07:00 weekly 1.0 - - https://home-assistant.io/blog/ - 2015-09-13T10:51:21-07:00 - weekly - 0.7 - https://home-assistant.io/developers/ - 2015-09-13T10:51:21-07:00 + 2015-09-17T23:41:36-07:00 weekly 0.7 https://home-assistant.io/components/ - 2015-09-13T10:51:21-07:00 - weekly - 0.7 - - - https://home-assistant.io/getting-started/ - 2015-09-13T10:51:21-07:00 + 2015-09-17T23:41:36-07:00 weekly 0.7 https://home-assistant.io/help/ - 2015-09-13T10:51:21-07:00 + 2015-09-17T23:41:36-07:00 + weekly + 0.7 + + + https://home-assistant.io/getting-started/ + 2015-09-17T23:41:36-07:00 weekly 0.7 https://home-assistant.io/components/isy994.html - 2015-09-13T10:51:21-07:00 + 2015-09-17T23:41:36-07:00 weekly 0.7 https://home-assistant.io/components/keyboard.html - 2015-09-13T10:51:21-07:00 + 2015-09-17T23:41:36-07:00 weekly 0.7 https://home-assistant.io/components/light.hue.html - 2015-09-13T10:51:21-07:00 + 2015-09-17T23:41:36-07:00 weekly 0.7 https://home-assistant.io/components/light.limitlessled.html - 2015-09-13T10:51:21-07:00 + 2015-09-17T23:41:36-07:00 weekly 0.7 https://home-assistant.io/components/light.html - 2015-09-13T10:51:21-07:00 + 2015-09-17T23:41:36-07:00 weekly 0.7 https://home-assistant.io/components/logbook.html - 2015-09-13T10:51:21-07:00 + 2015-09-17T23:41:36-07:00 weekly 0.7 https://home-assistant.io/components/media_player.cast.html - 2015-09-13T10:51:21-07:00 + 2015-09-17T23:41:36-07:00 weekly 0.7 https://home-assistant.io/components/media_player.denon.html - 2015-09-13T10:51:21-07:00 + 2015-09-17T23:41:36-07:00 weekly 0.7 https://home-assistant.io/components/media_player.itunes.html - 2015-09-13T10:51:21-07:00 + 2015-09-17T23:41:36-07:00 weekly 0.7 https://home-assistant.io/components/media_player.kodi.html - 2015-09-13T10:51:21-07:00 + 2015-09-17T23:41:36-07:00 weekly 0.7 https://home-assistant.io/components/media_player.html - 2015-09-13T10:51:21-07:00 + 2015-09-17T23:41:36-07:00 weekly 0.7 https://home-assistant.io/components/media_player.mpd.html - 2015-09-13T10:51:21-07:00 + 2015-09-17T23:41:36-07:00 weekly 0.7 https://home-assistant.io/components/media_player.sonos.html - 2015-09-13T10:51:21-07:00 + 2015-09-17T23:41:36-07:00 weekly 0.7 https://home-assistant.io/components/media_player.squeezebox.html - 2015-09-13T10:51:21-07:00 + 2015-09-17T23:41:36-07:00 weekly 0.7 https://home-assistant.io/components/modbus.html - 2015-09-13T10:51:21-07:00 + 2015-09-17T23:41:36-07:00 weekly 0.7 https://home-assistant.io/components/mqtt.html - 2015-09-13T10:51:21-07:00 + 2015-09-17T23:41:36-07:00 weekly 0.7 https://home-assistant.io/components/notify.file.html - 2015-09-13T10:51:21-07:00 + 2015-09-17T23:41:36-07:00 weekly 0.7 https://home-assistant.io/components/notify.instapush.html - 2015-09-13T10:51:21-07:00 + 2015-09-17T23:41:36-07:00 weekly 0.7 https://home-assistant.io/components/notify.html - 2015-09-13T10:51:21-07:00 + 2015-09-17T23:41:36-07:00 weekly 0.7 https://home-assistant.io/components/notify.nma.html - 2015-09-13T10:51:21-07:00 + 2015-09-17T23:41:36-07:00 weekly 0.7 https://home-assistant.io/components/notify.pushbullet.html - 2015-09-13T10:51:21-07:00 + 2015-09-17T23:41:36-07:00 weekly 0.7 https://home-assistant.io/components/notify.pushover.html - 2015-09-13T10:51:21-07:00 + 2015-09-17T23:41:36-07:00 weekly 0.7 https://home-assistant.io/components/notify.slack.html - 2015-09-13T10:51:21-07:00 + 2015-09-17T23:41:36-07:00 weekly 0.7 https://home-assistant.io/components/notify.smtp.html - 2015-09-13T10:51:21-07:00 + 2015-09-17T23:41:36-07:00 weekly 0.7 https://home-assistant.io/components/notify.syslog.html - 2015-09-13T10:51:21-07:00 + 2015-09-17T23:41:36-07:00 weekly 0.7 https://home-assistant.io/components/notify.xmpp.html - 2015-09-13T10:51:21-07:00 + 2015-09-17T23:41:36-07:00 weekly 0.7 https://home-assistant.io/developers/python_api.html - 2015-09-13T10:51:21-07:00 + 2015-09-17T23:41:36-07:00 weekly 0.7 https://home-assistant.io/developers/rest_api.html - 2015-09-13T10:51:21-07:00 + 2015-09-17T23:41:36-07:00 weekly 0.7 https://home-assistant.io/components/scene.html - 2015-09-13T10:51:21-07:00 + 2015-09-17T23:41:36-07:00 weekly 0.7 https://home-assistant.io/components/scheduler.html - 2015-09-13T10:51:21-07:00 + 2015-09-17T23:41:36-07:00 weekly 0.7 https://home-assistant.io/components/script.html - 2015-09-13T10:51:21-07:00 + 2015-09-17T23:41:36-07:00 + weekly + 0.7 + + + https://home-assistant.io/components/sensor.arduino.html + 2015-09-17T23:41:36-07:00 weekly 0.7 https://home-assistant.io/components/sensor.arest.html - 2015-09-13T10:51:21-07:00 + 2015-09-17T23:41:36-07:00 weekly 0.7 https://home-assistant.io/components/sensor.bitcoin.html - 2015-09-13T10:51:21-07:00 + 2015-09-17T23:41:36-07:00 + weekly + 0.7 + + + https://home-assistant.io/components/sensor.command_sensor.html + 2015-09-17T23:41:36-07:00 weekly 0.7 https://home-assistant.io/components/sensor.dht.html - 2015-09-13T10:51:21-07:00 + 2015-09-17T23:41:36-07:00 weekly 0.7 https://home-assistant.io/components/sensor.efergy.html - 2015-09-13T10:51:21-07:00 + 2015-09-17T23:41:36-07:00 weekly 0.7 https://home-assistant.io/components/sensor.forecast.html - 2015-09-13T10:51:21-07:00 + 2015-09-17T23:41:36-07:00 + weekly + 0.7 + + + https://home-assistant.io/components/sensor.glances.html + 2015-09-17T23:41:36-07:00 weekly 0.7 https://home-assistant.io/components/sensor.mqtt.html - 2015-09-13T10:51:21-07:00 + 2015-09-17T23:41:36-07:00 weekly 0.7 https://home-assistant.io/components/sensor.mysensors.html - 2015-09-13T10:51:21-07:00 + 2015-09-17T23:41:36-07:00 weekly 0.7 https://home-assistant.io/components/sensor.openweathermap.html - 2015-09-13T10:51:21-07:00 + 2015-09-17T23:41:36-07:00 weekly 0.7 https://home-assistant.io/components/sensor.rfxtrx.html - 2015-09-13T10:51:21-07:00 + 2015-09-17T23:41:36-07:00 weekly 0.7 https://home-assistant.io/components/sensor.rpi_gpio.html - 2015-09-13T10:51:21-07:00 + 2015-09-17T23:41:36-07:00 weekly 0.7 https://home-assistant.io/components/sensor.sabnzbd.html - 2015-09-13T10:51:21-07:00 + 2015-09-17T23:41:36-07:00 weekly 0.7 https://home-assistant.io/components/sensor.swiss_public_transport.html - 2015-09-13T10:51:21-07:00 + 2015-09-17T23:41:36-07:00 weekly 0.7 https://home-assistant.io/components/sensor.systemmonitor.html - 2015-09-13T10:51:21-07:00 + 2015-09-17T23:41:36-07:00 weekly 0.7 https://home-assistant.io/components/sensor.temper.html - 2015-09-13T10:51:21-07:00 + 2015-09-17T23:41:36-07:00 weekly 0.7 https://home-assistant.io/components/sensor.time_date.html - 2015-09-13T10:51:21-07:00 + 2015-09-17T23:41:36-07:00 weekly 0.7 https://home-assistant.io/components/sensor.transmission.html - 2015-09-13T10:51:21-07:00 + 2015-09-17T23:41:36-07:00 weekly 0.7 https://home-assistant.io/components/simple_alarm.html - 2015-09-13T10:51:21-07:00 + 2015-09-17T23:41:36-07:00 weekly 0.7 https://home-assistant.io/components/sun.html - 2015-09-13T10:51:21-07:00 + 2015-09-17T23:41:36-07:00 + weekly + 0.7 + + + https://home-assistant.io/components/switch.arduino.html + 2015-09-17T23:41:36-07:00 weekly 0.7 https://home-assistant.io/components/switch.arest.html - 2015-09-13T10:51:21-07:00 + 2015-09-17T23:41:36-07:00 weekly 0.7 https://home-assistant.io/components/switch.command_switch.html - 2015-09-13T10:51:21-07:00 + 2015-09-17T23:41:36-07:00 weekly 0.7 https://home-assistant.io/components/switch.edimax.html - 2015-09-13T10:51:21-07:00 + 2015-09-17T23:41:36-07:00 weekly 0.7 https://home-assistant.io/components/switch.hikvision.html - 2015-09-13T10:51:21-07:00 + 2015-09-17T23:41:36-07:00 weekly 0.7 https://home-assistant.io/components/switch.html - 2015-09-13T10:51:21-07:00 + 2015-09-17T23:41:36-07:00 weekly 0.7 https://home-assistant.io/components/switch.mqtt.html - 2015-09-13T10:51:21-07:00 + 2015-09-17T23:41:36-07:00 weekly 0.7 https://home-assistant.io/components/switch.rpi_gpio.html - 2015-09-13T10:51:21-07:00 + 2015-09-17T23:41:36-07:00 weekly 0.7 https://home-assistant.io/components/switch.transmission.html - 2015-09-13T10:51:21-07:00 + 2015-09-17T23:41:36-07:00 weekly 0.7 https://home-assistant.io/components/switch.wemo.html - 2015-09-13T10:51:21-07:00 + 2015-09-17T23:41:36-07:00 weekly 0.7 https://home-assistant.io/components/tellstick.html - 2015-09-13T10:51:21-07:00 + 2015-09-17T23:41:36-07:00 weekly 0.7 https://home-assistant.io/components/thermostat.heat_control.html - 2015-09-13T10:51:21-07:00 + 2015-09-17T23:41:36-07:00 weekly 0.7 https://home-assistant.io/components/thermostat.html - 2015-09-13T10:51:21-07:00 + 2015-09-17T23:41:36-07:00 weekly 0.7 https://home-assistant.io/components/thermostat.nest.html - 2015-09-13T10:51:21-07:00 + 2015-09-17T23:41:36-07:00 weekly 0.7 https://home-assistant.io/getting-started/troubleshooting-configuration.html - 2015-09-13T10:51:21-07:00 + 2015-09-17T23:41:36-07:00 weekly 0.7 https://home-assistant.io/getting-started/troubleshooting.html - 2015-09-13T10:51:21-07:00 + 2015-09-17T23:41:36-07:00 weekly 0.7 https://home-assistant.io/components/vera.html - 2015-09-13T10:51:21-07:00 + 2015-09-17T23:41:36-07:00 weekly 0.7 https://home-assistant.io/components/verisure.html - 2015-09-13T10:51:21-07:00 + 2015-09-17T23:41:36-07:00 weekly 0.7 https://home-assistant.io/developers/website.html - 2015-09-13T10:51:21-07:00 + 2015-09-17T23:41:36-07:00 weekly 0.7 https://home-assistant.io/components/wink.html - 2015-09-13T10:51:21-07:00 + 2015-09-17T23:41:36-07:00 weekly 0.7 https://home-assistant.io/components/zwave.html - 2015-09-13T10:51:21-07:00 + 2015-09-17T23:41:36-07:00 weekly 0.7 diff --git a/stylesheets/screen.css b/stylesheets/screen.css index a316354c73..3efbc72a56 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;text-align:center}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}}.hero{background-color:#038FC7;padding-bottom:0}.hero .lead{margin-bottom:16px}.hero .hero-buttons a{color:white;text-transform:uppercase;white-space:nowrap;display:inline-block}.hero .front-install{background-color:#333;margin-bottom:16px;display:inline-block;padding:8px;color:#DDD}.hero .front-install .sh{color:#c82829}.supported-brands{text-align:center}.supported-brands img{border:none !important;box-shadow:none !important;max-height:50px;max-width:140px;margin:10px;vertical-align:middle}.brand{border:none !important;box-shadow:none !important;max-height:50px;max-width:200px;margin:10px}.brand.overview{max-width:100px}h1:hover a.title-link,h2:hover a.title-link,h3:hover a.title-link,h4:hover a.title-link,h5:hover a.title-link,h6:hover a.title-link{position:relative}h1:hover a.title-link::before,h2:hover a.title-link::before,h3:hover a.title-link::before,h4:hover a.title-link::before,h5:hover a.title-link::before,h6:hover a.title-link::before{position:absolute;left:-50px;padding-right:40px;font-family:"FontAwesome";content:"\f0c1"}.ha-title{white-space:nowrap}.ha-title img{width:40px;vertical-align:middle}.usp ul{text-align:left;margin-left:27px;margin-top:-18px}.usp .icon i{border:none !important}.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)}.install-instructions-container #normal-install,.install-instructions-container #raspberry-install,.install-instructions-container #docker-install,.install-instructions-container .install-instructions{display:none}.install-instructions-container label.menu-selector{display:inline-block;text-align:center;padding:20px;white-space:nowrap;border-bottom:5px solid #999;transition:border-bottom-color .5s}.install-instructions-container label.menu-selector+label.menu-selector{margin-left:10px}.install-instructions-container #normal-install:checked ~ .menu-selector.normal,.install-instructions-container #raspberry-install:checked ~ .menu-selector.raspberry,.install-instructions-container #docker-install:checked ~ .menu-selector.docker{border-bottom-color:#049cdb}.install-instructions-container #normal-install:checked ~ .install-instructions.normal,.install-instructions-container #raspberry-install:checked ~ .install-instructions.raspberry,.install-instructions-container #docker-install:checked ~ .install-instructions.docker{display:block}.install-instructions-container .install-instructions{margin-top:30px}.advanced-installs-container #upstart-install,.advanced-installs-container #systemd-install,.advanced-installs-container .advanced-installs{display:none}.advanced-installs-container label.menu-selector{display:inline-block;text-align:center;padding:20px;white-space:nowrap;border-bottom:5px solid #999;transition:border-bottom-color .5s}.advanced-installs-container label.menu-selector+label.menu-selector{margin-left:10px}.advanced-installs-container #upstart-install:checked ~ .menu-selector.upstart,.advanced-installs-container #systemd-install:checked ~ .menu-selector.systemd{border-bottom-color:#049cdb}.advanced-installs-container #upstart-install:checked ~ .advanced-installs.upstart,.advanced-installs-container #systemd-install:checked ~ .advanced-installs.systemd{display:block}.advanced-installs-container .advanced-installs{margin-top:30px} + */@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;text-align:center}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}}.hero{background-color:#038FC7;padding-bottom:0}.hero .lead{margin-bottom:16px}.hero .hero-buttons a{color:white;text-transform:uppercase;white-space:nowrap;display:inline-block}.hero .front-install{background-color:#333;margin-bottom:16px;display:inline-block;padding:8px;color:#DDD}.hero .front-install .sh{color:#c82829}.supported-brands{text-align:center}.supported-brands img{border:none !important;box-shadow:none !important;max-height:50px;max-width:140px;margin:10px;vertical-align:middle}.brand{border:none !important;box-shadow:none !important;max-height:50px;max-width:200px;margin:10px}.brand.overview{max-width:100px}h1:hover a.title-link,h2:hover a.title-link,h3:hover a.title-link,h4:hover a.title-link,h5:hover a.title-link,h6:hover a.title-link{position:relative}h1:hover a.title-link::before,h2:hover a.title-link::before,h3:hover a.title-link::before,h4:hover a.title-link::before,h5:hover a.title-link::before,h6:hover a.title-link::before{position:absolute;left:-50px;padding-right:40px;font-family:"FontAwesome";content:"\f0c1"}.ha-title{white-space:nowrap}.ha-title img{width:40px;vertical-align:middle}.usp ul{text-align:left;margin-left:27px;margin-top:-18px}.usp .icon i{border:none !important}.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)}.install-instructions-container #normal-install,.install-instructions-container #raspberry-install,.install-instructions-container #docker-install,.install-instructions-container .install-instructions{display:none}.install-instructions-container label.menu-selector{display:inline-block;text-align:center;padding:20px;white-space:nowrap;border-bottom:5px solid #999;transition:border-bottom-color .5s}.install-instructions-container label.menu-selector+label.menu-selector{margin-left:10px}.install-instructions-container #normal-install:checked ~ .menu-selector.normal,.install-instructions-container #raspberry-install:checked ~ .menu-selector.raspberry,.install-instructions-container #docker-install:checked ~ .menu-selector.docker{border-bottom-color:#049cdb}.install-instructions-container #normal-install:checked ~ .install-instructions.normal,.install-instructions-container #raspberry-install:checked ~ .install-instructions.raspberry,.install-instructions-container #docker-install:checked ~ .install-instructions.docker{display:block}.install-instructions-container .install-instructions{margin-top:30px}.advanced-installs-container #upstart-install,.advanced-installs-container #systemd-install,.advanced-installs-container #osx-install,.advanced-installs-container .advanced-installs{display:none}.advanced-installs-container label.menu-selector{display:inline-block;text-align:center;padding:20px;white-space:nowrap;border-bottom:5px solid #999;transition:border-bottom-color .5s}.advanced-installs-container label.menu-selector+label.menu-selector{margin-left:10px}.advanced-installs-container #upstart-install:checked ~ .menu-selector.upstart,.advanced-installs-container #systemd-install:checked ~ .menu-selector.systemd,.advanced-installs-container #osx-install:checked ~ .menu-selector.osx{border-bottom-color:#049cdb}.advanced-installs-container #upstart-install:checked ~ .advanced-installs.upstart,.advanced-installs-container #systemd-install:checked ~ .advanced-installs.systemd,.advanced-installs-container #osx-install:checked ~ .advanced-installs.osx{display:block}.advanced-installs-container .advanced-installs{margin-top:30px}