From c5d7c79115c15e32cc34152adefefd60602ba843 Mon Sep 17 00:00:00 2001 From: the1mason Date: Tue, 23 Jan 2024 00:02:32 +0400 Subject: [PATCH] Updated website. Started writing article. --- content/_index.md | 10 +- content/posts/modular-web-app.md | 66 + content/posts/test.md | 14 - hugo.toml | 10 +- ...s_3b33337114e481782feeb60752452e17.content | 2 +- ...s_f120a3f402b106f64b18d498afd3d82e.content | 1191 +++++++++++++++++ ...scss_f120a3f402b106f64b18d498afd3d82e.json | 1 + ...s_f120a3f402b106f64b18d498afd3d82e.content | 1191 +++++++++++++++++ ...scss_f120a3f402b106f64b18d498afd3d82e.json | 1 + ...s_f120a3f402b106f64b18d498afd3d82e.content | 1191 +++++++++++++++++ ...scss_f120a3f402b106f64b18d498afd3d82e.json | 1 + static/crabHdFixed512signal.png | Bin 0 -> 33845 bytes static/js/repo-card.js | 80 ++ static/posts/modular-app/createdwith.jpeg | Bin 0 -> 29823 bytes static/posts/modular-app/stack.svg | 24 + static/posts/modular-app/title.svg | 38 + 16 files changed, 3797 insertions(+), 23 deletions(-) create mode 100644 content/posts/modular-web-app.md delete mode 100644 content/posts/test.md create mode 100644 resources/_gen/assets/scss/css/green-local.scss_f120a3f402b106f64b18d498afd3d82e.content create mode 100644 resources/_gen/assets/scss/css/green-local.scss_f120a3f402b106f64b18d498afd3d82e.json create mode 100644 resources/_gen/assets/scss/css/pink-local.scss_f120a3f402b106f64b18d498afd3d82e.content create mode 100644 resources/_gen/assets/scss/css/pink-local.scss_f120a3f402b106f64b18d498afd3d82e.json create mode 100644 resources/_gen/assets/scss/css/red-local.scss_f120a3f402b106f64b18d498afd3d82e.content create mode 100644 resources/_gen/assets/scss/css/red-local.scss_f120a3f402b106f64b18d498afd3d82e.json create mode 100644 static/crabHdFixed512signal.png create mode 100644 static/js/repo-card.js create mode 100644 static/posts/modular-app/createdwith.jpeg create mode 100644 static/posts/modular-app/stack.svg create mode 100644 static/posts/modular-app/title.svg diff --git a/content/_index.md b/content/_index.md index 959ac52..db750a0 100644 --- a/content/_index.md +++ b/content/_index.md @@ -1,6 +1,6 @@ +++ description = "Main page" -color = "orange" +color = "red" +++ @@ -9,7 +9,7 @@ color = "orange"

- +

Vladislav Belkov

@@ -19,4 +19,8 @@ color = "orange" ---- -df \ No newline at end of file +## Welcome! + +This is my site. I don't post here often, so feel free to check out my [GitHub](//github.com/the1mason). +You can also check any of my posts below. + diff --git a/content/posts/modular-web-app.md b/content/posts/modular-web-app.md new file mode 100644 index 0000000..978b45b --- /dev/null +++ b/content/posts/modular-web-app.md @@ -0,0 +1,66 @@ ++++ +title = "Plugin-Based Web Application in Dotnet" +date = "2024-01-20T00:00:00+00:00" +author = "the1mason" +authorTwitter = "the0mason" #do not include @ +cover = "posts/modular-app/title.svg" +tags = ["dotnet", "web", "prototype"] +keywords = ["prototype", "dotnet", "guide", "plugins", "plugin-based", "web application", "ASP.NET", "C#", ".NET 8", "Programming", "Software Architecture"] +description = "Have you ever thought about making a web application, that could be easily extended by third-party developers? I've been thinking about making this app for a while, so here's my experience..." +showFullContent = false +readingTime = true +hideComments = false +draft = true ++++ + +### Table of Contents + +- [Introduction](#introduction) +- [Why](#why) +- [How](#how) +- [The Prototype](#the-prototype) +- - [IPlugin](#iplugin) +- - [Loading Plugins](#loading-plugins) +- - [Hooks and Triggers](#hooks-and-triggers) +- [Sources](#sources) + + +# Introduction + +This post is about my experience of making a prototype of a web app with plugin support as well as my reasoning. As a result, this app could be extended by adding compiled `.dll` class libraries into a plugins folder. I've made it possible to load not only classes, but also views and api controllers. You could check out the final version of this prototype in this [GitHub Repo](//github.com/the1mason/prototype.modularmvc). +Also right now I'm building a web application, using similar concepts. As of now it's not on github, but you can find it [here](//git.the1mason.com/the1mason/octocore). + + +
+ +# Why + +Self-hosted web applications can solve different problems and be of use for a variety of different people with slightly different needs. In order for this to work, I think that such application should provide an option to extend it's functionality. This would allow other people to build an ecosystem of different extensions. + +# Stack + +![C#, MVC, HTMX](/posts/modular-app/stack.svg) + +Do you speak *CSharp*? +I do. It's my main language after all, but why MVC and what is HTMX? +Let's have a quick look at worthy alternatives, and then I'll explain my choices. + +`Blazor WASM` does not support runtime assembly loading, which makes client extension impossible. It has [Lazy loading](https://learn.microsoft.com/en-us/aspnet/core/blazor/webassembly-lazy-load-assemblies?view=aspnetcore-8.0), but still it requires these assemblies to be defined in the project file, which is not viable for our case. + +`WebApi + ` is also not an option. It would require plugins to be written in two languages. Also client would have to be rebuilt after each plugin istallation. + +So, what are MVC and HTMX? + +`ASP.NET MVC` is an older framework that uses `Razor Pages` to render HTML on server and return it to the client. But it has a significant problem: Lack of reactivity. Each user's action would have to be processed on the server like in the good old days... +So in order for the app to be usable, I have decided to go with `HTMX`: + +![Created With HTMX meme](/posts/modular-app/createdwith.jpeg) + +> htmx gives you access to AJAX, CSS Transitions, WebSockets and Server Sent Events directly in HTML, using attributes, so you can build modern user interfaces with the simplicity and power of hypertext. +> *— from [htmx.org](htmx.org)* + +This means, that I will use razor pages to generate an HTML body with HTMX tags, and return it to the client. The client would then read HTML, executing HTMX tags. Ain't that awesome? + +# How + +:) \ No newline at end of file diff --git a/content/posts/test.md b/content/posts/test.md deleted file mode 100644 index ef5fd2f..0000000 --- a/content/posts/test.md +++ /dev/null @@ -1,14 +0,0 @@ -+++ -title = "Test Post" -date = "2023-07-08T02:53:25+04:00" -author = "the1mason" -authorTwitter = "the0mason" #do not include @ -cover = "" -tags = ["test", "post"] -keywords = ["test", "post"] -description = "post description" -showFullContent = false -readingTime = true -hideComments = false -color = "blue" #color from the theme settings -+++ diff --git a/hugo.toml b/hugo.toml index 5b39692..ce5c0e9 100644 --- a/hugo.toml +++ b/hugo.toml @@ -8,7 +8,7 @@ title = 'the1mason' contentTypeName = "posts" # ["orange", "blue", "red", "green", "pink"] - themeColor = "green" + themeColor = "red" # if you set this to 0, only submenu trigger will be visible showMenuItems = 4 @@ -76,10 +76,10 @@ title = 'the1mason' logoHomeLink = "/" [languages.en.menu] - [[languages.en.menu.main]] - identifier = "blog-en" - name = "Blog" - url = "/posts" + #[[languages.en.menu.main]] + # identifier = "blog-en" + # name = "Blog" + # url = "/posts" [[languages.en.menu.main]] identifier = "github" name = "Github" diff --git a/resources/_gen/assets/scss/css/base.scss_3b33337114e481782feeb60752452e17.content b/resources/_gen/assets/scss/css/base.scss_3b33337114e481782feeb60752452e17.content index 7a484ac..eec46bc 100644 --- a/resources/_gen/assets/scss/css/base.scss_3b33337114e481782feeb60752452e17.content +++ b/resources/_gen/assets/scss/css/base.scss_3b33337114e481782feeb60752452e17.content @@ -1,3 +1,3 @@ -:root{--phoneWidth: (max-width: 684px);--tabletWidth: (max-width: 900px)}@font-face{font-display:swap;font-family:'Fira Code';font-style:normal;font-weight:400;src:url("../fonts/FiraCode-Regular.woff") format("woff")}@font-face{font-display:swap;font-family:'Fira Code';font-style:normal;font-weight:800;src:url("../fonts/FiraCode-Bold.woff") format("woff")}.button-container{display:table;margin-left:auto;margin-right:auto}button,.button,a.button{position:relative;display:flex;align-items:center;justify-content:center;padding:8px 18px;margin-bottom:5px;text-decoration:none;text-align:center;border-radius:8;border:1px solid #78E2A0;background:#78E2A0;color:#1f222a;font:inherit;font-weight:bold;appearance:none;cursor:pointer;outline:none}button:hover,.button:hover,a.button:hover{background:rgba(120,226,160,0.9)}button.outline,.button.outline,a.button.outline{background:transparent;box-shadow:none;padding:8px 18px}button.outline :hover,.button.outline :hover,a.button.outline :hover{transform:none;box-shadow:none}button.link,.button.link,a.button.link{background:none;font-size:1rem}button.small,.button.small,a.button.small{font-size:.8rem}button.wide,.button.wide,a.button.wide{min-width:200px;padding:14px 24px}a.read-more,a.read-more:hover,a.read-more:active{display:inline-flex;border:none;color:#78E2A0;background:none;box-shadow:none;padding:0;margin:20px 0;max-width:100%}.code-toolbar{margin-bottom:20px}.code-toolbar .toolbar-item a{position:relative;display:inline-flex;align-items:center;justify-content:center;padding:3px 8px;margin-bottom:5px;text-decoration:none;text-align:center;font-size:13px;font-weight:500;border-radius:8px;border:1px solid transparent;appearance:none;cursor:pointer;outline:none}input,textarea,select{background:transparent;color:#78E2A0;border:1px solid #78E2A0;border-radius:0;padding:10px;font:inherit;appearance:none}input:focus,input :active,textarea:focus,textarea :active,select:focus,select :active{border-color:#fff;outline:1px solid #fff}input:active,textarea:active,select:active{box-shadow:none}select{background:#1f222a}select option{background:#1f222a}::placeholder{color:rgba(120,226,160,0.5)}.header{display:flex;flex-direction:column;position:relative}@media print{.header{display:none}}.header__inner{display:flex;align-items:center;justify-content:space-between}.header__logo{display:flex;flex:1}.header__logo:after{content:'';background:repeating-linear-gradient(90deg, #78E2A0, #78E2A0 2px, transparent 0, transparent 10px);display:block;width:100%;right:10px}.header__logo a{flex:0 0 auto;max-width:100%;text-decoration:none}.navigation-menu{display:flex;align-items:flex-start;justify-content:space-between;margin:20px 1px}@media (max-width: 684px){.navigation-menu{margin:0}}.navigation-menu__inner{display:flex;flex:1;flex-wrap:wrap;list-style:none;margin:0;padding:0}.navigation-menu__inner>li{flex:0 0 auto;margin-bottom:10px;white-space:nowrap}.navigation-menu__inner>li:not(:last-of-type){margin-right:20px}@media (max-width: 684px){.navigation-menu__inner{flex-direction:column;align-items:flex-start;padding:0}.navigation-menu__inner li{margin:0;padding:5px}}.navigation-menu .spacer{flex-grow:1 !important}.menu{display:flex;flex-direction:column;position:relative;list-style:none;padding:0;margin:0}.menu__trigger{margin-right:0 !important;color:#78E2A0;user-select:none;cursor:pointer}.menu__dropdown{display:none;flex-direction:column;position:absolute;background:#1f222a;box-shadow:0 10px rgba(31,34,42,0.8),-10px 10px rgba(31,34,42,0.8),10px 10px rgba(31,34,42,0.8);color:white;border:2px solid;margin:0;padding:10px;top:10px;left:0;list-style:none;z-index:99}.open .menu__dropdown{display:flex}.menu__dropdown>li{flex:0 0 auto}.menu__dropdown>li:not(:last-of-type){margin-bottom:10px}.menu__dropdown>li a{display:flex;padding:5px}@media (max-width: 684px){.menu--desktop{display:none}}.menu--mobile .menu__trigger{color:#78E2A0;border:2px solid;margin-left:10px;height:100%;padding:3px 8px;margin-bottom:0 !important;position:relative;cursor:pointer;display:none}@media (max-width: 684px){.menu--mobile .menu__trigger{display:block}}@media (max-width: 684px){.menu--mobile .menu__dropdown{left:auto;right:0}}.menu--mobile li{flex:0 0 auto}.menu--mobile li:not(:last-of-type){margin-bottom:10px}.menu--language-selector .menu__trigger{color:#78E2A0;border:2px solid;margin-left:10px;height:100%;padding:3px 8px;margin-bottom:0 !important;position:relative;cursor:pointer}@media (max-width: 684px){.menu--language-selector .menu__trigger{display:none}}.menu--language-selector .menu__dropdown{left:auto;right:0}.logo{display:flex;align-items:center;text-decoration:none;background:#78E2A0;color:black;padding:5px 10px}html{box-sizing:border-box}*,*:before,*:after{box-sizing:inherit}body{margin:0;padding:0;font-family:'Fira Code', Monaco, Consolas, Ubuntu Mono, monospace;font-size:1rem;line-height:1.54;letter-spacing:-0.02em;background-color:#1f222a;color:#fff;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;font-feature-settings:"liga", "tnum", "zero", "ss01", "locl";font-variant-ligatures:contextual;-webkit-overflow-scrolling:touch;-webkit-text-size-adjust:100%}@media (max-width: 684px){body{font-size:1rem}}.headings--one-size h1,.headings--one-size h2,.headings--one-size h3,.headings--one-size h4,.headings--one-size h5,.headings--one-size h6{line-height:1.3}.headings--one-size h1:not(first-child),.headings--one-size h2:not(first-child),.headings--one-size h3:not(first-child),.headings--one-size h4:not(first-child),.headings--one-size h5:not(first-child),.headings--one-size h6:not(first-child){margin-top:40px}.headings--one-size h1,.headings--one-size h2,.headings--one-size h3{font-size:1.4rem}.headings--one-size h4,.headings--one-size h5,.headings--one-size h6{font-size:1.2rem}a{color:inherit}img{display:block;max-width:100%}img.left{margin-right:auto}img.center{margin-left:auto;margin-right:auto}img.right{margin-left:auto}p{margin-bottom:20px}figure{display:table;max-width:100%;margin:25px 0}figure.left{margin-right:auto}figure.center{margin-left:auto;margin-right:auto}figure.right{margin-left:auto}figure figcaption{font-size:14px;padding:5px 10px;margin-top:5px;background:#78E2A0;color:#1f222a}figure figcaption.left{text-align:left}figure figcaption.center{text-align:center}figure figcaption.right{text-align:right}code,kbd{font-family:'Fira Code', Monaco, Consolas, Ubuntu Mono, monospace !important;font-feature-settings:normal;background:rgba(120,226,160,0.2);color:#78E2A0;padding:1px 6px;margin:0 2px;font-size:.95rem}code code,code kbd,kbd code,kbd kbd{background:transparent;padding:0;margin:0}pre{background:transparent !important;padding:20px 10px;margin:40px 0;font-size:.95rem !important;overflow:auto;border-top:1px solid rgba(255,255,255,0.1);border-bottom:1px solid rgba(255,255,255,0.1)}pre+pre{border-top:0;margin-top:-40px}@media (max-width: 684px){pre{white-space:pre-wrap;word-wrap:break-word}}pre code{background:none !important;margin:0;padding:0;font-size:inherit;border:none}blockquote{border-top:1px solid #78E2A0;border-bottom:1px solid #78E2A0;margin:40px 0;padding:25px}@media (max-width: 684px){blockquote{padding-right:0}}blockquote p:first-of-type{margin-top:0}blockquote p:last-of-type{margin-bottom:0}blockquote p{position:relative}blockquote p:first-of-type:before{content:'>';display:block;position:absolute;left:-25px;color:#78E2A0}blockquote.twitter-tweet{position:relative;background:rgba(120,226,160,0.1);font:inherit;color:inherit;border:1px solid #78E2A0;padding-top:60px}blockquote.twitter-tweet p:before{content:''}blockquote.twitter-tweet:before{content:'> From Twitter:';position:absolute;top:20px;color:#78E2A0;font-weight:bold}blockquote.twitter-tweet a{color:#78E2A0}table{table-layout:auto;border-collapse:collapse;width:100%;margin:40px 0}table,th,td{border:1px dashed #78E2A0;padding:10px}th{color:#78E2A0}ul,ol{margin-left:22px;padding:0}ul li,ol li{position:relative}@media (max-width: 684px){ul,ol{margin-left:20px}}ol{list-style:none;counter-reset:li}ol li{counter-increment:li}ol li:before{content:counter(li);position:absolute;right:calc(100% + 10px);color:#78E2A0;display:inline-block;text-align:right}ol ol{margin-left:38px}ol ol li{counter-increment:li}ol ol li:before{content:counters(li, ".") " "}mark{background:#78E2A0;color:#1f222a}.container{display:flex;flex-direction:column;padding:40px;max-width:864px;min-height:100vh;border-right:1px solid rgba(255,255,255,0.1)}.container.full,.container.center{border:none;margin:0 auto}.container.full{max-width:100%}@media (max-width: 684px){.container{padding:20px}}@media print{.container{display:initial}}.content{display:flex;flex-direction:column}@media print{.content{display:initial}}hr{width:100%;border:none;background:rgba(255,255,255,0.1);height:1px}.hidden{display:none}sup{line-height:0}.index-content{margin-top:20px}.framed{border:1px solid #78E2A0;padding:20px}.framed *:first-child{margin-top:0}.framed *:last-child{margin-bottom:0}.posts{width:100%}.post{width:100%;text-align:left;margin:20px auto;padding:20px 0}.post:not(:last-of-type){border-bottom:1px solid rgba(255,255,255,0.1)}.post-meta{font-size:1rem;margin-bottom:10px;color:rgba(120,226,160,0.7)}.post-title{position:relative;color:#78E2A0;margin:0 0 15px;padding-bottom:15px;border-bottom:3px dotted #78E2A0}.post-title:after{content:'';position:absolute;bottom:2px;display:block;width:100%;border-bottom:3px dotted #78E2A0}.post-title a{text-decoration:none}.post-tags{display:block;margin-bottom:20px;font-size:1rem;opacity:.5}.post-tags a{text-decoration:none}.post-content{margin-top:30px}.post-cover{border:20px solid #78E2A0;background:transparent;margin:40px 0;padding:20px}@media (max-width: 684px){.post-cover{padding:10px;border-width:10px}}.post ul{list-style:none}.post ul li:not(:empty):before{content:'-';position:absolute;left:-20px;color:#78E2A0}.post--regulation h1{justify-content:center}.post--regulation h2{justify-content:center;margin-bottom:10px}.post--regulation h2+h2{margin-top:-10px;margin-bottom:20px}.hanchor{color:rgba(120,226,160,0.9);text-decoration:none;margin-left:10px;visibility:hidden}h1:hover a,h2:hover a,h3:hover a,h4:hover a{visibility:visible}.footnotes{color:rgba(255,255,255,0.5)}.pagination{margin-top:50px}@media print{.pagination{display:none}}.pagination__title{display:flex;text-align:center;position:relative;margin:100px 0 20px}.pagination__title-h{text-align:center;margin:0 auto;padding:5px 10px;background:#1f222a;color:rgba(255,255,255,0.3);font-size:.8rem;text-transform:uppercase;text-decoration:none;letter-spacing:.1em;z-index:1}.pagination__title hr{position:absolute;left:0;right:0;width:100%;margin-top:15px;z-index:0}.pagination__buttons{display:flex;align-items:center;justify-content:center;flex-flow:row wrap;gap:10px}.pagination__buttons a{text-decoration:none}.button{position:relative;display:inline-flex;align-items:center;justify-content:center;font-size:1rem;padding:0;appearance:none}@media (max-width: 684px){.button{flex:1}}.button a{display:flex;justify-content:center;flex:1;padding:8px 16px;text-decoration:none;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.button__text{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.button.next .button__icon{margin-left:8px}.button.previous .button__icon{margin-right:8px}.footer{padding:40px 0;flex-grow:0;opacity:.5}.footer__inner{display:flex;align-items:center;justify-content:space-between;margin:0;width:760px;max-width:100%}@media (max-width: 900px){.footer__inner{flex-direction:column}}.footer a{color:inherit}.footer .copyright{display:flex;flex-flow:row wrap;flex:1;align-items:center;font-size:1rem;justify-content:center}.footer .copyright--user{margin:auto;text-align:center}.footer .copyright>*:first-child:not(:only-child){margin-right:10px}.footer .copyright span{white-space:nowrap}code[class*="language-"],pre[class*="language-"]{color:#ccc;background:none;font-family:Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none}pre[class*="language-"]{padding:1em;margin:.5em 0;overflow:auto}:not(pre)>code[class*="language-"],pre[class*="language-"]{background:#2d2d2d}:not(pre)>code[class*="language-"]{padding:.1em;border-radius:.3em;white-space:normal}.token.comment,.token.block-comment,.token.prolog,.token.doctype,.token.cdata{color:#999}.token.punctuation{color:#ccc}.token.tag,.token.attr-name,.token.namespace,.token.deleted{color:#e2777a}.token.function-name{color:#6196cc}.token.boolean,.token.number,.token.function{color:#f08d49}.token.property,.token.class-name,.token.constant,.token.symbol{color:#f8c555}.token.selector,.token.important,.token.atrule,.token.keyword,.token.builtin{color:#cc99cd}.token.string,.token.char,.token.attr-value,.token.regex,.token.variable{color:#7ec699}.token.operator,.token.entity,.token.url{color:#67cdcc}.token.important,.token.bold{font-weight:bold}.token.italic{font-style:italic}.token.entity{cursor:help}.token.inserted{color:green}pre[data-line]{position:relative;padding:1em 0 1em 3em}.line-highlight{position:absolute;left:0;right:0;padding:inherit 0;margin-top:1em;background:rgba(153,122,102,0.08);background:linear-gradient(to right, rgba(153,122,102,0.1) 70%, rgba(153,122,102,0));pointer-events:none;line-height:inherit;white-space:pre}@media print{.line-highlight{-webkit-print-color-adjust:exact;color-adjust:exact}}.line-highlight:before,.line-highlight[data-end]:after{content:attr(data-start);position:absolute;top:.4em;left:.6em;min-width:1em;padding:0 .5em;background-color:rgba(153,122,102,0.4);color:#f5f2f0;font:bold 65%/1.5 sans-serif;text-align:center;vertical-align:.3em;border-radius:999px;text-shadow:none;box-shadow:0 1px white}.line-highlight[data-end]:after{content:attr(data-end);top:auto;bottom:.4em}.line-numbers .line-highlight:before,.line-numbers .line-highlight:after{content:none}pre[id].linkable-line-numbers span.line-numbers-rows{pointer-events:all}pre[id].linkable-line-numbers span.line-numbers-rows>span:before{cursor:pointer}pre[id].linkable-line-numbers span.line-numbers-rows>span:hover:before{background-color:rgba(128,128,128,0.2)}pre[class*="language-"].line-numbers{position:relative;padding-left:3.8em;counter-reset:linenumber}pre[class*="language-"].line-numbers>code{position:relative;white-space:inherit}.line-numbers .line-numbers-rows{position:absolute;pointer-events:none;top:0;font-size:100%;left:-3.8em;width:3em;letter-spacing:-1px;border-right:1px solid #999;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.line-numbers-rows>span{display:block;counter-increment:linenumber}.line-numbers-rows>span:before{content:counter(linenumber);color:#999;display:block;padding-right:0.8em;text-align:right}.command-line-prompt{border-right:1px solid #999;display:block;float:left;font-size:100%;letter-spacing:-1px;margin-right:1em;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.command-line-prompt>span:before{color:#999;content:' ';display:block;padding-right:0.8em}.command-line-prompt>span[data-user]:before{content:"[" attr(data-user) "@" attr(data-host) "] $"}.command-line-prompt>span[data-user="root"]:before{content:"[" attr(data-user) "@" attr(data-host) "] #"}.command-line-prompt>span[data-prompt]:before{content:attr(data-prompt)}div.code-toolbar{position:relative}div.code-toolbar>.toolbar{position:absolute;top:.3em;right:.2em;transition:opacity 0.3s ease-in-out;opacity:0}div.code-toolbar:hover>.toolbar{opacity:1}div.code-toolbar:focus-within>.toolbar{opacity:1}div.code-toolbar>.toolbar>.toolbar-item{display:inline-block}div.code-toolbar>.toolbar>.toolbar-item>a{cursor:pointer}div.code-toolbar>.toolbar>.toolbar-item>button{background:none;border:0;color:inherit;font:inherit;line-height:normal;overflow:visible;padding:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none}div.code-toolbar>.toolbar>.toolbar-item>a,div.code-toolbar>.toolbar>.toolbar-item>button,div.code-toolbar>.toolbar>.toolbar-item>span{color:#bbb;font-size:.8em;padding:0 .5em;background:#f5f2f0;background:rgba(224,224,224,0.2);box-shadow:0 2px 0 0 rgba(0,0,0,0.2);border-radius:.5em}div.code-toolbar>.toolbar>.toolbar-item>a:hover,div.code-toolbar>.toolbar>.toolbar-item>a:focus,div.code-toolbar>.toolbar>.toolbar-item>button:hover,div.code-toolbar>.toolbar>.toolbar-item>button:focus,div.code-toolbar>.toolbar>.toolbar-item>span:hover,div.code-toolbar>.toolbar>.toolbar-item>span:focus{color:inherit;text-decoration:none}code.language-css,code.language-scss,.token.boolean,.token.string,.token.entity,.token.url,.language-css .token.string,.language-scss .token.string,.style .token.string,.token.attr-value,.token.keyword,.token.control,.token.directive,.token.statement,.token.regex,.token.atrule,.token.number,.token.inserted,.token.important{color:#78E2A0 !important}.token.tag-id,.token.atrule-id,.token.operator,.token.unit,.token.placeholder,.token.variable,.token.tag,.token.attr-name,.token.namespace,.token.deleted,.token.property,.token.class-name,.token.constant,.token.symbol{color:rgba(120,226,160,0.7) !important}.token.property,.token.function,.token.function-name,.token.deleted,code.language-javascript,code.language-html,.command-line-prompt>span:before{color:#999a99 !important}.token.selector,.token.tag,.token.punctuation{color:white}.token.comment,.token.prolog,.token.doctype,.token.cdata{color:rgba(255,255,255,0.3) !important}.token.namespace{opacity:.7 !important}pre[data-line]{position:relative}pre[class*="language-"]{margin:0;padding:0;overflow:auto}.line-highlight{position:absolute;left:0;right:0;padding:0;margin:0;background:rgba(123,219,159,0.08);pointer-events:none;line-height:inherit;white-space:pre}.line-highlight:before,.line-highlight[data-end]:after{content:attr(data-start);position:absolute;left:.6em;min-width:1em;padding:0 .5em;background-color:rgba(153,122,102,0.4);color:#f5f2f0;font:bold 65%/1.5 sans-serif;text-align:center;vertical-align:.3em;border-radius:999px;text-shadow:none;box-shadow:0 1px white}.line-highlight[data-end]:after{content:attr(data-end);top:auto;bottom:.4em}.line-numbers .line-highlight:before,.line-numbers .line-highlight:after{content:none}.code-toolbar{position:relative;margin:40px 0;padding:20px;border:1px solid rgba(255,255,255,0.1)}.code-toolbar+.code-toolbar,.code-toolbar+.highlight,.code-toolbar+.highlight .code-toolbar{border-top:0;margin-top:calc(-1 * $code-margin)}.code-toolbar pre,.code-toolbar code{border:none}.code-toolbar code{display:block;color:inherit}.code-toolbar>.toolbar button{font-size:.8em !important;background:rgba(224,224,224,0.2) !important;color:#bbb !important;box-shadow:0 2px 0 0 rgba(0,0,0,0.2) !important;border-radius:0 !important;margin:6px !important;padding:10px !important;user-select:none}.collapsable-code{position:relative;width:100%;margin:40px 0}.collapsable-code input[type="checkbox"]{position:absolute;visibility:hidden}.collapsable-code input[type="checkbox"]:checked~pre,.collapsable-code input[type="checkbox"]:checked~.code-toolbar pre{height:0;padding:0;border-top:none}.collapsable-code input[type="checkbox"]:checked~.code-toolbar{padding:0;border-top:none}.collapsable-code input[type="checkbox"]:checked~.code-toolbar .toolbar{display:none}.collapsable-code input[type="checkbox"]:checked~label .collapsable-code__toggle:after{content:attr(data-label-expand)}.collapsable-code label{position:relative;display:flex;justify-content:space-between;min-width:30px;min-height:30px;margin:0;border-bottom:1px solid #7bdb9f;cursor:pointer}.collapsable-code__title{flex:1;color:#78E2A0;padding:3px 10px;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.collapsable-code__language{color:#78E2A0;border:1px solid #7bdb9f;border-bottom:none;text-transform:uppercase;padding:3px 10px}.collapsable-code__toggle{color:#78E2A0;font-size:16px;padding:3px 10px}.collapsable-code__toggle:after{content:attr(data-label-collapse)}.collapsable-code pre{margin-top:0}.collapsable-code pre::first-line{line-height:0}.collapsable-code .code-toolbar{margin:0}.terms h1{color:#78E2A0}.terms h3{font-size:initial}body .gist .blob-num,body .gist .blob-code-inner{border:none} +:root{--phoneWidth: (max-width: 684px);--tabletWidth: (max-width: 900px)}@font-face{font-display:swap;font-family:'Fira Code';font-style:normal;font-weight:400;src:url("../fonts/FiraCode-Regular.woff") format("woff")}@font-face{font-display:swap;font-family:'Fira Code';font-style:normal;font-weight:800;src:url("../fonts/FiraCode-Bold.woff") format("woff")}.button-container{display:table;margin-left:auto;margin-right:auto}button,.button,a.button{position:relative;display:flex;align-items:center;justify-content:center;padding:8px 18px;margin-bottom:5px;text-decoration:none;text-align:center;border-radius:8;border:1px solid #FF6266;background:#FF6266;color:#221f29;font:inherit;font-weight:bold;appearance:none;cursor:pointer;outline:none}button:hover,.button:hover,a.button:hover{background:rgba(255,98,102,0.9)}button.outline,.button.outline,a.button.outline{background:transparent;box-shadow:none;padding:8px 18px}button.outline :hover,.button.outline :hover,a.button.outline :hover{transform:none;box-shadow:none}button.link,.button.link,a.button.link{background:none;font-size:1rem}button.small,.button.small,a.button.small{font-size:.8rem}button.wide,.button.wide,a.button.wide{min-width:200px;padding:14px 24px}a.read-more,a.read-more:hover,a.read-more:active{display:inline-flex;border:none;color:#FF6266;background:none;box-shadow:none;padding:0;margin:20px 0;max-width:100%}.code-toolbar{margin-bottom:20px}.code-toolbar .toolbar-item a{position:relative;display:inline-flex;align-items:center;justify-content:center;padding:3px 8px;margin-bottom:5px;text-decoration:none;text-align:center;font-size:13px;font-weight:500;border-radius:8px;border:1px solid transparent;appearance:none;cursor:pointer;outline:none}input,textarea,select{background:transparent;color:#FF6266;border:1px solid #FF6266;border-radius:0;padding:10px;font:inherit;appearance:none}input:focus,input :active,textarea:focus,textarea :active,select:focus,select :active{border-color:#fff;outline:1px solid #fff}input:active,textarea:active,select:active{box-shadow:none}select{background:#221f29}select option{background:#221f29}::placeholder{color:rgba(255,98,102,0.5)}.header{display:flex;flex-direction:column;position:relative}@media print{.header{display:none}}.header__inner{display:flex;align-items:center;justify-content:space-between}.header__logo{display:flex;flex:1}.header__logo:after{content:'';background:repeating-linear-gradient(90deg, #FF6266, #FF6266 2px, transparent 0, transparent 10px);display:block;width:100%;right:10px}.header__logo a{flex:0 0 auto;max-width:100%;text-decoration:none}.navigation-menu{display:flex;align-items:flex-start;justify-content:space-between;margin:20px 1px}@media (max-width: 684px){.navigation-menu{margin:0}}.navigation-menu__inner{display:flex;flex:1;flex-wrap:wrap;list-style:none;margin:0;padding:0}.navigation-menu__inner>li{flex:0 0 auto;margin-bottom:10px;white-space:nowrap}.navigation-menu__inner>li:not(:last-of-type){margin-right:20px}@media (max-width: 684px){.navigation-menu__inner{flex-direction:column;align-items:flex-start;padding:0}.navigation-menu__inner li{margin:0;padding:5px}}.navigation-menu .spacer{flex-grow:1 !important}.menu{display:flex;flex-direction:column;position:relative;list-style:none;padding:0;margin:0}.menu__trigger{margin-right:0 !important;color:#FF6266;user-select:none;cursor:pointer}.menu__dropdown{display:none;flex-direction:column;position:absolute;background:#221f29;box-shadow:0 10px rgba(34,31,41,0.8),-10px 10px rgba(34,31,41,0.8),10px 10px rgba(34,31,41,0.8);color:white;border:2px solid;margin:0;padding:10px;top:10px;left:0;list-style:none;z-index:99}.open .menu__dropdown{display:flex}.menu__dropdown>li{flex:0 0 auto}.menu__dropdown>li:not(:last-of-type){margin-bottom:10px}.menu__dropdown>li a{display:flex;padding:5px}@media (max-width: 684px){.menu--desktop{display:none}}.menu--mobile .menu__trigger{color:#FF6266;border:2px solid;margin-left:10px;height:100%;padding:3px 8px;margin-bottom:0 !important;position:relative;cursor:pointer;display:none}@media (max-width: 684px){.menu--mobile .menu__trigger{display:block}}@media (max-width: 684px){.menu--mobile .menu__dropdown{left:auto;right:0}}.menu--mobile li{flex:0 0 auto}.menu--mobile li:not(:last-of-type){margin-bottom:10px}.menu--language-selector .menu__trigger{color:#FF6266;border:2px solid;margin-left:10px;height:100%;padding:3px 8px;margin-bottom:0 !important;position:relative;cursor:pointer}@media (max-width: 684px){.menu--language-selector .menu__trigger{display:none}}.menu--language-selector .menu__dropdown{left:auto;right:0}.logo{display:flex;align-items:center;text-decoration:none;background:#FF6266;color:black;padding:5px 10px}html{box-sizing:border-box}*,*:before,*:after{box-sizing:inherit}body{margin:0;padding:0;font-family:'Fira Code', Monaco, Consolas, Ubuntu Mono, monospace;font-size:1rem;line-height:1.54;letter-spacing:-0.02em;background-color:#221f29;color:#fff;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;font-feature-settings:"liga", "tnum", "zero", "ss01", "locl";font-variant-ligatures:contextual;-webkit-overflow-scrolling:touch;-webkit-text-size-adjust:100%}@media (max-width: 684px){body{font-size:1rem}}.headings--one-size h1,.headings--one-size h2,.headings--one-size h3,.headings--one-size h4,.headings--one-size h5,.headings--one-size h6{line-height:1.3}.headings--one-size h1:not(first-child),.headings--one-size h2:not(first-child),.headings--one-size h3:not(first-child),.headings--one-size h4:not(first-child),.headings--one-size h5:not(first-child),.headings--one-size h6:not(first-child){margin-top:40px}.headings--one-size h1,.headings--one-size h2,.headings--one-size h3{font-size:1.4rem}.headings--one-size h4,.headings--one-size h5,.headings--one-size h6{font-size:1.2rem}a{color:inherit}img{display:block;max-width:100%}img.left{margin-right:auto}img.center{margin-left:auto;margin-right:auto}img.right{margin-left:auto}p{margin-bottom:20px}figure{display:table;max-width:100%;margin:25px 0}figure.left{margin-right:auto}figure.center{margin-left:auto;margin-right:auto}figure.right{margin-left:auto}figure figcaption{font-size:14px;padding:5px 10px;margin-top:5px;background:#FF6266;color:#221f29}figure figcaption.left{text-align:left}figure figcaption.center{text-align:center}figure figcaption.right{text-align:right}code,kbd{font-family:'Fira Code', Monaco, Consolas, Ubuntu Mono, monospace !important;font-feature-settings:normal;background:rgba(255,98,102,0.2);color:#FF6266;padding:1px 6px;margin:0 2px;font-size:.95rem}code code,code kbd,kbd code,kbd kbd{background:transparent;padding:0;margin:0}pre{background:transparent !important;padding:20px 10px;margin:40px 0;font-size:.95rem !important;overflow:auto;border-top:1px solid rgba(255,255,255,0.1);border-bottom:1px solid rgba(255,255,255,0.1)}pre+pre{border-top:0;margin-top:-40px}@media (max-width: 684px){pre{white-space:pre-wrap;word-wrap:break-word}}pre code{background:none !important;margin:0;padding:0;font-size:inherit;border:none}blockquote{border-top:1px solid #FF6266;border-bottom:1px solid #FF6266;margin:40px 0;padding:25px}@media (max-width: 684px){blockquote{padding-right:0}}blockquote p:first-of-type{margin-top:0}blockquote p:last-of-type{margin-bottom:0}blockquote p{position:relative}blockquote p:first-of-type:before{content:'>';display:block;position:absolute;left:-25px;color:#FF6266}blockquote.twitter-tweet{position:relative;background:rgba(255,98,102,0.1);font:inherit;color:inherit;border:1px solid #FF6266;padding-top:60px}blockquote.twitter-tweet p:before{content:''}blockquote.twitter-tweet:before{content:'> From Twitter:';position:absolute;top:20px;color:#FF6266;font-weight:bold}blockquote.twitter-tweet a{color:#FF6266}table{table-layout:auto;border-collapse:collapse;width:100%;margin:40px 0}table,th,td{border:1px dashed #FF6266;padding:10px}th{color:#FF6266}ul,ol{margin-left:22px;padding:0}ul li,ol li{position:relative}@media (max-width: 684px){ul,ol{margin-left:20px}}ol{list-style:none;counter-reset:li}ol li{counter-increment:li}ol li:before{content:counter(li);position:absolute;right:calc(100% + 10px);color:#FF6266;display:inline-block;text-align:right}ol ol{margin-left:38px}ol ol li{counter-increment:li}ol ol li:before{content:counters(li, ".") " "}mark{background:#FF6266;color:#221f29}.container{display:flex;flex-direction:column;padding:40px;max-width:864px;min-height:100vh;border-right:1px solid rgba(255,255,255,0.1)}.container.full,.container.center{border:none;margin:0 auto}.container.full{max-width:100%}@media (max-width: 684px){.container{padding:20px}}@media print{.container{display:initial}}.content{display:flex;flex-direction:column}@media print{.content{display:initial}}hr{width:100%;border:none;background:rgba(255,255,255,0.1);height:1px}.hidden{display:none}sup{line-height:0}.index-content{margin-top:20px}.framed{border:1px solid #FF6266;padding:20px}.framed *:first-child{margin-top:0}.framed *:last-child{margin-bottom:0}.posts{width:100%}.post{width:100%;text-align:left;margin:20px auto;padding:20px 0}.post:not(:last-of-type){border-bottom:1px solid rgba(255,255,255,0.1)}.post-meta{font-size:1rem;margin-bottom:10px;color:rgba(255,98,102,0.7)}.post-title{position:relative;color:#FF6266;margin:0 0 15px;padding-bottom:15px;border-bottom:3px dotted #FF6266}.post-title:after{content:'';position:absolute;bottom:2px;display:block;width:100%;border-bottom:3px dotted #FF6266}.post-title a{text-decoration:none}.post-tags{display:block;margin-bottom:20px;font-size:1rem;opacity:.5}.post-tags a{text-decoration:none}.post-content{margin-top:30px}.post-cover{border:20px solid #FF6266;background:transparent;margin:40px 0;padding:20px}@media (max-width: 684px){.post-cover{padding:10px;border-width:10px}}.post ul{list-style:none}.post ul li:not(:empty):before{content:'-';position:absolute;left:-20px;color:#FF6266}.post--regulation h1{justify-content:center}.post--regulation h2{justify-content:center;margin-bottom:10px}.post--regulation h2+h2{margin-top:-10px;margin-bottom:20px}.hanchor{color:rgba(255,98,102,0.9);text-decoration:none;margin-left:10px;visibility:hidden}h1:hover a,h2:hover a,h3:hover a,h4:hover a{visibility:visible}.footnotes{color:rgba(255,255,255,0.5)}.pagination{margin-top:50px}@media print{.pagination{display:none}}.pagination__title{display:flex;text-align:center;position:relative;margin:100px 0 20px}.pagination__title-h{text-align:center;margin:0 auto;padding:5px 10px;background:#221f29;color:rgba(255,255,255,0.3);font-size:.8rem;text-transform:uppercase;text-decoration:none;letter-spacing:.1em;z-index:1}.pagination__title hr{position:absolute;left:0;right:0;width:100%;margin-top:15px;z-index:0}.pagination__buttons{display:flex;align-items:center;justify-content:center;flex-flow:row wrap;gap:10px}.pagination__buttons a{text-decoration:none}.button{position:relative;display:inline-flex;align-items:center;justify-content:center;font-size:1rem;padding:0;appearance:none}@media (max-width: 684px){.button{flex:1}}.button a{display:flex;justify-content:center;flex:1;padding:8px 16px;text-decoration:none;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.button__text{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.button.next .button__icon{margin-left:8px}.button.previous .button__icon{margin-right:8px}.footer{padding:40px 0;flex-grow:0;opacity:.5}.footer__inner{display:flex;align-items:center;justify-content:space-between;margin:0;width:760px;max-width:100%}@media (max-width: 900px){.footer__inner{flex-direction:column}}.footer a{color:inherit}.footer .copyright{display:flex;flex-flow:row wrap;flex:1;align-items:center;font-size:1rem;justify-content:center}.footer .copyright--user{margin:auto;text-align:center}.footer .copyright>*:first-child:not(:only-child){margin-right:10px}.footer .copyright span{white-space:nowrap}code[class*="language-"],pre[class*="language-"]{color:#ccc;background:none;font-family:Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none}pre[class*="language-"]{padding:1em;margin:.5em 0;overflow:auto}:not(pre)>code[class*="language-"],pre[class*="language-"]{background:#2d2d2d}:not(pre)>code[class*="language-"]{padding:.1em;border-radius:.3em;white-space:normal}.token.comment,.token.block-comment,.token.prolog,.token.doctype,.token.cdata{color:#999}.token.punctuation{color:#ccc}.token.tag,.token.attr-name,.token.namespace,.token.deleted{color:#e2777a}.token.function-name{color:#6196cc}.token.boolean,.token.number,.token.function{color:#f08d49}.token.property,.token.class-name,.token.constant,.token.symbol{color:#f8c555}.token.selector,.token.important,.token.atrule,.token.keyword,.token.builtin{color:#cc99cd}.token.string,.token.char,.token.attr-value,.token.regex,.token.variable{color:#7ec699}.token.operator,.token.entity,.token.url{color:#67cdcc}.token.important,.token.bold{font-weight:bold}.token.italic{font-style:italic}.token.entity{cursor:help}.token.inserted{color:green}pre[data-line]{position:relative;padding:1em 0 1em 3em}.line-highlight{position:absolute;left:0;right:0;padding:inherit 0;margin-top:1em;background:rgba(153,122,102,0.08);background:linear-gradient(to right, rgba(153,122,102,0.1) 70%, rgba(153,122,102,0));pointer-events:none;line-height:inherit;white-space:pre}@media print{.line-highlight{-webkit-print-color-adjust:exact;color-adjust:exact}}.line-highlight:before,.line-highlight[data-end]:after{content:attr(data-start);position:absolute;top:.4em;left:.6em;min-width:1em;padding:0 .5em;background-color:rgba(153,122,102,0.4);color:#f5f2f0;font:bold 65%/1.5 sans-serif;text-align:center;vertical-align:.3em;border-radius:999px;text-shadow:none;box-shadow:0 1px white}.line-highlight[data-end]:after{content:attr(data-end);top:auto;bottom:.4em}.line-numbers .line-highlight:before,.line-numbers .line-highlight:after{content:none}pre[id].linkable-line-numbers span.line-numbers-rows{pointer-events:all}pre[id].linkable-line-numbers span.line-numbers-rows>span:before{cursor:pointer}pre[id].linkable-line-numbers span.line-numbers-rows>span:hover:before{background-color:rgba(128,128,128,0.2)}pre[class*="language-"].line-numbers{position:relative;padding-left:3.8em;counter-reset:linenumber}pre[class*="language-"].line-numbers>code{position:relative;white-space:inherit}.line-numbers .line-numbers-rows{position:absolute;pointer-events:none;top:0;font-size:100%;left:-3.8em;width:3em;letter-spacing:-1px;border-right:1px solid #999;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.line-numbers-rows>span{display:block;counter-increment:linenumber}.line-numbers-rows>span:before{content:counter(linenumber);color:#999;display:block;padding-right:0.8em;text-align:right}.command-line-prompt{border-right:1px solid #999;display:block;float:left;font-size:100%;letter-spacing:-1px;margin-right:1em;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.command-line-prompt>span:before{color:#999;content:' ';display:block;padding-right:0.8em}.command-line-prompt>span[data-user]:before{content:"[" attr(data-user) "@" attr(data-host) "] $"}.command-line-prompt>span[data-user="root"]:before{content:"[" attr(data-user) "@" attr(data-host) "] #"}.command-line-prompt>span[data-prompt]:before{content:attr(data-prompt)}div.code-toolbar{position:relative}div.code-toolbar>.toolbar{position:absolute;top:.3em;right:.2em;transition:opacity 0.3s ease-in-out;opacity:0}div.code-toolbar:hover>.toolbar{opacity:1}div.code-toolbar:focus-within>.toolbar{opacity:1}div.code-toolbar>.toolbar>.toolbar-item{display:inline-block}div.code-toolbar>.toolbar>.toolbar-item>a{cursor:pointer}div.code-toolbar>.toolbar>.toolbar-item>button{background:none;border:0;color:inherit;font:inherit;line-height:normal;overflow:visible;padding:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none}div.code-toolbar>.toolbar>.toolbar-item>a,div.code-toolbar>.toolbar>.toolbar-item>button,div.code-toolbar>.toolbar>.toolbar-item>span{color:#bbb;font-size:.8em;padding:0 .5em;background:#f5f2f0;background:rgba(224,224,224,0.2);box-shadow:0 2px 0 0 rgba(0,0,0,0.2);border-radius:.5em}div.code-toolbar>.toolbar>.toolbar-item>a:hover,div.code-toolbar>.toolbar>.toolbar-item>a:focus,div.code-toolbar>.toolbar>.toolbar-item>button:hover,div.code-toolbar>.toolbar>.toolbar-item>button:focus,div.code-toolbar>.toolbar>.toolbar-item>span:hover,div.code-toolbar>.toolbar>.toolbar-item>span:focus{color:inherit;text-decoration:none}code.language-css,code.language-scss,.token.boolean,.token.string,.token.entity,.token.url,.language-css .token.string,.language-scss .token.string,.style .token.string,.token.attr-value,.token.keyword,.token.control,.token.directive,.token.statement,.token.regex,.token.atrule,.token.number,.token.inserted,.token.important{color:#FF6266 !important}.token.tag-id,.token.atrule-id,.token.operator,.token.unit,.token.placeholder,.token.variable,.token.tag,.token.attr-name,.token.namespace,.token.deleted,.token.property,.token.class-name,.token.constant,.token.symbol{color:rgba(255,98,102,0.7) !important}.token.property,.token.function,.token.function-name,.token.deleted,code.language-javascript,code.language-html,.command-line-prompt>span:before{color:#9a9999 !important}.token.selector,.token.tag,.token.punctuation{color:white}.token.comment,.token.prolog,.token.doctype,.token.cdata{color:rgba(255,255,255,0.3) !important}.token.namespace{opacity:.7 !important}pre[data-line]{position:relative}pre[class*="language-"]{margin:0;padding:0;overflow:auto}.line-highlight{position:absolute;left:0;right:0;padding:0;margin:0;background:rgba(245,104,107,0.08);pointer-events:none;line-height:inherit;white-space:pre}.line-highlight:before,.line-highlight[data-end]:after{content:attr(data-start);position:absolute;left:.6em;min-width:1em;padding:0 .5em;background-color:rgba(153,122,102,0.4);color:#f5f2f0;font:bold 65%/1.5 sans-serif;text-align:center;vertical-align:.3em;border-radius:999px;text-shadow:none;box-shadow:0 1px white}.line-highlight[data-end]:after{content:attr(data-end);top:auto;bottom:.4em}.line-numbers .line-highlight:before,.line-numbers .line-highlight:after{content:none}.code-toolbar{position:relative;margin:40px 0;padding:20px;border:1px solid rgba(255,255,255,0.1)}.code-toolbar+.code-toolbar,.code-toolbar+.highlight,.code-toolbar+.highlight .code-toolbar{border-top:0;margin-top:calc(-1 * $code-margin)}.code-toolbar pre,.code-toolbar code{border:none}.code-toolbar code{display:block;color:inherit}.code-toolbar>.toolbar button{font-size:.8em !important;background:rgba(224,224,224,0.2) !important;color:#bbb !important;box-shadow:0 2px 0 0 rgba(0,0,0,0.2) !important;border-radius:0 !important;margin:6px !important;padding:10px !important;user-select:none}.collapsable-code{position:relative;width:100%;margin:40px 0}.collapsable-code input[type="checkbox"]{position:absolute;visibility:hidden}.collapsable-code input[type="checkbox"]:checked~pre,.collapsable-code input[type="checkbox"]:checked~.code-toolbar pre{height:0;padding:0;border-top:none}.collapsable-code input[type="checkbox"]:checked~.code-toolbar{padding:0;border-top:none}.collapsable-code input[type="checkbox"]:checked~.code-toolbar .toolbar{display:none}.collapsable-code input[type="checkbox"]:checked~label .collapsable-code__toggle:after{content:attr(data-label-expand)}.collapsable-code label{position:relative;display:flex;justify-content:space-between;min-width:30px;min-height:30px;margin:0;border-bottom:1px solid #f5686b;cursor:pointer}.collapsable-code__title{flex:1;color:#FF6266;padding:3px 10px;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.collapsable-code__language{color:#FF6266;border:1px solid #f5686b;border-bottom:none;text-transform:uppercase;padding:3px 10px}.collapsable-code__toggle{color:#FF6266;font-size:16px;padding:3px 10px}.collapsable-code__toggle:after{content:attr(data-label-collapse)}.collapsable-code pre{margin-top:0}.collapsable-code pre::first-line{line-height:0}.collapsable-code .code-toolbar{margin:0}.terms h1{color:#FF6266}.terms h3{font-size:initial}body .gist .blob-num,body .gist .blob-code-inner{border:none} /*# sourceMappingURL=styles.css.map */ \ No newline at end of file diff --git a/resources/_gen/assets/scss/css/green-local.scss_f120a3f402b106f64b18d498afd3d82e.content b/resources/_gen/assets/scss/css/green-local.scss_f120a3f402b106f64b18d498afd3d82e.content new file mode 100644 index 0000000..5a6bbda --- /dev/null +++ b/resources/_gen/assets/scss/css/green-local.scss_f120a3f402b106f64b18d498afd3d82e.content @@ -0,0 +1,1191 @@ +@charset "UTF-8"; +/* COLOR VARIABLES */ +/* MEDIA QUERIES */ +/* variables for js, must be the same as these in @custom-media queries */ +:root { + --phoneWidth: (max-width: 684px); + --tabletWidth: (max-width: 900px); } + +@font-face { + font-display: swap; + font-family: 'Fira Code'; + font-style: normal; + font-weight: 400; + src: url("../fonts/FiraCode-Regular.woff") format("woff"); } + +@font-face { + font-display: swap; + font-family: 'Fira Code'; + font-style: normal; + font-weight: 800; + src: url("../fonts/FiraCode-Bold.woff") format("woff"); } + +.button-container { + display: table; + margin-left: auto; + margin-right: auto; } + +button, +.button, +a.button { + position: relative; + display: flex; + align-items: center; + justify-content: center; + padding: 8px 18px; + margin-bottom: 5px; + text-decoration: none; + text-align: center; + border-radius: 8; + border: 1px solid #78E2A0; + background: #78E2A0; + color: #1f222a; + font: inherit; + font-weight: bold; + appearance: none; + cursor: pointer; + outline: none; + /* variants */ + /* sizes */ } + button:hover, + .button:hover, + a.button:hover { + background: rgba(120, 226, 160, 0.9); } + button.outline, + .button.outline, + a.button.outline { + background: transparent; + box-shadow: none; + padding: 8px 18px; } + button.outline :hover, + .button.outline :hover, + a.button.outline :hover { + transform: none; + box-shadow: none; } + button.link, + .button.link, + a.button.link { + background: none; + font-size: 1rem; } + button.small, + .button.small, + a.button.small { + font-size: .8rem; } + button.wide, + .button.wide, + a.button.wide { + min-width: 200px; + padding: 14px 24px; } + +a.read-more, +a.read-more:hover, +a.read-more:active { + display: inline-flex; + border: none; + color: #78E2A0; + background: none; + box-shadow: none; + padding: 0; + margin: 20px 0; + max-width: 100%; } + +.code-toolbar { + margin-bottom: 20px; } + .code-toolbar .toolbar-item a { + position: relative; + display: inline-flex; + align-items: center; + justify-content: center; + padding: 3px 8px; + margin-bottom: 5px; + text-decoration: none; + text-align: center; + font-size: 13px; + font-weight: 500; + border-radius: 8px; + border: 1px solid transparent; + appearance: none; + cursor: pointer; + outline: none; } + +input, textarea, select { + background: transparent; + color: #78E2A0; + border: 1px solid #78E2A0; + border-radius: 0; + padding: 10px; + font: inherit; + appearance: none; } + input:focus, input :active, textarea:focus, textarea :active, select:focus, select :active { + border-color: white; + outline: 1px solid white; } + input:active, textarea:active, select:active { + box-shadow: none; } + +select { + background: #1f222a; } + select option { + background: #1f222a; } + +::placeholder { + color: rgba(120, 226, 160, 0.5); } + +.header { + display: flex; + flex-direction: column; + position: relative; } + @media print { + .header { + display: none; } } + .header__inner { + display: flex; + align-items: center; + justify-content: space-between; } + .header__logo { + display: flex; + flex: 1; } + .header__logo:after { + content: ''; + background: repeating-linear-gradient(90deg, #78E2A0, #78E2A0 2px, transparent 0, transparent 10px); + display: block; + width: 100%; + right: 10px; } + .header__logo a { + flex: 0 0 auto; + max-width: 100%; + text-decoration: none; } + +.navigation-menu { + display: flex; + align-items: flex-start; + justify-content: space-between; + margin: 20px 1px; } + @media (max-width: 684px) { + .navigation-menu { + margin: 0; } } + .navigation-menu__inner { + display: flex; + flex: 1; + flex-wrap: wrap; + list-style: none; + margin: 0; + padding: 0; } + .navigation-menu__inner > li { + flex: 0 0 auto; + margin-bottom: 10px; + white-space: nowrap; } + .navigation-menu__inner > li:not(:last-of-type) { + margin-right: 20px; } + @media (max-width: 684px) { + .navigation-menu__inner { + flex-direction: column; + align-items: flex-start; + padding: 0; } + .navigation-menu__inner li { + margin: 0; + padding: 5px; } } + .navigation-menu .spacer { + flex-grow: 1 !important; } + +.menu { + display: flex; + flex-direction: column; + position: relative; + list-style: none; + padding: 0; + margin: 0; } + .menu__trigger { + margin-right: 0 !important; + color: #78E2A0; + user-select: none; + cursor: pointer; } + .menu__dropdown { + display: none; + flex-direction: column; + position: absolute; + background: #1f222a; + box-shadow: 0 10px rgba(31, 34, 42, 0.8), -10px 10px rgba(31, 34, 42, 0.8), 10px 10px rgba(31, 34, 42, 0.8); + color: white; + border: 2px solid; + margin: 0; + padding: 10px; + top: 10px; + left: 0; + list-style: none; + z-index: 99; } + .open .menu__dropdown { + display: flex; } + .menu__dropdown > li { + flex: 0 0 auto; } + .menu__dropdown > li:not(:last-of-type) { + margin-bottom: 10px; } + .menu__dropdown > li a { + display: flex; + padding: 5px; } + @media (max-width: 684px) { + .menu--desktop { + display: none; } } + .menu--mobile .menu__trigger { + color: #78E2A0; + border: 2px solid; + margin-left: 10px; + height: 100%; + padding: 3px 8px; + margin-bottom: 0 !important; + position: relative; + cursor: pointer; + display: none; } + @media (max-width: 684px) { + .menu--mobile .menu__trigger { + display: block; } } + @media (max-width: 684px) { + .menu--mobile .menu__dropdown { + left: auto; + right: 0; } } + .menu--mobile li { + flex: 0 0 auto; } + .menu--mobile li:not(:last-of-type) { + margin-bottom: 10px; } + .menu--language-selector .menu__trigger { + color: #78E2A0; + border: 2px solid; + margin-left: 10px; + height: 100%; + padding: 3px 8px; + margin-bottom: 0 !important; + position: relative; + cursor: pointer; } + @media (max-width: 684px) { + .menu--language-selector .menu__trigger { + display: none; } } + .menu--language-selector .menu__dropdown { + left: auto; + right: 0; } + +.logo { + display: flex; + align-items: center; + text-decoration: none; + background: #78E2A0; + color: black; + padding: 5px 10px; } + +html { + box-sizing: border-box; } + +*, +*:before, +*:after { + box-sizing: inherit; } + +body { + margin: 0; + padding: 0; + font-family: 'Fira Code', Monaco, Consolas, Ubuntu Mono, monospace; + font-size: 1rem; + line-height: 1.54; + letter-spacing: -0.02em; + background-color: #1f222a; + color: white; + text-rendering: optimizeLegibility; + -webkit-font-smoothing: antialiased; + font-feature-settings: "liga", "tnum", "zero", "ss01", "locl"; + font-variant-ligatures: contextual; + -webkit-overflow-scrolling: touch; + -webkit-text-size-adjust: 100%; } + @media (max-width: 684px) { + body { + font-size: 1rem; } } +.headings--one-size h1, +.headings--one-size h2, +.headings--one-size h3, +.headings--one-size h4, +.headings--one-size h5, +.headings--one-size h6 { + line-height: 1.3; } + .headings--one-size h1:not(first-child), + .headings--one-size h2:not(first-child), + .headings--one-size h3:not(first-child), + .headings--one-size h4:not(first-child), + .headings--one-size h5:not(first-child), + .headings--one-size h6:not(first-child) { + margin-top: 40px; } + +.headings--one-size h1, +.headings--one-size h2, +.headings--one-size h3 { + font-size: 1.4rem; } + +.headings--one-size h4, +.headings--one-size h5, +.headings--one-size h6 { + font-size: 1.2rem; } + +a { + color: inherit; + /* Waiting for a better times... */ + /* &:has(code) { + text-decoration-color: $accent; + } */ } + +img { + display: block; + max-width: 100%; } + img.left { + margin-right: auto; } + img.center { + margin-left: auto; + margin-right: auto; } + img.right { + margin-left: auto; } + +p { + margin-bottom: 20px; } + +figure { + display: table; + max-width: 100%; + margin: 25px 0; } + figure.left { + margin-right: auto; } + figure.center { + margin-left: auto; + margin-right: auto; } + figure.right { + margin-left: auto; } + figure figcaption { + font-size: 14px; + padding: 5px 10px; + margin-top: 5px; + background: #78E2A0; + color: #1f222a; + /* opacity: .8; */ } + figure figcaption.left { + text-align: left; } + figure figcaption.center { + text-align: center; } + figure figcaption.right { + text-align: right; } + +code, kbd { + font-family: 'Fira Code', Monaco, Consolas, Ubuntu Mono, monospace !important; + font-feature-settings: normal; + background: rgba(120, 226, 160, 0.2); + color: #78E2A0; + padding: 1px 6px; + margin: 0 2px; + font-size: .95rem; } + code code, code kbd, kbd code, kbd kbd { + background: transparent; + padding: 0; + margin: 0; } + +pre { + background: transparent !important; + padding: 20px 10px; + margin: 40px 0; + font-size: .95rem !important; + overflow: auto; + border-top: 1px solid rgba(255, 255, 255, 0.1); + border-bottom: 1px solid rgba(255, 255, 255, 0.1); } + pre + pre { + border-top: 0; + margin-top: -40px; } + @media (max-width: 684px) { + pre { + white-space: pre-wrap; + word-wrap: break-word; } } + pre code { + background: none !important; + margin: 0; + padding: 0; + font-size: inherit; + border: none; } + +blockquote { + border-top: 1px solid #78E2A0; + border-bottom: 1px solid #78E2A0; + margin: 40px 0; + padding: 25px; } + @media (max-width: 684px) { + blockquote { + padding-right: 0; } } + blockquote p:first-of-type { + margin-top: 0; } + blockquote p:last-of-type { + margin-bottom: 0; } + blockquote p { + position: relative; } + blockquote p:first-of-type:before { + content: '>'; + display: block; + position: absolute; + left: -25px; + color: #78E2A0; } + blockquote.twitter-tweet { + position: relative; + background: rgba(120, 226, 160, 0.1); + font: inherit; + color: inherit; + border: 1px solid #78E2A0; + padding-top: 60px; } + blockquote.twitter-tweet p:before { + content: ''; } + blockquote.twitter-tweet:before { + content: '> From Twitter:'; + position: absolute; + top: 20px; + color: #78E2A0; + font-weight: bold; } + blockquote.twitter-tweet a { + color: #78E2A0; } + +table { + table-layout: auto; + border-collapse: collapse; + width: 100%; + margin: 40px 0; } + +table, +th, +td { + border: 1px dashed #78E2A0; + padding: 10px; } + +th { + color: #78E2A0; } + +ul, +ol { + margin-left: 22px; + padding: 0; } + ul li, + ol li { + position: relative; } + @media (max-width: 684px) { + ul, + ol { + margin-left: 20px; } } +ol { + list-style: none; + counter-reset: li; } + ol li { + counter-increment: li; } + ol li:before { + content: counter(li); + position: absolute; + right: calc(100% + 10px); + color: #78E2A0; + display: inline-block; + text-align: right; } + ol ol { + margin-left: 38px; } + ol ol li { + counter-increment: li; } + ol ol li:before { + content: counters(li, ".") " "; } + +mark { + background: #78E2A0; + color: #1f222a; } + +.container { + display: flex; + flex-direction: column; + padding: 40px; + max-width: 864px; + min-height: 100vh; + border-right: 1px solid rgba(255, 255, 255, 0.1); } + .container.full, .container.center { + border: none; + margin: 0 auto; } + .container.full { + max-width: 100%; } + @media (max-width: 684px) { + .container { + padding: 20px; } } + @media print { + .container { + display: initial; } } +.content { + display: flex; + flex-direction: column; } + @media print { + .content { + display: initial; } } +hr { + width: 100%; + border: none; + background: rgba(255, 255, 255, 0.1); + height: 1px; } + +.hidden { + display: none; } + +sup { + line-height: 0; } + +.index-content { + margin-top: 20px; } + +.framed { + border: 1px solid #78E2A0; + padding: 20px; } + .framed *:first-child { + margin-top: 0; } + .framed *:last-child { + margin-bottom: 0; } + +.posts { + width: 100%; } + +.post { + width: 100%; + text-align: left; + margin: 20px auto; + padding: 20px 0; } + .post:not(:last-of-type) { + border-bottom: 1px solid rgba(255, 255, 255, 0.1); } + .post-meta { + font-size: 1rem; + margin-bottom: 10px; + color: rgba(120, 226, 160, 0.7); } + .post-title { + position: relative; + color: #78E2A0; + margin: 0 0 15px; + padding-bottom: 15px; + border-bottom: 3px dotted #78E2A0; } + .post-title:after { + content: ''; + position: absolute; + bottom: 2px; + display: block; + width: 100%; + border-bottom: 3px dotted #78E2A0; } + .post-title a { + text-decoration: none; } + .post-tags { + display: block; + margin-bottom: 20px; + font-size: 1rem; + opacity: .5; } + .post-tags a { + text-decoration: none; } + .post-content { + margin-top: 30px; } + .post-cover { + border: 20px solid #78E2A0; + background: transparent; + margin: 40px 0; + padding: 20px; } + @media (max-width: 684px) { + .post-cover { + padding: 10px; + border-width: 10px; } } + .post ul { + list-style: none; } + .post ul li:not(:empty):before { + content: '-'; + position: absolute; + left: -20px; + color: #78E2A0; } + +.post--regulation h1 { + justify-content: center; } + +.post--regulation h2 { + justify-content: center; + margin-bottom: 10px; } + .post--regulation h2 + h2 { + margin-top: -10px; + margin-bottom: 20px; } + +.hanchor { + color: rgba(120, 226, 160, 0.9); + text-decoration: none; + margin-left: 10px; + visibility: hidden; } + +h1:hover a, h2:hover a, h3:hover a, h4:hover a { + visibility: visible; } + +.footnotes { + color: rgba(255, 255, 255, 0.5); } + +.pagination { + margin-top: 50px; } + @media print { + .pagination { + display: none; } } + .pagination__title { + display: flex; + text-align: center; + position: relative; + margin: 100px 0 20px; } + .pagination__title-h { + text-align: center; + margin: 0 auto; + padding: 5px 10px; + background: #1f222a; + color: rgba(255, 255, 255, 0.3); + font-size: .8rem; + text-transform: uppercase; + text-decoration: none; + letter-spacing: .1em; + z-index: 1; } + .pagination__title hr { + position: absolute; + left: 0; + right: 0; + width: 100%; + margin-top: 15px; + z-index: 0; } + .pagination__buttons { + display: flex; + align-items: center; + justify-content: center; + flex-flow: row wrap; + gap: 10px; } + .pagination__buttons a { + text-decoration: none; } + +.button { + position: relative; + display: inline-flex; + align-items: center; + justify-content: center; + font-size: 1rem; + padding: 0; + appearance: none; } + @media (max-width: 684px) { + .button { + flex: 1; } } + .button a { + display: flex; + justify-content: center; + flex: 1; + padding: 8px 16px; + text-decoration: none; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; } + .button__text { + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; } + .button.next .button__icon { + margin-left: 8px; } + .button.previous .button__icon { + margin-right: 8px; } + +.footer { + padding: 40px 0; + flex-grow: 0; + opacity: .5; } + .footer__inner { + display: flex; + align-items: center; + justify-content: space-between; + margin: 0; + width: 760px; + max-width: 100%; } + @media (max-width: 900px) { + .footer__inner { + flex-direction: column; } } + .footer a { + color: inherit; } + .footer .copyright { + display: flex; + flex-flow: row wrap; + flex: 1; + align-items: center; + font-size: 1rem; + justify-content: center; } + .footer .copyright--user { + margin: auto; + text-align: center; } + .footer .copyright > *:first-child:not(:only-child) { + margin-right: 10px; } + .footer .copyright span { + white-space: nowrap; } + +/* PrismJS 1.24.1 +https://prismjs.com/download.html#themes=prism-tomorrow&languages=markup+css+clike+javascript+actionscript+apacheconf+applescript+bash+c+csharp+cpp+cmake+coffeescript+csp+css-extras+diff+django+docker+elixir+elm+erlang+fsharp+flow+git+go+graphql+haml+handlebars+haskell+http+java+json+kotlin+latex+less+llvm+makefile+markdown+markup-templating+nasm+objectivec+ocaml+perl+php+php-extras+powershell+processing+pug+python+r+jsx+tsx+reason+ruby+rust+sass+scss+scala+scheme+sql+stylus+swift+textile+toml+twig+typescript+vim+visual-basic+wasm+yaml&plugins=line-highlight+line-numbers+jsonp-highlight+highlight-keywords+command-line+toolbar+copy-to-clipboard */ +/** + * prism.js tomorrow night eighties for JavaScript, CoffeeScript, CSS and HTML + * Based on https://github.com/chriskempson/tomorrow-theme + * @author Rose Pritchard + */ +code[class*="language-"], +pre[class*="language-"] { + color: #ccc; + background: none; + font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; + font-size: 1em; + text-align: left; + white-space: pre; + word-spacing: normal; + word-break: normal; + word-wrap: normal; + line-height: 1.5; + -moz-tab-size: 4; + -o-tab-size: 4; + tab-size: 4; + -webkit-hyphens: none; + -moz-hyphens: none; + -ms-hyphens: none; + hyphens: none; } + +/* Code blocks */ +pre[class*="language-"] { + padding: 1em; + margin: .5em 0; + overflow: auto; } + +:not(pre) > code[class*="language-"], +pre[class*="language-"] { + background: #2d2d2d; } + +/* Inline code */ +:not(pre) > code[class*="language-"] { + padding: .1em; + border-radius: .3em; + white-space: normal; } + +.token.comment, +.token.block-comment, +.token.prolog, +.token.doctype, +.token.cdata { + color: #999; } + +.token.punctuation { + color: #ccc; } + +.token.tag, +.token.attr-name, +.token.namespace, +.token.deleted { + color: #e2777a; } + +.token.function-name { + color: #6196cc; } + +.token.boolean, +.token.number, +.token.function { + color: #f08d49; } + +.token.property, +.token.class-name, +.token.constant, +.token.symbol { + color: #f8c555; } + +.token.selector, +.token.important, +.token.atrule, +.token.keyword, +.token.builtin { + color: #cc99cd; } + +.token.string, +.token.char, +.token.attr-value, +.token.regex, +.token.variable { + color: #7ec699; } + +.token.operator, +.token.entity, +.token.url { + color: #67cdcc; } + +.token.important, +.token.bold { + font-weight: bold; } + +.token.italic { + font-style: italic; } + +.token.entity { + cursor: help; } + +.token.inserted { + color: green; } + +pre[data-line] { + position: relative; + padding: 1em 0 1em 3em; } + +.line-highlight { + position: absolute; + left: 0; + right: 0; + padding: inherit 0; + margin-top: 1em; + /* Same as .prism’s padding-top */ + background: rgba(153, 122, 102, 0.08); + background: linear-gradient(to right, rgba(153, 122, 102, 0.1) 70%, rgba(153, 122, 102, 0)); + pointer-events: none; + line-height: inherit; + white-space: pre; } + +@media print { + .line-highlight { + /* + * This will prevent browsers from replacing the background color with white. + * It's necessary because the element is layered on top of the displayed code. + */ + -webkit-print-color-adjust: exact; + color-adjust: exact; } } + +.line-highlight:before, +.line-highlight[data-end]:after { + content: attr(data-start); + position: absolute; + top: .4em; + left: .6em; + min-width: 1em; + padding: 0 .5em; + background-color: rgba(153, 122, 102, 0.4); + color: #f5f2f0; + font: bold 65%/1.5 sans-serif; + text-align: center; + vertical-align: .3em; + border-radius: 999px; + text-shadow: none; + box-shadow: 0 1px white; } + +.line-highlight[data-end]:after { + content: attr(data-end); + top: auto; + bottom: .4em; } + +.line-numbers .line-highlight:before, +.line-numbers .line-highlight:after { + content: none; } + +pre[id].linkable-line-numbers span.line-numbers-rows { + pointer-events: all; } + +pre[id].linkable-line-numbers span.line-numbers-rows > span:before { + cursor: pointer; } + +pre[id].linkable-line-numbers span.line-numbers-rows > span:hover:before { + background-color: rgba(128, 128, 128, 0.2); } + +pre[class*="language-"].line-numbers { + position: relative; + padding-left: 3.8em; + counter-reset: linenumber; } + +pre[class*="language-"].line-numbers > code { + position: relative; + white-space: inherit; } + +.line-numbers .line-numbers-rows { + position: absolute; + pointer-events: none; + top: 0; + font-size: 100%; + left: -3.8em; + width: 3em; + /* works for line-numbers below 1000 lines */ + letter-spacing: -1px; + border-right: 1px solid #999; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; } + +.line-numbers-rows > span { + display: block; + counter-increment: linenumber; } + +.line-numbers-rows > span:before { + content: counter(linenumber); + color: #999; + display: block; + padding-right: 0.8em; + text-align: right; } + +.command-line-prompt { + border-right: 1px solid #999; + display: block; + float: left; + font-size: 100%; + letter-spacing: -1px; + margin-right: 1em; + pointer-events: none; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; } + +.command-line-prompt > span:before { + color: #999; + content: ' '; + display: block; + padding-right: 0.8em; } + +.command-line-prompt > span[data-user]:before { + content: "[" attr(data-user) "@" attr(data-host) "] $"; } + +.command-line-prompt > span[data-user="root"]:before { + content: "[" attr(data-user) "@" attr(data-host) "] #"; } + +.command-line-prompt > span[data-prompt]:before { + content: attr(data-prompt); } + +div.code-toolbar { + position: relative; } + +div.code-toolbar > .toolbar { + position: absolute; + top: .3em; + right: .2em; + transition: opacity 0.3s ease-in-out; + opacity: 0; } + +div.code-toolbar:hover > .toolbar { + opacity: 1; } + +/* Separate line b/c rules are thrown out if selector is invalid. + IE11 and old Edge versions don't support :focus-within. */ +div.code-toolbar:focus-within > .toolbar { + opacity: 1; } + +div.code-toolbar > .toolbar > .toolbar-item { + display: inline-block; } + +div.code-toolbar > .toolbar > .toolbar-item > a { + cursor: pointer; } + +div.code-toolbar > .toolbar > .toolbar-item > button { + background: none; + border: 0; + color: inherit; + font: inherit; + line-height: normal; + overflow: visible; + padding: 0; + -webkit-user-select: none; + /* for button */ + -moz-user-select: none; + -ms-user-select: none; } + +div.code-toolbar > .toolbar > .toolbar-item > a, +div.code-toolbar > .toolbar > .toolbar-item > button, +div.code-toolbar > .toolbar > .toolbar-item > span { + color: #bbb; + font-size: .8em; + padding: 0 .5em; + background: #f5f2f0; + background: rgba(224, 224, 224, 0.2); + box-shadow: 0 2px 0 0 rgba(0, 0, 0, 0.2); + border-radius: .5em; } + +div.code-toolbar > .toolbar > .toolbar-item > a:hover, +div.code-toolbar > .toolbar > .toolbar-item > a:focus, +div.code-toolbar > .toolbar > .toolbar-item > button:hover, +div.code-toolbar > .toolbar > .toolbar-item > button:focus, +div.code-toolbar > .toolbar > .toolbar-item > span:hover, +div.code-toolbar > .toolbar > .toolbar-item > span:focus { + color: inherit; + text-decoration: none; } + +code.language-css, +code.language-scss, +.token.boolean, +.token.string, +.token.entity, +.token.url, +.language-css .token.string, +.language-scss .token.string, +.style .token.string, +.token.attr-value, +.token.keyword, +.token.control, +.token.directive, +.token.statement, +.token.regex, +.token.atrule, +.token.number, +.token.inserted, +.token.important { + color: #78E2A0 !important; } + +.token.tag-id, +.token.atrule-id, +.token.operator, +.token.unit, +.token.placeholder, +.token.variable, +.token.tag, +.token.attr-name, +.token.namespace, +.token.deleted, +.token.property, +.token.class-name, +.token.constant, +.token.symbol { + color: rgba(120, 226, 160, 0.7) !important; } + +.token.property, +.token.function, +.token.function-name, +.token.deleted, +code.language-javascript, +code.language-html, +.command-line-prompt > span:before { + color: #999a99 !important; } + +.token.selector, +.token.tag, +.token.punctuation { + color: white; } + +.token.comment, +.token.prolog, +.token.doctype, +.token.cdata { + color: rgba(255, 255, 255, 0.3) !important; } + +.token.namespace { + opacity: .7 !important; } + +pre[data-line] { + position: relative; } + +pre[class*="language-"] { + margin: 0; + padding: 0; + overflow: auto; } + +.line-highlight { + position: absolute; + left: 0; + right: 0; + padding: 0; + margin: 0; + background: rgba(123, 219, 159, 0.08); + pointer-events: none; + line-height: inherit; + white-space: pre; } + +.line-highlight:before, +.line-highlight[data-end]:after { + content: attr(data-start); + position: absolute; + /* top: .4em; */ + left: .6em; + min-width: 1em; + padding: 0 .5em; + background-color: rgba(153, 122, 102, 0.4); + color: #f5f2f0; + font: bold 65%/1.5 sans-serif; + text-align: center; + vertical-align: .3em; + border-radius: 999px; + text-shadow: none; + box-shadow: 0 1px white; } + +.line-highlight[data-end]:after { + content: attr(data-end); + top: auto; + bottom: .4em; } + +.line-numbers .line-highlight:before, +.line-numbers .line-highlight:after { + content: none; } + +.code-toolbar { + position: relative; + margin: 40px 0; + padding: 20px; + border: 1px solid rgba(255, 255, 255, 0.1); } + .code-toolbar + .code-toolbar, + .code-toolbar + .highlight, + .code-toolbar + .highlight .code-toolbar { + border-top: 0; + margin-top: calc(-1 * $code-margin); } + .code-toolbar pre, .code-toolbar code { + border: none; } + .code-toolbar code { + display: block; + color: inherit; } + .code-toolbar > .toolbar button { + font-size: .8em !important; + background: rgba(224, 224, 224, 0.2) !important; + color: #bbb !important; + box-shadow: 0 2px 0 0 rgba(0, 0, 0, 0.2) !important; + border-radius: 0 !important; + margin: 6px !important; + padding: 10px !important; + user-select: none; } + +.collapsable-code { + position: relative; + width: 100%; + margin: 40px 0; } + .collapsable-code input[type="checkbox"] { + position: absolute; + visibility: hidden; } + .collapsable-code input[type="checkbox"]:checked ~ pre, + .collapsable-code input[type="checkbox"]:checked ~ .code-toolbar pre { + height: 0; + padding: 0; + border-top: none; } + .collapsable-code input[type="checkbox"]:checked ~ .code-toolbar { + padding: 0; + border-top: none; } + .collapsable-code input[type="checkbox"]:checked ~ .code-toolbar .toolbar { + display: none; } + .collapsable-code input[type="checkbox"]:checked ~ label .collapsable-code__toggle:after { + content: attr(data-label-expand); } + .collapsable-code label { + position: relative; + display: flex; + justify-content: space-between; + min-width: 30px; + min-height: 30px; + margin: 0; + border-bottom: 1px solid #7bdb9f; + cursor: pointer; } + .collapsable-code__title { + flex: 1; + color: #78E2A0; + padding: 3px 10px; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; } + .collapsable-code__language { + color: #78E2A0; + border: 1px solid #7bdb9f; + border-bottom: none; + text-transform: uppercase; + padding: 3px 10px; } + .collapsable-code__toggle { + color: #78E2A0; + font-size: 16px; + padding: 3px 10px; } + .collapsable-code__toggle:after { + content: attr(data-label-collapse); } + .collapsable-code pre { + margin-top: 0; } + .collapsable-code pre::first-line { + line-height: 0; } + .collapsable-code .code-toolbar { + margin: 0; } + +.terms h1 { + color: #78E2A0; } + +.terms h3 { + font-size: initial; } + +body .gist .blob-num, +body .gist .blob-code-inner { + border: none; } diff --git a/resources/_gen/assets/scss/css/green-local.scss_f120a3f402b106f64b18d498afd3d82e.json b/resources/_gen/assets/scss/css/green-local.scss_f120a3f402b106f64b18d498afd3d82e.json new file mode 100644 index 0000000..d510945 --- /dev/null +++ b/resources/_gen/assets/scss/css/green-local.scss_f120a3f402b106f64b18d498afd3d82e.json @@ -0,0 +1 @@ +{"Target":"css/green-local.css","MediaType":"text/css","Data":{}} \ No newline at end of file diff --git a/resources/_gen/assets/scss/css/pink-local.scss_f120a3f402b106f64b18d498afd3d82e.content b/resources/_gen/assets/scss/css/pink-local.scss_f120a3f402b106f64b18d498afd3d82e.content new file mode 100644 index 0000000..f9d15a1 --- /dev/null +++ b/resources/_gen/assets/scss/css/pink-local.scss_f120a3f402b106f64b18d498afd3d82e.content @@ -0,0 +1,1191 @@ +@charset "UTF-8"; +/* COLOR VARIABLES */ +/* MEDIA QUERIES */ +/* variables for js, must be the same as these in @custom-media queries */ +:root { + --phoneWidth: (max-width: 684px); + --tabletWidth: (max-width: 900px); } + +@font-face { + font-display: swap; + font-family: 'Fira Code'; + font-style: normal; + font-weight: 400; + src: url("../fonts/FiraCode-Regular.woff") format("woff"); } + +@font-face { + font-display: swap; + font-family: 'Fira Code'; + font-style: normal; + font-weight: 800; + src: url("../fonts/FiraCode-Bold.woff") format("woff"); } + +.button-container { + display: table; + margin-left: auto; + margin-right: auto; } + +button, +.button, +a.button { + position: relative; + display: flex; + align-items: center; + justify-content: center; + padding: 8px 18px; + margin-bottom: 5px; + text-decoration: none; + text-align: center; + border-radius: 8; + border: 1px solid #EE72F1; + background: #EE72F1; + color: #21202c; + font: inherit; + font-weight: bold; + appearance: none; + cursor: pointer; + outline: none; + /* variants */ + /* sizes */ } + button:hover, + .button:hover, + a.button:hover { + background: rgba(238, 114, 241, 0.9); } + button.outline, + .button.outline, + a.button.outline { + background: transparent; + box-shadow: none; + padding: 8px 18px; } + button.outline :hover, + .button.outline :hover, + a.button.outline :hover { + transform: none; + box-shadow: none; } + button.link, + .button.link, + a.button.link { + background: none; + font-size: 1rem; } + button.small, + .button.small, + a.button.small { + font-size: .8rem; } + button.wide, + .button.wide, + a.button.wide { + min-width: 200px; + padding: 14px 24px; } + +a.read-more, +a.read-more:hover, +a.read-more:active { + display: inline-flex; + border: none; + color: #EE72F1; + background: none; + box-shadow: none; + padding: 0; + margin: 20px 0; + max-width: 100%; } + +.code-toolbar { + margin-bottom: 20px; } + .code-toolbar .toolbar-item a { + position: relative; + display: inline-flex; + align-items: center; + justify-content: center; + padding: 3px 8px; + margin-bottom: 5px; + text-decoration: none; + text-align: center; + font-size: 13px; + font-weight: 500; + border-radius: 8px; + border: 1px solid transparent; + appearance: none; + cursor: pointer; + outline: none; } + +input, textarea, select { + background: transparent; + color: #EE72F1; + border: 1px solid #EE72F1; + border-radius: 0; + padding: 10px; + font: inherit; + appearance: none; } + input:focus, input :active, textarea:focus, textarea :active, select:focus, select :active { + border-color: white; + outline: 1px solid white; } + input:active, textarea:active, select:active { + box-shadow: none; } + +select { + background: #21202c; } + select option { + background: #21202c; } + +::placeholder { + color: rgba(238, 114, 241, 0.5); } + +.header { + display: flex; + flex-direction: column; + position: relative; } + @media print { + .header { + display: none; } } + .header__inner { + display: flex; + align-items: center; + justify-content: space-between; } + .header__logo { + display: flex; + flex: 1; } + .header__logo:after { + content: ''; + background: repeating-linear-gradient(90deg, #EE72F1, #EE72F1 2px, transparent 0, transparent 10px); + display: block; + width: 100%; + right: 10px; } + .header__logo a { + flex: 0 0 auto; + max-width: 100%; + text-decoration: none; } + +.navigation-menu { + display: flex; + align-items: flex-start; + justify-content: space-between; + margin: 20px 1px; } + @media (max-width: 684px) { + .navigation-menu { + margin: 0; } } + .navigation-menu__inner { + display: flex; + flex: 1; + flex-wrap: wrap; + list-style: none; + margin: 0; + padding: 0; } + .navigation-menu__inner > li { + flex: 0 0 auto; + margin-bottom: 10px; + white-space: nowrap; } + .navigation-menu__inner > li:not(:last-of-type) { + margin-right: 20px; } + @media (max-width: 684px) { + .navigation-menu__inner { + flex-direction: column; + align-items: flex-start; + padding: 0; } + .navigation-menu__inner li { + margin: 0; + padding: 5px; } } + .navigation-menu .spacer { + flex-grow: 1 !important; } + +.menu { + display: flex; + flex-direction: column; + position: relative; + list-style: none; + padding: 0; + margin: 0; } + .menu__trigger { + margin-right: 0 !important; + color: #EE72F1; + user-select: none; + cursor: pointer; } + .menu__dropdown { + display: none; + flex-direction: column; + position: absolute; + background: #21202c; + box-shadow: 0 10px rgba(33, 32, 44, 0.8), -10px 10px rgba(33, 32, 44, 0.8), 10px 10px rgba(33, 32, 44, 0.8); + color: white; + border: 2px solid; + margin: 0; + padding: 10px; + top: 10px; + left: 0; + list-style: none; + z-index: 99; } + .open .menu__dropdown { + display: flex; } + .menu__dropdown > li { + flex: 0 0 auto; } + .menu__dropdown > li:not(:last-of-type) { + margin-bottom: 10px; } + .menu__dropdown > li a { + display: flex; + padding: 5px; } + @media (max-width: 684px) { + .menu--desktop { + display: none; } } + .menu--mobile .menu__trigger { + color: #EE72F1; + border: 2px solid; + margin-left: 10px; + height: 100%; + padding: 3px 8px; + margin-bottom: 0 !important; + position: relative; + cursor: pointer; + display: none; } + @media (max-width: 684px) { + .menu--mobile .menu__trigger { + display: block; } } + @media (max-width: 684px) { + .menu--mobile .menu__dropdown { + left: auto; + right: 0; } } + .menu--mobile li { + flex: 0 0 auto; } + .menu--mobile li:not(:last-of-type) { + margin-bottom: 10px; } + .menu--language-selector .menu__trigger { + color: #EE72F1; + border: 2px solid; + margin-left: 10px; + height: 100%; + padding: 3px 8px; + margin-bottom: 0 !important; + position: relative; + cursor: pointer; } + @media (max-width: 684px) { + .menu--language-selector .menu__trigger { + display: none; } } + .menu--language-selector .menu__dropdown { + left: auto; + right: 0; } + +.logo { + display: flex; + align-items: center; + text-decoration: none; + background: #EE72F1; + color: black; + padding: 5px 10px; } + +html { + box-sizing: border-box; } + +*, +*:before, +*:after { + box-sizing: inherit; } + +body { + margin: 0; + padding: 0; + font-family: 'Fira Code', Monaco, Consolas, Ubuntu Mono, monospace; + font-size: 1rem; + line-height: 1.54; + letter-spacing: -0.02em; + background-color: #21202c; + color: white; + text-rendering: optimizeLegibility; + -webkit-font-smoothing: antialiased; + font-feature-settings: "liga", "tnum", "zero", "ss01", "locl"; + font-variant-ligatures: contextual; + -webkit-overflow-scrolling: touch; + -webkit-text-size-adjust: 100%; } + @media (max-width: 684px) { + body { + font-size: 1rem; } } +.headings--one-size h1, +.headings--one-size h2, +.headings--one-size h3, +.headings--one-size h4, +.headings--one-size h5, +.headings--one-size h6 { + line-height: 1.3; } + .headings--one-size h1:not(first-child), + .headings--one-size h2:not(first-child), + .headings--one-size h3:not(first-child), + .headings--one-size h4:not(first-child), + .headings--one-size h5:not(first-child), + .headings--one-size h6:not(first-child) { + margin-top: 40px; } + +.headings--one-size h1, +.headings--one-size h2, +.headings--one-size h3 { + font-size: 1.4rem; } + +.headings--one-size h4, +.headings--one-size h5, +.headings--one-size h6 { + font-size: 1.2rem; } + +a { + color: inherit; + /* Waiting for a better times... */ + /* &:has(code) { + text-decoration-color: $accent; + } */ } + +img { + display: block; + max-width: 100%; } + img.left { + margin-right: auto; } + img.center { + margin-left: auto; + margin-right: auto; } + img.right { + margin-left: auto; } + +p { + margin-bottom: 20px; } + +figure { + display: table; + max-width: 100%; + margin: 25px 0; } + figure.left { + margin-right: auto; } + figure.center { + margin-left: auto; + margin-right: auto; } + figure.right { + margin-left: auto; } + figure figcaption { + font-size: 14px; + padding: 5px 10px; + margin-top: 5px; + background: #EE72F1; + color: #21202c; + /* opacity: .8; */ } + figure figcaption.left { + text-align: left; } + figure figcaption.center { + text-align: center; } + figure figcaption.right { + text-align: right; } + +code, kbd { + font-family: 'Fira Code', Monaco, Consolas, Ubuntu Mono, monospace !important; + font-feature-settings: normal; + background: rgba(238, 114, 241, 0.2); + color: #EE72F1; + padding: 1px 6px; + margin: 0 2px; + font-size: .95rem; } + code code, code kbd, kbd code, kbd kbd { + background: transparent; + padding: 0; + margin: 0; } + +pre { + background: transparent !important; + padding: 20px 10px; + margin: 40px 0; + font-size: .95rem !important; + overflow: auto; + border-top: 1px solid rgba(255, 255, 255, 0.1); + border-bottom: 1px solid rgba(255, 255, 255, 0.1); } + pre + pre { + border-top: 0; + margin-top: -40px; } + @media (max-width: 684px) { + pre { + white-space: pre-wrap; + word-wrap: break-word; } } + pre code { + background: none !important; + margin: 0; + padding: 0; + font-size: inherit; + border: none; } + +blockquote { + border-top: 1px solid #EE72F1; + border-bottom: 1px solid #EE72F1; + margin: 40px 0; + padding: 25px; } + @media (max-width: 684px) { + blockquote { + padding-right: 0; } } + blockquote p:first-of-type { + margin-top: 0; } + blockquote p:last-of-type { + margin-bottom: 0; } + blockquote p { + position: relative; } + blockquote p:first-of-type:before { + content: '>'; + display: block; + position: absolute; + left: -25px; + color: #EE72F1; } + blockquote.twitter-tweet { + position: relative; + background: rgba(238, 114, 241, 0.1); + font: inherit; + color: inherit; + border: 1px solid #EE72F1; + padding-top: 60px; } + blockquote.twitter-tweet p:before { + content: ''; } + blockquote.twitter-tweet:before { + content: '> From Twitter:'; + position: absolute; + top: 20px; + color: #EE72F1; + font-weight: bold; } + blockquote.twitter-tweet a { + color: #EE72F1; } + +table { + table-layout: auto; + border-collapse: collapse; + width: 100%; + margin: 40px 0; } + +table, +th, +td { + border: 1px dashed #EE72F1; + padding: 10px; } + +th { + color: #EE72F1; } + +ul, +ol { + margin-left: 22px; + padding: 0; } + ul li, + ol li { + position: relative; } + @media (max-width: 684px) { + ul, + ol { + margin-left: 20px; } } +ol { + list-style: none; + counter-reset: li; } + ol li { + counter-increment: li; } + ol li:before { + content: counter(li); + position: absolute; + right: calc(100% + 10px); + color: #EE72F1; + display: inline-block; + text-align: right; } + ol ol { + margin-left: 38px; } + ol ol li { + counter-increment: li; } + ol ol li:before { + content: counters(li, ".") " "; } + +mark { + background: #EE72F1; + color: #21202c; } + +.container { + display: flex; + flex-direction: column; + padding: 40px; + max-width: 864px; + min-height: 100vh; + border-right: 1px solid rgba(255, 255, 255, 0.1); } + .container.full, .container.center { + border: none; + margin: 0 auto; } + .container.full { + max-width: 100%; } + @media (max-width: 684px) { + .container { + padding: 20px; } } + @media print { + .container { + display: initial; } } +.content { + display: flex; + flex-direction: column; } + @media print { + .content { + display: initial; } } +hr { + width: 100%; + border: none; + background: rgba(255, 255, 255, 0.1); + height: 1px; } + +.hidden { + display: none; } + +sup { + line-height: 0; } + +.index-content { + margin-top: 20px; } + +.framed { + border: 1px solid #EE72F1; + padding: 20px; } + .framed *:first-child { + margin-top: 0; } + .framed *:last-child { + margin-bottom: 0; } + +.posts { + width: 100%; } + +.post { + width: 100%; + text-align: left; + margin: 20px auto; + padding: 20px 0; } + .post:not(:last-of-type) { + border-bottom: 1px solid rgba(255, 255, 255, 0.1); } + .post-meta { + font-size: 1rem; + margin-bottom: 10px; + color: rgba(238, 114, 241, 0.7); } + .post-title { + position: relative; + color: #EE72F1; + margin: 0 0 15px; + padding-bottom: 15px; + border-bottom: 3px dotted #EE72F1; } + .post-title:after { + content: ''; + position: absolute; + bottom: 2px; + display: block; + width: 100%; + border-bottom: 3px dotted #EE72F1; } + .post-title a { + text-decoration: none; } + .post-tags { + display: block; + margin-bottom: 20px; + font-size: 1rem; + opacity: .5; } + .post-tags a { + text-decoration: none; } + .post-content { + margin-top: 30px; } + .post-cover { + border: 20px solid #EE72F1; + background: transparent; + margin: 40px 0; + padding: 20px; } + @media (max-width: 684px) { + .post-cover { + padding: 10px; + border-width: 10px; } } + .post ul { + list-style: none; } + .post ul li:not(:empty):before { + content: '-'; + position: absolute; + left: -20px; + color: #EE72F1; } + +.post--regulation h1 { + justify-content: center; } + +.post--regulation h2 { + justify-content: center; + margin-bottom: 10px; } + .post--regulation h2 + h2 { + margin-top: -10px; + margin-bottom: 20px; } + +.hanchor { + color: rgba(238, 114, 241, 0.9); + text-decoration: none; + margin-left: 10px; + visibility: hidden; } + +h1:hover a, h2:hover a, h3:hover a, h4:hover a { + visibility: visible; } + +.footnotes { + color: rgba(255, 255, 255, 0.5); } + +.pagination { + margin-top: 50px; } + @media print { + .pagination { + display: none; } } + .pagination__title { + display: flex; + text-align: center; + position: relative; + margin: 100px 0 20px; } + .pagination__title-h { + text-align: center; + margin: 0 auto; + padding: 5px 10px; + background: #21202c; + color: rgba(255, 255, 255, 0.3); + font-size: .8rem; + text-transform: uppercase; + text-decoration: none; + letter-spacing: .1em; + z-index: 1; } + .pagination__title hr { + position: absolute; + left: 0; + right: 0; + width: 100%; + margin-top: 15px; + z-index: 0; } + .pagination__buttons { + display: flex; + align-items: center; + justify-content: center; + flex-flow: row wrap; + gap: 10px; } + .pagination__buttons a { + text-decoration: none; } + +.button { + position: relative; + display: inline-flex; + align-items: center; + justify-content: center; + font-size: 1rem; + padding: 0; + appearance: none; } + @media (max-width: 684px) { + .button { + flex: 1; } } + .button a { + display: flex; + justify-content: center; + flex: 1; + padding: 8px 16px; + text-decoration: none; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; } + .button__text { + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; } + .button.next .button__icon { + margin-left: 8px; } + .button.previous .button__icon { + margin-right: 8px; } + +.footer { + padding: 40px 0; + flex-grow: 0; + opacity: .5; } + .footer__inner { + display: flex; + align-items: center; + justify-content: space-between; + margin: 0; + width: 760px; + max-width: 100%; } + @media (max-width: 900px) { + .footer__inner { + flex-direction: column; } } + .footer a { + color: inherit; } + .footer .copyright { + display: flex; + flex-flow: row wrap; + flex: 1; + align-items: center; + font-size: 1rem; + justify-content: center; } + .footer .copyright--user { + margin: auto; + text-align: center; } + .footer .copyright > *:first-child:not(:only-child) { + margin-right: 10px; } + .footer .copyright span { + white-space: nowrap; } + +/* PrismJS 1.24.1 +https://prismjs.com/download.html#themes=prism-tomorrow&languages=markup+css+clike+javascript+actionscript+apacheconf+applescript+bash+c+csharp+cpp+cmake+coffeescript+csp+css-extras+diff+django+docker+elixir+elm+erlang+fsharp+flow+git+go+graphql+haml+handlebars+haskell+http+java+json+kotlin+latex+less+llvm+makefile+markdown+markup-templating+nasm+objectivec+ocaml+perl+php+php-extras+powershell+processing+pug+python+r+jsx+tsx+reason+ruby+rust+sass+scss+scala+scheme+sql+stylus+swift+textile+toml+twig+typescript+vim+visual-basic+wasm+yaml&plugins=line-highlight+line-numbers+jsonp-highlight+highlight-keywords+command-line+toolbar+copy-to-clipboard */ +/** + * prism.js tomorrow night eighties for JavaScript, CoffeeScript, CSS and HTML + * Based on https://github.com/chriskempson/tomorrow-theme + * @author Rose Pritchard + */ +code[class*="language-"], +pre[class*="language-"] { + color: #ccc; + background: none; + font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; + font-size: 1em; + text-align: left; + white-space: pre; + word-spacing: normal; + word-break: normal; + word-wrap: normal; + line-height: 1.5; + -moz-tab-size: 4; + -o-tab-size: 4; + tab-size: 4; + -webkit-hyphens: none; + -moz-hyphens: none; + -ms-hyphens: none; + hyphens: none; } + +/* Code blocks */ +pre[class*="language-"] { + padding: 1em; + margin: .5em 0; + overflow: auto; } + +:not(pre) > code[class*="language-"], +pre[class*="language-"] { + background: #2d2d2d; } + +/* Inline code */ +:not(pre) > code[class*="language-"] { + padding: .1em; + border-radius: .3em; + white-space: normal; } + +.token.comment, +.token.block-comment, +.token.prolog, +.token.doctype, +.token.cdata { + color: #999; } + +.token.punctuation { + color: #ccc; } + +.token.tag, +.token.attr-name, +.token.namespace, +.token.deleted { + color: #e2777a; } + +.token.function-name { + color: #6196cc; } + +.token.boolean, +.token.number, +.token.function { + color: #f08d49; } + +.token.property, +.token.class-name, +.token.constant, +.token.symbol { + color: #f8c555; } + +.token.selector, +.token.important, +.token.atrule, +.token.keyword, +.token.builtin { + color: #cc99cd; } + +.token.string, +.token.char, +.token.attr-value, +.token.regex, +.token.variable { + color: #7ec699; } + +.token.operator, +.token.entity, +.token.url { + color: #67cdcc; } + +.token.important, +.token.bold { + font-weight: bold; } + +.token.italic { + font-style: italic; } + +.token.entity { + cursor: help; } + +.token.inserted { + color: green; } + +pre[data-line] { + position: relative; + padding: 1em 0 1em 3em; } + +.line-highlight { + position: absolute; + left: 0; + right: 0; + padding: inherit 0; + margin-top: 1em; + /* Same as .prism’s padding-top */ + background: rgba(153, 122, 102, 0.08); + background: linear-gradient(to right, rgba(153, 122, 102, 0.1) 70%, rgba(153, 122, 102, 0)); + pointer-events: none; + line-height: inherit; + white-space: pre; } + +@media print { + .line-highlight { + /* + * This will prevent browsers from replacing the background color with white. + * It's necessary because the element is layered on top of the displayed code. + */ + -webkit-print-color-adjust: exact; + color-adjust: exact; } } + +.line-highlight:before, +.line-highlight[data-end]:after { + content: attr(data-start); + position: absolute; + top: .4em; + left: .6em; + min-width: 1em; + padding: 0 .5em; + background-color: rgba(153, 122, 102, 0.4); + color: #f5f2f0; + font: bold 65%/1.5 sans-serif; + text-align: center; + vertical-align: .3em; + border-radius: 999px; + text-shadow: none; + box-shadow: 0 1px white; } + +.line-highlight[data-end]:after { + content: attr(data-end); + top: auto; + bottom: .4em; } + +.line-numbers .line-highlight:before, +.line-numbers .line-highlight:after { + content: none; } + +pre[id].linkable-line-numbers span.line-numbers-rows { + pointer-events: all; } + +pre[id].linkable-line-numbers span.line-numbers-rows > span:before { + cursor: pointer; } + +pre[id].linkable-line-numbers span.line-numbers-rows > span:hover:before { + background-color: rgba(128, 128, 128, 0.2); } + +pre[class*="language-"].line-numbers { + position: relative; + padding-left: 3.8em; + counter-reset: linenumber; } + +pre[class*="language-"].line-numbers > code { + position: relative; + white-space: inherit; } + +.line-numbers .line-numbers-rows { + position: absolute; + pointer-events: none; + top: 0; + font-size: 100%; + left: -3.8em; + width: 3em; + /* works for line-numbers below 1000 lines */ + letter-spacing: -1px; + border-right: 1px solid #999; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; } + +.line-numbers-rows > span { + display: block; + counter-increment: linenumber; } + +.line-numbers-rows > span:before { + content: counter(linenumber); + color: #999; + display: block; + padding-right: 0.8em; + text-align: right; } + +.command-line-prompt { + border-right: 1px solid #999; + display: block; + float: left; + font-size: 100%; + letter-spacing: -1px; + margin-right: 1em; + pointer-events: none; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; } + +.command-line-prompt > span:before { + color: #999; + content: ' '; + display: block; + padding-right: 0.8em; } + +.command-line-prompt > span[data-user]:before { + content: "[" attr(data-user) "@" attr(data-host) "] $"; } + +.command-line-prompt > span[data-user="root"]:before { + content: "[" attr(data-user) "@" attr(data-host) "] #"; } + +.command-line-prompt > span[data-prompt]:before { + content: attr(data-prompt); } + +div.code-toolbar { + position: relative; } + +div.code-toolbar > .toolbar { + position: absolute; + top: .3em; + right: .2em; + transition: opacity 0.3s ease-in-out; + opacity: 0; } + +div.code-toolbar:hover > .toolbar { + opacity: 1; } + +/* Separate line b/c rules are thrown out if selector is invalid. + IE11 and old Edge versions don't support :focus-within. */ +div.code-toolbar:focus-within > .toolbar { + opacity: 1; } + +div.code-toolbar > .toolbar > .toolbar-item { + display: inline-block; } + +div.code-toolbar > .toolbar > .toolbar-item > a { + cursor: pointer; } + +div.code-toolbar > .toolbar > .toolbar-item > button { + background: none; + border: 0; + color: inherit; + font: inherit; + line-height: normal; + overflow: visible; + padding: 0; + -webkit-user-select: none; + /* for button */ + -moz-user-select: none; + -ms-user-select: none; } + +div.code-toolbar > .toolbar > .toolbar-item > a, +div.code-toolbar > .toolbar > .toolbar-item > button, +div.code-toolbar > .toolbar > .toolbar-item > span { + color: #bbb; + font-size: .8em; + padding: 0 .5em; + background: #f5f2f0; + background: rgba(224, 224, 224, 0.2); + box-shadow: 0 2px 0 0 rgba(0, 0, 0, 0.2); + border-radius: .5em; } + +div.code-toolbar > .toolbar > .toolbar-item > a:hover, +div.code-toolbar > .toolbar > .toolbar-item > a:focus, +div.code-toolbar > .toolbar > .toolbar-item > button:hover, +div.code-toolbar > .toolbar > .toolbar-item > button:focus, +div.code-toolbar > .toolbar > .toolbar-item > span:hover, +div.code-toolbar > .toolbar > .toolbar-item > span:focus { + color: inherit; + text-decoration: none; } + +code.language-css, +code.language-scss, +.token.boolean, +.token.string, +.token.entity, +.token.url, +.language-css .token.string, +.language-scss .token.string, +.style .token.string, +.token.attr-value, +.token.keyword, +.token.control, +.token.directive, +.token.statement, +.token.regex, +.token.atrule, +.token.number, +.token.inserted, +.token.important { + color: #EE72F1 !important; } + +.token.tag-id, +.token.atrule-id, +.token.operator, +.token.unit, +.token.placeholder, +.token.variable, +.token.tag, +.token.attr-name, +.token.namespace, +.token.deleted, +.token.property, +.token.class-name, +.token.constant, +.token.symbol { + color: rgba(238, 114, 241, 0.7) !important; } + +.token.property, +.token.function, +.token.function-name, +.token.deleted, +code.language-javascript, +code.language-html, +.command-line-prompt > span:before { + color: #9a999a !important; } + +.token.selector, +.token.tag, +.token.punctuation { + color: white; } + +.token.comment, +.token.prolog, +.token.doctype, +.token.cdata { + color: rgba(255, 255, 255, 0.3) !important; } + +.token.namespace { + opacity: .7 !important; } + +pre[data-line] { + position: relative; } + +pre[class*="language-"] { + margin: 0; + padding: 0; + overflow: auto; } + +.line-highlight { + position: absolute; + left: 0; + right: 0; + padding: 0; + margin: 0; + background: rgba(230, 118, 232, 0.08); + pointer-events: none; + line-height: inherit; + white-space: pre; } + +.line-highlight:before, +.line-highlight[data-end]:after { + content: attr(data-start); + position: absolute; + /* top: .4em; */ + left: .6em; + min-width: 1em; + padding: 0 .5em; + background-color: rgba(153, 122, 102, 0.4); + color: #f5f2f0; + font: bold 65%/1.5 sans-serif; + text-align: center; + vertical-align: .3em; + border-radius: 999px; + text-shadow: none; + box-shadow: 0 1px white; } + +.line-highlight[data-end]:after { + content: attr(data-end); + top: auto; + bottom: .4em; } + +.line-numbers .line-highlight:before, +.line-numbers .line-highlight:after { + content: none; } + +.code-toolbar { + position: relative; + margin: 40px 0; + padding: 20px; + border: 1px solid rgba(255, 255, 255, 0.1); } + .code-toolbar + .code-toolbar, + .code-toolbar + .highlight, + .code-toolbar + .highlight .code-toolbar { + border-top: 0; + margin-top: calc(-1 * $code-margin); } + .code-toolbar pre, .code-toolbar code { + border: none; } + .code-toolbar code { + display: block; + color: inherit; } + .code-toolbar > .toolbar button { + font-size: .8em !important; + background: rgba(224, 224, 224, 0.2) !important; + color: #bbb !important; + box-shadow: 0 2px 0 0 rgba(0, 0, 0, 0.2) !important; + border-radius: 0 !important; + margin: 6px !important; + padding: 10px !important; + user-select: none; } + +.collapsable-code { + position: relative; + width: 100%; + margin: 40px 0; } + .collapsable-code input[type="checkbox"] { + position: absolute; + visibility: hidden; } + .collapsable-code input[type="checkbox"]:checked ~ pre, + .collapsable-code input[type="checkbox"]:checked ~ .code-toolbar pre { + height: 0; + padding: 0; + border-top: none; } + .collapsable-code input[type="checkbox"]:checked ~ .code-toolbar { + padding: 0; + border-top: none; } + .collapsable-code input[type="checkbox"]:checked ~ .code-toolbar .toolbar { + display: none; } + .collapsable-code input[type="checkbox"]:checked ~ label .collapsable-code__toggle:after { + content: attr(data-label-expand); } + .collapsable-code label { + position: relative; + display: flex; + justify-content: space-between; + min-width: 30px; + min-height: 30px; + margin: 0; + border-bottom: 1px solid #e676e8; + cursor: pointer; } + .collapsable-code__title { + flex: 1; + color: #EE72F1; + padding: 3px 10px; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; } + .collapsable-code__language { + color: #EE72F1; + border: 1px solid #e676e8; + border-bottom: none; + text-transform: uppercase; + padding: 3px 10px; } + .collapsable-code__toggle { + color: #EE72F1; + font-size: 16px; + padding: 3px 10px; } + .collapsable-code__toggle:after { + content: attr(data-label-collapse); } + .collapsable-code pre { + margin-top: 0; } + .collapsable-code pre::first-line { + line-height: 0; } + .collapsable-code .code-toolbar { + margin: 0; } + +.terms h1 { + color: #EE72F1; } + +.terms h3 { + font-size: initial; } + +body .gist .blob-num, +body .gist .blob-code-inner { + border: none; } diff --git a/resources/_gen/assets/scss/css/pink-local.scss_f120a3f402b106f64b18d498afd3d82e.json b/resources/_gen/assets/scss/css/pink-local.scss_f120a3f402b106f64b18d498afd3d82e.json new file mode 100644 index 0000000..5014fc7 --- /dev/null +++ b/resources/_gen/assets/scss/css/pink-local.scss_f120a3f402b106f64b18d498afd3d82e.json @@ -0,0 +1 @@ +{"Target":"css/pink-local.css","MediaType":"text/css","Data":{}} \ No newline at end of file diff --git a/resources/_gen/assets/scss/css/red-local.scss_f120a3f402b106f64b18d498afd3d82e.content b/resources/_gen/assets/scss/css/red-local.scss_f120a3f402b106f64b18d498afd3d82e.content new file mode 100644 index 0000000..02d3ba1 --- /dev/null +++ b/resources/_gen/assets/scss/css/red-local.scss_f120a3f402b106f64b18d498afd3d82e.content @@ -0,0 +1,1191 @@ +@charset "UTF-8"; +/* COLOR VARIABLES */ +/* MEDIA QUERIES */ +/* variables for js, must be the same as these in @custom-media queries */ +:root { + --phoneWidth: (max-width: 684px); + --tabletWidth: (max-width: 900px); } + +@font-face { + font-display: swap; + font-family: 'Fira Code'; + font-style: normal; + font-weight: 400; + src: url("../fonts/FiraCode-Regular.woff") format("woff"); } + +@font-face { + font-display: swap; + font-family: 'Fira Code'; + font-style: normal; + font-weight: 800; + src: url("../fonts/FiraCode-Bold.woff") format("woff"); } + +.button-container { + display: table; + margin-left: auto; + margin-right: auto; } + +button, +.button, +a.button { + position: relative; + display: flex; + align-items: center; + justify-content: center; + padding: 8px 18px; + margin-bottom: 5px; + text-decoration: none; + text-align: center; + border-radius: 8; + border: 1px solid #FF6266; + background: #FF6266; + color: #221f29; + font: inherit; + font-weight: bold; + appearance: none; + cursor: pointer; + outline: none; + /* variants */ + /* sizes */ } + button:hover, + .button:hover, + a.button:hover { + background: rgba(255, 98, 102, 0.9); } + button.outline, + .button.outline, + a.button.outline { + background: transparent; + box-shadow: none; + padding: 8px 18px; } + button.outline :hover, + .button.outline :hover, + a.button.outline :hover { + transform: none; + box-shadow: none; } + button.link, + .button.link, + a.button.link { + background: none; + font-size: 1rem; } + button.small, + .button.small, + a.button.small { + font-size: .8rem; } + button.wide, + .button.wide, + a.button.wide { + min-width: 200px; + padding: 14px 24px; } + +a.read-more, +a.read-more:hover, +a.read-more:active { + display: inline-flex; + border: none; + color: #FF6266; + background: none; + box-shadow: none; + padding: 0; + margin: 20px 0; + max-width: 100%; } + +.code-toolbar { + margin-bottom: 20px; } + .code-toolbar .toolbar-item a { + position: relative; + display: inline-flex; + align-items: center; + justify-content: center; + padding: 3px 8px; + margin-bottom: 5px; + text-decoration: none; + text-align: center; + font-size: 13px; + font-weight: 500; + border-radius: 8px; + border: 1px solid transparent; + appearance: none; + cursor: pointer; + outline: none; } + +input, textarea, select { + background: transparent; + color: #FF6266; + border: 1px solid #FF6266; + border-radius: 0; + padding: 10px; + font: inherit; + appearance: none; } + input:focus, input :active, textarea:focus, textarea :active, select:focus, select :active { + border-color: white; + outline: 1px solid white; } + input:active, textarea:active, select:active { + box-shadow: none; } + +select { + background: #221f29; } + select option { + background: #221f29; } + +::placeholder { + color: rgba(255, 98, 102, 0.5); } + +.header { + display: flex; + flex-direction: column; + position: relative; } + @media print { + .header { + display: none; } } + .header__inner { + display: flex; + align-items: center; + justify-content: space-between; } + .header__logo { + display: flex; + flex: 1; } + .header__logo:after { + content: ''; + background: repeating-linear-gradient(90deg, #FF6266, #FF6266 2px, transparent 0, transparent 10px); + display: block; + width: 100%; + right: 10px; } + .header__logo a { + flex: 0 0 auto; + max-width: 100%; + text-decoration: none; } + +.navigation-menu { + display: flex; + align-items: flex-start; + justify-content: space-between; + margin: 20px 1px; } + @media (max-width: 684px) { + .navigation-menu { + margin: 0; } } + .navigation-menu__inner { + display: flex; + flex: 1; + flex-wrap: wrap; + list-style: none; + margin: 0; + padding: 0; } + .navigation-menu__inner > li { + flex: 0 0 auto; + margin-bottom: 10px; + white-space: nowrap; } + .navigation-menu__inner > li:not(:last-of-type) { + margin-right: 20px; } + @media (max-width: 684px) { + .navigation-menu__inner { + flex-direction: column; + align-items: flex-start; + padding: 0; } + .navigation-menu__inner li { + margin: 0; + padding: 5px; } } + .navigation-menu .spacer { + flex-grow: 1 !important; } + +.menu { + display: flex; + flex-direction: column; + position: relative; + list-style: none; + padding: 0; + margin: 0; } + .menu__trigger { + margin-right: 0 !important; + color: #FF6266; + user-select: none; + cursor: pointer; } + .menu__dropdown { + display: none; + flex-direction: column; + position: absolute; + background: #221f29; + box-shadow: 0 10px rgba(34, 31, 41, 0.8), -10px 10px rgba(34, 31, 41, 0.8), 10px 10px rgba(34, 31, 41, 0.8); + color: white; + border: 2px solid; + margin: 0; + padding: 10px; + top: 10px; + left: 0; + list-style: none; + z-index: 99; } + .open .menu__dropdown { + display: flex; } + .menu__dropdown > li { + flex: 0 0 auto; } + .menu__dropdown > li:not(:last-of-type) { + margin-bottom: 10px; } + .menu__dropdown > li a { + display: flex; + padding: 5px; } + @media (max-width: 684px) { + .menu--desktop { + display: none; } } + .menu--mobile .menu__trigger { + color: #FF6266; + border: 2px solid; + margin-left: 10px; + height: 100%; + padding: 3px 8px; + margin-bottom: 0 !important; + position: relative; + cursor: pointer; + display: none; } + @media (max-width: 684px) { + .menu--mobile .menu__trigger { + display: block; } } + @media (max-width: 684px) { + .menu--mobile .menu__dropdown { + left: auto; + right: 0; } } + .menu--mobile li { + flex: 0 0 auto; } + .menu--mobile li:not(:last-of-type) { + margin-bottom: 10px; } + .menu--language-selector .menu__trigger { + color: #FF6266; + border: 2px solid; + margin-left: 10px; + height: 100%; + padding: 3px 8px; + margin-bottom: 0 !important; + position: relative; + cursor: pointer; } + @media (max-width: 684px) { + .menu--language-selector .menu__trigger { + display: none; } } + .menu--language-selector .menu__dropdown { + left: auto; + right: 0; } + +.logo { + display: flex; + align-items: center; + text-decoration: none; + background: #FF6266; + color: black; + padding: 5px 10px; } + +html { + box-sizing: border-box; } + +*, +*:before, +*:after { + box-sizing: inherit; } + +body { + margin: 0; + padding: 0; + font-family: 'Fira Code', Monaco, Consolas, Ubuntu Mono, monospace; + font-size: 1rem; + line-height: 1.54; + letter-spacing: -0.02em; + background-color: #221f29; + color: white; + text-rendering: optimizeLegibility; + -webkit-font-smoothing: antialiased; + font-feature-settings: "liga", "tnum", "zero", "ss01", "locl"; + font-variant-ligatures: contextual; + -webkit-overflow-scrolling: touch; + -webkit-text-size-adjust: 100%; } + @media (max-width: 684px) { + body { + font-size: 1rem; } } +.headings--one-size h1, +.headings--one-size h2, +.headings--one-size h3, +.headings--one-size h4, +.headings--one-size h5, +.headings--one-size h6 { + line-height: 1.3; } + .headings--one-size h1:not(first-child), + .headings--one-size h2:not(first-child), + .headings--one-size h3:not(first-child), + .headings--one-size h4:not(first-child), + .headings--one-size h5:not(first-child), + .headings--one-size h6:not(first-child) { + margin-top: 40px; } + +.headings--one-size h1, +.headings--one-size h2, +.headings--one-size h3 { + font-size: 1.4rem; } + +.headings--one-size h4, +.headings--one-size h5, +.headings--one-size h6 { + font-size: 1.2rem; } + +a { + color: inherit; + /* Waiting for a better times... */ + /* &:has(code) { + text-decoration-color: $accent; + } */ } + +img { + display: block; + max-width: 100%; } + img.left { + margin-right: auto; } + img.center { + margin-left: auto; + margin-right: auto; } + img.right { + margin-left: auto; } + +p { + margin-bottom: 20px; } + +figure { + display: table; + max-width: 100%; + margin: 25px 0; } + figure.left { + margin-right: auto; } + figure.center { + margin-left: auto; + margin-right: auto; } + figure.right { + margin-left: auto; } + figure figcaption { + font-size: 14px; + padding: 5px 10px; + margin-top: 5px; + background: #FF6266; + color: #221f29; + /* opacity: .8; */ } + figure figcaption.left { + text-align: left; } + figure figcaption.center { + text-align: center; } + figure figcaption.right { + text-align: right; } + +code, kbd { + font-family: 'Fira Code', Monaco, Consolas, Ubuntu Mono, monospace !important; + font-feature-settings: normal; + background: rgba(255, 98, 102, 0.2); + color: #FF6266; + padding: 1px 6px; + margin: 0 2px; + font-size: .95rem; } + code code, code kbd, kbd code, kbd kbd { + background: transparent; + padding: 0; + margin: 0; } + +pre { + background: transparent !important; + padding: 20px 10px; + margin: 40px 0; + font-size: .95rem !important; + overflow: auto; + border-top: 1px solid rgba(255, 255, 255, 0.1); + border-bottom: 1px solid rgba(255, 255, 255, 0.1); } + pre + pre { + border-top: 0; + margin-top: -40px; } + @media (max-width: 684px) { + pre { + white-space: pre-wrap; + word-wrap: break-word; } } + pre code { + background: none !important; + margin: 0; + padding: 0; + font-size: inherit; + border: none; } + +blockquote { + border-top: 1px solid #FF6266; + border-bottom: 1px solid #FF6266; + margin: 40px 0; + padding: 25px; } + @media (max-width: 684px) { + blockquote { + padding-right: 0; } } + blockquote p:first-of-type { + margin-top: 0; } + blockquote p:last-of-type { + margin-bottom: 0; } + blockquote p { + position: relative; } + blockquote p:first-of-type:before { + content: '>'; + display: block; + position: absolute; + left: -25px; + color: #FF6266; } + blockquote.twitter-tweet { + position: relative; + background: rgba(255, 98, 102, 0.1); + font: inherit; + color: inherit; + border: 1px solid #FF6266; + padding-top: 60px; } + blockquote.twitter-tweet p:before { + content: ''; } + blockquote.twitter-tweet:before { + content: '> From Twitter:'; + position: absolute; + top: 20px; + color: #FF6266; + font-weight: bold; } + blockquote.twitter-tweet a { + color: #FF6266; } + +table { + table-layout: auto; + border-collapse: collapse; + width: 100%; + margin: 40px 0; } + +table, +th, +td { + border: 1px dashed #FF6266; + padding: 10px; } + +th { + color: #FF6266; } + +ul, +ol { + margin-left: 22px; + padding: 0; } + ul li, + ol li { + position: relative; } + @media (max-width: 684px) { + ul, + ol { + margin-left: 20px; } } +ol { + list-style: none; + counter-reset: li; } + ol li { + counter-increment: li; } + ol li:before { + content: counter(li); + position: absolute; + right: calc(100% + 10px); + color: #FF6266; + display: inline-block; + text-align: right; } + ol ol { + margin-left: 38px; } + ol ol li { + counter-increment: li; } + ol ol li:before { + content: counters(li, ".") " "; } + +mark { + background: #FF6266; + color: #221f29; } + +.container { + display: flex; + flex-direction: column; + padding: 40px; + max-width: 864px; + min-height: 100vh; + border-right: 1px solid rgba(255, 255, 255, 0.1); } + .container.full, .container.center { + border: none; + margin: 0 auto; } + .container.full { + max-width: 100%; } + @media (max-width: 684px) { + .container { + padding: 20px; } } + @media print { + .container { + display: initial; } } +.content { + display: flex; + flex-direction: column; } + @media print { + .content { + display: initial; } } +hr { + width: 100%; + border: none; + background: rgba(255, 255, 255, 0.1); + height: 1px; } + +.hidden { + display: none; } + +sup { + line-height: 0; } + +.index-content { + margin-top: 20px; } + +.framed { + border: 1px solid #FF6266; + padding: 20px; } + .framed *:first-child { + margin-top: 0; } + .framed *:last-child { + margin-bottom: 0; } + +.posts { + width: 100%; } + +.post { + width: 100%; + text-align: left; + margin: 20px auto; + padding: 20px 0; } + .post:not(:last-of-type) { + border-bottom: 1px solid rgba(255, 255, 255, 0.1); } + .post-meta { + font-size: 1rem; + margin-bottom: 10px; + color: rgba(255, 98, 102, 0.7); } + .post-title { + position: relative; + color: #FF6266; + margin: 0 0 15px; + padding-bottom: 15px; + border-bottom: 3px dotted #FF6266; } + .post-title:after { + content: ''; + position: absolute; + bottom: 2px; + display: block; + width: 100%; + border-bottom: 3px dotted #FF6266; } + .post-title a { + text-decoration: none; } + .post-tags { + display: block; + margin-bottom: 20px; + font-size: 1rem; + opacity: .5; } + .post-tags a { + text-decoration: none; } + .post-content { + margin-top: 30px; } + .post-cover { + border: 20px solid #FF6266; + background: transparent; + margin: 40px 0; + padding: 20px; } + @media (max-width: 684px) { + .post-cover { + padding: 10px; + border-width: 10px; } } + .post ul { + list-style: none; } + .post ul li:not(:empty):before { + content: '-'; + position: absolute; + left: -20px; + color: #FF6266; } + +.post--regulation h1 { + justify-content: center; } + +.post--regulation h2 { + justify-content: center; + margin-bottom: 10px; } + .post--regulation h2 + h2 { + margin-top: -10px; + margin-bottom: 20px; } + +.hanchor { + color: rgba(255, 98, 102, 0.9); + text-decoration: none; + margin-left: 10px; + visibility: hidden; } + +h1:hover a, h2:hover a, h3:hover a, h4:hover a { + visibility: visible; } + +.footnotes { + color: rgba(255, 255, 255, 0.5); } + +.pagination { + margin-top: 50px; } + @media print { + .pagination { + display: none; } } + .pagination__title { + display: flex; + text-align: center; + position: relative; + margin: 100px 0 20px; } + .pagination__title-h { + text-align: center; + margin: 0 auto; + padding: 5px 10px; + background: #221f29; + color: rgba(255, 255, 255, 0.3); + font-size: .8rem; + text-transform: uppercase; + text-decoration: none; + letter-spacing: .1em; + z-index: 1; } + .pagination__title hr { + position: absolute; + left: 0; + right: 0; + width: 100%; + margin-top: 15px; + z-index: 0; } + .pagination__buttons { + display: flex; + align-items: center; + justify-content: center; + flex-flow: row wrap; + gap: 10px; } + .pagination__buttons a { + text-decoration: none; } + +.button { + position: relative; + display: inline-flex; + align-items: center; + justify-content: center; + font-size: 1rem; + padding: 0; + appearance: none; } + @media (max-width: 684px) { + .button { + flex: 1; } } + .button a { + display: flex; + justify-content: center; + flex: 1; + padding: 8px 16px; + text-decoration: none; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; } + .button__text { + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; } + .button.next .button__icon { + margin-left: 8px; } + .button.previous .button__icon { + margin-right: 8px; } + +.footer { + padding: 40px 0; + flex-grow: 0; + opacity: .5; } + .footer__inner { + display: flex; + align-items: center; + justify-content: space-between; + margin: 0; + width: 760px; + max-width: 100%; } + @media (max-width: 900px) { + .footer__inner { + flex-direction: column; } } + .footer a { + color: inherit; } + .footer .copyright { + display: flex; + flex-flow: row wrap; + flex: 1; + align-items: center; + font-size: 1rem; + justify-content: center; } + .footer .copyright--user { + margin: auto; + text-align: center; } + .footer .copyright > *:first-child:not(:only-child) { + margin-right: 10px; } + .footer .copyright span { + white-space: nowrap; } + +/* PrismJS 1.24.1 +https://prismjs.com/download.html#themes=prism-tomorrow&languages=markup+css+clike+javascript+actionscript+apacheconf+applescript+bash+c+csharp+cpp+cmake+coffeescript+csp+css-extras+diff+django+docker+elixir+elm+erlang+fsharp+flow+git+go+graphql+haml+handlebars+haskell+http+java+json+kotlin+latex+less+llvm+makefile+markdown+markup-templating+nasm+objectivec+ocaml+perl+php+php-extras+powershell+processing+pug+python+r+jsx+tsx+reason+ruby+rust+sass+scss+scala+scheme+sql+stylus+swift+textile+toml+twig+typescript+vim+visual-basic+wasm+yaml&plugins=line-highlight+line-numbers+jsonp-highlight+highlight-keywords+command-line+toolbar+copy-to-clipboard */ +/** + * prism.js tomorrow night eighties for JavaScript, CoffeeScript, CSS and HTML + * Based on https://github.com/chriskempson/tomorrow-theme + * @author Rose Pritchard + */ +code[class*="language-"], +pre[class*="language-"] { + color: #ccc; + background: none; + font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; + font-size: 1em; + text-align: left; + white-space: pre; + word-spacing: normal; + word-break: normal; + word-wrap: normal; + line-height: 1.5; + -moz-tab-size: 4; + -o-tab-size: 4; + tab-size: 4; + -webkit-hyphens: none; + -moz-hyphens: none; + -ms-hyphens: none; + hyphens: none; } + +/* Code blocks */ +pre[class*="language-"] { + padding: 1em; + margin: .5em 0; + overflow: auto; } + +:not(pre) > code[class*="language-"], +pre[class*="language-"] { + background: #2d2d2d; } + +/* Inline code */ +:not(pre) > code[class*="language-"] { + padding: .1em; + border-radius: .3em; + white-space: normal; } + +.token.comment, +.token.block-comment, +.token.prolog, +.token.doctype, +.token.cdata { + color: #999; } + +.token.punctuation { + color: #ccc; } + +.token.tag, +.token.attr-name, +.token.namespace, +.token.deleted { + color: #e2777a; } + +.token.function-name { + color: #6196cc; } + +.token.boolean, +.token.number, +.token.function { + color: #f08d49; } + +.token.property, +.token.class-name, +.token.constant, +.token.symbol { + color: #f8c555; } + +.token.selector, +.token.important, +.token.atrule, +.token.keyword, +.token.builtin { + color: #cc99cd; } + +.token.string, +.token.char, +.token.attr-value, +.token.regex, +.token.variable { + color: #7ec699; } + +.token.operator, +.token.entity, +.token.url { + color: #67cdcc; } + +.token.important, +.token.bold { + font-weight: bold; } + +.token.italic { + font-style: italic; } + +.token.entity { + cursor: help; } + +.token.inserted { + color: green; } + +pre[data-line] { + position: relative; + padding: 1em 0 1em 3em; } + +.line-highlight { + position: absolute; + left: 0; + right: 0; + padding: inherit 0; + margin-top: 1em; + /* Same as .prism’s padding-top */ + background: rgba(153, 122, 102, 0.08); + background: linear-gradient(to right, rgba(153, 122, 102, 0.1) 70%, rgba(153, 122, 102, 0)); + pointer-events: none; + line-height: inherit; + white-space: pre; } + +@media print { + .line-highlight { + /* + * This will prevent browsers from replacing the background color with white. + * It's necessary because the element is layered on top of the displayed code. + */ + -webkit-print-color-adjust: exact; + color-adjust: exact; } } + +.line-highlight:before, +.line-highlight[data-end]:after { + content: attr(data-start); + position: absolute; + top: .4em; + left: .6em; + min-width: 1em; + padding: 0 .5em; + background-color: rgba(153, 122, 102, 0.4); + color: #f5f2f0; + font: bold 65%/1.5 sans-serif; + text-align: center; + vertical-align: .3em; + border-radius: 999px; + text-shadow: none; + box-shadow: 0 1px white; } + +.line-highlight[data-end]:after { + content: attr(data-end); + top: auto; + bottom: .4em; } + +.line-numbers .line-highlight:before, +.line-numbers .line-highlight:after { + content: none; } + +pre[id].linkable-line-numbers span.line-numbers-rows { + pointer-events: all; } + +pre[id].linkable-line-numbers span.line-numbers-rows > span:before { + cursor: pointer; } + +pre[id].linkable-line-numbers span.line-numbers-rows > span:hover:before { + background-color: rgba(128, 128, 128, 0.2); } + +pre[class*="language-"].line-numbers { + position: relative; + padding-left: 3.8em; + counter-reset: linenumber; } + +pre[class*="language-"].line-numbers > code { + position: relative; + white-space: inherit; } + +.line-numbers .line-numbers-rows { + position: absolute; + pointer-events: none; + top: 0; + font-size: 100%; + left: -3.8em; + width: 3em; + /* works for line-numbers below 1000 lines */ + letter-spacing: -1px; + border-right: 1px solid #999; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; } + +.line-numbers-rows > span { + display: block; + counter-increment: linenumber; } + +.line-numbers-rows > span:before { + content: counter(linenumber); + color: #999; + display: block; + padding-right: 0.8em; + text-align: right; } + +.command-line-prompt { + border-right: 1px solid #999; + display: block; + float: left; + font-size: 100%; + letter-spacing: -1px; + margin-right: 1em; + pointer-events: none; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; } + +.command-line-prompt > span:before { + color: #999; + content: ' '; + display: block; + padding-right: 0.8em; } + +.command-line-prompt > span[data-user]:before { + content: "[" attr(data-user) "@" attr(data-host) "] $"; } + +.command-line-prompt > span[data-user="root"]:before { + content: "[" attr(data-user) "@" attr(data-host) "] #"; } + +.command-line-prompt > span[data-prompt]:before { + content: attr(data-prompt); } + +div.code-toolbar { + position: relative; } + +div.code-toolbar > .toolbar { + position: absolute; + top: .3em; + right: .2em; + transition: opacity 0.3s ease-in-out; + opacity: 0; } + +div.code-toolbar:hover > .toolbar { + opacity: 1; } + +/* Separate line b/c rules are thrown out if selector is invalid. + IE11 and old Edge versions don't support :focus-within. */ +div.code-toolbar:focus-within > .toolbar { + opacity: 1; } + +div.code-toolbar > .toolbar > .toolbar-item { + display: inline-block; } + +div.code-toolbar > .toolbar > .toolbar-item > a { + cursor: pointer; } + +div.code-toolbar > .toolbar > .toolbar-item > button { + background: none; + border: 0; + color: inherit; + font: inherit; + line-height: normal; + overflow: visible; + padding: 0; + -webkit-user-select: none; + /* for button */ + -moz-user-select: none; + -ms-user-select: none; } + +div.code-toolbar > .toolbar > .toolbar-item > a, +div.code-toolbar > .toolbar > .toolbar-item > button, +div.code-toolbar > .toolbar > .toolbar-item > span { + color: #bbb; + font-size: .8em; + padding: 0 .5em; + background: #f5f2f0; + background: rgba(224, 224, 224, 0.2); + box-shadow: 0 2px 0 0 rgba(0, 0, 0, 0.2); + border-radius: .5em; } + +div.code-toolbar > .toolbar > .toolbar-item > a:hover, +div.code-toolbar > .toolbar > .toolbar-item > a:focus, +div.code-toolbar > .toolbar > .toolbar-item > button:hover, +div.code-toolbar > .toolbar > .toolbar-item > button:focus, +div.code-toolbar > .toolbar > .toolbar-item > span:hover, +div.code-toolbar > .toolbar > .toolbar-item > span:focus { + color: inherit; + text-decoration: none; } + +code.language-css, +code.language-scss, +.token.boolean, +.token.string, +.token.entity, +.token.url, +.language-css .token.string, +.language-scss .token.string, +.style .token.string, +.token.attr-value, +.token.keyword, +.token.control, +.token.directive, +.token.statement, +.token.regex, +.token.atrule, +.token.number, +.token.inserted, +.token.important { + color: #FF6266 !important; } + +.token.tag-id, +.token.atrule-id, +.token.operator, +.token.unit, +.token.placeholder, +.token.variable, +.token.tag, +.token.attr-name, +.token.namespace, +.token.deleted, +.token.property, +.token.class-name, +.token.constant, +.token.symbol { + color: rgba(255, 98, 102, 0.7) !important; } + +.token.property, +.token.function, +.token.function-name, +.token.deleted, +code.language-javascript, +code.language-html, +.command-line-prompt > span:before { + color: #9a9999 !important; } + +.token.selector, +.token.tag, +.token.punctuation { + color: white; } + +.token.comment, +.token.prolog, +.token.doctype, +.token.cdata { + color: rgba(255, 255, 255, 0.3) !important; } + +.token.namespace { + opacity: .7 !important; } + +pre[data-line] { + position: relative; } + +pre[class*="language-"] { + margin: 0; + padding: 0; + overflow: auto; } + +.line-highlight { + position: absolute; + left: 0; + right: 0; + padding: 0; + margin: 0; + background: rgba(245, 104, 107, 0.08); + pointer-events: none; + line-height: inherit; + white-space: pre; } + +.line-highlight:before, +.line-highlight[data-end]:after { + content: attr(data-start); + position: absolute; + /* top: .4em; */ + left: .6em; + min-width: 1em; + padding: 0 .5em; + background-color: rgba(153, 122, 102, 0.4); + color: #f5f2f0; + font: bold 65%/1.5 sans-serif; + text-align: center; + vertical-align: .3em; + border-radius: 999px; + text-shadow: none; + box-shadow: 0 1px white; } + +.line-highlight[data-end]:after { + content: attr(data-end); + top: auto; + bottom: .4em; } + +.line-numbers .line-highlight:before, +.line-numbers .line-highlight:after { + content: none; } + +.code-toolbar { + position: relative; + margin: 40px 0; + padding: 20px; + border: 1px solid rgba(255, 255, 255, 0.1); } + .code-toolbar + .code-toolbar, + .code-toolbar + .highlight, + .code-toolbar + .highlight .code-toolbar { + border-top: 0; + margin-top: calc(-1 * $code-margin); } + .code-toolbar pre, .code-toolbar code { + border: none; } + .code-toolbar code { + display: block; + color: inherit; } + .code-toolbar > .toolbar button { + font-size: .8em !important; + background: rgba(224, 224, 224, 0.2) !important; + color: #bbb !important; + box-shadow: 0 2px 0 0 rgba(0, 0, 0, 0.2) !important; + border-radius: 0 !important; + margin: 6px !important; + padding: 10px !important; + user-select: none; } + +.collapsable-code { + position: relative; + width: 100%; + margin: 40px 0; } + .collapsable-code input[type="checkbox"] { + position: absolute; + visibility: hidden; } + .collapsable-code input[type="checkbox"]:checked ~ pre, + .collapsable-code input[type="checkbox"]:checked ~ .code-toolbar pre { + height: 0; + padding: 0; + border-top: none; } + .collapsable-code input[type="checkbox"]:checked ~ .code-toolbar { + padding: 0; + border-top: none; } + .collapsable-code input[type="checkbox"]:checked ~ .code-toolbar .toolbar { + display: none; } + .collapsable-code input[type="checkbox"]:checked ~ label .collapsable-code__toggle:after { + content: attr(data-label-expand); } + .collapsable-code label { + position: relative; + display: flex; + justify-content: space-between; + min-width: 30px; + min-height: 30px; + margin: 0; + border-bottom: 1px solid #f5686b; + cursor: pointer; } + .collapsable-code__title { + flex: 1; + color: #FF6266; + padding: 3px 10px; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; } + .collapsable-code__language { + color: #FF6266; + border: 1px solid #f5686b; + border-bottom: none; + text-transform: uppercase; + padding: 3px 10px; } + .collapsable-code__toggle { + color: #FF6266; + font-size: 16px; + padding: 3px 10px; } + .collapsable-code__toggle:after { + content: attr(data-label-collapse); } + .collapsable-code pre { + margin-top: 0; } + .collapsable-code pre::first-line { + line-height: 0; } + .collapsable-code .code-toolbar { + margin: 0; } + +.terms h1 { + color: #FF6266; } + +.terms h3 { + font-size: initial; } + +body .gist .blob-num, +body .gist .blob-code-inner { + border: none; } diff --git a/resources/_gen/assets/scss/css/red-local.scss_f120a3f402b106f64b18d498afd3d82e.json b/resources/_gen/assets/scss/css/red-local.scss_f120a3f402b106f64b18d498afd3d82e.json new file mode 100644 index 0000000..77df676 --- /dev/null +++ b/resources/_gen/assets/scss/css/red-local.scss_f120a3f402b106f64b18d498afd3d82e.json @@ -0,0 +1 @@ +{"Target":"css/red-local.css","MediaType":"text/css","Data":{}} \ No newline at end of file diff --git a/static/crabHdFixed512signal.png b/static/crabHdFixed512signal.png new file mode 100644 index 0000000000000000000000000000000000000000..f32bbd1df4cc647bcf42ead1c038b2dd64cdeac1 GIT binary patch literal 33845 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 literal 0 HcmV?d00001 diff --git a/static/js/repo-card.js b/static/js/repo-card.js new file mode 100644 index 0000000..08dc324 --- /dev/null +++ b/static/js/repo-card.js @@ -0,0 +1,80 @@ +window.tarptaeya = {}; + +window.tarptaeya.reloadRepoCards = async function() { + const CACHE_TIMEOUT = 60000; + async function get(url) { + const now = new Date().getTime(); + const prevResp = JSON.parse(localStorage.getItem(url)); + if (prevResp && Math.abs(now - prevResp.time) < CACHE_TIMEOUT) { + return prevResp.data; + } + const resp = await fetch(url); + const json = await resp.json(); + localStorage.setItem(url, JSON.stringify({time: now, data: json})); + return json; + } + + const emojis = await get('https://api.github.com/emojis'); + const colors = await get('https://raw.githubusercontent.com/ozh/github-colors/master/colors.json'); + + const themes = { + 'light-default': { + background: 'white', + borderColor: '#e1e4e8', + color: '#586069', + linkColor: '#0366d6', + }, + 'dark-theme': { + background: 'rgb(13, 17, 23)', + borderColor: 'rgb(48, 54, 61)', + color: 'rgb(139, 148, 158)', + linkColor: 'rgb(88, 166, 255)', + } + }; + + for (const el of document.querySelectorAll('.repo-card')) { + const name = el.getAttribute('data-repo'); + const theme = themes[el.getAttribute('data-theme') || 'light-default']; + const data = await get(`https://api.github.com/repos/${name}`); + + data.description = (data.description || '').replace(/:\w+:/g, function(match) { + const name = match.substring(1, match.length - 1); + const emoji = emojis[name]; + + if (emoji) { + return `${name}`; + } + + return match; + }); + + el.innerHTML = ` +
+
+ + + ${data.name} + +
+ +
${data.description}
+
+
+ + ${data.language} +
+
+ +   ${data.stargazers_count} +
+
+ +   ${data.forks} +
+
+
+ `; + } +}; + +window.addEventListener('DOMContentLoaded', window.tarptaeya.reloadRepoCards); diff --git a/static/posts/modular-app/createdwith.jpeg b/static/posts/modular-app/createdwith.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..8acd8c06ee7f2c8c62eddc0cefb3458a0136f469 GIT binary patch literal 29823 zcmd42WmH|uwjjK5C%C)o#vOvYyAxbC?h@SH-Q6X)6Wk%VLvVLVkc2dxd+xdY`t>(P z_ZZ)gu2s9{Tys{{E}OEd*7~#ZXB&VbBOxsT00RR6z}_yvpLKvJ015&U5)uOHErEi9 zf`&nag?S4f5D?%HQ9q!ep?*L`MaLq*M#sRzL`B6R#la&aBqkfQNbWk!Tt;a2mk=~c8z)8Rj|=IKDjk(d{FyUJ!&-W>`a7nifJ-9vFTZ~>kHt$0&&cv$oz*&8%e%Q9s zHmue+Kyve2waKS)OPPb#EzaKg+{xTU*1ReIt-g^Y#ntgQ4gla#fe(@ny>z{?mPV{9 z-EkcPGMggQ27ed7csAKGI-`8Sh!(lY+%z;pnVD-xO)h3-5gwEUvf03vAkW}ldS5s^Bg9GaSGs8lV60YT(4cB(={*eQM&N_UWnY+ z$Fd4%TRJ{7CdFfpuEFT~{LR*Q6BpfAN6*U1J|9>gZwa)CpVwuijSvE2T-+$zr3DJ? zc+JuvmzbF&1!=d)CN^4xQPC}T$dPSH6iO!|Am~5J>=m`OA^+Rhp*s+yn-|LPX zx|$ZlZR9YI!zq8OdRSF|YTDbZGjsQ2&4BA)+k2J;PiQNeXx{)sd+%JaS`(nASqC%o z`Xd{J(fL!yswwTP4ns*pjrpji)(K+T(RH%B%I&4?C}j@6pA5jEOi#LoW_38JG0&T2Z87P4H!kO%0aA~*v97#F=!VB&%ib_*CtlE&Yv{%a(#m3xWAQt`v`f~ahP0b* zPwvPKffh7=umQp6@N2Gb|10IUErmaTl>N9Y+Ab<;1PfUClsPn$RrZB1Z56bOb8Clr zyU#u{rIqFG0I`a7c*ipJ7IKNxm_2~{>Ztj${ltn~<_$no6_+s{($ac`F7a7e`Yh^X zlf+`RKh1@bqeybPBdlNqeRspzVWH7xr3QT-Odr4DFpcZ?^U2+UwVKX=aA$db|Na*@ zEA=ZM@z#{WU30XVXX-e0RqqGwluL#y@eZ1!3Tw==D0c+{liliWubic3 zuL%4k`xD%Y+>3}(I!0FaoK!QYe4Vy@=XaSj4{O+%e}I-j91|T2NV7jWbaSIuRgmL& zJv%*@;+#FfGleqBUqWdRPT7Fp#oi%>SaX z?x8QR$&_)#0a7OCOBtSv>?wQOLoHXVieys&bs%IeESd)fu@Jd|So)hTcl3U_$NuJ% zy=c5%@DdG_qI2PCN1;_-QJ4DrsMuu>P2|FURy@7T5+ z|5dQKbKUG=&&x`iO5vCWx0^LFSkC7ITBMpaQ#~D=Y?^7mavskzTDhyHO$jE){dd@s zvfog{F{fqN@Mf6u>P#~pxyL_cBqbQ#R2Eb2d>^6R0LTWl&PUKX&2wToVAC!zg1L1R z-s(x!I?twt`&w*E5N!~~2&Z@jVp*D|R*}8`M9UiPRl}vX5eFa>=lDiGh1F#QWe)p> z^*3P#vNvJsF@mP#7|qleQy)lUYwAU#AM7Imf5(U`HXsW(@>}GmcH$0R&Pd}_#U)sg zH?&`<_{i(nsnRsE)7YKbZ07y57%ayh0G^!i9Gk4!TDLdsUk#o9SIkRs&@ca-F|?76 zl>gp{e+RJ0eAIksApkP~fC~T&3%%1v0k8l>@ON}rs8QDc4FUkpVEgX?!UG>5_-66h z-|RUQ_?x2w3I666ymJ8W1|JL>6$29s1r42*gp`Gy1BQ%^lUbNtj8ce#O5)8IfPHfj zz@Wf)VxY#HsBz5Qt#eBToau=UH`)otM)ln3!^iMJy9UY|4|BU86;|?e)UD2{&p)l* zMagQIUnp0-7?^3BcDdGKR4>TW*NDY{D6Eyqbt3QF^}0ubp3AR=A^%32!RsNo_hS6e&VEfApkxRp5_xx7D+!pagpUtiQ!N7~k1zO%n^4 zve_u{_I2_AN;ehGuq|I^H^+H&Rl zL%(IFF)l=33Wo(h(H+6*Z&7bYp+C^B03Az4*yWCKgF~SnjfO%>flpZrn zJj^5gU4LB@Yw*;`GOFOYewI;HMSUSkmDv^ToDzPbQfy3YMXVKcA!DrdSbC17&C3w2 zr-P_)KnIMraboG)bK zG9+ani7E#wuBxWRn6AtIDp6l+w8R%a@$+Hbx@FrUBO+R}w2AjIZNV!}SP_VMxAUH0 z%kmEhmfiA~UXOkzE)z%(n^v{lYIWkS_!#Io1%$2@w;L{Ko(Y^L-iTS_w{|A!tQHFn zGN-+C!{KeqY^}0R39OWnAsa(lS&{rmK75d8t$9UQy4r2m(w8%ul!jdEcFb+&)arCF zG&zM?WTDNkib~49m{{Kc`&E9ie+mXc4+(a$=|z2>V`(nM-np=2T+bHW;dU3aYWY*l zV;pnXI(i@xYhE3Z~%3EpzW;($5hz22^y7cffmUT?E;KR&cffn)~@T9 zd$#6SX{ewoct?WNns3n?6xRi-H`_m=WnQE?G;y za34(W&stF(IjhR|>9U;U^5<>WF3Jy)-PjbPpUJd2G)-Du5{Bu*avG6GEOr`@8;=Q3Q|KI%t_1<91Ya-osMyN!;k@*BOXdTm4sNbUr$-o*B-<` zjT-dRNqGv91QzB~eXje@AK4lo7tbHR>ES3p^pX-x(EK9UC{A_#u|9d1i15VqHWv0l zU;Xr3I(1+13sTLZjW;<8HjMM~RgqOUY(jt%T3GvL!tJ=uc>89`?b=4@WJ$YT2osywtk7*iF6=Sy4T5GIA?Rb6#gC07!4oZ2lC>Wi<#Y*;*7T@$kDE_dXgZN{!J>{}y_VqM`w=~tqwA6nyekrR zcu$Y{=#SSA(5xXhu-#7Ol|NiZ^cJT)w@!fL)Ta>QD1gB2k zBcy%)p0H@a-Qi+qLqO89L+fG9M=-I#dRTO2g)j&;e9)K$Ct8C14RLlDRQu<~WB@gM zB=nuEQiK}b?Q1ahi@-NuS|f15WX}3j0LF3vb%TYli!ZD^T{pf#=0US%)pVu(X#Z|( zBR93R?=R6R9U+TIly^3lm)01zyro@qptLkr@^d9#g!!rbTM4I$#{g3+BmGFs>sxSG z{gCcGzS8C*bJieb-zGNvV7q{4k7 ze#|=f%w(J(d~nIy&Wu-(N%+WgGj`sDHgQnU(D-VDzO+>#S}=8B7j1umsM4F57-*S? zdE7?umLO_kz-48GjGb6}6TUoOG_Su#hN)xUT+*DB%zR_*XR%A1IlV(~^FrPt+~AYU zza%O=HCwW}f0l%Bi2uRKWlnbB1R`05)M=Vx8)5&JLAj1|xG&F!)sTdGK<7?Gc6ZhK zO-8iZ%f;mE51^@XlQNm5XI*scbf0d}TcijhMa}Ye<-LCQ+-ZrmmD*rhT@E!K-bZ1{ zvUGWHOo~dwSE~l_Q{RrAqOmrg1F~6WYsnL|MpQ zM(7|}TNI1nw0)uJ;-5mtNW2*d5s4T|Ds$XLTDN-H5S#tFyVY=WEUzaI*|8snw+prN+E5Q_SAHZWmO?gXrwtOACeHlM2U-KZs=4?j*8C?2X60y1bJ9 zvU9xCIOd>K;7!Js_bjfCvjf)oH}cTv$W=veRqe%y83AyVoX>Reuv5()*7{{-Ac74xO%t!*oTjM5dQEk7V^)6ADpOBUyyy z5J6H3`Y#9t5zYBhl&el3%3k*&qBO)$8RhsPX_W zrGp~qg$nQT4l$i%<2C;tHHS^g(?~I~TCG-x!jOWocpD5*#Bm^Pfg~(d8#&ei^Pn-- zA*(Xt^nx+HvQFfJM&bSw0`)aq%ZMkYOk0d=MKK3^XleYy9A2iVsuaiyNuKnb6gWr0 z>JXjmeMeP3PKV8?tWY;MRB>Fa|IdP5e@z-pp1fDXDoV;}OEe6+Zy8`|!HxMcX&Y){ z!-j8^-e#g4r=F8PWS+(7ziI2w9wuaL&WXDv=SQ^zxqGzUb8nY4iX_& zF~t+GYk0DNVAwXxMr;g7bzq%_*6y9)##XVA_o$1x5&Xe9V#iNj?yPXXft(dEy3Mp$ zqI>81^_f7J{#Eh$syjy<1pMG*`q>Zto0To4x@m(1E;(XCsMG+3Q6lpgj%hUFcfii3 zimFmM$oIdF+wg??u)0H_f{J$Jrg{2|iEs=wJI*_RI=eLP;Trq{SXtL^+8!M&zFPY@ zW5Zm7q|>a>wfOW)#Ptt=#M4n~*3xrKeBb1-IMp4SjpR`8F7e*auFK= zRbYVmq)J7ud<|9lq==%pIKXy%TIzT)H@*n|+tghzukya_81R;-U*)keINSS&aLsr@ z$)%>fc0qeiP6vpgn2Mje`y%0yUs0f>7=)!-nSNTzTM=7n@-HNaP7a$9UbI6qi@n?& zluP#?qgViP3yE?7Spg*y_pR(I79eB%QW$)r8 za;*)~w}CmO8#U=9nkvaM zMe(}E+dq3Kd|rR^-*P|8ngOd*#Y`psisITT$;VX0_yuxj{+hAYY8}aO|8dx~t5s1u zniZO~S(fBnlVIqbvr1Q7){&Ep=4^Q71A}c;^y(7heXwQb`2L!@++4&rLm!9nHdj7a zeK#vZUrgb^P*h70uo53yjVf^@8jXorK#$G-;gvFdLzS5<)d?V75J{B^JX1k|*ggKx z7h&-A>jR~b0{9N;+6eNDg!)4A)5)b@@=6v&vxTt2Lu5^H^*cOQHgWd5&N3NI)+I(} z3)-CvymZKsL52Cp<-BwdBwjPo6*?!!F+2c?F$#;Qx#Yk4(@y@48Y>_*+$%A;2L4BO z`&{&igi8^xat_UOvV{y=3AAs96(6&EX;aM_sUksGed}irlMy1E8%77t4x`!y>t?(Q ziB9F(^f%-rw8N-Q?JuNT`Hi*s#_BS9W0m6Fys_R9WOKPn@KQ#|DJ#uX$?cns87mpG zp}lg8aOsDn>1+!HwlduL=#ycWJzmEgZnlAiS}Zc!?1^!{K-mI3Adab-?g2G!7J|Q# z10oPCq?fr38XM5RjiU#F;Li|!I@n~p(JdG#x-!&7E@KUgWCT`C!r>xrj*iy{{YAJc z9<-0w4qf|(Xy^oK;C)$?sOB)Lj8W52MXiXD1DUAc#V>>w)04_XKS6s3eN@h)`G#Q; zNq1jZJE7E&tgK7E{`Rmp1)W`p(Q<@NTSPgb&#PrMH=vM;=kjH~Bs7PC{lutD76~XV z(>FMiER`&m_fREgdHOwC%huzjd2e{xkh2r4c?GGC=wGn5*VYZf`U}3k|Jph9iXrC! zSPKr)mtNaY2peX6BmZ^8|1;uyaVW-64Ae7^uH?N!|`aAW$LE&`DX8jmU&mpinT$Sw)PmF-TM$odW8a+1Q0l zC`6S4gJy3M3JUvo{@OHoJ6aJ0lOTtvO!A7tjnC2{jThl(ec}0@=v8cW6Y)Nt0KN>*t)%O7eB2lIb?6 z69-PWPAyO#>X*R{C6b6(FK+}X*Q{{m3glv5JIpTJ$K(Sazf-?ii5N7#DlwaH&<5-T zI@U0M0D{CJ648&-H7K73&VR`!?X?hSbMI~K2|k??s~B{jN-iX(G0P9+W)Q}cVhhaa zsuyefLGSEI@J*5ope$@$vh~+xtbYCMlUu;cFIis=Ouu|B4Y7Fr11PyvljKc3Y#ui1 zyjxx@RbGWA&8qZheMu6o`|187@EwnIEAg_--C6(zRe*^2eEoVtP4uGhfvSW_V4QLWcqCnSrwy=pg)JS6kstinS#?>^GFd&O3!YRp(gy7O(�e%IJ-538 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 V&Ozd#<$>$}v68Zh#=E!G{{!u-(`Enw literal 0 HcmV?d00001 diff --git a/static/posts/modular-app/stack.svg b/static/posts/modular-app/stack.svg new file mode 100644 index 0000000..aaf23d3 --- /dev/null +++ b/static/posts/modular-app/stack.svg @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/static/posts/modular-app/title.svg b/static/posts/modular-app/title.svg new file mode 100644 index 0000000..1cb6750 --- /dev/null +++ b/static/posts/modular-app/title.svg @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +