From b1a5c11ddf159dafd19f36b18bb206e4053ebef5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E3=83=9D=E3=83=BC=E3=83=AB=20=E3=82=A6=E3=82=A7=E3=83=83?= =?UTF-8?q?=E3=83=96?= Date: Tue, 28 Aug 2018 18:57:18 -0500 Subject: [PATCH] Refactor in progress --- .babelrc | 18 ++ .npmrc | 1 + app/client.js | 73 ++++++ .../partials => app/components}/edit-link.js | 15 +- app/components/email-subscribe.js | 26 +++ app/components/footer.js | 68 ++++++ app/components/head.js | 90 ++++++++ app/components/navigation.js | 88 +++++++ app/components/wrapper.js | 34 +++ {public => app/dist}/apple-touch-icon.png | Bin app/dist/bundle.css | 1 + app/dist/bundle.css.map | 1 + {public => app/dist}/favicon.ico | Bin {public => app/dist}/favicon.svg | 0 {public => app/dist}/humans.txt | 0 .../dist}/media/images/background-a.jpg | Bin .../dist}/media/images/carlsagan2.jpg | Bin .../dist}/media/images/doge-meme.jpg | Bin {public => app/dist}/media/images/grid.png | Bin .../dist}/media/images/lbry-green.png | Bin .../dist}/media/images/lbry-overview.png | Bin {public => app/dist}/media/images/missing.png | Bin {public => app/dist}/media/svg/anchor.svg | 0 {public => app/dist}/media/svg/chat.svg | 0 {public => app/dist}/media/svg/discord.svg | 0 {public => app/dist}/media/svg/down.svg | 0 {public => app/dist}/media/svg/flag.svg | 0 {public => app/dist}/media/svg/keyboard.svg | 0 .../dist}/media/svg/logo--white.svg | 0 {public => app/dist}/media/svg/logo.svg | 0 {public => app/dist}/media/svg/monitor.svg | 0 {public => app/dist}/media/svg/reddit.svg | 0 {public => app/dist}/media/svg/slack.svg | 0 .../dist}/media/svg/text-logo--white.svg | 0 {public => app/dist}/media/svg/text-logo.svg | 0 .../dist}/media/svg/watch--green.svg | 0 {public => app/dist}/media/svg/watch.svg | 0 {public => app/dist}/scripts/app.js | 0 {public => app/dist}/scripts/plugins/jets.js | 0 {public => app/dist}/scripts/sockets.js | 4 +- {public => app/dist}/scripts/vendor/zepto.js | 0 {public => app/dist}/type/karmilla/400.woff | Bin {public => app/dist}/type/karmilla/400.woff2 | Bin {public => app/dist}/type/karmilla/400i.woff | Bin {public => app/dist}/type/karmilla/700.woff | Bin {public => app/dist}/type/karmilla/700.woff2 | Bin {public => app/dist}/type/karmilla/700i.woff | Bin {public => app/dist}/type/playfair/400.woff | Bin {public => app/dist}/type/playfair/400.woff2 | Bin {public => app/dist}/type/playfair/400i.woff | Bin {public => app/dist}/type/playfair/400i.woff2 | Bin {public => app/dist}/type/playfair/700.woff | Bin {public => app/dist}/type/playfair/700.woff2 | Bin {public => app/dist}/type/playfair/700i.woff | Bin {public => app/dist}/type/playfair/700i.woff2 | Bin {helpers => app/helpers}/fetch-metadata.js | 10 +- {helpers => app/helpers}/github.js | 0 {helpers => app/helpers}/publish-meme.js | 0 {helpers => app/helpers}/random-string.js | 0 {helpers => app/helpers}/slack.js | 0 {helpers => app/helpers}/upload-image.js | 0 app/index.js | 4 + {modules => app/modules}/markdown-it-sup.js | 0 {modules => app/modules}/relative-date.js | 0 {sass => app/sass}/_layout.scss | 0 sass/style.scss => app/sass/bundle.scss | 0 {sass => app/sass}/init/_base.scss | 0 {sass => app/sass}/init/_colors.scss | 0 {sass => app/sass}/init/_extends.scss | 0 {sass => app/sass}/init/_mixins.scss | 0 {sass => app/sass}/pages/_api.scss | 0 {sass => app/sass}/pages/_contributing.scss | 0 {sass => app/sass}/pages/_documentation.scss | 0 {sass => app/sass}/pages/_home.scss | 3 +- {sass => app/sass}/pages/_page.scss | 3 +- {sass => app/sass}/pages/_tour.scss | 0 {sass => app/sass}/partials/_animation.scss | 0 {sass => app/sass}/partials/_ecosystem.scss | 0 .../sass}/partials/_email-subscribe.scss | 0 .../sass}/partials/_feature-links.scss | 0 {sass => app/sass}/partials/_flash.scss | 0 {sass => app/sass}/partials/_footer.scss | 0 {sass => app/sass}/partials/_github-feed.scss | 2 +- {sass => app/sass}/partials/_glossary.scss | 0 .../sass}/partials/_mission-statement.scss | 0 {sass => app/sass}/partials/_modal.scss | 0 {sass => app/sass}/partials/_navigation.scss | 3 +- {sass => app/sass}/plugins/_prism.scss | 0 {sass => app/sass}/type/_karla.scss | 0 app/views/api.js | 215 ++++++++++++++++++ {views/pages => app/views}/home.js | 4 +- {views => app/views}/partials/api-scripts.js | 0 .../views}/partials/ecosystem-scripts.js | 0 {views => app/views}/partials/ecosystem.js | 0 .../partials/ecosystem/module-applications.js | 0 .../views}/partials/ecosystem/module-lbry.js | 0 .../partials/ecosystem/module-lbrycrd.js | 0 .../ecosystem/submodule-chainquery.js | 0 .../ecosystem/submodule-lighthouse.js | 0 .../partials/ecosystem/submodule-reflector.js | 0 .../partials/ecosystem/submodule-wallet.js | 0 .../views}/partials/feature-links.js | 0 .../views}/partials/glossary-scripts.js | 0 {views => app/views}/partials/glossary-toc.js | 0 app/views/partials/head.js | 0 .../views}/partials/mission-statement.js | 2 +- {views => app/views}/partials/tour-scripts.js | 0 {views => app/views}/partials/tour.js | 4 +- views/pages/page.js => app/views/redirect.js | 32 +-- client.js | 64 ------ config.js | 2 + index.js | 1 - package.json | 54 +++-- public/css/pages/api.css.map | 1 - public/css/style.css | 1 - public/css/style.css.map | 1 - server.js | 21 +- views/components/html.js | 24 -- views/components/layout.js | 30 --- views/pages/api.js | 123 ---------- views/pages/error.js | 29 --- views/partials/email-subscribe.js | 24 -- views/partials/footer.js | 65 ------ views/partials/head.js | 62 ----- views/partials/navigation.js | 59 ----- 125 files changed, 707 insertions(+), 555 deletions(-) create mode 100644 .babelrc create mode 100644 .npmrc create mode 100755 app/client.js rename {views/partials => app/components}/edit-link.js (68%) create mode 100644 app/components/email-subscribe.js create mode 100644 app/components/footer.js create mode 100644 app/components/head.js create mode 100644 app/components/navigation.js create mode 100644 app/components/wrapper.js rename {public => app/dist}/apple-touch-icon.png (100%) create mode 100644 app/dist/bundle.css create mode 100644 app/dist/bundle.css.map rename {public => app/dist}/favicon.ico (100%) rename {public => app/dist}/favicon.svg (100%) rename {public => app/dist}/humans.txt (100%) rename {public => app/dist}/media/images/background-a.jpg (100%) rename {public => app/dist}/media/images/carlsagan2.jpg (100%) rename {public => app/dist}/media/images/doge-meme.jpg (100%) rename {public => app/dist}/media/images/grid.png (100%) rename {public => app/dist}/media/images/lbry-green.png (100%) rename {public => app/dist}/media/images/lbry-overview.png (100%) rename {public => app/dist}/media/images/missing.png (100%) rename {public => app/dist}/media/svg/anchor.svg (100%) rename {public => app/dist}/media/svg/chat.svg (100%) rename {public => app/dist}/media/svg/discord.svg (100%) rename {public => app/dist}/media/svg/down.svg (100%) rename {public => app/dist}/media/svg/flag.svg (100%) rename {public => app/dist}/media/svg/keyboard.svg (100%) rename {public => app/dist}/media/svg/logo--white.svg (100%) rename {public => app/dist}/media/svg/logo.svg (100%) rename {public => app/dist}/media/svg/monitor.svg (100%) rename {public => app/dist}/media/svg/reddit.svg (100%) rename {public => app/dist}/media/svg/slack.svg (100%) rename {public => app/dist}/media/svg/text-logo--white.svg (100%) rename {public => app/dist}/media/svg/text-logo.svg (100%) rename {public => app/dist}/media/svg/watch--green.svg (100%) rename {public => app/dist}/media/svg/watch.svg (100%) rename {public => app/dist}/scripts/app.js (100%) rename {public => app/dist}/scripts/plugins/jets.js (100%) rename {public => app/dist}/scripts/sockets.js (91%) rename {public => app/dist}/scripts/vendor/zepto.js (100%) rename {public => app/dist}/type/karmilla/400.woff (100%) rename {public => app/dist}/type/karmilla/400.woff2 (100%) rename {public => app/dist}/type/karmilla/400i.woff (100%) rename {public => app/dist}/type/karmilla/700.woff (100%) rename {public => app/dist}/type/karmilla/700.woff2 (100%) rename {public => app/dist}/type/karmilla/700i.woff (100%) rename {public => app/dist}/type/playfair/400.woff (100%) rename {public => app/dist}/type/playfair/400.woff2 (100%) rename {public => app/dist}/type/playfair/400i.woff (100%) rename {public => app/dist}/type/playfair/400i.woff2 (100%) rename {public => app/dist}/type/playfair/700.woff (100%) rename {public => app/dist}/type/playfair/700.woff2 (100%) rename {public => app/dist}/type/playfair/700i.woff (100%) rename {public => app/dist}/type/playfair/700i.woff2 (100%) rename {helpers => app/helpers}/fetch-metadata.js (96%) rename {helpers => app/helpers}/github.js (100%) rename {helpers => app/helpers}/publish-meme.js (100%) rename {helpers => app/helpers}/random-string.js (100%) rename {helpers => app/helpers}/slack.js (100%) rename {helpers => app/helpers}/upload-image.js (100%) create mode 100755 app/index.js rename {modules => app/modules}/markdown-it-sup.js (100%) rename {modules => app/modules}/relative-date.js (100%) rename {sass => app/sass}/_layout.scss (100%) rename sass/style.scss => app/sass/bundle.scss (100%) rename {sass => app/sass}/init/_base.scss (100%) rename {sass => app/sass}/init/_colors.scss (100%) rename {sass => app/sass}/init/_extends.scss (100%) rename {sass => app/sass}/init/_mixins.scss (100%) rename {sass => app/sass}/pages/_api.scss (100%) rename {sass => app/sass}/pages/_contributing.scss (100%) rename {sass => app/sass}/pages/_documentation.scss (100%) rename {sass => app/sass}/pages/_home.scss (83%) rename {sass => app/sass}/pages/_page.scss (98%) rename {sass => app/sass}/pages/_tour.scss (100%) rename {sass => app/sass}/partials/_animation.scss (100%) rename {sass => app/sass}/partials/_ecosystem.scss (100%) rename {sass => app/sass}/partials/_email-subscribe.scss (100%) rename {sass => app/sass}/partials/_feature-links.scss (100%) rename {sass => app/sass}/partials/_flash.scss (100%) rename {sass => app/sass}/partials/_footer.scss (100%) rename {sass => app/sass}/partials/_github-feed.scss (98%) rename {sass => app/sass}/partials/_glossary.scss (100%) rename {sass => app/sass}/partials/_mission-statement.scss (100%) rename {sass => app/sass}/partials/_modal.scss (100%) rename {sass => app/sass}/partials/_navigation.scss (81%) rename {sass => app/sass}/plugins/_prism.scss (100%) rename {sass => app/sass}/type/_karla.scss (100%) create mode 100644 app/views/api.js rename {views/pages => app/views}/home.js (97%) mode change 100755 => 100644 rename {views => app/views}/partials/api-scripts.js (100%) rename {views => app/views}/partials/ecosystem-scripts.js (100%) rename {views => app/views}/partials/ecosystem.js (100%) rename {views => app/views}/partials/ecosystem/module-applications.js (100%) rename {views => app/views}/partials/ecosystem/module-lbry.js (100%) rename {views => app/views}/partials/ecosystem/module-lbrycrd.js (100%) rename {views => app/views}/partials/ecosystem/submodule-chainquery.js (100%) rename {views => app/views}/partials/ecosystem/submodule-lighthouse.js (100%) rename {views => app/views}/partials/ecosystem/submodule-reflector.js (100%) rename {views => app/views}/partials/ecosystem/submodule-wallet.js (100%) rename {views => app/views}/partials/feature-links.js (100%) rename {views => app/views}/partials/glossary-scripts.js (100%) rename {views => app/views}/partials/glossary-toc.js (100%) create mode 100644 app/views/partials/head.js rename {views => app/views}/partials/mission-statement.js (96%) rename {views => app/views}/partials/tour-scripts.js (100%) rename {views => app/views}/partials/tour.js (95%) rename views/pages/page.js => app/views/redirect.js (83%) delete mode 100755 client.js delete mode 100755 index.js delete mode 100644 public/css/pages/api.css.map delete mode 100644 public/css/style.css delete mode 100755 public/css/style.css.map delete mode 100755 views/components/html.js delete mode 100755 views/components/layout.js delete mode 100644 views/pages/api.js delete mode 100755 views/pages/error.js delete mode 100644 views/partials/email-subscribe.js delete mode 100755 views/partials/footer.js delete mode 100755 views/partials/head.js delete mode 100755 views/partials/navigation.js diff --git a/.babelrc b/.babelrc new file mode 100644 index 0000000..33a6399 --- /dev/null +++ b/.babelrc @@ -0,0 +1,18 @@ +{ + "presets": [ + "@babel/env" + ], + "plugins": [ + "@babel/proposal-class-properties", + "@babel/proposal-export-namespace-from", + "@babel/proposal-function-sent", + "@babel/proposal-json-strings", + "@babel/proposal-numeric-separator", + "@babel/proposal-throw-expressions", + "@babel/syntax-dynamic-import", + "@babel/syntax-import-meta" + ], + "ignore": [ + "app/dist/*.js" + ] +} diff --git a/.npmrc b/.npmrc new file mode 100644 index 0000000..43c97e7 --- /dev/null +++ b/.npmrc @@ -0,0 +1 @@ +package-lock=false diff --git a/app/client.js b/app/client.js new file mode 100755 index 0000000..bffc1fc --- /dev/null +++ b/app/client.js @@ -0,0 +1,73 @@ +"use strict"; + + + +// P A C K A G E S + +import choo from "choo"; +import html from "choo/html"; +import devtools from "choo-devtools"; +import ssr from "choo-ssr"; + +// V A R I A B L E S + +import head from "./components/head"; +import wrapper from "./components/wrapper"; + + + +// P R O G R A M + +function main() { + const app = choo(); + if (process.env.NODE_ENV !== "production") app.use(devtools()); + + const page = view => ( + shell( + ssr.head( + head, + ssr.state() + ), + ssr.body(wrapper(view)) + ) + ); + + app.use(ssr()); + + app.route("/", page(require("./views/home"))); + app.route("/api", page(require("./views/api"))); + app.route("/api/*", page(require("./views/api"))); + app.route("/*", page(require("./views/redirect"))); + + return app; +} + +if (typeof window !== "undefined") { + const app = main(); + app.mount("html"); +} + + + +// E X P O R T + +module.exports = exports = main; + + + +// H E L P E R + +function shell (head, body) { + return (state, emit) => { + const bodyRender = body(state, emit); + const headRender = head(state, emit); + + return html` + + + ${headRender} + ${bodyRender} + + `; + }; +} diff --git a/views/partials/edit-link.js b/app/components/edit-link.js similarity index 68% rename from views/partials/edit-link.js rename to app/components/edit-link.js index d2755db..dab8e1f 100644 --- a/views/partials/edit-link.js +++ b/app/components/edit-link.js @@ -4,8 +4,8 @@ // P A C K A G E S -const html = require("choo-async/html"); -const local = require("app-root-path").require; +import html from "choo/html"; +import { require as local } from "app-root-path"; // V A R I A B L E @@ -15,7 +15,7 @@ const config = local("/config"); // E X P O R T -module.exports = exports = pagePath => { +export default function (pagePath) { let githubUrl = `https://github.com/${config.github.repo}/edit/${config.github.branch}`; switch(pagePath) { @@ -37,6 +37,11 @@ module.exports = exports = pagePath => { } return html` - ${config.github.linkText} + ${config.github.linkText} `; -}; +} diff --git a/app/components/email-subscribe.js b/app/components/email-subscribe.js new file mode 100644 index 0000000..8ea1d22 --- /dev/null +++ b/app/components/email-subscribe.js @@ -0,0 +1,26 @@ +"use strict"; + + + +// P A C K A G E + +import html from "choo/html"; + + + +// E X P O R T + +export default function () { + return html` +
+ + +
+ +
+ + +
+ `; +} diff --git a/app/components/footer.js b/app/components/footer.js new file mode 100644 index 0000000..a608dd9 --- /dev/null +++ b/app/components/footer.js @@ -0,0 +1,68 @@ +"use strict"; + + + +// P A C K A G E S + +import html from "choo/html"; +import { require as local } from "app-root-path"; + +// V A R I A B L E S + +import editLink from "./edit-link"; +import emailSubscribe from "./email-subscribe"; + +const config = local("/config"); + + + +// E X P O R T + +export default function (state) { + return html` +
+ ${emailSubscribe()} +
+ +
+
+

This website is in beta and under heavy development.
All information should be considered incomplete and possibly incorrect and things may not work as expected.

+ +

+ +

Please do not share or link this site publicly while this message is here. This website is open source and you can contribute to it on Github.

+ + +
+
+ + + + + + + `; +} diff --git a/app/components/head.js b/app/components/head.js new file mode 100644 index 0000000..8d0801b --- /dev/null +++ b/app/components/head.js @@ -0,0 +1,90 @@ +"use strict"; + + + +// P A C K A G E + +import html from "choo/html"; +import { require as local } from "app-root-path"; + +// V A R I A B L E S + +const config = local("/config"); +let title = ""; + + + +// E X P O R T + +module.exports = exports = (state, emit) => { + /* + let pageTitle = ""; + + if (state.route && state.route !== "/" && state.route !== "*") pageTitle = state.route.charAt(0).toUpperCase() + state.route.slice(1); + if (state.params.wildcard) pageTitle = state.params.wildcard.charAt(0).toUpperCase() + state.params.wildcard.slice(1); + + if (pageTitle === "Api") pageTitle = "API"; + + ${pageTitle.length ? pageTitle + " | " : ""}${config.meta.title} · ${config.meta.tagline} + */ + + if (state.route !== "/" && state.params.wildcard) title = `${state.params.wildcard.capitalize()} ∙ LBRY ∙ ${config.meta.tagline}`; + else title = `LBRY ∙ ${config.meta.tagline}`; + + if (state.title !== title) emit(state.events.DOMTITLECHANGE, title); + state.page = state.page || { }; + + // TODO: + // - Support custom metadata (descriptions and whatnot) + // - Update og:url with current URL + + return html` + + ${title} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + `; + + // state.route === "api" || state.route === "api/*" ? : "" +}; + + + +// H E L P E R + +String.prototype.capitalize = function () { + return this.charAt(0).toUpperCase() + this.slice(1); +}; diff --git a/app/components/navigation.js b/app/components/navigation.js new file mode 100644 index 0000000..91ee8f3 --- /dev/null +++ b/app/components/navigation.js @@ -0,0 +1,88 @@ +"use strict"; + + + +// P A C K A G E S + +import html from "choo/html"; +import Nanocomponent from "nanocomponent"; +import xtend from "xtend"; + + + +// E X P O R T + +export default class Navigation extends Nanocomponent { + constructor() { + super(); + + this.state = { + active: true, + links: [ + { + name: "LBRY.io", + title: "Escape the techno scene", + url: "https://lbry.io" + }, + { + name: "Overview", + title: "LBRY overview", + url: "/overview" + }, + { + name: "Resources", + title: "View LBRY resources", + url: "/resources" + }, + { + name: "Contribute", + title: "Contribute to LBRY", + url: "/contribute" + }, + { + name: "Build", + title: "View LBRY resources", + url: "/build" + }, + { + name: "Community", + title: "Interact with LBRY", + url: "/community" + } + ] + }; + + this.renderLink = this.renderLink.bind(this); + } + + createElement(props) { + this.state = xtend(this.state, props); + + return html` + + `; + } + + renderLink(props, i, arr) { // eslint-disable-line + let activeClass; + + if (this.state.href === "/" && props.url === "/") { + activeClass = true; + } else if (props.url !== "/" && this.state.href.indexOf(props.url) >= 0) { + activeClass = true; + } + + return html` + ${props.name} + `; + } +} diff --git a/app/components/wrapper.js b/app/components/wrapper.js new file mode 100644 index 0000000..e03917f --- /dev/null +++ b/app/components/wrapper.js @@ -0,0 +1,34 @@ +"use strict"; + + + +// P A C K A G E + +import html from "choo/html"; + +// V A R I A B L E S + +import footer from "./footer"; +import Navigation from "./navigation"; + +const navigation = new Navigation(); + + + +// E X P O R T + +module.exports = exports = children => (state, emit) => { + return html` +
+ + + ${navigation.render({ href: state.href || "/" })} + + ${children(state, emit)} + ${footer(state, emit)} +
+ `; +}; diff --git a/public/apple-touch-icon.png b/app/dist/apple-touch-icon.png similarity index 100% rename from public/apple-touch-icon.png rename to app/dist/apple-touch-icon.png diff --git a/app/dist/bundle.css b/app/dist/bundle.css new file mode 100644 index 0000000..59c93b7 --- /dev/null +++ b/app/dist/bundle.css @@ -0,0 +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,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}[type=button],[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("/assets/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-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}.__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}.__loading,.tour__content__trends:empty,.tour__content .loader{width:100%;height:10rem;position:relative}.__loading::before,.tour__content__trends:empty::before,.tour__content .loader::before{width:4rem;height:4rem;top:2rem;left:calc(50% - 2rem);animation:spin 2s linear infinite;border-radius:50%;border-style:solid;border-top-color:#3abf7d;border-width:6px;content:"";position:absolute}.__loading::after,.tour__content__trends:empty::after,.tour__content .loader::after{top:7rem;left:0;font-size:1rem;position:absolute;text-align:center;width:100%}@font-face{font-family:"Karla";font-style:normal;font-weight:400;src:local("Karla Regular"),url(https://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(https://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(https://brick.freetls.fastly.net/fonts/karla/700.woff) format("woff")}@keyframes spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}@keyframes slide-down{0%{transform:translateY(-4rem)}10%{transform:translateY(2rem)}90%{transform:translateY(2rem)}100%{transform:translateY(-4rem)}}.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}@media(min-resolution: 96dpi){.ecosystem.expand-left .ecosystem__submodules:first-of-type{height:383px}}@media(min-resolution: 192dpi){.ecosystem.expand-left .ecosystem__submodules:first-of-type{height:378px}}.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}@media(min-resolution: 96dpi){.ecosystem.expand-right .ecosystem__submodules:last-of-type{height:383px}}@media(min-resolution: 192dpi){.ecosystem.expand-right .ecosystem__submodules:last-of-type{height:378px}}.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:rgba(34,34,34,.3)}.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%;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;background-color:#3abf7d;color:#fcfcfc;font-size:1rem;text-align:center}.newsletter-cta__message:not(:empty){padding:1rem}.feature-links{display:grid;grid-gap:2rem;grid-template-columns:repeat(auto-fit, minmax(320px, 1fr));list-style-type:none;padding-top:.5rem}.feature-link{width:320px;min-height:135px;background-color:#fcfcfc;border:1px solid rgba(34,34,34,.1);border-radius:3px;cursor:pointer;display:inline-block;position:relative;transition:box-shadow .2s;vertical-align:top}.feature-link > div:first-of-type{top:85px;left:5%;position:relative;text-align:center;width:90%;z-index:1}.feature-link:not(:hover) .feature-link__background{filter:brightness(0.5)}.feature-link:hover{box-shadow:0 0 15px rgba(34,34,34,.15)}.feature-link:hover .feature-link__title{color:#3abf7d}.feature-link__title{background-color:#fcfcfc;border:1px solid rgba(128,128,128,.1);box-shadow:0 2px 5px rgba(34,34,34,.025);border-radius:3px;box-decoration-break:clone;display:inline;font-size:1rem;line-height:1.7;padding:.25rem .5rem;transition:color .2s;position:relative}.feature-link__background{width:calc(100% + 2px);height:100px;top:-1px;left:-1px;background-color:#3abf7d;border-top-right-radius:3px;border-top-left-radius:3px;transition:filter .2s;overflow:hidden;position:absolute;z-index:0}.feature-link__background img{width:100%;height:100%;object-fit:cover;object-position:center}.flashes{top:4rem;right:0;position:absolute;width:100%;z-index:9}.flash{border:2px solid;border-radius:3px;font-size:1rem;line-height:1.33;padding:.5rem 1rem;position:absolute;right:2rem}.flash:not(.error):not(.info):not(.warning){background-color:#e9f6ef;border-color:#3abf7d}.flash:not(.active){transform:translateY(-4rem)}.flash.active{animation:slide-down 2s linear;transform:translateY(-4rem)}.flash.error{background-color:#f9e9e9;border-color:#db3e3e}.flash.info{background-color:#f3f5f4;border-color:#a3b7ad}.flash.warning{background-color:#f9f9e9;border-color:#dbdb3e}.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}.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)and (max-width: 1000px){.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}}.glossary:not(.sidebar-closed) main{margin-left:250px;width:calc(100vw - 250px)}.glossary:not(.sidebar-closed) .page__header-wrap .inner-wrap,.glossary:not(.sidebar-closed) .page__content .inner-wrap{margin-left:1rem;max-width:initial}.glossary:not(.sidebar-closed) .component--glossary-toc-toggle{left:calc(250px - 25px)}.glossary.sidebar-closed .component--glossary-toc{left:-250px}.glossary.sidebar-closed .component--glossary-toc-toggle{left:0}.component--glossary-toc{width:250px;height:calc(100vh - 4rem);top:4rem;left:0;background-color:#fcfcfc;border-right:1px solid rgba(163,183,173,.3);font-size:.8rem !important;overflow-x:hidden;overflow-y:auto;padding-top:1rem !important;position:fixed !important;z-index:1}.component--glossary-toc li:last-of-type{margin-bottom:1rem}.component--glossary-toc-toggle{width:25px;height:104px;font-size:.7rem;position:absolute;text-orientation:upright;text-transform:uppercase;top:4rem;writing-mode:vertical-rl;z-index:1}.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;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("data:image/svg+xml,%3Csvg viewBox='0 0 320 250' xmlns='http://www.w3.org/2000/svg'%3E %3Cpath fill='%23222' d='M296.05, 85.9l0, 14.1l-138.8, 85.3l-104.6, -51.3l0.2, -7.9l104, 51.2l132.2, -81.2l0, -5.8l-124.8, -60.2l-139.2, 86.1l0, 38.5l131.8, 65.2l137.6, -84.4l3.9, 6l-141.1, 86.4l-139.2, -68.8l0, -46.8l145.8, -90.2l132.2, 63.8Z'/%3E %3Cpath d='M294.25, 150.9l2, -12.6l-12.2, -2.1l0.8, -4.9l17.1, 2.9l-2.8, 17.5l-4.9, -0.8Z'/%3E %3C/svg%3E");background-repeat:no-repeat;background-size:contain;flex:1;top:.5rem}.navigation__item:not(:first-of-type):not([href="https://lbry.io"])::after{width:100%;height:3px;background-color:#3abf7d;content:"";left:0;position:absolute;transition:bottom .2s}.navigation__item:not(:first-of-type):not([href="https://lbry.io"]):not(:hover)::after{bottom:-3px}.navigation__item:not(:first-of-type):not([href="https://lbry.io"]):hover::after,.navigation__item:not(:first-of-type):not([href="https://lbry.io"]).active::after{bottom:0}.navigation__item:not(:first-of-type){color:inherit;font-size:1rem;line-height:4rem}.navigation__item:not([href="https://lbry.io"]){padding-right:.5rem;padding-left:.5rem}.navigation__item[href="https://lbry.io"]{color:#fcfcfc;margin-right:.5rem;padding-right:1rem;padding-left:1rem}.navigation__item[href="https://lbry.io"]:not(:hover)::after{background-color:#222}.navigation__item[href="https://lbry.io"]:hover::after{background-color:#3abf7d}.navigation__item[href="https://lbry.io"]::after{width:100%;height:2rem;top:1rem;left:0;border-radius:3px;content:"";position:absolute;transition:background-color .2s;z-index:-1}.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%}}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}hr{width:100%;height:1px;background-color:rgba(163,183,173,.3);border:none;margin-bottom:1rem}.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}.__slate{width:100%;height:100%;position:relative}.__slate::after{clear:both;content:"";display:block}.api__toc{width:200px;height:calc(100vh - 4rem);top:4rem;left:0;bottom:0;background-color:#fcfcfc;border-right:1px solid rgba(163,183,173,.3);float:left;overflow-x:hidden;overflow-y:auto;position:fixed;z-index:3}.api__toc__search{position:relative}.api__toc__search__field{border-bottom:1px solid rgba(163,183,173,.3);font-size:.8rem;line-height:2rem;padding:.25rem calc(2rem + 4px) .25rem .75rem;width:100%}.api__toc__search__clear{width:1.25rem;height:1.25rem;top:.6rem;right:.75rem;background-color:#222;border-radius:50%;color:#fcfcfc;cursor:pointer;font-size:1rem;line-height:1.15;position:absolute;text-align:center;transition:opacity .2s}.api__toc__search__clear:not(.active){opacity:0;visibility:hidden}.api__toc__search__clear.active{opacity:1;visibility:visible}.api__toc__items{font-size:.8rem;line-height:1.33;list-style-type:none;padding-top:.25rem;padding-bottom:.25rem}.api__toc__item:hover{background-color:rgba(163,183,173,.3)}.api__toc__item a{display:block;padding:.25rem .5rem .25rem .75rem}.api__content{display:grid;float:right;grid-template-columns:repeat(auto-fit, minmax(50%, 1fr));width:calc(100% - 200px)}.api__content h1{font-size:1.5rem;margin-bottom:.5rem}.api__content h2{font-size:1.5rem;margin-bottom:.5rem}.api__content h3{font-size:.8rem;letter-spacing:.1rem;margin-bottom:.25rem;text-transform:uppercase}.api__content p,.api__content ol,.api__content ul{font-size:1rem;line-height:1.5;margin-bottom:1rem}.api__content table{border:1px solid rgba(252,252,252,.1);border-radius:.3rem;border-spacing:0;font-size:.8rem;line-height:1.33;width:100%}.api__content thead{display:none}.api__content th,.api__content td{padding:.5rem 1rem .5rem .5rem}.api__content th{border-bottom:1px solid rgba(252,252,252,.1)}.api__content tr:nth-child(even){background-color:rgba(252,252,252,.1)}.api__content pre{margin-bottom:2rem;padding:1rem;border-radius:.3rem;font-size:.8rem;line-height:1.33;overflow-x:auto;overflow-y:hidden}.api__content__body{border-bottom:1px solid rgba(163,183,173,.3);padding:2rem}.api__content__body pre{border:1px solid rgba(163,183,173,.3)}.api__content__body__arguments{border:1px solid rgba(163,183,173,.3);border-radius:3px;list-style-type:none}.api__content__body__argument:not(:last-of-type){border-bottom:1px solid rgba(163,183,173,.3)}.api__content__body__argument:nth-child(even){background-color:rgba(163,183,173,.1)}.api__content__body__argument .left,.api__content__body__argument .right{padding:.5rem .75rem}.api__content__body__argument .left{border-right:1px solid rgba(163,183,173,.3);width:30%;word-wrap:break-word}.api__content__body__argument .left span{color:#a3b7ad;font-size:.8rem}.api__content__body__argument .left span:not(:first-of-type){margin-left:.5rem}.api__content__body__argument .right{width:70%}.api__content__body__argument::after{clear:both;content:"";display:block}.api__content__example{background-color:#2f3130;border-bottom:1px solid rgba(252,252,252,.1);color:#fcfcfc;padding:2rem}.api__content__example pre{background-color:#222}.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}.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("data:image/svg+xml,%3Csvg viewBox='0 0 800 300' xmlns='http://www.w3.org/2000/svg'%3E %3Cpath fill='%23fcfcfc' d='M567.328, 43.44l72.864, 130.464l0, 82.656l46.944, 0l0, -82.656l72.576, -130.464l-50.688, 0l-44.64, 84.672l-44.64, -84.672l-52.416, 0Z'/%3E %3Cpath fill='%23fcfcfc' d='M520.672, 173.616c22.464, -10.656 34.848, -31.968 34.848, -61.056c0, -44.64 -26.496, -68.832 -81.216, -69.12l-82.368, 0l0, 213.12l46.656, 0l0, -75.168l35.136, 0l31.392, 75.168l52.416, 0l-36.864, -82.944Zm-46.656, -32.544l-35.424, 0l0, -56.448l35.712, 0c23.904, 0 31.968, 12.96 31.968, 27.936c0, 15.264 -8.352, 28.512 -32.256, 28.512Z'/%3E %3Cpath fill='%23fcfcfc' d='M328.864, 150.576c15.552, -7.2 28.512, -23.04 28.512, -48.096c0, -34.848 -25.344, -58.464 -67.104, -58.464l-43.776, 0l-46.368, 0l0, 212.544l89.568, 0c42.048, 0 70.272, -19.584 70.272, -55.872c0, -26.784 -14.976, -42.048 -31.104, -50.112Zm-43.776, -67.104c19.008, 0 25.92, 14.112 25.92, 25.344c0, 11.808 -7.2, 24.768 -25.92, 24.768l-38.592, 0l0, -50.112l38.592, 0Zm2.592, 133.632l-41.184, 0l0, -49.248l41.184, 0c15.264, 0 26.208, 10.08 26.208, 25.056c0, 14.976 -10.656, 24.192 -26.208, 24.192Z'/%3E %3Cpath fill='%23fcfcfc' d='M87.52, 214.8l0, -171.36l-47.232, 0l0, 213.12l130.752, 0l0, -41.76l-83.52, 0Z'/%3E %3C/svg%3E");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;-webkit-box-decoration-break:clone}@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("/assets/media/svg/flag.svg")}.home .contribute ul li:nth-child(2) a::before{background-image:url("/assets/media/svg/keyboard.svg")}.home .contribute ul li:nth-child(3) a::before{background-image:url("/assets/media/svg/anchor.svg")}.home .contribute ul li:nth-child(4) a::before{background-image:url("/assets/media/svg/chat.svg")}.home .contribute ul li:nth-child(5) a::before{background-image:url("/assets/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("/assets/media/svg/discord.svg")}.home .community ul li:nth-child(2) a::before{background-image:url("/assets/media/svg/reddit.svg")}.home .community ul li:nth-child(3) a::before{background-image:url("/assets/media/svg/slack.svg")}.page{display:flex;flex:1;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):not(.tour__sidebar){padding-top:.5rem}.page__content ol li:not(:last-of-type),.page__content ul:not(.feature-links):not(.overview__ecosystem__module):not(.__parents):not(.tour__sidebar) 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):not(.tour__sidebar) + h2,.page__content ul:not(.feature-links):not(.overview__ecosystem__module):not(.__parents):not(.tour__sidebar) + h3,.page__content ul:not(.feature-links):not(.overview__ecosystem__module):not(.__parents):not(.tour__sidebar) + h4,.page__content ul:not(.feature-links):not(.overview__ecosystem__module):not(.__parents):not(.tour__sidebar) + 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):not(.tour__sidebar){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):not(.__plain){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):not(.__plain)::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):not(.__plain)::-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):not(.__plain){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:#27283e;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-color:#222}.page__content{background-image:url("/assets/media/images/grid.png")}.tour{border-top:1px solid rgba(34,34,34,.05);position:relative;top:1rem}.tour.waiting::before{top:0;right:0;bottom:0;left:0;background-color:rgba(252,252,252,.7);content:"";cursor:url("/assets/media/svg/watch--green.svg"),auto;position:absolute;z-index:5}.tour::after{clear:both;content:"";display:block}.tour__sidebar{width:250px;height:100%;float:left;list-style-type:none;padding-top:1rem;padding-right:1rem;vertical-align:top}.tour__sidebar__example{cursor:pointer;position:relative}.tour__sidebar__example::before{width:1rem;height:1rem;top:.5rem;left:0;border:1px solid;border-radius:50%;content:attr(data-example);font-size:.8rem;line-height:1.1;position:absolute;text-align:center}.tour__sidebar__example:not(:last-of-type){margin-bottom:1.5rem}.tour__sidebar__example:not(.active)::before,.tour__sidebar__example:not(.active) button,.tour__sidebar__example:not(.active) span{color:rgba(34,34,34,.3)}.tour__sidebar__example.active button,.tour__sidebar__example:hover button{color:#3abf7d}.tour__sidebar__example.active::before,.tour__sidebar__example.active span,.tour__sidebar__example:hover::before,.tour__sidebar__example:hover span{color:#222}.tour__sidebar__example::before,.tour__sidebar__example button,.tour__sidebar__example span{transition:color .2s}.tour__sidebar__example button{background-color:transparent;font-size:1.25rem;font-weight:600;padding-left:1.3rem}.tour__sidebar__example span{display:block;font-size:1rem}.tour__content{width:calc(100% - 250px);height:100%;min-height:500px;border-left:1px solid rgba(34,34,34,.05);float:right;padding:1rem 0 1rem 1rem;vertical-align:top}.tour__content .loader::after{content:"Processing request"}.tour__content__meme{overflow-y:auto;position:relative}.tour__content__meme::after{clear:both;content:"";display:block}.tour__content__meme__canvas{float:left;margin-right:2%;width:48%}.tour__content__meme__canvas canvas{width:100%;height:100%;background-color:rgba(58,191,125,.3);margin-bottom:1rem}.tour__content__meme__canvas__thumbnail{width:5rem;height:5rem;border-style:solid;border-width:2px;margin-bottom:1rem;object-fit:contain;object-position:center}.tour__content__meme__canvas__thumbnail:not(:last-of-type){margin-right:1rem}.tour__content__meme__canvas__thumbnail:not(.selected){border-color:transparent}.tour__content__meme__canvas__thumbnail.selected{border-color:#222}.tour__content__meme__editor{float:right;width:48%}.tour__content__meme__editor h2.__metadata{margin-top:3rem}.tour__content__meme__editor fieldset{border:none}.tour__content__meme__editor fieldset:not(:last-of-type){margin-bottom:1rem}.tour__content__meme__editor label{color:rgba(34,34,34,.3);display:block;font-size:.8rem;font-weight:600;letter-spacing:.05rem;margin-bottom:.025rem;text-transform:uppercase;width:100%}@media(min-width: 901px){.tour__content__meme__editor input:not([type=checkbox]):not([type=submit]),.tour__content__meme__editor select,.tour__content__meme__editor textarea{font-size:1.25rem}}@media(max-width: 900px){.tour__content__meme__editor input:not([type=checkbox]):not([type=submit]),.tour__content__meme__editor select,.tour__content__meme__editor textarea{font-size:1.05rem}}.tour__content__meme__editor input:not([type=checkbox]):not([type=file]):not([type=submit]){border-bottom:2px solid;padding-bottom:.15rem;transition:all .2s;width:100%}.tour__content__meme__editor input:not([type=file]):not([type=submit]):not(:hover):not(:active){border-color:#222}.tour__content__meme__editor input:not([type=file]):not([type=submit]):hover,.tour__content__meme__editor input:not([type=file]):not([type=submit]):active{border-color:#3abf7d}.tour__content__meme__editor input[type=checkbox]{width:1.25rem;height:1.25rem;border:2px solid;margin-right:.5rem;position:relative;top:.35rem}.tour__content__meme__editor input[type=checkbox]::after{width:100%;height:100%;content:"✓";font-size:1.5rem;line-height:1rem;position:absolute}.tour__content__meme__editor input[type=checkbox]:not(:checked)::after{color:transparent}.tour__content__meme__editor input[type=checkbox]:checked::after{color:#3abf7d}.tour__content__meme__editor select,.tour__content__meme__editor textarea{border-bottom:2px solid;width:100%}.tour__content__meme__editor select:not(:hover):not(:active),.tour__content__meme__editor textarea:not(:hover):not(:active){border-color:#222}.tour__content__meme__editor select:hover,.tour__content__meme__editor select:active,.tour__content__meme__editor textarea:hover,.tour__content__meme__editor textarea:active{border-color:#3abf7d}.tour__content__meme__editor select{background-image:url("/assets/media/svg/down.svg");background-position:99% center;background-repeat:no-repeat;background-size:1rem;padding-right:2rem}.tour__content__meme__editor textarea{min-height:100px;resize:vertical}.tour__content__trends{display:grid;grid-gap:2%;grid-template-columns:32% 32% 32%;overflow-y:auto;position:relative}.tour__content__trends:empty::after{content:"Fetching trending content from LBRY"}.tour__content__trend img{width:100%;height:175px;cursor:pointer;display:block;margin-bottom:.5rem;object-fit:cover;object-position:center;position:relative}.tour__content__trend figcaption{cursor:pointer;font-size:1rem;line-height:1.33}.tour__content__trend figcaption span{color:rgba(34,34,34,.3);display:block;font-size:.8rem;letter-spacing:.025rem}.tour__content__urlbar{border:1px solid rgba(34,34,34,.05);display:flex;margin-bottom:1rem}.tour__content__urlbar button,.tour__content__urlbar input,.tour__content__urlbar span{float:left;vertical-align:middle}.tour__content__urlbar button,.tour__content__urlbar span{height:100%;line-height:2rem}.tour__content__urlbar button{color:#fcfcfc;font-size:1rem;position:relative;text-transform:lowercase;transition:background-color .2s;width:6rem}.tour__content__urlbar button::after{width:calc(100% + 2px);height:calc(100% + 2px);top:-1px;left:-1px;content:"";position:absolute;transition:background-color .2s;z-index:-1}.tour__content__urlbar button:not(:hover){background-color:#222}.tour__content__urlbar button:not(:hover)::after{background-color:#222}.tour__content__urlbar button:hover{background-color:#3abf7d}.tour__content__urlbar button:hover::after{background-color:#3abf7d}.tour__content__urlbar input{font-size:1rem;width:calc(100% - 9.5rem)}.tour__content__urlbar input::placeholder{color:rgba(34,34,34,.5);opacity:1}.tour__content__urlbar span{user-select:none;-ms-user-select:none;-moz-user-select:none;-webkit-user-select:none;color:rgba(34,34,34,.5);cursor:default;font-size:1rem;text-align:right;width:3.5rem}.token.comment,.token.operator,.token.punctuation{color:#6c6c87}.token.boolean,.token.null,.token.url{color:#86c2f7}.token.number{color:#f2ac5f}.token.string{color:#fae079}/*# sourceMappingURL=bundle.css.map */ diff --git a/app/dist/bundle.css.map b/app/dist/bundle.css.map new file mode 100644 index 0000000..8825d7c --- /dev/null +++ b/app/dist/bundle.css.map @@ -0,0 +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/_feature-links.scss","../sass/partials/_flash.scss","../sass/partials/_footer.scss","../sass/partials/_github-feed.scss","../sass/partials/_glossary.scss","../sass/partials/_navigation.scss","../sass/partials/_mission-statement.scss","../sass/partials/_modal.scss","../sass/_layout.scss","../sass/pages/_api.scss","../sass/pages/_contributing.scss","../sass/pages/_documentation.scss","../sass/pages/_home.scss","../sass/pages/_page.scss","../sass/pages/_tour.scss","../sass/plugins/_prism.scss"],"names":[],"mappings":"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ACA,iBAGF,YACE,kBACA,iBACA,iBAEA,yBALF,YAMI,mBACA,mBAGF,yBAVF,YAWI,mBACA,mBAGF,mBdzCA,WACA,WACA,cc6CA,0FACE,aAIJ,GACE,sBAEA,sCACA,YACA,mBAGF,OACE,gBAEA,iBflFQ,QemFR,iBACA,iBACA,yCACA,oBACA,uCACA,eACA,gBACA,WACA,UAEA,2BACE,kBAGF,yBAlBF,OAmBI,gBAGF,yBAtBF,OAuBI,iBAGF,uBACE,qBAGF,SACE,mBACA,2BAGF,SACE,gBACA,0BAGF,cACE,6BACA,cAEA,iBf/HM,QegIN,kBACA,cACA,eACA,cACA,kBACA,iBAEA,kBACA,kBCjIJ,SACE,uBACA,kBAEA,gBfYA,WACA,WACA,ceSF,UACE,sCACA,yBAEA,iBhBtCQ,QgBuCR,4CACA,WACA,kBACA,gBACA,eACA,UAGF,kBACE,kBAGF,yBACE,6CACA,gBACA,iBACA,8CACA,WAGF,yBACE,6BACA,uBAEA,iBhB9DQ,KgB+DR,kBACA,MhBjEQ,QgBkER,eACA,eACA,iBACA,kBACA,kBACA,uBAEA,sCACE,UACA,kBAGF,gCACE,UACA,mBAIJ,iBACE,gBACA,iBACA,qBACA,mBACA,sBAIA,sBACE,sCAGF,kBACE,cACA,mCAqBJ,cACE,aACA,YACA,yDACA,yBAEA,iBACE,iBACA,oBAGF,iBACE,iBACA,oBAGF,iBACE,gBACA,qBACA,qBACA,yBAGF,kDACE,eACA,gBACA,mBAGF,oBACE,sCACA,oBACA,iBACA,gBACA,iBACA,WAGF,oBACE,aAGF,kCACE,+BAGF,iBACE,6CAGF,iCACE,sCAGF,kBACE,gCAEA,oBACA,gBACA,iBACA,gBACA,kBAIJ,oBACE,6CACA,aAEA,wBACE,sCAIJ,+BACE,sCACA,kBACA,qBAIA,iDACE,6CAGF,8CACE,sCAGF,yEAEE,qBAGF,oCACE,4CACA,UACA,qBAEA,yCACE,MhBzNI,QgB0NJ,gBAEA,6DACE,kBAKN,qCACE,UAGF,qCflNA,WACA,WACA,ceqNF,uBACE,yBACA,6CACA,MhBjPQ,QgBkPR,aAEA,2BACE,iBh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,oBAGF,6BACE,cACA,eA8BJ,eACE,sDAEA,yCACA,YACA,yBACA,mBAKE,8BACE,6BAKN,qBACE,gBACA,kBAEA,4BpB1IA,WACA,WACA,coB6IF,6BACE,WACA,gBACA,UAEA,oCACE,uBAEA,qCACA,mBAIJ,wCACE,uBAEA,mBACA,iBACA,mBACA,mBACA,uBAEA,2DACE,kBAGF,uDACE,yBAGF,iDACE,arBpMM,KqBwMV,6BACE,YACA,UAEA,2CACE,gBAGF,sCACE,YAEA,yDACE,mBAIJ,mCACE,wBACA,cACA,gBACA,gBACA,sBACA,sBACA,yBACA,WAMA,yBAHF,qJAII,mBAGF,yBAPF,qJAQI,mBAKF,4FACE,wBACA,sBACA,mBACA,WAIA,gGACE,arBzPE,KqB4PJ,2JAEE,arBxPE,QqB4PN,kDACE,6BAEA,iBACA,mBACA,kBACA,WAEA,yDACE,uBAEA,YACA,iBACA,iBACA,kBAGF,uEACE,kBAGF,iEACE,MrBlRE,QqBuRR,0EAEE,wBACA,WAEA,4HACE,arBnSI,KqBsSN,8KAEE,arBlSI,QqBsSR,oCACE,mDACA,+BACA,4BACA,qBACA,mBAGF,sCACE,iBACA,gBAIJ,uBACE,aACA,YACA,kCACA,gBACA,kBAKE,oCACE,8CAMJ,0BACE,wBAEA,eACA,cACA,oBACA,iBACA,uBACA,kBAGF,iCACE,eACA,eACA,iBAEA,sCACE,wBACA,cACA,gBACA,uBAKN,uBACE,oCACA,aACA,mBAEA,uFAGE,WACA,sBAGF,0DAEE,YACA,iBAGF,8BACE,MrBxXM,QqByXN,eACA,kBACA,yBACA,gCACA,WAEA,qCACE,+CACA,mBAEA,WACA,kBACA,gCACA,WAGF,0CACE,iBrBzYI,KqB2YJ,iDACE,iBrB5YE,KqBgZN,oCACE,iBrB3YI,QqB6YJ,2CACE,iBrB9YE,QqBmZR,6BACE,eACA,0BAEA,0CACE,wBACA,UAIJ,4BpBzVA,iBAEA,qBACA,sBACA,yBoBuVE,wBACA,eACA,eACA,iBACA,aCzaF,kDAGE,cAGF,sCAGE,cAGF,cACE,cAGF,cACE","file":"bundle.css"} \ No newline at end of file diff --git a/public/favicon.ico b/app/dist/favicon.ico similarity index 100% rename from public/favicon.ico rename to app/dist/favicon.ico diff --git a/public/favicon.svg b/app/dist/favicon.svg similarity index 100% rename from public/favicon.svg rename to app/dist/favicon.svg diff --git a/public/humans.txt b/app/dist/humans.txt similarity index 100% rename from public/humans.txt rename to app/dist/humans.txt diff --git a/public/media/images/background-a.jpg b/app/dist/media/images/background-a.jpg similarity index 100% rename from public/media/images/background-a.jpg rename to app/dist/media/images/background-a.jpg diff --git a/public/media/images/carlsagan2.jpg b/app/dist/media/images/carlsagan2.jpg similarity index 100% rename from public/media/images/carlsagan2.jpg rename to app/dist/media/images/carlsagan2.jpg diff --git a/public/media/images/doge-meme.jpg b/app/dist/media/images/doge-meme.jpg similarity index 100% rename from public/media/images/doge-meme.jpg rename to app/dist/media/images/doge-meme.jpg diff --git a/public/media/images/grid.png b/app/dist/media/images/grid.png similarity index 100% rename from public/media/images/grid.png rename to app/dist/media/images/grid.png diff --git a/public/media/images/lbry-green.png b/app/dist/media/images/lbry-green.png similarity index 100% rename from public/media/images/lbry-green.png rename to app/dist/media/images/lbry-green.png diff --git a/public/media/images/lbry-overview.png b/app/dist/media/images/lbry-overview.png similarity index 100% rename from public/media/images/lbry-overview.png rename to app/dist/media/images/lbry-overview.png diff --git a/public/media/images/missing.png b/app/dist/media/images/missing.png similarity index 100% rename from public/media/images/missing.png rename to app/dist/media/images/missing.png diff --git a/public/media/svg/anchor.svg b/app/dist/media/svg/anchor.svg similarity index 100% rename from public/media/svg/anchor.svg rename to app/dist/media/svg/anchor.svg diff --git a/public/media/svg/chat.svg b/app/dist/media/svg/chat.svg similarity index 100% rename from public/media/svg/chat.svg rename to app/dist/media/svg/chat.svg diff --git a/public/media/svg/discord.svg b/app/dist/media/svg/discord.svg similarity index 100% rename from public/media/svg/discord.svg rename to app/dist/media/svg/discord.svg diff --git a/public/media/svg/down.svg b/app/dist/media/svg/down.svg similarity index 100% rename from public/media/svg/down.svg rename to app/dist/media/svg/down.svg diff --git a/public/media/svg/flag.svg b/app/dist/media/svg/flag.svg similarity index 100% rename from public/media/svg/flag.svg rename to app/dist/media/svg/flag.svg diff --git a/public/media/svg/keyboard.svg b/app/dist/media/svg/keyboard.svg similarity index 100% rename from public/media/svg/keyboard.svg rename to app/dist/media/svg/keyboard.svg diff --git a/public/media/svg/logo--white.svg b/app/dist/media/svg/logo--white.svg similarity index 100% rename from public/media/svg/logo--white.svg rename to app/dist/media/svg/logo--white.svg diff --git a/public/media/svg/logo.svg b/app/dist/media/svg/logo.svg similarity index 100% rename from public/media/svg/logo.svg rename to app/dist/media/svg/logo.svg diff --git a/public/media/svg/monitor.svg b/app/dist/media/svg/monitor.svg similarity index 100% rename from public/media/svg/monitor.svg rename to app/dist/media/svg/monitor.svg diff --git a/public/media/svg/reddit.svg b/app/dist/media/svg/reddit.svg similarity index 100% rename from public/media/svg/reddit.svg rename to app/dist/media/svg/reddit.svg diff --git a/public/media/svg/slack.svg b/app/dist/media/svg/slack.svg similarity index 100% rename from public/media/svg/slack.svg rename to app/dist/media/svg/slack.svg diff --git a/public/media/svg/text-logo--white.svg b/app/dist/media/svg/text-logo--white.svg similarity index 100% rename from public/media/svg/text-logo--white.svg rename to app/dist/media/svg/text-logo--white.svg diff --git a/public/media/svg/text-logo.svg b/app/dist/media/svg/text-logo.svg similarity index 100% rename from public/media/svg/text-logo.svg rename to app/dist/media/svg/text-logo.svg diff --git a/public/media/svg/watch--green.svg b/app/dist/media/svg/watch--green.svg similarity index 100% rename from public/media/svg/watch--green.svg rename to app/dist/media/svg/watch--green.svg diff --git a/public/media/svg/watch.svg b/app/dist/media/svg/watch.svg similarity index 100% rename from public/media/svg/watch.svg rename to app/dist/media/svg/watch.svg diff --git a/public/scripts/app.js b/app/dist/scripts/app.js similarity index 100% rename from public/scripts/app.js rename to app/dist/scripts/app.js diff --git a/public/scripts/plugins/jets.js b/app/dist/scripts/plugins/jets.js similarity index 100% rename from public/scripts/plugins/jets.js rename to app/dist/scripts/plugins/jets.js diff --git a/public/scripts/sockets.js b/app/dist/scripts/sockets.js similarity index 91% rename from public/scripts/sockets.js rename to app/dist/scripts/sockets.js index c676860..adcebe9 100644 --- a/public/scripts/sockets.js +++ b/app/dist/scripts/sockets.js @@ -1,8 +1,8 @@ -/* global $, ws */ "use strict"; +/* global $, log, ws */ "use strict"; -const log = console.log; // eslint-disable-line +// const log = console.log; // eslint-disable-line diff --git a/public/scripts/vendor/zepto.js b/app/dist/scripts/vendor/zepto.js similarity index 100% rename from public/scripts/vendor/zepto.js rename to app/dist/scripts/vendor/zepto.js diff --git a/public/type/karmilla/400.woff b/app/dist/type/karmilla/400.woff similarity index 100% rename from public/type/karmilla/400.woff rename to app/dist/type/karmilla/400.woff diff --git a/public/type/karmilla/400.woff2 b/app/dist/type/karmilla/400.woff2 similarity index 100% rename from public/type/karmilla/400.woff2 rename to app/dist/type/karmilla/400.woff2 diff --git a/public/type/karmilla/400i.woff b/app/dist/type/karmilla/400i.woff similarity index 100% rename from public/type/karmilla/400i.woff rename to app/dist/type/karmilla/400i.woff diff --git a/public/type/karmilla/700.woff b/app/dist/type/karmilla/700.woff similarity index 100% rename from public/type/karmilla/700.woff rename to app/dist/type/karmilla/700.woff diff --git a/public/type/karmilla/700.woff2 b/app/dist/type/karmilla/700.woff2 similarity index 100% rename from public/type/karmilla/700.woff2 rename to app/dist/type/karmilla/700.woff2 diff --git a/public/type/karmilla/700i.woff b/app/dist/type/karmilla/700i.woff similarity index 100% rename from public/type/karmilla/700i.woff rename to app/dist/type/karmilla/700i.woff diff --git a/public/type/playfair/400.woff b/app/dist/type/playfair/400.woff similarity index 100% rename from public/type/playfair/400.woff rename to app/dist/type/playfair/400.woff diff --git a/public/type/playfair/400.woff2 b/app/dist/type/playfair/400.woff2 similarity index 100% rename from public/type/playfair/400.woff2 rename to app/dist/type/playfair/400.woff2 diff --git a/public/type/playfair/400i.woff b/app/dist/type/playfair/400i.woff similarity index 100% rename from public/type/playfair/400i.woff rename to app/dist/type/playfair/400i.woff diff --git a/public/type/playfair/400i.woff2 b/app/dist/type/playfair/400i.woff2 similarity index 100% rename from public/type/playfair/400i.woff2 rename to app/dist/type/playfair/400i.woff2 diff --git a/public/type/playfair/700.woff b/app/dist/type/playfair/700.woff similarity index 100% rename from public/type/playfair/700.woff rename to app/dist/type/playfair/700.woff diff --git a/public/type/playfair/700.woff2 b/app/dist/type/playfair/700.woff2 similarity index 100% rename from public/type/playfair/700.woff2 rename to app/dist/type/playfair/700.woff2 diff --git a/public/type/playfair/700i.woff b/app/dist/type/playfair/700i.woff similarity index 100% rename from public/type/playfair/700i.woff rename to app/dist/type/playfair/700i.woff diff --git a/public/type/playfair/700i.woff2 b/app/dist/type/playfair/700i.woff2 similarity index 100% rename from public/type/playfair/700i.woff2 rename to app/dist/type/playfair/700i.woff2 diff --git a/helpers/fetch-metadata.js b/app/helpers/fetch-metadata.js similarity index 96% rename from helpers/fetch-metadata.js rename to app/helpers/fetch-metadata.js index 97f2dd3..61f8f2b 100644 --- a/helpers/fetch-metadata.js +++ b/app/helpers/fetch-metadata.js @@ -6,17 +6,17 @@ const local = require("app-root-path").require; const prism = require("prismjs"); -const raw = require("nanohtml/raw"); +const raw = require("choo/html/raw"); const request = require("request-promise-native"); const stringifyObject = require("stringify-object"); // V A R I A B L E S -const randomString = local("/helpers/random-string"); +const randomString = local("/app/helpers/random-string"); const loadLanguages = require("prismjs/components/"); -const logSlackError = local("/helpers/slack"); -const publishMeme = local("/helpers/publish-meme"); -const uploadImage = local("/helpers/upload-image"); +const logSlackError = local("/app/helpers/slack"); +const publishMeme = local("/app/helpers/publish-meme"); +const uploadImage = local("/app/helpers/upload-image"); loadLanguages(["json"]); diff --git a/helpers/github.js b/app/helpers/github.js similarity index 100% rename from helpers/github.js rename to app/helpers/github.js diff --git a/helpers/publish-meme.js b/app/helpers/publish-meme.js similarity index 100% rename from helpers/publish-meme.js rename to app/helpers/publish-meme.js diff --git a/helpers/random-string.js b/app/helpers/random-string.js similarity index 100% rename from helpers/random-string.js rename to app/helpers/random-string.js diff --git a/helpers/slack.js b/app/helpers/slack.js similarity index 100% rename from helpers/slack.js rename to app/helpers/slack.js diff --git a/helpers/upload-image.js b/app/helpers/upload-image.js similarity index 100% rename from helpers/upload-image.js rename to app/helpers/upload-image.js diff --git a/app/index.js b/app/index.js new file mode 100755 index 0000000..138becd --- /dev/null +++ b/app/index.js @@ -0,0 +1,4 @@ +// "use strict"; require("make-promises-safe"); const app = require("./server.js"); // eslint-disable-line + +"use strict"; require("@babel/register"); require("@babel/polyfill"); +module.exports = exports = require("./client.js"); diff --git a/modules/markdown-it-sup.js b/app/modules/markdown-it-sup.js similarity index 100% rename from modules/markdown-it-sup.js rename to app/modules/markdown-it-sup.js diff --git a/modules/relative-date.js b/app/modules/relative-date.js similarity index 100% rename from modules/relative-date.js rename to app/modules/relative-date.js diff --git a/sass/_layout.scss b/app/sass/_layout.scss similarity index 100% rename from sass/_layout.scss rename to app/sass/_layout.scss diff --git a/sass/style.scss b/app/sass/bundle.scss similarity index 100% rename from sass/style.scss rename to app/sass/bundle.scss diff --git a/sass/init/_base.scss b/app/sass/init/_base.scss similarity index 100% rename from sass/init/_base.scss rename to app/sass/init/_base.scss diff --git a/sass/init/_colors.scss b/app/sass/init/_colors.scss similarity index 100% rename from sass/init/_colors.scss rename to app/sass/init/_colors.scss diff --git a/sass/init/_extends.scss b/app/sass/init/_extends.scss similarity index 100% rename from sass/init/_extends.scss rename to app/sass/init/_extends.scss diff --git a/sass/init/_mixins.scss b/app/sass/init/_mixins.scss similarity index 100% rename from sass/init/_mixins.scss rename to app/sass/init/_mixins.scss diff --git a/sass/pages/_api.scss b/app/sass/pages/_api.scss similarity index 100% rename from sass/pages/_api.scss rename to app/sass/pages/_api.scss diff --git a/sass/pages/_contributing.scss b/app/sass/pages/_contributing.scss similarity index 100% rename from sass/pages/_contributing.scss rename to app/sass/pages/_contributing.scss diff --git a/sass/pages/_documentation.scss b/app/sass/pages/_documentation.scss similarity index 100% rename from sass/pages/_documentation.scss rename to app/sass/pages/_documentation.scss diff --git a/sass/pages/_home.scss b/app/sass/pages/_home.scss similarity index 83% rename from sass/pages/_home.scss rename to app/sass/pages/_home.scss index 55396a9..d178ef5 100644 --- a/sass/pages/_home.scss +++ b/app/sass/pages/_home.scss @@ -27,7 +27,8 @@ .hero { align-items: center; background-color: $black; - background-image: url("/assets/media/svg/text-logo--white.svg"); + // background-image: url("/assets/media/svg/text-logo--white.svg"); + background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 800 300' xmlns='http://www.w3.org/2000/svg'%3E %3Cpath fill='%23fcfcfc' d='M567.328, 43.44l72.864, 130.464l0, 82.656l46.944, 0l0, -82.656l72.576, -130.464l-50.688, 0l-44.64, 84.672l-44.64, -84.672l-52.416, 0Z'/%3E %3Cpath fill='%23fcfcfc' d='M520.672, 173.616c22.464, -10.656 34.848, -31.968 34.848, -61.056c0, -44.64 -26.496, -68.832 -81.216, -69.12l-82.368, 0l0, 213.12l46.656, 0l0, -75.168l35.136, 0l31.392, 75.168l52.416, 0l-36.864, -82.944Zm-46.656, -32.544l-35.424, 0l0, -56.448l35.712, 0c23.904, 0 31.968, 12.96 31.968, 27.936c0, 15.264 -8.352, 28.512 -32.256, 28.512Z'/%3E %3Cpath fill='%23fcfcfc' d='M328.864, 150.576c15.552, -7.2 28.512, -23.04 28.512, -48.096c0, -34.848 -25.344, -58.464 -67.104, -58.464l-43.776, 0l-46.368, 0l0, 212.544l89.568, 0c42.048, 0 70.272, -19.584 70.272, -55.872c0, -26.784 -14.976, -42.048 -31.104, -50.112Zm-43.776, -67.104c19.008, 0 25.92, 14.112 25.92, 25.344c0, 11.808 -7.2, 24.768 -25.92, 24.768l-38.592, 0l0, -50.112l38.592, 0Zm2.592, 133.632l-41.184, 0l0, -49.248l41.184, 0c15.264, 0 26.208, 10.08 26.208, 25.056c0, 14.976 -10.656, 24.192 -26.208, 24.192Z'/%3E %3Cpath fill='%23fcfcfc' d='M87.52, 214.8l0, -171.36l-47.232, 0l0, 213.12l130.752, 0l0, -41.76l-83.52, 0Z'/%3E %3C/svg%3E"); background-position: center; background-repeat: no-repeat; display: flex; diff --git a/sass/pages/_page.scss b/app/sass/pages/_page.scss similarity index 98% rename from sass/pages/_page.scss rename to app/sass/pages/_page.scss index 46f4a3d..815c895 100644 --- a/sass/pages/_page.scss +++ b/app/sass/pages/_page.scss @@ -345,7 +345,8 @@ .page__header { - background-image: url("/assets/media/images/background-a.jpg"); + // background-image: url("/assets/media/images/background-a.jpg"); + background-color: $black; } .page__content { diff --git a/sass/pages/_tour.scss b/app/sass/pages/_tour.scss similarity index 100% rename from sass/pages/_tour.scss rename to app/sass/pages/_tour.scss diff --git a/sass/partials/_animation.scss b/app/sass/partials/_animation.scss similarity index 100% rename from sass/partials/_animation.scss rename to app/sass/partials/_animation.scss diff --git a/sass/partials/_ecosystem.scss b/app/sass/partials/_ecosystem.scss similarity index 100% rename from sass/partials/_ecosystem.scss rename to app/sass/partials/_ecosystem.scss diff --git a/sass/partials/_email-subscribe.scss b/app/sass/partials/_email-subscribe.scss similarity index 100% rename from sass/partials/_email-subscribe.scss rename to app/sass/partials/_email-subscribe.scss diff --git a/sass/partials/_feature-links.scss b/app/sass/partials/_feature-links.scss similarity index 100% rename from sass/partials/_feature-links.scss rename to app/sass/partials/_feature-links.scss diff --git a/sass/partials/_flash.scss b/app/sass/partials/_flash.scss similarity index 100% rename from sass/partials/_flash.scss rename to app/sass/partials/_flash.scss diff --git a/sass/partials/_footer.scss b/app/sass/partials/_footer.scss similarity index 100% rename from sass/partials/_footer.scss rename to app/sass/partials/_footer.scss diff --git a/sass/partials/_github-feed.scss b/app/sass/partials/_github-feed.scss similarity index 98% rename from sass/partials/_github-feed.scss rename to app/sass/partials/_github-feed.scss index dadc0ab..70fe8bc 100644 --- a/sass/partials/_github-feed.scss +++ b/app/sass/partials/_github-feed.scss @@ -24,7 +24,7 @@ padding-bottom: 2rem; } - @media (min-width: 901px) { + @media (min-width: 901px) and (max-width: 1000px) { padding-right: 1rem; padding-left: 1rem; } diff --git a/sass/partials/_glossary.scss b/app/sass/partials/_glossary.scss similarity index 100% rename from sass/partials/_glossary.scss rename to app/sass/partials/_glossary.scss diff --git a/sass/partials/_mission-statement.scss b/app/sass/partials/_mission-statement.scss similarity index 100% rename from sass/partials/_mission-statement.scss rename to app/sass/partials/_mission-statement.scss diff --git a/sass/partials/_modal.scss b/app/sass/partials/_modal.scss similarity index 100% rename from sass/partials/_modal.scss rename to app/sass/partials/_modal.scss diff --git a/sass/partials/_navigation.scss b/app/sass/partials/_navigation.scss similarity index 81% rename from sass/partials/_navigation.scss rename to app/sass/partials/_navigation.scss index 5e9ba5c..efaaa7a 100644 --- a/sass/partials/_navigation.scss +++ b/app/sass/partials/_navigation.scss @@ -56,7 +56,8 @@ @include hide-text; width: 10rem; height: 3rem; - background-image: url("/assets/media/svg/logo.svg"); + // background-image: url("/assets/media/svg/logo.svg"); + background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 320 250' xmlns='http://www.w3.org/2000/svg'%3E %3Cpath fill='%23222' d='M296.05, 85.9l0, 14.1l-138.8, 85.3l-104.6, -51.3l0.2, -7.9l104, 51.2l132.2, -81.2l0, -5.8l-124.8, -60.2l-139.2, 86.1l0, 38.5l131.8, 65.2l137.6, -84.4l3.9, 6l-141.1, 86.4l-139.2, -68.8l0, -46.8l145.8, -90.2l132.2, 63.8Z'/%3E %3Cpath d='M294.25, 150.9l2, -12.6l-12.2, -2.1l0.8, -4.9l17.1, 2.9l-2.8, 17.5l-4.9, -0.8Z'/%3E %3C/svg%3E"); background-repeat: no-repeat; background-size: contain; flex: 1; diff --git a/sass/plugins/_prism.scss b/app/sass/plugins/_prism.scss similarity index 100% rename from sass/plugins/_prism.scss rename to app/sass/plugins/_prism.scss diff --git a/sass/type/_karla.scss b/app/sass/type/_karla.scss similarity index 100% rename from sass/type/_karla.scss rename to app/sass/type/_karla.scss diff --git a/app/views/api.js b/app/views/api.js new file mode 100644 index 0000000..cb16b24 --- /dev/null +++ b/app/views/api.js @@ -0,0 +1,215 @@ +"use strict"; + + + +// P A C K A G E S + +import dedent from "dedent"; +import fs from "graceful-fs"; +import html from "choo/html"; +import raw from "choo/html/raw"; + +const fetch = require("make-fetch-happen").defaults({ cacheManager: "./cache" }); + +// V A R I A B L E + +const apiScripts = ""; + + + +// E X P O R T + +module.exports = exports = state => { + return generate(state.params.wildcard).then(response => { + // console.log(response); + return html`${response}`; + }); + // generate(state.params.wildcard, response => html`${response}`); +}; + + + +/* +module.exports = exports = () => state => { + console.log(state); + parseApiFile(state.params.wildcard).then(response => { + return html` +
+ + +
${raw(createApiContent(response).join(""))}
+
+ + ${raw(apiScripts)} + `; + }); +}; +*/ + +function generate(stuff, callback) { + /* + parseApiFile(stuff).then(response => { + const test = ` +
+ + +
${raw(createApiContent(response).join(""))}
+
+ + ${raw(apiScripts)} + `; + + return callback(test); + }); + */ + + return new Promise((resolve, reject) => { // eslint-disable-line + parseApiFile(stuff).then(response => { + const test = ` +
+ + +
${raw(createApiContent(response).join(""))}
+
+ + ${raw(apiScripts)} + `; + + return resolve(test); + }); + }); + + /* + Promise.all([parseApiFile(stuff)]).then(response => { + response = response[0]; + + const test = ` +
+ + +
${raw(createApiContent(response).join(""))}
+
+ + ${raw(apiScripts)} + `; + + return callback(test); + }); + */ +} + +// H E L P E R S + +function createApiContent(apiDetails) { + const apiContent = []; + + for (const apiDetail of apiDetails) { + let apiDetailsReturns = ""; + if (apiDetail.returns) apiDetailsReturns = JSON.parse(JSON.stringify(apiDetail.returns)); + + apiContent.push(` +
+

${apiDetail.name}

+

${apiDetail.description}

+ + ${apiDetail.arguments.length ? `

Arguments

` : ""} + +

Returns

+
${dedent(apiDetailsReturns)}
+
+ +
+
// example(s) for ${apiDetail.name} to come later
+
+ `); + } + + return apiContent; +} + +function createApiSidebar(apiDetails) { + const apiSidebar = []; + + for (const apiDetail of apiDetails) { + apiSidebar.push(` +
  • + + ${apiDetail.name} + +
  • + `); + } + + return apiSidebar; +} + +function parseApiFile(urlSlug) { + let apiFileLink; + + if (!urlSlug || urlSlug === "api" || urlSlug === "protocol") apiFileLink = process.env.NODE_ENV === "development" ? + "https://rawgit.com/lbryio/lbry/master/docs/api.json" : + "https://cdn.rawgit.com/lbryio/lbry/5b3103e4/docs/api.json" + ; + + if (urlSlug === "blockchain") apiFileLink = process.env.NODE_ENV === "development" ? + "https://rawgit.com/lbryio/lbrycrd/add_api_docs_scripts/contrib/devtools/generated/api_v1.json" : + "https://cdn.rawgit.com/lbryio/lbrycrd/add_api_docs_scripts/contrib/devtools/generated/api_v1.json" + ; + + if (!apiFileLink) return; // TODO: Error handling + + return fetch(apiFileLink).then(() => fetch(apiFileLink, { + cache: "no-cache" // forces a conditional request + })).then(res => res.json().then(body => body)); // res.status 304 = cache validated +} + +function renderArguments(args) { + const argumentContent = []; + + for (const arg of args) { + argumentContent.push(` +
  • +
    + ${arg.name}
    + ${arg.is_required === true ? "" : "optional" }${arg.type} +
    + +
    ${typeof arg.description === "string" ? arg.description.replace(//g, ">") : ""}
    +
  • + `); + } + + return argumentContent; +} diff --git a/views/pages/home.js b/app/views/home.js old mode 100755 new mode 100644 similarity index 97% rename from views/pages/home.js rename to app/views/home.js index fb6908d..028bf14 --- a/views/pages/home.js +++ b/app/views/home.js @@ -4,13 +4,13 @@ // P A C K A G E -const html = require("choo/html"); +import html from "choo/html"; // E X P O R T -module.exports = exports = () => async () => html` +module.exports = exports = () => html`
    diff --git a/views/partials/api-scripts.js b/app/views/partials/api-scripts.js similarity index 100% rename from views/partials/api-scripts.js rename to app/views/partials/api-scripts.js diff --git a/views/partials/ecosystem-scripts.js b/app/views/partials/ecosystem-scripts.js similarity index 100% rename from views/partials/ecosystem-scripts.js rename to app/views/partials/ecosystem-scripts.js diff --git a/views/partials/ecosystem.js b/app/views/partials/ecosystem.js similarity index 100% rename from views/partials/ecosystem.js rename to app/views/partials/ecosystem.js diff --git a/views/partials/ecosystem/module-applications.js b/app/views/partials/ecosystem/module-applications.js similarity index 100% rename from views/partials/ecosystem/module-applications.js rename to app/views/partials/ecosystem/module-applications.js diff --git a/views/partials/ecosystem/module-lbry.js b/app/views/partials/ecosystem/module-lbry.js similarity index 100% rename from views/partials/ecosystem/module-lbry.js rename to app/views/partials/ecosystem/module-lbry.js diff --git a/views/partials/ecosystem/module-lbrycrd.js b/app/views/partials/ecosystem/module-lbrycrd.js similarity index 100% rename from views/partials/ecosystem/module-lbrycrd.js rename to app/views/partials/ecosystem/module-lbrycrd.js diff --git a/views/partials/ecosystem/submodule-chainquery.js b/app/views/partials/ecosystem/submodule-chainquery.js similarity index 100% rename from views/partials/ecosystem/submodule-chainquery.js rename to app/views/partials/ecosystem/submodule-chainquery.js diff --git a/views/partials/ecosystem/submodule-lighthouse.js b/app/views/partials/ecosystem/submodule-lighthouse.js similarity index 100% rename from views/partials/ecosystem/submodule-lighthouse.js rename to app/views/partials/ecosystem/submodule-lighthouse.js diff --git a/views/partials/ecosystem/submodule-reflector.js b/app/views/partials/ecosystem/submodule-reflector.js similarity index 100% rename from views/partials/ecosystem/submodule-reflector.js rename to app/views/partials/ecosystem/submodule-reflector.js diff --git a/views/partials/ecosystem/submodule-wallet.js b/app/views/partials/ecosystem/submodule-wallet.js similarity index 100% rename from views/partials/ecosystem/submodule-wallet.js rename to app/views/partials/ecosystem/submodule-wallet.js diff --git a/views/partials/feature-links.js b/app/views/partials/feature-links.js similarity index 100% rename from views/partials/feature-links.js rename to app/views/partials/feature-links.js diff --git a/views/partials/glossary-scripts.js b/app/views/partials/glossary-scripts.js similarity index 100% rename from views/partials/glossary-scripts.js rename to app/views/partials/glossary-scripts.js diff --git a/views/partials/glossary-toc.js b/app/views/partials/glossary-toc.js similarity index 100% rename from views/partials/glossary-toc.js rename to app/views/partials/glossary-toc.js diff --git a/app/views/partials/head.js b/app/views/partials/head.js new file mode 100644 index 0000000..e69de29 diff --git a/views/partials/mission-statement.js b/app/views/partials/mission-statement.js similarity index 96% rename from views/partials/mission-statement.js rename to app/views/partials/mission-statement.js index 937ab6e..73609b8 100644 --- a/views/partials/mission-statement.js +++ b/app/views/partials/mission-statement.js @@ -4,7 +4,7 @@ // P A C K A G E -const html = require("choo-async/html"); +const html = require("choo/html"); diff --git a/views/partials/tour-scripts.js b/app/views/partials/tour-scripts.js similarity index 100% rename from views/partials/tour-scripts.js rename to app/views/partials/tour-scripts.js diff --git a/views/partials/tour.js b/app/views/partials/tour.js similarity index 95% rename from views/partials/tour.js rename to app/views/partials/tour.js index 796fc5f..4a82c67 100644 --- a/views/partials/tour.js +++ b/app/views/partials/tour.js @@ -5,8 +5,8 @@ // P A C K A G E S const dedent = require("dedent"); -const html = require("choo-async/html"); -const raw = require("nanohtml/raw"); +const html = require("choo/html"); +const raw = require("choo/html/raw"); diff --git a/views/pages/page.js b/app/views/redirect.js similarity index 83% rename from views/pages/page.js rename to app/views/redirect.js index 6d567f0..0f7c5ab 100644 --- a/views/pages/page.js +++ b/app/views/redirect.js @@ -4,18 +4,22 @@ // P A C K A G E S -const decamelize = require("decamelize"); -const exists = require("fs-exists-sync"); -const fm = require("front-matter"); -const fs = require("graceful-fs"); -const html = require("choo-async/html"); -const local = require("app-root-path").require; +import decamelize from "decamelize"; +import exists from "fs-exists-sync"; +import fm from "front-matter"; +import fs from "graceful-fs"; +import html from "choo/html"; +import { require as local } from "app-root-path"; +import raw from "choo/html/raw"; + +// V A R I A B L E S + const numberRegex = /^[0-9]/g; const md = require("markdown-it")({ html: true, typographer: true -}).use(local("modules/markdown-it-sup")) +}).use(local("app/modules/markdown-it-sup")) .use(require("markdown-it-anchor"), { slugify: stringToSlugify => { let finalString = stringToSlugify @@ -40,13 +44,11 @@ const md = require("markdown-it")({ } })); -const raw = require("nanohtml/raw"); - // E X P O R T -module.exports = exports = () => async state => { +module.exports = exports = (state, emit) => { // eslint-disable-line let path; if (state.route === "resources/*") path = `resources/${state.params.wildcard}`; @@ -80,9 +82,9 @@ module.exports = exports = () => async state => { if (markdownFileDetails.attributes.meta) newMetadata = markdownFileDetails.attributes.meta; let pageScript = ""; - if (path === "glossary") pageScript = ""; - if (path === "overview") pageScript = ""; - if (path === "tour") pageScript = ""; + if (path === "glossary") pageScript = ""; + if (path === "overview") pageScript = ""; + if (path === "tour") pageScript = ""; return html`
    @@ -138,10 +140,10 @@ function partialFinder(markdownBody) { for (const partial of partials) { const filename = decamelize(partial, "-").replace("<", "").replace("/>", ""); - const fileExistsTest = exists(`./views/partials/${filename}.js`); // `local` results in error if used here and file !exist + const fileExistsTest = exists(`./app/views/partials/${filename}.js`); // `local` results in error if used here and file !exist if (fileExistsTest) { - const partialFunction = local(`/views/partials/${filename}.js`); + const partialFunction = local(`/app/views/partials/${filename}.js`); if (filename === "ecosystem" || filename === "feature-links") { const neatPartial = new partialFunction; diff --git a/client.js b/client.js deleted file mode 100755 index 5ebb41a..0000000 --- a/client.js +++ /dev/null @@ -1,64 +0,0 @@ -"use strict"; - - - -// P A C K A G E S - -const async = require("choo-async"); -const bundles = require("choo-bundles"); -const choo = require("choo"); -const data = require("choo-data"); -const devtools = require("choo-devtools"); -const ssr = require("choo-ssr"); - -// V A R I A B L E S - -const head = require("./views/partials/head"); -const html = require("./views/components/html"); -const layout = require("./views/components/layout"); - - - -// P R O G R A M - -function main() { - const app = async(choo()); - - app.use(ssr()); - app.use(data()); - app.use(bundles()); - - if (process.env.NODE_ENV !== "production") app.use(devtools()); - - const page = content => (html( - ssr.head( - head(), - bundles.assets() - ), - ssr.body( - async.catch( - layout(content), - require("./views/pages/error")(app) - ), - ssr.state() - ) - )); - - app.route("/", page(require("./views/pages/home")(app))); - app.route("/api", page(require("./views/pages/api")(app))); - app.route("/api/*", page(require("./views/pages/api")(app))); - app.route("/*", page(require("./views/pages/page")(app))); - - return app; -} - -if (typeof window !== "undefined") { - const app = main(); - app.mount("html"); -} - - - -// E X P O R T - -module.exports = exports = main; diff --git a/config.js b/config.js index c90d641..1dd009d 100644 --- a/config.js +++ b/config.js @@ -2,6 +2,8 @@ +// E X P O R T + module.exports = exports = { ga: "UA-60403362-1", github: { diff --git a/index.js b/index.js deleted file mode 100755 index 356e1f8..0000000 --- a/index.js +++ /dev/null @@ -1 +0,0 @@ -"use strict"; require("make-promises-safe"); const app = require("./server.js"); // eslint-disable-line diff --git a/package.json b/package.json index e2e702e..b6b53f5 100755 --- a/package.json +++ b/package.json @@ -1,28 +1,24 @@ { "author": "LBRY Team", - "babel": { - "presets": [ - "env", - "stage-2" - ] - }, "dependencies": { + "@babel/polyfill": "^7.0.0", "@octokit/rest": "^15.10.0", "app-root-path": "^2.1.0", "async": "^2.6.1", + "async-es": "^2.6.1", "choo": "^6.13.0", "choo-async": "^0.1.1", - "choo-bundles": "^0.2.4", - "choo-data": "^0.1.1", + "choo-devtools": "^2.5.1", "choo-ssr": "^0.2.1", "choo-websocket": "^2.0.0", + "colorette": "^1.0.1", "cors": "^2.8.4", - "cron": "^1.4.0", + "cron": "^1.4.1", "date-format-lite": "^17.7.0", "decamelize": "^2.0.0", "dedent": "^0.7.0", "dotenv": "^6.0.0", - "fastify": "^1.10.0", + "fastify": "^1.11.0", "fastify-compress": "^0.6.0", "fastify-helmet": "^2.1.0", "fastify-plugin": "^1.2.0", @@ -37,7 +33,7 @@ "markdown-it": "^8.4.2", "markdown-it-anchor": "^5.0.2", "markdown-it-wikilinks": "^1.0.1", - "nanohtml": "^1.2.4", + "nanocomponent": "^6.5.2", "prismjs": "^1.15.0", "redis": "^2.8.0", "request": "^2.88.0", @@ -45,38 +41,50 @@ "slack-node": "^0.1.8", "socket.io": "^2.1.1", "stringify-object": "^3.2.2", - "turbocolor": "^2.6.1" + "xtend": "^4.0.1" }, "description": "Documentation for the LBRY protocol and associated projects", "devDependencies": { - "babel-preset-env": "^1.7.0", - "babel-preset-stage-2": "^6.24.1", - "choo-devtools": "^2.5.1", + "@babel/cli": "^7.0.0", + "@babel/core": "^7.0.0", + "@babel/plugin-external-helpers": "7.0.0", + "@babel/plugin-proposal-class-properties": "7.0.0", + "@babel/plugin-proposal-decorators": "7.0.0", + "@babel/plugin-proposal-export-namespace-from": "7.0.0", + "@babel/plugin-proposal-function-sent": "7.0.0", + "@babel/plugin-proposal-json-strings": "7.0.0", + "@babel/plugin-proposal-numeric-separator": "7.0.0", + "@babel/plugin-proposal-throw-expressions": "7.0.0", + "@babel/plugin-syntax-dynamic-import": "7.0.0", + "@babel/plugin-syntax-import-meta": "7.0.0", + "@babel/preset-env": "^7.0.0", + "@babel/register": "^7.0.0", "nodemon": "^1.18.3", "npm-run-all": "^4.1.3", "sass": "^1.13.0", "snazzy": "^7.1.1", "standardx": "^2.1.0", - "updates": "^4.2.0" + "updates": "^4.2.1" }, "engines": { "node": "10.2.x" }, + "main": "server.js", "name": "lbry.tech", "private": true, "scripts": { - "lint": "standardx --verbose | snazzy", - "start": "NODE_ENV=production node server", - "test": "run-p test:*", - "test:dependencies": "updates -u ./", + "css": "sass --update app/sass:app/dist --style compressed", + "start": "npm run css && NODE_ENV=production node server", + "test": "run-s test:*", + "test:dependencies": "updates --update ./", "test:lint": "standardx --verbose | snazzy", "watch": "run-p watch:*", - "watch:sass": "sass --watch sass:public/css --style compressed", - "watch:server": "NODE_ENV=development nodemon index.js --ignore 'public/'" + "watch:sass": "sass --watch app/sass:app/dist --style compressed", + "watch:server": "NODE_ENV=development nodemon server --ignore 'public/'" }, "standardx": { "ignore": [ - "public" + "app/dist" ] }, "version": "0.0.0" diff --git a/public/css/pages/api.css.map b/public/css/pages/api.css.map deleted file mode 100644 index ef32df7..0000000 --- a/public/css/pages/api.css.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sourceRoot":"","sources":[],"names":[],"mappings":"","file":"api.css"} \ No newline at end of file diff --git a/public/css/style.css b/public/css/style.css deleted file mode 100644 index 1dac1b7..0000000 --- a/public/css/style.css +++ /dev/null @@ -1 +0,0 @@ -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,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}[type=button],[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("/assets/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-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}.__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}.__loading,.tour__content__trends:empty,.tour__content .loader{width:100%;height:10rem;position:relative}.__loading::before,.tour__content__trends:empty::before,.tour__content .loader::before{width:4rem;height:4rem;top:2rem;left:calc(50% - 2rem);animation:spin 2s linear infinite;border-radius:50%;border-style:solid;border-top-color:#3abf7d;border-width:6px;content:"";position:absolute}.__loading::after,.tour__content__trends:empty::after,.tour__content .loader::after{top:7rem;left:0;font-size:1rem;position:absolute;text-align:center;width:100%}@font-face{font-family:"Karla";font-style:normal;font-weight:400;src:local("Karla Regular"),url(https://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(https://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(https://brick.freetls.fastly.net/fonts/karla/700.woff) format("woff")}@keyframes spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}@keyframes slide-down{0%{transform:translateY(-4rem)}10%{transform:translateY(2rem)}90%{transform:translateY(2rem)}100%{transform:translateY(-4rem)}}.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}@media(min-resolution: 96dpi){.ecosystem.expand-left .ecosystem__submodules:first-of-type{height:383px}}@media(min-resolution: 192dpi){.ecosystem.expand-left .ecosystem__submodules:first-of-type{height:378px}}.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}@media(min-resolution: 96dpi){.ecosystem.expand-right .ecosystem__submodules:last-of-type{height:383px}}@media(min-resolution: 192dpi){.ecosystem.expand-right .ecosystem__submodules:last-of-type{height:378px}}.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:rgba(34,34,34,.3)}.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%;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;background-color:#3abf7d;color:#fcfcfc;font-size:1rem;text-align:center}.newsletter-cta__message:not(:empty){padding:1rem}.feature-links{display:grid;grid-gap:2rem;grid-template-columns:repeat(auto-fit, minmax(320px, 1fr));list-style-type:none;padding-top:.5rem}.feature-link{width:320px;min-height:135px;background-color:#fcfcfc;border:1px solid rgba(34,34,34,.1);border-radius:3px;cursor:pointer;display:inline-block;position:relative;transition:box-shadow .2s;vertical-align:top}.feature-link > div:first-of-type{top:85px;left:5%;position:relative;text-align:center;width:90%;z-index:1}.feature-link:not(:hover) .feature-link__background{filter:brightness(0.5)}.feature-link:hover{box-shadow:0 0 15px rgba(34,34,34,.15)}.feature-link:hover .feature-link__title{color:#3abf7d}.feature-link__title{background-color:#fcfcfc;border:1px solid rgba(128,128,128,.1);box-shadow:0 2px 5px rgba(34,34,34,.025);border-radius:3px;box-decoration-break:clone;display:inline;font-size:1rem;line-height:1.7;padding:.25rem .5rem;transition:color .2s;position:relative}.feature-link__background{width:calc(100% + 2px);height:100px;top:-1px;left:-1px;background-color:#3abf7d;border-top-right-radius:3px;border-top-left-radius:3px;transition:filter .2s;overflow:hidden;position:absolute;z-index:0}.feature-link__background img{width:100%;height:100%;object-fit:cover;object-position:center}.flashes{top:4rem;right:0;position:absolute;width:100%;z-index:9}.flash{border:2px solid;border-radius:3px;font-size:1rem;line-height:1.33;padding:.5rem 1rem;position:absolute;right:2rem}.flash:not(.error):not(.info):not(.warning){background-color:#e9f6ef;border-color:#3abf7d}.flash:not(.active){transform:translateY(-4rem)}.flash.active{animation:slide-down 2s linear;transform:translateY(-4rem)}.flash.error{background-color:#f9e9e9;border-color:#db3e3e}.flash.info{background-color:#f3f5f4;border-color:#a3b7ad}.flash.warning{background-color:#f9f9e9;border-color:#dbdb3e}.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}.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}}.glossary:not(.sidebar-closed) main{margin-left:250px;width:calc(100vw - 250px)}.glossary:not(.sidebar-closed) .page__header-wrap .inner-wrap,.glossary:not(.sidebar-closed) .page__content .inner-wrap{margin-left:1rem;max-width:initial}.glossary:not(.sidebar-closed) .component--glossary-toc-toggle{left:calc(250px - 25px)}.glossary.sidebar-closed .component--glossary-toc{left:-250px}.glossary.sidebar-closed .component--glossary-toc-toggle{left:0}.component--glossary-toc{width:250px;height:calc(100vh - 4rem);top:4rem;left:0;background-color:#fcfcfc;border-right:1px solid rgba(163,183,173,.3);font-size:.8rem !important;overflow-x:hidden;overflow-y:auto;padding-top:1rem !important;position:fixed !important;z-index:1}.component--glossary-toc li:last-of-type{margin-bottom:1rem}.component--glossary-toc-toggle{width:25px;height:104px;font-size:.7rem;position:absolute;text-orientation:upright;text-transform:uppercase;top:4rem;writing-mode:vertical-rl;z-index:1}.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;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("/assets/media/svg/logo.svg");background-repeat:no-repeat;background-size:contain;flex:1;top:.5rem}.navigation__item:not(:first-of-type):not([href="https://lbry.io"])::after{width:100%;height:3px;background-color:#3abf7d;content:"";left:0;position:absolute;transition:bottom .2s}.navigation__item:not(:first-of-type):not([href="https://lbry.io"]):not(:hover)::after{bottom:-3px}.navigation__item:not(:first-of-type):not([href="https://lbry.io"]):hover::after,.navigation__item:not(:first-of-type):not([href="https://lbry.io"]).active::after{bottom:0}.navigation__item:not(:first-of-type){color:inherit;font-size:1rem;line-height:4rem}.navigation__item:not([href="https://lbry.io"]){padding-right:.5rem;padding-left:.5rem}.navigation__item[href="https://lbry.io"]{color:#fcfcfc;margin-right:.5rem;padding-right:1rem;padding-left:1rem}.navigation__item[href="https://lbry.io"]:not(:hover)::after{background-color:#222}.navigation__item[href="https://lbry.io"]:hover::after{background-color:#3abf7d}.navigation__item[href="https://lbry.io"]::after{width:100%;height:2rem;top:1rem;left:0;border-radius:3px;content:"";position:absolute;transition:background-color .2s;z-index:-1}.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%}}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}hr{width:100%;height:1px;background-color:rgba(163,183,173,.3);border:none;margin-bottom:1rem}.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}.__slate{width:100%;height:100%;position:relative}.__slate::after{clear:both;content:"";display:block}.api__toc{width:200px;height:calc(100vh - 4rem);top:4rem;left:0;bottom:0;background-color:#fcfcfc;border-right:1px solid rgba(163,183,173,.3);float:left;overflow-x:hidden;overflow-y:auto;position:fixed;z-index:3}.api__toc__search{position:relative}.api__toc__search__field{border-bottom:1px solid rgba(163,183,173,.3);font-size:.8rem;line-height:2rem;padding:.25rem calc(2rem + 4px) .25rem .75rem;width:100%}.api__toc__search__clear{width:1.25rem;height:1.25rem;top:.6rem;right:.75rem;background-color:#222;border-radius:50%;color:#fcfcfc;cursor:pointer;font-size:1rem;line-height:1.15;position:absolute;text-align:center;transition:opacity .2s}.api__toc__search__clear:not(.active){opacity:0;visibility:hidden}.api__toc__search__clear.active{opacity:1;visibility:visible}.api__toc__items{font-size:.8rem;line-height:1.33;list-style-type:none;padding-top:.25rem;padding-bottom:.25rem}.api__toc__item:hover{background-color:rgba(163,183,173,.3)}.api__toc__item a{display:block;padding:.25rem .5rem .25rem .75rem}.api__content{display:grid;float:right;grid-template-columns:repeat(auto-fit, minmax(50%, 1fr));width:calc(100% - 200px)}.api__content h1{font-size:1.5rem;margin-bottom:.5rem}.api__content h2{font-size:1.5rem;margin-bottom:.5rem}.api__content h3{font-size:.8rem;letter-spacing:.1rem;margin-bottom:.25rem;text-transform:uppercase}.api__content p,.api__content ol,.api__content ul{font-size:1rem;line-height:1.5;margin-bottom:1rem}.api__content table{border:1px solid rgba(252,252,252,.1);border-radius:.3rem;border-spacing:0;font-size:.8rem;line-height:1.33;width:100%}.api__content thead{display:none}.api__content th,.api__content td{padding:.5rem 1rem .5rem .5rem}.api__content th{border-bottom:1px solid rgba(252,252,252,.1)}.api__content tr:nth-child(even){background-color:rgba(252,252,252,.1)}.api__content pre{margin-bottom:2rem;padding:1rem;border-radius:.3rem;font-size:.8rem;line-height:1.33;overflow-x:auto;overflow-y:hidden}.api__content__body{border-bottom:1px solid rgba(163,183,173,.3);padding:2rem}.api__content__body pre{border:1px solid rgba(163,183,173,.3)}.api__content__body__arguments{border:1px solid rgba(163,183,173,.3);border-radius:3px;list-style-type:none}.api__content__body__argument:not(:last-of-type){border-bottom:1px solid rgba(163,183,173,.3)}.api__content__body__argument:nth-child(even){background-color:rgba(163,183,173,.1)}.api__content__body__argument .left,.api__content__body__argument .right{padding:.5rem .75rem}.api__content__body__argument .left{border-right:1px solid rgba(163,183,173,.3);width:30%;word-wrap:break-word}.api__content__body__argument .left span{color:#a3b7ad;font-size:.8rem}.api__content__body__argument .left span:not(:first-of-type){margin-left:.5rem}.api__content__body__argument .right{width:70%}.api__content__body__argument::after{clear:both;content:"";display:block}.api__content__example{background-color:#2f3130;border-bottom:1px solid rgba(252,252,252,.1);color:#fcfcfc;padding:2rem}.api__content__example pre{background-color:#222}.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}.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("/assets/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;-webkit-box-decoration-break:clone}@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("/assets/media/svg/flag.svg")}.home .contribute ul li:nth-child(2) a::before{background-image:url("/assets/media/svg/keyboard.svg")}.home .contribute ul li:nth-child(3) a::before{background-image:url("/assets/media/svg/anchor.svg")}.home .contribute ul li:nth-child(4) a::before{background-image:url("/assets/media/svg/chat.svg")}.home .contribute ul li:nth-child(5) a::before{background-image:url("/assets/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("/assets/media/svg/discord.svg")}.home .community ul li:nth-child(2) a::before{background-image:url("/assets/media/svg/reddit.svg")}.home .community ul li:nth-child(3) a::before{background-image:url("/assets/media/svg/slack.svg")}.page{display:flex;flex:1;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):not(.tour__sidebar){padding-top:.5rem}.page__content ol li:not(:last-of-type),.page__content ul:not(.feature-links):not(.overview__ecosystem__module):not(.__parents):not(.tour__sidebar) 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):not(.tour__sidebar) + h2,.page__content ul:not(.feature-links):not(.overview__ecosystem__module):not(.__parents):not(.tour__sidebar) + h3,.page__content ul:not(.feature-links):not(.overview__ecosystem__module):not(.__parents):not(.tour__sidebar) + h4,.page__content ul:not(.feature-links):not(.overview__ecosystem__module):not(.__parents):not(.tour__sidebar) + 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):not(.tour__sidebar){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):not(.__plain){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):not(.__plain)::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):not(.__plain)::-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):not(.__plain){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:#27283e;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("/assets/media/images/background-a.jpg")}.page__content{background-image:url("/assets/media/images/grid.png")}.tour{border-top:1px solid rgba(34,34,34,.05);position:relative;top:1rem}.tour.waiting::before{top:0;right:0;bottom:0;left:0;background-color:rgba(252,252,252,.7);content:"";cursor:url("/assets/media/svg/watch--green.svg"),auto;position:absolute;z-index:5}.tour::after{clear:both;content:"";display:block}.tour__sidebar{width:250px;height:100%;float:left;list-style-type:none;padding-top:1rem;padding-right:1rem;vertical-align:top}.tour__sidebar__example{cursor:pointer;position:relative}.tour__sidebar__example::before{width:1rem;height:1rem;top:.5rem;left:0;border:1px solid;border-radius:50%;content:attr(data-example);font-size:.8rem;line-height:1.1;position:absolute;text-align:center}.tour__sidebar__example:not(:last-of-type){margin-bottom:1.5rem}.tour__sidebar__example:not(.active)::before,.tour__sidebar__example:not(.active) button,.tour__sidebar__example:not(.active) span{color:rgba(34,34,34,.3)}.tour__sidebar__example.active button,.tour__sidebar__example:hover button{color:#3abf7d}.tour__sidebar__example.active::before,.tour__sidebar__example.active span,.tour__sidebar__example:hover::before,.tour__sidebar__example:hover span{color:#222}.tour__sidebar__example::before,.tour__sidebar__example button,.tour__sidebar__example span{transition:color .2s}.tour__sidebar__example button{background-color:transparent;font-size:1.25rem;font-weight:600;padding-left:1.3rem}.tour__sidebar__example span{display:block;font-size:1rem}.tour__content{width:calc(100% - 250px);height:100%;min-height:500px;border-left:1px solid rgba(34,34,34,.05);float:right;padding:1rem 0 1rem 1rem;vertical-align:top}.tour__content .loader::after{content:"Processing request"}.tour__content__meme{overflow-y:auto;position:relative}.tour__content__meme::after{clear:both;content:"";display:block}.tour__content__meme__canvas{float:left;margin-right:2%;width:48%}.tour__content__meme__canvas canvas{width:100%;height:100%;background-color:rgba(58,191,125,.3);margin-bottom:1rem}.tour__content__meme__canvas__thumbnail{width:5rem;height:5rem;border-style:solid;border-width:2px;margin-bottom:1rem;object-fit:contain;object-position:center}.tour__content__meme__canvas__thumbnail:not(:last-of-type){margin-right:1rem}.tour__content__meme__canvas__thumbnail:not(.selected){border-color:transparent}.tour__content__meme__canvas__thumbnail.selected{border-color:#222}.tour__content__meme__editor{float:right;width:48%}.tour__content__meme__editor h2.__metadata{margin-top:3rem}.tour__content__meme__editor fieldset{border:none}.tour__content__meme__editor fieldset:not(:last-of-type){margin-bottom:1rem}.tour__content__meme__editor label{color:rgba(34,34,34,.3);display:block;font-size:.8rem;font-weight:600;letter-spacing:.05rem;margin-bottom:.025rem;text-transform:uppercase;width:100%}@media(min-width: 901px){.tour__content__meme__editor input:not([type=checkbox]):not([type=submit]),.tour__content__meme__editor select,.tour__content__meme__editor textarea{font-size:1.25rem}}@media(max-width: 900px){.tour__content__meme__editor input:not([type=checkbox]):not([type=submit]),.tour__content__meme__editor select,.tour__content__meme__editor textarea{font-size:1.05rem}}.tour__content__meme__editor input:not([type=checkbox]):not([type=file]):not([type=submit]){border-bottom:2px solid;padding-bottom:.15rem;transition:all .2s;width:100%}.tour__content__meme__editor input:not([type=file]):not([type=submit]):not(:hover):not(:active){border-color:#222}.tour__content__meme__editor input:not([type=file]):not([type=submit]):hover,.tour__content__meme__editor input:not([type=file]):not([type=submit]):active{border-color:#3abf7d}.tour__content__meme__editor input[type=checkbox]{width:1.25rem;height:1.25rem;border:2px solid;margin-right:.5rem;position:relative;top:.35rem}.tour__content__meme__editor input[type=checkbox]::after{width:100%;height:100%;content:"✓";font-size:1.5rem;line-height:1rem;position:absolute}.tour__content__meme__editor input[type=checkbox]:not(:checked)::after{color:transparent}.tour__content__meme__editor input[type=checkbox]:checked::after{color:#3abf7d}.tour__content__meme__editor select,.tour__content__meme__editor textarea{border-bottom:2px solid;width:100%}.tour__content__meme__editor select:not(:hover):not(:active),.tour__content__meme__editor textarea:not(:hover):not(:active){border-color:#222}.tour__content__meme__editor select:hover,.tour__content__meme__editor select:active,.tour__content__meme__editor textarea:hover,.tour__content__meme__editor textarea:active{border-color:#3abf7d}.tour__content__meme__editor select{background-image:url("/assets/media/svg/down.svg");background-position:99% center;background-repeat:no-repeat;background-size:1rem;padding-right:2rem}.tour__content__meme__editor textarea{min-height:100px;resize:vertical}.tour__content__trends{display:grid;grid-gap:2%;grid-template-columns:32% 32% 32%;overflow-y:auto;position:relative}.tour__content__trends:empty::after{content:"Fetching trending content from LBRY"}.tour__content__trend img{width:100%;height:175px;cursor:pointer;display:block;margin-bottom:.5rem;object-fit:cover;object-position:center;position:relative}.tour__content__trend figcaption{cursor:pointer;font-size:1rem;line-height:1.33}.tour__content__trend figcaption span{color:rgba(34,34,34,.3);display:block;font-size:.8rem;letter-spacing:.025rem}.tour__content__urlbar{border:1px solid rgba(34,34,34,.05);display:flex;margin-bottom:1rem}.tour__content__urlbar button,.tour__content__urlbar input,.tour__content__urlbar span{float:left;vertical-align:middle}.tour__content__urlbar button,.tour__content__urlbar span{height:100%;line-height:2rem}.tour__content__urlbar button{color:#fcfcfc;font-size:1rem;position:relative;text-transform:lowercase;transition:background-color .2s;width:6rem}.tour__content__urlbar button::after{width:calc(100% + 2px);height:calc(100% + 2px);top:-1px;left:-1px;content:"";position:absolute;transition:background-color .2s;z-index:-1}.tour__content__urlbar button:not(:hover){background-color:#222}.tour__content__urlbar button:not(:hover)::after{background-color:#222}.tour__content__urlbar button:hover{background-color:#3abf7d}.tour__content__urlbar button:hover::after{background-color:#3abf7d}.tour__content__urlbar input{font-size:1rem;width:calc(100% - 9.5rem)}.tour__content__urlbar input::placeholder{color:rgba(34,34,34,.5);opacity:1}.tour__content__urlbar span{user-select:none;-ms-user-select:none;-moz-user-select:none;-webkit-user-select:none;color:rgba(34,34,34,.5);cursor:default;font-size:1rem;text-align:right;width:3.5rem}.token.comment,.token.operator,.token.punctuation{color:#6c6c87}.token.boolean,.token.null,.token.url{color:#86c2f7}.token.number{color:#f2ac5f}.token.string{color:#fae079}/*# sourceMappingURL=style.css.map */ diff --git a/public/css/style.css.map b/public/css/style.css.map deleted file mode 100755 index 6c7c3ff..0000000 --- a/public/css/style.css.map +++ /dev/null @@ -1 +0,0 @@ -{"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/_feature-links.scss","../../sass/partials/_flash.scss","../../sass/partials/_footer.scss","../../sass/partials/_github-feed.scss","../../sass/partials/_glossary.scss","../../sass/partials/_navigation.scss","../../sass/partials/_mission-statement.scss","../../sass/partials/_modal.scss","../../sass/_layout.scss","../../sass/pages/_api.scss","../../sass/pages/_contributing.scss","../../sass/pages/_documentation.scss","../../sass/pages/_home.scss","../../sass/pages/_page.scss","../../sass/pages/_tour.scss","../../sass/plugins/_prism.scss"],"names":[],"mappings":"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ACA,iBAGF,YACE,kBACA,iBACA,iBAEA,yBALF,YAMI,mBACA,mBAGF,yBAVF,YAWI,mBACA,mBAGF,mBdzCA,WACA,WACA,cc6CA,0FACE,aAIJ,GACE,sBAEA,sCACA,YACA,mBAGF,OACE,gBAEA,iBflFQ,QemFR,iBACA,iBACA,yCACA,oBACA,uCACA,eACA,gBACA,WACA,UAEA,2BACE,kBAGF,yBAlBF,OAmBI,gBAGF,yBAtBF,OAuBI,iBAGF,uBACE,qBAGF,SACE,mBACA,2BAGF,SACE,gBACA,0BAGF,cACE,6BACA,cAEA,iBf/HM,QegIN,kBACA,cACA,eACA,cACA,kBACA,iBAEA,kBACA,kBCjIJ,SACE,uBACA,kBAEA,gBfYA,WACA,WACA,ceSF,UACE,sCACA,yBAEA,iBhBtCQ,QgBuCR,4CACA,WACA,kBACA,gBACA,eACA,UAGF,kBACE,kBAGF,yBACE,6CACA,gBACA,iBACA,8CACA,WAGF,yBACE,6BACA,uBAEA,iBhB9DQ,KgB+DR,kBACA,MhBjEQ,QgBkER,eACA,eACA,iBACA,kBACA,kBACA,uBAEA,sCACE,UACA,kBAGF,gCACE,UACA,mBAIJ,iBACE,gBACA,iBACA,qBACA,mBACA,sBAIA,sBACE,sCAGF,kBACE,cACA,mCAqBJ,cACE,aACA,YACA,yDACA,yBAEA,iBACE,iBACA,oBAGF,iBACE,iBACA,oBAGF,iBACE,gBACA,qBACA,qBACA,yBAGF,kDACE,eACA,gBACA,mBAGF,oBACE,sCACA,oBACA,iBACA,gBACA,iBACA,WAGF,oBACE,aAGF,kCACE,+BAGF,iBACE,6CAGF,iCACE,sCAGF,kBACE,gCAEA,oBACA,gBACA,iBACA,gBACA,kBAIJ,oBACE,6CACA,aAEA,wBACE,sCAIJ,+BACE,sCACA,kBACA,qBAIA,iDACE,6CAGF,8CACE,sCAGF,yEAEE,qBAGF,oCACE,4CACA,UACA,qBAEA,yCACE,MhBzNI,QgB0NJ,gBAEA,6DACE,kBAKN,qCACE,UAGF,qCflNA,WACA,WACA,ceqNF,uBACE,yBACA,6CACA,MhBjPQ,QgBkPR,aAEA,2BACE,iBh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CE,cACA,eA8BJ,eACE,sDAEA,yCACA,YACA,yBACA,mBAKE,8BACE,6BAKN,qBACE,gBACA,kBAEA,4BpB1IA,WACA,WACA,coB6IF,6BACE,WACA,gBACA,UAEA,oCACE,uBAEA,qCACA,mBAIJ,wCACE,uBAEA,mBACA,iBACA,mBACA,mBACA,uBAEA,2DACE,kBAGF,uDACE,yBAGF,iDACE,arBpMM,KqBwMV,6BACE,YACA,UAEA,2CACE,gBAGF,sCACE,YAEA,yDACE,mBAIJ,mCACE,wBACA,cACA,gBACA,gBACA,sBACA,sBACA,yBACA,WAMA,yBAHF,qJAII,mBAGF,yBAPF,qJAQI,mBAKF,4FACE,wBACA,sBACA,mBACA,WAIA,gGACE,arBzPE,KqB4PJ,2JAEE,arBxPE,QqB4PN,kDACE,6BAEA,iBACA,mBACA,kBACA,WAEA,yDACE,uBAEA,YACA,iBACA,iBACA,kBAGF,uEACE,kBAGF,iEACE,MrBlRE,QqBuRR,0EAEE,wBACA,WAEA,4HACE,arBnSI,KqBsSN,8KAEE,arBlSI,QqBsSR,oCACE,mDACA,+BACA,4BACA,qBACA,mBAGF,sCACE,iBACA,gBAIJ,uBACE,aACA,YACA,kCACA,gBACA,kBAKE,oCACE,8CAMJ,0BACE,wBAEA,eACA,cACA,oBACA,iBACA,uBACA,kBAGF,iCACE,eACA,eACA,iBAEA,sCACE,wBACA,cACA,gBACA,uBAKN,uBACE,oCACA,aACA,mBAEA,uFAGE,WACA,sBAGF,0DAEE,YACA,iBAGF,8BACE,MrBxXM,QqByXN,eACA,kBACA,yBACA,gCACA,WAEA,qCACE,+CACA,mBAEA,WACA,kBACA,gCACA,WAGF,0CACE,iBrBzYI,KqB2YJ,iDACE,iBrB5YE,KqBgZN,oCACE,iBrB3YI,QqB6YJ,2CACE,iBrB9YE,QqBmZR,6BACE,eACA,0BAEA,0CACE,wBACA,UAIJ,4BpBzVA,iBAEA,qBACA,sBACA,yBoBuVE,wBACA,eACA,eACA,iBACA,aCzaF,kDAGE,cAGF,sCAGE,cAGF,cACE,cAGF,cACE","file":"style.css"} \ No newline at end of file diff --git a/server.js b/server.js index a59f317..40c321a 100755 --- a/server.js +++ b/server.js @@ -5,7 +5,7 @@ // P A C K A G E S const async = require("async"); -const color = require("turbocolor"); +const color = require("colorette"); const cors = require("cors"); const dedent = require("dedent"); @@ -16,7 +16,7 @@ const fastify = require("fastify")({ } }); -const html = require("choo-async/html"); +const html = require("choo/html"); const local = require("app-root-path").require; const octokit = require("@octokit/rest")(); const redis = require("redis"); @@ -24,11 +24,11 @@ const request = require("request-promise-native"); // V A R I A B L E S -const fetchMetadata = local("/helpers/fetch-metadata"); -const github = local("/helpers/github"); +const fetchMetadata = local("app/helpers/fetch-metadata"); +const github = local("app/helpers/github"); const log = console.log; // eslint-disable-line -const logSlackError = local("/helpers/slack"); -const relativeDate = local("/modules/relative-date"); +const logSlackError = local("app/helpers/slack"); +const relativeDate = local("app/modules/relative-date"); let client; if (typeof process.env.GITHUB_OAUTH_TOKEN !== "undefined") { @@ -67,15 +67,12 @@ fastify.register(require("fastify-helmet"), { }); fastify.register(require("fastify-static"), { - root: `${__dirname}/public/`, - prefix: "/assets/" + prefix: "/assets/", + root: `${__dirname}/app/dist/` }); fastify.register(require("choo-ssr/fastify"), { - app: require("./client"), - plugins: [ - [ require("choo-bundles/ssr"), {} ] - ] + app: require("./app") }); fastify.ready(err => { diff --git a/views/components/html.js b/views/components/html.js deleted file mode 100755 index 5f464b5..0000000 --- a/views/components/html.js +++ /dev/null @@ -1,24 +0,0 @@ -"use strict"; - - - -// P A C K A G E - -const html = require("choo-async/html"); - - - -// E X P O R T - -module.exports = exports = (head, body) => (state, emit) => { - const bodyPromise = Promise.resolve(body(state, emit)); - const headPromise = bodyPromise.then(() => head(state, emit)); // resolve `head` once `body` is resolved - - return html` - - - ${headPromise} - ${bodyPromise} - - `; -}; diff --git a/views/components/layout.js b/views/components/layout.js deleted file mode 100755 index f004321..0000000 --- a/views/components/layout.js +++ /dev/null @@ -1,30 +0,0 @@ -"use strict"; - - - -// P A C K A G E - -const html = require("choo-async/html"); - -// V A R I A B L E S - -const footer = require("../partials/footer"); -const navigation = require("../partials/navigation"); - - - -// E X P O R T - -module.exports = exports = children => (state, emit) => html` -
    - - - ${navigation(state, emit)} - - ${children(state, emit)} - ${footer(state, emit)} -
    -`; diff --git a/views/pages/api.js b/views/pages/api.js deleted file mode 100644 index 1717160..0000000 --- a/views/pages/api.js +++ /dev/null @@ -1,123 +0,0 @@ -"use strict"; - - - -// P A C K A G E S - -const dedent = require("dedent"); -const fetch = require("make-fetch-happen").defaults({ cacheManager: "./cache" }); -const fs = require("graceful-fs"); -const html = require("choo-async/html"); -const raw = require("nanohtml/raw"); - -// V A R I A B L E - -const apiScripts = ""; - - - -// E X P O R T - -module.exports = exports = () => async state => parseApiFile(state.params.wildcard).then(response => html` -
    - - -
    ${raw(createApiContent(response).join(""))}
    -
    - - ${raw(apiScripts)} -`); - - - -// H E L P E R S - -function createApiContent(apiDetails) { - const apiContent = []; - - for (const apiDetail of apiDetails) { - let apiDetailsReturns = ""; - if (apiDetail.returns) apiDetailsReturns = JSON.parse(JSON.stringify(apiDetail.returns)); - - apiContent.push(` -
    -

    ${apiDetail.name}

    -

    ${apiDetail.description}

    - - ${apiDetail.arguments.length ? `

    Arguments

      ${renderArguments(apiDetail.arguments).join("")}
    ` : ""} - -

    Returns

    -
    ${dedent(apiDetailsReturns)}
    -
    - -
    -
    // example(s) for ${apiDetail.name} to come later
    -
    - `); - } - - return apiContent; -} - -function createApiSidebar(apiDetails) { - const apiSidebar = []; - - for (const apiDetail of apiDetails) { - apiSidebar.push(` -
  • - - ${apiDetail.name} - -
  • - `); - } - - return apiSidebar; -} - -function parseApiFile(urlSlug) { - let apiFileLink; - - if (!urlSlug || urlSlug === "protocol") apiFileLink = process.env.NODE_ENV === "development" ? - "https://rawgit.com/lbryio/lbry/master/docs/api.json" : - "https://cdn.rawgit.com/lbryio/lbry/5b3103e4/docs/api.json" - ; - - if (urlSlug === "blockchain") apiFileLink = process.env.NODE_ENV === "development" ? - "https://rawgit.com/lbryio/lbrycrd/add_api_docs_scripts/contrib/devtools/generated/api_v1.json" : - "https://cdn.rawgit.com/lbryio/lbrycrd/add_api_docs_scripts/contrib/devtools/generated/api_v1.json" - ; - - if (!apiFileLink) return; // TODO: Error handling - - return fetch(apiFileLink).then(() => fetch(apiFileLink, { - cache: "no-cache" // forces a conditional request - })).then(res => res.json().then(body => body)); // res.status 304 = cache validated -} - -function renderArguments(args) { - const argumentContent = []; - - for (const arg of args) { - argumentContent.push(` -
  • -
    - ${arg.name}
    - ${arg.is_required === true ? "" : "optional" }${arg.type} -
    - -
    ${typeof arg.description === "string" ? arg.description.replace(//g, ">") : ""}
    -
  • - `); - } - - return argumentContent; -} diff --git a/views/pages/error.js b/views/pages/error.js deleted file mode 100755 index fa33898..0000000 --- a/views/pages/error.js +++ /dev/null @@ -1,29 +0,0 @@ -"use strict"; - - - -// P A C K A G E - -const html = require("choo-async/html"); - - - -// E X P O R T - -module.exports = exports = err => html` -
    - - -
    -
    -
    ${err.stack}
    -
    -
    -
    -`; diff --git a/views/partials/email-subscribe.js b/views/partials/email-subscribe.js deleted file mode 100644 index 998895c..0000000 --- a/views/partials/email-subscribe.js +++ /dev/null @@ -1,24 +0,0 @@ -"use strict"; - - - -// P A C K A G E - -const html = require("choo-async/html"); - - - -// E X P O R T - -module.exports = exports = () => html` - -`; diff --git a/views/partials/footer.js b/views/partials/footer.js deleted file mode 100755 index 92cecef..0000000 --- a/views/partials/footer.js +++ /dev/null @@ -1,65 +0,0 @@ -"use strict"; - - - -// P A C K A G E S - -const html = require("choo-async/html"); -const local = require("app-root-path").require; - -// V A R I A B L E S - -const config = local("/config"); -const editLink = local("/views/partials/edit-link"); -const emailSubscribe = local("/views/partials/email-subscribe"); - - - -// E X P O R T - -module.exports = exports = state => html` - - -
    -
    -

    This website is in beta and under heavy development.
    All information should be considered incomplete and possibly incorrect and things may not work as expected.

    - -

    - -

    Please do not share or link this site publicly while this message is here. This website is open source and you can contribute to it on Github.

    - - -
    -
    - - - - - - -`; diff --git a/views/partials/head.js b/views/partials/head.js deleted file mode 100755 index 0380a67..0000000 --- a/views/partials/head.js +++ /dev/null @@ -1,62 +0,0 @@ -"use strict"; - - - -// P A C K A G E S - -const html = require("choo-async/html"); -const local = require("app-root-path").require; - -// V A R I A B L E - -const config = local("/config"); - - - -// E X P O R T - -module.exports = exports = () => async (state) => { - let pageTitle = ""; - - if (state.route && state.route !== "/" && state.route !== "*") pageTitle = state.route.charAt(0).toUpperCase() + state.route.slice(1); - if (state.params.wildcard) pageTitle = state.params.wildcard.charAt(0).toUpperCase() + state.params.wildcard.slice(1); - - if (pageTitle === "Api") pageTitle = "API"; - - return html`${[ - html``, - html`${pageTitle.length ? pageTitle + " | " : ""}${config.meta.title} · ${config.meta.tagline}`, - - html``, - html``, - html``, - html``, - html``, - - // Open Graph - html``, - html``, - html``, - html``, - html``, - html``, - - // Social/App Stuff - html``, - html``, - html``, - html``, - html``, - html``, - - html``, - html``, - html``, - html``, - - html``, - state.route === "api" || state.route === "api/*" ? html`` : "", - html``, - html`` - ]}`; -}; diff --git a/views/partials/navigation.js b/views/partials/navigation.js deleted file mode 100755 index 3253884..0000000 --- a/views/partials/navigation.js +++ /dev/null @@ -1,59 +0,0 @@ -"use strict"; - - - -// P A C K A G E - -const html = require("choo/html"); - -// V A R I A B L E - -const navigationItems = [ - { - url: "https://lbry.io", - name: "LBRY.io", - title: "Escape the techno scene" - }, - { - url: "/overview", - name: "Overview", - title: "LBRY overview" - }, - { - url: "/resources", - name: "Resources", - title: "View LBRY resources" - }, - { - url: "/contribute", - name: "Contribute", - title: "Contribute to LBRY" - }, - { - url: "/build", - name: "Build", - title: "View LBRY resources" - }, - { - url: "/community", - name: "Community", - title: "Interact with LBRY" - } -]; - - - -// E X P O R T - -module.exports = exports = state => { - const renderedNavigationItems = navigationItems.map(navigationItem => `${navigationItem.name}`); - - return html` - - `; -};