diff --git a/.travis.yml b/.travis.yml
index 04cb1f7..6746f7c 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -3,6 +3,3 @@ node_js:
- "10.2"
before_install:
- npm i -g npm@latest
- - curl -o- -L https://yarnpkg.com/install.sh | bash
- - export PATH="$HOME/.yarn/bin:$PATH"
- - yarn config set ignore-engines true
\ No newline at end of file
diff --git a/README.md b/README.md
index c0bfd6b..0dd82a0 100755
--- a/README.md
+++ b/README.md
@@ -53,4 +53,4 @@ We take security seriously. Please contact [security@lbry.io](mailto:security@lb
## Contact
-The primary contact for this project is [@netoperatorwibby](https://github.com/netoperatorwibby)
+The primary contact for this project is [@netoperatorwibby](https://github.com/netoperatorwibby).
diff --git a/helpers/github.js b/helpers/github.js
new file mode 100644
index 0000000..98818f1
--- /dev/null
+++ b/helpers/github.js
@@ -0,0 +1,133 @@
+"use strict";
+
+
+
+// P R O G R A M
+
+function generateEvent(event) {
+ switch (event.type) {
+ case "CommitCommentEvent":
+ return `
+ ${event.actor.display_login} commented on
+ commit in
+ `;
+
+ case "CreateEvent":
+ return `
+ ${event.actor.display_login} created
+ ${event.payload.ref_type} ${event.payload.ref}
in
+ `;
+
+ case "DeleteEvent":
+ return `
+ ${event.actor.display_login} deleted
+ ${event.payload.ref_type} ${event.payload.ref}
in
+ `;
+
+ case "ForkEvent":
+ return `
+ ${event.actor.display_login} forked
+ ${event.repo.name} to
+ ${event.payload.forkee.name} in
+ `;
+
+ case "IssueCommentEvent":
+ if (event.payload.issue.pull_request) {
+ return `
+ ${event.actor.display_login} commented on pull request
+ ${event.payload.issue.title} in
+ `;
+ } else {
+ return `
+ ${event.actor.display_login} commented on issue
+ ${event.payload.issue.title} in
+ `;
+ }
+
+ case "IssuesEvent":
+ return `
+ ${event.actor.display_login} ${event.payload.action} issue
+ ${event.payload.issue.title} in
+ `;
+
+ case "PullRequestEvent":
+ return `
+ ${event.actor.display_login} ${event.payload.action} pull request
+ ${event.payload.pull_request.title} in
+ `;
+
+ case "PullRequestReviewCommentEvent":
+ return `
+ ${event.actor.display_login} commented on pull request
+ ${event.payload.pull_request.title} in
+ `;
+
+ case "PushEvent":
+ return `
+ ${event.actor.display_login} pushed to
+ ${refToBranch(event.payload.ref)}
in
+ `;
+
+ case "ReleaseEvent":
+ return `
+ ${event.actor.display_login} released
+ ${event.payload.release.tag_name} in
+ `;
+
+ case "WatchEvent":
+ return `
+ ${event.actor.display_login} starred the repo
+ `;
+
+ default:
+ break;
+ }
+}
+
+function generateUrl(type, event) {
+ switch (type) {
+ case "actor":
+ return `https://github.com/${event.actor.display_login}`;
+
+ case "comment":
+ return event.payload.comment.html_url;
+
+ case "repo":
+ return `https://github.com/${event.repo.name}`;
+
+ case "forkee":
+ return `https://github.com/${event.payload.forkee.full_name}`;
+
+ case "issue":
+ return event.payload.issue.html_url;
+
+ case "pull_request":
+ return event.payload.pull_request.html_url;
+
+ case "release":
+ return event.payload.release.html_url;
+
+ case "push":
+ return `https://github.com/${event.repo.name}/tree/${event.payload.ref.replace("refs/heads/", "")}`;
+
+ default:
+ break;
+ }
+}
+
+
+
+// H E L P E R
+
+function refToBranch(ref) {
+ return ref.replace("refs/heads/", "");
+}
+
+
+
+// E X P O R T
+
+module.exports = exports = {
+ generateEvent,
+ generateUrl
+};
diff --git a/helpers/pa.js b/helpers/pa.js
deleted file mode 100644
index 77ad0a8..0000000
--- a/helpers/pa.js
+++ /dev/null
@@ -1,30 +0,0 @@
-"use strict";
-
-
-
-// P R O G R A M
-
-module.exports = exports = promises => { // via https://gist.github.com/peisenmann/41488a45364974705cd6
- return new Promise(resolve => {
- let retVals = Array(promises.length).fill();
- let states = Array(promises.length).fill();
-
- const f = i => res => {
- retVals[i] = res;
- states[i] = true;
-
- if (states.every(s => s)) resolve(retVals);
- };
-
- promises.forEach((p, i) => {
- Promise.resolve(p).then(f(i), f(i));
- });
- });
-};
-
-/***
- // Usage
- allComplete([p1, p2, p3, "not-a-promise"]).then(result => {
- log(result);
- });
-**/
diff --git a/package.json b/package.json
index e985d89..821185f 100755
--- a/package.json
+++ b/package.json
@@ -8,9 +8,8 @@
"@octokit/rest": "^15.9.4",
"app-root-path": "^2.1.0",
"async": "^2.6.1",
- "async-redis": "^1.1.4",
"chalk": "^2.4.1",
- "choo": "^6.12.1",
+ "choo": "^6.13.0",
"choo-async": "^0.1.1",
"choo-bundles": "^0.2.4",
"choo-data": "^0.1.1",
@@ -18,6 +17,7 @@
"choo-websocket": "^2.0.0",
"cors": "^2.8.4",
"cron": "^1.3.0",
+ "date-format-lite": "^17.7.0",
"decamelize": "^2.0.0",
"dedent": "^0.7.0",
"dotenv": "^6.0.0",
@@ -36,6 +36,7 @@
"markdown-it-sup": "^1.0.0",
"nanohtml": "^1.2.4",
"redis": "^2.8.0",
+ "relative-date": "^1.1.3",
"request-promise-native": "^1.0.5",
"slack-node": "^0.2.0",
"socket.io": "^2.1.1",
@@ -47,7 +48,7 @@
"choo-devtools": "^2.5.1",
"nodemon": "^1.18.1",
"npm-run-all": "^4.1.3",
- "sass": "^1.9.0",
+ "sass": "^1.9.1",
"snazzy": "^7.1.1",
"standardx": "^2.1.0",
"updates": "^3.2.1"
diff --git a/public/css/style.css b/public/css/style.css
index 2d763c9..1936eb7 100644
--- a/public/css/style.css
+++ b/public/css/style.css
@@ -1 +1 @@
-html{box-sizing:border-box;text-rendering:optimizeLegibility;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}*,*::before,*::after{margin:0;padding:0;box-sizing:inherit;outline:0 !important}a,area,button,[role=button],input,label,select,summary,textarea{touch-action:manipulation}a{color:currentColor;text-decoration:none}*[readonly]{cursor:not-allowed}textarea[disabled]{resize:none}textarea:not[disabled]{resize:vertical}button:not(:disabled){cursor:pointer}button:active{top:2px}button,input,select,textarea{border:none;border-radius:0;font-family:inherit;font-size:inherit;-moz-appearance:none;-webkit-appearance:none}button:focus,input:focus,select:focus,textarea:focus{outline:none}input,select,textarea{background-color:transparent}input[type=submit]{cursor:pointer}.left{float:left}.right{float:right}iframe{border:0}img{font-size:0;max-width:100%}img::after{width:100%;height:100%;top:-100%;left:0;background-color:#fcfcfc;background-image:url("../media/images/missing.png");background-size:cover;box-shadow:0 0 1px 0 rgba(34,34,34,.3);content:"";display:block;position:relative}@media print{pre,blockquote{border:1px solid #999 !important;page-break-inside:avoid !important}tr,img{page-break-inside:avoid !important}img{max-width:100% !important}@page{margin:.5cm !important}p,h2,h3{orphans:3 !important;widows:3 !important}h2,h3{page-break-after:avoid !important}thead{display:table-header-group !important}*{background:transparent !important;color:#000 !important;text-shadow:none !important;filter:none !important}p a[href]::after{content:" (" attr(href) ")" !important}p abbr[title]::after{content:" (" attr(title) ")" !important}p a[href^="javascript:"]::after,p a[href^="#"]::after{content:"" !important}p a,p abbr{word-wrap:break-word !important;text-decoration:underline !important}}input::-moz-focus-inner,button::-moz-focus-inner{display:none}input:-webkit-autofill{-webkit-box-shadow:0 0 0 1000px #fcfcfc inset !important}input:-webkit-autofill:focus{outline:none}.clear{clear:both;content:"";display:block}.hide-text{border:0;color:transparent;font:0/0 a;text-shadow:none}.__button-base,.__button-gray,.__button-white,.__button-black,.home .intro .cta,.home .docs .cta,.home .contribute .cta,.home .develop .cta,.home .community .cta,.home .features .home__feature__cta,.__button-plain,.__button-basic,.newsletter-cta__submit{border:1px solid;font-size:1rem;letter-spacing:.025rem;position:relative;transition:all .2s}.__button-plain{background-color:transparent;border-color:transparent}.__button-plain::after{width:100%;height:2px;bottom:2px;left:0;content:"";display:block;transition:background-color .2s}.__button-plain:not(:hover)::after{background-color:transparent}.__button-plain:hover::after{background-color:#222}.__button-black:not(:hover),.home .intro .cta:not(:hover),.home .docs .cta:not(:hover),.home .contribute .cta:not(:hover),.home .develop .cta:not(:hover),.home .community .cta:not(:hover),.home .features .home__feature__cta:not(:hover){background-color:#222;border-color:#fcfcfc;box-shadow:2px 2px 0 #fcfcfc;color:#fcfcfc}.__button-black:hover,.home .intro .cta:hover,.home .docs .cta:hover,.home .contribute .cta:hover,.home .develop .cta:hover,.home .community .cta:hover,.home .features .home__feature__cta:hover{background-color:#fcfcfc;border-color:#222;box-shadow:2px 2px 0 #222;color:inherit}.__button-white:not(:hover){background-color:#fcfcfc;border-color:transparent;box-shadow:2px 2px 0 #222;color:inherit}.__button-white:hover{background-color:#222;border-color:#fcfcfc;box-shadow:2px 2px 0 #fcfcfc;color:#fcfcfc}.__button-gray{background-color:#fcfcfc}.__button-gray:not(:hover){border-color:transparent;box-shadow:2px 2px 0 #222}.__button-gray:hover{border-color:#3abf7d;box-shadow:2px 2px 0 #3abf7d;color:#3abf7d}.__button-padding-vertical,.newsletter-cta__submit,.__button-black,.home .intro .cta,.home .docs .cta,.home .contribute .cta,.home .develop .cta,.home .community .cta,.home .features .home__feature__cta,.__button-white,.__button-gray{padding-top:.5rem;padding-bottom:.5rem}.__button-padding-horizontal,.newsletter-cta__input,.newsletter-cta__submit,.__button-black,.home .intro .cta,.home .docs .cta,.home .contribute .cta,.home .develop .cta,.home .community .cta,.home .features .home__feature__cta,.__button-white,.__button-gray{padding-right:1rem;padding-left:1rem}.__grid:first-of-type{cursor:default;font-size:.8rem;font-weight:600;letter-spacing:.2rem;text-transform:uppercase}.__grid:not(:first-of-type){border-left:1px solid #a3b7ad}.__grid:not(:first-of-type) .col{border-bottom-style:solid;border-bottom-width:1px}.__grid:not(:first-of-type) .col:last-of-type{border-right-style:solid;border-right-width:1px}.__grid:not(:first-of-type) .col:not(.red):not(.orange):not(.yellow):not(.green){border-color:#a3b7ad}@media(min-width: 600px){.__grid{display:table;table-layout:fixed;width:100%}.__grid .col{display:table-cell}}.col{padding:.5rem 1rem;width:100%}.col:not(:first-of-type){text-align:right}@media(min-width: 600px){.grid-padded{margin-right:-1rem;margin-left:-1rem}.grid-padded .grid{border-spacing:1rem 0}}.grid-align-middle .col{vertical-align:middle}.grid-reverse{direction:rtl}.grid-reverse .col{direction:ltr}@font-face{font-family:"Karla";font-style:normal;font-weight:400;src:local("Karla Regular"),url(//brick.freetls.fastly.net/fonts/karla/400.woff) format("woff")}@font-face{font-family:"Karla";font-style:italic;font-weight:400;src:local("Karla Italic"),url(//brick.freetls.fastly.net/fonts/karla/400i.woff) format("woff")}@font-face{font-family:"Karla";font-style:normal;font-weight:700;src:local("Karla Bold"),url(//brick.freetls.fastly.net/fonts/karla/700.woff) format("woff")}@keyframes spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.ecosystem{margin-bottom:2rem;padding-top:1rem;display:grid;font-size:1rem;grid-gap:1rem}.ecosystem:not(.expand-left):not(.expand-right){grid-template-columns:144px auto 144px}.ecosystem:not(.expand-left):not(.expand-right) .ecosystem__submodules{padding-top:2.5rem}.ecosystem.expand-left{grid-template-columns:50% auto}.ecosystem.expand-left .ecosystem__submodules:last-of-type,.ecosystem.expand-left .ecosystem__submodule:not(.active){display:none}.ecosystem.expand-right{grid-template-columns:auto 50%}.ecosystem.expand-right .ecosystem__submodules:first-of-type,.ecosystem.expand-right .ecosystem__submodule:not(.active){display:none}.ecosystem__module{position:relative;width:100%}.ecosystem__module > *{z-index:1}.ecosystem__module h2{position:relative;width:100%}.ecosystem__module h2 > div{float:right;font-size:1rem;padding-top:1.95rem;padding-right:3rem;position:relative;text-align:right}.ecosystem__module h2 > div::before{font-family:Georgia,serif;top:.9rem;right:3rem;content:"explore";font-size:80%;font-style:italic;opacity:.3;position:absolute;text-align:right;width:100%}.ecosystem__module h2 > div span{cursor:pointer;display:inline-block;position:relative}.ecosystem__module h2 > div span:not(:last-of-type){margin-right:1rem}.ecosystem__module h2 > div span:not(:last-of-type)::after{top:0;right:-0.7rem;color:rgba(163,183,173,.3);content:"/";font-style:italic;position:absolute}.ecosystem__module h3{position:relative}.ecosystem__module::before{width:100%;height:100%;top:0;left:0;content:"";position:absolute;z-index:0}.ecosystem__module:not(.active){align-items:center;display:inline-flex;justify-content:center}.ecosystem__module:not(.active) h2{font-size:1.5rem;text-align:center}.ecosystem__module:not(.active) h2 > span{cursor:pointer;display:block;padding:1.9rem 2rem}.ecosystem__module:not(.active) h2 > span em{display:block;font-size:70%;font-weight:normal}.ecosystem__module:not(.active) h2 > div{display:none}.ecosystem__module:not(.active) .ecosystem__module__details{display:none}.ecosystem__module:not(.active) .__close{top:2rem;transform:rotate(45deg);z-index:0}.ecosystem__module.active{padding:1.9rem 2rem}.ecosystem__module.active h2{font-size:3rem;margin-bottom:1rem}.ecosystem__module.active h2 > span{cursor:default}.ecosystem__module.active h2 > span em{display:none}.ecosystem__module.active::before{background-color:#fcfcfc}.ecosystem__module.active .__close{top:2.35rem;z-index:3}.ecosystem__module.lbrycrd,.ecosystem__module.lbry{margin-bottom:1rem}.ecosystem__module.lbry:not(.active) h2,.ecosystem__module.applications:not(.active) h2{margin-bottom:.5rem}.ecosystem__module.lbry:not(.active) h2::after,.ecosystem__module.applications:not(.active) h2::after{bottom:1rem;left:0;font-size:.5rem;letter-spacing:.1rem;position:absolute;width:100%;z-index:-1}.ecosystem__module.lbrycrd:not(.active)::before{background-color:#db3e3e}.ecosystem__module.lbrycrd.active::before{border:2px solid #db3e3e}.ecosystem__module.lbry:not(.active)::before{background-color:#3e8cdb}.ecosystem__module.lbry:not(.active) h2::after{content:"◼︎◼︎"}.ecosystem__module.lbry.active::before{border:2px solid #3e8cdb}.ecosystem__module.applications:not(.active)::before{background-color:#3edb3e}.ecosystem__module.applications:not(.active) h2::after{content:"◼︎◼︎◼︎◼︎◼︎"}.ecosystem__module.applications.active::before{border:2px solid #3edb3e}.ecosystem__module__piece{background-color:#fcfcfc;left:10%;line-height:2;position:relative;width:80%}.ecosystem__module__piece:not(:last-of-type){margin-bottom:.5rem}.ecosystem__submodule{border-width:2px;cursor:default;position:relative;transition:border-color .2s;z-index:2}.ecosystem__submodule:not(:last-of-type){margin-bottom:1rem}.ecosystem__submodule:not(.on):not(.active){color:transparent}.ecosystem__submodule:not(.active){align-items:center;display:inline-flex;justify-content:center;width:144px;height:144px;border-radius:50%;border-style:dashed}.ecosystem__submodule:not(.active) .ecosystem__submodule__title{width:100%;height:100%;line-height:140px;text-align:center}.ecosystem__submodule:not(.active) .ecosystem__submodule__description{display:none}.ecosystem__submodule.active{width:100%;height:100%;max-height:378px;border-style:solid;overflow-y:auto;padding:2rem}.ecosystem__submodule.active .ecosystem__submodule__title{line-height:1.33;margin-bottom:1rem}.ecosystem__submodule:not(.blue):not(.green):not(.red){border-color:rgba(163,183,173,.3)}.ecosystem__submodule.blue:not(.active),.ecosystem__submodule.green:not(.active),.ecosystem__submodule.red:not(.active){cursor:pointer}.ecosystem__submodule.blue{background-color:rgba(62,140,219,.025);border-color:#3e8cdb}.ecosystem__submodule.green{background-color:rgba(62,219,62,.025);border-color:#3edb3e}.ecosystem__submodule.red{background-color:rgba(219,62,62,.025);border-color:#db3e3e}.ecosystem__submodule__title{font-size:1.15rem}.ecosystem__submodule__description{margin-bottom:2rem}.ecosystem__submodule__description .__close{top:-0.7rem;right:-2rem}.ecosystem__submodule__description__title{color:rgba(34,34,34,.3);letter-spacing:.1rem;text-transform:uppercase}.__parents{top:2rem;right:4rem;font-size:1.15rem;line-height:1.33;list-style-type:none;padding-right:1rem;position:absolute;z-index:1}.__parents::before,.__parents::after{position:absolute}.__parents::before{font-family:Georgia,serif;top:.3rem;left:-3.4rem;color:rgba(34,34,34,.3);content:"back to";font-size:.8rem;font-style:italic;font-weight:700}.__parents::after{width:2px;height:100%;top:0;right:0;background-color:rgba(34,34,34,.3);content:""}.__parent{font-weight:700}.__parent:not(.active){display:none}.__parent.active{cursor:pointer}.__close{cursor:pointer;font-size:2rem;position:absolute;right:2rem;transition:all .2s}.newsletter-cta{background-color:rgba(34,34,34,.2);padding-top:1rem;padding-bottom:1rem;text-align:center}.newsletter-cta > div:first-of-type{margin-right:auto;margin-left:auto}@media(min-width: 551px){.newsletter-cta > div:first-of-type{width:500px}}@media(max-width: 550px){.newsletter-cta > div:first-of-type{width:90%}}.newsletter-cta::after{clear:both;content:"";display:block}.newsletter-cta__title{font-size:.8rem;letter-spacing:.05rem;margin-bottom:.75rem;text-transform:uppercase}.newsletter-cta__input,.newsletter-cta__submit{border-style:solid;border-width:1px}@media(max-width: 550px){.newsletter-cta__input,.newsletter-cta__submit{width:100%}}.newsletter-cta__input{background-color:#fcfcfc;font-size:1rem;height:38px;transition:border .2s}@media(min-width: 551px){.newsletter-cta__input{float:left;width:calc(100% - 112px)}}@media(max-width: 550px){.newsletter-cta__input{text-align:center}}.newsletter-cta__input:not(:focus){border-top-color:#222;border-left-color:#222}@media(min-width: 551px){.newsletter-cta__input:not(:focus){border-bottom-color:#222;border-right-color:transparent}}@media(max-width: 550px){.newsletter-cta__input:not(:focus){border-bottom-color:transparent;border-right-color:#222}}.newsletter-cta__input:focus{border-top-color:#35a06b;border-left-color:#35a06b}@media(min-width: 551px){.newsletter-cta__input:focus{border-bottom-color:#35a06b;border-right-color:transparent}}@media(max-width: 550px){.newsletter-cta__input:focus{border-bottom-color:transparent;border-right-color:#35a06b}}.newsletter-cta__submit{color:#fcfcfc}@media(min-width: 551px){.newsletter-cta__submit{width:112px;height:38px;float:right;left:-1px}}@media(max-width: 550px){.newsletter-cta__submit{display:block;top:-1px}}.newsletter-cta__submit:not(:hover){background-color:#222;border-color:#222}.newsletter-cta__submit:hover{background-color:#3abf7d;border-color:#35a06b}.newsletter-cta__message{clear:both;content:"";display:block;color:#db3e3e;padding-top:1rem}.github-feed{border-bottom:1px solid rgba(34,34,34,.05);border-left:1px solid rgba(34,34,34,.05);font-size:.8rem;grid-area:github;position:relative}@media(min-width: 1301px){.github-feed{padding-top:3.7rem}}@media(min-width: 1001px)and (max-width: 1300px){.github-feed{padding-top:2.95rem}}@media(min-width: 1001px){.github-feed{padding-bottom:2rem;padding-right:10%;padding-left:2rem}}@media(max-width: 1000px){.github-feed{padding-top:2rem;padding-bottom:2rem}}@media(min-width: 901px){.github-feed{padding-right:1rem;padding-left:1rem}}@media(max-width: 900px){.github-feed{padding-right:2rem;padding-left:2rem}}@media(max-width: 700px){.github-feed{overflow-x:auto;overflow-y:hidden;white-space:nowrap}}@media(min-width: 1001px){.github-feed h3,.github-feed h5{text-align:center}}.github-feed h3{letter-spacing:.1rem;line-height:1;text-transform:uppercase;width:100%}@media(min-width: 1301px){.github-feed h3{top:2.15rem;left:0;color:rgba(34,34,34,.045);font-size:4rem;position:absolute}}@media(max-width: 1300px){.github-feed h3{color:#222}}@media(min-width: 901px)and (max-width: 1300px){.github-feed h3{font-size:3rem}}@media(max-width: 900px){.github-feed h3{font-size:2rem;margin-bottom:1rem}}.github-feed h5{font-style:italic;font-weight:normal}@media(min-width: 1001px){.github-feed h5{margin-bottom:3rem}}@media(min-width: 901px)and (max-width: 1000px){.github-feed h5{margin-bottom:2rem}}@media(max-width: 900px){.github-feed h5{margin-bottom:.5rem;position:relative;top:-1rem}}.github-feed__event{line-height:1.55}@media(max-width: 700px){.github-feed__event{display:inline-block;margin-right:1.25rem;vertical-align:top;width:200px}}@media(min-width: 701px){.github-feed__event:not(:last-of-type){margin-bottom:1.25rem}}.github-feed__event > a:first-of-type{font-weight:700;margin-bottom:.5rem;width:100%}@media(max-width: 700px){.github-feed__event > p:first-of-type{box-shadow:0 2px 5px rgba(34,34,34,.025)}}.github-feed__event > p:first-of-type code{background-color:#222;border-radius:3px;color:#fcfcfc;font-size:80%;letter-spacing:.05rem;padding:.2rem .5rem;position:relative;top:-1px}.github-feed__event > p:first-of-type em:not(.github-feed__event__time){text-decoration:underline}@media(min-width: 701px){.github-feed__event > p:first-of-type{display:inline-block;margin-left:.5rem;vertical-align:top;width:calc(100% - 4.5rem)}}@media(max-width: 700px){.github-feed__event > p:first-of-type{top:-3.5rem;left:5%;background-color:#fcfcfc;border:1px solid rgba(163,183,173,.1);border-radius:3px;padding:1rem;position:relative;white-space:normal;width:90%}}.github-feed__event__avatar{border:1px solid rgba(163,183,173,.1);border-radius:3px;object-position:center;object-fit:cover}@media(min-width: 701px){.github-feed__event__avatar{width:2.5rem;height:2.5rem}}@media(max-width: 700px){.github-feed__event__avatar{width:100%;height:100%}}.github-feed__event__time{color:#a3b7ad;display:block}@media(max-width: 700px){.github-feed__event__time{padding-top:1rem}}.navigation{top:0;left:0;background-color:#fcfcfc;box-shadow:0 1px 5px rgba(34,34,34,.1);padding-right:env(safe-area-inset-right);padding-left:env(safe-area-inset-left);position:fixed;width:100%;z-index:10}.navigation > div:first-of-type{position:relative}@media(min-width: 701px){.navigation > div:first-of-type{align-items:stretch;display:flex;flex-flow:row wrap}}@media(max-width: 700px){.navigation > div:first-of-type{overflow:auto;overflow-scrolling:touch;white-space:nowrap;width:100%}.navigation > div:first-of-type::before{width:2rem;height:4rem;top:0;right:0;background-image:linear-gradient(90deg, rgba(252, 252, 252, 0), #fcfcfc 50%, #fcfcfc);content:"";position:fixed;z-index:2}}.navigation__item{overflow:hidden;padding-right:.5rem;padding-left:.5rem;position:relative}@media(max-width: 700px){.navigation__item{display:inline-block;transform:translate3d(0, 0, 0);transition:opacity .2s .2s ease,transform .4s .2s cubic-bezier(0.215, 0.61, 0.355, 1);vertical-align:top}.navigation__item:last-of-type{margin-right:3rem}}.navigation__item:first-of-type{border:0;color:transparent;font:0/0 a;text-shadow:none;width:10rem;height:3rem;background-image:url("../media/svg/logo.svg");background-repeat:no-repeat;background-size:contain;flex:1;top:.5rem}.navigation__item:not(:first-of-type){color:inherit;font-size:1rem;line-height:4rem}.navigation__item:not(:first-of-type)::after{width:100%;height:3px;background-color:#3abf7d;content:"";left:0;position:absolute;transition:bottom .2s}.navigation__item:not(:first-of-type):not(:hover)::after{bottom:-3px}.navigation__item:not(:first-of-type):hover::after,.navigation__item:not(:first-of-type).active::after{bottom:0}.component--mission-statement{margin-bottom:1.5rem;padding:1rem 1rem 1rem 1.25rem;background-color:rgba(58,191,125,.1);border-left:.5rem solid #3abf7d;line-height:1.55;position:relative}@media(min-width: 901px){.component--mission-statement{font-size:1.25rem}}@media(max-width: 900px){.component--mission-statement{font-size:1.05rem}}.component--mission-statement__title{color:#3abf7d;display:block;letter-spacing:.025rem;text-transform:uppercase}.modal{align-items:center;display:inline-flex;justify-content:center;top:0;left:0;bottom:0;right:0;background-color:rgba(34,34,34,.5);position:fixed;z-index:10}@media(min-width: 901px){.modal h3{font-size:1.5rem;margin-bottom:.25rem}}@media(max-width: 900px){.modal h3{font-size:1.25rem}}.modal p{margin-bottom:1rem}@media(min-width: 901px){.modal p{font-size:1.15rem;line-height:1.33}}@media(max-width: 900px){.modal p{font-size:1.05rem;line-height:1.55}}.modal p a{color:#3abf7d}.modal-wrap{background-color:#fcfcfc;padding:2rem 1.5rem}@media(min-width: 501px){.modal-wrap{width:500px}}@media(max-width: 500px){.modal-wrap{width:100%}}.footer{background-color:#222;color:rgba(252,252,252,.15);font-size:1rem;padding-right:env(safe-area-inset-right);padding-left:env(safe-area-inset-left);position:relative}@media(max-width: 980px){.footer::before{width:3rem;height:100%;bottom:0;right:0;background-image:linear-gradient(90deg, rgba(34, 34, 34, 0), #222 50%, #222);content:"";position:absolute;z-index:2}}@media(max-width: 980px){.footer > div:first-of-type{overflow:auto;overflow-scrolling:touch;white-space:nowrap;width:100%}}.footer ul{list-style-type:none;padding-top:2rem;padding-bottom:2rem}@media(min-width: 981px){.footer ul{align-items:stretch;display:flex;flex-flow:row wrap}}.footer ul li{padding-right:.5rem;padding-left:.5rem;vertical-align:bottom}@media(max-width: 980px){.footer ul li{display:inline-block;transform:translate3d(0, 0, 0);transition:opacity .2s .2s ease,transform .4s .2s cubic-bezier(0.215, 0.61, 0.355, 1)}.footer ul li:last-of-type{margin-right:3rem}}.footer ul li:first-of-type{flex:1}.footer a{transition:color .2s}.footer a:not(:hover){color:#fcfcfc}.footer a:hover{color:#3abf7d}html,body{width:100%;height:100%}html{background-color:#fcfcfc}body{font-family:Karla,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";color:#222;font-size:12px;min-width:320px;overflow-x:hidden;position:relative;z-index:0}main{display:flex;flex-direction:column;min-height:100vh;padding-top:4rem}main:not(.home) > div:first-of-type{flex:1}@media(min-width: 1001px){main.home > div:first-of-type{display:grid;grid-gap:0;grid-template-areas:"header header header" "features features features" "intro intro github" "docs docs github" "contribute contribute contribute" "develop develop develop" "community community community"}}.inner-wrap{margin-right:auto;margin-left:auto;max-width:1200px}@media(min-width: 901px){.inner-wrap{padding-right:1rem;padding-left:1rem}}@media(max-width: 900px){.inner-wrap{padding-right:2rem;padding-left:2rem}}.inner-wrap::after{clear:both;content:"";display:block}h1 .header-anchor,h2 .header-anchor,h3 .header-anchor,h4 .header-anchor,h5 .header-anchor{display:none}.alert{bottom:0;left:0;background-color:#dbdb3e;line-height:1.33;padding-top:1rem;padding-right:env(safe-area-inset-right);padding-bottom:1rem;padding-left:env(safe-area-inset-left);position:fixed;text-align:left;width:100%;z-index:3}.alert > div:first-of-type{position:relative}@media(min-width: 901px){.alert{font-size:1rem}}@media(max-width: 900px){.alert{font-size:.8rem}}.alert p,.alert button{display:inline-block}.alert p{padding-right:1rem;width:calc(100% - 2.25rem)}.alert a{font-weight:600;text-decoration:underline}.alert button{width:1.25rem;height:1.25rem;top:0;right:0;background-color:#fcfcfc;border-radius:50%;display:block;font-size:1rem;line-height:1;margin-right:1rem;margin-left:1rem;position:absolute;text-align:center}.home{padding-right:env(safe-area-inset-right);padding-left:env(safe-area-inset-left)}.home h2{font-weight:normal;margin-bottom:4rem;text-align:center}@media(min-width: 851px){.home h2{font-size:1.75rem}}@media(max-width: 850px){.home h2{font-size:1.25rem}}.home hr{width:100%;height:1px;background-color:rgba(34,34,34,.1);border:none;margin-bottom:4rem}.home .hero{align-items:center;background-color:#222;background-image:url("../media/svg/text-logo--white.svg");background-position:center;background-repeat:no-repeat;display:flex;grid-area:header;height:calc(50vh - 4rem);min-height:300px;justify-content:center}@media(max-width: 850px){.home .hero{background-size:cover}}.home .hero h1{background-color:#fcfcfc;border:1px solid rgba(34,34,34,.1);box-decoration-break:clone;display:inline;font-weight:normal;line-height:2;padding:.4rem 1rem}@media(min-width: 851px){.home .hero h1{font-size:1.75rem}}@media(max-width: 850px){.home .hero h1{font-size:1.25rem}}.home .features{grid-area:features}.home .features .home__features{align-content:center;border-bottom:1px solid rgba(34,34,34,.05);display:flex;flex-flow:row wrap;list-style-type:none;padding-top:2rem;padding-bottom:2rem}.home .features .home__feature{position:relative;text-align:center;vertical-align:top}@media(min-width: 651px){.home .features .home__feature{width:50%}}@media(max-width: 650px){.home .features .home__feature{width:100%}.home .features .home__feature:first-of-type{padding-bottom:1rem}.home .features .home__feature:last-of-type{padding-top:1rem}}.home .features .home__feature__title{font-size:2rem;margin-bottom:.5rem}.home .features .home__feature__description{font-size:1rem;left:10%;margin-bottom:1rem;position:relative;width:80%}.home .features .home__feature__cta{display:inline-block;font-size:1rem;position:relative}.home .intro,.home .docs,.home .contribute,.home .develop,.home .community{padding-top:3rem;padding-bottom:3.5rem}.home .intro .inner-wrap,.home .docs .inner-wrap,.home .contribute .inner-wrap,.home .develop .inner-wrap,.home .community .inner-wrap{position:relative}.home .intro h3,.home .docs h3,.home .contribute h3,.home .develop h3,.home .community h3{letter-spacing:.1rem;line-height:1;text-transform:uppercase}@media(min-width: 1301px){.home .intro h3,.home .docs h3,.home .contribute h3,.home .develop h3,.home .community h3{top:-0.85rem;left:-2rem;color:rgba(34,34,34,.045);font-size:4rem;position:absolute}}@media(max-width: 1300px){.home .intro h3,.home .docs h3,.home .contribute h3,.home .develop h3,.home .community h3{color:#222}}@media(min-width: 901px)and (max-width: 1300px){.home .intro h3,.home .docs h3,.home .contribute h3,.home .develop h3,.home .community h3{font-size:3rem}}@media(max-width: 900px){.home .intro h3,.home .docs h3,.home .contribute h3,.home .develop h3,.home .community h3{font-size:2rem;margin-bottom:1rem}}.home .intro p,.home .docs p,.home .contribute p,.home .develop p,.home .community p{margin-bottom:1.5rem;max-width:1000px}@media(min-width: 901px){.home .intro p,.home .docs p,.home .contribute p,.home .develop p,.home .community p{font-size:1.5rem;line-height:1.55}}@media(max-width: 900px){.home .intro p,.home .docs p,.home .contribute p,.home .develop p,.home .community p{font-size:1.25rem;line-height:1.33}}.home .intro p:first-of-type,.home .docs p:first-of-type,.home .contribute p:first-of-type,.home .develop p:first-of-type,.home .community p:first-of-type{padding-top:.5rem}.home .intro .cta,.home .docs .cta,.home .contribute .cta,.home .develop .cta,.home .community .cta{top:.5rem}.home .intro,.home .docs,.home .contribute,.home .develop{border-bottom:1px solid rgba(34,34,34,.05)}@media(min-width: 1301px){.home .intro,.home .docs{padding-left:10%}}.home .intro{grid-area:intro}.home .docs{grid-area:docs}@media(min-width: 1301px){.home .community p,.home .contribute p{margin-right:auto;margin-left:auto;text-align:center}}.home .community ul,.home .contribute ul{list-style-type:none;padding-top:1rem}.home .community ul::after,.home .contribute ul::after{clear:both;content:"";display:block}@media(min-width: 901px){.home .community ul,.home .contribute ul{font-size:1.5rem}}@media(min-width: 751px)and (max-width: 900px){.home .community ul,.home .contribute ul{font-size:1.25rem}}@media(max-width: 750px){.home .community ul,.home .contribute ul{font-size:1rem}}.home .community ul li,.home .contribute ul li{float:left;position:relative;text-align:center}@media(max-width: 750px){.home .community ul li,.home .contribute ul li{margin-bottom:2rem;min-width:8rem}}.home .community ul li a,.home .contribute ul li a{display:block;position:relative;padding-top:4rem;transition:color .2s}.home .community ul li a::before,.home .contribute ul li a::before{width:100%;height:100%;background-position:center 0;background-repeat:no-repeat;content:"";left:0;position:absolute}.home .community ul li a:not(:hover),.home .contribute ul li a:not(:hover){color:inherit}.home .community ul li a:hover,.home .contribute ul li a:hover{color:#3abf7d}.home .contribute{grid-area:contribute}@media(min-width: 701px){.home .contribute ul li{width:calc(100% / 5)}}@media(max-width: 700px){.home .contribute ul li{width:50%}}@media(min-width: 901px){.home .contribute ul li a::before{background-size:4rem;top:-1rem}}@media(max-width: 900px){.home .contribute ul li a::before{background-size:3rem;top:0}}.home .contribute ul li:nth-child(1) a::before{background-image:url("../media/svg/flag.svg")}.home .contribute ul li:nth-child(2) a::before{background-image:url("../media/svg/keyboard.svg")}.home .contribute ul li:nth-child(3) a::before{background-image:url("../media/svg/anchor.svg")}.home .contribute ul li:nth-child(4) a::before{background-image:url("../media/svg/chat.svg")}.home .contribute ul li:nth-child(5) a::before{background-image:url("../media/svg/monitor.svg")}.home .develop{grid-area:develop}.home .community{grid-area:community}@media(min-width: 701px){.home .community ul li{width:50%}}@media(max-width: 700px){.home .community ul li{width:50%}}@media(min-width: 901px){.home .community ul li a::before{background-size:6rem;top:-2rem}}@media(max-width: 900px){.home .community ul li a::before{background-size:4rem;top:-0.5rem}}.home .community ul li:nth-child(1) a::before{background-image:url("../media/svg/discord.svg")}.home .community ul li:nth-child(2) a::before{background-image:url("../media/svg/reddit.svg")}.home .community ul li:nth-child(3) a::before{background-image:url("../media/svg/slack.svg")}.contributing table th:first-of-type{width:30%}.contributing table th:nth-of-type(2){width:20%}.documentation ol + h1,.documentation ul + h1{padding-top:2rem}.documentation h4 + h2{padding-top:2rem}.documentation .blog-posts{list-style-type:none}.documentation .blog-post{position:relative}.documentation .blog-post::before{background-color:#222;border-radius:50%;content:"";line-height:0;position:absolute}@media(min-width: 901px){.documentation .blog-post::before{width:7px;height:7px;top:14px;left:-1.05rem}}@media(max-width: 900px){.documentation .blog-post::before{width:6px;height:6px;top:11px;left:-0.95rem}}.documentation .blog-post__title{line-height:1.33}.documentation .blog-post__title::after{content:"";display:block}.documentation .blog-post__meta{font-size:80%;line-height:1;margin-bottom:1rem}.documentation .blog-post__meta__author::before{content:"by"}@media(min-width: 901px){.documentation .blog-post__meta__author::before{left:-1.2rem}}@media(max-width: 900px){.documentation .blog-post__meta__author::before{left:-1rem}}@media(min-width: 901px){.documentation .blog-post__meta__date{margin-right:1.4rem;margin-left:3.1rem}}@media(max-width: 900px){.documentation .blog-post__meta__date{margin-right:1.2rem;margin-left:2.6rem}}.documentation .blog-post__meta__date::before{content:"posted"}@media(min-width: 901px){.documentation .blog-post__meta__date::before{left:-3.1rem}}@media(max-width: 900px){.documentation .blog-post__meta__date::before{left:-2.6rem}}.documentation .blog-post__meta__author,.documentation .blog-post__meta__date{display:inline-block;position:relative}.documentation .blog-post__meta__author::before,.documentation .blog-post__meta__date::before{color:rgba(34,34,34,.5);font-style:italic;position:absolute;vertical-align:bottom}.page{display:flex;flex-direction:column;height:100%}.page__header-wrap{width:100%}.page__header{align-items:center;display:inline-flex;justify-content:center;background-position:center;background-repeat:no-repeat;background-size:cover;color:#fcfcfc;padding-right:env(safe-area-inset-right);padding-left:env(safe-area-inset-left);position:relative;width:100%}.page__header__title{font-weight:300;text-shadow:1px 1px 2px rgba(34,34,34,.3)}@media(min-width: 901px){.page__header__title{font-size:3rem;line-height:6.5rem}}@media(max-width: 900px){.page__header__title{font-size:2rem;line-height:1;padding-top:1rem;padding-bottom:1rem}}.page__content{background-repeat:repeat;background-size:32px;flex:1;padding-top:2rem;padding-bottom:2rem;padding-right:env(safe-area-inset-right);padding-left:env(safe-area-inset-left)}.page__content h1{margin-bottom:.25rem}@media(min-width: 901px){.page__content h1{font-size:3rem}}@media(max-width: 900px){.page__content h1{font-size:2rem}}.page__content h1 + h2{margin-bottom:2rem}@media(min-width: 901px){.page__content h2:not(.__title){font-size:2rem}}@media(max-width: 900px){.page__content h2:not(.__title){font-size:1.5rem}}.page__content h2:not(.__title) + h3{margin-bottom:1rem;padding-top:.25rem}@media(min-width: 901px){.page__content h3:not(.ecosystem__submodule__title){font-size:1.5rem}}@media(max-width: 900px){.page__content h3:not(.ecosystem__submodule__title){font-size:1.25rem}}.page__content h3:not(.ecosystem__submodule__title) + table{top:.25rem}.page__content h4:not(.ecosystem__submodule__description__title){letter-spacing:.05rem;text-transform:uppercase}@media(min-width: 901px){.page__content h4:not(.ecosystem__submodule__description__title){font-size:1.25rem}}@media(max-width: 900px){.page__content h4:not(.ecosystem__submodule__description__title){font-size:1.15rem}}.page__content h5{font-size:1rem}.page__content sup{font-family:"Courier New",monospace}.page__content blockquote{left:2px;line-height:1.5;margin-bottom:.5rem;position:relative}@media(min-width: 601px){.page__content blockquote{margin-left:15%;padding:.5rem 0 .05rem 2rem;font-size:1.5rem;width:70%}}@media(max-width: 600px){.page__content blockquote{font-size:1.25rem;padding:.5rem 0 .05rem 0}}@media(min-width: 376px)and (max-width: 600px){.page__content blockquote{margin-left:5%;width:90%}}.page__content blockquote p{font-size:inherit;line-height:inherit}.page__content blockquote::before{font-family:Georgia,serif;width:150px;height:100px;top:3rem;left:-2rem;color:rgba(58,191,125,.2);content:"“";font-size:20rem;line-height:.5;position:absolute}.page__content p code,.page__content ol code,.page__content ul:not(.overview__ecosystem__module) code,.page__content table code{background-color:#222;border-radius:3px;color:#fcfcfc;font-size:60%;letter-spacing:.05rem;padding:.3rem .5rem;vertical-align:middle}@media(max-width: 900px){.page__content p code,.page__content ol code,.page__content ul:not(.overview__ecosystem__module) code,.page__content table code{position:relative;top:-1px}}.page__content p,.page__content ol,.page__content ul:not(.feature-links):not(.overview__ecosystem__module):not(.__parents){margin-bottom:1rem;position:relative}@media(min-width: 901px){.page__content p,.page__content ol,.page__content ul:not(.feature-links):not(.overview__ecosystem__module):not(.__parents){font-size:1.25rem;line-height:1.6}}@media(max-width: 900px){.page__content p,.page__content ol,.page__content ul:not(.feature-links):not(.overview__ecosystem__module):not(.__parents){font-size:1.05rem;line-height:1.55}}.page__content ol,.page__content ul:not(.feature-links):not(.overview__ecosystem__module):not(.__parents){padding-top:.5rem}.page__content ol li:not(:last-of-type),.page__content ul:not(.feature-links):not(.overview__ecosystem__module):not(.__parents) li:not(:last-of-type){margin-bottom:.25rem}.page__content ol + h2,.page__content ol + h3,.page__content ol + h4,.page__content ol + h5,.page__content ul:not(.feature-links):not(.overview__ecosystem__module):not(.__parents) + h2,.page__content ul:not(.feature-links):not(.overview__ecosystem__module):not(.__parents) + h3,.page__content ul:not(.feature-links):not(.overview__ecosystem__module):not(.__parents) + h4,.page__content ul:not(.feature-links):not(.overview__ecosystem__module):not(.__parents) + h5{padding-top:2rem}.page__content ol{list-style-type:lower-roman;padding-left:1.6rem}.page__content ul:not(.feature-links):not(.overview__ecosystem__module):not(.__parents){padding-left:1.25rem}.page__content p img{float:right}.page__content a:not(.__button-black):not(.button):not(.feature-link__title):not(.header-anchor):not(.newsletter-standalone__submit){background-image:linear-gradient(#fcfcfc, #fcfcfc),linear-gradient(#fcfcfc, #fcfcfc),linear-gradient(#3abf7d, #3abf7d);background-position:0 88%,100% 88%,0 88%;background-repeat:no-repeat,no-repeat,repeat-x;background-size:.05rem 1px,.05rem 1px,1px 1px;box-decoration-break:clone;display:inline;text-decoration:none;text-shadow:.03rem 0 #fcfcfc,-0.03rem 0 #fcfcfc,0 .03rem #fcfcfc,0 -0.03rem #fcfcfc,.06rem 0 #fcfcfc,-0.06rem 0 #fcfcfc,.09rem 0 #fcfcfc,-0.09rem 0 #fcfcfc,.12rem 0 #fcfcfc,-0.12rem 0 #fcfcfc,.15rem 0 #fcfcfc,-0.15rem 0 #fcfcfc;color:#3abf7d}.page__content a:not(.__button-black):not(.button):not(.feature-link__title):not(.header-anchor):not(.newsletter-standalone__submit)::selection{background-color:#3abf7d;color:#fcfcfc;text-shadow:none}.page__content a:not(.__button-black):not(.button):not(.feature-link__title):not(.header-anchor):not(.newsletter-standalone__submit)::-moz-selection{background-color:#3abf7d;color:#fcfcfc;text-shadow:none}@-moz-document url-prefix(){.page__content a:not(.__button-black):not(.button):not(.feature-link__title):not(.header-anchor):not(.newsletter-standalone__submit){background-position:0 90%,100% 90%,0 90%}}.page__content pre{margin-bottom:2rem;padding:2rem;border-radius:3px;font-size:1rem;line-height:1.33;overflow-x:auto;overflow-y:hidden}.page__content pre:not([class]),.page__content pre.language-text{background-color:#222;color:#fcfcfc}.page__content pre.language-yaml{background-color:#27273f;color:#ffe066}.page__content pre.language-yaml .atrule{color:#f083ac}.page__content pre.language-yaml .important{color:#ffa94d}.page__content pre.language-yaml .punctuation{color:#fcfcfc}.page__content table{background-color:#fcfcfc;border:1px solid rgba(163,183,173,.3);border-spacing:0;margin-bottom:2rem;position:relative;width:100%}@media(max-width: 1030px){.page__content table{display:inline-grid}.page__content table thead{display:none}.page__content table tbody,.page__content table tr,.page__content table td{display:block}.page__content table tbody tr:last-of-type td:not(:last-of-type){border-bottom:1px solid rgba(163,183,173,.3)}}.page__content table thead{background-color:#222;color:#fcfcfc;cursor:default;position:relative}.page__content table thead tr{position:relative;z-index:1}.page__content table thead:not(*:root)::after{z-index:-1}.page__content table thead::after{width:calc(100% + 2px);height:calc(100% + 2px);top:-1px;left:-1px;background-color:#222;content:"";position:absolute;z-index:0}.page__content table tbody{line-height:1.55}.page__content table tr:nth-of-type(even){background-color:rgba(34,34,34,.025)}.page__content table th,.page__content table td{padding:.5rem 1rem}.page__content table th{font-size:.8rem;letter-spacing:.1rem;text-transform:uppercase}.page__content table tbody tr:not(:last-of-type) td{border-bottom:1px solid rgba(163,183,173,.3)}.page__content table td{font-size:1rem}.page__header{background-image:url("../media/images/background-a.jpg")}.page__content{background-image:url("../media/images/grid.png")}/*# sourceMappingURL=style.css.map */
+html{box-sizing:border-box;text-rendering:optimizeLegibility;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}*,*::before,*::after{margin:0;padding:0;box-sizing:inherit;outline:0 !important}a,area,button,[role=button],input,label,select,summary,textarea{touch-action:manipulation}a{color:currentColor;text-decoration:none}*[readonly]{cursor:not-allowed}textarea[disabled]{resize:none}textarea:not[disabled]{resize:vertical}button:not(:disabled){cursor:pointer}button:active{top:2px}button,input,select,textarea{border:none;border-radius:0;font-family:inherit;font-size:inherit;-moz-appearance:none;-webkit-appearance:none}button:focus,input:focus,select:focus,textarea:focus{outline:none}input,select,textarea{background-color:transparent}input[type=submit]{cursor:pointer}.left{float:left}.right{float:right}iframe{border:0}img{font-size:0;max-width:100%}img::after{width:100%;height:100%;top:-100%;left:0;background-color:#fcfcfc;background-image:url("../media/images/missing.png");background-size:cover;box-shadow:0 0 1px 0 rgba(34,34,34,.3);content:"";display:block;position:relative}@media print{pre,blockquote{border:1px solid #999 !important;page-break-inside:avoid !important}tr,img{page-break-inside:avoid !important}img{max-width:100% !important}@page{margin:.5cm !important}p,h2,h3{orphans:3 !important;widows:3 !important}h2,h3{page-break-after:avoid !important}thead{display:table-header-group !important}*{background:transparent !important;color:#000 !important;text-shadow:none !important;filter:none !important}p a[href]::after{content:" (" attr(href) ")" !important}p abbr[title]::after{content:" (" attr(title) ")" !important}p a[href^="javascript:"]::after,p a[href^="#"]::after{content:"" !important}p a,p abbr{word-wrap:break-word !important;text-decoration:underline !important}}input::-moz-focus-inner,button::-moz-focus-inner{display:none}input:-webkit-autofill{-webkit-box-shadow:0 0 0 1000px #fcfcfc inset !important}input:-webkit-autofill:focus{outline:none}.clear{clear:both;content:"";display:block}.hide-text{border:0;color:transparent;font:0/0 a;text-shadow:none}.__button-base,.__button-gray,.__button-white,.__button-black,.home .intro .cta,.home .docs .cta,.home .contribute .cta,.home .develop .cta,.home .community .cta,.home .features .home__feature__cta,.__button-plain,.__button-basic,.newsletter-cta__submit{border:1px solid;font-size:1rem;letter-spacing:.025rem;position:relative;transition:all .2s}.__button-plain{background-color:transparent;border-color:transparent}.__button-plain::after{width:100%;height:2px;bottom:2px;left:0;content:"";display:block;transition:background-color .2s}.__button-plain:not(:hover)::after{background-color:transparent}.__button-plain:hover::after{background-color:#222}.__button-black:not(:hover),.home .intro .cta:not(:hover),.home .docs .cta:not(:hover),.home .contribute .cta:not(:hover),.home .develop .cta:not(:hover),.home .community .cta:not(:hover),.home .features .home__feature__cta:not(:hover){background-color:#222;border-color:#fcfcfc;box-shadow:2px 2px 0 #fcfcfc;color:#fcfcfc}.__button-black:hover,.home .intro .cta:hover,.home .docs .cta:hover,.home .contribute .cta:hover,.home .develop .cta:hover,.home .community .cta:hover,.home .features .home__feature__cta:hover{background-color:#fcfcfc;border-color:#222;box-shadow:2px 2px 0 #222;color:inherit}.__button-white:not(:hover){background-color:#fcfcfc;border-color:transparent;box-shadow:2px 2px 0 #222;color:inherit}.__button-white:hover{background-color:#222;border-color:#fcfcfc;box-shadow:2px 2px 0 #fcfcfc;color:#fcfcfc}.__button-gray{background-color:#fcfcfc}.__button-gray:not(:hover){border-color:transparent;box-shadow:2px 2px 0 #222}.__button-gray:hover{border-color:#3abf7d;box-shadow:2px 2px 0 #3abf7d;color:#3abf7d}.__button-padding-vertical,.newsletter-cta__submit,.__button-black,.home .intro .cta,.home .docs .cta,.home .contribute .cta,.home .develop .cta,.home .community .cta,.home .features .home__feature__cta,.__button-white,.__button-gray{padding-top:.5rem;padding-bottom:.5rem}.__button-padding-horizontal,.newsletter-cta__input,.newsletter-cta__submit,.__button-black,.home .intro .cta,.home .docs .cta,.home .contribute .cta,.home .develop .cta,.home .community .cta,.home .features .home__feature__cta,.__button-white,.__button-gray{padding-right:1rem;padding-left:1rem}.__grid:first-of-type{cursor:default;font-size:.8rem;font-weight:600;letter-spacing:.2rem;text-transform:uppercase}.__grid:not(:first-of-type){border-left:1px solid #a3b7ad}.__grid:not(:first-of-type) .col{border-bottom-style:solid;border-bottom-width:1px}.__grid:not(:first-of-type) .col:last-of-type{border-right-style:solid;border-right-width:1px}.__grid:not(:first-of-type) .col:not(.red):not(.orange):not(.yellow):not(.green){border-color:#a3b7ad}@media(min-width: 600px){.__grid{display:table;table-layout:fixed;width:100%}.__grid .col{display:table-cell}}.col{padding:.5rem 1rem;width:100%}.col:not(:first-of-type){text-align:right}@media(min-width: 600px){.grid-padded{margin-right:-1rem;margin-left:-1rem}.grid-padded .grid{border-spacing:1rem 0}}.grid-align-middle .col{vertical-align:middle}.grid-reverse{direction:rtl}.grid-reverse .col{direction:ltr}@font-face{font-family:"Karla";font-style:normal;font-weight:400;src:local("Karla Regular"),url(//brick.freetls.fastly.net/fonts/karla/400.woff) format("woff")}@font-face{font-family:"Karla";font-style:italic;font-weight:400;src:local("Karla Italic"),url(//brick.freetls.fastly.net/fonts/karla/400i.woff) format("woff")}@font-face{font-family:"Karla";font-style:normal;font-weight:700;src:local("Karla Bold"),url(//brick.freetls.fastly.net/fonts/karla/700.woff) format("woff")}@keyframes spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.ecosystem{margin-bottom:2rem;padding-top:1rem;display:grid;font-size:1rem;grid-gap:1rem}.ecosystem:not(.expand-left):not(.expand-right){grid-template-columns:144px auto 144px}.ecosystem:not(.expand-left):not(.expand-right) .ecosystem__submodules{padding-top:2.5rem}.ecosystem.expand-left{grid-template-columns:50% auto}.ecosystem.expand-left .ecosystem__submodules:last-of-type,.ecosystem.expand-left .ecosystem__submodule:not(.active){display:none}.ecosystem.expand-right{grid-template-columns:auto 50%}.ecosystem.expand-right .ecosystem__submodules:first-of-type,.ecosystem.expand-right .ecosystem__submodule:not(.active){display:none}.ecosystem__module{position:relative;width:100%}.ecosystem__module > *{z-index:1}.ecosystem__module h2{position:relative;width:100%}.ecosystem__module h2 > div{float:right;font-size:1rem;padding-top:1.95rem;padding-right:3rem;position:relative;text-align:right}.ecosystem__module h2 > div::before{font-family:Georgia,serif;top:.9rem;right:3rem;content:"explore";font-size:80%;font-style:italic;opacity:.3;position:absolute;text-align:right;width:100%}.ecosystem__module h2 > div span{cursor:pointer;display:inline-block;position:relative}.ecosystem__module h2 > div span:not(:last-of-type){margin-right:1rem}.ecosystem__module h2 > div span:not(:last-of-type)::after{top:0;right:-0.7rem;color:rgba(163,183,173,.3);content:"/";font-style:italic;position:absolute}.ecosystem__module h3{position:relative}.ecosystem__module::before{width:100%;height:100%;top:0;left:0;content:"";position:absolute;z-index:0}.ecosystem__module:not(.active){align-items:center;display:inline-flex;justify-content:center}.ecosystem__module:not(.active) h2{font-size:1.5rem;text-align:center}.ecosystem__module:not(.active) h2 > span{cursor:pointer;display:block;padding:1.9rem 2rem}.ecosystem__module:not(.active) h2 > span em{display:block;font-size:70%;font-weight:normal}.ecosystem__module:not(.active) h2 > div{display:none}.ecosystem__module:not(.active) .ecosystem__module__details{display:none}.ecosystem__module:not(.active) .__close{top:2rem;transform:rotate(45deg);z-index:0}.ecosystem__module.active{padding:1.9rem 2rem}.ecosystem__module.active h2{font-size:3rem;margin-bottom:1rem}.ecosystem__module.active h2 > span{cursor:default}.ecosystem__module.active h2 > span em{display:none}.ecosystem__module.active::before{background-color:#fcfcfc}.ecosystem__module.active .__close{top:2.35rem;z-index:3}.ecosystem__module.lbrycrd,.ecosystem__module.lbry{margin-bottom:1rem}.ecosystem__module.lbry:not(.active) h2,.ecosystem__module.applications:not(.active) h2{margin-bottom:.5rem}.ecosystem__module.lbry:not(.active) h2::after,.ecosystem__module.applications:not(.active) h2::after{bottom:1rem;left:0;font-size:.5rem;letter-spacing:.1rem;position:absolute;width:100%;z-index:-1}.ecosystem__module.lbrycrd:not(.active)::before{background-color:#db3e3e}.ecosystem__module.lbrycrd.active::before{border:2px solid #db3e3e}.ecosystem__module.lbry:not(.active)::before{background-color:#3e8cdb}.ecosystem__module.lbry:not(.active) h2::after{content:"◼︎◼︎"}.ecosystem__module.lbry.active::before{border:2px solid #3e8cdb}.ecosystem__module.applications:not(.active)::before{background-color:#3edb3e}.ecosystem__module.applications:not(.active) h2::after{content:"◼︎◼︎◼︎◼︎◼︎"}.ecosystem__module.applications.active::before{border:2px solid #3edb3e}.ecosystem__module__piece{background-color:#fcfcfc;left:10%;line-height:2;position:relative;width:80%}.ecosystem__module__piece:not(:last-of-type){margin-bottom:.5rem}.ecosystem__submodule{border-width:2px;cursor:default;position:relative;transition:border-color .2s;z-index:2}.ecosystem__submodule:not(:last-of-type){margin-bottom:1rem}.ecosystem__submodule:not(.on):not(.active){color:transparent}.ecosystem__submodule:not(.active){align-items:center;display:inline-flex;justify-content:center;width:144px;height:144px;border-radius:50%;border-style:dashed}.ecosystem__submodule:not(.active) .ecosystem__submodule__title{width:100%;height:100%;line-height:140px;text-align:center}.ecosystem__submodule:not(.active) .ecosystem__submodule__description{display:none}.ecosystem__submodule.active{width:100%;height:100%;max-height:378px;border-style:solid;overflow-y:auto;padding:2rem}.ecosystem__submodule.active .ecosystem__submodule__title{line-height:1.33;margin-bottom:1rem}.ecosystem__submodule:not(.blue):not(.green):not(.red){border-color:rgba(163,183,173,.3)}.ecosystem__submodule.blue:not(.active),.ecosystem__submodule.green:not(.active),.ecosystem__submodule.red:not(.active){cursor:pointer}.ecosystem__submodule.blue{background-color:rgba(62,140,219,.025);border-color:#3e8cdb}.ecosystem__submodule.green{background-color:rgba(62,219,62,.025);border-color:#3edb3e}.ecosystem__submodule.red{background-color:rgba(219,62,62,.025);border-color:#db3e3e}.ecosystem__submodule__title{font-size:1.15rem}.ecosystem__submodule__description{margin-bottom:2rem}.ecosystem__submodule__description .__close{top:-0.7rem;right:-2rem}.ecosystem__submodule__description__title{color:rgba(34,34,34,.3);letter-spacing:.1rem;text-transform:uppercase}.__parents{top:2rem;right:4rem;font-size:1.15rem;line-height:1.33;list-style-type:none;padding-right:1rem;position:absolute;z-index:1}.__parents::before,.__parents::after{position:absolute}.__parents::before{font-family:Georgia,serif;top:.3rem;left:-3.4rem;color:rgba(34,34,34,.3);content:"back to";font-size:.8rem;font-style:italic;font-weight:700}.__parents::after{width:2px;height:100%;top:0;right:0;background-color:rgba(34,34,34,.3);content:""}.__parent{font-weight:700}.__parent:not(.active){display:none}.__parent.active{cursor:pointer}.__close{cursor:pointer;font-size:2rem;position:absolute;right:2rem;transition:all .2s}.newsletter-cta{background-color:rgba(34,34,34,.2);padding-top:1rem;padding-bottom:1rem;text-align:center}.newsletter-cta > div:first-of-type{margin-right:auto;margin-left:auto}@media(min-width: 551px){.newsletter-cta > div:first-of-type{width:500px}}@media(max-width: 550px){.newsletter-cta > div:first-of-type{width:90%}}.newsletter-cta::after{clear:both;content:"";display:block}.newsletter-cta__title{font-size:.8rem;letter-spacing:.05rem;margin-bottom:.75rem;text-transform:uppercase}.newsletter-cta__input,.newsletter-cta__submit{border-style:solid;border-width:1px}@media(max-width: 550px){.newsletter-cta__input,.newsletter-cta__submit{width:100%}}.newsletter-cta__input{background-color:#fcfcfc;font-size:1rem;height:38px;transition:border .2s}@media(min-width: 551px){.newsletter-cta__input{float:left;width:calc(100% - 112px)}}@media(max-width: 550px){.newsletter-cta__input{text-align:center}}.newsletter-cta__input:not(:focus){border-top-color:#222;border-left-color:#222}@media(min-width: 551px){.newsletter-cta__input:not(:focus){border-bottom-color:#222;border-right-color:transparent}}@media(max-width: 550px){.newsletter-cta__input:not(:focus){border-bottom-color:transparent;border-right-color:#222}}.newsletter-cta__input:focus{border-top-color:#35a06b;border-left-color:#35a06b}@media(min-width: 551px){.newsletter-cta__input:focus{border-bottom-color:#35a06b;border-right-color:transparent}}@media(max-width: 550px){.newsletter-cta__input:focus{border-bottom-color:transparent;border-right-color:#35a06b}}.newsletter-cta__submit{color:#fcfcfc}@media(min-width: 551px){.newsletter-cta__submit{width:112px;height:38px;float:right;left:-1px}}@media(max-width: 550px){.newsletter-cta__submit{display:block;top:-1px}}.newsletter-cta__submit:not(:hover){background-color:#222;border-color:#222}.newsletter-cta__submit:hover{background-color:#3abf7d;border-color:#35a06b}.newsletter-cta__message{clear:both;content:"";display:block;color:#db3e3e;padding-top:1rem}.github-feed{border-bottom:1px solid rgba(34,34,34,.05);border-left:1px solid rgba(34,34,34,.05);font-size:.8rem;grid-area:github;position:relative}@media(min-width: 1301px){.github-feed{padding-top:3.7rem}}@media(min-width: 1001px)and (max-width: 1300px){.github-feed{padding-top:2.95rem}}@media(min-width: 1001px){.github-feed{padding-bottom:2rem;padding-right:10%;padding-left:2rem}}@media(max-width: 1000px){.github-feed{padding-top:2rem;padding-bottom:2rem}}@media(min-width: 901px){.github-feed{padding-right:1rem;padding-left:1rem}}@media(max-width: 900px){.github-feed{padding-right:2rem;padding-left:2rem}}@media(max-width: 700px){.github-feed{overflow-x:auto;overflow-y:hidden;white-space:nowrap}}@media(min-width: 1001px){.github-feed h3,.github-feed h5{text-align:center}}.github-feed h3{letter-spacing:.1rem;line-height:1;text-transform:uppercase;width:100%}@media(min-width: 1301px){.github-feed h3{top:2.15rem;left:0;color:rgba(34,34,34,.045);font-size:4rem;position:absolute}}@media(max-width: 1300px){.github-feed h3{color:#222}}@media(min-width: 901px)and (max-width: 1300px){.github-feed h3{font-size:3rem}}@media(max-width: 900px){.github-feed h3{font-size:2rem;margin-bottom:1rem}}.github-feed h5{font-style:italic;font-weight:normal}@media(min-width: 1001px){.github-feed h5{margin-bottom:3rem}}@media(min-width: 901px)and (max-width: 1000px){.github-feed h5{margin-bottom:2rem}}@media(max-width: 900px){.github-feed h5{margin-bottom:.5rem;position:relative;top:-1rem}}.github-feed__event{line-height:1.55}@media(max-width: 700px){.github-feed__event{display:inline-block;margin-right:1.25rem;vertical-align:top;width:200px}}@media(min-width: 701px){.github-feed__event:not(:last-of-type){margin-bottom:1.25rem}}.github-feed__event > a:first-of-type{font-weight:700;margin-bottom:.5rem;width:100%}@media(max-width: 700px){.github-feed__event > p:first-of-type{box-shadow:0 2px 5px rgba(34,34,34,.025)}}.github-feed__event > p:first-of-type code{background-color:#222;border-radius:3px;color:#fcfcfc;font-size:80%;letter-spacing:.05rem;padding:.2rem .5rem;position:relative;top:-1px}.github-feed__event > p:first-of-type em:not(.github-feed__event__time){text-decoration:underline}@media(min-width: 701px){.github-feed__event > p:first-of-type{display:inline-block;margin-left:.5rem;vertical-align:top;width:calc(100% - 4.5rem)}}@media(max-width: 700px){.github-feed__event > p:first-of-type{top:-3.5rem;left:5%;background-color:#fcfcfc;border:1px solid rgba(163,183,173,.1);border-radius:3px;padding:1rem;position:relative;white-space:normal;width:90%}}.github-feed__event__avatar{border:1px solid rgba(163,183,173,.1);border-radius:3px;object-position:center;object-fit:cover}@media(min-width: 701px){.github-feed__event__avatar{width:2.5rem;height:2.5rem}}@media(max-width: 700px){.github-feed__event__avatar{width:100%;height:100%}}.github-feed__event__time{color:#a3b7ad;display:block}@media(max-width: 700px){.github-feed__event__time{padding-top:1rem}}.navigation{top:0;left:0;background-color:#fcfcfc;box-shadow:0 1px 5px rgba(34,34,34,.1);padding-right:env(safe-area-inset-right);padding-left:env(safe-area-inset-left);position:fixed;width:100%;z-index:10}.navigation > div:first-of-type{position:relative}@media(min-width: 701px){.navigation > div:first-of-type{align-items:stretch;display:flex;flex-flow:row wrap}}@media(max-width: 700px){.navigation > div:first-of-type{overflow:auto;overflow-scrolling:touch;white-space:nowrap;width:100%}.navigation > div:first-of-type::before{width:2rem;height:4rem;top:0;right:0;background-image:linear-gradient(90deg, rgba(252, 252, 252, 0), #fcfcfc 50%, #fcfcfc);content:"";position:fixed;z-index:2}}.navigation__item{overflow:hidden;padding-right:.5rem;padding-left:.5rem;position:relative}@media(max-width: 700px){.navigation__item{display:inline-block;transform:translate3d(0, 0, 0);transition:opacity .2s .2s ease,transform .4s .2s cubic-bezier(0.215, 0.61, 0.355, 1);vertical-align:top}.navigation__item:last-of-type{margin-right:3rem}}.navigation__item:first-of-type{border:0;color:transparent;font:0/0 a;text-shadow:none;width:10rem;height:3rem;background-image:url("../media/svg/logo.svg");background-repeat:no-repeat;background-size:contain;flex:1;top:.5rem}.navigation__item:not(:first-of-type){color:inherit;font-size:1rem;line-height:4rem}.navigation__item:not(:first-of-type)::after{width:100%;height:3px;background-color:#3abf7d;content:"";left:0;position:absolute;transition:bottom .2s}.navigation__item:not(:first-of-type):not(:hover)::after{bottom:-3px}.navigation__item:not(:first-of-type):hover::after,.navigation__item:not(:first-of-type).active::after{bottom:0}.component--mission-statement{margin-bottom:1.5rem;padding:1rem 1rem 1rem 1.25rem;background-color:rgba(58,191,125,.1);border-left:.5rem solid #3abf7d;line-height:1.55;position:relative}@media(min-width: 901px){.component--mission-statement{font-size:1.25rem}}@media(max-width: 900px){.component--mission-statement{font-size:1.05rem}}.component--mission-statement__title{color:#3abf7d;display:block;letter-spacing:.025rem;text-transform:uppercase}.modal{align-items:center;display:inline-flex;justify-content:center;top:0;left:0;bottom:0;right:0;background-color:rgba(34,34,34,.5);position:fixed;z-index:10}@media(min-width: 901px){.modal h3{font-size:1.5rem;margin-bottom:.25rem}}@media(max-width: 900px){.modal h3{font-size:1.25rem}}.modal p{margin-bottom:1rem}@media(min-width: 901px){.modal p{font-size:1.15rem;line-height:1.33}}@media(max-width: 900px){.modal p{font-size:1.05rem;line-height:1.55}}.modal p a{color:#3abf7d}.modal-wrap{background-color:#fcfcfc;padding:2rem 1.5rem}@media(min-width: 501px){.modal-wrap{width:500px}}@media(max-width: 500px){.modal-wrap{width:100%}}.footer{background-color:#222;color:rgba(252,252,252,.15);font-size:1rem;padding-right:env(safe-area-inset-right);padding-left:env(safe-area-inset-left);position:relative}@media(max-width: 980px){.footer::before{width:3rem;height:100%;bottom:0;right:0;background-image:linear-gradient(90deg, rgba(34, 34, 34, 0), #222 50%, #222);content:"";position:absolute;z-index:2}}@media(max-width: 980px){.footer > div:first-of-type{overflow:auto;overflow-scrolling:touch;white-space:nowrap;width:100%}}.footer ul{list-style-type:none;padding-top:2rem;padding-bottom:2rem}@media(min-width: 981px){.footer ul{align-items:stretch;display:flex;flex-flow:row wrap}}.footer ul li{padding-right:.5rem;padding-left:.5rem;vertical-align:bottom}@media(max-width: 980px){.footer ul li{display:inline-block;transform:translate3d(0, 0, 0);transition:opacity .2s .2s ease,transform .4s .2s cubic-bezier(0.215, 0.61, 0.355, 1)}.footer ul li:last-of-type{margin-right:3rem}}.footer ul li:first-of-type{flex:1}.footer a{transition:color .2s}.footer a:not(:hover){color:#fcfcfc}.footer a:hover{color:#3abf7d}html,body{width:100%;height:100%}html{background-color:#fcfcfc}body{font-family:Karla,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";color:#222;font-size:12px;min-width:320px;overflow-x:hidden;position:relative;z-index:0}body:not(.home) main > div:first-of-type{flex:1}@media(min-width: 1001px){body.home main > div:first-of-type{display:grid;grid-gap:0;grid-template-areas:"header header header" "features features features" "intro intro github" "docs docs github" "contribute contribute contribute" "develop develop develop" "community community community"}}main{display:flex;flex-direction:column;min-height:100vh;padding-top:4rem}.inner-wrap{margin-right:auto;margin-left:auto;max-width:1200px}@media(min-width: 901px){.inner-wrap{padding-right:1rem;padding-left:1rem}}@media(max-width: 900px){.inner-wrap{padding-right:2rem;padding-left:2rem}}.inner-wrap::after{clear:both;content:"";display:block}h1 .header-anchor,h2 .header-anchor,h3 .header-anchor,h4 .header-anchor,h5 .header-anchor{display:none}.alert{bottom:0;left:0;background-color:#dbdb3e;line-height:1.33;padding-top:1rem;padding-right:env(safe-area-inset-right);padding-bottom:1rem;padding-left:env(safe-area-inset-left);position:fixed;text-align:left;width:100%;z-index:3}.alert > div:first-of-type{position:relative}@media(min-width: 901px){.alert{font-size:1rem}}@media(max-width: 900px){.alert{font-size:.8rem}}.alert p,.alert button{display:inline-block}.alert p{padding-right:1rem;width:calc(100% - 2.25rem)}.alert a{font-weight:600;text-decoration:underline}.alert button{width:1.25rem;height:1.25rem;top:0;right:0;background-color:#fcfcfc;border-radius:50%;display:block;font-size:1rem;line-height:1;margin-right:1rem;margin-left:1rem;position:absolute;text-align:center}.home{padding-right:env(safe-area-inset-right);padding-left:env(safe-area-inset-left)}.home h2{font-weight:normal;margin-bottom:4rem;text-align:center}@media(min-width: 851px){.home h2{font-size:1.75rem}}@media(max-width: 850px){.home h2{font-size:1.25rem}}.home hr{width:100%;height:1px;background-color:rgba(34,34,34,.1);border:none;margin-bottom:4rem}.home .hero{align-items:center;background-color:#222;background-image:url("../media/svg/text-logo--white.svg");background-position:center;background-repeat:no-repeat;display:flex;grid-area:header;height:calc(50vh - 4rem);min-height:300px;justify-content:center}@media(max-width: 850px){.home .hero{background-size:cover}}.home .hero h1{background-color:#fcfcfc;border:1px solid rgba(34,34,34,.1);box-decoration-break:clone;display:inline;font-weight:normal;line-height:2;padding:.4rem 1rem}@media(min-width: 851px){.home .hero h1{font-size:1.75rem}}@media(max-width: 850px){.home .hero h1{font-size:1.25rem}}.home .features{grid-area:features}.home .features .home__features{align-content:center;border-bottom:1px solid rgba(34,34,34,.05);display:flex;flex-flow:row wrap;list-style-type:none;padding-top:2rem;padding-bottom:2rem}.home .features .home__feature{position:relative;text-align:center;vertical-align:top}@media(min-width: 651px){.home .features .home__feature{width:50%}}@media(max-width: 650px){.home .features .home__feature{width:100%}.home .features .home__feature:first-of-type{padding-bottom:1rem}.home .features .home__feature:last-of-type{padding-top:1rem}}.home .features .home__feature__title{font-size:2rem;margin-bottom:.5rem}.home .features .home__feature__description{font-size:1rem;left:10%;margin-bottom:1rem;position:relative;width:80%}.home .features .home__feature__cta{display:inline-block;font-size:1rem;position:relative}.home .intro,.home .docs,.home .contribute,.home .develop,.home .community{padding-top:3rem;padding-bottom:3.5rem}.home .intro .inner-wrap,.home .docs .inner-wrap,.home .contribute .inner-wrap,.home .develop .inner-wrap,.home .community .inner-wrap{position:relative}.home .intro h3,.home .docs h3,.home .contribute h3,.home .develop h3,.home .community h3{letter-spacing:.1rem;line-height:1;text-transform:uppercase}@media(min-width: 1301px){.home .intro h3,.home .docs h3,.home .contribute h3,.home .develop h3,.home .community h3{top:-0.85rem;left:-2rem;color:rgba(34,34,34,.045);font-size:4rem;position:absolute}}@media(max-width: 1300px){.home .intro h3,.home .docs h3,.home .contribute h3,.home .develop h3,.home .community h3{color:#222}}@media(min-width: 901px)and (max-width: 1300px){.home .intro h3,.home .docs h3,.home .contribute h3,.home .develop h3,.home .community h3{font-size:3rem}}@media(max-width: 900px){.home .intro h3,.home .docs h3,.home .contribute h3,.home .develop h3,.home .community h3{font-size:2rem;margin-bottom:1rem}}.home .intro p,.home .docs p,.home .contribute p,.home .develop p,.home .community p{margin-bottom:1.5rem;max-width:1000px}@media(min-width: 901px){.home .intro p,.home .docs p,.home .contribute p,.home .develop p,.home .community p{font-size:1.5rem;line-height:1.55}}@media(max-width: 900px){.home .intro p,.home .docs p,.home .contribute p,.home .develop p,.home .community p{font-size:1.25rem;line-height:1.33}}.home .intro p:first-of-type,.home .docs p:first-of-type,.home .contribute p:first-of-type,.home .develop p:first-of-type,.home .community p:first-of-type{padding-top:.5rem}.home .intro .cta,.home .docs .cta,.home .contribute .cta,.home .develop .cta,.home .community .cta{top:.5rem}.home .intro,.home .docs,.home .contribute,.home .develop{border-bottom:1px solid rgba(34,34,34,.05)}@media(min-width: 1301px){.home .intro,.home .docs{padding-left:10%}}.home .intro{grid-area:intro}.home .docs{grid-area:docs}@media(min-width: 1301px){.home .community p,.home .contribute p{margin-right:auto;margin-left:auto;text-align:center}}.home .community ul,.home .contribute ul{list-style-type:none;padding-top:1rem}.home .community ul::after,.home .contribute ul::after{clear:both;content:"";display:block}@media(min-width: 901px){.home .community ul,.home .contribute ul{font-size:1.5rem}}@media(min-width: 751px)and (max-width: 900px){.home .community ul,.home .contribute ul{font-size:1.25rem}}@media(max-width: 750px){.home .community ul,.home .contribute ul{font-size:1rem}}.home .community ul li,.home .contribute ul li{float:left;position:relative;text-align:center}@media(max-width: 750px){.home .community ul li,.home .contribute ul li{margin-bottom:2rem;min-width:8rem}}.home .community ul li a,.home .contribute ul li a{display:block;position:relative;padding-top:4rem;transition:color .2s}.home .community ul li a::before,.home .contribute ul li a::before{width:100%;height:100%;background-position:center 0;background-repeat:no-repeat;content:"";left:0;position:absolute}.home .community ul li a:not(:hover),.home .contribute ul li a:not(:hover){color:inherit}.home .community ul li a:hover,.home .contribute ul li a:hover{color:#3abf7d}.home .contribute{grid-area:contribute}@media(min-width: 701px){.home .contribute ul li{width:calc(100% / 5)}}@media(max-width: 700px){.home .contribute ul li{width:50%}}@media(min-width: 901px){.home .contribute ul li a::before{background-size:4rem;top:-1rem}}@media(max-width: 900px){.home .contribute ul li a::before{background-size:3rem;top:0}}.home .contribute ul li:nth-child(1) a::before{background-image:url("../media/svg/flag.svg")}.home .contribute ul li:nth-child(2) a::before{background-image:url("../media/svg/keyboard.svg")}.home .contribute ul li:nth-child(3) a::before{background-image:url("../media/svg/anchor.svg")}.home .contribute ul li:nth-child(4) a::before{background-image:url("../media/svg/chat.svg")}.home .contribute ul li:nth-child(5) a::before{background-image:url("../media/svg/monitor.svg")}.home .develop{grid-area:develop}.home .community{grid-area:community}@media(min-width: 701px){.home .community ul li{width:50%}}@media(max-width: 700px){.home .community ul li{width:50%}}@media(min-width: 901px){.home .community ul li a::before{background-size:6rem;top:-2rem}}@media(max-width: 900px){.home .community ul li a::before{background-size:4rem;top:-0.5rem}}.home .community ul li:nth-child(1) a::before{background-image:url("../media/svg/discord.svg")}.home .community ul li:nth-child(2) a::before{background-image:url("../media/svg/reddit.svg")}.home .community ul li:nth-child(3) a::before{background-image:url("../media/svg/slack.svg")}.contributing table th:first-of-type{width:30%}.contributing table th:nth-of-type(2){width:20%}.documentation ol + h1,.documentation ul + h1{padding-top:2rem}.documentation h4 + h2{padding-top:2rem}.documentation .blog-posts{list-style-type:none}.documentation .blog-post{position:relative}.documentation .blog-post::before{background-color:#222;border-radius:50%;content:"";line-height:0;position:absolute}@media(min-width: 901px){.documentation .blog-post::before{width:7px;height:7px;top:14px;left:-1.05rem}}@media(max-width: 900px){.documentation .blog-post::before{width:6px;height:6px;top:11px;left:-0.95rem}}.documentation .blog-post__title{line-height:1.33}.documentation .blog-post__title::after{content:"";display:block}.documentation .blog-post__meta{font-size:80%;line-height:1;margin-bottom:1rem}.documentation .blog-post__meta__author::before{content:"by"}@media(min-width: 901px){.documentation .blog-post__meta__author::before{left:-1.2rem}}@media(max-width: 900px){.documentation .blog-post__meta__author::before{left:-1rem}}@media(min-width: 901px){.documentation .blog-post__meta__date{margin-right:1.4rem;margin-left:3.1rem}}@media(max-width: 900px){.documentation .blog-post__meta__date{margin-right:1.2rem;margin-left:2.6rem}}.documentation .blog-post__meta__date::before{content:"posted"}@media(min-width: 901px){.documentation .blog-post__meta__date::before{left:-3.1rem}}@media(max-width: 900px){.documentation .blog-post__meta__date::before{left:-2.6rem}}.documentation .blog-post__meta__author,.documentation .blog-post__meta__date{display:inline-block;position:relative}.documentation .blog-post__meta__author::before,.documentation .blog-post__meta__date::before{color:rgba(34,34,34,.5);font-style:italic;position:absolute;vertical-align:bottom}.page{display:flex;flex-direction:column;height:100%}.page__header-wrap{width:100%}.page__header{align-items:center;display:inline-flex;justify-content:center;background-position:center;background-repeat:no-repeat;background-size:cover;color:#fcfcfc;padding-right:env(safe-area-inset-right);padding-left:env(safe-area-inset-left);position:relative;width:100%}.page__header__title{font-weight:300;text-shadow:1px 1px 2px rgba(34,34,34,.3)}@media(min-width: 901px){.page__header__title{font-size:3rem;line-height:6.5rem}}@media(max-width: 900px){.page__header__title{font-size:2rem;line-height:1;padding-top:1rem;padding-bottom:1rem}}.page__content{background-repeat:repeat;background-size:32px;flex:1;padding-top:2rem;padding-bottom:2rem;padding-right:env(safe-area-inset-right);padding-left:env(safe-area-inset-left)}.page__content h1{margin-bottom:.25rem}@media(min-width: 901px){.page__content h1{font-size:3rem}}@media(max-width: 900px){.page__content h1{font-size:2rem}}.page__content h1 + h2{margin-bottom:2rem}@media(min-width: 901px){.page__content h2:not(.__title){font-size:2rem}}@media(max-width: 900px){.page__content h2:not(.__title){font-size:1.5rem}}.page__content h2:not(.__title) + h3{margin-bottom:1rem;padding-top:.25rem}@media(min-width: 901px){.page__content h3:not(.ecosystem__submodule__title){font-size:1.5rem}}@media(max-width: 900px){.page__content h3:not(.ecosystem__submodule__title){font-size:1.25rem}}.page__content h3:not(.ecosystem__submodule__title) + table{top:.25rem}.page__content h4:not(.ecosystem__submodule__description__title){letter-spacing:.05rem;text-transform:uppercase}@media(min-width: 901px){.page__content h4:not(.ecosystem__submodule__description__title){font-size:1.25rem}}@media(max-width: 900px){.page__content h4:not(.ecosystem__submodule__description__title){font-size:1.15rem}}.page__content h5{font-size:1rem}.page__content sup{font-family:"Courier New",monospace}.page__content blockquote{left:2px;line-height:1.5;margin-bottom:.5rem;position:relative}@media(min-width: 601px){.page__content blockquote{margin-left:15%;padding:.5rem 0 .05rem 2rem;font-size:1.5rem;width:70%}}@media(max-width: 600px){.page__content blockquote{font-size:1.25rem;padding:.5rem 0 .05rem 0}}@media(min-width: 376px)and (max-width: 600px){.page__content blockquote{margin-left:5%;width:90%}}.page__content blockquote p{font-size:inherit;line-height:inherit}.page__content blockquote::before{font-family:Georgia,serif;width:150px;height:100px;top:3rem;left:-2rem;color:rgba(58,191,125,.2);content:"“";font-size:20rem;line-height:.5;position:absolute}.page__content p code,.page__content ol code,.page__content ul:not(.overview__ecosystem__module) code,.page__content table code{background-color:#222;border-radius:3px;color:#fcfcfc;font-size:60%;letter-spacing:.05rem;padding:.3rem .5rem;vertical-align:middle}@media(max-width: 900px){.page__content p code,.page__content ol code,.page__content ul:not(.overview__ecosystem__module) code,.page__content table code{position:relative;top:-1px}}.page__content p,.page__content ol,.page__content ul:not(.feature-links):not(.overview__ecosystem__module):not(.__parents){margin-bottom:1rem;position:relative}@media(min-width: 901px){.page__content p,.page__content ol,.page__content ul:not(.feature-links):not(.overview__ecosystem__module):not(.__parents){font-size:1.25rem;line-height:1.6}}@media(max-width: 900px){.page__content p,.page__content ol,.page__content ul:not(.feature-links):not(.overview__ecosystem__module):not(.__parents){font-size:1.05rem;line-height:1.55}}.page__content ol,.page__content ul:not(.feature-links):not(.overview__ecosystem__module):not(.__parents){padding-top:.5rem}.page__content ol li:not(:last-of-type),.page__content ul:not(.feature-links):not(.overview__ecosystem__module):not(.__parents) li:not(:last-of-type){margin-bottom:.25rem}.page__content ol + h2,.page__content ol + h3,.page__content ol + h4,.page__content ol + h5,.page__content ul:not(.feature-links):not(.overview__ecosystem__module):not(.__parents) + h2,.page__content ul:not(.feature-links):not(.overview__ecosystem__module):not(.__parents) + h3,.page__content ul:not(.feature-links):not(.overview__ecosystem__module):not(.__parents) + h4,.page__content ul:not(.feature-links):not(.overview__ecosystem__module):not(.__parents) + h5{padding-top:2rem}.page__content ol{list-style-type:lower-roman;padding-left:1.6rem}.page__content ul:not(.feature-links):not(.overview__ecosystem__module):not(.__parents){padding-left:1.25rem}.page__content p img{float:right}.page__content a:not(.__button-black):not(.button):not(.feature-link__title):not(.header-anchor):not(.newsletter-standalone__submit){background-image:linear-gradient(#fcfcfc, #fcfcfc),linear-gradient(#fcfcfc, #fcfcfc),linear-gradient(#3abf7d, #3abf7d);background-position:0 88%,100% 88%,0 88%;background-repeat:no-repeat,no-repeat,repeat-x;background-size:.05rem 1px,.05rem 1px,1px 1px;box-decoration-break:clone;display:inline;text-decoration:none;text-shadow:.03rem 0 #fcfcfc,-0.03rem 0 #fcfcfc,0 .03rem #fcfcfc,0 -0.03rem #fcfcfc,.06rem 0 #fcfcfc,-0.06rem 0 #fcfcfc,.09rem 0 #fcfcfc,-0.09rem 0 #fcfcfc,.12rem 0 #fcfcfc,-0.12rem 0 #fcfcfc,.15rem 0 #fcfcfc,-0.15rem 0 #fcfcfc;color:#3abf7d}.page__content a:not(.__button-black):not(.button):not(.feature-link__title):not(.header-anchor):not(.newsletter-standalone__submit)::selection{background-color:#3abf7d;color:#fcfcfc;text-shadow:none}.page__content a:not(.__button-black):not(.button):not(.feature-link__title):not(.header-anchor):not(.newsletter-standalone__submit)::-moz-selection{background-color:#3abf7d;color:#fcfcfc;text-shadow:none}@-moz-document url-prefix(){.page__content a:not(.__button-black):not(.button):not(.feature-link__title):not(.header-anchor):not(.newsletter-standalone__submit){background-position:0 90%,100% 90%,0 90%}}.page__content pre{margin-bottom:2rem;padding:2rem;border-radius:3px;font-size:1rem;line-height:1.33;overflow-x:auto;overflow-y:hidden}.page__content pre:not([class]),.page__content pre.language-text{background-color:#222;color:#fcfcfc}.page__content pre.language-yaml{background-color:#27273f;color:#ffe066}.page__content pre.language-yaml .atrule{color:#f083ac}.page__content pre.language-yaml .important{color:#ffa94d}.page__content pre.language-yaml .punctuation{color:#fcfcfc}.page__content table{background-color:#fcfcfc;border:1px solid rgba(163,183,173,.3);border-spacing:0;margin-bottom:2rem;position:relative;width:100%}@media(max-width: 1030px){.page__content table{display:inline-grid}.page__content table thead{display:none}.page__content table tbody,.page__content table tr,.page__content table td{display:block}.page__content table tbody tr:last-of-type td:not(:last-of-type){border-bottom:1px solid rgba(163,183,173,.3)}}.page__content table thead{background-color:#222;color:#fcfcfc;cursor:default;position:relative}.page__content table thead tr{position:relative;z-index:1}.page__content table thead:not(*:root)::after{z-index:-1}.page__content table thead::after{width:calc(100% + 2px);height:calc(100% + 2px);top:-1px;left:-1px;background-color:#222;content:"";position:absolute;z-index:0}.page__content table tbody{line-height:1.55}.page__content table tr:nth-of-type(even){background-color:rgba(34,34,34,.025)}.page__content table th,.page__content table td{padding:.5rem 1rem}.page__content table th{font-size:.8rem;letter-spacing:.1rem;text-transform:uppercase}.page__content table tbody tr:not(:last-of-type) td{border-bottom:1px solid rgba(163,183,173,.3)}.page__content table td{font-size:1rem}.page__header{background-image:url("../media/images/background-a.jpg")}.page__content{background-image:url("../media/images/grid.png")}/*# sourceMappingURL=style.css.map */
diff --git a/public/css/style.css.map b/public/css/style.css.map
index edd385b..d6bcce5 100755
--- a/public/css/style.css.map
+++ b/public/css/style.css.map
@@ -1 +1 @@
-{"version":3,"sourceRoot":"","sources":["../../sass/init/_base.scss","../../sass/init/_colors.scss","../../sass/init/_mixins.scss","../../sass/init/_extends.scss","../../sass/type/_karla.scss","../../sass/partials/_animation.scss","../../sass/partials/_ecosystem.scss","../../sass/partials/_email-subscribe.scss","../../sass/partials/_github-feed.scss","../../sass/partials/_navigation.scss","../../sass/partials/_mission-statement.scss","../../sass/partials/_modal.scss","../../sass/partials/_footer.scss","../../sass/_layout.scss","../../sass/pages/_home.scss","../../sass/pages/_contributing.scss","../../sass/pages/_documentation.scss","../../sass/pages/_page.scss"],"names":[],"mappings":"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","file":"style.css"}
\ No newline at end of file
+{"version":3,"sourceRoot":"","sources":["../../sass/init/_base.scss","../../sass/init/_colors.scss","../../sass/init/_mixins.scss","../../sass/init/_extends.scss","../../sass/type/_karla.scss","../../sass/partials/_animation.scss","../../sass/partials/_ecosystem.scss","../../sass/partials/_email-subscribe.scss","../../sass/partials/_github-feed.scss","../../sass/partials/_navigation.scss","../../sass/partials/_mission-statement.scss","../../sass/partials/_modal.scss","../../sass/partials/_footer.scss","../../sass/_layout.scss","../../sass/pages/_home.scss","../../sass/pages/_contributing.scss","../../sass/pages/_documentation.scss","../../sass/pages/_page.scss"],"names":[],"mappings":"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","file":"style.css"}
\ No newline at end of file
diff --git a/public/scripts/sockets.js b/public/scripts/sockets.js
new file mode 100644
index 0000000..227e8e2
--- /dev/null
+++ b/public/scripts/sockets.js
@@ -0,0 +1,17 @@
+/* global ws, $ */ "use strict";
+
+
+
+ws.onmessage = socket => {
+ const data = JSON.parse(socket.data);
+
+ switch (true) {
+ case data.message === "updated html":
+ $(data.selector).html(data.html);
+ break;
+
+ default:
+ console.log(data);
+ break;
+ }
+};
diff --git a/sass/_layout.scss b/sass/_layout.scss
index 0d79a14..d16beab 100644
--- a/sass/_layout.scss
+++ b/sass/_layout.scss
@@ -15,23 +15,16 @@ body {
overflow-x: hidden;
position: relative;
z-index: 0;
-}
-
-main {
- display: flex;
- flex-direction: column;
- min-height: 100vh;
- padding-top: 4rem;
&:not(.home) {
- > div:first-of-type {
+ main > div:first-of-type {
flex: 1;
}
}
&.home {
@media (min-width: 1001px) {
- > div:first-of-type {
+ main > div:first-of-type {
display: grid;
grid-gap: 0;
grid-template-areas:
@@ -47,6 +40,13 @@ main {
}
}
+main {
+ display: flex;
+ flex-direction: column;
+ min-height: 100vh;
+ padding-top: 4rem;
+}
+
.inner-wrap {
margin-right: auto;
margin-left: auto;
diff --git a/server.js b/server.js
index b92fe9a..26f829b 100755
--- a/server.js
+++ b/server.js
@@ -1,4 +1,4 @@
-"use strict"; require("dotenv").config();
+"use strict"; require("dotenv").config(); require("date-format-lite");
@@ -6,9 +6,7 @@
const chalk = require("chalk");
const cors = require("cors");
-// const local = require("app-root-path").require;
-
-// V A R I A B L E S
+const dedent = require("dedent");
const fastify = require("fastify")({
logger: {
@@ -17,14 +15,42 @@ const fastify = require("fastify")({
}
});
+const octokit = require("@octokit/rest")();
+const redis = require("redis");
+const relativeDate = require("relative-date");
+const local = require("app-root-path").require;
+
+// V A R I A B L E S
+
+const github = local("/helpers/github");
const log = console.log; // eslint-disable-line
-// const logSlackError = local("/helpers/slack");
+const logSlackError = local("/helpers/slack");
+let client;
+
+if (typeof process.env.GITHUB_OAUTH_TOKEN !== "undefined") {
+ octokit.authenticate({
+ type: "oauth",
+ token: process.env.GITHUB_OAUTH_TOKEN
+ });
+}
+
+if (typeof process.env.REDISCLOUD_URL !== "undefined") {
+ client = redis.createClient(process.env.REDISCLOUD_URL);
+
+ client.on("error", redisError => {
+ process.env.NODE_ENV === "development" ?
+ log("Unable to connect to Redis client. You may be missing an .env file") :
+ logSlackError("An error occured with Redis", redisError)
+ ;
+ });
+}
// P R O G R A M
fastify.use(cors());
+
fastify.register(require("fastify-compress"));
fastify.register(require("fastify-ws"));
@@ -44,47 +70,25 @@ fastify.register(require("choo-ssr/fastify"), {
]
});
-/*
-fastify.decorate("io", new WebSocket.Server({ server: fastify.server }));
-
-fastify.io.on("connection", (socket, req) => {
- console.log("connected");
- socket.url = req.url;
-
- socket.on("disconnect", () => {
- console.log("someone left");
- });
-
- // On message broadcast to everyone
- socket.on("message", data => {
- // Broadcast to everyone else
- fastify.io.clients.forEach(client => {
- console.log(socket.url, client.url);
-
- if (socket.url === client.url && client.readyState === WebSocket.OPEN) {
- client.send(data);
- }
- });
- });
-});
-*/
-
fastify.ready(err => {
if (err) throw err;
fastify.ws.on("connection", socket => {
- // console.log("Client connected.");
- socket.send("welcome");
+ socket.send(JSON.stringify({ "message": "welcome" }));
socket.on("message", msg => {
if (msg === "landed on homepage") {
- //
+ generateGitHubFeed(result => {
+ socket.send(JSON.stringify({
+ "message": "updated html",
+ "html": result,
+ "selector": "#github-feed"
+ }));
+ });
}
-
- socket.send(msg); // Creates an echo server
});
- socket.on("close", () => console.log("Client disconnected."));
+ socket.on("close", () => log("Client disconnected.")); // TODO: Close socket?
});
});
@@ -100,8 +104,52 @@ const start = async () => {
process.exit(1);
}
- log(`\n— ${chalk.green("⚡")} ${fastify.server.address().port}\n`);
- // logSlackError(`Server started at port \`${fastify.server.address().port}\``);
+ process.env.NODE_ENV === "development" ?
+ log(`\n— ${chalk.green("⚡")} ${fastify.server.address().port}\n`) :
+ logSlackError(`Server started at port \`${fastify.server.address().port}\``)
+ ;
};
start();
+
+
+
+// H E L P E R S
+
+function generateGitHubFeed(displayGitHubFeed) {
+ if (typeof process.env.REDISCLOUD_URL !== "undefined") {
+ client.zrevrange("events", 0, 9, (err, reply) => {
+ if (err) return; // TODO: Render a div with nice error message
+
+ const events = [];
+ const renderedEvents = [];
+
+ reply.forEach(item => events.push(JSON.parse(item)));
+
+ for (const event of events) {
+ renderedEvents.push(`
+
+
+
+
+
+
+ ${github.generateEvent(event)}
+ ${event.repo.name}
+ ${relativeDate(new Date(event.created_at))}
+
+
+ `);
+ }
+
+ // TODO: Update `.last-updated` every minute
+
+ displayGitHubFeed(dedent`
+ GitHub
+ Last updated: ${new Date().format("YYYY-MM-DD at H:mm:ss A").toLowerCase().replace(/-/g, "·")}
+
+ ${renderedEvents.join("")}
+ `);
+ });
+ }
+}
diff --git a/views/pages/github-feed.js b/views/pages/github-feed.js
deleted file mode 100644
index bb21bf9..0000000
--- a/views/pages/github-feed.js
+++ /dev/null
@@ -1,169 +0,0 @@
-"use strict"; require("dotenv").config();
-
-
-
-// P A C K A G E S
-
-const async = require("async");
-const html = require("choo-async/html");
-const local = require("app-root-path").require;
-const octokit = require("@octokit/rest")();
-const redis = require("redis");
-
-// V A R I A B L E S
-
-if (typeof process.env.GITHUB_OAUTH_TOKEN !== "undefined") {
- octokit.authenticate({
- type: "oauth",
- token: process.env.GITHUB_OAUTH_TOKEN
- });
-}
-
-const logSlackError = local("/helpers/slack");
-let redisClient;
-
-// process.env.NODE_ENV === "development" ? "" : redisClient = redis.createClient(process.env.REDISCLOUD_URL);
-redisClient = redis.createClient(process.env.REDISCLOUD_URL);
-
-
-
-// P R O G R A M
-
-const githubFeed = () => async (state, emit) => { // eslint-disable-line
- /* process.env.NODE_ENV === "development" ? "" : */ redisClient.zrevrange("events", 0, 9, (err, reply) => {
- if (err) return;
- const events = [];
-
- reply.forEach(item => events.push(JSON.parse(item)));
- console.log(events);
- return events;
- // res.json(events); // respond with JSON
- });
-
- /*
- return html`
-
-
-
-
-
-
-
- `;
- */
-};
-
-function updateGithubFeed() {
- octokit.activity.getEventsForOrg({
- org: "lbryio",
- per_page: 20,
- page: 1
- }).then(({ data }) => {
- async.eachSeries(data, (item, callback) => {
- const eventString = JSON.stringify(item);
-
- redisClient.zrank("events", eventString, (err, reply) => {
- if (reply === null) redisClient.zadd("events", item.id, eventString, callback);
- else callback();
- });
- }, () => {
- // Keep the latest 50 events
- redisClient.zremrangebyrank("events", 0, -51);
- });
- }).catch(err => {
- logSlackError("ERROR: Unable to update Github feed:\n", "```" + JSON.stringify(err) + "```");
- });
-}
-
-
-
-// E X P O R T
-
-module.exports = exports = githubFeed;
diff --git a/views/pages/home.js b/views/pages/home.js
index ab2fc64..dc509bb 100755
--- a/views/pages/home.js
+++ b/views/pages/home.js
@@ -5,6 +5,12 @@
// P A C K A G E
const html = require("choo-async/html");
+// const local = require("app-root-path").require;
+
+
+// const test = local("/views/partials/github-feed");
+// console.log(test());
+// test();
@@ -12,87 +18,90 @@ const html = require("choo-async/html");
// eslint-disable-next-line
const home = () => async (state, emit) => html`
-
-
-
- LBRY is a free, open, and community-run digital marketplace.
- Build the future of content freedom.
-
-
-
+
+
+
+
+ LBRY is a free, open, and community-run digital marketplace.
+ Build the future of content freedom.
+
+
+
-
-
-
-
Development
-
Like a bit of documentation but would prefer to jump in and make your mark on the blockchain? Perhaps add cats to it?
+
+
+
Intro/Overview
+
What if anyone in the world could publish a piece of digital content, anyone else in the world could access it, for free or for payment, and that entire system worked end-to-end without any centralized authority or point of control?
-
Learn the LBRY API
-
-
+
That's the idea behind LBRY. To create a market for accessing and publishing information that is global, decentralized, robust, optimal and complete.
-
-
-
-
+
+
+
Documentation
+
LBRY has enough moving parts to warrant comprehensive documentation. Whether you are interested in learning the technical details of our technology stack or you want to integrate LBRY into your life, you will find everything you need in our docs.
+
+
Explore our documentation
+
+
+
+
+
+
+
+
Contribute
+
Interested in progressing content freedom? Awesome! No matter your experience or skill level, you can make a difference.
+
+
+
+
+
+
+
+
Development
+
Like a bit of documentation but would prefer to jump in and make your mark on the blockchain? Perhaps add cats to it?
+
+
Learn the LBRY API
+
+
+
+
+
`,
- html`
-
- `
+ html``,
+ html``
]}`;
}