Browse Source

[*] Initial commit

master
Lorenzo Cogotti 10 months ago
commit
64781e5420
  1. 3
      README.md
  2. 6
      archetypes/default.md
  3. 14
      config.toml
  4. 3
      content/_404.md
  5. 48
      content/_index.md
  6. 6
      content/articles/_index.en.md
  7. 6
      content/blog/_index.md
  8. 56
      content/blog/ubgpsuite-first-release/index.md
  9. 110
      content/doublefourteen/index.en.md
  10. 6
      layouts/shortcodes/div.html
  11. 3
      layouts/shortcodes/flexrow.html
  12. 41
      resources/_gen/assets/css/css/circuit.css_48b060fe05b0a273d182ef83c0605941.content
  13. 1
      resources/_gen/assets/css/css/circuit.css_48b060fe05b0a273d182ef83c0605941.json
  14. 1
      resources/_gen/assets/css/css/home.css_48b060fe05b0a273d182ef83c0605941.content
  15. 1
      resources/_gen/assets/css/css/home.css_48b060fe05b0a273d182ef83c0605941.json
  16. 1
      resources/_gen/assets/css/css/navigation.css_48b060fe05b0a273d182ef83c0605941.content
  17. 1
      resources/_gen/assets/css/css/navigation.css_48b060fe05b0a273d182ef83c0605941.json
  18. 1
      resources/_gen/assets/css/css/notfound.css_48b060fe05b0a273d182ef83c0605941.content
  19. 1
      resources/_gen/assets/css/css/notfound.css_48b060fe05b0a273d182ef83c0605941.json
  20. 1
      resources/_gen/assets/css/css/particles.css_48b060fe05b0a273d182ef83c0605941.content
  21. 1
      resources/_gen/assets/css/css/particles.css_48b060fe05b0a273d182ef83c0605941.json
  22. 1
      resources/_gen/assets/css/css/style.css_48b060fe05b0a273d182ef83c0605941.content
  23. 1
      resources/_gen/assets/css/css/style.css_48b060fe05b0a273d182ef83c0605941.json
  24. 4
      resources/_gen/assets/css/css/variables.css_48b060fe05b0a273d182ef83c0605941.content
  25. 1
      resources/_gen/assets/css/css/variables.css_48b060fe05b0a273d182ef83c0605941.json
  26. 1
      resources/_gen/assets/sass/css/home.sass_2ec2638cd8ce1b509c54aa4f79d22733.content
  27. 1
      resources/_gen/assets/sass/css/home.sass_2ec2638cd8ce1b509c54aa4f79d22733.json
  28. 1
      resources/_gen/assets/sass/css/home.sass_48b060fe05b0a273d182ef83c0605941.content
  29. 1
      resources/_gen/assets/sass/css/home.sass_48b060fe05b0a273d182ef83c0605941.json
  30. 1
      resources/_gen/assets/sass/css/navigation.sass_2ec2638cd8ce1b509c54aa4f79d22733.content
  31. 1
      resources/_gen/assets/sass/css/navigation.sass_2ec2638cd8ce1b509c54aa4f79d22733.json
  32. 1
      resources/_gen/assets/sass/css/notfound.sass_2ec2638cd8ce1b509c54aa4f79d22733.content
  33. 1
      resources/_gen/assets/sass/css/notfound.sass_2ec2638cd8ce1b509c54aa4f79d22733.json
  34. 1
      resources/_gen/assets/sass/css/notfound.sass_48b060fe05b0a273d182ef83c0605941.content
  35. 1
      resources/_gen/assets/sass/css/notfound.sass_48b060fe05b0a273d182ef83c0605941.json
  36. 1
      resources/_gen/assets/sass/css/style.sass_2ec2638cd8ce1b509c54aa4f79d22733.content
  37. 1
      resources/_gen/assets/sass/css/style.sass_2ec2638cd8ce1b509c54aa4f79d22733.json
  38. 1
      resources/_gen/assets/sass/sass/home.sass_2ec2638cd8ce1b509c54aa4f79d22733.content
  39. 1
      resources/_gen/assets/sass/sass/home.sass_2ec2638cd8ce1b509c54aa4f79d22733.json
  40. 1
      resources/_gen/assets/sass/sass/navigation.sass_2ec2638cd8ce1b509c54aa4f79d22733.content
  41. 1
      resources/_gen/assets/sass/sass/navigation.sass_2ec2638cd8ce1b509c54aa4f79d22733.json
  42. 1
      resources/_gen/assets/sass/sass/notfound.sass_2ec2638cd8ce1b509c54aa4f79d22733.content
  43. 1
      resources/_gen/assets/sass/sass/notfound.sass_2ec2638cd8ce1b509c54aa4f79d22733.json
  44. 1
      resources/_gen/assets/sass/sass/style.sass_2ec2638cd8ce1b509c54aa4f79d22733.content
  45. 1
      resources/_gen/assets/sass/sass/style.sass_2ec2638cd8ce1b509c54aa4f79d22733.json
  46. 1
      resources/_gen/assets/scss/sass/base.scss_c25f88f67e8e33f20619c76cbf49f33c.content
  47. 1
      resources/_gen/assets/scss/sass/base.scss_c25f88f67e8e33f20619c76cbf49f33c.json
  48. 1
      resources/_gen/assets/scss/sass/notfound.scss_c25f88f67e8e33f20619c76cbf49f33c.content
  49. 1
      resources/_gen/assets/scss/sass/notfound.scss_c25f88f67e8e33f20619c76cbf49f33c.json
  50. 1
      resources/_gen/assets/scss/sass/particles.scss_c25f88f67e8e33f20619c76cbf49f33c.content
  51. 1
      resources/_gen/assets/scss/sass/particles.scss_c25f88f67e8e33f20619c76cbf49f33c.json
  52. 4
      resources/_gen/assets/scss/sass/variables.scss_c25f88f67e8e33f20619c76cbf49f33c.content
  53. 1
      resources/_gen/assets/scss/sass/variables.scss_c25f88f67e8e33f20619c76cbf49f33c.json
  54. 1603
      themes/doublefourteen/assets/js/lib/particles.js
  55. 99
      themes/doublefourteen/assets/js/rain.js
  56. 168
      themes/doublefourteen/assets/js/transmission.js
  57. 279
      themes/doublefourteen/assets/sass/home.sass
  58. 87
      themes/doublefourteen/assets/sass/navigation.sass
  59. 41
      themes/doublefourteen/assets/sass/notfound.sass
  60. 192
      themes/doublefourteen/assets/sass/style.sass
  61. 118
      themes/doublefourteen/assets/sass/variables.sass
  62. 8
      themes/doublefourteen/i18n/en.toml
  63. 8
      themes/doublefourteen/i18n/it.toml
  64. 37
      themes/doublefourteen/layouts/404.html
  65. 1
      themes/doublefourteen/layouts/_default/_markup/render-link.html
  66. 38
      themes/doublefourteen/layouts/_default/baseof.html
  67. 20
      themes/doublefourteen/layouts/_default/list.html
  68. 23
      themes/doublefourteen/layouts/_default/rss-list.html
  69. 13
      themes/doublefourteen/layouts/_default/single.html
  70. 39
      themes/doublefourteen/layouts/index.html
  71. 2
      themes/doublefourteen/layouts/partials/favicon.html
  72. 12
      themes/doublefourteen/layouts/partials/footer.html
  73. 49
      themes/doublefourteen/layouts/partials/navigation.html
  74. 12
      themes/doublefourteen/layouts/partials/parent-link.html
  75. 10
      themes/doublefourteen/layouts/partials/work-in-progress.html
  76. 3
      themes/doublefourteen/shortcodes/box.html
  77. 17
      themes/doublefourteen/shortcodes/slogan.html
  78. 19
      themes/doublefourteen/shortcodes/sponsor-logos.html
  79. 6
      themes/doublefourteen/shortcodes/sponsor-title-cta.html
  80. BIN
      themes/doublefourteen/static/404-chan.png
  81. BIN
      themes/doublefourteen/static/404-chan_sm.png
  82. 141
      themes/doublefourteen/static/doublefourteen-logo-dark.svg
  83. 143
      themes/doublefourteen/static/doublefourteen-logo-light.svg
  84. 13
      themes/doublefourteen/static/external-link-dark.svg
  85. 13
      themes/doublefourteen/static/external-link-light.svg
  86. BIN
      themes/doublefourteen/static/favicon.ico
  87. 127
      themes/doublefourteen/static/favicon.svg
  88. 1
      themes/doublefourteen/static/heart.svg
  89. 1
      themes/doublefourteen/static/translate.svg
  90. BIN
      themes/doublefourteen/static/work-in-progress.png
  91. 22
      themes/doublefourteen/theme.toml

3
README.md

@ -0,0 +1,3 @@
# DoubleFourteen - The DoubleFourteen Code Forge
Website sources for [DoubleFourteen - The DoubleFourteen Code Force](https://doublefourteen.io).

6
archetypes/default.md

@ -0,0 +1,6 @@
---
title: "{{ replace .Name "-" " " | title }}"
date: {{ .Date }}
draft: true
---

14
config.toml

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

3
content/_404.md

@ -0,0 +1,3 @@
---
title: "404: Page not found"
---

48
content/_index.md

@ -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 %}}

6
content/articles/_index.en.md

@ -0,0 +1,6 @@
---
title: Articles
menu_title: Articles
mobile_menu_title: Articles
layout: rss-list
---

6
content/blog/_index.md

@ -0,0 +1,6 @@
---
title: Blog
menu_title: Blog
mobile_menu_title: Blog
layout: rss-list
---

56
content/blog/ubgpsuite-first-release/index.md

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

110
content/doublefourteen/index.en.md

@ -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.

6
layouts/shortcodes/div.html

@ -0,0 +1,6 @@
<div class="{{ .Get "class" }}" style="{{ .Get "style" | safeCSS }}">
{{ with .Get "title" }}
<h1 class="section-title">{{ . }}</h1>
{{ end }}
{{ .Inner }}
</div>

3
layouts/shortcodes/flexrow.html

@ -0,0 +1,3 @@
<div class="{{.Get "class"}}" style="display: flex; flex-direction: row; flex-wrap: wrap;{{.Get "style" | safeCSS }}">
{{- .Inner -}}
</div>

41
resources/_gen/assets/css/css/circuit.css_48b060fe05b0a273d182ef83c0605941.content

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

1
resources/_gen/assets/css/css/circuit.css_48b060fe05b0a273d182ef83c0605941.json

@ -0,0 +1 @@
{"Target":"css/circuit.min.d053cd5b7d1b8276398edb651c03a784e706faf0478345bec21786b70d6f6ece.css","MediaType":"text/css","Data":{"Integrity":"sha256-0FPNW30bgnY5jttlHAOnhOcG+vBHg0W+wheGtw1vbs4="}}

1
resources/_gen/assets/css/css/home.css_48b060fe05b0a273d182ef83c0605941.content

@ -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}}

1
resources/_gen/assets/css/css/home.css_48b060fe05b0a273d182ef83c0605941.json

@ -0,0 +1 @@
{"Target":"css/home.min.4c9feafeab8017f7a8a23fac16d131d3b087fbed2ec892551b95a3dd7e8e47d5.css","MediaType":"text/css","Data":{"Integrity":"sha256-TJ/q/quAF/eooj+sFtEx07CH++0uyJJVG5Wj3X6OR9U="}}

1
resources/_gen/assets/css/css/navigation.css_48b060fe05b0a273d182ef83c0605941.content

@ -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}}

1
resources/_gen/assets/css/css/navigation.css_48b060fe05b0a273d182ef83c0605941.json

@ -0,0 +1 @@
{"Target":"css/navigation.min.acad5d873b80dbbc3bfed76f876917d6fb8437b66d2018091c8bd51afdab0eb2.css","MediaType":"text/css","Data":{"Integrity":"sha256-rK1dhzuA27w7/tdvh2kX1vuEN7ZtIBgJHIvVGv2rDrI="}}

1
resources/_gen/assets/css/css/notfound.css_48b060fe05b0a273d182ef83c0605941.content

@ -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}

1
resources/_gen/assets/css/css/notfound.css_48b060fe05b0a273d182ef83c0605941.json

@ -0,0 +1 @@
{"Target":"css/notfound.min.8fd670f1f7b146151ae2bd3cdbd2ab27b23a5d3b5a7b23093c4e28ee8d0db07f.css","MediaType":"text/css","Data":{"Integrity":"sha256-j9Zw8fexRhUa4r0829KrJ7I6XTtaeyMJPE4o7o0NsH8="}}

1
resources/_gen/assets/css/css/particles.css_48b060fe05b0a273d182ef83c0605941.content

@ -0,0 +1 @@
#particles-bg,canvas{position:absolute;width:100%;height:100%;top:0;left:0;z-index:-10}

1
resources/_gen/assets/css/css/particles.css_48b060fe05b0a273d182ef83c0605941.json

@ -0,0 +1 @@
{"Target":"css/particles.min.1267e7250414cb0155cba79bd9ff4780f779558db521b0059252823cd281dca9.css","MediaType":"text/css","Data":{"Integrity":"sha256-EmfnJQQUywFVy6eb2f9HgPd5VY21IbAFklKCPNKB3Kk="}}

1
resources/_gen/assets/css/css/style.css_48b060fe05b0a273d182ef83c0605941.content

@ -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)}}

1
resources/_gen/assets/css/css/style.css_48b060fe05b0a273d182ef83c0605941.json

@ -0,0 +1 @@
{"Target":"css/style.min.d944d9757086436e8d5b6bcad72f606958e62373e1d7ad0f79c4a5214e5e7ad9.css","MediaType":"text/css","Data":{"Integrity":"sha256-2UTZdXCGQ26NW2vK1y9gaVjmI3Ph160PecSlIU5eetk="}}

4
resources/_gen/assets/css/css/variables.css_48b060fe05b0a273d182ef83c0605941.content

@ -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)}}

1
resources/_gen/assets/css/css/variables.css_48b060fe05b0a273d182ef83c0605941.json

@ -0,0 +1 @@
{"Target":"css/variables.min.64ab9ff349f04ea7ee51c5148a9834f9570ec7ceb652edba40d7abd5b2dc566b.css","MediaType":"text/css","Data":{"Integrity":"sha256-ZKuf80nwTqfuUcUUipg0+VcOx862Uu26QNer1bLcVms="}}

1
resources/_gen/assets/sass/css/home.sass_2ec2638cd8ce1b509c54aa4f79d22733.content

File diff suppressed because one or more lines are too long

1
resources/_gen/assets/sass/css/home.sass_2ec2638cd8ce1b509c54aa4f79d22733.json

@ -0,0 +1 @@
{"Target":"css/home.2c1adf72cf123c3b68c525dcadc082f1589a474f975956f30e8e051d71b43b36.css","MediaType":"text/css","Data":{"Integrity":"sha256-LBrfcs8SPDtoxSXcrcCC8ViaR0+XWVbzDo4FHXG0OzY="}}

1
resources/_gen/assets/sass/css/home.sass_48b060fe05b0a273d182ef83c0605941.content

File diff suppressed because one or more lines are too long

1
resources/_gen/assets/sass/css/home.sass_48b060fe05b0a273d182ef83c0605941.json

@ -0,0 +1 @@
{"Target":"css/home.min.fe9260a06c887cdf81a61aeac369079aa7e7a697acd29334e939ec6466473bdb.css","MediaType":"text/css","Data":{"Integrity":"sha256-/pJgoGyIfN+Bphrqw2kHmqfnppes0pM06TnsZGZHO9s="}}

1
resources/_gen/assets/sass/css/navigation.sass_2ec2638cd8ce1b509c54aa4f79d22733.content

@ -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}}

1
resources/_gen/assets/sass/css/navigation.sass_2ec2638cd8ce1b509c54aa4f79d22733.json

@ -0,0 +1 @@
{"Target":"css/navigation.1a3e87cd446d5f1b61dd79f4152b3bb148649c8332e99134da0a231adc630f98.css","MediaType":"text/css","Data":{"Integrity":"sha256-Gj6HzURtXxth3Xn0FSs7sUhknIMy6ZE02gojGtxjD5g="}}

1
resources/_gen/assets/sass/css/notfound.sass_2ec2638cd8ce1b509c54aa4f79d22733.content

@ -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}}

1
resources/_gen/assets/sass/css/notfound.sass_2ec2638cd8ce1b509c54aa4f79d22733.json

@ -0,0 +1 @@
{"Target":"css/notfound.d5335f5ffd06a11724e785740f8a7c3510cafaba0e80a9f9631156d33c3a176f.css","MediaType":"text/css","Data":{"Integrity":"sha256-1TNfX/0GoRck54V0D4p8NRDK+roOgKn5YxFW0zw6F28="}}

1
resources/_gen/assets/sass/css/notfound.sass_48b060fe05b0a273d182ef83c0605941.content

@ -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}

1
resources/_gen/assets/sass/css/notfound.sass_48b060fe05b0a273d182ef83c0605941.json

@ -0,0 +1 @@
{"Target":"css/notfound.min.7af2d4e98e0e95317dfd8f8e721927a5a4a16a51163c83d93a1fd266bbb782df.css","MediaType":"text/css","Data":{"Integrity":"sha256-evLU6Y4OlTF9/Y+OchknpaShalEWPIPZOh/SZru3gt8="}}

1
resources/_gen/assets/sass/css/style.sass_2ec2638cd8ce1b509c54aa4f79d22733.content

@ -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}}

1
resources/_gen/assets/sass/css/style.sass_2ec2638cd8ce1b509c54aa4f79d22733.json

@ -0,0 +1 @@
{"Target":"css/style.14e9793f6c6b6d3683942f19e20cd9c2c21843299949df423dc286e6c113317c.css","MediaType":"text/css","Data":{"Integrity":"sha256-FOl5P2xrbTaDlC8Z4gzZwsIYQymZSd9CPcKG5sETMXw="}}

1
resources/_gen/assets/sass/sass/home.sass_2ec2638cd8ce1b509c54aa4f79d22733.content

File diff suppressed because one or more lines are too long

1
resources/_gen/assets/sass/sass/home.sass_2ec2638cd8ce1b509c54aa4f79d22733.json

@ -0,0 +1 @@
{"Target":"sass/home.78b660c2911b006de02237403706f63b4ea3283b7001b4594fd7ea78834f7962.css","MediaType":"text/css","Data":{"Integrity":"sha256-eLZgwpEbAG3gIjdANwb2O06jKDtwAbRZT9fqeINPeWI="}}

1
resources/_gen/assets/sass/sass/navigation.sass_2ec2638cd8ce1b509c54aa4f79d22733.content

@ -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}}

1
resources/_gen/assets/sass/sass/navigation.sass_2ec2638cd8ce1b509c54aa4f79d22733.json

@ -0,0 +1 @@
{"Target":"sass/navigation.c2388a3ec6258b34c9437b1acabacf098ebf76d90868746e174520b47950528f.css","MediaType":"text/css","Data":{"Integrity":"sha256-wjiKPsYlizTJQ3sayrrPCY6/dtkIaHRuF0UgtHlQUo8="}}

1
resources/_gen/assets/sass/sass/notfound.sass_2ec2638cd8ce1b509c54aa4f79d22733.content

@ -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}}

1
resources/_gen/assets/sass/sass/notfound.sass_2ec2638cd8ce1b509c54aa4f79d22733.json

@ -0,0 +1 @@
{"Target":"sass/notfound.3230ae6a62d9e6fc90bed42f285492ba8b05f818abbd71e0c96e5ba56cdb320e.css","MediaType":"text/css","Data":{"Integrity":"sha256-MjCuamLZ5vyQvtQvKFSSuosF+BirvXHgyW5bpWzbMg4="}}

1
resources/_gen/assets/sass/sass/style.sass_2ec2638cd8ce1b509c54aa4f79d22733.content

@ -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}}

1
resources/_gen/assets/sass/sass/style.sass_2ec2638cd8ce1b509c54aa4f79d22733.json

@ -0,0 +1 @@
{"Target":"sass/style.31c0df1af1c551ede13db9f99995a7ece9d2a3dfe4dc29bac27689d48a9e1392.css","MediaType":"text/css","Data":{"Integrity":"sha256-McDfGvHFUe3hPbn5mZWn7OnSo9/k3Cm6wnaJ1IqeE5I="}}

1
resources/_gen/assets/scss/sass/base.scss_c25f88f67e8e33f20619c76cbf49f33c.content

@ -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}

1
resources/_gen/assets/scss/sass/base.scss_c25f88f67e8e33f20619c76cbf49f33c.json

@ -0,0 +1 @@
{"Target":"sass/base.css","MediaType":"text/css","Data":{}}

1
resources/_gen/assets/scss/sass/notfound.scss_c25f88f67e8e33f20619c76cbf49f33c.content

@ -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}

1
resources/_gen/assets/scss/sass/notfound.scss_c25f88f67e8e33f20619c76cbf49f33c.json

@ -0,0 +1 @@
{"Target":"sass/notfound.css","MediaType":"text/css","Data":{}}

1
resources/_gen/assets/scss/sass/particles.scss_c25f88f67e8e33f20619c76cbf49f33c.content

@ -0,0 +1 @@
#particles-bg,canvas{position:absolute;width:100%;height:100%;top:0;left:0;z-index:-10}

1
resources/_gen/assets/scss/sass/particles.scss_c25f88f67e8e33f20619c76cbf49f33c.json

@ -0,0 +1 @@
{"Target":"sass/particles.css","MediaType":"text/css","Data":{}}

4
resources/_gen/assets/scss/sass/variables.scss_c25f88f67e8e33f20619c76cbf49f33c.content

@ -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)}}

1
resources/_gen/assets/scss/sass/variables.scss_c25f88f67e8e33f20619c76cbf49f33c.json

@ -0,0 +1 @@
{"Target":"sass/variables.css","MediaType":"text/css","Data":{}}

1603
themes/doublefourteen/assets/js/lib/particles.js

File diff suppressed because it is too large

99
themes/doublefourteen/assets/js/rain.js

@ -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
}
);

168
themes/doublefourteen/assets/js/transmission.js

@ -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 = {
'&': '&amp;',
'<': '&lt;',
'>': '&gt;',
'"': '&quot;',
"'": '&#x27;',
'`': '&#x60;'
};
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);

279
themes/doublefourteen/assets/sass/home.sass

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

87
themes/doublefourteen/assets/sass/navigation.sass

@ -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;

41
themes/doublefourteen/assets/sass/notfound.sass

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

192
themes/doublefourteen/assets/sass/style.sass

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

118
themes/doublefourteen/assets/sass/variables.sass

@ -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)

8
themes/doublefourteen/i18n/en.toml

<
@ -0,0 +1,8 @@
[back-to-home]
other = "← Back to <b>Home</b> page"