aboutsummaryrefslogtreecommitdiff
path: root/site/sass
diff options
context:
space:
mode:
Diffstat (limited to 'site/sass')
-rw-r--r--site/sass/_fonts.scss28
-rw-r--r--site/sass/_palette.scss51
-rw-r--r--site/sass/style.scss122
3 files changed, 201 insertions, 0 deletions
diff --git a/site/sass/_fonts.scss b/site/sass/_fonts.scss
new file mode 100644
index 0000000..2299bca
--- /dev/null
+++ b/site/sass/_fonts.scss
@@ -0,0 +1,28 @@
+@use "sass:list";
+
+$-faces: (
+ 100: ("Thin", "ThinItalic"),
+ 200: ("ExtraLight", "ExtraLightItalic"),
+ 300: ("Light", "LightItalic"),
+ 400: ("Regular", "Italic"),
+ 450: ("Text", "TextItalic"),
+ 500: ("Medium", "MediumItalic"),
+ 600: ("SemiBold", "SemiBoldItalic"),
+ 700: ("Bold", "BoldItalic"),
+);
+
+$-styles: normal italic;
+
+@each $weight, $names in $-faces {
+ @for $i from 1 through 2 {
+ @font-face {
+ font-family: "IBM Plex Mono";
+ src: url("/fonts/mono/IBMPlexMono-#{list.nth($names, $i)}.woff2") format("woff2");
+ font-weight: $weight;
+ font-style: list.nth($-styles, $i);
+ font-display: swap;
+ }
+ }
+}
+
+$mono: "IBM Plex Mono", ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
diff --git a/site/sass/_palette.scss b/site/sass/_palette.scss
new file mode 100644
index 0000000..b61eb94
--- /dev/null
+++ b/site/sass/_palette.scss
@@ -0,0 +1,51 @@
+@mixin ayu-dark {
+ color-scheme: dark;
+
+ --bg: #0F1419; // base00 default background
+ --bg-alt: #131721; // base01 raised background
+ --bg-sel: #272D38; // base02 selection background
+ --grey: #3E4B59; // base03 comments, invisibles
+ --fg-dim: #BFBDB6; // base04 muted foreground
+ --fg: #E6E1CF; // base05 default foreground
+ --fg-alt: #E6E1CF; // base06
+ --fg-bright: #F3F4F5; // base07 brightest foreground
+
+ --red: #F07178; // base08
+ --orange: #FF8F40; // base09
+ --yellow: #FFB454; // base0A
+ --green: #B8CC52; // base0B
+ --cyan: #95E6CB; // base0C
+ --blue: #59C2FF; // base0D
+ --purple: #D2A6FF; // base0E
+ --brown: #E6B673; // base0F
+}
+
+@mixin ayu-light {
+ color-scheme: light;
+
+ --bg: #FAFAFA; // base00
+ --bg-alt: #F3F4F5; // base01
+ --bg-sel: #F8F9FA; // base02
+ --grey: #ABB0B6; // base03
+ --fg-dim: #828C99; // base04
+ --fg: #5C6773; // base05
+ --fg-alt: #242936; // base06
+ --fg-bright: #1A1F29; // base07
+
+ --red: #F07178; // base08
+ --orange: #FA8D3E; // base09
+ --yellow: #F2AE49; // base0A
+ --green: #86B300; // base0B
+ --cyan: #4CBF99; // base0C
+ --blue: #36A3D9; // base0D
+ --purple: #A37ACC; // base0E
+ --brown: #E6BA7E; // base0F
+}
+
+:root { @include ayu-light; }
+@media (prefers-color-scheme: dark) {
+ :root { @include ayu-dark; }
+}
+
+:root[data-theme="dark"] { @include ayu-dark; }
+:root[data-theme="light"] { @include ayu-light; }
diff --git a/site/sass/style.scss b/site/sass/style.scss
new file mode 100644
index 0000000..5ce9f88
--- /dev/null
+++ b/site/sass/style.scss
@@ -0,0 +1,122 @@
+@use "palette";
+@use "fonts";
+
+body {
+ background: var(--bg);
+ color: var(--fg);
+ font-family: fonts.$mono;
+ line-height: 1.6;
+
+ max-width: 46rem;
+ margin: 0 auto;
+ padding: 3rem 1.5rem;
+}
+
+header {
+ margin-bottom: 2.5rem;
+ padding-bottom: 0.75rem;
+ border-bottom: 1px solid var(--grey);
+}
+
+nav {
+ display: flex;
+ align-items: baseline;
+ justify-content: space-between;
+ gap: 1.5rem;
+
+ ul {
+ display: flex;
+ gap: 1.5rem;
+ margin: 0;
+ padding: 0;
+ list-style: none;
+ }
+}
+
+.brand,
+.brand:visited {
+ color: var(--fg-bright);
+ font-weight: 500;
+}
+
+.brand:hover {
+ font-weight: 700;
+}
+
+footer {
+ display: flex;
+ gap: 1.5rem;
+ margin-top: 3rem;
+ padding-top: 0.75rem;
+ border-top: 1px solid var(--grey);
+}
+
+img {
+ max-width: 100%;
+ height: auto;
+}
+
+.centered-img {
+ display: block;
+ margin: 2rem auto;
+}
+
+.intro {
+ display: flex;
+ align-items: flex-start;
+ gap: 2.5rem;
+}
+
+.intro-text > p:first-child {
+ margin-top: 0;
+}
+
+.avatar {
+ flex: none;
+ width: 14rem;
+ height: 14rem;
+ border-radius: 50%;
+ object-fit: cover;
+}
+
+@media (max-width: 34rem) {
+ .intro {
+ flex-direction: column-reverse;
+ align-items: center;
+ }
+}
+
+.post-list {
+ margin: 0;
+ padding: 0;
+ list-style: none;
+
+ li {
+ display: flex;
+ justify-content: space-between;
+ gap: 1rem;
+ }
+}
+
+time {
+ color: var(--fg-dim);
+}
+
+strong {
+ color: var(--orange);
+ font-weight: 600;
+}
+
+a {
+ color: var(--blue);
+ text-decoration: none;
+}
+
+a:visited {
+ color: var(--purple);
+}
+
+a:hover {
+ font-weight: 700;
+ text-decoration: underline;
+}