Compare commits

..

8 commits

110 changed files with 3590 additions and 263 deletions

View file

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

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

@ -1,13 +1,18 @@
defmodule JOL.Blog do
<<<<<<< HEAD
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,
build: JOL.Blog.Post,
from: Application.app_dir(:jol, "priv/posts/**/*.md"),
parser: Parser,
as: :posts,
parser: JOL.Blog.Parser
@posts Enum.sort_by(@posts, & &1.date, {:desc, Date})
@tags @posts |> Enum.flat_map(& &1.tags) |> Enum.uniq() |> Enum.sort()

View file

@ -1,32 +1,41 @@
<header class="px-4 sm:px-6 lg:px-8">
<div class="flex items-center justify-between border-b border-zinc-100 py-3 text-sm">
<div class="flex items-center gap-4">
<a href="/">
<img src={~p"/images/logo.svg"} width="36" />
</a>
<p class="bg-brand/5 text-brand rounded-full px-2 font-medium leading-6">
v<%= Application.spec(:phoenix, :vsn) %>
</p>
<div class="bg"></div>
<div class="container">
<header class="header">
<div class="header__inner">
<div class="header__logo">
<a href="https://jess.canady.tech/" style="text-decoration: none;">
<div class="logo">
Jessica Pheonix Canady
</div>
</a>
</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>
</div>
</div>
</header>
<main class="px-4 py-20 sm:px-6 lg:px-8">
<div class="mx-auto max-w-2xl">
<.flash_group flash={@flash} />
<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>
<div class="content">
<%= @inner_content %>
</div>
</main>
<footer class="footer">
<div class="footer__inner">
<div class="copyright copyright--user">
Built with trans dork love.
</div>
</div>
</footer>
</div>

View file

@ -4,14 +4,14 @@
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="csrf-token" content={get_csrf_token()} />
<.live_title suffix=" · Phoenix Framework">
<%= assigns[:page_title] || "JOL" %>
<.live_title suffix=" · Jessica OnLine">
<%= assigns[:page_title] || "Jess Forgot To Name This Page!" %>
</.live_title>
<link phx-track-static rel="stylesheet" href={~p"/assets/app.css"} />
<script defer phx-track-static type="text/javascript" src={~p"/assets/app.js"}>
</script>
<script defer phx-track-static type="text/javascript" src={~p"/assets/app.js"}> </script>
</head>
<body class="bg-white antialiased">
<body class="">
<%= @inner_content %>
</body>
</html>

View file

@ -1,9 +1,22 @@
defmodule JOLWeb.PageController do
require Logger
use JOLWeb, :controller
@spec home(Plug.Conn.t(), any()) :: Plug.Conn.t()
def home(conn, _params) do
# The home page is often custom made,
# so skip the default app layout.
render(conn, :home, layout: false)
conn
|> assign(:page_title, "Home")
|> render(:home)
end
@spec tags(Plug.Conn.t(), any()) :: Plug.Conn.t()
def tags(conn, _params) do
Logger.debug(JOL.Blog.posts())
Logger.debug(JOL.Blog.unique_tag_list())
conn
|> assign(:tags, JOL.Blog.unique_tag_list())
|> assign(:page_title, "Post Tags")
|> render(:tags)
end
end

View file

@ -1,222 +1,13 @@
<.flash_group flash={@flash} />
<div class="left-[40rem] fixed inset-y-0 right-0 z-0 hidden lg:block xl:left-[50rem]">
<svg
viewBox="0 0 1480 957"
fill="none"
aria-hidden="true"
class="absolute inset-0 h-full w-full"
preserveAspectRatio="xMinYMid slice"
>
<path fill="#EE7868" d="M0 0h1480v957H0z" />
<path
d="M137.542 466.27c-582.851-48.41-988.806-82.127-1608.412 658.2l67.39 810 3083.15-256.51L1535.94-49.622l-98.36 8.183C1269.29 281.468 734.115 515.799 146.47 467.012l-8.928-.742Z"
fill="#FF9F92"
/>
<path
d="M371.028 528.664C-169.369 304.988-545.754 149.198-1361.45 665.565l-182.58 792.025 3014.73 694.98 389.42-1689.25-96.18-22.171C1505.28 697.438 924.153 757.586 379.305 532.09l-8.277-3.426Z"
fill="#FA8372"
/>
<path
d="M359.326 571.714C-104.765 215.795-428.003-32.102-1349.55 255.554l-282.3 1224.596 3047.04 722.01 312.24-1354.467C1411.25 1028.3 834.355 935.995 366.435 577.166l-7.109-5.452Z"
fill="#E96856"
fill-opacity=".6"
/>
<path
d="M1593.87 1236.88c-352.15 92.63-885.498-145.85-1244.602-613.557l-5.455-7.105C-12.347 152.31-260.41-170.8-1225-131.458l-368.63 1599.048 3057.19 704.76 130.31-935.47Z"
fill="#C42652"
fill-opacity=".2"
/>
<path
d="M1411.91 1526.93c-363.79 15.71-834.312-330.6-1085.883-863.909l-3.822-8.102C72.704 125.95-101.074-242.476-1052.01-408.907l-699.85 1484.267 2837.75 1338.01 326.02-886.44Z"
fill="#A41C42"
fill-opacity=".2"
/>
<path
d="M1116.26 1863.69c-355.457-78.98-720.318-535.27-825.287-1115.521l-1.594-8.816C185.286 163.833 112.786-237.016-762.678-643.898L-1822.83 608.665 571.922 2635.55l544.338-771.86Z"
fill="#A41C42"
fill-opacity=".2"
/>
</svg>
</div>
<div class="px-4 py-10 sm:px-6 sm:py-28 lg:px-8 xl:px-28 xl:py-32">
<div class="mx-auto max-w-xl lg:mx-0">
<svg viewBox="0 0 71 48" class="h-12" aria-hidden="true">
<path
d="m26.371 33.477-.552-.1c-3.92-.729-6.397-3.1-7.57-6.829-.733-2.324.597-4.035 3.035-4.148 1.995-.092 3.362 1.055 4.57 2.39 1.557 1.72 2.984 3.558 4.514 5.305 2.202 2.515 4.797 4.134 8.347 3.634 3.183-.448 5.958-1.725 8.371-3.828.363-.316.761-.592 1.144-.886l-.241-.284c-2.027.63-4.093.841-6.205.735-3.195-.16-6.24-.828-8.964-2.582-2.486-1.601-4.319-3.746-5.19-6.611-.704-2.315.736-3.934 3.135-3.6.948.133 1.746.56 2.463 1.165.583.493 1.143 1.015 1.738 1.493 2.8 2.25 6.712 2.375 10.265-.068-5.842-.026-9.817-3.24-13.308-7.313-1.366-1.594-2.7-3.216-4.095-4.785-2.698-3.036-5.692-5.71-9.79-6.623C12.8-.623 7.745.14 2.893 2.361 1.926 2.804.997 3.319 0 4.149c.494 0 .763.006 1.032 0 2.446-.064 4.28 1.023 5.602 3.024.962 1.457 1.415 3.104 1.761 4.798.513 2.515.247 5.078.544 7.605.761 6.494 4.08 11.026 10.26 13.346 2.267.852 4.591 1.135 7.172.555ZM10.751 3.852c-.976.246-1.756-.148-2.56-.962 1.377-.343 2.592-.476 3.897-.528-.107.848-.607 1.306-1.336 1.49Zm32.002 37.924c-.085-.626-.62-.901-1.04-1.228-1.857-1.446-4.03-1.958-6.333-2-1.375-.026-2.735-.128-4.031-.61-.595-.22-1.26-.505-1.244-1.272.015-.78.693-1 1.31-1.184.505-.15 1.026-.247 1.6-.382-1.46-.936-2.886-1.065-4.787-.3-2.993 1.202-5.943 1.06-8.926-.017-1.684-.608-3.179-1.563-4.735-2.408l-.043.03a2.96 2.96 0 0 0 .04-.029c-.038-.117-.107-.12-.197-.054l.122.107c1.29 2.115 3.034 3.817 5.004 5.271 3.793 2.8 7.936 4.471 12.784 3.73A66.714 66.714 0 0 1 37 40.877c1.98-.16 3.866.398 5.753.899Zm-9.14-30.345c-.105-.076-.206-.266-.42-.069 1.745 2.36 3.985 4.098 6.683 5.193 4.354 1.767 8.773 2.07 13.293.51 3.51-1.21 6.033-.028 7.343 3.38.19-3.955-2.137-6.837-5.843-7.401-2.084-.318-4.01.373-5.962.94-5.434 1.575-10.485.798-15.094-2.553Zm27.085 15.425c.708.059 1.416.123 2.124.185-1.6-1.405-3.55-1.517-5.523-1.404-3.003.17-5.167 1.903-7.14 3.972-1.739 1.824-3.31 3.87-5.903 4.604.043.078.054.117.066.117.35.005.699.021 1.047.005 3.768-.17 7.317-.965 10.14-3.7.89-.86 1.685-1.817 2.544-2.71.716-.746 1.584-1.159 2.645-1.07Zm-8.753-4.67c-2.812.246-5.254 1.409-7.548 2.943-1.766 1.18-3.654 1.738-5.776 1.37-.374-.066-.75-.114-1.124-.17l-.013.156c.135.07.265.151.405.207.354.14.702.308 1.07.395 4.083.971 7.992.474 11.516-1.803 2.221-1.435 4.521-1.707 7.013-1.336.252.038.503.083.756.107.234.022.479.255.795.003-2.179-1.574-4.526-2.096-7.094-1.872Zm-10.049-9.544c1.475.051 2.943-.142 4.486-1.059-.452.04-.643.04-.827.076-2.126.424-4.033-.04-5.733-1.383-.623-.493-1.257-.974-1.889-1.457-2.503-1.914-5.374-2.555-8.514-2.5.05.154.054.26.108.315 3.417 3.455 7.371 5.836 12.369 6.008Zm24.727 17.731c-2.114-2.097-4.952-2.367-7.578-.537 1.738.078 3.043.632 4.101 1.728.374.388.763.768 1.182 1.106 1.6 1.29 4.311 1.352 5.896.155-1.861-.726-1.861-.726-3.601-2.452Zm-21.058 16.06c-1.858-3.46-4.981-4.24-8.59-4.008a9.667 9.667 0 0 1 2.977 1.39c.84.586 1.547 1.311 2.243 2.055 1.38 1.473 3.534 2.376 4.962 2.07-.656-.412-1.238-.848-1.592-1.507Zm17.29-19.32c0-.023.001-.045.003-.068l-.006.006.006-.006-.036-.004.021.018.012.053Zm-20 14.744a7.61 7.61 0 0 0-.072-.041.127.127 0 0 0 .015.043c.005.008.038 0 .058-.002Zm-.072-.041-.008-.034-.008.01.008-.01-.022-.006.005.026.024.014Z"
fill="#FD4F00"
/>
</svg>
<h1 class="text-brand mt-10 flex items-center text-sm font-semibold leading-6">
Phoenix Framework
<small class="bg-brand/5 text-[0.8125rem] ml-3 rounded-full px-2 font-medium leading-6">
v<%= Application.spec(:phoenix, :vsn) %>
</small>
</h1>
<p class="text-[2rem] mt-4 font-semibold leading-10 tracking-tighter text-zinc-900 text-balance">
Peace of mind from prototype to production.
</p>
<p class="mt-4 text-base leading-7 text-zinc-600">
Build rich, interactive web applications quickly, with less code and fewer moving parts. Join our growing community of developers using Phoenix to craft APIs, HTML5 apps and more, for fun or at scale.
</p>
<div class="flex">
<div class="w-full sm:w-auto">
<div class="mt-10 grid grid-cols-1 gap-x-6 gap-y-4 sm:grid-cols-3">
<a
href="https://hexdocs.pm/phoenix/overview.html"
class="group relative rounded-2xl px-6 py-4 text-sm font-semibold leading-6 text-zinc-900 sm:py-6"
>
<span class="absolute inset-0 rounded-2xl bg-zinc-50 transition group-hover:bg-zinc-100 sm:group-hover:scale-105">
</span>
<span class="relative flex items-center gap-4 sm:flex-col">
<svg viewBox="0 0 24 24" fill="none" aria-hidden="true" class="h-6 w-6">
<path d="m12 4 10-2v18l-10 2V4Z" fill="#18181B" fill-opacity=".15" />
<path
d="M12 4 2 2v18l10 2m0-18v18m0-18 10-2v18l-10 2"
stroke="#18181B"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
/>
</svg>
Guides &amp; Docs
</span>
</a>
<a
href="https://github.com/phoenixframework/phoenix"
class="group relative rounded-2xl px-6 py-4 text-sm font-semibold leading-6 text-zinc-900 sm:py-6"
>
<span class="absolute inset-0 rounded-2xl bg-zinc-50 transition group-hover:bg-zinc-100 sm:group-hover:scale-105">
</span>
<span class="relative flex items-center gap-4 sm:flex-col">
<svg viewBox="0 0 24 24" aria-hidden="true" class="h-6 w-6">
<path
fill-rule="evenodd"
clip-rule="evenodd"
d="M12 0C5.37 0 0 5.506 0 12.303c0 5.445 3.435 10.043 8.205 11.674.6.107.825-.262.825-.585 0-.292-.015-1.261-.015-2.291C6 21.67 5.22 20.346 4.98 19.654c-.135-.354-.72-1.446-1.23-1.738-.42-.23-1.02-.8-.015-.815.945-.015 1.62.892 1.845 1.261 1.08 1.86 2.805 1.338 3.495 1.015.105-.8.42-1.338.765-1.645-2.67-.308-5.46-1.37-5.46-6.075 0-1.338.465-2.446 1.23-3.307-.12-.308-.54-1.569.12-3.26 0 0 1.005-.323 3.3 1.26.96-.276 1.98-.415 3-.415s2.04.139 3 .416c2.295-1.6 3.3-1.261 3.3-1.261.66 1.691.24 2.952.12 3.26.765.861 1.23 1.953 1.23 3.307 0 4.721-2.805 5.767-5.475 6.075.435.384.81 1.122.81 2.276 0 1.645-.015 2.968-.015 3.383 0 .323.225.707.825.585a12.047 12.047 0 0 0 5.919-4.489A12.536 12.536 0 0 0 24 12.304C24 5.505 18.63 0 12 0Z"
fill="#18181B"
/>
</svg>
Source Code
</span>
</a>
<a
href={"https://github.com/phoenixframework/phoenix/blob/v#{Application.spec(:phoenix, :vsn)}/CHANGELOG.md"}
class="group relative rounded-2xl px-6 py-4 text-sm font-semibold leading-6 text-zinc-900 sm:py-6"
>
<span class="absolute inset-0 rounded-2xl bg-zinc-50 transition group-hover:bg-zinc-100 sm:group-hover:scale-105">
</span>
<span class="relative flex items-center gap-4 sm:flex-col">
<svg viewBox="0 0 24 24" fill="none" aria-hidden="true" class="h-6 w-6">
<path
d="M12 1v6M12 17v6"
stroke="#18181B"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
/>
<circle
cx="12"
cy="12"
r="4"
fill="#18181B"
fill-opacity=".15"
stroke="#18181B"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
/>
</svg>
Changelog
</span>
</a>
</div>
<div class="mt-10 grid grid-cols-1 gap-y-4 text-sm leading-6 text-zinc-700 sm:grid-cols-2">
<div>
<a
href="https://twitter.com/elixirphoenix"
class="group -mx-2 -my-0.5 inline-flex items-center gap-3 rounded-lg px-2 py-0.5 hover:bg-zinc-50 hover:text-zinc-900"
>
<svg
viewBox="0 0 16 16"
aria-hidden="true"
class="h-4 w-4 fill-zinc-400 group-hover:fill-zinc-600"
>
<path d="M5.403 14c5.283 0 8.172-4.617 8.172-8.62 0-.131 0-.262-.008-.391A6.033 6.033 0 0 0 15 3.419a5.503 5.503 0 0 1-1.65.477 3.018 3.018 0 0 0 1.263-1.676 5.579 5.579 0 0 1-1.824.736 2.832 2.832 0 0 0-1.63-.916 2.746 2.746 0 0 0-1.821.319A2.973 2.973 0 0 0 8.076 3.78a3.185 3.185 0 0 0-.182 1.938 7.826 7.826 0 0 1-3.279-.918 8.253 8.253 0 0 1-2.64-2.247 3.176 3.176 0 0 0-.315 2.208 3.037 3.037 0 0 0 1.203 1.836A2.739 2.739 0 0 1 1.56 6.22v.038c0 .7.23 1.377.65 1.919.42.54 1.004.912 1.654 1.05-.423.122-.866.14-1.297.052.184.602.541 1.129 1.022 1.506a2.78 2.78 0 0 0 1.662.598 5.656 5.656 0 0 1-2.007 1.074A5.475 5.475 0 0 1 1 12.64a7.827 7.827 0 0 0 4.403 1.358" />
</svg>
Follow on Twitter
</a>
</div>
<div>
<a
href="https://elixirforum.com"
class="group -mx-2 -my-0.5 inline-flex items-center gap-3 rounded-lg px-2 py-0.5 hover:bg-zinc-50 hover:text-zinc-900"
>
<svg
viewBox="0 0 16 16"
aria-hidden="true"
class="h-4 w-4 fill-zinc-400 group-hover:fill-zinc-600"
>
<path d="M8 13.833c3.866 0 7-2.873 7-6.416C15 3.873 11.866 1 8 1S1 3.873 1 7.417c0 1.081.292 2.1.808 2.995.606 1.05.806 2.399.086 3.375l-.208.283c-.285.386-.01.905.465.85.852-.098 2.048-.318 3.137-.81a3.717 3.717 0 0 1 1.91-.318c.263.027.53.041.802.041Z" />
</svg>
Discuss on the Elixir Forum
</a>
</div>
<div>
<a
href="https://web.libera.chat/#elixir"
class="group -mx-2 -my-0.5 inline-flex items-center gap-3 rounded-lg px-2 py-0.5 hover:bg-zinc-50 hover:text-zinc-900"
>
<svg
viewBox="0 0 16 16"
aria-hidden="true"
class="h-4 w-4 fill-zinc-400 group-hover:fill-zinc-600"
>
<path
fill-rule="evenodd"
clip-rule="evenodd"
d="M6.356 2.007a.75.75 0 0 1 .637.849l-1.5 10.5a.75.75 0 1 1-1.485-.212l1.5-10.5a.75.75 0 0 1 .848-.637ZM11.356 2.008a.75.75 0 0 1 .637.848l-1.5 10.5a.75.75 0 0 1-1.485-.212l1.5-10.5a.75.75 0 0 1 .848-.636Z"
/>
<path
fill-rule="evenodd"
clip-rule="evenodd"
d="M14 5.25a.75.75 0 0 1-.75.75h-9.5a.75.75 0 0 1 0-1.5h9.5a.75.75 0 0 1 .75.75ZM13 10.75a.75.75 0 0 1-.75.75h-9.5a.75.75 0 0 1 0-1.5h9.5a.75.75 0 0 1 .75.75Z"
/>
</svg>
Chat on Libera IRC
</a>
</div>
<div>
<a
href="https://discord.gg/elixir"
class="group -mx-2 -my-0.5 inline-flex items-center gap-3 rounded-lg px-2 py-0.5 hover:bg-zinc-50 hover:text-zinc-900"
>
<svg
viewBox="0 0 16 16"
aria-hidden="true"
class="h-4 w-4 fill-zinc-400 group-hover:fill-zinc-600"
>
<path d="M13.545 2.995c-1.02-.46-2.114-.8-3.257-.994a.05.05 0 0 0-.052.024c-.141.246-.297.567-.406.82a12.377 12.377 0 0 0-3.658 0 8.238 8.238 0 0 0-.412-.82.052.052 0 0 0-.052-.024 13.315 13.315 0 0 0-3.257.994.046.046 0 0 0-.021.018C.356 6.063-.213 9.036.066 11.973c.001.015.01.029.02.038a13.353 13.353 0 0 0 3.996 1.987.052.052 0 0 0 .056-.018c.308-.414.582-.85.818-1.309a.05.05 0 0 0-.028-.069 8.808 8.808 0 0 1-1.248-.585.05.05 0 0 1-.005-.084c.084-.062.168-.126.248-.191a.05.05 0 0 1 .051-.007c2.619 1.176 5.454 1.176 8.041 0a.05.05 0 0 1 .053.006c.08.065.164.13.248.192a.05.05 0 0 1-.004.084c-.399.23-.813.423-1.249.585a.05.05 0 0 0-.027.07c.24.457.514.893.817 1.307a.051.051 0 0 0 .056.019 13.31 13.31 0 0 0 4.001-1.987.05.05 0 0 0 .021-.037c.334-3.396-.559-6.345-2.365-8.96a.04.04 0 0 0-.021-.02Zm-8.198 7.19c-.789 0-1.438-.712-1.438-1.587 0-.874.637-1.586 1.438-1.586.807 0 1.45.718 1.438 1.586 0 .875-.637 1.587-1.438 1.587Zm5.316 0c-.788 0-1.438-.712-1.438-1.587 0-.874.637-1.586 1.438-1.586.807 0 1.45.718 1.438 1.586 0 .875-.63 1.587-1.438 1.587Z" />
</svg>
Join our Discord server
</a>
</div>
<div>
<a
href="https://fly.io/docs/elixir/getting-started/"
class="group -mx-2 -my-0.5 inline-flex items-center gap-3 rounded-lg px-2 py-0.5 hover:bg-zinc-50 hover:text-zinc-900"
>
<svg
viewBox="0 0 20 20"
aria-hidden="true"
class="h-4 w-4 fill-zinc-400 group-hover:fill-zinc-600"
>
<path d="M1 12.5A4.5 4.5 0 005.5 17H15a4 4 0 001.866-7.539 3.504 3.504 0 00-4.504-4.272A4.5 4.5 0 004.06 8.235 4.502 4.502 0 001 12.5z" />
</svg>
Deploy your application
</a>
</div>
</div>
</div>
<div class="homepage">
<div>
<h1>It's Jessica!</h1>
<p>I build stuff on the internet! I used to make a lot more stuff, but I burnt out pretty hard building startups and consulting too hard. I'm getting back into just doing <strong>fun</strong> stuff, y'know?</p>
<p>I'm also into poking synthesizers until they make music, but actually <strong>recording</strong> any of this is a new thing for me, so I'm figuring that out.</p>
<p>Besides that, I'm a parent to two amazing boys, a wife to a beautiful wife, and I occasionally play poker.</p>
<p>I write here about those things, about general tech dorkery, and about my experience with being <strong>super</strong> trans and learning who I am.</p>
</div>
</div>
<div>
</div>
</div>

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