Compare commits

...

8 commits

122 changed files with 3849 additions and 267 deletions

View file

@ -1,5 +1,2 @@
@import "tailwindcss/base"; @import "style";
@import "tailwindcss/components"; @import "color/pink";
@import "tailwindcss/utilities";
/* This file is for your main application CSS */

95
assets/css/buttons.css Normal file
View file

@ -0,0 +1,95 @@
.button-container {
display: table;
margin-left: auto;
margin-right: auto;
}
button,
.button,
a.button {
position: relative;
display: flex;
align-items: center;
justify-content: center;
padding: 8px 18px;
margin-bottom: 5px;
text-align: center;
border-radius: 8px;
border: 1px solid transparent;
appearance: none;
cursor: pointer;
outline: none;
/* variants */
/* sizes */
}
button.outline,
.button.outline,
a.button.outline {
background: transparent;
box-shadow: none;
padding: 8px 18px;
}
button.outline :hover,
.button.outline :hover,
a.button.outline :hover {
transform: none;
box-shadow: none;
}
button.primary,
.button.primary,
a.button.primary {
box-shadow: 0 4px 6px rgba(50, 50, 93, 0.11), 0 1px 3px rgba(0, 0, 0, 0.08);
}
button.primary:hover,
.button.primary:hover,
a.button.primary:hover {
box-shadow: 0 2px 6px rgba(50, 50, 93, 0.21), 0 1px 3px rgba(0, 0, 0, 0.08);
}
button.link,
.button.link,
a.button.link {
background: none;
font-size: 1rem;
}
button.small,
.button.small,
a.button.small {
font-size: 0.8rem;
}
button.wide,
.button.wide,
a.button.wide {
min-width: 200px;
padding: 14px 24px;
}
a.read-more,
a.read-more:hover,
a.read-more:active {
display: inline-flex;
background: none;
box-shadow: none;
padding: 0;
margin: 20px 0;
max-width: 100%;
}
.code-toolbar {
margin-bottom: 20px;
}
.code-toolbar .toolbar-item a {
position: relative;
display: inline-flex;
align-items: center;
justify-content: center;
padding: 3px 8px;
margin-bottom: 5px;
text-align: center;
font-size: 13px;
font-weight: 500;
border-radius: 8px;
border: 1px solid transparent;
appearance: none;
cursor: pointer;
outline: none;
}

View file

@ -0,0 +1,12 @@
@media (prefers-color-scheme: light) {
:root {
--background: white;
--color: #101010;
}
}
@media (prefers-color-scheme: dark) {
:root {
--background: #101010;
--color: #A9B7C6;
}
}

View file

@ -0,0 +1,3 @@
:root {
--background: #1D212C;
}

View file

@ -0,0 +1,4 @@
:root {
--background: #101010;
--color: #A9B7C6;
}

View file

@ -0,0 +1,3 @@
:root {
--background: #1F222A;
}

View file

@ -0,0 +1,3 @@
:root {
--background: #f0f0f0;
}

View file

@ -0,0 +1,3 @@
:root {
--background: #222129;
}

View file

@ -0,0 +1,3 @@
:root {
--background: #21202C;
}

View file

@ -0,0 +1,3 @@
:root {
--background: #221F29;
}

View file

@ -0,0 +1,26 @@
@media (prefers-color-scheme: dark) {
:root {
--accent: rgb(35,176,255);
--accent-alpha-70: rgba(35,176,255,.7);
--accent-alpha-20: rgba(35,176,255,.2);
--background: #101010;
--color: #f0f0f0;
--border-color: rgba(255,240,224,.125);
}
:root div.logo {
color: black;
}
}
@media (prefers-color-scheme: light) {
:root {
--accent: rgb(32,128,192);
--accent-alpha-70: rgba(32,128,192,.7);
--accent-alpha-20: rgba(32,128,192,.2);
--background: white;
--color: #201030;
--border-color: rgba(0,0,16,.125);
}
:root div.logo {
color: white;
}
}

View file

@ -0,0 +1,11 @@
:root {
--accent: rgb(32,128,192);
--accent-alpha-70: rgba(32,128,192,.7);
--accent-alpha-20: rgba(32,128,192,.2);
--background: white;
--color: #1D212C;
--border-color: rgba(0, 0, 0, .1);
}
:root div.logo {
color: white;
}

View file

@ -0,0 +1,8 @@
:root {
--accent: rgb(35,176,255);
--accent-alpha-70: rgba(35,176,255,.7);
--accent-alpha-20: rgba(35,176,255,.2);
--background: #1D212C;
--color: white;
--border-color: rgba(255, 255, 255, .1);
}

View file

@ -0,0 +1,26 @@
@media (prefers-color-scheme: dark) {
:root {
--accent: rgb(120,226,160);
--accent-alpha-70: rgba(120,226,160,.7);
--accent-alpha-20: rgba(120,226,160,.2);
--background: #101010;
--color: #f0f0f0;
--border-color: rgba(255,240,224,.125);
}
:root div.logo {
color: black;
}
}
@media (prefers-color-scheme: light) {
:root {
--accent: rgb(24, 192, 128);
--accent-alpha-70: rgba(24, 192, 128,.7);
--accent-alpha-20: rgba(24, 192, 128,.2);
--background: white;
--color: #201030;
--border-color: rgba(0,0,16,.125);
}
:root div.logo {
color: white;
}
}

View file

@ -0,0 +1,11 @@
:root {
--accent: rgb(24, 192, 128);
--accent-alpha-70: rgba(24, 192, 128,.7);
--accent-alpha-20: rgba(24, 192, 128,.2);
--background: white;
--color: #1D212C;
--border-color: rgba(0, 0, 0, .1);
}
:root div.logo {
color: white;
}

View file

@ -0,0 +1,8 @@
:root {
--accent: rgb(120,226,160);
--accent-alpha-70: rgba(120,226,160,.7);
--accent-alpha-20: rgba(120,226,160,.2);
--background: #1F222A;
--color: white;
--border-color: rgba(255, 255, 255, .1);
}

View file

@ -0,0 +1,26 @@
@media (prefers-color-scheme: dark) {
:root {
--accent: rgb(255,168,106);
--accent-alpha-70: rgba(255,168,106,.7);
--accent-alpha-20: rgba(255,168,106,.2);
--background: #101010;
--color: #f0f0f0;
--border-color: rgba(255,240,224,.125);
}
:root div.logo {
color: black;
}
}
@media (prefers-color-scheme: light) {
:root {
--accent: rgb(240,128,48);
--accent-alpha-70: rgba(240,128,48,.7);
--accent-alpha-20: rgba(240,128,48,.2);
--background: white;
--color: #201030;
--border-color: rgba(0,0,16,.125);
}
:root div.logo {
color: white;
}
}

View file

@ -0,0 +1,11 @@
:root {
--accent: rgb(240,128,48);
--accent-alpha-70: rgba(240,128,48,.7);
--accent-alpha-20: rgba(240,128,48,.2);
--background: white;
--color: #1D212C;
--border-color: rgba(0, 0, 0, .1);
}
:root div.logo {
color: white;
}

View file

@ -0,0 +1,8 @@
:root {
--accent: rgb(255,168,106);
--accent-alpha-70: rgba(255,168,106,.7);
--accent-alpha-20: rgba(255,168,106,.2);
--background: #222129;
--color: white;
--border-color: rgba(255, 255, 255, .1);
}

View file

@ -0,0 +1,26 @@
@media (prefers-color-scheme: dark) {
:root {
--accent: rgb(224,64,192);
--accent-alpha-70: rgba(224,64,192);
--accent-alpha-20: rgba(224,64,192,.2);
--background: #101010;
--color: #f0f0f0;
--border-color: rgba(255,240,224,.125);
}
:root div.logo {
color: black;
}
}
@media (prefers-color-scheme: light) {
:root {
--accent: rgb(238,114,241);
--accent-alpha-70: rgba(238,114,241,.7);
--accent-alpha-20: rgba(238,114,241,.2);
--background: white;
--color: #201030;
--border-color: rgba(0,0,16,.125);
}
:root div.logo {
color: white;
}
}

View file

@ -0,0 +1,11 @@
:root {
--accent: rgb(224,64,192);
--accent-alpha-70: rgba(224,64,192);
--accent-alpha-20: rgba(224,64,192,.2);
--background: white;
--color: #1D212C;
--border-color: rgba(0, 0, 0, .1);
}
:root div.logo {
color: white;
}

View file

@ -0,0 +1,8 @@
:root {
--accent: rgb(238,114,241);
--accent-alpha-70: rgba(238,114,241,.7);
--accent-alpha-20: rgba(238,114,241,.2);
--background: #21202C;
--color: white;
--border-color: rgba(255, 255, 255, .1);
}

View file

@ -0,0 +1,26 @@
@media (prefers-color-scheme: dark) {
:root {
--accent: rgb(255,98,102);
--accent-alpha-70: rgba(255,98,102,.7);
--accent-alpha-20: rgba(255,98,102,.2);
--background: #101010;
--color: #f0f0f0;
--border-color: rgba(255,240,224,.125);
}
:root div.logo {
color: black;
}
}
@media (prefers-color-scheme: light) {
:root {
--accent: rgb(240,48,64);
--accent-alpha-70: rgba(240,48,64,.7);
--accent-alpha-20: rgba(240,48,64,.2);
--background: white;
--color: #201030;
--border-color: rgba(0,0,16,.125);
}
:root div.logo {
color: white;
}
}

View file

@ -0,0 +1,11 @@
:root {
--accent: rgb(240,48,64);
--accent-alpha-70: rgba(240,48,64,.7);
--accent-alpha-20: rgba(240,48,64,.2);
--background: white;
--color: #1D212C;
--border-color: rgba(0, 0, 0, .1);
}
:root div.logo {
color: white;
}

8
assets/css/color/red.css Normal file
View file

@ -0,0 +1,8 @@
:root {
--accent: rgb(255,98,102);
--accent-alpha-70: rgba(255,98,102,.7);
--accent-alpha-20: rgba(255,98,102,.2);
--background: #221F29;
--color: white;
--border-color: rgba(255, 255, 255, .1);
}

View file

@ -0,0 +1,31 @@
/*!
* Hack typeface https://github.com/source-foundry/Hack
* License: https://github.com/source-foundry/Hack/blob/master/LICENSE.md
*/
/* FONT PATHS
* -------------------------- */
@font-face {
font-family: "Hack";
/* Use full version (not a subset) for unicode icon support */
src: url("fonts/hack-regular.woff2?sha=3114f1256") format("woff2"), url("fonts/hack-regular.woff?sha=3114f1256") format("woff");
font-weight: 400;
font-style: normal;
}
@font-face {
font-family: "Hack";
src: url("fonts/hack-bold-subset.woff2?sha=3114f1256") format("woff2"), url("fonts/hack-bold-subset.woff?sha=3114f1256") format("woff");
font-weight: 700;
font-style: normal;
}
@font-face {
font-family: "Hack";
src: url("fonts/hack-italic-subset.woff2?sha=3114f1256") format("woff2"), url("fonts/hack-italic-webfont.woff?sha=3114f1256") format("woff");
font-weight: 400;
font-style: italic;
}
@font-face {
font-family: "Hack";
src: url("fonts/hack-bolditalic-subset.woff2?sha=3114f1256") format("woff2"), url("fonts/hack-bolditalic-subset.woff?sha=3114f1256") format("woff");
font-weight: 700;
font-style: italic;
}

30
assets/css/font-hack.css Normal file
View file

@ -0,0 +1,30 @@
/*!
* Hack typeface https://github.com/source-foundry/Hack
* License: https://github.com/source-foundry/Hack/blob/master/LICENSE.md
*/
/* FONT PATHS
* -------------------------- */
@font-face {
font-family: "Hack";
src: url("fonts/hack-regular.woff2?sha=3114f1256") format("woff2"), url("fonts/hack-regular.woff?sha=3114f1256") format("woff");
font-weight: 400;
font-style: normal;
}
@font-face {
font-family: "Hack";
src: url("fonts/hack-bold.woff2?sha=3114f1256") format("woff2"), url("fonts/hack-bold.woff?sha=3114f1256") format("woff");
font-weight: 700;
font-style: normal;
}
@font-face {
font-family: "Hack";
src: url("fonts/hack-italic.woff2?sha=3114f1256") format("woff2"), url("fonts/hack-italic.woff?sha=3114f1256") format("woff");
font-weight: 400;
font-style: italic;
}
@font-face {
font-family: "Hack";
src: url("fonts/hack-bolditalic.woff2?sha=3114f1256") format("woff2"), url("fonts/hack-bolditalic.woff?sha=3114f1256") format("woff");
font-weight: 700;
font-style: italic;
}

56
assets/css/footer.css Normal file
View file

@ -0,0 +1,56 @@
.footer {
flex-grow: 0;
opacity: 0.5;
}
.footer__inner {
display: flex;
align-items: center;
justify-content: space-between;
margin: 0;
width: 760px;
max-width: 100%;
}
@media (max-width: 899px) {
.footer__inner {
flex-direction: column;
}
}
.footer a {
color: inherit;
}
.footer .copyright {
display: flex;
flex-direction: row;
align-items: center;
font-size: 1rem;
}
.footer .copyright--user {
margin: auto;
text-align: center;
}
.footer .copyright > *:first-child:not(:only-child) {
margin-right: 10px;
}
@media (max-width: 899px) {
.footer .copyright > *:first-child:not(:only-child) {
border: none;
padding: 0;
margin: 0;
}
}
@media (max-width: 899px) {
.footer .copyright {
flex-direction: column;
margin-top: 10px;
}
}
@media (max-width: 899px) {
.footer .copyright-theme-sep {
display: none;
}
}
@media (max-width: 899px) {
.footer .copyright-theme {
font-size: 0.75rem;
}
}

75
assets/css/header.css Normal file
View file

@ -0,0 +1,75 @@
.header {
display: flex;
flex-direction: column;
position: relative;
}
.header__inner {
display: flex;
align-items: center;
justify-content: space-between;
}
.header__logo {
display: flex;
flex: 1;
}
.header__logo:after {
content: "";
background: repeating-linear-gradient(90deg, var(--accent), var(--accent) 2px, transparent 0, transparent 16px);
display: block;
width: 100%;
right: 10px;
}
.header__logo a {
flex: 0 0 auto;
max-width: 100%;
}
.header .menu {
margin: 20px 0;
}
.header .menu__inner {
display: flex;
flex-wrap: wrap;
list-style: none;
margin: 0;
padding: 0;
}
.header .menu__inner li.active {
color: var(--accent-alpha-70);
}
.header .menu__inner li:not(:last-of-type) {
margin-right: 20px;
margin-bottom: 10px;
flex: 0 0 auto;
}
.header .menu__sub-inner {
position: relative;
list-style: none;
padding: 0;
margin: 0;
}
.header .menu__sub-inner:not(:only-child) {
margin-left: 20px;
}
.header .menu__sub-inner-more {
position: absolute;
background: var(--background);
box-shadow: var(--shadow);
color: white;
border: 2px solid;
margin: 0;
padding: 10px;
list-style: none;
z-index: 99;
top: 35px;
left: 0;
}
.header .menu__sub-inner-more-trigger {
color: var(--accent);
user-select: none;
cursor: pointer;
}
.header .menu__sub-inner-more li {
margin: 0;
padding: 5px;
white-space: nowrap;
}

5
assets/css/home.css Normal file
View file

@ -0,0 +1,5 @@
div.homepage {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(20em, 1fr));
grid-gap: 3em;
}

8
assets/css/logo.css Normal file
View file

@ -0,0 +1,8 @@
.logo {
display: flex;
align-items: center;
text-decoration: none;
background: var(--accent);
color: black;
padding: 5px 10px;
}

246
assets/css/main.css Normal file
View file

@ -0,0 +1,246 @@
@charset "UTF-8";
html {
box-sizing: border-box;
}
*,
*:before,
*:after {
box-sizing: inherit;
}
body {
margin: 0;
padding: 0;
font-family: Hack, DejaVu Sans Mono, Monaco, Consolas, Ubuntu Mono, monospace;
font-size: 1rem;
line-height: 1.54;
color: var(--color);
text-rendering: optimizeLegibility;
-webkit-font-smoothing: antialiased;
-webkit-overflow-scrolling: touch;
-webkit-text-size-adjust: 100%;
}
@media (max-width: 683px) {
body {
font-size: 1rem;
}
}
.bg {
background: radial-gradient(at right top, #F68EF0, #74B9DF);
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
min-height: 100vh;
min-height: 100dvh;
z-index: -1;
}
h1, h2, h3, h4, h5, h6 {
display: flex;
align-items: center;
font-weight: bold;
line-height: 1.3;
}
h1 {
font-size: 1.4rem;
}
h2 {
font-size: 1.3rem;
}
h3 {
font-size: 1.2rem;
}
h4, h5, h6 {
font-size: 1.15rem;
}
a {
color: inherit;
}
img {
display: block;
max-width: 100%;
}
img.left {
margin-right: auto;
}
img.center {
margin-left: auto;
margin-right: auto;
}
img.right {
margin-left: auto;
}
p {
margin-bottom: 20px;
}
figure {
display: table;
max-width: 100%;
margin: 25px 0;
}
figure.left, figure img {
margin-right: auto;
}
figure.center, figure img {
margin-left: auto;
margin-right: auto;
}
figure.right, figure img {
margin-left: auto;
}
figure figcaption {
font-size: 14px;
padding: 5px 10px;
margin-top: 5px;
background: var(--accent);
color: var(--background);
}
figure figcaption.left {
text-align: left;
}
figure figcaption.center {
text-align: center;
}
figure figcaption.right {
text-align: right;
}
code {
font-family: Hack, DejaVu Sans Mono, Monaco, Consolas, Ubuntu Mono, monospace;
font-feature-settings: normal;
background: var(--accent-alpha-20);
padding: 1px 6px;
margin: 0 2px;
font-size: 0.95rem;
}
pre {
font-family: Hack, DejaVu Sans Mono, Monaco, Consolas, Ubuntu Mono, monospace;
padding: 20px;
font-size: 0.95rem;
overflow: auto;
border-top: 1px solid rgba(255, 255, 255, 0.1);
border-bottom: 1px solid rgba(255, 255, 255, 0.1);
}
@media (max-width: 683px) {
pre {
white-space: pre-wrap;
word-wrap: break-word;
}
}
pre code {
padding: 0;
margin: 0;
background: none;
}
blockquote {
border-top: 1px solid var(--accent);
border-bottom: 1px solid var(--accent);
margin: 40px 0;
padding: 25px;
}
@media (max-width: 683px) {
blockquote {
padding-right: 0;
}
}
blockquote:before {
content: "”";
font-family: Georgia, serif;
font-size: 3.875rem;
position: absolute;
left: -40px;
top: -20px;
}
blockquote p:first-of-type {
margin-top: 0;
}
blockquote p:last-of-type {
margin-bottom: 0;
}
blockquote p {
position: relative;
}
blockquote p:before {
content: ">";
display: block;
position: absolute;
left: -25px;
color: var(--accent);
}
table {
table-layout: fixed;
border-collapse: collapse;
width: 100%;
margin: 40px 0;
}
table, th, td {
border: 1px dashed var(--accent);
padding: 10px;
}
th {
color: var(--accent);
}
ul, ol {
margin-left: 30px;
padding: 0;
}
ul li, ol li {
position: relative;
}
@media (max-width: 683px) {
ul, ol {
margin-left: 20px;
}
}
ol ol {
list-style-type: lower-alpha;
}
.container {
display: flex;
flex-direction: column;
padding: 40px;
max-width: 864px;
margin: 2em auto;
background: rgba(0, 0, 0, 0.4);
}
@media (max-width: 683px) {
.container {
padding: 20px;
margin: 0 auto;
}
}
.content {
display: flex;
}
hr {
width: 100%;
border: none;
background: var(--border-color);
height: 1px;
}
.hidden {
display: none;
}

70
assets/css/pagination.css Normal file
View file

@ -0,0 +1,70 @@
.pagination {
margin-top: 50px;
}
.pagination__title {
display: flex;
text-align: center;
position: relative;
margin: 100px 0 20px;
}
.pagination__title-h {
text-align: center;
margin: 0 auto;
padding: 5px 10px;
background: var(--background);
font-size: 0.8rem;
text-transform: uppercase;
letter-spacing: 0.1em;
z-index: 1;
}
.pagination__title hr {
position: absolute;
left: 0;
right: 0;
width: 100%;
margin-top: 15px;
z-index: 0;
}
.pagination__buttons {
display: flex;
align-items: center;
justify-content: center;
}
@media (max-width: 683px) {
.pagination__buttons {
flex-direction: column;
}
}
.button {
position: relative;
display: inline-flex;
align-items: center;
justify-content: center;
font-size: 1rem;
border-radius: 8px;
max-width: 40%;
padding: 0;
cursor: pointer;
appearance: none;
}
@media (max-width: 683px) {
.button {
max-width: 80%;
}
}
.button + .button {
margin-left: 10px;
}
.button a {
display: flex;
padding: 8px 16px;
text-overflow: ellipsis;
white-space: nowrap;
overflow: hidden;
}
.button__text {
text-overflow: ellipsis;
white-space: nowrap;
overflow: hidden;
}

106
assets/css/post.css Normal file
View file

@ -0,0 +1,106 @@
@charset "UTF-8";
.posts {
width: 100%;
margin: 0 auto;
}
.post {
width: 100%;
text-align: left;
margin: 20px auto;
padding: 20px 0;
}
@media (max-width: 899px) {
.post {
max-width: 660px;
}
}
.post:not(:last-of-type) {
border-bottom: 1px solid var(--border-color);
}
.post .post-meta-inline, .post .post-meta {
font-size: 1rem;
margin-bottom: 10px;
color: var(--accent-alpha-70);
}
.post-meta-inline {
display: inline;
}
.post-title {
--border: 2px dashed var(--accent);
position: relative;
color: var(--accent);
margin: 0 0 15px;
padding-bottom: 15px;
border-bottom: var(--border);
font-weight: normal;
}
.post-title a {
text-decoration: none;
}
.post .post-tags-inline, .post .post-tags {
margin-bottom: 20px;
font-size: 1rem;
opacity: 0.5;
}
.post-tags {
display: block;
}
.post-tags-inline {
display: inline;
}
@media (max-width: 683px) {
.post-tags-inline {
display: block;
}
}
.post-content {
margin-top: 30px;
}
.post-cover {
border: 20px solid var(--accent);
background: transparent;
margin: 40px 0;
padding: 20px;
}
@media (max-width: 683px) {
.post-cover {
padding: 10px;
border-width: 10px;
}
}
.post ul {
list-style: none;
}
.post ul li:before {
content: "►";
position: absolute;
left: -20px;
color: var(--accent);
}
.post--regulation h1 {
justify-content: center;
}
.post--regulation h2 {
justify-content: center;
margin-bottom: 10px;
}
.post--regulation h2 + h2 {
margin-top: -10px;
margin-bottom: 20px;
}
.post-list .post-date {
color: var(--accent);
text-decoration: none;
}
.post-list a {
text-decoration: none;
}
.post-list .post-list-title {
text-decoration: underline;
}
.post-list .post-tag {
text-decoration: underline;
}

View file

@ -0,0 +1,83 @@
.button-container {
display: table;
margin-left: auto;
margin-right: auto; }
button,
.button,
a.button {
position: relative;
display: flex;
align-items: center;
justify-content: center;
padding: 8px 18px;
margin-bottom: 5px;
text-align: center;
border-radius: 8px;
border: 1px solid transparent;
appearance: none;
cursor: pointer;
outline: none;
/* variants */
/* sizes */ }
button.outline,
.button.outline,
a.button.outline {
background: transparent;
box-shadow: none;
padding: 8px 18px; }
button.outline :hover,
.button.outline :hover,
a.button.outline :hover {
transform: none;
box-shadow: none; }
button.primary,
.button.primary,
a.button.primary {
box-shadow: 0 4px 6px rgba(50, 50, 93, 0.11), 0 1px 3px rgba(0, 0, 0, 0.08); }
button.primary:hover,
.button.primary:hover,
a.button.primary:hover {
box-shadow: 0 2px 6px rgba(50, 50, 93, 0.21), 0 1px 3px rgba(0, 0, 0, 0.08); }
button.link,
.button.link,
a.button.link {
background: none;
font-size: 1rem; }
button.small,
.button.small,
a.button.small {
font-size: .8rem; }
button.wide,
.button.wide,
a.button.wide {
min-width: 200px;
padding: 14px 24px; }
a.read-more,
a.read-more:hover,
a.read-more:active {
display: inline-flex;
background: none;
box-shadow: none;
padding: 0;
margin: 20px 0;
max-width: 100%; }
.code-toolbar {
margin-bottom: 20px; }
.code-toolbar .toolbar-item a {
position: relative;
display: inline-flex;
align-items: center;
justify-content: center;
padding: 3px 8px;
margin-bottom: 5px;
text-align: center;
font-size: 13px;
font-weight: 500;
border-radius: 8px;
border: 1px solid transparent;
appearance: none;
cursor: pointer;
outline: none; }

View file

@ -0,0 +1,92 @@
.button-container {
display: table;
margin-left: auto;
margin-right: auto;
}
button,
.button,
a.button {
position: relative;
display: flex;
align-items: center;
justify-content: center;
padding: 8px 18px;
margin-bottom: 5px;
text-align: center;
border-radius: 8px;
border: 1px solid transparent;
appearance: none;
cursor: pointer;
outline: none;
/* variants */
&.outline {
background: transparent;
box-shadow: none;
padding: 8px 18px;
:hover {
transform: none;
box-shadow: none;
}
}
&.primary {
box-shadow: 0 4px 6px rgba(50, 50, 93, .11), 0 1px 3px rgba(0, 0, 0, .08);
&:hover {
box-shadow: 0 2px 6px rgba(50, 50, 93, .21), 0 1px 3px rgba(0, 0, 0, .08);
}
}
&.link {
background: none;
font-size: 1rem;
}
/* sizes */
&.small {
font-size: .8rem;
}
&.wide {
min-width: 200px;
padding: 14px 24px;
}
}
a.read-more,
a.read-more:hover,
a.read-more:active {
display: inline-flex;
background: none;
box-shadow: none;
padding: 0;
margin: 20px 0;
max-width: 100%;
}
.code-toolbar {
margin-bottom: 20px;
.toolbar-item a {
position: relative;
display: inline-flex;
align-items: center;
justify-content: center;
padding: 3px 8px;
margin-bottom: 5px;
text-align: center;
font-size: 13px;
font-weight: 500;
border-radius: 8px;
border: 1px solid transparent;
appearance: none;
cursor: pointer;
outline: none;
}
}

View file

@ -0,0 +1,14 @@
:root {
@media (prefers-color-scheme: light) {
--background: white;
--color: #101010;
}
@media (prefers-color-scheme: dark) {
--background: #101010;
--color: #A9B7C6;
}
}

View file

@ -0,0 +1,3 @@
:root {
--background: #1D212C;
}

View file

@ -0,0 +1,5 @@
:root {
--background: #101010;
--color: #A9B7C6;
}

View file

@ -0,0 +1,3 @@
:root {
--background: #1F222A;
}

View file

@ -0,0 +1,3 @@
:root {
--background: #f0f0f0;
}

View file

@ -0,0 +1,3 @@
:root {
--background: #222129;
}

View file

@ -0,0 +1,3 @@
:root {
--background: #21202C;
}

View file

@ -0,0 +1,3 @@
:root {
--background: #221F29;
}

View file

@ -0,0 +1,29 @@
:root {
@media (prefers-color-scheme: dark) {
--accent: rgb(35,176,255);
--accent-alpha-70: rgba(35,176,255,.7);
--accent-alpha-20: rgba(35,176,255,.2);
--background: #101010;
--color: #f0f0f0;
--border-color: rgba(255,240,224,.125);
div.logo {
color: black;
}
}
@media (prefers-color-scheme: light) {
--accent: rgb(32,128,192);
--accent-alpha-70: rgba(32,128,192,.7);
--accent-alpha-20: rgba(32,128,192,.2);
--background: white;
--color: #201030;
--border-color: rgba(0,0,16,.125);
div.logo {
color: white;
}
}
}

View file

@ -0,0 +1,12 @@
:root {
--accent: rgb(32,128,192);
--accent-alpha-70: rgba(32,128,192,.7);
--accent-alpha-20: rgba(32,128,192,.2);
--background: white;
--color: #1D212C;
--border-color: rgba(0, 0, 0, .1);
div.logo {
color: white;
}
}

View file

@ -0,0 +1,9 @@
:root {
--accent: rgb(35,176,255);
--accent-alpha-70: rgba(35,176,255,.7);
--accent-alpha-20: rgba(35,176,255,.2);
--background: #1D212C;
--color: white;
--border-color: rgba(255, 255, 255, .1);
}

View file

@ -0,0 +1,29 @@
:root {
@media (prefers-color-scheme: dark) {
--accent: rgb(120,226,160);
--accent-alpha-70: rgba(120,226,160,.7);
--accent-alpha-20: rgba(120,226,160,.2);
--background: #101010;
--color: #f0f0f0;
--border-color: rgba(255,240,224,.125);
div.logo {
color: black;
}
}
@media (prefers-color-scheme: light) {
--accent: rgb(24, 192, 128);
--accent-alpha-70: rgba(24, 192, 128,.7);
--accent-alpha-20: rgba(24, 192, 128,.2);
--background: white;
--color: #201030;
--border-color: rgba(0,0,16,.125);
div.logo {
color: white;
}
}
}

View file

@ -0,0 +1,12 @@
:root {
--accent: rgb(24, 192, 128);
--accent-alpha-70: rgba(24, 192, 128,.7);
--accent-alpha-20: rgba(24, 192, 128,.2);
--background: white;
--color: #1D212C;
--border-color: rgba(0, 0, 0, .1);
div.logo {
color: white;
}
}

View file

@ -0,0 +1,9 @@
:root {
--accent: rgb(120,226,160);
--accent-alpha-70: rgba(120,226,160,.7);
--accent-alpha-20: rgba(120,226,160,.2);
--background: #1F222A;
--color: white;
--border-color: rgba(255, 255, 255, .1);
}

View file

@ -0,0 +1,29 @@
:root {
@media (prefers-color-scheme: dark) {
--accent: rgb(255,168,106);
--accent-alpha-70: rgba(255,168,106,.7);
--accent-alpha-20: rgba(255,168,106,.2);
--background: #101010;
--color: #f0f0f0;
--border-color: rgba(255,240,224,.125);
div.logo {
color: black;
}
}
@media (prefers-color-scheme: light) {
--accent: rgb(240,128,48);
--accent-alpha-70: rgba(240,128,48,.7);
--accent-alpha-20: rgba(240,128,48,.2);
--background: white;
--color: #201030;
--border-color: rgba(0,0,16,.125);
div.logo {
color: white;
}
}
}

View file

@ -0,0 +1,12 @@
:root {
--accent: rgb(240,128,48);
--accent-alpha-70: rgba(240,128,48,.7);
--accent-alpha-20: rgba(240,128,48,.2);
--background: white;
--color: #1D212C;
--border-color: rgba(0, 0, 0, .1);
div.logo {
color: white;
}
}

View file

@ -0,0 +1,9 @@
:root {
--accent: rgb(255,168,106);
--accent-alpha-70: rgba(255,168,106,.7);
--accent-alpha-20: rgba(255,168,106,.2);
--background: #222129;
--color: white;
--border-color: rgba(255, 255, 255, .1);
}

View file

@ -0,0 +1,29 @@
:root {
@media (prefers-color-scheme: dark) {
--accent: rgb(224,64,192);
--accent-alpha-70: rgba(224,64,192);
--accent-alpha-20: rgba(224,64,192,.2);
--background: #101010;
--color: #f0f0f0;
--border-color: rgba(255,240,224,.125);
div.logo {
color: black;
}
}
@media (prefers-color-scheme: light) {
--accent: rgb(238,114,241);
--accent-alpha-70: rgba(238,114,241,.7);
--accent-alpha-20: rgba(238,114,241,.2);
--background: white;
--color: #201030;
--border-color: rgba(0,0,16,.125);
div.logo {
color: white;
}
}
}

View file

@ -0,0 +1,12 @@
:root {
--accent: rgb(224,64,192);
--accent-alpha-70: rgba(224,64,192);
--accent-alpha-20: rgba(224,64,192,.2);
--background: white;
--color: #1D212C;
--border-color: rgba(0, 0, 0, .1);
div.logo {
color: white;
}
}

View file

@ -0,0 +1,9 @@
:root {
--accent: rgb(238,114,241);
--accent-alpha-70: rgba(238,114,241,.7);
--accent-alpha-20: rgba(238,114,241,.2);
--background: #21202C;
--color: white;
--border-color: rgba(255, 255, 255, .1);
}

View file

@ -0,0 +1,29 @@
:root {
@media (prefers-color-scheme: dark) {
--accent: rgb(255,98,102);
--accent-alpha-70: rgba(255,98,102,.7);
--accent-alpha-20: rgba(255,98,102,.2);
--background: #101010;
--color: #f0f0f0;
--border-color: rgba(255,240,224,.125);
div.logo {
color: black;
}
}
@media (prefers-color-scheme: light) {
--accent: rgb(240,48,64);
--accent-alpha-70: rgba(240,48,64,.7);
--accent-alpha-20: rgba(240,48,64,.2);
--background: white;
--color: #201030;
--border-color: rgba(0,0,16,.125);
div.logo {
color: white;
}
}
}

View file

@ -0,0 +1,12 @@
:root {
--accent: rgb(240,48,64);
--accent-alpha-70: rgba(240,48,64,.7);
--accent-alpha-20: rgba(240,48,64,.2);
--background: white;
--color: #1D212C;
--border-color: rgba(0, 0, 0, .1);
div.logo {
color: white;
}
}

View file

@ -0,0 +1,9 @@
:root {
--accent: rgb(255,98,102);
--accent-alpha-70: rgba(255,98,102,.7);
--accent-alpha-20: rgba(255,98,102,.2);
--background: #221F29;
--color: white;
--border-color: rgba(255, 255, 255, .1);
}

View file

@ -0,0 +1,27 @@
/*!
* Hack typeface https://github.com/source-foundry/Hack
* License: https://github.com/source-foundry/Hack/blob/master/LICENSE.md
*/
/* FONT PATHS
* -------------------------- */
@font-face {
font-family: 'Hack';
/* Use full version (not a subset) for unicode icon support */
src: url("fonts/hack-regular.woff2?sha=3114f1256") format("woff2"), url("fonts/hack-regular.woff?sha=3114f1256") format("woff");
font-weight: 400;
font-style: normal; }
@font-face {
font-family: 'Hack';
src: url("fonts/hack-bold-subset.woff2?sha=3114f1256") format("woff2"), url("fonts/hack-bold-subset.woff?sha=3114f1256") format("woff");
font-weight: 700;
font-style: normal; }
@font-face {
font-family: 'Hack';
src: url("fonts/hack-italic-subset.woff2?sha=3114f1256") format("woff2"), url("fonts/hack-italic-webfont.woff?sha=3114f1256") format("woff");
font-weight: 400;
font-style: italic; }
@font-face {
font-family: 'Hack';
src: url("fonts/hack-bolditalic-subset.woff2?sha=3114f1256") format("woff2"), url("fonts/hack-bolditalic-subset.woff?sha=3114f1256") format("woff");
font-weight: 700;
font-style: italic; }

View file

@ -0,0 +1,34 @@
/*!
* Hack typeface https://github.com/source-foundry/Hack
* License: https://github.com/source-foundry/Hack/blob/master/LICENSE.md
*/
/* FONT PATHS
* -------------------------- */
@font-face {
font-family: 'Hack';
/* Use full version (not a subset) for unicode icon support */
src: url('fonts/hack-regular.woff2?sha=3114f1256') format('woff2'), url('fonts/hack-regular.woff?sha=3114f1256') format('woff');
font-weight: 400;
font-style: normal;
}
@font-face {
font-family: 'Hack';
src: url('fonts/hack-bold-subset.woff2?sha=3114f1256') format('woff2'), url('fonts/hack-bold-subset.woff?sha=3114f1256') format('woff');
font-weight: 700;
font-style: normal;
}
@font-face {
font-family: 'Hack';
src: url('fonts/hack-italic-subset.woff2?sha=3114f1256') format('woff2'), url('fonts/hack-italic-webfont.woff?sha=3114f1256') format('woff');
font-weight: 400;
font-style: italic;
}
@font-face {
font-family: 'Hack';
src: url('fonts/hack-bolditalic-subset.woff2?sha=3114f1256') format('woff2'), url('fonts/hack-bolditalic-subset.woff?sha=3114f1256') format('woff');
font-weight: 700;
font-style: italic;
}

View file

@ -0,0 +1,26 @@
/*!
* Hack typeface https://github.com/source-foundry/Hack
* License: https://github.com/source-foundry/Hack/blob/master/LICENSE.md
*/
/* FONT PATHS
* -------------------------- */
@font-face {
font-family: 'Hack';
src: url("fonts/hack-regular.woff2?sha=3114f1256") format("woff2"), url("fonts/hack-regular.woff?sha=3114f1256") format("woff");
font-weight: 400;
font-style: normal; }
@font-face {
font-family: 'Hack';
src: url("fonts/hack-bold.woff2?sha=3114f1256") format("woff2"), url("fonts/hack-bold.woff?sha=3114f1256") format("woff");
font-weight: 700;
font-style: normal; }
@font-face {
font-family: 'Hack';
src: url("fonts/hack-italic.woff2?sha=3114f1256") format("woff2"), url("fonts/hack-italic.woff?sha=3114f1256") format("woff");
font-weight: 400;
font-style: italic; }
@font-face {
font-family: 'Hack';
src: url("fonts/hack-bolditalic.woff2?sha=3114f1256") format("woff2"), url("fonts/hack-bolditalic.woff?sha=3114f1256") format("woff");
font-weight: 700;
font-style: italic; }

View file

@ -0,0 +1,33 @@
/*!
* Hack typeface https://github.com/source-foundry/Hack
* License: https://github.com/source-foundry/Hack/blob/master/LICENSE.md
*/
/* FONT PATHS
* -------------------------- */
@font-face {
font-family: 'Hack';
src: url('fonts/hack-regular.woff2?sha=3114f1256') format('woff2'), url('fonts/hack-regular.woff?sha=3114f1256') format('woff');
font-weight: 400;
font-style: normal;
}
@font-face {
font-family: 'Hack';
src: url('fonts/hack-bold.woff2?sha=3114f1256') format('woff2'), url('fonts/hack-bold.woff?sha=3114f1256') format('woff');
font-weight: 700;
font-style: normal;
}
@font-face {
font-family: 'Hack';
src: url('fonts/hack-italic.woff2?sha=3114f1256') format('woff2'), url('fonts/hack-italic.woff?sha=3114f1256') format('woff');
font-weight: 400;
font-style: italic;
}
@font-face {
font-family: 'Hack';
src: url('fonts/hack-bolditalic.woff2?sha=3114f1256') format('woff2'), url('fonts/hack-bolditalic.woff?sha=3114f1256') format('woff');
font-weight: 700;
font-style: italic;
}

View file

@ -0,0 +1,40 @@
.footer {
flex-grow: 0;
opacity: .5; }
.footer__inner {
display: flex;
align-items: center;
justify-content: space-between;
margin: 0;
width: 760px;
max-width: 100%; }
@media (max-width: 899px) {
.footer__inner {
flex-direction: column; } }
.footer a {
color: inherit; }
.footer .copyright {
display: flex;
flex-direction: row;
align-items: center;
font-size: 1rem; }
.footer .copyright--user {
margin: auto;
text-align: center; }
.footer .copyright > *:first-child:not(:only-child) {
margin-right: 10px; }
@media (max-width: 899px) {
.footer .copyright > *:first-child:not(:only-child) {
border: none;
padding: 0;
margin: 0; } }
@media (max-width: 899px) {
.footer .copyright {
flex-direction: column;
margin-top: 10px; } }
@media (max-width: 899px) {
.footer .copyright-theme-sep {
display: none; } }
@media (max-width: 899px) {
.footer .copyright-theme {
font-size: 0.75rem; } }

View file

@ -0,0 +1,62 @@
@import "variables";
.footer {
flex-grow: 0;
opacity: .5;
&__inner {
display: flex;
align-items: center;
justify-content: space-between;
margin: 0;
width: 760px;
max-width: 100%;
@media (max-width: $tablet-max-width) {
flex-direction: column;
}
}
a {
color: inherit;
}
.copyright {
display: flex;
flex-direction: row;
align-items: center;
font-size: 1rem;
&--user {
margin: auto;
text-align: center;
}
& > *:first-child:not(:only-child) {
margin-right: 10px;
@media (max-width: $tablet-max-width) {
border: none;
padding: 0;
margin: 0;
}
}
@media (max-width: $tablet-max-width) {
flex-direction: column;
margin-top: 10px;
}
}
.copyright-theme-sep {
@media (max-width: $tablet-max-width) {
display: none;
}
}
.copyright-theme {
@media (max-width: $tablet-max-width) {
font-size: 0.75rem;
}
}
}

View file

@ -0,0 +1,61 @@
.header {
display: flex;
flex-direction: column;
position: relative; }
.header__inner {
display: flex;
align-items: center;
justify-content: space-between; }
.header__logo {
display: flex;
flex: 1; }
.header__logo:after {
content: '';
background: repeating-linear-gradient(90deg, var(--accent), var(--accent) 2px, transparent 0, transparent 16px);
display: block;
width: 100%;
right: 10px; }
.header__logo a {
flex: 0 0 auto;
max-width: 100%; }
.header .menu {
margin: 20px 0; }
.header .menu__inner {
display: flex;
flex-wrap: wrap;
list-style: none;
margin: 0;
padding: 0; }
.header .menu__inner li.active {
color: var(--accent-alpha-70); }
.header .menu__inner li:not(:last-of-type) {
margin-right: 20px;
margin-bottom: 10px;
flex: 0 0 auto; }
.header .menu__sub-inner {
position: relative;
list-style: none;
padding: 0;
margin: 0; }
.header .menu__sub-inner:not(:only-child) {
margin-left: 20px; }
.header .menu__sub-inner-more {
position: absolute;
background: var(--background);
box-shadow: var(--shadow);
color: white;
border: 2px solid;
margin: 0;
padding: 10px;
list-style: none;
z-index: 99;
top: 35px;
left: 0; }
.header .menu__sub-inner-more-trigger {
color: var(--accent);
user-select: none;
cursor: pointer; }
.header .menu__sub-inner-more li {
margin: 0;
padding: 5px;
white-space: nowrap; }

View file

@ -0,0 +1,96 @@
@import "variables";
@mixin menu {
position: absolute;
background: var(--background);
box-shadow: var(--shadow);
color: white;
border: 2px solid;
margin: 0;
padding: 10px;
list-style: none;
z-index: 99;
}
.header {
display: flex;
flex-direction: column;
position: relative;
&__inner {
display: flex;
align-items: center;
justify-content: space-between;
}
&__logo {
display: flex;
flex: 1;
&:after {
content: '';
background: repeating-linear-gradient(90deg, var(--accent), var(--accent) 2px, transparent 0, transparent 16px);
display: block;
width: 100%;
right: 10px;
}
a {
flex: 0 0 auto;
max-width: 100%;
}
}
.menu {
margin: 20px 0;
&__inner {
display: flex;
flex-wrap: wrap;
list-style: none;
margin: 0;
padding: 0;
li {
&.active {
color: var(--accent-alpha-70);
}
&:not(:last-of-type) {
margin-right: 20px;
margin-bottom: 10px;
flex: 0 0 auto;
}
}
}
&__sub-inner {
position: relative;
list-style: none;
padding: 0;
margin: 0;
&:not(:only-child) {
margin-left: 20px;
}
&-more {
@include menu;
top: 35px;
left: 0;
&-trigger {
color: var(--accent);
user-select: none;
cursor: pointer;
}
li {
margin: 0;
padding: 5px;
white-space: nowrap;
}
}
}
}
}

4
assets/css/sass/home.css Normal file
View file

@ -0,0 +1,4 @@
div.homepage {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(20em, 1fr));
grid-gap: 3em; }

View file

@ -0,0 +1,5 @@
div.homepage {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(20em, 1fr));
grid-gap: 3em;
}

7
assets/css/sass/logo.css Normal file
View file

@ -0,0 +1,7 @@
.logo {
display: flex;
align-items: center;
text-decoration: none;
background: var(--accent);
color: black;
padding: 5px 10px; }

View file

@ -0,0 +1,8 @@
.logo {
display: flex;
align-items: center;
text-decoration: none;
background: var(--accent);
color: black;
padding: 5px 10px;
}

66
assets/css/sass/main.css Normal file
View file

@ -0,0 +1,66 @@
/*
Error: wrong number of arguments (1 for 3) for `rgb'
on line 242 of main.scss
237: padding: 40px;
238: max-width: 864px;
239: // min-height: 100vh;
240: margin: 2em auto;
241:
242: background: rgb(0 0 0 / .4);
243:
244: @media (max-width: $phone-max-width) {
245: padding: 20px;
246: margin: 0 auto;
247: }
Backtrace:
main.scss:242
/home/jess/.asdf/installs/ruby/3.3.0/lib/ruby/gems/3.3.0/gems/sass-3.7.4/lib/sass/script/tree/funcall.rb:311:in `reformat_argument_error'
/home/jess/.asdf/installs/ruby/3.3.0/lib/ruby/gems/3.3.0/gems/sass-3.7.4/lib/sass/script/tree/funcall.rb:158:in `rescue in _perform'
/home/jess/.asdf/installs/ruby/3.3.0/lib/ruby/gems/3.3.0/gems/sass-3.7.4/lib/sass/script/tree/funcall.rb:127:in `_perform'
/home/jess/.asdf/installs/ruby/3.3.0/lib/ruby/gems/3.3.0/gems/sass-3.7.4/lib/sass/script/tree/node.rb:50:in `perform'
/home/jess/.asdf/installs/ruby/3.3.0/lib/ruby/gems/3.3.0/gems/sass-3.7.4/lib/sass/tree/visitors/perform.rb:398:in `visit_prop'
/home/jess/.asdf/installs/ruby/3.3.0/lib/ruby/gems/3.3.0/gems/sass-3.7.4/lib/sass/tree/visitors/base.rb:36:in `visit'
/home/jess/.asdf/installs/ruby/3.3.0/lib/ruby/gems/3.3.0/gems/sass-3.7.4/lib/sass/tree/visitors/perform.rb:158:in `block in visit'
/home/jess/.asdf/installs/ruby/3.3.0/lib/ruby/gems/3.3.0/gems/sass-3.7.4/lib/sass/stack.rb:79:in `block in with_base'
/home/jess/.asdf/installs/ruby/3.3.0/lib/ruby/gems/3.3.0/gems/sass-3.7.4/lib/sass/stack.rb:135:in `with_frame'
/home/jess/.asdf/installs/ruby/3.3.0/lib/ruby/gems/3.3.0/gems/sass-3.7.4/lib/sass/stack.rb:79:in `with_base'
/home/jess/.asdf/installs/ruby/3.3.0/lib/ruby/gems/3.3.0/gems/sass-3.7.4/lib/sass/tree/visitors/perform.rb:158:in `visit'
/home/jess/.asdf/installs/ruby/3.3.0/lib/ruby/gems/3.3.0/gems/sass-3.7.4/lib/sass/tree/visitors/perform.rb:440:in `block (2 levels) in visit_rule'
/home/jess/.asdf/installs/ruby/3.3.0/lib/ruby/gems/3.3.0/gems/sass-3.7.4/lib/sass/tree/visitors/perform.rb:440:in `map'
/home/jess/.asdf/installs/ruby/3.3.0/lib/ruby/gems/3.3.0/gems/sass-3.7.4/lib/sass/tree/visitors/perform.rb:440:in `block in visit_rule'
/home/jess/.asdf/installs/ruby/3.3.0/lib/ruby/gems/3.3.0/gems/sass-3.7.4/lib/sass/tree/visitors/perform.rb:179:in `with_environment'
/home/jess/.asdf/installs/ruby/3.3.0/lib/ruby/gems/3.3.0/gems/sass-3.7.4/lib/sass/tree/visitors/perform.rb:438:in `visit_rule'
/home/jess/.asdf/installs/ruby/3.3.0/lib/ruby/gems/3.3.0/gems/sass-3.7.4/lib/sass/tree/visitors/base.rb:36:in `visit'
/home/jess/.asdf/installs/ruby/3.3.0/lib/ruby/gems/3.3.0/gems/sass-3.7.4/lib/sass/tree/visitors/perform.rb:158:in `block in visit'
/home/jess/.asdf/installs/ruby/3.3.0/lib/ruby/gems/3.3.0/gems/sass-3.7.4/lib/sass/stack.rb:79:in `block in with_base'
/home/jess/.asdf/installs/ruby/3.3.0/lib/ruby/gems/3.3.0/gems/sass-3.7.4/lib/sass/stack.rb:135:in `with_frame'
/home/jess/.asdf/installs/ruby/3.3.0/lib/ruby/gems/3.3.0/gems/sass-3.7.4/lib/sass/stack.rb:79:in `with_base'
/home/jess/.asdf/installs/ruby/3.3.0/lib/ruby/gems/3.3.0/gems/sass-3.7.4/lib/sass/tree/visitors/perform.rb:158:in `visit'
/home/jess/.asdf/installs/ruby/3.3.0/lib/ruby/gems/3.3.0/gems/sass-3.7.4/lib/sass/tree/visitors/base.rb:52:in `block in visit_children'
/home/jess/.asdf/installs/ruby/3.3.0/lib/ruby/gems/3.3.0/gems/sass-3.7.4/lib/sass/tree/visitors/base.rb:52:in `map'
/home/jess/.asdf/installs/ruby/3.3.0/lib/ruby/gems/3.3.0/gems/sass-3.7.4/lib/sass/tree/visitors/base.rb:52:in `visit_children'
/home/jess/.asdf/installs/ruby/3.3.0/lib/ruby/gems/3.3.0/gems/sass-3.7.4/lib/sass/tree/visitors/perform.rb:167:in `block in visit_children'
/home/jess/.asdf/installs/ruby/3.3.0/lib/ruby/gems/3.3.0/gems/sass-3.7.4/lib/sass/tree/visitors/perform.rb:179:in `with_environment'
/home/jess/.asdf/installs/ruby/3.3.0/lib/ruby/gems/3.3.0/gems/sass-3.7.4/lib/sass/tree/visitors/perform.rb:166:in `visit_children'
/home/jess/.asdf/installs/ruby/3.3.0/lib/ruby/gems/3.3.0/gems/sass-3.7.4/lib/sass/tree/visitors/base.rb:36:in `block in visit'
/home/jess/.asdf/installs/ruby/3.3.0/lib/ruby/gems/3.3.0/gems/sass-3.7.4/lib/sass/tree/visitors/perform.rb:186:in `visit_root'
/home/jess/.asdf/installs/ruby/3.3.0/lib/ruby/gems/3.3.0/gems/sass-3.7.4/lib/sass/tree/visitors/base.rb:36:in `visit'
/home/jess/.asdf/installs/ruby/3.3.0/lib/ruby/gems/3.3.0/gems/sass-3.7.4/lib/sass/tree/visitors/perform.rb:157:in `visit'
/home/jess/.asdf/installs/ruby/3.3.0/lib/ruby/gems/3.3.0/gems/sass-3.7.4/lib/sass/tree/visitors/perform.rb:10:in `visit'
/home/jess/.asdf/installs/ruby/3.3.0/lib/ruby/gems/3.3.0/gems/sass-3.7.4/lib/sass/tree/root_node.rb:36:in `css_tree'
/home/jess/.asdf/installs/ruby/3.3.0/lib/ruby/gems/3.3.0/gems/sass-3.7.4/lib/sass/tree/root_node.rb:20:in `render'
/home/jess/.asdf/installs/ruby/3.3.0/lib/ruby/gems/3.3.0/gems/sass-3.7.4/lib/sass/engine.rb:290:in `render'
/home/jess/.asdf/installs/ruby/3.3.0/lib/ruby/gems/3.3.0/gems/sass-3.7.4/lib/sass/exec/sass_scss.rb:396:in `run'
/home/jess/.asdf/installs/ruby/3.3.0/lib/ruby/gems/3.3.0/gems/sass-3.7.4/lib/sass/exec/sass_scss.rb:63:in `process_result'
/home/jess/.asdf/installs/ruby/3.3.0/lib/ruby/gems/3.3.0/gems/sass-3.7.4/lib/sass/exec/base.rb:50:in `parse'
/home/jess/.asdf/installs/ruby/3.3.0/lib/ruby/gems/3.3.0/gems/sass-3.7.4/lib/sass/exec/base.rb:18:in `parse!'
/home/jess/.asdf/installs/ruby/3.3.0/lib/ruby/gems/3.3.0/gems/sass-3.7.4/bin/sass:13:in `<top (required)>'
/home/jess/.asdf/installs/ruby/3.3.0/bin/sass:25:in `load'
/home/jess/.asdf/installs/ruby/3.3.0/bin/sass:25:in `<main>'
*/
body:before {
white-space: pre;
font-family: monospace;
content: "Error: wrong number of arguments (1 for 3) for `rgb'\A on line 242 of main.scss\A \A 237: padding: 40px;\A 238: max-width: 864px;\A 239: // min-height: 100vh;\A 240: margin: 2em auto;\A 241: \A 242: background: rgb(0 0 0 / .4);\A 243: \A 244: @media (max-width: $phone-max-width) {\A 245: padding: 20px;\A 246: margin: 0 auto;\A 247: }"; }

263
assets/css/sass/main.scss Normal file
View file

@ -0,0 +1,263 @@
@import "variables";
html {
box-sizing: border-box;
}
*,
*:before,
*:after {
box-sizing: inherit;
}
body {
margin: 0;
padding: 0;
font-family: Hack, DejaVu Sans Mono, Monaco, Consolas, Ubuntu Mono, monospace;
font-size: 1rem;
line-height: 1.54;
// background-color: var(--background);
color: var(--color);
text-rendering: optimizeLegibility;
-webkit-font-smoothing: antialiased;
-webkit-overflow-scrolling: touch;
-webkit-text-size-adjust: 100%;
@media (max-width: $phone-max-width) {
font-size: 1rem;
}
}
.bg {
background: radial-gradient(at right top, #F68EF0, #74B9DF);
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
min-height: 100vh;
min-height: 100dvh;
z-index: -1;
}
h1, h2, h3, h4, h5, h6 {
display: flex;
align-items: center;
font-weight: bold;
line-height: 1.3;
}
h1 {
font-size: 1.4rem;
}
h2 {
font-size: 1.3rem;
}
h3 {
font-size: 1.2rem;
}
h4, h5, h6 {
font-size: 1.15rem;
}
a {
color: inherit;
}
img {
display: block;
max-width: 100%;
&.left {
margin-right: auto;
}
&.center {
margin-left: auto;
margin-right: auto;
}
&.right {
margin-left: auto;
}
}
p {
margin-bottom: 20px;
}
figure {
display: table;
max-width: 100%;
margin: 25px 0;
&.left, img {
margin-right: auto;
}
&.center, img {
margin-left: auto;
margin-right: auto;
}
&.right, img {
margin-left: auto;
}
figcaption {
font-size: 14px;
padding: 5px 10px;
margin-top: 5px;
background: var(--accent);
color: var(--background);
&.left {
text-align: left;
}
&.center {
text-align: center;
}
&.right {
text-align: right;
}
}
}
code {
font-family: Hack, DejaVu Sans Mono, Monaco, Consolas, Ubuntu Mono, monospace;
font-feature-settings: normal;
background: var(--accent-alpha-20);
padding: 1px 6px;
margin: 0 2px;
font-size: .95rem;
}
pre {
font-family: Hack, DejaVu Sans Mono, Monaco, Consolas, Ubuntu Mono, monospace;
padding: 20px;
font-size: .95rem;
overflow: auto;
border-top: 1px solid rgba(255, 255, 255, .1);
border-bottom: 1px solid rgba(255, 255, 255, .1);
@media (max-width: $phone-max-width) {
white-space: pre-wrap;
word-wrap: break-word;
}
code {
padding: 0;
margin: 0;
background: none;
}
}
blockquote {
border-top: 1px solid var(--accent);
border-bottom: 1px solid var(--accent);
margin: 40px 0;
padding: 25px;
@media (max-width: $phone-max-width) {
padding-right: 0;
}
&:before {
content: '';
font-family: Georgia, serif;
font-size: 3.875rem;
position: absolute;
left: -40px;
top: -20px;
}
p:first-of-type {
margin-top: 0;
}
p:last-of-type {
margin-bottom: 0;
}
p {
position: relative;
}
p:before {
content: '>';
display: block;
position: absolute;
left: -25px;
color: var(--accent);
}
}
table {
table-layout: fixed;
border-collapse: collapse;
width: 100%;
margin: 40px 0;
}
table, th, td {
border: 1px dashed var(--accent);
padding: 10px;
}
th {
color: var(--accent);
}
ul, ol {
margin-left: 30px;
padding: 0;
li {
position: relative;
}
@media (max-width: $phone-max-width) {
margin-left: 20px;
}
}
ol ol {
list-style-type: lower-alpha;
}
.container {
display: flex;
flex-direction: column;
padding: 40px;
max-width: 864px;
// min-height: 100vh;
margin: 2em auto;
background: rgb(0 0 0 / .4);
@media (max-width: $phone-max-width) {
padding: 20px;
margin: 0 auto;
}
}
.content {
display: flex;
}
hr {
width: 100%;
border: none;
background: var(--border-color);
height: 1px;
}
.hidden {
display: none;
}

View file

@ -0,0 +1,57 @@
.pagination {
margin-top: 50px; }
.pagination__title {
display: flex;
text-align: center;
position: relative;
margin: 100px 0 20px; }
.pagination__title-h {
text-align: center;
margin: 0 auto;
padding: 5px 10px;
background: var(--background);
font-size: .8rem;
text-transform: uppercase;
letter-spacing: .1em;
z-index: 1; }
.pagination__title hr {
position: absolute;
left: 0;
right: 0;
width: 100%;
margin-top: 15px;
z-index: 0; }
.pagination__buttons {
display: flex;
align-items: center;
justify-content: center; }
@media (max-width: 683px) {
.pagination__buttons {
flex-direction: column; } }
.button {
position: relative;
display: inline-flex;
align-items: center;
justify-content: center;
font-size: 1rem;
border-radius: 8px;
max-width: 40%;
padding: 0;
cursor: pointer;
appearance: none; }
@media (max-width: 683px) {
.button {
max-width: 80%; } }
.button + .button {
margin-left: 10px; }
.button a {
display: flex;
padding: 8px 16px;
text-overflow: ellipsis;
white-space: nowrap;
overflow: hidden; }
.button__text {
text-overflow: ellipsis;
white-space: nowrap;
overflow: hidden; }

View file

@ -0,0 +1,77 @@
@import 'variables';
.pagination {
margin-top: 50px;
&__title {
display: flex;
text-align: center;
position: relative;
margin: 100px 0 20px;
&-h {
text-align: center;
margin: 0 auto;
padding: 5px 10px;
background: var(--background);
font-size: .8rem;
text-transform: uppercase;
letter-spacing: .1em;
z-index: 1;
}
hr {
position: absolute;
left: 0;
right: 0;
width: 100%;
margin-top: 15px;
z-index: 0;
}
}
&__buttons {
display: flex;
align-items: center;
justify-content: center;
@media (max-width: $phone-max-width) {
flex-direction: column;
}
}
}
.button {
position: relative;
display: inline-flex;
align-items: center;
justify-content: center;
font-size: 1rem;
border-radius: 8px;
max-width: 40%;
padding: 0;
cursor: pointer;
appearance: none;
@media (max-width: $phone-max-width) {
max-width: 80%;
}
+ .button {
margin-left: 10px;
}
a {
display: flex;
padding: 8px 16px;
text-overflow: ellipsis;
white-space: nowrap;
overflow: hidden;
}
&__text {
text-overflow: ellipsis;
white-space: nowrap;
overflow: hidden;
}
}

79
assets/css/sass/post.css Normal file
View file

@ -0,0 +1,79 @@
@charset "UTF-8";
.posts {
width: 100%;
margin: 0 auto; }
.post {
width: 100%;
text-align: left;
margin: 20px auto;
padding: 20px 0; }
@media (max-width: 899px) {
.post {
max-width: 660px; } }
.post:not(:last-of-type) {
border-bottom: 1px solid var(--border-color); }
.post .post-meta, .post .post-meta-inline {
font-size: 1rem;
margin-bottom: 10px;
color: var(--accent-alpha-70); }
.post-meta-inline {
display: inline; }
.post-title {
--border: 2px dashed var(--accent);
position: relative;
color: var(--accent);
margin: 0 0 15px;
padding-bottom: 15px;
border-bottom: var(--border);
font-weight: normal; }
.post-title a {
text-decoration: none; }
.post .post-tags, .post .post-tags-inline {
margin-bottom: 20px;
font-size: 1rem;
opacity: .5; }
.post-tags {
display: block; }
.post-tags-inline {
display: inline; }
@media (max-width: 683px) {
.post-tags-inline {
display: block; } }
.post-content {
margin-top: 30px; }
.post-cover {
border: 20px solid var(--accent);
background: transparent;
margin: 40px 0;
padding: 20px; }
@media (max-width: 683px) {
.post-cover {
padding: 10px;
border-width: 10px; } }
.post ul {
list-style: none; }
.post ul li:before {
content: '►';
position: absolute;
left: -20px;
color: var(--accent); }
.post--regulation h1 {
justify-content: center; }
.post--regulation h2 {
justify-content: center;
margin-bottom: 10px; }
.post--regulation h2 + h2 {
margin-top: -10px;
margin-bottom: 20px; }
.post-list .post-date {
color: var(--accent);
text-decoration: none; }
.post-list a {
text-decoration: none; }
.post-list .post-list-title {
text-decoration: underline; }
.post-list .post-tag {
text-decoration: underline; }

135
assets/css/sass/post.scss Normal file
View file

@ -0,0 +1,135 @@
@import "variables";
.posts {
width: 100%;
margin: 0 auto;
}
.post {
width: 100%;
text-align: left;
margin: 20px auto;
padding: 20px 0;
@media (max-width: $tablet-max-width) {
max-width: 660px;
}
&:not(:last-of-type) {
border-bottom: 1px solid var(--border-color);
}
%meta {
font-size: 1rem;
margin-bottom: 10px;
color: var(--accent-alpha-70);
}
&-meta {
@extend %meta;
}
&-meta-inline {
@extend %meta;
display: inline;
}
&-title {
--border: 2px dashed var(--accent);
position: relative;
color: var(--accent);
margin: 0 0 15px;
padding-bottom: 15px;
border-bottom: var(--border);
font-weight: normal;
a {
text-decoration: none;
}
}
%tags {
margin-bottom: 20px;
font-size: 1rem;
opacity: .5;
}
&-tags {
@extend %tags;
display: block;
}
&-tags-inline {
@extend %tags;
display: inline;
@media (max-width: $phone-max-width) {
display: block;
}
}
&-content {
margin-top: 30px;
}
&-cover {
border: 20px solid var(--accent);
background: transparent;
margin: 40px 0;
padding: 20px;
@media (max-width: $phone-max-width) {
padding: 10px;
border-width: 10px;
}
}
ul {
list-style: none;
li:before {
content: '';
position: absolute;
left: -20px;
color: var(--accent);
}
}
}
.post--regulation {
h1 {
justify-content: center;
}
h2 {
justify-content: center;
margin-bottom: 10px;
&+ h2 {
margin-top: -10px;
margin-bottom: 20px;
}
}
}
.post-list {
.post-date {
color: var(--accent);
text-decoration: none;
}
a {
text-decoration: none;
}
.post-list-title {
text-decoration: underline;
}
.post-tag {
text-decoration: underline;
}
}

69
assets/css/sass/style.css Normal file
View file

@ -0,0 +1,69 @@
/*
Error: wrong number of arguments (1 for 3) for `rgb'
on line 242 of main.scss
from line 5 of style.scss
Backtrace:
main.scss:242
style.scss:5
/home/jess/.asdf/installs/ruby/3.3.0/lib/ruby/gems/3.3.0/gems/sass-3.7.4/lib/sass/script/tree/funcall.rb:311:in `reformat_argument_error'
/home/jess/.asdf/installs/ruby/3.3.0/lib/ruby/gems/3.3.0/gems/sass-3.7.4/lib/sass/script/tree/funcall.rb:158:in `rescue in _perform'
/home/jess/.asdf/installs/ruby/3.3.0/lib/ruby/gems/3.3.0/gems/sass-3.7.4/lib/sass/script/tree/funcall.rb:127:in `_perform'
/home/jess/.asdf/installs/ruby/3.3.0/lib/ruby/gems/3.3.0/gems/sass-3.7.4/lib/sass/script/tree/node.rb:50:in `perform'
/home/jess/.asdf/installs/ruby/3.3.0/lib/ruby/gems/3.3.0/gems/sass-3.7.4/lib/sass/tree/visitors/perform.rb:398:in `visit_prop'
/home/jess/.asdf/installs/ruby/3.3.0/lib/ruby/gems/3.3.0/gems/sass-3.7.4/lib/sass/tree/visitors/base.rb:36:in `visit'
/home/jess/.asdf/installs/ruby/3.3.0/lib/ruby/gems/3.3.0/gems/sass-3.7.4/lib/sass/tree/visitors/perform.rb:158:in `block in visit'
/home/jess/.asdf/installs/ruby/3.3.0/lib/ruby/gems/3.3.0/gems/sass-3.7.4/lib/sass/stack.rb:79:in `block in with_base'
/home/jess/.asdf/installs/ruby/3.3.0/lib/ruby/gems/3.3.0/gems/sass-3.7.4/lib/sass/stack.rb:135:in `with_frame'
/home/jess/.asdf/installs/ruby/3.3.0/lib/ruby/gems/3.3.0/gems/sass-3.7.4/lib/sass/stack.rb:79:in `with_base'
/home/jess/.asdf/installs/ruby/3.3.0/lib/ruby/gems/3.3.0/gems/sass-3.7.4/lib/sass/tree/visitors/perform.rb:158:in `visit'
/home/jess/.asdf/installs/ruby/3.3.0/lib/ruby/gems/3.3.0/gems/sass-3.7.4/lib/sass/tree/visitors/perform.rb:440:in `block (2 levels) in visit_rule'
/home/jess/.asdf/installs/ruby/3.3.0/lib/ruby/gems/3.3.0/gems/sass-3.7.4/lib/sass/tree/visitors/perform.rb:440:in `map'
/home/jess/.asdf/installs/ruby/3.3.0/lib/ruby/gems/3.3.0/gems/sass-3.7.4/lib/sass/tree/visitors/perform.rb:440:in `block in visit_rule'
/home/jess/.asdf/installs/ruby/3.3.0/lib/ruby/gems/3.3.0/gems/sass-3.7.4/lib/sass/tree/visitors/perform.rb:179:in `with_environment'
/home/jess/.asdf/installs/ruby/3.3.0/lib/ruby/gems/3.3.0/gems/sass-3.7.4/lib/sass/tree/visitors/perform.rb:438:in `visit_rule'
/home/jess/.asdf/installs/ruby/3.3.0/lib/ruby/gems/3.3.0/gems/sass-3.7.4/lib/sass/tree/visitors/base.rb:36:in `visit'
/home/jess/.asdf/installs/ruby/3.3.0/lib/ruby/gems/3.3.0/gems/sass-3.7.4/lib/sass/tree/visitors/perform.rb:158:in `block in visit'
/home/jess/.asdf/installs/ruby/3.3.0/lib/ruby/gems/3.3.0/gems/sass-3.7.4/lib/sass/stack.rb:79:in `block in with_base'
/home/jess/.asdf/installs/ruby/3.3.0/lib/ruby/gems/3.3.0/gems/sass-3.7.4/lib/sass/stack.rb:135:in `with_frame'
/home/jess/.asdf/installs/ruby/3.3.0/lib/ruby/gems/3.3.0/gems/sass-3.7.4/lib/sass/stack.rb:79:in `with_base'
/home/jess/.asdf/installs/ruby/3.3.0/lib/ruby/gems/3.3.0/gems/sass-3.7.4/lib/sass/tree/visitors/perform.rb:158:in `visit'
/home/jess/.asdf/installs/ruby/3.3.0/lib/ruby/gems/3.3.0/gems/sass-3.7.4/lib/sass/tree/visitors/perform.rb:325:in `block (2 levels) in visit_import'
/home/jess/.asdf/installs/ruby/3.3.0/lib/ruby/gems/3.3.0/gems/sass-3.7.4/lib/sass/tree/visitors/perform.rb:325:in `map'
/home/jess/.asdf/installs/ruby/3.3.0/lib/ruby/gems/3.3.0/gems/sass-3.7.4/lib/sass/tree/visitors/perform.rb:325:in `block in visit_import'
/home/jess/.asdf/installs/ruby/3.3.0/lib/ruby/gems/3.3.0/gems/sass-3.7.4/lib/sass/stack.rb:88:in `block in with_import'
/home/jess/.asdf/installs/ruby/3.3.0/lib/ruby/gems/3.3.0/gems/sass-3.7.4/lib/sass/stack.rb:135:in `with_frame'
/home/jess/.asdf/installs/ruby/3.3.0/lib/ruby/gems/3.3.0/gems/sass-3.7.4/lib/sass/stack.rb:88:in `with_import'
/home/jess/.asdf/installs/ruby/3.3.0/lib/ruby/gems/3.3.0/gems/sass-3.7.4/lib/sass/tree/visitors/perform.rb:322:in `visit_import'
/home/jess/.asdf/installs/ruby/3.3.0/lib/ruby/gems/3.3.0/gems/sass-3.7.4/lib/sass/tree/visitors/base.rb:36:in `visit'
/home/jess/.asdf/installs/ruby/3.3.0/lib/ruby/gems/3.3.0/gems/sass-3.7.4/lib/sass/tree/visitors/perform.rb:158:in `block in visit'
/home/jess/.asdf/installs/ruby/3.3.0/lib/ruby/gems/3.3.0/gems/sass-3.7.4/lib/sass/stack.rb:79:in `block in with_base'
/home/jess/.asdf/installs/ruby/3.3.0/lib/ruby/gems/3.3.0/gems/sass-3.7.4/lib/sass/stack.rb:135:in `with_frame'
/home/jess/.asdf/installs/ruby/3.3.0/lib/ruby/gems/3.3.0/gems/sass-3.7.4/lib/sass/stack.rb:79:in `with_base'
/home/jess/.asdf/installs/ruby/3.3.0/lib/ruby/gems/3.3.0/gems/sass-3.7.4/lib/sass/tree/visitors/perform.rb:158:in `visit'
/home/jess/.asdf/installs/ruby/3.3.0/lib/ruby/gems/3.3.0/gems/sass-3.7.4/lib/sass/tree/visitors/base.rb:52:in `block in visit_children'
/home/jess/.asdf/installs/ruby/3.3.0/lib/ruby/gems/3.3.0/gems/sass-3.7.4/lib/sass/tree/visitors/base.rb:52:in `map'
/home/jess/.asdf/installs/ruby/3.3.0/lib/ruby/gems/3.3.0/gems/sass-3.7.4/lib/sass/tree/visitors/base.rb:52:in `visit_children'
/home/jess/.asdf/installs/ruby/3.3.0/lib/ruby/gems/3.3.0/gems/sass-3.7.4/lib/sass/tree/visitors/perform.rb:167:in `block in visit_children'
/home/jess/.asdf/installs/ruby/3.3.0/lib/ruby/gems/3.3.0/gems/sass-3.7.4/lib/sass/tree/visitors/perform.rb:179:in `with_environment'
/home/jess/.asdf/installs/ruby/3.3.0/lib/ruby/gems/3.3.0/gems/sass-3.7.4/lib/sass/tree/visitors/perform.rb:166:in `visit_children'
/home/jess/.asdf/installs/ruby/3.3.0/lib/ruby/gems/3.3.0/gems/sass-3.7.4/lib/sass/tree/visitors/base.rb:36:in `block in visit'
/home/jess/.asdf/installs/ruby/3.3.0/lib/ruby/gems/3.3.0/gems/sass-3.7.4/lib/sass/tree/visitors/perform.rb:186:in `visit_root'
/home/jess/.asdf/installs/ruby/3.3.0/lib/ruby/gems/3.3.0/gems/sass-3.7.4/lib/sass/tree/visitors/base.rb:36:in `visit'
/home/jess/.asdf/installs/ruby/3.3.0/lib/ruby/gems/3.3.0/gems/sass-3.7.4/lib/sass/tree/visitors/perform.rb:157:in `visit'
/home/jess/.asdf/installs/ruby/3.3.0/lib/ruby/gems/3.3.0/gems/sass-3.7.4/lib/sass/tree/visitors/perform.rb:10:in `visit'
/home/jess/.asdf/installs/ruby/3.3.0/lib/ruby/gems/3.3.0/gems/sass-3.7.4/lib/sass/tree/root_node.rb:36:in `css_tree'
/home/jess/.asdf/installs/ruby/3.3.0/lib/ruby/gems/3.3.0/gems/sass-3.7.4/lib/sass/tree/root_node.rb:20:in `render'
/home/jess/.asdf/installs/ruby/3.3.0/lib/ruby/gems/3.3.0/gems/sass-3.7.4/lib/sass/engine.rb:290:in `render'
/home/jess/.asdf/installs/ruby/3.3.0/lib/ruby/gems/3.3.0/gems/sass-3.7.4/lib/sass/exec/sass_scss.rb:396:in `run'
/home/jess/.asdf/installs/ruby/3.3.0/lib/ruby/gems/3.3.0/gems/sass-3.7.4/lib/sass/exec/sass_scss.rb:63:in `process_result'
/home/jess/.asdf/installs/ruby/3.3.0/lib/ruby/gems/3.3.0/gems/sass-3.7.4/lib/sass/exec/base.rb:50:in `parse'
/home/jess/.asdf/installs/ruby/3.3.0/lib/ruby/gems/3.3.0/gems/sass-3.7.4/lib/sass/exec/base.rb:18:in `parse!'
/home/jess/.asdf/installs/ruby/3.3.0/lib/ruby/gems/3.3.0/gems/sass-3.7.4/bin/sass:13:in `<top (required)>'
/home/jess/.asdf/installs/ruby/3.3.0/bin/sass:25:in `load'
/home/jess/.asdf/installs/ruby/3.3.0/bin/sass:25:in `<main>'
*/
body:before {
white-space: pre;
font-family: monospace;
content: "Error: wrong number of arguments (1 for 3) for `rgb'\A on line 242 of main.scss\A from line 5 of style.scss"; }

View file

@ -0,0 +1,9 @@
@import 'buttons';
@import 'header';
@import 'logo';
@import 'main';
@import 'post';
@import 'pagination';
@import 'footer';
@import 'home';

View file

View file

@ -0,0 +1,2 @@
$phone-max-width: 683px;
$tablet-max-width: 899px;

713
assets/css/style.css Normal file
View file

@ -0,0 +1,713 @@
@charset "UTF-8";
.button-container {
display: table;
margin-left: auto;
margin-right: auto;
}
button,
.button,
a.button {
position: relative;
display: flex;
align-items: center;
justify-content: center;
padding: 8px 18px;
margin-bottom: 5px;
text-align: center;
border-radius: 8px;
border: 1px solid transparent;
appearance: none;
cursor: pointer;
outline: none;
/* variants */
/* sizes */
}
button.outline,
.button.outline,
a.button.outline {
background: transparent;
box-shadow: none;
padding: 8px 18px;
}
button.outline :hover,
.button.outline :hover,
a.button.outline :hover {
transform: none;
box-shadow: none;
}
button.primary,
.button.primary,
a.button.primary {
box-shadow:
0 4px 6px rgba(50, 50, 93, 0.11),
0 1px 3px rgba(0, 0, 0, 0.08);
}
button.primary:hover,
.button.primary:hover,
a.button.primary:hover {
box-shadow:
0 2px 6px rgba(50, 50, 93, 0.21),
0 1px 3px rgba(0, 0, 0, 0.08);
}
button.link,
.button.link,
a.button.link {
background: none;
font-size: 1rem;
}
button.small,
.button.small,
a.button.small {
font-size: 0.8rem;
}
button.wide,
.button.wide,
a.button.wide {
min-width: 200px;
padding: 14px 24px;
}
a.read-more,
a.read-more:hover,
a.read-more:active {
display: inline-flex;
background: none;
box-shadow: none;
padding: 0;
margin: 20px 0;
max-width: 100%;
}
.code-toolbar {
margin-bottom: 20px;
}
.code-toolbar .toolbar-item a {
position: relative;
display: inline-flex;
align-items: center;
justify-content: center;
padding: 3px 8px;
margin-bottom: 5px;
text-align: center;
font-size: 13px;
font-weight: 500;
border-radius: 8px;
border: 1px solid transparent;
appearance: none;
cursor: pointer;
outline: none;
}
.header {
display: flex;
flex-direction: column;
position: relative;
}
.header__inner {
display: flex;
align-items: center;
justify-content: space-between;
}
.header__logo {
display: flex;
flex: 1;
}
.header__logo:after {
content: "";
background: repeating-linear-gradient(
90deg,
var(--accent),
var(--accent) 2px,
transparent 0,
transparent 16px
);
display: block;
width: 100%;
right: 10px;
}
.header__logo a {
flex: 0 0 auto;
max-width: 100%;
}
.header .menu {
margin: 20px 0;
}
.header .menu__inner {
display: flex;
flex-wrap: wrap;
list-style: none;
margin: 0;
padding: 0;
}
.header .menu__inner li.active {
color: var(--accent-alpha-70);
}
.header .menu__inner li:not(:last-of-type) {
margin-right: 20px;
margin-bottom: 10px;
flex: 0 0 auto;
}
.header .menu__sub-inner {
position: relative;
list-style: none;
padding: 0;
margin: 0;
}
.header .menu__sub-inner:not(:only-child) {
margin-left: 20px;
}
.header .menu__sub-inner-more {
position: absolute;
background: var(--background);
box-shadow: var(--shadow);
color: white;
border: 2px solid;
margin: 0;
padding: 10px;
list-style: none;
z-index: 99;
top: 35px;
left: 0;
}
.header .menu__sub-inner-more-trigger {
color: var(--accent);
user-select: none;
cursor: pointer;
}
.header .menu__sub-inner-more li {
margin: 0;
padding: 5px;
white-space: nowrap;
}
.logo {
display: flex;
align-items: center;
text-decoration: none;
background: var(--accent);
color: black;
padding: 5px 10px;
}
html {
box-sizing: border-box;
}
*,
*:before,
*:after {
box-sizing: inherit;
}
body {
margin: 0;
padding: 0;
font-family:
Hack,
DejaVu Sans Mono,
Monaco,
Consolas,
Ubuntu Mono,
monospace;
font-size: 1rem;
line-height: 1.54;
color: var(--color);
text-rendering: optimizeLegibility;
-webkit-font-smoothing: antialiased;
-webkit-overflow-scrolling: touch;
-webkit-text-size-adjust: 100%;
}
@media (max-width: 683px) {
body {
font-size: 1rem;
}
}
.bg {
background: radial-gradient(at right top, #f68ef0, #74b9df);
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
min-height: 100vh;
min-height: 100dvh;
z-index: -1;
}
h1,
h2,
h3,
h4,
h5,
h6 {
display: flex;
align-items: center;
font-weight: bold;
line-height: 1.3;
}
h1 {
font-size: 1.4rem;
}
h2 {
font-size: 1.3rem;
}
h3 {
font-size: 1.2rem;
}
h4,
h5,
h6 {
font-size: 1.15rem;
}
a {
color: inherit;
}
img {
display: block;
max-width: 100%;
}
img.left {
margin-right: auto;
}
img.center {
margin-left: auto;
margin-right: auto;
}
img.right {
margin-left: auto;
}
p {
margin-bottom: 20px;
}
figure {
display: table;
max-width: 100%;
margin: 25px 0;
}
figure.left,
figure img {
margin-right: auto;
}
figure.center,
figure img {
margin-left: auto;
margin-right: auto;
}
figure.right,
figure img {
margin-left: auto;
}
figure figcaption {
font-size: 14px;
padding: 5px 10px;
margin-top: 5px;
background: var(--accent);
color: var(--background);
}
figure figcaption.left {
text-align: left;
}
figure figcaption.center {
text-align: center;
}
figure figcaption.right {
text-align: right;
}
code {
font-family:
Hack,
DejaVu Sans Mono,
Monaco,
Consolas,
Ubuntu Mono,
monospace;
font-feature-settings: normal;
background: var(--accent-alpha-20);
padding: 1px 6px;
margin: 0 2px;
font-size: 0.95rem;
}
pre {
font-family:
Hack,
DejaVu Sans Mono,
Monaco,
Consolas,
Ubuntu Mono,
monospace;
padding: 20px;
font-size: 0.95rem;
overflow: auto;
border-top: 1px solid rgba(255, 255, 255, 0.1);
border-bottom: 1px solid rgba(255, 255, 255, 0.1);
}
@media (max-width: 683px) {
pre {
white-space: pre-wrap;
word-wrap: break-word;
}
}
pre code {
padding: 0;
margin: 0;
background: none;
}
blockquote {
border-top: 1px solid var(--accent);
border-bottom: 1px solid var(--accent);
margin: 40px 0;
padding: 25px;
}
@media (max-width: 683px) {
blockquote {
padding-right: 0;
}
}
blockquote:before {
content: "”";
font-family: Georgia, serif;
font-size: 3.875rem;
position: absolute;
left: -40px;
top: -20px;
}
blockquote p:first-of-type {
margin-top: 0;
}
blockquote p:last-of-type {
margin-bottom: 0;
}
blockquote p {
position: relative;
}
blockquote p:before {
content: ">";
display: block;
position: absolute;
left: -25px;
color: var(--accent);
}
table {
table-layout: fixed;
border-collapse: collapse;
width: 100%;
margin: 40px 0;
}
table,
th,
td {
border: 1px dashed var(--accent);
padding: 10px;
}
th {
color: var(--accent);
}
ul,
ol {
margin-left: 30px;
padding: 0;
}
ul li,
ol li {
position: relative;
}
@media (max-width: 683px) {
ul,
ol {
margin-left: 20px;
}
}
ol ol {
list-style-type: lower-alpha;
}
.container {
display: flex;
flex-direction: column;
padding: 40px;
max-width: 864px;
margin: 2em auto;
background: rgba(0, 0, 0, 0.4);
}
@media (max-width: 683px) {
.container {
padding: 20px;
margin: 0 auto;
}
}
.content {
display: flex;
}
hr {
width: 100%;
border: none;
background: var(--border-color);
height: 1px;
}
.hidden {
display: none;
}
.posts {
width: 100%;
margin: 0 auto;
}
.post {
width: 100%;
text-align: left;
margin: 20px auto;
padding: 20px 0;
}
@media (max-width: 899px) {
.post {
max-width: 660px;
}
}
.post:not(:last-of-type) {
border-bottom: 1px solid var(--border-color);
}
.post .post-meta-inline,
.post .post-meta {
font-size: 1rem;
margin-bottom: 10px;
color: var(--accent-alpha-70);
}
.post-meta-inline {
display: inline;
}
.post-title {
--border: 2px dashed var(--accent);
position: relative;
color: var(--accent);
margin: 0 0 15px;
padding-bottom: 15px;
border-bottom: var(--border);
font-weight: normal;
}
.post-title a {
text-decoration: none;
}
.post .post-tags-inline,
.post .post-tags {
margin-bottom: 20px;
font-size: 1rem;
opacity: 0.5;
}
.post-tags {
display: block;
}
.post-tags-inline {
display: inline;
}
@media (max-width: 683px) {
.post-tags-inline {
display: block;
}
}
.post-content {
margin-top: 30px;
}
.post-cover {
border: 20px solid var(--accent);
background: transparent;
margin: 40px 0;
padding: 20px;
}
@media (max-width: 683px) {
.post-cover {
padding: 10px;
border-width: 10px;
}
}
.post ul {
list-style: none;
}
.post ul li:before {
content: "►";
position: absolute;
left: -20px;
color: var(--accent);
}
.post--regulation h1 {
justify-content: center;
}
.post--regulation h2 {
justify-content: center;
margin-bottom: 10px;
}
.post--regulation h2 + h2 {
margin-top: -10px;
margin-bottom: 20px;
}
.post-list .post-date {
color: var(--accent);
text-decoration: none;
}
.post-list a {
text-decoration: none;
}
.post-list .post-list-title {
text-decoration: underline;
}
.post-list .post-tag {
text-decoration: underline;
}
.pagination {
margin-top: 50px;
}
.pagination__title {
display: flex;
text-align: center;
position: relative;
margin: 100px 0 20px;
}
.pagination__title-h {
text-align: center;
margin: 0 auto;
padding: 5px 10px;
background: var(--background);
font-size: 0.8rem;
text-transform: uppercase;
letter-spacing: 0.1em;
z-index: 1;
}
.pagination__title hr {
position: absolute;
left: 0;
right: 0;
width: 100%;
margin-top: 15px;
z-index: 0;
}
.pagination__buttons {
display: flex;
align-items: center;
justify-content: center;
}
@media (max-width: 683px) {
.pagination__buttons {
flex-direction: column;
}
}
.button {
position: relative;
display: inline-flex;
align-items: center;
justify-content: center;
font-size: 1rem;
border-radius: 8px;
max-width: 40%;
padding: 0;
cursor: pointer;
appearance: none;
}
@media (max-width: 683px) {
.button {
max-width: 80%;
}
}
.button + .button {
margin-left: 10px;
}
.button a {
display: flex;
padding: 8px 16px;
text-overflow: ellipsis;
white-space: nowrap;
overflow: hidden;
}
.button__text {
text-overflow: ellipsis;
white-space: nowrap;
overflow: hidden;
}
.footer {
flex-grow: 0;
opacity: 0.5;
}
.footer__inner {
display: flex;
align-items: center;
justify-content: space-between;
margin: 0;
width: 760px;
max-width: 100%;
}
@media (max-width: 899px) {
.footer__inner {
flex-direction: column;
}
}
.footer a {
color: inherit;
}
.footer .copyright {
display: flex;
flex-direction: row;
align-items: center;
font-size: 1rem;
}
.footer .copyright--user {
margin: auto;
text-align: center;
}
.footer .copyright > *:first-child:not(:only-child) {
margin-right: 10px;
}
@media (max-width: 899px) {
.footer .copyright > *:first-child:not(:only-child) {
border: none;
padding: 0;
margin: 0;
}
}
@media (max-width: 899px) {
.footer .copyright {
flex-direction: column;
margin-top: 10px;
}
}
@media (max-width: 899px) {
.footer .copyright-theme-sep {
display: none;
}
}
@media (max-width: 899px) {
.footer .copyright-theme {
font-size: 0.75rem;
}
}
div.homepage {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(20em, 1fr));
grid-gap: 3em;
}

1
assets/css/variables.css Normal file
View file

@ -0,0 +1 @@

View file

@ -58,7 +58,8 @@ config :jol, JOLWeb.Endpoint,
patterns: [ patterns: [
~r"priv/static/(?!uploads/).*(js|css|png|jpeg|jpg|gif|svg)$", ~r"priv/static/(?!uploads/).*(js|css|png|jpeg|jpg|gif|svg)$",
~r"priv/gettext/.*(po)$", ~r"priv/gettext/.*(po)$",
~r"lib/jol_web/(controllers|live|components)/.*(ex|heex)$" ~r"lib/jol_web/(controllers|live|components)/.*(ex|heex)$",
~r"posts/*/.*(md)$"
] ]
] ]

View file

@ -1,14 +1,38 @@
defmodule JOL.Blog do defmodule JOL.Blog do
<<<<<<< HEAD
alias JOL.Blog.Post alias JOL.Blog.Post
alias JOL.Blog.Parser
=======
defmodule NotFoundError do
defexception [:message, plug_status: 404]
end
>>>>>>> 77c7828 (Add controllers/templates to show blog posts.)
use NimblePublisher, use NimblePublisher,
build: Post, build: JOL.Blog.Post,
from: Application.app_dir(:jol, "priv/posts/**/*.md"), from: Application.app_dir(:jol, "priv/posts/**/*.md"),
as: :posts parser: Parser,
as: :posts,
@posts Enum.sort_by(@posts, & &1.date, {:desc, Date}) @posts Enum.sort_by(@posts, & &1.date, {:desc, Date})
@tags @posts |> Enum.flat_map(& &1.tags) |> Enum.uniq() |> Enum.sort() @tags @posts |> Enum.flat_map(& &1.tags) |> Enum.uniq() |> Enum.sort()
def posts, do: @posts def all_posts, do: @posts
def unique_tag_list, do: @tags def unique_tag_list, do: @tags
def recent_posts(num \\ 10) do
Enum.take(all_posts(), num)
end
def get_post_by_slug!(slug) do
Enum.find(all_posts(), &(&1.slug == slug)) ||
raise NotFoundError, "post ``slug=#{slug}` not found"
end
def get_posts_by_tag!(tag) do
case Enum.filter(all_posts(), &(tag in &1.tags)) do
[] -> raise NotFoundError, "posts tagged `#{tag}` not found"
posts -> posts
end
end
end end

View file

@ -24,7 +24,8 @@ defmodule JOL.Blog.Parser do
title: toml_attrs["title"], title: toml_attrs["title"],
draft: toml_attrs["draft"], draft: toml_attrs["draft"],
tags: toml_attrs["taxonomies"]["tags"], tags: toml_attrs["taxonomies"]["tags"],
date: toml_attrs["date"] date: toml_attrs["date"],
slug: toml_attrs["slug"]
} }
parsed_body = String.trim(body) parsed_body = String.trim(body)

8
lib/jol/blog/post.ex Normal file
View file

@ -0,0 +1,8 @@
defmodule JOL.Blog.Post do
@enforce_keys [:author, :title, :body, :tags, :date, :slug]
defstruct [:author, :draft, :title, :body, :tags, :date, :slug]
def build(_filename, attrs, body) do
struct!(__MODULE__, [author: "Jessica Phoenix Canady", body: body] ++ Map.to_list(attrs))
end
end

View file

@ -1,32 +1,41 @@
<header class="px-4 sm:px-6 lg:px-8"> <div class="bg"></div>
<div class="flex items-center justify-between border-b border-zinc-100 py-3 text-sm"> <div class="container">
<div class="flex items-center gap-4">
<a href="/"> <header class="header">
<img src={~p"/images/logo.svg"} width="36" /> <div class="header__inner">
</a> <div class="header__logo">
<p class="bg-brand/5 text-brand rounded-full px-2 font-medium leading-6"> <a href="https://jess.canady.tech/" style="text-decoration: none;">
v<%= Application.spec(:phoenix, :vsn) %> <div class="logo">
</p> Jessica Pheonix Canady
</div> </div>
<div class="flex items-center gap-4 font-semibold leading-6 text-zinc-900">
<a href="https://twitter.com/elixirphoenix" class="hover:text-zinc-700">
@elixirphoenix
</a>
<a href="https://github.com/phoenixframework/phoenix" class="hover:text-zinc-700">
GitHub
</a>
<a
href="https://hexdocs.pm/phoenix/overview.html"
class="rounded-lg bg-zinc-100 px-2 py-1 hover:bg-zinc-200/80"
>
Get Started <span aria-hidden="true">&rarr;</span>
</a> </a>
</div> </div>
</div> </div>
<nav class="menu">
<ul class="menu__inner">
<li class="active"><a href="">home</a></li>
<li><a href={~p"/tags/"}>tags</a></li>
<li><a href={~p"/archive/"}>blog archive</a></li>
<li><a href={~p"/about/"}>about</a></li>
<li><a href={~p"/now/"}>now</a></li>
<li><a href="https://forge.sigill.zone/phoenix/">code</a></li>
<li><a href="https://silicorn.social/@jess/">mastodon</a></li>
<li><a href="#">rss</a></li>
</ul>
</nav>
</header> </header>
<main class="px-4 py-20 sm:px-6 lg:px-8">
<div class="mx-auto max-w-2xl"> <div class="content">
<.flash_group flash={@flash} />
<%= @inner_content %> <%= @inner_content %>
</div> </div>
</main>
<footer class="footer">
<div class="footer__inner">
<div class="copyright copyright--user">
Built with trans dork love.
</div>
</div>
</footer>
</div>

Some files were not shown because too many files have changed in this diff Show more