From 1bf44f3344cf83d14479c2c338f23066d7e2f362 Mon Sep 17 00:00:00 2001 From: Jessica Phoenix Canady Date: Tue, 30 Jul 2024 11:46:47 -0400 Subject: [PATCH] MEGACOMMIT: Ton of blog and layout work. Mostly reimplementing the old Zola theme. --- assets/css/app.css | 163 +--- assets/css/buttons.css | 95 +++ assets/css/color/background_auto.css | 12 + assets/css/color/background_blue.css | 3 + assets/css/color/background_dark.css | 4 + assets/css/color/background_green.css | 3 + assets/css/color/background_light.css | 3 + assets/css/color/background_orange.css | 3 + assets/css/color/background_pink.css | 3 + assets/css/color/background_red.css | 3 + assets/css/color/blue-auto.css | 26 + assets/css/color/blue-light.css | 11 + assets/css/color/blue.css | 8 + assets/css/color/green-auto.css | 26 + assets/css/color/green-light.css | 11 + assets/css/color/green.css | 8 + assets/css/color/orange-auto.css | 26 + assets/css/color/orange-light.css | 11 + assets/css/color/orange.css | 8 + assets/css/color/pink-auto.css | 26 + assets/css/color/pink-light.css | 11 + assets/css/color/pink.css | 8 + assets/css/color/red-auto.css | 26 + assets/css/color/red-light.css | 11 + assets/css/color/red.css | 8 + assets/css/font-hack-subset.css | 31 + assets/css/font-hack.css | 30 + assets/css/footer.css | 56 ++ assets/css/header.css | 75 ++ assets/css/home.css | 5 + assets/css/logo.css | 8 + assets/css/main.css | 246 ++++++ assets/css/pagination.css | 70 ++ assets/css/post.css | 106 +++ .../buttons.scssc | Bin 0 -> 21653 bytes .../font-hack-subset.scssc | Bin 0 -> 10484 bytes .../font-hack.scssc | Bin 0 -> 10177 bytes .../footer.scssc | Bin 0 -> 11783 bytes .../header.scssc | Bin 0 -> 20100 bytes .../home.scssc | Bin 0 -> 2585 bytes .../logo.scssc | Bin 0 -> 2882 bytes .../main.scssc | Bin 0 -> 52367 bytes .../pagination.scssc | Bin 0 -> 15813 bytes .../post.scssc | Bin 0 -> 23775 bytes .../style.scssc | Bin 0 -> 1332 bytes .../variables.scssc | Bin 0 -> 1078 bytes assets/css/sass/buttons.css | 83 ++ assets/css/sass/buttons.scss | 92 +++ assets/css/sass/color/background_auto.scss | 14 + assets/css/sass/color/background_blue.scss | 3 + assets/css/sass/color/background_dark.scss | 5 + assets/css/sass/color/background_green.scss | 3 + assets/css/sass/color/background_light.scss | 3 + assets/css/sass/color/background_orange.scss | 3 + assets/css/sass/color/background_pink.scss | 3 + assets/css/sass/color/background_red.scss | 3 + assets/css/sass/color/blue-auto.scss | 29 + assets/css/sass/color/blue-light.scss | 12 + assets/css/sass/color/blue.scss | 9 + assets/css/sass/color/green-auto.scss | 29 + assets/css/sass/color/green-light.scss | 12 + assets/css/sass/color/green.scss | 9 + assets/css/sass/color/orange-auto.scss | 29 + assets/css/sass/color/orange-light.scss | 12 + assets/css/sass/color/orange.scss | 9 + assets/css/sass/color/pink-auto.scss | 29 + assets/css/sass/color/pink-light.scss | 12 + assets/css/sass/color/pink.scss | 9 + assets/css/sass/color/red-auto.scss | 29 + assets/css/sass/color/red-light.scss | 12 + assets/css/sass/color/red.scss | 9 + assets/css/sass/font-hack-subset.css | 27 + assets/css/sass/font-hack-subset.scss | 34 + assets/css/sass/font-hack.css | 26 + assets/css/sass/font-hack.scss | 33 + assets/css/sass/footer.css | 40 + assets/css/sass/footer.scss | 62 ++ assets/css/sass/header.css | 61 ++ assets/css/sass/header.scss | 96 +++ assets/css/sass/home.css | 4 + assets/css/sass/home.scss | 5 + assets/css/sass/logo.css | 7 + assets/css/sass/logo.scss | 8 + assets/css/sass/main.css | 66 ++ assets/css/sass/main.scss | 263 +++++++ assets/css/sass/pagination.css | 57 ++ assets/css/sass/pagination.scss | 77 ++ assets/css/sass/post.css | 79 ++ assets/css/sass/post.scss | 135 ++++ assets/css/sass/style.css | 69 ++ assets/css/sass/style.scss | 9 + assets/css/sass/variables.css | 0 assets/css/sass/variables.scss | 2 + assets/css/style.css | 713 ++++++++++++++++++ assets/css/variables.css | 1 + lib/jol/blog.ex | 2 + lib/jol/blog/post.ex | 8 + lib/jol_web/components/layouts/app.html.heex | 44 +- lib/jol_web/components/layouts/root.html.heex | 10 +- lib/jol_web/controllers/page_controller.ex | 13 + .../controllers/page_html/home.html.heex | 16 +- .../controllers/page_html/tags.html.heex | 10 + lib/jol_web/router.ex | 5 + priv/posts/lan-voice-chat.md | 57 ++ priv/posts/odyssey-gen2-kvm.md | 44 ++ priv/posts/steam-deck-touchscreen-fix.md | 26 + priv/posts/the-names-we-discard.md | 51 ++ 107 files changed, 3589 insertions(+), 177 deletions(-) create mode 100644 assets/css/buttons.css create mode 100644 assets/css/color/background_auto.css create mode 100644 assets/css/color/background_blue.css create mode 100644 assets/css/color/background_dark.css create mode 100644 assets/css/color/background_green.css create mode 100644 assets/css/color/background_light.css create mode 100644 assets/css/color/background_orange.css create mode 100644 assets/css/color/background_pink.css create mode 100644 assets/css/color/background_red.css create mode 100644 assets/css/color/blue-auto.css create mode 100644 assets/css/color/blue-light.css create mode 100644 assets/css/color/blue.css create mode 100644 assets/css/color/green-auto.css create mode 100644 assets/css/color/green-light.css create mode 100644 assets/css/color/green.css create mode 100644 assets/css/color/orange-auto.css create mode 100644 assets/css/color/orange-light.css create mode 100644 assets/css/color/orange.css create mode 100644 assets/css/color/pink-auto.css create mode 100644 assets/css/color/pink-light.css create mode 100644 assets/css/color/pink.css create mode 100644 assets/css/color/red-auto.css create mode 100644 assets/css/color/red-light.css create mode 100644 assets/css/color/red.css create mode 100644 assets/css/font-hack-subset.css create mode 100644 assets/css/font-hack.css create mode 100644 assets/css/footer.css create mode 100644 assets/css/header.css create mode 100644 assets/css/home.css create mode 100644 assets/css/logo.css create mode 100644 assets/css/main.css create mode 100644 assets/css/pagination.css create mode 100644 assets/css/post.css create mode 100644 assets/css/sass/.sass-cache/c65d90b933adb2b4ccf6ececad60f3dbc15b478d/buttons.scssc create mode 100644 assets/css/sass/.sass-cache/c65d90b933adb2b4ccf6ececad60f3dbc15b478d/font-hack-subset.scssc create mode 100644 assets/css/sass/.sass-cache/c65d90b933adb2b4ccf6ececad60f3dbc15b478d/font-hack.scssc create mode 100644 assets/css/sass/.sass-cache/c65d90b933adb2b4ccf6ececad60f3dbc15b478d/footer.scssc create mode 100644 assets/css/sass/.sass-cache/c65d90b933adb2b4ccf6ececad60f3dbc15b478d/header.scssc create mode 100644 assets/css/sass/.sass-cache/c65d90b933adb2b4ccf6ececad60f3dbc15b478d/home.scssc create mode 100644 assets/css/sass/.sass-cache/c65d90b933adb2b4ccf6ececad60f3dbc15b478d/logo.scssc create mode 100644 assets/css/sass/.sass-cache/c65d90b933adb2b4ccf6ececad60f3dbc15b478d/main.scssc create mode 100644 assets/css/sass/.sass-cache/c65d90b933adb2b4ccf6ececad60f3dbc15b478d/pagination.scssc create mode 100644 assets/css/sass/.sass-cache/c65d90b933adb2b4ccf6ececad60f3dbc15b478d/post.scssc create mode 100644 assets/css/sass/.sass-cache/c65d90b933adb2b4ccf6ececad60f3dbc15b478d/style.scssc create mode 100644 assets/css/sass/.sass-cache/c65d90b933adb2b4ccf6ececad60f3dbc15b478d/variables.scssc create mode 100644 assets/css/sass/buttons.css create mode 100644 assets/css/sass/buttons.scss create mode 100644 assets/css/sass/color/background_auto.scss create mode 100644 assets/css/sass/color/background_blue.scss create mode 100644 assets/css/sass/color/background_dark.scss create mode 100644 assets/css/sass/color/background_green.scss create mode 100644 assets/css/sass/color/background_light.scss create mode 100644 assets/css/sass/color/background_orange.scss create mode 100644 assets/css/sass/color/background_pink.scss create mode 100644 assets/css/sass/color/background_red.scss create mode 100644 assets/css/sass/color/blue-auto.scss create mode 100644 assets/css/sass/color/blue-light.scss create mode 100644 assets/css/sass/color/blue.scss create mode 100644 assets/css/sass/color/green-auto.scss create mode 100644 assets/css/sass/color/green-light.scss create mode 100644 assets/css/sass/color/green.scss create mode 100644 assets/css/sass/color/orange-auto.scss create mode 100644 assets/css/sass/color/orange-light.scss create mode 100644 assets/css/sass/color/orange.scss create mode 100644 assets/css/sass/color/pink-auto.scss create mode 100644 assets/css/sass/color/pink-light.scss create mode 100644 assets/css/sass/color/pink.scss create mode 100644 assets/css/sass/color/red-auto.scss create mode 100644 assets/css/sass/color/red-light.scss create mode 100644 assets/css/sass/color/red.scss create mode 100644 assets/css/sass/font-hack-subset.css create mode 100644 assets/css/sass/font-hack-subset.scss create mode 100644 assets/css/sass/font-hack.css create mode 100644 assets/css/sass/font-hack.scss create mode 100644 assets/css/sass/footer.css create mode 100644 assets/css/sass/footer.scss create mode 100644 assets/css/sass/header.css create mode 100644 assets/css/sass/header.scss create mode 100644 assets/css/sass/home.css create mode 100644 assets/css/sass/home.scss create mode 100644 assets/css/sass/logo.css create mode 100644 assets/css/sass/logo.scss create mode 100644 assets/css/sass/main.css create mode 100644 assets/css/sass/main.scss create mode 100644 assets/css/sass/pagination.css create mode 100644 assets/css/sass/pagination.scss create mode 100644 assets/css/sass/post.css create mode 100644 assets/css/sass/post.scss create mode 100644 assets/css/sass/style.css create mode 100644 assets/css/sass/style.scss create mode 100644 assets/css/sass/variables.css create mode 100644 assets/css/sass/variables.scss create mode 100644 assets/css/style.css create mode 100644 assets/css/variables.css create mode 100644 lib/jol/blog/post.ex create mode 100644 lib/jol_web/controllers/page_html/tags.html.heex create mode 100644 priv/posts/lan-voice-chat.md create mode 100644 priv/posts/odyssey-gen2-kvm.md create mode 100644 priv/posts/steam-deck-touchscreen-fix.md create mode 100644 priv/posts/the-names-we-discard.md diff --git a/assets/css/app.css b/assets/css/app.css index e666e2a..b908ada 100644 --- a/assets/css/app.css +++ b/assets/css/app.css @@ -1,161 +1,2 @@ -@layer reset theme,layout; - -@font-face { - font-family: "BerkeleyMono"; - src: url("/fonts/BerkeleyMonoVariable-Regular.woff2") format("woff2"); -} - -@font-face { - font-family: "BerkeleyMonoItalic"; - src: url("/fonts/BerkeleyMonoVariable-Italic.woff2") format("woff2"); -} - -@layer reset { - /* - 1. Use a more-intuitive box-sizing model. - */ - *, - *::before, - *::after { - box-sizing: border-box; - } - /* - 2. Remove default margin - */ - * { - margin: 0; - } - /* - Typographic tweaks! - 3. Add accessible line-height - 4. Improve text rendering - */ - body { - line-height: 1.5; - } - /* - 5. Improve media defaults - */ - img, - picture, - video, - canvas, - svg { - display: block; - max-width: 100%; - } - /* - 6. Remove built-in form typography styles - */ - input, - button, - textarea, - select { - font: inherit; - } - /* - 7. Avoid text overflows - */ - p, - h1, - h2, - h3, - h4, - h5, - h6 { - overflow-wrap: break-word; - } - - p { - margin-bottom: 1em; - } -} - -@layer theme { - :root { - --header-font: BerkeleyMono; - --body-font: BerkeleyMono; - --main-accent-color: #ff0095; - --main-background-color: #001626; - --main-text-color: #ffffff; - - --default-grid-gap: 0vmax; - } -} - -@layout layout { -} - -body { - color: var(--main-text-color); - background: var(--main-background-color); - font-family: var(--header-font); - margin: 1rem; -} - -main { - display: grid; - gap: var(--default-grid-gap); - grid-template-areas: - "header" - "sidebar" - "content" - "sidebar2" - "footer"; - overflow: hidden; - height: 90vh; -} - -@media only screen and (min-width: 600px) { - body { - margin: 1rem; - } - - main { - grid-template-columns: 1fr 4fr; - grid-template-areas: - "header header" - "sidebar content" - "sidebar2 sidebar2" - "footer footer"; - } -} - -@media only screen and (min-width: 1100px) { - body { - margin: 1rem 5rem; - } - - main { - grid-template-columns: min-content 3fr min-content; - grid-template-areas: - "header header header" - "sidebar content sidebar2" - "footer footer footer"; - } -} - -header { - grid-area: header; - color: var(--main-accent-color); -} - -div#sidebar { - grid-area: sidebar; -} - -div#sidebar2 { - grid-area: sidebar2; -} - -div#content { - grid-area: content; - padding: 0 1em; -} - -footer { - grid-area: footer; -} - -.gridbox { -} +@import "style"; +@import "color/pink"; diff --git a/assets/css/buttons.css b/assets/css/buttons.css new file mode 100644 index 0000000..0395889 --- /dev/null +++ b/assets/css/buttons.css @@ -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; +} diff --git a/assets/css/color/background_auto.css b/assets/css/color/background_auto.css new file mode 100644 index 0000000..6fff4f8 --- /dev/null +++ b/assets/css/color/background_auto.css @@ -0,0 +1,12 @@ +@media (prefers-color-scheme: light) { + :root { + --background: white; + --color: #101010; + } +} +@media (prefers-color-scheme: dark) { + :root { + --background: #101010; + --color: #A9B7C6; + } +} diff --git a/assets/css/color/background_blue.css b/assets/css/color/background_blue.css new file mode 100644 index 0000000..d7ce46a --- /dev/null +++ b/assets/css/color/background_blue.css @@ -0,0 +1,3 @@ +:root { + --background: #1D212C; +} diff --git a/assets/css/color/background_dark.css b/assets/css/color/background_dark.css new file mode 100644 index 0000000..f63321b --- /dev/null +++ b/assets/css/color/background_dark.css @@ -0,0 +1,4 @@ +:root { + --background: #101010; + --color: #A9B7C6; +} diff --git a/assets/css/color/background_green.css b/assets/css/color/background_green.css new file mode 100644 index 0000000..3bcdf16 --- /dev/null +++ b/assets/css/color/background_green.css @@ -0,0 +1,3 @@ +:root { + --background: #1F222A; +} diff --git a/assets/css/color/background_light.css b/assets/css/color/background_light.css new file mode 100644 index 0000000..ac41318 --- /dev/null +++ b/assets/css/color/background_light.css @@ -0,0 +1,3 @@ +:root { + --background: #f0f0f0; +} diff --git a/assets/css/color/background_orange.css b/assets/css/color/background_orange.css new file mode 100644 index 0000000..ea0ef7d --- /dev/null +++ b/assets/css/color/background_orange.css @@ -0,0 +1,3 @@ +:root { + --background: #222129; +} diff --git a/assets/css/color/background_pink.css b/assets/css/color/background_pink.css new file mode 100644 index 0000000..565d610 --- /dev/null +++ b/assets/css/color/background_pink.css @@ -0,0 +1,3 @@ +:root { + --background: #21202C; +} diff --git a/assets/css/color/background_red.css b/assets/css/color/background_red.css new file mode 100644 index 0000000..fbce29e --- /dev/null +++ b/assets/css/color/background_red.css @@ -0,0 +1,3 @@ +:root { + --background: #221F29; +} diff --git a/assets/css/color/blue-auto.css b/assets/css/color/blue-auto.css new file mode 100644 index 0000000..ef991a0 --- /dev/null +++ b/assets/css/color/blue-auto.css @@ -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; + } +} diff --git a/assets/css/color/blue-light.css b/assets/css/color/blue-light.css new file mode 100644 index 0000000..1b05c4c --- /dev/null +++ b/assets/css/color/blue-light.css @@ -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; +} diff --git a/assets/css/color/blue.css b/assets/css/color/blue.css new file mode 100644 index 0000000..b731ec0 --- /dev/null +++ b/assets/css/color/blue.css @@ -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); +} diff --git a/assets/css/color/green-auto.css b/assets/css/color/green-auto.css new file mode 100644 index 0000000..bbfed7c --- /dev/null +++ b/assets/css/color/green-auto.css @@ -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; + } +} diff --git a/assets/css/color/green-light.css b/assets/css/color/green-light.css new file mode 100644 index 0000000..f54a0d1 --- /dev/null +++ b/assets/css/color/green-light.css @@ -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; +} diff --git a/assets/css/color/green.css b/assets/css/color/green.css new file mode 100644 index 0000000..96bbc91 --- /dev/null +++ b/assets/css/color/green.css @@ -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); +} diff --git a/assets/css/color/orange-auto.css b/assets/css/color/orange-auto.css new file mode 100644 index 0000000..2caf9ce --- /dev/null +++ b/assets/css/color/orange-auto.css @@ -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; + } +} diff --git a/assets/css/color/orange-light.css b/assets/css/color/orange-light.css new file mode 100644 index 0000000..a0a96a1 --- /dev/null +++ b/assets/css/color/orange-light.css @@ -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; +} diff --git a/assets/css/color/orange.css b/assets/css/color/orange.css new file mode 100644 index 0000000..5006719 --- /dev/null +++ b/assets/css/color/orange.css @@ -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); +} diff --git a/assets/css/color/pink-auto.css b/assets/css/color/pink-auto.css new file mode 100644 index 0000000..9f4ea9e --- /dev/null +++ b/assets/css/color/pink-auto.css @@ -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; + } +} diff --git a/assets/css/color/pink-light.css b/assets/css/color/pink-light.css new file mode 100644 index 0000000..759aa56 --- /dev/null +++ b/assets/css/color/pink-light.css @@ -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; +} diff --git a/assets/css/color/pink.css b/assets/css/color/pink.css new file mode 100644 index 0000000..59c9f22 --- /dev/null +++ b/assets/css/color/pink.css @@ -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); +} diff --git a/assets/css/color/red-auto.css b/assets/css/color/red-auto.css new file mode 100644 index 0000000..0ecd41e --- /dev/null +++ b/assets/css/color/red-auto.css @@ -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; + } +} diff --git a/assets/css/color/red-light.css b/assets/css/color/red-light.css new file mode 100644 index 0000000..455753d --- /dev/null +++ b/assets/css/color/red-light.css @@ -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; +} diff --git a/assets/css/color/red.css b/assets/css/color/red.css new file mode 100644 index 0000000..3c82b94 --- /dev/null +++ b/assets/css/color/red.css @@ -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); +} diff --git a/assets/css/font-hack-subset.css b/assets/css/font-hack-subset.css new file mode 100644 index 0000000..46292c0 --- /dev/null +++ b/assets/css/font-hack-subset.css @@ -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; +} diff --git a/assets/css/font-hack.css b/assets/css/font-hack.css new file mode 100644 index 0000000..edbeb09 --- /dev/null +++ b/assets/css/font-hack.css @@ -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; +} diff --git a/assets/css/footer.css b/assets/css/footer.css new file mode 100644 index 0000000..b1b14ed --- /dev/null +++ b/assets/css/footer.css @@ -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; + } +} diff --git a/assets/css/header.css b/assets/css/header.css new file mode 100644 index 0000000..dc1583a --- /dev/null +++ b/assets/css/header.css @@ -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; +} diff --git a/assets/css/home.css b/assets/css/home.css new file mode 100644 index 0000000..7477f5a --- /dev/null +++ b/assets/css/home.css @@ -0,0 +1,5 @@ +div.homepage { + display: grid; + grid-template-columns: repeat(auto-fill, minmax(20em, 1fr)); + grid-gap: 3em; +} diff --git a/assets/css/logo.css b/assets/css/logo.css new file mode 100644 index 0000000..d455cc7 --- /dev/null +++ b/assets/css/logo.css @@ -0,0 +1,8 @@ +.logo { + display: flex; + align-items: center; + text-decoration: none; + background: var(--accent); + color: black; + padding: 5px 10px; +} diff --git a/assets/css/main.css b/assets/css/main.css new file mode 100644 index 0000000..ce01028 --- /dev/null +++ b/assets/css/main.css @@ -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; +} diff --git a/assets/css/pagination.css b/assets/css/pagination.css new file mode 100644 index 0000000..6e0d983 --- /dev/null +++ b/assets/css/pagination.css @@ -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; +} diff --git a/assets/css/post.css b/assets/css/post.css new file mode 100644 index 0000000..e3b197b --- /dev/null +++ b/assets/css/post.css @@ -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; +} diff --git a/assets/css/sass/.sass-cache/c65d90b933adb2b4ccf6ececad60f3dbc15b478d/buttons.scssc b/assets/css/sass/.sass-cache/c65d90b933adb2b4ccf6ececad60f3dbc15b478d/buttons.scssc new file mode 100644 index 0000000000000000000000000000000000000000..fcc477889d54afc2fe60946199d6f4231543f6aa GIT binary patch literal 21653 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 NO*m=kFKN^s{vUJ&t_1)9 literal 0 HcmV?d00001 diff --git a/assets/css/sass/.sass-cache/c65d90b933adb2b4ccf6ececad60f3dbc15b478d/font-hack-subset.scssc b/assets/css/sass/.sass-cache/c65d90b933adb2b4ccf6ececad60f3dbc15b478d/font-hack-subset.scssc new file mode 100644 index 0000000000000000000000000000000000000000..463e3027ed2a90740a6a8905aea4e6d7af6aec83 GIT binary patch literal 10484 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 IDb$Pq1K931E&u=k literal 0 HcmV?d00001 diff --git a/assets/css/sass/.sass-cache/c65d90b933adb2b4ccf6ececad60f3dbc15b478d/header.scssc b/assets/css/sass/.sass-cache/c65d90b933adb2b4ccf6ececad60f3dbc15b478d/header.scssc new file mode 100644 index 0000000000000000000000000000000000000000..f4e71576884d4d3f78492b6b2b1e91022e60d803 GIT binary patch literal 20100 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 literal 0 HcmV?d00001 diff --git a/assets/css/sass/.sass-cache/c65d90b933adb2b4ccf6ececad60f3dbc15b478d/home.scssc b/assets/css/sass/.sass-cache/c65d90b933adb2b4ccf6ececad60f3dbc15b478d/home.scssc new file mode 100644 index 0000000000000000000000000000000000000000..0b6acef4a7c21d9f295582c61ac332cb8e7f192b GIT binary patch literal 2585 zcmbVOTTdf56wX66nS?uR#eGRrsSR5oVZ+sKx0WbKky^BB=)UkUa%P-hIy0WylZ6!V z-+S!2kO|?XNNC36<8!`q&i5UseQkwXaQA;g!fyk zQ(yA<*MmC|u!s(rg{;dPv`iu@74sZzqXeoafx66RZY(517a|B~m;Ezjq04MEM*+t4p5+EQ~9FJfs2Z)NR0R;mQqKFdtMz zUDkqKpNEWFP=!ACnKo?+v@z-J!iUn?c(GHT%Totmc$r&xr3DG8VecN2HLqeQU0nvd z%VG;6+);J+T)KiXDYNBB8V;C1YiSho5jvv3Rsf!gsf?XSfQ!wd$!DQ>%tct%fzd1x z{k~!`yv`98dgch;GMjjtFGFaZQwwr~k_j0z*-8sh9;e0FpqvPJOSb4>s?aQq9j&=*p?) zz3`h*Wd^U{u&LlZ?U!WKcmBu8HKL%Oj&7>+KxN3off9Jt!fU!6RT9&l;w5a|PKpCC zMVj}Ecu`Y+*5fMj>BzvDAz!IK1S#anc3sJ%I1|?I9O_Jc8#i7Ve9;FH>c$d~RB)qH zuM8yjjN3UPBHdc`RMN;s5km{y0|xUxXA;$k$0EsG8iUMu2q7W|^uz%R*yy&F@wymq zSs5s>lDAB+R`Cwm!Zosuf8ZswL?X!2QKK-XkH`+$0~DeJY{oy44{!LZPWOjajijc~ zhqMYOmNEorEve#^BPqvH_~bAg?fte4vYNPZZsT zGB@&+^(x1YSICyY?FD?4#0_{D&`0C)I1icWC!pDLAmW0CqSO&w@ z8HPNDLE5R8SzxkQ1*(Js+>dRSAZ;P}06zM_x{s~I_KgfsA%jm@2a*hu(wt~8mMO-m z3Er0`l{28wISkvwbUnR9q!8d@JOBXwn~ffX^kDqGPo~LVG4~O=7BZkd|Cf1x(5MXj z1v^I>EosqINI)Za&Je9tn8aWJq8~WP@{Ls61thBy`N|V$4mWYDD6(n%c@dfB&x@nOMBb!d2(*(2`dE;^J`0e@AlrY@&z#ZEfJUZc zS~7T7kE@jLb~`19o&!14D-%qwfd6+n61^&nm)EIIbMTUC(Lt8#V3gJ?Q>)FYE0o|nY4_KJZmrnh8{1;E{sak`-^hQ86T}x~} zO`S@pmduw%K1B9viSip-gnKm*%I@x%1857XK?iX4xoY~OZ|UM>*9jCaV=GGslbinl DIETVH literal 0 HcmV?d00001 diff --git a/assets/css/sass/.sass-cache/c65d90b933adb2b4ccf6ececad60f3dbc15b478d/logo.scssc b/assets/css/sass/.sass-cache/c65d90b933adb2b4ccf6ececad60f3dbc15b478d/logo.scssc new file mode 100644 index 0000000000000000000000000000000000000000..f887fa52414844f846e871e37d3604bd17f01d13 GIT binary patch literal 2882 zcmbVO-*4MC5Ke$Wv1PkXvvm2j1fI90>DJh8n$8RP!l76I18Y&#*izBskNs7SIi54je#GEV7ca;b(t;J1qU*M)D zv6+JLr8Q{V9bZnRMXX;h$Oa3!(!w3#qL!qcco+&_IFVF@yq2>WABsQcB5*{7G}uhc z#zJZIw7|3LCT>o}y-J6BJFuQ8WuHD65uYF)y0l)#Di9x#>qovgg_~Uzl@GKxa z@qB^HJwT-A<7+@059M4r$fGh8kp%~?xW4+dat=IoyfjigmXDyh$a55k|xs; zSJ5bxU}CSh<(<@Cv3c2(brHfwNSRP(3_I zHBzsJ!kscNB(d{bTk-0sKe*Iupr~8BUBMeJNJ6c;18+sr~D*-%6{ee)<0fN5M zk(gmP6$oa~e%`&3Gts>kT6f$raad~(1VyM=l*r}>`XhagL8>eSsS=09=o)8x#vcZW z9@9=SDrE-ps1yx!lYB6i#Q@j8%pCLz`AVU%U(9+=cry~W(XlHWsW@sR=Cwq+8puE_ zQ?4#ht^$Ug3=z)ujmL7zWd?G}MFWQN`+|e5%t4WI3WW{LdQQ1H=FW$ylJmgL*qY{2 zthe)d;Ben>;td2}K8B7**9Yy&M;;3Rs)?&9-WBvIh{H&vaeT}jl*w|$?1hNg5Tosk z5YAc#Fx_Cg;P`{MyOGL;hJBFqzuzOzC*-YEGtlZ^!hOTTHK;h)H_~zSW0_akjEC^8 zG3+jIcfbZ{Q`1p01-X_X*(@OW<{^@}a!X}fW+=}gQpydP9L@@kHZn)W9O7Ak!~(OP z=g@YfFOwo%601G-A;HVBuPwyB2IiX?5S(oqN9AfQGmtYa8Zb=%E;wjp4vI`uC~WoK zY{;qBL+-lJ)HAIX+EL?Gc-wl>3*$~7Cn;-4^##6lV3>Dpob4EI<$TKw&mo9IK{$NKW7lK+rcupSzZ|y*n($4a>u}H2i`p+^C-MXFBT{kXxk`vcvY=_ zj$eVTd%M+2uUOK;8U*a?`OCeE0MHf(cwHz c7ipQyQ2Ub|Cl4P*#fuba72iIVAxX)_zc*6lod5s; literal 0 HcmV?d00001 diff --git a/assets/css/sass/.sass-cache/c65d90b933adb2b4ccf6ececad60f3dbc15b478d/main.scssc b/assets/css/sass/.sass-cache/c65d90b933adb2b4ccf6ececad60f3dbc15b478d/main.scssc new file mode 100644 index 0000000000000000000000000000000000000000..b2bbcef5e44a59e5b7f1be9cb7ea527f9c96551f GIT binary patch literal 52367 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 JBPefD>I|AI%`_XX(qd(zKky; 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 BZ72W$ literal 0 HcmV?d00001 diff --git a/assets/css/sass/.sass-cache/c65d90b933adb2b4ccf6ececad60f3dbc15b478d/post.scssc b/assets/css/sass/.sass-cache/c65d90b933adb2b4ccf6ececad60f3dbc15b478d/post.scssc new file mode 100644 index 0000000000000000000000000000000000000000..8f130466d1de992b1e3e624269217dc6840beb1a GIT binary patch literal 23775 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 literal 0 HcmV?d00001 diff --git a/assets/css/sass/buttons.css b/assets/css/sass/buttons.css new file mode 100644 index 0000000..898061a --- /dev/null +++ b/assets/css/sass/buttons.css @@ -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; } diff --git a/assets/css/sass/buttons.scss b/assets/css/sass/buttons.scss new file mode 100644 index 0000000..7a864b0 --- /dev/null +++ b/assets/css/sass/buttons.scss @@ -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; + } +} diff --git a/assets/css/sass/color/background_auto.scss b/assets/css/sass/color/background_auto.scss new file mode 100644 index 0000000..e1cab79 --- /dev/null +++ b/assets/css/sass/color/background_auto.scss @@ -0,0 +1,14 @@ +:root { + + @media (prefers-color-scheme: light) { + --background: white; + + --color: #101010; + } + + @media (prefers-color-scheme: dark) { + --background: #101010; + + --color: #A9B7C6; + } +} diff --git a/assets/css/sass/color/background_blue.scss b/assets/css/sass/color/background_blue.scss new file mode 100644 index 0000000..d7ce46a --- /dev/null +++ b/assets/css/sass/color/background_blue.scss @@ -0,0 +1,3 @@ +:root { + --background: #1D212C; +} diff --git a/assets/css/sass/color/background_dark.scss b/assets/css/sass/color/background_dark.scss new file mode 100644 index 0000000..999212f --- /dev/null +++ b/assets/css/sass/color/background_dark.scss @@ -0,0 +1,5 @@ +:root { + --background: #101010; + + --color: #A9B7C6; +} diff --git a/assets/css/sass/color/background_green.scss b/assets/css/sass/color/background_green.scss new file mode 100644 index 0000000..3bcdf16 --- /dev/null +++ b/assets/css/sass/color/background_green.scss @@ -0,0 +1,3 @@ +:root { + --background: #1F222A; +} diff --git a/assets/css/sass/color/background_light.scss b/assets/css/sass/color/background_light.scss new file mode 100644 index 0000000..ac41318 --- /dev/null +++ b/assets/css/sass/color/background_light.scss @@ -0,0 +1,3 @@ +:root { + --background: #f0f0f0; +} diff --git a/assets/css/sass/color/background_orange.scss b/assets/css/sass/color/background_orange.scss new file mode 100644 index 0000000..ea0ef7d --- /dev/null +++ b/assets/css/sass/color/background_orange.scss @@ -0,0 +1,3 @@ +:root { + --background: #222129; +} diff --git a/assets/css/sass/color/background_pink.scss b/assets/css/sass/color/background_pink.scss new file mode 100644 index 0000000..565d610 --- /dev/null +++ b/assets/css/sass/color/background_pink.scss @@ -0,0 +1,3 @@ +:root { + --background: #21202C; +} diff --git a/assets/css/sass/color/background_red.scss b/assets/css/sass/color/background_red.scss new file mode 100644 index 0000000..fbce29e --- /dev/null +++ b/assets/css/sass/color/background_red.scss @@ -0,0 +1,3 @@ +:root { + --background: #221F29; +} diff --git a/assets/css/sass/color/blue-auto.scss b/assets/css/sass/color/blue-auto.scss new file mode 100644 index 0000000..bf20e33 --- /dev/null +++ b/assets/css/sass/color/blue-auto.scss @@ -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; + } + } +} diff --git a/assets/css/sass/color/blue-light.scss b/assets/css/sass/color/blue-light.scss new file mode 100644 index 0000000..c41d839 --- /dev/null +++ b/assets/css/sass/color/blue-light.scss @@ -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; + } +} diff --git a/assets/css/sass/color/blue.scss b/assets/css/sass/color/blue.scss new file mode 100644 index 0000000..231f362 --- /dev/null +++ b/assets/css/sass/color/blue.scss @@ -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); +} diff --git a/assets/css/sass/color/green-auto.scss b/assets/css/sass/color/green-auto.scss new file mode 100644 index 0000000..2eb5e12 --- /dev/null +++ b/assets/css/sass/color/green-auto.scss @@ -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; + } + } +} diff --git a/assets/css/sass/color/green-light.scss b/assets/css/sass/color/green-light.scss new file mode 100644 index 0000000..9ee64f3 --- /dev/null +++ b/assets/css/sass/color/green-light.scss @@ -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; + } +} diff --git a/assets/css/sass/color/green.scss b/assets/css/sass/color/green.scss new file mode 100644 index 0000000..ff52fe2 --- /dev/null +++ b/assets/css/sass/color/green.scss @@ -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); +} diff --git a/assets/css/sass/color/orange-auto.scss b/assets/css/sass/color/orange-auto.scss new file mode 100644 index 0000000..3c19ce4 --- /dev/null +++ b/assets/css/sass/color/orange-auto.scss @@ -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; + } + } +} diff --git a/assets/css/sass/color/orange-light.scss b/assets/css/sass/color/orange-light.scss new file mode 100644 index 0000000..6f7b8f9 --- /dev/null +++ b/assets/css/sass/color/orange-light.scss @@ -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; + } +} \ No newline at end of file diff --git a/assets/css/sass/color/orange.scss b/assets/css/sass/color/orange.scss new file mode 100644 index 0000000..46bb5ce --- /dev/null +++ b/assets/css/sass/color/orange.scss @@ -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); +} \ No newline at end of file diff --git a/assets/css/sass/color/pink-auto.scss b/assets/css/sass/color/pink-auto.scss new file mode 100644 index 0000000..705c706 --- /dev/null +++ b/assets/css/sass/color/pink-auto.scss @@ -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; + } + } +} diff --git a/assets/css/sass/color/pink-light.scss b/assets/css/sass/color/pink-light.scss new file mode 100644 index 0000000..aa8437c --- /dev/null +++ b/assets/css/sass/color/pink-light.scss @@ -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; + } +} diff --git a/assets/css/sass/color/pink.scss b/assets/css/sass/color/pink.scss new file mode 100644 index 0000000..6cc6064 --- /dev/null +++ b/assets/css/sass/color/pink.scss @@ -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); +} diff --git a/assets/css/sass/color/red-auto.scss b/assets/css/sass/color/red-auto.scss new file mode 100644 index 0000000..a0016f2 --- /dev/null +++ b/assets/css/sass/color/red-auto.scss @@ -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; + } + } +} diff --git a/assets/css/sass/color/red-light.scss b/assets/css/sass/color/red-light.scss new file mode 100644 index 0000000..d2f0e4c --- /dev/null +++ b/assets/css/sass/color/red-light.scss @@ -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; + } +} diff --git a/assets/css/sass/color/red.scss b/assets/css/sass/color/red.scss new file mode 100644 index 0000000..6e7b776 --- /dev/null +++ b/assets/css/sass/color/red.scss @@ -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); +} diff --git a/assets/css/sass/font-hack-subset.css b/assets/css/sass/font-hack-subset.css new file mode 100644 index 0000000..5e4c671 --- /dev/null +++ b/assets/css/sass/font-hack-subset.css @@ -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; } diff --git a/assets/css/sass/font-hack-subset.scss b/assets/css/sass/font-hack-subset.scss new file mode 100644 index 0000000..31281aa --- /dev/null +++ b/assets/css/sass/font-hack-subset.scss @@ -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; +} diff --git a/assets/css/sass/font-hack.css b/assets/css/sass/font-hack.css new file mode 100644 index 0000000..02a51f5 --- /dev/null +++ b/assets/css/sass/font-hack.css @@ -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; } diff --git a/assets/css/sass/font-hack.scss b/assets/css/sass/font-hack.scss new file mode 100644 index 0000000..fef7588 --- /dev/null +++ b/assets/css/sass/font-hack.scss @@ -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; +} diff --git a/assets/css/sass/footer.css b/assets/css/sass/footer.css new file mode 100644 index 0000000..d32b673 --- /dev/null +++ b/assets/css/sass/footer.css @@ -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; } } diff --git a/assets/css/sass/footer.scss b/assets/css/sass/footer.scss new file mode 100644 index 0000000..5fce73b --- /dev/null +++ b/assets/css/sass/footer.scss @@ -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; + } + } +} diff --git a/assets/css/sass/header.css b/assets/css/sass/header.css new file mode 100644 index 0000000..e8afddb --- /dev/null +++ b/assets/css/sass/header.css @@ -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; } diff --git a/assets/css/sass/header.scss b/assets/css/sass/header.scss new file mode 100644 index 0000000..703bbec --- /dev/null +++ b/assets/css/sass/header.scss @@ -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; + } + } + } + } +} diff --git a/assets/css/sass/home.css b/assets/css/sass/home.css new file mode 100644 index 0000000..16c81e1 --- /dev/null +++ b/assets/css/sass/home.css @@ -0,0 +1,4 @@ +div.homepage { + display: grid; + grid-template-columns: repeat(auto-fill, minmax(20em, 1fr)); + grid-gap: 3em; } diff --git a/assets/css/sass/home.scss b/assets/css/sass/home.scss new file mode 100644 index 0000000..a923d25 --- /dev/null +++ b/assets/css/sass/home.scss @@ -0,0 +1,5 @@ +div.homepage { + display: grid; + grid-template-columns: repeat(auto-fill, minmax(20em, 1fr)); + grid-gap: 3em; +} diff --git a/assets/css/sass/logo.css b/assets/css/sass/logo.css new file mode 100644 index 0000000..768e655 --- /dev/null +++ b/assets/css/sass/logo.css @@ -0,0 +1,7 @@ +.logo { + display: flex; + align-items: center; + text-decoration: none; + background: var(--accent); + color: black; + padding: 5px 10px; } diff --git a/assets/css/sass/logo.scss b/assets/css/sass/logo.scss new file mode 100644 index 0000000..d455cc7 --- /dev/null +++ b/assets/css/sass/logo.scss @@ -0,0 +1,8 @@ +.logo { + display: flex; + align-items: center; + text-decoration: none; + background: var(--accent); + color: black; + padding: 5px 10px; +} diff --git a/assets/css/sass/main.css b/assets/css/sass/main.css new file mode 100644 index 0000000..1daf2f5 --- /dev/null +++ b/assets/css/sass/main.css @@ -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 `' +/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 `
' +*/ +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: }"; } diff --git a/assets/css/sass/main.scss b/assets/css/sass/main.scss new file mode 100644 index 0000000..01b186a --- /dev/null +++ b/assets/css/sass/main.scss @@ -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; +} diff --git a/assets/css/sass/pagination.css b/assets/css/sass/pagination.css new file mode 100644 index 0000000..4926f15 --- /dev/null +++ b/assets/css/sass/pagination.css @@ -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; } diff --git a/assets/css/sass/pagination.scss b/assets/css/sass/pagination.scss new file mode 100644 index 0000000..566005b --- /dev/null +++ b/assets/css/sass/pagination.scss @@ -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; + } +} diff --git a/assets/css/sass/post.css b/assets/css/sass/post.css new file mode 100644 index 0000000..602d92a --- /dev/null +++ b/assets/css/sass/post.css @@ -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; } diff --git a/assets/css/sass/post.scss b/assets/css/sass/post.scss new file mode 100644 index 0000000..16fdbfe --- /dev/null +++ b/assets/css/sass/post.scss @@ -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; + } +} diff --git a/assets/css/sass/style.css b/assets/css/sass/style.css new file mode 100644 index 0000000..757e144 --- /dev/null +++ b/assets/css/sass/style.css @@ -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 `' +/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 `
' +*/ +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"; } diff --git a/assets/css/sass/style.scss b/assets/css/sass/style.scss new file mode 100644 index 0000000..591a67d --- /dev/null +++ b/assets/css/sass/style.scss @@ -0,0 +1,9 @@ +@import 'buttons'; + +@import 'header'; +@import 'logo'; +@import 'main'; +@import 'post'; +@import 'pagination'; +@import 'footer'; +@import 'home'; diff --git a/assets/css/sass/variables.css b/assets/css/sass/variables.css new file mode 100644 index 0000000..e69de29 diff --git a/assets/css/sass/variables.scss b/assets/css/sass/variables.scss new file mode 100644 index 0000000..3b95a9c --- /dev/null +++ b/assets/css/sass/variables.scss @@ -0,0 +1,2 @@ +$phone-max-width: 683px; +$tablet-max-width: 899px; diff --git a/assets/css/style.css b/assets/css/style.css new file mode 100644 index 0000000..b45a2e9 --- /dev/null +++ b/assets/css/style.css @@ -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; +} diff --git a/assets/css/variables.css b/assets/css/variables.css new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/assets/css/variables.css @@ -0,0 +1 @@ + diff --git a/lib/jol/blog.ex b/lib/jol/blog.ex index 66878d1..a4b09a8 100644 --- a/lib/jol/blog.ex +++ b/lib/jol/blog.ex @@ -1,9 +1,11 @@ defmodule JOL.Blog do alias JOL.Blog.Post + alias JOL.Blog.Parser use NimblePublisher, build: Post, from: Application.app_dir(:jol, "priv/posts/**/*.md"), + parser: Parser, as: :posts @posts Enum.sort_by(@posts, & &1.date, {:desc, Date}) diff --git a/lib/jol/blog/post.ex b/lib/jol/blog/post.ex new file mode 100644 index 0000000..e081c50 --- /dev/null +++ b/lib/jol/blog/post.ex @@ -0,0 +1,8 @@ +defmodule JOL.Blog.Post do + @enforce_keys [:title, :body, :draft, :date, :tags] + defstruct [:title, :body, :draft, :date, :tags] + + def build(_filename, attrs, body) do + struct!(__MODULE__, [body: body] ++ Map.to_list(attrs)) + end +end diff --git a/lib/jol_web/components/layouts/app.html.heex b/lib/jol_web/components/layouts/app.html.heex index c0ecf4b..040fefb 100644 --- a/lib/jol_web/components/layouts/app.html.heex +++ b/lib/jol_web/components/layouts/app.html.heex @@ -1,11 +1,41 @@ -
-
-

Jessica Phoenix Canady

+
+
+ +
+ + +
-
+ +
<%= @inner_content %>
-
-

YOU MADE IT!

+ +
+
-
+ + diff --git a/lib/jol_web/components/layouts/root.html.heex b/lib/jol_web/components/layouts/root.html.heex index 199aeb1..8c911df 100644 --- a/lib/jol_web/components/layouts/root.html.heex +++ b/lib/jol_web/components/layouts/root.html.heex @@ -4,14 +4,14 @@ - <.live_title suffix=" · Jessica Phoenix Canady"> - <%= assigns[:page_title] || "Jessica Online Untitled Page" %> + <.live_title suffix=" · Jessica OnLine"> + <%= assigns[:page_title] || "Jess Forgot To Name This Page!" %> - + - + + <%= @inner_content %> diff --git a/lib/jol_web/controllers/page_controller.ex b/lib/jol_web/controllers/page_controller.ex index c8f4a7c..67cc0be 100644 --- a/lib/jol_web/controllers/page_controller.ex +++ b/lib/jol_web/controllers/page_controller.ex @@ -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 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 diff --git a/lib/jol_web/controllers/page_html/home.html.heex b/lib/jol_web/controllers/page_html/home.html.heex index 67b3fb6..0bb4ab0 100644 --- a/lib/jol_web/controllers/page_html/home.html.heex +++ b/lib/jol_web/controllers/page_html/home.html.heex @@ -1,5 +1,13 @@ -

is some kind of dingus anyway

+
+
+

It's Jessica!

-

Hey I'm Jessica.

-

You probably know me from nothing.

-

Suggit.

+

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 fun stuff, y'know?

+

I'm also into poking synthesizers until they make music, but actually recording any of this is a new thing for me, so I'm figuring that out.

+

Besides that, I'm a parent to two amazing boys, a wife to a beautiful wife, and I occasionally play poker.

+

I write here about those things, about general tech dorkery, and about my experience with being super trans and learning who I am.

+
+
+
+ +
diff --git a/lib/jol_web/controllers/page_html/tags.html.heex b/lib/jol_web/controllers/page_html/tags.html.heex new file mode 100644 index 0000000..7b01efe --- /dev/null +++ b/lib/jol_web/controllers/page_html/tags.html.heex @@ -0,0 +1,10 @@ +
+

all tags

+
    + <%= for tag <- @tags do %> +
  • + <%= tag %> +
  • + <% end %> +
+
diff --git a/lib/jol_web/router.ex b/lib/jol_web/router.ex index b30e113..13fcefe 100644 --- a/lib/jol_web/router.ex +++ b/lib/jol_web/router.ex @@ -18,6 +18,11 @@ defmodule JOLWeb.Router do pipe_through :browser get "/", PageController, :home + get "/tags", PageController, :tags + get "/archive", PageController, :archive + get "/about", PageController, :about + get "/now", PageController, :now + get "/code", PageController, :code end # Other scopes may use custom stacks. diff --git a/priv/posts/lan-voice-chat.md b/priv/posts/lan-voice-chat.md new file mode 100644 index 0000000..4b537c3 --- /dev/null +++ b/priv/posts/lan-voice-chat.md @@ -0,0 +1,57 @@ ++++ +title = "LAN Voice Chat with Mumble" +date = 2024-04-16 11:51:33-04:00 +draft = false + +[taxonomies] +# these go in quotes, like the title +tags = ["software", "family"] ++++ + +My kids, 11yo and 7yo, are *really* into playing Minecraft and Terraria together. But, being siblings, it doesn't always go as well as anyone really wants it to. Sometimes, it's just that they can't be in the same *room* together. And since they both have fancy gaming headsets, they might as well get used to using voice chat. + +But how? + +It might be easy to give them Discord accounts and let them get to know the wide world of _Shitty Internet Culture_, _Awful Desktop Software_ and _Yay Notifications Forever_, but that seems like a horrible idea. Besides, what kind of Tech would I be if I didn't solve this problem by deploying software? + +Enter: [Mumble](https://www.mumble.info/downloads/). + +## The Server + +The server is called Murnur, and has [an official Docker image](https://github.com/mumble-voip/mumble-docker). + +In my case, I just plugged this into [Portainer](https://www.portainer.io) using their Docker Compose example. + +(If, like me, you're trying to copy/paste a reasonable looking `docker-compose.json` file while two kids are louodly wondering why this is taking so long, you might also miss the `image: mumblevoip/mumble-server:` placeholder in their example. I've replaced that with `latest` below.) + +```json +services: + mumble-server: + image: mumblevoip/mumble-server:latest + container_name: mumble-server + hostname: mumble-server + restart: on-failure + ports: + - 64738:64738 + - 64738:64738/udp +``` + +Literally nothing to do but run that. The Docker logs will show a password for the `SuperUser` account, which you may want, but for our simple use-case here I never needed it. + +## The Client + +Mumble has [clients](https://www.mumble.info/downloads/) for Windows, Mac, Linux, iOS, and Android. + +After running, you'll go through an Audio Setup Wizard that's fairly self-explanatory. Then it'll ask for connection details. + +Here's the fun bit: + +Since you're doing this locally and not publically, feel free to just pick a username for the server. Mumble will generate a certificate that identifies you, and normally you'd want to back that up and register with the server and all that, but for my use case none of that really matters. I just had the kids type in whatever name they wanted, and bam, they're in. + +There's a `Root` channel everyone joins by default. Others can be created, but since I've just got the two kids, it's easy enough just to let them both be in that channel. + +## How'd It Go? + +It's been running faultless for a few days, with the only real issue being that the client likes to be restarted after the kids' laptops resume from suspend. + +This rocks. Way better than having my kids ask me to buy _Discord Nitro_ for them. diff --git a/priv/posts/odyssey-gen2-kvm.md b/priv/posts/odyssey-gen2-kvm.md new file mode 100644 index 0000000..f43ad25 --- /dev/null +++ b/priv/posts/odyssey-gen2-kvm.md @@ -0,0 +1,44 @@ ++++ +title = "HOWTO: Use the KVM in the Odyssey Ark Gen2" +draft = false +date = 2024-01-02 14:00:00-05:00 + +[taxonomies] +tags = ["howto", "hardware"] ++++ + +I splurged on the absolutely monstrous Samsung Odyssey Ark 55" (Gen 2) monitor. + +If you want a gigantic beast of a monitor and you don't mind it also being a Smart TV kinda thing with its own Home screen and wifi connection, this is a fantastic device! + + + +One of my use cases for a primary display is plugging it into my desktop and also my laptop. The built-in KVM on the monitor is *superbly* under-documented. Here's how to set it up quickly: + +## Connect your computers + +The control box that the display connects to has four inputs: three HDMI and a DisplayPort. Pick the ones you like, and plug them in. Note which numbered port you connect which machine to. + +You also need a USB connection to each, so connect a USB B or C cable from one of the labeled ports on the control box. There's three B and a C. Same as before, note which port you plugged which computer into. + +## Connect your peripherals + +On the right side (from the front) of the control box, there's a couple of USB A ports. Each provides a different amount of power. + +There's only two, which will work for a mouse and a keyboard. I highly recommend plugging a USB hub of some kind into the control box, and then plugging your stuff into there. + +## Configure the Odyssey Ark + +In the Settings menu of the Odyssey Ark, navigate to Connection -> External Device Manager -> USB Input Port Setup. + +This menu maps USB input Ports on the control box to display inputs. For each USB input you've plugged into on the back of the control box, map it to one (or more) displays. + +--- + +That's it! Now, when you switch the monitor to a given input, it'll map the peripherals on the side ports to whichever USB Host port you've mapped them to. + +## What about the multi-monitor thing? + +Hell if I know, it requires some Windows-only software and so I haven't even attempted to give it a try yet. + +Hope this helps someone! diff --git a/priv/posts/steam-deck-touchscreen-fix.md b/priv/posts/steam-deck-touchscreen-fix.md new file mode 100644 index 0000000..663b9a1 --- /dev/null +++ b/priv/posts/steam-deck-touchscreen-fix.md @@ -0,0 +1,26 @@ ++++ +title = "HOWTO: Fix Steam Deck Unresponsive Touchscreen" +date = 2024-01-07 13:40:00-05:00 + +[taxonomies] +tags = ["howto", "hardware", "games", "shit's on fire yo"] ++++ + +If you've picked up your Steam Deck recently and the touchscreen just randomly stopped working, there is a *super* quick fix! Instead of factory resetting and wondering if you accidentally dropped the damn thing, do this: + + + +1. Turn your Steam Deck off. Actually off from the Steam menu, not just suspended by tapping the power button. +1. Unplug the Deck if it's plugged in. +1. Hold the volume up button while you tap the power button. Keep holding the volume up button until you hear the chime. +1. Use the D-Pad to select "Setup Utility" and press A. +1. Navigate to the Power menu. +1. Choose Battery storage mode, and confirm. + +Your Deck will power off and the power LED will blink three times to confirm battery storage mode. + +Plug back into the power supply, and turn it back on normally. This will automatically disable battery storage mode. + +After this, my touchscreen worked perfectly again. + +Hope this helps someone! diff --git a/priv/posts/the-names-we-discard.md b/priv/posts/the-names-we-discard.md new file mode 100644 index 0000000..4914c16 --- /dev/null +++ b/priv/posts/the-names-we-discard.md @@ -0,0 +1,51 @@ ++++ +title = "The Names We Discard" +date = 2024-01-30 15:53:22-05:00 + +[taxonomies] +tags = ["trans"] ++++ + +> It's the name you used for _thirty-some years_. It's not _evil_. +> +> -- My wife + + + +We were packing up boxes, finally clearing out our old house so we could sell it. A good few of the boxes were full of stuff from my childhood, things that my Mom gave me when I had could store them and get them out of the cramped apartment we lived in. They all had my deadname on them. + +I was visibly upset by those boxes, and had just commented about the bittersweetness of these items (and others, like pictures of me from Back When), when my wife fired off the quote above and I had to take a minute to get myself together. + +My wife isn't trans; her first experience with trans people in real life was when I transitioned; and she didn't say it maliciously. Just _thoughtlesly_, as if I had been acting silly. I had to figure out why her offhanded remark hurt _so damn much._ + +--- + +The name I discarded when I finally decided to embrace _the real me_ was indeed part of my life for 37 years. It was my email domain, it was (is) on my Bachelor of Science degree, On trophies. On boxes of childhood treasures in my Mom's neat handwriting. I don't hate it, and I don't hate who that person was. + +But seeing it makes me uncomfortable. + +It reminds me of the decades I outright suppressed and ignored my feelings. + +The young child afraid to be _too_ girly, so folks wouldn't make fun of them. + +The adolescent that knew that if they could wave a wand and, Sailor Moon-style, magically transform into a girl, that they'd do it. Y'know, just to _try it out_. + +The 20-something that would occasionally get pretty drunk and refer to themselves as a girl, but even then would look around to make sure nobody heard. + +The 30-something that was getting drunk _far_ too often, at times daily, and ordering cheap women's clothes from Amazon and hiding them from their wife and kids. + +My deadname reminds me that, despite my driver's license and credit cards all having Jessica Phoenix Canady printed on them, there are still people I love (or loved) who will absolutely use t to refer to me. Sometimes to my face. Sometimes after I just corrected them, hoping in vain that they "just forgot." + +It also reminds me of how I figured out why I never looked *right* in mirrors or pictures, and that I finally _do_. + +Of the card my eldest son made me that says he'll always love me no matter what my gender is. + +How my youngest son calls me "Dad" in public and doesn't understand or care why some folks give us weird looks sometimes. + +That my wife still loves me, despite everything. + +None of this even scratches the surface! The name kind of stores all my feelings about my transness encoded in it, and seeing it unexpectedly can drop them all back onto me at once. + +Hearing or seeing my deadname is going to be a weird, bittersweet, somewhat painful thing for a while. Eventually, I hope, it's only used by the folks I'll never speak to again because they can't put it down. + +But it's damn heavy, and I'm glad I don't always have to carry it anymore.