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` -
- - -
-
-

Whitepaper

-

LBRY: A Decentralized Digital Content Marketplace

-

Some info here about the whitepaper and a link.

- -

API Specification

-

All of our APIs, in one place

- -

chainquery

- - -

lbry

- - -

lbrycrd

- - -

Lighthouse

- - -

The Front Desk

-

Latest news and musings from the LBRY team

- - -
-
-
- - - `; - */ -}; - -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.

-
-
-

Community

-

Hang out with us! We have a vibrant community of lbryians and would be delighted if you joined us.

+ Learn more about our mission +
+
- -
-
+
+
+

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 +
+
+ +
+
+

Community

+

Hang out with us! We have a vibrant community of lbryians and would be delighted if you joined us.

+ + +
+
+
`, - html` - - ` + html``, + html`` ]}`; }