diff --git a/.gitignore b/.gitignore
index ad8b51e..59074d3 100644
--- a/.gitignore
+++ b/.gitignore
@@ -9,4 +9,5 @@ lib/
module/
/examples/react-example1/src/contract.json
coverage/
-lerna-debug.log
\ No newline at end of file
+lerna-debug.log
+.DS_Store
\ No newline at end of file
diff --git a/packages/site/.editorconfig b/packages/site/.editorconfig
new file mode 100644
index 0000000..db87e1f
--- /dev/null
+++ b/packages/site/.editorconfig
@@ -0,0 +1,8 @@
+root = true
+
+[*]
+indent_style = space
+indent_size = 2
+charset = utf-8
+trim_trailing_whitespace = false
+insert_final_newline = false
\ No newline at end of file
diff --git a/packages/site/.eslintignore b/packages/site/.eslintignore
new file mode 100644
index 0000000..c7f911e
--- /dev/null
+++ b/packages/site/.eslintignore
@@ -0,0 +1,4 @@
+dist/
+lib/
+module/
+node_modules/
\ No newline at end of file
diff --git a/packages/site/.eslintrc b/packages/site/.eslintrc
new file mode 100644
index 0000000..70f33ba
--- /dev/null
+++ b/packages/site/.eslintrc
@@ -0,0 +1,45 @@
+{
+ "env": {
+ "node": true,
+ "browser": true,
+ "jest": true
+ },
+ "parser": "babel-eslint",
+ "plugins": ["standard", "babel"],
+ "extends": [
+ "eslint:recommended",
+ "plugin:import/errors",
+ "plugin:import/warnings",
+ ],
+ "parserOptions": {
+ "ecmaVersion": 2018,
+ "sourceType": "module",
+ "ecmaFeatures": {
+ "jsx": true
+ }
+ },
+ "rules": {
+ "arrow-parens": ["error", "as-needed"],
+ "standard/object-curly-even-spacing": [2, "never"],
+ "standard/array-bracket-even-spacing": [2, "either"],
+ "standard/computed-property-even-spacing": [2, "even"],
+ "standard/no-callback-literal": [2, ["cb", "callback"]],
+ "babel/new-cap": 1,
+ "babel/camelcase": 1,
+ "babel/no-invalid-this": 1,
+ "babel/object-curly-spacing": 0,
+ "babel/quotes": 1,
+ "babel/semi": 1,
+ "babel/no-unused-expressions": 1,
+ "babel/valid-typeof": 1,
+ "comma-dangle": "off",
+ "object-curly-newline": "off",
+ "quotes": "off",
+ "semi": "off",
+ "object-curly-spacing": "off",
+ "import/no-extraneous-dependencies": "off",
+ "max-len": ["error", { "code": 120} ],
+ "no-undef": "off"
+ },
+ "overrides": []
+}
diff --git a/packages/site/.gitignore b/packages/site/.gitignore
new file mode 100644
index 0000000..59074d3
--- /dev/null
+++ b/packages/site/.gitignore
@@ -0,0 +1,13 @@
+node_modules/
+.vscode/
+phoenix.db
+subspace.db
+TODO
+test.js
+dist/
+lib/
+module/
+/examples/react-example1/src/contract.json
+coverage/
+lerna-debug.log
+.DS_Store
\ No newline at end of file
diff --git a/packages/site/.prettierrc b/packages/site/.prettierrc
new file mode 100644
index 0000000..c93fcc3
--- /dev/null
+++ b/packages/site/.prettierrc
@@ -0,0 +1,12 @@
+{
+ "trailingComma": "none",
+ "tabWidth": 2,
+ "semi": true,
+ "singleQuote": false,
+ "useTabs": false,
+ "jsxSingleQuote": false,
+ "bracketSpacing": false,
+ "jsxBracketSameLine": false,
+ "arrowParens": "avoid",
+ "printWidth": 120
+}
\ No newline at end of file
diff --git a/packages/site/CNAME b/packages/site/CNAME
new file mode 100644
index 0000000..c212bfc
--- /dev/null
+++ b/packages/site/CNAME
@@ -0,0 +1 @@
+subspace.status.im
diff --git a/packages/site/LICENSE b/packages/site/LICENSE
new file mode 100644
index 0000000..feec255
--- /dev/null
+++ b/packages/site/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2019 Status
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/packages/site/README.md b/packages/site/README.md
new file mode 100644
index 0000000..ef83ff4
--- /dev/null
+++ b/packages/site/README.md
@@ -0,0 +1,29 @@
+![Subspace](https://raw.githubusercontent.com/status-im/subspace/master/logo.png?token=AABLEUFLVJ24SL7R6JIRXVS5T2MFI)
+===
+
+## Overview
+Subspace is a framework agnostic JS library that embraces reactive programming with RxJS, by observing asynchronous changes in Smart Contracts, and providing methods to track and subscribe to events, changes to the state of contracts and address balances, and react to these changes and events via observables.
+
+Subspace also takes care of syncing under the hood, saving & loading the state in a local database.
+
+### Install
+Subspace can be used in browser, node and native script environments. You can install it through `npm` or `yarn`:
+```
+npm install --save @embarklabs/subspace web3 rxjs # RxJS and Web3.js are needed peer-dependencies
+```
+
+### Documentation
+https://subspace.embarklabs.io
+
+## Contribution
+Thank you for considering to help out with the source code! We welcome contributions from anyone on the internet, and are grateful for even the smallest of fixes!
+
+If you'd like to contribute to Subspace, please fork, fix, commit and send a pull request for the maintainers to review and merge into the main code base. If you wish to submit more complex changes though, please check up with the core devs first on #embark-status channel to ensure those changes are in line with the general philosophy of the project and/or get some early feedback which can make both your efforts much lighter as well as our review and merge procedures quick and simple.
+
+### To build:
+
+* `yarn`
+* `yarn bootstrap`
+
+## License
+MIT
diff --git a/packages/site/_config.yml b/packages/site/_config.yml
new file mode 100644
index 0000000..de91cca
--- /dev/null
+++ b/packages/site/_config.yml
@@ -0,0 +1,49 @@
+# Hexo Configuration
+## Docs: https://hexo.io/docs/configuration.html
+## Source: https://github.com/hexojs/hexo/
+
+# Site
+title: SUBSPACE
+description: Reactive ÐApp Development
+author: Status Research & Development GmbH
+
+language: [en, de]
+locale: en
+i18n:
+ type: [page, post]
+permalink_defaults:
+ lang: en
+i18n_dir: :lang
+
+source_dir: source/packages/docs
+
+# URL
+## If your site is put in a subdirectory, set url as 'http://yoursite.com/child' and root as '/child/'
+url: http://localhost:4000
+root: /
+permalink: :year/:month/:day/:title/
+post_asset_folder: true
+
+# Pagination
+## Set per_page to 0 to disable pagination
+per_page: 0
+
+# Extensions
+## Plugins: https://hexo.io/plugins/
+## Themes: https://hexo.io/themes/
+theme: subspace
+
+prism_plus:
+ enable: true
+
+highlight:
+ enable: false
+
+autoprefixer:
+ enable: true
+ browsers:
+ - 'last 2 versions'
+node_sass:
+ outputStyle: nested
+ precision: 5
+ sourceComments: false
\ No newline at end of file
diff --git a/packages/site/d1.png b/packages/site/d1.png
new file mode 100644
index 0000000..592cf75
Binary files /dev/null and b/packages/site/d1.png differ
diff --git a/packages/site/d2.png b/packages/site/d2.png
new file mode 100644
index 0000000..7062ff4
Binary files /dev/null and b/packages/site/d2.png differ
diff --git a/packages/site/d3.png b/packages/site/d3.png
new file mode 100644
index 0000000..ceba120
Binary files /dev/null and b/packages/site/d3.png differ
diff --git a/packages/site/d4.png b/packages/site/d4.png
new file mode 100644
index 0000000..2f02b54
Binary files /dev/null and b/packages/site/d4.png differ
diff --git a/packages/site/db.json b/packages/site/db.json
new file mode 100644
index 0000000..20e1e6d
--- /dev/null
+++ b/packages/site/db.json
@@ -0,0 +1 @@
+{"meta":{"version":1,"warehouse":"3.0.2"},"models":{"Asset":[{"_id":"source/packages/docs/CNAME","path":"CNAME","modified":0,"renderable":0},{"_id":"source/packages/docs/d1.png","path":"d1.png","modified":0,"renderable":0},{"_id":"source/packages/docs/d2.png","path":"d2.png","modified":0,"renderable":0},{"_id":"source/packages/docs/d4.png","path":"d4.png","modified":0,"renderable":0},{"_id":"source/packages/docs/d3.png","path":"d3.png","modified":0,"renderable":0},{"_id":"themes/subspace/source/css/application.scss","path":"css/application.scss","modified":0,"renderable":1},{"_id":"themes/subspace/source/icons/accounting-calculator.svg","path":"icons/accounting-calculator.svg","modified":0,"renderable":1},{"_id":"themes/subspace/source/icons/book-address.svg","path":"icons/book-address.svg","modified":0,"renderable":1},{"_id":"themes/subspace/source/icons/contactless-payment.svg","path":"icons/contactless-payment.svg","modified":0,"renderable":1},{"_id":"themes/subspace/source/icons/close.svg","path":"icons/close.svg","modified":0,"renderable":1},{"_id":"themes/subspace/source/icons/cloud-lock.svg","path":"icons/cloud-lock.svg","modified":0,"renderable":1},{"_id":"themes/subspace/source/icons/crypto-currency-bitcoin-give.svg","path":"icons/crypto-currency-bitcoin-give.svg","modified":0,"renderable":1},{"_id":"themes/subspace/source/icons/crypto-currency-bitcoin-lock.svg","path":"icons/crypto-currency-bitcoin-lock.svg","modified":0,"renderable":1},{"_id":"themes/subspace/source/icons/facebook.svg","path":"icons/facebook.svg","modified":0,"renderable":1},{"_id":"themes/subspace/source/icons/gauge-dashboard-1-alternate.svg","path":"icons/gauge-dashboard-1-alternate.svg","modified":0,"renderable":1},{"_id":"themes/subspace/source/icons/credit-card-1.svg","path":"icons/credit-card-1.svg","modified":0,"renderable":1},{"_id":"themes/subspace/source/icons/gesture-tap-2.svg","path":"icons/gesture-tap-2.svg","modified":0,"renderable":1},{"_id":"themes/subspace/source/icons/navigation-menu.svg","path":"icons/navigation-menu.svg","modified":0,"renderable":1},{"_id":"themes/subspace/source/icons/half-circles.svg","path":"icons/half-circles.svg","modified":0,"renderable":1},{"_id":"themes/subspace/source/icons/twitter.svg","path":"icons/twitter.svg","modified":0,"renderable":1},{"_id":"themes/subspace/source/icons/github.svg","path":"icons/github.svg","modified":0,"renderable":1},{"_id":"themes/subspace/source/images/embark-logo.svg","path":"images/embark-logo.svg","modified":0,"renderable":1},{"_id":"themes/subspace/source/images/favicon.png","path":"images/favicon.png","modified":0,"renderable":1},{"_id":"themes/subspace/source/images/circles.png","path":"images/circles.png","modified":0,"renderable":1},{"_id":"themes/subspace/source/images/logo.svg","path":"images/logo.svg","modified":0,"renderable":1},{"_id":"themes/subspace/source/javascripts/scripts.js","path":"javascripts/scripts.js","modified":0,"renderable":1},{"_id":"themes/subspace/source/fonts/LICENSE.txt","path":"fonts/LICENSE.txt","modified":0,"renderable":1},{"_id":"themes/subspace/source/javascripts/jquery.js","path":"javascripts/jquery.js","modified":0,"renderable":1},{"_id":"themes/subspace/source/css/utilities/text-color.scss","path":"css/utilities/text-color.scss","modified":0,"renderable":1},{"_id":"themes/subspace/source/css/utilities/text-size.scss","path":"css/utilities/text-size.scss","modified":0,"renderable":1},{"_id":"themes/subspace/source/fonts/Roboto-Regular.ttf","path":"fonts/Roboto-Regular.ttf","modified":0,"renderable":1},{"_id":"themes/subspace/source/fonts/Roboto-Bold.ttf","path":"fonts/Roboto-Bold.ttf","modified":0,"renderable":1}],"Cache":[{"_id":"source/packages/docs/integrations.md","hash":"da39a3ee5e6b4b0d3255bfef95601890afd80709","modified":1584642530738},{"_id":"source/packages/docs/CNAME","hash":"545c29d0214716b4d25f490ba92f7fc192267fa9","modified":1584642530729},{"_id":"source/packages/docs/api.md","hash":"7531c18af676e980ac9ae61b5ea8fe4d18b88fba","modified":1584642530730},{"_id":"source/packages/docs/apollo-client.md","hash":"ed45908ea3d645c5022ccaf35c4f83d4622decd5","modified":1584642530730},{"_id":"source/packages/docs/getting-started.md","hash":"0a107c070e1a0c1d6a6defd69207046d32791ed6","modified":1584642530738},{"_id":"source/packages/docs/how-it-works.md","hash":"d63d4586abfc27e244c79fadc6bd511177000f93","modified":1584642530738},{"_id":"source/packages/docs/react.md","hash":"85fd2bfded2d0ce30e87ea2cbae38bfd08e01456","modified":1584642530738},{"_id":"source/packages/docs/index.md","hash":"c7f9f58861a13ea8feab62f9b1bdd77dbda50332","modified":1584642530738},{"_id":"source/packages/docs/reactive-graphql.md","hash":"9624093db72703fc9e660018a769c6ed3ea95857","modified":1584642530738},{"_id":"source/packages/docs/integrations-overview.md","hash":"27810364f74ec73eb6dad0c8de9d72d9b8b51819","modified":1584642530738},{"_id":"source/packages/docs/redux.md","hash":"e25db183bbeeabb1ff94cae21b98a61e7078e3ca","modified":1584642530739},{"_id":"source/packages/docs/redux-observable.md","hash":"1b46806cb638bd3066058bd9b81227eb7410000d","modified":1584642530739},{"_id":"source/packages/docs/tutorial.md","hash":"baadad45a3c4192b5b32636c0552e32f00e75076","modified":1584642530739},{"_id":"source/packages/docs/readme.md","hash":"87edb67efc2d3ff34adb4cdaf253af19602ad901","modified":1584642530739},{"_id":"source/packages/docs/vue.md","hash":"d79683cdd68c06d2206a9c846059d195d37a3e57","modified":1584642530739},{"_id":"source/packages/docs/d1.png","hash":"615cbb4801559261ddeaedcda06679dd13ff8f26","modified":1584642530731},{"_id":"themes/subspace/languages/en.yml","hash":"52b19a8059904b1c4d7024cb5f2e7a8071b0ab57","modified":1584642530754},{"_id":"themes/subspace/languages/.DS_Store","hash":"d76a2d7ac0d577c6351a42a52cde25f60bbe2e26","modified":1584642530754},{"_id":"themes/subspace/layout/about-us.ejs","hash":"906fffa56cbe7211846775e0b4844db1825230a7","modified":1584642530754},{"_id":"themes/subspace/layout/layout.ejs","hash":"38e9ef77f035f17fb6c4a46d3f2204d2c5f51459","modified":1584642530755},{"_id":"themes/subspace/layout/index.ejs","hash":"b104f0b2eaae87f8c90a6cdafc18e2f5c699d02a","modified":1584642530755},{"_id":"themes/subspace/layout/page.ejs","hash":"e006206018c66a2c2937215010c9c3cd705f05ad","modified":1584642530755},{"_id":"themes/subspace/layout/404.ejs","hash":"52679437dd54e18877ce4d3d6d9989b3515ff6bf","modified":1584642530754},{"_id":"source/packages/docs/d2.png","hash":"87c8eaa980edbe019c706ab8463148227bd25192","modified":1584642530733},{"_id":"source/packages/docs/d4.png","hash":"5cc6b8b2d141e41719bf9ace46d2be80d8236a69","modified":1584642530737},{"_id":"source/packages/docs/d3.png","hash":"ca19a6ae5bf461a92af770d0ed7e82170c27da4a","modified":1584642530735},{"_id":"themes/subspace/layout/partial/head.ejs","hash":"7b788f51a2f5cc3891dd2bc9db8590580a6c47da","modified":1584642530755},{"_id":"themes/subspace/source/css/application.scss","hash":"424452ff93d472ea4097d60437a5c2fb8be74e49","modified":1584642530756},{"_id":"themes/subspace/layout/partial/header.ejs","hash":"a6cbefc575f7d67895463ffce2813eee00cdc1d0","modified":1584642530756},{"_id":"themes/subspace/source/css/.DS_Store","hash":"6d11537ea7ac951519f8387948002c67d58ac9ef","modified":1584642530756},{"_id":"themes/subspace/layout/partial/footer.ejs","hash":"cb235b6e4dee4efa299b1b5c2097e95523b029e4","modified":1584642530755},{"_id":"themes/subspace/layout/partial/mailpopup.ejs","hash":"edb6ea1449c8f419c1f6cd3fa0f3f6bac709675d","modified":1584642530756},{"_id":"themes/subspace/layout/partial/header-short.ejs","hash":"fcf71590daa7f07a0d898a9cd432faebb7b06ea9","modified":1584642530755},{"_id":"themes/subspace/source/icons/accounting-calculator.svg","hash":"7891b12b3fd13594b3ae17c10b3523208265be33","modified":1584642530762},{"_id":"themes/subspace/source/icons/book-address.svg","hash":"e2635b49f36833ec0f3373d53e3c5819a3446c24","modified":1584642530762},{"_id":"themes/subspace/source/icons/contactless-payment.svg","hash":"6674a6a6c06539d7be7bcb2459448d4895541051","modified":1584642530763},{"_id":"themes/subspace/source/icons/close.svg","hash":"07c332a892c2b2a107bf53a055425064006b7161","modified":1584642530763},{"_id":"themes/subspace/source/icons/cloud-lock.svg","hash":"b76429f6da1aaa8a1f1d1e72ae7167899976e7aa","modified":1584642530763},{"_id":"themes/subspace/source/icons/crypto-currency-bitcoin-give.svg","hash":"a07cb23aa2c7b81167289cfee51450e110dd46d2","modified":1584642530763},{"_id":"themes/subspace/source/icons/crypto-currency-bitcoin-lock.svg","hash":"27219b9e068b7dc5323217e3f49bad16f6555470","modified":1584642530763},{"_id":"themes/subspace/source/icons/facebook.svg","hash":"0cf65e7228226ff7aa72c74d35368db7599c884b","modified":1584642530763},{"_id":"themes/subspace/source/icons/gauge-dashboard-1-alternate.svg","hash":"4ab202003ecb28775848f4b6fa61a45b4cdc8a7c","modified":1584642530763},{"_id":"themes/subspace/source/icons/credit-card-1.svg","hash":"2c6082035b515eff854f84905cca61a53275aa8e","modified":1584642530763},{"_id":"themes/subspace/source/icons/gesture-tap-2.svg","hash":"8e9a60be2d1080c184f8863d8059472ae1051432","modified":1584642530763},{"_id":"themes/subspace/source/icons/navigation-menu.svg","hash":"d6b4d9e2da8849ac362bcb8d634725b921ebf46c","modified":1584642530764},{"_id":"themes/subspace/source/icons/half-circles.svg","hash":"0be6efb2cd315348a5f2f1404da205d11d5e78c3","modified":1584642530764},{"_id":"themes/subspace/source/icons/twitter.svg","hash":"dab32630d9eb04c293f9c4775271953d57eb8642","modified":1584642530764},{"_id":"themes/subspace/source/images/.DS_Store","hash":"df2fbeb1400acda0909a32c1cf6bf492f1121e07","modified":1584642530764},{"_id":"themes/subspace/source/icons/github.svg","hash":"4ad3447484a193da8e10d9705ebb598de10873e6","modified":1584642530764},{"_id":"themes/subspace/source/images/embark-logo.svg","hash":"682af62e01cd85c11235bd2258b8f87ee9b44afb","modified":1584642530765},{"_id":"themes/subspace/source/images/favicon.png","hash":"7f0c4305cd9711e9dd20ac94a5559f4d67a9fe9b","modified":1584642530765},{"_id":"themes/subspace/source/images/circles.png","hash":"ca3ed456a67c9c329e638990b9a8805a2f33c68c","modified":1584642530764},{"_id":"themes/subspace/source/images/logo.svg","hash":"e7d3c651b56c2bb890b567a67dd860fc96ad6579","modified":1584642530765},{"_id":"themes/subspace/source/javascripts/scripts.js","hash":"1f0ee8c12b179a9607cb1848710254652a7332b2","modified":1584642530766},{"_id":"themes/subspace/source/css/components/_footer.scss","hash":"da39a3ee5e6b4b0d3255bfef95601890afd80709","modified":1584642530756},{"_id":"themes/subspace/source/fonts/LICENSE.txt","hash":"47b573e3824cd5e02a1a3ae99e2735b49e0256e4","modified":1584642530761},{"_id":"themes/subspace/source/javascripts/jquery.js","hash":"9592732de681f4365e9b7016dc5cf76e2a55ee9b","modified":1584642530765},{"_id":"themes/subspace/source/css/components/_accentbox.scss","hash":"d29f556f2e24edec1332ccc00e86426015de422a","modified":1584642530756},{"_id":"themes/subspace/source/css/components/_button.scss","hash":"0888de9a954f5bfb3b84bbfdeed13372d250f69d","modified":1584642530756},{"_id":"themes/subspace/source/css/components/_ghostbox.scss","hash":"1105139aba422228bc5a64863d28d8405d700d15","modified":1584642530757},{"_id":"themes/subspace/source/css/components/_header.scss","hash":"e83d6db7e7c928f4d7d5fd2d57643fe1a551cffc","modified":1584642530757},{"_id":"themes/subspace/source/css/components/_icons.scss","hash":"cb036eb40ed0c2525ca1918e59d73d6a592272ba","modified":1584642530757},{"_id":"themes/subspace/source/css/components/_logo.scss","hash":"c3734c435890094b95a9f340337dbfc682bc1e1a","modified":1584642530757},{"_id":"themes/subspace/source/css/components/_notification.scss","hash":"86462fdffee06124b3d071f35632ae67f2f955fe","modified":1584642530757},{"_id":"themes/subspace/source/css/components/_prism-highlighting.scss","hash":"f8471f2667d53a43cb3b6003d7ecafc811283c24","modified":1584642530757},{"_id":"themes/subspace/source/css/components/_spotlightbox.scss","hash":"2a38ea8c753890d1683b435e33e8377fb17671dc","modified":1584642530758},{"_id":"themes/subspace/source/css/components/_teaser.scss","hash":"c653e382a5a7074f5f86b89c6640a56e083b8471","modified":1584642530758},{"_id":"themes/subspace/source/css/components/_user.scss","hash":"b3663cc7b8c0afdf5f8a69031da7ac3365e844a9","modified":1584642530758},{"_id":"themes/subspace/source/css/components/_whisperbox.scss","hash":"3852852e8644c71b6604915342a10abbfd681d4b","modified":1584642530758},{"_id":"themes/subspace/source/css/objects/_actionbar.scss","hash":"195c09931d611dbfcaf9822413504ebb0e77076b","modified":1584642530758},{"_id":"themes/subspace/source/css/components/_popup.scss","hash":"ccacb82e0b24378a96841d7a480e6530630d882d","modified":1584642530757},{"_id":"themes/subspace/source/css/objects/_content.scss","hash":"4ef659a6c260c847813fabb8718f990c5c126792","modified":1584642530758},{"_id":"themes/subspace/source/css/objects/_distance.scss","hash":"7ad96acdb01f35bbd8941d61f59b055568c6e545","modified":1584642530758},{"_id":"themes/subspace/source/css/objects/_heading.scss","hash":"6569220491e75b751070f2b589fea348745e27d1","modified":1584642530759},{"_id":"themes/subspace/source/css/objects/_list.scss","hash":"ed672664d7e4a2f041ce3e3dcc6b3c9f3ebbfa7e","modified":1584642530759},{"_id":"themes/subspace/source/css/objects/_media.scss","hash":"be25ab7a3c1e3bccfaaa5fdbeeccf9308694921d","modified":1584642530759},{"_id":"themes/subspace/source/css/objects/_navigation.scss","hash":"64e3b33422ccccf702e630125a9b3ca52999c2d6","modified":1584642530759},{"_id":"themes/subspace/source/css/objects/_grid.scss","hash":"4dc75ce1b1d58e4ca6624db8115ffd196c996733","modified":1584642530759},{"_id":"themes/subspace/source/css/objects/_side-navigation.scss","hash":"231d32b8a6137f3bd4d4ac2aa24476620f558f61","modified":1584642530759},{"_id":"themes/subspace/source/css/settings/_config.scss","hash":"a27b23a9d0e1a77c4361c4cb1f7ad0468906bbb3","modified":1584642530759},{"_id":"themes/subspace/source/css/settings/_preset.scss","hash":"36ed217633bf1a18f5221299e0f60277271eecb4","modified":1584642530759},{"_id":"themes/subspace/source/css/objects/.DS_Store","hash":"5fcb0ec5a267305e0c44b7fa11ae2793b4f428c6","modified":1584642530758},{"_id":"themes/subspace/source/css/settings/_typography.scss","hash":"6cd55798081c53c48e7ad0324a0799b53fc5ff17","modified":1584642530760},{"_id":"themes/subspace/source/css/tools/_column.scss","hash":"9e79a4e3b4ab33091af14704d35ca2ab4263b741","modified":1584642530760},{"_id":"themes/subspace/source/css/tools/_get-brand-color.scss","hash":"5e773a10bb143a2b423287b7faff79ac5ce3fcac","modified":1584642530760},{"_id":"themes/subspace/source/css/tools/_get-color.scss","hash":"c7b667b92df7fa246be2f32f395ebbde23ea0355","modified":1584642530760},{"_id":"themes/subspace/source/css/tools/_get-font.scss","hash":"b2895a7ef8c26ba6b34c34f1f2fb2ea5449f89cd","modified":1584642530760},{"_id":"themes/subspace/source/css/tools/_get-index.scss","hash":"72281c30f7e3db2060898d3c9b250bc6c8829216","modified":1584642530760},{"_id":"themes/subspace/source/css/tools/_get-layout-color.scss","hash":"8e57145b98219bc874041197bde973193e2ff7a8","modified":1584642530760},{"_id":"themes/subspace/source/css/tools/_get-notification-color.scss","hash":"761e671fe7cbd70c190254818c8e55e6d3d7ee90","modified":1584642530760},{"_id":"themes/subspace/source/css/tools/_get-semantic-color.scss","hash":"316f7baaa9aeac4f891901882479b37230b5c591","modified":1584642530761},{"_id":"themes/subspace/source/css/tools/_get-spacing.scss","hash":"fc5b46752f7e37da64ddad94392450d7d4f40a87","modified":1584642530761},{"_id":"themes/subspace/source/css/tools/_list-reset.scss","hash":"ed3aa5ee39890dd0454c695e1bf0a45f751c5b04","modified":1584642530761},{"_id":"themes/subspace/source/css/tools/_respond.scss","hash":"ba73d16c16235365bea5da78df0672d990ba4579","modified":1584642530761},{"_id":"themes/subspace/source/css/utilities/text-color.scss","hash":"414a963b70ee7a6250a247bdbd03f2e67e5bbdcd","modified":1584642530761},{"_id":"themes/subspace/source/css/utilities/text-size.scss","hash":"93494af1f3f44293fc9357bd726eadedf76d9516","modified":1584642530761},{"_id":"themes/subspace/source/fonts/Roboto-Regular.ttf","hash":"dd1b1db13ff1f72138c134c62f38fef83749f36a","modified":1584642530762},{"_id":"themes/subspace/source/fonts/Roboto-Bold.ttf","hash":"0ce37ced9c5fcac9bdc452a432c1258870ba4677","modified":1584642530762},{"_id":"public/integrations.html","hash":"da39a3ee5e6b4b0d3255bfef95601890afd80709","modified":1584642922115},{"_id":"public/api.html","hash":"da39a3ee5e6b4b0d3255bfef95601890afd80709","modified":1584642922115},{"_id":"public/apollo-client.html","hash":"da39a3ee5e6b4b0d3255bfef95601890afd80709","modified":1584642922115},{"_id":"public/getting-started.html","hash":"da39a3ee5e6b4b0d3255bfef95601890afd80709","modified":1584642922115},{"_id":"public/how-it-works.html","hash":"da39a3ee5e6b4b0d3255bfef95601890afd80709","modified":1584642922115},{"_id":"public/reactive-graphql.html","hash":"da39a3ee5e6b4b0d3255bfef95601890afd80709","modified":1584642922115},{"_id":"public/react.html","hash":"da39a3ee5e6b4b0d3255bfef95601890afd80709","modified":1584642922115},{"_id":"public/integrations-overview.html","hash":"da39a3ee5e6b4b0d3255bfef95601890afd80709","modified":1584642922115},{"_id":"public/redux.html","hash":"da39a3ee5e6b4b0d3255bfef95601890afd80709","modified":1584642922115},{"_id":"public/tutorial.html","hash":"da39a3ee5e6b4b0d3255bfef95601890afd80709","modified":1584642922115},{"_id":"public/redux-observable.html","hash":"da39a3ee5e6b4b0d3255bfef95601890afd80709","modified":1584642922115},{"_id":"public/readme.html","hash":"da39a3ee5e6b4b0d3255bfef95601890afd80709","modified":1584642922115},{"_id":"public/vue.html","hash":"da39a3ee5e6b4b0d3255bfef95601890afd80709","modified":1584642922115},{"_id":"public/de/integrations.html","hash":"da39a3ee5e6b4b0d3255bfef95601890afd80709","modified":1584642922115},{"_id":"public/de/api.html","hash":"da39a3ee5e6b4b0d3255bfef95601890afd80709","modified":1584642922115},{"_id":"public/de/apollo-client.html","hash":"da39a3ee5e6b4b0d3255bfef95601890afd80709","modified":1584642922115},{"_id":"public/de/getting-started.html","hash":"da39a3ee5e6b4b0d3255bfef95601890afd80709","modified":1584642922115},{"_id":"public/de/how-it-works.html","hash":"da39a3ee5e6b4b0d3255bfef95601890afd80709","modified":1584642922115},{"_id":"public/de/index.html","hash":"da39a3ee5e6b4b0d3255bfef95601890afd80709","modified":1584642922115},{"_id":"public/de/reactive-graphql.html","hash":"da39a3ee5e6b4b0d3255bfef95601890afd80709","modified":1584642922115},{"_id":"public/de/react.html","hash":"da39a3ee5e6b4b0d3255bfef95601890afd80709","modified":1584642922115},{"_id":"public/de/integrations-overview.html","hash":"da39a3ee5e6b4b0d3255bfef95601890afd80709","modified":1584642922115},{"_id":"public/de/redux.html","hash":"da39a3ee5e6b4b0d3255bfef95601890afd80709","modified":1584642922115},{"_id":"public/de/redux-observable.html","hash":"da39a3ee5e6b4b0d3255bfef95601890afd80709","modified":1584642922115},{"_id":"public/de/tutorial.html","hash":"da39a3ee5e6b4b0d3255bfef95601890afd80709","modified":1584642922115},{"_id":"public/de/readme.html","hash":"da39a3ee5e6b4b0d3255bfef95601890afd80709","modified":1584642922115},{"_id":"public/de/vue.html","hash":"da39a3ee5e6b4b0d3255bfef95601890afd80709","modified":1584642922115},{"_id":"public/index.html","hash":"f78940c9cc6789a8ebe9e87f038b29570a7551ee","modified":1584642922115},{"_id":"public/CNAME","hash":"545c29d0214716b4d25f490ba92f7fc192267fa9","modified":1584642922115},{"_id":"public/icons/accounting-calculator.svg","hash":"7891b12b3fd13594b3ae17c10b3523208265be33","modified":1584642922115},{"_id":"public/icons/book-address.svg","hash":"e2635b49f36833ec0f3373d53e3c5819a3446c24","modified":1584642922115},{"_id":"public/icons/contactless-payment.svg","hash":"6674a6a6c06539d7be7bcb2459448d4895541051","modified":1584642922115},{"_id":"public/icons/close.svg","hash":"07c332a892c2b2a107bf53a055425064006b7161","modified":1584642922115},{"_id":"public/icons/cloud-lock.svg","hash":"b76429f6da1aaa8a1f1d1e72ae7167899976e7aa","modified":1584642922115},{"_id":"public/icons/crypto-currency-bitcoin-give.svg","hash":"a07cb23aa2c7b81167289cfee51450e110dd46d2","modified":1584642922115},{"_id":"public/icons/crypto-currency-bitcoin-lock.svg","hash":"27219b9e068b7dc5323217e3f49bad16f6555470","modified":1584642922115},{"_id":"public/icons/facebook.svg","hash":"0cf65e7228226ff7aa72c74d35368db7599c884b","modified":1584642922115},{"_id":"public/icons/gesture-tap-2.svg","hash":"8e9a60be2d1080c184f8863d8059472ae1051432","modified":1584642922115},{"_id":"public/icons/gauge-dashboard-1-alternate.svg","hash":"4ab202003ecb28775848f4b6fa61a45b4cdc8a7c","modified":1584642922115},{"_id":"public/icons/credit-card-1.svg","hash":"2c6082035b515eff854f84905cca61a53275aa8e","modified":1584642922115},{"_id":"public/icons/navigation-menu.svg","hash":"d6b4d9e2da8849ac362bcb8d634725b921ebf46c","modified":1584642922115},{"_id":"public/icons/half-circles.svg","hash":"0be6efb2cd315348a5f2f1404da205d11d5e78c3","modified":1584642922115},{"_id":"public/icons/twitter.svg","hash":"dab32630d9eb04c293f9c4775271953d57eb8642","modified":1584642922115},{"_id":"public/icons/github.svg","hash":"4ad3447484a193da8e10d9705ebb598de10873e6","modified":1584642922115},{"_id":"public/images/embark-logo.svg","hash":"682af62e01cd85c11235bd2258b8f87ee9b44afb","modified":1584642922115},{"_id":"public/images/favicon.png","hash":"7f0c4305cd9711e9dd20ac94a5559f4d67a9fe9b","modified":1584642922115},{"_id":"public/images/logo.svg","hash":"e7d3c651b56c2bb890b567a67dd860fc96ad6579","modified":1584642922115},{"_id":"public/images/circles.png","hash":"ca3ed456a67c9c329e638990b9a8805a2f33c68c","modified":1584642922115},{"_id":"public/fonts/LICENSE.txt","hash":"47b573e3824cd5e02a1a3ae99e2735b49e0256e4","modified":1584642922115},{"_id":"public/javascripts/scripts.js","hash":"1f0ee8c12b179a9607cb1848710254652a7332b2","modified":1584642922115},{"_id":"public/css/utilities/text-size.css","hash":"6340d74612d186555e471c57175a5f0a3f661cdc","modified":1584642922115},{"_id":"public/css/utilities/text-color.css","hash":"3d763e25e9078d5375b4fd0d9b100aa1b8a91d93","modified":1584642922115},{"_id":"public/javascripts/jquery.js","hash":"9592732de681f4365e9b7016dc5cf76e2a55ee9b","modified":1584642922115},{"_id":"public/css/application.css","hash":"e7e477ef203d3d902df2518d63ef12731d0a50f8","modified":1584642922115},{"_id":"public/d1.png","hash":"615cbb4801559261ddeaedcda06679dd13ff8f26","modified":1584642922115},{"_id":"public/fonts/Roboto-Bold.ttf","hash":"0ce37ced9c5fcac9bdc452a432c1258870ba4677","modified":1584642922115},{"_id":"public/d4.png","hash":"5cc6b8b2d141e41719bf9ace46d2be80d8236a69","modified":1584642922115},{"_id":"public/d3.png","hash":"ca19a6ae5bf461a92af770d0ed7e82170c27da4a","modified":1584642922115},{"_id":"public/fonts/Roboto-Regular.ttf","hash":"dd1b1db13ff1f72138c134c62f38fef83749f36a","modified":1584642922115},{"_id":"public/d2.png","hash":"87c8eaa980edbe019c706ab8463148227bd25192","modified":1584642922115},{"_id":"source/packages/docs/_data/sidebar.yml","hash":"09bc83728b4dc7a9db44fdfce15769972c1eec3a","modified":1584642530730},{"_id":"source/packages/docs/_posts/hello-world.md","hash":"7d98d6592de80fdcd2949bd7401cec12afd98cdf","modified":1584642530730},{"_id":"source/packages/docs/.DS_Store","hash":"078fc163bb0c365b31f211f49a5e78e2703b3f12","modified":1584643079469}],"Category":[],"Data":[{"_id":"sidebar","data":{"docs":[{"title":"How it works","path":"how-it-works.html"},{"title":"Getting Started","path":"getting-started.html","children":[{"title":"Installation","path":"#Installation"},{"title":"Importing the library","path":"#Importing-the-library"},{"title":"Connecting to a web3 provider","path":"#Connecting-to-a-web3-provider"},{"title":"Enhancing your contract objects","path":"#Enhancing-your-contract-objects"},{"title":"Reacting to data","path":"#Reacting-to-data"},{"title":"Tracking state","path":"#Tracking-state"},{"title":"Tracking events","path":"#Tracking-events"},{"title":"Tracking balances","path":"#Tracking-balances"},{"title":"Getting block data, gas prices and block time","path":"#Getting-block-data-gas-prices-and-block-time"},{"title":"Subscriptions","path":"#Subscriptions"},{"title":"Cleanup","path":"#Cleanup"}]},{"title":"Integrations","path":"empty","children":[{"title":"Overview","path":"integrations-overview.html"},{"title":"React","path":"react.html"},{"title":"Vue","path":"vue.html"},{"title":"Redux","path":"empty","children":[{"title":"redux","path":"redux.html"},{"title":"redux-observable","path":"redux-observable.html"}]},{"title":"reactive-graphql","path":"reactive-graphql.html"},{"title":"apollo-client","path":"apollo-client.html"}]},{"title":"Tutorial","path":"tutorial.html"},{"title":"API","path":"api.html","children":[{"title":"General","path":"#general"},{"title":"Contract methods","path":"#Contract-methods"},{"title":"Blocks, gas price and block time","path":"#Blocks-gas-price-and-block-time"},{"title":"Low level API for data tracking","path":"#Low-level-API-for-data-tracking"}]}]}}],"Page":[{"_content":"","source":"integrations.md","raw":"","date":"2020-03-19T18:30:37.782Z","updated":"2020-03-19T18:28:50.738Z","path":"integrations.html","title":"","comments":1,"layout":"page","_id":"ck7z3hcks00005cbn2gap6jkg","content":"","site":{"data":{}},"excerpt":"","more":""},{"_content":"# API\n\n## General\n\n### `new Subspace(web3Provider [, options])`\nConstructor. \n\n**Parameters**\n1. `web3Provider` - `Object`: a valid web3 provider.\n2. `options` - `Object` (optional): Options used to initialize Subspace\n\t- `dbFilename` - `String` (optional): Name of the database where the information will be stored (default `'subspace.db'`)\n\t- `callInterval` - `Number` (optional): - Interval of time in milliseconds to poll a contract/address to determine changes in state or balance (default: `undefined`. Obtains data every block. If using a HttpProvider, the default is: `1000`)\n - `refreshLastNBlocks` - Ignores last N blocks (from current block), stored in the local db and refresh them via a web3 subscription. Useful for possible reorgs (default: 12),\n - `disableSubscriptions` - Subspace by default will attempt to use websocket subscriptions if the current provider supports them, otherwise it will use polling because it asumes the provider is an HttpProvider. This functionality can be disabled by passing true to this option. (default: undefined)\n\n\n### `init()`\nInitializes **Subspace**\n\n**Returns**\n`Promise` that once it's resolved, will mean that **Subspace** is available to use\n\n### `close()`\nDispose and perform the cleanup necessary to remove the internal subscriptions and interval timers created by **Subspace** during its normal execution.\n\n### `contract(instance|{abi,address})`\nAdds a `track` method to the web3 contract objects. You can obtain this functionality by passing a `web3.eth.Contract` instance, or the `abi` and `address` of your contract\n\n**Returns**\n`web3.eth.Contract` object enhanced with `.track()` functions for methods and events.\n\n## Contract methods\n\n### `myContract.events.MyEvent.track([options])`\nTrack a contract event.\n\n**Parameters**\n1. `options` - `Object` (optional): web3 filter options object to limit the number of events based on a block number range, or indexed filters\n - `filter` - `Object` (optional): Lets you filter events by indexed parameters, e.g. `{filter: {myNumber: [12,13]}}` means all events where `\"myNumber\"` is `12` or `13`.\n - `fromBlock` - `Number` (optional): The block number from which to get events on.\n - `toBlock` - `Number` (optional): The block number to get events up to (Defaults to `\"latest\"`)\n - `topics` - `Array` (optional): This allows you to manually set the topics for the event filter. If given the filter property and event signature, (`topic[0]`) will not be set automatically.\n\n**Returns**\n`RxJS Observable` which will stream the event `returnValues`.\n\n\n### `myContract.methods.myMethod([param1[, ...]]).track([callOptions])`\nTrack a constant function / contract state variable on each block mined, or depending on the `callInterval` option used during **Subspace** initialization.\n\n**Parameters**\n1. `callOptions` - `Object` (optional): The options used for calling.\n - `from` - `String` (optional): The address the call “transaction” should be made from.\n - `gasPrice` - `String` (optional): The gas price in wei to use for this call “transaction”.\n - `gas` - `Number` (optional): The maximum gas provided for this call “transaction” (gas limit).\n\n**Returns**\n`RxJS Observable` which will stream the function / variable values. Data type will depend on the contract function invoked. \n\n\n### `myContract.trackBalance(address [, tokenAddress])`\nTrack a contract's balance changes for an address on each block mined, or depending on the `callInterval` option used during **Subspace** initialization.\n\n**Parameters**\n1. `address` - `String`: The address to get the balance of.\n2. `tokenAddress` - `String` (optional): If you want to track the balance for an ERC20 contract, here you can specify the token address. Otherwise, Only ETH balances will be returned.\n\n**Returns**\n`RxJS Observable` which will stream a string containing the address balance.\n\n\n## Blocks, gas price and block time\n\n### `trackBlock()`\nReceive the block information for any new block. It's the reactive equivalent to `web3.eth.getBlock(\"latest\")`.\n\n**Returns**\n`RxJS Observable` which will stream a block object for the latest block received\n\n### `trackBlockNumber()`\nReturns the latest block number. It's the reactive equivalent to `web3.eth.getBlockNumber`.\n\n**Returns**\n`RxJS Observable` with the latest block number\n\n### `trackGasPrice()`\nReturns the current gas price oracle. It's the reactive equivalent to `web3.eth.getGasPrice`.\n\n**Returns**\n`RxJS Observable` with the average gas price in wei.\n\n### `trackAverageBlocktime()`\nAverage block time of the last 10 blocks.\n\n**Returns**\n`RxJS Observable` with the moving average block time of the last 10 blocks. The time is returned in milliseconds:\n\n\n## Low level API for data tracking\n\nThese are used in case you don't want to decorate your web3 contract objects, or if you want to track the balance for an specific address.\n\n### `trackEvent(contractObject, eventName [, options])`\nTrack a contract event.\n\n**Parameters**\n1. `contractObject` - `web3.eth.Contract`: An already initialized contract object pointing to an address and containing a valid ABI.\n2. `eventName` - `String`: The name of the event to subscribe.\n3. `options` - `Object` (optional): web3 filter options object to limit the number of events based on a block number range, or indexed filters\n - `filter` - `Object` (optional): Lets you filter events by indexed parameters, e.g. `{filter: {myNumber: [12,13]}}` means all events where `\"myNumber\"` is `12` or `13`.\n - `fromBlock` - `Number` (optional): The block number from which to get events on.\n - `toBlock` - `Number` (optional): The block number to get events up to (Defaults to `\"latest\"`)\n - `topics` - `Array` (optional): This allows you to manually set the topics for the event filter. If given the filter property and event signature, (`topic[0]`) will not be set automatically.\n\n**Returns**\n`RxJS Observable` which will stream the event `returnValues`.\n\n### `trackProperty(contractObject, functionName [, functionArgs] [, callOptions])`\nTrack a constant function / contract state variable on each block mined, or depending on the `callInterval` option used during **Subspace** initialization.\n\n**Parameters**\n1. `contractObject` - `web3.eth.Contract`: An already initialized contract object pointing to an address and containing a valid ABI.\n2. `functionName` - `String`: Name of the function or variable whose values will be tracked.\n3. `functionArgs` - `Array` (optional): Array of arguments that the tracked function receives\n4. `callOptions` - `Object` (optional): The options used for calling.\n - `from` - `String` (optional): The address the call “transaction” should be made from.\n - `gasPrice` - `String` (optional): The gas price in wei to use for this call “transaction”.\n - `gas` - `Number` (optional): The maximum gas provided for this call “transaction” (gas limit).\n\n**Returns**\n`RxJS Observable` which will stream the function / variable values. Data type will depend on the contract function invoked. \n\n### `trackBalance(address [, tokenAddress])`\nTrack balance changes for an address on each block mined, or depending on the `callInterval` option used during **Subspace** initialization.\n\n**Parameters**\n1. `address` - `String`: The address to get the balance of.\n2. `tokenAddress` - `String` (optional): If you want to track the balance for an ERC20 contract, here you can specify the token address. Otherwise, Only ETH balances will be returned.\n\n**Returns**\n`RxJS Observable` which will stream a string containing the address balance.\n\n### `trackLogs(options [, abi])`\nTracks incoming logs, filtered by the given options.\n\n**Parameters**\n1. `options` - `Object` (optional): web3 filter options object to limit the number of logs\n - `address` - `String|Array` (optional): An address or a list of addresses to only get logs from particular account(s).\n - `fromBlock` - `Number` (optional): The block number from which to get events on.\n - `topics` - `Array` (optional): An array of values which must each appear in the log entries. The order is important, if you want to leave topics out use null, e.g. [null, '0x00...']. You can also pass another array for each topic with options for that topic e.g. [null, ['option1', 'option2']].\n2. `abi` - `Array` (optional): Array containing the ABI for the inputs of the logs received. It will automatically decode the logs using this ABI instead of returning the hexadecimal data.\n\n**Returns**\n`RxJS Observable` which will stream the logs. If the inputs ABI is included in the call, the logs will be automatically decoded.","source":"api.md","raw":"# API\n\n## General\n\n### `new Subspace(web3Provider [, options])`\nConstructor. \n\n**Parameters**\n1. `web3Provider` - `Object`: a valid web3 provider.\n2. `options` - `Object` (optional): Options used to initialize Subspace\n\t- `dbFilename` - `String` (optional): Name of the database where the information will be stored (default `'subspace.db'`)\n\t- `callInterval` - `Number` (optional): - Interval of time in milliseconds to poll a contract/address to determine changes in state or balance (default: `undefined`. Obtains data every block. If using a HttpProvider, the default is: `1000`)\n - `refreshLastNBlocks` - Ignores last N blocks (from current block), stored in the local db and refresh them via a web3 subscription. Useful for possible reorgs (default: 12),\n - `disableSubscriptions` - Subspace by default will attempt to use websocket subscriptions if the current provider supports them, otherwise it will use polling because it asumes the provider is an HttpProvider. This functionality can be disabled by passing true to this option. (default: undefined)\n\n\n### `init()`\nInitializes **Subspace**\n\n**Returns**\n`Promise` that once it's resolved, will mean that **Subspace** is available to use\n\n### `close()`\nDispose and perform the cleanup necessary to remove the internal subscriptions and interval timers created by **Subspace** during its normal execution.\n\n### `contract(instance|{abi,address})`\nAdds a `track` method to the web3 contract objects. You can obtain this functionality by passing a `web3.eth.Contract` instance, or the `abi` and `address` of your contract\n\n**Returns**\n`web3.eth.Contract` object enhanced with `.track()` functions for methods and events.\n\n## Contract methods\n\n### `myContract.events.MyEvent.track([options])`\nTrack a contract event.\n\n**Parameters**\n1. `options` - `Object` (optional): web3 filter options object to limit the number of events based on a block number range, or indexed filters\n - `filter` - `Object` (optional): Lets you filter events by indexed parameters, e.g. `{filter: {myNumber: [12,13]}}` means all events where `\"myNumber\"` is `12` or `13`.\n - `fromBlock` - `Number` (optional): The block number from which to get events on.\n - `toBlock` - `Number` (optional): The block number to get events up to (Defaults to `\"latest\"`)\n - `topics` - `Array` (optional): This allows you to manually set the topics for the event filter. If given the filter property and event signature, (`topic[0]`) will not be set automatically.\n\n**Returns**\n`RxJS Observable` which will stream the event `returnValues`.\n\n\n### `myContract.methods.myMethod([param1[, ...]]).track([callOptions])`\nTrack a constant function / contract state variable on each block mined, or depending on the `callInterval` option used during **Subspace** initialization.\n\n**Parameters**\n1. `callOptions` - `Object` (optional): The options used for calling.\n - `from` - `String` (optional): The address the call “transaction” should be made from.\n - `gasPrice` - `String` (optional): The gas price in wei to use for this call “transaction”.\n - `gas` - `Number` (optional): The maximum gas provided for this call “transaction” (gas limit).\n\n**Returns**\n`RxJS Observable` which will stream the function / variable values. Data type will depend on the contract function invoked. \n\n\n### `myContract.trackBalance(address [, tokenAddress])`\nTrack a contract's balance changes for an address on each block mined, or depending on the `callInterval` option used during **Subspace** initialization.\n\n**Parameters**\n1. `address` - `String`: The address to get the balance of.\n2. `tokenAddress` - `String` (optional): If you want to track the balance for an ERC20 contract, here you can specify the token address. Otherwise, Only ETH balances will be returned.\n\n**Returns**\n`RxJS Observable` which will stream a string containing the address balance.\n\n\n## Blocks, gas price and block time\n\n### `trackBlock()`\nReceive the block information for any new block. It's the reactive equivalent to `web3.eth.getBlock(\"latest\")`.\n\n**Returns**\n`RxJS Observable` which will stream a block object for the latest block received\n\n### `trackBlockNumber()`\nReturns the latest block number. It's the reactive equivalent to `web3.eth.getBlockNumber`.\n\n**Returns**\n`RxJS Observable` with the latest block number\n\n### `trackGasPrice()`\nReturns the current gas price oracle. It's the reactive equivalent to `web3.eth.getGasPrice`.\n\n**Returns**\n`RxJS Observable` with the average gas price in wei.\n\n### `trackAverageBlocktime()`\nAverage block time of the last 10 blocks.\n\n**Returns**\n`RxJS Observable` with the moving average block time of the last 10 blocks. The time is returned in milliseconds:\n\n\n## Low level API for data tracking\n\nThese are used in case you don't want to decorate your web3 contract objects, or if you want to track the balance for an specific address.\n\n### `trackEvent(contractObject, eventName [, options])`\nTrack a contract event.\n\n**Parameters**\n1. `contractObject` - `web3.eth.Contract`: An already initialized contract object pointing to an address and containing a valid ABI.\n2. `eventName` - `String`: The name of the event to subscribe.\n3. `options` - `Object` (optional): web3 filter options object to limit the number of events based on a block number range, or indexed filters\n - `filter` - `Object` (optional): Lets you filter events by indexed parameters, e.g. `{filter: {myNumber: [12,13]}}` means all events where `\"myNumber\"` is `12` or `13`.\n - `fromBlock` - `Number` (optional): The block number from which to get events on.\n - `toBlock` - `Number` (optional): The block number to get events up to (Defaults to `\"latest\"`)\n - `topics` - `Array` (optional): This allows you to manually set the topics for the event filter. If given the filter property and event signature, (`topic[0]`) will not be set automatically.\n\n**Returns**\n`RxJS Observable` which will stream the event `returnValues`.\n\n### `trackProperty(contractObject, functionName [, functionArgs] [, callOptions])`\nTrack a constant function / contract state variable on each block mined, or depending on the `callInterval` option used during **Subspace** initialization.\n\n**Parameters**\n1. `contractObject` - `web3.eth.Contract`: An already initialized contract object pointing to an address and containing a valid ABI.\n2. `functionName` - `String`: Name of the function or variable whose values will be tracked.\n3. `functionArgs` - `Array` (optional): Array of arguments that the tracked function receives\n4. `callOptions` - `Object` (optional): The options used for calling.\n - `from` - `String` (optional): The address the call “transaction” should be made from.\n - `gasPrice` - `String` (optional): The gas price in wei to use for this call “transaction”.\n - `gas` - `Number` (optional): The maximum gas provided for this call “transaction” (gas limit).\n\n**Returns**\n`RxJS Observable` which will stream the function / variable values. Data type will depend on the contract function invoked. \n\n### `trackBalance(address [, tokenAddress])`\nTrack balance changes for an address on each block mined, or depending on the `callInterval` option used during **Subspace** initialization.\n\n**Parameters**\n1. `address` - `String`: The address to get the balance of.\n2. `tokenAddress` - `String` (optional): If you want to track the balance for an ERC20 contract, here you can specify the token address. Otherwise, Only ETH balances will be returned.\n\n**Returns**\n`RxJS Observable` which will stream a string containing the address balance.\n\n### `trackLogs(options [, abi])`\nTracks incoming logs, filtered by the given options.\n\n**Parameters**\n1. `options` - `Object` (optional): web3 filter options object to limit the number of logs\n - `address` - `String|Array` (optional): An address or a list of addresses to only get logs from particular account(s).\n - `fromBlock` - `Number` (optional): The block number from which to get events on.\n - `topics` - `Array` (optional): An array of values which must each appear in the log entries. The order is important, if you want to leave topics out use null, e.g. [null, '0x00...']. You can also pass another array for each topic with options for that topic e.g. [null, ['option1', 'option2']].\n2. `abi` - `Array` (optional): Array containing the ABI for the inputs of the logs received. It will automatically decode the logs using this ABI instead of returning the hexadecimal data.\n\n**Returns**\n`RxJS Observable` which will stream the logs. If the inputs ABI is included in the call, the logs will be automatically decoded.","date":"2020-03-19T18:30:40.087Z","updated":"2020-03-19T18:28:50.730Z","path":"api.html","title":"","comments":1,"layout":"page","_id":"ck7z3hckv00015cbn10hj90nw","content":"
API General new Subspace(web3Provider [, options])
Constructor.
\nParameters
\n\nweb3Provider
- Object
: a valid web3 provider. \noptions
- Object
(optional): Options used to initialize Subspace\ndbFilename
- String
(optional): Name of the database where the information will be stored (default 'subspace.db'
) \ncallInterval
- Number
(optional): - Interval of time in milliseconds to poll a contract/address to determine changes in state or balance (default: undefined
. Obtains data every block. If using a HttpProvider, the default is: 1000
) \nrefreshLastNBlocks
- Ignores last N blocks (from current block), stored in the local db and refresh them via a web3 subscription. Useful for possible reorgs (default: 12), \ndisableSubscriptions
- Subspace by default will attempt to use websocket subscriptions if the current provider supports them, otherwise it will use polling because it asumes the provider is an HttpProvider. This functionality can be disabled by passing true to this option. (default: undefined) \n \n \n \ninit()
Initializes Subspace
\nReturns Promise
that once it’s resolved, will mean that Subspace is available to use
\nclose()
Dispose and perform the cleanup necessary to remove the internal subscriptions and interval timers created by Subspace during its normal execution.
\ncontract(instance|{abi,address})
Adds a track
method to the web3 contract objects. You can obtain this functionality by passing a web3.eth.Contract
instance, or the abi
and address
of your contract
\nReturns web3.eth.Contract
object enhanced with .track()
functions for methods and events.
\nContract methods myContract.events.MyEvent.track([options])
Track a contract event.
\nParameters
\n\noptions
- Object
(optional): web3 filter options object to limit the number of events based on a block number range, or indexed filters\nfilter
- Object
(optional): Lets you filter events by indexed parameters, e.g. {filter: {myNumber: [12,13]}}
means all events where "myNumber"
is 12
or 13
. \nfromBlock
- Number
(optional): The block number from which to get events on. \ntoBlock
- Number
(optional): The block number to get events up to (Defaults to "latest"
) \ntopics
- Array
(optional): This allows you to manually set the topics for the event filter. If given the filter property and event signature, (topic[0]
) will not be set automatically. \n \n \n \nReturns RxJS Observable
which will stream the event returnValues
.
\nmyContract.methods.myMethod([param1[, ...]]).track([callOptions])
Track a constant function / contract state variable on each block mined, or depending on the callInterval
option used during Subspace initialization.
\nParameters
\n\ncallOptions
- Object
(optional): The options used for calling.\nfrom
- String
(optional): The address the call “transaction” should be made from. \ngasPrice
- String
(optional): The gas price in wei to use for this call “transaction”. \ngas
- Number
(optional): The maximum gas provided for this call “transaction” (gas limit). \n \n \n \nReturns RxJS Observable
which will stream the function / variable values. Data type will depend on the contract function invoked.
\nmyContract.trackBalance(address [, tokenAddress])
Track a contract’s balance changes for an address on each block mined, or depending on the callInterval
option used during Subspace initialization.
\nParameters
\n\naddress
- String
: The address to get the balance of. \ntokenAddress
- String
(optional): If you want to track the balance for an ERC20 contract, here you can specify the token address. Otherwise, Only ETH balances will be returned. \n \nReturns RxJS Observable
which will stream a string containing the address balance.
\nBlocks, gas price and block time trackBlock()
Receive the block information for any new block. It’s the reactive equivalent to web3.eth.getBlock("latest")
.
\nReturns RxJS Observable
which will stream a block object for the latest block received
\ntrackBlockNumber()
Returns the latest block number. It’s the reactive equivalent to web3.eth.getBlockNumber
.
\nReturns RxJS Observable
with the latest block number
\ntrackGasPrice()
Returns the current gas price oracle. It’s the reactive equivalent to web3.eth.getGasPrice
.
\nReturns RxJS Observable
with the average gas price in wei.
\ntrackAverageBlocktime()
Average block time of the last 10 blocks.
\nReturns RxJS Observable
with the moving average block time of the last 10 blocks. The time is returned in milliseconds:
\nLow level API for data tracking These are used in case you don’t want to decorate your web3 contract objects, or if you want to track the balance for an specific address.
\ntrackEvent(contractObject, eventName [, options])
Track a contract event.
\nParameters
\n\ncontractObject
- web3.eth.Contract
: An already initialized contract object pointing to an address and containing a valid ABI. \neventName
- String
: The name of the event to subscribe. \noptions
- Object
(optional): web3 filter options object to limit the number of events based on a block number range, or indexed filters\nfilter
- Object
(optional): Lets you filter events by indexed parameters, e.g. {filter: {myNumber: [12,13]}}
means all events where "myNumber"
is 12
or 13
. \nfromBlock
- Number
(optional): The block number from which to get events on. \ntoBlock
- Number
(optional): The block number to get events up to (Defaults to "latest"
) \ntopics
- Array
(optional): This allows you to manually set the topics for the event filter. If given the filter property and event signature, (topic[0]
) will not be set automatically. \n \n \n \nReturns RxJS Observable
which will stream the event returnValues
.
\ntrackProperty(contractObject, functionName [, functionArgs] [, callOptions])
Track a constant function / contract state variable on each block mined, or depending on the callInterval
option used during Subspace initialization.
\nParameters
\n\ncontractObject
- web3.eth.Contract
: An already initialized contract object pointing to an address and containing a valid ABI. \nfunctionName
- String
: Name of the function or variable whose values will be tracked. \nfunctionArgs
- Array
(optional): Array of arguments that the tracked function receives \ncallOptions
- Object
(optional): The options used for calling.\nfrom
- String
(optional): The address the call “transaction” should be made from. \ngasPrice
- String
(optional): The gas price in wei to use for this call “transaction”. \ngas
- Number
(optional): The maximum gas provided for this call “transaction” (gas limit). \n \n \n \nReturns RxJS Observable
which will stream the function / variable values. Data type will depend on the contract function invoked.
\ntrackBalance(address [, tokenAddress])
Track balance changes for an address on each block mined, or depending on the callInterval
option used during Subspace initialization.
\nParameters
\n\naddress
- String
: The address to get the balance of. \ntokenAddress
- String
(optional): If you want to track the balance for an ERC20 contract, here you can specify the token address. Otherwise, Only ETH balances will be returned. \n \nReturns RxJS Observable
which will stream a string containing the address balance.
\ntrackLogs(options [, abi])
Tracks incoming logs, filtered by the given options.
\nParameters
\n\noptions
- Object
(optional): web3 filter options object to limit the number of logs\naddress
- String|Array
(optional): An address or a list of addresses to only get logs from particular account(s). \nfromBlock
- Number
(optional): The block number from which to get events on. \ntopics
- Array
(optional): An array of values which must each appear in the log entries. The order is important, if you want to leave topics out use null, e.g. [null, ‘0x00…’]. You can also pass another array for each topic with options for that topic e.g. [null, [‘option1’, ‘option2’]]. \n \n \nabi
- Array
(optional): Array containing the ABI for the inputs of the logs received. It will automatically decode the logs using this ABI instead of returning the hexadecimal data. \n \nReturns RxJS Observable
which will stream the logs. If the inputs ABI is included in the call, the logs will be automatically decoded.
\n","site":{"data":{}},"excerpt":"","more":"API General new Subspace(web3Provider [, options])
Constructor.
\nParameters
\n\nweb3Provider
- Object
: a valid web3 provider. \noptions
- Object
(optional): Options used to initialize Subspace\ndbFilename
- String
(optional): Name of the database where the information will be stored (default 'subspace.db'
) \ncallInterval
- Number
(optional): - Interval of time in milliseconds to poll a contract/address to determine changes in state or balance (default: undefined
. Obtains data every block. If using a HttpProvider, the default is: 1000
) \nrefreshLastNBlocks
- Ignores last N blocks (from current block), stored in the local db and refresh them via a web3 subscription. Useful for possible reorgs (default: 12), \ndisableSubscriptions
- Subspace by default will attempt to use websocket subscriptions if the current provider supports them, otherwise it will use polling because it asumes the provider is an HttpProvider. This functionality can be disabled by passing true to this option. (default: undefined) \n \n \n \ninit()
Initializes Subspace
\nReturns Promise
that once it’s resolved, will mean that Subspace is available to use
\nclose()
Dispose and perform the cleanup necessary to remove the internal subscriptions and interval timers created by Subspace during its normal execution.
\ncontract(instance|{abi,address})
Adds a track
method to the web3 contract objects. You can obtain this functionality by passing a web3.eth.Contract
instance, or the abi
and address
of your contract
\nReturns web3.eth.Contract
object enhanced with .track()
functions for methods and events.
\nContract methods myContract.events.MyEvent.track([options])
Track a contract event.
\nParameters
\n\noptions
- Object
(optional): web3 filter options object to limit the number of events based on a block number range, or indexed filters\nfilter
- Object
(optional): Lets you filter events by indexed parameters, e.g. {filter: {myNumber: [12,13]}}
means all events where "myNumber"
is 12
or 13
. \nfromBlock
- Number
(optional): The block number from which to get events on. \ntoBlock
- Number
(optional): The block number to get events up to (Defaults to "latest"
) \ntopics
- Array
(optional): This allows you to manually set the topics for the event filter. If given the filter property and event signature, (topic[0]
) will not be set automatically. \n \n \n \nReturns RxJS Observable
which will stream the event returnValues
.
\nmyContract.methods.myMethod([param1[, ...]]).track([callOptions])
Track a constant function / contract state variable on each block mined, or depending on the callInterval
option used during Subspace initialization.
\nParameters
\n\ncallOptions
- Object
(optional): The options used for calling.\nfrom
- String
(optional): The address the call “transaction” should be made from. \ngasPrice
- String
(optional): The gas price in wei to use for this call “transaction”. \ngas
- Number
(optional): The maximum gas provided for this call “transaction” (gas limit). \n \n \n \nReturns RxJS Observable
which will stream the function / variable values. Data type will depend on the contract function invoked.
\nmyContract.trackBalance(address [, tokenAddress])
Track a contract’s balance changes for an address on each block mined, or depending on the callInterval
option used during Subspace initialization.
\nParameters
\n\naddress
- String
: The address to get the balance of. \ntokenAddress
- String
(optional): If you want to track the balance for an ERC20 contract, here you can specify the token address. Otherwise, Only ETH balances will be returned. \n \nReturns RxJS Observable
which will stream a string containing the address balance.
\nBlocks, gas price and block time trackBlock()
Receive the block information for any new block. It’s the reactive equivalent to web3.eth.getBlock("latest")
.
\nReturns RxJS Observable
which will stream a block object for the latest block received
\ntrackBlockNumber()
Returns the latest block number. It’s the reactive equivalent to web3.eth.getBlockNumber
.
\nReturns RxJS Observable
with the latest block number
\ntrackGasPrice()
Returns the current gas price oracle. It’s the reactive equivalent to web3.eth.getGasPrice
.
\nReturns RxJS Observable
with the average gas price in wei.
\ntrackAverageBlocktime()
Average block time of the last 10 blocks.
\nReturns RxJS Observable
with the moving average block time of the last 10 blocks. The time is returned in milliseconds:
\nLow level API for data tracking These are used in case you don’t want to decorate your web3 contract objects, or if you want to track the balance for an specific address.
\ntrackEvent(contractObject, eventName [, options])
Track a contract event.
\nParameters
\n\ncontractObject
- web3.eth.Contract
: An already initialized contract object pointing to an address and containing a valid ABI. \neventName
- String
: The name of the event to subscribe. \noptions
- Object
(optional): web3 filter options object to limit the number of events based on a block number range, or indexed filters\nfilter
- Object
(optional): Lets you filter events by indexed parameters, e.g. {filter: {myNumber: [12,13]}}
means all events where "myNumber"
is 12
or 13
. \nfromBlock
- Number
(optional): The block number from which to get events on. \ntoBlock
- Number
(optional): The block number to get events up to (Defaults to "latest"
) \ntopics
- Array
(optional): This allows you to manually set the topics for the event filter. If given the filter property and event signature, (topic[0]
) will not be set automatically. \n \n \n \nReturns RxJS Observable
which will stream the event returnValues
.
\ntrackProperty(contractObject, functionName [, functionArgs] [, callOptions])
Track a constant function / contract state variable on each block mined, or depending on the callInterval
option used during Subspace initialization.
\nParameters
\n\ncontractObject
- web3.eth.Contract
: An already initialized contract object pointing to an address and containing a valid ABI. \nfunctionName
- String
: Name of the function or variable whose values will be tracked. \nfunctionArgs
- Array
(optional): Array of arguments that the tracked function receives \ncallOptions
- Object
(optional): The options used for calling.\nfrom
- String
(optional): The address the call “transaction” should be made from. \ngasPrice
- String
(optional): The gas price in wei to use for this call “transaction”. \ngas
- Number
(optional): The maximum gas provided for this call “transaction” (gas limit). \n \n \n \nReturns RxJS Observable
which will stream the function / variable values. Data type will depend on the contract function invoked.
\ntrackBalance(address [, tokenAddress])
Track balance changes for an address on each block mined, or depending on the callInterval
option used during Subspace initialization.
\nParameters
\n\naddress
- String
: The address to get the balance of. \ntokenAddress
- String
(optional): If you want to track the balance for an ERC20 contract, here you can specify the token address. Otherwise, Only ETH balances will be returned. \n \nReturns RxJS Observable
which will stream a string containing the address balance.
\ntrackLogs(options [, abi])
Tracks incoming logs, filtered by the given options.
\nParameters
\n\noptions
- Object
(optional): web3 filter options object to limit the number of logs\naddress
- String|Array
(optional): An address or a list of addresses to only get logs from particular account(s). \nfromBlock
- Number
(optional): The block number from which to get events on. \ntopics
- Array
(optional): An array of values which must each appear in the log entries. The order is important, if you want to leave topics out use null, e.g. [null, ‘0x00…’]. You can also pass another array for each topic with options for that topic e.g. [null, [‘option1’, ‘option2’]]. \n \n \nabi
- Array
(optional): Array containing the ABI for the inputs of the logs received. It will automatically decode the logs using this ABI instead of returning the hexadecimal data. \n \nReturns RxJS Observable
which will stream the logs. If the inputs ABI is included in the call, the logs will be automatically decoded.
\n"},{"_content":"# apollo-client\nTo use **Subspace** with `apollo-client`, a composed `ApolloLink` must be defined using the `apollo-link-rxjs` and `reactive-graphl` npm packages. Notice that the `addTypename` option of `InMemoryCache` must be set `false`.\n\n```js\nimport { ApolloClient } from \"apollo-client\";\nimport { InMemoryCache } from \"apollo-cache-inmemory\";\nimport { ApolloLink } from \"apollo-link\";\nimport { rxjs as rxJsLink } from \"apollo-link-rxjs\";\nimport { graphql } from \"reactive-graphql\";\n\nconst client = new ApolloClient({\n // If addTypename:true, the query will fail due to __typename\n // being added to the schema. reactive-graphql does not\n // support __typename at this moment.\n cache: new InMemoryCache({ addTypename: false }),\n link: ApolloLink.from([\n rxJsLink({}),\n new ApolloLink(operation => graphql(schema, operation.query))\n ])\n});\n```\n\n### Example\n\n```js{35-45}\nimport { ApolloClient } from \"apollo-client\";\nimport { InMemoryCache } from \"apollo-cache-inmemory\";\nimport { ApolloLink } from \"apollo-link\";\nimport { rxjs as rxJsLink } from \"apollo-link-rxjs\";\nimport { graphql } from \"reactive-graphql\";\n\n// ...\n\n// Initialize Subspace\nconst subspace = new Subspace(web3.currentProvider); // Use a valid provider (geth, parity, infura...)\nawait subspace.init();\n\nconst MyContractInstance = ...; // TODO: obtain a web3.eth.contract instance\n\nconst typeDefs = `\n type MyEvent {\n someValue: Int\n anotherValue: String\n }\n type Query {\n myEvents: MyEvent!\n }\n`;\n\nconst resolvers = {\n Query: {\n myEvents: () => {\n return subspace.trackEvent(MyContractInstance, 'MyEvent', {filter: {}, fromBlock: 1})\n }\n }\n};\n\nconst schema = makeExecutableSchema({ typeDefs, resolvers });\n\nconst client = new ApolloClient({\n // If addTypename:true, the query will fail due to __typename\n // being added to the schema. reactive-graphql does not\n // support __typename at this moment.\n cache: new InMemoryCache({ addTypename: false }),\n link: ApolloLink.from([\n rxJsLink({}),\n new ApolloLink(operation => graphql(schema, operation.query))\n ])\n});\n```\n\n\n\nUsing react-apollo\nA practical example can also be found in `examples/react-apollo`.\n
","source":"apollo-client.md","raw":"# apollo-client\nTo use **Subspace** with `apollo-client`, a composed `ApolloLink` must be defined using the `apollo-link-rxjs` and `reactive-graphl` npm packages. Notice that the `addTypename` option of `InMemoryCache` must be set `false`.\n\n```js\nimport { ApolloClient } from \"apollo-client\";\nimport { InMemoryCache } from \"apollo-cache-inmemory\";\nimport { ApolloLink } from \"apollo-link\";\nimport { rxjs as rxJsLink } from \"apollo-link-rxjs\";\nimport { graphql } from \"reactive-graphql\";\n\nconst client = new ApolloClient({\n // If addTypename:true, the query will fail due to __typename\n // being added to the schema. reactive-graphql does not\n // support __typename at this moment.\n cache: new InMemoryCache({ addTypename: false }),\n link: ApolloLink.from([\n rxJsLink({}),\n new ApolloLink(operation => graphql(schema, operation.query))\n ])\n});\n```\n\n### Example\n\n```js{35-45}\nimport { ApolloClient } from \"apollo-client\";\nimport { InMemoryCache } from \"apollo-cache-inmemory\";\nimport { ApolloLink } from \"apollo-link\";\nimport { rxjs as rxJsLink } from \"apollo-link-rxjs\";\nimport { graphql } from \"reactive-graphql\";\n\n// ...\n\n// Initialize Subspace\nconst subspace = new Subspace(web3.currentProvider); // Use a valid provider (geth, parity, infura...)\nawait subspace.init();\n\nconst MyContractInstance = ...; // TODO: obtain a web3.eth.contract instance\n\nconst typeDefs = `\n type MyEvent {\n someValue: Int\n anotherValue: String\n }\n type Query {\n myEvents: MyEvent!\n }\n`;\n\nconst resolvers = {\n Query: {\n myEvents: () => {\n return subspace.trackEvent(MyContractInstance, 'MyEvent', {filter: {}, fromBlock: 1})\n }\n }\n};\n\nconst schema = makeExecutableSchema({ typeDefs, resolvers });\n\nconst client = new ApolloClient({\n // If addTypename:true, the query will fail due to __typename\n // being added to the schema. reactive-graphql does not\n // support __typename at this moment.\n cache: new InMemoryCache({ addTypename: false }),\n link: ApolloLink.from([\n rxJsLink({}),\n new ApolloLink(operation => graphql(schema, operation.query))\n ])\n});\n```\n\n\n\nUsing react-apollo\nA practical example can also be found in `examples/react-apollo`.\n
","date":"2020-03-19T18:30:40.090Z","updated":"2020-03-19T18:28:50.730Z","path":"apollo-client.html","title":"","comments":1,"layout":"page","_id":"ck7z3hckw00025cbn4pfweo5k","content":"apollo-client To use Subspace with apollo-client
, a composed ApolloLink
must be defined using the apollo-link-rxjs
and reactive-graphl
npm packages. Notice that the addTypename
option of InMemoryCache
must be set false
.
\n\n\nimport { ApolloClient } from "apollo-client";\nimport { InMemoryCache } from "apollo-cache-inmemory";\nimport { ApolloLink } from "apollo-link";\nimport { rxjs as rxJsLink } from "apollo-link-rxjs";\nimport { graphql } from "reactive-graphql";\n\nconst client = new ApolloClient({\n // If addTypename:true, the query will fail due to __typename\n // being added to the schema. reactive-graphql does not\n // support __typename at this moment.\n cache: new InMemoryCache({ addTypename: false }),\n link: ApolloLink.from([\n rxJsLink({}),\n new ApolloLink(operation => graphql(schema, operation.query))\n ])\n});\n
\n\n\n\nExample \n\nimport { ApolloClient } from "apollo-client";\nimport { InMemoryCache } from "apollo-cache-inmemory";\nimport { ApolloLink } from "apollo-link";\nimport { rxjs as rxJsLink } from "apollo-link-rxjs";\nimport { graphql } from "reactive-graphql";\n\n// ...\n\n// Initialize Subspace\nconst subspace = new Subspace(web3.currentProvider); // Use a valid provider (geth, parity, infura...)\nawait subspace.init();\n\nconst MyContractInstance = ...; // TODO: obtain a web3.eth.contract instance\n\nconst typeDefs = `\n type MyEvent {\n someValue: Int\n anotherValue: String\n }\n type Query {\n myEvents: MyEvent!\n }\n`;\n\nconst resolvers = {\n Query: {\n myEvents: () => {\n return subspace.trackEvent(MyContractInstance, 'MyEvent', {filter: {}, fromBlock: 1})\n }\n }\n};\n\nconst schema = makeExecutableSchema({ typeDefs, resolvers });\n\nconst client = new ApolloClient({\n // If addTypename:true, the query will fail due to __typename\n // being added to the schema. reactive-graphql does not\n // support __typename at this moment.\n cache: new InMemoryCache({ addTypename: false }),\n link: ApolloLink.from([\n rxJsLink({}),\n new ApolloLink(operation => graphql(schema, operation.query))\n ])\n});\n
\n\n\n\n\nUsing react-apollo\nA practical example can also be found in `examples/react-apollo`.\n
","site":{"data":{}},"excerpt":"","more":"apollo-client To use Subspace with apollo-client
, a composed ApolloLink
must be defined using the apollo-link-rxjs
and reactive-graphl
npm packages. Notice that the addTypename
option of InMemoryCache
must be set false
.
\n\n\nimport { ApolloClient } from "apollo-client";\nimport { InMemoryCache } from "apollo-cache-inmemory";\nimport { ApolloLink } from "apollo-link";\nimport { rxjs as rxJsLink } from "apollo-link-rxjs";\nimport { graphql } from "reactive-graphql";\n\nconst client = new ApolloClient({\n // If addTypename:true, the query will fail due to __typename\n // being added to the schema. reactive-graphql does not\n // support __typename at this moment.\n cache: new InMemoryCache({ addTypename: false }),\n link: ApolloLink.from([\n rxJsLink({}),\n new ApolloLink(operation => graphql(schema, operation.query))\n ])\n});\n
\n\n\n\nExample \n\nimport { ApolloClient } from "apollo-client";\nimport { InMemoryCache } from "apollo-cache-inmemory";\nimport { ApolloLink } from "apollo-link";\nimport { rxjs as rxJsLink } from "apollo-link-rxjs";\nimport { graphql } from "reactive-graphql";\n\n// ...\n\n// Initialize Subspace\nconst subspace = new Subspace(web3.currentProvider); // Use a valid provider (geth, parity, infura...)\nawait subspace.init();\n\nconst MyContractInstance = ...; // TODO: obtain a web3.eth.contract instance\n\nconst typeDefs = `\n type MyEvent {\n someValue: Int\n anotherValue: String\n }\n type Query {\n myEvents: MyEvent!\n }\n`;\n\nconst resolvers = {\n Query: {\n myEvents: () => {\n return subspace.trackEvent(MyContractInstance, 'MyEvent', {filter: {}, fromBlock: 1})\n }\n }\n};\n\nconst schema = makeExecutableSchema({ typeDefs, resolvers });\n\nconst client = new ApolloClient({\n // If addTypename:true, the query will fail due to __typename\n // being added to the schema. reactive-graphql does not\n // support __typename at this moment.\n cache: new InMemoryCache({ addTypename: false }),\n link: ApolloLink.from([\n rxJsLink({}),\n new ApolloLink(operation => graphql(schema, operation.query))\n ])\n});\n
\n\n\n\n\nUsing react-apollo\nA practical example can also be found in `examples/react-apollo`.\n
"},{"title":"Getting Started","_content":"# Getting Started\n\n## Installation\n**Subspace** can be used in browser, node and native script environments. To get started install the package `@embarklabs/subspace` using `npm` or `yarn` by executing this command in your project directory:\n```bash\n# Using npm\nnpm install --save @embarklabs/subspace\n\n# Using yarn\nyarn add @embarklabs/subspace \n```\n\n## Importing the library\n\n```js\n// ESM (might require babel / browserify)\nimport Subspace from '@embarklabs/subspace'; \n\n// CommonJS\nconst Subspace = require('@embarklabs/subspace'); \n```\n\n\n## Connecting to a web3 provider\nTo interact with the EVM, **Subspace** requires a valid Web3 provider. \n\n```js\nconst subspace = new Subspace(web3.currentProvider);\nawait subspace.init();\n```\n\nIn addition to the provider, `Subspace` also accepts an `options` object with settings that can change its behavior:\n- `dbFilename` - Name of the database where the information will be stored (default `'subspace.db'`)\n- `callInterval` - Interval of time in milliseconds to query a contract/address to determine changes in state or balance (default: `undefined`. Obtains data every block).\n- `refreshLastNBlocks` - Ignores last N blocks (from current block), stored in the local db and refresh them via a web3 subscription. Useful for possible reorgs (default: 12),\n- `disableSubscriptions` - Subspace by default will attempt to use websocket subscriptions if the current provider supports them, otherwise it will use polling because it asumes the provider is an HttpProvider. This functionality can be disabled by passing true to this option. (default: undefined)\n\n\n## Enhancing your contract objects\nSubspace provides a method to enhance your web3 Contract objects: `subspace.contract(instance|{abi,address})`. Calling this method will return a new contract object decorated with a `.track()` method for your contract view functions and events.\n\n```js\nconst myRxContract = subspace.contract(myContractInstance);\n```\n\nYou can also instantiate a contract directly by passing the contract ABI and its address:\n\n```js\nconst myRXContract = subspace.contract({abi: ...., address: '0x1234...CDEF'})\n```\n\n## Reacting to data\nOnce it's initialized, you can use **Subspace**'s methods to track the contract state, events and balances. These functions return RxJS Observables which you can subscribe to, and obtain and transform the observed data via operators.\n\n\nWhat is an Observable?\nThe `Observable` type can be used to model push-based data sources such as DOM events, timer intervals, and sockets. In addition, observables are:\n- Compositional: Observables can be composed with higher-order combinators.\n- Lazy: Observables do not start emitting data until an observer has subscribed.\n
\n\n#### Further read\n- [RxJS Observables](https://rxjs-dev.firebaseapp.com/guide/observable)\n\n## Tracking state\nYou can track changes to a contract state variable, by specifying the view function and arguments to call and query the contract. \n```js\nconst stateObservable$ = Contract.methods.functionName(functionArgs).track();\n```\n\nTracking the public variables of a contract\nState variables implicity create a `view` function when they're defined as `public`. The `functionName` would be the same as the variable name, and `functionArgs` will have a value when the type is a `mapping` or `array` (since these require an index value to query them).\n
\n\nExample:\n\n```js\nconst productTitle$ = ProductList.methods.products(0).track().map(\"title\");\nproductTitle$.subscribe((title) => console.log(\"product title is \" + title));\n\n\n// Alternative using Subspace low level API\nconst producTitle$ = subspace.trackProperty(ProductList, \"products\", [0], {from: web3.eth.defaultAccount});\n...\n```\n\nThe subscription will be triggered whenever the title changes\n\n## Tracking events\nYou can track events and react to their returned values.\n```js\nconst eventObservable$ = Contract.event.eventName().track();\n```\n\nExample:\n\n```js\nconst rating$ = Product.events.Rating().track().map(\"rating\")).pipe(map(x => parseInt(x)));\nrating$.subscribe((rating) => console.log(\"rating received: \" + rating));\n\n\n// Alternative using Subspace low level API\nconst rating$ = subspace.trackEvent(Product, \"Rating\", {fromBlock: 0});\n...\n```\n\n**Event Sourcing**\n\nYou can easily do event sourcing with subspace.\n\nFor e.g: if you needed to get the average rating of the last 5 events:\n\n```js\nimport { $average, $latest } from \"@embarklabs/subspace\";\n\nconst rating$ = Product.events.Rating().track().map(\"rating\")).pipe(map(x => parseInt(x)));\n\nrating$.pipe($latest(5), $average()).subscribe((rating) => {\n console.log(\"average rating of the last 5 events is \" + rating)\n});\n```\n\n## Tracking balances\nYou can also track changes in both ETH and ERC20 token balances for each mined block or time interval depending on the `callInterval` configured. \n\nTracking ETH balance in an address:\n\n```js\nconst address = \"0x0001020304050607080900010203040506070809\";\n\nsubspace.trackBalance(address).subscribe((balance) => {\n console.log(\"ETH balance is \", balance)\n});\n```\n\nTracking ETH balance in a Contract:\n\n```js\nContract.trackBalance().subscribe((balance) => {\n console.log(\"ETH balance is \", balance)\n});\n```\n\nTracking an ERC20 balance in a Contract:\n\n```js\nconst tokenAddress = \"0x744d70fdbe2ba4cf95131626614a1763df805b9e\"; // SNT Address\n\nconst myBalanceObservable$ = Contract.trackBalance(tokenAddress);\n```\n\n\nBalances are returned as a string containing the value in *wei*.\n
\n\n\n\n## Getting block data, gas prices and block time\nSubspace also provides a way to always receive the latest block object: \n```js\nsubspace.trackBlock().subscribe(block => {\n console.log(\"The latest block data: \", block);\n});\n```\n\nIf you don't need all the block information, but just the block number, you can use instead:\n```js\nsubspace.trackBlockNumber().subscribe(blockNumber => {\n console.log(\"The latest block number: \", blockNumber);\n});\n```\n\nYou can also access the average block time. This takes in account only the last 10 blocks:\n\n```js\nsubspace.trackAverageBlocktime().subscribe(blocktimeMS => {\n console.log(\"The average block time in milliseconds is: \", blocktimeMS);\n});\n```\n\nFinally, if you want to obtain the most up to date median gas price:\n\n```js\nsubspace.trackGasPrice().subscribe(gasPrice => {\n console.log(\"Gas price in wei\", gasPrice);\n});\n```\n\n\n## Subscriptions\nOnce you have an `Observable`, you may receive a stream of data by creating a subscription. Subscriptions are triggered each time an observable emits a new value. These subscription receive a callback that must have a parameter which represents the value received from the observable (a contract state variable, an event, or the balance of an address); and they return an object representing the subscription.\n\nSubscriptions can be disposed by executing the method `unsubscribe()` liberating the resource held by it:\n\n```js\nconst myBalanceObservable$ = subspace.trackBalance(address, tokenAddress);\nconst subscription = myBalanceObservable$.subscribe(value => { \n console.log(\"The balance is: \", value); \n});\n\n// ...\n\nsubscription.unsubscribe();\n```\n\n#### Further read\n- [RxJS Subscriptions](https://rxjs-dev.firebaseapp.com/guide/subscription)\n\n## Cleanup\nIf **Subspace** is not needed anymore, you need can invoke `close()` to dispose and perform the cleanup necessary to remove the internal subscriptions and interval timers created by **Subspace** during its normal execution, thus avoiding any potential memory leak.\n\n```\nsubspace.close();\n```\n\nWhat about subscriptions created with our observables?\nAny subscription created via the tracking methods must be unsubscribed manually (in the current version).\n
\n\n","source":"getting-started.md","raw":"\n---\ntitle: Getting Started\n---\n# Getting Started\n\n## Installation\n**Subspace** can be used in browser, node and native script environments. To get started install the package `@embarklabs/subspace` using `npm` or `yarn` by executing this command in your project directory:\n```bash\n# Using npm\nnpm install --save @embarklabs/subspace\n\n# Using yarn\nyarn add @embarklabs/subspace \n```\n\n## Importing the library\n\n```js\n// ESM (might require babel / browserify)\nimport Subspace from '@embarklabs/subspace'; \n\n// CommonJS\nconst Subspace = require('@embarklabs/subspace'); \n```\n\n\n## Connecting to a web3 provider\nTo interact with the EVM, **Subspace** requires a valid Web3 provider. \n\n```js\nconst subspace = new Subspace(web3.currentProvider);\nawait subspace.init();\n```\n\nIn addition to the provider, `Subspace` also accepts an `options` object with settings that can change its behavior:\n- `dbFilename` - Name of the database where the information will be stored (default `'subspace.db'`)\n- `callInterval` - Interval of time in milliseconds to query a contract/address to determine changes in state or balance (default: `undefined`. Obtains data every block).\n- `refreshLastNBlocks` - Ignores last N blocks (from current block), stored in the local db and refresh them via a web3 subscription. Useful for possible reorgs (default: 12),\n- `disableSubscriptions` - Subspace by default will attempt to use websocket subscriptions if the current provider supports them, otherwise it will use polling because it asumes the provider is an HttpProvider. This functionality can be disabled by passing true to this option. (default: undefined)\n\n\n## Enhancing your contract objects\nSubspace provides a method to enhance your web3 Contract objects: `subspace.contract(instance|{abi,address})`. Calling this method will return a new contract object decorated with a `.track()` method for your contract view functions and events.\n\n```js\nconst myRxContract = subspace.contract(myContractInstance);\n```\n\nYou can also instantiate a contract directly by passing the contract ABI and its address:\n\n```js\nconst myRXContract = subspace.contract({abi: ...., address: '0x1234...CDEF'})\n```\n\n## Reacting to data\nOnce it's initialized, you can use **Subspace**'s methods to track the contract state, events and balances. These functions return RxJS Observables which you can subscribe to, and obtain and transform the observed data via operators.\n\n\nWhat is an Observable?\nThe `Observable` type can be used to model push-based data sources such as DOM events, timer intervals, and sockets. In addition, observables are:\n- Compositional: Observables can be composed with higher-order combinators.\n- Lazy: Observables do not start emitting data until an observer has subscribed.\n
\n\n#### Further read\n- [RxJS Observables](https://rxjs-dev.firebaseapp.com/guide/observable)\n\n## Tracking state\nYou can track changes to a contract state variable, by specifying the view function and arguments to call and query the contract. \n```js\nconst stateObservable$ = Contract.methods.functionName(functionArgs).track();\n```\n\nTracking the public variables of a contract\nState variables implicity create a `view` function when they're defined as `public`. The `functionName` would be the same as the variable name, and `functionArgs` will have a value when the type is a `mapping` or `array` (since these require an index value to query them).\n
\n\nExample:\n\n```js\nconst productTitle$ = ProductList.methods.products(0).track().map(\"title\");\nproductTitle$.subscribe((title) => console.log(\"product title is \" + title));\n\n\n// Alternative using Subspace low level API\nconst producTitle$ = subspace.trackProperty(ProductList, \"products\", [0], {from: web3.eth.defaultAccount});\n...\n```\n\nThe subscription will be triggered whenever the title changes\n\n## Tracking events\nYou can track events and react to their returned values.\n```js\nconst eventObservable$ = Contract.event.eventName().track();\n```\n\nExample:\n\n```js\nconst rating$ = Product.events.Rating().track().map(\"rating\")).pipe(map(x => parseInt(x)));\nrating$.subscribe((rating) => console.log(\"rating received: \" + rating));\n\n\n// Alternative using Subspace low level API\nconst rating$ = subspace.trackEvent(Product, \"Rating\", {fromBlock: 0});\n...\n```\n\n**Event Sourcing**\n\nYou can easily do event sourcing with subspace.\n\nFor e.g: if you needed to get the average rating of the last 5 events:\n\n```js\nimport { $average, $latest } from \"@embarklabs/subspace\";\n\nconst rating$ = Product.events.Rating().track().map(\"rating\")).pipe(map(x => parseInt(x)));\n\nrating$.pipe($latest(5), $average()).subscribe((rating) => {\n console.log(\"average rating of the last 5 events is \" + rating)\n});\n```\n\n## Tracking balances\nYou can also track changes in both ETH and ERC20 token balances for each mined block or time interval depending on the `callInterval` configured. \n\nTracking ETH balance in an address:\n\n```js\nconst address = \"0x0001020304050607080900010203040506070809\";\n\nsubspace.trackBalance(address).subscribe((balance) => {\n console.log(\"ETH balance is \", balance)\n});\n```\n\nTracking ETH balance in a Contract:\n\n```js\nContract.trackBalance().subscribe((balance) => {\n console.log(\"ETH balance is \", balance)\n});\n```\n\nTracking an ERC20 balance in a Contract:\n\n```js\nconst tokenAddress = \"0x744d70fdbe2ba4cf95131626614a1763df805b9e\"; // SNT Address\n\nconst myBalanceObservable$ = Contract.trackBalance(tokenAddress);\n```\n\n\nBalances are returned as a string containing the value in *wei*.\n
\n\n\n\n## Getting block data, gas prices and block time\nSubspace also provides a way to always receive the latest block object: \n```js\nsubspace.trackBlock().subscribe(block => {\n console.log(\"The latest block data: \", block);\n});\n```\n\nIf you don't need all the block information, but just the block number, you can use instead:\n```js\nsubspace.trackBlockNumber().subscribe(blockNumber => {\n console.log(\"The latest block number: \", blockNumber);\n});\n```\n\nYou can also access the average block time. This takes in account only the last 10 blocks:\n\n```js\nsubspace.trackAverageBlocktime().subscribe(blocktimeMS => {\n console.log(\"The average block time in milliseconds is: \", blocktimeMS);\n});\n```\n\nFinally, if you want to obtain the most up to date median gas price:\n\n```js\nsubspace.trackGasPrice().subscribe(gasPrice => {\n console.log(\"Gas price in wei\", gasPrice);\n});\n```\n\n\n## Subscriptions\nOnce you have an `Observable`, you may receive a stream of data by creating a subscription. Subscriptions are triggered each time an observable emits a new value. These subscription receive a callback that must have a parameter which represents the value received from the observable (a contract state variable, an event, or the balance of an address); and they return an object representing the subscription.\n\nSubscriptions can be disposed by executing the method `unsubscribe()` liberating the resource held by it:\n\n```js\nconst myBalanceObservable$ = subspace.trackBalance(address, tokenAddress);\nconst subscription = myBalanceObservable$.subscribe(value => { \n console.log(\"The balance is: \", value); \n});\n\n// ...\n\nsubscription.unsubscribe();\n```\n\n#### Further read\n- [RxJS Subscriptions](https://rxjs-dev.firebaseapp.com/guide/subscription)\n\n## Cleanup\nIf **Subspace** is not needed anymore, you need can invoke `close()` to dispose and perform the cleanup necessary to remove the internal subscriptions and interval timers created by **Subspace** during its normal execution, thus avoiding any potential memory leak.\n\n```\nsubspace.close();\n```\n\nWhat about subscriptions created with our observables?\nAny subscription created via the tracking methods must be unsubscribed manually (in the current version).\n
\n\n","date":"2020-03-19T18:30:37.769Z","updated":"2020-03-19T18:28:50.738Z","path":"getting-started.html","comments":1,"layout":"page","_id":"ck7z3hcl300035cbn6eyxc67o","content":"Getting Started Installation Subspace can be used in browser, node and native script environments. To get started install the package @embarklabs/subspace
using npm
or yarn
by executing this command in your project directory:
\n\n\n# Using npm\nnpm install --save @embarklabs/subspace\n\n# Using yarn\nyarn add @embarklabs/subspace \n
\n\n\n\nImporting the library \n\n// ESM (might require babel / browserify)\nimport Subspace from '@embarklabs/subspace'; \n\n// CommonJS\nconst Subspace = require('@embarklabs/subspace'); \n
\n\n\n\nConnecting to a web3 provider To interact with the EVM, Subspace requires a valid Web3 provider.
\n\n\nconst subspace = new Subspace(web3.currentProvider);\nawait subspace.init();\n
\n\n\n\nIn addition to the provider, Subspace
also accepts an options
object with settings that can change its behavior:
\n\ndbFilename
- Name of the database where the information will be stored (default 'subspace.db'
) \ncallInterval
- Interval of time in milliseconds to query a contract/address to determine changes in state or balance (default: undefined
. Obtains data every block). \nrefreshLastNBlocks
- Ignores last N blocks (from current block), stored in the local db and refresh them via a web3 subscription. Useful for possible reorgs (default: 12), \ndisableSubscriptions
- Subspace by default will attempt to use websocket subscriptions if the current provider supports them, otherwise it will use polling because it asumes the provider is an HttpProvider. This functionality can be disabled by passing true to this option. (default: undefined) \n \nEnhancing your contract objects Subspace provides a method to enhance your web3 Contract objects: subspace.contract(instance|{abi,address})
. Calling this method will return a new contract object decorated with a .track()
method for your contract view functions and events.
\n\n\nconst myRxContract = subspace.contract(myContractInstance);\n
\n\n\n\nYou can also instantiate a contract directly by passing the contract ABI and its address:
\n\n\nconst myRXContract = subspace.contract({abi: ...., address: '0x1234...CDEF'})\n
\n\n\n\nReacting to data Once it’s initialized, you can use Subspace ‘s methods to track the contract state, events and balances. These functions return RxJS Observables which you can subscribe to, and obtain and transform the observed data via operators.
\n\nWhat is an Observable?\nThe `Observable` type can be used to model push-based data sources such as DOM events, timer intervals, and sockets. In addition, observables are:\n- Compositional: Observables can be composed with higher-order combinators.\n- Lazy: Observables do not start emitting data until an observer has subscribed.\n
\n\nFurther read \nTracking state You can track changes to a contract state variable, by specifying the view function and arguments to call and query the contract.
\n\n\nconst stateObservable$ = Contract.methods.functionName(functionArgs).track();\n
\n\n\n\nTracking the public variables of a contract\nState variables implicity create a `view` function when they're defined as `public`. The `functionName` would be the same as the variable name, and `functionArgs` will have a value when the type is a `mapping` or `array` (since these require an index value to query them).\n
\n\nExample:
\n\n\nconst productTitle$ = ProductList.methods.products(0).track().map("title");\nproductTitle$.subscribe((title) => console.log("product title is " + title));\n\n\n// Alternative using Subspace low level API\nconst producTitle$ = subspace.trackProperty(ProductList, "products", [0], {from: web3.eth.defaultAccount});\n...\n
\n\n\n\nThe subscription will be triggered whenever the title changes
\nTracking events You can track events and react to their returned values.
\n\n\nconst eventObservable$ = Contract.event.eventName().track();\n
\n\n\n\nExample:
\n\n\nconst rating$ = Product.events.Rating().track().map("rating")).pipe(map(x => parseInt(x)));\nrating$.subscribe((rating) => console.log("rating received: " + rating));\n\n\n// Alternative using Subspace low level API\nconst rating$ = subspace.trackEvent(Product, "Rating", {fromBlock: 0});\n...\n
\n\n\n\nEvent Sourcing
\nYou can easily do event sourcing with subspace.
\nFor e.g: if you needed to get the average rating of the last 5 events:
\n\n\nimport { $average, $latest } from "@embarklabs/subspace";\n\nconst rating$ = Product.events.Rating().track().map("rating")).pipe(map(x => parseInt(x)));\n\nrating$.pipe($latest(5), $average()).subscribe((rating) => {\n console.log("average rating of the last 5 events is " + rating)\n});\n
\n\n\n\nTracking balances You can also track changes in both ETH and ERC20 token balances for each mined block or time interval depending on the callInterval
configured.
\nTracking ETH balance in an address:
\n\n\nconst address = "0x0001020304050607080900010203040506070809";\n\nsubspace.trackBalance(address).subscribe((balance) => {\n console.log("ETH balance is ", balance)\n});\n
\n\n\n\nTracking ETH balance in a Contract:
\n\n\nContract.trackBalance().subscribe((balance) => {\n console.log("ETH balance is ", balance)\n});\n
\n\n\n\nTracking an ERC20 balance in a Contract:
\n\n\nconst tokenAddress = "0x744d70fdbe2ba4cf95131626614a1763df805b9e"; // SNT Address\n\nconst myBalanceObservable$ = Contract.trackBalance(tokenAddress);\n
\n\n\n\n\nBalances are returned as a string containing the value in *wei*.\n
\n\n\n\nGetting block data, gas prices and block time Subspace also provides a way to always receive the latest block object:
\n\n\nsubspace.trackBlock().subscribe(block => {\n console.log("The latest block data: ", block);\n});\n
\n\n\n\nIf you don’t need all the block information, but just the block number, you can use instead:
\n\n\nsubspace.trackBlockNumber().subscribe(blockNumber => {\n console.log("The latest block number: ", blockNumber);\n});\n
\n\n\n\nYou can also access the average block time. This takes in account only the last 10 blocks:
\n\n\nsubspace.trackAverageBlocktime().subscribe(blocktimeMS => {\n console.log("The average block time in milliseconds is: ", blocktimeMS);\n});\n
\n\n\n\nFinally, if you want to obtain the most up to date median gas price:
\n\n\nsubspace.trackGasPrice().subscribe(gasPrice => {\n console.log("Gas price in wei", gasPrice);\n});\n
\n\n\n\nSubscriptions Once you have an Observable
, you may receive a stream of data by creating a subscription. Subscriptions are triggered each time an observable emits a new value. These subscription receive a callback that must have a parameter which represents the value received from the observable (a contract state variable, an event, or the balance of an address); and they return an object representing the subscription.
\nSubscriptions can be disposed by executing the method unsubscribe()
liberating the resource held by it:
\n\n\nconst myBalanceObservable$ = subspace.trackBalance(address, tokenAddress);\nconst subscription = myBalanceObservable$.subscribe(value => { \n console.log("The balance is: ", value); \n});\n\n// ...\n\nsubscription.unsubscribe();\n
\n\n\n\nFurther read \nCleanup If Subspace is not needed anymore, you need can invoke close()
to dispose and perform the cleanup necessary to remove the internal subscriptions and interval timers created by Subspace during its normal execution, thus avoiding any potential memory leak.
\n\n\nsubspace.close();\n
\n\n\nWhat about subscriptions created with our observables?\nAny subscription created via the tracking methods must be unsubscribed manually (in the current version).\n
\n\n","site":{"data":{}},"excerpt":"","more":"Getting Started Installation Subspace can be used in browser, node and native script environments. To get started install the package @embarklabs/subspace
using npm
or yarn
by executing this command in your project directory:
\n\n\n# Using npm\nnpm install --save @embarklabs/subspace\n\n# Using yarn\nyarn add @embarklabs/subspace \n
\n\n\n\nImporting the library \n\n// ESM (might require babel / browserify)\nimport Subspace from '@embarklabs/subspace'; \n\n// CommonJS\nconst Subspace = require('@embarklabs/subspace'); \n
\n\n\n\nConnecting to a web3 provider To interact with the EVM, Subspace requires a valid Web3 provider.
\n\n\nconst subspace = new Subspace(web3.currentProvider);\nawait subspace.init();\n
\n\n\n\nIn addition to the provider, Subspace
also accepts an options
object with settings that can change its behavior:
\n\ndbFilename
- Name of the database where the information will be stored (default 'subspace.db'
) \ncallInterval
- Interval of time in milliseconds to query a contract/address to determine changes in state or balance (default: undefined
. Obtains data every block). \nrefreshLastNBlocks
- Ignores last N blocks (from current block), stored in the local db and refresh them via a web3 subscription. Useful for possible reorgs (default: 12), \ndisableSubscriptions
- Subspace by default will attempt to use websocket subscriptions if the current provider supports them, otherwise it will use polling because it asumes the provider is an HttpProvider. This functionality can be disabled by passing true to this option. (default: undefined) \n \nEnhancing your contract objects Subspace provides a method to enhance your web3 Contract objects: subspace.contract(instance|{abi,address})
. Calling this method will return a new contract object decorated with a .track()
method for your contract view functions and events.
\n\n\nconst myRxContract = subspace.contract(myContractInstance);\n
\n\n\n\nYou can also instantiate a contract directly by passing the contract ABI and its address:
\n\n\nconst myRXContract = subspace.contract({abi: ...., address: '0x1234...CDEF'})\n
\n\n\n\nReacting to data Once it’s initialized, you can use Subspace ‘s methods to track the contract state, events and balances. These functions return RxJS Observables which you can subscribe to, and obtain and transform the observed data via operators.
\n\nWhat is an Observable?\nThe `Observable` type can be used to model push-based data sources such as DOM events, timer intervals, and sockets. In addition, observables are:\n- Compositional: Observables can be composed with higher-order combinators.\n- Lazy: Observables do not start emitting data until an observer has subscribed.\n
\n\nFurther read \nTracking state You can track changes to a contract state variable, by specifying the view function and arguments to call and query the contract.
\n\n\nconst stateObservable$ = Contract.methods.functionName(functionArgs).track();\n
\n\n\n\nTracking the public variables of a contract\nState variables implicity create a `view` function when they're defined as `public`. The `functionName` would be the same as the variable name, and `functionArgs` will have a value when the type is a `mapping` or `array` (since these require an index value to query them).\n
\n\nExample:
\n\n\nconst productTitle$ = ProductList.methods.products(0).track().map("title");\nproductTitle$.subscribe((title) => console.log("product title is " + title));\n\n\n// Alternative using Subspace low level API\nconst producTitle$ = subspace.trackProperty(ProductList, "products", [0], {from: web3.eth.defaultAccount});\n...\n
\n\n\n\nThe subscription will be triggered whenever the title changes
\nTracking events You can track events and react to their returned values.
\n\n\nconst eventObservable$ = Contract.event.eventName().track();\n
\n\n\n\nExample:
\n\n\nconst rating$ = Product.events.Rating().track().map("rating")).pipe(map(x => parseInt(x)));\nrating$.subscribe((rating) => console.log("rating received: " + rating));\n\n\n// Alternative using Subspace low level API\nconst rating$ = subspace.trackEvent(Product, "Rating", {fromBlock: 0});\n...\n
\n\n\n\nEvent Sourcing
\nYou can easily do event sourcing with subspace.
\nFor e.g: if you needed to get the average rating of the last 5 events:
\n\n\nimport { $average, $latest } from "@embarklabs/subspace";\n\nconst rating$ = Product.events.Rating().track().map("rating")).pipe(map(x => parseInt(x)));\n\nrating$.pipe($latest(5), $average()).subscribe((rating) => {\n console.log("average rating of the last 5 events is " + rating)\n});\n
\n\n\n\nTracking balances You can also track changes in both ETH and ERC20 token balances for each mined block or time interval depending on the callInterval
configured.
\nTracking ETH balance in an address:
\n\n\nconst address = "0x0001020304050607080900010203040506070809";\n\nsubspace.trackBalance(address).subscribe((balance) => {\n console.log("ETH balance is ", balance)\n});\n
\n\n\n\nTracking ETH balance in a Contract:
\n\n\nContract.trackBalance().subscribe((balance) => {\n console.log("ETH balance is ", balance)\n});\n
\n\n\n\nTracking an ERC20 balance in a Contract:
\n\n\nconst tokenAddress = "0x744d70fdbe2ba4cf95131626614a1763df805b9e"; // SNT Address\n\nconst myBalanceObservable$ = Contract.trackBalance(tokenAddress);\n
\n\n\n\n\nBalances are returned as a string containing the value in *wei*.\n
\n\n\n\nGetting block data, gas prices and block time Subspace also provides a way to always receive the latest block object:
\n\n\nsubspace.trackBlock().subscribe(block => {\n console.log("The latest block data: ", block);\n});\n
\n\n\n\nIf you don’t need all the block information, but just the block number, you can use instead:
\n\n\nsubspace.trackBlockNumber().subscribe(blockNumber => {\n console.log("The latest block number: ", blockNumber);\n});\n
\n\n\n\nYou can also access the average block time. This takes in account only the last 10 blocks:
\n\n\nsubspace.trackAverageBlocktime().subscribe(blocktimeMS => {\n console.log("The average block time in milliseconds is: ", blocktimeMS);\n});\n
\n\n\n\nFinally, if you want to obtain the most up to date median gas price:
\n\n\nsubspace.trackGasPrice().subscribe(gasPrice => {\n console.log("Gas price in wei", gasPrice);\n});\n
\n\n\n\nSubscriptions Once you have an Observable
, you may receive a stream of data by creating a subscription. Subscriptions are triggered each time an observable emits a new value. These subscription receive a callback that must have a parameter which represents the value received from the observable (a contract state variable, an event, or the balance of an address); and they return an object representing the subscription.
\nSubscriptions can be disposed by executing the method unsubscribe()
liberating the resource held by it:
\n\n\nconst myBalanceObservable$ = subspace.trackBalance(address, tokenAddress);\nconst subscription = myBalanceObservable$.subscribe(value => { \n console.log("The balance is: ", value); \n});\n\n// ...\n\nsubscription.unsubscribe();\n
\n\n\n\nFurther read \nCleanup If Subspace is not needed anymore, you need can invoke close()
to dispose and perform the cleanup necessary to remove the internal subscriptions and interval timers created by Subspace during its normal execution, thus avoiding any potential memory leak.
\n\n\nsubspace.close();\n
\n\n\nWhat about subscriptions created with our observables?\nAny subscription created via the tracking methods must be unsubscribed manually (in the current version).\n
\n\n"},{"_content":"# How it works?\n\n### Setup\n![First Usage - Setup](./d1.png)\n1. A ÐApp requests `Subspace` to track an event, property, or balance.\n2. `Subspace` creates a observable for that event, and a web3 subscription to retrieve events from the chain\n3. The ÐApp subscribes to the observable to receive events.\n\n### Receiving events\n![First Usage - Receiving events](./d2.png)\nDepending on the filter parameters used to track the events, once an event is found, it is stored in `localStorage` and it is also pushed to the observable which delivers it to the ÐApp subscription.\n\n### Tracking already known events \nAfter restarting the ÐApp, either by executing it again in case of a console application or refreshing the browser the behavior of `Subspace` will change: \n![Second Usage - Setup](./d3.png)\n1. The Dapp will request `Subspace` to track an event it already knows, creating an observable and subscription for that event\n2. It will retrieve events that were previously stored in localStorage and deliver them to the DApp subscription, avoiding having to query the chain for the old events again. \n\n![Second Usage - Receiving events](./d4.png)\nThe web3 subscription created previously will start from the last known block instead of beginning from scratch. New events will be delivered normally from this step\n","source":"how-it-works.md","raw":"# How it works?\n\n### Setup\n![First Usage - Setup](./d1.png)\n1. A ÐApp requests `Subspace` to track an event, property, or balance.\n2. `Subspace` creates a observable for that event, and a web3 subscription to retrieve events from the chain\n3. The ÐApp subscribes to the observable to receive events.\n\n### Receiving events\n![First Usage - Receiving events](./d2.png)\nDepending on the filter parameters used to track the events, once an event is found, it is stored in `localStorage` and it is also pushed to the observable which delivers it to the ÐApp subscription.\n\n### Tracking already known events \nAfter restarting the ÐApp, either by executing it again in case of a console application or refreshing the browser the behavior of `Subspace` will change: \n![Second Usage - Setup](./d3.png)\n1. The Dapp will request `Subspace` to track an event it already knows, creating an observable and subscription for that event\n2. It will retrieve events that were previously stored in localStorage and deliver them to the DApp subscription, avoiding having to query the chain for the old events again. \n\n![Second Usage - Receiving events](./d4.png)\nThe web3 subscription created previously will start from the last known block instead of beginning from scratch. New events will be delivered normally from this step\n","date":"2020-03-19T18:30:37.772Z","updated":"2020-03-19T18:28:50.738Z","path":"how-it-works.html","title":"","comments":1,"layout":"page","_id":"ck7z3hcl400045cbnewgsc9im","content":"How it works? Setup
\n\nA ÐApp requests Subspace
to track an event, property, or balance. \nSubspace
creates a observable for that event, and a web3 subscription to retrieve events from the chain \nThe ÐApp subscribes to the observable to receive events. \n \nReceiving events Depending on the filter parameters used to track the events, once an event is found, it is stored in localStorage
and it is also pushed to the observable which delivers it to the ÐApp subscription.
\nTracking already known events After restarting the ÐApp, either by executing it again in case of a console application or refreshing the browser the behavior of Subspace
will change:
\n\nThe Dapp will request Subspace
to track an event it already knows, creating an observable and subscription for that event \nIt will retrieve events that were previously stored in localStorage and deliver them to the DApp subscription, avoiding having to query the chain for the old events again. \n \n The web3 subscription created previously will start from the last known block instead of beginning from scratch. New events will be delivered normally from this step
\n","site":{"data":{}},"excerpt":"","more":"How it works? Setup
\n\nA ÐApp requests Subspace
to track an event, property, or balance. \nSubspace
creates a observable for that event, and a web3 subscription to retrieve events from the chain \nThe ÐApp subscribes to the observable to receive events. \n \nReceiving events Depending on the filter parameters used to track the events, once an event is found, it is stored in localStorage
and it is also pushed to the observable which delivers it to the ÐApp subscription.
\nTracking already known events After restarting the ÐApp, either by executing it again in case of a console application or refreshing the browser the behavior of Subspace
will change:
\n\nThe Dapp will request Subspace
to track an event it already knows, creating an observable and subscription for that event \nIt will retrieve events that were previously stored in localStorage and deliver them to the DApp subscription, avoiding having to query the chain for the old events again. \n \n The web3 subscription created previously will start from the last known block instead of beginning from scratch. New events will be delivered normally from this step
\n"},{"title":"Homepage","_content":"","source":"index.md","raw":"title: Homepage\n---\n","date":"2020-03-19T18:30:37.775Z","updated":"2020-03-19T18:28:50.738Z","path":"index.html","comments":1,"layout":"page","_id":"ck7z3hcl400055cbn8ipl2hj7","content":"","site":{"data":{}},"excerpt":"","more":""},{"_content":"# reactive-graphql\n\nUsing `reactive-graphql` you can execute GraphQL queries against **Subspace** observables after you create your own type definitions and resolvers.\n\n### Example\n\n\n```js\nconst Subspace = require('@embarklabs/subspace');\nconst MyContract = require('./MyContract');\nconst { pluck } = require('rxjs/operators');\nconst { makeExecutableSchema } = require(\"graphql-tools\");\nconst gql = require(\"graphql-tag\");\nconst { graphql } = require(\"reactive-graphql\");\n\nconst run = async () => {\n const subspace = new Subspace(web3.currentProvider); // Use a valid provider (geth, parity, infura...)\n await subspace.init();\n\n const MyContractInstance = ...; // TODO: obtain a web3.eth.contract instance\n\n const typeDefs = `\n type MyEvent {\n someValue: Int\n anotherValue: String\n }\n type Query {\n myEvents: MyEvent!\n }\n `;\n\n const resolvers = {\n Query: {\n myEvents: () => {\n return subspace.trackEvent(MyContractInstance, 'MyEvent', { filter: {}, fromBlock: 1 })\n }\n }\n };\n\n const schema = makeExecutableSchema({ typeDefs, resolvers });\n\n const query = gql`\n query {\n myEvents {\n someValue\n anotherValue\n }\n }\n `;\n\n const stream = graphql(schema, query).pipe(pluck('data', 'myEvents'));\n stream.subscribe(data => {\n console.log(data);\n })\n\n}\n\nrun();\n```\n\n\nThis example is available in [Github](https://github.com/embarklabs/subspace/tree/master/examples/reactive-graphql)\n
","source":"reactive-graphql.md","raw":"# reactive-graphql\n\nUsing `reactive-graphql` you can execute GraphQL queries against **Subspace** observables after you create your own type definitions and resolvers.\n\n### Example\n\n\n```js\nconst Subspace = require('@embarklabs/subspace');\nconst MyContract = require('./MyContract');\nconst { pluck } = require('rxjs/operators');\nconst { makeExecutableSchema } = require(\"graphql-tools\");\nconst gql = require(\"graphql-tag\");\nconst { graphql } = require(\"reactive-graphql\");\n\nconst run = async () => {\n const subspace = new Subspace(web3.currentProvider); // Use a valid provider (geth, parity, infura...)\n await subspace.init();\n\n const MyContractInstance = ...; // TODO: obtain a web3.eth.contract instance\n\n const typeDefs = `\n type MyEvent {\n someValue: Int\n anotherValue: String\n }\n type Query {\n myEvents: MyEvent!\n }\n `;\n\n const resolvers = {\n Query: {\n myEvents: () => {\n return subspace.trackEvent(MyContractInstance, 'MyEvent', { filter: {}, fromBlock: 1 })\n }\n }\n };\n\n const schema = makeExecutableSchema({ typeDefs, resolvers });\n\n const query = gql`\n query {\n myEvents {\n someValue\n anotherValue\n }\n }\n `;\n\n const stream = graphql(schema, query).pipe(pluck('data', 'myEvents'));\n stream.subscribe(data => {\n console.log(data);\n })\n\n}\n\nrun();\n```\n\n\nThis example is available in [Github](https://github.com/embarklabs/subspace/tree/master/examples/reactive-graphql)\n
","date":"2020-03-19T18:30:46.250Z","updated":"2020-03-19T18:28:50.738Z","path":"reactive-graphql.html","title":"","comments":1,"layout":"page","_id":"ck7z3hcl500065cbn1hki9bhm","content":"reactive-graphql Using reactive-graphql
you can execute GraphQL queries against Subspace observables after you create your own type definitions and resolvers.
\nExample \n\nconst Subspace = require('@embarklabs/subspace');\nconst MyContract = require('./MyContract');\nconst { pluck } = require('rxjs/operators');\nconst { makeExecutableSchema } = require("graphql-tools");\nconst gql = require("graphql-tag");\nconst { graphql } = require("reactive-graphql");\n\nconst run = async () => {\n const subspace = new Subspace(web3.currentProvider); // Use a valid provider (geth, parity, infura...)\n await subspace.init();\n\n const MyContractInstance = ...; // TODO: obtain a web3.eth.contract instance\n\n const typeDefs = `\n type MyEvent {\n someValue: Int\n anotherValue: String\n }\n type Query {\n myEvents: MyEvent!\n }\n `;\n\n const resolvers = {\n Query: {\n myEvents: () => {\n return subspace.trackEvent(MyContractInstance, 'MyEvent', { filter: {}, fromBlock: 1 })\n }\n }\n };\n\n const schema = makeExecutableSchema({ typeDefs, resolvers });\n\n const query = gql`\n query {\n myEvents {\n someValue\n anotherValue\n }\n }\n `;\n\n const stream = graphql(schema, query).pipe(pluck('data', 'myEvents'));\n stream.subscribe(data => {\n console.log(data);\n })\n\n}\n\nrun();\n
\n\n\n\n\nThis example is available in [Github](https://github.com/embarklabs/subspace/tree/master/examples/reactive-graphql)\n
","site":{"data":{}},"excerpt":"","more":"reactive-graphql Using reactive-graphql
you can execute GraphQL queries against Subspace observables after you create your own type definitions and resolvers.
\nExample \n\nconst Subspace = require('@embarklabs/subspace');\nconst MyContract = require('./MyContract');\nconst { pluck } = require('rxjs/operators');\nconst { makeExecutableSchema } = require("graphql-tools");\nconst gql = require("graphql-tag");\nconst { graphql } = require("reactive-graphql");\n\nconst run = async () => {\n const subspace = new Subspace(web3.currentProvider); // Use a valid provider (geth, parity, infura...)\n await subspace.init();\n\n const MyContractInstance = ...; // TODO: obtain a web3.eth.contract instance\n\n const typeDefs = `\n type MyEvent {\n someValue: Int\n anotherValue: String\n }\n type Query {\n myEvents: MyEvent!\n }\n `;\n\n const resolvers = {\n Query: {\n myEvents: () => {\n return subspace.trackEvent(MyContractInstance, 'MyEvent', { filter: {}, fromBlock: 1 })\n }\n }\n };\n\n const schema = makeExecutableSchema({ typeDefs, resolvers });\n\n const query = gql`\n query {\n myEvents {\n someValue\n anotherValue\n }\n }\n `;\n\n const stream = graphql(schema, query).pipe(pluck('data', 'myEvents'));\n stream.subscribe(data => {\n console.log(data);\n })\n\n}\n\nrun();\n
\n\n\n\n\nThis example is available in [Github](https://github.com/embarklabs/subspace/tree/master/examples/reactive-graphql)\n
"},{"_content":"# React\nWe provide a higher-order component to connect to enhance presentational components to react to any observable (not limited to those generated by **Subspace**). \n\n### Usage\n```js\nimport { observe } from '@embarklabs/subspace/react';\n\nconst ObserverComponent = observe(WrappedComponent);\n```\n\nThis enhanced component will subscribe to any observable property it receives when the component is mounted and automatically unsubscribe when the component is unmounted.\n\n### Example\n\n\nThis example is available in [Github](https://github.com/embark-framework/subspace/tree/master/examples/react-example1)\n
\n\n\n#### MyComponentObserver.js\n```js\nimport React from \"react\";\nimport ReactDOM from 'react-dom';\nimport {observe} from \"@embarklabs/subspace/react\";\n\nconst MyComponent = ({eventData}) => {\n // Handle initial state when no data is available\n if (!eventData) {\n return No data
;\n }\n \n return {eventData.someReturnedValue}
\n};\n\n// MyComponent will now observe any observable prop it receives\n// and update its state whenever the observable emits an event\nexport default observe(MyComponent);\n```\n\n#### App.js\n```js\nimport React, {Component} from 'react';\nimport ReactDOM from 'react-dom';\nimport Subspace from '@embarklabs/subspace';\n\nimport MyComponentObserver from './MyComponentObserver';\n\nclass App extends Component {\n state = {\n myEventObservable$: null\n }\n\n async componentDidMount() {\n const MyContractInstance = ...; // TODO: obtain a web3.eth.contract instance\n\n const subspace = new Subspace(\"wss://localhost:8545\"); // Use a valid provider (geth, parity, infura...)\n await subspace.init()\n \n const myEventObservable$ = subspace.trackEvent(MyContractInstance, \"MyEvent\", {filter: {}, fromBlock: 1 });\n this.setState({ myEventObservable$ });\n }\n\n render() {\n return ;\n }\n}\n\nexport default App;\n```\n\n\nHandling Contract Objects\nThe variable `MyContractInstance` is a `web3.eth.Contract` object pointing to a deployed contract address. You can use a DApp framework like [Embark](https://embark.status.im/docs/contracts_javascript.html) to easily import that contract instance: `import { MyContract } from './embarkArtifacts/contracts';`, or use web3.js directly (just like in the example [source code](https://github.com/embarklabs/subspace/blob/master/examples/react/src/MyContract.js#L36-L42))\n
\n\n#### index.js\n```js\nimport React from 'react';\nimport ReactDOM from 'react-dom';\nimport App from './App';\n\nReactDOM.render( , document.getElementById('root'));\n```\n\n\n```js\nimport { observe } from \"@embarklabs/subspace/react\";\n\nconst ProductComponent = ({ maxRating, minRating, averageRating }) => {\n return \n minimum rating: {minRating} \n maximum rating: {maxRating} \n average rating: {averageRating} \n ;\n};\n\nconst ReactiveProductComponent = observe(ProductComponent);\n\nconst Product = subspace.contract({abi, address});\nconst rating$ = Product.events.Rating.track().map(\"rating\").pipe(map(x => parseInt(x)));\n\nReactDOM.render(\n ,\n document.getElementById('hello-example')\n);\n```\n","source":"react.md","raw":"# React\nWe provide a higher-order component to connect to enhance presentational components to react to any observable (not limited to those generated by **Subspace**). \n\n### Usage\n```js\nimport { observe } from '@embarklabs/subspace/react';\n\nconst ObserverComponent = observe(WrappedComponent);\n```\n\nThis enhanced component will subscribe to any observable property it receives when the component is mounted and automatically unsubscribe when the component is unmounted.\n\n### Example\n\n\nThis example is available in [Github](https://github.com/embark-framework/subspace/tree/master/examples/react-example1)\n
\n\n\n#### MyComponentObserver.js\n```js\nimport React from \"react\";\nimport ReactDOM from 'react-dom';\nimport {observe} from \"@embarklabs/subspace/react\";\n\nconst MyComponent = ({eventData}) => {\n // Handle initial state when no data is available\n if (!eventData) {\n return No data
;\n }\n \n return {eventData.someReturnedValue}
\n};\n\n// MyComponent will now observe any observable prop it receives\n// and update its state whenever the observable emits an event\nexport default observe(MyComponent);\n```\n\n#### App.js\n```js\nimport React, {Component} from 'react';\nimport ReactDOM from 'react-dom';\nimport Subspace from '@embarklabs/subspace';\n\nimport MyComponentObserver from './MyComponentObserver';\n\nclass App extends Component {\n state = {\n myEventObservable$: null\n }\n\n async componentDidMount() {\n const MyContractInstance = ...; // TODO: obtain a web3.eth.contract instance\n\n const subspace = new Subspace(\"wss://localhost:8545\"); // Use a valid provider (geth, parity, infura...)\n await subspace.init()\n \n const myEventObservable$ = subspace.trackEvent(MyContractInstance, \"MyEvent\", {filter: {}, fromBlock: 1 });\n this.setState({ myEventObservable$ });\n }\n\n render() {\n return ;\n }\n}\n\nexport default App;\n```\n\n\nHandling Contract Objects\nThe variable `MyContractInstance` is a `web3.eth.Contract` object pointing to a deployed contract address. You can use a DApp framework like [Embark](https://embark.status.im/docs/contracts_javascript.html) to easily import that contract instance: `import { MyContract } from './embarkArtifacts/contracts';`, or use web3.js directly (just like in the example [source code](https://github.com/embarklabs/subspace/blob/master/examples/react/src/MyContract.js#L36-L42))\n
\n\n#### index.js\n```js\nimport React from 'react';\nimport ReactDOM from 'react-dom';\nimport App from './App';\n\nReactDOM.render( , document.getElementById('root'));\n```\n\n\n```js\nimport { observe } from \"@embarklabs/subspace/react\";\n\nconst ProductComponent = ({ maxRating, minRating, averageRating }) => {\n return \n minimum rating: {minRating} \n maximum rating: {maxRating} \n average rating: {averageRating} \n ;\n};\n\nconst ReactiveProductComponent = observe(ProductComponent);\n\nconst Product = subspace.contract({abi, address});\nconst rating$ = Product.events.Rating.track().map(\"rating\").pipe(map(x => parseInt(x)));\n\nReactDOM.render(\n ,\n document.getElementById('hello-example')\n);\n```\n","date":"2020-03-19T18:30:46.246Z","updated":"2020-03-19T18:28:50.738Z","path":"react.html","title":"","comments":1,"layout":"page","_id":"ck7z3hcl600075cbn76084luf","content":"React We provide a higher-order component to connect to enhance presentational components to react to any observable (not limited to those generated by Subspace ).
\nUsage \n\nimport { observe } from '@embarklabs/subspace/react';\n\nconst ObserverComponent = observe(WrappedComponent);\n
\n\n\n\nThis enhanced component will subscribe to any observable property it receives when the component is mounted and automatically unsubscribe when the component is unmounted.
\nExample \nThis example is available in [Github](https://github.com/embark-framework/subspace/tree/master/examples/react-example1)\n
\n\n\nMyComponentObserver.js \n\nimport React from "react";\nimport ReactDOM from 'react-dom';\nimport {observe} from "@embarklabs/subspace/react";\n\nconst MyComponent = ({eventData}) => {\n // Handle initial state when no data is available\n if (!eventData) {\n return <p>No data</p>;\n }\n \n return <p>{eventData.someReturnedValue}</p>\n};\n\n// MyComponent will now observe any observable prop it receives\n// and update its state whenever the observable emits an event\nexport default observe(MyComponent);\n
\n\n\n\nApp.js \n\nimport React, {Component} from 'react';\nimport ReactDOM from 'react-dom';\nimport Subspace from '@embarklabs/subspace';\n\nimport MyComponentObserver from './MyComponentObserver';\n\nclass App extends Component {\n state = {\n myEventObservable$: null\n }\n\n async componentDidMount() {\n const MyContractInstance = ...; // TODO: obtain a web3.eth.contract instance\n\n const subspace = new Subspace("wss://localhost:8545"); // Use a valid provider (geth, parity, infura...)\n await subspace.init()\n \n const myEventObservable$ = subspace.trackEvent(MyContractInstance, "MyEvent", {filter: {}, fromBlock: 1 });\n this.setState({ myEventObservable$ });\n }\n\n render() {\n return <MyComponentObserver eventData={this.state.myEventObservable$} />;\n }\n}\n\nexport default App;\n
\n\n\n\n\nHandling Contract Objects\nThe variable `MyContractInstance` is a `web3.eth.Contract` object pointing to a deployed contract address. You can use a DApp framework like [Embark](https://embark.status.im/docs/contracts_javascript.html) to easily import that contract instance: `import { MyContract } from './embarkArtifacts/contracts';`, or use web3.js directly (just like in the example [source code](https://github.com/embarklabs/subspace/blob/master/examples/react/src/MyContract.js#L36-L42))\n
\n\nindex.js \n\nimport React from 'react';\nimport ReactDOM from 'react-dom';\nimport App from './App';\n\nReactDOM.render(<App />, document.getElementById('root'));\n
\n\n\n\n\n\nimport { observe } from "@embarklabs/subspace/react";\n\nconst ProductComponent = ({ maxRating, minRating, averageRating }) => {\n return <ul>\n <li><b>minimum rating: </b> {minRating}</li>\n <li><b>maximum rating: </b> {maxRating}</li>\n <li><b>average rating: </b> {averageRating}</li>\n </ul>;\n};\n\nconst ReactiveProductComponent = observe(ProductComponent);\n\nconst Product = subspace.contract({abi, address});\nconst rating$ = Product.events.Rating.track().map("rating").pipe(map(x => parseInt(x)));\n\nReactDOM.render(\n <ReactiveProductComponent\n maxRating={rating$.pipe($max())}\n minRating={rating$.pipe($min())}\n averageRating={rating$.pipe($average())}\n />,\n document.getElementById('hello-example')\n);\n
\n\n\n","site":{"data":{}},"excerpt":"","more":"React We provide a higher-order component to connect to enhance presentational components to react to any observable (not limited to those generated by Subspace ).
\nUsage \n\nimport { observe } from '@embarklabs/subspace/react';\n\nconst ObserverComponent = observe(WrappedComponent);\n
\n\n\n\nThis enhanced component will subscribe to any observable property it receives when the component is mounted and automatically unsubscribe when the component is unmounted.
\nExample \nThis example is available in [Github](https://github.com/embark-framework/subspace/tree/master/examples/react-example1)\n
\n\n\nMyComponentObserver.js \n\nimport React from "react";\nimport ReactDOM from 'react-dom';\nimport {observe} from "@embarklabs/subspace/react";\n\nconst MyComponent = ({eventData}) => {\n // Handle initial state when no data is available\n if (!eventData) {\n return <p>No data</p>;\n }\n \n return <p>{eventData.someReturnedValue}</p>\n};\n\n// MyComponent will now observe any observable prop it receives\n// and update its state whenever the observable emits an event\nexport default observe(MyComponent);\n
\n\n\n\nApp.js \n\nimport React, {Component} from 'react';\nimport ReactDOM from 'react-dom';\nimport Subspace from '@embarklabs/subspace';\n\nimport MyComponentObserver from './MyComponentObserver';\n\nclass App extends Component {\n state = {\n myEventObservable$: null\n }\n\n async componentDidMount() {\n const MyContractInstance = ...; // TODO: obtain a web3.eth.contract instance\n\n const subspace = new Subspace("wss://localhost:8545"); // Use a valid provider (geth, parity, infura...)\n await subspace.init()\n \n const myEventObservable$ = subspace.trackEvent(MyContractInstance, "MyEvent", {filter: {}, fromBlock: 1 });\n this.setState({ myEventObservable$ });\n }\n\n render() {\n return <MyComponentObserver eventData={this.state.myEventObservable$} />;\n }\n}\n\nexport default App;\n
\n\n\n\n\nHandling Contract Objects\nThe variable `MyContractInstance` is a `web3.eth.Contract` object pointing to a deployed contract address. You can use a DApp framework like [Embark](https://embark.status.im/docs/contracts_javascript.html) to easily import that contract instance: `import { MyContract } from './embarkArtifacts/contracts';`, or use web3.js directly (just like in the example [source code](https://github.com/embarklabs/subspace/blob/master/examples/react/src/MyContract.js#L36-L42))\n
\n\nindex.js \n\nimport React from 'react';\nimport ReactDOM from 'react-dom';\nimport App from './App';\n\nReactDOM.render(<App />, document.getElementById('root'));\n
\n\n\n\n\n\nimport { observe } from "@embarklabs/subspace/react";\n\nconst ProductComponent = ({ maxRating, minRating, averageRating }) => {\n return <ul>\n <li><b>minimum rating: </b> {minRating}</li>\n <li><b>maximum rating: </b> {maxRating}</li>\n <li><b>average rating: </b> {averageRating}</li>\n </ul>;\n};\n\nconst ReactiveProductComponent = observe(ProductComponent);\n\nconst Product = subspace.contract({abi, address});\nconst rating$ = Product.events.Rating.track().map("rating").pipe(map(x => parseInt(x)));\n\nReactDOM.render(\n <ReactiveProductComponent\n maxRating={rating$.pipe($max())}\n minRating={rating$.pipe($min())}\n averageRating={rating$.pipe($average())}\n />,\n document.getElementById('hello-example')\n);\n
\n\n\n"},{"_content":"# Integrations with other frameworks\n\n**Subspace** does not force you to change the architecture of your dApps, making it easy to use on existing projects. In this section you can find some examples and tips on how to integrate **Subspace** with various frontend frameworks and libraries","source":"integrations-overview.md","raw":"# Integrations with other frameworks\n\n**Subspace** does not force you to change the architecture of your dApps, making it easy to use on existing projects. In this section you can find some examples and tips on how to integrate **Subspace** with various frontend frameworks and libraries","date":"2020-03-19T18:30:37.779Z","updated":"2020-03-19T18:28:50.738Z","path":"integrations-overview.html","title":"","comments":1,"layout":"page","_id":"ck7z3hcl600085cbn32fk804l","content":"Integrations with other frameworks Subspace does not force you to change the architecture of your dApps, making it easy to use on existing projects. In this section you can find some examples and tips on how to integrate Subspace with various frontend frameworks and libraries
\n","site":{"data":{}},"excerpt":"","more":"Integrations with other frameworks Subspace does not force you to change the architecture of your dApps, making it easy to use on existing projects. In this section you can find some examples and tips on how to integrate Subspace with various frontend frameworks and libraries
\n"},{"_content":"# redux \n\n**Subspace** can be used with [redux](https://redux.js.org/). **Subspace** returns [`Observables`](https://rxjs-dev.firebaseapp.com/guide/observable), which you can subscribe to, and if this subscription has access to the redux store, it will be able to dispatch actions when the observable emits an event.\n\n### Example\nHere's a simple example on how to setup **Subspace** to work with `redux`:\n\n\nThis example is available in [Github](https://github.com/embarklabs/subspace/tree/master/examples/redux)\n
\n\n#### index.js\n```js\nimport store from './store';\nimport web3 from './web3';\nimport Subspace from '@embarklabs/subspace';\nimport { myAction } from './actions';\n\nconst run = async () => {\n const MyContractInstance = ...; // TODO: obtain a web3.eth.contract instance\n\n const subspace = new Subspace(\"ws://localhost:8545\"); // Use a valid provider (geth, parity, infura...)\n await subspace.init();\n \n subspace.trackEvent(MyContractInstance, \"MyEvent\", {filter: {}, fromBlock: 1 })\n .subscribe(eventData => {\n store.dispatch(myAction(eventData));\n });\n}\n\nrun();\n```\nHandling Contract Objects\nThe variable `MyContractInstance` is a `web3.eth.Contract` object pointing to a deployed contract address. You can use a DApp framework like [Embark](https://embark.status.im/docs/contracts_javascript.html) to easily import that contract instance: `import { MyContract } from './embarkArtifacts/contracts';`, or use web3.js directly (just like in the example [source code](https://github.com/embarklabs/subspace/blob/master/examples/redux/src/MyContract.js#L36-L42))\n
\n\n#### store.js\n```js\nimport { createStore } from 'redux';\nimport {myReducer} from './reducer';\n\nexport default store = createStore(myReducer);\n```\n\n#### reducer.js\n```js\nimport { MY_ACTION } from \"./constants\";\n\nconst initialState = { \n data: {}\n};\n\nexport const myReducer = (state = initialState, action) => {\n switch (action.type) {\n case MY_ACTION:\n return { data: action.eventData };\n default:\n return state;\n }\n};\n```\n\n#### constants.js\n```js\nexport const MY_ACTION = 'MY_ACTION';\n```\n\n#### actions.js\n```js\nimport {MY_ACTION} from './constants.js';\n\nexport const myAction = eventData => ({type: MY_ACTION, eventData});\n```\n\n\nUsing React and Redux\nA practical example can also be found in `examples/react-redux`.\n
","source":"redux.md","raw":"# redux \n\n**Subspace** can be used with [redux](https://redux.js.org/). **Subspace** returns [`Observables`](https://rxjs-dev.firebaseapp.com/guide/observable), which you can subscribe to, and if this subscription has access to the redux store, it will be able to dispatch actions when the observable emits an event.\n\n### Example\nHere's a simple example on how to setup **Subspace** to work with `redux`:\n\n\nThis example is available in [Github](https://github.com/embarklabs/subspace/tree/master/examples/redux)\n
\n\n#### index.js\n```js\nimport store from './store';\nimport web3 from './web3';\nimport Subspace from '@embarklabs/subspace';\nimport { myAction } from './actions';\n\nconst run = async () => {\n const MyContractInstance = ...; // TODO: obtain a web3.eth.contract instance\n\n const subspace = new Subspace(\"ws://localhost:8545\"); // Use a valid provider (geth, parity, infura...)\n await subspace.init();\n \n subspace.trackEvent(MyContractInstance, \"MyEvent\", {filter: {}, fromBlock: 1 })\n .subscribe(eventData => {\n store.dispatch(myAction(eventData));\n });\n}\n\nrun();\n```\nHandling Contract Objects\nThe variable `MyContractInstance` is a `web3.eth.Contract` object pointing to a deployed contract address. You can use a DApp framework like [Embark](https://embark.status.im/docs/contracts_javascript.html) to easily import that contract instance: `import { MyContract } from './embarkArtifacts/contracts';`, or use web3.js directly (just like in the example [source code](https://github.com/embarklabs/subspace/blob/master/examples/redux/src/MyContract.js#L36-L42))\n
\n\n#### store.js\n```js\nimport { createStore } from 'redux';\nimport {myReducer} from './reducer';\n\nexport default store = createStore(myReducer);\n```\n\n#### reducer.js\n```js\nimport { MY_ACTION } from \"./constants\";\n\nconst initialState = { \n data: {}\n};\n\nexport const myReducer = (state = initialState, action) => {\n switch (action.type) {\n case MY_ACTION:\n return { data: action.eventData };\n default:\n return state;\n }\n};\n```\n\n#### constants.js\n```js\nexport const MY_ACTION = 'MY_ACTION';\n```\n\n#### actions.js\n```js\nimport {MY_ACTION} from './constants.js';\n\nexport const myAction = eventData => ({type: MY_ACTION, eventData});\n```\n\n\nUsing React and Redux\nA practical example can also be found in `examples/react-redux`.\n
","date":"2020-03-19T18:30:46.258Z","updated":"2020-03-19T18:28:50.739Z","path":"redux.html","title":"","comments":1,"layout":"page","_id":"ck7z3hcl700095cbn0x9h37v1","content":"redux Subspace can be used with redux . Subspace returns Observables
, which you can subscribe to, and if this subscription has access to the redux store, it will be able to dispatch actions when the observable emits an event.
\nExample Here’s a simple example on how to setup Subspace to work with redux
:
\n\nThis example is available in [Github](https://github.com/embarklabs/subspace/tree/master/examples/redux)\n
\n\nindex.js \n\nimport store from './store';\nimport web3 from './web3';\nimport Subspace from '@embarklabs/subspace';\nimport { myAction } from './actions';\n\nconst run = async () => {\n const MyContractInstance = ...; // TODO: obtain a web3.eth.contract instance\n\n const subspace = new Subspace("ws://localhost:8545"); // Use a valid provider (geth, parity, infura...)\n await subspace.init();\n \n subspace.trackEvent(MyContractInstance, "MyEvent", {filter: {}, fromBlock: 1 })\n .subscribe(eventData => {\n store.dispatch(myAction(eventData));\n });\n}\n\nrun();\n
\n\nHandling Contract Objects\nThe variable `MyContractInstance` is a `web3.eth.Contract` object pointing to a deployed contract address. You can use a DApp framework like [Embark](https://embark.status.im/docs/contracts_javascript.html) to easily import that contract instance: `import { MyContract } from './embarkArtifacts/contracts';`, or use web3.js directly (just like in the example [source code](https://github.com/embarklabs/subspace/blob/master/examples/redux/src/MyContract.js#L36-L42))\n
\n\nstore.js \n\nimport { createStore } from 'redux';\nimport {myReducer} from './reducer';\n\nexport default store = createStore(myReducer);\n
\n\n\n\nreducer.js \n\nimport { MY_ACTION } from "./constants";\n\nconst initialState = { \n data: {}\n};\n\nexport const myReducer = (state = initialState, action) => {\n switch (action.type) {\n case MY_ACTION:\n return { data: action.eventData };\n default:\n return state;\n }\n};\n
\n\n\n\nconstants.js \n\nexport const MY_ACTION = 'MY_ACTION';\n
\n\n\n\nactions.js \n\nimport {MY_ACTION} from './constants.js';\n\nexport const myAction = eventData => ({type: MY_ACTION, eventData});\n
\n\n\n\n\nUsing React and Redux\nA practical example can also be found in `examples/react-redux`.\n
","site":{"data":{}},"excerpt":"","more":"redux Subspace can be used with redux . Subspace returns Observables
, which you can subscribe to, and if this subscription has access to the redux store, it will be able to dispatch actions when the observable emits an event.
\nExample Here’s a simple example on how to setup Subspace to work with redux
:
\n\nThis example is available in [Github](https://github.com/embarklabs/subspace/tree/master/examples/redux)\n
\n\nindex.js \n\nimport store from './store';\nimport web3 from './web3';\nimport Subspace from '@embarklabs/subspace';\nimport { myAction } from './actions';\n\nconst run = async () => {\n const MyContractInstance = ...; // TODO: obtain a web3.eth.contract instance\n\n const subspace = new Subspace("ws://localhost:8545"); // Use a valid provider (geth, parity, infura...)\n await subspace.init();\n \n subspace.trackEvent(MyContractInstance, "MyEvent", {filter: {}, fromBlock: 1 })\n .subscribe(eventData => {\n store.dispatch(myAction(eventData));\n });\n}\n\nrun();\n
\n\nHandling Contract Objects\nThe variable `MyContractInstance` is a `web3.eth.Contract` object pointing to a deployed contract address. You can use a DApp framework like [Embark](https://embark.status.im/docs/contracts_javascript.html) to easily import that contract instance: `import { MyContract } from './embarkArtifacts/contracts';`, or use web3.js directly (just like in the example [source code](https://github.com/embarklabs/subspace/blob/master/examples/redux/src/MyContract.js#L36-L42))\n
\n\nstore.js \n\nimport { createStore } from 'redux';\nimport {myReducer} from './reducer';\n\nexport default store = createStore(myReducer);\n
\n\n\n\nreducer.js \n\nimport { MY_ACTION } from "./constants";\n\nconst initialState = { \n data: {}\n};\n\nexport const myReducer = (state = initialState, action) => {\n switch (action.type) {\n case MY_ACTION:\n return { data: action.eventData };\n default:\n return state;\n }\n};\n
\n\n\n\nconstants.js \n\nexport const MY_ACTION = 'MY_ACTION';\n
\n\n\n\nactions.js \n\nimport {MY_ACTION} from './constants.js';\n\nexport const myAction = eventData => ({type: MY_ACTION, eventData});\n
\n\n\n\n\nUsing React and Redux\nA practical example can also be found in `examples/react-redux`.\n
"},{"_content":"# redux-observable\n\n[redux-observables](https://redux-observable.js.org/) can be used to manage side effects via `Epics` (their core primitive to receive and create stream of actions). **Subspace** can be configured inside these epics. \n\nIt's recommended to compose these epics by using [mergeMap](https://www.learnrxjs.io/operators/transformation/mergemap.html) or [switchMap](https://www.learnrxjs.io/operators/transformation/switchmap.html) operators.\n\nHere's an example on how to use **Subspace** to subscribe to an Event when the action `SOME_ACTION` is dispatched, and then it will trigger `myAction` when the observable emits a value.\n\n```js\n// ...\n\nconst myEpic = action$ =>\n action$.pipe(\n ofType(\"SOME_ACTION\"), // Execute when the action type is 'INIT'\n switchMap(action =>\n subspace\n .trackEvent(MyContract, \"MyEventName\", { filter: {}, fromBlock: 1})\n .pipe(\n map(myAction) // Trigger redux action: MY_ACTION with the eventData\n )\n )\n );\n\n// ...\n```\n\n\nAn example is available in [Github](https://github.com/embarklabs/subspace/tree/master/examples/redux-observable)\n
\n\n#### Further read\n- [Epics](https://redux-observable.js.org/docs/basics/Epics.html)\n\n","source":"redux-observable.md","raw":"# redux-observable\n\n[redux-observables](https://redux-observable.js.org/) can be used to manage side effects via `Epics` (their core primitive to receive and create stream of actions). **Subspace** can be configured inside these epics. \n\nIt's recommended to compose these epics by using [mergeMap](https://www.learnrxjs.io/operators/transformation/mergemap.html) or [switchMap](https://www.learnrxjs.io/operators/transformation/switchmap.html) operators.\n\nHere's an example on how to use **Subspace** to subscribe to an Event when the action `SOME_ACTION` is dispatched, and then it will trigger `myAction` when the observable emits a value.\n\n```js\n// ...\n\nconst myEpic = action$ =>\n action$.pipe(\n ofType(\"SOME_ACTION\"), // Execute when the action type is 'INIT'\n switchMap(action =>\n subspace\n .trackEvent(MyContract, \"MyEventName\", { filter: {}, fromBlock: 1})\n .pipe(\n map(myAction) // Trigger redux action: MY_ACTION with the eventData\n )\n )\n );\n\n// ...\n```\n\n\nAn example is available in [Github](https://github.com/embarklabs/subspace/tree/master/examples/redux-observable)\n
\n\n#### Further read\n- [Epics](https://redux-observable.js.org/docs/basics/Epics.html)\n\n","date":"2020-03-19T18:30:46.255Z","updated":"2020-03-19T18:28:50.739Z","path":"redux-observable.html","title":"","comments":1,"layout":"page","_id":"ck7z3hcl8000a5cbn6njw8eta","content":"redux-observable redux-observables can be used to manage side effects via Epics
(their core primitive to receive and create stream of actions). Subspace can be configured inside these epics.
\nIt’s recommended to compose these epics by using mergeMap or switchMap operators.
\nHere’s an example on how to use Subspace to subscribe to an Event when the action SOME_ACTION
is dispatched, and then it will trigger myAction
when the observable emits a value.
\n\n\n// ...\n\nconst myEpic = action$ =>\n action$.pipe(\n ofType("SOME_ACTION"), // Execute when the action type is 'INIT'\n switchMap(action =>\n subspace\n .trackEvent(MyContract, "MyEventName", { filter: {}, fromBlock: 1})\n .pipe(\n map(myAction) // Trigger redux action: MY_ACTION with the eventData\n )\n )\n );\n\n// ...\n
\n\n\n\n\nAn example is available in [Github](https://github.com/embarklabs/subspace/tree/master/examples/redux-observable)\n
\n\nFurther read \n","site":{"data":{}},"excerpt":"","more":"redux-observable redux-observables can be used to manage side effects via Epics
(their core primitive to receive and create stream of actions). Subspace can be configured inside these epics.
\nIt’s recommended to compose these epics by using mergeMap or switchMap operators.
\nHere’s an example on how to use Subspace to subscribe to an Event when the action SOME_ACTION
is dispatched, and then it will trigger myAction
when the observable emits a value.
\n\n\n// ...\n\nconst myEpic = action$ =>\n action$.pipe(\n ofType("SOME_ACTION"), // Execute when the action type is 'INIT'\n switchMap(action =>\n subspace\n .trackEvent(MyContract, "MyEventName", { filter: {}, fromBlock: 1})\n .pipe(\n map(myAction) // Trigger redux action: MY_ACTION with the eventData\n )\n )\n );\n\n// ...\n
\n\n\n\n\nAn example is available in [Github](https://github.com/embarklabs/subspace/tree/master/examples/redux-observable)\n
\n\nFurther read \n"},{"_content":"# Creating a reactive ÐApp with React and Subspace\n\nSee example DApp at [https://github.com/embark-framework/subspace/tree/master/examples/react-example1](https://github.com/embark-framework/subspace/tree/master/examples/react-example1)\n\n","source":"tutorial.md","raw":"# Creating a reactive ÐApp with React and Subspace\n\nSee example DApp at [https://github.com/embark-framework/subspace/tree/master/examples/react-example1](https://github.com/embark-framework/subspace/tree/master/examples/react-example1)\n\n","date":"2020-03-19T18:30:46.261Z","updated":"2020-03-19T18:28:50.739Z","path":"tutorial.html","title":"","comments":1,"layout":"page","_id":"ck7z3hcl8000b5cbn9b5ccrit","content":"Creating a reactive ÐApp with React and Subspace See example DApp at https://github.com/embark-framework/subspace/tree/master/examples/react-example1
\n","site":{"data":{}},"excerpt":"","more":"Creating a reactive ÐApp with React and Subspace See example DApp at https://github.com/embark-framework/subspace/tree/master/examples/react-example1
\n"},{"home":true,"heroImage":"/assets/img/logo.svg","heroText":" ","actionText":"Get Started","actionLink":"/getting-started/","footer":"MIT Licensed | Subspace is part of the Status Network","features":[{"title":"Automatic Syncing","details":"Subspace takes care of syncing under the hood, syncing exactly what you need when you need it. It saves the state to a local database ensuring the DApp always syncs from the last known point even after reloading the DApp."},{"title":"Reactive","details":"Subspace embraces reactive programming with RxJS. It provides methods to track and subscribe to events, contract state & balances, and react to changes via observables."},{"title":"Framework Agnostic","details":"Subspace is framework agnostic and integrates well with your favourite frameworks, from React to Angular. It works in the browser and in nodejs."}],"_content":"\n---\n\n \n","source":"readme.md","raw":"---\nhome: true\nheroImage: /assets/img/logo.svg\nheroText: \" \"\nactionText: Get Started\nactionLink: /getting-started/\nfooter: MIT Licensed | Subspace is part of the Status Network \nfeatures:\n- title: Automatic Syncing\n details: Subspace takes care of syncing under the hood, syncing exactly what you need when you need it. It saves the state to a local database ensuring the DApp always syncs from the last known point even after reloading the DApp.\n- title: Reactive\n details: Subspace embraces reactive programming with RxJS. It provides methods to track and subscribe to events, contract state & balances, and react to changes via observables.\n- title: Framework Agnostic\n details: Subspace is framework agnostic and integrates well with your favourite frameworks, from React to Angular. It works in the browser and in nodejs.\n\n---\n\n---\n\n \n","date":"2020-03-19T18:30:46.253Z","updated":"2020-03-19T18:28:50.739Z","path":"readme.html","title":"","comments":1,"layout":"page","_id":"ck7z3hcl9000c5cbnenkva87k","content":" \n \n","site":{"data":{}},"excerpt":"","more":" \n \n"},{"_content":"# Vue\nVue provides the official npm package `vue-rx` that provides RxJS integration, which simplifies the use of Subspace with Vue.js\n\n### Example\n\n\nThis example is available in [Github](https://github.com/embark-framework/subspace/tree/master/examples/vue)\n
\n\n\n#### MyComponent.vue\n```js\n\n \n someValue: {{eventData$.someValue}} \n anotherValue: {{eventData$.anotherValue}} \n \n \n\n\n```\n\n#### App.vue\n```js\n\n \n Create a Transaction \n \n
\n \n\n\n```\n\n\n\n#### Further read\n- [vue-rx](https://www.npmjs.com/package/vue-rx)\n","source":"vue.md","raw":"# Vue\nVue provides the official npm package `vue-rx` that provides RxJS integration, which simplifies the use of Subspace with Vue.js\n\n### Example\n\n\nThis example is available in [Github](https://github.com/embark-framework/subspace/tree/master/examples/vue)\n
\n\n\n#### MyComponent.vue\n```js\n\n \n someValue: {{eventData$.someValue}} \n anotherValue: {{eventData$.anotherValue}} \n \n \n\n\n```\n\n#### App.vue\n```js\n\n \n Create a Transaction \n \n
\n \n\n\n```\n\n\n\n#### Further read\n- [vue-rx](https://www.npmjs.com/package/vue-rx)\n","date":"2020-03-19T18:30:46.263Z","updated":"2020-03-19T18:28:50.739Z","path":"vue.html","title":"","comments":1,"layout":"page","_id":"ck7z3hcla000d5cbnbcbx0pk7","content":"Vue Vue provides the official npm package vue-rx
that provides RxJS integration, which simplifies the use of Subspace with Vue.js
\nExample \nThis example is available in [Github](https://github.com/embark-framework/subspace/tree/master/examples/vue)\n
\n\n\nMyComponent.vue \n\n<template>\n <ul v-if="!!eventData$">\n <li><b>someValue: </b> {{eventData$.someValue}}</li>\n <li><b>anotherValue: </b> {{eventData$.anotherValue}}</li>\n </ul>\n</template>\n\n<script>\nexport default {\n name: 'MyComponent',\n props: {\n eventData: Object\n },\n subscriptions() { // provide Rx observables\n return {\n eventData$: this.eventData\n }\n }\n}\n</script>\n
\n\n\n\nApp.vue \n\n<template>\n <div id="app">\n <button v-on:click="createTrx">Create a Transaction</button>\n <MyComponent v-bind:event-data="myEventObservable$" v-if="!!myEventObservable$" />\n </div>\n</template>\n\n<script>\nimport MyComponent from './components/MyComponent.vue';\nimport Subspace from "@embarklabs/subspace";\n\nexport default {\n name: 'app',\n data: function(){\n return {\n myEventObservable$: null,\n MyContractInstance: null\n };\n },\n created: async function(){\n this.MyContractInstance = ...; // TODO: obtain a web3.eth.contract instance\n\n const subspace = new Subspace("wss://localhost:8545"); // Use a valid provider (geth, parity, infura...)\n await subspace.init();\n\n this.myEventObservable$ = subspace.trackEvent(this.MyContractInstance, "MyEvent", {filter: {}, fromBlock: 1 });\n }, \n methods: {\n createTrx: function(){\n this.MyContractInstance.methods\n .myFunction()\n .send({ from: web3.eth.defaultAccount });\n }\n },\n components: {\n MyComponent\n }\n}\n</script>\n
\n\n\n\nFurther read \n","site":{"data":{}},"excerpt":"","more":"Vue Vue provides the official npm package vue-rx
that provides RxJS integration, which simplifies the use of Subspace with Vue.js
\nExample \nThis example is available in [Github](https://github.com/embark-framework/subspace/tree/master/examples/vue)\n
\n\n\nMyComponent.vue \n\n<template>\n <ul v-if="!!eventData$">\n <li><b>someValue: </b> {{eventData$.someValue}}</li>\n <li><b>anotherValue: </b> {{eventData$.anotherValue}}</li>\n </ul>\n</template>\n\n<script>\nexport default {\n name: 'MyComponent',\n props: {\n eventData: Object\n },\n subscriptions() { // provide Rx observables\n return {\n eventData$: this.eventData\n }\n }\n}\n</script>\n
\n\n\n\nApp.vue \n\n<template>\n <div id="app">\n <button v-on:click="createTrx">Create a Transaction</button>\n <MyComponent v-bind:event-data="myEventObservable$" v-if="!!myEventObservable$" />\n </div>\n</template>\n\n<script>\nimport MyComponent from './components/MyComponent.vue';\nimport Subspace from "@embarklabs/subspace";\n\nexport default {\n name: 'app',\n data: function(){\n return {\n myEventObservable$: null,\n MyContractInstance: null\n };\n },\n created: async function(){\n this.MyContractInstance = ...; // TODO: obtain a web3.eth.contract instance\n\n const subspace = new Subspace("wss://localhost:8545"); // Use a valid provider (geth, parity, infura...)\n await subspace.init();\n\n this.myEventObservable$ = subspace.trackEvent(this.MyContractInstance, "MyEvent", {filter: {}, fromBlock: 1 });\n }, \n methods: {\n createTrx: function(){\n this.MyContractInstance.methods\n .myFunction()\n .send({ from: web3.eth.defaultAccount });\n }\n },\n components: {\n MyComponent\n }\n}\n</script>\n
\n\n\n\nFurther read \n"}],"Post":[{"title":"Hello World","_content":"Welcome to [Hexo](https://hexo.io/)! This is your very first post. Check [documentation](https://hexo.io/docs/) for more info. If you get any problems when using Hexo, you can find the answer in [troubleshooting](https://hexo.io/docs/troubleshooting.html) or you can ask me on [GitHub](https://github.com/hexojs/hexo/issues).\n\n## Quick Start\n\n### Create a new post\n\n``` bash\n$ hexo new \"My New Post\"\n```\n\nMore info: [Writing](https://hexo.io/docs/writing.html)\n\n### Run server\n\n``` bash\n$ hexo server\n```\n\nMore info: [Server](https://hexo.io/docs/server.html)\n\n### Generate static files\n\n``` bash\n$ hexo generate\n```\n\nMore info: [Generating](https://hexo.io/docs/generating.html)\n\n### Deploy to remote sites\n\n``` bash\n$ hexo deploy\n```\n\nMore info: [Deployment](https://hexo.io/docs/one-command-deployment.html)\n","source":"_posts/hello-world.md","raw":"---\ntitle: Hello World\n---\nWelcome to [Hexo](https://hexo.io/)! This is your very first post. Check [documentation](https://hexo.io/docs/) for more info. If you get any problems when using Hexo, you can find the answer in [troubleshooting](https://hexo.io/docs/troubleshooting.html) or you can ask me on [GitHub](https://github.com/hexojs/hexo/issues).\n\n## Quick Start\n\n### Create a new post\n\n``` bash\n$ hexo new \"My New Post\"\n```\n\nMore info: [Writing](https://hexo.io/docs/writing.html)\n\n### Run server\n\n``` bash\n$ hexo server\n```\n\nMore info: [Server](https://hexo.io/docs/server.html)\n\n### Generate static files\n\n``` bash\n$ hexo generate\n```\n\nMore info: [Generating](https://hexo.io/docs/generating.html)\n\n### Deploy to remote sites\n\n``` bash\n$ hexo deploy\n```\n\nMore info: [Deployment](https://hexo.io/docs/one-command-deployment.html)\n","slug":"hello-world","published":1,"date":"2020-03-19T18:28:50.730Z","updated":"2020-03-19T18:28:50.730Z","comments":1,"layout":"post","photos":[],"link":"","_id":"ck7z3ielc00008pbn2mijc29u","content":"Welcome to Hexo ! This is your very first post. Check documentation for more info. If you get any problems when using Hexo, you can find the answer in troubleshooting or you can ask me on GitHub .
\nQuick Start Create a new post \n\n$ hexo new "My New Post"\n
\n\n\n\nMore info: Writing
\nRun server \n\n$ hexo server\n
\n\n\n\nMore info: Server
\nGenerate static files \n\n$ hexo generate\n
\n\n\n\nMore info: Generating
\nDeploy to remote sites \n\n$ hexo deploy\n
\n\n\n\nMore info: Deployment
\n","site":{"data":{}},"excerpt":"","more":"Welcome to Hexo ! This is your very first post. Check documentation for more info. If you get any problems when using Hexo, you can find the answer in troubleshooting or you can ask me on GitHub .
\nQuick Start Create a new post \n\n$ hexo new "My New Post"\n
\n\n\n\nMore info: Writing
\nRun server \n\n$ hexo server\n
\n\n\n\nMore info: Server
\nGenerate static files \n\n$ hexo generate\n
\n\n\n\nMore info: Generating
\nDeploy to remote sites \n\n$ hexo deploy\n
\n\n\n\nMore info: Deployment
\n"}],"PostAsset":[],"PostCategory":[],"PostTag":[],"Tag":[]}}
\ No newline at end of file
diff --git a/packages/site/package-lock.json b/packages/site/package-lock.json
new file mode 100644
index 0000000..8d8ad90
--- /dev/null
+++ b/packages/site/package-lock.json
@@ -0,0 +1,5204 @@
+{
+ "name": "subspace-docs",
+ "version": "0.0.1",
+ "lockfileVersion": 1,
+ "requires": true,
+ "dependencies": {
+ "JSONStream": {
+ "version": "1.3.5",
+ "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz",
+ "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==",
+ "requires": {
+ "jsonparse": "^1.2.0",
+ "through": ">=2.2.7 <3"
+ }
+ },
+ "a-sync-waterfall": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/a-sync-waterfall/-/a-sync-waterfall-1.0.1.tgz",
+ "integrity": "sha512-RYTOHHdWipFUliRFMCS4X2Yn2X8M87V/OpSqWzKKOGhzqyUxzyVmhHDH9sAvG+ZuQf/TAOFsLCpMw09I1ufUnA=="
+ },
+ "abbrev": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
+ "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q=="
+ },
+ "accepts": {
+ "version": "1.3.7",
+ "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz",
+ "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==",
+ "requires": {
+ "mime-types": "~2.1.24",
+ "negotiator": "0.6.2"
+ }
+ },
+ "acorn": {
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.1.1.tgz",
+ "integrity": "sha512-add7dgA5ppRPxCFJoAGfMDi7PIBXq1RtGo7BhbLaxwrXPOmw8gq48Y9ozT01hUKy9byMjlR20EJhu5zlkErEkg=="
+ },
+ "ajv": {
+ "version": "6.12.0",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.0.tgz",
+ "integrity": "sha512-D6gFiFA0RRLyUbvijN74DWAjXSFxWKaWP7mldxkVhyhAV3+SWA9HEJPHQ2c9soIeTFJqcSdFDGFgdqs1iUU2Hw==",
+ "requires": {
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ }
+ },
+ "align-text": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz",
+ "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=",
+ "requires": {
+ "kind-of": "^3.0.2",
+ "longest": "^1.0.1",
+ "repeat-string": "^1.5.2"
+ }
+ },
+ "amdefine": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz",
+ "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU="
+ },
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8="
+ },
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ },
+ "anymatch": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz",
+ "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==",
+ "requires": {
+ "normalize-path": "^3.0.0",
+ "picomatch": "^2.0.4"
+ },
+ "dependencies": {
+ "normalize-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
+ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA=="
+ }
+ }
+ },
+ "aproba": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz",
+ "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw=="
+ },
+ "archy": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz",
+ "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA="
+ },
+ "are-we-there-yet": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz",
+ "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==",
+ "requires": {
+ "delegates": "^1.0.0",
+ "readable-stream": "^2.0.6"
+ }
+ },
+ "argparse": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
+ "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
+ "requires": {
+ "sprintf-js": "~1.0.2"
+ }
+ },
+ "arr-diff": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
+ "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA="
+ },
+ "arr-flatten": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz",
+ "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg=="
+ },
+ "arr-union": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
+ "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ="
+ },
+ "array-find-index": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz",
+ "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E="
+ },
+ "array-unique": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
+ "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg="
+ },
+ "asap": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz",
+ "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY="
+ },
+ "asn1": {
+ "version": "0.2.4",
+ "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz",
+ "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==",
+ "requires": {
+ "safer-buffer": "~2.1.0"
+ }
+ },
+ "assert-plus": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU="
+ },
+ "assign-symbols": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz",
+ "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c="
+ },
+ "async": {
+ "version": "0.2.10",
+ "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz",
+ "integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E="
+ },
+ "async-each": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz",
+ "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ=="
+ },
+ "async-foreach": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/async-foreach/-/async-foreach-0.1.3.tgz",
+ "integrity": "sha1-NhIfhFwFeBct5Bmpfb6x0W7DRUI="
+ },
+ "asynckit": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+ "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k="
+ },
+ "atob": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz",
+ "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg=="
+ },
+ "autoprefixer": {
+ "version": "9.7.4",
+ "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.7.4.tgz",
+ "integrity": "sha512-g0Ya30YrMBAEZk60lp+qfX5YQllG+S5W3GYCFvyHTvhOki0AEQJLPEcIuGRsqVwLi8FvXPVtwTGhfr38hVpm0g==",
+ "requires": {
+ "browserslist": "^4.8.3",
+ "caniuse-lite": "^1.0.30001020",
+ "chalk": "^2.4.2",
+ "normalize-range": "^0.1.2",
+ "num2fraction": "^1.2.2",
+ "postcss": "^7.0.26",
+ "postcss-value-parser": "^4.0.2"
+ }
+ },
+ "aws-sign2": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
+ "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg="
+ },
+ "aws4": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.9.1.tgz",
+ "integrity": "sha512-wMHVg2EOHaMRxbzgFJ9gtjOOCrI80OHLG14rxi28XwOW8ux6IiEbRCGGGqCtdAIg4FQCbW20k9RsT4y3gJlFug=="
+ },
+ "babel-code-frame": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz",
+ "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=",
+ "requires": {
+ "chalk": "^1.1.3",
+ "esutils": "^2.0.2",
+ "js-tokens": "^3.0.2"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4="
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "requires": {
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
+ }
+ },
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc="
+ }
+ }
+ },
+ "babel-messages": {
+ "version": "6.23.0",
+ "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz",
+ "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=",
+ "requires": {
+ "babel-runtime": "^6.22.0"
+ }
+ },
+ "babel-plugin-syntax-decorators": {
+ "version": "6.13.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-syntax-decorators/-/babel-plugin-syntax-decorators-6.13.0.tgz",
+ "integrity": "sha1-MSVjtNvePMgGzuPkFszurd0RrAs="
+ },
+ "babel-plugin-transform-decorators-legacy": {
+ "version": "1.3.5",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-decorators-legacy/-/babel-plugin-transform-decorators-legacy-1.3.5.tgz",
+ "integrity": "sha512-jYHwjzRXRelYQ1uGm353zNzf3QmtdCfvJbuYTZ4gKveK7M9H1fs3a5AKdY1JUDl0z97E30ukORW1dzhWvsabtA==",
+ "requires": {
+ "babel-plugin-syntax-decorators": "^6.1.18",
+ "babel-runtime": "^6.2.0",
+ "babel-template": "^6.3.0"
+ }
+ },
+ "babel-polyfill": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-polyfill/-/babel-polyfill-6.26.0.tgz",
+ "integrity": "sha1-N5k3q8Z9eJWXCtxiHyhM2WbPIVM=",
+ "requires": {
+ "babel-runtime": "^6.26.0",
+ "core-js": "^2.5.0",
+ "regenerator-runtime": "^0.10.5"
+ },
+ "dependencies": {
+ "regenerator-runtime": {
+ "version": "0.10.5",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz",
+ "integrity": "sha1-M2w+/BIgrc7dosn6tntaeVWjNlg="
+ }
+ }
+ },
+ "babel-runtime": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+ "requires": {
+ "core-js": "^2.4.0",
+ "regenerator-runtime": "^0.11.0"
+ }
+ },
+ "babel-template": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz",
+ "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=",
+ "requires": {
+ "babel-runtime": "^6.26.0",
+ "babel-traverse": "^6.26.0",
+ "babel-types": "^6.26.0",
+ "babylon": "^6.18.0",
+ "lodash": "^4.17.4"
+ }
+ },
+ "babel-traverse": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz",
+ "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=",
+ "requires": {
+ "babel-code-frame": "^6.26.0",
+ "babel-messages": "^6.23.0",
+ "babel-runtime": "^6.26.0",
+ "babel-types": "^6.26.0",
+ "babylon": "^6.18.0",
+ "debug": "^2.6.8",
+ "globals": "^9.18.0",
+ "invariant": "^2.2.2",
+ "lodash": "^4.17.4"
+ }
+ },
+ "babel-types": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz",
+ "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",
+ "requires": {
+ "babel-runtime": "^6.26.0",
+ "esutils": "^2.0.2",
+ "lodash": "^4.17.4",
+ "to-fast-properties": "^1.0.3"
+ }
+ },
+ "babylon": {
+ "version": "6.18.0",
+ "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz",
+ "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ=="
+ },
+ "balanced-match": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
+ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c="
+ },
+ "base": {
+ "version": "0.11.2",
+ "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz",
+ "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==",
+ "requires": {
+ "cache-base": "^1.0.1",
+ "class-utils": "^0.3.5",
+ "component-emitter": "^1.2.1",
+ "define-property": "^1.0.0",
+ "isobject": "^3.0.1",
+ "mixin-deep": "^1.2.0",
+ "pascalcase": "^0.1.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "requires": {
+ "is-descriptor": "^1.0.0"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
+ },
+ "kind-of": {
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
+ "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw=="
+ }
+ }
+ },
+ "basic-auth": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz",
+ "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==",
+ "requires": {
+ "safe-buffer": "5.1.2"
+ }
+ },
+ "bcrypt-pbkdf": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
+ "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=",
+ "requires": {
+ "tweetnacl": "^0.14.3"
+ }
+ },
+ "binary-extensions": {
+ "version": "1.13.1",
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz",
+ "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw=="
+ },
+ "bindings": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz",
+ "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==",
+ "optional": true,
+ "requires": {
+ "file-uri-to-path": "1.0.0"
+ }
+ },
+ "block-stream": {
+ "version": "0.0.9",
+ "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz",
+ "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=",
+ "requires": {
+ "inherits": "~2.0.0"
+ }
+ },
+ "bluebird": {
+ "version": "3.7.2",
+ "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz",
+ "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg=="
+ },
+ "brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "requires": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "braces": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
+ "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
+ "requires": {
+ "arr-flatten": "^1.1.0",
+ "array-unique": "^0.3.2",
+ "extend-shallow": "^2.0.1",
+ "fill-range": "^4.0.0",
+ "isobject": "^3.0.1",
+ "repeat-element": "^1.1.2",
+ "snapdragon": "^0.8.1",
+ "snapdragon-node": "^2.0.1",
+ "split-string": "^3.0.2",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "browserslist": {
+ "version": "4.9.1",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.9.1.tgz",
+ "integrity": "sha512-Q0DnKq20End3raFulq6Vfp1ecB9fh8yUNV55s8sekaDDeqBaCtWlRHCUdaWyUeSSBJM7IbM6HcsyaeYqgeDhnw==",
+ "requires": {
+ "caniuse-lite": "^1.0.30001030",
+ "electron-to-chromium": "^1.3.363",
+ "node-releases": "^1.1.50"
+ }
+ },
+ "bytes": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz",
+ "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg="
+ },
+ "cache-base": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz",
+ "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==",
+ "requires": {
+ "collection-visit": "^1.0.0",
+ "component-emitter": "^1.2.1",
+ "get-value": "^2.0.6",
+ "has-value": "^1.0.0",
+ "isobject": "^3.0.1",
+ "set-value": "^2.0.0",
+ "to-object-path": "^0.3.0",
+ "union-value": "^1.0.0",
+ "unset-value": "^1.0.0"
+ }
+ },
+ "camel-case": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.1.tgz",
+ "integrity": "sha512-7fa2WcG4fYFkclIvEmxBbTvmibwF2/agfEBc6q3lOpVu0A13ltLsA+Hr/8Hp6kp5f+G7hKi6t8lys6XxP+1K6Q==",
+ "requires": {
+ "pascal-case": "^3.1.1",
+ "tslib": "^1.10.0"
+ }
+ },
+ "camelcase": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz",
+ "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8="
+ },
+ "camelcase-keys": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz",
+ "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=",
+ "requires": {
+ "camelcase": "^2.0.0",
+ "map-obj": "^1.0.0"
+ }
+ },
+ "caniuse-lite": {
+ "version": "1.0.30001033",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001033.tgz",
+ "integrity": "sha512-8Ibzxee6ibc5q88cM1usPsMpJOG5CTq0s/dKOmlekPbDGKt+UrnOOTPSjQz3kVo6yL7N4SB5xd+FGLHQmbzh6A=="
+ },
+ "caseless": {
+ "version": "0.12.0",
+ "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
+ "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw="
+ },
+ "center-align": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz",
+ "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=",
+ "requires": {
+ "align-text": "^0.1.3",
+ "lazy-cache": "^1.0.3"
+ }
+ },
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
+ "chokidar": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.3.1.tgz",
+ "integrity": "sha512-4QYCEWOcK3OJrxwvyyAOxFuhpvOVCYkr33LPfFNBjAD/w3sEzWsp2BUOkI4l9bHvWioAd0rc6NlHUOEaWkTeqg==",
+ "requires": {
+ "anymatch": "~3.1.1",
+ "braces": "~3.0.2",
+ "fsevents": "~2.1.2",
+ "glob-parent": "~5.1.0",
+ "is-binary-path": "~2.1.0",
+ "is-glob": "~4.0.1",
+ "normalize-path": "~3.0.0",
+ "readdirp": "~3.3.0"
+ },
+ "dependencies": {
+ "binary-extensions": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.0.0.tgz",
+ "integrity": "sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow=="
+ },
+ "braces": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
+ "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
+ "requires": {
+ "fill-range": "^7.0.1"
+ }
+ },
+ "fill-range": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
+ "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
+ "requires": {
+ "to-regex-range": "^5.0.1"
+ }
+ },
+ "fsevents": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.2.tgz",
+ "integrity": "sha512-R4wDiBwZ0KzpgOWetKDug1FZcYhqYnUYKtfZYt4mD5SBz76q0KR4Q9o7GIPamsVPGmW3EYPPJ0dOOjvx32ldZA==",
+ "optional": true
+ },
+ "glob-parent": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.0.tgz",
+ "integrity": "sha512-qjtRgnIVmOfnKUE3NJAQEdk+lKrxfw8t5ke7SXtfMTHcjsBfOfWXCQfdb30zfDoZQ2IRSIiidmjtbHZPZ++Ihw==",
+ "requires": {
+ "is-glob": "^4.0.1"
+ }
+ },
+ "is-binary-path": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
+ "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
+ "requires": {
+ "binary-extensions": "^2.0.0"
+ }
+ },
+ "is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI="
+ },
+ "is-glob": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz",
+ "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==",
+ "requires": {
+ "is-extglob": "^2.1.1"
+ }
+ },
+ "is-number": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng=="
+ },
+ "normalize-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
+ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA=="
+ },
+ "readdirp": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.3.0.tgz",
+ "integrity": "sha512-zz0pAkSPOXXm1viEwygWIPSPkcBYjW1xU5j/JBh5t9bGCJwa6f9+BJa6VaB2g+b55yVrmXzqkyLf4xaWYM0IkQ==",
+ "requires": {
+ "picomatch": "^2.0.7"
+ }
+ },
+ "to-regex-range": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
+ "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+ "requires": {
+ "is-number": "^7.0.0"
+ }
+ }
+ }
+ },
+ "class-utils": {
+ "version": "0.3.6",
+ "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz",
+ "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==",
+ "requires": {
+ "arr-union": "^3.1.0",
+ "define-property": "^0.2.5",
+ "isobject": "^3.0.0",
+ "static-extend": "^0.1.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ }
+ }
+ },
+ "clipboard": {
+ "version": "1.7.1",
+ "resolved": "https://registry.npmjs.org/clipboard/-/clipboard-1.7.1.tgz",
+ "integrity": "sha1-Ng1taUbpmnof7zleQrqStem1oWs=",
+ "optional": true,
+ "requires": {
+ "good-listener": "^1.2.2",
+ "select": "^1.1.2",
+ "tiny-emitter": "^2.0.0"
+ }
+ },
+ "cliui": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz",
+ "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=",
+ "requires": {
+ "string-width": "^1.0.1",
+ "strip-ansi": "^3.0.1",
+ "wrap-ansi": "^2.0.0"
+ }
+ },
+ "code-point-at": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
+ "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c="
+ },
+ "collection-visit": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
+ "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=",
+ "requires": {
+ "map-visit": "^1.0.0",
+ "object-visit": "^1.0.0"
+ }
+ },
+ "color-convert": {
+ "version": "1.9.3",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
+ "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
+ "requires": {
+ "color-name": "1.1.3"
+ }
+ },
+ "color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU="
+ },
+ "combined-stream": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
+ "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
+ "requires": {
+ "delayed-stream": "~1.0.0"
+ }
+ },
+ "command-exists": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.8.tgz",
+ "integrity": "sha512-PM54PkseWbiiD/mMsbvW351/u+dafwTJ0ye2qB60G1aGQP9j3xK2gmMDc+R34L3nDtx4qMCitXT75mkbkGJDLw=="
+ },
+ "component-emitter": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz",
+ "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg=="
+ },
+ "compressible": {
+ "version": "2.0.18",
+ "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz",
+ "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==",
+ "requires": {
+ "mime-db": ">= 1.43.0 < 2"
+ }
+ },
+ "compression": {
+ "version": "1.7.4",
+ "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz",
+ "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==",
+ "requires": {
+ "accepts": "~1.3.5",
+ "bytes": "3.0.0",
+ "compressible": "~2.0.16",
+ "debug": "2.6.9",
+ "on-headers": "~1.0.2",
+ "safe-buffer": "5.1.2",
+ "vary": "~1.1.2"
+ }
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
+ },
+ "connect": {
+ "version": "3.7.0",
+ "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz",
+ "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==",
+ "requires": {
+ "debug": "2.6.9",
+ "finalhandler": "1.1.2",
+ "parseurl": "~1.3.3",
+ "utils-merge": "1.0.1"
+ }
+ },
+ "console-control-strings": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz",
+ "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4="
+ },
+ "copy-descriptor": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
+ "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40="
+ },
+ "core-decorators": {
+ "version": "0.11.2",
+ "resolved": "https://registry.npmjs.org/core-decorators/-/core-decorators-0.11.2.tgz",
+ "integrity": "sha1-GyQzFZQa598a8938tX3+6mPIsXE="
+ },
+ "core-js": {
+ "version": "2.6.11",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.11.tgz",
+ "integrity": "sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg=="
+ },
+ "core-util-is": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
+ },
+ "cross-spawn": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.1.tgz",
+ "integrity": "sha512-u7v4o84SwFpD32Z8IIcPZ6z1/ie24O6RU3RbtL5Y316l3KuHVPx9ItBgWQ6VlfAFnRnTtMUrsQ9MUUTuEZjogg==",
+ "requires": {
+ "path-key": "^3.1.0",
+ "shebang-command": "^2.0.0",
+ "which": "^2.0.1"
+ },
+ "dependencies": {
+ "which": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+ "requires": {
+ "isexe": "^2.0.0"
+ }
+ }
+ }
+ },
+ "css": {
+ "version": "2.2.4",
+ "resolved": "https://registry.npmjs.org/css/-/css-2.2.4.tgz",
+ "integrity": "sha512-oUnjmWpy0niI3x/mPL8dVEI1l7MnG3+HHyRPHf+YFSbK+svOhXpmSOcDURUh2aOCgl2grzrOPt1nHLuCVFULLw==",
+ "requires": {
+ "inherits": "^2.0.3",
+ "source-map": "^0.6.1",
+ "source-map-resolve": "^0.5.2",
+ "urix": "^0.1.0"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+ }
+ }
+ },
+ "css-parse": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/css-parse/-/css-parse-1.7.0.tgz",
+ "integrity": "sha1-Mh9s9zeCpv91ERE5D8BeLGV9jJs="
+ },
+ "cuid": {
+ "version": "2.1.8",
+ "resolved": "https://registry.npmjs.org/cuid/-/cuid-2.1.8.tgz",
+ "integrity": "sha512-xiEMER6E7TlTPnDxrM4eRiC6TRgjNX9xzEZ5U/Se2YJKr7Mq4pJn/2XEHjl3STcSh96GmkHPcBXLES8M29wyyg=="
+ },
+ "currently-unhandled": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz",
+ "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=",
+ "requires": {
+ "array-find-index": "^1.0.1"
+ }
+ },
+ "dashdash": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
+ "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
+ "requires": {
+ "assert-plus": "^1.0.0"
+ }
+ },
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "decamelize": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
+ "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA="
+ },
+ "decode-uri-component": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
+ "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU="
+ },
+ "deepmerge": {
+ "version": "4.2.2",
+ "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz",
+ "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg=="
+ },
+ "define-property": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
+ "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
+ "requires": {
+ "is-descriptor": "^1.0.2",
+ "isobject": "^3.0.1"
+ },
+ "dependencies": {
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
+ },
+ "kind-of": {
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
+ "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw=="
+ }
+ }
+ },
+ "delayed-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+ "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk="
+ },
+ "delegate": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/delegate/-/delegate-3.2.0.tgz",
+ "integrity": "sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw==",
+ "optional": true
+ },
+ "delegates": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
+ "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o="
+ },
+ "depd": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
+ "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak="
+ },
+ "destroy": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
+ "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA="
+ },
+ "dir-resolve": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/dir-resolve/-/dir-resolve-1.0.2.tgz",
+ "integrity": "sha1-c5Rv3+RmrzHBjddWUunCwwDgZRw="
+ },
+ "dom-serializer": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz",
+ "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==",
+ "requires": {
+ "domelementtype": "^2.0.1",
+ "entities": "^2.0.0"
+ }
+ },
+ "domelementtype": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.0.1.tgz",
+ "integrity": "sha512-5HOHUDsYZWV8FGWN0Njbr/Rn7f/eWSQi1v7+HsUVwXgn8nWWlL64zKDkS0n8ZmQ3mlWOMuXOnR+7Nx/5tMO5AQ=="
+ },
+ "domhandler": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-3.0.0.tgz",
+ "integrity": "sha512-eKLdI5v9m67kbXQbJSNn1zjh0SDzvzWVWtX+qEI3eMjZw8daH9k8rlj1FZY9memPwjiskQFbe7vHVVJIAqoEhw==",
+ "requires": {
+ "domelementtype": "^2.0.1"
+ }
+ },
+ "domutils": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.0.0.tgz",
+ "integrity": "sha512-n5SelJ1axbO636c2yUtOGia/IcJtVtlhQbFiVDBZHKV5ReJO1ViX7sFEemtuyoAnBxk5meNSYgA8V4s0271efg==",
+ "requires": {
+ "dom-serializer": "^0.2.1",
+ "domelementtype": "^2.0.1",
+ "domhandler": "^3.0.0"
+ }
+ },
+ "ecc-jsbn": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
+ "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=",
+ "requires": {
+ "jsbn": "~0.1.0",
+ "safer-buffer": "^2.1.0"
+ }
+ },
+ "ee-first": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
+ "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0="
+ },
+ "ejs": {
+ "version": "2.7.4",
+ "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.7.4.tgz",
+ "integrity": "sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA=="
+ },
+ "electron-to-chromium": {
+ "version": "1.3.375",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.375.tgz",
+ "integrity": "sha512-zmaFnYVBtfpF8bGRYxgPeVAlXB7N3On8rjBE2ROc6wOpTPpzRWaiHo6KkbJMvlH07CH33uks/TEb6kuMMn8q6A=="
+ },
+ "encodeurl": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
+ "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k="
+ },
+ "entities": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-2.0.0.tgz",
+ "integrity": "sha512-D9f7V0JSRwIxlRI2mjMqufDrRDnx8p+eEOz7aUM9SuvF8gsBzra0/6tbjl1m8eQHrZlYj6PxqE00hZ1SAIKPLw=="
+ },
+ "error-ex": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
+ "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
+ "requires": {
+ "is-arrayish": "^0.2.1"
+ }
+ },
+ "escape-html": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
+ "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg="
+ },
+ "escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ="
+ },
+ "esprima": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
+ "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A=="
+ },
+ "esutils": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
+ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g=="
+ },
+ "etag": {
+ "version": "1.8.1",
+ "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
+ "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc="
+ },
+ "expand-brackets": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
+ "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
+ "requires": {
+ "debug": "^2.3.3",
+ "define-property": "^0.2.5",
+ "extend-shallow": "^2.0.1",
+ "posix-character-classes": "^0.1.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "extend": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
+ "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="
+ },
+ "extend-shallow": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
+ "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
+ "requires": {
+ "assign-symbols": "^1.0.0",
+ "is-extendable": "^1.0.1"
+ },
+ "dependencies": {
+ "is-extendable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+ "requires": {
+ "is-plain-object": "^2.0.4"
+ }
+ }
+ }
+ },
+ "extglob": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
+ "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
+ "requires": {
+ "array-unique": "^0.3.2",
+ "define-property": "^1.0.0",
+ "expand-brackets": "^2.1.4",
+ "extend-shallow": "^2.0.1",
+ "fragment-cache": "^0.2.1",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "requires": {
+ "is-descriptor": "^1.0.0"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
+ },
+ "kind-of": {
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
+ "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw=="
+ }
+ }
+ },
+ "extsprintf": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
+ "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU="
+ },
+ "fast-deep-equal": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz",
+ "integrity": "sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA=="
+ },
+ "fast-json-stable-stringify": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
+ "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw=="
+ },
+ "file-uri-to-path": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz",
+ "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==",
+ "optional": true
+ },
+ "fill-range": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
+ "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
+ "requires": {
+ "extend-shallow": "^2.0.1",
+ "is-number": "^3.0.0",
+ "repeat-string": "^1.6.1",
+ "to-regex-range": "^2.1.0"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "finalhandler": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz",
+ "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==",
+ "requires": {
+ "debug": "2.6.9",
+ "encodeurl": "~1.0.2",
+ "escape-html": "~1.0.3",
+ "on-finished": "~2.3.0",
+ "parseurl": "~1.3.3",
+ "statuses": "~1.5.0",
+ "unpipe": "~1.0.0"
+ }
+ },
+ "find-up": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz",
+ "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=",
+ "requires": {
+ "path-exists": "^2.0.0",
+ "pinkie-promise": "^2.0.0"
+ }
+ },
+ "for-in": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
+ "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA="
+ },
+ "for-own": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz",
+ "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=",
+ "requires": {
+ "for-in": "^1.0.1"
+ }
+ },
+ "forever-agent": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
+ "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE="
+ },
+ "form-data": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz",
+ "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==",
+ "requires": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.6",
+ "mime-types": "^2.1.12"
+ }
+ },
+ "fragment-cache": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz",
+ "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=",
+ "requires": {
+ "map-cache": "^0.2.2"
+ }
+ },
+ "fresh": {
+ "version": "0.5.2",
+ "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
+ "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac="
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
+ },
+ "fsevents": {
+ "version": "1.2.11",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.11.tgz",
+ "integrity": "sha512-+ux3lx6peh0BpvY0JebGyZoiR4D+oYzdPZMKJwkZ+sFkNJzpL7tXc/wehS49gUAxg3tmMHPHZkA8JU2rhhgDHw==",
+ "optional": true,
+ "requires": {
+ "bindings": "^1.5.0",
+ "nan": "^2.12.1",
+ "node-pre-gyp": "*"
+ },
+ "dependencies": {
+ "abbrev": {
+ "version": "1.1.1",
+ "bundled": true,
+ "optional": true
+ },
+ "ansi-regex": {
+ "version": "2.1.1",
+ "bundled": true,
+ "optional": true
+ },
+ "aproba": {
+ "version": "1.2.0",
+ "bundled": true,
+ "optional": true
+ },
+ "are-we-there-yet": {
+ "version": "1.1.5",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "delegates": "^1.0.0",
+ "readable-stream": "^2.0.6"
+ }
+ },
+ "balanced-match": {
+ "version": "1.0.0",
+ "bundled": true,
+ "optional": true
+ },
+ "brace-expansion": {
+ "version": "1.1.11",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "chownr": {
+ "version": "1.1.3",
+ "bundled": true,
+ "optional": true
+ },
+ "code-point-at": {
+ "version": "1.1.0",
+ "bundled": true,
+ "optional": true
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "bundled": true,
+ "optional": true
+ },
+ "console-control-strings": {
+ "version": "1.1.0",
+ "bundled": true,
+ "optional": true
+ },
+ "core-util-is": {
+ "version": "1.0.2",
+ "bundled": true,
+ "optional": true
+ },
+ "debug": {
+ "version": "3.2.6",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ },
+ "deep-extend": {
+ "version": "0.6.0",
+ "bundled": true,
+ "optional": true
+ },
+ "delegates": {
+ "version": "1.0.0",
+ "bundled": true,
+ "optional": true
+ },
+ "detect-libc": {
+ "version": "1.0.3",
+ "bundled": true,
+ "optional": true
+ },
+ "fs-minipass": {
+ "version": "1.2.7",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "minipass": "^2.6.0"
+ }
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "bundled": true,
+ "optional": true
+ },
+ "gauge": {
+ "version": "2.7.4",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "aproba": "^1.0.3",
+ "console-control-strings": "^1.0.0",
+ "has-unicode": "^2.0.0",
+ "object-assign": "^4.1.0",
+ "signal-exit": "^3.0.0",
+ "string-width": "^1.0.1",
+ "strip-ansi": "^3.0.1",
+ "wide-align": "^1.1.0"
+ }
+ },
+ "glob": {
+ "version": "7.1.6",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ },
+ "has-unicode": {
+ "version": "2.0.1",
+ "bundled": true,
+ "optional": true
+ },
+ "iconv-lite": {
+ "version": "0.4.24",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "safer-buffer": ">= 2.1.2 < 3"
+ }
+ },
+ "ignore-walk": {
+ "version": "3.0.3",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "minimatch": "^3.0.4"
+ }
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "inherits": {
+ "version": "2.0.4",
+ "bundled": true,
+ "optional": true
+ },
+ "ini": {
+ "version": "1.3.5",
+ "bundled": true,
+ "optional": true
+ },
+ "is-fullwidth-code-point": {
+ "version": "1.0.0",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "number-is-nan": "^1.0.0"
+ }
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "bundled": true,
+ "optional": true
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ },
+ "minimist": {
+ "version": "0.0.8",
+ "bundled": true,
+ "optional": true
+ },
+ "minipass": {
+ "version": "2.9.0",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "safe-buffer": "^5.1.2",
+ "yallist": "^3.0.0"
+ }
+ },
+ "minizlib": {
+ "version": "1.3.3",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "minipass": "^2.9.0"
+ }
+ },
+ "mkdirp": {
+ "version": "0.5.1",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "minimist": "0.0.8"
+ }
+ },
+ "ms": {
+ "version": "2.1.2",
+ "bundled": true,
+ "optional": true
+ },
+ "needle": {
+ "version": "2.4.0",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "debug": "^3.2.6",
+ "iconv-lite": "^0.4.4",
+ "sax": "^1.2.4"
+ }
+ },
+ "node-pre-gyp": {
+ "version": "0.14.0",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "detect-libc": "^1.0.2",
+ "mkdirp": "^0.5.1",
+ "needle": "^2.2.1",
+ "nopt": "^4.0.1",
+ "npm-packlist": "^1.1.6",
+ "npmlog": "^4.0.2",
+ "rc": "^1.2.7",
+ "rimraf": "^2.6.1",
+ "semver": "^5.3.0",
+ "tar": "^4.4.2"
+ }
+ },
+ "nopt": {
+ "version": "4.0.1",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "abbrev": "1",
+ "osenv": "^0.1.4"
+ }
+ },
+ "npm-bundled": {
+ "version": "1.1.1",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "npm-normalize-package-bin": "^1.0.1"
+ }
+ },
+ "npm-normalize-package-bin": {
+ "version": "1.0.1",
+ "bundled": true,
+ "optional": true
+ },
+ "npm-packlist": {
+ "version": "1.4.7",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "ignore-walk": "^3.0.1",
+ "npm-bundled": "^1.0.1"
+ }
+ },
+ "npmlog": {
+ "version": "4.1.2",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "are-we-there-yet": "~1.1.2",
+ "console-control-strings": "~1.1.0",
+ "gauge": "~2.7.3",
+ "set-blocking": "~2.0.0"
+ }
+ },
+ "number-is-nan": {
+ "version": "1.0.1",
+ "bundled": true,
+ "optional": true
+ },
+ "object-assign": {
+ "version": "4.1.1",
+ "bundled": true,
+ "optional": true
+ },
+ "once": {
+ "version": "1.4.0",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "wrappy": "1"
+ }
+ },
+ "os-homedir": {
+ "version": "1.0.2",
+ "bundled": true,
+ "optional": true
+ },
+ "os-tmpdir": {
+ "version": "1.0.2",
+ "bundled": true,
+ "optional": true
+ },
+ "osenv": {
+ "version": "0.1.5",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "os-homedir": "^1.0.0",
+ "os-tmpdir": "^1.0.0"
+ }
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "bundled": true,
+ "optional": true
+ },
+ "process-nextick-args": {
+ "version": "2.0.1",
+ "bundled": true,
+ "optional": true
+ },
+ "rc": {
+ "version": "1.2.8",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "deep-extend": "^0.6.0",
+ "ini": "~1.3.0",
+ "minimist": "^1.2.0",
+ "strip-json-comments": "~2.0.1"
+ },
+ "dependencies": {
+ "minimist": {
+ "version": "1.2.0",
+ "bundled": true,
+ "optional": true
+ }
+ }
+ },
+ "readable-stream": {
+ "version": "2.3.6",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "rimraf": {
+ "version": "2.7.1",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "glob": "^7.1.3"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.1.2",
+ "bundled": true,
+ "optional": true
+ },
+ "safer-buffer": {
+ "version": "2.1.2",
+ "bundled": true,
+ "optional": true
+ },
+ "sax": {
+ "version": "1.2.4",
+ "bundled": true,
+ "optional": true
+ },
+ "semver": {
+ "version": "5.7.1",
+ "bundled": true,
+ "optional": true
+ },
+ "set-blocking": {
+ "version": "2.0.0",
+ "bundled": true,
+ "optional": true
+ },
+ "signal-exit": {
+ "version": "3.0.2",
+ "bundled": true,
+ "optional": true
+ },
+ "string-width": {
+ "version": "1.0.2",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "code-point-at": "^1.0.0",
+ "is-fullwidth-code-point": "^1.0.0",
+ "strip-ansi": "^3.0.0"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ },
+ "strip-json-comments": {
+ "version": "2.0.1",
+ "bundled": true,
+ "optional": true
+ },
+ "tar": {
+ "version": "4.4.13",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "chownr": "^1.1.1",
+ "fs-minipass": "^1.2.5",
+ "minipass": "^2.8.6",
+ "minizlib": "^1.2.1",
+ "mkdirp": "^0.5.0",
+ "safe-buffer": "^5.1.2",
+ "yallist": "^3.0.3"
+ }
+ },
+ "util-deprecate": {
+ "version": "1.0.2",
+ "bundled": true,
+ "optional": true
+ },
+ "wide-align": {
+ "version": "1.1.3",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "string-width": "^1.0.2 || 2"
+ }
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "bundled": true,
+ "optional": true
+ },
+ "yallist": {
+ "version": "3.1.1",
+ "bundled": true,
+ "optional": true
+ }
+ }
+ },
+ "fstream": {
+ "version": "1.0.12",
+ "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz",
+ "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==",
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "inherits": "~2.0.0",
+ "mkdirp": ">=0.5 0",
+ "rimraf": "2"
+ }
+ },
+ "gauge": {
+ "version": "2.7.4",
+ "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz",
+ "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=",
+ "requires": {
+ "aproba": "^1.0.3",
+ "console-control-strings": "^1.0.0",
+ "has-unicode": "^2.0.0",
+ "object-assign": "^4.1.0",
+ "signal-exit": "^3.0.0",
+ "string-width": "^1.0.1",
+ "strip-ansi": "^3.0.1",
+ "wide-align": "^1.1.0"
+ }
+ },
+ "gaze": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.3.tgz",
+ "integrity": "sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g==",
+ "requires": {
+ "globule": "^1.0.0"
+ }
+ },
+ "get-caller-file": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz",
+ "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w=="
+ },
+ "get-stdin": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz",
+ "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4="
+ },
+ "get-value": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
+ "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg="
+ },
+ "getpass": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
+ "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
+ "requires": {
+ "assert-plus": "^1.0.0"
+ }
+ },
+ "glob": {
+ "version": "7.1.6",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
+ "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ },
+ "glob-base": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz",
+ "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=",
+ "requires": {
+ "glob-parent": "^2.0.0",
+ "is-glob": "^2.0.0"
+ }
+ },
+ "glob-parent": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz",
+ "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=",
+ "requires": {
+ "is-glob": "^2.0.0"
+ }
+ },
+ "globals": {
+ "version": "9.18.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz",
+ "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ=="
+ },
+ "globule": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/globule/-/globule-1.3.1.tgz",
+ "integrity": "sha512-OVyWOHgw29yosRHCHo7NncwR1hW5ew0W/UrvtwvjefVJeQ26q4/8r8FmPsSF1hJ93IgWkyv16pCTz6WblMzm/g==",
+ "requires": {
+ "glob": "~7.1.1",
+ "lodash": "~4.17.12",
+ "minimatch": "~3.0.2"
+ }
+ },
+ "good-listener": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/good-listener/-/good-listener-1.2.2.tgz",
+ "integrity": "sha1-1TswzfkxPf+33JoNR3CWqm0UXFA=",
+ "optional": true,
+ "requires": {
+ "delegate": "^3.1.2"
+ }
+ },
+ "graceful-fs": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz",
+ "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ=="
+ },
+ "har-schema": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
+ "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI="
+ },
+ "har-validator": {
+ "version": "5.1.3",
+ "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz",
+ "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==",
+ "requires": {
+ "ajv": "^6.5.5",
+ "har-schema": "^2.0.0"
+ }
+ },
+ "has-ansi": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
+ "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ },
+ "has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0="
+ },
+ "has-unicode": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz",
+ "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk="
+ },
+ "has-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz",
+ "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=",
+ "requires": {
+ "get-value": "^2.0.6",
+ "has-values": "^1.0.0",
+ "isobject": "^3.0.0"
+ }
+ },
+ "has-values": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz",
+ "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=",
+ "requires": {
+ "is-number": "^3.0.0",
+ "kind-of": "^4.0.0"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
+ "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=",
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "hexo": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/hexo/-/hexo-4.2.0.tgz",
+ "integrity": "sha512-j2Kzgx/eWF0IgSfUEsAAhr0mDaaqR3E1MTus0/Vrs+JpQdMiSlqSbudPf2S9O4FHi5CAzDCuzToGlg2kgoQxcA==",
+ "requires": {
+ "abbrev": "^1.1.1",
+ "archy": "^1.0.0",
+ "bluebird": "^3.5.2",
+ "chalk": "^3.0.0",
+ "hexo-cli": "^3.0.0",
+ "hexo-front-matter": "^1.0.0",
+ "hexo-fs": "^2.0.0",
+ "hexo-i18n": "^1.0.0",
+ "hexo-log": "^1.0.0",
+ "hexo-util": "^1.8.0",
+ "js-yaml": "^3.12.0",
+ "lodash": "^4.17.11",
+ "micromatch": "^4.0.2",
+ "moment": "^2.22.2",
+ "moment-timezone": "^0.5.21",
+ "nunjucks": "^3.1.3",
+ "pretty-hrtime": "^1.0.3",
+ "resolve": "^1.8.1",
+ "strip-ansi": "^6.0.0",
+ "strip-indent": "^3.0.0",
+ "swig-extras": "0.0.1",
+ "swig-templates": "^2.0.3",
+ "text-table": "^0.2.0",
+ "tildify": "^2.0.0",
+ "titlecase": "^1.1.2",
+ "warehouse": "^3.0.1"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
+ "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg=="
+ },
+ "ansi-styles": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz",
+ "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==",
+ "requires": {
+ "@types/color-name": "^1.1.1",
+ "color-convert": "^2.0.1"
+ },
+ "dependencies": {
+ "@types/color-name": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz",
+ "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ=="
+ }
+ }
+ },
+ "braces": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
+ "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
+ "requires": {
+ "fill-range": "^7.0.1"
+ }
+ },
+ "chalk": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz",
+ "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==",
+ "requires": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ }
+ },
+ "color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "requires": {
+ "color-name": "~1.1.4"
+ }
+ },
+ "color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
+ },
+ "fill-range": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
+ "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
+ "requires": {
+ "to-regex-range": "^5.0.1"
+ }
+ },
+ "has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="
+ },
+ "hexo-cli": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/hexo-cli/-/hexo-cli-3.1.0.tgz",
+ "integrity": "sha512-Rc2gX2DlsALaFBbfk1XYx2XmeVAX+C7Dxc7UwETZOcu3cbGsf2DpwYTfKQumW3jagi1icA4KgW9aSRPPZZj/zg==",
+ "requires": {
+ "abbrev": "^1.1.1",
+ "acorn": "^7.0.0",
+ "bluebird": "^3.5.5",
+ "chalk": "^2.4.2",
+ "command-exists": "^1.2.8",
+ "hexo-fs": "^2.0.0",
+ "hexo-log": "^1.0.0",
+ "hexo-util": "^1.4.0",
+ "minimist": "^1.2.0",
+ "resolve": "^1.11.0",
+ "tildify": "^2.0.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ },
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
+ "color-convert": {
+ "version": "1.9.3",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
+ "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
+ "requires": {
+ "color-name": "1.1.3"
+ }
+ },
+ "color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU="
+ },
+ "has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0="
+ },
+ "supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
+ "is-number": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng=="
+ },
+ "micromatch": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz",
+ "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==",
+ "requires": {
+ "braces": "^3.0.1",
+ "picomatch": "^2.0.5"
+ }
+ },
+ "strip-ansi": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
+ "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
+ "requires": {
+ "ansi-regex": "^5.0.0"
+ }
+ },
+ "supports-color": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz",
+ "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==",
+ "requires": {
+ "has-flag": "^4.0.0"
+ }
+ },
+ "to-regex-range": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
+ "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+ "requires": {
+ "is-number": "^7.0.0"
+ }
+ }
+ }
+ },
+ "hexo-autoprefixer": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/hexo-autoprefixer/-/hexo-autoprefixer-2.0.0.tgz",
+ "integrity": "sha512-qiAcD3K8D5PeyPh357CG6Cn+9GmCBNDRbD2ghnTZzfOo+HFLlLWXyPZfqaUZKKdP2iksmj+vYjE5oFsQizkWYw==",
+ "requires": {
+ "autoprefixer": "^9.4.3",
+ "minimatch": "^3.0.2",
+ "postcss": "^7.0.7"
+ }
+ },
+ "hexo-bunyan": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/hexo-bunyan/-/hexo-bunyan-2.0.0.tgz",
+ "integrity": "sha512-5XHYu/yJOgPFTC0AaEgFtPPaBJU4jC7R10tITJwTRJk7K93rgSpRV8jF3e0PPlPwXd4FphTawjljH5R8LjmtpQ==",
+ "requires": {
+ "moment": "^2.10.6",
+ "mv": "~2",
+ "safe-json-stringify": "~1"
+ }
+ },
+ "hexo-front-matter": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/hexo-front-matter/-/hexo-front-matter-1.0.0.tgz",
+ "integrity": "sha512-Hn8IIzgWWnxYTekrjnA0rxwWMoQHifyrxKMqVibmFaRKf4AQ2V6Xo13Jiso6CDwYfS+OdA41QS5DG1Y+QXA5gw==",
+ "requires": {
+ "js-yaml": "^3.13.1"
+ }
+ },
+ "hexo-fs": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/hexo-fs/-/hexo-fs-2.0.0.tgz",
+ "integrity": "sha512-mtwjfh5IZMXVCoITtoV+LfWbrD7xCWyv8OTIrOmwUW4JR+7EEvuwqu+QDztt4RS0azxUuc1sKVK68Mxfp2AoYQ==",
+ "requires": {
+ "bluebird": "^3.5.1",
+ "chokidar": "^3.0.0",
+ "escape-string-regexp": "^2.0.0",
+ "graceful-fs": "^4.1.11"
+ },
+ "dependencies": {
+ "escape-string-regexp": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz",
+ "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w=="
+ }
+ }
+ },
+ "hexo-generator-archive": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/hexo-generator-archive/-/hexo-generator-archive-1.0.0.tgz",
+ "integrity": "sha512-24TeanDGpMBUIq37DHpSESQbeN6ssZ06edsGSI76tN4Yit50TgsgzP5g5DSu0yJk0jUtHJntysWE8NYAlFXibA==",
+ "requires": {
+ "hexo-pagination": "1.0.0"
+ }
+ },
+ "hexo-generator-category": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/hexo-generator-category/-/hexo-generator-category-1.0.0.tgz",
+ "integrity": "sha512-kmtwT1SHYL2ismbGnYQXNtqLFSeTdtHNbJIqno3LKROpCK8ybST5QVXF1bZI9LkFcXV/H8ilt8gfg4/dNNcQQQ==",
+ "requires": {
+ "hexo-pagination": "1.0.0"
+ }
+ },
+ "hexo-generator-i18n": {
+ "version": "0.0.7",
+ "resolved": "https://registry.npmjs.org/hexo-generator-i18n/-/hexo-generator-i18n-0.0.7.tgz",
+ "integrity": "sha1-qzwZi9gKBxABGvwucME8W57m7Aw=",
+ "requires": {
+ "lodash": "^4.15.0"
+ }
+ },
+ "hexo-generator-index": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/hexo-generator-index/-/hexo-generator-index-1.0.0.tgz",
+ "integrity": "sha512-L25MdZ7e5ar/F8lIW+zBNNlA4f5A8CBUOYi1IQZCgL3wPVW+AWn66RSM5UVBAbiw5yxDeTHdk0sJYXbhSBaOFQ==",
+ "requires": {
+ "hexo-pagination": "1.0.0"
+ }
+ },
+ "hexo-generator-tag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/hexo-generator-tag/-/hexo-generator-tag-1.0.0.tgz",
+ "integrity": "sha512-JDoB2T1EncRlyGSjuAhkGxRfKkN8tq0i8tFlk9I4q2L6iYxPaUnFenhji0oxufTADC16/IchuPjmMk//dt8Msg==",
+ "requires": {
+ "hexo-pagination": "1.0.0"
+ }
+ },
+ "hexo-i18n": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/hexo-i18n/-/hexo-i18n-1.0.0.tgz",
+ "integrity": "sha512-yw90JHr7ybUHN/QOkpHmlWJj1luVk5/v8CUU5NRA0n4TFp6av8NT7ujZ10GDawgnQEdMHnN5PUfAbNIVGR6axg==",
+ "requires": {
+ "sprintf-js": "^1.0.3"
+ }
+ },
+ "hexo-inject": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/hexo-inject/-/hexo-inject-1.0.0.tgz",
+ "integrity": "sha1-pTVXVgUdWrJ5yCtzfacrEzx+Ju0=",
+ "requires": {
+ "babel-plugin-transform-decorators-legacy": "^1.3.4",
+ "babel-polyfill": "^6.7.2",
+ "bluebird": "^3.3.4",
+ "core-decorators": "^0.11.0",
+ "underscore": "^1.8.3"
+ }
+ },
+ "hexo-log": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/hexo-log/-/hexo-log-1.0.0.tgz",
+ "integrity": "sha512-XlPzRtnsdrUfTSkLJPACQgWByybB56E79H8xIjGWj0GL+J/VqENsgc+GER0ytFwrP/6YKCerXdaUWOYMcv6aiA==",
+ "requires": {
+ "chalk": "^2.4.1",
+ "hexo-bunyan": "^2.0.0"
+ }
+ },
+ "hexo-pagination": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/hexo-pagination/-/hexo-pagination-1.0.0.tgz",
+ "integrity": "sha512-miEVFgxchPr2qNWxw0JWpJ9R/Yaf7HjHBZVjvCCcqfbsLyYtCvIfJDxcEwz1sDOC/fLzYPqNnhUI73uNxBHRSA=="
+ },
+ "hexo-prism-plugin": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/hexo-prism-plugin/-/hexo-prism-plugin-2.3.0.tgz",
+ "integrity": "sha512-jn8aSVwo8odrZpf2qgETiZeO6cR7D7uDvljHD+CQqWOP97e8LvYAwaFlEvTgJwwKSERZbI5RlwtTOX7CDjz1Mw==",
+ "requires": {
+ "dir-resolve": "^1.0.2",
+ "hexo-fs": "^0.2.1",
+ "node-prismjs": "^0.1.0",
+ "prism-themes": "^1.0.0",
+ "prismjs": "^1.6.0"
+ },
+ "dependencies": {
+ "anymatch": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz",
+ "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==",
+ "requires": {
+ "micromatch": "^2.1.5",
+ "normalize-path": "^2.0.0"
+ },
+ "dependencies": {
+ "normalize-path": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
+ "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
+ "requires": {
+ "remove-trailing-separator": "^1.0.1"
+ }
+ }
+ }
+ },
+ "arr-diff": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz",
+ "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=",
+ "requires": {
+ "arr-flatten": "^1.0.1"
+ }
+ },
+ "array-unique": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz",
+ "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM="
+ },
+ "braces": {
+ "version": "1.8.5",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz",
+ "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=",
+ "requires": {
+ "expand-range": "^1.8.1",
+ "preserve": "^0.2.0",
+ "repeat-element": "^1.1.2"
+ },
+ "dependencies": {
+ "expand-range": {
+ "version": "1.8.2",
+ "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz",
+ "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=",
+ "requires": {
+ "fill-range": "^2.1.0"
+ }
+ },
+ "preserve": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz",
+ "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks="
+ }
+ }
+ },
+ "chokidar": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz",
+ "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=",
+ "requires": {
+ "anymatch": "^1.3.0",
+ "async-each": "^1.0.0",
+ "fsevents": "^1.0.0",
+ "glob-parent": "^2.0.0",
+ "inherits": "^2.0.1",
+ "is-binary-path": "^1.0.0",
+ "is-glob": "^2.0.0",
+ "path-is-absolute": "^1.0.0",
+ "readdirp": "^2.0.0"
+ },
+ "dependencies": {
+ "glob-parent": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz",
+ "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=",
+ "requires": {
+ "is-glob": "^2.0.0"
+ }
+ },
+ "is-glob": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz",
+ "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=",
+ "requires": {
+ "is-extglob": "^1.0.0"
+ }
+ }
+ }
+ },
+ "expand-brackets": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz",
+ "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=",
+ "requires": {
+ "is-posix-bracket": "^0.1.0"
+ },
+ "dependencies": {
+ "is-posix-bracket": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz",
+ "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q="
+ }
+ }
+ },
+ "extglob": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz",
+ "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=",
+ "requires": {
+ "is-extglob": "^1.0.0"
+ },
+ "dependencies": {
+ "is-extglob": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz",
+ "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA="
+ }
+ }
+ },
+ "fill-range": {
+ "version": "2.2.4",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz",
+ "integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==",
+ "requires": {
+ "is-number": "^2.1.0",
+ "isobject": "^2.0.0",
+ "randomatic": "^3.0.0",
+ "repeat-element": "^1.1.2",
+ "repeat-string": "^1.5.2"
+ }
+ },
+ "hexo-fs": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/hexo-fs/-/hexo-fs-0.2.3.tgz",
+ "integrity": "sha512-rLB1rMVUW3csAljvJgHfyjemL0BrmcUZfBf9hJe6S0pA53igFa3ON0PFwomvoLs1Wdmjs9Awnw9Tru4PjWFSlQ==",
+ "requires": {
+ "bluebird": "^3.4.0",
+ "chokidar": "^1.5.2",
+ "escape-string-regexp": "^1.0.5",
+ "graceful-fs": "^4.1.4"
+ }
+ },
+ "is-number": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz",
+ "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=",
+ "requires": {
+ "kind-of": "^3.0.2"
+ }
+ },
+ "isobject": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
+ "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
+ "requires": {
+ "isarray": "1.0.0"
+ }
+ },
+ "micromatch": {
+ "version": "2.3.11",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz",
+ "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=",
+ "requires": {
+ "arr-diff": "^2.0.0",
+ "array-unique": "^0.2.1",
+ "braces": "^1.8.2",
+ "expand-brackets": "^0.1.4",
+ "extglob": "^0.3.1",
+ "filename-regex": "^2.0.0",
+ "is-extglob": "^1.0.0",
+ "is-glob": "^2.0.1",
+ "kind-of": "^3.0.2",
+ "normalize-path": "^2.0.1",
+ "object.omit": "^2.0.0",
+ "parse-glob": "^3.0.4",
+ "regex-cache": "^0.4.2"
+ },
+ "dependencies": {
+ "filename-regex": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz",
+ "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY="
+ },
+ "is-extglob": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz",
+ "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA="
+ },
+ "is-glob": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz",
+ "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=",
+ "requires": {
+ "is-extglob": "^1.0.0"
+ }
+ },
+ "normalize-path": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
+ "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
+ "requires": {
+ "remove-trailing-separator": "^1.0.1"
+ }
+ },
+ "object.omit": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz",
+ "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=",
+ "requires": {
+ "for-own": "^0.1.4",
+ "is-extendable": "^0.1.1"
+ }
+ },
+ "parse-glob": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz",
+ "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=",
+ "requires": {
+ "glob-base": "^0.3.0",
+ "is-dotfile": "^1.0.0",
+ "is-extglob": "^1.0.0",
+ "is-glob": "^2.0.0"
+ }
+ },
+ "regex-cache": {
+ "version": "0.4.4",
+ "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz",
+ "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==",
+ "requires": {
+ "is-equal-shallow": "^0.1.3"
+ }
+ }
+ }
+ }
+ }
+ },
+ "hexo-prism-plus": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/hexo-prism-plus/-/hexo-prism-plus-1.1.0.tgz",
+ "integrity": "sha512-lkDJRZDVN3iNpYtuwrI+JFLj3rSa4PeMwz1OlVfUOkY6CyjD/D3dGtW7cTpcxYejr3/JWjusIqWVnUTLpKr4Yw==",
+ "requires": {
+ "hexo-fs": "^1.0.0",
+ "hexo-inject": "^1.0.0",
+ "hexo-util": "^0.6.3",
+ "lodash": "^4.17.11"
+ },
+ "dependencies": {
+ "anymatch": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz",
+ "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==",
+ "requires": {
+ "micromatch": "^3.1.4",
+ "normalize-path": "^2.1.1"
+ },
+ "dependencies": {
+ "normalize-path": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
+ "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
+ "requires": {
+ "remove-trailing-separator": "^1.0.1"
+ }
+ }
+ }
+ },
+ "camel-case": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz",
+ "integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=",
+ "requires": {
+ "no-case": "^2.2.0",
+ "upper-case": "^1.1.1"
+ }
+ },
+ "chokidar": {
+ "version": "2.1.8",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz",
+ "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==",
+ "requires": {
+ "anymatch": "^2.0.0",
+ "async-each": "^1.0.1",
+ "braces": "^2.3.2",
+ "fsevents": "^1.2.7",
+ "glob-parent": "^3.1.0",
+ "inherits": "^2.0.3",
+ "is-binary-path": "^1.0.0",
+ "is-glob": "^4.0.0",
+ "normalize-path": "^3.0.0",
+ "path-is-absolute": "^1.0.0",
+ "readdirp": "^2.2.1",
+ "upath": "^1.1.1"
+ }
+ },
+ "cross-spawn": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-4.0.2.tgz",
+ "integrity": "sha1-e5JHYhwjrf3ThWAEqCPL45dCTUE=",
+ "requires": {
+ "lru-cache": "^4.0.1",
+ "which": "^1.2.9"
+ }
+ },
+ "glob-parent": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
+ "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
+ "requires": {
+ "is-glob": "^3.1.0",
+ "path-dirname": "^1.0.0"
+ },
+ "dependencies": {
+ "is-glob": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
+ "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
+ "requires": {
+ "is-extglob": "^2.1.0"
+ }
+ }
+ }
+ },
+ "hexo-fs": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/hexo-fs/-/hexo-fs-1.0.2.tgz",
+ "integrity": "sha512-cbDnYuk6IndW/Fr2RcfZsZXE5wlG6tFoeBgZsHY230sSYalvX4JBPOUrE8As7Agysl+NGMthtr/Drtuliy5foQ==",
+ "requires": {
+ "bluebird": "^3.5.1",
+ "chokidar": "^2.0.4",
+ "escape-string-regexp": "^1.0.5",
+ "graceful-fs": "^4.1.11"
+ }
+ },
+ "hexo-util": {
+ "version": "0.6.3",
+ "resolved": "https://registry.npmjs.org/hexo-util/-/hexo-util-0.6.3.tgz",
+ "integrity": "sha512-zPxaqCWZz3/25SAB4FlrRtWktJ+Pr+vBiv/nyHpXKgXPt1m70liViKlRwWLqDmRjJ72x6/k4qCEeXHajvcGHUw==",
+ "requires": {
+ "bluebird": "^3.4.0",
+ "camel-case": "^3.0.0",
+ "cross-spawn": "^4.0.0",
+ "highlight.js": "^9.4.0",
+ "html-entities": "^1.2.0",
+ "striptags": "^2.1.1"
+ }
+ },
+ "is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI="
+ },
+ "is-glob": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz",
+ "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==",
+ "requires": {
+ "is-extglob": "^2.1.1"
+ }
+ },
+ "normalize-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
+ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA=="
+ },
+ "striptags": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/striptags/-/striptags-2.2.1.tgz",
+ "integrity": "sha1-TEULcI1BuL85zyTEn/I0/Gqr/TI="
+ }
+ }
+ },
+ "hexo-renderer-ejs": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/hexo-renderer-ejs/-/hexo-renderer-ejs-1.0.0.tgz",
+ "integrity": "sha512-O925i69FG4NYO62oWORcPhRZZX0sPx1SXGKUS5DaR/lzajyiXH5i2sqnkj0ya0rNLXIy/D7Xmt7WbFyuQx/kKQ==",
+ "requires": {
+ "ejs": "^2.6.1"
+ }
+ },
+ "hexo-renderer-marked": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/hexo-renderer-marked/-/hexo-renderer-marked-2.0.0.tgz",
+ "integrity": "sha512-+LMjgPkJSUAOlWYHJnBXxUHwGqemGNlK/I+JNO4zA5rEHWNWZ9wNAZKd5g0lEVdMAZzAV54gCylXGURgMO4IAw==",
+ "requires": {
+ "hexo-util": "1.0.0",
+ "marked": "^0.7.0",
+ "strip-indent": "^3.0.0"
+ },
+ "dependencies": {
+ "camel-case": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz",
+ "integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=",
+ "requires": {
+ "no-case": "^2.2.0",
+ "upper-case": "^1.1.1"
+ }
+ },
+ "cross-spawn": {
+ "version": "6.0.5",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
+ "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
+ "requires": {
+ "nice-try": "^1.0.4",
+ "path-key": "^2.0.1",
+ "semver": "^5.5.0",
+ "shebang-command": "^1.2.0",
+ "which": "^1.2.9"
+ },
+ "dependencies": {
+ "nice-try": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
+ "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ=="
+ },
+ "semver": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+ "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ=="
+ }
+ }
+ },
+ "hexo-util": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/hexo-util/-/hexo-util-1.0.0.tgz",
+ "integrity": "sha512-oV1/Y7ablc7e3d2kFFvQ/Ypi/BfL/uDSc1oNaMcxqr/UOH8F0QkHZ0Dmv+yLrEpFNYrrhBA0uavo3e+EqHNjnQ==",
+ "requires": {
+ "bluebird": "^3.5.2",
+ "camel-case": "^3.0.0",
+ "cross-spawn": "^6.0.5",
+ "highlight.js": "^9.13.1",
+ "html-entities": "^1.2.1",
+ "striptags": "^3.1.1"
+ }
+ },
+ "path-key": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
+ "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A="
+ },
+ "shebang-command": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
+ "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
+ "requires": {
+ "shebang-regex": "^1.0.0"
+ }
+ },
+ "shebang-regex": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
+ "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM="
+ }
+ }
+ },
+ "hexo-renderer-sass": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/hexo-renderer-sass/-/hexo-renderer-sass-0.4.0.tgz",
+ "integrity": "sha512-goQ/r8J/2s5XnIp+dSDwWgaxHl6h/VVEsp95Jr/+sYqFfXHXDIC4evC+V1to9ezfQwOS//ZZFQptTZIKTuh8Lg==",
+ "requires": {
+ "node-sass": "^4.5.3"
+ }
+ },
+ "hexo-renderer-stylus": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/hexo-renderer-stylus/-/hexo-renderer-stylus-1.1.0.tgz",
+ "integrity": "sha512-aXfMuro2aQOvpM5pyPEModAPvqYi73VN4t37vGMQCbT0QTmw8YohEmUpO/G/1k6j88ong6344v+A0xrpUGQRnQ==",
+ "requires": {
+ "nib": "^1.1.2",
+ "stylus": "^0.54.5"
+ }
+ },
+ "hexo-server": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/hexo-server/-/hexo-server-1.0.0.tgz",
+ "integrity": "sha512-eSY+a5oiGCG/3T6FrdrNRBkttMLJkM+oitY6ZMFowjcBiG2VNEhQmfWUDOykfvApZs4wPYBb//uXD/58tfe3mA==",
+ "requires": {
+ "bluebird": "^3.5.5",
+ "chalk": "^2.4.2",
+ "compression": "^1.7.4",
+ "connect": "^3.7.0",
+ "mime": "^2.4.3",
+ "morgan": "^1.9.1",
+ "open": "^6.3.0",
+ "serve-static": "^1.14.1"
+ }
+ },
+ "hexo-util": {
+ "version": "1.8.1",
+ "resolved": "https://registry.npmjs.org/hexo-util/-/hexo-util-1.8.1.tgz",
+ "integrity": "sha512-gzZmcdpYjG168xunWaxFAtNhBA7il6jeaSLxL2Mj7+XRg86RqZGCgHK00gI35aQvaUPKO3XLmWQl8QyN61fa5w==",
+ "requires": {
+ "bluebird": "^3.5.2",
+ "camel-case": "^4.0.0",
+ "cross-spawn": "^7.0.0",
+ "deepmerge": "^4.2.2",
+ "highlight.js": "^9.13.1",
+ "htmlparser2": "^4.0.0",
+ "punycode.js": "^2.1.0",
+ "striptags": "^3.1.1"
+ }
+ },
+ "highlight.js": {
+ "version": "9.18.1",
+ "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-9.18.1.tgz",
+ "integrity": "sha512-OrVKYz70LHsnCgmbXctv/bfuvntIKDz177h0Co37DQ5jamGZLVmoCVMtjMtNZY3X9DrCcKfklHPNeA0uPZhSJg=="
+ },
+ "hosted-git-info": {
+ "version": "2.8.8",
+ "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz",
+ "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg=="
+ },
+ "html-entities": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.2.1.tgz",
+ "integrity": "sha1-DfKTUfByEWNRXfueVUPl9u7VFi8="
+ },
+ "htmlparser2": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-4.1.0.tgz",
+ "integrity": "sha512-4zDq1a1zhE4gQso/c5LP1OtrhYTncXNSpvJYtWJBtXAETPlMfi3IFNjGuQbYLuVY4ZR0QMqRVvo4Pdy9KLyP8Q==",
+ "requires": {
+ "domelementtype": "^2.0.1",
+ "domhandler": "^3.0.0",
+ "domutils": "^2.0.0",
+ "entities": "^2.0.0"
+ }
+ },
+ "http-errors": {
+ "version": "1.7.3",
+ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz",
+ "integrity": "sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==",
+ "requires": {
+ "depd": "~1.1.2",
+ "inherits": "2.0.4",
+ "setprototypeof": "1.1.1",
+ "statuses": ">= 1.5.0 < 2",
+ "toidentifier": "1.0.0"
+ }
+ },
+ "http-signature": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
+ "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
+ "requires": {
+ "assert-plus": "^1.0.0",
+ "jsprim": "^1.2.2",
+ "sshpk": "^1.7.0"
+ }
+ },
+ "in-publish": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/in-publish/-/in-publish-2.0.0.tgz",
+ "integrity": "sha1-4g/146KvwmkDILbcVSaCqcf631E="
+ },
+ "indent-string": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz",
+ "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=",
+ "requires": {
+ "repeating": "^2.0.0"
+ }
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+ "requires": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
+ },
+ "invariant": {
+ "version": "2.2.4",
+ "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz",
+ "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==",
+ "requires": {
+ "loose-envify": "^1.0.0"
+ }
+ },
+ "invert-kv": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz",
+ "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY="
+ },
+ "is-accessor-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+ "requires": {
+ "kind-of": "^3.0.2"
+ }
+ },
+ "is-arrayish": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
+ "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0="
+ },
+ "is-binary-path": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz",
+ "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=",
+ "requires": {
+ "binary-extensions": "^1.0.0"
+ }
+ },
+ "is-buffer": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
+ "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w=="
+ },
+ "is-data-descriptor": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+ "requires": {
+ "kind-of": "^3.0.2"
+ }
+ },
+ "is-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+ "requires": {
+ "is-accessor-descriptor": "^0.1.6",
+ "is-data-descriptor": "^0.1.4",
+ "kind-of": "^5.0.0"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw=="
+ }
+ }
+ },
+ "is-dotfile": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz",
+ "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE="
+ },
+ "is-equal-shallow": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz",
+ "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=",
+ "requires": {
+ "is-primitive": "^2.0.0"
+ }
+ },
+ "is-extendable": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
+ "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik="
+ },
+ "is-extglob": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz",
+ "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA="
+ },
+ "is-finite": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.1.0.tgz",
+ "integrity": "sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w=="
+ },
+ "is-fullwidth-code-point": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
+ "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
+ "requires": {
+ "number-is-nan": "^1.0.0"
+ }
+ },
+ "is-glob": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz",
+ "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=",
+ "requires": {
+ "is-extglob": "^1.0.0"
+ }
+ },
+ "is-number": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
+ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+ "requires": {
+ "kind-of": "^3.0.2"
+ }
+ },
+ "is-plain-object": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
+ "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
+ "requires": {
+ "isobject": "^3.0.1"
+ }
+ },
+ "is-primitive": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz",
+ "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU="
+ },
+ "is-typedarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
+ "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo="
+ },
+ "is-utf8": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz",
+ "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI="
+ },
+ "is-windows": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
+ "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA=="
+ },
+ "is-wsl": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz",
+ "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0="
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
+ },
+ "isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA="
+ },
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8="
+ },
+ "isstream": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
+ "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo="
+ },
+ "js-base64": {
+ "version": "2.5.2",
+ "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.5.2.tgz",
+ "integrity": "sha512-Vg8czh0Q7sFBSUMWWArX/miJeBWYBPpdU/3M/DKSaekLMqrqVPaedp+5mZhie/r0lgrcaYBfwXatEew6gwgiQQ=="
+ },
+ "js-tokens": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
+ "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls="
+ },
+ "js-yaml": {
+ "version": "3.13.1",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz",
+ "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==",
+ "requires": {
+ "argparse": "^1.0.7",
+ "esprima": "^4.0.0"
+ }
+ },
+ "jsbn": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
+ "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM="
+ },
+ "json-schema": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
+ "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM="
+ },
+ "json-schema-traverse": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="
+ },
+ "json-stringify-safe": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
+ "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus="
+ },
+ "jsonparse": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz",
+ "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA="
+ },
+ "jsprim": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
+ "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
+ "requires": {
+ "assert-plus": "1.0.0",
+ "extsprintf": "1.3.0",
+ "json-schema": "0.2.3",
+ "verror": "1.10.0"
+ }
+ },
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ },
+ "lazy-cache": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz",
+ "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4="
+ },
+ "lcid": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz",
+ "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=",
+ "requires": {
+ "invert-kv": "^1.0.0"
+ }
+ },
+ "load-json-file": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz",
+ "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=",
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "parse-json": "^2.2.0",
+ "pify": "^2.0.0",
+ "pinkie-promise": "^2.0.0",
+ "strip-bom": "^2.0.0"
+ }
+ },
+ "lodash": {
+ "version": "4.17.15",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz",
+ "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A=="
+ },
+ "longest": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz",
+ "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc="
+ },
+ "loose-envify": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
+ "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
+ "requires": {
+ "js-tokens": "^3.0.0 || ^4.0.0"
+ }
+ },
+ "loud-rejection": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz",
+ "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=",
+ "requires": {
+ "currently-unhandled": "^0.4.1",
+ "signal-exit": "^3.0.0"
+ }
+ },
+ "lower-case": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz",
+ "integrity": "sha1-miyr0bno4K6ZOkv31YdcOcQujqw="
+ },
+ "lru-cache": {
+ "version": "4.1.5",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz",
+ "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==",
+ "requires": {
+ "pseudomap": "^1.0.2",
+ "yallist": "^2.1.2"
+ }
+ },
+ "map-cache": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
+ "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8="
+ },
+ "map-obj": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz",
+ "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0="
+ },
+ "map-visit": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz",
+ "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=",
+ "requires": {
+ "object-visit": "^1.0.0"
+ }
+ },
+ "markdown": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/markdown/-/markdown-0.5.0.tgz",
+ "integrity": "sha1-KCBbVlqK51kt4gdGPWY33BgnIrI=",
+ "requires": {
+ "nopt": "~2.1.1"
+ },
+ "dependencies": {
+ "nopt": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/nopt/-/nopt-2.1.2.tgz",
+ "integrity": "sha1-bMzZd7gBMqB3MdbozljCyDA8+a8=",
+ "requires": {
+ "abbrev": "1"
+ }
+ }
+ }
+ },
+ "marked": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/marked/-/marked-0.7.0.tgz",
+ "integrity": "sha512-c+yYdCZJQrsRjTPhUx7VKkApw9bwDkNbHUKo1ovgcfDjb2kc8rLuRbIFyXL5WOEUwzSSKo3IXpph2K6DqB/KZg=="
+ },
+ "math-random": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.4.tgz",
+ "integrity": "sha512-rUxjysqif/BZQH2yhd5Aaq7vXMSx9NdEsQcyA07uEzIvxgI7zIr33gGsh+RU0/XjmQpCW7RsVof1vlkvQVCK5A=="
+ },
+ "meow": {
+ "version": "3.7.0",
+ "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz",
+ "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=",
+ "requires": {
+ "camelcase-keys": "^2.0.0",
+ "decamelize": "^1.1.2",
+ "loud-rejection": "^1.0.0",
+ "map-obj": "^1.0.1",
+ "minimist": "^1.1.3",
+ "normalize-package-data": "^2.3.4",
+ "object-assign": "^4.0.1",
+ "read-pkg-up": "^1.0.1",
+ "redent": "^1.0.0",
+ "trim-newlines": "^1.0.0"
+ }
+ },
+ "micromatch": {
+ "version": "3.1.10",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
+ "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
+ "requires": {
+ "arr-diff": "^4.0.0",
+ "array-unique": "^0.3.2",
+ "braces": "^2.3.1",
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "extglob": "^2.0.4",
+ "fragment-cache": "^0.2.1",
+ "kind-of": "^6.0.2",
+ "nanomatch": "^1.2.9",
+ "object.pick": "^1.3.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
+ "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw=="
+ }
+ }
+ },
+ "mime": {
+ "version": "2.4.4",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.4.tgz",
+ "integrity": "sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA=="
+ },
+ "mime-db": {
+ "version": "1.43.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.43.0.tgz",
+ "integrity": "sha512-+5dsGEEovYbT8UY9yD7eE4XTc4UwJ1jBYlgaQQF38ENsKR3wj/8q8RFZrF9WIZpB2V1ArTVFUva8sAul1NzRzQ=="
+ },
+ "mime-types": {
+ "version": "2.1.26",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.26.tgz",
+ "integrity": "sha512-01paPWYgLrkqAyrlDorC1uDwl2p3qZT7yl806vW7DvDoxwXi46jsjFbg+WdwotBIk6/MbEhO/dh5aZ5sNj/dWQ==",
+ "requires": {
+ "mime-db": "1.43.0"
+ }
+ },
+ "min-indent": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.0.tgz",
+ "integrity": "sha1-z8RcN+nsDY8KDsPdTvf3w6vjklY="
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ },
+ "minimist": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ="
+ },
+ "mixin-deep": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz",
+ "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==",
+ "requires": {
+ "for-in": "^1.0.2",
+ "is-extendable": "^1.0.1"
+ },
+ "dependencies": {
+ "is-extendable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+ "requires": {
+ "is-plain-object": "^2.0.4"
+ }
+ }
+ }
+ },
+ "mkdirp": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
+ "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
+ "requires": {
+ "minimist": "0.0.8"
+ },
+ "dependencies": {
+ "minimist": {
+ "version": "0.0.8",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
+ "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0="
+ }
+ }
+ },
+ "moment": {
+ "version": "2.24.0",
+ "resolved": "https://registry.npmjs.org/moment/-/moment-2.24.0.tgz",
+ "integrity": "sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg=="
+ },
+ "moment-timezone": {
+ "version": "0.5.28",
+ "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.28.tgz",
+ "integrity": "sha512-TDJkZvAyKIVWg5EtVqRzU97w0Rb0YVbfpqyjgu6GwXCAohVRqwZjf4fOzDE6p1Ch98Sro/8hQQi65WDXW5STPw==",
+ "requires": {
+ "moment": ">= 2.9.0"
+ }
+ },
+ "morgan": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.9.1.tgz",
+ "integrity": "sha512-HQStPIV4y3afTiCYVxirakhlCfGkI161c76kKFca7Fk1JusM//Qeo1ej2XaMniiNeaZklMVrh3vTtIzpzwbpmA==",
+ "requires": {
+ "basic-auth": "~2.0.0",
+ "debug": "2.6.9",
+ "depd": "~1.1.2",
+ "on-finished": "~2.3.0",
+ "on-headers": "~1.0.1"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
+ },
+ "mv": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/mv/-/mv-2.1.1.tgz",
+ "integrity": "sha1-rmzg1vbV4KT32JN5jQPB6pVZtqI=",
+ "optional": true,
+ "requires": {
+ "mkdirp": "~0.5.1",
+ "ncp": "~2.0.0",
+ "rimraf": "~2.4.0"
+ },
+ "dependencies": {
+ "glob": {
+ "version": "6.0.4",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz",
+ "integrity": "sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI=",
+ "optional": true,
+ "requires": {
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "2 || 3",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ },
+ "rimraf": {
+ "version": "2.4.5",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.4.5.tgz",
+ "integrity": "sha1-7nEM5dk6j9uFb7Xqj/Di11k0sto=",
+ "optional": true,
+ "requires": {
+ "glob": "^6.0.1"
+ }
+ }
+ }
+ },
+ "nan": {
+ "version": "2.14.0",
+ "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz",
+ "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg=="
+ },
+ "nanomatch": {
+ "version": "1.2.13",
+ "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz",
+ "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==",
+ "requires": {
+ "arr-diff": "^4.0.0",
+ "array-unique": "^0.3.2",
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "fragment-cache": "^0.2.1",
+ "is-windows": "^1.0.2",
+ "kind-of": "^6.0.2",
+ "object.pick": "^1.3.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
+ "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw=="
+ }
+ }
+ },
+ "ncp": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz",
+ "integrity": "sha1-GVoh1sRuNh0vsSgbo4uR6d9727M=",
+ "optional": true
+ },
+ "negotiator": {
+ "version": "0.6.2",
+ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz",
+ "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw=="
+ },
+ "nib": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/nib/-/nib-1.1.2.tgz",
+ "integrity": "sha1-amnt5AgblcDe+L4CSkyK4MLLtsc=",
+ "requires": {
+ "stylus": "0.54.5"
+ },
+ "dependencies": {
+ "glob": {
+ "version": "7.0.6",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.0.6.tgz",
+ "integrity": "sha1-IRuvr0nlJbjNkyYNFKsTYVKz9Xo=",
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.2",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ },
+ "source-map": {
+ "version": "0.1.43",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz",
+ "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=",
+ "requires": {
+ "amdefine": ">=0.0.4"
+ }
+ },
+ "stylus": {
+ "version": "0.54.5",
+ "resolved": "https://registry.npmjs.org/stylus/-/stylus-0.54.5.tgz",
+ "integrity": "sha1-QrlWCTHKcJDOhRWnmLqeaqPW3Hk=",
+ "requires": {
+ "css-parse": "1.7.x",
+ "debug": "*",
+ "glob": "7.0.x",
+ "mkdirp": "0.5.x",
+ "sax": "0.5.x",
+ "source-map": "0.1.x"
+ }
+ }
+ }
+ },
+ "no-case": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz",
+ "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==",
+ "requires": {
+ "lower-case": "^1.1.1"
+ }
+ },
+ "node-gyp": {
+ "version": "3.8.0",
+ "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-3.8.0.tgz",
+ "integrity": "sha512-3g8lYefrRRzvGeSowdJKAKyks8oUpLEd/DyPV4eMhVlhJ0aNaZqIrNUIPuEWWTAoPqyFkfGrM67MC69baqn6vA==",
+ "requires": {
+ "fstream": "^1.0.0",
+ "glob": "^7.0.3",
+ "graceful-fs": "^4.1.2",
+ "mkdirp": "^0.5.0",
+ "nopt": "2 || 3",
+ "npmlog": "0 || 1 || 2 || 3 || 4",
+ "osenv": "0",
+ "request": "^2.87.0",
+ "rimraf": "2",
+ "semver": "~5.3.0",
+ "tar": "^2.0.0",
+ "which": "1"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz",
+ "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8="
+ }
+ }
+ },
+ "node-prismjs": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/node-prismjs/-/node-prismjs-0.1.2.tgz",
+ "integrity": "sha512-WKb6ZbUlPWarzS8jR2UdIbV4lYpt6sOTkIx3u5Ldz55K1Zzs982KyF6aj1zjZbrrx/UGZSZ1e0j28lIzcm3ceg==",
+ "requires": {
+ "prismjs": "~1.6.0"
+ },
+ "dependencies": {
+ "prismjs": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.6.0.tgz",
+ "integrity": "sha1-EY2V+3pm26InLjQ7NF9SNmWds2U=",
+ "requires": {
+ "clipboard": "^1.5.5"
+ }
+ }
+ }
+ },
+ "node-releases": {
+ "version": "1.1.51",
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.51.tgz",
+ "integrity": "sha512-1eQEs6HFYY1kMXQPOLzCf7HdjReErmvn85tZESMczdCNVWP3Y7URYLBAyYynuI7yef1zj4HN5q+oB2x67QU0lw==",
+ "requires": {
+ "semver": "^6.3.0"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw=="
+ }
+ }
+ },
+ "node-sass": {
+ "version": "4.13.1",
+ "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.13.1.tgz",
+ "integrity": "sha512-TTWFx+ZhyDx1Biiez2nB0L3YrCZ/8oHagaDalbuBSlqXgUPsdkUSzJsVxeDO9LtPB49+Fh3WQl3slABo6AotNw==",
+ "requires": {
+ "async-foreach": "^0.1.3",
+ "chalk": "^1.1.1",
+ "cross-spawn": "^3.0.0",
+ "gaze": "^1.0.0",
+ "get-stdin": "^4.0.1",
+ "glob": "^7.0.3",
+ "in-publish": "^2.0.0",
+ "lodash": "^4.17.15",
+ "meow": "^3.7.0",
+ "mkdirp": "^0.5.1",
+ "nan": "^2.13.2",
+ "node-gyp": "^3.8.0",
+ "npmlog": "^4.0.0",
+ "request": "^2.88.0",
+ "sass-graph": "^2.2.4",
+ "stdout-stream": "^1.4.0",
+ "true-case-path": "^1.0.2"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4="
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "requires": {
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
+ }
+ },
+ "cross-spawn": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-3.0.1.tgz",
+ "integrity": "sha1-ElYDfsufDF9549bvE14wdwGEuYI=",
+ "requires": {
+ "lru-cache": "^4.0.1",
+ "which": "^1.2.9"
+ }
+ },
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc="
+ }
+ }
+ },
+ "nopt": {
+ "version": "3.0.6",
+ "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz",
+ "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=",
+ "requires": {
+ "abbrev": "1"
+ }
+ },
+ "normalize-package-data": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz",
+ "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==",
+ "requires": {
+ "hosted-git-info": "^2.1.4",
+ "resolve": "^1.10.0",
+ "semver": "2 || 3 || 4 || 5",
+ "validate-npm-package-license": "^3.0.1"
+ }
+ },
+ "normalize-range": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz",
+ "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI="
+ },
+ "npmlog": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz",
+ "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==",
+ "requires": {
+ "are-we-there-yet": "~1.1.2",
+ "console-control-strings": "~1.1.0",
+ "gauge": "~2.7.3",
+ "set-blocking": "~2.0.0"
+ }
+ },
+ "num2fraction": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz",
+ "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4="
+ },
+ "number-is-nan": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
+ "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0="
+ },
+ "nunjucks": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/nunjucks/-/nunjucks-3.2.0.tgz",
+ "integrity": "sha512-YS/qEQ6N7qCnUdm6EoYRBfJUdWNT0PpKbbRnogV2XyXbBm2STIP1O6yrdZHgwMVK7fIYUx7i8+yatEixnXSB1w==",
+ "requires": {
+ "a-sync-waterfall": "^1.0.0",
+ "asap": "^2.0.3",
+ "chokidar": "^2.0.0",
+ "yargs": "^3.32.0"
+ },
+ "dependencies": {
+ "anymatch": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz",
+ "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==",
+ "optional": true,
+ "requires": {
+ "micromatch": "^3.1.4",
+ "normalize-path": "^2.1.1"
+ },
+ "dependencies": {
+ "normalize-path": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
+ "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
+ "optional": true,
+ "requires": {
+ "remove-trailing-separator": "^1.0.1"
+ }
+ }
+ }
+ },
+ "chokidar": {
+ "version": "2.1.8",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz",
+ "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==",
+ "optional": true,
+ "requires": {
+ "anymatch": "^2.0.0",
+ "async-each": "^1.0.1",
+ "braces": "^2.3.2",
+ "fsevents": "^1.2.7",
+ "glob-parent": "^3.1.0",
+ "inherits": "^2.0.3",
+ "is-binary-path": "^1.0.0",
+ "is-glob": "^4.0.0",
+ "normalize-path": "^3.0.0",
+ "path-is-absolute": "^1.0.0",
+ "readdirp": "^2.2.1",
+ "upath": "^1.1.1"
+ }
+ },
+ "glob-parent": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
+ "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
+ "optional": true,
+ "requires": {
+ "is-glob": "^3.1.0",
+ "path-dirname": "^1.0.0"
+ },
+ "dependencies": {
+ "is-glob": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
+ "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
+ "optional": true,
+ "requires": {
+ "is-extglob": "^2.1.0"
+ }
+ }
+ }
+ },
+ "is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
+ "optional": true
+ },
+ "is-glob": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz",
+ "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==",
+ "optional": true,
+ "requires": {
+ "is-extglob": "^2.1.1"
+ }
+ },
+ "normalize-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
+ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
+ "optional": true
+ }
+ }
+ },
+ "oauth-sign": {
+ "version": "0.9.0",
+ "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
+ "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ=="
+ },
+ "object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
+ },
+ "object-copy": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz",
+ "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=",
+ "requires": {
+ "copy-descriptor": "^0.1.0",
+ "define-property": "^0.2.5",
+ "kind-of": "^3.0.3"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ }
+ }
+ },
+ "object-visit": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz",
+ "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=",
+ "requires": {
+ "isobject": "^3.0.0"
+ }
+ },
+ "object.pick": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz",
+ "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=",
+ "requires": {
+ "isobject": "^3.0.1"
+ }
+ },
+ "on-finished": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
+ "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
+ "requires": {
+ "ee-first": "1.1.1"
+ }
+ },
+ "on-headers": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz",
+ "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA=="
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "requires": {
+ "wrappy": "1"
+ }
+ },
+ "open": {
+ "version": "6.4.0",
+ "resolved": "https://registry.npmjs.org/open/-/open-6.4.0.tgz",
+ "integrity": "sha512-IFenVPgF70fSm1keSd2iDBIDIBZkroLeuffXq+wKTzTJlBpesFWojV9lb8mzOfaAzM1sr7HQHuO0vtV0zYekGg==",
+ "requires": {
+ "is-wsl": "^1.1.0"
+ }
+ },
+ "optimist": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz",
+ "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=",
+ "requires": {
+ "minimist": "~0.0.1",
+ "wordwrap": "~0.0.2"
+ },
+ "dependencies": {
+ "minimist": {
+ "version": "0.0.10",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz",
+ "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8="
+ }
+ }
+ },
+ "os-homedir": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
+ "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M="
+ },
+ "os-locale": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz",
+ "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=",
+ "requires": {
+ "lcid": "^1.0.0"
+ }
+ },
+ "os-tmpdir": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
+ "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ="
+ },
+ "osenv": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz",
+ "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==",
+ "requires": {
+ "os-homedir": "^1.0.0",
+ "os-tmpdir": "^1.0.0"
+ }
+ },
+ "parse-json": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
+ "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
+ "requires": {
+ "error-ex": "^1.2.0"
+ }
+ },
+ "parseurl": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
+ "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ=="
+ },
+ "pascal-case": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.1.tgz",
+ "integrity": "sha512-XIeHKqIrsquVTQL2crjq3NfJUxmdLasn3TYOU0VBM+UX2a6ztAWBlJQBePLGY7VHW8+2dRadeIPK5+KImwTxQA==",
+ "requires": {
+ "no-case": "^3.0.3",
+ "tslib": "^1.10.0"
+ },
+ "dependencies": {
+ "lower-case": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.1.tgz",
+ "integrity": "sha512-LiWgfDLLb1dwbFQZsSglpRj+1ctGnayXz3Uv0/WO8n558JycT5fg6zkNcnW0G68Nn0aEldTFeEfmjCfmqry/rQ==",
+ "requires": {
+ "tslib": "^1.10.0"
+ }
+ },
+ "no-case": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.3.tgz",
+ "integrity": "sha512-ehY/mVQCf9BL0gKfsJBvFJen+1V//U+0HQMPrWct40ixE4jnv0bfvxDbWtAHL9EcaPEOJHVVYKoQn1TlZUB8Tw==",
+ "requires": {
+ "lower-case": "^2.0.1",
+ "tslib": "^1.10.0"
+ }
+ }
+ }
+ },
+ "pascalcase": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz",
+ "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ="
+ },
+ "path-dirname": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz",
+ "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA="
+ },
+ "path-exists": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz",
+ "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=",
+ "requires": {
+ "pinkie-promise": "^2.0.0"
+ }
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18="
+ },
+ "path-key": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
+ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q=="
+ },
+ "path-parse": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
+ "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw=="
+ },
+ "path-type": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz",
+ "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=",
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "pify": "^2.0.0",
+ "pinkie-promise": "^2.0.0"
+ }
+ },
+ "performance-now": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
+ "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns="
+ },
+ "picomatch": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.1.tgz",
+ "integrity": "sha512-ISBaA8xQNmwELC7eOjqFKMESB2VIqt4PPDD0nsS95b/9dZXvVKOlz9keMSnoGGKcOHXfTvDD6WMaRoSc9UuhRA=="
+ },
+ "pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw="
+ },
+ "pinkie": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
+ "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA="
+ },
+ "pinkie-promise": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
+ "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
+ "requires": {
+ "pinkie": "^2.0.0"
+ }
+ },
+ "posix-character-classes": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz",
+ "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs="
+ },
+ "postcss": {
+ "version": "7.0.27",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.27.tgz",
+ "integrity": "sha512-WuQETPMcW9Uf1/22HWUWP9lgsIC+KEHg2kozMflKjbeUtw9ujvFX6QmIfozaErDkmLWS9WEnEdEe6Uo9/BNTdQ==",
+ "requires": {
+ "chalk": "^2.4.2",
+ "source-map": "^0.6.1",
+ "supports-color": "^6.1.0"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+ },
+ "supports-color": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
+ "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
+ "postcss-value-parser": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.0.3.tgz",
+ "integrity": "sha512-N7h4pG+Nnu5BEIzyeaaIYWs0LI5XC40OrRh5L60z0QjFsqGWcHcbkBvpe1WYpcIS9yQ8sOi/vIPt1ejQCrMVrg=="
+ },
+ "pretty-hrtime": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz",
+ "integrity": "sha1-t+PqQkNaTJsnWdmeDyAesZWALuE="
+ },
+ "prism-themes": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/prism-themes/-/prism-themes-1.3.0.tgz",
+ "integrity": "sha512-4hDQyNuBRyWVvwHeTH4yY5TIWrl6BHmhoh85kgfTFgwklGerWA3R2RFp7Sg0zPCnQS8SsloKsEIN3ao63KhiIw=="
+ },
+ "prismjs": {
+ "version": "1.19.0",
+ "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.19.0.tgz",
+ "integrity": "sha512-IVFtbW9mCWm9eOIaEkNyo2Vl4NnEifis2GQ7/MLRG5TQe6t+4Sj9J5QWI9i3v+SS43uZBlCAOn+zYTVYQcPXJw==",
+ "requires": {
+ "clipboard": "^2.0.0"
+ },
+ "dependencies": {
+ "clipboard": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/clipboard/-/clipboard-2.0.6.tgz",
+ "integrity": "sha512-g5zbiixBRk/wyKakSwCKd7vQXDjFnAMGHoEyBogG/bw9kTD9GvdAvaoRR1ALcEzt3pVKxZR0pViekPMIS0QyGg==",
+ "optional": true,
+ "requires": {
+ "good-listener": "^1.2.2",
+ "select": "^1.1.2",
+ "tiny-emitter": "^2.0.0"
+ }
+ }
+ }
+ },
+ "process-nextick-args": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
+ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
+ },
+ "pseudomap": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
+ "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM="
+ },
+ "psl": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/psl/-/psl-1.7.0.tgz",
+ "integrity": "sha512-5NsSEDv8zY70ScRnOTn7bK7eanl2MvFrOrS/R6x+dBt5g1ghnj9Zv90kO8GwT8gxcu2ANyFprnFYB85IogIJOQ=="
+ },
+ "punycode": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
+ "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A=="
+ },
+ "punycode.js": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/punycode.js/-/punycode.js-2.1.0.tgz",
+ "integrity": "sha512-LvGUJ9QHiESLM4yn8JuJWicstRcJKRmP46psQw1HvCZ9puLFwYMKJWvkAkP3OHBVzNzZGx/D53EYJrIaKd9gZQ=="
+ },
+ "qs": {
+ "version": "6.5.2",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
+ "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA=="
+ },
+ "randomatic": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.1.1.tgz",
+ "integrity": "sha512-TuDE5KxZ0J461RVjrJZCJc+J+zCkTb1MbH9AQUq68sMhOMcy9jLcb3BrZKgp9q9Ncltdg4QVqWrH02W2EFFVYw==",
+ "requires": {
+ "is-number": "^4.0.0",
+ "kind-of": "^6.0.0",
+ "math-random": "^1.0.1"
+ },
+ "dependencies": {
+ "is-number": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz",
+ "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ=="
+ },
+ "kind-of": {
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
+ "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw=="
+ }
+ }
+ },
+ "range-parser": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
+ "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg=="
+ },
+ "read-pkg": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz",
+ "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=",
+ "requires": {
+ "load-json-file": "^1.0.0",
+ "normalize-package-data": "^2.3.2",
+ "path-type": "^1.0.0"
+ }
+ },
+ "read-pkg-up": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz",
+ "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=",
+ "requires": {
+ "find-up": "^1.0.0",
+ "read-pkg": "^1.0.0"
+ }
+ },
+ "readable-stream": {
+ "version": "2.3.7",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+ "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "readdirp": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz",
+ "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==",
+ "requires": {
+ "graceful-fs": "^4.1.11",
+ "micromatch": "^3.1.10",
+ "readable-stream": "^2.0.2"
+ }
+ },
+ "redent": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz",
+ "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=",
+ "requires": {
+ "indent-string": "^2.1.0",
+ "strip-indent": "^1.0.1"
+ },
+ "dependencies": {
+ "strip-indent": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz",
+ "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=",
+ "requires": {
+ "get-stdin": "^4.0.1"
+ }
+ }
+ }
+ },
+ "regenerator-runtime": {
+ "version": "0.11.1",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg=="
+ },
+ "regex-not": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz",
+ "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==",
+ "requires": {
+ "extend-shallow": "^3.0.2",
+ "safe-regex": "^1.1.0"
+ }
+ },
+ "remove-trailing-separator": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz",
+ "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8="
+ },
+ "repeat-element": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz",
+ "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g=="
+ },
+ "repeat-string": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
+ "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc="
+ },
+ "repeating": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz",
+ "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=",
+ "requires": {
+ "is-finite": "^1.0.0"
+ }
+ },
+ "request": {
+ "version": "2.88.2",
+ "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz",
+ "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==",
+ "requires": {
+ "aws-sign2": "~0.7.0",
+ "aws4": "^1.8.0",
+ "caseless": "~0.12.0",
+ "combined-stream": "~1.0.6",
+ "extend": "~3.0.2",
+ "forever-agent": "~0.6.1",
+ "form-data": "~2.3.2",
+ "har-validator": "~5.1.3",
+ "http-signature": "~1.2.0",
+ "is-typedarray": "~1.0.0",
+ "isstream": "~0.1.2",
+ "json-stringify-safe": "~5.0.1",
+ "mime-types": "~2.1.19",
+ "oauth-sign": "~0.9.0",
+ "performance-now": "^2.1.0",
+ "qs": "~6.5.2",
+ "safe-buffer": "^5.1.2",
+ "tough-cookie": "~2.5.0",
+ "tunnel-agent": "^0.6.0",
+ "uuid": "^3.3.2"
+ }
+ },
+ "require-directory": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
+ "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I="
+ },
+ "require-main-filename": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz",
+ "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE="
+ },
+ "resolve": {
+ "version": "1.15.1",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.15.1.tgz",
+ "integrity": "sha512-84oo6ZTtoTUpjgNEr5SJyzQhzL72gaRodsSfyxC/AXRvwu0Yse9H8eF9IpGo7b8YetZhlI6v7ZQ6bKBFV/6S7w==",
+ "requires": {
+ "path-parse": "^1.0.6"
+ }
+ },
+ "resolve-url": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
+ "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo="
+ },
+ "ret": {
+ "version": "0.1.15",
+ "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz",
+ "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg=="
+ },
+ "rfdc": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.1.4.tgz",
+ "integrity": "sha512-5C9HXdzK8EAqN7JDif30jqsBzavB7wLpaubisuQIGHWf2gUXSpzy6ArX/+Da8RjFpagWsCn+pIgxTMAmKw9Zug=="
+ },
+ "right-align": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz",
+ "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=",
+ "requires": {
+ "align-text": "^0.1.1"
+ }
+ },
+ "rimraf": {
+ "version": "2.7.1",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
+ "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
+ "requires": {
+ "glob": "^7.1.3"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+ },
+ "safe-json-stringify": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/safe-json-stringify/-/safe-json-stringify-1.2.0.tgz",
+ "integrity": "sha512-gH8eh2nZudPQO6TytOvbxnuhYBOvDBBLW52tz5q6X58lJcd/tkmqFR+5Z9adS8aJtURSXWThWy/xJtJwixErvg==",
+ "optional": true
+ },
+ "safe-regex": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz",
+ "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=",
+ "requires": {
+ "ret": "~0.1.10"
+ }
+ },
+ "safer-buffer": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
+ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
+ },
+ "sass-graph": {
+ "version": "2.2.4",
+ "resolved": "https://registry.npmjs.org/sass-graph/-/sass-graph-2.2.4.tgz",
+ "integrity": "sha1-E/vWPNHK8JCLn9k0dq1DpR0eC0k=",
+ "requires": {
+ "glob": "^7.0.0",
+ "lodash": "^4.0.0",
+ "scss-tokenizer": "^0.2.3",
+ "yargs": "^7.0.0"
+ },
+ "dependencies": {
+ "camelcase": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz",
+ "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo="
+ },
+ "yargs": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.0.tgz",
+ "integrity": "sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg=",
+ "requires": {
+ "camelcase": "^3.0.0",
+ "cliui": "^3.2.0",
+ "decamelize": "^1.1.1",
+ "get-caller-file": "^1.0.1",
+ "os-locale": "^1.4.0",
+ "read-pkg-up": "^1.0.1",
+ "require-directory": "^2.1.1",
+ "require-main-filename": "^1.0.1",
+ "set-blocking": "^2.0.0",
+ "string-width": "^1.0.2",
+ "which-module": "^1.0.0",
+ "y18n": "^3.2.1",
+ "yargs-parser": "^5.0.0"
+ }
+ }
+ }
+ },
+ "sax": {
+ "version": "0.5.8",
+ "resolved": "https://registry.npmjs.org/sax/-/sax-0.5.8.tgz",
+ "integrity": "sha1-1HLbIo6zMcJQaw6MFVJK25OdEsE="
+ },
+ "scss-tokenizer": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz",
+ "integrity": "sha1-jrBtualyMzOCTT9VMGQRSYR85dE=",
+ "requires": {
+ "js-base64": "^2.1.8",
+ "source-map": "^0.4.2"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.4.4",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz",
+ "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=",
+ "requires": {
+ "amdefine": ">=0.0.4"
+ }
+ }
+ }
+ },
+ "select": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/select/-/select-1.1.2.tgz",
+ "integrity": "sha1-DnNQrN7ICxEIUoeG7B1EGNEbOW0=",
+ "optional": true
+ },
+ "semver": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+ "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ=="
+ },
+ "send": {
+ "version": "0.17.1",
+ "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz",
+ "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==",
+ "requires": {
+ "debug": "2.6.9",
+ "depd": "~1.1.2",
+ "destroy": "~1.0.4",
+ "encodeurl": "~1.0.2",
+ "escape-html": "~1.0.3",
+ "etag": "~1.8.1",
+ "fresh": "0.5.2",
+ "http-errors": "~1.7.2",
+ "mime": "1.6.0",
+ "ms": "2.1.1",
+ "on-finished": "~2.3.0",
+ "range-parser": "~1.2.1",
+ "statuses": "~1.5.0"
+ },
+ "dependencies": {
+ "mime": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
+ "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg=="
+ },
+ "ms": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
+ "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg=="
+ }
+ }
+ },
+ "serve-static": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz",
+ "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==",
+ "requires": {
+ "encodeurl": "~1.0.2",
+ "escape-html": "~1.0.3",
+ "parseurl": "~1.3.3",
+ "send": "0.17.1"
+ }
+ },
+ "set-blocking": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
+ "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc="
+ },
+ "set-value": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz",
+ "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==",
+ "requires": {
+ "extend-shallow": "^2.0.1",
+ "is-extendable": "^0.1.1",
+ "is-plain-object": "^2.0.3",
+ "split-string": "^3.0.1"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "setprototypeof": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz",
+ "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw=="
+ },
+ "shebang-command": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
+ "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+ "requires": {
+ "shebang-regex": "^3.0.0"
+ }
+ },
+ "shebang-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
+ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A=="
+ },
+ "signal-exit": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
+ "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0="
+ },
+ "snapdragon": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz",
+ "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==",
+ "requires": {
+ "base": "^0.11.1",
+ "debug": "^2.2.0",
+ "define-property": "^0.2.5",
+ "extend-shallow": "^2.0.1",
+ "map-cache": "^0.2.2",
+ "source-map": "^0.5.6",
+ "source-map-resolve": "^0.5.0",
+ "use": "^3.1.0"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "snapdragon-node": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz",
+ "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==",
+ "requires": {
+ "define-property": "^1.0.0",
+ "isobject": "^3.0.0",
+ "snapdragon-util": "^3.0.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "requires": {
+ "is-descriptor": "^1.0.0"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
+ },
+ "kind-of": {
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
+ "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw=="
+ }
+ }
+ },
+ "snapdragon-util": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz",
+ "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==",
+ "requires": {
+ "kind-of": "^3.2.0"
+ }
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
+ },
+ "source-map-resolve": {
+ "version": "0.5.3",
+ "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz",
+ "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==",
+ "requires": {
+ "atob": "^2.1.2",
+ "decode-uri-component": "^0.2.0",
+ "resolve-url": "^0.2.1",
+ "source-map-url": "^0.4.0",
+ "urix": "^0.1.0"
+ }
+ },
+ "source-map-url": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz",
+ "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM="
+ },
+ "spdx-correct": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz",
+ "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==",
+ "requires": {
+ "spdx-expression-parse": "^3.0.0",
+ "spdx-license-ids": "^3.0.0"
+ }
+ },
+ "spdx-exceptions": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz",
+ "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA=="
+ },
+ "spdx-expression-parse": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz",
+ "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==",
+ "requires": {
+ "spdx-exceptions": "^2.1.0",
+ "spdx-license-ids": "^3.0.0"
+ }
+ },
+ "spdx-license-ids": {
+ "version": "3.0.5",
+ "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz",
+ "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q=="
+ },
+ "split-string": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz",
+ "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==",
+ "requires": {
+ "extend-shallow": "^3.0.0"
+ }
+ },
+ "sprintf-js": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
+ "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw="
+ },
+ "sshpk": {
+ "version": "1.16.1",
+ "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz",
+ "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==",
+ "requires": {
+ "asn1": "~0.2.3",
+ "assert-plus": "^1.0.0",
+ "bcrypt-pbkdf": "^1.0.0",
+ "dashdash": "^1.12.0",
+ "ecc-jsbn": "~0.1.1",
+ "getpass": "^0.1.1",
+ "jsbn": "~0.1.0",
+ "safer-buffer": "^2.0.2",
+ "tweetnacl": "~0.14.0"
+ }
+ },
+ "static-extend": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz",
+ "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=",
+ "requires": {
+ "define-property": "^0.2.5",
+ "object-copy": "^0.1.0"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ }
+ }
+ },
+ "statuses": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
+ "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow="
+ },
+ "stdout-stream": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/stdout-stream/-/stdout-stream-1.4.1.tgz",
+ "integrity": "sha512-j4emi03KXqJWcIeF8eIXkjMFN1Cmb8gUlDYGeBALLPo5qdyTfA9bOtl8m33lRoC+vFMkP3gl0WsDr6+gzxbbTA==",
+ "requires": {
+ "readable-stream": "^2.0.1"
+ }
+ },
+ "string-width": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
+ "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
+ "requires": {
+ "code-point-at": "^1.0.0",
+ "is-fullwidth-code-point": "^1.0.0",
+ "strip-ansi": "^3.0.0"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ },
+ "strip-bom": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz",
+ "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=",
+ "requires": {
+ "is-utf8": "^0.2.0"
+ }
+ },
+ "strip-indent": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz",
+ "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==",
+ "requires": {
+ "min-indent": "^1.0.0"
+ }
+ },
+ "striptags": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/striptags/-/striptags-3.1.1.tgz",
+ "integrity": "sha1-yMPn/db7S7OjKjt1LltePjgJPr0="
+ },
+ "stylus": {
+ "version": "0.54.7",
+ "resolved": "https://registry.npmjs.org/stylus/-/stylus-0.54.7.tgz",
+ "integrity": "sha512-Yw3WMTzVwevT6ZTrLCYNHAFmanMxdylelL3hkWNgPMeTCpMwpV3nXjpOHuBXtFv7aiO2xRuQS6OoAdgkNcSNug==",
+ "requires": {
+ "css-parse": "~2.0.0",
+ "debug": "~3.1.0",
+ "glob": "^7.1.3",
+ "mkdirp": "~0.5.x",
+ "safer-buffer": "^2.1.2",
+ "sax": "~1.2.4",
+ "semver": "^6.0.0",
+ "source-map": "^0.7.3"
+ },
+ "dependencies": {
+ "css-parse": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/css-parse/-/css-parse-2.0.0.tgz",
+ "integrity": "sha1-pGjuZnwW2BzPBcWMONKpfHgNv9Q=",
+ "requires": {
+ "css": "^2.0.0"
+ }
+ },
+ "debug": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
+ "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "sax": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
+ "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw=="
+ },
+ "semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw=="
+ },
+ "source-map": {
+ "version": "0.7.3",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz",
+ "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ=="
+ }
+ }
+ },
+ "supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ },
+ "swig-extras": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/swig-extras/-/swig-extras-0.0.1.tgz",
+ "integrity": "sha1-tQP+3jcqucJMasaMr2VrzvGHIyg=",
+ "requires": {
+ "markdown": "~0.5.0"
+ }
+ },
+ "swig-templates": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/swig-templates/-/swig-templates-2.0.3.tgz",
+ "integrity": "sha512-QojPTuZWdpznSZWZDB63/grsZuDwT/7geMeGlftbJXDoYBIZEnTcKvz4iwYDv3SwfPX9/B4RtGRSXNnm3S2wwg==",
+ "requires": {
+ "optimist": "~0.6",
+ "uglify-js": "2.6.0"
+ }
+ },
+ "tar": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.2.tgz",
+ "integrity": "sha512-FCEhQ/4rE1zYv9rYXJw/msRqsnmlje5jHP6huWeBZ704jUTy02c5AZyWujpMR1ax6mVw9NyJMfuK2CMDWVIfgA==",
+ "requires": {
+ "block-stream": "*",
+ "fstream": "^1.0.12",
+ "inherits": "2"
+ }
+ },
+ "text-table": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
+ "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ="
+ },
+ "through": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
+ "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU="
+ },
+ "tildify": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/tildify/-/tildify-2.0.0.tgz",
+ "integrity": "sha512-Cc+OraorugtXNfs50hU9KS369rFXCfgGLpfCfvlc+Ud5u6VWmUQsOAa9HbTvheQdYnrdJqqv1e5oIqXppMYnSw=="
+ },
+ "tiny-emitter": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz",
+ "integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==",
+ "optional": true
+ },
+ "titlecase": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/titlecase/-/titlecase-1.1.3.tgz",
+ "integrity": "sha512-pQX4oiemzjBEELPqgK4WE+q0yhAqjp/yzusGtlSJsOuiDys0RQxggepYmo0BuegIDppYS3b3cpdegRwkpyN3hw=="
+ },
+ "to-fast-properties": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz",
+ "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc="
+ },
+ "to-object-path": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz",
+ "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=",
+ "requires": {
+ "kind-of": "^3.0.2"
+ }
+ },
+ "to-regex": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz",
+ "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==",
+ "requires": {
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "regex-not": "^1.0.2",
+ "safe-regex": "^1.1.0"
+ }
+ },
+ "to-regex-range": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
+ "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
+ "requires": {
+ "is-number": "^3.0.0",
+ "repeat-string": "^1.6.1"
+ }
+ },
+ "toidentifier": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz",
+ "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw=="
+ },
+ "tough-cookie": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz",
+ "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==",
+ "requires": {
+ "psl": "^1.1.28",
+ "punycode": "^2.1.1"
+ }
+ },
+ "trim-newlines": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz",
+ "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM="
+ },
+ "true-case-path": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/true-case-path/-/true-case-path-1.0.3.tgz",
+ "integrity": "sha512-m6s2OdQe5wgpFMC+pAJ+q9djG82O2jcHPOI6RNg1yy9rCYR+WD6Nbpl32fDpfC56nirdRy+opFa/Vk7HYhqaew==",
+ "requires": {
+ "glob": "^7.1.2"
+ }
+ },
+ "tslib": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.11.1.tgz",
+ "integrity": "sha512-aZW88SY8kQbU7gpV19lN24LtXh/yD4ZZg6qieAJDDg+YBsJcSmLGK9QpnUjAKVG/xefmvJGd1WUmfpT/g6AJGA=="
+ },
+ "tunnel-agent": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
+ "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
+ "requires": {
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "tweetnacl": {
+ "version": "0.14.5",
+ "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
+ "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q="
+ },
+ "uglify-js": {
+ "version": "2.6.0",
+ "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.6.0.tgz",
+ "integrity": "sha1-JeqhzDVQ45QQzu+v0c+7a20V8AE=",
+ "requires": {
+ "async": "~0.2.6",
+ "source-map": "~0.5.1",
+ "uglify-to-browserify": "~1.0.0",
+ "yargs": "~3.10.0"
+ },
+ "dependencies": {
+ "camelcase": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz",
+ "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk="
+ },
+ "cliui": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz",
+ "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=",
+ "requires": {
+ "center-align": "^0.1.1",
+ "right-align": "^0.1.1",
+ "wordwrap": "0.0.2"
+ }
+ },
+ "window-size": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz",
+ "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0="
+ },
+ "wordwrap": {
+ "version": "0.0.2",
+ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz",
+ "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8="
+ },
+ "yargs": {
+ "version": "3.10.0",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz",
+ "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=",
+ "requires": {
+ "camelcase": "^1.0.2",
+ "cliui": "^2.1.0",
+ "decamelize": "^1.0.0",
+ "window-size": "0.1.0"
+ }
+ }
+ }
+ },
+ "uglify-to-browserify": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz",
+ "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc="
+ },
+ "underscore": {
+ "version": "1.9.2",
+ "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.9.2.tgz",
+ "integrity": "sha512-D39qtimx0c1fI3ya1Lnhk3E9nONswSKhnffBI0gME9C99fYOkNi04xs8K6pePLhvl1frbDemkaBQ5ikWllR2HQ=="
+ },
+ "union-value": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz",
+ "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==",
+ "requires": {
+ "arr-union": "^3.1.0",
+ "get-value": "^2.0.6",
+ "is-extendable": "^0.1.1",
+ "set-value": "^2.0.1"
+ }
+ },
+ "unpipe": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
+ "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw="
+ },
+ "unset-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz",
+ "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=",
+ "requires": {
+ "has-value": "^0.3.1",
+ "isobject": "^3.0.0"
+ },
+ "dependencies": {
+ "has-value": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz",
+ "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=",
+ "requires": {
+ "get-value": "^2.0.3",
+ "has-values": "^0.1.4",
+ "isobject": "^2.0.0"
+ },
+ "dependencies": {
+ "isobject": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
+ "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
+ "requires": {
+ "isarray": "1.0.0"
+ }
+ }
+ }
+ },
+ "has-values": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz",
+ "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E="
+ }
+ }
+ },
+ "upath": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz",
+ "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg=="
+ },
+ "upper-case": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz",
+ "integrity": "sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg="
+ },
+ "uri-js": {
+ "version": "4.2.2",
+ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz",
+ "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==",
+ "requires": {
+ "punycode": "^2.1.0"
+ }
+ },
+ "urix": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz",
+ "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI="
+ },
+ "use": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz",
+ "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ=="
+ },
+ "util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
+ },
+ "utils-merge": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
+ "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM="
+ },
+ "uuid": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
+ "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A=="
+ },
+ "validate-npm-package-license": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
+ "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==",
+ "requires": {
+ "spdx-correct": "^3.0.0",
+ "spdx-expression-parse": "^3.0.0"
+ }
+ },
+ "vary": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
+ "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw="
+ },
+ "verror": {
+ "version": "1.10.0",
+ "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
+ "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
+ "requires": {
+ "assert-plus": "^1.0.0",
+ "core-util-is": "1.0.2",
+ "extsprintf": "^1.2.0"
+ }
+ },
+ "warehouse": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/warehouse/-/warehouse-3.0.2.tgz",
+ "integrity": "sha512-NTaUFkDcRKFx477NflL3doMhnmPobpL+uF66s0ozAhjob+UCHcOzE77GvYR1sjyu+LR4SstPz3xGxYLOKQCvMg==",
+ "requires": {
+ "JSONStream": "^1.0.7",
+ "bluebird": "^3.2.2",
+ "cuid": "^2.1.4",
+ "graceful-fs": "^4.1.3",
+ "is-plain-object": "^3.0.0",
+ "rfdc": "^1.1.4"
+ },
+ "dependencies": {
+ "is-plain-object": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-3.0.0.tgz",
+ "integrity": "sha512-tZIpofR+P05k8Aocp7UI/2UTa9lTJSebCXpFFoR9aibpokDj/uXBsJ8luUu0tTVYKkMU6URDUuOfJZ7koewXvg==",
+ "requires": {
+ "isobject": "^4.0.0"
+ }
+ },
+ "isobject": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-4.0.0.tgz",
+ "integrity": "sha512-S/2fF5wH8SJA/kmwr6HYhK/RI/OkhD84k8ntalo0iJjZikgq1XFvR5M8NPT1x5F7fBwCG3qHfnzeP/Vh/ZxCUA=="
+ }
+ }
+ },
+ "which": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
+ "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
+ "requires": {
+ "isexe": "^2.0.0"
+ }
+ },
+ "which-module": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz",
+ "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8="
+ },
+ "wide-align": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz",
+ "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==",
+ "requires": {
+ "string-width": "^1.0.2 || 2"
+ }
+ },
+ "window-size": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.4.tgz",
+ "integrity": "sha1-+OGqHuWlPsW/FR/6CXQqatdpeHY="
+ },
+ "wordwrap": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz",
+ "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc="
+ },
+ "wrap-ansi": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz",
+ "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=",
+ "requires": {
+ "string-width": "^1.0.1",
+ "strip-ansi": "^3.0.1"
+ }
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
+ },
+ "y18n": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz",
+ "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE="
+ },
+ "yallist": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
+ "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI="
+ },
+ "yargs": {
+ "version": "3.32.0",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.32.0.tgz",
+ "integrity": "sha1-AwiOnr+edWtpdRYR0qXvWRSCyZU=",
+ "requires": {
+ "camelcase": "^2.0.1",
+ "cliui": "^3.0.3",
+ "decamelize": "^1.1.1",
+ "os-locale": "^1.4.0",
+ "string-width": "^1.0.1",
+ "window-size": "^0.1.4",
+ "y18n": "^3.2.0"
+ }
+ },
+ "yargs-parser": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.0.tgz",
+ "integrity": "sha1-J17PDX/+Bcd+ZOfIbkzZS/DhIoo=",
+ "requires": {
+ "camelcase": "^3.0.0"
+ },
+ "dependencies": {
+ "camelcase": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz",
+ "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo="
+ }
+ }
+ }
+ }
+}
diff --git a/packages/site/package.json b/packages/site/package.json
new file mode 100644
index 0000000..1eed260
--- /dev/null
+++ b/packages/site/package.json
@@ -0,0 +1,52 @@
+{
+ "name": "subspace-docs",
+ "version": "0.0.1",
+ "description": "Subspace Website",
+ "main": "index.js",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/embarklabs/subspace-docs.git"
+ },
+ "license": "MIT",
+ "bugs": {
+ "url": "https://github.com/embarklabs/subspace-docs/issues"
+ },
+ "author": "Status Research & Development GMBH",
+ "authors": [
+ {
+ "name": "Iuri Matias",
+ "email": "iuri.matias@gmail.com",
+ "homepage": "https://github.com/iurimatias"
+ },
+ {
+ "name": "Richard Ramos",
+ "email": "info@richardramos.me",
+ "homepage": "https://github.com/richard-ramos"
+ }
+ ],
+ "homepage": "https://github.com/embarklabs/subspace-docs#readme",
+ "scripts": {
+ "build": "hexo generate",
+ "clean": "hexo clean",
+ "deploy": "hexo deploy",
+ "server": "hexo server"
+ },
+ "hexo": {
+ "version": "4.2.0"
+ },
+ "dependencies": {
+ "hexo": "^4.0.0",
+ "hexo-autoprefixer": "^2.0.0",
+ "hexo-generator-archive": "^1.0.0",
+ "hexo-generator-category": "^1.0.0",
+ "hexo-generator-i18n": "^0.0.7",
+ "hexo-generator-index": "^1.0.0",
+ "hexo-generator-tag": "^1.0.0",
+ "hexo-prism-plus": "^1.1.0",
+ "hexo-renderer-ejs": "^1.0.0",
+ "hexo-renderer-marked": "^2.0.0",
+ "hexo-renderer-sass": "^0.4.0",
+ "hexo-renderer-stylus": "^1.1.0",
+ "hexo-server": "^1.0.0"
+ }
+}
diff --git a/packages/site/public/CNAME b/packages/site/public/CNAME
new file mode 100644
index 0000000..c212bfc
--- /dev/null
+++ b/packages/site/public/CNAME
@@ -0,0 +1 @@
+subspace.status.im
diff --git a/packages/site/public/api.html b/packages/site/public/api.html
new file mode 100644
index 0000000..e69de29
diff --git a/packages/site/public/apollo-client.html b/packages/site/public/apollo-client.html
new file mode 100644
index 0000000..e69de29
diff --git a/packages/site/public/css/application.css b/packages/site/public/css/application.css
new file mode 100644
index 0000000..177f1ab
--- /dev/null
+++ b/packages/site/public/css/application.css
@@ -0,0 +1,3012 @@
+*,
+*:before,
+*:after {
+ -webkit-box-sizing: inherit;
+ box-sizing: inherit; }
+
+html {
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ min-height: 100%;
+ -webkit-overflow-scrolling: touch;
+ -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
+ -webkit-text-size-adjust: 100%;
+ -ms-text-size-adjust: 100%;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+ font-size: 10px;
+ font-weight: normal;
+ text-rendering: optimizeLegibility; }
+
+body {
+ margin: 0;
+ color: #333;
+ font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
+ font-size: 17px;
+ font-weight: 400;
+ line-height: 1.6; }
+
+s {
+ font-size: 14px; }
+
+input,
+textarea,
+select {
+ display: block;
+ margin: 4px 0 0;
+ padding: 12px 16px;
+ width: 100%;
+ border-radius: 0;
+ border: 1px solid #E6E8EB !important;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+ color: #333;
+ font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
+ font-size: 17px;
+ line-height: 1; }
+ input:placeholder,
+ textarea:placeholder,
+ select:placeholder {
+ color: rgba(51, 51, 51, 0.3); }
+ input:first-child,
+ textarea:first-child,
+ select:first-child {
+ margin-top: 0; }
+ input:focus, input:active,
+ textarea:focus,
+ textarea:active,
+ select:focus,
+ select:active {
+ outline: 1px solid #F1645D;
+ border-color: transparent;
+ background: rgba(255, 255, 255, 0.8); }
+ input.is-error,
+ textarea.is-error,
+ select.is-error {
+ border-color: #F46363; }
+ input.is-success,
+ textarea.is-success,
+ select.is-success {
+ border-color: #69a22b; }
+
+input[type="tel"],
+input[type="text"],
+input[type="password"],
+input[type="email"],
+textarea {
+ -webkit-appearance: none;
+ -moz-appearance: none;
+ appearance: none; }
+
+input[type="checkbox"], input[type="radio"] {
+ width: auto; }
+
+textarea {
+ min-height: 100px;
+ line-height: 1.425; }
+
+label {
+ display: block;
+ margin-top: 16px;
+ color: #6C7992;
+ font-size: 1.5rem;
+ line-height: 1.2; }
+ label:first-child {
+ margin-top: 0; }
+
+form {
+ margin-top: get-spacing(large); }
+
+fieldset {
+ margin: 0;
+ padding: 0;
+ border: 0; }
+
+legend {
+ font-family: "Roboto", Helvetica, sans-serif;
+ font-weight: bold;
+ line-height: 1.2; }
+
+nav ul,
+nav ol {
+ list-style: none;
+ margin-left: 0;
+ padding-left: 0; }
+
+img {
+ height: auto;
+ max-width: 100%;
+ border: none; }
+ img:first-child {
+ margin-top: 0; }
+
+p {
+ margin: 16px 0 0; }
+ p:first-child {
+ margin-top: 0; }
+
+code {
+ padding: 2px 4px;
+ border-radius: 8px;
+ background: #E6E8EB;
+ color: #4F5F74; }
+ code[class] {
+ background: transparent; }
+
+a {
+ cursor: pointer;
+ position: relative;
+ color: #F1645D;
+ text-decoration: none; }
+ a:hover, a:visited, a:focus, a:visited {
+ text-decoration: none; }
+ a.icon:hover {
+ text-decoration: none; }
+
+ol, ul {
+ margin-bottom: 9px;
+ margin-left: 16px;
+ margin-right: 0;
+ margin-top: 8px;
+ padding-left: 16px;
+ line-height: 1.5; }
+ ol:first-child, ul:first-child {
+ margin-top: 0; }
+
+ul {
+ list-style-type: disc; }
+
+li {
+ margin-top: 4px; }
+ li:first-child {
+ margin-top: 0; }
+
+figure {
+ margin: 8px 0 0;
+ border-radius: 0;
+ line-height: 1; }
+ figure:first-child {
+ margin-top: 0; }
+
+hr {
+ height: 1px;
+ margin-top: get-spacing(x-large);
+ background: #E6E8EB;
+ border: none; }
+
+blockquote {
+ margin: 32px 0 0;
+ padding-top: 16px;
+ position: relative;
+ color: #6C7992;
+ font-family: "Roboto", Helvetica, sans-serif;
+ font-size: 2.4rem;
+ font-weight: bold;
+ line-height: 1.425; }
+ @media screen and (min-width: 767px) {
+ blockquote {
+ font-size: 2.8rem; } }
+ blockquote:before {
+ content: '';
+ width: 30px;
+ display: block;
+ position: absolute;
+ top: 0;
+ left: 0;
+ height: 3px;
+ background: #6C7992; }
+ blockquote cite {
+ display: block;
+ margin-top: 8px;
+ font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
+ font-size: 2.2rem;
+ font-weight: normal;
+ font-style: normal; }
+
+video {
+ height: auto;
+ max-width: 100%;
+ width: 100%;
+ overflow: hidden;
+ padding: 0;
+ border: none;
+ background: transparent; }
+
+table {
+ margin-top: get-spacing(large); }
+
+h1,
+h2,
+h3,
+h4,
+h5,
+h6 {
+ margin: 0;
+ font-family: "Roboto", Helvetica, sans-serif;
+ line-height: 1.2; }
+ h1:first-child,
+ h2:first-child,
+ h3:first-child,
+ h4:first-child,
+ h5:first-child,
+ h6:first-child {
+ margin-top: 0; }
+ h1 + p,
+ h2 + p,
+ h3 + p,
+ h4 + p,
+ h5 + p,
+ h6 + p {
+ margin-top: 8px; }
+
+.h2 {
+ font-size: 42px; }
+
+.h3 {
+ font-size: 36px; }
+
+.h4 {
+ font-size: 28px; }
+
+.h5 {
+ font-size: 24px; }
+
+.h6 {
+ font-size: 17px;
+ font-weight: bold; }
+
+.a-subtitle {
+ font-size: 2.1rem;
+ font-weight: 600;
+ text-transform: uppercase; }
+
+.a-paragraph {
+ font-size: 17px; }
+
+.a-title {
+ font-size: 3.4rem;
+ font-weight: bold; }
+ @media screen and (min-width: 600px) {
+ .a-title {
+ font-size: 4.2rem; } }
+ .a-title strong {
+ font-weight: bold; }
+
+.o-grid {
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-orient: horizontal;
+ -webkit-box-direction: normal;
+ -ms-flex-direction: row;
+ flex-direction: row;
+ -ms-flex-wrap: wrap;
+ flex-wrap: wrap;
+ margin-left: -16px; }
+ .o-grid:first-child {
+ margin-top: -32px; }
+ .o-grid--centered {
+ -webkit-box-align: center;
+ -ms-flex-align: center;
+ align-items: center; }
+
+.o-row {
+ margin-top: 32px;
+ padding: 0 16px; }
+
+.o-row-xl {
+ margin-top: 64px;
+ padding: 0 16px; }
+
+.o-vertical-alignment {
+ -webkit-box-align: center;
+ -ms-flex-align: center;
+ align-items: center;
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-orient: horizontal;
+ -webkit-box-direction: normal;
+ -ms-flex-direction: row;
+ flex-direction: row;
+ margin-left: -16px; }
+ .o-vertical-alignment__item {
+ margin-left: 16px; }
+ .o-vertical-alignment__item:first-child {
+ margin-left: 0; }
+
+.o-distance {
+ margin-top: 32px; }
+ @media screen and (min-width: 767px) {
+ .o-distance {
+ margin-top: 64px; } }
+
+.o-distance-small {
+ margin-top: 16px; }
+
+@media screen and (min-width: 767px) {
+ .o-justified--large {
+ -webkit-box-align: center;
+ -ms-flex-align: center;
+ align-items: center;
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-orient: horizontal;
+ -webkit-box-direction: normal;
+ -ms-flex-direction: row;
+ flex-direction: row;
+ -webkit-box-pack: justify;
+ -ms-flex-pack: justify;
+ justify-content: space-between; } }
+
+.o-constrained {
+ margin-right: auto;
+ margin-left: auto;
+ max-width: 1200px;
+ padding: 0 16px; }
+ @media screen and (min-width: 767px) {
+ .o-constrained {
+ padding: 0 64px; } }
+
+.o-constrained-medium {
+ margin-right: auto;
+ margin-left: auto;
+ max-width: 720px; }
+
+[class*="o-grid__column-"],
+[class^="o-grid__column-"] {
+ margin-top: 32px;
+ margin-left: 16px; }
+
+.o-grid__column-1-1 {
+ width: calc(100% - 16px); }
+
+.o-grid__column-1-2 {
+ width: calc(50% - 16px); }
+
+.o-grid__column-2-2 {
+ width: calc(100% - 16px); }
+
+.o-grid__column-1-3 {
+ width: calc(33.33333% - 16px); }
+
+.o-grid__column-2-3 {
+ width: calc(66.66667% - 16px); }
+
+.o-grid__column-3-3 {
+ width: calc(100% - 16px); }
+
+.o-grid__column-1-4 {
+ width: calc(25% - 16px); }
+
+.o-grid__column-2-4 {
+ width: calc(50% - 16px); }
+
+.o-grid__column-3-4 {
+ width: calc(75% - 16px); }
+
+.o-grid__column-4-4 {
+ width: calc(100% - 16px); }
+
+.o-grid__column-1-5 {
+ width: calc(20% - 16px); }
+
+.o-grid__column-2-5 {
+ width: calc(40% - 16px); }
+
+.o-grid__column-3-5 {
+ width: calc(60% - 16px); }
+
+.o-grid__column-4-5 {
+ width: calc(80% - 16px); }
+
+.o-grid__column-5-5 {
+ width: calc(100% - 16px); }
+
+.o-grid__column-1-6 {
+ width: calc(16.66667% - 16px); }
+
+.o-grid__column-2-6 {
+ width: calc(33.33333% - 16px); }
+
+.o-grid__column-3-6 {
+ width: calc(50% - 16px); }
+
+.o-grid__column-4-6 {
+ width: calc(66.66667% - 16px); }
+
+.o-grid__column-5-6 {
+ width: calc(83.33333% - 16px); }
+
+.o-grid__column-6-6 {
+ width: calc(100% - 16px); }
+
+.o-grid__column-1-7 {
+ width: calc(14.28571% - 16px); }
+
+.o-grid__column-2-7 {
+ width: calc(28.57143% - 16px); }
+
+.o-grid__column-3-7 {
+ width: calc(42.85714% - 16px); }
+
+.o-grid__column-4-7 {
+ width: calc(57.14286% - 16px); }
+
+.o-grid__column-5-7 {
+ width: calc(71.42857% - 16px); }
+
+.o-grid__column-6-7 {
+ width: calc(85.71429% - 16px); }
+
+.o-grid__column-7-7 {
+ width: calc(100% - 16px); }
+
+.o-grid__column-1-8 {
+ width: calc(12.5% - 16px); }
+
+.o-grid__column-2-8 {
+ width: calc(25% - 16px); }
+
+.o-grid__column-3-8 {
+ width: calc(37.5% - 16px); }
+
+.o-grid__column-4-8 {
+ width: calc(50% - 16px); }
+
+.o-grid__column-5-8 {
+ width: calc(62.5% - 16px); }
+
+.o-grid__column-6-8 {
+ width: calc(75% - 16px); }
+
+.o-grid__column-7-8 {
+ width: calc(87.5% - 16px); }
+
+.o-grid__column-8-8 {
+ width: calc(100% - 16px); }
+
+.o-grid__column-1-9 {
+ width: calc(11.11111% - 16px); }
+
+.o-grid__column-2-9 {
+ width: calc(22.22222% - 16px); }
+
+.o-grid__column-3-9 {
+ width: calc(33.33333% - 16px); }
+
+.o-grid__column-4-9 {
+ width: calc(44.44444% - 16px); }
+
+.o-grid__column-5-9 {
+ width: calc(55.55556% - 16px); }
+
+.o-grid__column-6-9 {
+ width: calc(66.66667% - 16px); }
+
+.o-grid__column-7-9 {
+ width: calc(77.77778% - 16px); }
+
+.o-grid__column-8-9 {
+ width: calc(88.88889% - 16px); }
+
+.o-grid__column-9-9 {
+ width: calc(100% - 16px); }
+
+.o-grid__column-1-10 {
+ width: calc(10% - 16px); }
+
+.o-grid__column-2-10 {
+ width: calc(20% - 16px); }
+
+.o-grid__column-3-10 {
+ width: calc(30% - 16px); }
+
+.o-grid__column-4-10 {
+ width: calc(40% - 16px); }
+
+.o-grid__column-5-10 {
+ width: calc(50% - 16px); }
+
+.o-grid__column-6-10 {
+ width: calc(60% - 16px); }
+
+.o-grid__column-7-10 {
+ width: calc(70% - 16px); }
+
+.o-grid__column-8-10 {
+ width: calc(80% - 16px); }
+
+.o-grid__column-9-10 {
+ width: calc(90% - 16px); }
+
+.o-grid__column-10-10 {
+ width: calc(100% - 16px); }
+
+.o-grid__column-1-11 {
+ width: calc(9.09091% - 16px); }
+
+.o-grid__column-2-11 {
+ width: calc(18.18182% - 16px); }
+
+.o-grid__column-3-11 {
+ width: calc(27.27273% - 16px); }
+
+.o-grid__column-4-11 {
+ width: calc(36.36364% - 16px); }
+
+.o-grid__column-5-11 {
+ width: calc(45.45455% - 16px); }
+
+.o-grid__column-6-11 {
+ width: calc(54.54545% - 16px); }
+
+.o-grid__column-7-11 {
+ width: calc(63.63636% - 16px); }
+
+.o-grid__column-8-11 {
+ width: calc(72.72727% - 16px); }
+
+.o-grid__column-9-11 {
+ width: calc(81.81818% - 16px); }
+
+.o-grid__column-10-11 {
+ width: calc(90.90909% - 16px); }
+
+.o-grid__column-11-11 {
+ width: calc(100% - 16px); }
+
+.o-grid__column-1-12 {
+ width: calc(8.33333% - 16px); }
+
+.o-grid__column-2-12 {
+ width: calc(16.66667% - 16px); }
+
+.o-grid__column-3-12 {
+ width: calc(25% - 16px); }
+
+.o-grid__column-4-12 {
+ width: calc(33.33333% - 16px); }
+
+.o-grid__column-5-12 {
+ width: calc(41.66667% - 16px); }
+
+.o-grid__column-6-12 {
+ width: calc(50% - 16px); }
+
+.o-grid__column-7-12 {
+ width: calc(58.33333% - 16px); }
+
+.o-grid__column-8-12 {
+ width: calc(66.66667% - 16px); }
+
+.o-grid__column-9-12 {
+ width: calc(75% - 16px); }
+
+.o-grid__column-10-12 {
+ width: calc(83.33333% - 16px); }
+
+.o-grid__column-11-12 {
+ width: calc(91.66667% - 16px); }
+
+.o-grid__column-12-12 {
+ width: calc(100% - 16px); }
+
+@media screen and (min-width: 480px) {
+ .o-grid__column-small-1-1 {
+ width: calc(100% - 16px); } }
+
+@media screen and (min-width: 480px) {
+ .o-grid__column-small-1-2 {
+ width: calc(50% - 16px); } }
+
+@media screen and (min-width: 480px) {
+ .o-grid__column-small-2-2 {
+ width: calc(100% - 16px); } }
+
+@media screen and (min-width: 480px) {
+ .o-grid__column-small-1-3 {
+ width: calc(33.33333% - 16px); } }
+
+@media screen and (min-width: 480px) {
+ .o-grid__column-small-2-3 {
+ width: calc(66.66667% - 16px); } }
+
+@media screen and (min-width: 480px) {
+ .o-grid__column-small-3-3 {
+ width: calc(100% - 16px); } }
+
+@media screen and (min-width: 480px) {
+ .o-grid__column-small-1-4 {
+ width: calc(25% - 16px); } }
+
+@media screen and (min-width: 480px) {
+ .o-grid__column-small-2-4 {
+ width: calc(50% - 16px); } }
+
+@media screen and (min-width: 480px) {
+ .o-grid__column-small-3-4 {
+ width: calc(75% - 16px); } }
+
+@media screen and (min-width: 480px) {
+ .o-grid__column-small-4-4 {
+ width: calc(100% - 16px); } }
+
+@media screen and (min-width: 480px) {
+ .o-grid__column-small-1-5 {
+ width: calc(20% - 16px); } }
+
+@media screen and (min-width: 480px) {
+ .o-grid__column-small-2-5 {
+ width: calc(40% - 16px); } }
+
+@media screen and (min-width: 480px) {
+ .o-grid__column-small-3-5 {
+ width: calc(60% - 16px); } }
+
+@media screen and (min-width: 480px) {
+ .o-grid__column-small-4-5 {
+ width: calc(80% - 16px); } }
+
+@media screen and (min-width: 480px) {
+ .o-grid__column-small-5-5 {
+ width: calc(100% - 16px); } }
+
+@media screen and (min-width: 480px) {
+ .o-grid__column-small-1-6 {
+ width: calc(16.66667% - 16px); } }
+
+@media screen and (min-width: 480px) {
+ .o-grid__column-small-2-6 {
+ width: calc(33.33333% - 16px); } }
+
+@media screen and (min-width: 480px) {
+ .o-grid__column-small-3-6 {
+ width: calc(50% - 16px); } }
+
+@media screen and (min-width: 480px) {
+ .o-grid__column-small-4-6 {
+ width: calc(66.66667% - 16px); } }
+
+@media screen and (min-width: 480px) {
+ .o-grid__column-small-5-6 {
+ width: calc(83.33333% - 16px); } }
+
+@media screen and (min-width: 480px) {
+ .o-grid__column-small-6-6 {
+ width: calc(100% - 16px); } }
+
+@media screen and (min-width: 480px) {
+ .o-grid__column-small-1-7 {
+ width: calc(14.28571% - 16px); } }
+
+@media screen and (min-width: 480px) {
+ .o-grid__column-small-2-7 {
+ width: calc(28.57143% - 16px); } }
+
+@media screen and (min-width: 480px) {
+ .o-grid__column-small-3-7 {
+ width: calc(42.85714% - 16px); } }
+
+@media screen and (min-width: 480px) {
+ .o-grid__column-small-4-7 {
+ width: calc(57.14286% - 16px); } }
+
+@media screen and (min-width: 480px) {
+ .o-grid__column-small-5-7 {
+ width: calc(71.42857% - 16px); } }
+
+@media screen and (min-width: 480px) {
+ .o-grid__column-small-6-7 {
+ width: calc(85.71429% - 16px); } }
+
+@media screen and (min-width: 480px) {
+ .o-grid__column-small-7-7 {
+ width: calc(100% - 16px); } }
+
+@media screen and (min-width: 480px) {
+ .o-grid__column-small-1-8 {
+ width: calc(12.5% - 16px); } }
+
+@media screen and (min-width: 480px) {
+ .o-grid__column-small-2-8 {
+ width: calc(25% - 16px); } }
+
+@media screen and (min-width: 480px) {
+ .o-grid__column-small-3-8 {
+ width: calc(37.5% - 16px); } }
+
+@media screen and (min-width: 480px) {
+ .o-grid__column-small-4-8 {
+ width: calc(50% - 16px); } }
+
+@media screen and (min-width: 480px) {
+ .o-grid__column-small-5-8 {
+ width: calc(62.5% - 16px); } }
+
+@media screen and (min-width: 480px) {
+ .o-grid__column-small-6-8 {
+ width: calc(75% - 16px); } }
+
+@media screen and (min-width: 480px) {
+ .o-grid__column-small-7-8 {
+ width: calc(87.5% - 16px); } }
+
+@media screen and (min-width: 480px) {
+ .o-grid__column-small-8-8 {
+ width: calc(100% - 16px); } }
+
+@media screen and (min-width: 480px) {
+ .o-grid__column-small-1-9 {
+ width: calc(11.11111% - 16px); } }
+
+@media screen and (min-width: 480px) {
+ .o-grid__column-small-2-9 {
+ width: calc(22.22222% - 16px); } }
+
+@media screen and (min-width: 480px) {
+ .o-grid__column-small-3-9 {
+ width: calc(33.33333% - 16px); } }
+
+@media screen and (min-width: 480px) {
+ .o-grid__column-small-4-9 {
+ width: calc(44.44444% - 16px); } }
+
+@media screen and (min-width: 480px) {
+ .o-grid__column-small-5-9 {
+ width: calc(55.55556% - 16px); } }
+
+@media screen and (min-width: 480px) {
+ .o-grid__column-small-6-9 {
+ width: calc(66.66667% - 16px); } }
+
+@media screen and (min-width: 480px) {
+ .o-grid__column-small-7-9 {
+ width: calc(77.77778% - 16px); } }
+
+@media screen and (min-width: 480px) {
+ .o-grid__column-small-8-9 {
+ width: calc(88.88889% - 16px); } }
+
+@media screen and (min-width: 480px) {
+ .o-grid__column-small-9-9 {
+ width: calc(100% - 16px); } }
+
+@media screen and (min-width: 480px) {
+ .o-grid__column-small-1-10 {
+ width: calc(10% - 16px); } }
+
+@media screen and (min-width: 480px) {
+ .o-grid__column-small-2-10 {
+ width: calc(20% - 16px); } }
+
+@media screen and (min-width: 480px) {
+ .o-grid__column-small-3-10 {
+ width: calc(30% - 16px); } }
+
+@media screen and (min-width: 480px) {
+ .o-grid__column-small-4-10 {
+ width: calc(40% - 16px); } }
+
+@media screen and (min-width: 480px) {
+ .o-grid__column-small-5-10 {
+ width: calc(50% - 16px); } }
+
+@media screen and (min-width: 480px) {
+ .o-grid__column-small-6-10 {
+ width: calc(60% - 16px); } }
+
+@media screen and (min-width: 480px) {
+ .o-grid__column-small-7-10 {
+ width: calc(70% - 16px); } }
+
+@media screen and (min-width: 480px) {
+ .o-grid__column-small-8-10 {
+ width: calc(80% - 16px); } }
+
+@media screen and (min-width: 480px) {
+ .o-grid__column-small-9-10 {
+ width: calc(90% - 16px); } }
+
+@media screen and (min-width: 480px) {
+ .o-grid__column-small-10-10 {
+ width: calc(100% - 16px); } }
+
+@media screen and (min-width: 480px) {
+ .o-grid__column-small-1-11 {
+ width: calc(9.09091% - 16px); } }
+
+@media screen and (min-width: 480px) {
+ .o-grid__column-small-2-11 {
+ width: calc(18.18182% - 16px); } }
+
+@media screen and (min-width: 480px) {
+ .o-grid__column-small-3-11 {
+ width: calc(27.27273% - 16px); } }
+
+@media screen and (min-width: 480px) {
+ .o-grid__column-small-4-11 {
+ width: calc(36.36364% - 16px); } }
+
+@media screen and (min-width: 480px) {
+ .o-grid__column-small-5-11 {
+ width: calc(45.45455% - 16px); } }
+
+@media screen and (min-width: 480px) {
+ .o-grid__column-small-6-11 {
+ width: calc(54.54545% - 16px); } }
+
+@media screen and (min-width: 480px) {
+ .o-grid__column-small-7-11 {
+ width: calc(63.63636% - 16px); } }
+
+@media screen and (min-width: 480px) {
+ .o-grid__column-small-8-11 {
+ width: calc(72.72727% - 16px); } }
+
+@media screen and (min-width: 480px) {
+ .o-grid__column-small-9-11 {
+ width: calc(81.81818% - 16px); } }
+
+@media screen and (min-width: 480px) {
+ .o-grid__column-small-10-11 {
+ width: calc(90.90909% - 16px); } }
+
+@media screen and (min-width: 480px) {
+ .o-grid__column-small-11-11 {
+ width: calc(100% - 16px); } }
+
+@media screen and (min-width: 480px) {
+ .o-grid__column-small-1-12 {
+ width: calc(8.33333% - 16px); } }
+
+@media screen and (min-width: 480px) {
+ .o-grid__column-small-2-12 {
+ width: calc(16.66667% - 16px); } }
+
+@media screen and (min-width: 480px) {
+ .o-grid__column-small-3-12 {
+ width: calc(25% - 16px); } }
+
+@media screen and (min-width: 480px) {
+ .o-grid__column-small-4-12 {
+ width: calc(33.33333% - 16px); } }
+
+@media screen and (min-width: 480px) {
+ .o-grid__column-small-5-12 {
+ width: calc(41.66667% - 16px); } }
+
+@media screen and (min-width: 480px) {
+ .o-grid__column-small-6-12 {
+ width: calc(50% - 16px); } }
+
+@media screen and (min-width: 480px) {
+ .o-grid__column-small-7-12 {
+ width: calc(58.33333% - 16px); } }
+
+@media screen and (min-width: 480px) {
+ .o-grid__column-small-8-12 {
+ width: calc(66.66667% - 16px); } }
+
+@media screen and (min-width: 480px) {
+ .o-grid__column-small-9-12 {
+ width: calc(75% - 16px); } }
+
+@media screen and (min-width: 480px) {
+ .o-grid__column-small-10-12 {
+ width: calc(83.33333% - 16px); } }
+
+@media screen and (min-width: 480px) {
+ .o-grid__column-small-11-12 {
+ width: calc(91.66667% - 16px); } }
+
+@media screen and (min-width: 480px) {
+ .o-grid__column-small-12-12 {
+ width: calc(100% - 16px); } }
+
+@media screen and (min-width: 600px) {
+ .o-grid__column-medium-1-1 {
+ width: calc(100% - 16px); } }
+
+@media screen and (min-width: 600px) {
+ .o-grid__column-medium-1-2 {
+ width: calc(50% - 16px); } }
+
+@media screen and (min-width: 600px) {
+ .o-grid__column-medium-2-2 {
+ width: calc(100% - 16px); } }
+
+@media screen and (min-width: 600px) {
+ .o-grid__column-medium-1-3 {
+ width: calc(33.33333% - 16px); } }
+
+@media screen and (min-width: 600px) {
+ .o-grid__column-medium-2-3 {
+ width: calc(66.66667% - 16px); } }
+
+@media screen and (min-width: 600px) {
+ .o-grid__column-medium-3-3 {
+ width: calc(100% - 16px); } }
+
+@media screen and (min-width: 600px) {
+ .o-grid__column-medium-1-4 {
+ width: calc(25% - 16px); } }
+
+@media screen and (min-width: 600px) {
+ .o-grid__column-medium-2-4 {
+ width: calc(50% - 16px); } }
+
+@media screen and (min-width: 600px) {
+ .o-grid__column-medium-3-4 {
+ width: calc(75% - 16px); } }
+
+@media screen and (min-width: 600px) {
+ .o-grid__column-medium-4-4 {
+ width: calc(100% - 16px); } }
+
+@media screen and (min-width: 600px) {
+ .o-grid__column-medium-1-5 {
+ width: calc(20% - 16px); } }
+
+@media screen and (min-width: 600px) {
+ .o-grid__column-medium-2-5 {
+ width: calc(40% - 16px); } }
+
+@media screen and (min-width: 600px) {
+ .o-grid__column-medium-3-5 {
+ width: calc(60% - 16px); } }
+
+@media screen and (min-width: 600px) {
+ .o-grid__column-medium-4-5 {
+ width: calc(80% - 16px); } }
+
+@media screen and (min-width: 600px) {
+ .o-grid__column-medium-5-5 {
+ width: calc(100% - 16px); } }
+
+@media screen and (min-width: 600px) {
+ .o-grid__column-medium-1-6 {
+ width: calc(16.66667% - 16px); } }
+
+@media screen and (min-width: 600px) {
+ .o-grid__column-medium-2-6 {
+ width: calc(33.33333% - 16px); } }
+
+@media screen and (min-width: 600px) {
+ .o-grid__column-medium-3-6 {
+ width: calc(50% - 16px); } }
+
+@media screen and (min-width: 600px) {
+ .o-grid__column-medium-4-6 {
+ width: calc(66.66667% - 16px); } }
+
+@media screen and (min-width: 600px) {
+ .o-grid__column-medium-5-6 {
+ width: calc(83.33333% - 16px); } }
+
+@media screen and (min-width: 600px) {
+ .o-grid__column-medium-6-6 {
+ width: calc(100% - 16px); } }
+
+@media screen and (min-width: 600px) {
+ .o-grid__column-medium-1-7 {
+ width: calc(14.28571% - 16px); } }
+
+@media screen and (min-width: 600px) {
+ .o-grid__column-medium-2-7 {
+ width: calc(28.57143% - 16px); } }
+
+@media screen and (min-width: 600px) {
+ .o-grid__column-medium-3-7 {
+ width: calc(42.85714% - 16px); } }
+
+@media screen and (min-width: 600px) {
+ .o-grid__column-medium-4-7 {
+ width: calc(57.14286% - 16px); } }
+
+@media screen and (min-width: 600px) {
+ .o-grid__column-medium-5-7 {
+ width: calc(71.42857% - 16px); } }
+
+@media screen and (min-width: 600px) {
+ .o-grid__column-medium-6-7 {
+ width: calc(85.71429% - 16px); } }
+
+@media screen and (min-width: 600px) {
+ .o-grid__column-medium-7-7 {
+ width: calc(100% - 16px); } }
+
+@media screen and (min-width: 600px) {
+ .o-grid__column-medium-1-8 {
+ width: calc(12.5% - 16px); } }
+
+@media screen and (min-width: 600px) {
+ .o-grid__column-medium-2-8 {
+ width: calc(25% - 16px); } }
+
+@media screen and (min-width: 600px) {
+ .o-grid__column-medium-3-8 {
+ width: calc(37.5% - 16px); } }
+
+@media screen and (min-width: 600px) {
+ .o-grid__column-medium-4-8 {
+ width: calc(50% - 16px); } }
+
+@media screen and (min-width: 600px) {
+ .o-grid__column-medium-5-8 {
+ width: calc(62.5% - 16px); } }
+
+@media screen and (min-width: 600px) {
+ .o-grid__column-medium-6-8 {
+ width: calc(75% - 16px); } }
+
+@media screen and (min-width: 600px) {
+ .o-grid__column-medium-7-8 {
+ width: calc(87.5% - 16px); } }
+
+@media screen and (min-width: 600px) {
+ .o-grid__column-medium-8-8 {
+ width: calc(100% - 16px); } }
+
+@media screen and (min-width: 600px) {
+ .o-grid__column-medium-1-9 {
+ width: calc(11.11111% - 16px); } }
+
+@media screen and (min-width: 600px) {
+ .o-grid__column-medium-2-9 {
+ width: calc(22.22222% - 16px); } }
+
+@media screen and (min-width: 600px) {
+ .o-grid__column-medium-3-9 {
+ width: calc(33.33333% - 16px); } }
+
+@media screen and (min-width: 600px) {
+ .o-grid__column-medium-4-9 {
+ width: calc(44.44444% - 16px); } }
+
+@media screen and (min-width: 600px) {
+ .o-grid__column-medium-5-9 {
+ width: calc(55.55556% - 16px); } }
+
+@media screen and (min-width: 600px) {
+ .o-grid__column-medium-6-9 {
+ width: calc(66.66667% - 16px); } }
+
+@media screen and (min-width: 600px) {
+ .o-grid__column-medium-7-9 {
+ width: calc(77.77778% - 16px); } }
+
+@media screen and (min-width: 600px) {
+ .o-grid__column-medium-8-9 {
+ width: calc(88.88889% - 16px); } }
+
+@media screen and (min-width: 600px) {
+ .o-grid__column-medium-9-9 {
+ width: calc(100% - 16px); } }
+
+@media screen and (min-width: 600px) {
+ .o-grid__column-medium-1-10 {
+ width: calc(10% - 16px); } }
+
+@media screen and (min-width: 600px) {
+ .o-grid__column-medium-2-10 {
+ width: calc(20% - 16px); } }
+
+@media screen and (min-width: 600px) {
+ .o-grid__column-medium-3-10 {
+ width: calc(30% - 16px); } }
+
+@media screen and (min-width: 600px) {
+ .o-grid__column-medium-4-10 {
+ width: calc(40% - 16px); } }
+
+@media screen and (min-width: 600px) {
+ .o-grid__column-medium-5-10 {
+ width: calc(50% - 16px); } }
+
+@media screen and (min-width: 600px) {
+ .o-grid__column-medium-6-10 {
+ width: calc(60% - 16px); } }
+
+@media screen and (min-width: 600px) {
+ .o-grid__column-medium-7-10 {
+ width: calc(70% - 16px); } }
+
+@media screen and (min-width: 600px) {
+ .o-grid__column-medium-8-10 {
+ width: calc(80% - 16px); } }
+
+@media screen and (min-width: 600px) {
+ .o-grid__column-medium-9-10 {
+ width: calc(90% - 16px); } }
+
+@media screen and (min-width: 600px) {
+ .o-grid__column-medium-10-10 {
+ width: calc(100% - 16px); } }
+
+@media screen and (min-width: 600px) {
+ .o-grid__column-medium-1-11 {
+ width: calc(9.09091% - 16px); } }
+
+@media screen and (min-width: 600px) {
+ .o-grid__column-medium-2-11 {
+ width: calc(18.18182% - 16px); } }
+
+@media screen and (min-width: 600px) {
+ .o-grid__column-medium-3-11 {
+ width: calc(27.27273% - 16px); } }
+
+@media screen and (min-width: 600px) {
+ .o-grid__column-medium-4-11 {
+ width: calc(36.36364% - 16px); } }
+
+@media screen and (min-width: 600px) {
+ .o-grid__column-medium-5-11 {
+ width: calc(45.45455% - 16px); } }
+
+@media screen and (min-width: 600px) {
+ .o-grid__column-medium-6-11 {
+ width: calc(54.54545% - 16px); } }
+
+@media screen and (min-width: 600px) {
+ .o-grid__column-medium-7-11 {
+ width: calc(63.63636% - 16px); } }
+
+@media screen and (min-width: 600px) {
+ .o-grid__column-medium-8-11 {
+ width: calc(72.72727% - 16px); } }
+
+@media screen and (min-width: 600px) {
+ .o-grid__column-medium-9-11 {
+ width: calc(81.81818% - 16px); } }
+
+@media screen and (min-width: 600px) {
+ .o-grid__column-medium-10-11 {
+ width: calc(90.90909% - 16px); } }
+
+@media screen and (min-width: 600px) {
+ .o-grid__column-medium-11-11 {
+ width: calc(100% - 16px); } }
+
+@media screen and (min-width: 600px) {
+ .o-grid__column-medium-1-12 {
+ width: calc(8.33333% - 16px); } }
+
+@media screen and (min-width: 600px) {
+ .o-grid__column-medium-2-12 {
+ width: calc(16.66667% - 16px); } }
+
+@media screen and (min-width: 600px) {
+ .o-grid__column-medium-3-12 {
+ width: calc(25% - 16px); } }
+
+@media screen and (min-width: 600px) {
+ .o-grid__column-medium-4-12 {
+ width: calc(33.33333% - 16px); } }
+
+@media screen and (min-width: 600px) {
+ .o-grid__column-medium-5-12 {
+ width: calc(41.66667% - 16px); } }
+
+@media screen and (min-width: 600px) {
+ .o-grid__column-medium-6-12 {
+ width: calc(50% - 16px); } }
+
+@media screen and (min-width: 600px) {
+ .o-grid__column-medium-7-12 {
+ width: calc(58.33333% - 16px); } }
+
+@media screen and (min-width: 600px) {
+ .o-grid__column-medium-8-12 {
+ width: calc(66.66667% - 16px); } }
+
+@media screen and (min-width: 600px) {
+ .o-grid__column-medium-9-12 {
+ width: calc(75% - 16px); } }
+
+@media screen and (min-width: 600px) {
+ .o-grid__column-medium-10-12 {
+ width: calc(83.33333% - 16px); } }
+
+@media screen and (min-width: 600px) {
+ .o-grid__column-medium-11-12 {
+ width: calc(91.66667% - 16px); } }
+
+@media screen and (min-width: 600px) {
+ .o-grid__column-medium-12-12 {
+ width: calc(100% - 16px); } }
+
+@media screen and (min-width: 767px) {
+ .o-grid__column-large-1-1 {
+ width: calc(100% - 16px); } }
+
+@media screen and (min-width: 767px) {
+ .o-grid__column-large-1-2 {
+ width: calc(50% - 16px); } }
+
+@media screen and (min-width: 767px) {
+ .o-grid__column-large-2-2 {
+ width: calc(100% - 16px); } }
+
+@media screen and (min-width: 767px) {
+ .o-grid__column-large-1-3 {
+ width: calc(33.33333% - 16px); } }
+
+@media screen and (min-width: 767px) {
+ .o-grid__column-large-2-3 {
+ width: calc(66.66667% - 16px); } }
+
+@media screen and (min-width: 767px) {
+ .o-grid__column-large-3-3 {
+ width: calc(100% - 16px); } }
+
+@media screen and (min-width: 767px) {
+ .o-grid__column-large-1-4 {
+ width: calc(25% - 16px); } }
+
+@media screen and (min-width: 767px) {
+ .o-grid__column-large-2-4 {
+ width: calc(50% - 16px); } }
+
+@media screen and (min-width: 767px) {
+ .o-grid__column-large-3-4 {
+ width: calc(75% - 16px); } }
+
+@media screen and (min-width: 767px) {
+ .o-grid__column-large-4-4 {
+ width: calc(100% - 16px); } }
+
+@media screen and (min-width: 767px) {
+ .o-grid__column-large-1-5 {
+ width: calc(20% - 16px); } }
+
+@media screen and (min-width: 767px) {
+ .o-grid__column-large-2-5 {
+ width: calc(40% - 16px); } }
+
+@media screen and (min-width: 767px) {
+ .o-grid__column-large-3-5 {
+ width: calc(60% - 16px); } }
+
+@media screen and (min-width: 767px) {
+ .o-grid__column-large-4-5 {
+ width: calc(80% - 16px); } }
+
+@media screen and (min-width: 767px) {
+ .o-grid__column-large-5-5 {
+ width: calc(100% - 16px); } }
+
+@media screen and (min-width: 767px) {
+ .o-grid__column-large-1-6 {
+ width: calc(16.66667% - 16px); } }
+
+@media screen and (min-width: 767px) {
+ .o-grid__column-large-2-6 {
+ width: calc(33.33333% - 16px); } }
+
+@media screen and (min-width: 767px) {
+ .o-grid__column-large-3-6 {
+ width: calc(50% - 16px); } }
+
+@media screen and (min-width: 767px) {
+ .o-grid__column-large-4-6 {
+ width: calc(66.66667% - 16px); } }
+
+@media screen and (min-width: 767px) {
+ .o-grid__column-large-5-6 {
+ width: calc(83.33333% - 16px); } }
+
+@media screen and (min-width: 767px) {
+ .o-grid__column-large-6-6 {
+ width: calc(100% - 16px); } }
+
+@media screen and (min-width: 767px) {
+ .o-grid__column-large-1-7 {
+ width: calc(14.28571% - 16px); } }
+
+@media screen and (min-width: 767px) {
+ .o-grid__column-large-2-7 {
+ width: calc(28.57143% - 16px); } }
+
+@media screen and (min-width: 767px) {
+ .o-grid__column-large-3-7 {
+ width: calc(42.85714% - 16px); } }
+
+@media screen and (min-width: 767px) {
+ .o-grid__column-large-4-7 {
+ width: calc(57.14286% - 16px); } }
+
+@media screen and (min-width: 767px) {
+ .o-grid__column-large-5-7 {
+ width: calc(71.42857% - 16px); } }
+
+@media screen and (min-width: 767px) {
+ .o-grid__column-large-6-7 {
+ width: calc(85.71429% - 16px); } }
+
+@media screen and (min-width: 767px) {
+ .o-grid__column-large-7-7 {
+ width: calc(100% - 16px); } }
+
+@media screen and (min-width: 767px) {
+ .o-grid__column-large-1-8 {
+ width: calc(12.5% - 16px); } }
+
+@media screen and (min-width: 767px) {
+ .o-grid__column-large-2-8 {
+ width: calc(25% - 16px); } }
+
+@media screen and (min-width: 767px) {
+ .o-grid__column-large-3-8 {
+ width: calc(37.5% - 16px); } }
+
+@media screen and (min-width: 767px) {
+ .o-grid__column-large-4-8 {
+ width: calc(50% - 16px); } }
+
+@media screen and (min-width: 767px) {
+ .o-grid__column-large-5-8 {
+ width: calc(62.5% - 16px); } }
+
+@media screen and (min-width: 767px) {
+ .o-grid__column-large-6-8 {
+ width: calc(75% - 16px); } }
+
+@media screen and (min-width: 767px) {
+ .o-grid__column-large-7-8 {
+ width: calc(87.5% - 16px); } }
+
+@media screen and (min-width: 767px) {
+ .o-grid__column-large-8-8 {
+ width: calc(100% - 16px); } }
+
+@media screen and (min-width: 767px) {
+ .o-grid__column-large-1-9 {
+ width: calc(11.11111% - 16px); } }
+
+@media screen and (min-width: 767px) {
+ .o-grid__column-large-2-9 {
+ width: calc(22.22222% - 16px); } }
+
+@media screen and (min-width: 767px) {
+ .o-grid__column-large-3-9 {
+ width: calc(33.33333% - 16px); } }
+
+@media screen and (min-width: 767px) {
+ .o-grid__column-large-4-9 {
+ width: calc(44.44444% - 16px); } }
+
+@media screen and (min-width: 767px) {
+ .o-grid__column-large-5-9 {
+ width: calc(55.55556% - 16px); } }
+
+@media screen and (min-width: 767px) {
+ .o-grid__column-large-6-9 {
+ width: calc(66.66667% - 16px); } }
+
+@media screen and (min-width: 767px) {
+ .o-grid__column-large-7-9 {
+ width: calc(77.77778% - 16px); } }
+
+@media screen and (min-width: 767px) {
+ .o-grid__column-large-8-9 {
+ width: calc(88.88889% - 16px); } }
+
+@media screen and (min-width: 767px) {
+ .o-grid__column-large-9-9 {
+ width: calc(100% - 16px); } }
+
+@media screen and (min-width: 767px) {
+ .o-grid__column-large-1-10 {
+ width: calc(10% - 16px); } }
+
+@media screen and (min-width: 767px) {
+ .o-grid__column-large-2-10 {
+ width: calc(20% - 16px); } }
+
+@media screen and (min-width: 767px) {
+ .o-grid__column-large-3-10 {
+ width: calc(30% - 16px); } }
+
+@media screen and (min-width: 767px) {
+ .o-grid__column-large-4-10 {
+ width: calc(40% - 16px); } }
+
+@media screen and (min-width: 767px) {
+ .o-grid__column-large-5-10 {
+ width: calc(50% - 16px); } }
+
+@media screen and (min-width: 767px) {
+ .o-grid__column-large-6-10 {
+ width: calc(60% - 16px); } }
+
+@media screen and (min-width: 767px) {
+ .o-grid__column-large-7-10 {
+ width: calc(70% - 16px); } }
+
+@media screen and (min-width: 767px) {
+ .o-grid__column-large-8-10 {
+ width: calc(80% - 16px); } }
+
+@media screen and (min-width: 767px) {
+ .o-grid__column-large-9-10 {
+ width: calc(90% - 16px); } }
+
+@media screen and (min-width: 767px) {
+ .o-grid__column-large-10-10 {
+ width: calc(100% - 16px); } }
+
+@media screen and (min-width: 767px) {
+ .o-grid__column-large-1-11 {
+ width: calc(9.09091% - 16px); } }
+
+@media screen and (min-width: 767px) {
+ .o-grid__column-large-2-11 {
+ width: calc(18.18182% - 16px); } }
+
+@media screen and (min-width: 767px) {
+ .o-grid__column-large-3-11 {
+ width: calc(27.27273% - 16px); } }
+
+@media screen and (min-width: 767px) {
+ .o-grid__column-large-4-11 {
+ width: calc(36.36364% - 16px); } }
+
+@media screen and (min-width: 767px) {
+ .o-grid__column-large-5-11 {
+ width: calc(45.45455% - 16px); } }
+
+@media screen and (min-width: 767px) {
+ .o-grid__column-large-6-11 {
+ width: calc(54.54545% - 16px); } }
+
+@media screen and (min-width: 767px) {
+ .o-grid__column-large-7-11 {
+ width: calc(63.63636% - 16px); } }
+
+@media screen and (min-width: 767px) {
+ .o-grid__column-large-8-11 {
+ width: calc(72.72727% - 16px); } }
+
+@media screen and (min-width: 767px) {
+ .o-grid__column-large-9-11 {
+ width: calc(81.81818% - 16px); } }
+
+@media screen and (min-width: 767px) {
+ .o-grid__column-large-10-11 {
+ width: calc(90.90909% - 16px); } }
+
+@media screen and (min-width: 767px) {
+ .o-grid__column-large-11-11 {
+ width: calc(100% - 16px); } }
+
+@media screen and (min-width: 767px) {
+ .o-grid__column-large-1-12 {
+ width: calc(8.33333% - 16px); } }
+
+@media screen and (min-width: 767px) {
+ .o-grid__column-large-2-12 {
+ width: calc(16.66667% - 16px); } }
+
+@media screen and (min-width: 767px) {
+ .o-grid__column-large-3-12 {
+ width: calc(25% - 16px); } }
+
+@media screen and (min-width: 767px) {
+ .o-grid__column-large-4-12 {
+ width: calc(33.33333% - 16px); } }
+
+@media screen and (min-width: 767px) {
+ .o-grid__column-large-5-12 {
+ width: calc(41.66667% - 16px); } }
+
+@media screen and (min-width: 767px) {
+ .o-grid__column-large-6-12 {
+ width: calc(50% - 16px); } }
+
+@media screen and (min-width: 767px) {
+ .o-grid__column-large-7-12 {
+ width: calc(58.33333% - 16px); } }
+
+@media screen and (min-width: 767px) {
+ .o-grid__column-large-8-12 {
+ width: calc(66.66667% - 16px); } }
+
+@media screen and (min-width: 767px) {
+ .o-grid__column-large-9-12 {
+ width: calc(75% - 16px); } }
+
+@media screen and (min-width: 767px) {
+ .o-grid__column-large-10-12 {
+ width: calc(83.33333% - 16px); } }
+
+@media screen and (min-width: 767px) {
+ .o-grid__column-large-11-12 {
+ width: calc(91.66667% - 16px); } }
+
+@media screen and (min-width: 767px) {
+ .o-grid__column-large-12-12 {
+ width: calc(100% - 16px); } }
+
+@media screen and (min-width: 1023px) {
+ .o-grid__column-xlarge-1-1 {
+ width: calc(100% - 16px); } }
+
+@media screen and (min-width: 1023px) {
+ .o-grid__column-xlarge-1-2 {
+ width: calc(50% - 16px); } }
+
+@media screen and (min-width: 1023px) {
+ .o-grid__column-xlarge-2-2 {
+ width: calc(100% - 16px); } }
+
+@media screen and (min-width: 1023px) {
+ .o-grid__column-xlarge-1-3 {
+ width: calc(33.33333% - 16px); } }
+
+@media screen and (min-width: 1023px) {
+ .o-grid__column-xlarge-2-3 {
+ width: calc(66.66667% - 16px); } }
+
+@media screen and (min-width: 1023px) {
+ .o-grid__column-xlarge-3-3 {
+ width: calc(100% - 16px); } }
+
+@media screen and (min-width: 1023px) {
+ .o-grid__column-xlarge-1-4 {
+ width: calc(25% - 16px); } }
+
+@media screen and (min-width: 1023px) {
+ .o-grid__column-xlarge-2-4 {
+ width: calc(50% - 16px); } }
+
+@media screen and (min-width: 1023px) {
+ .o-grid__column-xlarge-3-4 {
+ width: calc(75% - 16px); } }
+
+@media screen and (min-width: 1023px) {
+ .o-grid__column-xlarge-4-4 {
+ width: calc(100% - 16px); } }
+
+@media screen and (min-width: 1023px) {
+ .o-grid__column-xlarge-1-5 {
+ width: calc(20% - 16px); } }
+
+@media screen and (min-width: 1023px) {
+ .o-grid__column-xlarge-2-5 {
+ width: calc(40% - 16px); } }
+
+@media screen and (min-width: 1023px) {
+ .o-grid__column-xlarge-3-5 {
+ width: calc(60% - 16px); } }
+
+@media screen and (min-width: 1023px) {
+ .o-grid__column-xlarge-4-5 {
+ width: calc(80% - 16px); } }
+
+@media screen and (min-width: 1023px) {
+ .o-grid__column-xlarge-5-5 {
+ width: calc(100% - 16px); } }
+
+@media screen and (min-width: 1023px) {
+ .o-grid__column-xlarge-1-6 {
+ width: calc(16.66667% - 16px); } }
+
+@media screen and (min-width: 1023px) {
+ .o-grid__column-xlarge-2-6 {
+ width: calc(33.33333% - 16px); } }
+
+@media screen and (min-width: 1023px) {
+ .o-grid__column-xlarge-3-6 {
+ width: calc(50% - 16px); } }
+
+@media screen and (min-width: 1023px) {
+ .o-grid__column-xlarge-4-6 {
+ width: calc(66.66667% - 16px); } }
+
+@media screen and (min-width: 1023px) {
+ .o-grid__column-xlarge-5-6 {
+ width: calc(83.33333% - 16px); } }
+
+@media screen and (min-width: 1023px) {
+ .o-grid__column-xlarge-6-6 {
+ width: calc(100% - 16px); } }
+
+@media screen and (min-width: 1023px) {
+ .o-grid__column-xlarge-1-7 {
+ width: calc(14.28571% - 16px); } }
+
+@media screen and (min-width: 1023px) {
+ .o-grid__column-xlarge-2-7 {
+ width: calc(28.57143% - 16px); } }
+
+@media screen and (min-width: 1023px) {
+ .o-grid__column-xlarge-3-7 {
+ width: calc(42.85714% - 16px); } }
+
+@media screen and (min-width: 1023px) {
+ .o-grid__column-xlarge-4-7 {
+ width: calc(57.14286% - 16px); } }
+
+@media screen and (min-width: 1023px) {
+ .o-grid__column-xlarge-5-7 {
+ width: calc(71.42857% - 16px); } }
+
+@media screen and (min-width: 1023px) {
+ .o-grid__column-xlarge-6-7 {
+ width: calc(85.71429% - 16px); } }
+
+@media screen and (min-width: 1023px) {
+ .o-grid__column-xlarge-7-7 {
+ width: calc(100% - 16px); } }
+
+@media screen and (min-width: 1023px) {
+ .o-grid__column-xlarge-1-8 {
+ width: calc(12.5% - 16px); } }
+
+@media screen and (min-width: 1023px) {
+ .o-grid__column-xlarge-2-8 {
+ width: calc(25% - 16px); } }
+
+@media screen and (min-width: 1023px) {
+ .o-grid__column-xlarge-3-8 {
+ width: calc(37.5% - 16px); } }
+
+@media screen and (min-width: 1023px) {
+ .o-grid__column-xlarge-4-8 {
+ width: calc(50% - 16px); } }
+
+@media screen and (min-width: 1023px) {
+ .o-grid__column-xlarge-5-8 {
+ width: calc(62.5% - 16px); } }
+
+@media screen and (min-width: 1023px) {
+ .o-grid__column-xlarge-6-8 {
+ width: calc(75% - 16px); } }
+
+@media screen and (min-width: 1023px) {
+ .o-grid__column-xlarge-7-8 {
+ width: calc(87.5% - 16px); } }
+
+@media screen and (min-width: 1023px) {
+ .o-grid__column-xlarge-8-8 {
+ width: calc(100% - 16px); } }
+
+@media screen and (min-width: 1023px) {
+ .o-grid__column-xlarge-1-9 {
+ width: calc(11.11111% - 16px); } }
+
+@media screen and (min-width: 1023px) {
+ .o-grid__column-xlarge-2-9 {
+ width: calc(22.22222% - 16px); } }
+
+@media screen and (min-width: 1023px) {
+ .o-grid__column-xlarge-3-9 {
+ width: calc(33.33333% - 16px); } }
+
+@media screen and (min-width: 1023px) {
+ .o-grid__column-xlarge-4-9 {
+ width: calc(44.44444% - 16px); } }
+
+@media screen and (min-width: 1023px) {
+ .o-grid__column-xlarge-5-9 {
+ width: calc(55.55556% - 16px); } }
+
+@media screen and (min-width: 1023px) {
+ .o-grid__column-xlarge-6-9 {
+ width: calc(66.66667% - 16px); } }
+
+@media screen and (min-width: 1023px) {
+ .o-grid__column-xlarge-7-9 {
+ width: calc(77.77778% - 16px); } }
+
+@media screen and (min-width: 1023px) {
+ .o-grid__column-xlarge-8-9 {
+ width: calc(88.88889% - 16px); } }
+
+@media screen and (min-width: 1023px) {
+ .o-grid__column-xlarge-9-9 {
+ width: calc(100% - 16px); } }
+
+@media screen and (min-width: 1023px) {
+ .o-grid__column-xlarge-1-10 {
+ width: calc(10% - 16px); } }
+
+@media screen and (min-width: 1023px) {
+ .o-grid__column-xlarge-2-10 {
+ width: calc(20% - 16px); } }
+
+@media screen and (min-width: 1023px) {
+ .o-grid__column-xlarge-3-10 {
+ width: calc(30% - 16px); } }
+
+@media screen and (min-width: 1023px) {
+ .o-grid__column-xlarge-4-10 {
+ width: calc(40% - 16px); } }
+
+@media screen and (min-width: 1023px) {
+ .o-grid__column-xlarge-5-10 {
+ width: calc(50% - 16px); } }
+
+@media screen and (min-width: 1023px) {
+ .o-grid__column-xlarge-6-10 {
+ width: calc(60% - 16px); } }
+
+@media screen and (min-width: 1023px) {
+ .o-grid__column-xlarge-7-10 {
+ width: calc(70% - 16px); } }
+
+@media screen and (min-width: 1023px) {
+ .o-grid__column-xlarge-8-10 {
+ width: calc(80% - 16px); } }
+
+@media screen and (min-width: 1023px) {
+ .o-grid__column-xlarge-9-10 {
+ width: calc(90% - 16px); } }
+
+@media screen and (min-width: 1023px) {
+ .o-grid__column-xlarge-10-10 {
+ width: calc(100% - 16px); } }
+
+@media screen and (min-width: 1023px) {
+ .o-grid__column-xlarge-1-11 {
+ width: calc(9.09091% - 16px); } }
+
+@media screen and (min-width: 1023px) {
+ .o-grid__column-xlarge-2-11 {
+ width: calc(18.18182% - 16px); } }
+
+@media screen and (min-width: 1023px) {
+ .o-grid__column-xlarge-3-11 {
+ width: calc(27.27273% - 16px); } }
+
+@media screen and (min-width: 1023px) {
+ .o-grid__column-xlarge-4-11 {
+ width: calc(36.36364% - 16px); } }
+
+@media screen and (min-width: 1023px) {
+ .o-grid__column-xlarge-5-11 {
+ width: calc(45.45455% - 16px); } }
+
+@media screen and (min-width: 1023px) {
+ .o-grid__column-xlarge-6-11 {
+ width: calc(54.54545% - 16px); } }
+
+@media screen and (min-width: 1023px) {
+ .o-grid__column-xlarge-7-11 {
+ width: calc(63.63636% - 16px); } }
+
+@media screen and (min-width: 1023px) {
+ .o-grid__column-xlarge-8-11 {
+ width: calc(72.72727% - 16px); } }
+
+@media screen and (min-width: 1023px) {
+ .o-grid__column-xlarge-9-11 {
+ width: calc(81.81818% - 16px); } }
+
+@media screen and (min-width: 1023px) {
+ .o-grid__column-xlarge-10-11 {
+ width: calc(90.90909% - 16px); } }
+
+@media screen and (min-width: 1023px) {
+ .o-grid__column-xlarge-11-11 {
+ width: calc(100% - 16px); } }
+
+@media screen and (min-width: 1023px) {
+ .o-grid__column-xlarge-1-12 {
+ width: calc(8.33333% - 16px); } }
+
+@media screen and (min-width: 1023px) {
+ .o-grid__column-xlarge-2-12 {
+ width: calc(16.66667% - 16px); } }
+
+@media screen and (min-width: 1023px) {
+ .o-grid__column-xlarge-3-12 {
+ width: calc(25% - 16px); } }
+
+@media screen and (min-width: 1023px) {
+ .o-grid__column-xlarge-4-12 {
+ width: calc(33.33333% - 16px); } }
+
+@media screen and (min-width: 1023px) {
+ .o-grid__column-xlarge-5-12 {
+ width: calc(41.66667% - 16px); } }
+
+@media screen and (min-width: 1023px) {
+ .o-grid__column-xlarge-6-12 {
+ width: calc(50% - 16px); } }
+
+@media screen and (min-width: 1023px) {
+ .o-grid__column-xlarge-7-12 {
+ width: calc(58.33333% - 16px); } }
+
+@media screen and (min-width: 1023px) {
+ .o-grid__column-xlarge-8-12 {
+ width: calc(66.66667% - 16px); } }
+
+@media screen and (min-width: 1023px) {
+ .o-grid__column-xlarge-9-12 {
+ width: calc(75% - 16px); } }
+
+@media screen and (min-width: 1023px) {
+ .o-grid__column-xlarge-10-12 {
+ width: calc(83.33333% - 16px); } }
+
+@media screen and (min-width: 1023px) {
+ .o-grid__column-xlarge-11-12 {
+ width: calc(91.66667% - 16px); } }
+
+@media screen and (min-width: 1023px) {
+ .o-grid__column-xlarge-12-12 {
+ width: calc(100% - 16px); } }
+
+@media screen and (min-width: 767px) {
+ .o-grid__column-large-offset {
+ text-align: right; } }
+
+.o-center {
+ -webkit-box-pack: center;
+ -ms-flex-pack: center;
+ justify-content: center;
+ margin-left: auto;
+ margin-right: auto;
+ text-align: center; }
+
+.o-iframe {
+ padding-bottom: 56.25%;
+ position: relative; }
+ .o-iframe iframe {
+ left: 0;
+ height: 100%;
+ position: absolute;
+ top: 0;
+ width: 100%; }
+
+.o-list {
+ margin: 16px 0 0;
+ padding: 0;
+ list-style: none; }
+ .o-list li {
+ margin-top: 8px; }
+ .o-list li:first-child {
+ margin-top: 0; }
+
+.o-list-row {
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-orient: horizontal;
+ -webkit-box-direction: normal;
+ -ms-flex-direction: row;
+ flex-direction: row;
+ list-style: none;
+ margin: 32px;
+ margin-left: -16px;
+ padding: 0; }
+ .o-list-row li {
+ margin-left: 16px; }
+
+.o-actionbar {
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-orient: vertical;
+ -webkit-box-direction: normal;
+ -ms-flex-direction: column;
+ flex-direction: column;
+ margin-left: -16px;
+ margin-top: 16px; }
+ @media screen and (min-width: 600px) {
+ .o-actionbar {
+ -webkit-box-orient: horizontal;
+ -webkit-box-direction: normal;
+ -ms-flex-direction: row;
+ flex-direction: row; } }
+ .o-actionbar__item {
+ margin-top: 16px;
+ padding-left: 16px; }
+ @media screen and (min-width: 600px) {
+ .o-actionbar__item {
+ margin-top: 0; } }
+ .o-actionbar__item:first-child {
+ margin-top: 0; }
+
+@media screen and (min-width: 767px) {
+ .o-navigation {
+ margin-left: -32px; } }
+
+.o-navigation__item {
+ margin-top: 32px; }
+ @media screen and (min-width: 767px) {
+ .o-navigation__item {
+ margin-left: 32px;
+ margin-top: 0; } }
+ .o-navigation__item.is-active {
+ position: relative; }
+ .o-navigation__item.is-active:before {
+ content: '';
+ display: block;
+ bottom: -3px;
+ height: 3px;
+ left: 0;
+ position: absolute;
+ width: 100%;
+ background: #F1645D; }
+
+.o-navigation__close {
+ position: absolute;
+ right: 16px;
+ top: 16px; }
+ @media screen and (min-width: 767px) {
+ .o-navigation__close {
+ display: none; } }
+ .o-navigation__close .icon {
+ height: 24px;
+ width: 24px; }
+
+.o-navigation__list {
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-orient: vertical;
+ -webkit-box-direction: normal;
+ -ms-flex-direction: column;
+ flex-direction: column;
+ left: 0;
+ min-height: 100%;
+ padding: 32px;
+ position: fixed;
+ top: 0;
+ width: 320px;
+ z-index: 10; }
+ @media screen and (min-width: 767px) {
+ .o-navigation__list {
+ -webkit-box-align: center;
+ -ms-flex-align: center;
+ align-items: center;
+ -webkit-box-orient: horizontal;
+ -webkit-box-direction: normal;
+ -ms-flex-direction: row;
+ flex-direction: row;
+ margin-left: -16px;
+ padding: 0;
+ position: static;
+ width: auto; } }
+
+.c-navigation {
+ text-transform: uppercase; }
+ .c-navigation a {
+ color: inherit;
+ font-weight: bold; }
+ .c-navigation a:hover, .c-navigation a.is-active {
+ color: #F1645D; }
+ .c-navigation__trigger {
+ display: block;
+ line-height: 0; }
+ @media screen and (min-width: 767px) {
+ .c-navigation__trigger {
+ display: none; } }
+ .c-navigation__trigger .icon {
+ height: 32px;
+ width: 32px; }
+ .c-navigation__list {
+ background: #041A39;
+ -webkit-box-shadow: 0 0 20px rgba(0, 0, 0, 0.2);
+ box-shadow: 0 0 20px rgba(0, 0, 0, 0.2);
+ font-size: 1.6rem;
+ -webkit-transform: translateX(-100%);
+ transform: translateX(-100%);
+ -webkit-transition: all .3s;
+ transition: all .3s; }
+ @media screen and (min-width: 767px) {
+ .c-navigation__list {
+ background: transparent;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+ -webkit-transform: translateX(0);
+ transform: translateX(0); } }
+ .c-navigation__list .a-logo {
+ margin-bottom: 24px; }
+ @media screen and (min-width: 767px) {
+ .c-navigation__list .a-logo {
+ display: none; } }
+ .c-navigation__list.is-active {
+ -webkit-transform: translateX(0);
+ transform: translateX(0); }
+
+.o-heading {
+ margin: 0 auto;
+ max-width: 720px;
+ text-align: center; }
+
+.c-side-navigation {
+ margin: 0;
+ padding: 0;
+ list-style: none;
+ display: none;
+ left: 20px;
+ overflow: auto;
+ position: fixed;
+ top: 20px;
+ border-radius: 8px;
+ -webkit-box-shadow: 0 0 20px rgba(0, 0, 0, 0.2);
+ box-shadow: 0 0 20px rgba(0, 0, 0, 0.2);
+ background: #fff;
+ padding: 24px;
+ z-index: 100;
+ height: calc(100% - 40px);
+ width: calc(100% - 40px); }
+ @media screen and (min-width: 767px) {
+ .c-side-navigation {
+ display: block;
+ height: auto;
+ padding: 40px 0;
+ position: -webkit-sticky;
+ position: sticky;
+ width: 100%;
+ z-index: 10;
+ background: transparent;
+ -webkit-box-shadow: none;
+ box-shadow: none; } }
+ .c-side-navigation.is-active {
+ display: block; }
+ .c-side-navigation__header {
+ margin-bottom: -40px;
+ text-align: right; }
+ @media screen and (min-width: 767px) {
+ .c-side-navigation__header {
+ display: none; } }
+ @media screen and (min-width: 767px) {
+ .c-side-navigation__trigger {
+ display: none !important; } }
+ .c-side-navigation.is-active {
+ display: block; }
+ .c-side-navigation > .c-side-navigation__item {
+ margin-top: 32px; }
+ .c-side-navigation > .c-side-navigation__item > .c-side-navigation__item__anchor {
+ font-family: "Roboto", Helvetica, sans-serif;
+ font-size: 2.4rem;
+ font-weight: bold; }
+ .c-side-navigation > .c-side-navigation__item > .c-side-navigation__item__anchor + .c-side-navigation__item__tree {
+ margin-top: 8px; }
+ .c-side-navigation > .c-side-navigation__item > .c-side-navigation__item__tree > .c-side-navigation__item {
+ margin-top: 0;
+ padding-bottom: 8px;
+ padding-top: 8px;
+ border-top: 1px solid #E6E8EB; }
+ @media screen and (min-width: 767px) {
+ .c-side-navigation > .c-side-navigation__item > .c-side-navigation__item__tree > .c-side-navigation__item {
+ margin-top: 8px;
+ padding-bottom: 0;
+ padding-top: 0;
+ border-top: 0; } }
+ .c-side-navigation > .c-side-navigation__item > .c-side-navigation__item__tree > .c-side-navigation__item > .c-side-navigation__item__anchor + .c-side-navigation__item__tree {
+ padding-bottom: 8px;
+ padding-top: 8px; }
+ .c-side-navigation > .c-side-navigation__item > .c-side-navigation__item__tree > .c-side-navigation__item > .c-side-navigation__item__tree > .c-side-navigation__item {
+ margin-top: 0;
+ padding-bottom: 8px;
+ padding-top: 8px;
+ border-top: 1px solid #E6E8EB; }
+ @media screen and (min-width: 767px) {
+ .c-side-navigation > .c-side-navigation__item > .c-side-navigation__item__tree > .c-side-navigation__item > .c-side-navigation__item__tree > .c-side-navigation__item {
+ margin-top: 8px;
+ padding-bottom: 0;
+ padding-top: 0;
+ border-top: 0; } }
+ .c-side-navigation__item__anchor {
+ color: #333; }
+ .c-side-navigation__item__anchor:hover {
+ color: #F1645D; }
+ .c-side-navigation__item__anchor.is-active {
+ color: #F1645D;
+ font-weight: bold; }
+ .c-side-navigation__item__tree {
+ margin: 0;
+ padding: 0;
+ list-style: none;
+ margin-left: 16px; }
+ .c-side-navigation__item.is-active > .c-side-navigation__item__anchor {
+ color: #F1645D;
+ font-weight: bold; }
+
+.o-media-short {
+ -webkit-box-align: center;
+ -ms-flex-align: center;
+ align-items: center;
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-orient: horizontal;
+ -webkit-box-direction: normal;
+ -ms-flex-direction: row;
+ flex-direction: row; }
+ .o-media-short__icon {
+ margin-right: 8px; }
+
+.o-distance-xs {
+ margin-top: 4px; }
+
+.o-distance-s {
+ margin-top: 8px; }
+
+.o-distance-m {
+ margin-top: 16px; }
+
+.o-distance-l {
+ margin-top: 24px; }
+
+.o-distance-xl {
+ margin-top: 48px; }
+
+.o-content h2[id] {
+ margin-bottom: 16px;
+ margin-top: 48px;
+ padding-bottom: 4px;
+ border-bottom: 1px solid #E6E8EB; }
+
+.o-content h3,
+.o-content h4 {
+ margin-top: 32px; }
+
+.o-content .c-notification {
+ margin-top: 24px; }
+
+.icon {
+ height: 48px;
+ width: 48px;
+ fill: #F1645D; }
+ .icon--small {
+ height: 32px;
+ width: 32px; }
+ .icon--smaller {
+ height: 16px;
+ width: 16px; }
+ .icon--large {
+ height: 64px;
+ width: 64px; }
+
+.o-banner {
+ -webkit-box-align: center;
+ -ms-flex-align: center;
+ align-items: center;
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-orient: vertical;
+ -webkit-box-direction: normal;
+ -ms-flex-direction: column;
+ flex-direction: column; }
+ @media screen and (min-width: 600px) {
+ .o-banner {
+ -webkit-box-orient: horizontal;
+ -webkit-box-direction: normal;
+ -ms-flex-direction: row;
+ flex-direction: row; } }
+ .o-banner__item {
+ margin-top: 24px; }
+ @media screen and (min-width: 600px) {
+ .o-banner__item {
+ margin-left: 24px;
+ margin-top: 0; } }
+
+.c-divider {
+ display: block;
+ height: 1px;
+ width: 100%; }
+
+.c-box {
+ padding: 12px;
+ border: 2px solid;
+ border-radius: 8px; }
+
+.u-background-color-light {
+ background-color: #364861; }
+
+.u-border-color-light {
+ border-color: #364861; }
+
+.u-inline-block {
+ display: inline-block; }
+
+.a-button {
+ cursor: pointer;
+ display: inline-block;
+ padding: 16px 24px;
+ vertical-align: top;
+ -webkit-appearance: none;
+ border: 2px solid transparent;
+ border-radius: 8px;
+ background: #F1645D;
+ -webkit-box-shadow: 0;
+ box-shadow: 0;
+ color: #fff;
+ font-size: 17px;
+ font-weight: bold;
+ line-height: 1;
+ text-align: center; }
+ .a-button:hover {
+ border-color: #F1645D;
+ background: transparent;
+ color: #F1645D; }
+ .a-button--ghost {
+ background: transparent;
+ border-color: #fff;
+ color: #fff; }
+ .a-button--negative {
+ background: #fff;
+ color: #F1645D; }
+ .a-button--negative:hover {
+ border-color: #fff;
+ background: transparent;
+ color: #fff; }
+ .a-button--rounded {
+ border-radius: 250px; }
+
+.a-logo {
+ display: inline-block;
+ height: 27px;
+ vertical-align: top;
+ width: 112px;
+ background: url(../images/logo.svg);
+ background-repeat: no-repeat;
+ background-size: 100%;
+ color: transparent;
+ font-size: 0; }
+ @media screen and (min-width: 600px) {
+ .a-logo {
+ height: 52px;
+ width: 225px; } }
+
+/* Magnific Popup CSS */
+.mfp-bg {
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ z-index: 1042;
+ overflow: hidden;
+ position: fixed;
+ background: #0b0b0b;
+ opacity: 0.8; }
+
+.mfp-wrap {
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ z-index: 1043;
+ position: fixed;
+ outline: none !important;
+ -webkit-backface-visibility: hidden; }
+
+.mfp-container {
+ text-align: center;
+ position: absolute;
+ width: 100%;
+ height: 100%;
+ left: 0;
+ top: 0;
+ padding: 0 8px;
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box; }
+
+.mfp-container:before {
+ content: '';
+ display: inline-block;
+ height: 100%;
+ vertical-align: middle; }
+
+.mfp-align-top .mfp-container:before {
+ display: none; }
+
+.mfp-content {
+ position: relative;
+ display: inline-block;
+ vertical-align: middle;
+ margin: 0 auto;
+ text-align: left;
+ z-index: 1045; }
+
+.mfp-inline-holder .mfp-content,
+.mfp-ajax-holder .mfp-content {
+ width: 100%;
+ cursor: auto; }
+
+.mfp-ajax-cur {
+ cursor: progress; }
+
+.mfp-zoom-out-cur, .mfp-zoom-out-cur .mfp-image-holder .mfp-close {
+ cursor: -webkit-zoom-out;
+ cursor: zoom-out; }
+
+.mfp-zoom {
+ cursor: pointer;
+ cursor: -webkit-zoom-in;
+ cursor: zoom-in; }
+
+.mfp-auto-cursor .mfp-content {
+ cursor: auto; }
+
+.mfp-close,
+.mfp-arrow,
+.mfp-preloader,
+.mfp-counter {
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none; }
+
+.mfp-loading.mfp-figure {
+ display: none; }
+
+.mfp-hide {
+ display: none !important; }
+
+.mfp-preloader {
+ color: #CCC;
+ position: absolute;
+ top: 50%;
+ width: auto;
+ text-align: center;
+ margin-top: -0.8em;
+ left: 8px;
+ right: 8px;
+ z-index: 1044; }
+
+.mfp-preloader a {
+ color: #CCC; }
+
+.mfp-preloader a:hover {
+ color: #FFF; }
+
+.mfp-s-ready .mfp-preloader {
+ display: none; }
+
+.mfp-s-error .mfp-content {
+ display: none; }
+
+button.mfp-close,
+button.mfp-arrow {
+ overflow: visible;
+ cursor: pointer;
+ background: transparent;
+ border: 0;
+ -webkit-appearance: none;
+ display: block;
+ outline: none;
+ padding: 0;
+ z-index: 1046;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+ -ms-touch-action: manipulation;
+ touch-action: manipulation; }
+
+button::-moz-focus-inner {
+ padding: 0;
+ border: 0; }
+
+.mfp-close {
+ width: 44px;
+ height: 44px;
+ line-height: 44px;
+ position: absolute;
+ right: 0;
+ top: 0;
+ text-decoration: none;
+ text-align: center;
+ opacity: 0.65;
+ padding: 0 0 18px 10px;
+ color: #FFF;
+ font-style: normal;
+ font-size: 28px;
+ font-family: Arial, Baskerville, monospace; }
+
+.mfp-close:hover,
+.mfp-close:focus {
+ opacity: 1; }
+
+.mfp-close:active {
+ top: 1px; }
+
+.mfp-close-btn-in .mfp-close {
+ color: #333; }
+
+.mfp-image-holder .mfp-close,
+.mfp-iframe-holder .mfp-close {
+ color: #FFF;
+ right: -6px;
+ text-align: right;
+ padding-right: 6px;
+ width: 100%; }
+
+.mfp-counter {
+ position: absolute;
+ top: 0;
+ right: 0;
+ color: #CCC;
+ font-size: 12px;
+ line-height: 18px;
+ white-space: nowrap; }
+
+.mfp-arrow {
+ position: absolute;
+ opacity: 0.65;
+ margin: 0;
+ top: 50%;
+ margin-top: -55px;
+ padding: 0;
+ width: 90px;
+ height: 110px;
+ -webkit-tap-highlight-color: transparent; }
+
+.mfp-arrow:active {
+ margin-top: -54px; }
+
+.mfp-arrow:hover,
+.mfp-arrow:focus {
+ opacity: 1; }
+
+.mfp-arrow:before,
+.mfp-arrow:after {
+ content: '';
+ display: block;
+ width: 0;
+ height: 0;
+ position: absolute;
+ left: 0;
+ top: 0;
+ margin-top: 35px;
+ margin-left: 35px;
+ border: medium inset transparent; }
+
+.mfp-arrow:after {
+ border-top-width: 13px;
+ border-bottom-width: 13px;
+ top: 8px; }
+
+.mfp-arrow:before {
+ border-top-width: 21px;
+ border-bottom-width: 21px;
+ opacity: 0.7; }
+
+.mfp-arrow-left {
+ left: 0; }
+
+.mfp-arrow-left:after {
+ border-right: 17px solid #FFF;
+ margin-left: 31px; }
+
+.mfp-arrow-left:before {
+ margin-left: 25px;
+ border-right: 27px solid #3F3F3F; }
+
+.mfp-arrow-right {
+ right: 0; }
+
+.mfp-arrow-right:after {
+ border-left: 17px solid #FFF;
+ margin-left: 39px; }
+
+.mfp-arrow-right:before {
+ border-left: 27px solid #3F3F3F; }
+
+.mfp-iframe-holder {
+ padding-top: 40px;
+ padding-bottom: 40px; }
+
+.mfp-iframe-holder .mfp-content {
+ line-height: 0;
+ width: 100%;
+ max-width: 900px; }
+
+.mfp-iframe-holder .mfp-close {
+ top: -40px; }
+
+.mfp-iframe-scaler {
+ width: 100%;
+ height: 0;
+ overflow: hidden;
+ padding-top: 56.25%; }
+
+.mfp-iframe-scaler iframe {
+ position: absolute;
+ display: block;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ -webkit-box-shadow: 0 0 8px rgba(0, 0, 0, 0.6);
+ box-shadow: 0 0 8px rgba(0, 0, 0, 0.6);
+ background: #000; }
+
+/* Main image in popup */
+img.mfp-img {
+ width: auto;
+ max-width: 100%;
+ height: auto;
+ display: block;
+ line-height: 0;
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ padding: 40px 0 40px;
+ margin: 0 auto; }
+
+/* The shadow behind the image */
+.mfp-figure {
+ line-height: 0; }
+
+.mfp-figure:after {
+ content: '';
+ position: absolute;
+ left: 0;
+ top: 40px;
+ bottom: 40px;
+ display: block;
+ right: 0;
+ width: auto;
+ height: auto;
+ z-index: -1;
+ -webkit-box-shadow: 0 0 8px rgba(0, 0, 0, 0.6);
+ box-shadow: 0 0 8px rgba(0, 0, 0, 0.6);
+ background: #444; }
+
+.mfp-figure small {
+ color: #BDBDBD;
+ display: block;
+ font-size: 12px;
+ line-height: 14px; }
+
+.mfp-figure figure {
+ margin: 0; }
+
+.mfp-bottom-bar {
+ margin-top: -36px;
+ position: absolute;
+ top: 100%;
+ left: 0;
+ width: 100%;
+ cursor: auto; }
+
+.mfp-title {
+ text-align: left;
+ line-height: 18px;
+ color: #F3F3F3;
+ word-wrap: break-word;
+ padding-right: 36px; }
+
+.mfp-image-holder .mfp-content {
+ max-width: 100%; }
+
+.mfp-gallery .mfp-image-holder .mfp-figure {
+ cursor: pointer; }
+
+@media screen and (max-width: 800px) and (orientation: landscape), screen and (max-height: 300px) {
+ /**
+ * Remove all paddings around the image on small screen
+ */
+ .mfp-img-mobile .mfp-image-holder {
+ padding-left: 0;
+ padding-right: 0; }
+ .mfp-img-mobile img.mfp-img {
+ padding: 0; }
+ .mfp-img-mobile .mfp-figure:after {
+ top: 0;
+ bottom: 0; }
+ .mfp-img-mobile .mfp-figure small {
+ display: inline;
+ margin-left: 5px; }
+ .mfp-img-mobile .mfp-bottom-bar {
+ background: rgba(0, 0, 0, 0.6);
+ bottom: 0;
+ margin: 0;
+ top: auto;
+ padding: 3px 5px;
+ position: fixed;
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box; }
+ .mfp-img-mobile .mfp-bottom-bar:empty {
+ padding: 0; }
+ .mfp-img-mobile .mfp-counter {
+ right: 5px;
+ top: 3px; }
+ .mfp-img-mobile .mfp-close {
+ top: 0;
+ right: 0;
+ width: 35px;
+ height: 35px;
+ line-height: 35px;
+ background: rgba(0, 0, 0, 0.6);
+ position: fixed;
+ text-align: center;
+ padding: 0; } }
+
+@media all and (max-width: 900px) {
+ .mfp-arrow {
+ -webkit-transform: scale(0.75);
+ transform: scale(0.75); }
+ .mfp-arrow-left {
+ -webkit-transform-origin: 0;
+ transform-origin: 0; }
+ .mfp-arrow-right {
+ -webkit-transform-origin: 100%;
+ transform-origin: 100%; }
+ .mfp-container {
+ padding-left: 6px;
+ padding-right: 6px; } }
+
+.c-popup {
+ max-width: 900px;
+ margin: 16px auto;
+ border-radius: 8px;
+ background: #fff; }
+ .c-popup #mc_embed_signup {
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-orient: vertical;
+ -webkit-box-direction: normal;
+ -ms-flex-direction: column;
+ flex-direction: column; }
+ @media screen and (min-width: 767px) {
+ .c-popup #mc_embed_signup {
+ -webkit-box-orient: horizontal;
+ -webkit-box-direction: normal;
+ -ms-flex-direction: row;
+ flex-direction: row; } }
+ .c-popup #mc_embed_signup .mc_embed_signup_keyvisual {
+ height: 250px;
+ overflow: hidden;
+ padding: 32px;
+ background: #F7A29E;
+ text-align: center; }
+ @media screen and (min-width: 767px) {
+ .c-popup #mc_embed_signup .mc_embed_signup_keyvisual {
+ -webkit-box-flex: 1;
+ -ms-flex: 1 0 40%;
+ flex: 1 0 40%;
+ height: auto; } }
+ .c-popup #mc_embed_signup .mc_embed_signup_keyvisual img {
+ max-width: initial; }
+ .c-popup #mc_embed_signup .mc_embed_signup_keyvisual h2 {
+ margin-bottom: 16px;
+ font-size: 3.2rem; }
+ .c-popup #mc_embed_signup #mc_embed_signup_scroll {
+ padding: 24px; }
+ .c-popup #mc_embed_signup #mc_embed_signup_scroll h2 {
+ margin-bottom: 12px; }
+ .c-popup .mfp-close {
+ top: 20px;
+ font-size: 4rem; }
+ .c-popup #mc_embed_signup .mc-field-group input[type="checkbox"] {
+ width: auto; }
+ .c-popup .content__gdpr {
+ line-height: 1.4; }
+ .c-popup label + p {
+ margin: 0; }
+ .c-popup #mc_embed_signup .mc-field-group .checkbox {
+ -webkit-box-align: center;
+ -ms-flex-align: center;
+ align-items: center;
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ font-size: 1.6rem; }
+ .c-popup #mc_embed_signup .mc-field-group .checkbox span {
+ padding-left: 4px; }
+ .c-popup #mc_embed_signup input {
+ border-radius: 0; }
+ .c-popup .content__gdprLegal {
+ margin-top: 16px;
+ color: #6C7992;
+ line-height: 1.4; }
+ .c-popup .gdprRequired + p {
+ color: #6C7992;
+ line-height: 1.4; }
+ .c-popup #mc-embedded-subscribe {
+ margin: 0;
+ border: 2px solid transparentg;
+ border-radius: 8px; }
+ .c-popup #mc-embedded-subscribe:hover {
+ border: 2px solid #F1645D;
+ color: #F1645D; }
+ .c-popup input#mc-embedded-subscribe {
+ border-color: transparent !important;
+ border-radius: 8px; }
+ .c-popup input#mc-embedded-subscribe:hover {
+ border-color: #F1645D !important; }
+ .c-popup fieldset {
+ margin-top: 16px; }
+ .c-popup #mc_embed_signup h2 {
+ margin: 0;
+ font-size: 2.4rem; }
+ .c-popup .content__gdpr label {
+ font-weight: bold;
+ font-size: 2rem; }
+
+.c-spotlightbox {
+ padding: 32px 0;
+ background: -webkit-gradient(linear, left top, left bottom, from(#0A0F40), to(rgba(4, 26, 57, 0))), #041A39;
+ background: linear-gradient(180deg, #0A0F40 0%, rgba(4, 26, 57, 0) 100%), #041A39;
+ background-image: url(../images/circles.png);
+ background-position: center;
+ background-size: contain;
+ -webkit-transition: background-size .5s;
+ transition: background-size .5s;
+ -webkit-transition-delay: .5s;
+ transition-delay: .5s;
+ color: #fff; }
+ @media screen and (min-width: 767px) {
+ .c-spotlightbox {
+ padding: 64px 0; } }
+ .c-spotlightbox a:not(.a-button) {
+ color: #fff; }
+ .c-spotlightbox a:not(.a-button):hover {
+ color: #6E7786; }
+ .c-spotlightbox .icon {
+ fill: #fff; }
+ .c-spotlightbox a .icon:hover {
+ opacity: .6; }
+ .c-spotlightbox__item {
+ padding: 32px;
+ border-radius: 8px;
+ background: rgba(54, 72, 97, 0.5); }
+
+.c-accentbox {
+ overflow: hidden;
+ padding: 32px 0;
+ border-radius: 8px;
+ background: #F1645D;
+ color: #fff; }
+ @media screen and (min-width: 767px) {
+ .c-accentbox {
+ padding: 64px 0; } }
+
+.c-user {
+ padding: 32px;
+ background: #F5F6FA;
+ text-align: center; }
+ .c-user__avatar {
+ max-width: 125px;
+ border-radius: 250px; }
+ .c-user__subtitle {
+ margin-top: 4px;
+ color: #6C7992;
+ font-size: 1.8rem; }
+
+.c-whisperbox {
+ padding: 32px 0;
+ border-radius: 8px;
+ background-color: #F5F6FA;
+ background-position: bottom center;
+ background-repeat: no-repeat;
+ background-size: 75%;
+ -webkit-transition: background-size .5s;
+ transition: background-size .5s;
+ -webkit-transition-delay: .6s;
+ transition-delay: .6s; }
+ @media screen and (min-width: 767px) {
+ .c-whisperbox {
+ padding: 64px 0;
+ background-image: url(../images/circles-background.jpg); } }
+ .c-whisperbox.is-active {
+ background-size: 150%; }
+
+.c-ghostbox {
+ padding: 32px 0;
+ border-radius: 8px;
+ background: #F7A29E; }
+ @media screen and (min-width: 767px) {
+ .c-ghostbox {
+ padding: 64px 0; } }
+
+.o-header__container {
+ padding: 16px 0; }
+
+.o-header__top {
+ -webkit-box-align: center;
+ -ms-flex-align: center;
+ align-items: center;
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-pack: justify;
+ -ms-flex-pack: justify;
+ justify-content: space-between; }
+ .o-header__top--clone {
+ padding: 8px 16px;
+ position: fixed;
+ z-index: 100;
+ top: 0;
+ left: 0;
+ width: 100%;
+ background: #041A39;
+ -webkit-box-shadow: 0 0 10px rgba(0, 0, 0, 0.4);
+ box-shadow: 0 0 10px rgba(0, 0, 0, 0.4);
+ -webkit-transform: translateY(-100%);
+ transform: translateY(-100%);
+ -webkit-transition: all 300ms ease-in-out;
+ transition: all 300ms ease-in-out; }
+ .o-header__top--clone .o-navigation__item,
+ .o-header__top--clone .o-navigation__item.is-active {
+ color: #fff; }
+ .o-header__top--clone.is-sticky {
+ -webkit-transform: translateY(0%);
+ transform: translateY(0%); }
+
+.o-header__body {
+ margin-top: 64px;
+ padding-bottom: 128px;
+ text-align: center; }
+
+.a-push-top {
+ -webkit-transform: translateY(200px);
+ transform: translateY(200px);
+ -webkit-transition: all .5s;
+ transition: all .5s;
+ -webkit-transition-delay: .5s;
+ transition-delay: .5s; }
+ .a-push-top.is-active {
+ -webkit-transform: translateY(0);
+ transform: translateY(0); }
+
+.o-teaser {
+ -webkit-box-align: center;
+ -ms-flex-align: center;
+ align-items: center;
+ display: -webkit-box;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-orient: vertical;
+ -webkit-box-direction: normal;
+ -ms-flex-direction: column;
+ flex-direction: column;
+ -ms-flex-wrap: no-wrap;
+ flex-wrap: no-wrap;
+ -webkit-box-pack: center;
+ -ms-flex-pack: center;
+ justify-content: center; }
+ .o-teaser__symbol {
+ display: block; }
+ .o-teaser__content {
+ margin-top: 16px; }
+
+.c-notification {
+ padding: 24px;
+ background-color: #E6E8EB;
+ border-left: 8px solid #F1645D; }
+ .c-notification--warning {
+ background-color: #fff7d4;
+ border-color: #e7c000; }
+
+/**
+ * atom-dark theme for `prism.js`
+ * Based on Atom's `atom-dark` theme: https://github.com/atom/atom-dark-syntax
+ * @author Joe Gibson (@gibsjose)
+ */
+code[class*="language-"],
+pre[class*="language-"] {
+ color: #c5c8c6;
+ text-shadow: 0 1px rgba(0, 0, 0, 0.3);
+ font-family: Inconsolata, Monaco, Consolas, 'Courier New', Courier, monospace;
+ direction: ltr;
+ text-align: left;
+ white-space: pre;
+ word-spacing: normal;
+ word-break: normal;
+ line-height: 1.5;
+ -moz-tab-size: 4;
+ -o-tab-size: 4;
+ tab-size: 4;
+ -webkit-hyphens: none;
+ -ms-hyphens: none;
+ hyphens: none; }
+
+/* Code blocks */
+pre[class*="language-"] {
+ padding: 1em;
+ margin: .5em 0;
+ overflow: auto;
+ border-radius: 0.3em; }
+
+:not(pre) > code[class*="language-"],
+pre[class*="language-"] {
+ background: #1d1f21; }
+
+/* Inline code */
+:not(pre) > code[class*="language-"] {
+ padding: .1em;
+ border-radius: .3em; }
+
+.token.comment,
+.token.prolog,
+.token.doctype,
+.token.cdata {
+ color: #7C7C7C; }
+
+.token.punctuation {
+ color: #c5c8c6; }
+
+.namespace {
+ opacity: .7; }
+
+.token.property,
+.token.keyword,
+.token.tag {
+ color: #96CBFE; }
+
+.token.class-name {
+ color: #FFFFB6;
+ text-decoration: underline; }
+
+.token.boolean,
+.token.constant {
+ color: #99CC99; }
+
+.token.symbol,
+.token.deleted {
+ color: #f92672; }
+
+.token.number {
+ color: #FF73FD; }
+
+.token.selector,
+.token.attr-name,
+.token.string,
+.token.char,
+.token.builtin,
+.token.inserted {
+ color: #A8FF60; }
+
+.token.variable {
+ color: #C6C5FE; }
+
+.token.operator {
+ color: #EDEDED; }
+
+.token.entity {
+ color: #FFFFB6;
+ cursor: help; }
+
+.token.url {
+ color: #96CBFE; }
+
+.language-css .token.string,
+.style .token.string {
+ color: #87C38A; }
+
+.token.atrule,
+.token.attr-value {
+ color: #F9EE98; }
+
+.token.function {
+ color: #DAD085; }
+
+.token.regex {
+ color: #E9C062; }
+
+.token.important {
+ color: #fd971f; }
+
+.token.important,
+.token.bold {
+ font-weight: bold; }
+
+.token.italic {
+ font-style: italic; }
+
+.u-text-color-focus {
+ color: #F1645D; }
+
+.u-text-color-quiet {
+ color: #818C9C; }
+
+.u-text-l {
+ font-size: 24px; }
+
+.u-text-uppercase {
+ text-transform: uppercase; }
+
+.u-text-strong {
+ font-weight: 600; }
diff --git a/packages/site/public/css/utilities/text-color.css b/packages/site/public/css/utilities/text-color.css
new file mode 100644
index 0000000..350106d
--- /dev/null
+++ b/packages/site/public/css/utilities/text-color.css
@@ -0,0 +1,5 @@
+.u-text-color-focus {
+ color: get-color(red, 900); }
+
+.u-text-color-quiet {
+ color: get-color(gray, 500); }
diff --git a/packages/site/public/css/utilities/text-size.css b/packages/site/public/css/utilities/text-size.css
new file mode 100644
index 0000000..f1459fb
--- /dev/null
+++ b/packages/site/public/css/utilities/text-size.css
@@ -0,0 +1,8 @@
+.u-text-l {
+ font-size: 24px; }
+
+.u-text-uppercase {
+ text-transform: uppercase; }
+
+.u-text-strong {
+ font-weight: 600; }
diff --git a/packages/site/public/d1.png b/packages/site/public/d1.png
new file mode 100644
index 0000000..592cf75
Binary files /dev/null and b/packages/site/public/d1.png differ
diff --git a/packages/site/public/d2.png b/packages/site/public/d2.png
new file mode 100644
index 0000000..7062ff4
Binary files /dev/null and b/packages/site/public/d2.png differ
diff --git a/packages/site/public/d3.png b/packages/site/public/d3.png
new file mode 100644
index 0000000..ceba120
Binary files /dev/null and b/packages/site/public/d3.png differ
diff --git a/packages/site/public/d4.png b/packages/site/public/d4.png
new file mode 100644
index 0000000..2f02b54
Binary files /dev/null and b/packages/site/public/d4.png differ
diff --git a/packages/site/public/de/api.html b/packages/site/public/de/api.html
new file mode 100644
index 0000000..e69de29
diff --git a/packages/site/public/de/apollo-client.html b/packages/site/public/de/apollo-client.html
new file mode 100644
index 0000000..e69de29
diff --git a/packages/site/public/de/getting-started.html b/packages/site/public/de/getting-started.html
new file mode 100644
index 0000000..e69de29
diff --git a/packages/site/public/de/how-it-works.html b/packages/site/public/de/how-it-works.html
new file mode 100644
index 0000000..e69de29
diff --git a/packages/site/public/de/index.html b/packages/site/public/de/index.html
new file mode 100644
index 0000000..e69de29
diff --git a/packages/site/public/de/integrations-overview.html b/packages/site/public/de/integrations-overview.html
new file mode 100644
index 0000000..e69de29
diff --git a/packages/site/public/de/integrations.html b/packages/site/public/de/integrations.html
new file mode 100644
index 0000000..e69de29
diff --git a/packages/site/public/de/react.html b/packages/site/public/de/react.html
new file mode 100644
index 0000000..e69de29
diff --git a/packages/site/public/de/reactive-graphql.html b/packages/site/public/de/reactive-graphql.html
new file mode 100644
index 0000000..e69de29
diff --git a/packages/site/public/de/readme.html b/packages/site/public/de/readme.html
new file mode 100644
index 0000000..e69de29
diff --git a/packages/site/public/de/redux-observable.html b/packages/site/public/de/redux-observable.html
new file mode 100644
index 0000000..e69de29
diff --git a/packages/site/public/de/redux.html b/packages/site/public/de/redux.html
new file mode 100644
index 0000000..e69de29
diff --git a/packages/site/public/de/tutorial.html b/packages/site/public/de/tutorial.html
new file mode 100644
index 0000000..e69de29
diff --git a/packages/site/public/de/vue.html b/packages/site/public/de/vue.html
new file mode 100644
index 0000000..e69de29
diff --git a/packages/site/public/fonts/LICENSE.txt b/packages/site/public/fonts/LICENSE.txt
new file mode 100644
index 0000000..75b5248
--- /dev/null
+++ b/packages/site/public/fonts/LICENSE.txt
@@ -0,0 +1,202 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/packages/site/public/fonts/Roboto-Bold.ttf b/packages/site/public/fonts/Roboto-Bold.ttf
new file mode 100644
index 0000000..d3f01ad
Binary files /dev/null and b/packages/site/public/fonts/Roboto-Bold.ttf differ
diff --git a/packages/site/public/fonts/Roboto-Regular.ttf b/packages/site/public/fonts/Roboto-Regular.ttf
new file mode 100644
index 0000000..2c97eea
Binary files /dev/null and b/packages/site/public/fonts/Roboto-Regular.ttf differ
diff --git a/packages/site/public/getting-started.html b/packages/site/public/getting-started.html
new file mode 100644
index 0000000..e69de29
diff --git a/packages/site/public/how-it-works.html b/packages/site/public/how-it-works.html
new file mode 100644
index 0000000..e69de29
diff --git a/packages/site/public/icons/accounting-calculator.svg b/packages/site/public/icons/accounting-calculator.svg
new file mode 100644
index 0000000..43948d2
--- /dev/null
+++ b/packages/site/public/icons/accounting-calculator.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/packages/site/public/icons/book-address.svg b/packages/site/public/icons/book-address.svg
new file mode 100644
index 0000000..a67bae4
--- /dev/null
+++ b/packages/site/public/icons/book-address.svg
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/packages/site/public/icons/close.svg b/packages/site/public/icons/close.svg
new file mode 100644
index 0000000..e17b625
--- /dev/null
+++ b/packages/site/public/icons/close.svg
@@ -0,0 +1 @@
+close
\ No newline at end of file
diff --git a/packages/site/public/icons/cloud-lock.svg b/packages/site/public/icons/cloud-lock.svg
new file mode 100644
index 0000000..e599697
--- /dev/null
+++ b/packages/site/public/icons/cloud-lock.svg
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/packages/site/public/icons/contactless-payment.svg b/packages/site/public/icons/contactless-payment.svg
new file mode 100644
index 0000000..3e59319
--- /dev/null
+++ b/packages/site/public/icons/contactless-payment.svg
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/packages/site/public/icons/credit-card-1.svg b/packages/site/public/icons/credit-card-1.svg
new file mode 100644
index 0000000..c78b715
--- /dev/null
+++ b/packages/site/public/icons/credit-card-1.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/packages/site/public/icons/crypto-currency-bitcoin-give.svg b/packages/site/public/icons/crypto-currency-bitcoin-give.svg
new file mode 100644
index 0000000..9e331b7
--- /dev/null
+++ b/packages/site/public/icons/crypto-currency-bitcoin-give.svg
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/packages/site/public/icons/crypto-currency-bitcoin-lock.svg b/packages/site/public/icons/crypto-currency-bitcoin-lock.svg
new file mode 100644
index 0000000..60252ca
--- /dev/null
+++ b/packages/site/public/icons/crypto-currency-bitcoin-lock.svg
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/packages/site/public/icons/facebook.svg b/packages/site/public/icons/facebook.svg
new file mode 100644
index 0000000..330d6ab
--- /dev/null
+++ b/packages/site/public/icons/facebook.svg
@@ -0,0 +1,13 @@
+
+
+
+ Facebook
+ Created with Sketch.
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/packages/site/public/icons/gauge-dashboard-1-alternate.svg b/packages/site/public/icons/gauge-dashboard-1-alternate.svg
new file mode 100644
index 0000000..f705bed
--- /dev/null
+++ b/packages/site/public/icons/gauge-dashboard-1-alternate.svg
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/packages/site/public/icons/gesture-tap-2.svg b/packages/site/public/icons/gesture-tap-2.svg
new file mode 100644
index 0000000..673a134
--- /dev/null
+++ b/packages/site/public/icons/gesture-tap-2.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/packages/site/public/icons/github.svg b/packages/site/public/icons/github.svg
new file mode 100644
index 0000000..b7371ea
--- /dev/null
+++ b/packages/site/public/icons/github.svg
@@ -0,0 +1,19 @@
+
+
+
+ Github
+ Created with Sketch.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/packages/site/public/icons/half-circles.svg b/packages/site/public/icons/half-circles.svg
new file mode 100644
index 0000000..2ac978b
--- /dev/null
+++ b/packages/site/public/icons/half-circles.svg
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/packages/site/public/icons/navigation-menu.svg b/packages/site/public/icons/navigation-menu.svg
new file mode 100644
index 0000000..2211e7f
--- /dev/null
+++ b/packages/site/public/icons/navigation-menu.svg
@@ -0,0 +1 @@
+navigation-menu
\ No newline at end of file
diff --git a/packages/site/public/icons/twitter.svg b/packages/site/public/icons/twitter.svg
new file mode 100644
index 0000000..c27dea2
--- /dev/null
+++ b/packages/site/public/icons/twitter.svg
@@ -0,0 +1,13 @@
+
+
+
+ Twitter
+ Created with Sketch.
+
+
+
\ No newline at end of file
diff --git a/packages/site/public/images/circles.png b/packages/site/public/images/circles.png
new file mode 100644
index 0000000..b802ff4
Binary files /dev/null and b/packages/site/public/images/circles.png differ
diff --git a/packages/site/public/images/embark-logo.svg b/packages/site/public/images/embark-logo.svg
new file mode 100644
index 0000000..767a5ab
--- /dev/null
+++ b/packages/site/public/images/embark-logo.svg
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/packages/site/public/images/favicon.png b/packages/site/public/images/favicon.png
new file mode 100644
index 0000000..93a32d4
Binary files /dev/null and b/packages/site/public/images/favicon.png differ
diff --git a/packages/site/public/images/logo.svg b/packages/site/public/images/logo.svg
new file mode 100644
index 0000000..3bec198
--- /dev/null
+++ b/packages/site/public/images/logo.svg
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/packages/site/public/index.html b/packages/site/public/index.html
new file mode 100644
index 0000000..9b63805
--- /dev/null
+++ b/packages/site/public/index.html
@@ -0,0 +1,760 @@
+
+
+
+
+ SUBSPACE
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Features
+
+ You’ll love the thoughtful architecture of Subspace
+
+
+
+ Event Tracking & Event Sourcing
+ You can track events and react to their values. With Subspace observables doing event sourcing is easy.
+
+
+
+
+
+
+
+
+
+
+
+
+ View details
+
+ import { $average, $latest } from "@embarklabs/subspace";
+
+const rating$ = Product.events.Rating.track().map("rating"));
+
+rating$.pipe($latest(5), $average()).subscribe((rating) => {
+ console.log("average rating of the last 5 events is " + rating)
+});
+
+
+ Tracking State
+ You can track changes to a contract state variable, by specifying the view function and arguments to call and query the contract.
+
+
+
+
+
+
+
+
+
+
+
+
+ View details
+
+ const productTitle$ = ProductList.methods.products(0).track().map("title");
+ productTitle$.subscribe((title) => console.log("product title is " + title));
+});
+
+
+ Tracking balances
+ You can also track changes in both ETH and ERC20 token balances
+
+
+
+
+
+
+
+
+
+
+
+
+ View details
+
+ const address = "0x0001020304050607080900010203040506070809";
+
+subspace.trackBalance(address).subscribe((balance) => {
+ console.log("ETH balance is ", balance)
+});
+
+subspace.trackBalance(address, "0x744d70fdbe2ba4cf95131626614a1763df805b9e").subscribe((balance) => {
+ console.log("SNT balance is ", balance)
+});
+
+
+ React integration
+ Subspace can make any react component compatible with observables so you easily reactive components
+
+
+
+
+
+
+
+
+
+
+
+
+ View details
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MIT Licensed | Subspace is part of the Status Network
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/packages/site/public/integrations-overview.html b/packages/site/public/integrations-overview.html
new file mode 100644
index 0000000..e69de29
diff --git a/packages/site/public/integrations.html b/packages/site/public/integrations.html
new file mode 100644
index 0000000..e69de29
diff --git a/packages/site/public/javascripts/jquery.js b/packages/site/public/javascripts/jquery.js
new file mode 100644
index 0000000..769be52
--- /dev/null
+++ b/packages/site/public/javascripts/jquery.js
@@ -0,0 +1 @@
+!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(e,t){"use strict";var n=[],r=e.document,i=Object.getPrototypeOf,o=n.slice,a=n.concat,s=n.push,u=n.indexOf,l={},c=l.toString,f=l.hasOwnProperty,p=f.toString,d=p.call(Object),h={},g=function e(t){return"function"==typeof t&&"number"!=typeof t.nodeType},y=function e(t){return null!=t&&t===t.window},v={type:!0,src:!0,noModule:!0};function m(e,t,n){var i,o=(t=t||r).createElement("script");if(o.text=e,n)for(i in v)n[i]&&(o[i]=n[i]);t.head.appendChild(o).parentNode.removeChild(o)}function x(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?l[c.call(e)]||"object":typeof e}var b="3.3.1",w=function(e,t){return new w.fn.init(e,t)},T=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;w.fn=w.prototype={jquery:"3.3.1",constructor:w,length:0,toArray:function(){return o.call(this)},get:function(e){return null==e?o.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var t=w.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return w.each(this,e)},map:function(e){return this.pushStack(w.map(this,function(t,n){return e.call(t,n,t)}))},slice:function(){return this.pushStack(o.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(n>=0&&n0&&t-1 in e)}var E=function(e){var t,n,r,i,o,a,s,u,l,c,f,p,d,h,g,y,v,m,x,b="sizzle"+1*new Date,w=e.document,T=0,C=0,E=ae(),k=ae(),S=ae(),D=function(e,t){return e===t&&(f=!0),0},N={}.hasOwnProperty,A=[],j=A.pop,q=A.push,L=A.push,H=A.slice,O=function(e,t){for(var n=0,r=e.length;n+~]|"+M+")"+M+"*"),z=new RegExp("="+M+"*([^\\]'\"]*?)"+M+"*\\]","g"),X=new RegExp(W),U=new RegExp("^"+R+"$"),V={ID:new RegExp("^#("+R+")"),CLASS:new RegExp("^\\.("+R+")"),TAG:new RegExp("^("+R+"|[*])"),ATTR:new RegExp("^"+I),PSEUDO:new RegExp("^"+W),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+P+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},G=/^(?:input|select|textarea|button)$/i,Y=/^h\d$/i,Q=/^[^{]+\{\s*\[native \w/,J=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,K=/[+~]/,Z=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),ee=function(e,t,n){var r="0x"+t-65536;return r!==r||n?t:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)},te=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ne=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},re=function(){p()},ie=me(function(e){return!0===e.disabled&&("form"in e||"label"in e)},{dir:"parentNode",next:"legend"});try{L.apply(A=H.call(w.childNodes),w.childNodes),A[w.childNodes.length].nodeType}catch(e){L={apply:A.length?function(e,t){q.apply(e,H.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function oe(e,t,r,i){var o,s,l,c,f,h,v,m=t&&t.ownerDocument,T=t?t.nodeType:9;if(r=r||[],"string"!=typeof e||!e||1!==T&&9!==T&&11!==T)return r;if(!i&&((t?t.ownerDocument||t:w)!==d&&p(t),t=t||d,g)){if(11!==T&&(f=J.exec(e)))if(o=f[1]){if(9===T){if(!(l=t.getElementById(o)))return r;if(l.id===o)return r.push(l),r}else if(m&&(l=m.getElementById(o))&&x(t,l)&&l.id===o)return r.push(l),r}else{if(f[2])return L.apply(r,t.getElementsByTagName(e)),r;if((o=f[3])&&n.getElementsByClassName&&t.getElementsByClassName)return L.apply(r,t.getElementsByClassName(o)),r}if(n.qsa&&!S[e+" "]&&(!y||!y.test(e))){if(1!==T)m=t,v=e;else if("object"!==t.nodeName.toLowerCase()){(c=t.getAttribute("id"))?c=c.replace(te,ne):t.setAttribute("id",c=b),s=(h=a(e)).length;while(s--)h[s]="#"+c+" "+ve(h[s]);v=h.join(","),m=K.test(e)&&ge(t.parentNode)||t}if(v)try{return L.apply(r,m.querySelectorAll(v)),r}catch(e){}finally{c===b&&t.removeAttribute("id")}}}return u(e.replace(B,"$1"),t,r,i)}function ae(){var e=[];function t(n,i){return e.push(n+" ")>r.cacheLength&&delete t[e.shift()],t[n+" "]=i}return t}function se(e){return e[b]=!0,e}function ue(e){var t=d.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function le(e,t){var n=e.split("|"),i=n.length;while(i--)r.attrHandle[n[i]]=t}function ce(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function fe(e){return function(t){return"input"===t.nodeName.toLowerCase()&&t.type===e}}function pe(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function de(e){return function(t){return"form"in t?t.parentNode&&!1===t.disabled?"label"in t?"label"in t.parentNode?t.parentNode.disabled===e:t.disabled===e:t.isDisabled===e||t.isDisabled!==!e&&ie(t)===e:t.disabled===e:"label"in t&&t.disabled===e}}function he(e){return se(function(t){return t=+t,se(function(n,r){var i,o=e([],n.length,t),a=o.length;while(a--)n[i=o[a]]&&(n[i]=!(r[i]=n[i]))})})}function ge(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}n=oe.support={},o=oe.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return!!t&&"HTML"!==t.nodeName},p=oe.setDocument=function(e){var t,i,a=e?e.ownerDocument||e:w;return a!==d&&9===a.nodeType&&a.documentElement?(d=a,h=d.documentElement,g=!o(d),w!==d&&(i=d.defaultView)&&i.top!==i&&(i.addEventListener?i.addEventListener("unload",re,!1):i.attachEvent&&i.attachEvent("onunload",re)),n.attributes=ue(function(e){return e.className="i",!e.getAttribute("className")}),n.getElementsByTagName=ue(function(e){return e.appendChild(d.createComment("")),!e.getElementsByTagName("*").length}),n.getElementsByClassName=Q.test(d.getElementsByClassName),n.getById=ue(function(e){return h.appendChild(e).id=b,!d.getElementsByName||!d.getElementsByName(b).length}),n.getById?(r.filter.ID=function(e){var t=e.replace(Z,ee);return function(e){return e.getAttribute("id")===t}},r.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&g){var n=t.getElementById(e);return n?[n]:[]}}):(r.filter.ID=function(e){var t=e.replace(Z,ee);return function(e){var n="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return n&&n.value===t}},r.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&g){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),r.find.TAG=n.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):n.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},r.find.CLASS=n.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&g)return t.getElementsByClassName(e)},v=[],y=[],(n.qsa=Q.test(d.querySelectorAll))&&(ue(function(e){h.appendChild(e).innerHTML=" ",e.querySelectorAll("[msallowcapture^='']").length&&y.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||y.push("\\["+M+"*(?:value|"+P+")"),e.querySelectorAll("[id~="+b+"-]").length||y.push("~="),e.querySelectorAll(":checked").length||y.push(":checked"),e.querySelectorAll("a#"+b+"+*").length||y.push(".#.+[+~]")}),ue(function(e){e.innerHTML=" ";var t=d.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&y.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&y.push(":enabled",":disabled"),h.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&y.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),y.push(",.*:")})),(n.matchesSelector=Q.test(m=h.matches||h.webkitMatchesSelector||h.mozMatchesSelector||h.oMatchesSelector||h.msMatchesSelector))&&ue(function(e){n.disconnectedMatch=m.call(e,"*"),m.call(e,"[s!='']:x"),v.push("!=",W)}),y=y.length&&new RegExp(y.join("|")),v=v.length&&new RegExp(v.join("|")),t=Q.test(h.compareDocumentPosition),x=t||Q.test(h.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return f=!0,0;var r=!e.compareDocumentPosition-!t.compareDocumentPosition;return r||(1&(r=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!n.sortDetached&&t.compareDocumentPosition(e)===r?e===d||e.ownerDocument===w&&x(w,e)?-1:t===d||t.ownerDocument===w&&x(w,t)?1:c?O(c,e)-O(c,t):0:4&r?-1:1)}:function(e,t){if(e===t)return f=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e===d?-1:t===d?1:i?-1:o?1:c?O(c,e)-O(c,t):0;if(i===o)return ce(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?ce(a[r],s[r]):a[r]===w?-1:s[r]===w?1:0},d):d},oe.matches=function(e,t){return oe(e,null,null,t)},oe.matchesSelector=function(e,t){if((e.ownerDocument||e)!==d&&p(e),t=t.replace(z,"='$1']"),n.matchesSelector&&g&&!S[t+" "]&&(!v||!v.test(t))&&(!y||!y.test(t)))try{var r=m.call(e,t);if(r||n.disconnectedMatch||e.document&&11!==e.document.nodeType)return r}catch(e){}return oe(t,d,null,[e]).length>0},oe.contains=function(e,t){return(e.ownerDocument||e)!==d&&p(e),x(e,t)},oe.attr=function(e,t){(e.ownerDocument||e)!==d&&p(e);var i=r.attrHandle[t.toLowerCase()],o=i&&N.call(r.attrHandle,t.toLowerCase())?i(e,t,!g):void 0;return void 0!==o?o:n.attributes||!g?e.getAttribute(t):(o=e.getAttributeNode(t))&&o.specified?o.value:null},oe.escape=function(e){return(e+"").replace(te,ne)},oe.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},oe.uniqueSort=function(e){var t,r=[],i=0,o=0;if(f=!n.detectDuplicates,c=!n.sortStable&&e.slice(0),e.sort(D),f){while(t=e[o++])t===e[o]&&(i=r.push(o));while(i--)e.splice(r[i],1)}return c=null,e},i=oe.getText=function(e){var t,n="",r=0,o=e.nodeType;if(o){if(1===o||9===o||11===o){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=i(e)}else if(3===o||4===o)return e.nodeValue}else while(t=e[r++])n+=i(t);return n},(r=oe.selectors={cacheLength:50,createPseudo:se,match:V,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(Z,ee),e[3]=(e[3]||e[4]||e[5]||"").replace(Z,ee),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||oe.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&oe.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return V.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=a(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(Z,ee).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=E[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&E(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(e,t,n){return function(r){var i=oe.attr(r,e);return null==i?"!="===t:!t||(i+="","="===t?i===n:"!="===t?i!==n:"^="===t?n&&0===i.indexOf(n):"*="===t?n&&i.indexOf(n)>-1:"$="===t?n&&i.slice(-n.length)===n:"~="===t?(" "+i.replace($," ")+" ").indexOf(n)>-1:"|="===t&&(i===n||i.slice(0,n.length+1)===n+"-"))}},CHILD:function(e,t,n,r,i){var o="nth"!==e.slice(0,3),a="last"!==e.slice(-4),s="of-type"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,u){var l,c,f,p,d,h,g=o!==a?"nextSibling":"previousSibling",y=t.parentNode,v=s&&t.nodeName.toLowerCase(),m=!u&&!s,x=!1;if(y){if(o){while(g){p=t;while(p=p[g])if(s?p.nodeName.toLowerCase()===v:1===p.nodeType)return!1;h=g="only"===e&&!h&&"nextSibling"}return!0}if(h=[a?y.firstChild:y.lastChild],a&&m){x=(d=(l=(c=(f=(p=y)[b]||(p[b]={}))[p.uniqueID]||(f[p.uniqueID]={}))[e]||[])[0]===T&&l[1])&&l[2],p=d&&y.childNodes[d];while(p=++d&&p&&p[g]||(x=d=0)||h.pop())if(1===p.nodeType&&++x&&p===t){c[e]=[T,d,x];break}}else if(m&&(x=d=(l=(c=(f=(p=t)[b]||(p[b]={}))[p.uniqueID]||(f[p.uniqueID]={}))[e]||[])[0]===T&&l[1]),!1===x)while(p=++d&&p&&p[g]||(x=d=0)||h.pop())if((s?p.nodeName.toLowerCase()===v:1===p.nodeType)&&++x&&(m&&((c=(f=p[b]||(p[b]={}))[p.uniqueID]||(f[p.uniqueID]={}))[e]=[T,x]),p===t))break;return(x-=i)===r||x%r==0&&x/r>=0}}},PSEUDO:function(e,t){var n,i=r.pseudos[e]||r.setFilters[e.toLowerCase()]||oe.error("unsupported pseudo: "+e);return i[b]?i(t):i.length>1?(n=[e,e,"",t],r.setFilters.hasOwnProperty(e.toLowerCase())?se(function(e,n){var r,o=i(e,t),a=o.length;while(a--)e[r=O(e,o[a])]=!(n[r]=o[a])}):function(e){return i(e,0,n)}):i}},pseudos:{not:se(function(e){var t=[],n=[],r=s(e.replace(B,"$1"));return r[b]?se(function(e,t,n,i){var o,a=r(e,null,i,[]),s=e.length;while(s--)(o=a[s])&&(e[s]=!(t[s]=o))}):function(e,i,o){return t[0]=e,r(t,null,o,n),t[0]=null,!n.pop()}}),has:se(function(e){return function(t){return oe(e,t).length>0}}),contains:se(function(e){return e=e.replace(Z,ee),function(t){return(t.textContent||t.innerText||i(t)).indexOf(e)>-1}}),lang:se(function(e){return U.test(e||"")||oe.error("unsupported lang: "+e),e=e.replace(Z,ee).toLowerCase(),function(t){var n;do{if(n=g?t.lang:t.getAttribute("xml:lang")||t.getAttribute("lang"))return(n=n.toLowerCase())===e||0===n.indexOf(e+"-")}while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===h},focus:function(e){return e===d.activeElement&&(!d.hasFocus||d.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:de(!1),disabled:de(!0),checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,!0===e.selected},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!r.pseudos.empty(e)},header:function(e){return Y.test(e.nodeName)},input:function(e){return G.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||"text"===t.toLowerCase())},first:he(function(){return[0]}),last:he(function(e,t){return[t-1]}),eq:he(function(e,t,n){return[n<0?n+t:n]}),even:he(function(e,t){for(var n=0;n=0;)e.push(r);return e}),gt:he(function(e,t,n){for(var r=n<0?n+t:n;++r1?function(t,n,r){var i=e.length;while(i--)if(!e[i](t,n,r))return!1;return!0}:e[0]}function be(e,t,n){for(var r=0,i=t.length;r-1&&(o[l]=!(a[l]=f))}}else v=we(v===a?v.splice(h,v.length):v),i?i(null,a,v,u):L.apply(a,v)})}function Ce(e){for(var t,n,i,o=e.length,a=r.relative[e[0].type],s=a||r.relative[" "],u=a?1:0,c=me(function(e){return e===t},s,!0),f=me(function(e){return O(t,e)>-1},s,!0),p=[function(e,n,r){var i=!a&&(r||n!==l)||((t=n).nodeType?c(e,n,r):f(e,n,r));return t=null,i}];u1&&xe(p),u>1&&ve(e.slice(0,u-1).concat({value:" "===e[u-2].type?"*":""})).replace(B,"$1"),n,u0,i=e.length>0,o=function(o,a,s,u,c){var f,h,y,v=0,m="0",x=o&&[],b=[],w=l,C=o||i&&r.find.TAG("*",c),E=T+=null==w?1:Math.random()||.1,k=C.length;for(c&&(l=a===d||a||c);m!==k&&null!=(f=C[m]);m++){if(i&&f){h=0,a||f.ownerDocument===d||(p(f),s=!g);while(y=e[h++])if(y(f,a||d,s)){u.push(f);break}c&&(T=E)}n&&((f=!y&&f)&&v--,o&&x.push(f))}if(v+=m,n&&m!==v){h=0;while(y=t[h++])y(x,b,a,s);if(o){if(v>0)while(m--)x[m]||b[m]||(b[m]=j.call(u));b=we(b)}L.apply(u,b),c&&!o&&b.length>0&&v+t.length>1&&oe.uniqueSort(u)}return c&&(T=E,l=w),x};return n?se(o):o}return s=oe.compile=function(e,t){var n,r=[],i=[],o=S[e+" "];if(!o){t||(t=a(e)),n=t.length;while(n--)(o=Ce(t[n]))[b]?r.push(o):i.push(o);(o=S(e,Ee(i,r))).selector=e}return o},u=oe.select=function(e,t,n,i){var o,u,l,c,f,p="function"==typeof e&&e,d=!i&&a(e=p.selector||e);if(n=n||[],1===d.length){if((u=d[0]=d[0].slice(0)).length>2&&"ID"===(l=u[0]).type&&9===t.nodeType&&g&&r.relative[u[1].type]){if(!(t=(r.find.ID(l.matches[0].replace(Z,ee),t)||[])[0]))return n;p&&(t=t.parentNode),e=e.slice(u.shift().value.length)}o=V.needsContext.test(e)?0:u.length;while(o--){if(l=u[o],r.relative[c=l.type])break;if((f=r.find[c])&&(i=f(l.matches[0].replace(Z,ee),K.test(u[0].type)&&ge(t.parentNode)||t))){if(u.splice(o,1),!(e=i.length&&ve(u)))return L.apply(n,i),n;break}}}return(p||s(e,d))(i,t,!g,n,!t||K.test(e)&&ge(t.parentNode)||t),n},n.sortStable=b.split("").sort(D).join("")===b,n.detectDuplicates=!!f,p(),n.sortDetached=ue(function(e){return 1&e.compareDocumentPosition(d.createElement("fieldset"))}),ue(function(e){return e.innerHTML=" ","#"===e.firstChild.getAttribute("href")})||le("type|href|height|width",function(e,t,n){if(!n)return e.getAttribute(t,"type"===t.toLowerCase()?1:2)}),n.attributes&&ue(function(e){return e.innerHTML=" ",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||le("value",function(e,t,n){if(!n&&"input"===e.nodeName.toLowerCase())return e.defaultValue}),ue(function(e){return null==e.getAttribute("disabled")})||le(P,function(e,t,n){var r;if(!n)return!0===e[t]?t.toLowerCase():(r=e.getAttributeNode(t))&&r.specified?r.value:null}),oe}(e);w.find=E,w.expr=E.selectors,w.expr[":"]=w.expr.pseudos,w.uniqueSort=w.unique=E.uniqueSort,w.text=E.getText,w.isXMLDoc=E.isXML,w.contains=E.contains,w.escapeSelector=E.escape;var k=function(e,t,n){var r=[],i=void 0!==n;while((e=e[t])&&9!==e.nodeType)if(1===e.nodeType){if(i&&w(e).is(n))break;r.push(e)}return r},S=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},D=w.expr.match.needsContext;function N(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}var A=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,t,n){return g(t)?w.grep(e,function(e,r){return!!t.call(e,r,e)!==n}):t.nodeType?w.grep(e,function(e){return e===t!==n}):"string"!=typeof t?w.grep(e,function(e){return u.call(t,e)>-1!==n}):w.filter(t,e,n)}w.filter=function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?w.find.matchesSelector(r,e)?[r]:[]:w.find.matches(e,w.grep(t,function(e){return 1===e.nodeType}))},w.fn.extend({find:function(e){var t,n,r=this.length,i=this;if("string"!=typeof e)return this.pushStack(w(e).filter(function(){for(t=0;t1?w.uniqueSort(n):n},filter:function(e){return this.pushStack(j(this,e||[],!1))},not:function(e){return this.pushStack(j(this,e||[],!0))},is:function(e){return!!j(this,"string"==typeof e&&D.test(e)?w(e):e||[],!1).length}});var q,L=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/;(w.fn.init=function(e,t,n){var i,o;if(!e)return this;if(n=n||q,"string"==typeof e){if(!(i="<"===e[0]&&">"===e[e.length-1]&&e.length>=3?[null,e,null]:L.exec(e))||!i[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(i[1]){if(t=t instanceof w?t[0]:t,w.merge(this,w.parseHTML(i[1],t&&t.nodeType?t.ownerDocument||t:r,!0)),A.test(i[1])&&w.isPlainObject(t))for(i in t)g(this[i])?this[i](t[i]):this.attr(i,t[i]);return this}return(o=r.getElementById(i[2]))&&(this[0]=o,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):g(e)?void 0!==n.ready?n.ready(e):e(w):w.makeArray(e,this)}).prototype=w.fn,q=w(r);var H=/^(?:parents|prev(?:Until|All))/,O={children:!0,contents:!0,next:!0,prev:!0};w.fn.extend({has:function(e){var t=w(e,this),n=t.length;return this.filter(function(){for(var e=0;e-1:1===n.nodeType&&w.find.matchesSelector(n,e))){o.push(n);break}return this.pushStack(o.length>1?w.uniqueSort(o):o)},index:function(e){return e?"string"==typeof e?u.call(w(e),this[0]):u.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(w.uniqueSort(w.merge(this.get(),w(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}});function P(e,t){while((e=e[t])&&1!==e.nodeType);return e}w.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return k(e,"parentNode")},parentsUntil:function(e,t,n){return k(e,"parentNode",n)},next:function(e){return P(e,"nextSibling")},prev:function(e){return P(e,"previousSibling")},nextAll:function(e){return k(e,"nextSibling")},prevAll:function(e){return k(e,"previousSibling")},nextUntil:function(e,t,n){return k(e,"nextSibling",n)},prevUntil:function(e,t,n){return k(e,"previousSibling",n)},siblings:function(e){return S((e.parentNode||{}).firstChild,e)},children:function(e){return S(e.firstChild)},contents:function(e){return N(e,"iframe")?e.contentDocument:(N(e,"template")&&(e=e.content||e),w.merge([],e.childNodes))}},function(e,t){w.fn[e]=function(n,r){var i=w.map(this,t,n);return"Until"!==e.slice(-5)&&(r=n),r&&"string"==typeof r&&(i=w.filter(r,i)),this.length>1&&(O[e]||w.uniqueSort(i),H.test(e)&&i.reverse()),this.pushStack(i)}});var M=/[^\x20\t\r\n\f]+/g;function R(e){var t={};return w.each(e.match(M)||[],function(e,n){t[n]=!0}),t}w.Callbacks=function(e){e="string"==typeof e?R(e):w.extend({},e);var t,n,r,i,o=[],a=[],s=-1,u=function(){for(i=i||e.once,r=t=!0;a.length;s=-1){n=a.shift();while(++s-1)o.splice(n,1),n<=s&&s--}),this},has:function(e){return e?w.inArray(e,o)>-1:o.length>0},empty:function(){return o&&(o=[]),this},disable:function(){return i=a=[],o=n="",this},disabled:function(){return!o},lock:function(){return i=a=[],n||t||(o=n=""),this},locked:function(){return!!i},fireWith:function(e,n){return i||(n=[e,(n=n||[]).slice?n.slice():n],a.push(n),t||u()),this},fire:function(){return l.fireWith(this,arguments),this},fired:function(){return!!r}};return l};function I(e){return e}function W(e){throw e}function $(e,t,n,r){var i;try{e&&g(i=e.promise)?i.call(e).done(t).fail(n):e&&g(i=e.then)?i.call(e,t,n):t.apply(void 0,[e].slice(r))}catch(e){n.apply(void 0,[e])}}w.extend({Deferred:function(t){var n=[["notify","progress",w.Callbacks("memory"),w.Callbacks("memory"),2],["resolve","done",w.Callbacks("once memory"),w.Callbacks("once memory"),0,"resolved"],["reject","fail",w.Callbacks("once memory"),w.Callbacks("once memory"),1,"rejected"]],r="pending",i={state:function(){return r},always:function(){return o.done(arguments).fail(arguments),this},"catch":function(e){return i.then(null,e)},pipe:function(){var e=arguments;return w.Deferred(function(t){w.each(n,function(n,r){var i=g(e[r[4]])&&e[r[4]];o[r[1]](function(){var e=i&&i.apply(this,arguments);e&&g(e.promise)?e.promise().progress(t.notify).done(t.resolve).fail(t.reject):t[r[0]+"With"](this,i?[e]:arguments)})}),e=null}).promise()},then:function(t,r,i){var o=0;function a(t,n,r,i){return function(){var s=this,u=arguments,l=function(){var e,l;if(!(t=o&&(r!==W&&(s=void 0,u=[e]),n.rejectWith(s,u))}};t?c():(w.Deferred.getStackHook&&(c.stackTrace=w.Deferred.getStackHook()),e.setTimeout(c))}}return w.Deferred(function(e){n[0][3].add(a(0,e,g(i)?i:I,e.notifyWith)),n[1][3].add(a(0,e,g(t)?t:I)),n[2][3].add(a(0,e,g(r)?r:W))}).promise()},promise:function(e){return null!=e?w.extend(e,i):i}},o={};return w.each(n,function(e,t){var a=t[2],s=t[5];i[t[1]]=a.add,s&&a.add(function(){r=s},n[3-e][2].disable,n[3-e][3].disable,n[0][2].lock,n[0][3].lock),a.add(t[3].fire),o[t[0]]=function(){return o[t[0]+"With"](this===o?void 0:this,arguments),this},o[t[0]+"With"]=a.fireWith}),i.promise(o),t&&t.call(o,o),o},when:function(e){var t=arguments.length,n=t,r=Array(n),i=o.call(arguments),a=w.Deferred(),s=function(e){return function(n){r[e]=this,i[e]=arguments.length>1?o.call(arguments):n,--t||a.resolveWith(r,i)}};if(t<=1&&($(e,a.done(s(n)).resolve,a.reject,!t),"pending"===a.state()||g(i[n]&&i[n].then)))return a.then();while(n--)$(i[n],s(n),a.reject);return a.promise()}});var B=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;w.Deferred.exceptionHook=function(t,n){e.console&&e.console.warn&&t&&B.test(t.name)&&e.console.warn("jQuery.Deferred exception: "+t.message,t.stack,n)},w.readyException=function(t){e.setTimeout(function(){throw t})};var F=w.Deferred();w.fn.ready=function(e){return F.then(e)["catch"](function(e){w.readyException(e)}),this},w.extend({isReady:!1,readyWait:1,ready:function(e){(!0===e?--w.readyWait:w.isReady)||(w.isReady=!0,!0!==e&&--w.readyWait>0||F.resolveWith(r,[w]))}}),w.ready.then=F.then;function _(){r.removeEventListener("DOMContentLoaded",_),e.removeEventListener("load",_),w.ready()}"complete"===r.readyState||"loading"!==r.readyState&&!r.documentElement.doScroll?e.setTimeout(w.ready):(r.addEventListener("DOMContentLoaded",_),e.addEventListener("load",_));var z=function(e,t,n,r,i,o,a){var s=0,u=e.length,l=null==n;if("object"===x(n)){i=!0;for(s in n)z(e,t,s,n[s],!0,o,a)}else if(void 0!==r&&(i=!0,g(r)||(a=!0),l&&(a?(t.call(e,r),t=null):(l=t,t=function(e,t,n){return l.call(w(e),n)})),t))for(;s1,null,!0)},removeData:function(e){return this.each(function(){K.remove(this,e)})}}),w.extend({queue:function(e,t,n){var r;if(e)return t=(t||"fx")+"queue",r=J.get(e,t),n&&(!r||Array.isArray(n)?r=J.access(e,t,w.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||"fx";var n=w.queue(e,t),r=n.length,i=n.shift(),o=w._queueHooks(e,t),a=function(){w.dequeue(e,t)};"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,a,o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return J.get(e,n)||J.access(e,n,{empty:w.Callbacks("once memory").add(function(){J.remove(e,[t+"queue",n])})})}}),w.fn.extend({queue:function(e,t){var n=2;return"string"!=typeof e&&(t=e,e="fx",n--),arguments.length\x20\t\r\n\f]+)/i,he=/^$|^module$|\/(?:java|ecma)script/i,ge={option:[1,""," "],thead:[1,""],col:[2,""],tr:[2,""],td:[3,""],_default:[0,"",""]};ge.optgroup=ge.option,ge.tbody=ge.tfoot=ge.colgroup=ge.caption=ge.thead,ge.th=ge.td;function ye(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&N(e,t)?w.merge([e],n):n}function ve(e,t){for(var n=0,r=e.length;n-1)i&&i.push(o);else if(l=w.contains(o.ownerDocument,o),a=ye(f.appendChild(o),"script"),l&&ve(a),n){c=0;while(o=a[c++])he.test(o.type||"")&&n.push(o)}return f}!function(){var e=r.createDocumentFragment().appendChild(r.createElement("div")),t=r.createElement("input");t.setAttribute("type","radio"),t.setAttribute("checked","checked"),t.setAttribute("name","t"),e.appendChild(t),h.checkClone=e.cloneNode(!0).cloneNode(!0).lastChild.checked,e.innerHTML="",h.noCloneChecked=!!e.cloneNode(!0).lastChild.defaultValue}();var be=r.documentElement,we=/^key/,Te=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Ce=/^([^.]*)(?:\.(.+)|)/;function Ee(){return!0}function ke(){return!1}function Se(){try{return r.activeElement}catch(e){}}function De(e,t,n,r,i,o){var a,s;if("object"==typeof t){"string"!=typeof n&&(r=r||n,n=void 0);for(s in t)De(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=ke;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return w().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=w.guid++)),e.each(function(){w.event.add(this,t,i,r,n)})}w.event={global:{},add:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,y=J.get(e);if(y){n.handler&&(n=(o=n).handler,i=o.selector),i&&w.find.matchesSelector(be,i),n.guid||(n.guid=w.guid++),(u=y.events)||(u=y.events={}),(a=y.handle)||(a=y.handle=function(t){return"undefined"!=typeof w&&w.event.triggered!==t.type?w.event.dispatch.apply(e,arguments):void 0}),l=(t=(t||"").match(M)||[""]).length;while(l--)d=g=(s=Ce.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=w.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=w.event.special[d]||{},c=w.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&w.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(e,r,h,a)||e.addEventListener&&e.addEventListener(d,a)),f.add&&(f.add.call(e,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),w.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,y=J.hasData(e)&&J.get(e);if(y&&(u=y.events)){l=(t=(t||"").match(M)||[""]).length;while(l--)if(s=Ce.exec(t[l])||[],d=g=s[1],h=(s[2]||"").split(".").sort(),d){f=w.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,y.handle)||w.removeEvent(e,d,y.handle),delete u[d])}else for(d in u)w.event.remove(e,d+t[l],n,r,!0);w.isEmptyObject(u)&&J.remove(e,"handle events")}},dispatch:function(e){var t=w.event.fix(e),n,r,i,o,a,s,u=new Array(arguments.length),l=(J.get(this,"events")||{})[t.type]||[],c=w.event.special[t.type]||{};for(u[0]=t,n=1;n=1))for(;l!==this;l=l.parentNode||this)if(1===l.nodeType&&("click"!==e.type||!0!==l.disabled)){for(o=[],a={},n=0;n-1:w.find(i,this,null,[l]).length),a[i]&&o.push(r);o.length&&s.push({elem:l,handlers:o})}return l=this,u\x20\t\r\n\f]*)[^>]*)\/>/gi,Ae=/
+```
+
+#### App.vue
+```js
+
+
+ Create a Transaction
+
+
+
+
+
+```
+
+
+
+#### Further read
+- [vue-rx](https://www.npmjs.com/package/vue-rx)
diff --git a/packages/site/themes/landscape/.gitignore b/packages/site/themes/landscape/.gitignore
new file mode 100644
index 0000000..6e3a08a
--- /dev/null
+++ b/packages/site/themes/landscape/.gitignore
@@ -0,0 +1,3 @@
+.DS_Store
+node_modules
+tmp
\ No newline at end of file
diff --git a/packages/site/themes/landscape/Gruntfile.js b/packages/site/themes/landscape/Gruntfile.js
new file mode 100644
index 0000000..59fd5df
--- /dev/null
+++ b/packages/site/themes/landscape/Gruntfile.js
@@ -0,0 +1,46 @@
+module.exports = function(grunt){
+ grunt.initConfig({
+ gitclone: {
+ fontawesome: {
+ options: {
+ repository: 'https://github.com/FortAwesome/Font-Awesome.git',
+ directory: 'tmp/fontawesome'
+ },
+ },
+ fancybox: {
+ options: {
+ repository: 'https://github.com/fancyapps/fancyBox.git',
+ directory: 'tmp/fancybox'
+ }
+ }
+ },
+ copy: {
+ fontawesome: {
+ expand: true,
+ cwd: 'tmp/fontawesome/fonts/',
+ src: ['**'],
+ dest: 'source/css/fonts/'
+ },
+ fancybox: {
+ expand: true,
+ cwd: 'tmp/fancybox/source/',
+ src: ['**'],
+ dest: 'source/fancybox/'
+ }
+ },
+ _clean: {
+ tmp: ['tmp'],
+ fontawesome: ['source/css/fonts'],
+ fancybox: ['source/fancybox']
+ }
+ });
+
+ require('load-grunt-tasks')(grunt);
+
+ grunt.renameTask('clean', '_clean');
+
+ grunt.registerTask('fontawesome', ['gitclone:fontawesome', 'copy:fontawesome', '_clean:tmp']);
+ grunt.registerTask('fancybox', ['gitclone:fancybox', 'copy:fancybox', '_clean:tmp']);
+ grunt.registerTask('default', ['gitclone', 'copy', '_clean:tmp']);
+ grunt.registerTask('clean', ['_clean']);
+};
\ No newline at end of file
diff --git a/packages/site/themes/landscape/LICENSE b/packages/site/themes/landscape/LICENSE
new file mode 100644
index 0000000..9ce4d32
--- /dev/null
+++ b/packages/site/themes/landscape/LICENSE
@@ -0,0 +1,7 @@
+Copyright (c) 2013 Tommy Chen
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
\ No newline at end of file
diff --git a/packages/site/themes/landscape/README.md b/packages/site/themes/landscape/README.md
new file mode 100644
index 0000000..90ecccd
--- /dev/null
+++ b/packages/site/themes/landscape/README.md
@@ -0,0 +1,112 @@
+# Landscape
+
+A brand new default theme for [Hexo].
+
+- [Preview](http://hexo.io/hexo-theme-landscape/)
+
+## Installation
+
+### Install
+
+``` bash
+$ git clone https://github.com/hexojs/hexo-theme-landscape.git themes/landscape
+```
+
+**Landscape requires Hexo 2.4 and above.** If you would like to enable the RSS, the [hexo-generate-feed] plugin is also required.
+
+### Enable
+
+Modify `theme` setting in `_config.yml` to `landscape`.
+
+### Update
+
+``` bash
+cd themes/landscape
+git pull
+```
+
+## Configuration
+
+``` yml
+# Header
+menu:
+ Home: /
+ Archives: /archives
+rss: /atom.xml
+
+# Content
+excerpt_link: Read More
+fancybox: true
+
+# Sidebar
+sidebar: right
+widgets:
+- category
+- tag
+- tagcloud
+- archives
+- recent_posts
+
+# Miscellaneous
+google_analytics:
+favicon: /favicon.png
+twitter:
+google_plus:
+```
+
+- **menu** - Navigation menu
+- **rss** - RSS link
+- **excerpt_link** - "Read More" link at the bottom of excerpted articles. `false` to hide the link.
+- **fancybox** - Enable [Fancybox]
+- **sidebar** - Sidebar style. You can choose `left`, `right`, `bottom` or `false`.
+- **widgets** - Widgets displaying in sidebar
+- **google_analytics** - Google Analytics ID
+- **favicon** - Favicon path
+- **twitter** - Twiiter ID
+- **google_plus** - Google+ ID
+
+## Features
+
+### Fancybox
+
+Landscape uses [Fancybox] to showcase your photos. You can use Markdown syntax or fancybox tag plugin to add your photos.
+
+```
+![img caption](img url)
+
+{% fancybox img_url [img_thumbnail] [img_caption] %}
+```
+
+### Sidebar
+
+You can put your sidebar in left side, right side or bottom of your site by editing `sidebar` setting.
+
+Landscape provides 5 built-in widgets:
+
+- category
+- tag
+- tagcloud
+- archives
+- recent_posts
+
+All of them are enabled by default. You can edit them in `widget` setting.
+
+## Development
+
+### Requirements
+
+- [Grunt] 0.4+
+- Hexo 2.4+
+
+### Grunt tasks
+
+- **default** - Download [Fancybox] and [Font Awesome].
+- **fontawesome** - Only download [Font Awesome].
+- **fancybox** - Only download [Fancybox].
+- **clean** - Clean temporarily files and downloaded files.
+
+[Hexo]: https://hexo.io/
+[Fancybox]: http://fancyapps.com/fancybox/
+[Font Awesome]: http://fontawesome.io/
+[Grunt]: http://gruntjs.com/
+[hexo-generate-feed]: https://github.com/hexojs/hexo-generator-feed
diff --git a/packages/site/themes/landscape/_config.yml b/packages/site/themes/landscape/_config.yml
new file mode 100644
index 0000000..ca22374
--- /dev/null
+++ b/packages/site/themes/landscape/_config.yml
@@ -0,0 +1,37 @@
+# Header
+menu:
+ Home: /
+ Archives: /archives
+rss: /atom.xml
+
+# Content
+excerpt_link: Read More
+fancybox: true
+
+# Sidebar
+sidebar: right
+widgets:
+- category
+- tag
+- tagcloud
+- archive
+- recent_posts
+
+# display widgets at the bottom of index pages (pagination == 2)
+index_widgets:
+# - category
+# - tagcloud
+# - archive
+
+# widget behavior
+archive_type: 'monthly'
+show_count: false
+
+# Miscellaneous
+google_analytics:
+gauges_analytics:
+favicon: /favicon.png
+twitter:
+google_plus:
+fb_admins:
+fb_app_id:
diff --git a/packages/site/themes/landscape/languages/de.yml b/packages/site/themes/landscape/languages/de.yml
new file mode 100644
index 0000000..630055f
--- /dev/null
+++ b/packages/site/themes/landscape/languages/de.yml
@@ -0,0 +1,19 @@
+categories: Kategorien
+search: Suche
+tags: Tags
+tagcloud: Tag Cloud
+tweets: Tweets
+prev: zurück
+next: weiter
+comment: Kommentare
+archive_a: Archiv
+archive_b: "Archive: %s"
+page: Seite %d
+recent_posts: letzter Beitrag
+newer: Neuer
+older: Älter
+share: Teilen
+powered_by: Powered by
+rss_feed: RSS Feed
+category: Kategorie
+tag: Tag
diff --git a/packages/site/themes/landscape/languages/default.yml b/packages/site/themes/landscape/languages/default.yml
new file mode 100644
index 0000000..3ef7e92
--- /dev/null
+++ b/packages/site/themes/landscape/languages/default.yml
@@ -0,0 +1,19 @@
+categories: Categories
+search: Search
+tags: Tags
+tagcloud: Tag Cloud
+tweets: Tweets
+prev: Prev
+next: Next
+comment: Comments
+archive_a: Archives
+archive_b: "Archives: %s"
+page: Page %d
+recent_posts: Recent Posts
+newer: Newer
+older: Older
+share: Share
+powered_by: Powered by
+rss_feed: RSS Feed
+category: Category
+tag: Tag
\ No newline at end of file
diff --git a/packages/site/themes/landscape/languages/es.yml b/packages/site/themes/landscape/languages/es.yml
new file mode 100644
index 0000000..d862e87
--- /dev/null
+++ b/packages/site/themes/landscape/languages/es.yml
@@ -0,0 +1,19 @@
+categories: Categorías
+search: Buscar
+tags: Tags
+tagcloud: Nube de Tags
+tweets: Tweets
+prev: Previo
+next: Siguiente
+comment: Comentarios
+archive_a: Archivos
+archive_b: "Archivos: %s"
+page: Página %d
+recent_posts: Posts recientes
+newer: Nuevo
+older: Viejo
+share: Compartir
+powered_by: Construido por
+rss_feed: RSS
+category: Categoría
+tag: Tag
\ No newline at end of file
diff --git a/packages/site/themes/landscape/languages/fr.yml b/packages/site/themes/landscape/languages/fr.yml
new file mode 100644
index 0000000..c84f51b
--- /dev/null
+++ b/packages/site/themes/landscape/languages/fr.yml
@@ -0,0 +1,19 @@
+categories: Catégories
+search: Rechercher
+tags: Mot-clés
+tagcloud: Nuage de mot-clés
+tweets: Tweets
+prev: Précédent
+next: Suivant
+comment: Commentaires
+archive_a: Archives
+archive_b: "Archives: %s"
+page: Page %d
+recent_posts: Articles récents
+newer: Récent
+older: Ancien
+share: Partager
+powered_by: Propulsé par
+rss_feed: Flux RSS
+category: Catégorie
+tag: Mot-clé
diff --git a/packages/site/themes/landscape/languages/ja.yml b/packages/site/themes/landscape/languages/ja.yml
new file mode 100644
index 0000000..af0f7fe
--- /dev/null
+++ b/packages/site/themes/landscape/languages/ja.yml
@@ -0,0 +1,19 @@
+categories: カテゴリ
+search: 検索
+tags: タグ
+tagcloud: タグクラウド
+tweets: ツイート
+prev: 戻る
+next: 次へ
+comment: コメント
+archive_a: アーカイブ
+archive_b: "アーカイブ: %s"
+page: ページ %d
+recent_posts: 最近の投稿
+newer: 次の記事
+older: 前の記事
+share: 共有
+powered_by: Powered by
+rss_feed: RSSフィード
+category: カテゴリ
+tag: タグ
diff --git a/packages/site/themes/landscape/languages/ko.yml b/packages/site/themes/landscape/languages/ko.yml
new file mode 100644
index 0000000..1d27b43
--- /dev/null
+++ b/packages/site/themes/landscape/languages/ko.yml
@@ -0,0 +1,19 @@
+categories: 카테고리
+search: 검색
+tags: 태그
+tagcloud: 태그 클라우드
+tweets: 트윗
+prev: 이전
+next: 다음
+comment: 댓글
+archive_a: 아카이브
+archive_b: "아카이브: %s"
+page: 페이지 %d
+recent_posts: 최근 포스트
+newer: 최신
+older: 이전
+share: 공유
+powered_by: Powered by
+rss_feed: RSS Feed
+category: 카테고리
+tag: 태그
diff --git a/packages/site/themes/landscape/languages/nl.yml b/packages/site/themes/landscape/languages/nl.yml
new file mode 100644
index 0000000..568d33e
--- /dev/null
+++ b/packages/site/themes/landscape/languages/nl.yml
@@ -0,0 +1,20 @@
+
+categories: Categorieën
+search: Zoeken
+tags: Labels
+tagcloud: Tag Cloud
+tweets: Tweets
+prev: Vorige
+next: Volgende
+comment: Commentaren
+archive_a: Archieven
+archive_b: "Archieven: %s"
+page: Pagina %d
+recent_posts: Recente berichten
+newer: Nieuwer
+older: Ouder
+share: Delen
+powered_by: Powered by
+rss_feed: RSS Feed
+category: Categorie
+tag: Label
diff --git a/packages/site/themes/landscape/languages/no.yml b/packages/site/themes/landscape/languages/no.yml
new file mode 100644
index 0000000..b997691
--- /dev/null
+++ b/packages/site/themes/landscape/languages/no.yml
@@ -0,0 +1,19 @@
+categories: Kategorier
+search: Søk
+tags: Tags
+tagcloud: Tag Cloud
+tweets: Tweets
+prev: Forrige
+next: Neste
+comment: Kommentarer
+archive_a: Arkiv
+archive_b: "Arkiv: %s"
+page: Side %d
+recent_posts: Siste innlegg
+newer: Newer
+older: Older
+share: Share
+powered_by: Powered by
+rss_feed: RSS Feed
+category: Category
+tag: Tag
\ No newline at end of file
diff --git a/packages/site/themes/landscape/languages/pt.yml b/packages/site/themes/landscape/languages/pt.yml
new file mode 100644
index 0000000..3d74af3
--- /dev/null
+++ b/packages/site/themes/landscape/languages/pt.yml
@@ -0,0 +1,19 @@
+categories: Categorias
+search: Buscar
+tags: Tags
+tagcloud: Nuvem de Tags
+tweets: Tweets
+prev: Anterior
+next: Próximo
+comment: Comentários
+archive_a: Arquivos
+archive_b: "Arquivos: %s"
+page: Página %d
+recent_posts: Postagens Recentes
+newer: Mais Recente
+older: Mais Antigo
+share: Compartilhar
+powered_by: Desenvolvido por
+rss_feed: Feed RSS
+category: Categoria
+tag: Tag
diff --git a/packages/site/themes/landscape/languages/ru.yml b/packages/site/themes/landscape/languages/ru.yml
new file mode 100644
index 0000000..625a83c
--- /dev/null
+++ b/packages/site/themes/landscape/languages/ru.yml
@@ -0,0 +1,19 @@
+categories: Категории
+search: Поиск
+tags: Метки
+tagcloud: Облако меток
+tweets: Твиты
+prev: Назад
+next: Вперед
+comment: Комментарии
+archive_a: Архив
+archive_b: "Архив: %s"
+page: Страница %d
+recent_posts: Недавние записи
+newer: Следующий
+older: Предыдущий
+share: Поделиться
+powered_by: Создано с помощью
+rss_feed: RSS-каналы
+category: Категория
+tag: Метка
\ No newline at end of file
diff --git a/packages/site/themes/landscape/languages/zh-CN.yml b/packages/site/themes/landscape/languages/zh-CN.yml
new file mode 100644
index 0000000..51e1321
--- /dev/null
+++ b/packages/site/themes/landscape/languages/zh-CN.yml
@@ -0,0 +1,19 @@
+categories: 分类
+search: 搜索
+tags: 标签
+tagcloud: 标签云
+tweets: 推文
+prev: 上一页
+next: 下一页
+comment: 留言
+archive_a: 归档
+archive_b: 归档:%s
+page: 第 %d 页
+recent_posts: 最新文章
+newer: Newer
+older: Older
+share: Share
+powered_by: Powered by
+rss_feed: RSS Feed
+category: Category
+tag: Tag
\ No newline at end of file
diff --git a/packages/site/themes/landscape/languages/zh-TW.yml b/packages/site/themes/landscape/languages/zh-TW.yml
new file mode 100644
index 0000000..76d2916
--- /dev/null
+++ b/packages/site/themes/landscape/languages/zh-TW.yml
@@ -0,0 +1,19 @@
+categories: 分類
+search: 搜尋
+tags: 標籤
+tagcloud: 標籤雲
+tweets: 推文
+prev: 上一頁
+next: 下一頁
+comment: 留言
+archive_a: 彙整
+archive_b: 彙整:%s
+page: 第 %d 頁
+recent_posts: 最新文章
+newer: Newer
+older: Older
+share: Share
+powered_by: Powered by
+rss_feed: RSS Feed
+category: Category
+tag: Tag
\ No newline at end of file
diff --git a/packages/site/themes/landscape/layout/_partial/after-footer.ejs b/packages/site/themes/landscape/layout/_partial/after-footer.ejs
new file mode 100644
index 0000000..ff2d509
--- /dev/null
+++ b/packages/site/themes/landscape/layout/_partial/after-footer.ejs
@@ -0,0 +1,25 @@
+<% if (config.disqus_shortname){ %>
+
+<% } %>
+
+
+
+<% if (theme.fancybox){ %>
+ <%- css('fancybox/jquery.fancybox') %>
+ <%- js('fancybox/jquery.fancybox.pack') %>
+<% } %>
+
+<%- js('js/script') %>
+<%- partial('gauges-analytics') %>
diff --git a/packages/site/themes/landscape/layout/_partial/archive-post.ejs b/packages/site/themes/landscape/layout/_partial/archive-post.ejs
new file mode 100644
index 0000000..36f2cc3
--- /dev/null
+++ b/packages/site/themes/landscape/layout/_partial/archive-post.ejs
@@ -0,0 +1,8 @@
+
+
+
+ <%- partial('post/date', {class_name: 'archive-article-date', date_format: 'MMM D'}) %>
+ <%- partial('post/title', {class_name: 'archive-article-title'}) %>
+
+
+
\ No newline at end of file
diff --git a/packages/site/themes/landscape/layout/_partial/archive.ejs b/packages/site/themes/landscape/layout/_partial/archive.ejs
new file mode 100644
index 0000000..9da934a
--- /dev/null
+++ b/packages/site/themes/landscape/layout/_partial/archive.ejs
@@ -0,0 +1,34 @@
+<% if (pagination == 2){ %>
+ <% page.posts.each(function(post){ %>
+ <%- partial('article', {post: post, index: true}) %>
+ <% }) %>
+<% } else { %>
+ <% var last; %>
+ <% page.posts.each(function(post, i){ %>
+ <% var year = post.date.year(); %>
+ <% if (last != year){ %>
+ <% if (last != null){ %>
+
+ <% } %>
+ <% last = year; %>
+
+
+
+ <% } %>
+ <%- partial('archive-post', {post: post, even: i % 2 == 0}) %>
+ <% }) %>
+ <% if (page.posts.length){ %>
+
+ <% } %>
+<% } %>
+<% if (page.total > 1){ %>
+
+ <% var prev_text = "« " + __('prev');var next_text = __('next') + " »"%>
+ <%- paginator({
+ prev_text: prev_text,
+ next_text: next_text
+ }) %>
+
+<% } %>
diff --git a/packages/site/themes/landscape/layout/_partial/article.ejs b/packages/site/themes/landscape/layout/_partial/article.ejs
new file mode 100644
index 0000000..0f951a9
--- /dev/null
+++ b/packages/site/themes/landscape/layout/_partial/article.ejs
@@ -0,0 +1,44 @@
+
+
+ <%- partial('post/date', {class_name: 'article-date', date_format: null}) %>
+ <%- partial('post/category') %>
+
+
+ <%- partial('post/gallery') %>
+ <% if (post.link || post.title){ %>
+
+ <%- partial('post/title', {class_name: 'article-title'}) %>
+
+ <% } %>
+
+ <% if (post.excerpt && index){ %>
+ <%- post.excerpt %>
+ <% if (theme.excerpt_link){ %>
+
+ <%= theme.excerpt_link %>
+
+ <% } %>
+ <% } else { %>
+ <%- post.content %>
+ <% } %>
+
+
+
+ <% if (!index){ %>
+ <%- partial('post/nav') %>
+ <% } %>
+
+
+<% if (!index && post.comments && config.disqus_shortname){ %>
+
+<% } %>
\ No newline at end of file
diff --git a/packages/site/themes/landscape/layout/_partial/footer.ejs b/packages/site/themes/landscape/layout/_partial/footer.ejs
new file mode 100644
index 0000000..3aca618
--- /dev/null
+++ b/packages/site/themes/landscape/layout/_partial/footer.ejs
@@ -0,0 +1,11 @@
+
\ No newline at end of file
diff --git a/packages/site/themes/landscape/layout/_partial/gauges-analytics.ejs b/packages/site/themes/landscape/layout/_partial/gauges-analytics.ejs
new file mode 100644
index 0000000..d64be38
--- /dev/null
+++ b/packages/site/themes/landscape/layout/_partial/gauges-analytics.ejs
@@ -0,0 +1,18 @@
+<% if (theme.gauges_analytics){ %>
+
+
+
+<% } %>
diff --git a/packages/site/themes/landscape/layout/_partial/google-analytics.ejs b/packages/site/themes/landscape/layout/_partial/google-analytics.ejs
new file mode 100644
index 0000000..84e75f0
--- /dev/null
+++ b/packages/site/themes/landscape/layout/_partial/google-analytics.ejs
@@ -0,0 +1,14 @@
+<% if (theme.google_analytics){ %>
+
+
+
+<% } %>
diff --git a/packages/site/themes/landscape/layout/_partial/head.ejs b/packages/site/themes/landscape/layout/_partial/head.ejs
new file mode 100644
index 0000000..43d5f93
--- /dev/null
+++ b/packages/site/themes/landscape/layout/_partial/head.ejs
@@ -0,0 +1,36 @@
+
+
+
+
+ <%- partial('google-analytics') %>
+ <%
+ var title = page.title;
+
+ if (is_archive()){
+ title = __('archive_a');
+
+ if (is_month()){
+ title += ': ' + page.year + '/' + page.month;
+ } else if (is_year()){
+ title += ': ' + page.year;
+ }
+ } else if (is_category()){
+ title = __('category') + ': ' + page.category;
+ } else if (is_tag()){
+ title = __('tag') + ': ' + page.tag;
+ }
+ %>
+ <% if (title){ %><%= title %> | <% } %><%= config.title %>
+
+ <%- open_graph({twitter_id: theme.twitter, google_plus: theme.google_plus, fb_admins: theme.fb_admins, fb_app_id: theme.fb_app_id}) %>
+ <% if (theme.rss){ %>
+
+ <% } %>
+ <% if (theme.favicon){ %>
+
+ <% } %>
+ <% if (config.highlight.enable){ %>
+
+ <% } %>
+ <%- css('css/style') %>
+
diff --git a/packages/site/themes/landscape/layout/_partial/header.ejs b/packages/site/themes/landscape/layout/_partial/header.ejs
new file mode 100644
index 0000000..e8a305e
--- /dev/null
+++ b/packages/site/themes/landscape/layout/_partial/header.ejs
@@ -0,0 +1,32 @@
+
\ No newline at end of file
diff --git a/packages/site/themes/landscape/layout/_partial/mobile-nav.ejs b/packages/site/themes/landscape/layout/_partial/mobile-nav.ejs
new file mode 100644
index 0000000..7c1d2af
--- /dev/null
+++ b/packages/site/themes/landscape/layout/_partial/mobile-nav.ejs
@@ -0,0 +1,5 @@
+
+ <% for (var i in theme.menu){ %>
+ <%= i %>
+ <% } %>
+
\ No newline at end of file
diff --git a/packages/site/themes/landscape/layout/_partial/post/category.ejs b/packages/site/themes/landscape/layout/_partial/post/category.ejs
new file mode 100644
index 0000000..db2ed48
--- /dev/null
+++ b/packages/site/themes/landscape/layout/_partial/post/category.ejs
@@ -0,0 +1,10 @@
+<% if (post.categories && post.categories.length){ %>
+
+ <%- list_categories(post.categories, {
+ show_count: false,
+ class: 'article-category',
+ style: 'none',
+ separator: '►'
+ }) %>
+
+<% } %>
\ No newline at end of file
diff --git a/packages/site/themes/landscape/layout/_partial/post/date.ejs b/packages/site/themes/landscape/layout/_partial/post/date.ejs
new file mode 100644
index 0000000..3f49613
--- /dev/null
+++ b/packages/site/themes/landscape/layout/_partial/post/date.ejs
@@ -0,0 +1,3 @@
+
+ <%= date(post.date, date_format) %>
+
\ No newline at end of file
diff --git a/packages/site/themes/landscape/layout/_partial/post/gallery.ejs b/packages/site/themes/landscape/layout/_partial/post/gallery.ejs
new file mode 100644
index 0000000..886c8ec
--- /dev/null
+++ b/packages/site/themes/landscape/layout/_partial/post/gallery.ejs
@@ -0,0 +1,11 @@
+<% if (post.photos && post.photos.length){ %>
+
+
+ <% post.photos.forEach(function(photo, i){ %>
+
+
+
+ <% }) %>
+
+
+<% } %>
\ No newline at end of file
diff --git a/packages/site/themes/landscape/layout/_partial/post/nav.ejs b/packages/site/themes/landscape/layout/_partial/post/nav.ejs
new file mode 100644
index 0000000..720798a
--- /dev/null
+++ b/packages/site/themes/landscape/layout/_partial/post/nav.ejs
@@ -0,0 +1,22 @@
+<% if (post.prev || post.next){ %>
+
+ <% if (post.prev){ %>
+
+ <%= __('newer') %>
+
+ <% if (post.prev.title){ %>
+ <%= post.prev.title %>
+ <% } else { %>
+ (no title)
+ <% } %>
+
+
+ <% } %>
+ <% if (post.next){ %>
+
+ <%= __('older') %>
+ <%= post.next.title %>
+
+ <% } %>
+
+<% } %>
\ No newline at end of file
diff --git a/packages/site/themes/landscape/layout/_partial/post/tag.ejs b/packages/site/themes/landscape/layout/_partial/post/tag.ejs
new file mode 100644
index 0000000..e0f327f
--- /dev/null
+++ b/packages/site/themes/landscape/layout/_partial/post/tag.ejs
@@ -0,0 +1,6 @@
+<% if (post.tags && post.tags.length){ %>
+ <%- list_tags(post.tags, {
+ show_count: false,
+ class: 'article-tag'
+ }) %>
+<% } %>
\ No newline at end of file
diff --git a/packages/site/themes/landscape/layout/_partial/post/title.ejs b/packages/site/themes/landscape/layout/_partial/post/title.ejs
new file mode 100644
index 0000000..69d646f
--- /dev/null
+++ b/packages/site/themes/landscape/layout/_partial/post/title.ejs
@@ -0,0 +1,15 @@
+<% if (post.link){ %>
+
+<% } else if (post.title){ %>
+ <% if (index){ %>
+
+ <% } else { %>
+
+ <%= post.title %>
+
+ <% } %>
+<% } %>
\ No newline at end of file
diff --git a/packages/site/themes/landscape/layout/_partial/sidebar.ejs b/packages/site/themes/landscape/layout/_partial/sidebar.ejs
new file mode 100644
index 0000000..c1e48e5
--- /dev/null
+++ b/packages/site/themes/landscape/layout/_partial/sidebar.ejs
@@ -0,0 +1,5 @@
+
\ No newline at end of file
diff --git a/packages/site/themes/landscape/layout/_widget/archive.ejs b/packages/site/themes/landscape/layout/_widget/archive.ejs
new file mode 100644
index 0000000..a20c58c
--- /dev/null
+++ b/packages/site/themes/landscape/layout/_widget/archive.ejs
@@ -0,0 +1,8 @@
+<% if (site.posts.length){ %>
+
+<% } %>
diff --git a/packages/site/themes/landscape/layout/_widget/category.ejs b/packages/site/themes/landscape/layout/_widget/category.ejs
new file mode 100644
index 0000000..8d9e5e9
--- /dev/null
+++ b/packages/site/themes/landscape/layout/_widget/category.ejs
@@ -0,0 +1,8 @@
+<% if (site.categories.length){ %>
+
+<% } %>
diff --git a/packages/site/themes/landscape/layout/_widget/recent_posts.ejs b/packages/site/themes/landscape/layout/_widget/recent_posts.ejs
new file mode 100644
index 0000000..7a38547
--- /dev/null
+++ b/packages/site/themes/landscape/layout/_widget/recent_posts.ejs
@@ -0,0 +1,14 @@
+<% if (site.posts.length){ %>
+
+<% } %>
\ No newline at end of file
diff --git a/packages/site/themes/landscape/layout/_widget/tag.ejs b/packages/site/themes/landscape/layout/_widget/tag.ejs
new file mode 100644
index 0000000..ea5fb2c
--- /dev/null
+++ b/packages/site/themes/landscape/layout/_widget/tag.ejs
@@ -0,0 +1,8 @@
+<% if (site.tags.length){ %>
+
+<% } %>
diff --git a/packages/site/themes/landscape/layout/_widget/tagcloud.ejs b/packages/site/themes/landscape/layout/_widget/tagcloud.ejs
new file mode 100644
index 0000000..5feb435
--- /dev/null
+++ b/packages/site/themes/landscape/layout/_widget/tagcloud.ejs
@@ -0,0 +1,8 @@
+<% if (site.tags.length){ %>
+
+<% } %>
\ No newline at end of file
diff --git a/packages/site/themes/landscape/layout/archive.ejs b/packages/site/themes/landscape/layout/archive.ejs
new file mode 100644
index 0000000..52f9b21
--- /dev/null
+++ b/packages/site/themes/landscape/layout/archive.ejs
@@ -0,0 +1 @@
+<%- partial('_partial/archive', {pagination: config.archive, index: true}) %>
\ No newline at end of file
diff --git a/packages/site/themes/landscape/layout/category.ejs b/packages/site/themes/landscape/layout/category.ejs
new file mode 100644
index 0000000..3ffe252
--- /dev/null
+++ b/packages/site/themes/landscape/layout/category.ejs
@@ -0,0 +1 @@
+<%- partial('_partial/archive', {pagination: config.category, index: true}) %>
\ No newline at end of file
diff --git a/packages/site/themes/landscape/layout/index.ejs b/packages/site/themes/landscape/layout/index.ejs
new file mode 100644
index 0000000..60a2c68
--- /dev/null
+++ b/packages/site/themes/landscape/layout/index.ejs
@@ -0,0 +1 @@
+<%- partial('_partial/archive', {pagination: 2, index: true}) %>
\ No newline at end of file
diff --git a/packages/site/themes/landscape/layout/layout.ejs b/packages/site/themes/landscape/layout/layout.ejs
new file mode 100644
index 0000000..cf88daf
--- /dev/null
+++ b/packages/site/themes/landscape/layout/layout.ejs
@@ -0,0 +1,18 @@
+<%- partial('_partial/head') %>
+
+
+
+ <%- partial('_partial/header', null, {cache: !config.relative_link}) %>
+
+
+ <% if (theme.sidebar && theme.sidebar !== 'bottom'){ %>
+ <%- partial('_partial/sidebar', null, {cache: !config.relative_link}) %>
+ <% } %>
+
+ <%- partial('_partial/footer', null, {cache: !config.relative_link}) %>
+
+ <%- partial('_partial/mobile-nav', null, {cache: !config.relative_link}) %>
+ <%- partial('_partial/after-footer') %>
+
+
+
\ No newline at end of file
diff --git a/packages/site/themes/landscape/layout/page.ejs b/packages/site/themes/landscape/layout/page.ejs
new file mode 100644
index 0000000..bea6318
--- /dev/null
+++ b/packages/site/themes/landscape/layout/page.ejs
@@ -0,0 +1 @@
+<%- partial('_partial/article', {post: page, index: false}) %>
\ No newline at end of file
diff --git a/packages/site/themes/landscape/layout/post.ejs b/packages/site/themes/landscape/layout/post.ejs
new file mode 100644
index 0000000..bea6318
--- /dev/null
+++ b/packages/site/themes/landscape/layout/post.ejs
@@ -0,0 +1 @@
+<%- partial('_partial/article', {post: page, index: false}) %>
\ No newline at end of file
diff --git a/packages/site/themes/landscape/layout/tag.ejs b/packages/site/themes/landscape/layout/tag.ejs
new file mode 100644
index 0000000..048cdb0
--- /dev/null
+++ b/packages/site/themes/landscape/layout/tag.ejs
@@ -0,0 +1 @@
+<%- partial('_partial/archive', {pagination: config.tag, index: true}) %>
\ No newline at end of file
diff --git a/packages/site/themes/landscape/package.json b/packages/site/themes/landscape/package.json
new file mode 100644
index 0000000..ac0df3d
--- /dev/null
+++ b/packages/site/themes/landscape/package.json
@@ -0,0 +1,12 @@
+{
+ "name": "hexo-theme-landscape",
+ "version": "0.0.2",
+ "private": true,
+ "devDependencies": {
+ "grunt": "~0.4.2",
+ "load-grunt-tasks": "~0.2.0",
+ "grunt-git": "~0.2.2",
+ "grunt-contrib-clean": "~0.5.0",
+ "grunt-contrib-copy": "~0.4.1"
+ }
+}
diff --git a/packages/site/themes/landscape/scripts/fancybox.js b/packages/site/themes/landscape/scripts/fancybox.js
new file mode 100644
index 0000000..83f1fdc
--- /dev/null
+++ b/packages/site/themes/landscape/scripts/fancybox.js
@@ -0,0 +1,24 @@
+var rUrl = /((([A-Za-z]{3,9}:(?:\/\/)?)(?:[-;:&=\+\$,\w]+@)?[A-Za-z0-9.-]+|(?:www.|[-;:&=\+\$,\w]+@)[A-Za-z0-9.-]+)((?:\/[\+~%\/.\w-_]*)?\??(?:[-\+=&;%@.\w_]*)#?(?:[.\!\/\\w]*))?)/;
+
+/**
+* Fancybox tag
+*
+* Syntax:
+* {% fancybox /path/to/image [/path/to/thumbnail] [title] %}
+*/
+
+hexo.extend.tag.register('fancybox', function(args){
+ var original = args.shift(),
+ thumbnail = '';
+
+ if (args.length && rUrl.test(args[0])){
+ thumbnail = args.shift();
+ }
+
+ var title = args.join(' ');
+
+ return '' +
+ ' '
+ ' ' +
+ (title ? '' + title + ' ' : '');
+});
\ No newline at end of file
diff --git a/packages/site/themes/landscape/source/css/_extend.styl b/packages/site/themes/landscape/source/css/_extend.styl
new file mode 100644
index 0000000..96a1817
--- /dev/null
+++ b/packages/site/themes/landscape/source/css/_extend.styl
@@ -0,0 +1,63 @@
+$block-caption
+ text-decoration: none
+ text-transform: uppercase
+ letter-spacing: 2px
+ color: color-grey
+ margin-bottom: 1em
+ margin-left: 5px
+ line-height: 1em
+ text-shadow: 0 1px #fff
+ font-weight: bold
+
+$block
+ background: #fff
+ box-shadow: 1px 2px 3px #ddd
+ border: 1px solid color-border
+ border-radius: 3px
+
+$base-style
+ h1
+ font-size: 2em
+ h2
+ font-size: 1.5em
+ h3
+ font-size: 1.3em
+ h4
+ font-size: 1.2em
+ h5
+ font-size: 1em
+ h6
+ font-size: 1em
+ color: color-grey
+ hr
+ border: 1px dashed color-border
+ strong
+ font-weight: bold
+ em, cite
+ font-style: italic
+ sup, sub
+ font-size: 0.75em
+ line-height: 0
+ position: relative
+ vertical-align: baseline
+ sup
+ top: -0.5em
+ sub
+ bottom: -0.2em
+ small
+ font-size: 0.85em
+ acronym, abbr
+ border-bottom: 1px dotted
+ ul, ol, dl
+ margin: 0 20px
+ line-height: line-height
+ ul, ol
+ ul, ol
+ margin-top: 0
+ margin-bottom: 0
+ ul
+ list-style: disc
+ ol
+ list-style: decimal
+ dt
+ font-weight: bold
\ No newline at end of file
diff --git a/packages/site/themes/landscape/source/css/_partial/archive.styl b/packages/site/themes/landscape/source/css/_partial/archive.styl
new file mode 100644
index 0000000..90ef053
--- /dev/null
+++ b/packages/site/themes/landscape/source/css/_partial/archive.styl
@@ -0,0 +1,80 @@
+.archives-wrap
+ margin: block-margin 0
+
+.archives
+ clearfix()
+
+.archive-year-wrap
+ margin-bottom: 1em
+
+.archive-year
+ @extend $block-caption
+
+.archives
+ column-gap: 10px
+ @media mq-tablet
+ column-count: 2
+ @media mq-normal
+ column-count: 3
+
+.archive-article
+ avoid-column-break()
+
+.archive-article-inner
+ @extend $block
+ padding: 10px
+ margin-bottom: 15px
+
+.archive-article-title
+ text-decoration: none
+ font-weight: bold
+ color: color-default
+ transition: color 0.2s
+ line-height: line-height
+ &:hover
+ color: color-link
+
+.archive-article-footer
+ margin-top: 1em
+
+.archive-article-date
+ color: color-grey
+ text-decoration: none
+ font-size: 0.85em
+ line-height: 1em
+ margin-bottom: 0.5em
+ display: block
+
+#page-nav
+ clearfix()
+ margin: block-margin auto
+ background: #fff
+ box-shadow: 1px 2px 3px #ddd
+ border: 1px solid color-border
+ border-radius: 3px
+ text-align: center
+ color: color-grey
+ overflow: hidden
+ a, span
+ padding: 10px 20px
+ line-height: 1
+ height: 2ex
+ a
+ color: color-grey
+ text-decoration: none
+ &:hover
+ background: color-grey
+ color: #fff
+ .prev
+ float: left
+ .next
+ float: right
+ .page-number
+ display: inline-block
+ @media mq-mobile
+ display: none
+ .current
+ color: color-default
+ font-weight: bold
+ .space
+ color: color-border
\ No newline at end of file
diff --git a/packages/site/themes/landscape/source/css/_partial/article.styl b/packages/site/themes/landscape/source/css/_partial/article.styl
new file mode 100644
index 0000000..46094f9
--- /dev/null
+++ b/packages/site/themes/landscape/source/css/_partial/article.styl
@@ -0,0 +1,357 @@
+.article
+ margin: block-margin 0
+
+.article-inner
+ @extend $block
+ overflow: hidden
+
+.article-meta
+ clearfix()
+
+.article-date
+ @extend $block-caption
+ float: left
+
+.article-category
+ float: left
+ line-height: 1em
+ color: #ccc
+ text-shadow: 0 1px #fff
+ margin-left: 8px
+ &:before
+ content: "\2022"
+
+.article-category-link
+ @extend $block-caption
+ margin: 0 12px 1em
+
+.article-header
+ padding: article-padding article-padding 0
+
+.article-title
+ text-decoration: none
+ font-size: 2em
+ font-weight: bold
+ color: color-default
+ line-height: line-height-title
+ transition: color 0.2s
+ a&:hover
+ color: color-link
+
+.article-entry
+ @extend $base-style
+ clearfix()
+ color: color-default
+ padding: 0 article-padding
+ p, table
+ line-height: line-height
+ margin: line-height 0
+ h1, h2, h3, h4, h5, h6
+ font-weight: bold
+ h1, h2, h3, h4, h5, h6
+ line-height: line-height-title
+ margin: line-height-title 0
+ a
+ color: color-link
+ text-decoration: none
+ &:hover
+ text-decoration: underline
+ ul, ol, dl
+ margin-top: line-height
+ margin-bottom: line-height
+ img, video
+ max-width: 100%
+ height: auto
+ display: block
+ margin: auto
+ iframe
+ border: none
+ table
+ width: 100%
+ border-collapse: collapse
+ border-spacing: 0
+ th
+ font-weight: bold
+ border-bottom: 3px solid color-border
+ padding-bottom: 0.5em
+ td
+ border-bottom: 1px solid color-border
+ padding: 10px 0
+ blockquote
+ font-family: font-serif
+ font-size: 1.4em
+ margin: line-height 20px
+ text-align: center
+ footer
+ font-size: font-size
+ margin: line-height 0
+ font-family: font-sans
+ cite
+ &:before
+ content: "—"
+ padding: 0 0.5em
+ .pullquote
+ text-align: left
+ width: 45%
+ margin: 0
+ &.left
+ margin-left: 0.5em
+ margin-right: 1em
+ &.right
+ margin-right: 0.5em
+ margin-left: 1em
+ .caption
+ color: color-grey
+ display: block
+ font-size: 0.9em
+ margin-top: 0.5em
+ position: relative
+ text-align: center
+ // http://webdesignerwall.com/tutorials/css-elastic-videos
+ .video-container
+ position: relative
+ padding-top: (9 / 16 * 100)% // 16:9 ratio
+ height: 0
+ overflow: hidden
+ iframe, object, embed
+ position: absolute
+ top: 0
+ left: 0
+ width: 100%
+ height: 100%
+ margin-top: 0
+
+.article-more-link a
+ display: inline-block
+ line-height: 1em
+ padding: 6px 15px
+ border-radius: 15px
+ background: color-background
+ color: color-grey
+ text-shadow: 0 1px #fff
+ text-decoration: none
+ &:hover
+ background: color-link
+ color: #fff
+ text-decoration: none
+ text-shadow: 0 1px darken(color-link, 20%)
+
+.article-footer
+ clearfix()
+ font-size: 0.85em
+ line-height: line-height
+ border-top: 1px solid color-border
+ padding-top: line-height
+ margin: 0 article-padding article-padding
+ a
+ color: color-grey
+ text-decoration: none
+ &:hover
+ color: color-default
+
+.article-tag-list-item
+ float: left
+ margin-right: 10px
+
+.article-tag-list-link
+ &:before
+ content: "#"
+
+.article-comment-link
+ float: right
+ &:before
+ content: "\f075"
+ font-family: font-icon
+ padding-right: 8px
+
+.article-share-link
+ cursor: pointer
+ float: right
+ margin-left: 20px
+ &:before
+ content: "\f064"
+ font-family: font-icon
+ padding-right: 6px
+
+#article-nav
+ clearfix()
+ position: relative
+ @media mq-normal
+ margin: block-margin 0
+ &:before
+ absolute-center(8px)
+ content: ""
+ border-radius: 50%
+ background: color-border
+ box-shadow: 0 1px 2px #fff
+
+.article-nav-link-wrap
+ text-decoration: none
+ text-shadow: 0 1px #fff
+ color: color-grey
+ box-sizing: border-box
+ margin-top: block-margin
+ text-align: center
+ display: block
+ &:hover
+ color: color-default
+ @media mq-normal
+ width: 50%
+ margin-top: 0
+
+#article-nav-newer
+ @media mq-normal
+ float: left
+ text-align: right
+ padding-right: 20px
+
+#article-nav-older
+ @media mq-normal
+ float: right
+ text-align: left
+ padding-left: 20px
+
+.article-nav-caption
+ text-transform: uppercase
+ letter-spacing: 2px
+ color: color-border
+ line-height: 1em
+ font-weight: bold
+ #article-nav-newer &
+ margin-right: -2px
+
+.article-nav-title
+ font-size: 0.85em
+ line-height: line-height
+ margin-top: 0.5em
+
+.article-share-box
+ position: absolute
+ display: none
+ background: #fff
+ box-shadow: 1px 2px 10px rgba(0, 0, 0, 0.2)
+ border-radius: 3px
+ margin-left: -145px
+ overflow: hidden
+ z-index: 1
+ &.on
+ display: block
+
+.article-share-input
+ width: 100%
+ background: none
+ box-sizing: border-box
+ font: 14px font-sans
+ padding: 0 15px
+ color: color-default
+ outline: none
+ border: 1px solid color-border
+ border-radius: 3px 3px 0 0
+ height: 36px
+ line-height: 36px
+
+.article-share-links
+ clearfix()
+ background: color-background
+
+$article-share-link
+ width: 50px
+ height: 36px
+ display: block
+ float: left
+ position: relative
+ color: #999
+ text-shadow: 0 1px #fff
+ &:before
+ font-size: 20px
+ font-family: font-icon
+ absolute-center(@font-size)
+ text-align: center
+ &:hover
+ color: #fff
+
+.article-share-twitter
+ @extend $article-share-link
+ &:before
+ content: "\f099"
+ &:hover
+ background: color-twitter
+ text-shadow: 0 1px darken(color-twitter, 20%)
+
+.article-share-facebook
+ @extend $article-share-link
+ &:before
+ content: "\f09a"
+ &:hover
+ background: color-facebook
+ text-shadow: 0 1px darken(color-facebook, 20%)
+
+.article-share-pinterest
+ @extend $article-share-link
+ &:before
+ content: "\f0d2"
+ &:hover
+ background: color-pinterest
+ text-shadow: 0 1px darken(color-pinterest, 20%)
+
+.article-share-google
+ @extend $article-share-link
+ &:before
+ content: "\f0d5"
+ &:hover
+ background: color-google
+ text-shadow: 0 1px darken(color-google, 20%)
+
+.article-gallery
+ background: #000
+ position: relative
+
+.article-gallery-photos
+ position: relative
+ overflow: hidden
+
+.article-gallery-img
+ display: none
+ max-width: 100%
+ &:first-child
+ display: block
+ &.loaded
+ position: absolute
+ display: block
+ img
+ display: block
+ max-width: 100%
+ margin: 0 auto
+/*
+$article-gallery-ctrl
+ position: absolute
+ top: 0
+ height: 100%
+ width: 60px
+ color: #fff
+ text-shadow: 0 0 3px rgba(0, 0, 0, 0.3)
+ opacity: 0.3
+ transition: opacity 0.2s
+ cursor: pointer
+ &:hover
+ opacity: 0.8
+ &:before
+ font-size: 30px
+ font-family: font-icon
+ position: absolute
+ top: 50%
+ margin-top: @font-size * -0.5
+
+.article-gallery-prev
+ @extend $article-gallery-ctrl
+ left: 0
+ &:before
+ content: "\f053"
+ left: 15px
+
+.article-gallery-next
+ @extend $article-gallery-ctrl
+ right: 0
+ &:before
+ content: "\f054"
+ right: 15px*/
\ No newline at end of file
diff --git a/packages/site/themes/landscape/source/css/_partial/comment.styl b/packages/site/themes/landscape/source/css/_partial/comment.styl
new file mode 100644
index 0000000..296b7dd
--- /dev/null
+++ b/packages/site/themes/landscape/source/css/_partial/comment.styl
@@ -0,0 +1,9 @@
+#comments
+ background: #fff
+ box-shadow: 1px 2px 3px #ddd
+ padding: article-padding
+ border: 1px solid color-border
+ border-radius: 3px
+ margin: block-margin 0
+ a
+ color: color-link
\ No newline at end of file
diff --git a/packages/site/themes/landscape/source/css/_partial/footer.styl b/packages/site/themes/landscape/source/css/_partial/footer.styl
new file mode 100644
index 0000000..fe2fd24
--- /dev/null
+++ b/packages/site/themes/landscape/source/css/_partial/footer.styl
@@ -0,0 +1,14 @@
+#footer
+ background: color-footer-background
+ padding: 50px 0
+ border-top: 1px solid color-border
+ color: color-grey
+ a
+ color: color-link
+ text-decoration: none
+ &:hover
+ text-decoration: underline
+
+#footer-info
+ line-height: line-height
+ font-size: 0.85em
\ No newline at end of file
diff --git a/packages/site/themes/landscape/source/css/_partial/header.styl b/packages/site/themes/landscape/source/css/_partial/header.styl
new file mode 100644
index 0000000..d18ebc8
--- /dev/null
+++ b/packages/site/themes/landscape/source/css/_partial/header.styl
@@ -0,0 +1,165 @@
+#header
+ height: banner-height
+ position: relative
+ border-bottom: 1px solid color-border
+ &:before, &:after
+ content: ""
+ position: absolute
+ left: 0
+ right: 0
+ height: 40px
+ &:before
+ top: 0
+ background: linear-gradient(rgba(0, 0, 0, 0.2), transparent)
+ &:after
+ bottom: 0
+ background: linear-gradient(transparent, rgba(0, 0, 0, 0.2))
+
+#header-outer
+ height: 100%
+ position: relative
+
+#header-inner
+ position: relative
+ overflow: hidden
+
+#banner
+ position: absolute
+ top: 0
+ left: 0
+ width: 100%
+ height: 100%
+ background: url(banner-url) center #000
+ background-size: cover
+ z-index: -1
+
+#header-title
+ text-align: center
+ height: logo-size
+ position: absolute
+ top: 50%
+ left: 0
+ margin-top: logo-size * -0.5
+
+$logo-text
+ text-decoration: none
+ color: #fff
+ font-weight: 300
+ text-shadow: 0 1px 4px rgba(0, 0, 0, 0.3)
+
+#logo
+ @extend $logo-text
+ font-size: logo-size
+ line-height: logo-size
+ letter-spacing: 2px
+
+#subtitle
+ @extend $logo-text
+ font-size: subtitle-size
+ line-height: subtitle-size
+ letter-spacing: 1px
+
+#subtitle-wrap
+ margin-top: subtitle-size
+
+#main-nav
+ float: left
+ margin-left: -15px
+
+$nav-link
+ float: left
+ color: #fff
+ opacity: 0.6
+ text-decoration: none
+ text-shadow: 0 1px rgba(0, 0, 0, 0.2)
+ transition: opacity 0.2s
+ display: block
+ padding: 20px 15px
+ &:hover
+ opacity: 1
+
+.nav-icon
+ @extend $nav-link
+ font-family: font-icon
+ text-align: center
+ font-size: font-size
+ width: font-size
+ height: font-size
+ padding: 20px 15px
+ position: relative
+ cursor: pointer
+
+.main-nav-link
+ @extend $nav-link
+ font-weight: 300
+ letter-spacing: 1px
+ @media mq-mobile
+ display: none
+
+#main-nav-toggle
+ display: none
+ &:before
+ content: "\f0c9"
+ @media mq-mobile
+ display: block
+
+#sub-nav
+ float: right
+ margin-right: -15px
+
+#nav-rss-link
+ &:before
+ content: "\f09e"
+
+#nav-search-btn
+ &:before
+ content: "\f002"
+
+#search-form-wrap
+ position: absolute
+ top: 15px
+ width: 150px
+ height: 30px
+ right: -150px
+ opacity: 0
+ transition: 0.2s ease-out
+ &.on
+ opacity: 1
+ right: 0
+ @media mq-mobile
+ width: 100%
+ right: -100%
+
+.search-form
+ position: absolute
+ top: 0
+ left: 0
+ right: 0
+ background: #fff
+ padding: 5px 15px
+ border-radius: 15px
+ box-shadow: 0 0 10px rgba(0, 0, 0, 0.3)
+
+.search-form-input
+ border: none
+ background: none
+ color: color-default
+ width: 100%
+ font: 13px font-sans
+ outline: none
+ &::-webkit-search-results-decoration
+ &::-webkit-search-cancel-button
+ -webkit-appearance: none
+
+.search-form-submit
+ position: absolute
+ top: 50%
+ right: 10px
+ margin-top: -7px
+ font: 13px font-icon
+ border: none
+ background: none
+ color: #bbb
+ cursor: pointer
+ &:hover, &:focus
+ color: #777
\ No newline at end of file
diff --git a/packages/site/themes/landscape/source/css/_partial/highlight.styl b/packages/site/themes/landscape/source/css/_partial/highlight.styl
new file mode 100644
index 0000000..c932ec3
--- /dev/null
+++ b/packages/site/themes/landscape/source/css/_partial/highlight.styl
@@ -0,0 +1,158 @@
+// https://github.com/chriskempson/tomorrow-theme
+highlight-background = #2d2d2d
+highlight-current-line = #393939
+highlight-selection = #515151
+highlight-foreground = #cccccc
+highlight-comment = #999999
+highlight-red = #f2777a
+highlight-orange = #f99157
+highlight-yellow = #ffcc66
+highlight-green = #99cc99
+highlight-aqua = #66cccc
+highlight-blue = #6699cc
+highlight-purple = #cc99cc
+
+$code-block
+ background: highlight-background
+ margin: 0 article-padding * -1
+ padding: 15px article-padding
+ border-style: solid
+ border-color: color-border
+ border-width: 1px 0
+ overflow: auto
+ color: highlight-foreground
+ line-height: font-size * line-height
+
+$line-numbers
+ color: #666
+ font-size: 0.85em
+
+.article-entry
+ pre, code
+ font-family: font-mono
+ code
+ background: color-background
+ text-shadow: 0 1px #fff
+ padding: 0 0.3em
+ pre
+ @extend $code-block
+ code
+ background: none
+ text-shadow: none
+ padding: 0
+ .highlight
+ @extend $code-block
+ pre
+ border: none
+ margin: 0
+ padding: 0
+ table
+ margin: 0
+ width: auto
+ td
+ border: none
+ padding: 0
+ figcaption
+ clearfix()
+ font-size: 0.85em
+ color: highlight-comment
+ line-height: 1em
+ margin-bottom: 1em
+ a
+ float: right
+ .gutter pre
+ @extend $line-numbers
+ text-align: right
+ padding-right: 20px
+ .line
+ height: font-size * line-height
+ .line.marked
+ background: highlight-selection
+ .gist
+ margin: 0 article-padding * -1
+ border-style: solid
+ border-color: color-border
+ border-width: 1px 0
+ background: highlight-background
+ padding: 15px article-padding 15px 0
+ .gist-file
+ border: none
+ font-family: font-mono
+ margin: 0
+ .gist-data
+ background: none
+ border: none
+ .line-numbers
+ @extend $line-numbers
+ background: none
+ border: none
+ padding: 0 20px 0 0
+ .line-data
+ padding: 0 !important
+ .highlight
+ margin: 0
+ padding: 0
+ border: none
+ .gist-meta
+ background: highlight-background
+ color: highlight-comment
+ font: 0.85em font-sans
+ text-shadow: 0 0
+ padding: 0
+ margin-top: 1em
+ margin-left: article-padding
+ a
+ color: color-link
+ font-weight: normal
+ &:hover
+ text-decoration: underline
+
+pre
+ .comment
+ .title
+ color: highlight-comment
+ .variable
+ .attribute
+ .tag
+ .regexp
+ .ruby .constant
+ .xml .tag .title
+ .xml .pi
+ .xml .doctype
+ .html .doctype
+ .css .id
+ .css .class
+ .css .pseudo
+ color: highlight-red
+ .number
+ .preprocessor
+ .built_in
+ .literal
+ .params
+ .constant
+ color: highlight-orange
+ .class
+ .ruby .class .title
+ .css .rules .attribute
+ color: highlight-green
+ .string
+ .value
+ .inheritance
+ .header
+ .ruby .symbol
+ .xml .cdata
+ color: highlight-green
+ .css .hexcolor
+ color: highlight-aqua
+ .function
+ .python .decorator
+ .python .title
+ .ruby .function .title
+ .ruby .title .keyword
+ .perl .sub
+ .javascript .title
+ .coffeescript .title
+ color: highlight-blue
+ .keyword
+ .javascript .function
+ color: highlight-purple
diff --git a/packages/site/themes/landscape/source/css/_partial/mobile.styl b/packages/site/themes/landscape/source/css/_partial/mobile.styl
new file mode 100644
index 0000000..eb68b3a
--- /dev/null
+++ b/packages/site/themes/landscape/source/css/_partial/mobile.styl
@@ -0,0 +1,19 @@
+@media mq-mobile
+ #mobile-nav
+ position: absolute
+ top: 0
+ left: 0
+ width: mobile-nav-width
+ height: 100%
+ background: color-mobile-nav-background
+ border-right: 1px solid #fff
+
+@media mq-mobile
+ .mobile-nav-link
+ display: block
+ color: color-grey
+ text-decoration: none
+ padding: 15px 20px
+ font-weight: bold
+ &:hover
+ color: #fff
diff --git a/packages/site/themes/landscape/source/css/_partial/sidebar-aside.styl b/packages/site/themes/landscape/source/css/_partial/sidebar-aside.styl
new file mode 100644
index 0000000..838b167
--- /dev/null
+++ b/packages/site/themes/landscape/source/css/_partial/sidebar-aside.styl
@@ -0,0 +1,27 @@
+#sidebar
+ @media mq-normal
+ column(sidebar-column)
+
+.widget-wrap
+ margin: block-margin 0
+
+.widget-title
+ @extend $block-caption
+
+.widget
+ color: color-sidebar-text
+ text-shadow: 0 1px #fff
+ background: color-widget-background
+ box-shadow: 0 -1px 4px color-widget-border inset
+ border: 1px solid color-widget-border
+ padding: 15px
+ border-radius: 3px
+ a
+ color: color-link
+ text-decoration: none
+ &:hover
+ text-decoration: underline
+ ul, ol, dl
+ ul, ol, dl
+ margin-left: 15px
+ list-style: disc
\ No newline at end of file
diff --git a/packages/site/themes/landscape/source/css/_partial/sidebar-bottom.styl b/packages/site/themes/landscape/source/css/_partial/sidebar-bottom.styl
new file mode 100644
index 0000000..e2403fd
--- /dev/null
+++ b/packages/site/themes/landscape/source/css/_partial/sidebar-bottom.styl
@@ -0,0 +1,27 @@
+.widget-wrap
+ margin-bottom: block-margin !important
+ @media mq-normal
+ column(main-column)
+
+.widget-title
+ color: #ccc
+ text-transform: uppercase
+ letter-spacing: 2px
+ margin-bottom: .5em
+ line-height: 1em
+ font-weight: bold
+
+.widget
+ color: color-grey
+ ul, ol
+ li
+ display: inline-block
+ zoom:1
+ *display:inline
+ padding-right: .75em
+/* Having problems getting balanced white space between items
+ li:before
+ content: " | "
+ li:first-child:before
+ content: none
+ */
diff --git a/packages/site/themes/landscape/source/css/_partial/sidebar.styl b/packages/site/themes/landscape/source/css/_partial/sidebar.styl
new file mode 100644
index 0000000..e43d66a
--- /dev/null
+++ b/packages/site/themes/landscape/source/css/_partial/sidebar.styl
@@ -0,0 +1,35 @@
+if sidebar is bottom
+ @import "sidebar-bottom"
+else
+ @import "sidebar-aside"
+
+.widget
+ @extend $base-style
+ line-height: line-height
+ word-wrap: break-word
+ font-size: 0.9em
+ ul, ol
+ list-style: none
+ margin: 0
+ ul, ol
+ margin: 0 20px
+ ul
+ list-style: disc
+ ol
+ list-style: decimal
+
+.category-list-count
+.tag-list-count
+.archive-list-count
+ padding-left: 5px
+ color: color-grey
+ font-size: 0.85em
+ &:before
+ content: "("
+ &:after
+ content: ")"
+
+.tagcloud
+ a
+ margin-right: 5px
+ display: inline-block
diff --git a/packages/site/themes/landscape/source/css/_util/grid.styl b/packages/site/themes/landscape/source/css/_util/grid.styl
new file mode 100644
index 0000000..2a14dd2
--- /dev/null
+++ b/packages/site/themes/landscape/source/css/_util/grid.styl
@@ -0,0 +1,38 @@
+/////////////////
+// Semantic.gs // for Stylus: http://learnboost.github.com/stylus/
+/////////////////
+
+// Utility function — you should never need to modify this
+// _gridsystem-width = (column-width + gutter-width) * columns
+gridsystem-width(_columns = columns)
+ (column-width + gutter-width) * _columns
+
+// Set @total-width to 100% for a fluid layout
+// total-width = gridsystem-width(columns)
+total-width = 100%
+
+//////////
+// GRID //
+//////////
+
+body
+ clearfix()
+ width: 100%
+
+row(_columns = columns)
+ clearfix()
+ display: block
+ width: total-width * ((gutter-width + gridsystem-width(_columns)) / gridsystem-width(_columns))
+ margin: 0 total-width * (((gutter-width * .5) / gridsystem-width(_columns)) * -1)
+
+column(x, _columns = columns)
+ display: inline
+ float: left
+ width: total-width * ((((gutter-width + column-width) * x) - gutter-width) / gridsystem-width(_columns))
+ margin: 0 total-width * ((gutter-width * .5) / gridsystem-width(_columns))
+
+push(offset = 1)
+ margin-left: total-width * (((gutter-width + column-width) * offset) / gridsystem-width(columns))
+
+pull(offset = 1)
+ margin-right: total-width * (((gutter-width + column-width) * offset) / gridsystem-width(columns))
\ No newline at end of file
diff --git a/packages/site/themes/landscape/source/css/_util/mixin.styl b/packages/site/themes/landscape/source/css/_util/mixin.styl
new file mode 100644
index 0000000..b56f037
--- /dev/null
+++ b/packages/site/themes/landscape/source/css/_util/mixin.styl
@@ -0,0 +1,31 @@
+// http://www.zeldman.com/2012/03/01/replacing-the-9999px-hack-new-image-replacement/
+hide-text()
+ text-indent: 100%
+ white-space: nowrap
+ overflow: hidden
+
+// http://codepen.io/shshaw/full/gEiDt
+absolute-center(width, height = width)
+ // margin: auto
+ // position: absolute
+ // top: 50%
+ // top: 0
+ // left: 0
+ // bottom: 0
+ // right: 0
+ // width: width
+ // height: height
+ // overflow: auto
+ width: width
+ height: height
+ position: absolute
+ top: 50%
+ left: 50%
+ margin-top: width * -0.5
+ margin-left: height * -0.5
+
+avoid-column-break()
+ vendor("column-break-inside", avoid, only: webkit)
+ page-break-inside: avoid // for firefox
+ overflow: hidden // fix for firefox
+ break-inside: avoid-column
diff --git a/packages/site/themes/landscape/source/css/_variables.styl b/packages/site/themes/landscape/source/css/_variables.styl
new file mode 100644
index 0000000..4562911
--- /dev/null
+++ b/packages/site/themes/landscape/source/css/_variables.styl
@@ -0,0 +1,63 @@
+// Config
+support-for-ie = false
+vendor-prefixes = webkit moz ms official
+
+// Colors
+color-default = #555
+color-grey = #999
+color-border = #ddd
+color-link = #258fb8
+color-background = #eee
+color-sidebar-text = #777
+color-widget-background = #ddd
+color-widget-border = #ccc
+color-footer-background = #262a30
+color-mobile-nav-background = #191919
+color-twitter = #00aced
+color-facebook = #3b5998
+color-pinterest = #cb2027
+color-google = #dd4b39
+
+// Fonts
+font-sans = -apple-system, BlinkMacSystemFont,
+ "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell",
+ "Fira Sans", "Droid Sans", "Helvetica Neue",
+ sans-serif
+font-serif = Georgia, "Times New Roman", serif
+font-mono = "Source Code Pro", Consolas, Monaco, Menlo, Consolas, monospace
+font-icon = FontAwesome
+font-icon-path = "fonts/fontawesome-webfont"
+font-icon-version = "4.0.3"
+font-size = 14px
+line-height = 1.6em
+line-height-title = 1.1em
+
+// Header
+logo-size = 40px
+subtitle-size = 16px
+banner-height = 300px
+banner-url = "images/banner.jpg"
+
+sidebar = hexo-config("sidebar")
+
+// Layout
+block-margin = 50px
+article-padding = 20px
+mobile-nav-width = 280px
+main-column = 9
+sidebar-column = 3
+
+if sidebar and sidebar isnt bottom
+ _sidebar-column = sidebar-column
+else
+ _sidebar-column = 0
+
+// Grids
+column-width = 80px
+gutter-width = 20px
+columns = main-column + _sidebar-column
+
+// Media queries
+mq-mobile = "screen and (max-width: 479px)"
+mq-tablet = "screen and (min-width: 480px) and (max-width: 767px)"
+mq-normal = "screen and (min-width: 768px)"
\ No newline at end of file
diff --git a/packages/site/themes/landscape/source/css/fonts/FontAwesome.otf b/packages/site/themes/landscape/source/css/fonts/FontAwesome.otf
new file mode 100644
index 0000000..8b0f54e
Binary files /dev/null and b/packages/site/themes/landscape/source/css/fonts/FontAwesome.otf differ
diff --git a/packages/site/themes/landscape/source/css/fonts/fontawesome-webfont.eot b/packages/site/themes/landscape/source/css/fonts/fontawesome-webfont.eot
new file mode 100644
index 0000000..7c79c6a
Binary files /dev/null and b/packages/site/themes/landscape/source/css/fonts/fontawesome-webfont.eot differ
diff --git a/packages/site/themes/landscape/source/css/fonts/fontawesome-webfont.svg b/packages/site/themes/landscape/source/css/fonts/fontawesome-webfont.svg
new file mode 100644
index 0000000..45fdf33
--- /dev/null
+++ b/packages/site/themes/landscape/source/css/fonts/fontawesome-webfont.svg
@@ -0,0 +1,414 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/packages/site/themes/landscape/source/css/fonts/fontawesome-webfont.ttf b/packages/site/themes/landscape/source/css/fonts/fontawesome-webfont.ttf
new file mode 100644
index 0000000..e89738d
Binary files /dev/null and b/packages/site/themes/landscape/source/css/fonts/fontawesome-webfont.ttf differ
diff --git a/packages/site/themes/landscape/source/css/fonts/fontawesome-webfont.woff b/packages/site/themes/landscape/source/css/fonts/fontawesome-webfont.woff
new file mode 100644
index 0000000..8c1748a
Binary files /dev/null and b/packages/site/themes/landscape/source/css/fonts/fontawesome-webfont.woff differ
diff --git a/packages/site/themes/landscape/source/css/images/banner.jpg b/packages/site/themes/landscape/source/css/images/banner.jpg
new file mode 100644
index 0000000..b963e06
Binary files /dev/null and b/packages/site/themes/landscape/source/css/images/banner.jpg differ
diff --git a/packages/site/themes/landscape/source/css/style.styl b/packages/site/themes/landscape/source/css/style.styl
new file mode 100644
index 0000000..c51f8e4
--- /dev/null
+++ b/packages/site/themes/landscape/source/css/style.styl
@@ -0,0 +1,89 @@
+@import "nib"
+@import "_variables"
+@import "_util/mixin"
+@import "_util/grid"
+
+global-reset()
+
+input, button
+ margin: 0
+ padding: 0
+ &::-moz-focus-inner
+ border: 0
+ padding: 0
+
+@font-face
+ font-family: FontAwesome
+ font-style: normal
+ font-weight: normal
+ src: url(font-icon-path + ".eot?v=#" + font-icon-version)
+ src: url(font-icon-path + ".eot?#iefix&v=#" + font-icon-version) format("embedded-opentype"),
+ url(font-icon-path + ".woff?v=#" + font-icon-version) format("woff"),
+ url(font-icon-path + ".ttf?v=#" + font-icon-version) format("truetype"),
+ url(font-icon-path + ".svg#fontawesomeregular?v=#" + font-icon-version) format("svg")
+
+html, body, #container
+ height: 100%
+
+body
+ background: color-background
+ font: font-size font-sans
+ -webkit-text-size-adjust: 100%
+
+.outer
+ clearfix()
+ max-width: (column-width + gutter-width) * columns + gutter-width
+ margin: 0 auto
+ padding: 0 gutter-width
+
+.inner
+ column(columns)
+
+.left, .alignleft
+ float: left
+
+.right, .alignright
+ float: right
+
+.clear
+ clear: both
+
+#container
+ position: relative
+
+.mobile-nav-on
+ overflow: hidden
+
+#wrap
+ height: 100%
+ width: 100%
+ position: absolute
+ top: 0
+ left: 0
+ transition: 0.2s ease-out
+ z-index: 1
+ background: color-background
+ .mobile-nav-on &
+ left: mobile-nav-width
+
+if sidebar and sidebar isnt bottom
+ #main
+ @media mq-normal
+ column(main-column)
+
+if sidebar is left
+ @media mq-normal
+ #main
+ float: right
+
+@import "_extend"
+@import "_partial/header"
+@import "_partial/article"
+@import "_partial/comment"
+@import "_partial/archive"
+@import "_partial/footer"
+@import "_partial/highlight"
+@import "_partial/mobile"
+
+if sidebar
+ @import "_partial/sidebar"
\ No newline at end of file
diff --git a/packages/site/themes/landscape/source/fancybox/blank.gif b/packages/site/themes/landscape/source/fancybox/blank.gif
new file mode 100644
index 0000000..35d42e8
Binary files /dev/null and b/packages/site/themes/landscape/source/fancybox/blank.gif differ
diff --git a/packages/site/themes/landscape/source/fancybox/fancybox_loading.gif b/packages/site/themes/landscape/source/fancybox/fancybox_loading.gif
new file mode 100644
index 0000000..a03a40c
Binary files /dev/null and b/packages/site/themes/landscape/source/fancybox/fancybox_loading.gif differ
diff --git a/packages/site/themes/landscape/source/fancybox/fancybox_loading@2x.gif b/packages/site/themes/landscape/source/fancybox/fancybox_loading@2x.gif
new file mode 100644
index 0000000..9205aeb
Binary files /dev/null and b/packages/site/themes/landscape/source/fancybox/fancybox_loading@2x.gif differ
diff --git a/packages/site/themes/landscape/source/fancybox/fancybox_overlay.png b/packages/site/themes/landscape/source/fancybox/fancybox_overlay.png
new file mode 100644
index 0000000..a439139
Binary files /dev/null and b/packages/site/themes/landscape/source/fancybox/fancybox_overlay.png differ
diff --git a/packages/site/themes/landscape/source/fancybox/fancybox_sprite.png b/packages/site/themes/landscape/source/fancybox/fancybox_sprite.png
new file mode 100644
index 0000000..fd8d5ca
Binary files /dev/null and b/packages/site/themes/landscape/source/fancybox/fancybox_sprite.png differ
diff --git a/packages/site/themes/landscape/source/fancybox/fancybox_sprite@2x.png b/packages/site/themes/landscape/source/fancybox/fancybox_sprite@2x.png
new file mode 100644
index 0000000..d0e4779
Binary files /dev/null and b/packages/site/themes/landscape/source/fancybox/fancybox_sprite@2x.png differ
diff --git a/packages/site/themes/landscape/source/fancybox/helpers/fancybox_buttons.png b/packages/site/themes/landscape/source/fancybox/helpers/fancybox_buttons.png
new file mode 100644
index 0000000..0787207
Binary files /dev/null and b/packages/site/themes/landscape/source/fancybox/helpers/fancybox_buttons.png differ
diff --git a/packages/site/themes/landscape/source/fancybox/helpers/jquery.fancybox-buttons.css b/packages/site/themes/landscape/source/fancybox/helpers/jquery.fancybox-buttons.css
new file mode 100644
index 0000000..a26273a
--- /dev/null
+++ b/packages/site/themes/landscape/source/fancybox/helpers/jquery.fancybox-buttons.css
@@ -0,0 +1,97 @@
+#fancybox-buttons {
+ position: fixed;
+ left: 0;
+ width: 100%;
+ z-index: 8050;
+}
+
+#fancybox-buttons.top {
+ top: 10px;
+}
+
+#fancybox-buttons.bottom {
+ bottom: 10px;
+}
+
+#fancybox-buttons ul {
+ display: block;
+ width: 166px;
+ height: 30px;
+ margin: 0 auto;
+ padding: 0;
+ list-style: none;
+ border: 1px solid #111;
+ border-radius: 3px;
+ -webkit-box-shadow: inset 0 0 0 1px rgba(255,255,255,.05);
+ -moz-box-shadow: inset 0 0 0 1px rgba(255,255,255,.05);
+ box-shadow: inset 0 0 0 1px rgba(255,255,255,.05);
+ background: rgb(50,50,50);
+ background: -moz-linear-gradient(top, rgb(68,68,68) 0%, rgb(52,52,52) 50%, rgb(41,41,41) 50%, rgb(51,51,51) 100%);
+ background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,rgb(68,68,68)), color-stop(50%,rgb(52,52,52)), color-stop(50%,rgb(41,41,41)), color-stop(100%,rgb(51,51,51)));
+ background: -webkit-linear-gradient(top, rgb(68,68,68) 0%,rgb(52,52,52) 50%,rgb(41,41,41) 50%,rgb(51,51,51) 100%);
+ background: -o-linear-gradient(top, rgb(68,68,68) 0%,rgb(52,52,52) 50%,rgb(41,41,41) 50%,rgb(51,51,51) 100%);
+ background: -ms-linear-gradient(top, rgb(68,68,68) 0%,rgb(52,52,52) 50%,rgb(41,41,41) 50%,rgb(51,51,51) 100%);
+ background: linear-gradient(top, rgb(68,68,68) 0%,rgb(52,52,52) 50%,rgb(41,41,41) 50%,rgb(51,51,51) 100%);
+ filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#444444', endColorstr='#222222',GradientType=0 );
+}
+
+#fancybox-buttons ul li {
+ float: left;
+ margin: 0;
+ padding: 0;
+}
+
+#fancybox-buttons a {
+ display: block;
+ width: 30px;
+ height: 30px;
+ text-indent: -9999px;
+ background-color: transparent;
+ background-image: url('fancybox_buttons.png');
+ background-repeat: no-repeat;
+ outline: none;
+ opacity: 0.8;
+}
+
+#fancybox-buttons a:hover {
+ opacity: 1;
+}
+
+#fancybox-buttons a.btnPrev {
+ background-position: 5px 0;
+}
+
+#fancybox-buttons a.btnNext {
+ background-position: -33px 0;
+ border-right: 1px solid #3e3e3e;
+}
+
+#fancybox-buttons a.btnPlay {
+ background-position: 0 -30px;
+}
+
+#fancybox-buttons a.btnPlayOn {
+ background-position: -30px -30px;
+}
+
+#fancybox-buttons a.btnToggle {
+ background-position: 3px -60px;
+ border-left: 1px solid #111;
+ border-right: 1px solid #3e3e3e;
+ width: 35px
+}
+
+#fancybox-buttons a.btnToggleOn {
+ background-position: -27px -60px;
+}
+
+#fancybox-buttons a.btnClose {
+ border-left: 1px solid #111;
+ width: 35px;
+ background-position: -56px 0px;
+}
+
+#fancybox-buttons a.btnDisabled {
+ opacity : 0.4;
+ cursor: default;
+}
\ No newline at end of file
diff --git a/packages/site/themes/landscape/source/fancybox/helpers/jquery.fancybox-buttons.js b/packages/site/themes/landscape/source/fancybox/helpers/jquery.fancybox-buttons.js
new file mode 100644
index 0000000..352bb5f
--- /dev/null
+++ b/packages/site/themes/landscape/source/fancybox/helpers/jquery.fancybox-buttons.js
@@ -0,0 +1,122 @@
+ /*!
+ * Buttons helper for fancyBox
+ * version: 1.0.5 (Mon, 15 Oct 2012)
+ * @requires fancyBox v2.0 or later
+ *
+ * Usage:
+ * $(".fancybox").fancybox({
+ * helpers : {
+ * buttons: {
+ * position : 'top'
+ * }
+ * }
+ * });
+ *
+ */
+;(function ($) {
+ //Shortcut for fancyBox object
+ var F = $.fancybox;
+
+ //Add helper object
+ F.helpers.buttons = {
+ defaults : {
+ skipSingle : false, // disables if gallery contains single image
+ position : 'top', // 'top' or 'bottom'
+ tpl : ''
+ },
+
+ list : null,
+ buttons: null,
+
+ beforeLoad: function (opts, obj) {
+ //Remove self if gallery do not have at least two items
+
+ if (opts.skipSingle && obj.group.length < 2) {
+ obj.helpers.buttons = false;
+ obj.closeBtn = true;
+
+ return;
+ }
+
+ //Increase top margin to give space for buttons
+ obj.margin[ opts.position === 'bottom' ? 2 : 0 ] += 30;
+ },
+
+ onPlayStart: function () {
+ if (this.buttons) {
+ this.buttons.play.attr('title', 'Pause slideshow').addClass('btnPlayOn');
+ }
+ },
+
+ onPlayEnd: function () {
+ if (this.buttons) {
+ this.buttons.play.attr('title', 'Start slideshow').removeClass('btnPlayOn');
+ }
+ },
+
+ afterShow: function (opts, obj) {
+ var buttons = this.buttons;
+
+ if (!buttons) {
+ this.list = $(opts.tpl).addClass(opts.position).appendTo('body');
+
+ buttons = {
+ prev : this.list.find('.btnPrev').click( F.prev ),
+ next : this.list.find('.btnNext').click( F.next ),
+ play : this.list.find('.btnPlay').click( F.play ),
+ toggle : this.list.find('.btnToggle').click( F.toggle ),
+ close : this.list.find('.btnClose').click( F.close )
+ }
+ }
+
+ //Prev
+ if (obj.index > 0 || obj.loop) {
+ buttons.prev.removeClass('btnDisabled');
+ } else {
+ buttons.prev.addClass('btnDisabled');
+ }
+
+ //Next / Play
+ if (obj.loop || obj.index < obj.group.length - 1) {
+ buttons.next.removeClass('btnDisabled');
+ buttons.play.removeClass('btnDisabled');
+
+ } else {
+ buttons.next.addClass('btnDisabled');
+ buttons.play.addClass('btnDisabled');
+ }
+
+ this.buttons = buttons;
+
+ this.onUpdate(opts, obj);
+ },
+
+ onUpdate: function (opts, obj) {
+ var toggle;
+
+ if (!this.buttons) {
+ return;
+ }
+
+ toggle = this.buttons.toggle.removeClass('btnDisabled btnToggleOn');
+
+ //Size toggle button
+ if (obj.canShrink) {
+ toggle.addClass('btnToggleOn');
+
+ } else if (!obj.canExpand) {
+ toggle.addClass('btnDisabled');
+ }
+ },
+
+ beforeClose: function () {
+ if (this.list) {
+ this.list.remove();
+ }
+
+ this.list = null;
+ this.buttons = null;
+ }
+ };
+
+}(jQuery));
diff --git a/packages/site/themes/landscape/source/fancybox/helpers/jquery.fancybox-media.js b/packages/site/themes/landscape/source/fancybox/helpers/jquery.fancybox-media.js
new file mode 100644
index 0000000..62737a5
--- /dev/null
+++ b/packages/site/themes/landscape/source/fancybox/helpers/jquery.fancybox-media.js
@@ -0,0 +1,199 @@
+/*!
+ * Media helper for fancyBox
+ * version: 1.0.6 (Fri, 14 Jun 2013)
+ * @requires fancyBox v2.0 or later
+ *
+ * Usage:
+ * $(".fancybox").fancybox({
+ * helpers : {
+ * media: true
+ * }
+ * });
+ *
+ * Set custom URL parameters:
+ * $(".fancybox").fancybox({
+ * helpers : {
+ * media: {
+ * youtube : {
+ * params : {
+ * autoplay : 0
+ * }
+ * }
+ * }
+ * }
+ * });
+ *
+ * Or:
+ * $(".fancybox").fancybox({,
+ * helpers : {
+ * media: true
+ * },
+ * youtube : {
+ * autoplay: 0
+ * }
+ * });
+ *
+ * Supports:
+ *
+ * Youtube
+ * http://www.youtube.com/watch?v=opj24KnzrWo
+ * http://www.youtube.com/embed/opj24KnzrWo
+ * http://youtu.be/opj24KnzrWo
+ * http://www.youtube-nocookie.com/embed/opj24KnzrWo
+ * Vimeo
+ * http://vimeo.com/40648169
+ * http://vimeo.com/channels/staffpicks/38843628
+ * http://vimeo.com/groups/surrealism/videos/36516384
+ * http://player.vimeo.com/video/45074303
+ * Metacafe
+ * http://www.metacafe.com/watch/7635964/dr_seuss_the_lorax_movie_trailer/
+ * http://www.metacafe.com/watch/7635964/
+ * Dailymotion
+ * http://www.dailymotion.com/video/xoytqh_dr-seuss-the-lorax-premiere_people
+ * Twitvid
+ * http://twitvid.com/QY7MD
+ * Twitpic
+ * http://twitpic.com/7p93st
+ * Instagram
+ * http://instagr.am/p/IejkuUGxQn/
+ * http://instagram.com/p/IejkuUGxQn/
+ * Google maps
+ * http://maps.google.com/maps?q=Eiffel+Tower,+Avenue+Gustave+Eiffel,+Paris,+France&t=h&z=17
+ * http://maps.google.com/?ll=48.857995,2.294297&spn=0.007666,0.021136&t=m&z=16
+ * http://maps.google.com/?ll=48.859463,2.292626&spn=0.000965,0.002642&t=m&z=19&layer=c&cbll=48.859524,2.292532&panoid=YJ0lq28OOy3VT2IqIuVY0g&cbp=12,151.58,,0,-15.56
+ */
+;(function ($) {
+ "use strict";
+
+ //Shortcut for fancyBox object
+ var F = $.fancybox,
+ format = function( url, rez, params ) {
+ params = params || '';
+
+ if ( $.type( params ) === "object" ) {
+ params = $.param(params, true);
+ }
+
+ $.each(rez, function(key, value) {
+ url = url.replace( '$' + key, value || '' );
+ });
+
+ if (params.length) {
+ url += ( url.indexOf('?') > 0 ? '&' : '?' ) + params;
+ }
+
+ return url;
+ };
+
+ //Add helper object
+ F.helpers.media = {
+ defaults : {
+ youtube : {
+ matcher : /(youtube\.com|youtu\.be|youtube-nocookie\.com)\/(watch\?v=|v\/|u\/|embed\/?)?(videoseries\?list=(.*)|[\w-]{11}|\?listType=(.*)&list=(.*)).*/i,
+ params : {
+ autoplay : 1,
+ autohide : 1,
+ fs : 1,
+ rel : 0,
+ hd : 1,
+ wmode : 'opaque',
+ enablejsapi : 1
+ },
+ type : 'iframe',
+ url : '//www.youtube.com/embed/$3'
+ },
+ vimeo : {
+ matcher : /(?:vimeo(?:pro)?.com)\/(?:[^\d]+)?(\d+)(?:.*)/,
+ params : {
+ autoplay : 1,
+ hd : 1,
+ show_title : 1,
+ show_byline : 1,
+ show_portrait : 0,
+ fullscreen : 1
+ },
+ type : 'iframe',
+ url : '//player.vimeo.com/video/$1'
+ },
+ metacafe : {
+ matcher : /metacafe.com\/(?:watch|fplayer)\/([\w\-]{1,10})/,
+ params : {
+ autoPlay : 'yes'
+ },
+ type : 'swf',
+ url : function( rez, params, obj ) {
+ obj.swf.flashVars = 'playerVars=' + $.param( params, true );
+
+ return '//www.metacafe.com/fplayer/' + rez[1] + '/.swf';
+ }
+ },
+ dailymotion : {
+ matcher : /dailymotion.com\/video\/(.*)\/?(.*)/,
+ params : {
+ additionalInfos : 0,
+ autoStart : 1
+ },
+ type : 'swf',
+ url : '//www.dailymotion.com/swf/video/$1'
+ },
+ twitvid : {
+ matcher : /twitvid\.com\/([a-zA-Z0-9_\-\?\=]+)/i,
+ params : {
+ autoplay : 0
+ },
+ type : 'iframe',
+ url : '//www.twitvid.com/embed.php?guid=$1'
+ },
+ twitpic : {
+ matcher : /twitpic\.com\/(?!(?:place|photos|events)\/)([a-zA-Z0-9\?\=\-]+)/i,
+ type : 'image',
+ url : '//twitpic.com/show/full/$1/'
+ },
+ instagram : {
+ matcher : /(instagr\.am|instagram\.com)\/p\/([a-zA-Z0-9_\-]+)\/?/i,
+ type : 'image',
+ url : '//$1/p/$2/media/?size=l'
+ },
+ google_maps : {
+ matcher : /maps\.google\.([a-z]{2,3}(\.[a-z]{2})?)\/(\?ll=|maps\?)(.*)/i,
+ type : 'iframe',
+ url : function( rez ) {
+ return '//maps.google.' + rez[1] + '/' + rez[3] + '' + rez[4] + '&output=' + (rez[4].indexOf('layer=c') > 0 ? 'svembed' : 'embed');
+ }
+ }
+ },
+
+ beforeLoad : function(opts, obj) {
+ var url = obj.href || '',
+ type = false,
+ what,
+ item,
+ rez,
+ params;
+
+ for (what in opts) {
+ if (opts.hasOwnProperty(what)) {
+ item = opts[ what ];
+ rez = url.match( item.matcher );
+
+ if (rez) {
+ type = item.type;
+ params = $.extend(true, {}, item.params, obj[ what ] || ($.isPlainObject(opts[ what ]) ? opts[ what ].params : null));
+
+ url = $.type( item.url ) === "function" ? item.url.call( this, rez, params, obj ) : format( item.url, rez, params );
+
+ break;
+ }
+ }
+ }
+
+ if (type) {
+ obj.href = url;
+ obj.type = type;
+
+ obj.autoHeight = false;
+ }
+ }
+ };
+
+}(jQuery));
\ No newline at end of file
diff --git a/packages/site/themes/landscape/source/fancybox/helpers/jquery.fancybox-thumbs.css b/packages/site/themes/landscape/source/fancybox/helpers/jquery.fancybox-thumbs.css
new file mode 100644
index 0000000..63d2943
--- /dev/null
+++ b/packages/site/themes/landscape/source/fancybox/helpers/jquery.fancybox-thumbs.css
@@ -0,0 +1,55 @@
+#fancybox-thumbs {
+ position: fixed;
+ left: 0;
+ width: 100%;
+ overflow: hidden;
+ z-index: 8050;
+}
+
+#fancybox-thumbs.bottom {
+ bottom: 2px;
+}
+
+#fancybox-thumbs.top {
+ top: 2px;
+}
+
+#fancybox-thumbs ul {
+ position: relative;
+ list-style: none;
+ margin: 0;
+ padding: 0;
+}
+
+#fancybox-thumbs ul li {
+ float: left;
+ padding: 1px;
+ opacity: 0.5;
+}
+
+#fancybox-thumbs ul li.active {
+ opacity: 0.75;
+ padding: 0;
+ border: 1px solid #fff;
+}
+
+#fancybox-thumbs ul li:hover {
+ opacity: 1;
+}
+
+#fancybox-thumbs ul li a {
+ display: block;
+ position: relative;
+ overflow: hidden;
+ border: 1px solid #222;
+ background: #111;
+ outline: none;
+}
+
+#fancybox-thumbs ul li img {
+ display: block;
+ position: relative;
+ border: 0;
+ padding: 0;
+ max-width: none;
+}
\ No newline at end of file
diff --git a/packages/site/themes/landscape/source/fancybox/helpers/jquery.fancybox-thumbs.js b/packages/site/themes/landscape/source/fancybox/helpers/jquery.fancybox-thumbs.js
new file mode 100644
index 0000000..58c9719
--- /dev/null
+++ b/packages/site/themes/landscape/source/fancybox/helpers/jquery.fancybox-thumbs.js
@@ -0,0 +1,165 @@
+ /*!
+ * Thumbnail helper for fancyBox
+ * version: 1.0.7 (Mon, 01 Oct 2012)
+ * @requires fancyBox v2.0 or later
+ *
+ * Usage:
+ * $(".fancybox").fancybox({
+ * helpers : {
+ * thumbs: {
+ * width : 50,
+ * height : 50
+ * }
+ * }
+ * });
+ *
+ */
+;(function ($) {
+ //Shortcut for fancyBox object
+ var F = $.fancybox;
+
+ //Add helper object
+ F.helpers.thumbs = {
+ defaults : {
+ width : 50, // thumbnail width
+ height : 50, // thumbnail height
+ position : 'bottom', // 'top' or 'bottom'
+ source : function ( item ) { // function to obtain the URL of the thumbnail image
+ var href;
+
+ if (item.element) {
+ href = $(item.element).find('img').attr('src');
+ }
+
+ if (!href && item.type === 'image' && item.href) {
+ href = item.href;
+ }
+
+ return href;
+ }
+ },
+
+ wrap : null,
+ list : null,
+ width : 0,
+
+ init: function (opts, obj) {
+ var that = this,
+ list,
+ thumbWidth = opts.width,
+ thumbHeight = opts.height,
+ thumbSource = opts.source;
+
+ //Build list structure
+ list = '';
+
+ for (var n = 0; n < obj.group.length; n++) {
+ list += ' ';
+ }
+
+ this.wrap = $('
').addClass(opts.position).appendTo('body');
+ this.list = $('').appendTo(this.wrap);
+
+ //Load each thumbnail
+ $.each(obj.group, function (i) {
+ var el = obj.group[ i ],
+ href = thumbSource( el );
+
+ if (!href) {
+ return;
+ }
+
+ $(" ").load(function () {
+ var width = this.width,
+ height = this.height,
+ widthRatio, heightRatio, parent;
+
+ if (!that.list || !width || !height) {
+ return;
+ }
+
+ //Calculate thumbnail width/height and center it
+ widthRatio = width / thumbWidth;
+ heightRatio = height / thumbHeight;
+
+ parent = that.list.children().eq(i).find('a');
+
+ if (widthRatio >= 1 && heightRatio >= 1) {
+ if (widthRatio > heightRatio) {
+ width = Math.floor(width / heightRatio);
+ height = thumbHeight;
+
+ } else {
+ width = thumbWidth;
+ height = Math.floor(height / widthRatio);
+ }
+ }
+
+ $(this).css({
+ width : width,
+ height : height,
+ top : Math.floor(thumbHeight / 2 - height / 2),
+ left : Math.floor(thumbWidth / 2 - width / 2)
+ });
+
+ parent.width(thumbWidth).height(thumbHeight);
+
+ $(this).hide().appendTo(parent).fadeIn(300);
+
+ })
+ .attr('src', href)
+ .attr('title', el.title);
+ });
+
+ //Set initial width
+ this.width = this.list.children().eq(0).outerWidth(true);
+
+ this.list.width(this.width * (obj.group.length + 1)).css('left', Math.floor($(window).width() * 0.5 - (obj.index * this.width + this.width * 0.5)));
+ },
+
+ beforeLoad: function (opts, obj) {
+ //Remove self if gallery do not have at least two items
+ if (obj.group.length < 2) {
+ obj.helpers.thumbs = false;
+
+ return;
+ }
+
+ //Increase bottom margin to give space for thumbs
+ obj.margin[ opts.position === 'top' ? 0 : 2 ] += ((opts.height) + 15);
+ },
+
+ afterShow: function (opts, obj) {
+ //Check if exists and create or update list
+ if (this.list) {
+ this.onUpdate(opts, obj);
+
+ } else {
+ this.init(opts, obj);
+ }
+
+ //Set active element
+ this.list.children().removeClass('active').eq(obj.index).addClass('active');
+ },
+
+ //Center list
+ onUpdate: function (opts, obj) {
+ if (this.list) {
+ this.list.stop(true).animate({
+ 'left': Math.floor($(window).width() * 0.5 - (obj.index * this.width + this.width * 0.5))
+ }, 150);
+ }
+ },
+
+ beforeClose: function () {
+ if (this.wrap) {
+ this.wrap.remove();
+ }
+
+ this.wrap = null;
+ this.list = null;
+ this.width = 0;
+ }
+ }
+
+}(jQuery));
\ No newline at end of file
diff --git a/packages/site/themes/landscape/source/fancybox/jquery.fancybox.css b/packages/site/themes/landscape/source/fancybox/jquery.fancybox.css
new file mode 100644
index 0000000..c75d051
--- /dev/null
+++ b/packages/site/themes/landscape/source/fancybox/jquery.fancybox.css
@@ -0,0 +1,273 @@
+/*! fancyBox v2.1.5 fancyapps.com | fancyapps.com/fancybox/#license */
+.fancybox-wrap,
+.fancybox-skin,
+.fancybox-outer,
+.fancybox-inner,
+.fancybox-image,
+.fancybox-wrap iframe,
+.fancybox-wrap object,
+.fancybox-nav,
+.fancybox-nav span,
+.fancybox-tmp
+{
+ padding: 0;
+ margin: 0;
+ border: 0;
+ outline: none;
+ vertical-align: top;
+}
+
+.fancybox-wrap {
+ position: absolute;
+ top: 0;
+ left: 0;
+ z-index: 8020;
+}
+
+.fancybox-skin {
+ position: relative;
+ background: #f9f9f9;
+ color: #444;
+ text-shadow: none;
+ -webkit-border-radius: 4px;
+ -moz-border-radius: 4px;
+ border-radius: 4px;
+}
+
+.fancybox-opened {
+ z-index: 8030;
+}
+
+.fancybox-opened .fancybox-skin {
+ -webkit-box-shadow: 0 10px 25px rgba(0, 0, 0, 0.5);
+ -moz-box-shadow: 0 10px 25px rgba(0, 0, 0, 0.5);
+ box-shadow: 0 10px 25px rgba(0, 0, 0, 0.5);
+}
+
+.fancybox-outer, .fancybox-inner {
+ position: relative;
+}
+
+.fancybox-inner {
+ overflow: hidden;
+}
+
+.fancybox-type-iframe .fancybox-inner {
+ -webkit-overflow-scrolling: touch;
+}
+
+.fancybox-error {
+ color: #444;
+ font: 14px/20px "Helvetica Neue",Helvetica,Arial,sans-serif;
+ margin: 0;
+ padding: 15px;
+ white-space: nowrap;
+}
+
+.fancybox-image, .fancybox-iframe {
+ display: block;
+ width: 100%;
+ height: 100%;
+}
+
+.fancybox-image {
+ max-width: 100%;
+ max-height: 100%;
+}
+
+#fancybox-loading, .fancybox-close, .fancybox-prev span, .fancybox-next span {
+ background-image: url(fancybox_sprite.png);
+}
+
+#fancybox-loading {
+ position: fixed;
+ top: 50%;
+ left: 50%;
+ margin-top: -22px;
+ margin-left: -22px;
+ background-position: 0 -108px;
+ opacity: 0.8;
+ cursor: pointer;
+ z-index: 8060;
+}
+
+#fancybox-loading div {
+ width: 44px;
+ height: 44px;
+ background: url(fancybox_loading.gif) center center no-repeat;
+}
+
+.fancybox-close {
+ position: absolute;
+ top: -18px;
+ right: -18px;
+ width: 36px;
+ height: 36px;
+ cursor: pointer;
+ z-index: 8040;
+}
+
+.fancybox-nav {
+ position: absolute;
+ top: 0;
+ width: 40%;
+ height: 100%;
+ cursor: pointer;
+ text-decoration: none;
+ background: transparent url(blank.gif); /* helps IE */
+ -webkit-tap-highlight-color: rgba(0,0,0,0);
+ z-index: 8040;
+}
+
+.fancybox-prev {
+ left: 0;
+}
+
+.fancybox-next {
+ right: 0;
+}
+
+.fancybox-nav span {
+ position: absolute;
+ top: 50%;
+ width: 36px;
+ height: 34px;
+ margin-top: -18px;
+ cursor: pointer;
+ z-index: 8040;
+ visibility: hidden;
+}
+
+.fancybox-prev span {
+ left: 10px;
+ background-position: 0 -36px;
+}
+
+.fancybox-next span {
+ right: 10px;
+ background-position: 0 -72px;
+}
+
+.fancybox-nav:hover span {
+ visibility: visible;
+}
+
+.fancybox-tmp {
+ position: absolute;
+ top: -99999px;
+ left: -99999px;
+ max-width: 99999px;
+ max-height: 99999px;
+ overflow: visible !important;
+}
+
+/* Overlay helper */
+
+.fancybox-lock {
+ overflow: visible !important;
+ width: auto;
+}
+
+.fancybox-lock body {
+ overflow: hidden !important;
+}
+
+.fancybox-lock-test {
+ overflow-y: hidden !important;
+}
+
+.fancybox-overlay {
+ position: absolute;
+ top: 0;
+ left: 0;
+ overflow: hidden;
+ display: none;
+ z-index: 8010;
+ background: url(fancybox_overlay.png);
+}
+
+.fancybox-overlay-fixed {
+ position: fixed;
+ bottom: 0;
+ right: 0;
+}
+
+.fancybox-lock .fancybox-overlay {
+ overflow: auto;
+ overflow-y: scroll;
+}
+
+/* Title helper */
+
+.fancybox-title {
+ visibility: hidden;
+ font: normal 13px/20px "Helvetica Neue",Helvetica,Arial,sans-serif;
+ position: relative;
+ text-shadow: none;
+ z-index: 8050;
+}
+
+.fancybox-opened .fancybox-title {
+ visibility: visible;
+}
+
+.fancybox-title-float-wrap {
+ position: absolute;
+ bottom: 0;
+ right: 50%;
+ margin-bottom: -35px;
+ z-index: 8050;
+ text-align: center;
+}
+
+.fancybox-title-float-wrap .child {
+ display: inline-block;
+ margin-right: -100%;
+ padding: 2px 20px;
+ background: transparent; /* Fallback for web browsers that doesn't support RGBa */
+ background: rgba(0, 0, 0, 0.8);
+ -webkit-border-radius: 15px;
+ -moz-border-radius: 15px;
+ border-radius: 15px;
+ text-shadow: 0 1px 2px #222;
+ color: #FFF;
+ font-weight: bold;
+ line-height: 24px;
+ white-space: nowrap;
+}
+
+.fancybox-title-outside-wrap {
+ position: relative;
+ margin-top: 10px;
+ color: #fff;
+}
+
+.fancybox-title-inside-wrap {
+ padding-top: 10px;
+}
+
+.fancybox-title-over-wrap {
+ position: absolute;
+ bottom: 0;
+ left: 0;
+ color: #fff;
+ padding: 10px;
+ background: #000;
+ background: rgba(0, 0, 0, .8);
+}
+
+/*Retina graphics!*/
+@media only screen and (-webkit-min-device-pixel-ratio: 1.5),
+ only screen and (min--moz-device-pixel-ratio: 1.5),
+ only screen and (min-device-pixel-ratio: 1.5){
+
+ #fancybox-loading, .fancybox-close, .fancybox-prev span, .fancybox-next span {
+ background-image: url(fancybox_sprite@2x.png);
+ background-size: 44px 152px; /*The size of the normal image, half the size of the hi-res image*/
+ }
+
+ #fancybox-loading div {
+ background-image: url(fancybox_loading@2x.gif);
+ background-size: 24px 24px; /*The size of the normal image, half the size of the hi-res image*/
+ }
+}
\ No newline at end of file
diff --git a/packages/site/themes/landscape/source/fancybox/jquery.fancybox.js b/packages/site/themes/landscape/source/fancybox/jquery.fancybox.js
new file mode 100644
index 0000000..7a0f8ac
--- /dev/null
+++ b/packages/site/themes/landscape/source/fancybox/jquery.fancybox.js
@@ -0,0 +1,2017 @@
+/*!
+ * fancyBox - jQuery Plugin
+ * version: 2.1.5 (Fri, 14 Jun 2013)
+ * requires jQuery v1.6 or later
+ *
+ * Examples at http://fancyapps.com/fancybox/
+ * License: www.fancyapps.com/fancybox/#license
+ *
+ * Copyright 2012 Janis Skarnelis - janis@fancyapps.com
+ *
+ */
+
+;(function (window, document, $, undefined) {
+ "use strict";
+
+ var H = $("html"),
+ W = $(window),
+ D = $(document),
+ F = $.fancybox = function () {
+ F.open.apply( this, arguments );
+ },
+ IE = navigator.userAgent.match(/msie/i),
+ didUpdate = null,
+ isTouch = document.createTouch !== undefined,
+
+ isQuery = function(obj) {
+ return obj && obj.hasOwnProperty && obj instanceof $;
+ },
+ isString = function(str) {
+ return str && $.type(str) === "string";
+ },
+ isPercentage = function(str) {
+ return isString(str) && str.indexOf('%') > 0;
+ },
+ isScrollable = function(el) {
+ return (el && !(el.style.overflow && el.style.overflow === 'hidden') && ((el.clientWidth && el.scrollWidth > el.clientWidth) || (el.clientHeight && el.scrollHeight > el.clientHeight)));
+ },
+ getScalar = function(orig, dim) {
+ var value = parseInt(orig, 10) || 0;
+
+ if (dim && isPercentage(orig)) {
+ value = F.getViewport()[ dim ] / 100 * value;
+ }
+
+ return Math.ceil(value);
+ },
+ getValue = function(value, dim) {
+ return getScalar(value, dim) + 'px';
+ };
+
+ $.extend(F, {
+ // The current version of fancyBox
+ version: '2.1.5',
+
+ defaults: {
+ padding : 15,
+ margin : 20,
+
+ width : 800,
+ height : 600,
+ minWidth : 100,
+ minHeight : 100,
+ maxWidth : 9999,
+ maxHeight : 9999,
+ pixelRatio: 1, // Set to 2 for retina display support
+
+ autoSize : true,
+ autoHeight : false,
+ autoWidth : false,
+
+ autoResize : true,
+ autoCenter : !isTouch,
+ fitToView : true,
+ aspectRatio : false,
+ topRatio : 0.5,
+ leftRatio : 0.5,
+
+ scrolling : 'auto', // 'auto', 'yes' or 'no'
+ wrapCSS : '',
+
+ arrows : true,
+ closeBtn : true,
+ closeClick : false,
+ nextClick : false,
+ mouseWheel : true,
+ autoPlay : false,
+ playSpeed : 3000,
+ preload : 3,
+ modal : false,
+ loop : true,
+
+ ajax : {
+ dataType : 'html',
+ headers : { 'X-fancyBox': true }
+ },
+ iframe : {
+ scrolling : 'auto',
+ preload : true
+ },
+ swf : {
+ wmode: 'transparent',
+ allowfullscreen : 'true',
+ allowscriptaccess : 'always'
+ },
+
+ keys : {
+ next : {
+ 13 : 'left', // enter
+ 34 : 'up', // page down
+ 39 : 'left', // right arrow
+ 40 : 'up' // down arrow
+ },
+ prev : {
+ 8 : 'right', // backspace
+ 33 : 'down', // page up
+ 37 : 'right', // left arrow
+ 38 : 'down' // up arrow
+ },
+ close : [27], // escape key
+ play : [32], // space - start/stop slideshow
+ toggle : [70] // letter "f" - toggle fullscreen
+ },
+
+ direction : {
+ next : 'left',
+ prev : 'right'
+ },
+
+ scrollOutside : true,
+
+ // Override some properties
+ index : 0,
+ type : null,
+ href : null,
+ content : null,
+ title : null,
+
+ // HTML templates
+ tpl: {
+ wrap : '',
+ image : ' ',
+ iframe : '',
+ error : 'The requested content cannot be loaded. Please try again later.
',
+ closeBtn : ' ',
+ next : ' ',
+ prev : ' '
+ },
+
+ // Properties for each animation type
+ // Opening fancyBox
+ openEffect : 'fade', // 'elastic', 'fade' or 'none'
+ openSpeed : 250,
+ openEasing : 'swing',
+ openOpacity : true,
+ openMethod : 'zoomIn',
+
+ // Closing fancyBox
+ closeEffect : 'fade', // 'elastic', 'fade' or 'none'
+ closeSpeed : 250,
+ closeEasing : 'swing',
+ closeOpacity : true,
+ closeMethod : 'zoomOut',
+
+ // Changing next gallery item
+ nextEffect : 'elastic', // 'elastic', 'fade' or 'none'
+ nextSpeed : 250,
+ nextEasing : 'swing',
+ nextMethod : 'changeIn',
+
+ // Changing previous gallery item
+ prevEffect : 'elastic', // 'elastic', 'fade' or 'none'
+ prevSpeed : 250,
+ prevEasing : 'swing',
+ prevMethod : 'changeOut',
+
+ // Enable default helpers
+ helpers : {
+ overlay : true,
+ title : true
+ },
+
+ // Callbacks
+ onCancel : $.noop, // If canceling
+ beforeLoad : $.noop, // Before loading
+ afterLoad : $.noop, // After loading
+ beforeShow : $.noop, // Before changing in current item
+ afterShow : $.noop, // After opening
+ beforeChange : $.noop, // Before changing gallery item
+ beforeClose : $.noop, // Before closing
+ afterClose : $.noop // After closing
+ },
+
+ //Current state
+ group : {}, // Selected group
+ opts : {}, // Group options
+ previous : null, // Previous element
+ coming : null, // Element being loaded
+ current : null, // Currently loaded element
+ isActive : false, // Is activated
+ isOpen : false, // Is currently open
+ isOpened : false, // Have been fully opened at least once
+
+ wrap : null,
+ skin : null,
+ outer : null,
+ inner : null,
+
+ player : {
+ timer : null,
+ isActive : false
+ },
+
+ // Loaders
+ ajaxLoad : null,
+ imgPreload : null,
+
+ // Some collections
+ transitions : {},
+ helpers : {},
+
+ /*
+ * Static methods
+ */
+
+ open: function (group, opts) {
+ if (!group) {
+ return;
+ }
+
+ if (!$.isPlainObject(opts)) {
+ opts = {};
+ }
+
+ // Close if already active
+ if (false === F.close(true)) {
+ return;
+ }
+
+ // Normalize group
+ if (!$.isArray(group)) {
+ group = isQuery(group) ? $(group).get() : [group];
+ }
+
+ // Recheck if the type of each element is `object` and set content type (image, ajax, etc)
+ $.each(group, function(i, element) {
+ var obj = {},
+ href,
+ title,
+ content,
+ type,
+ rez,
+ hrefParts,
+ selector;
+
+ if ($.type(element) === "object") {
+ // Check if is DOM element
+ if (element.nodeType) {
+ element = $(element);
+ }
+
+ if (isQuery(element)) {
+ obj = {
+ href : element.data('fancybox-href') || element.attr('href'),
+ title : $('
').text( element.data('fancybox-title') || element.attr('title') ).html(),
+ isDom : true,
+ element : element
+ };
+
+ if ($.metadata) {
+ $.extend(true, obj, element.metadata());
+ }
+
+ } else {
+ obj = element;
+ }
+ }
+
+ href = opts.href || obj.href || (isString(element) ? element : null);
+ title = opts.title !== undefined ? opts.title : obj.title || '';
+
+ content = opts.content || obj.content;
+ type = content ? 'html' : (opts.type || obj.type);
+
+ if (!type && obj.isDom) {
+ type = element.data('fancybox-type');
+
+ if (!type) {
+ rez = element.prop('class').match(/fancybox\.(\w+)/);
+ type = rez ? rez[1] : null;
+ }
+ }
+
+ if (isString(href)) {
+ // Try to guess the content type
+ if (!type) {
+ if (F.isImage(href)) {
+ type = 'image';
+
+ } else if (F.isSWF(href)) {
+ type = 'swf';
+
+ } else if (href.charAt(0) === '#') {
+ type = 'inline';
+
+ } else if (isString(element)) {
+ type = 'html';
+ content = element;
+ }
+ }
+
+ // Split url into two pieces with source url and content selector, e.g,
+ // "/mypage.html #my_id" will load "/mypage.html" and display element having id "my_id"
+ if (type === 'ajax') {
+ hrefParts = href.split(/\s+/, 2);
+ href = hrefParts.shift();
+ selector = hrefParts.shift();
+ }
+ }
+
+ if (!content) {
+ if (type === 'inline') {
+ if (href) {
+ content = $( isString(href) ? href.replace(/.*(?=#[^\s]+$)/, '') : href ); //strip for ie7
+
+ } else if (obj.isDom) {
+ content = element;
+ }
+
+ } else if (type === 'html') {
+ content = href;
+
+ } else if (!type && !href && obj.isDom) {
+ type = 'inline';
+ content = element;
+ }
+ }
+
+ $.extend(obj, {
+ href : href,
+ type : type,
+ content : content,
+ title : title,
+ selector : selector
+ });
+
+ group[ i ] = obj;
+ });
+
+ // Extend the defaults
+ F.opts = $.extend(true, {}, F.defaults, opts);
+
+ // All options are merged recursive except keys
+ if (opts.keys !== undefined) {
+ F.opts.keys = opts.keys ? $.extend({}, F.defaults.keys, opts.keys) : false;
+ }
+
+ F.group = group;
+
+ return F._start(F.opts.index);
+ },
+
+ // Cancel image loading or abort ajax request
+ cancel: function () {
+ var coming = F.coming;
+
+ if (coming && false === F.trigger('onCancel')) {
+ return;
+ }
+
+ F.hideLoading();
+
+ if (!coming) {
+ return;
+ }
+
+ if (F.ajaxLoad) {
+ F.ajaxLoad.abort();
+ }
+
+ F.ajaxLoad = null;
+
+ if (F.imgPreload) {
+ F.imgPreload.onload = F.imgPreload.onerror = null;
+ }
+
+ if (coming.wrap) {
+ coming.wrap.stop(true, true).trigger('onReset').remove();
+ }
+
+ F.coming = null;
+
+ // If the first item has been canceled, then clear everything
+ if (!F.current) {
+ F._afterZoomOut( coming );
+ }
+ },
+
+ // Start closing animation if is open; remove immediately if opening/closing
+ close: function (event) {
+ F.cancel();
+
+ if (false === F.trigger('beforeClose')) {
+ return;
+ }
+
+ F.unbindEvents();
+
+ if (!F.isActive) {
+ return;
+ }
+
+ if (!F.isOpen || event === true) {
+ $('.fancybox-wrap').stop(true).trigger('onReset').remove();
+
+ F._afterZoomOut();
+
+ } else {
+ F.isOpen = F.isOpened = false;
+ F.isClosing = true;
+
+ $('.fancybox-item, .fancybox-nav').remove();
+
+ F.wrap.stop(true, true).removeClass('fancybox-opened');
+
+ F.transitions[ F.current.closeMethod ]();
+ }
+ },
+
+ // Manage slideshow:
+ // $.fancybox.play(); - toggle slideshow
+ // $.fancybox.play( true ); - start
+ // $.fancybox.play( false ); - stop
+ play: function ( action ) {
+ var clear = function () {
+ clearTimeout(F.player.timer);
+ },
+ set = function () {
+ clear();
+
+ if (F.current && F.player.isActive) {
+ F.player.timer = setTimeout(F.next, F.current.playSpeed);
+ }
+ },
+ stop = function () {
+ clear();
+
+ D.unbind('.player');
+
+ F.player.isActive = false;
+
+ F.trigger('onPlayEnd');
+ },
+ start = function () {
+ if (F.current && (F.current.loop || F.current.index < F.group.length - 1)) {
+ F.player.isActive = true;
+
+ D.bind({
+ 'onCancel.player beforeClose.player' : stop,
+ 'onUpdate.player' : set,
+ 'beforeLoad.player' : clear
+ });
+
+ set();
+
+ F.trigger('onPlayStart');
+ }
+ };
+
+ if (action === true || (!F.player.isActive && action !== false)) {
+ start();
+ } else {
+ stop();
+ }
+ },
+
+ // Navigate to next gallery item
+ next: function ( direction ) {
+ var current = F.current;
+
+ if (current) {
+ if (!isString(direction)) {
+ direction = current.direction.next;
+ }
+
+ F.jumpto(current.index + 1, direction, 'next');
+ }
+ },
+
+ // Navigate to previous gallery item
+ prev: function ( direction ) {
+ var current = F.current;
+
+ if (current) {
+ if (!isString(direction)) {
+ direction = current.direction.prev;
+ }
+
+ F.jumpto(current.index - 1, direction, 'prev');
+ }
+ },
+
+ // Navigate to gallery item by index
+ jumpto: function ( index, direction, router ) {
+ var current = F.current;
+
+ if (!current) {
+ return;
+ }
+
+ index = getScalar(index);
+
+ F.direction = direction || current.direction[ (index >= current.index ? 'next' : 'prev') ];
+ F.router = router || 'jumpto';
+
+ if (current.loop) {
+ if (index < 0) {
+ index = current.group.length + (index % current.group.length);
+ }
+
+ index = index % current.group.length;
+ }
+
+ if (current.group[ index ] !== undefined) {
+ F.cancel();
+
+ F._start(index);
+ }
+ },
+
+ // Center inside viewport and toggle position type to fixed or absolute if needed
+ reposition: function (e, onlyAbsolute) {
+ var current = F.current,
+ wrap = current ? current.wrap : null,
+ pos;
+
+ if (wrap) {
+ pos = F._getPosition(onlyAbsolute);
+
+ if (e && e.type === 'scroll') {
+ delete pos.position;
+
+ wrap.stop(true, true).animate(pos, 200);
+
+ } else {
+ wrap.css(pos);
+
+ current.pos = $.extend({}, current.dim, pos);
+ }
+ }
+ },
+
+ update: function (e) {
+ var type = (e && e.originalEvent && e.originalEvent.type),
+ anyway = !type || type === 'orientationchange';
+
+ if (anyway) {
+ clearTimeout(didUpdate);
+
+ didUpdate = null;
+ }
+
+ if (!F.isOpen || didUpdate) {
+ return;
+ }
+
+ didUpdate = setTimeout(function() {
+ var current = F.current;
+
+ if (!current || F.isClosing) {
+ return;
+ }
+
+ F.wrap.removeClass('fancybox-tmp');
+
+ if (anyway || type === 'load' || (type === 'resize' && current.autoResize)) {
+ F._setDimension();
+ }
+
+ if (!(type === 'scroll' && current.canShrink)) {
+ F.reposition(e);
+ }
+
+ F.trigger('onUpdate');
+
+ didUpdate = null;
+
+ }, (anyway && !isTouch ? 0 : 300));
+ },
+
+ // Shrink content to fit inside viewport or restore if resized
+ toggle: function ( action ) {
+ if (F.isOpen) {
+ F.current.fitToView = $.type(action) === "boolean" ? action : !F.current.fitToView;
+
+ // Help browser to restore document dimensions
+ if (isTouch) {
+ F.wrap.removeAttr('style').addClass('fancybox-tmp');
+
+ F.trigger('onUpdate');
+ }
+
+ F.update();
+ }
+ },
+
+ hideLoading: function () {
+ D.unbind('.loading');
+
+ $('#fancybox-loading').remove();
+ },
+
+ showLoading: function () {
+ var el, viewport;
+
+ F.hideLoading();
+
+ el = $('').click(F.cancel).appendTo('body');
+
+ // If user will press the escape-button, the request will be canceled
+ D.bind('keydown.loading', function(e) {
+ if ((e.which || e.keyCode) === 27) {
+ e.preventDefault();
+
+ F.cancel();
+ }
+ });
+
+ if (!F.defaults.fixed) {
+ viewport = F.getViewport();
+
+ el.css({
+ position : 'absolute',
+ top : (viewport.h * 0.5) + viewport.y,
+ left : (viewport.w * 0.5) + viewport.x
+ });
+ }
+
+ F.trigger('onLoading');
+ },
+
+ getViewport: function () {
+ var locked = (F.current && F.current.locked) || false,
+ rez = {
+ x: W.scrollLeft(),
+ y: W.scrollTop()
+ };
+
+ if (locked && locked.length) {
+ rez.w = locked[0].clientWidth;
+ rez.h = locked[0].clientHeight;
+
+ } else {
+ // See http://bugs.jquery.com/ticket/6724
+ rez.w = isTouch && window.innerWidth ? window.innerWidth : W.width();
+ rez.h = isTouch && window.innerHeight ? window.innerHeight : W.height();
+ }
+
+ return rez;
+ },
+
+ // Unbind the keyboard / clicking actions
+ unbindEvents: function () {
+ if (F.wrap && isQuery(F.wrap)) {
+ F.wrap.unbind('.fb');
+ }
+
+ D.unbind('.fb');
+ W.unbind('.fb');
+ },
+
+ bindEvents: function () {
+ var current = F.current,
+ keys;
+
+ if (!current) {
+ return;
+ }
+
+ // Changing document height on iOS devices triggers a 'resize' event,
+ // that can change document height... repeating infinitely
+ W.bind('orientationchange.fb' + (isTouch ? '' : ' resize.fb') + (current.autoCenter && !current.locked ? ' scroll.fb' : ''), F.update);
+
+ keys = current.keys;
+
+ if (keys) {
+ D.bind('keydown.fb', function (e) {
+ var code = e.which || e.keyCode,
+ target = e.target || e.srcElement;
+
+ // Skip esc key if loading, because showLoading will cancel preloading
+ if (code === 27 && F.coming) {
+ return false;
+ }
+
+ // Ignore key combinations and key events within form elements
+ if (!e.ctrlKey && !e.altKey && !e.shiftKey && !e.metaKey && !(target && (target.type || $(target).is('[contenteditable]')))) {
+ $.each(keys, function(i, val) {
+ if (current.group.length > 1 && val[ code ] !== undefined) {
+ F[ i ]( val[ code ] );
+
+ e.preventDefault();
+ return false;
+ }
+
+ if ($.inArray(code, val) > -1) {
+ F[ i ] ();
+
+ e.preventDefault();
+ return false;
+ }
+ });
+ }
+ });
+ }
+
+ if ($.fn.mousewheel && current.mouseWheel) {
+ F.wrap.bind('mousewheel.fb', function (e, delta, deltaX, deltaY) {
+ var target = e.target || null,
+ parent = $(target),
+ canScroll = false;
+
+ while (parent.length) {
+ if (canScroll || parent.is('.fancybox-skin') || parent.is('.fancybox-wrap')) {
+ break;
+ }
+
+ canScroll = isScrollable( parent[0] );
+ parent = $(parent).parent();
+ }
+
+ if (delta !== 0 && !canScroll) {
+ if (F.group.length > 1 && !current.canShrink) {
+ if (deltaY > 0 || deltaX > 0) {
+ F.prev( deltaY > 0 ? 'down' : 'left' );
+
+ } else if (deltaY < 0 || deltaX < 0) {
+ F.next( deltaY < 0 ? 'up' : 'right' );
+ }
+
+ e.preventDefault();
+ }
+ }
+ });
+ }
+ },
+
+ trigger: function (event, o) {
+ var ret, obj = o || F.coming || F.current;
+
+ if (obj) {
+ if ($.isFunction( obj[event] )) {
+ ret = obj[event].apply(obj, Array.prototype.slice.call(arguments, 1));
+ }
+
+ if (ret === false) {
+ return false;
+ }
+
+ if (obj.helpers) {
+ $.each(obj.helpers, function (helper, opts) {
+ if (opts && F.helpers[helper] && $.isFunction(F.helpers[helper][event])) {
+ F.helpers[helper][event]($.extend(true, {}, F.helpers[helper].defaults, opts), obj);
+ }
+ });
+ }
+ }
+
+ D.trigger(event);
+ },
+
+ isImage: function (str) {
+ return isString(str) && str.match(/(^data:image\/.*,)|(\.(jp(e|g|eg)|gif|png|bmp|webp|svg)((\?|#).*)?$)/i);
+ },
+
+ isSWF: function (str) {
+ return isString(str) && str.match(/\.(swf)((\?|#).*)?$/i);
+ },
+
+ _start: function (index) {
+ var coming = {},
+ obj,
+ href,
+ type,
+ margin,
+ padding;
+
+ index = getScalar( index );
+ obj = F.group[ index ] || null;
+
+ if (!obj) {
+ return false;
+ }
+
+ coming = $.extend(true, {}, F.opts, obj);
+
+ // Convert margin and padding properties to array - top, right, bottom, left
+ margin = coming.margin;
+ padding = coming.padding;
+
+ if ($.type(margin) === 'number') {
+ coming.margin = [margin, margin, margin, margin];
+ }
+
+ if ($.type(padding) === 'number') {
+ coming.padding = [padding, padding, padding, padding];
+ }
+
+ // 'modal' propery is just a shortcut
+ if (coming.modal) {
+ $.extend(true, coming, {
+ closeBtn : false,
+ closeClick : false,
+ nextClick : false,
+ arrows : false,
+ mouseWheel : false,
+ keys : null,
+ helpers: {
+ overlay : {
+ closeClick : false
+ }
+ }
+ });
+ }
+
+ // 'autoSize' property is a shortcut, too
+ if (coming.autoSize) {
+ coming.autoWidth = coming.autoHeight = true;
+ }
+
+ if (coming.width === 'auto') {
+ coming.autoWidth = true;
+ }
+
+ if (coming.height === 'auto') {
+ coming.autoHeight = true;
+ }
+
+ /*
+ * Add reference to the group, so it`s possible to access from callbacks, example:
+ * afterLoad : function() {
+ * this.title = 'Image ' + (this.index + 1) + ' of ' + this.group.length + (this.title ? ' - ' + this.title : '');
+ * }
+ */
+
+ coming.group = F.group;
+ coming.index = index;
+
+ // Give a chance for callback or helpers to update coming item (type, title, etc)
+ F.coming = coming;
+
+ if (false === F.trigger('beforeLoad')) {
+ F.coming = null;
+
+ return;
+ }
+
+ type = coming.type;
+ href = coming.href;
+
+ if (!type) {
+ F.coming = null;
+
+ //If we can not determine content type then drop silently or display next/prev item if looping through gallery
+ if (F.current && F.router && F.router !== 'jumpto') {
+ F.current.index = index;
+
+ return F[ F.router ]( F.direction );
+ }
+
+ return false;
+ }
+
+ F.isActive = true;
+
+ if (type === 'image' || type === 'swf') {
+ coming.autoHeight = coming.autoWidth = false;
+ coming.scrolling = 'visible';
+ }
+
+ if (type === 'image') {
+ coming.aspectRatio = true;
+ }
+
+ if (type === 'iframe' && isTouch) {
+ coming.scrolling = 'scroll';
+ }
+
+ // Build the neccessary markup
+ coming.wrap = $(coming.tpl.wrap).addClass('fancybox-' + (isTouch ? 'mobile' : 'desktop') + ' fancybox-type-' + type + ' fancybox-tmp ' + coming.wrapCSS).appendTo( coming.parent || 'body' );
+
+ $.extend(coming, {
+ skin : $('.fancybox-skin', coming.wrap),
+ outer : $('.fancybox-outer', coming.wrap),
+ inner : $('.fancybox-inner', coming.wrap)
+ });
+
+ $.each(["Top", "Right", "Bottom", "Left"], function(i, v) {
+ coming.skin.css('padding' + v, getValue(coming.padding[ i ]));
+ });
+
+ F.trigger('onReady');
+
+ // Check before try to load; 'inline' and 'html' types need content, others - href
+ if (type === 'inline' || type === 'html') {
+ if (!coming.content || !coming.content.length) {
+ return F._error( 'content' );
+ }
+
+ } else if (!href) {
+ return F._error( 'href' );
+ }
+
+ if (type === 'image') {
+ F._loadImage();
+
+ } else if (type === 'ajax') {
+ F._loadAjax();
+
+ } else if (type === 'iframe') {
+ F._loadIframe();
+
+ } else {
+ F._afterLoad();
+ }
+ },
+
+ _error: function ( type ) {
+ $.extend(F.coming, {
+ type : 'html',
+ autoWidth : true,
+ autoHeight : true,
+ minWidth : 0,
+ minHeight : 0,
+ scrolling : 'no',
+ hasError : type,
+ content : F.coming.tpl.error
+ });
+
+ F._afterLoad();
+ },
+
+ _loadImage: function () {
+ // Reset preload image so it is later possible to check "complete" property
+ var img = F.imgPreload = new Image();
+
+ img.onload = function () {
+ this.onload = this.onerror = null;
+
+ F.coming.width = this.width / F.opts.pixelRatio;
+ F.coming.height = this.height / F.opts.pixelRatio;
+
+ F._afterLoad();
+ };
+
+ img.onerror = function () {
+ this.onload = this.onerror = null;
+
+ F._error( 'image' );
+ };
+
+ img.src = F.coming.href;
+
+ if (img.complete !== true) {
+ F.showLoading();
+ }
+ },
+
+ _loadAjax: function () {
+ var coming = F.coming;
+
+ F.showLoading();
+
+ F.ajaxLoad = $.ajax($.extend({}, coming.ajax, {
+ url: coming.href,
+ error: function (jqXHR, textStatus) {
+ if (F.coming && textStatus !== 'abort') {
+ F._error( 'ajax', jqXHR );
+
+ } else {
+ F.hideLoading();
+ }
+ },
+ success: function (data, textStatus) {
+ if (textStatus === 'success') {
+ coming.content = data;
+
+ F._afterLoad();
+ }
+ }
+ }));
+ },
+
+ _loadIframe: function() {
+ var coming = F.coming,
+ iframe = $(coming.tpl.iframe.replace(/\{rnd\}/g, new Date().getTime()))
+ .attr('scrolling', isTouch ? 'auto' : coming.iframe.scrolling)
+ .attr('src', coming.href);
+
+ // This helps IE
+ $(coming.wrap).bind('onReset', function () {
+ try {
+ $(this).find('iframe').hide().attr('src', '//about:blank').end().empty();
+ } catch (e) {}
+ });
+
+ if (coming.iframe.preload) {
+ F.showLoading();
+
+ iframe.one('load', function() {
+ $(this).data('ready', 1);
+
+ // iOS will lose scrolling if we resize
+ if (!isTouch) {
+ $(this).bind('load.fb', F.update);
+ }
+
+ // Without this trick:
+ // - iframe won't scroll on iOS devices
+ // - IE7 sometimes displays empty iframe
+ $(this).parents('.fancybox-wrap').width('100%').removeClass('fancybox-tmp').show();
+
+ F._afterLoad();
+ });
+ }
+
+ coming.content = iframe.appendTo( coming.inner );
+
+ if (!coming.iframe.preload) {
+ F._afterLoad();
+ }
+ },
+
+ _preloadImages: function() {
+ var group = F.group,
+ current = F.current,
+ len = group.length,
+ cnt = current.preload ? Math.min(current.preload, len - 1) : 0,
+ item,
+ i;
+
+ for (i = 1; i <= cnt; i += 1) {
+ item = group[ (current.index + i ) % len ];
+
+ if (item.type === 'image' && item.href) {
+ new Image().src = item.href;
+ }
+ }
+ },
+
+ _afterLoad: function () {
+ var coming = F.coming,
+ previous = F.current,
+ placeholder = 'fancybox-placeholder',
+ current,
+ content,
+ type,
+ scrolling,
+ href,
+ embed;
+
+ F.hideLoading();
+
+ if (!coming || F.isActive === false) {
+ return;
+ }
+
+ if (false === F.trigger('afterLoad', coming, previous)) {
+ coming.wrap.stop(true).trigger('onReset').remove();
+
+ F.coming = null;
+
+ return;
+ }
+
+ if (previous) {
+ F.trigger('beforeChange', previous);
+
+ previous.wrap.stop(true).removeClass('fancybox-opened')
+ .find('.fancybox-item, .fancybox-nav')
+ .remove();
+ }
+
+ F.unbindEvents();
+
+ current = coming;
+ content = coming.content;
+ type = coming.type;
+ scrolling = coming.scrolling;
+
+ $.extend(F, {
+ wrap : current.wrap,
+ skin : current.skin,
+ outer : current.outer,
+ inner : current.inner,
+ current : current,
+ previous : previous
+ });
+
+ href = current.href;
+
+ switch (type) {
+ case 'inline':
+ case 'ajax':
+ case 'html':
+ if (current.selector) {
+ content = $('').html(content).find(current.selector);
+
+ } else if (isQuery(content)) {
+ if (!content.data(placeholder)) {
+ content.data(placeholder, $('
').insertAfter( content ).hide() );
+ }
+
+ content = content.show().detach();
+
+ current.wrap.bind('onReset', function () {
+ if ($(this).find(content).length) {
+ content.hide().replaceAll( content.data(placeholder) ).data(placeholder, false);
+ }
+ });
+ }
+ break;
+
+ case 'image':
+ content = current.tpl.image.replace(/\{href\}/g, href);
+ break;
+
+ case 'swf':
+ content = '
';
+ embed = '';
+
+ $.each(current.swf, function(name, val) {
+ content += ' ';
+ embed += ' ' + name + '="' + val + '"';
+ });
+
+ content += '';
+ break;
+ }
+
+ if (!(isQuery(content) && content.parent().is(current.inner))) {
+ current.inner.append( content );
+ }
+
+ // Give a chance for helpers or callbacks to update elements
+ F.trigger('beforeShow');
+
+ // Set scrolling before calculating dimensions
+ current.inner.css('overflow', scrolling === 'yes' ? 'scroll' : (scrolling === 'no' ? 'hidden' : scrolling));
+
+ // Set initial dimensions and start position
+ F._setDimension();
+
+ F.reposition();
+
+ F.isOpen = false;
+ F.coming = null;
+
+ F.bindEvents();
+
+ if (!F.isOpened) {
+ $('.fancybox-wrap').not( current.wrap ).stop(true).trigger('onReset').remove();
+
+ } else if (previous.prevMethod) {
+ F.transitions[ previous.prevMethod ]();
+ }
+
+ F.transitions[ F.isOpened ? current.nextMethod : current.openMethod ]();
+
+ F._preloadImages();
+ },
+
+ _setDimension: function () {
+ var viewport = F.getViewport(),
+ steps = 0,
+ canShrink = false,
+ canExpand = false,
+ wrap = F.wrap,
+ skin = F.skin,
+ inner = F.inner,
+ current = F.current,
+ width = current.width,
+ height = current.height,
+ minWidth = current.minWidth,
+ minHeight = current.minHeight,
+ maxWidth = current.maxWidth,
+ maxHeight = current.maxHeight,
+ scrolling = current.scrolling,
+ scrollOut = current.scrollOutside ? current.scrollbarWidth : 0,
+ margin = current.margin,
+ wMargin = getScalar(margin[1] + margin[3]),
+ hMargin = getScalar(margin[0] + margin[2]),
+ wPadding,
+ hPadding,
+ wSpace,
+ hSpace,
+ origWidth,
+ origHeight,
+ origMaxWidth,
+ origMaxHeight,
+ ratio,
+ width_,
+ height_,
+ maxWidth_,
+ maxHeight_,
+ iframe,
+ body;
+
+ // Reset dimensions so we could re-check actual size
+ wrap.add(skin).add(inner).width('auto').height('auto').removeClass('fancybox-tmp');
+
+ wPadding = getScalar(skin.outerWidth(true) - skin.width());
+ hPadding = getScalar(skin.outerHeight(true) - skin.height());
+
+ // Any space between content and viewport (margin, padding, border, title)
+ wSpace = wMargin + wPadding;
+ hSpace = hMargin + hPadding;
+
+ origWidth = isPercentage(width) ? (viewport.w - wSpace) * getScalar(width) / 100 : width;
+ origHeight = isPercentage(height) ? (viewport.h - hSpace) * getScalar(height) / 100 : height;
+
+ if (current.type === 'iframe') {
+ iframe = current.content;
+
+ if (current.autoHeight && iframe.data('ready') === 1) {
+ try {
+ if (iframe[0].contentWindow.document.location) {
+ inner.width( origWidth ).height(9999);
+
+ body = iframe.contents().find('body');
+
+ if (scrollOut) {
+ body.css('overflow-x', 'hidden');
+ }
+
+ origHeight = body.outerHeight(true);
+ }
+
+ } catch (e) {}
+ }
+
+ } else if (current.autoWidth || current.autoHeight) {
+ inner.addClass( 'fancybox-tmp' );
+
+ // Set width or height in case we need to calculate only one dimension
+ if (!current.autoWidth) {
+ inner.width( origWidth );
+ }
+
+ if (!current.autoHeight) {
+ inner.height( origHeight );
+ }
+
+ if (current.autoWidth) {
+ origWidth = inner.width();
+ }
+
+ if (current.autoHeight) {
+ origHeight = inner.height();
+ }
+
+ inner.removeClass( 'fancybox-tmp' );
+ }
+
+ width = getScalar( origWidth );
+ height = getScalar( origHeight );
+
+ ratio = origWidth / origHeight;
+
+ // Calculations for the content
+ minWidth = getScalar(isPercentage(minWidth) ? getScalar(minWidth, 'w') - wSpace : minWidth);
+ maxWidth = getScalar(isPercentage(maxWidth) ? getScalar(maxWidth, 'w') - wSpace : maxWidth);
+
+ minHeight = getScalar(isPercentage(minHeight) ? getScalar(minHeight, 'h') - hSpace : minHeight);
+ maxHeight = getScalar(isPercentage(maxHeight) ? getScalar(maxHeight, 'h') - hSpace : maxHeight);
+
+ // These will be used to determine if wrap can fit in the viewport
+ origMaxWidth = maxWidth;
+ origMaxHeight = maxHeight;
+
+ if (current.fitToView) {
+ maxWidth = Math.min(viewport.w - wSpace, maxWidth);
+ maxHeight = Math.min(viewport.h - hSpace, maxHeight);
+ }
+
+ maxWidth_ = viewport.w - wMargin;
+ maxHeight_ = viewport.h - hMargin;
+
+ if (current.aspectRatio) {
+ if (width > maxWidth) {
+ width = maxWidth;
+ height = getScalar(width / ratio);
+ }
+
+ if (height > maxHeight) {
+ height = maxHeight;
+ width = getScalar(height * ratio);
+ }
+
+ if (width < minWidth) {
+ width = minWidth;
+ height = getScalar(width / ratio);
+ }
+
+ if (height < minHeight) {
+ height = minHeight;
+ width = getScalar(height * ratio);
+ }
+
+ } else {
+ width = Math.max(minWidth, Math.min(width, maxWidth));
+
+ if (current.autoHeight && current.type !== 'iframe') {
+ inner.width( width );
+
+ height = inner.height();
+ }
+
+ height = Math.max(minHeight, Math.min(height, maxHeight));
+ }
+
+ // Try to fit inside viewport (including the title)
+ if (current.fitToView) {
+ inner.width( width ).height( height );
+
+ wrap.width( width + wPadding );
+
+ // Real wrap dimensions
+ width_ = wrap.width();
+ height_ = wrap.height();
+
+ if (current.aspectRatio) {
+ while ((width_ > maxWidth_ || height_ > maxHeight_) && width > minWidth && height > minHeight) {
+ if (steps++ > 19) {
+ break;
+ }
+
+ height = Math.max(minHeight, Math.min(maxHeight, height - 10));
+ width = getScalar(height * ratio);
+
+ if (width < minWidth) {
+ width = minWidth;
+ height = getScalar(width / ratio);
+ }
+
+ if (width > maxWidth) {
+ width = maxWidth;
+ height = getScalar(width / ratio);
+ }
+
+ inner.width( width ).height( height );
+
+ wrap.width( width + wPadding );
+
+ width_ = wrap.width();
+ height_ = wrap.height();
+ }
+
+ } else {
+ width = Math.max(minWidth, Math.min(width, width - (width_ - maxWidth_)));
+ height = Math.max(minHeight, Math.min(height, height - (height_ - maxHeight_)));
+ }
+ }
+
+ if (scrollOut && scrolling === 'auto' && height < origHeight && (width + wPadding + scrollOut) < maxWidth_) {
+ width += scrollOut;
+ }
+
+ inner.width( width ).height( height );
+
+ wrap.width( width + wPadding );
+
+ width_ = wrap.width();
+ height_ = wrap.height();
+
+ canShrink = (width_ > maxWidth_ || height_ > maxHeight_) && width > minWidth && height > minHeight;
+ canExpand = current.aspectRatio ? (width < origMaxWidth && height < origMaxHeight && width < origWidth && height < origHeight) : ((width < origMaxWidth || height < origMaxHeight) && (width < origWidth || height < origHeight));
+
+ $.extend(current, {
+ dim : {
+ width : getValue( width_ ),
+ height : getValue( height_ )
+ },
+ origWidth : origWidth,
+ origHeight : origHeight,
+ canShrink : canShrink,
+ canExpand : canExpand,
+ wPadding : wPadding,
+ hPadding : hPadding,
+ wrapSpace : height_ - skin.outerHeight(true),
+ skinSpace : skin.height() - height
+ });
+
+ if (!iframe && current.autoHeight && height > minHeight && height < maxHeight && !canExpand) {
+ inner.height('auto');
+ }
+ },
+
+ _getPosition: function (onlyAbsolute) {
+ var current = F.current,
+ viewport = F.getViewport(),
+ margin = current.margin,
+ width = F.wrap.width() + margin[1] + margin[3],
+ height = F.wrap.height() + margin[0] + margin[2],
+ rez = {
+ position: 'absolute',
+ top : margin[0],
+ left : margin[3]
+ };
+
+ if (current.autoCenter && current.fixed && !onlyAbsolute && height <= viewport.h && width <= viewport.w) {
+ rez.position = 'fixed';
+
+ } else if (!current.locked) {
+ rez.top += viewport.y;
+ rez.left += viewport.x;
+ }
+
+ rez.top = getValue(Math.max(rez.top, rez.top + ((viewport.h - height) * current.topRatio)));
+ rez.left = getValue(Math.max(rez.left, rez.left + ((viewport.w - width) * current.leftRatio)));
+
+ return rez;
+ },
+
+ _afterZoomIn: function () {
+ var current = F.current;
+
+ if (!current) {
+ return;
+ }
+
+ F.isOpen = F.isOpened = true;
+
+ F.wrap.css('overflow', 'visible').addClass('fancybox-opened').hide().show(0);
+
+ F.update();
+
+ // Assign a click event
+ if ( current.closeClick || (current.nextClick && F.group.length > 1) ) {
+ F.inner.css('cursor', 'pointer').bind('click.fb', function(e) {
+ if (!$(e.target).is('a') && !$(e.target).parent().is('a')) {
+ e.preventDefault();
+
+ F[ current.closeClick ? 'close' : 'next' ]();
+ }
+ });
+ }
+
+ // Create a close button
+ if (current.closeBtn) {
+ $(current.tpl.closeBtn).appendTo(F.skin).bind('click.fb', function(e) {
+ e.preventDefault();
+
+ F.close();
+ });
+ }
+
+ // Create navigation arrows
+ if (current.arrows && F.group.length > 1) {
+ if (current.loop || current.index > 0) {
+ $(current.tpl.prev).appendTo(F.outer).bind('click.fb', F.prev);
+ }
+
+ if (current.loop || current.index < F.group.length - 1) {
+ $(current.tpl.next).appendTo(F.outer).bind('click.fb', F.next);
+ }
+ }
+
+ F.trigger('afterShow');
+
+ // Stop the slideshow if this is the last item
+ if (!current.loop && current.index === current.group.length - 1) {
+
+ F.play( false );
+
+ } else if (F.opts.autoPlay && !F.player.isActive) {
+ F.opts.autoPlay = false;
+
+ F.play(true);
+ }
+ },
+
+ _afterZoomOut: function ( obj ) {
+ obj = obj || F.current;
+
+ $('.fancybox-wrap').trigger('onReset').remove();
+
+ $.extend(F, {
+ group : {},
+ opts : {},
+ router : false,
+ current : null,
+ isActive : false,
+ isOpened : false,
+ isOpen : false,
+ isClosing : false,
+ wrap : null,
+ skin : null,
+ outer : null,
+ inner : null
+ });
+
+ F.trigger('afterClose', obj);
+ }
+ });
+
+ /*
+ * Default transitions
+ */
+
+ F.transitions = {
+ getOrigPosition: function () {
+ var current = F.current,
+ element = current.element,
+ orig = current.orig,
+ pos = {},
+ width = 50,
+ height = 50,
+ hPadding = current.hPadding,
+ wPadding = current.wPadding,
+ viewport = F.getViewport();
+
+ if (!orig && current.isDom && element.is(':visible')) {
+ orig = element.find('img:first');
+
+ if (!orig.length) {
+ orig = element;
+ }
+ }
+
+ if (isQuery(orig)) {
+ pos = orig.offset();
+
+ if (orig.is('img')) {
+ width = orig.outerWidth();
+ height = orig.outerHeight();
+ }
+
+ } else {
+ pos.top = viewport.y + (viewport.h - height) * current.topRatio;
+ pos.left = viewport.x + (viewport.w - width) * current.leftRatio;
+ }
+
+ if (F.wrap.css('position') === 'fixed' || current.locked) {
+ pos.top -= viewport.y;
+ pos.left -= viewport.x;
+ }
+
+ pos = {
+ top : getValue(pos.top - hPadding * current.topRatio),
+ left : getValue(pos.left - wPadding * current.leftRatio),
+ width : getValue(width + wPadding),
+ height : getValue(height + hPadding)
+ };
+
+ return pos;
+ },
+
+ step: function (now, fx) {
+ var ratio,
+ padding,
+ value,
+ prop = fx.prop,
+ current = F.current,
+ wrapSpace = current.wrapSpace,
+ skinSpace = current.skinSpace;
+
+ if (prop === 'width' || prop === 'height') {
+ ratio = fx.end === fx.start ? 1 : (now - fx.start) / (fx.end - fx.start);
+
+ if (F.isClosing) {
+ ratio = 1 - ratio;
+ }
+
+ padding = prop === 'width' ? current.wPadding : current.hPadding;
+ value = now - padding;
+
+ F.skin[ prop ]( getScalar( prop === 'width' ? value : value - (wrapSpace * ratio) ) );
+ F.inner[ prop ]( getScalar( prop === 'width' ? value : value - (wrapSpace * ratio) - (skinSpace * ratio) ) );
+ }
+ },
+
+ zoomIn: function () {
+ var current = F.current,
+ startPos = current.pos,
+ effect = current.openEffect,
+ elastic = effect === 'elastic',
+ endPos = $.extend({opacity : 1}, startPos);
+
+ // Remove "position" property that breaks older IE
+ delete endPos.position;
+
+ if (elastic) {
+ startPos = this.getOrigPosition();
+
+ if (current.openOpacity) {
+ startPos.opacity = 0.1;
+ }
+
+ } else if (effect === 'fade') {
+ startPos.opacity = 0.1;
+ }
+
+ F.wrap.css(startPos).animate(endPos, {
+ duration : effect === 'none' ? 0 : current.openSpeed,
+ easing : current.openEasing,
+ step : elastic ? this.step : null,
+ complete : F._afterZoomIn
+ });
+ },
+
+ zoomOut: function () {
+ var current = F.current,
+ effect = current.closeEffect,
+ elastic = effect === 'elastic',
+ endPos = {opacity : 0.1};
+
+ if (elastic) {
+ endPos = this.getOrigPosition();
+
+ if (current.closeOpacity) {
+ endPos.opacity = 0.1;
+ }
+ }
+
+ F.wrap.animate(endPos, {
+ duration : effect === 'none' ? 0 : current.closeSpeed,
+ easing : current.closeEasing,
+ step : elastic ? this.step : null,
+ complete : F._afterZoomOut
+ });
+ },
+
+ changeIn: function () {
+ var current = F.current,
+ effect = current.nextEffect,
+ startPos = current.pos,
+ endPos = { opacity : 1 },
+ direction = F.direction,
+ distance = 200,
+ field;
+
+ startPos.opacity = 0.1;
+
+ if (effect === 'elastic') {
+ field = direction === 'down' || direction === 'up' ? 'top' : 'left';
+
+ if (direction === 'down' || direction === 'right') {
+ startPos[ field ] = getValue(getScalar(startPos[ field ]) - distance);
+ endPos[ field ] = '+=' + distance + 'px';
+
+ } else {
+ startPos[ field ] = getValue(getScalar(startPos[ field ]) + distance);
+ endPos[ field ] = '-=' + distance + 'px';
+ }
+ }
+
+ // Workaround for http://bugs.jquery.com/ticket/12273
+ if (effect === 'none') {
+ F._afterZoomIn();
+
+ } else {
+ F.wrap.css(startPos).animate(endPos, {
+ duration : current.nextSpeed,
+ easing : current.nextEasing,
+ complete : F._afterZoomIn
+ });
+ }
+ },
+
+ changeOut: function () {
+ var previous = F.previous,
+ effect = previous.prevEffect,
+ endPos = { opacity : 0.1 },
+ direction = F.direction,
+ distance = 200;
+
+ if (effect === 'elastic') {
+ endPos[ direction === 'down' || direction === 'up' ? 'top' : 'left' ] = ( direction === 'up' || direction === 'left' ? '-' : '+' ) + '=' + distance + 'px';
+ }
+
+ previous.wrap.animate(endPos, {
+ duration : effect === 'none' ? 0 : previous.prevSpeed,
+ easing : previous.prevEasing,
+ complete : function () {
+ $(this).trigger('onReset').remove();
+ }
+ });
+ }
+ };
+
+ /*
+ * Overlay helper
+ */
+
+ F.helpers.overlay = {
+ defaults : {
+ closeClick : true, // if true, fancyBox will be closed when user clicks on the overlay
+ speedOut : 200, // duration of fadeOut animation
+ showEarly : true, // indicates if should be opened immediately or wait until the content is ready
+ css : {}, // custom CSS properties
+ locked : !isTouch, // if true, the content will be locked into overlay
+ fixed : true // if false, the overlay CSS position property will not be set to "fixed"
+ },
+
+ overlay : null, // current handle
+ fixed : false, // indicates if the overlay has position "fixed"
+ el : $('html'), // element that contains "the lock"
+
+ // Public methods
+ create : function(opts) {
+ var parent;
+
+ opts = $.extend({}, this.defaults, opts);
+
+ if (this.overlay) {
+ this.close();
+ }
+
+ parent = F.coming ? F.coming.parent : opts.parent;
+
+ this.overlay = $('
').appendTo( parent && parent.lenth ? parent : 'body' );
+ this.fixed = false;
+
+ if (opts.fixed && F.defaults.fixed) {
+ this.overlay.addClass('fancybox-overlay-fixed');
+
+ this.fixed = true;
+ }
+ },
+
+ open : function(opts) {
+ var that = this;
+
+ opts = $.extend({}, this.defaults, opts);
+
+ if (this.overlay) {
+ this.overlay.unbind('.overlay').width('auto').height('auto');
+
+ } else {
+ this.create(opts);
+ }
+
+ if (!this.fixed) {
+ W.bind('resize.overlay', $.proxy( this.update, this) );
+
+ this.update();
+ }
+
+ if (opts.closeClick) {
+ this.overlay.bind('click.overlay', function(e) {
+ if ($(e.target).hasClass('fancybox-overlay')) {
+ if (F.isActive) {
+ F.close();
+ } else {
+ that.close();
+ }
+
+ return false;
+ }
+ });
+ }
+
+ this.overlay.css( opts.css ).show();
+ },
+
+ close : function() {
+ W.unbind('resize.overlay');
+
+ if (this.el.hasClass('fancybox-lock')) {
+ $('.fancybox-margin').removeClass('fancybox-margin');
+
+ this.el.removeClass('fancybox-lock');
+
+ W.scrollTop( this.scrollV ).scrollLeft( this.scrollH );
+ }
+
+ $('.fancybox-overlay').remove().hide();
+
+ $.extend(this, {
+ overlay : null,
+ fixed : false
+ });
+ },
+
+ // Private, callbacks
+
+ update : function () {
+ var width = '100%', offsetWidth;
+
+ // Reset width/height so it will not mess
+ this.overlay.width(width).height('100%');
+
+ // jQuery does not return reliable result for IE
+ if (IE) {
+ offsetWidth = Math.max(document.documentElement.offsetWidth, document.body.offsetWidth);
+
+ if (D.width() > offsetWidth) {
+ width = D.width();
+ }
+
+ } else if (D.width() > W.width()) {
+ width = D.width();
+ }
+
+ this.overlay.width(width).height(D.height());
+ },
+
+ // This is where we can manipulate DOM, because later it would cause iframes to reload
+ onReady : function (opts, obj) {
+ var overlay = this.overlay;
+
+ $('.fancybox-overlay').stop(true, true);
+
+ if (!overlay) {
+ this.create(opts);
+ }
+
+ if (opts.locked && this.fixed && obj.fixed) {
+ obj.locked = this.overlay.append( obj.wrap );
+ obj.fixed = false;
+ }
+
+ if (opts.showEarly === true) {
+ this.beforeShow.apply(this, arguments);
+ }
+ },
+
+ beforeShow : function(opts, obj) {
+ if (obj.locked && !this.el.hasClass('fancybox-lock')) {
+ if (this.fixPosition !== false) {
+ $('*').filter(function(){
+ return ($(this).css('position') === 'fixed' && !$(this).hasClass("fancybox-overlay") && !$(this).hasClass("fancybox-wrap") );
+ }).addClass('fancybox-margin');
+ }
+
+ this.el.addClass('fancybox-margin');
+
+ this.scrollV = W.scrollTop();
+ this.scrollH = W.scrollLeft();
+
+ this.el.addClass('fancybox-lock');
+
+ W.scrollTop( this.scrollV ).scrollLeft( this.scrollH );
+ }
+
+ this.open(opts);
+ },
+
+ onUpdate : function() {
+ if (!this.fixed) {
+ this.update();
+ }
+ },
+
+ afterClose: function (opts) {
+ // Remove overlay if exists and fancyBox is not opening
+ // (e.g., it is not being open using afterClose callback)
+ if (this.overlay && !F.coming) {
+ this.overlay.fadeOut(opts.speedOut, $.proxy( this.close, this ));
+ }
+ }
+ };
+
+ /*
+ * Title helper
+ */
+
+ F.helpers.title = {
+ defaults : {
+ type : 'float', // 'float', 'inside', 'outside' or 'over',
+ position : 'bottom' // 'top' or 'bottom'
+ },
+
+ beforeShow: function (opts) {
+ var current = F.current,
+ text = current.title,
+ type = opts.type,
+ title,
+ target;
+
+ if ($.isFunction(text)) {
+ text = text.call(current.element, current);
+ }
+
+ if (!isString(text) || $.trim(text) === '') {
+ return;
+ }
+
+ title = $('
' + text + '
');
+
+ switch (type) {
+ case 'inside':
+ target = F.skin;
+ break;
+
+ case 'outside':
+ target = F.wrap;
+ break;
+
+ case 'over':
+ target = F.inner;
+ break;
+
+ default: // 'float'
+ target = F.skin;
+
+ title.appendTo('body');
+
+ if (IE) {
+ title.width( title.width() );
+ }
+
+ title.wrapInner('
');
+
+ //Increase bottom margin so this title will also fit into viewport
+ F.current.margin[2] += Math.abs( getScalar(title.css('margin-bottom')) );
+ break;
+ }
+
+ title[ (opts.position === 'top' ? 'prependTo' : 'appendTo') ](target);
+ }
+ };
+
+ // jQuery plugin initialization
+ $.fn.fancybox = function (options) {
+ var index,
+ that = $(this),
+ selector = this.selector || '',
+ run = function(e) {
+ var what = $(this).blur(), idx = index, relType, relVal;
+
+ if (!(e.ctrlKey || e.altKey || e.shiftKey || e.metaKey) && !what.is('.fancybox-wrap')) {
+ relType = options.groupAttr || 'data-fancybox-group';
+ relVal = what.attr(relType);
+
+ if (!relVal) {
+ relType = 'rel';
+ relVal = what.get(0)[ relType ];
+ }
+
+ if (relVal && relVal !== '' && relVal !== 'nofollow') {
+ what = selector.length ? $(selector) : that;
+ what = what.filter('[' + relType + '="' + relVal + '"]');
+ idx = what.index(this);
+ }
+
+ options.index = idx;
+
+ // Stop an event from bubbling if everything is fine
+ if (F.open(what, options) !== false) {
+ e.preventDefault();
+ }
+ }
+ };
+
+ options = options || {};
+ index = options.index || 0;
+
+ if (!selector || options.live === false) {
+ that.unbind('click.fb-start').bind('click.fb-start', run);
+
+ } else {
+ D.undelegate(selector, 'click.fb-start').delegate(selector + ":not('.fancybox-item, .fancybox-nav')", 'click.fb-start', run);
+ }
+
+ this.filter('[data-fancybox-start=1]').trigger('click');
+
+ return this;
+ };
+
+ // Tests that need a body at doc ready
+ D.ready(function() {
+ var w1, w2;
+
+ if ( $.scrollbarWidth === undefined ) {
+ // http://benalman.com/projects/jquery-misc-plugins/#scrollbarwidth
+ $.scrollbarWidth = function() {
+ var parent = $('
').appendTo('body'),
+ child = parent.children(),
+ width = child.innerWidth() - child.height( 99 ).innerWidth();
+
+ parent.remove();
+
+ return width;
+ };
+ }
+
+ if ( $.support.fixedPosition === undefined ) {
+ $.support.fixedPosition = (function() {
+ var elem = $('
').appendTo('body'),
+ fixed = ( elem[0].offsetTop === 20 || elem[0].offsetTop === 15 );
+
+ elem.remove();
+
+ return fixed;
+ }());
+ }
+
+ $.extend(F.defaults, {
+ scrollbarWidth : $.scrollbarWidth(),
+ fixed : $.support.fixedPosition,
+ parent : $('body')
+ });
+
+ //Get real width of page scroll-bar
+ w1 = $(window).width();
+
+ H.addClass('fancybox-lock-test');
+
+ w2 = $(window).width();
+
+ H.removeClass('fancybox-lock-test');
+
+ $("").appendTo("head");
+ });
+
+}(window, document, jQuery));
\ No newline at end of file
diff --git a/packages/site/themes/landscape/source/fancybox/jquery.fancybox.pack.js b/packages/site/themes/landscape/source/fancybox/jquery.fancybox.pack.js
new file mode 100644
index 0000000..2db1280
--- /dev/null
+++ b/packages/site/themes/landscape/source/fancybox/jquery.fancybox.pack.js
@@ -0,0 +1,46 @@
+/*! fancyBox v2.1.5 fancyapps.com | fancyapps.com/fancybox/#license */
+(function(s,H,f,w){var K=f("html"),q=f(s),p=f(H),b=f.fancybox=function(){b.open.apply(this,arguments)},J=navigator.userAgent.match(/msie/i),C=null,t=H.createTouch!==w,u=function(a){return a&&a.hasOwnProperty&&a instanceof f},r=function(a){return a&&"string"===f.type(a)},F=function(a){return r(a)&&0
',image:' ',iframe:'",error:'The requested content cannot be loaded. Please try again later.
',closeBtn:' ',next:' ',prev:' '},openEffect:"fade",openSpeed:250,openEasing:"swing",openOpacity:!0,
+openMethod:"zoomIn",closeEffect:"fade",closeSpeed:250,closeEasing:"swing",closeOpacity:!0,closeMethod:"zoomOut",nextEffect:"elastic",nextSpeed:250,nextEasing:"swing",nextMethod:"changeIn",prevEffect:"elastic",prevSpeed:250,prevEasing:"swing",prevMethod:"changeOut",helpers:{overlay:!0,title:!0},onCancel:f.noop,beforeLoad:f.noop,afterLoad:f.noop,beforeShow:f.noop,afterShow:f.noop,beforeChange:f.noop,beforeClose:f.noop,afterClose:f.noop},group:{},opts:{},previous:null,coming:null,current:null,isActive:!1,
+isOpen:!1,isOpened:!1,wrap:null,skin:null,outer:null,inner:null,player:{timer:null,isActive:!1},ajaxLoad:null,imgPreload:null,transitions:{},helpers:{},open:function(a,d){if(a&&(f.isPlainObject(d)||(d={}),!1!==b.close(!0)))return f.isArray(a)||(a=u(a)?f(a).get():[a]),f.each(a,function(e,c){var l={},g,h,k,n,m;"object"===f.type(c)&&(c.nodeType&&(c=f(c)),u(c)?(l={href:c.data("fancybox-href")||c.attr("href"),title:f("
").text(c.data("fancybox-title")||c.attr("title")).html(),isDom:!0,element:c},
+f.metadata&&f.extend(!0,l,c.metadata())):l=c);g=d.href||l.href||(r(c)?c:null);h=d.title!==w?d.title:l.title||"";n=(k=d.content||l.content)?"html":d.type||l.type;!n&&l.isDom&&(n=c.data("fancybox-type"),n||(n=(n=c.prop("class").match(/fancybox\.(\w+)/))?n[1]:null));r(g)&&(n||(b.isImage(g)?n="image":b.isSWF(g)?n="swf":"#"===g.charAt(0)?n="inline":r(c)&&(n="html",k=c)),"ajax"===n&&(m=g.split(/\s+/,2),g=m.shift(),m=m.shift()));k||("inline"===n?g?k=f(r(g)?g.replace(/.*(?=#[^\s]+$)/,""):g):l.isDom&&(k=c):
+"html"===n?k=g:n||g||!l.isDom||(n="inline",k=c));f.extend(l,{href:g,type:n,content:k,title:h,selector:m});a[e]=l}),b.opts=f.extend(!0,{},b.defaults,d),d.keys!==w&&(b.opts.keys=d.keys?f.extend({},b.defaults.keys,d.keys):!1),b.group=a,b._start(b.opts.index)},cancel:function(){var a=b.coming;a&&!1===b.trigger("onCancel")||(b.hideLoading(),a&&(b.ajaxLoad&&b.ajaxLoad.abort(),b.ajaxLoad=null,b.imgPreload&&(b.imgPreload.onload=b.imgPreload.onerror=null),a.wrap&&a.wrap.stop(!0,!0).trigger("onReset").remove(),
+b.coming=null,b.current||b._afterZoomOut(a)))},close:function(a){b.cancel();!1!==b.trigger("beforeClose")&&(b.unbindEvents(),b.isActive&&(b.isOpen&&!0!==a?(b.isOpen=b.isOpened=!1,b.isClosing=!0,f(".fancybox-item, .fancybox-nav").remove(),b.wrap.stop(!0,!0).removeClass("fancybox-opened"),b.transitions[b.current.closeMethod]()):(f(".fancybox-wrap").stop(!0).trigger("onReset").remove(),b._afterZoomOut())))},play:function(a){var d=function(){clearTimeout(b.player.timer)},e=function(){d();b.current&&b.player.isActive&&
+(b.player.timer=setTimeout(b.next,b.current.playSpeed))},c=function(){d();p.unbind(".player");b.player.isActive=!1;b.trigger("onPlayEnd")};!0===a||!b.player.isActive&&!1!==a?b.current&&(b.current.loop||b.current.index=c.index?"next":"prev"],b.router=e||"jumpto",c.loop&&(0>a&&(a=c.group.length+a%c.group.length),a%=c.group.length),c.group[a]!==w&&(b.cancel(),b._start(a)))},reposition:function(a,d){var e=b.current,c=e?e.wrap:null,l;c&&(l=b._getPosition(d),a&&"scroll"===a.type?(delete l.position,c.stop(!0,!0).animate(l,200)):(c.css(l),e.pos=f.extend({},e.dim,l)))},
+update:function(a){var d=a&&a.originalEvent&&a.originalEvent.type,e=!d||"orientationchange"===d;e&&(clearTimeout(C),C=null);b.isOpen&&!C&&(C=setTimeout(function(){var c=b.current;c&&!b.isClosing&&(b.wrap.removeClass("fancybox-tmp"),(e||"load"===d||"resize"===d&&c.autoResize)&&b._setDimension(),"scroll"===d&&c.canShrink||b.reposition(a),b.trigger("onUpdate"),C=null)},e&&!t?0:300))},toggle:function(a){b.isOpen&&(b.current.fitToView="boolean"===f.type(a)?a:!b.current.fitToView,t&&(b.wrap.removeAttr("style").addClass("fancybox-tmp"),
+b.trigger("onUpdate")),b.update())},hideLoading:function(){p.unbind(".loading");f("#fancybox-loading").remove()},showLoading:function(){var a,d;b.hideLoading();a=f('').click(b.cancel).appendTo("body");p.bind("keydown.loading",function(a){27===(a.which||a.keyCode)&&(a.preventDefault(),b.cancel())});b.defaults.fixed||(d=b.getViewport(),a.css({position:"absolute",top:0.5*d.h+d.y,left:0.5*d.w+d.x}));b.trigger("onLoading")},getViewport:function(){var a=b.current&&
+b.current.locked||!1,d={x:q.scrollLeft(),y:q.scrollTop()};a&&a.length?(d.w=a[0].clientWidth,d.h=a[0].clientHeight):(d.w=t&&s.innerWidth?s.innerWidth:q.width(),d.h=t&&s.innerHeight?s.innerHeight:q.height());return d},unbindEvents:function(){b.wrap&&u(b.wrap)&&b.wrap.unbind(".fb");p.unbind(".fb");q.unbind(".fb")},bindEvents:function(){var a=b.current,d;a&&(q.bind("orientationchange.fb"+(t?"":" resize.fb")+(a.autoCenter&&!a.locked?" scroll.fb":""),b.update),(d=a.keys)&&p.bind("keydown.fb",function(e){var c=
+e.which||e.keyCode,l=e.target||e.srcElement;if(27===c&&b.coming)return!1;e.ctrlKey||e.altKey||e.shiftKey||e.metaKey||l&&(l.type||f(l).is("[contenteditable]"))||f.each(d,function(d,l){if(1h[0].clientWidth||h[0].clientHeight&&h[0].scrollHeight>h[0].clientHeight),h=f(h).parent();0!==c&&!k&&1g||0>l)&&b.next(0>g?"up":"right"),d.preventDefault())}))},trigger:function(a,d){var e,c=d||b.coming||b.current;if(c){f.isFunction(c[a])&&(e=c[a].apply(c,Array.prototype.slice.call(arguments,1)));if(!1===e)return!1;c.helpers&&f.each(c.helpers,function(d,e){if(e&&
+b.helpers[d]&&f.isFunction(b.helpers[d][a]))b.helpers[d][a](f.extend(!0,{},b.helpers[d].defaults,e),c)})}p.trigger(a)},isImage:function(a){return r(a)&&a.match(/(^data:image\/.*,)|(\.(jp(e|g|eg)|gif|png|bmp|webp|svg)((\?|#).*)?$)/i)},isSWF:function(a){return r(a)&&a.match(/\.(swf)((\?|#).*)?$/i)},_start:function(a){var d={},e,c;a=m(a);e=b.group[a]||null;if(!e)return!1;d=f.extend(!0,{},b.opts,e);e=d.margin;c=d.padding;"number"===f.type(e)&&(d.margin=[e,e,e,e]);"number"===f.type(c)&&(d.padding=[c,c,
+c,c]);d.modal&&f.extend(!0,d,{closeBtn:!1,closeClick:!1,nextClick:!1,arrows:!1,mouseWheel:!1,keys:null,helpers:{overlay:{closeClick:!1}}});d.autoSize&&(d.autoWidth=d.autoHeight=!0);"auto"===d.width&&(d.autoWidth=!0);"auto"===d.height&&(d.autoHeight=!0);d.group=b.group;d.index=a;b.coming=d;if(!1===b.trigger("beforeLoad"))b.coming=null;else{c=d.type;e=d.href;if(!c)return b.coming=null,b.current&&b.router&&"jumpto"!==b.router?(b.current.index=a,b[b.router](b.direction)):!1;b.isActive=!0;if("image"===
+c||"swf"===c)d.autoHeight=d.autoWidth=!1,d.scrolling="visible";"image"===c&&(d.aspectRatio=!0);"iframe"===c&&t&&(d.scrolling="scroll");d.wrap=f(d.tpl.wrap).addClass("fancybox-"+(t?"mobile":"desktop")+" fancybox-type-"+c+" fancybox-tmp "+d.wrapCSS).appendTo(d.parent||"body");f.extend(d,{skin:f(".fancybox-skin",d.wrap),outer:f(".fancybox-outer",d.wrap),inner:f(".fancybox-inner",d.wrap)});f.each(["Top","Right","Bottom","Left"],function(a,b){d.skin.css("padding"+b,x(d.padding[a]))});b.trigger("onReady");
+if("inline"===c||"html"===c){if(!d.content||!d.content.length)return b._error("content")}else if(!e)return b._error("href");"image"===c?b._loadImage():"ajax"===c?b._loadAjax():"iframe"===c?b._loadIframe():b._afterLoad()}},_error:function(a){f.extend(b.coming,{type:"html",autoWidth:!0,autoHeight:!0,minWidth:0,minHeight:0,scrolling:"no",hasError:a,content:b.coming.tpl.error});b._afterLoad()},_loadImage:function(){var a=b.imgPreload=new Image;a.onload=function(){this.onload=this.onerror=null;b.coming.width=
+this.width/b.opts.pixelRatio;b.coming.height=this.height/b.opts.pixelRatio;b._afterLoad()};a.onerror=function(){this.onload=this.onerror=null;b._error("image")};a.src=b.coming.href;!0!==a.complete&&b.showLoading()},_loadAjax:function(){var a=b.coming;b.showLoading();b.ajaxLoad=f.ajax(f.extend({},a.ajax,{url:a.href,error:function(a,e){b.coming&&"abort"!==e?b._error("ajax",a):b.hideLoading()},success:function(d,e){"success"===e&&(a.content=d,b._afterLoad())}}))},_loadIframe:function(){var a=b.coming,
+d=f(a.tpl.iframe.replace(/\{rnd\}/g,(new Date).getTime())).attr("scrolling",t?"auto":a.iframe.scrolling).attr("src",a.href);f(a.wrap).bind("onReset",function(){try{f(this).find("iframe").hide().attr("src","//about:blank").end().empty()}catch(a){}});a.iframe.preload&&(b.showLoading(),d.one("load",function(){f(this).data("ready",1);t||f(this).bind("load.fb",b.update);f(this).parents(".fancybox-wrap").width("100%").removeClass("fancybox-tmp").show();b._afterLoad()}));a.content=d.appendTo(a.inner);a.iframe.preload||
+b._afterLoad()},_preloadImages:function(){var a=b.group,d=b.current,e=a.length,c=d.preload?Math.min(d.preload,e-1):0,f,g;for(g=1;g<=c;g+=1)f=a[(d.index+g)%e],"image"===f.type&&f.href&&((new Image).src=f.href)},_afterLoad:function(){var a=b.coming,d=b.current,e,c,l,g,h;b.hideLoading();if(a&&!1!==b.isActive)if(!1===b.trigger("afterLoad",a,d))a.wrap.stop(!0).trigger("onReset").remove(),b.coming=null;else{d&&(b.trigger("beforeChange",d),d.wrap.stop(!0).removeClass("fancybox-opened").find(".fancybox-item, .fancybox-nav").remove());
+b.unbindEvents();e=a.content;c=a.type;l=a.scrolling;f.extend(b,{wrap:a.wrap,skin:a.skin,outer:a.outer,inner:a.inner,current:a,previous:d});g=a.href;switch(c){case "inline":case "ajax":case "html":a.selector?e=f("").html(e).find(a.selector):u(e)&&(e.data("fancybox-placeholder")||e.data("fancybox-placeholder",f('
').insertAfter(e).hide()),e=e.show().detach(),a.wrap.bind("onReset",function(){f(this).find(e).length&&e.hide().replaceAll(e.data("fancybox-placeholder")).data("fancybox-placeholder",
+!1)}));break;case "image":e=a.tpl.image.replace(/\{href\}/g,g);break;case "swf":e='
',h="",f.each(a.swf,function(a,b){e+=' ';h+=" "+a+'="'+b+'"'}),e+='"}u(e)&&e.parent().is(a.inner)||a.inner.append(e);b.trigger("beforeShow");
+a.inner.css("overflow","yes"===l?"scroll":"no"===l?"hidden":l);b._setDimension();b.reposition();b.isOpen=!1;b.coming=null;b.bindEvents();if(!b.isOpened)f(".fancybox-wrap").not(a.wrap).stop(!0).trigger("onReset").remove();else if(d.prevMethod)b.transitions[d.prevMethod]();b.transitions[b.isOpened?a.nextMethod:a.openMethod]();b._preloadImages()}},_setDimension:function(){var a=b.getViewport(),d=0,e=!1,c=!1,e=b.wrap,l=b.skin,g=b.inner,h=b.current,c=h.width,k=h.height,n=h.minWidth,v=h.minHeight,p=h.maxWidth,
+q=h.maxHeight,t=h.scrolling,r=h.scrollOutside?h.scrollbarWidth:0,y=h.margin,z=m(y[1]+y[3]),s=m(y[0]+y[2]),w,A,u,D,B,G,C,E,I;e.add(l).add(g).width("auto").height("auto").removeClass("fancybox-tmp");y=m(l.outerWidth(!0)-l.width());w=m(l.outerHeight(!0)-l.height());A=z+y;u=s+w;D=F(c)?(a.w-A)*m(c)/100:c;B=F(k)?(a.h-u)*m(k)/100:k;if("iframe"===h.type){if(I=h.content,h.autoHeight&&1===I.data("ready"))try{I[0].contentWindow.document.location&&(g.width(D).height(9999),G=I.contents().find("body"),r&&G.css("overflow-x",
+"hidden"),B=G.outerHeight(!0))}catch(H){}}else if(h.autoWidth||h.autoHeight)g.addClass("fancybox-tmp"),h.autoWidth||g.width(D),h.autoHeight||g.height(B),h.autoWidth&&(D=g.width()),h.autoHeight&&(B=g.height()),g.removeClass("fancybox-tmp");c=m(D);k=m(B);E=D/B;n=m(F(n)?m(n,"w")-A:n);p=m(F(p)?m(p,"w")-A:p);v=m(F(v)?m(v,"h")-u:v);q=m(F(q)?m(q,"h")-u:q);G=p;C=q;h.fitToView&&(p=Math.min(a.w-A,p),q=Math.min(a.h-u,q));A=a.w-z;s=a.h-s;h.aspectRatio?(c>p&&(c=p,k=m(c/E)),k>q&&(k=q,c=m(k*E)),c
A||z>s)&&c>n&&k>v&&!(19p&&(c=p,k=m(c/E)),g.width(c).height(k),e.width(c+y),a=e.width(),z=e.height();else c=Math.max(n,Math.min(c,c-(a-A))),k=Math.max(v,Math.min(k,k-(z-s)));r&&"auto"===t&&kA||z>s)&&c>n&&k>v;c=h.aspectRatio?cv&&k ').appendTo(d&&d.lenth?d:"body");this.fixed=!1;a.fixed&&b.defaults.fixed&&(this.overlay.addClass("fancybox-overlay-fixed"),this.fixed=!0)},open:function(a){var d=this;a=f.extend({},this.defaults,a);this.overlay?this.overlay.unbind(".overlay").width("auto").height("auto"):this.create(a);this.fixed||(q.bind("resize.overlay",f.proxy(this.update,this)),this.update());a.closeClick&&this.overlay.bind("click.overlay",
+function(a){if(f(a.target).hasClass("fancybox-overlay"))return b.isActive?b.close():d.close(),!1});this.overlay.css(a.css).show()},close:function(){q.unbind("resize.overlay");this.el.hasClass("fancybox-lock")&&(f(".fancybox-margin").removeClass("fancybox-margin"),this.el.removeClass("fancybox-lock"),q.scrollTop(this.scrollV).scrollLeft(this.scrollH));f(".fancybox-overlay").remove().hide();f.extend(this,{overlay:null,fixed:!1})},update:function(){var a="100%",b;this.overlay.width(a).height("100%");
+J?(b=Math.max(H.documentElement.offsetWidth,H.body.offsetWidth),p.width()>b&&(a=p.width())):p.width()>q.width()&&(a=p.width());this.overlay.width(a).height(p.height())},onReady:function(a,b){var e=this.overlay;f(".fancybox-overlay").stop(!0,!0);e||this.create(a);a.locked&&this.fixed&&b.fixed&&(b.locked=this.overlay.append(b.wrap),b.fixed=!1);!0===a.showEarly&&this.beforeShow.apply(this,arguments)},beforeShow:function(a,b){b.locked&&!this.el.hasClass("fancybox-lock")&&(!1!==this.fixPosition&&f("*").filter(function(){return"fixed"===
+f(this).css("position")&&!f(this).hasClass("fancybox-overlay")&&!f(this).hasClass("fancybox-wrap")}).addClass("fancybox-margin"),this.el.addClass("fancybox-margin"),this.scrollV=q.scrollTop(),this.scrollH=q.scrollLeft(),this.el.addClass("fancybox-lock"),q.scrollTop(this.scrollV).scrollLeft(this.scrollH));this.open(a)},onUpdate:function(){this.fixed||this.update()},afterClose:function(a){this.overlay&&!b.coming&&this.overlay.fadeOut(a.speedOut,f.proxy(this.close,this))}};b.helpers.title={defaults:{type:"float",
+position:"bottom"},beforeShow:function(a){var d=b.current,e=d.title,c=a.type;f.isFunction(e)&&(e=e.call(d.element,d));if(r(e)&&""!==f.trim(e)){d=f(''+e+"
");switch(c){case "inside":c=b.skin;break;case "outside":c=b.wrap;break;case "over":c=b.inner;break;default:c=b.skin,d.appendTo("body"),J&&d.width(d.width()),d.wrapInner(' '),b.current.margin[2]+=Math.abs(m(d.css("margin-bottom")))}d["top"===a.position?"prependTo":
+"appendTo"](c)}}};f.fn.fancybox=function(a){var d,e=f(this),c=this.selector||"",l=function(g){var h=f(this).blur(),k=d,l,m;g.ctrlKey||g.altKey||g.shiftKey||g.metaKey||h.is(".fancybox-wrap")||(l=a.groupAttr||"data-fancybox-group",m=h.attr(l),m||(l="rel",m=h.get(0)[l]),m&&""!==m&&"nofollow"!==m&&(h=c.length?f(c):e,h=h.filter("["+l+'="'+m+'"]'),k=h.index(this)),a.index=k,!1!==b.open(h,a)&&g.preventDefault())};a=a||{};d=a.index||0;c&&!1!==a.live?p.undelegate(c,"click.fb-start").delegate(c+":not('.fancybox-item, .fancybox-nav')",
+"click.fb-start",l):e.unbind("click.fb-start").bind("click.fb-start",l);this.filter("[data-fancybox-start=1]").trigger("click");return this};p.ready(function(){var a,d;f.scrollbarWidth===w&&(f.scrollbarWidth=function(){var a=f('').appendTo("body"),b=a.children(),b=b.innerWidth()-b.height(99).innerWidth();a.remove();return b});f.support.fixedPosition===w&&(f.support.fixedPosition=function(){var a=f('
').appendTo("body"),
+b=20===a[0].offsetTop||15===a[0].offsetTop;a.remove();return b}());f.extend(b.defaults,{scrollbarWidth:f.scrollbarWidth(),fixed:f.support.fixedPosition,parent:f("body")});a=f(s).width();K.addClass("fancybox-lock-test");d=f(s).width();K.removeClass("fancybox-lock-test");f("").appendTo("head")})})(window,document,jQuery);
\ No newline at end of file
diff --git a/packages/site/themes/landscape/source/js/script.js b/packages/site/themes/landscape/source/js/script.js
new file mode 100644
index 0000000..1e58767
--- /dev/null
+++ b/packages/site/themes/landscape/source/js/script.js
@@ -0,0 +1,137 @@
+(function($){
+ // Search
+ var $searchWrap = $('#search-form-wrap'),
+ isSearchAnim = false,
+ searchAnimDuration = 200;
+
+ var startSearchAnim = function(){
+ isSearchAnim = true;
+ };
+
+ var stopSearchAnim = function(callback){
+ setTimeout(function(){
+ isSearchAnim = false;
+ callback && callback();
+ }, searchAnimDuration);
+ };
+
+ $('#nav-search-btn').on('click', function(){
+ if (isSearchAnim) return;
+
+ startSearchAnim();
+ $searchWrap.addClass('on');
+ stopSearchAnim(function(){
+ $('.search-form-input').focus();
+ });
+ });
+
+ $('.search-form-input').on('blur', function(){
+ startSearchAnim();
+ $searchWrap.removeClass('on');
+ stopSearchAnim();
+ });
+
+ // Share
+ $('body').on('click', function(){
+ $('.article-share-box.on').removeClass('on');
+ }).on('click', '.article-share-link', function(e){
+ e.stopPropagation();
+
+ var $this = $(this),
+ url = $this.attr('data-url'),
+ encodedUrl = encodeURIComponent(url),
+ id = 'article-share-box-' + $this.attr('data-id'),
+ offset = $this.offset();
+
+ if ($('#' + id).length){
+ var box = $('#' + id);
+
+ if (box.hasClass('on')){
+ box.removeClass('on');
+ return;
+ }
+ } else {
+ var html = [
+ '',
+ '
',
+ '
',
+ '
',
+ '
',
+ '
',
+ '
',
+ '
',
+ '
'
+ ].join('');
+
+ var box = $(html);
+
+ $('body').append(box);
+ }
+
+ $('.article-share-box.on').hide();
+
+ box.css({
+ top: offset.top + 25,
+ left: offset.left
+ }).addClass('on');
+ }).on('click', '.article-share-box', function(e){
+ e.stopPropagation();
+ }).on('click', '.article-share-box-input', function(){
+ $(this).select();
+ }).on('click', '.article-share-box-link', function(e){
+ e.preventDefault();
+ e.stopPropagation();
+
+ window.open(this.href, 'article-share-box-window-' + Date.now(), 'width=500,height=450');
+ });
+
+ // Caption
+ $('.article-entry').each(function(i){
+ $(this).find('img').each(function(){
+ if ($(this).parent().hasClass('fancybox')) return;
+
+ var alt = this.alt;
+
+ if (alt) $(this).after('' + alt + ' ');
+
+ $(this).wrap(' ');
+ });
+
+ $(this).find('.fancybox').each(function(){
+ $(this).attr('rel', 'article' + i);
+ });
+ });
+
+ if ($.fancybox){
+ $('.fancybox').fancybox();
+ }
+
+ // Mobile nav
+ var $container = $('#container'),
+ isMobileNavAnim = false,
+ mobileNavAnimDuration = 200;
+
+ var startMobileNavAnim = function(){
+ isMobileNavAnim = true;
+ };
+
+ var stopMobileNavAnim = function(){
+ setTimeout(function(){
+ isMobileNavAnim = false;
+ }, mobileNavAnimDuration);
+ }
+
+ $('#main-nav-toggle').on('click', function(){
+ if (isMobileNavAnim) return;
+
+ startMobileNavAnim();
+ $container.toggleClass('mobile-nav-on');
+ stopMobileNavAnim();
+ });
+
+ $('#wrap').on('click', function(){
+ if (isMobileNavAnim || !$container.hasClass('mobile-nav-on')) return;
+
+ $container.removeClass('mobile-nav-on');
+ });
+})(jQuery);
\ No newline at end of file
diff --git a/packages/site/themes/subspace/languages/en.yml b/packages/site/themes/subspace/languages/en.yml
new file mode 100644
index 0000000..3d9a7d5
--- /dev/null
+++ b/packages/site/themes/subspace/languages/en.yml
@@ -0,0 +1,62 @@
+menubutton: Get Keycard
+
+header:
+ menu:
+ why:
+ title: Why
+ features:
+ title: Features
+ security:
+ title: Security
+ docs:
+ title: Docs
+ about:
+ title: About us
+
+ title: Reactive App Development
+ subtitle: A powerful tool for building dApps in your favorite reactive framework
+ button:
+ primary: Learn more
+ secondary: Getting started
+
+footer:
+ resources:
+ title: Resources
+ links:
+ itemA: Getting started
+ itemB: Integrations
+ itemC: API
+
+ bottomtext: MIT Licensed | Subspace is part of the Status Network
+
+
+home:
+ title: Homepage
+ description: dasdsa
+ block:
+ doing:
+ itemA:
+ title: Automatic Syncing
+ subtitle: Subspace saves state to a local database ensuring your dApp always syncs from the last known point, even after reload.
+ itemB:
+ title: Reactive
+ subtitle: Methods are provided to track and subscribe to events, contract & state balances, and react to changes via observables
+ itemC:
+ title: Framework Agnostic
+ subtitle: No matter your favorite JS framework, you can use Subspace to simplify your development process. It works with React or Angular in the browser, and of course plays well with nodejs
+ features:
+ tagline: Features
+ title: You’ll love the thoughtful architecture of Subspace
+ items:
+ itemA:
+ title: Event Tracking & Event Sourcing
+ subtitle: You can track events and react to their values. With Subspace observables doing event sourcing is easy.
+ itemB:
+ title: Tracking State
+ subtitle: You can track changes to a contract state variable, by specifying the view function and arguments to call and query the contract.
+ itemC:
+ title: Tracking balances
+ subtitle: You can also track changes in both ETH and ERC20 token balances
+ itemD:
+ title: React integration
+ subtitle: Subspace can make any react component compatible with observables so you easily reactive components
\ No newline at end of file
diff --git a/packages/site/themes/subspace/layout/404.ejs b/packages/site/themes/subspace/layout/404.ejs
new file mode 100644
index 0000000..87864be
--- /dev/null
+++ b/packages/site/themes/subspace/layout/404.ejs
@@ -0,0 +1,11 @@
+
+
+
+
+ Static Site Boilerplate
+
+
+
+
+
+
diff --git a/packages/site/themes/subspace/layout/about-us.ejs b/packages/site/themes/subspace/layout/about-us.ejs
new file mode 100644
index 0000000..839d752
--- /dev/null
+++ b/packages/site/themes/subspace/layout/about-us.ejs
@@ -0,0 +1,85 @@
+
+
+
+
+
+
+
+
+
<%- __('about.block.opensource.title') %>
+
<%- __('about.block.opensource.subtitle') %>
+
+
+
+
+
+
+
+
<%- __('about.block.contributions.title') %>
+
<%- __('about.block.contributions.subtitle') %>
+
+
+
+
+ <%- image_tag("images/andrea.jpg", { class: 'c-user__avatar' }) %>
+
<%- __('about.block.contributions.people.a.title') %>
+
<%- __('about.block.contributions.people.a.job') %>
+
+
+
+
+
+ <%- image_tag("images/guy.jpg", { class: 'c-user__avatar' }) %>
+
<%- __('about.block.contributions.people.c.title') %>
+
<%- __('about.block.contributions.people.c.job') %>
+
+
+
+
+
+ <%- image_tag("images/michele.jpg", { class: 'c-user__avatar' }) %>
+
<%- __('about.block.contributions.people.d.title') %>
+
<%- __('about.block.contributions.people.d.job') %>
+
+
+
+
+
+ <%- image_tag("images/hester.jpg", { class: 'c-user__avatar' }) %>
+
<%- __('about.block.contributions.people.h.title') %>
+
<%- __('about.block.contributions.people.h.job') %>
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/packages/site/themes/subspace/layout/index.ejs b/packages/site/themes/subspace/layout/index.ejs
new file mode 100644
index 0000000..01865a8
--- /dev/null
+++ b/packages/site/themes/subspace/layout/index.ejs
@@ -0,0 +1,127 @@
+
+
+
+
+
+
+
<%- __('home.features.tagline') %>
+
+ <%- __('home.features.title') %>
+
+
+
+ <%- __('home.features.items.itemA.title') %>
+ <%- __('home.features.items.itemA.subtitle') %>
+
+
+
+
+
+
+
+
+
+
+
+
+ View details
+
+ import { $average, $latest } from "@embarklabs/subspace";
+
+const rating$ = Product.events.Rating.track().map("rating"));
+
+rating$.pipe($latest(5), $average()).subscribe((rating) => {
+ console.log("average rating of the last 5 events is " + rating)
+});
+
+
+ <%- __('home.features.items.itemB.title') %>
+ <%- __('home.features.items.itemB.subtitle') %>
+
+
+
+
+
+
+
+
+
+
+
+
+ View details
+
+ const productTitle$ = ProductList.methods.products(0).track().map("title");
+ productTitle$.subscribe((title) => console.log("product title is " + title));
+});
+
+
+ <%- __('home.features.items.itemC.title') %>
+ <%- __('home.features.items.itemC.subtitle') %>
+
+
+
+
+
+
+
+
+
+
+
+
+ View details
+
+ const address = "0x0001020304050607080900010203040506070809";
+
+subspace.trackBalance(address).subscribe((balance) => {
+ console.log("ETH balance is ", balance)
+});
+
+subspace.trackBalance(address, "0x744d70fdbe2ba4cf95131626614a1763df805b9e").subscribe((balance) => {
+ console.log("SNT balance is ", balance)
+});
+
+
+ <%- __('home.features.items.itemD.title') %>
+ <%- __('home.features.items.itemD.subtitle') %>
+
+
+
+
+
+
+
+
+
+
+
+
+ View details
+
+
+
+
+
+
diff --git a/packages/site/themes/subspace/layout/layout.ejs b/packages/site/themes/subspace/layout/layout.ejs
new file mode 100644
index 0000000..ba5de5a
--- /dev/null
+++ b/packages/site/themes/subspace/layout/layout.ejs
@@ -0,0 +1,13 @@
+
+
+ <%- partial('partial/head') %>
+
+
+ <%- partial('partial/header') %>
+
+ <%- body %>
+
+ <%- partial('partial/footer') %>
+
+
+
diff --git a/packages/site/themes/subspace/layout/page.ejs b/packages/site/themes/subspace/layout/page.ejs
new file mode 100644
index 0000000..480100c
--- /dev/null
+++ b/packages/site/themes/subspace/layout/page.ejs
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+ <%- page.content %>
+
+
+
+
+
\ No newline at end of file
diff --git a/packages/site/themes/subspace/layout/partial/footer.ejs b/packages/site/themes/subspace/layout/partial/footer.ejs
new file mode 100644
index 0000000..ac2fc47
--- /dev/null
+++ b/packages/site/themes/subspace/layout/partial/footer.ejs
@@ -0,0 +1,501 @@
+
+
+
+
+
+
+
+
+
+
+
+ We are part of the embark framework
+ <%- image_tag("images/embark-logo.svg", { class: 'o-vertical-alignment__item' }) %>
+
+
+
+
+
<%= __('footer.resources.title') %>
+
+
+
+
+
+
+ <%= __('footer.bottomtext') %>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/packages/site/themes/subspace/layout/partial/header-short.ejs b/packages/site/themes/subspace/layout/partial/header-short.ejs
new file mode 100644
index 0000000..552597b
--- /dev/null
+++ b/packages/site/themes/subspace/layout/partial/header-short.ejs
@@ -0,0 +1,41 @@
+
diff --git a/packages/site/themes/subspace/layout/partial/header.ejs b/packages/site/themes/subspace/layout/partial/header.ejs
new file mode 100644
index 0000000..d736517
--- /dev/null
+++ b/packages/site/themes/subspace/layout/partial/header.ejs
@@ -0,0 +1,88 @@
+
diff --git a/packages/site/themes/subspace/layout/partial/mailpopup.ejs b/packages/site/themes/subspace/layout/partial/mailpopup.ejs
new file mode 100644
index 0000000..84af802
--- /dev/null
+++ b/packages/site/themes/subspace/layout/partial/mailpopup.ejs
@@ -0,0 +1,96 @@
+
+
\ No newline at end of file
diff --git a/packages/site/themes/subspace/source/css/application.scss b/packages/site/themes/subspace/source/css/application.scss
new file mode 100755
index 0000000..52a10be
--- /dev/null
+++ b/packages/site/themes/subspace/source/css/application.scss
@@ -0,0 +1,43 @@
+@import 'tools/get-brand-color',
+ 'tools/get-color',
+ 'tools/get-font',
+ 'tools/get-index',
+ 'tools/get-layout-color',
+ 'tools/get-notification-color',
+ 'tools/get-semantic-color',
+ 'tools/get-spacing',
+ 'tools/list-reset',
+ 'tools/respond',
+ 'tools/column';
+
+@import 'settings/config',
+ 'settings/preset',
+ 'settings/typography';
+
+@import 'objects/grid',
+ 'objects/list',
+ 'objects/actionbar',
+ 'objects/navigation',
+ 'objects/heading',
+ 'objects/side-navigation',
+ 'objects/media',
+ 'objects/distance',
+ 'objects/content';
+
+@import 'components/icons',
+ 'components/button',
+ 'components/logo',
+ 'components/popup',
+ 'components/spotlightbox',
+ 'components/accentbox',
+ 'components/user',
+ 'components/whisperbox',
+ 'components/ghostbox',
+ 'components/header',
+ 'components/footer',
+ 'components/teaser',
+ 'components/notification',
+ 'components/prism-highlighting';
+
+@import 'utilities/text-color';
+@import 'utilities/text-size';
\ No newline at end of file
diff --git a/packages/site/themes/subspace/source/css/components/_accentbox.scss b/packages/site/themes/subspace/source/css/components/_accentbox.scss
new file mode 100644
index 0000000..f8bf59b
--- /dev/null
+++ b/packages/site/themes/subspace/source/css/components/_accentbox.scss
@@ -0,0 +1,11 @@
+.c-accentbox {
+ overflow: hidden;
+ padding: get-inset-spacing(l) 0;
+ border-radius: $global-border-radius;
+ background: get-brand(primary);
+ color: get-color(unique, white);
+
+ @include respond(large) {
+ padding: get-inset-spacing(xl) 0;
+ }
+}
\ No newline at end of file
diff --git a/packages/site/themes/subspace/source/css/components/_button.scss b/packages/site/themes/subspace/source/css/components/_button.scss
new file mode 100755
index 0000000..2599c4e
--- /dev/null
+++ b/packages/site/themes/subspace/source/css/components/_button.scss
@@ -0,0 +1,49 @@
+.a-button {
+ cursor: pointer;
+ display: inline-block;
+ padding: get-inset-squish-spacing(l);
+ vertical-align: top;
+ -webkit-appearance: none;
+ border: 2px solid transparent;
+ border-radius: $global-border-radius;
+ background: get-brand(primary);
+ box-shadow: 0;
+ color: get-color(unique, white);
+ font-size: get-font(size);
+ font-weight: bold;
+ line-height: 1;
+ text-align: center;
+
+ &:hover {
+ border-color: get-brand(primary);
+ background: transparent;
+ color: get-brand(primary);
+ }
+
+ // Ghost Button
+ &--ghost {
+ background: transparent;
+ border-color: get-color(unique, white);
+ color: get-color(unique, white);
+
+ &:hover {
+
+ }
+ }
+
+ // Negative
+ &--negative {
+ background: get-color(unique, white);
+ color: get-brand(primary);
+
+ &:hover {
+ border-color: get-color(unique, white);
+ background: transparent;
+ color: get-color(unique, white);
+ }
+ }
+
+ &--rounded {
+ border-radius: $global-rounded-border-radius;
+ }
+}
\ No newline at end of file
diff --git a/packages/site/themes/subspace/source/css/components/_footer.scss b/packages/site/themes/subspace/source/css/components/_footer.scss
new file mode 100644
index 0000000..e69de29
diff --git a/packages/site/themes/subspace/source/css/components/_ghostbox.scss b/packages/site/themes/subspace/source/css/components/_ghostbox.scss
new file mode 100644
index 0000000..006c45f
--- /dev/null
+++ b/packages/site/themes/subspace/source/css/components/_ghostbox.scss
@@ -0,0 +1,9 @@
+.c-ghostbox {
+ padding: get-inset-spacing(l) 0;
+ border-radius: $global-border-radius;
+ background: get-brand(primaryGradation);
+
+ @include respond(large) {
+ padding: get-inset-spacing(xl) 0;
+ }
+}
\ No newline at end of file
diff --git a/packages/site/themes/subspace/source/css/components/_header.scss b/packages/site/themes/subspace/source/css/components/_header.scss
new file mode 100644
index 0000000..b114986
--- /dev/null
+++ b/packages/site/themes/subspace/source/css/components/_header.scss
@@ -0,0 +1,50 @@
+.o-header {
+ &__container {
+ padding: get-inline-spacing(m) 0;
+ }
+
+ &__top {
+ align-items: center;
+ display: flex;
+ justify-content: space-between;
+
+ &--clone {
+ padding: get-inset-spacing(s) get-inset-spacing(m);
+ position: fixed;
+ z-index: 100;
+ top: 0;
+ left: 0;
+ width: 100%;
+ background: get-color(gray, 900);
+ box-shadow: 0 0 10px rgba(0,0,0,.4);
+ transform: translateY(-100%);
+ transition: all 300ms ease-in-out;
+
+ .o-navigation__item,
+ .o-navigation__item.is-active {
+ color: get-color(unique, white);
+ }
+
+ &.is-sticky {
+ transform: translateY(0%);
+ }
+ }
+ }
+
+ &__body {
+ margin-top: get-stack-spacing(xl);
+ padding-bottom: get-inset-spacing(xl) * 2;
+ text-align: center;
+ }
+}
+
+.a-push-top {
+ transform: translateY(200px);
+ transition: all .5s;
+ transition-delay: .5s;
+
+ &.is-active {
+ transform: translateY(0);
+ }
+}
+
diff --git a/packages/site/themes/subspace/source/css/components/_icons.scss b/packages/site/themes/subspace/source/css/components/_icons.scss
new file mode 100644
index 0000000..3083507
--- /dev/null
+++ b/packages/site/themes/subspace/source/css/components/_icons.scss
@@ -0,0 +1,63 @@
+.icon {
+ height: 48px;
+ width: 48px;
+ fill: get-brand(primary);
+
+ &--small {
+ height: 32px;
+ width: 32px;
+ }
+
+ &--smaller {
+ height: 16px;
+ width: 16px;
+ }
+
+ &--large {
+ height: 64px;
+ width: 64px;
+ }
+}
+
+.o-banner {
+ align-items: center;
+ display: flex;
+ flex-direction: column;
+
+ @include respond(medium) {
+ flex-direction: row;
+ }
+
+ &__item {
+ margin-top: 24px;
+
+ @include respond(medium) {
+ margin-left: 24px;
+ margin-top: 0;
+ }
+ }
+}
+
+.c-divider {
+ display: block;
+ height: 1px;
+ width: 100%;
+}
+
+.c-box {
+ padding: 12px;
+ border: 2px solid;
+ border-radius: $global-border-radius;
+}
+
+.u-background-color-light {
+ background-color: get-color(gray, 800);
+}
+
+.u-border-color-light {
+ border-color: get-color(gray, 800);
+}
+
+.u-inline-block {
+ display: inline-block;
+}
\ No newline at end of file
diff --git a/packages/site/themes/subspace/source/css/components/_logo.scss b/packages/site/themes/subspace/source/css/components/_logo.scss
new file mode 100644
index 0000000..2bccab7
--- /dev/null
+++ b/packages/site/themes/subspace/source/css/components/_logo.scss
@@ -0,0 +1,16 @@
+.a-logo {
+ display: inline-block;
+ height: 27px;
+ vertical-align: top;
+ width: 112px;
+ background: url(../images/logo.svg);
+ background-repeat: no-repeat;
+ background-size: 100%;
+ color: transparent;
+ font-size: 0;
+
+ @include respond(medium) {
+ height: 52px;
+ width: 225px;
+ }
+}
\ No newline at end of file
diff --git a/packages/site/themes/subspace/source/css/components/_notification.scss b/packages/site/themes/subspace/source/css/components/_notification.scss
new file mode 100644
index 0000000..57cdbfd
--- /dev/null
+++ b/packages/site/themes/subspace/source/css/components/_notification.scss
@@ -0,0 +1,10 @@
+.c-notification {
+ padding: 24px;
+ background-color: get-color(gray, 100);
+ border-left: 8px solid get-brand(primary);
+
+ &--warning {
+ background-color: get-color(yellow, 300);
+ border-color: get-color(yellow, 900);
+ }
+}
\ No newline at end of file
diff --git a/packages/site/themes/subspace/source/css/components/_popup.scss b/packages/site/themes/subspace/source/css/components/_popup.scss
new file mode 100644
index 0000000..043f60b
--- /dev/null
+++ b/packages/site/themes/subspace/source/css/components/_popup.scss
@@ -0,0 +1,463 @@
+/* Magnific Popup CSS */
+.mfp-bg {
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ z-index: 1042;
+ overflow: hidden;
+ position: fixed;
+ background: #0b0b0b;
+ opacity: 0.8; }
+
+.mfp-wrap {
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ z-index: 1043;
+ position: fixed;
+ outline: none !important;
+ -webkit-backface-visibility: hidden; }
+
+.mfp-container {
+ text-align: center;
+ position: absolute;
+ width: 100%;
+ height: 100%;
+ left: 0;
+ top: 0;
+ padding: 0 8px;
+ box-sizing: border-box; }
+
+.mfp-container:before {
+ content: '';
+ display: inline-block;
+ height: 100%;
+ vertical-align: middle; }
+
+.mfp-align-top .mfp-container:before {
+ display: none; }
+
+.mfp-content {
+ position: relative;
+ display: inline-block;
+ vertical-align: middle;
+ margin: 0 auto;
+ text-align: left;
+ z-index: 1045; }
+
+.mfp-inline-holder .mfp-content,
+.mfp-ajax-holder .mfp-content {
+ width: 100%;
+ cursor: auto; }
+
+.mfp-ajax-cur {
+ cursor: progress; }
+
+.mfp-zoom-out-cur, .mfp-zoom-out-cur .mfp-image-holder .mfp-close {
+ cursor: -moz-zoom-out;
+ cursor: -webkit-zoom-out;
+ cursor: zoom-out; }
+
+.mfp-zoom {
+ cursor: pointer;
+ cursor: -webkit-zoom-in;
+ cursor: -moz-zoom-in;
+ cursor: zoom-in; }
+
+.mfp-auto-cursor .mfp-content {
+ cursor: auto; }
+
+.mfp-close,
+.mfp-arrow,
+.mfp-preloader,
+.mfp-counter {
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ user-select: none; }
+
+.mfp-loading.mfp-figure {
+ display: none; }
+
+.mfp-hide {
+ display: none !important; }
+
+.mfp-preloader {
+ color: #CCC;
+ position: absolute;
+ top: 50%;
+ width: auto;
+ text-align: center;
+ margin-top: -0.8em;
+ left: 8px;
+ right: 8px;
+ z-index: 1044; }
+ .mfp-preloader a {
+ color: #CCC; }
+ .mfp-preloader a:hover {
+ color: #FFF; }
+
+.mfp-s-ready .mfp-preloader {
+ display: none; }
+
+.mfp-s-error .mfp-content {
+ display: none; }
+
+button.mfp-close,
+button.mfp-arrow {
+ overflow: visible;
+ cursor: pointer;
+ background: transparent;
+ border: 0;
+ -webkit-appearance: none;
+ display: block;
+ outline: none;
+ padding: 0;
+ z-index: 1046;
+ box-shadow: none;
+ touch-action: manipulation; }
+
+button::-moz-focus-inner {
+ padding: 0;
+ border: 0; }
+
+.mfp-close {
+ width: 44px;
+ height: 44px;
+ line-height: 44px;
+ position: absolute;
+ right: 0;
+ top: 0;
+ text-decoration: none;
+ text-align: center;
+ opacity: 0.65;
+ padding: 0 0 18px 10px;
+ color: #FFF;
+ font-style: normal;
+ font-size: 28px;
+ font-family: Arial, Baskerville, monospace; }
+ .mfp-close:hover,
+ .mfp-close:focus {
+ opacity: 1; }
+ .mfp-close:active {
+ top: 1px; }
+
+.mfp-close-btn-in .mfp-close {
+ color: #333; }
+
+.mfp-image-holder .mfp-close,
+.mfp-iframe-holder .mfp-close {
+ color: #FFF;
+ right: -6px;
+ text-align: right;
+ padding-right: 6px;
+ width: 100%; }
+
+.mfp-counter {
+ position: absolute;
+ top: 0;
+ right: 0;
+ color: #CCC;
+ font-size: 12px;
+ line-height: 18px;
+ white-space: nowrap; }
+
+.mfp-arrow {
+ position: absolute;
+ opacity: 0.65;
+ margin: 0;
+ top: 50%;
+ margin-top: -55px;
+ padding: 0;
+ width: 90px;
+ height: 110px;
+ -webkit-tap-highlight-color: transparent; }
+ .mfp-arrow:active {
+ margin-top: -54px; }
+ .mfp-arrow:hover,
+ .mfp-arrow:focus {
+ opacity: 1; }
+ .mfp-arrow:before,
+ .mfp-arrow:after {
+ content: '';
+ display: block;
+ width: 0;
+ height: 0;
+ position: absolute;
+ left: 0;
+ top: 0;
+ margin-top: 35px;
+ margin-left: 35px;
+ border: medium inset transparent; }
+ .mfp-arrow:after {
+ border-top-width: 13px;
+ border-bottom-width: 13px;
+ top: 8px; }
+ .mfp-arrow:before {
+ border-top-width: 21px;
+ border-bottom-width: 21px;
+ opacity: 0.7; }
+
+.mfp-arrow-left {
+ left: 0; }
+ .mfp-arrow-left:after {
+ border-right: 17px solid #FFF;
+ margin-left: 31px; }
+ .mfp-arrow-left:before {
+ margin-left: 25px;
+ border-right: 27px solid #3F3F3F; }
+
+.mfp-arrow-right {
+ right: 0; }
+ .mfp-arrow-right:after {
+ border-left: 17px solid #FFF;
+ margin-left: 39px; }
+ .mfp-arrow-right:before {
+ border-left: 27px solid #3F3F3F; }
+
+.mfp-iframe-holder {
+ padding-top: 40px;
+ padding-bottom: 40px; }
+ .mfp-iframe-holder .mfp-content {
+ line-height: 0;
+ width: 100%;
+ max-width: 900px; }
+ .mfp-iframe-holder .mfp-close {
+ top: -40px; }
+
+.mfp-iframe-scaler {
+ width: 100%;
+ height: 0;
+ overflow: hidden;
+ padding-top: 56.25%; }
+ .mfp-iframe-scaler iframe {
+ position: absolute;
+ display: block;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ box-shadow: 0 0 8px rgba(0, 0, 0, 0.6);
+ background: #000; }
+
+/* Main image in popup */
+img.mfp-img {
+ width: auto;
+ max-width: 100%;
+ height: auto;
+ display: block;
+ line-height: 0;
+ box-sizing: border-box;
+ padding: 40px 0 40px;
+ margin: 0 auto; }
+
+/* The shadow behind the image */
+.mfp-figure {
+ line-height: 0; }
+ .mfp-figure:after {
+ content: '';
+ position: absolute;
+ left: 0;
+ top: 40px;
+ bottom: 40px;
+ display: block;
+ right: 0;
+ width: auto;
+ height: auto;
+ z-index: -1;
+ box-shadow: 0 0 8px rgba(0, 0, 0, 0.6);
+ background: #444; }
+ .mfp-figure small {
+ color: #BDBDBD;
+ display: block;
+ font-size: 12px;
+ line-height: 14px; }
+ .mfp-figure figure {
+ margin: 0; }
+
+.mfp-bottom-bar {
+ margin-top: -36px;
+ position: absolute;
+ top: 100%;
+ left: 0;
+ width: 100%;
+ cursor: auto; }
+
+.mfp-title {
+ text-align: left;
+ line-height: 18px;
+ color: #F3F3F3;
+ word-wrap: break-word;
+ padding-right: 36px; }
+
+.mfp-image-holder .mfp-content {
+ max-width: 100%; }
+
+.mfp-gallery .mfp-image-holder .mfp-figure {
+ cursor: pointer; }
+
+@media screen and (max-width: 800px) and (orientation: landscape), screen and (max-height: 300px) {
+ /**
+ * Remove all paddings around the image on small screen
+ */
+ .mfp-img-mobile .mfp-image-holder {
+ padding-left: 0;
+ padding-right: 0; }
+ .mfp-img-mobile img.mfp-img {
+ padding: 0; }
+ .mfp-img-mobile .mfp-figure:after {
+ top: 0;
+ bottom: 0; }
+ .mfp-img-mobile .mfp-figure small {
+ display: inline;
+ margin-left: 5px; }
+ .mfp-img-mobile .mfp-bottom-bar {
+ background: rgba(0, 0, 0, 0.6);
+ bottom: 0;
+ margin: 0;
+ top: auto;
+ padding: 3px 5px;
+ position: fixed;
+ box-sizing: border-box; }
+ .mfp-img-mobile .mfp-bottom-bar:empty {
+ padding: 0; }
+ .mfp-img-mobile .mfp-counter {
+ right: 5px;
+ top: 3px; }
+ .mfp-img-mobile .mfp-close {
+ top: 0;
+ right: 0;
+ width: 35px;
+ height: 35px;
+ line-height: 35px;
+ background: rgba(0, 0, 0, 0.6);
+ position: fixed;
+ text-align: center;
+ padding: 0; } }
+
+@media all and (max-width: 900px) {
+ .mfp-arrow {
+ -webkit-transform: scale(0.75);
+ transform: scale(0.75); }
+ .mfp-arrow-left {
+ -webkit-transform-origin: 0;
+ transform-origin: 0; }
+ .mfp-arrow-right {
+ -webkit-transform-origin: 100%;
+ transform-origin: 100%; }
+ .mfp-container {
+ padding-left: 6px;
+ padding-right: 6px; } }
+
+
+.c-popup {
+ max-width: 900px;
+ margin: get-inline-spacing(m) auto;
+ border-radius: $global-border-radius;
+ background: get-color(unique, white);
+
+ #mc_embed_signup {
+ display: flex;
+ flex-direction: column;
+
+ @include respond(large) {
+ flex-direction: row;
+ }
+
+ .mc_embed_signup_keyvisual {
+ height: 250px;
+ overflow: hidden;
+ padding: get-inset-spacing(l);
+ background: get-brand(primaryGradation);
+ text-align: center;
+
+ @include respond(large) {
+ flex: 1 0 40%;
+ height: auto;
+ }
+
+ img {
+ max-width: initial;
+ }
+
+ h2 {
+ margin-bottom: 16px;
+ font-size: 3.2rem;
+ }
+ }
+
+ #mc_embed_signup_scroll {
+ padding: 24px;
+
+ h2 {
+ margin-bottom: 12px;
+ }
+ }
+ }
+
+ .mfp-close {
+ top: 20px;
+ font-size: 4rem;
+ }
+
+ #mc_embed_signup .mc-field-group input[type="checkbox"] {
+ width: auto;
+ }
+ .content__gdpr {
+ line-height: 1.4;
+ }
+ label + p {
+ margin: 0;
+ }
+ #mc_embed_signup .mc-field-group .checkbox {
+ align-items: center;
+ display: flex;
+ font-size: 1.6rem;
+
+ span {
+ padding-left: 4px;
+ }
+ }
+ #mc_embed_signup input {
+ border-radius: 0;
+ }
+ .content__gdprLegal {
+ margin-top: get-stack-spacing(m);
+ color: get-color(gray);
+ line-height: 1.4;
+ }
+ .gdprRequired + p {
+ color: get-color(gray);
+ line-height: 1.4;
+ }
+ #mc-embedded-subscribe {
+ margin: 0;
+ border: 2px solid transparentg;
+ border-radius: $global-border-radius;
+
+ &:hover {
+ border: 2px solid get-brand(primary);
+ color: get-brand(primary);
+ }
+ }
+ input#mc-embedded-subscribe {
+ border-color: transparent !important;
+ border-radius: $global-border-radius;
+
+ &:hover {
+ border-color: get-brand(primary) !important;
+ }
+ }
+ fieldset {
+ margin-top: get-stack-spacing(m);
+ }
+ #mc_embed_signup h2 {
+ margin: 0;
+ font-size: 2.4rem;
+ }
+ .content__gdpr label {
+ font-weight: bold;
+ font-size: 2rem;
+ }
+}
\ No newline at end of file
diff --git a/packages/site/themes/subspace/source/css/components/_prism-highlighting.scss b/packages/site/themes/subspace/source/css/components/_prism-highlighting.scss
new file mode 100644
index 0000000..b527e5c
--- /dev/null
+++ b/packages/site/themes/subspace/source/css/components/_prism-highlighting.scss
@@ -0,0 +1,143 @@
+/**
+ * atom-dark theme for `prism.js`
+ * Based on Atom's `atom-dark` theme: https://github.com/atom/atom-dark-syntax
+ * @author Joe Gibson (@gibsjose)
+ */
+
+code[class*="language-"],
+pre[class*="language-"] {
+ color: #c5c8c6;
+ text-shadow: 0 1px rgba(0, 0, 0, 0.3);
+ font-family: Inconsolata, Monaco, Consolas, 'Courier New', Courier, monospace;
+ direction: ltr;
+ text-align: left;
+ white-space: pre;
+ word-spacing: normal;
+ word-break: normal;
+ line-height: 1.5;
+
+ -moz-tab-size: 4;
+ -o-tab-size: 4;
+ tab-size: 4;
+
+ -webkit-hyphens: none;
+ -moz-hyphens: none;
+ -ms-hyphens: none;
+ hyphens: none;
+}
+
+/* Code blocks */
+pre[class*="language-"] {
+ padding: 1em;
+ margin: .5em 0;
+ overflow: auto;
+ border-radius: 0.3em;
+}
+
+:not(pre) > code[class*="language-"],
+pre[class*="language-"] {
+ background: #1d1f21;
+}
+
+/* Inline code */
+:not(pre) > code[class*="language-"] {
+ padding: .1em;
+ border-radius: .3em;
+}
+
+.token.comment,
+.token.prolog,
+.token.doctype,
+.token.cdata {
+ color: #7C7C7C;
+}
+
+.token.punctuation {
+ color: #c5c8c6;
+}
+
+.namespace {
+ opacity: .7;
+}
+
+.token.property,
+.token.keyword,
+.token.tag {
+ color: #96CBFE;
+}
+
+.token.class-name {
+ color: #FFFFB6;
+ text-decoration: underline;
+}
+
+.token.boolean,
+.token.constant {
+ color: #99CC99;
+}
+
+.token.symbol,
+.token.deleted {
+ color: #f92672;
+}
+
+.token.number {
+ color: #FF73FD;
+}
+
+.token.selector,
+.token.attr-name,
+.token.string,
+.token.char,
+.token.builtin,
+.token.inserted {
+ color: #A8FF60;
+}
+
+.token.variable {
+ color: #C6C5FE;
+}
+
+.token.operator {
+ color: #EDEDED;
+}
+
+.token.entity {
+ color: #FFFFB6;
+ cursor: help;
+}
+
+.token.url {
+ color: #96CBFE;
+}
+
+.language-css .token.string,
+.style .token.string {
+ color: #87C38A;
+}
+
+.token.atrule,
+.token.attr-value {
+ color: #F9EE98;
+}
+
+.token.function {
+ color: #DAD085;
+}
+
+.token.regex {
+ color: #E9C062;
+}
+
+.token.important {
+ color: #fd971f;
+}
+
+.token.important,
+.token.bold {
+ font-weight: bold;
+}
+
+.token.italic {
+ font-style: italic;
+}
\ No newline at end of file
diff --git a/packages/site/themes/subspace/source/css/components/_spotlightbox.scss b/packages/site/themes/subspace/source/css/components/_spotlightbox.scss
new file mode 100644
index 0000000..e456496
--- /dev/null
+++ b/packages/site/themes/subspace/source/css/components/_spotlightbox.scss
@@ -0,0 +1,36 @@
+.c-spotlightbox {
+ padding: get-inset-spacing(l) 0;
+ background: linear-gradient(180deg, #0A0F40 0%, rgba(4, 26, 57, 0) 100%), #041A39;
+ background-image: url(../images/circles.png);
+ background-position: center;
+ background-size: contain;
+ transition: background-size .5s;
+ transition-delay: .5s;
+ color: get-color(unique, white);
+
+ @include respond(large) {
+ padding: get-inset-spacing(xl) 0;
+ }
+
+ a:not(.a-button) {
+ color: get-color(unique, white);
+
+ &:hover {
+ color: get-color(blue, lighter);
+ }
+ }
+
+ .icon {
+ fill: #fff;
+ }
+
+ a .icon:hover {
+ opacity: .6;
+ }
+
+ &__item {
+ padding: get-inset-spacing(l);
+ border-radius: $global-border-radius;
+ background: rgba(get-color(gray, 800), .5);
+ }
+}
\ No newline at end of file
diff --git a/packages/site/themes/subspace/source/css/components/_teaser.scss b/packages/site/themes/subspace/source/css/components/_teaser.scss
new file mode 100644
index 0000000..2bd29a7
--- /dev/null
+++ b/packages/site/themes/subspace/source/css/components/_teaser.scss
@@ -0,0 +1,15 @@
+.o-teaser {
+ align-items: center;
+ display: flex;
+ flex-direction: column;
+ flex-wrap: no-wrap;
+ justify-content: center;
+
+ &__symbol {
+ display: block;
+ }
+
+ &__content {
+ margin-top: get-stack-spacing(m);
+ }
+}
\ No newline at end of file
diff --git a/packages/site/themes/subspace/source/css/components/_user.scss b/packages/site/themes/subspace/source/css/components/_user.scss
new file mode 100644
index 0000000..b9d51b2
--- /dev/null
+++ b/packages/site/themes/subspace/source/css/components/_user.scss
@@ -0,0 +1,16 @@
+.c-user {
+ padding: get-inset-spacing(l);
+ background: get-layout-color(quite);
+ text-align: center;
+
+ &__avatar {
+ max-width: 125px;
+ border-radius: $global-rounded-border-radius;
+ }
+
+ &__subtitle {
+ margin-top: get-stack-spacing(xs);
+ color: get-color(gray);
+ font-size: 1.8rem;
+ }
+}
\ No newline at end of file
diff --git a/packages/site/themes/subspace/source/css/components/_whisperbox.scss b/packages/site/themes/subspace/source/css/components/_whisperbox.scss
new file mode 100644
index 0000000..07e0e4f
--- /dev/null
+++ b/packages/site/themes/subspace/source/css/components/_whisperbox.scss
@@ -0,0 +1,19 @@
+.c-whisperbox {
+ padding: get-inset-spacing(l) 0;
+ border-radius: $global-border-radius;
+ background-color: get-layout-color(quite);
+ background-position: bottom center;
+ background-repeat: no-repeat;
+ background-size: 75%;
+ transition: background-size .5s;
+ transition-delay: .6s;
+
+ @include respond(large) {
+ padding: get-inset-spacing(xl) 0;
+ background-image: url(../images/circles-background.jpg);
+ }
+
+ &.is-active {
+ background-size: 150%;
+ }
+}
\ No newline at end of file
diff --git a/packages/site/themes/subspace/source/css/objects/_actionbar.scss b/packages/site/themes/subspace/source/css/objects/_actionbar.scss
new file mode 100644
index 0000000..37000fe
--- /dev/null
+++ b/packages/site/themes/subspace/source/css/objects/_actionbar.scss
@@ -0,0 +1,23 @@
+.o-actionbar {
+ display: flex;
+ flex-direction: column;
+ margin-left: - get-inline-spacing(m);
+ margin-top: get-stack-spacing(m);
+
+ @include respond(medium) {
+ flex-direction: row;
+ }
+
+ &__item {
+ margin-top: get-stack-spacing(m);
+ padding-left: get-inline-spacing(m);
+
+ @include respond(medium) {
+ margin-top: 0;
+ }
+
+ &:first-child {
+ margin-top: 0;
+ }
+ }
+}
\ No newline at end of file
diff --git a/packages/site/themes/subspace/source/css/objects/_content.scss b/packages/site/themes/subspace/source/css/objects/_content.scss
new file mode 100644
index 0000000..903d18b
--- /dev/null
+++ b/packages/site/themes/subspace/source/css/objects/_content.scss
@@ -0,0 +1,16 @@
+// Content Area for Standard Content
+.o-content {
+ h2[id] {
+ margin-bottom: 16px;
+ margin-top: 48px;
+ padding-bottom: 4px;
+ border-bottom: 1px solid $global-border-color;
+ }
+ h3,
+ h4 {
+ margin-top: 32px;
+ }
+ .c-notification {
+ margin-top: 24px;
+ }
+}
\ No newline at end of file
diff --git a/packages/site/themes/subspace/source/css/objects/_distance.scss b/packages/site/themes/subspace/source/css/objects/_distance.scss
new file mode 100644
index 0000000..2ec55a5
--- /dev/null
+++ b/packages/site/themes/subspace/source/css/objects/_distance.scss
@@ -0,0 +1,19 @@
+.o-distance-xs {
+ margin-top: 4px;
+}
+
+.o-distance-s {
+ margin-top: 8px;
+}
+
+.o-distance-m {
+ margin-top: 16px;
+}
+
+.o-distance-l {
+ margin-top: 24px;
+}
+
+.o-distance-xl {
+ margin-top: 48px;
+}
\ No newline at end of file
diff --git a/packages/site/themes/subspace/source/css/objects/_grid.scss b/packages/site/themes/subspace/source/css/objects/_grid.scss
new file mode 100644
index 0000000..d06c50b
--- /dev/null
+++ b/packages/site/themes/subspace/source/css/objects/_grid.scss
@@ -0,0 +1,162 @@
+.o-grid {
+ display: flex;
+ flex-direction: row;
+ flex-wrap: wrap;
+ margin-left: - $gutter-width;
+
+ &:first-child {
+ margin-top: - get-stack-spacing(l);
+ }
+
+ &--centered {
+ align-items: center;
+ }
+}
+
+.o-row {
+ margin-top: get-stack-spacing(l);
+ padding: 0 get-inset-spacing(m);
+}
+
+.o-row-xl {
+ margin-top: get-stack-spacing(xl);
+ padding: 0 get-inset-spacing(m);
+}
+
+.o-vertical-alignment {
+ align-items: center;
+ display: flex;
+ flex-direction: row;
+ margin-left: - get-inline-spacing(m);
+
+ &__item {
+ margin-left: get-inline-spacing(m);
+
+ &:first-child {
+ margin-left: 0;
+ }
+ }
+}
+
+.o-distance {
+ margin-top: get-stack-spacing(l);
+
+ @include respond(large) {
+ margin-top: get-stack-spacing(xl);
+ }
+}
+
+.o-distance-small {
+ margin-top: get-stack-spacing(m);
+}
+
+.o-justified--large {
+ @include respond(large) {
+ align-items: center;
+ display: flex;
+ flex-direction: row;
+ justify-content: space-between;
+ }
+}
+
+.o-constrained {
+ margin-right: auto;
+ margin-left: auto;
+ max-width: $max-wrapper-width;
+ padding: 0 get-inline-spacing(m);
+
+ @include respond(large) {
+ padding: 0 get-inline-spacing(xl) ;
+ }
+}
+
+.o-constrained-medium {
+ margin-right: auto;
+ margin-left: auto;
+ max-width: $max-wrapper-width-medium;
+}
+
+[class*="o-grid__column-"],
+[class^="o-grid__column-"] {
+ margin-top: get-stack-spacing(l);
+ margin-left: $gutter-width;
+}
+
+// Name: Mobile-Grid
+@for $sum from 1 through $max-cols {
+ @for $i from 1 through $sum {
+ .o-grid__column-#{$i}-#{$sum} {
+ @include column($i, $sum);
+ }
+ }
+}
+
+// Name: Small-Grid
+@for $sum from 1 through $max-cols {
+ @for $i from 1 through $sum {
+ .o-grid__column-small-#{$i}-#{$sum} {
+ @include respond('small') {
+ @include column($i, $sum);
+ }
+ }
+ }
+}
+
+// Name: Medium-Grid
+@for $sum from 1 through $max-cols {
+ @for $i from 1 through $sum {
+ .o-grid__column-medium-#{$i}-#{$sum} {
+ @include respond('medium') {
+ @include column($i, $sum);
+ }
+ }
+ }
+}
+
+// Name: Large-Grid
+@for $sum from 1 through $max-cols {
+ @for $i from 1 through $sum {
+ .o-grid__column-large-#{$i}-#{$sum} {
+ @include respond('large') {
+ @include column($i, $sum);
+ }
+ }
+ }
+}
+
+// Name: Large-Grid
+@for $sum from 1 through $max-cols {
+ @for $i from 1 through $sum {
+ .o-grid__column-xlarge-#{$i}-#{$sum} {
+ @include respond('xLarge') {
+ @include column($i, $sum);
+ }
+ }
+ }
+}
+
+.o-grid__column-large-offset {
+ @include respond(large) {
+ text-align: right;
+ }
+}
+
+.o-center {
+ justify-content: center;
+ margin-left: auto;
+ margin-right: auto;
+ text-align: center;
+}
+
+.o-iframe {
+ padding-bottom: 56.25%;
+ position: relative;
+
+ iframe {
+ left: 0;
+ height: 100%;
+ position: absolute;
+ top: 0;
+ width: 100%;
+ }
+}
\ No newline at end of file
diff --git a/packages/site/themes/subspace/source/css/objects/_heading.scss b/packages/site/themes/subspace/source/css/objects/_heading.scss
new file mode 100644
index 0000000..ae8bc4d
--- /dev/null
+++ b/packages/site/themes/subspace/source/css/objects/_heading.scss
@@ -0,0 +1,5 @@
+.o-heading {
+ margin: 0 auto;
+ max-width: $max-wrapper-width-medium;
+ text-align: center;
+}
\ No newline at end of file
diff --git a/packages/site/themes/subspace/source/css/objects/_list.scss b/packages/site/themes/subspace/source/css/objects/_list.scss
new file mode 100644
index 0000000..8f04701
--- /dev/null
+++ b/packages/site/themes/subspace/source/css/objects/_list.scss
@@ -0,0 +1,26 @@
+.o-list {
+ margin: get-stack-spacing(m) 0 0;
+ padding: 0;
+ list-style: none;
+
+ li {
+ margin-top: get-stack-spacing(s);
+
+ &:first-child {
+ margin-top: 0;
+ }
+ }
+}
+
+.o-list-row {
+ display: flex;
+ flex-direction: row;
+ list-style: none;
+ margin: get-stack-spacing(l);
+ margin-left: - get-inline-spacing(m);
+ padding: 0;
+
+ li {
+ margin-left: get-inline-spacing(m);
+ }
+}
\ No newline at end of file
diff --git a/packages/site/themes/subspace/source/css/objects/_media.scss b/packages/site/themes/subspace/source/css/objects/_media.scss
new file mode 100644
index 0000000..1b657c9
--- /dev/null
+++ b/packages/site/themes/subspace/source/css/objects/_media.scss
@@ -0,0 +1,9 @@
+.o-media-short {
+ align-items: center;
+ display: flex;
+ flex-direction: row;
+
+ &__icon {
+ margin-right: 8px;
+ }
+}
\ No newline at end of file
diff --git a/packages/site/themes/subspace/source/css/objects/_navigation.scss b/packages/site/themes/subspace/source/css/objects/_navigation.scss
new file mode 100644
index 0000000..4dcfc84
--- /dev/null
+++ b/packages/site/themes/subspace/source/css/objects/_navigation.scss
@@ -0,0 +1,117 @@
+.o-navigation {
+ @include respond(large) {
+ margin-left: - get-inline-spacing(l);
+ }
+ &__item {
+ margin-top: get-stack-spacing(l);
+
+ @include respond(large) {
+ margin-left: get-inline-spacing(l);
+ margin-top: 0;
+ }
+
+ &.is-active {
+ position: relative;
+
+ &:before {
+ content: '';
+ display: block;
+ bottom: -3px;
+ height: 3px;
+ left: 0;
+ position: absolute;
+ width: 100%;
+ background: get-brand(primary);
+ }
+ }
+ }
+
+ &__close {
+ position: absolute;
+ right: get-inset-spacing(m);
+ top: get-inset-spacing(m);
+
+ @include respond(large) {
+ display: none;
+ }
+
+ .icon {
+ height: 24px;
+ width: 24px;
+ }
+ }
+
+ &__list {
+ display: flex;
+ flex-direction: column;
+ left: 0;
+ min-height: 100%;
+ padding: get-inline-spacing(l);
+ position: fixed;
+ top: 0;
+ width: 320px;
+ z-index: get-index(navigationList);
+
+ @include respond(large) {
+ align-items: center;
+ flex-direction: row;
+ margin-left: - get-inline-spacing(m);
+ padding: 0;
+ position: static;
+ width: auto;
+ }
+ }
+}
+
+.c-navigation {
+ text-transform: uppercase;
+
+ a {
+ color: inherit;
+ font-weight: bold;
+
+ &:hover,
+ &.is-active {
+ color: get-brand(primary);
+ }
+ }
+
+ &__trigger {
+ display: block;
+ line-height: 0;
+
+ @include respond(large) {
+ display: none;
+ }
+
+ .icon {
+ height: 32px;
+ width: 32px;
+ }
+ }
+ &__list {
+ background: get-color(gray, 900);
+ box-shadow: 0 0 20px rgba(0,0,0,.2);
+ font-size: 1.6rem;
+ transform: translateX(-100%);
+ transition: all .3s;
+
+ @include respond(large) {
+ background: transparent;
+ box-shadow: none;
+ transform: translateX(0);
+ }
+
+ .a-logo {
+ margin-bottom: 24px;
+
+ @include respond(large) {
+ display: none;
+ }
+ }
+
+ &.is-active {
+ transform: translateX(0);
+ }
+ }
+}
\ No newline at end of file
diff --git a/packages/site/themes/subspace/source/css/objects/_side-navigation.scss b/packages/site/themes/subspace/source/css/objects/_side-navigation.scss
new file mode 100644
index 0000000..483db57
--- /dev/null
+++ b/packages/site/themes/subspace/source/css/objects/_side-navigation.scss
@@ -0,0 +1,128 @@
+.c-side-navigation {
+ @include list-reset();
+ display: none;
+ left: 20px;
+ overflow: auto;
+ position: fixed;
+ top: 20px;
+ border-radius: $global-border-radius;
+ box-shadow: 0 0 20px rgba(0,0,0,.2);
+ background: #fff;
+ padding: 24px;
+ z-index: 100;
+ height: calc(100% - 40px);
+ width: calc(100% - 40px);
+
+ @include respond(large) {
+ display: block;
+ height: auto;
+ padding: 40px 0;
+ position: sticky;
+ width: 100%;
+ z-index: 10;
+ background: transparent;
+ box-shadow: none;
+ }
+
+ &.is-active {
+ display: block;
+ }
+
+ &__header {
+ margin-bottom: -40px;
+ text-align: right;
+
+ @include respond(large) {
+ display: none;
+ }
+ }
+
+ &__trigger {
+ @include respond(large) {
+ display: none !important;
+ }
+ }
+
+ &.is-active {
+ display: block;
+ }
+
+ > .c-side-navigation__item {
+ margin-top: 32px;
+ }
+
+ // First Level
+ > .c-side-navigation__item > .c-side-navigation__item__anchor {
+ font-family: get-font(headingFamily);
+ font-size: 2.4rem;
+ font-weight: bold;
+
+ + .c-side-navigation__item__tree {
+ margin-top: get-stack-spacing(s);
+ }
+ }
+ // Second Level
+ > .c-side-navigation__item > .c-side-navigation__item__tree > .c-side-navigation__item {
+ margin-top: 0;
+ padding-bottom: get-stack-spacing(s);
+ padding-top: get-stack-spacing(s);
+ border-top: 1px solid $global-border-color;
+
+ @include respond(large) {
+ margin-top: get-stack-spacing(s);
+ padding-bottom: 0;
+ padding-top: 0;
+ border-top: 0;
+ }
+
+ > .c-side-navigation__item__anchor {
+ +.c-side-navigation__item__tree {
+ padding-bottom: get-stack-spacing(s);
+ padding-top: get-stack-spacing(s);
+ }
+ }
+ }
+
+ // Third Level
+ > .c-side-navigation__item > .c-side-navigation__item__tree > .c-side-navigation__item > .c-side-navigation__item__tree > .c-side-navigation__item {
+ margin-top: 0;
+ padding-bottom: get-stack-spacing(s);
+ padding-top: get-stack-spacing(s);
+ border-top: 1px solid $global-border-color;
+
+ @include respond(large) {
+ margin-top: get-stack-spacing(s);
+ padding-bottom: 0;
+ padding-top: 0;
+ border-top: 0;
+ }
+ }
+
+ // Third Level
+
+ // General Anchor Styling
+ &__item__anchor {
+ color: get-font(color);
+
+ &:hover {
+ color: $global-link-color;
+ }
+
+ &.is-active {
+ color: $global-link-color;
+ font-weight: bold;
+ }
+ }
+
+ // General item
+ &__item {
+ &__tree {
+ @include list-reset();
+ margin-left: get-inline-spacing(m);
+ }
+ &.is-active > .c-side-navigation__item__anchor {
+ color: get-brand(primary);
+ font-weight: bold;
+ }
+ }
+}
\ No newline at end of file
diff --git a/packages/site/themes/subspace/source/css/settings/_config.scss b/packages/site/themes/subspace/source/css/settings/_config.scss
new file mode 100644
index 0000000..844dbf9
--- /dev/null
+++ b/packages/site/themes/subspace/source/css/settings/_config.scss
@@ -0,0 +1,195 @@
+$mobile-first: true !default;
+
+/// Color Scheme
+/// The global colors for this project
+/// @group Colors
+$colorscheme: (
+ unique: (
+ black: #000,
+ white: #fff
+ ),
+ yellow: (
+ 900: #e7c000,
+ 300: #fff7d4
+ ),
+ red: (
+ 900: #F1645D,
+ 800: #F2746D,
+ 700: #F4837D,
+ 600: #F5928E,
+ 500: #F7A29E,
+ 400: #F8B2AE,
+ 300: #F9C1BE,
+ 200: #FBD0CE,
+ 100: #FCE0DF
+ ),
+ green: (
+ lighter: #EAFAEF,
+ base: #09D9B9,
+ 900: #398689,
+ 800: #619EA1,
+ 700: #74AAAC,
+ 600: #88B6B8,
+ 500: #9CC2C4,
+ 400: #B0CFD0,
+ 300: #C4DBDC,
+ 200: #D7E7E7,
+ 100: #EBF3F3
+ ),
+ gray: (
+ lightest: #F5F6FA,
+ darkest: #333,
+ medium: #ccc,
+ base: #6C7992,
+ 900: #041A39,
+ 800: #364861,
+ 700: #4F5F74,
+ 600: #687688,
+ 500: #818C9C,
+ 400: #9BA3B0,
+ 300: #B4BAC4,
+ 200: #CDD1D7,
+ 100: #E6E8EB
+ ),
+ blue: (
+ lighter: #6E7786,
+ light: #253148,
+ base: #0E1C36
+ )
+) !default;
+
+/// Brand Colors
+/// The typical brand colors
+/// @group Colors
+$brandColors: (
+ primary: get-color(red, 900),
+ primaryGradation: get-color(red, 500),
+ secondary: get-color(gray, 900),
+ secondaryGradation: get-color(gray, 300),
+) !default;
+
+$insetSpacing: (
+ xs: 4px,
+ s: 8px,
+ m: 16px,
+ l: 32px,
+ xl: 64px
+) !default;
+
+$insetSquishSpacing: (
+ s: 8px 4px,
+ m: 8px 16px,
+ l: 16px 24px
+) !default;
+
+$insetStretchSpacing: (
+ s: 12px 8px,
+ m: 24px 16px
+) !default;
+
+$stackSpacing: (
+ xxs: 2px,
+ xs: 4px,
+ s: 8px,
+ m: 16px,
+ l: 32px,
+ xl: 64px
+) !default;
+
+$inlineSpacing: (
+ xxs: 2px,
+ xs: 4px,
+ s: 8px,
+ m: 16px,
+ l: 32px,
+ xl: 64px
+) !default;
+
+/// Notification Colors
+/// Different types of notifications
+/// @group Colors
+$semanticColors: (
+ errorLight: #FDE0E0,
+ error: #F46363,
+ successLight: #E8F5DA,
+ success: #69a22b,
+ warningLight: #FFF6E9,
+ warning: #ff9900,
+ positive: #8CCE44,
+ negative: #F46363
+) !default;
+
+$layoutColors: (
+ quite: get-color(gray, lightest),
+ spotlight: get-brand(secondary),
+ accent: get-brand(primary)
+) !default;
+
+/// Social Media Colors
+/// The colors of some social networks
+/// @group Colors
+$socialMediaColors: (
+ instagram: #000,
+ facebook: #4266b3,
+ youtube: #ff0001,
+ twitter: #1da1f2
+) !default;
+
+/// Default Font Settings
+/// Global font settings like colors, families, size, etc.
+/// @group Fonts
+$fontSettings: (
+ color: get-color(gray, darkest),
+ baseFamily: (-apple-system, BlinkMacSystemFont, "Segoe UI", 'Roboto', Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"),
+ headingFamily: ('Roboto', Helvetica, sans-serif),
+ size: 17px
+) !default;
+
+/// Typography
+
+/// Breakpoints
+/// Different sizes to create breakpoints
+/// @group Layout
+$breakpoints: (
+ small: 480px,
+ medium: 600px,
+ large: 767px,
+ xLarge: 1023px,
+) !default;
+
+/// Indecies
+/// The global map to show all indecies to handle a solid layer architecture
+$indecies: (
+ navigationList: 10
+) !default;
+
+/// Global Space between components
+/// @group Layout
+$component-space: get-spacing(large);
+$container-space: get-spacing(x-large);
+$max-wrapper-width: 1200px !default;
+$max-wrapper-width-medium: 720px !default;
+$max-cols: 12 !default;
+$gutter-width: get-inline-spacing(m) !default;
+$prevent-spacing: get-inset-spacing(m) !default;
+
+/// Standard Border Radius
+/// @type String
+/// @group Border
+$global-border-radius: 8px !default;
+
+/// Rounded Border Radius
+/// @type String
+/// @group Border
+$global-rounded-border-radius: 250px !default;
+
+/// Standard Border Color
+/// @type Color
+/// @group Border
+$global-border-color: get-color(gray, 100) !default;
+
+/// Link Color
+/// @type Color
+$global-link-color: get-brand(primary) !default;
+
+$form-gutter: get-stack-spacing(m) !default;
\ No newline at end of file
diff --git a/packages/site/themes/subspace/source/css/settings/_preset.scss b/packages/site/themes/subspace/source/css/settings/_preset.scss
new file mode 100644
index 0000000..cd5ed94
--- /dev/null
+++ b/packages/site/themes/subspace/source/css/settings/_preset.scss
@@ -0,0 +1,269 @@
+*,
+*:before,
+*:after {
+ box-sizing: inherit;
+}
+
+html {
+ box-sizing: border-box;
+ min-height: 100%;
+ -webkit-overflow-scrolling: touch;
+ -webkit-tap-highlight-color: rgba(0,0,0,0);
+ -webkit-text-size-adjust: 100%;
+ -ms-text-size-adjust: 100%;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+ font-size: 10px;
+ font-weight: normal;
+ text-rendering: optimizeLegibility;
+}
+
+body {
+ margin: 0;
+ color: get-font(color);
+ font-family: get-font(baseFamily);
+ font-size: get-font(size);
+ font-weight: 400;
+ line-height: 1.6;
+}
+
+s {
+ font-size: 14px;
+}
+
+input,
+textarea,
+select {
+ display: block;
+ margin: get-stack-spacing(xs) 0 0;
+ padding: 12px 16px;
+ width: 100%;
+ border-radius: 0;
+ border: 1px solid $global-border-color !important;
+ box-shadow: none;
+ color: get-font(color);
+ font-family: get-font(baseFamily);
+ font-size: get-font(size);
+ line-height: 1;
+
+ &:placeholder {
+ color: rgba(get-font(color), .3);
+ }
+
+ &:first-child {
+ margin-top: 0;
+ }
+
+ &:focus,
+ &:active {
+ outline: 1px solid get-brand(primary);
+ border-color: transparent;
+ background: rgba(get-color(unique, white), .8)
+ }
+
+ &.is-error {
+ border-color: get-semantic-color(error);
+ }
+ &.is-success {
+ border-color: get-semantic-color(success);
+ }
+}
+
+input[type="tel"],
+input[type="text"],
+input[type="password"],
+input[type="email"],
+textarea {
+ appearance: none;
+}
+
+input {
+ &[type="checkbox"],
+ &[type="radio"] {
+ width: auto;
+ }
+}
+
+textarea {
+ min-height: 100px;
+ line-height: 1.425;
+}
+
+label {
+ display: block;
+ margin-top: $form-gutter;
+ color: get-color(gray);
+ font-size: 1.5rem;
+ line-height: 1.2;
+
+ &:first-child {
+ margin-top: 0;
+ }
+}
+
+form {
+ margin-top: $component-space;
+}
+
+fieldset {
+ margin: 0;
+ padding: 0;
+ border: 0;
+}
+
+legend {
+ font-family: get-font(headingFamily);
+ font-weight: bold;
+ line-height: 1.2;
+}
+
+nav {
+ ul,
+ ol {
+ list-style: none;
+ margin-left: 0;
+ padding-left: 0;
+ }
+}
+
+img {
+ height: auto;
+ max-width: 100%;
+ border: none;
+
+ &:first-child {
+ margin-top: 0;
+ }
+}
+
+p {
+ margin: get-stack-spacing(m) 0 0;
+
+ &:first-child {
+ margin-top: 0;
+ }
+}
+
+code {
+ padding: 2px 4px;
+ border-radius: $global-border-radius;
+ background: get-color(gray, 100);
+ color: get-color(gray, 700);
+
+ &[class] {
+ background: transparent;
+ }
+}
+
+a {
+ cursor: pointer;
+ position: relative;
+ color: $global-link-color;
+ text-decoration: none;
+
+ &:hover,
+ &:visited,
+ &:focus,
+ &:visited {
+ text-decoration: none;
+ }
+
+ &:hover {
+ }
+ &.icon:hover {
+ text-decoration: none;
+ }
+}
+
+ol, ul {
+ margin-bottom: 9px;
+ margin-left: get-inline-spacing(m);
+ margin-right: 0;
+ margin-top: get-stack-spacing(s);
+ padding-left: 16px;
+ line-height: 1.5;
+
+ &:first-child {
+ margin-top: 0;
+ }
+}
+
+ul {
+ list-style-type: disc;
+}
+
+li {
+ margin-top: get-stack-spacing(xs);
+
+ &:first-child {
+ margin-top: 0;
+ }
+}
+
+figure {
+ margin: get-stack-spacing(s) 0 0;
+ border-radius: 0;
+ line-height: 1;
+
+ &:first-child {
+ margin-top: 0;
+ }
+}
+
+// Name: HR
+hr {
+ height: 1px;
+ margin-top: $container-space;
+ background: $global-border-color;
+ border: none;
+}
+
+blockquote {
+ margin: 32px 0 0;
+ padding-top: 16px;
+ position: relative;
+ color: get-color(gray);
+ font-family: get-font(headingFamily);
+ font-size: 2.4rem;
+ font-weight: bold;
+ line-height: 1.425;
+
+ @include respond(large) {
+ font-size: 2.8rem;
+ }
+
+ &:before {
+ content: '';
+ width: 30px;
+ display: block;
+ position: absolute;
+ top: 0;
+ left: 0;
+ height: 3px;
+ background: get-color(gray);
+ }
+
+ cite {
+ display: block;
+ margin-top: get-stack-spacing(s);
+ font-family: get-font(baseFamily);
+ font-size: 2.2rem;
+ font-weight: normal;
+ font-style: normal;
+ }
+}
+
+// Video
+video {
+ height: auto;
+ max-width: 100%;
+ width: 100%;
+ overflow: hidden;
+ padding: 0;
+ border: none;
+ background: transparent;
+}
+
+table {
+ margin-top: $component-space;
+}
diff --git a/packages/site/themes/subspace/source/css/settings/_typography.scss b/packages/site/themes/subspace/source/css/settings/_typography.scss
new file mode 100644
index 0000000..1d8ee7a
--- /dev/null
+++ b/packages/site/themes/subspace/source/css/settings/_typography.scss
@@ -0,0 +1,62 @@
+h1,
+h2,
+h3,
+h4,
+h5,
+h6 {
+ margin: 0;
+ font-family: get-font(headingFamily);
+ line-height: 1.2;
+
+ &:first-child {
+ margin-top: 0;
+ }
+
+ + p {
+ margin-top: get-stack-spacing(s);
+ }
+}
+
+.h2 {
+ font-size: 42px;
+}
+
+.h3 {
+ font-size: 36px;
+}
+
+.h4 {
+ font-size: 28px;
+}
+
+.h5 {
+ font-size: 24px;
+}
+
+.h6 {
+ font-size: get-font(size);
+ font-weight: bold;
+}
+
+.a-subtitle {
+ font-size: 2.1rem;
+ font-weight: 600;
+ text-transform: uppercase;
+}
+
+.a-paragraph {
+ font-size: get-font(size);
+}
+
+.a-title {
+ font-size: 3.4rem;
+ font-weight: bold;
+
+ @include respond(medium) {
+ font-size: 4.2rem;
+ }
+
+ strong {
+ font-weight: bold;
+ }
+}
\ No newline at end of file
diff --git a/packages/site/themes/subspace/source/css/tools/_column.scss b/packages/site/themes/subspace/source/css/tools/_column.scss
new file mode 100644
index 0000000..8c85e92
--- /dev/null
+++ b/packages/site/themes/subspace/source/css/tools/_column.scss
@@ -0,0 +1,9 @@
+/// Create Column
+/// Creating the width for columns
+/// @group Layout
+/// @param {number} $column
+/// @param {number} $max-columns [12]
+@mixin column($column, $max-columns: 12) {
+ $size: (100%/$max-columns)*$column;
+ width: calc(#{$size} - #{$gutter-width};
+}
diff --git a/packages/site/themes/subspace/source/css/tools/_get-brand-color.scss b/packages/site/themes/subspace/source/css/tools/_get-brand-color.scss
new file mode 100644
index 0000000..b939b96
--- /dev/null
+++ b/packages/site/themes/subspace/source/css/tools/_get-brand-color.scss
@@ -0,0 +1,12 @@
+/// Brand Color
+/// Get the color of your brand
+/// @group Colors
+/// @param {string} $key
+@function get-brand($key) {
+ @if map-has-key($brandColors, $key) {
+ @return map-get($brandColors, $key);
+ }
+
+ @warn "The key #{$key} is not in the map ’$brandColors’";
+ @return null;
+}
diff --git a/packages/site/themes/subspace/source/css/tools/_get-color.scss b/packages/site/themes/subspace/source/css/tools/_get-color.scss
new file mode 100644
index 0000000..4115517
--- /dev/null
+++ b/packages/site/themes/subspace/source/css/tools/_get-color.scss
@@ -0,0 +1,8 @@
+/// Color
+/// Get a color from the global palette
+/// @group Colors
+/// @param {string} $scheme - Take the color which you need
+/// @param {string} $tone [base] - Use a different tone from the color
+@function get-color($scheme, $tone: base) {
+ @return map-get(map-get($colorscheme, $scheme), $tone);
+}
diff --git a/packages/site/themes/subspace/source/css/tools/_get-font.scss b/packages/site/themes/subspace/source/css/tools/_get-font.scss
new file mode 100644
index 0000000..331449e
--- /dev/null
+++ b/packages/site/themes/subspace/source/css/tools/_get-font.scss
@@ -0,0 +1,12 @@
+/// Font-Settings
+/// Get a value of the default font settings
+/// @group Fonts
+/// @param {string} $key
+@function get-font($key) {
+ @if map-has-key($fontSettings, $key) {
+ @return map-get($fontSettings, $key);
+ }
+
+ @warn "The key #{$key} is not in the map ’$fontSettings’";
+ @return null;
+}
diff --git a/packages/site/themes/subspace/source/css/tools/_get-index.scss b/packages/site/themes/subspace/source/css/tools/_get-index.scss
new file mode 100644
index 0000000..f6dfe25
--- /dev/null
+++ b/packages/site/themes/subspace/source/css/tools/_get-index.scss
@@ -0,0 +1,11 @@
+/// Index
+/// Get the index of an element
+/// @param {string} $key
+@function get-index($key) {
+ @if map-has-key($indecies, $key) {
+ @return map-get($indecies, $key);
+ }
+
+ @warn "The key #{$key} is not in the map ’$indecies’";
+ @return null;
+}
diff --git a/packages/site/themes/subspace/source/css/tools/_get-layout-color.scss b/packages/site/themes/subspace/source/css/tools/_get-layout-color.scss
new file mode 100644
index 0000000..d9d01de
--- /dev/null
+++ b/packages/site/themes/subspace/source/css/tools/_get-layout-color.scss
@@ -0,0 +1,12 @@
+/// Layout Color
+/// Get the color of a layout colors
+/// @group Colors
+/// @param {string} $key
+@function get-layout-color($key) {
+ @if map-has-key($layoutColors, $key) {
+ @return map-get($layoutColors, $key);
+ }
+
+ @warn "The key #{$key} is not in the map ’$layer’";
+ @return null;
+}
diff --git a/packages/site/themes/subspace/source/css/tools/_get-notification-color.scss b/packages/site/themes/subspace/source/css/tools/_get-notification-color.scss
new file mode 100644
index 0000000..81ac2c4
--- /dev/null
+++ b/packages/site/themes/subspace/source/css/tools/_get-notification-color.scss
@@ -0,0 +1,12 @@
+/// Notification Color
+/// Get the color of a notification type
+/// @group Colors
+/// @param {string} $key
+@function get-notification-color($key) {
+ @if map-has-key($notificationColors, $key) {
+ @return map-get($notificationColors, $key);
+ }
+
+ @warn "The key #{$key} is not in the map ’$brandColors’";
+ @return null;
+}
diff --git a/packages/site/themes/subspace/source/css/tools/_get-semantic-color.scss b/packages/site/themes/subspace/source/css/tools/_get-semantic-color.scss
new file mode 100644
index 0000000..fc4a274
--- /dev/null
+++ b/packages/site/themes/subspace/source/css/tools/_get-semantic-color.scss
@@ -0,0 +1,12 @@
+/// Semantic Color
+/// Get the color of a semantic type
+/// @group Colors
+/// @param {string} $key
+@function get-semantic-color($key) {
+ @if map-has-key($semanticColors, $key) {
+ @return map-get($semanticColors, $key);
+ }
+
+ @warn "The key #{$key} is not in the map ’$brandColors’";
+ @return null;
+}
diff --git a/packages/site/themes/subspace/source/css/tools/_get-spacing.scss b/packages/site/themes/subspace/source/css/tools/_get-spacing.scss
new file mode 100644
index 0000000..020a9ba
--- /dev/null
+++ b/packages/site/themes/subspace/source/css/tools/_get-spacing.scss
@@ -0,0 +1,48 @@
+/// Spacing
+/// Get the value for spacing
+/// @group Colors
+/// @param {string} $key
+@function get-inset-spacing($key) {
+ @if map-has-key($insetSpacing, $key) {
+ @return map-get($insetSpacing, $key);
+ }
+
+ @warn "The key #{$key} is not in the map ’$brandColors’";
+ @return null;
+}
+
+@function get-inset-squish-spacing($key) {
+ @if map-has-key($insetSquishSpacing, $key) {
+ @return map-get($insetSquishSpacing, $key);
+ }
+
+ @warn "The key #{$key} is not in the map ’$brandColors’";
+ @return null;
+}
+
+@function get-inset-stretch-spacing($key) {
+ @if map-has-key($insetStretchSpacing, $key) {
+ @return map-get($insetStretchSpacing, $key);
+ }
+
+ @warn "The key #{$key} is not in the map ’$brandColors’";
+ @return null;
+}
+
+@function get-stack-spacing($key) {
+ @if map-has-key($stackSpacing, $key) {
+ @return map-get($stackSpacing, $key);
+ }
+
+ @warn "The key #{$key} is not in the map ’$brandColors’";
+ @return null;
+}
+
+@function get-inline-spacing($key) {
+ @if map-has-key($inlineSpacing, $key) {
+ @return map-get($inlineSpacing, $key);
+ }
+
+ @warn "The key #{$key} is not in the map ’$brandColors’";
+ @return null;
+}
diff --git a/packages/site/themes/subspace/source/css/tools/_list-reset.scss b/packages/site/themes/subspace/source/css/tools/_list-reset.scss
new file mode 100644
index 0000000..fa1cecb
--- /dev/null
+++ b/packages/site/themes/subspace/source/css/tools/_list-reset.scss
@@ -0,0 +1,8 @@
+/// List Reset
+/// Reset the styles for standard lists
+/// @group Helper
+@mixin list-reset() {
+ margin: 0;
+ padding: 0;
+ list-style: none;
+}
diff --git a/packages/site/themes/subspace/source/css/tools/_respond.scss b/packages/site/themes/subspace/source/css/tools/_respond.scss
new file mode 100644
index 0000000..3b905e3
--- /dev/null
+++ b/packages/site/themes/subspace/source/css/tools/_respond.scss
@@ -0,0 +1,17 @@
+/// Respond
+/// Using this for breakpoints
+/// @group Layout
+/// @param {string} $name
+@mixin respond($name) {
+ $value: map-get($breakpoints, $name);
+
+ @if($mobile-first) {
+ @media screen and (min-width: $value) {
+ @content;
+ }
+ } @else {
+ @media screen and (max-width: $value) {
+ @content;
+ }
+ }
+}
diff --git a/packages/site/themes/subspace/source/css/utilities/text-color.scss b/packages/site/themes/subspace/source/css/utilities/text-color.scss
new file mode 100644
index 0000000..76926da
--- /dev/null
+++ b/packages/site/themes/subspace/source/css/utilities/text-color.scss
@@ -0,0 +1,7 @@
+.u-text-color-focus {
+ color: get-color(red, 900);
+}
+
+.u-text-color-quiet {
+ color: get-color(gray, 500);
+}
\ No newline at end of file
diff --git a/packages/site/themes/subspace/source/css/utilities/text-size.scss b/packages/site/themes/subspace/source/css/utilities/text-size.scss
new file mode 100644
index 0000000..304dda2
--- /dev/null
+++ b/packages/site/themes/subspace/source/css/utilities/text-size.scss
@@ -0,0 +1,11 @@
+.u-text-l {
+ font-size: 24px;
+}
+
+.u-text-uppercase {
+ text-transform: uppercase;
+}
+
+.u-text-strong {
+ font-weight: 600;
+}
\ No newline at end of file
diff --git a/packages/site/themes/subspace/source/fonts/LICENSE.txt b/packages/site/themes/subspace/source/fonts/LICENSE.txt
new file mode 100755
index 0000000..75b5248
--- /dev/null
+++ b/packages/site/themes/subspace/source/fonts/LICENSE.txt
@@ -0,0 +1,202 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/packages/site/themes/subspace/source/fonts/Roboto-Bold.ttf b/packages/site/themes/subspace/source/fonts/Roboto-Bold.ttf
new file mode 100755
index 0000000..d3f01ad
Binary files /dev/null and b/packages/site/themes/subspace/source/fonts/Roboto-Bold.ttf differ
diff --git a/packages/site/themes/subspace/source/fonts/Roboto-Regular.ttf b/packages/site/themes/subspace/source/fonts/Roboto-Regular.ttf
new file mode 100755
index 0000000..2c97eea
Binary files /dev/null and b/packages/site/themes/subspace/source/fonts/Roboto-Regular.ttf differ
diff --git a/packages/site/themes/subspace/source/icons/accounting-calculator.svg b/packages/site/themes/subspace/source/icons/accounting-calculator.svg
new file mode 100644
index 0000000..43948d2
--- /dev/null
+++ b/packages/site/themes/subspace/source/icons/accounting-calculator.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/packages/site/themes/subspace/source/icons/book-address.svg b/packages/site/themes/subspace/source/icons/book-address.svg
new file mode 100644
index 0000000..a67bae4
--- /dev/null
+++ b/packages/site/themes/subspace/source/icons/book-address.svg
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/packages/site/themes/subspace/source/icons/close.svg b/packages/site/themes/subspace/source/icons/close.svg
new file mode 100644
index 0000000..e17b625
--- /dev/null
+++ b/packages/site/themes/subspace/source/icons/close.svg
@@ -0,0 +1 @@
+close
\ No newline at end of file
diff --git a/packages/site/themes/subspace/source/icons/cloud-lock.svg b/packages/site/themes/subspace/source/icons/cloud-lock.svg
new file mode 100644
index 0000000..e599697
--- /dev/null
+++ b/packages/site/themes/subspace/source/icons/cloud-lock.svg
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/packages/site/themes/subspace/source/icons/contactless-payment.svg b/packages/site/themes/subspace/source/icons/contactless-payment.svg
new file mode 100644
index 0000000..3e59319
--- /dev/null
+++ b/packages/site/themes/subspace/source/icons/contactless-payment.svg
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/packages/site/themes/subspace/source/icons/credit-card-1.svg b/packages/site/themes/subspace/source/icons/credit-card-1.svg
new file mode 100644
index 0000000..c78b715
--- /dev/null
+++ b/packages/site/themes/subspace/source/icons/credit-card-1.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/packages/site/themes/subspace/source/icons/crypto-currency-bitcoin-give.svg b/packages/site/themes/subspace/source/icons/crypto-currency-bitcoin-give.svg
new file mode 100644
index 0000000..9e331b7
--- /dev/null
+++ b/packages/site/themes/subspace/source/icons/crypto-currency-bitcoin-give.svg
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/packages/site/themes/subspace/source/icons/crypto-currency-bitcoin-lock.svg b/packages/site/themes/subspace/source/icons/crypto-currency-bitcoin-lock.svg
new file mode 100644
index 0000000..60252ca
--- /dev/null
+++ b/packages/site/themes/subspace/source/icons/crypto-currency-bitcoin-lock.svg
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/packages/site/themes/subspace/source/icons/facebook.svg b/packages/site/themes/subspace/source/icons/facebook.svg
new file mode 100644
index 0000000..330d6ab
--- /dev/null
+++ b/packages/site/themes/subspace/source/icons/facebook.svg
@@ -0,0 +1,13 @@
+
+
+
+ Facebook
+ Created with Sketch.
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/packages/site/themes/subspace/source/icons/gauge-dashboard-1-alternate.svg b/packages/site/themes/subspace/source/icons/gauge-dashboard-1-alternate.svg
new file mode 100644
index 0000000..f705bed
--- /dev/null
+++ b/packages/site/themes/subspace/source/icons/gauge-dashboard-1-alternate.svg
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/packages/site/themes/subspace/source/icons/gesture-tap-2.svg b/packages/site/themes/subspace/source/icons/gesture-tap-2.svg
new file mode 100644
index 0000000..673a134
--- /dev/null
+++ b/packages/site/themes/subspace/source/icons/gesture-tap-2.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/packages/site/themes/subspace/source/icons/github.svg b/packages/site/themes/subspace/source/icons/github.svg
new file mode 100644
index 0000000..b7371ea
--- /dev/null
+++ b/packages/site/themes/subspace/source/icons/github.svg
@@ -0,0 +1,19 @@
+
+
+
+ Github
+ Created with Sketch.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/packages/site/themes/subspace/source/icons/half-circles.svg b/packages/site/themes/subspace/source/icons/half-circles.svg
new file mode 100644
index 0000000..2ac978b
--- /dev/null
+++ b/packages/site/themes/subspace/source/icons/half-circles.svg
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/packages/site/themes/subspace/source/icons/navigation-menu.svg b/packages/site/themes/subspace/source/icons/navigation-menu.svg
new file mode 100644
index 0000000..2211e7f
--- /dev/null
+++ b/packages/site/themes/subspace/source/icons/navigation-menu.svg
@@ -0,0 +1 @@
+navigation-menu
\ No newline at end of file
diff --git a/packages/site/themes/subspace/source/icons/twitter.svg b/packages/site/themes/subspace/source/icons/twitter.svg
new file mode 100644
index 0000000..c27dea2
--- /dev/null
+++ b/packages/site/themes/subspace/source/icons/twitter.svg
@@ -0,0 +1,13 @@
+
+
+
+ Twitter
+ Created with Sketch.
+
+
+
\ No newline at end of file
diff --git a/packages/site/themes/subspace/source/images/circles.png b/packages/site/themes/subspace/source/images/circles.png
new file mode 100644
index 0000000..b802ff4
Binary files /dev/null and b/packages/site/themes/subspace/source/images/circles.png differ
diff --git a/packages/site/themes/subspace/source/images/embark-logo.svg b/packages/site/themes/subspace/source/images/embark-logo.svg
new file mode 100644
index 0000000..767a5ab
--- /dev/null
+++ b/packages/site/themes/subspace/source/images/embark-logo.svg
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/packages/site/themes/subspace/source/images/favicon.png b/packages/site/themes/subspace/source/images/favicon.png
new file mode 100644
index 0000000..93a32d4
Binary files /dev/null and b/packages/site/themes/subspace/source/images/favicon.png differ
diff --git a/packages/site/themes/subspace/source/images/logo.svg b/packages/site/themes/subspace/source/images/logo.svg
new file mode 100644
index 0000000..3bec198
--- /dev/null
+++ b/packages/site/themes/subspace/source/images/logo.svg
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/packages/site/themes/subspace/source/javascripts/jquery.js b/packages/site/themes/subspace/source/javascripts/jquery.js
new file mode 100755
index 0000000..769be52
--- /dev/null
+++ b/packages/site/themes/subspace/source/javascripts/jquery.js
@@ -0,0 +1 @@
+!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(e,t){"use strict";var n=[],r=e.document,i=Object.getPrototypeOf,o=n.slice,a=n.concat,s=n.push,u=n.indexOf,l={},c=l.toString,f=l.hasOwnProperty,p=f.toString,d=p.call(Object),h={},g=function e(t){return"function"==typeof t&&"number"!=typeof t.nodeType},y=function e(t){return null!=t&&t===t.window},v={type:!0,src:!0,noModule:!0};function m(e,t,n){var i,o=(t=t||r).createElement("script");if(o.text=e,n)for(i in v)n[i]&&(o[i]=n[i]);t.head.appendChild(o).parentNode.removeChild(o)}function x(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?l[c.call(e)]||"object":typeof e}var b="3.3.1",w=function(e,t){return new w.fn.init(e,t)},T=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;w.fn=w.prototype={jquery:"3.3.1",constructor:w,length:0,toArray:function(){return o.call(this)},get:function(e){return null==e?o.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var t=w.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return w.each(this,e)},map:function(e){return this.pushStack(w.map(this,function(t,n){return e.call(t,n,t)}))},slice:function(){return this.pushStack(o.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(n>=0&&n0&&t-1 in e)}var E=function(e){var t,n,r,i,o,a,s,u,l,c,f,p,d,h,g,y,v,m,x,b="sizzle"+1*new Date,w=e.document,T=0,C=0,E=ae(),k=ae(),S=ae(),D=function(e,t){return e===t&&(f=!0),0},N={}.hasOwnProperty,A=[],j=A.pop,q=A.push,L=A.push,H=A.slice,O=function(e,t){for(var n=0,r=e.length;n+~]|"+M+")"+M+"*"),z=new RegExp("="+M+"*([^\\]'\"]*?)"+M+"*\\]","g"),X=new RegExp(W),U=new RegExp("^"+R+"$"),V={ID:new RegExp("^#("+R+")"),CLASS:new RegExp("^\\.("+R+")"),TAG:new RegExp("^("+R+"|[*])"),ATTR:new RegExp("^"+I),PSEUDO:new RegExp("^"+W),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+P+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},G=/^(?:input|select|textarea|button)$/i,Y=/^h\d$/i,Q=/^[^{]+\{\s*\[native \w/,J=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,K=/[+~]/,Z=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),ee=function(e,t,n){var r="0x"+t-65536;return r!==r||n?t:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)},te=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ne=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},re=function(){p()},ie=me(function(e){return!0===e.disabled&&("form"in e||"label"in e)},{dir:"parentNode",next:"legend"});try{L.apply(A=H.call(w.childNodes),w.childNodes),A[w.childNodes.length].nodeType}catch(e){L={apply:A.length?function(e,t){q.apply(e,H.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function oe(e,t,r,i){var o,s,l,c,f,h,v,m=t&&t.ownerDocument,T=t?t.nodeType:9;if(r=r||[],"string"!=typeof e||!e||1!==T&&9!==T&&11!==T)return r;if(!i&&((t?t.ownerDocument||t:w)!==d&&p(t),t=t||d,g)){if(11!==T&&(f=J.exec(e)))if(o=f[1]){if(9===T){if(!(l=t.getElementById(o)))return r;if(l.id===o)return r.push(l),r}else if(m&&(l=m.getElementById(o))&&x(t,l)&&l.id===o)return r.push(l),r}else{if(f[2])return L.apply(r,t.getElementsByTagName(e)),r;if((o=f[3])&&n.getElementsByClassName&&t.getElementsByClassName)return L.apply(r,t.getElementsByClassName(o)),r}if(n.qsa&&!S[e+" "]&&(!y||!y.test(e))){if(1!==T)m=t,v=e;else if("object"!==t.nodeName.toLowerCase()){(c=t.getAttribute("id"))?c=c.replace(te,ne):t.setAttribute("id",c=b),s=(h=a(e)).length;while(s--)h[s]="#"+c+" "+ve(h[s]);v=h.join(","),m=K.test(e)&&ge(t.parentNode)||t}if(v)try{return L.apply(r,m.querySelectorAll(v)),r}catch(e){}finally{c===b&&t.removeAttribute("id")}}}return u(e.replace(B,"$1"),t,r,i)}function ae(){var e=[];function t(n,i){return e.push(n+" ")>r.cacheLength&&delete t[e.shift()],t[n+" "]=i}return t}function se(e){return e[b]=!0,e}function ue(e){var t=d.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function le(e,t){var n=e.split("|"),i=n.length;while(i--)r.attrHandle[n[i]]=t}function ce(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function fe(e){return function(t){return"input"===t.nodeName.toLowerCase()&&t.type===e}}function pe(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function de(e){return function(t){return"form"in t?t.parentNode&&!1===t.disabled?"label"in t?"label"in t.parentNode?t.parentNode.disabled===e:t.disabled===e:t.isDisabled===e||t.isDisabled!==!e&&ie(t)===e:t.disabled===e:"label"in t&&t.disabled===e}}function he(e){return se(function(t){return t=+t,se(function(n,r){var i,o=e([],n.length,t),a=o.length;while(a--)n[i=o[a]]&&(n[i]=!(r[i]=n[i]))})})}function ge(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}n=oe.support={},o=oe.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return!!t&&"HTML"!==t.nodeName},p=oe.setDocument=function(e){var t,i,a=e?e.ownerDocument||e:w;return a!==d&&9===a.nodeType&&a.documentElement?(d=a,h=d.documentElement,g=!o(d),w!==d&&(i=d.defaultView)&&i.top!==i&&(i.addEventListener?i.addEventListener("unload",re,!1):i.attachEvent&&i.attachEvent("onunload",re)),n.attributes=ue(function(e){return e.className="i",!e.getAttribute("className")}),n.getElementsByTagName=ue(function(e){return e.appendChild(d.createComment("")),!e.getElementsByTagName("*").length}),n.getElementsByClassName=Q.test(d.getElementsByClassName),n.getById=ue(function(e){return h.appendChild(e).id=b,!d.getElementsByName||!d.getElementsByName(b).length}),n.getById?(r.filter.ID=function(e){var t=e.replace(Z,ee);return function(e){return e.getAttribute("id")===t}},r.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&g){var n=t.getElementById(e);return n?[n]:[]}}):(r.filter.ID=function(e){var t=e.replace(Z,ee);return function(e){var n="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return n&&n.value===t}},r.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&g){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),r.find.TAG=n.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):n.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},r.find.CLASS=n.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&g)return t.getElementsByClassName(e)},v=[],y=[],(n.qsa=Q.test(d.querySelectorAll))&&(ue(function(e){h.appendChild(e).innerHTML=" ",e.querySelectorAll("[msallowcapture^='']").length&&y.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||y.push("\\["+M+"*(?:value|"+P+")"),e.querySelectorAll("[id~="+b+"-]").length||y.push("~="),e.querySelectorAll(":checked").length||y.push(":checked"),e.querySelectorAll("a#"+b+"+*").length||y.push(".#.+[+~]")}),ue(function(e){e.innerHTML=" ";var t=d.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&y.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&y.push(":enabled",":disabled"),h.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&y.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),y.push(",.*:")})),(n.matchesSelector=Q.test(m=h.matches||h.webkitMatchesSelector||h.mozMatchesSelector||h.oMatchesSelector||h.msMatchesSelector))&&ue(function(e){n.disconnectedMatch=m.call(e,"*"),m.call(e,"[s!='']:x"),v.push("!=",W)}),y=y.length&&new RegExp(y.join("|")),v=v.length&&new RegExp(v.join("|")),t=Q.test(h.compareDocumentPosition),x=t||Q.test(h.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return f=!0,0;var r=!e.compareDocumentPosition-!t.compareDocumentPosition;return r||(1&(r=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!n.sortDetached&&t.compareDocumentPosition(e)===r?e===d||e.ownerDocument===w&&x(w,e)?-1:t===d||t.ownerDocument===w&&x(w,t)?1:c?O(c,e)-O(c,t):0:4&r?-1:1)}:function(e,t){if(e===t)return f=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e===d?-1:t===d?1:i?-1:o?1:c?O(c,e)-O(c,t):0;if(i===o)return ce(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?ce(a[r],s[r]):a[r]===w?-1:s[r]===w?1:0},d):d},oe.matches=function(e,t){return oe(e,null,null,t)},oe.matchesSelector=function(e,t){if((e.ownerDocument||e)!==d&&p(e),t=t.replace(z,"='$1']"),n.matchesSelector&&g&&!S[t+" "]&&(!v||!v.test(t))&&(!y||!y.test(t)))try{var r=m.call(e,t);if(r||n.disconnectedMatch||e.document&&11!==e.document.nodeType)return r}catch(e){}return oe(t,d,null,[e]).length>0},oe.contains=function(e,t){return(e.ownerDocument||e)!==d&&p(e),x(e,t)},oe.attr=function(e,t){(e.ownerDocument||e)!==d&&p(e);var i=r.attrHandle[t.toLowerCase()],o=i&&N.call(r.attrHandle,t.toLowerCase())?i(e,t,!g):void 0;return void 0!==o?o:n.attributes||!g?e.getAttribute(t):(o=e.getAttributeNode(t))&&o.specified?o.value:null},oe.escape=function(e){return(e+"").replace(te,ne)},oe.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},oe.uniqueSort=function(e){var t,r=[],i=0,o=0;if(f=!n.detectDuplicates,c=!n.sortStable&&e.slice(0),e.sort(D),f){while(t=e[o++])t===e[o]&&(i=r.push(o));while(i--)e.splice(r[i],1)}return c=null,e},i=oe.getText=function(e){var t,n="",r=0,o=e.nodeType;if(o){if(1===o||9===o||11===o){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=i(e)}else if(3===o||4===o)return e.nodeValue}else while(t=e[r++])n+=i(t);return n},(r=oe.selectors={cacheLength:50,createPseudo:se,match:V,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(Z,ee),e[3]=(e[3]||e[4]||e[5]||"").replace(Z,ee),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||oe.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&oe.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return V.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=a(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(Z,ee).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=E[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&E(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(e,t,n){return function(r){var i=oe.attr(r,e);return null==i?"!="===t:!t||(i+="","="===t?i===n:"!="===t?i!==n:"^="===t?n&&0===i.indexOf(n):"*="===t?n&&i.indexOf(n)>-1:"$="===t?n&&i.slice(-n.length)===n:"~="===t?(" "+i.replace($," ")+" ").indexOf(n)>-1:"|="===t&&(i===n||i.slice(0,n.length+1)===n+"-"))}},CHILD:function(e,t,n,r,i){var o="nth"!==e.slice(0,3),a="last"!==e.slice(-4),s="of-type"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,u){var l,c,f,p,d,h,g=o!==a?"nextSibling":"previousSibling",y=t.parentNode,v=s&&t.nodeName.toLowerCase(),m=!u&&!s,x=!1;if(y){if(o){while(g){p=t;while(p=p[g])if(s?p.nodeName.toLowerCase()===v:1===p.nodeType)return!1;h=g="only"===e&&!h&&"nextSibling"}return!0}if(h=[a?y.firstChild:y.lastChild],a&&m){x=(d=(l=(c=(f=(p=y)[b]||(p[b]={}))[p.uniqueID]||(f[p.uniqueID]={}))[e]||[])[0]===T&&l[1])&&l[2],p=d&&y.childNodes[d];while(p=++d&&p&&p[g]||(x=d=0)||h.pop())if(1===p.nodeType&&++x&&p===t){c[e]=[T,d,x];break}}else if(m&&(x=d=(l=(c=(f=(p=t)[b]||(p[b]={}))[p.uniqueID]||(f[p.uniqueID]={}))[e]||[])[0]===T&&l[1]),!1===x)while(p=++d&&p&&p[g]||(x=d=0)||h.pop())if((s?p.nodeName.toLowerCase()===v:1===p.nodeType)&&++x&&(m&&((c=(f=p[b]||(p[b]={}))[p.uniqueID]||(f[p.uniqueID]={}))[e]=[T,x]),p===t))break;return(x-=i)===r||x%r==0&&x/r>=0}}},PSEUDO:function(e,t){var n,i=r.pseudos[e]||r.setFilters[e.toLowerCase()]||oe.error("unsupported pseudo: "+e);return i[b]?i(t):i.length>1?(n=[e,e,"",t],r.setFilters.hasOwnProperty(e.toLowerCase())?se(function(e,n){var r,o=i(e,t),a=o.length;while(a--)e[r=O(e,o[a])]=!(n[r]=o[a])}):function(e){return i(e,0,n)}):i}},pseudos:{not:se(function(e){var t=[],n=[],r=s(e.replace(B,"$1"));return r[b]?se(function(e,t,n,i){var o,a=r(e,null,i,[]),s=e.length;while(s--)(o=a[s])&&(e[s]=!(t[s]=o))}):function(e,i,o){return t[0]=e,r(t,null,o,n),t[0]=null,!n.pop()}}),has:se(function(e){return function(t){return oe(e,t).length>0}}),contains:se(function(e){return e=e.replace(Z,ee),function(t){return(t.textContent||t.innerText||i(t)).indexOf(e)>-1}}),lang:se(function(e){return U.test(e||"")||oe.error("unsupported lang: "+e),e=e.replace(Z,ee).toLowerCase(),function(t){var n;do{if(n=g?t.lang:t.getAttribute("xml:lang")||t.getAttribute("lang"))return(n=n.toLowerCase())===e||0===n.indexOf(e+"-")}while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===h},focus:function(e){return e===d.activeElement&&(!d.hasFocus||d.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:de(!1),disabled:de(!0),checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,!0===e.selected},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!r.pseudos.empty(e)},header:function(e){return Y.test(e.nodeName)},input:function(e){return G.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||"text"===t.toLowerCase())},first:he(function(){return[0]}),last:he(function(e,t){return[t-1]}),eq:he(function(e,t,n){return[n<0?n+t:n]}),even:he(function(e,t){for(var n=0;n=0;)e.push(r);return e}),gt:he(function(e,t,n){for(var r=n<0?n+t:n;++r1?function(t,n,r){var i=e.length;while(i--)if(!e[i](t,n,r))return!1;return!0}:e[0]}function be(e,t,n){for(var r=0,i=t.length;r-1&&(o[l]=!(a[l]=f))}}else v=we(v===a?v.splice(h,v.length):v),i?i(null,a,v,u):L.apply(a,v)})}function Ce(e){for(var t,n,i,o=e.length,a=r.relative[e[0].type],s=a||r.relative[" "],u=a?1:0,c=me(function(e){return e===t},s,!0),f=me(function(e){return O(t,e)>-1},s,!0),p=[function(e,n,r){var i=!a&&(r||n!==l)||((t=n).nodeType?c(e,n,r):f(e,n,r));return t=null,i}];u1&&xe(p),u>1&&ve(e.slice(0,u-1).concat({value:" "===e[u-2].type?"*":""})).replace(B,"$1"),n,u0,i=e.length>0,o=function(o,a,s,u,c){var f,h,y,v=0,m="0",x=o&&[],b=[],w=l,C=o||i&&r.find.TAG("*",c),E=T+=null==w?1:Math.random()||.1,k=C.length;for(c&&(l=a===d||a||c);m!==k&&null!=(f=C[m]);m++){if(i&&f){h=0,a||f.ownerDocument===d||(p(f),s=!g);while(y=e[h++])if(y(f,a||d,s)){u.push(f);break}c&&(T=E)}n&&((f=!y&&f)&&v--,o&&x.push(f))}if(v+=m,n&&m!==v){h=0;while(y=t[h++])y(x,b,a,s);if(o){if(v>0)while(m--)x[m]||b[m]||(b[m]=j.call(u));b=we(b)}L.apply(u,b),c&&!o&&b.length>0&&v+t.length>1&&oe.uniqueSort(u)}return c&&(T=E,l=w),x};return n?se(o):o}return s=oe.compile=function(e,t){var n,r=[],i=[],o=S[e+" "];if(!o){t||(t=a(e)),n=t.length;while(n--)(o=Ce(t[n]))[b]?r.push(o):i.push(o);(o=S(e,Ee(i,r))).selector=e}return o},u=oe.select=function(e,t,n,i){var o,u,l,c,f,p="function"==typeof e&&e,d=!i&&a(e=p.selector||e);if(n=n||[],1===d.length){if((u=d[0]=d[0].slice(0)).length>2&&"ID"===(l=u[0]).type&&9===t.nodeType&&g&&r.relative[u[1].type]){if(!(t=(r.find.ID(l.matches[0].replace(Z,ee),t)||[])[0]))return n;p&&(t=t.parentNode),e=e.slice(u.shift().value.length)}o=V.needsContext.test(e)?0:u.length;while(o--){if(l=u[o],r.relative[c=l.type])break;if((f=r.find[c])&&(i=f(l.matches[0].replace(Z,ee),K.test(u[0].type)&&ge(t.parentNode)||t))){if(u.splice(o,1),!(e=i.length&&ve(u)))return L.apply(n,i),n;break}}}return(p||s(e,d))(i,t,!g,n,!t||K.test(e)&&ge(t.parentNode)||t),n},n.sortStable=b.split("").sort(D).join("")===b,n.detectDuplicates=!!f,p(),n.sortDetached=ue(function(e){return 1&e.compareDocumentPosition(d.createElement("fieldset"))}),ue(function(e){return e.innerHTML=" ","#"===e.firstChild.getAttribute("href")})||le("type|href|height|width",function(e,t,n){if(!n)return e.getAttribute(t,"type"===t.toLowerCase()?1:2)}),n.attributes&&ue(function(e){return e.innerHTML=" ",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||le("value",function(e,t,n){if(!n&&"input"===e.nodeName.toLowerCase())return e.defaultValue}),ue(function(e){return null==e.getAttribute("disabled")})||le(P,function(e,t,n){var r;if(!n)return!0===e[t]?t.toLowerCase():(r=e.getAttributeNode(t))&&r.specified?r.value:null}),oe}(e);w.find=E,w.expr=E.selectors,w.expr[":"]=w.expr.pseudos,w.uniqueSort=w.unique=E.uniqueSort,w.text=E.getText,w.isXMLDoc=E.isXML,w.contains=E.contains,w.escapeSelector=E.escape;var k=function(e,t,n){var r=[],i=void 0!==n;while((e=e[t])&&9!==e.nodeType)if(1===e.nodeType){if(i&&w(e).is(n))break;r.push(e)}return r},S=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},D=w.expr.match.needsContext;function N(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}var A=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,t,n){return g(t)?w.grep(e,function(e,r){return!!t.call(e,r,e)!==n}):t.nodeType?w.grep(e,function(e){return e===t!==n}):"string"!=typeof t?w.grep(e,function(e){return u.call(t,e)>-1!==n}):w.filter(t,e,n)}w.filter=function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?w.find.matchesSelector(r,e)?[r]:[]:w.find.matches(e,w.grep(t,function(e){return 1===e.nodeType}))},w.fn.extend({find:function(e){var t,n,r=this.length,i=this;if("string"!=typeof e)return this.pushStack(w(e).filter(function(){for(t=0;t1?w.uniqueSort(n):n},filter:function(e){return this.pushStack(j(this,e||[],!1))},not:function(e){return this.pushStack(j(this,e||[],!0))},is:function(e){return!!j(this,"string"==typeof e&&D.test(e)?w(e):e||[],!1).length}});var q,L=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/;(w.fn.init=function(e,t,n){var i,o;if(!e)return this;if(n=n||q,"string"==typeof e){if(!(i="<"===e[0]&&">"===e[e.length-1]&&e.length>=3?[null,e,null]:L.exec(e))||!i[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(i[1]){if(t=t instanceof w?t[0]:t,w.merge(this,w.parseHTML(i[1],t&&t.nodeType?t.ownerDocument||t:r,!0)),A.test(i[1])&&w.isPlainObject(t))for(i in t)g(this[i])?this[i](t[i]):this.attr(i,t[i]);return this}return(o=r.getElementById(i[2]))&&(this[0]=o,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):g(e)?void 0!==n.ready?n.ready(e):e(w):w.makeArray(e,this)}).prototype=w.fn,q=w(r);var H=/^(?:parents|prev(?:Until|All))/,O={children:!0,contents:!0,next:!0,prev:!0};w.fn.extend({has:function(e){var t=w(e,this),n=t.length;return this.filter(function(){for(var e=0;e-1:1===n.nodeType&&w.find.matchesSelector(n,e))){o.push(n);break}return this.pushStack(o.length>1?w.uniqueSort(o):o)},index:function(e){return e?"string"==typeof e?u.call(w(e),this[0]):u.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(w.uniqueSort(w.merge(this.get(),w(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}});function P(e,t){while((e=e[t])&&1!==e.nodeType);return e}w.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return k(e,"parentNode")},parentsUntil:function(e,t,n){return k(e,"parentNode",n)},next:function(e){return P(e,"nextSibling")},prev:function(e){return P(e,"previousSibling")},nextAll:function(e){return k(e,"nextSibling")},prevAll:function(e){return k(e,"previousSibling")},nextUntil:function(e,t,n){return k(e,"nextSibling",n)},prevUntil:function(e,t,n){return k(e,"previousSibling",n)},siblings:function(e){return S((e.parentNode||{}).firstChild,e)},children:function(e){return S(e.firstChild)},contents:function(e){return N(e,"iframe")?e.contentDocument:(N(e,"template")&&(e=e.content||e),w.merge([],e.childNodes))}},function(e,t){w.fn[e]=function(n,r){var i=w.map(this,t,n);return"Until"!==e.slice(-5)&&(r=n),r&&"string"==typeof r&&(i=w.filter(r,i)),this.length>1&&(O[e]||w.uniqueSort(i),H.test(e)&&i.reverse()),this.pushStack(i)}});var M=/[^\x20\t\r\n\f]+/g;function R(e){var t={};return w.each(e.match(M)||[],function(e,n){t[n]=!0}),t}w.Callbacks=function(e){e="string"==typeof e?R(e):w.extend({},e);var t,n,r,i,o=[],a=[],s=-1,u=function(){for(i=i||e.once,r=t=!0;a.length;s=-1){n=a.shift();while(++s-1)o.splice(n,1),n<=s&&s--}),this},has:function(e){return e?w.inArray(e,o)>-1:o.length>0},empty:function(){return o&&(o=[]),this},disable:function(){return i=a=[],o=n="",this},disabled:function(){return!o},lock:function(){return i=a=[],n||t||(o=n=""),this},locked:function(){return!!i},fireWith:function(e,n){return i||(n=[e,(n=n||[]).slice?n.slice():n],a.push(n),t||u()),this},fire:function(){return l.fireWith(this,arguments),this},fired:function(){return!!r}};return l};function I(e){return e}function W(e){throw e}function $(e,t,n,r){var i;try{e&&g(i=e.promise)?i.call(e).done(t).fail(n):e&&g(i=e.then)?i.call(e,t,n):t.apply(void 0,[e].slice(r))}catch(e){n.apply(void 0,[e])}}w.extend({Deferred:function(t){var n=[["notify","progress",w.Callbacks("memory"),w.Callbacks("memory"),2],["resolve","done",w.Callbacks("once memory"),w.Callbacks("once memory"),0,"resolved"],["reject","fail",w.Callbacks("once memory"),w.Callbacks("once memory"),1,"rejected"]],r="pending",i={state:function(){return r},always:function(){return o.done(arguments).fail(arguments),this},"catch":function(e){return i.then(null,e)},pipe:function(){var e=arguments;return w.Deferred(function(t){w.each(n,function(n,r){var i=g(e[r[4]])&&e[r[4]];o[r[1]](function(){var e=i&&i.apply(this,arguments);e&&g(e.promise)?e.promise().progress(t.notify).done(t.resolve).fail(t.reject):t[r[0]+"With"](this,i?[e]:arguments)})}),e=null}).promise()},then:function(t,r,i){var o=0;function a(t,n,r,i){return function(){var s=this,u=arguments,l=function(){var e,l;if(!(t=o&&(r!==W&&(s=void 0,u=[e]),n.rejectWith(s,u))}};t?c():(w.Deferred.getStackHook&&(c.stackTrace=w.Deferred.getStackHook()),e.setTimeout(c))}}return w.Deferred(function(e){n[0][3].add(a(0,e,g(i)?i:I,e.notifyWith)),n[1][3].add(a(0,e,g(t)?t:I)),n[2][3].add(a(0,e,g(r)?r:W))}).promise()},promise:function(e){return null!=e?w.extend(e,i):i}},o={};return w.each(n,function(e,t){var a=t[2],s=t[5];i[t[1]]=a.add,s&&a.add(function(){r=s},n[3-e][2].disable,n[3-e][3].disable,n[0][2].lock,n[0][3].lock),a.add(t[3].fire),o[t[0]]=function(){return o[t[0]+"With"](this===o?void 0:this,arguments),this},o[t[0]+"With"]=a.fireWith}),i.promise(o),t&&t.call(o,o),o},when:function(e){var t=arguments.length,n=t,r=Array(n),i=o.call(arguments),a=w.Deferred(),s=function(e){return function(n){r[e]=this,i[e]=arguments.length>1?o.call(arguments):n,--t||a.resolveWith(r,i)}};if(t<=1&&($(e,a.done(s(n)).resolve,a.reject,!t),"pending"===a.state()||g(i[n]&&i[n].then)))return a.then();while(n--)$(i[n],s(n),a.reject);return a.promise()}});var B=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;w.Deferred.exceptionHook=function(t,n){e.console&&e.console.warn&&t&&B.test(t.name)&&e.console.warn("jQuery.Deferred exception: "+t.message,t.stack,n)},w.readyException=function(t){e.setTimeout(function(){throw t})};var F=w.Deferred();w.fn.ready=function(e){return F.then(e)["catch"](function(e){w.readyException(e)}),this},w.extend({isReady:!1,readyWait:1,ready:function(e){(!0===e?--w.readyWait:w.isReady)||(w.isReady=!0,!0!==e&&--w.readyWait>0||F.resolveWith(r,[w]))}}),w.ready.then=F.then;function _(){r.removeEventListener("DOMContentLoaded",_),e.removeEventListener("load",_),w.ready()}"complete"===r.readyState||"loading"!==r.readyState&&!r.documentElement.doScroll?e.setTimeout(w.ready):(r.addEventListener("DOMContentLoaded",_),e.addEventListener("load",_));var z=function(e,t,n,r,i,o,a){var s=0,u=e.length,l=null==n;if("object"===x(n)){i=!0;for(s in n)z(e,t,s,n[s],!0,o,a)}else if(void 0!==r&&(i=!0,g(r)||(a=!0),l&&(a?(t.call(e,r),t=null):(l=t,t=function(e,t,n){return l.call(w(e),n)})),t))for(;s1,null,!0)},removeData:function(e){return this.each(function(){K.remove(this,e)})}}),w.extend({queue:function(e,t,n){var r;if(e)return t=(t||"fx")+"queue",r=J.get(e,t),n&&(!r||Array.isArray(n)?r=J.access(e,t,w.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||"fx";var n=w.queue(e,t),r=n.length,i=n.shift(),o=w._queueHooks(e,t),a=function(){w.dequeue(e,t)};"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,a,o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return J.get(e,n)||J.access(e,n,{empty:w.Callbacks("once memory").add(function(){J.remove(e,[t+"queue",n])})})}}),w.fn.extend({queue:function(e,t){var n=2;return"string"!=typeof e&&(t=e,e="fx",n--),arguments.length\x20\t\r\n\f]+)/i,he=/^$|^module$|\/(?:java|ecma)script/i,ge={option:[1,""," "],thead:[1,""],col:[2,""],tr:[2,""],td:[3,""],_default:[0,"",""]};ge.optgroup=ge.option,ge.tbody=ge.tfoot=ge.colgroup=ge.caption=ge.thead,ge.th=ge.td;function ye(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&N(e,t)?w.merge([e],n):n}function ve(e,t){for(var n=0,r=e.length;n-1)i&&i.push(o);else if(l=w.contains(o.ownerDocument,o),a=ye(f.appendChild(o),"script"),l&&ve(a),n){c=0;while(o=a[c++])he.test(o.type||"")&&n.push(o)}return f}!function(){var e=r.createDocumentFragment().appendChild(r.createElement("div")),t=r.createElement("input");t.setAttribute("type","radio"),t.setAttribute("checked","checked"),t.setAttribute("name","t"),e.appendChild(t),h.checkClone=e.cloneNode(!0).cloneNode(!0).lastChild.checked,e.innerHTML="",h.noCloneChecked=!!e.cloneNode(!0).lastChild.defaultValue}();var be=r.documentElement,we=/^key/,Te=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Ce=/^([^.]*)(?:\.(.+)|)/;function Ee(){return!0}function ke(){return!1}function Se(){try{return r.activeElement}catch(e){}}function De(e,t,n,r,i,o){var a,s;if("object"==typeof t){"string"!=typeof n&&(r=r||n,n=void 0);for(s in t)De(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=ke;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return w().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=w.guid++)),e.each(function(){w.event.add(this,t,i,r,n)})}w.event={global:{},add:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,y=J.get(e);if(y){n.handler&&(n=(o=n).handler,i=o.selector),i&&w.find.matchesSelector(be,i),n.guid||(n.guid=w.guid++),(u=y.events)||(u=y.events={}),(a=y.handle)||(a=y.handle=function(t){return"undefined"!=typeof w&&w.event.triggered!==t.type?w.event.dispatch.apply(e,arguments):void 0}),l=(t=(t||"").match(M)||[""]).length;while(l--)d=g=(s=Ce.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=w.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=w.event.special[d]||{},c=w.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&w.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(e,r,h,a)||e.addEventListener&&e.addEventListener(d,a)),f.add&&(f.add.call(e,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),w.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,y=J.hasData(e)&&J.get(e);if(y&&(u=y.events)){l=(t=(t||"").match(M)||[""]).length;while(l--)if(s=Ce.exec(t[l])||[],d=g=s[1],h=(s[2]||"").split(".").sort(),d){f=w.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,y.handle)||w.removeEvent(e,d,y.handle),delete u[d])}else for(d in u)w.event.remove(e,d+t[l],n,r,!0);w.isEmptyObject(u)&&J.remove(e,"handle events")}},dispatch:function(e){var t=w.event.fix(e),n,r,i,o,a,s,u=new Array(arguments.length),l=(J.get(this,"events")||{})[t.type]||[],c=w.event.special[t.type]||{};for(u[0]=t,n=1;n=1))for(;l!==this;l=l.parentNode||this)if(1===l.nodeType&&("click"!==e.type||!0!==l.disabled)){for(o=[],a={},n=0;n-1:w.find(i,this,null,[l]).length),a[i]&&o.push(r);o.length&&s.push({elem:l,handlers:o})}return l=this,u\x20\t\r\n\f]*)[^>]*)\/>/gi,Ae=/
+
diff --git a/packages/site/themes/subspace/layout/partial/head.ejs b/packages/site/themes/subspace/layout/partial/head.ejs
new file mode 100644
index 0000000..9860562
--- /dev/null
+++ b/packages/site/themes/subspace/layout/partial/head.ejs
@@ -0,0 +1,29 @@
+