commit
64781e5420
91 changed files with 3714 additions and 0 deletions
@ -0,0 +1,3 @@ |
|||
# DoubleFourteen - The DoubleFourteen Code Forge |
|||
|
|||
Website sources for [DoubleFourteen - The DoubleFourteen Code Force](https://doublefourteen.io). |
@ -0,0 +1,6 @@ |
|||
--- |
|||
title: "{{ replace .Name "-" " " | title }}" |
|||
date: {{ .Date }} |
|||
draft: true |
|||
--- |
|||
|
@ -0,0 +1,14 @@ |
|||
baseURL = "https://doublefourteen.io/" |
|||
languageCode = "en-us" |
|||
title = "The DoubleFourteen Code Forge" |
|||
theme = "doublefourteen" |
|||
disableKinds = ["taxonomy", "term"] |
|||
timeout = 1000000 |
|||
|
|||
[markup.goldmark.renderer] |
|||
unsafe = true |
|||
|
|||
DefaultContentLanguage = "en" |
|||
[languages] |
|||
[languages.en] |
|||
weight = 1 |
@ -0,0 +1,3 @@ |
|||
--- |
|||
title: "404: Page not found" |
|||
--- |
@ -0,0 +1,48 @@ |
|||
--- |
|||
title: Home |
|||
mobile_menu_title: "Home" |
|||
--- |
|||
|
|||
{{< flexrow style="justify-content:center;align-items:center" >}} |
|||
{{% div class="headline" %}} |
|||
The DoubleFourteen Code Forge is a community to produce and promote high quality free software. |
|||
|
|||
{{% div style="text-align:left" %}} |
|||
We encourage strict cooperation between research and practical coding. |
|||
- Conscious research → pragmatic results. |
|||
- Conscious development → code quality. |
|||
- Synergy in both worlds. |
|||
{{% /div %}} |
|||
{{% /div %}} |
|||
{{% div style="align-self:flex-end" %}} |
|||
<a href="doublefourteen/" class="button">See our manifesto</a> |
|||
{{% /div %}} |
|||
{{< /flexrow >}} |
|||
|
|||
{{% div class="alt-background" %}} |
|||
{{% div class="container cards-list" %}} |
|||
|
|||
{{% div title="Contribute" %}} |
|||
The DoubleFourteen Code Forge is an open community. |
|||
|
|||
{{% div style="text-align:left" %}} |
|||
- Always looking for new ideas and projects. |
|||
- Contributors sharing our vision are welcome. |
|||
- There are many ways to support us. |
|||
{{% /div %}} |
|||
{{% /div %}} |
|||
|
|||
{{% div title="Check out our projects" %}} |
|||
Every DoubleFourteen project is free software, as in freedom. |
|||
|
|||
Our source code repository is accessible at: |
|||
[https://git.doublefourteen.io](https://git.doublefourteen.io/explore/repos). |
|||
{{% div style="text-align:left" %}} |
|||
- Contributions to our code is welcome. |
|||
- Found a bug, got an improvement in mind? Let us know. |
|||
- We would love to know if any of our project is being useful to you. |
|||
{{% /div %}} |
|||
{{% /div %}} |
|||
|
|||
{{% /div %}} |
|||
{{% /div %}} |
@ -0,0 +1,6 @@ |
|||
--- |
|||
title: Articles |
|||
menu_title: Articles |
|||
mobile_menu_title: Articles |
|||
layout: rss-list |
|||
--- |
@ -0,0 +1,6 @@ |
|||
--- |
|||
title: Blog |
|||
menu_title: Blog |
|||
mobile_menu_title: Blog |
|||
layout: rss-list |
|||
--- |
@ -0,0 +1,56 @@ |
|||
--- |
|||
title: "The Micro BGP Suite has been released!" |
|||
mobile_menu_title: "µbgpsuite now released!" |
|||
date: 2021-06-15T00:00:00+00:00 |
|||
tags: |
|||
- ubgpsuite |
|||
- C Language |
|||
- Networking |
|||
- BGP |
|||
- News |
|||
--- |
|||
|
|||
**We are happy to announce that the first version of the micro BGP suite has now been released!** |
|||
|
|||
## The Micro BGP Suite is now available |
|||
|
|||
I am thrilled to announce that the very first version of the |
|||
DoubleFourteen inaugural project, the Micro BGP suite (*µbgpsuite* for short |
|||
-- or *ubgpsuite* for differently Greek keyboards ☺), is now available! |
|||
|
|||
Source code for this project is available at: |
|||
[https://git.doublefourteen.io/bgp/ubgpsuite](https://git.doublefourteen.io/bgp/ubgpsuite) |
|||
|
|||
The Micro BGP Suite is an evolution of *bgpscanner*, originally developed under the |
|||
Institute of Informatics and Telematics of the Italian National Research Council, |
|||
see the forever unknown |
|||
[HISTORY](https://git.doublefourteen.io/bgp/ubgpsuite/src/branch/master/doc/HISTORY.md) |
|||
file included with the project documentation for more obscurities of this |
|||
project. |
|||
|
|||
The Micro BGP suite includes: |
|||
- [lonetix](https://git.doublefourteen.io/bgp/ubgpsuite/src/branch/master/lonetix), |
|||
a performance oriented static library for BGP and MRT data encoding/decoding written in C. |
|||
I'd like to send a special thanks to my friend [Vernal Liu](https://covernal.github.io) |
|||
for coming up with a name for this library (though, it originally meant |
|||
*Lorenzo's Network library on Posix*), and for his saint-like patience in listening |
|||
my ramblings all the time. |
|||
- [bgpgrep](https://git.doublefourteen.io/bgp/ubgpsuite/src/branch/master/tools/bgpgrep), |
|||
the very first utility using *lonetix*, an advanced replacement for *bgpscanner*, |
|||
an utility capable of lightning fast MRT dump decoding and filtering. This utility |
|||
is documented in its glorious `man` [page](https://git.doublefourteen.io/bgp/ubgpsuite/src/branch/master/tools/bgpgrep/bgpgrep.1.in). |
|||
|
|||
`bgpgrep` is the first utility taking advantage of `lonetix`, but more tools |
|||
are underway to demonstrate the capabilities of its API. |
|||
|
|||
> **Hint** -- for a convenient PDF version of the manual page, you can run: |
|||
> ```sh |
|||
> $ sed s/@UTILITY@/bgpgrep/g tools/bgpgrep/bgpgrep.1.in | groffer |
|||
> ``` |
|||
|
|||
Stay tuned for more news on this project, as I'm currently working on an article |
|||
describing the BGP filtering engine exposed by `lonetix`. |
|||
|
|||
Enjoy, and happy hacking, |
|||
|
|||
Lorenzo Cogotti |
@ -0,0 +1,110 @@ |
|||
--- |
|||
title: DoubleFourteen |
|||
menu_title: "The DoubleFourteen Code Forge" |
|||
mobile_menu_title: "1414° Code Forge" |
|||
date: 2021-06-15T00:40:51+02:00 |
|||
--- |
|||
|
|||
# Vision |
|||
|
|||
The DoubleFourteen Code Forge is an effort to promote synergy between developers |
|||
and researchers, in order to promote good development practices, |
|||
improve the software landscape and share common views and ethics. |
|||
With hope to form a collaborative community made of competent |
|||
individuals, practitioners, and researchers, working together and benefitting |
|||
from each other's skills and inputs. |
|||
|
|||
# Raison d'être |
|||
|
|||
Computer science and software development has evolved dramatically crucial in the last decades |
|||
for technological advancement and scientific research, consistently posing |
|||
new challenges and offering new possibilities to us all. |
|||
Facing such challenges and opening new applicative fields had an enormous impact |
|||
over our lives as we can testify every day. |
|||
|
|||
Despite the abundance of application fields, research institutes and commercial |
|||
investments, oftentimes, topics and development practices are heavily |
|||
conditioned by external factors -- such as commercial interest, |
|||
nation-wide infrastructures, bureaucracy, budget choices, academic interest, |
|||
knowledge availability. Similar constraints apply to development time -- |
|||
often seen as expensive by commercial entities and unnecessary to research |
|||
institutes, to the point of settling for quick prototypes that slowly but |
|||
surely become the definitive implementation. |
|||
|
|||
As a matter of fact, computer science exhibits an uncanny dichotomy between |
|||
theory and actual practice, whereas theory is often forgotten or |
|||
ridiculed by practitioners and practical implementation is seen as a |
|||
pesky and forgettable detail by researchers. |
|||
|
|||
The DoubleFourteen Code Forge is an attempt to provide an international |
|||
and diverse community to hoist and support any individual or group in their |
|||
own research or development interest, providing an ecosystem where such |
|||
limitations are absent or minimal. |
|||
We strive to enact an alternative setup where researchers and developers |
|||
may directly communicate with each other and understand the value of |
|||
taking into proper consideration every aspect and every challenge of the |
|||
computer science, creating premises for new innovative techniques. |
|||
Where the only constraints are imposed by skill, motivation, imagination and |
|||
perseverance in reaching our goals and improving ourselves. |
|||
|
|||
Our community sole focus is raising the quality of the software world |
|||
and raise awareness on computer science, by spreading the results of our work. |
|||
Everyone is welcome to submit projects, take on research on their topic of |
|||
interest, or offer support. Everyone is encouraged to contribute and share |
|||
knowledge, as the more knowledge we share, the more contributions we can offer. |
|||
|
|||
# Fundamental principles |
|||
|
|||
The DoubleFourteen Code Forge is intended to be equally useful for |
|||
scientists and the collectivity as a whole. We should never forget that the |
|||
knowledge we produce and the code we write should be oriented to improving our |
|||
lives, our society and raise scientific awareness to the general public. |
|||
The following list summarizes the basic principles that everyone in the |
|||
community is asked to agree on, in order to ensure our objectives and a |
|||
productive environment. |
|||
|
|||
* We value research, code, experience, knowledge, and share them |
|||
publicly. Believing that our efforts may be of better use when freely available |
|||
to a wider audience, as opposed to confined to few privileged entities. |
|||
|
|||
* We promote ethical software and abhor restrictions to our Freedom. In no |
|||
way ever shall we consciously suggest or endorse the use of any unethical |
|||
software or service akin that ultimately results in: |
|||
- mistreating users or developers; |
|||
- violating the users' or developers' privacy or silently collecting their |
|||
data; |
|||
- severing the right to understand, learn, verify, modify or improve the |
|||
original source code; |
|||
- denying full control over the computing instruments; |
|||
- tying the user or developer to a single software or service, constraining |
|||
their freedom of choice. |
|||
|
|||
* We place mutual respect at the foundation of our community. |
|||
|
|||
* We believe in civilized debate. Personal offences and discrimination targeted |
|||
to us or others alike, in any public or private form, are incompatible |
|||
with our community. Any viable action shall be taken to condemn and eradicate |
|||
such behaviour and make our environment cleaner. |
|||
|
|||
* We firmly reject any misrepresentation of work. |
|||
Our community as a whole is but a mean for each individual to fully express |
|||
their potential in any useful way they are most proficient with. |
|||
As such, every single effort is to be duly credited, fairly and transparently. |
|||
|
|||
* We regard independence as a vital premise to ensure the impartiality |
|||
of our work. |
|||
|
|||
* We never compromise over quality, our work is our art and pride. |
|||
|
|||
* We keep any social, political, religious or idealistic conviction to our |
|||
personal individual relational sphere. Our community as a whole is neutral and |
|||
refuses to take any stance or action whatsoever over matters extraneous to |
|||
objective scientific debate on software development and computer science. |
|||
|
|||
* We encourage any benevolent participation to our community, by actively |
|||
extending ourselves to rule out any obstacle in its actuation. |
|||
|
|||
* We offer support to any project or initiative compatible with our |
|||
principles and goals. |
|||
|
|||
* We are eager to learn, grateful to teach, motivated in our work. |
@ -0,0 +1,6 @@ |
|||
<div class="{{ .Get "class" }}" style="{{ .Get "style" | safeCSS }}"> |
|||
{{ with .Get "title" }} |
|||
<h1 class="section-title">{{ . }}</h1> |
|||
{{ end }} |
|||
{{ .Inner }} |
|||
</div> |
@ -0,0 +1,3 @@ |
|||
<div class="{{.Get "class"}}" style="display: flex; flex-direction: row; flex-wrap: wrap;{{.Get "style" | safeCSS }}"> |
|||
{{- .Inner -}} |
|||
</div> |
@ -0,0 +1,41 @@ |
|||
/* |
|||
.path-yel-in { |
|||
animation: draw 10s infinite; |
|||
animation-delay: 1s; |
|||
animation-timing-function: linear; |
|||
} |
|||
.path-yel-out { |
|||
animation: draw 10s infinite; |
|||
animation-timing-function: linear; |
|||
} |
|||
.path-left { |
|||
animation-delay: 2s; |
|||
} |
|||
.path-bottom { |
|||
animation-delay: 4s; |
|||
} |
|||
|
|||
|
|||
.circuit-path { |
|||
animation: circuit 20s linear infinite; |
|||
animation-delay: 2s; |
|||
} |
|||
|
|||
.circuit-static, .circuit-anim { |
|||
left: 50%; |
|||
top: 50%; |
|||
transform: translate(-50%, -50%), translateZ(0); |
|||
position: absolute; |
|||
} |
|||
.circuit-anim { |
|||
backface-visibility: hidden; |
|||
} |
|||
|
|||
|
|||
@keyframes circuit { |
|||
100% { |
|||
stroke-dashoffset: 0; |
|||
stroke-opacity: 0.6; |
|||
} |
|||
} |
|||
*/ |
@ -0,0 +1 @@ |
|||
{"Target":"css/circuit.min.d053cd5b7d1b8276398edb651c03a784e706faf0478345bec21786b70d6f6ece.css","MediaType":"text/css","Data":{"Integrity":"sha256-0FPNW30bgnY5jttlHAOnhOcG+vBHg0W+wheGtw1vbs4="}} |
@ -0,0 +1 @@ |
|||
.alt-background{background-color:#efefef}.main{background-color:#737475;color:#fff;padding:10px 15px;font-size:.9em}.nav-spacer{display:none}.banner-burnin{position:absolute;width:100%;height:100%;z-index:-1;box-shadow:inset 0 0 1px 1px rgba(64,64,64,.1);background:radial-gradient(ellipse at center,#4e3d18 0%,rgba(64,64,64,0) 50%);transform-origin:50% 50%;transform:perspective(20px)rotateX(.5deg)skewX(2deg)scale(1.03);animation:burnin 1s linear infinite;opacity:.9}.banner-burnin::after{position:relative;background:radial-gradient(ellipse at center,rgba(0,0,0,.5) 0%,rgba(64,64,64,0) 100%);opacity:.1}.banner-terminal{position:relative;z-index:90;margin:0 auto;width:100%;height:550px;background-color:#0a1922;overflow:hidden}.banner-terminal::before{position:absolute;width:100%;height:550px;top:0;left:0;content:"";z-index:100;background:linear-gradient(#777 50%,#0a1922 50%);background-size:100% 4px;background-repeat:repeat-y;opacity:.14;box-shadow:inset 0 0 1px 1px rgba(0,0,0,.8);animation:pulse 5s linear infinite}.banner-terminal::after{position:absolute;content:"";top:0;left:0;width:100%;height:76%;z-index:99;background:radial-gradient(ellipse at center,black 0%,rgba(0,0,0,.62) 45%,rgba(0,9,4,.6) 47%,#c3993c 100%);background-color:#c3993c;box-shadow:inset 0 0 4px 4px rgba(100,100,100,.5);opacity:.1}.banner-scanline{--scanline-area:$term-height;position:relative;z-index:99;width:100%;height:5px;background:linear-gradient(to bottom,rgba(255,0,0,0) 0%,snow 50%,rgba(255,255,255,.98) 51%,rgba(255,0,0,0) 100%);background-color:#fff;background-size:100% 4px;opacity:.1;animation:scanline 3.25s ease-in-out infinite}.banner-textarea{position:relative;width:1500px;height:600px;margin:0 auto}.banner-prompt{position:relative;text-align:left;padding-left:1em;font-family:Inconsolata,Courier,unicase;text-shadow:0 0 8px rgba(255,255,255,.3);font-size:4em;color:#c3993c}.ghost,.pop{opacity:.27}.banner-msg-line{text-shadow:0 0 8px rgba(231,214,177,.3);font-family:Inconsolata,Courier,monospace;font-smoothing:antialiased;padding-left:6em;font-size:3em;white-space:pre;color:#c3993c;overflow:hidden}#banner-msg-animate{text-shadow:0 0 8px rgba(255,255,255,.1);color:#6d592c;bottom:0}.flicker{margin:0;color:#2d2d2d;letter-spacing:-.05rem}.flicker::before{content:attr(letter);position:absolute;overflow:hidden;color:#fc0;z-index:5;text-shadow:none;animation:flicker 3s linear infinite}.glitch{margin:0;letter-spacing:-.05rem;display:inline-block;animation:glitch 1s linear infinite}.glitch::before,.glitch::after{content:attr(text);position:absolute;overflow:hidden}.glitch::before{left:0;animation:glitch-top 1s linear infinite;clip-path:polygon(0 0,100% 0,100% 33%,0 33%)}.glitch::after{left:0;animation:glitch-bottom 1.5s linear infinite;clip-path:polygon(0 67%,100% 67%,100% 100%,0 100%)}@keyframes burnin{0%{transform:scale(1,1.002)}50%{transform:scale(1,1.0001)}100%{transform:scale(1.001,1)}}@keyframes scanline{to{transform:translateY(calc(var(--scanline-area) - $term-scanline-height))}}@keyframes pulse{0%{transform:scale(1.001);opacity:.14}8%{transform:scale(1);opacity:.13}15%{transform:scale(1.004);opacity:.14}30%{transform:scale(1.002);opacity:.11}100%{transform:scale(1);opacity:.14}}@keyframes flicker{0%,19.999%,22%,62.999%,64%,64.999%,70%,100%{opacity:.99;text-shadow:-1px -1px 0 rgba(255,255,255,.4),1px -1px 0 rgba(255,255,255,.4),-1px 1px 0 rgba(255,255,255,.4),1px 1px 0 rgba(255,255,255,.4),0 -2px 8px,0 0 2px,0 0 5px #ff7e00,0 0 15px #f44,0 0 2px #ff7e00,0 2px 3px #000}20%,21.999%,63%,63.999%,65%,69.999%{opacity:.4;text-shadow:none}}@keyframes glitch{2%,64%{transform:translate(2px,0)skew(0)}4%,60%{transform:translate(-2px,0)skew(0)}62%{transform:translate(0,0)skew(5deg)}}@keyframes glitch-top{2%,64%{transform:translate(2px,-2px)}4%,60%{transform:translate(-2px,2px)}62%{transform:translate(13px,-1px)skew(-13deg)}}@keyframes glitch-bottom{2%,64%{transform:translate(-2px,0)}4%,60%{transform:translate(-2px,0)}62%{transform:translate(-22px,5px)skew(21deg)}}@keyframes typing{to{width:100%}}@keyframes blinking{from,to{border-color:transparent}50%{border-color:orange}}h1.section-title{font-size:3em;color:#444;text-align:center}.motto{text-align:left;padding-top:1em}@media(prefers-color-scheme:dark){.alt-background{background-color:#292929}h1.section-title{color:#ddd}}@media only screen and (max-width:1200px){.banner-prompt{font-size:3em}.banner-msg-line{font-size:2em}}@media only screen and (max-width:1000px){html,body{overflow-x:hidden}body{-webkit-text-size-adjust:none}}@media only screen and (max-width:800px){.banner-scanline{--scanline-area:$term-height-mobile}.banner-prompt{font-size:2em}.banner-msg-line{font-size:1.5em;padding-left:3em}} |
@ -0,0 +1 @@ |
|||
{"Target":"css/home.min.4c9feafeab8017f7a8a23fac16d131d3b087fbed2ec892551b95a3dd7e8e47d5.css","MediaType":"text/css","Data":{"Integrity":"sha256-TJ/q/quAF/eooj+sFtEx07CH++0uyJJVG5Wj3X6OR9U="}} |
@ -0,0 +1 @@ |
|||
#mobile-navbar{display:none;overflow:hidden;color:#fff!important;font-weight:700}#mobile-subnav{background-color:#0a1922}#mobile-subnav{display:none}#menu{padding:5px 0;color:#fff;padding-right:5px;padding-left:5px;font-size:1.1rem!important}#navbar{display:block}.nav{background-color:#0a1922;padding:5px 0;border-top:4px solid var(--teal)}.nav-spacer{margin-bottom:30px}.df-community-link:before{content:"";background-image:url(/heart.svg)!important;background-size:12px 16px;width:12px;height:16px;margin-left:5px;margin-right:5px;vertical-align:middle;display:inline-block}#menu .navbar-item,.nav .navbar-item,.nav .navbar-item:visited{color:#fff;padding-right:5px;padding-left:5px}@media only screen and (max-width:340px){#mobile-navbar{font-size:1.1rem!important}#hamburger{padding-left:.5rem!important}}@media only screen and (max-width:1000px){#menu .navbar-item{display:block}#mobile-subnav{display:block}#mobile-toggle+#menu{display:none}#mobile-toggle:checked+#menu{display:block}#mobile-navbar,#menu{display:block;font-size:1.2rem;line-height:2.2rem}#mobile-navbar{margin-top:.4rem}#navbar{display:none}#mobile-toggle{display:none}#hamburger{float:right;padding-left:1.5rem;padding-right:.5rem;line-height:0}} |
@ -0,0 +1 @@ |
|||
{"Target":"css/navigation.min.acad5d873b80dbbc3bfed76f876917d6fb8437b66d2018091c8bd51afdab0eb2.css","MediaType":"text/css","Data":{"Integrity":"sha256-rK1dhzuA27w7/tdvh2kX1vuEN7ZtIBgJHIvVGv2rDrI="}} |
@ -0,0 +1 @@ |
|||
.notfound-page{position:relative;display:flex;width:1500px;height:100%;margin:0 auto}.notfound-content{position:relative;flex:1;padding-top:60px;min-height:500px;max-width:500px}.notfound-404-chan-wrapper{position:relative;flex:1}#particles-bg{z-index:100}.notfound-404-chan{suser-drag:none;user-select:none;-moz-user-select:none;-webkit-user-drag:none;-webkit-user-select:none;-ms-user-select:none} |
@ -0,0 +1 @@ |
|||
{"Target":"css/notfound.min.8fd670f1f7b146151ae2bd3cdbd2ab27b23a5d3b5a7b23093c4e28ee8d0db07f.css","MediaType":"text/css","Data":{"Integrity":"sha256-j9Zw8fexRhUa4r0829KrJ7I6XTtaeyMJPE4o7o0NsH8="}} |
@ -0,0 +1 @@ |
|||
#particles-bg,canvas{position:absolute;width:100%;height:100%;top:0;left:0;z-index:-10} |
@ -0,0 +1 @@ |
|||
{"Target":"css/particles.min.1267e7250414cb0155cba79bd9ff4780f779558db521b0059252823cd281dca9.css","MediaType":"text/css","Data":{"Integrity":"sha256-EmfnJQQUywFVy6eb2f9HgPd5VY21IbAFklKCPNKB3Kk="}} |
@ -0,0 +1 @@ |
|||
*{box-sizing:border-box}html,body{width:100%;height:100%}h1.section-title{font-size:2em}h1.section-title:first-letter{text-transform:capitalize}body{margin:0;font-family:var(--body-font);font-size:var(--body-font-size);line-height:var(--body-line-height);color:var(--body-color);background-color:var(--body-bg);-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}a{color:var(--link-color)}a:hover,a:focus{color:var(--link-hover-color)}a strong{color:inherit}a:not(:hover){text-decoration:none}.container{margin:0 auto;position:relative;max-width:1000px;padding:0 .2em}.external-link-light:after{background-image:url(/external-link-dark.svg)!important}.external-link:after{content:"";background-image:url(/external-link-light.svg);background-size:10px 10px;display:inline-block;width:10px;height:10px;margin-left:5px}img{display:block;max-width:100%;margin-bottom:var(--spacer);border-radius:var(--border-radius)}table{margin-bottom:1rem;width:100%;border:0 solid var(--border-color);border-collapse:collapse}td,th{padding:.25rem .5rem;border-color:inherit;border-style:solid;border-width:0;border-bottom-width:1px}th{text-align:left}thead th{border-bottom-color:initial}#header{display:flex;flex-direction:row;align-items:flex-end}#header-text{font-size:2em;color:#444;font-weight:700;display:inline-block;padding:1em .5em}#header-text-small{font-size:2em;color:#444;font-weight:700;display:none;padding:1em .5em}#header-image{background-image:url(/doublefourteen-logo-dark.svg);background-repeat:no-repeat;width:330px;height:180px;display:inline-block;margin:0 .5em}.footer{text-align:center;padding-top:2em}@media(max-width:1100px){#header-text{display:none}#header-text-small{display:inline-block}}@media(prefers-color-scheme:dark){.external-link:after{background-image:url(/external-link-dark.svg)}#header-text{color:#ddd}#header-text-small{color:#ddd}#header-image{background-image:url(/doublefourteen-logo-light.svg)}} |
@ -0,0 +1 @@ |
|||
{"Target":"css/style.min.d944d9757086436e8d5b6bcad72f606958e62373e1d7ad0f79c4a5214e5e7ad9.css","MediaType":"text/css","Data":{"Integrity":"sha256-2UTZdXCGQ26NW2vK1y9gaVjmI3Ph160PecSlIU5eetk="}} |
@ -0,0 +1,4 @@ |
|||
:root{--gray-000:#f8f9fa;--gray-100:#f1f3f5;--gray-200:#e9ecef;--gray-300:#dee2e6;--gray-400:#ced4da;--gray-500:#adb5bd;--gray-600:#868e96;--gray-700:#495057;--gray-800:#343a40;--gray-900:#212529;--red:#fa5252;--pink:#e64980;--grape:#be4bdb;--purple:#7950f2;--indigo:#4c6ef5;--blue:#228be6;--cyan:#15aabf;--teal:#12b886;--green:#40c057;--yellow:#fab005;--orange:#fd7e14;--gray:#454545;--blue-300:#74c0fc;--blue-400:#4dabf7;--yellow-100:#fff3bf;--body-font:-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, |
|||
"Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", |
|||
"Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--body-font-size:20px;--body-line-height:1.5;--body-color:var(--gray-700);--body-bg:#fff;--link-color:var(--blue);--link-hover-color:#1c7ed6;--heading-color:var(--gray-900);--border-color:var(--gray-300);--border-radius:0.25rem;--code-font:SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", |
|||
"Courier New", monospace;--code-color:var(--grape);--code-bg:var(--gray-000);--spacer:1rem;--spacer-2:calc(var(--spacer) * 1.5);--spacer-3:calc(var(--spacer) * 3)}@media(prefers-color-scheme:dark){:root{--body-color:var(--gray-300);--body-bg:var(--gray-800);--heading-color:#fff;--link-color:var(--blue-300);--link-hover-color:var(--blue-400);--border-color:rgba(255, 255, 255, 0.15);--code-bg:var(--gray-900)}} |
@ -0,0 +1 @@ |
|||
{"Target":"css/variables.min.64ab9ff349f04ea7ee51c5148a9834f9570ec7ceb652edba40d7abd5b2dc566b.css","MediaType":"text/css","Data":{"Integrity":"sha256-ZKuf80nwTqfuUcUUipg0+VcOx862Uu26QNer1bLcVms="}} |
File diff suppressed because one or more lines are too long
@ -0,0 +1 @@ |
|||
{"Target":"css/home.2c1adf72cf123c3b68c525dcadc082f1589a474f975956f30e8e051d71b43b36.css","MediaType":"text/css","Data":{"Integrity":"sha256-LBrfcs8SPDtoxSXcrcCC8ViaR0+XWVbzDo4FHXG0OzY="}} |
File diff suppressed because one or more lines are too long
@ -0,0 +1 @@ |
|||
{"Target":"css/home.min.fe9260a06c887cdf81a61aeac369079aa7e7a697acd29334e939ec6466473bdb.css","MediaType":"text/css","Data":{"Integrity":"sha256-/pJgoGyIfN+Bphrqw2kHmqfnppes0pM06TnsZGZHO9s="}} |
@ -0,0 +1 @@ |
|||
:root{--background-color: #737475;--alt-background-color: #efefef;--foreground-color: #495057;--body-font: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--text-color: #fff;--title-text-color: #444;--link-color: #228be6;--link-hover-color: #1c7ed6;--heading-color: #212529;--border-color: #dee2e6}@media (prefers-color-scheme: dark){:root{--background-color: #292929;--alt-background-color: #0a1922;--foreground-color: #dee2e6;--text-color: #000;--title-text-color: #ddd;--heading-color: #fff;--link-color: #74c0fc;--link-hover-color: #4dabf7;--border-color: rgba(255, 255, 255, 0.15)}}#mobile-navbar{display:none;overflow:hidden;color:white !important;font-weight:bold}#mobile-subnav{background-color:#0a1922}#mobile-subnav{display:none}#menu{padding:5px 0;color:white;padding-right:5px;padding-left:5px;font-size:1.1rem !important}#navbar{display:block}.nav{background-color:#0a1922;padding:5px 0;border-top:4px solid #12b886}.nav-spacer{margin-bottom:30px}.df-community-link:before{content:"";background-image:url(/heart.svg) !important;background-size:12px 16px;width:12px;height:16px;margin-left:5px;margin-right:5px;vertical-align:middle;display:inline-block}#menu .navbar-item,.nav .navbar-item,.nav .navbar-item:visited{color:white;padding-right:5px;padding-left:5px}@media only screen and (max-width: 340px){#mobile-navbar{font-size:1.1rem !important}#hamburger{padding-left:0.5rem !important}}@media only screen and (max-width: 1000px){#menu .navbar-item{display:block}#mobile-subnav{display:block}#mobile-toggle+#menu{display:none}#mobile-toggle:checked+#menu{display:block}#mobile-navbar,#menu{display:block;font-size:1.2rem;line-height:2.2rem}#mobile-navbar{margin-top:0.4rem}#navbar{display:none}#mobile-toggle{display:none}#hamburger{float:right;padding-left:1.5rem;padding-right:0.5rem;line-height:0}} |
@ -0,0 +1 @@ |
|||
{"Target":"css/navigation.1a3e87cd446d5f1b61dd79f4152b3bb148649c8332e99134da0a231adc630f98.css","MediaType":"text/css","Data":{"Integrity":"sha256-Gj6HzURtXxth3Xn0FSs7sUhknIMy6ZE02gojGtxjD5g="}} |
@ -0,0 +1 @@ |
|||
:root{--background-color: #737475;--alt-background-color: #efefef;--foreground-color: #495057;--body-font: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--text-color: #fff;--title-text-color: #444;--link-color: #228be6;--link-hover-color: #1c7ed6;--heading-color: #212529;--border-color: #dee2e6}@media (prefers-color-scheme: dark){:root{--background-color: #292929;--alt-background-color: #0a1922;--foreground-color: #dee2e6;--text-color: #000;--title-text-color: #ddd;--heading-color: #fff;--link-color: #74c0fc;--link-hover-color: #4dabf7;--border-color: rgba(255, 255, 255, 0.15)}}.notfound-page{position:relative;display:flex;flex-wrap:wrap;width:1000px;margin:0 auto;gap:1.5rem}.notfound-content{position:relative;padding-top:1.5rem;max-width:400px}.notes{padding-top:1rem}.notfound-404-chan{position:relative;width:400px;height:500px;background-image:url("/404-chan_sm.png");background-position:bottom right 3rem;background-repeat:no-repeat;background-size:144px 256px}#particles-bg{position:absolute;width:100%;height:100%;top:0;left:0;z-index:100}@media (max-width: 800px){.notfound-content{text-align:center}.notfound-page{flex-direction:column}} |
@ -0,0 +1 @@ |
|||
{"Target":"css/notfound.d5335f5ffd06a11724e785740f8a7c3510cafaba0e80a9f9631156d33c3a176f.css","MediaType":"text/css","Data":{"Integrity":"sha256-1TNfX/0GoRck54V0D4p8NRDK+roOgKn5YxFW0zw6F28="}} |
@ -0,0 +1 @@ |
|||
.notfound-page{position:relative;display:flex;width:1500px;height:100%;margin:0 auto}.notfound-content{position:relative;flex:1;padding-top:60px;min-height:500px;max-width:500px}.notfound-404-chan-wrapper{position:relative;flex:1}#particles-bg{position:absolute;width:100%;height:100%;top:0;left:0;z-index:100}.notfound-404-chan{suser-drag:none;user-select:none;-moz-user-select:none;-webkit-user-drag:none;-webkit-user-select:none;-ms-user-select:none} |
@ -0,0 +1 @@ |
|||
{"Target":"css/notfound.min.7af2d4e98e0e95317dfd8f8e721927a5a4a16a51163c83d93a1fd266bbb782df.css","MediaType":"text/css","Data":{"Integrity":"sha256-evLU6Y4OlTF9/Y+OchknpaShalEWPIPZOh/SZru3gt8="}} |
@ -0,0 +1 @@ |
|||
:root{--background-color: #737475;--alt-background-color: #efefef;--foreground-color: #495057;--body-font: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--text-color: #fff;--title-text-color: #444;--link-color: #228be6;--link-hover-color: #1c7ed6;--heading-color: #212529;--border-color: #dee2e6}@media (prefers-color-scheme: dark){:root{--background-color: #292929;--alt-background-color: #0a1922;--foreground-color: #dee2e6;--text-color: #000;--title-text-color: #ddd;--heading-color: #fff;--link-color: #74c0fc;--link-hover-color: #4dabf7;--border-color: rgba(255, 255, 255, 0.15)}}@media only screen and (max-width: 600px){.on-pc-screen{display:none !important}}@media only screen and (min-width: 600px){.on-mobile-screen{display:none !important}}@media only screen and (max-width: 1200px){.on-largest-screen{display:none !important}}@media only screen and (min-width: 1200px){.up-to-largest-screen{display:none !important}}@media only screen and (max-width: 1000px){.on-large-screen{display:none !important}}@media only screen and (min-width: 1000px){.up-to-large-screen{display:none !important}}@media only screen and (max-width: 800px){.on-small-screen{display:none !important}}@media only screen and (min-width: 800px){.up-to-small-screen{display:none !important}}*{box-sizing:border-box;z-index:1}html,body{width:100%;height:100%;min-width:500px}h1.page-title{text-align:left;font-size:2em;color:var(--title-text-color)}h1.page-title:first-letter{text-transform:capitalize}body{margin:0;font-family:var(--body-font);font-size:20px;line-height:1.5;color:var(--foreground-color);background-color:var(--background-color);-webkit-text-size-adjust:100%;-webkit-text-size-adjust--ms-text-size-adjust:100%}a{color:var(--link-color)}a:hover,a:focus{color:var(--link-hover-color)}a strong{color:inherit}a:not(:hover){text-decoration:none}.container{margin:0 auto;position:relative;max-width:1000px;padding:0 0.2em}.external-link-light:after{background-image:url(/external-link-dark.svg) !important}.external-link:after{content:"";background-image:url(/external-link-light.svg);background-size:10px 10px;display:inline-block;width:10px;height:10px;margin-left:5px}img{display:block;max-width:100%;margin-bottom:1rem;border-radius:.25rem}table{margin-bottom:1rem;width:100%;border:0 solid var(--border-color);border-collapse:collapse}td,th{padding:.25rem .5rem;border-color:inherit;border-style:solid;border-width:0;border-bottom-width:1px}th{text-align:left}thead th{border-bottom-color:currentColor}.header{display:flex;align-items:flex-end}.header-text{font-size:2em;color:var(--title-text-color);font-weight:bold;display:inline-block;padding:1em 0.5em 1em 0.5em}.header-image{background-image:url(/doublefourteen-logo-dark.svg);background-repeat:no-repeat;width:330px;height:180px;display:inline-block;margin:0 0.5em 0 0.5em}.work-in-progress-content{display:flex;justify-content:space-between}.work-in-progress-text{position:relative}.work-in-progress-sign{width:400px;height:386px;background-image:url(/work-in-progress.png);background-position:bottom right;background-repeat:no-repeat;background-size:400px 386px}.button,.button:hover{background-color:transparent;border:2px solid #737475;color:#333;padding:7px 12px;display:block;margin:10px 0;font-size:20px;font-weight:700;text-decoration:none !important}.button a{display:inline;text-decoration:none !important;color:#666}.button:hover{background-color:#7f7f7f}.footer{text-align:center;padding-top:1.5rem}@media (prefers-color-scheme: dark){.external-link:after{background-image:url(/external-link-dark.svg)}.header-image{background-image:url(/doublefourteen-logo-light.svg)}.button,.button:hover{color:inherit}.button a{color:#ccc}.button:hover{background-color:#383838}}@media only screen and (max-width: 800px){.work-in-progress-content{flex-direction:column}.work-in-progress-text{text-align:center}} |
@ -0,0 +1 @@ |
|||
{"Target":"css/style.14e9793f6c6b6d3683942f19e20cd9c2c21843299949df423dc286e6c113317c.css","MediaType":"text/css","Data":{"Integrity":"sha256-FOl5P2xrbTaDlC8Z4gzZwsIYQymZSd9CPcKG5sETMXw="}} |
File diff suppressed because one or more lines are too long
@ -0,0 +1 @@ |
|||
{"Target":"sass/home.78b660c2911b006de02237403706f63b4ea3283b7001b4594fd7ea78834f7962.css","MediaType":"text/css","Data":{"Integrity":"sha256-eLZgwpEbAG3gIjdANwb2O06jKDtwAbRZT9fqeINPeWI="}} |
@ -0,0 +1 @@ |
|||
:root{--background-color: #efefef;--alt-background-color: #dfdfdf;--foreground-color: #495057;--body-font: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--text-color: #fff;--title-text-color: #444;--link-color: #228be6;--link-hover-color: #1c7ed6;--heading-color: #212529;--border-color: #dee2e6}@media (prefers-color-scheme: dark){:root{--background-color: #292929;--alt-background-color: #0a1922;--foreground-color: #dee2e6;--text-color: #000;--title-text-color: #ddd;--heading-color: #fff;--link-color: #74c0fc;--link-hover-color: #4dabf7;--border-color: rgba(255, 255, 255, 0.15)}}#mobile-navbar{display:none;overflow:hidden;color:white !important;font-weight:bold}#mobile-subnav{background-color:#0a1922}#mobile-subnav{display:none}#menu{padding:5px 0;color:white;padding-right:5px;padding-left:5px;font-size:1.1rem !important}#navbar{display:block}.nav{background-color:#0a1922;padding:5px 0;border-top:4px solid #12b886}.nav-spacer{margin-bottom:30px}.df-community-link:before{content:"";background-image:url(/heart.svg) !important;background-size:12px 16px;width:12px;height:16px;margin-left:5px;margin-right:5px;vertical-align:middle;display:inline-block}#menu .navbar-item,.nav .navbar-item,.nav .navbar-item:visited{color:white;padding-right:5px;padding-left:5px}@media only screen and (max-width: 340px){#mobile-navbar{font-size:1.1rem !important}#hamburger{padding-left:0.5rem !important}}@media only screen and (max-width: 1000px){#menu .navbar-item{display:block}#mobile-subnav{display:block}#mobile-toggle+#menu{display:none}#mobile-toggle:checked+#menu{display:block}#mobile-navbar,#menu{display:block;font-size:1.2rem;line-height:2.2rem}#mobile-navbar{margin-top:0.4rem}#navbar{display:none}#mobile-toggle{display:none}#hamburger{float:right;padding-left:1.5rem;padding-right:0.5rem;line-height:0}} |
@ -0,0 +1 @@ |
|||
{"Target":"sass/navigation.c2388a3ec6258b34c9437b1acabacf098ebf76d90868746e174520b47950528f.css","MediaType":"text/css","Data":{"Integrity":"sha256-wjiKPsYlizTJQ3sayrrPCY6/dtkIaHRuF0UgtHlQUo8="}} |
@ -0,0 +1 @@ |
|||
:root{--background-color: #efefef;--alt-background-color: #dfdfdf;--foreground-color: #495057;--body-font: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--text-color: #fff;--title-text-color: #444;--link-color: #228be6;--link-hover-color: #1c7ed6;--heading-color: #212529;--border-color: #dee2e6}@media (prefers-color-scheme: dark){:root{--background-color: #292929;--alt-background-color: #0a1922;--foreground-color: #dee2e6;--text-color: #000;--title-text-color: #ddd;--heading-color: #fff;--link-color: #74c0fc;--link-hover-color: #4dabf7;--border-color: rgba(255, 255, 255, 0.15)}}.notfound-page{position:relative;display:flex;flex-wrap:wrap;width:1000px;margin:0 auto;gap:1.5rem}.notfound-content{position:relative;padding-top:1.5rem;max-width:400px}.notes{padding-top:1rem}.notfound-404-chan{position:relative;width:400px;height:500px;background-image:url("/404-chan_sm.png");background-position:bottom right 3rem;background-repeat:no-repeat;background-size:144px 256px}#particles-bg{position:absolute;width:100%;height:100%;top:0;left:0;z-index:100}@media (max-width: 800px){.notfound-content{text-align:center}.notfound-page{flex-direction:column}} |
@ -0,0 +1 @@ |
|||
{"Target":"sass/notfound.3230ae6a62d9e6fc90bed42f285492ba8b05f818abbd71e0c96e5ba56cdb320e.css","MediaType":"text/css","Data":{"Integrity":"sha256-MjCuamLZ5vyQvtQvKFSSuosF+BirvXHgyW5bpWzbMg4="}} |
@ -0,0 +1 @@ |
|||
:root{--background-color: #efefef;--alt-background-color: #dfdfdf;--foreground-color: #495057;--body-font: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--text-color: #fff;--title-text-color: #444;--link-color: #228be6;--link-hover-color: #1c7ed6;--heading-color: #212529;--border-color: #dee2e6}@media (prefers-color-scheme: dark){:root{--background-color: #292929;--alt-background-color: #0a1922;--foreground-color: #dee2e6;--text-color: #000;--title-text-color: #ddd;--heading-color: #fff;--link-color: #74c0fc;--link-hover-color: #4dabf7;--border-color: rgba(255, 255, 255, 0.15)}}@media only screen and (max-width: 600px){.on-pc-screen{display:none !important}}@media only screen and (min-width: 600px){.on-mobile-screen{display:none !important}}@media only screen and (max-width: 1200px){.on-largest-screen{display:none !important}}@media only screen and (min-width: 1200px){.up-to-largest-screen{display:none !important}}@media only screen and (max-width: 1000px){.on-large-screen{display:none !important}}@media only screen and (min-width: 1000px){.up-to-large-screen{display:none !important}}@media only screen and (max-width: 800px){.on-small-screen{display:none !important}}@media only screen and (min-width: 800px){.up-to-small-screen{display:none !important}}*{box-sizing:border-box;z-index:1}html,body{width:100%;height:100%;min-width:500px}h1.page-title{text-align:left;font-size:2em;color:var(--title-text-color)}h1.page-title:first-letter{text-transform:capitalize}body{margin:0;font-family:var(--body-font);font-size:20px;line-height:1.5;color:var(--foreground-color);background-color:var(--background-color);-webkit-text-size-adjust:100%;-webkit-text-size-adjust--ms-text-size-adjust:100%}a{color:var(--link-color)}a:hover,a:focus{color:var(--link-hover-color)}a strong{color:inherit}a:not(:hover){text-decoration:none}.container{margin:0 auto;position:relative;max-width:1000px;padding:0 0.2em}.external-link-light:after{background-image:url(/external-link-dark.svg) !important}.external-link:after{content:"";background-image:url(/external-link-light.svg);background-size:10px 10px;display:inline-block;width:10px;height:10px;margin-left:5px}img{display:block;max-width:100%;margin-bottom:1rem;border-radius:.25rem}table{margin-bottom:1rem;width:100%;border:0 solid var(--border-color);border-collapse:collapse}td,th{padding:.25rem .5rem;border-color:inherit;border-style:solid;border-width:0;border-bottom-width:1px}th{text-align:left}thead th{border-bottom-color:currentColor}.header{display:flex;align-items:flex-end}.header-text{font-size:2em;color:var(--title-text-color);font-weight:bold;display:inline-block;padding:1em 0.5em 1em 0.5em}.header-image{background-image:url(/doublefourteen-logo-dark.svg);background-repeat:no-repeat;width:330px;height:180px;display:inline-block;margin:0 0.5em 0 0.5em}.work-in-progress-content{display:flex;justify-content:space-between}.work-in-progress-text{position:relative}.work-in-progress-sign{width:400px;height:386px;background-image:url(/work-in-progress.png);background-position:bottom right;background-repeat:no-repeat;background-size:400px 386px}.button,.button:hover{background-color:transparent;border:2px solid #737475;color:#333;padding:7px 12px;display:block;margin:10px 0;font-size:20px;font-weight:700;text-decoration:none !important}.button a{display:inline;text-decoration:none !important;color:#666}.button:hover{background-color:#7f7f7f}.footer{text-align:center;padding-top:1.5rem}@media (prefers-color-scheme: dark){.external-link:after{background-image:url(/external-link-dark.svg)}.header-image{background-image:url(/doublefourteen-logo-light.svg)}.button,.button:hover{color:inherit}.button a{color:#ccc}.button:hover{background-color:#383838}}@media only screen and (max-width: 800px){.work-in-progress-content{flex-direction:column}.work-in-progress-text{text-align:center}} |
@ -0,0 +1 @@ |
|||
{"Target":"sass/style.31c0df1af1c551ede13db9f99995a7ece9d2a3dfe4dc29bac27689d48a9e1392.css","MediaType":"text/css","Data":{"Integrity":"sha256-McDfGvHFUe3hPbn5mZWn7OnSo9/k3Cm6wnaJ1IqeE5I="}} |
@ -0,0 +1 @@ |
|||
*{box-sizing:border-box;z-index:2}html,body{width:100%;height:100%}h1.section-title{font-size:3em;color:#444;text-align:center}body{margin:0;font-family:var(--body-font);font-size:var(--body-font-size);line-height:var(--body-line-height);color:var(--body-color);background-color:var(--body-bg);-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}a{color:var(--link-color)}a:hover,a:focus{color:var(--link-hover-color)}a strong{color:inherit}img{display:block;max-width:100%;margin-bottom:var(--spacer);border-radius:var(--border-radius)}table{margin-bottom:1rem;width:100%;border:0 solid var(--border-color);border-collapse:collapse}td,th{padding:.25rem .5rem;border-color:inherit;border-style:solid;border-width:0;border-bottom-width:1px}th{text-align:left}thead th{border-bottom-color:currentColor}mark{padding:.15rem;background-color:var(--yellow-100);border-radius:.125rem}motto{text-align:center;padding-top:2em}footer{text-align:center;padding-top:2em} |
@ -0,0 +1 @@ |
|||
{"Target":"sass/base.css","MediaType":"text/css","Data":{}} |
@ -0,0 +1 @@ |
|||
.notfound-page{position:relative;display:flex}.notfound-content{position:relative;flex:1;margin-top:60px;min-height:500px}.notfound-404-chan-wrapper{position:relative;flex:1}.notfound-404-chan{position:absolute;bottom:0;margin-left:50%;margin-right:50%;margin-bottom:0;z-index:-11;pointer-events:none;suser-drag:none;user-select:none;-moz-user-select:none;-webkit-user-drag:none;-webkit-user-select:none;-ms-user-select:none} |
@ -0,0 +1 @@ |
|||
{"Target":"sass/notfound.css","MediaType":"text/css","Data":{}} |
@ -0,0 +1 @@ |
|||
#particles-bg,canvas{position:absolute;width:100%;height:100%;top:0;left:0;z-index:-10} |
@ -0,0 +1 @@ |
|||
{"Target":"sass/particles.css","MediaType":"text/css","Data":{}} |
@ -0,0 +1,4 @@ |
|||
:root{--gray-000: #f8f9fa;--gray-100: #f1f3f5;--gray-200: #e9ecef;--gray-300: #dee2e6;--gray-400: #ced4da;--gray-500: #adb5bd;--gray-600: #868e96;--gray-700: #495057;--gray-800: #343a40;--gray-900: #212529;--red: #fa5252;--pink: #e64980;--grape: #be4bdb;--purple: #7950f2;--indigo: #4c6ef5;--blue: #228be6;--cyan: #15aabf;--teal: #12b886;--green: #40c057;--yellow: #fab005;--orange: #fd7e14;--gray: #454545;--blue-300: #74c0fc;--blue-400: #4dabf7;--yellow-100: #fff3bf;--body-font: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, |
|||
"Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", |
|||
"Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--body-font-size: 20px;--body-line-height: 1.5;--body-color: var(--gray-700);--body-bg: #fff;--link-color: var(--blue);--link-hover-color: #1c7ed6;--heading-color: var(--gray-900);--border-color: var(--gray-300);--border-radius: 0.25rem;--code-font: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", |
|||
"Courier New", monospace;--code-color: var(--grape);--code-bg: var(--gray-000);--spacer: 1rem;--spacer-2: calc(var(--spacer) * 1.5);--spacer-3: calc(var(--spacer) * 3)}@media (prefers-color-scheme: dark){:root{--body-color: var(--gray-300);--body-bg: var(--gray-800);--heading-color: #fff;--link-color: var(--blue-300);--link-hover-color: var(--blue-400);--border-color: rgba(255, 255, 255, 0.15);--code-bg: var(--gray-900)}} |
@ -0,0 +1 @@ |
|||
{"Target":"sass/variables.css","MediaType":"text/css","Data":{}} |
File diff suppressed because it is too large
@ -0,0 +1,99 @@ |
|||
/* ----------------------------------------------- |
|||
* Rain background particle effect. |
|||
* |
|||
* @licstart The following is the entire license notice for the |
|||
* JavaScript code in this page. |
|||
* |
|||
* Copyright (C) 2020 Lorenzo Cogotti |
|||
* |
|||
* The JavaScript code in this page is free software: you can |
|||
* redistribute it and/or modify it under the terms of the GNU |
|||
* General Public License (GNU GPL) as published by the Free Software |
|||
* Foundation, either version 3 of the License, or (at your option) |
|||
* any later version. The code is distributed WITHOUT ANY WARRANTY; |
|||
* without even the implied warranty of MERCHANTABILITY or FITNESS |
|||
* FOR A PARTICULAR PURPOSE. See the GNU GPL for more details. |
|||
* |
|||
* As additional permission under GNU GPL version 3 section 7, you |
|||
* may distribute non-source (e.g., minimized or compacted) forms of |
|||
* that code without the copy of the GNU GPL normally required by |
|||
* section 4, provided you include this license notice and a URL |
|||
* through which recipients can access the Corresponding Source. |
|||
* |
|||
* @licend The above is the entire license notice |
|||
* for the JavaScript code in this page. |
|||
* ----------------------------------------------- */ |
|||
|
|||
particlesJS('particles-bg', |
|||
|
|||
{ |
|||
"particles": { |
|||
"number": { |
|||
"value": 80, |
|||
"density": { |
|||
"enable": true, |
|||
"value_area": 200 |
|||
} |
|||
}, |
|||
"color": { |
|||
"value": "#ffffff" |
|||
}, |
|||
"shape": { |
|||
"type": "circle" |
|||
}, |
|||
"opacity": { |
|||
"value": 0.3, |
|||
"random": true, |
|||
"anim": { |
|||
"enable": true, |
|||
"speed": 3000, |
|||
"opacity_min": 0.1, |
|||
"sync": false |
|||
} |
|||
}, |
|||
"size": { |
|||
"value": 2.8, |
|||
"value_min": 1, |
|||
"random": true |
|||
}, |
|||
"line_linked": { |
|||
"enable": false |
|||
}, |
|||
"move": { |
|||
"enable": true, |
|||
"speed": 550, // in pixel-per-second
|
|||
"direction": "bottom", |
|||
"random": false, |
|||
"straight": true, |
|||
"out_mode": "out", |
|||
"attract": { |
|||
"enable": true, |
|||
"rotateX": 600, |
|||
"rotateY": 1200 |
|||
} |
|||
}, |
|||
"trail": { |
|||
"enable": true, |
|||
"samples": 7, |
|||
"discont_threshold": 4 |
|||
} |
|||
}, |
|||
"interactivity": { |
|||
"detect_on": "canvas", |
|||
"events": { |
|||
"onhover": { |
|||
"enable": true, |
|||
"mode": "repulse" |
|||
}, |
|||
"resize": true |
|||
}, |
|||
"modes": { |
|||
"repulse": { |
|||
"distance": 150 |
|||
} |
|||
} |
|||
}, |
|||
"retina_detect": true |
|||
} |
|||
|
|||
); |
@ -0,0 +1,168 @@ |
|||
window.requestAnimFrame = (function(){ |
|||
return window.requestAnimationFrame || |
|||
window.webkitRequestAnimationFrame || |
|||
window.mozRequestAnimationFrame || |
|||
window.oRequestAnimationFrame || |
|||
window.msRequestAnimationFrame || |
|||
function(callback){ |
|||
window.setTimeout(callback, 1000 / 8); |
|||
}; |
|||
})(); |
|||
|
|||
(function() { |
|||
'use strict'; |
|||
|
|||
// Initial setup
|
|||
function $(x) {return document.getElementById(x);} |
|||
|
|||
let $container = $("banner-textarea"); |
|||
let $message = $("banner-msg"); |
|||
let $animate = $("banner-msg-animate"); |
|||
let $paragraph = null; |
|||
|
|||
const asciiEscMap = { |
|||
'&': '&', |
|||
'<': '<', |
|||
'>': '>', |
|||
'"': '"', |
|||
"'": ''', |
|||
'`': '`' |
|||
}; |
|||
|
|||
function needsAsciiEsc(str) { |
|||
for (let i of str) { |
|||
if (asciiEscMap[i]) { return true; } |
|||
} |
|||
return false; |
|||
} |
|||
function isAsciiString(str) { |
|||
for (let i of str) { |
|||
if (i.codePointAt(0) > 127) { return false; } |
|||
} |
|||
return true; |
|||
} |
|||
function maybeEscpDec(ch) { |
|||
const cp = ch.codePointAt(0); |
|||
return cp > 127 ? '&#' + cp + ';' : ch; |
|||
} |
|||
function escpAscii(str) { |
|||
return [...str].map(x => asciiEscMap[x] || x).join(""); |
|||
} |
|||
|
|||
function escp(text) { |
|||
if (needsAsciiEsc(text)) { |
|||
text = escpAscii(text); |
|||
} |
|||
return isAsciiString(text) ? text : [...text].map(maybeEscpDec).join(""); |
|||
} |
|||
|
|||
// Messages setup
|
|||
|
|||
/* MESSAGES be like: |
|||
* [ {"delay": 0, "text": "message 1"}, |
|||
* {"delay": 1200, "text": "message 2"}, |
|||
* {"delay": 2200, "text": "message 4"}, |
|||
* {"delay": 3600, "text": "message 5"}, |
|||
* {"delay": 5200, "text": "message 6"} ] |
|||
*/ |
|||
const MESSAGES = JSON.parse($animate.getAttribute('data-msg')); |
|||
|
|||
function scramble($element, text, options) { |
|||
const defaults = { |
|||
probability: 0.25, |
|||
glitches: "-%¥¶!\"❏_△§*¢ ¿", |
|||
blank: "", |
|||
duration: text.length * 80, |
|||
delay: 0.0 |
|||
}; |
|||
const settings = {...defaults, ...options}; |
|||
|
|||
function shuffle() {return (Math.random() < 0.5) ? 1 : -1;} |
|||
function wrap(text, classes) {return "<span class=\"" + classes + "\">" + text + "</span>";} |
|||
|
|||
const glitchCharacters = [...settings.glitches].map(escp); |
|||
const glitchLength = glitchCharacters.length; |
|||
const glitchProbability = settings.probability; |
|||
const glitches = glitchCharacters.map(x => wrap(x, "pop")); |
|||
|
|||
const ghostCharacters = [...$element.innerText].map(escp); |
|||
const ghostLength = ghostCharacters.length; |
|||
const ghosts = ghostCharacters.map(x => wrap(x, "ghost")); |
|||
const textCharacters = [...text].map(escp); |
|||
const textLength = textCharacters.length; |
|||
const order = Array.from(Array(textLength).keys()).sort(shuffle); |
|||
|
|||
let output = []; |
|||
for (let i = 0; i < textLength; ++i) { |
|||
const index = Math.floor(Math.random() * (glitchLength - 1)); |
|||
const glitchCharacter = glitches[index]; |
|||
const ghostCharacter = ghosts[i] || settings.blank; |
|||
const character = Math.random() < glitchProbability ? glitchCharacter : ghostCharacter; |
|||
output.push(character); |
|||
} |
|||
|
|||
// Animation
|
|||
const duration = settings.duration; |
|||
const ease = settings.ease; |
|||
|
|||
let start = null; |
|||
const TRESH = 1000 / 8; // 8FPS, more than enough
|
|||
|
|||
function easeInOutQuad(t) { |
|||
if (t < 0.5) |
|||
return 2 * t * t; |
|||
|
|||
return Math.min((4 - 2 * t) * t - 1, 1); |
|||
} |
|||
function refresh() { |
|||
const now = Date.now(); |
|||
if (!start) { start = now; } |
|||
|
|||
const elapsed = now - start; |
|||
if (elapsed < TRESH) { |
|||
window.requestAnimFrame(refresh); |
|||
return; |
|||
} |
|||
if (elapsed > duration) { |
|||
$element.innerHTML = text; |
|||
return; |
|||
} |
|||
|
|||
const interp = easeInOutQuad(elapsed / duration); |
|||
const progress = Math.floor(interp * (textLength - 1)); |
|||
for (let i = 0; i < progress; ++i) { |
|||
const index = order[i]; |
|||
output[index] = textCharacters[index]; |
|||
} |
|||
|
|||
$element.innerHTML = output.join(''); |
|||
window.requestAnimFrame(refresh); |
|||
} |
|||
|
|||
setTimeout(refresh, settings.delay); |
|||
} |
|||
|
|||
function animate() { |
|||
for (let i = 0; i < MESSAGES.length; ++i) { |
|||
let data = MESSAGES[i]; |
|||
let element = $paragraph.item(i); |
|||
|
|||
element.innerText = ''; |
|||
let options = { delay: data.delay }; |
|||
|
|||
scramble(element, data.text, options); |
|||
} |
|||
} |
|||
|
|||
function initialize() { |
|||
for (let _ in MESSAGES) { |
|||
let elem = document.createElement("p"); |
|||
elem.className = "banner-msg-line"; |
|||
$message.appendChild(elem); |
|||
} |
|||
$paragraph = $container.getElementsByTagName("p"); |
|||
animate(); |
|||
} |
|||
|
|||
initialize(); |
|||
}).call(this); |
@ -0,0 +1,279 @@ |
|||
@import "variables" |
|||
|
|||
// common variables for this page |
|||
$-h1: rgba(45,45,45,1) |
|||
$-outline: rgba(#fff, .4) |
|||
$-shadow: rgba($yellow, .5) |
|||
|
|||
$-term-color: #c3993c |
|||
$-term-height: 550px |
|||
$-term-height-mid: 400px |
|||
$-term-height-mobile: 280px |
|||
$-term-scanline-height: 5px |
|||
|
|||
.main |
|||
background-color: var(--background-color) |
|||
color: var(--foreground-color) |
|||
padding: 10px 15px |
|||
font-size: 0.9em |
|||
|
|||
.headline |
|||
max-width: $page-width |
|||
height: auto |
|||
font-size: $bigger-font-size |
|||
text-align: center |
|||
|
|||
.alt-background |
|||
background: var(--alt-background-color) |
|||
|
|||
.cards-list |
|||
max-width: $page-width |
|||
height: 100% |
|||
display: flex |
|||
flex-direction: column |
|||
justify-content: center |
|||
align-items: center |
|||
text-align: center |
|||
padding: $large-spacer $huge-spacer |
|||
|
|||
.nav-spacer |
|||
display: none // so the banner is against the navbar |
|||
|
|||
.banner-burnin |
|||
position: absolute |
|||
width: 100% |
|||
height: 100% |
|||
z-index: $back |
|||
box-shadow: inset 0px 0px 1px 1px rgba(64, 64, 64, .1) |
|||
background: radial-gradient(ellipse at center,darken($-term-color,30%) 0%,rgba(64,64,64,0) 50%) |
|||
transform-origin : 50% 50% |
|||
transform: perspective(20px) rotateX(.5deg) skewX(2deg) scale(1.03) |
|||
animation: burnin 1s linear infinite |
|||
opacity: .9 |
|||
|
|||
.banner-burnin::after |
|||
position: relative |
|||
background: radial-gradient(ellipse at center, rgba(0,0,0,0.5) 0%,rgba(64,64,64,0) 100%) |
|||
opacity: .1 |
|||
|
|||
.banner-terminal |
|||
position: relative |
|||
z-index: 90 |
|||
margin: 0 auto |
|||
width: 100% |
|||
height: $-term-height |
|||
background-color: #0a1922 |
|||
overflow: hidden |
|||
|
|||
.banner-terminal::before |
|||
position: absolute |
|||
width: 100% |
|||
height: 100% |
|||
top: 0 |
|||
left: 0 |
|||
content: "" |
|||
z-index: $front |
|||
background: linear-gradient(#777 50%, #0a1922 50%) |
|||
background-size: 100% 4px |
|||
background-repeat: repeat-y |
|||
opacity: .14 |
|||
box-shadow : inset 0px 0px 1px 1px rgba(0, 0, 0, .8) |
|||
animation: pulse 5s linear infinite |
|||
|
|||
.banner-terminal::after |
|||
position: absolute |
|||
content: "" |
|||
top: 0 |
|||
left: 0 |
|||
width: 100% |
|||
height: 76% |
|||
z-index: 99 |
|||
background: radial-gradient(ellipse at center, rgba(0,0,0,1) 0%,rgba(0,0,0,0.62) 45%,rgba(0,9,4,0.6) 47%,$-term-color 100%) |
|||
background-color: $-term-color |
|||
box-shadow : inset 0px 0px 4px 4px rgba(100, 100, 100, .5) |
|||
opacity : .1 |
|||
|
|||
.banner-scanline |
|||
--scanline-area: #{$-term-height} |
|||
|
|||
position: relative |
|||
z-index: 99 |
|||
width: 100% |
|||
height: 5px |
|||
background: linear-gradient(to bottom, rgba(255,0,0,0) 0%,rgba(255,250,250,1) 50%,rgba(255,255,255,0.98) 51%,rgba(255,0,0,0) 100%) |
|||
background-color: #fff |
|||
background-size: 100% 4px |
|||
opacity : .1 |
|||
animation: scanline 3.25s ease-in-out infinite |
|||
|
|||
.banner-textarea |
|||
position: relative |
|||
width: 1500px |
|||
height: 600px |
|||
margin: 0 auto |
|||
|
|||
.banner-prompt |
|||
position: relative |
|||
text-align: left |
|||
padding-left: 1em |
|||
font-family: Inconsolata, Courier, unicase |
|||
text-shadow: 0 0 8px rgba(lighten($-term-color, 50%), 0.3) |
|||
font-size: 4em |
|||
color: $-term-color |
|||
|
|||
.ghost, .pop |
|||
opacity: 0.27 |
|||
|
|||
.banner-msg-line |
|||
text-shadow: 0 0 8px rgba(lighten($-term-color, 30%), 0.3) |
|||
font-family: Inconsolata, Courier, monospace |
|||
font-smoothing: antialiased |
|||
padding-left: 6em |
|||
font-size: 3em |
|||
white-space: pre |
|||
color: $-term-color |
|||
overflow: hidden |
|||
|
|||
#banner-msg-animate |
|||
text-shadow: 0 0 8px rgba(lighten($-term-color, 50%), 0.1) |
|||
color: darken(desaturate($-term-color, 10%), 20%) |
|||
bottom: 0 |
|||
|
|||
.flicker |
|||
margin: 0 |
|||
color: $-h1 |
|||
letter-spacing: -.05rem |
|||
|
|||
.flicker::before |
|||
content: attr(letter) |
|||
position: absolute |
|||
overflow: hidden |
|||
color: $yellow |
|||
z-index: $above |
|||
text-shadow: none |
|||
animation: flicker 3s linear infinite |
|||
|
|||
.glitch |
|||
margin: 0 |
|||
letter-spacing: -0.05rem |
|||
display: inline-block |
|||
animation: glitch 1s linear infinite |
|||
|
|||
.glitch::before, .glitch::after |
|||
content: attr(text) |
|||
position: absolute |
|||
overflow: hidden |
|||
|
|||
.glitch::before |
|||
left: 0; |
|||
animation: glitch-top 1s linear infinite |
|||
clip-path: polygon(0 0, 100% 0, 100% 33%, 0 33%) |
|||
|
|||
.glitch::after |
|||
left: 0 |
|||
animation: glitch-bottom 1.5s linear infinite |
|||
clip-path: polygon(0 67%, 100% 67%, 100% 100%, 0 100%) |
|||
|
|||
@keyframes burnin |
|||
0% |
|||
transform: scale(1, 1.002) |
|||
50% |
|||
transform: scale(1, 1.0001) |
|||
100% |
|||
transform: scale(1.001, 1) |
|||
|
|||
@keyframes scanline |
|||
to |
|||
transform: translateY(var(--scanline-area)) translateY(-$-term-scanline-height) |
|||
|
|||
@keyframes pulse |
|||
0% |
|||
transform: scale(1.001) |
|||
opacity: .14 |
|||
8% |
|||
transform: scale(1.000) |
|||
opacity: .13 |
|||
15% |
|||
transform: scale(1.004) |
|||
opacity: .14 |
|||
30% |
|||
transform: scale(1.002) |
|||
opacity: .11 |
|||
100% |
|||
transform: scale(1.000) |
|||
opacity: .14 |
|||
|
|||
@keyframes flicker |
|||
0%, 19.999%, 22%, 62.999%, 64%, 64.999%, 70%, 100% |
|||
opacity: .99 |
|||
text-shadow: -1px -1px 0 $-outline, 1px -1px 0 $-outline, -1px 1px 0 $-outline, 1px 1px 0 $-outline, 0 -2px 8px, 0 0 2px, 0 0 5px #ff7e00, 0 0 15px #ff4444, 0 0 2px #ff7e00, 0 2px 3px #000 |
|||
|
|||
20%, 21.999%, 63%, 63.999%, 65%, 69.999% |
|||
opacity: 0.4 |
|||
text-shadow: none |
|||
|
|||
@keyframes glitch |
|||
2%, 64% |
|||
transform: translate(2px,0) skew(0deg) |
|||
4%, 60% |
|||
transform: translate(-2px,0) skew(0deg) |
|||
62% |
|||
transform: translate(0,0) skew(5deg) |
|||
|
|||
@keyframes glitch-top |
|||
2%, 64% |
|||
transform: translate(2px,-2px) |
|||
4%, 60% |
|||
transform: translate(-2px,2px) |
|||
62% |
|||
transform: translate(13px,-1px) skew(-13deg) |
|||
|
|||
@keyframes glitch-bottom |
|||
2%, 64% |
|||
transform: translate(-2px,0) |
|||
4%, 60% |
|||
transform: translate(-2px,0) |
|||
62% |
|||
transform: translate(-22px,5px) skew(21deg) |
|||
|
|||
@keyframes typing |
|||
to |
|||
width: 100% |
|||
|
|||
@keyframes blinking |
|||
from, to |
|||
border-color: transparent |
|||
50% |
|||
border-color: orange |
|||
|
|||
.motto |
|||
text-align: left |
|||
padding-top: $large-spacer |
|||
|
|||
@media only screen and (max-width:1200px) |
|||
.banner-terminal |
|||
height: $-term-height-mid |
|||
.banner-scanline |
|||
--scanline-area: #{$-term-height-mid} |
|||
.banner-prompt |
|||
font-size: 3em |
|||
.banner-msg-line |
|||
font-size: 2em |
|||
|
|||
@media only screen and (max-width:1000px) |
|||
html, body |
|||
overflow-x: hidden |
|||
|
|||
body |
|||
-webkit-text-size-adjust: none |
|||
|
|||
@media only screen and (max-width:800px) |
|||
.banner-terminal |
|||
height: $-term-height-mobile |
|||
.banner-scanline |
|||
--scanline-area: #{$-term-height-mobile} |
|||
.banner-prompt |
|||
font-size: 2em |
|||
.banner-msg-line |
|||
font-size: 1.5em |
|||
padding-left: 3em |
@ -0,0 +1,87 @@ |
|||
@import "variables" |
|||
|
|||
#mobile-navbar |
|||
display: none |
|||
overflow: hidden |
|||
color: white !important |
|||
font-weight: bold |
|||
|
|||
#mobile-subnav |
|||
background-color: #0a1922 |
|||
|
|||
#mobile-subnav |
|||
display: none |
|||
|
|||
#menu |
|||
padding: 5px 0 |
|||
color: white |
|||
padding-right: 5px |
|||
padding-left: 5px |
|||
font-size: 1.1rem !important |
|||
|
|||
#navbar |
|||
display: block |
|||
|
|||
.nav |
|||
background-color: #0a1922 |
|||
padding: 5px 0 |
|||
border-top: 4px solid $teal |
|||
|
|||
.nav-spacer |
|||
margin-bottom: $small-spacer |
|||
|
|||
.df-community-link:before |
|||
content: "" |
|||
background-image: url(/heart.svg) !important |
|||
background-size: 12px 16px |
|||
width: 12px |
|||
height: 16px |
|||
margin-left: 5px |
|||
margin-right: 5px |
|||
vertical-align: middle |
|||
display: inline-block |
|||
|
|||
#menu .navbar-item, .nav .navbar-item, .nav .navbar-item:visited |
|||
color: white |
|||
padding-right: 5px |
|||
padding-left: 5px |
|||
|
|||
@media only screen and (max-width:340px) |
|||
#mobile-navbar |
|||
font-size: 1.1rem !important |
|||
#hamburger |
|||
padding-left: 0.5rem !important |
|||
|
|||
@media only screen and (max-width: 1000px) |
|||
#menu .navbar-item |
|||
display: block |
|||
|
|||
#mobile-subnav |
|||
display: block |
|||
|
|||
#mobile-toggle + #menu |
|||
display: none |
|||
|
|||
#mobile-toggle:checked + #menu |
|||
display: block |
|||
|
|||
#mobile-navbar, #menu |
|||
display: block |
|||
font-size: 1.2rem |
|||
line-height: 2.2rem |
|||
|
|||
#mobile-navbar |
|||
margin-top: 0.4rem |
|||
|
|||
#navbar |
|||
display: none |
|||
|
|||
#mobile-toggle |
|||
display: none |
|||
#hamburger |
|||
float: right; |
|||
padding: |
|||
left: 1.5rem; |
|||
right: 0.5rem; |
|||
|
|||
line-height: 0; |
@ -0,0 +1,41 @@ |
|||
@import "variables" |
|||
|
|||
.notfound-page |
|||
position: relative |
|||
display: flex |
|||
flex-wrap: wrap |
|||
width: $page-width |
|||
margin: 0 auto |
|||
gap: $large-spacer |
|||
|
|||
.notfound-content |
|||
position: relative |
|||
padding-top: $large-spacer |
|||
max-width: $card-width |
|||
|
|||
.notes |
|||
padding-top: $spacer |
|||
|
|||
.notfound-404-chan |
|||
position: relative |
|||
width: $card-width |
|||
height: $card-height |
|||
background: |
|||
image: url("/404-chan_sm.png") |
|||
position: bottom right $huge-spacer |
|||
repeat: no-repeat |
|||
size: 144px 256px |
|||
|
|||
#particles-bg |
|||
position: absolute |
|||
width: 100% |
|||
height: 100% |
|||
top: 0 |
|||
left: 0 |
|||
z-index: $foremost |
|||
|
|||
@media (max-width: 800px) |
|||
.notfound-content |
|||
text-align: center |
|||
.notfound-page |
|||
flex-direction: column |
@ -0,0 +1,192 @@ |
|||
@import "variables" |
|||
|
|||
// Some convenience class to manage resolution specific elements |
|||
@media only screen and (max-width:600px) |
|||
.on-pc-screen |
|||
display: none !important |
|||
@media only screen and (min-width:600px) |
|||
.on-mobile-screen |
|||
display: none !important |
|||
|
|||
@media only screen and (max-width:1200px) |
|||
.on-largest-screen |
|||
display: none !important |
|||
@media only screen and (min-width:1200px) |
|||
.up-to-largest-screen |
|||
display: none !important |
|||
|
|||
@media only screen and (max-width:1000px) |
|||
.on-large-screen |
|||
display: none !important |
|||
@media only screen and (min-width:1000px) |
|||
.up-to-large-screen |
|||
display: none !important |
|||
|
|||
@media only screen and (max-width:800px) |
|||
.on-small-screen |
|||
display: none !important |
|||
@media only screen and (min-width:800px) |
|||
.up-to-small-screen |
|||
display: none !important |
|||
|
|||
* |
|||
box-sizing: border-box |
|||
z-index: $foreground |
|||
|
|||
html, body |
|||
width: 100% |
|||
height: 100% |
|||
min-width: $min-page-width |
|||
|
|||
h1.page-title |
|||
text-align: left |
|||
font-size: $large-font-size |
|||
color: var(--title-text-color) |
|||
h1.page-title:first-letter |
|||
text-transform: capitalize |
|||
|
|||
body |
|||
margin: 0 |
|||
font-family: var(--body-font) |
|||
font-size: $body-font-size |
|||
line-height: $body-line-height |
|||
color: var(--foreground-color) |
|||
background-color: var(--background-color) |
|||
-webkit-text-size-adjust: 100% |
|||
-ms-text-size-adjust: 100% |
|||
|
|||
a |
|||
color: var(--link-color) |
|||
|
|||
// `:focus` is linked to `:hover` for basic accessibility |
|||
&:hover, &:focus |
|||
color: var(--link-hover-color) |
|||
|
|||
strong |
|||
color: inherit |
|||
|
|||
a:not(:hover) |
|||
text-decoration: none |
|||
|
|||
.container |
|||
margin: 0 auto |
|||
position: relative |
|||
max-width: $page-width |
|||
padding: 0 0.2em |
|||
|
|||
.external-link-light:after |
|||
background-image: url(/external-link-dark.svg) !important |
|||
.external-link:after |
|||
content: "" |
|||
background-image: url(/external-link-light.svg) |
|||
background-size: 10px 10px |
|||
display: inline-block |
|||
width: 10px |
|||
height: 10px |
|||
margin-left: 5px |
|||
|
|||
img |
|||
display: block |
|||
max-width: 100% |
|||
margin-bottom: $spacer |
|||
border-radius: $border-radius |
|||
|
|||
table |
|||
margin-bottom: $spacer |
|||
width: 100% |
|||
border: 0 solid var(--border-color) |
|||
border-collapse: collapse |
|||
|
|||
td, th |
|||
padding: .25rem .5rem |
|||
border: |
|||
color: inherit |
|||
style: solid |
|||
width: 0 |
|||
bottom-width: 1px |
|||
|
|||
th |
|||
text-align: left |
|||
|
|||
thead th |
|||
border-bottom-color: currentColor |
|||
|
|||
.header |
|||
display: flex |
|||
align-items: flex-end |
|||
|
|||
.header-text |
|||
font-size: $large-font-size |
|||
color: var(--title-text-color) |
|||
font-weight: bold |
|||
display: inline-block |
|||
padding: 1em 0.5em 1em 0.5em |
|||
|
|||
.header-image |
|||
background: |
|||
image: url(/doublefourteen-logo-dark.svg) |
|||
repeat: no-repeat |
|||
|
|||
width: 330px |
|||
height: 180px |
|||
display: inline-block |
|||
margin: 0 0.5em 0 0.5em |
|||
|
|||
.work-in-progress-content |
|||
display: flex |
|||
justify-content: space-between |
|||
|
|||
.work-in-progress-text |
|||
position: relative |
|||
|
|||
.work-in-progress-sign |
|||
width: 400px |
|||
height: 386px |
|||
background: |
|||
image: url(/work-in-progress.png) |
|||
position: bottom right |
|||
repeat: no-repeat |
|||
size: 400px 386px |
|||
|
|||
.button, .button:hover |
|||
background-color: transparent |
|||
border: 2px solid #737475 |
|||
color: #333 |
|||
padding: 7px 12px |
|||
display: block |
|||
margin: 10px 0 |
|||
font-size: $body-font-size |
|||
font-weight: 700 |
|||
text-decoration: none !important |
|||
.button a |
|||
display: inline |
|||
text-decoration: none !important |
|||
color: #666 |
|||
.button:hover |
|||
background-color: #7f7f7f |
|||
|
|||
|
|||
.footer |
|||
text-align: center |
|||
padding-top: $large-spacer |
|||
|
|||
@media (prefers-color-scheme:dark) |
|||
.external-link:after |
|||
background-image: url(/external-link-dark.svg) |
|||
.header-image |
|||
background-image: url(/doublefourteen-logo-light.svg) |
|||
|
|||
// FIXME |
|||
.button, .button:hover |
|||
color: inherit |
|||
.button a |
|||
color: #ccc |
|||
.button:hover |
|||
background-color: #383838 |
|||
|
|||
|
|||
@media only screen and (max-width:800px) |
|||
.work-in-progress-content |
|||
flex-direction: column |
|||
.work-in-progress-text |
|||
text-align: center |
@ -0,0 +1,118 @@ |
|||
// Standard page width |
|||
$page-width: 1000px |
|||
// Minimum supported page width (forced on html, body) |
|||
$min-page-width: 500px |
|||
|
|||
// Small card objects, wrap text or small images on lists |
|||
$card-width: 400px |
|||
$card-height: 500px |
|||
|
|||
// Consistent spacing for elements |
|||
$smallest-spacer: 10px |
|||
$small-spacer: 30px |
|||
$spacer: 1rem |
|||
$large-spacer: $spacer * 1.5 |
|||
$huge-spacer: $spacer * 3 |
|||
|
|||
// Fonts |
|||
$body-line-height: 1.5 |
|||
|
|||
$huge-font-size: 3em |
|||
$large-font-size: 2em |
|||
$bigger-font-size: 1em |
|||
$body-font-size: 20px |
|||
|
|||
// Consistent border radius |
|||
$border-radius: 0.25rem |
|||
|
|||
// Z indexes for consistent ordering across site |
|||
$foremost: 100 |
|||
$above: 30 |
|||
$front: 20 |
|||
$foreground: 1 |
|||
$background: 0 |
|||
$back: -1 |
|||
$far: -20 |
|||
$farthest: -100 |
|||
|
|||
// Color palette |
|||
$gray-000: #f8f9fa |
|||
$gray-100: #f1f3f5 |
|||
$gray-200: #e9ecef |
|||
$gray-300: #dee2e6 |
|||
$gray-400: #ced4da |
|||
$gray-500: #adb5bd |
|||
$gray-600: #868e96 |
|||
$gray-700: #495057 |
|||
$gray-800: #343a40 |
|||
$gray-900: #212529 |
|||
|
|||
$red: #fa5252 |
|||
$pink: #e64980 |
|||
$grape: #be4bdb |
|||
$purple: #7950f2 |
|||
$indigo: #4c6ef5 |
|||
$blue: #228be6 |
|||
$cyan: #15aabf |
|||
$teal: #12b886 |
|||
$green: #40c057 |
|||
$yellow: #fab005 |
|||
$orange: #fd7e14 |
|||
$gray: #454545 |
|||
|
|||
$blue-300: #74c0fc |
|||
$blue-400: #4dabf7 |
|||
$yellow-100: #fff3bf |
|||
|
|||
// Color Theme |
|||
|
|||
$background-color: #efefef |
|||
$background-color-dark: #292929 |
|||
$alt-background-color: #dfdfdf |
|||
$alt-background-color-dark: #0a1922 |
|||
$foreground-color: $gray-700 |
|||
$foreground-color-dark: $gray-300 |
|||
$surface-color: $cyan |
|||
$surface-color-dark: $cyan |
|||
$accent-color: $cyan |
|||
$accent-color-dark: $cyan |
|||
|
|||
$text-color: #fff |
|||
$text-color-dark: #000 |
|||
$title-text-color: #444 |
|||
$title-text-color-dark: #ddd |
|||
|
|||
\:root |
|||
--background-color: #{$background-color} |
|||
--alt-background-color: #{$alt-background-color} |
|||
--foreground-color: #{$foreground-color} |
|||
|
|||
|
|||
--body-font: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji" |
|||
|
|||
--text-color: #{$text-color} |
|||
--title-text-color: #{$title-text-color} |
|||
|
|||
--link-color: #{$blue} |
|||
--link-hover-color: #1c7ed6 |
|||
|
|||
--heading-color: #{$gray-900} |
|||
--border-color: #{$gray-300} |
|||
|
|||
// --code-font: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace |
|||
|
|||
@media (prefers-color-scheme:dark) |
|||
\:root |
|||
--background-color: #{$background-color-dark} |
|||
--alt-background-color: #{$alt-background-color-dark} |
|||
--foreground-color: #{$foreground-color-dark} |
|||
|
|||
--text-color: #{$text-color-dark} |
|||
--title-text-color: #{$title-text-color-dark} |
|||
|
|||
--heading-color: #fff |
|||
|
|||
--link-color: #{$blue-300} |
|||
--link-hover-color: #{$blue-400} |
|||
|
|||
--border-color: rgba(255, 255, 255, 0.15) |
@ -0,0 +1,8 @@ |
|||
[back-to-home] |
|||
other = "← Back to <b>Home</b> page" |
|||