my page ollie.earth
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

bunch of stuff; and a light theme!

ollie 6e63b2af 26295365

+940 -351
+18
dev/page_dev.gleam
··· 1 + import blogatto/dev 2 + import blogatto/error 3 + import gleam/io 4 + import page 5 + 6 + pub fn main() { 7 + let cfg = page.config() 8 + 9 + case 10 + cfg 11 + |> dev.new() 12 + |> dev.port(3000) 13 + |> dev.start() 14 + { 15 + Ok(Nil) -> io.println("Dev server stopped.") 16 + Error(err) -> io.println("Dev server error: " <> error.describe_error(err)) 17 + } 18 + }
+2
gleam.toml
··· 18 18 lustre = ">= 5.3.5 and < 6.0.0" 19 19 blogatto = ">= 5.1.1 and < 6.0.0" 20 20 glaze_oat = ">= 3.0.0 and < 4.0.0" 21 + gleam_time = ">= 1.8.0 and < 2.0.0" 21 22 22 23 [dev-dependencies] 23 24 gleeunit = ">= 1.0.0 and < 2.0.0" 25 + simplifile = ">= 2.4.0 and < 3.0.0"
+2
justfile
··· 6 6 build: 7 7 gleam run 8 8 9 + dev: 10 + gleam dev 9 11 10 12 # Deploy to my server 11 13 deploy: build
+2
manifest.toml
··· 47 47 blogatto = { version = ">= 5.1.1 and < 6.0.0" } 48 48 glaze_oat = { version = ">= 3.0.0 and < 4.0.0" } 49 49 gleam_stdlib = { version = ">= 0.44.0 and < 2.0.0" } 50 + gleam_time = { version = ">= 1.8.0 and < 2.0.0" } 50 51 gleeunit = { version = ">= 1.0.0 and < 2.0.0" } 51 52 lustre = { version = ">= 5.3.5 and < 6.0.0" } 53 + simplifile = { version = ">= 2.4.0 and < 3.0.0" }
+87 -211
src/page.gleam
··· 4 4 import blogatto/config/robots 5 5 import blogatto/post 6 6 import glaze/oat/badge 7 + import glaze/oat/theme 7 8 import gleam/list 8 9 import gleam/option.{None, Some} 9 10 import gleam/time/timestamp 10 - import lustre/attribute.{attribute} 11 + import lustre/attribute 11 12 import lustre/element.{type Element} 12 13 import lustre/element/html 13 - import lustre/element/svg 14 + import page/svgs 14 15 15 - const out_dir: String = "dist/" 16 + pub fn main() -> Nil { 17 + let assert Ok(Nil) = blogatto.build(config()) 18 + Nil 19 + } 16 20 17 - const assets_dir = "./assets/" 18 - 19 - pub fn main() -> Nil { 21 + pub fn config() -> config.Config(Nil) { 20 22 let robots = robots.new("https://ollie.earth") 21 23 22 24 let md = 23 25 markdown.default() 24 26 |> markdown.markdown_path("./blog") 25 27 26 - let cfg = 27 - config.new("https://page.ollie.earth") 28 - |> config.output_dir("./dist") 29 - |> config.static_dir("./static") 30 - |> config.markdown(md) 31 - |> config.robots(robots) 32 - |> config.route("/", home_view) 33 - 34 - let assert Ok(Nil) = blogatto.build(cfg) 35 - Nil 28 + config.new("https://page.ollie.earth") 29 + |> config.output_dir("./dist") 30 + |> config.static_dir("./static") 31 + |> config.markdown(md) 32 + |> config.robots(robots) 33 + |> config.route("/", home_view) 36 34 } 37 35 38 36 fn home_view(posts: List(post.Post(Nil))) -> Element(Nil) { ··· 40 38 41 39 html.html([attribute.lang("en")], [ 42 40 html.head([], [ 41 + html.meta([ 42 + attribute.name("viewport"), 43 + attribute.content("width=device-width, initial-scale=1.0"), 44 + ]), 45 + 43 46 html.title([], "ollie.earth"), 44 47 html.link([ 48 + attribute.rel("icon"), 49 + attribute.href("/media/small_snoot_round.png"), 50 + ]), 51 + 52 + html.link([ 45 53 attribute.rel("stylesheet"), 46 54 attribute.href("/oat.min.css"), 47 55 ]), ··· 52 60 ], 53 61 "", 54 62 ), 63 + theme.style_tag( 64 + theme.default_theme() 65 + |> theme.set(theme.Background, "light-dark(#f9f6f1, #09090b)") 66 + |> theme.set(theme.Foreground, "light-dark(#f67cbc, #fafafa)") 67 + |> theme.set(theme.Primary, "light-dark(#9ceca6, #fafafa)") 68 + |> theme.set(theme.PrimaryForeground, "light-dark(#624226, #18181b)") 69 + |> theme.set(theme.Muted, "light-dark(#f9f6f1, #27272a)") 70 + |> theme.set(theme.MutedForeground, "light-dark(#ffc8e8, #a1a1aa)"), 71 + ), 55 72 html.link([ 56 73 attribute.rel("stylesheet"), 57 74 attribute.href("/style.css"), ··· 64 81 link_icon( 65 82 to: "ollie.earth", 66 83 at: "https://ollie.earth", 67 - with_image: "/media/snoot.png", 84 + with_image: "/media/small_snoot_round.png", 68 85 size: Small, 69 86 scaling: None, 70 87 ), ··· 74 91 ]), 75 92 html.div( 76 93 [ 77 - attribute.class("hstack"), 94 + attribute.class("hstack hide-s"), 78 95 ], 79 96 [ 80 97 html.a([attribute.href("https://en.pronouns.page/@liiv")], [ ··· 85 102 ]), 86 103 ], 87 104 ), 105 + // socials(Some("hide-md"), Size(26, 26)), 88 106 ]), 89 107 ]), 90 108 html.main([], [ ··· 105 123 html.hr([]), 106 124 107 125 html.section([], [ 108 - html.h3([], [element.text("my code")]), 126 + html.h3([], [element.text("stuff hosted by me")]), 109 127 html.div([attribute.class("hstack")], [ 110 - link_icon( 111 - to: "tangled", 112 - at: "https://tangled.org/ollie.earth", 113 - with_image: "/media/dolly.svg", 114 - size: Large, 115 - scaling: Some(Scaling(width: Some("auto"), height: Some("80%"))), 116 - ), 117 - link_icon( 118 - to: "forgejo", 119 - at: "https://git.ollie.earth/nuv", 120 - with_image: "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/forgejo.png", 121 - size: Large, 122 - scaling: Some(Scaling(width: Some("auto"), height: Some("80%"))), 123 - ), 124 - link_icon( 125 - to: "github", 126 - at: "https://github.com/nnuuvv", 127 - with_image: "/media/github.svg", 128 - size: Large, 129 - scaling: None, 130 - ), 131 - // git 132 - // tangled 133 - // ci 134 - // doodler 128 + svgs.services(None, svgs.Size(40, 40)), 135 129 ]), 136 130 ]), 137 131 138 132 html.hr([]), 139 133 140 134 html.section([], [ 141 - html.h3([], [element.text("stuff hosted by me")]), 135 + html.h3([], [element.text("people and projects i like")]), 142 136 html.div([attribute.class("hstack")], [ 143 137 link_icon( 144 - to: "tangled", 145 - at: "https://tangled.org/ollie.earth", 146 - with_image: "/media/dolly.svg", 138 + to: "mar", 139 + at: "https://strawmelonjuice.com", 140 + with_image: "https://strawmelonjuice.com/strawmelonjuice.png", 147 141 size: Large, 148 - scaling: Some(Scaling(width: Some("auto"), height: Some("80%"))), 142 + scaling: None, 149 143 ), 150 144 link_icon( 151 - to: "forgejo", 152 - at: "https://git.ollie.earth/nuv", 153 - with_image: "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/forgejo.png", 145 + to: "gleam", 146 + at: "https://gleam.run", 147 + with_image: "/media/lucy.svg", 154 148 size: Large, 155 - scaling: Some(Scaling(width: Some("auto"), height: Some("80%"))), 149 + scaling: Some(Scaling(Some("auto"), Some("85%"))), 156 150 ), 157 - // github 158 - // git 159 - // tangled 160 - // ci 161 - // doodler 162 - ]), 163 - ]), 164 - 165 - html.hr([]), 166 - 167 - html.section([], [ 168 - html.h3([], [element.text("people and projects i like")]), 169 - html.div([attribute.class("hstack")], [ 151 + link_icon( 152 + to: "lustre", 153 + at: "https://github.com/lustre-labs", 154 + with_image: "/media/lustre.png", 155 + size: Large, 156 + scaling: None, 157 + ), 170 158 // louis 171 159 // giacomo 172 160 // hayleigh ··· 179 167 html.hr([]), 180 168 181 169 html.section([], [ 182 - html.h3([], [element.text("me elsewhere")]), 183 - html.div([attribute.class("hstack")], [ 184 - bluesky(), 185 - matrix(), 186 - email(), 187 - // bsky 188 - // tangled 189 - // github 190 - // matrix 191 - // discord 192 - // email 193 - ]), 170 + html.h3([], [element.text("me in other places")]), 171 + svgs.socials(None, svgs.Size(40, 40)), 194 172 ]), 195 173 196 174 html.hr([]), 175 + 197 176 html.h3([], [element.text("this is where i'd put my blog posts...")]), 198 177 element.text("IF I HAD ANY!"), 199 178 179 + // html.img([attribute.src("/media/ref.png")]), 180 + // html.img([attribute.src("/media/puppy.png")]), 200 181 html.ul( 201 182 [], 202 183 list.map(sorted, fn(p) { ··· 207 188 ]) 208 189 }), 209 190 ), 191 + 192 + html.footer([attribute.class("footer text-light")], [ 193 + element.text("Made with "), 194 + html.a([attribute.href("https://gleam.run")], [ 195 + element.text("gleam"), 196 + ]), 197 + element.text(" using "), 198 + html.a([attribute.href("https://blogat.to")], [ 199 + element.text("blogatto"), 200 + ]), 201 + element.text(", "), 202 + html.a([attribute.href("https://oat.ink")], [ 203 + element.text("oat ui"), 204 + ]), 205 + 206 + element.text(" and "), 207 + html.a( 208 + [ 209 + attribute.href( 210 + "https://github.com/daniellionel01/glaze/tree/main/glaze_oat", 211 + ), 212 + ], 213 + [ 214 + element.text("glaze_oat"), 215 + ], 216 + ), 217 + ]), 210 218 ]), 211 219 ]), 212 220 ]), ··· 223 231 Scaling(width: option.Option(String), height: option.Option(String)) 224 232 } 225 233 226 - fn scaling_to_style(scaling: Scaling) { 234 + fn scaling_to_style(scaling: Scaling) -> attribute.Attribute(a) { 227 235 let Scaling(width:, height:) = scaling 228 236 229 237 let width = width |> option.unwrap("100%") ··· 270 278 ], 271 279 ) 272 280 } 273 - 274 - // logo links ------------------------------------------------------------------- 275 - 276 - fn matrix() { 277 - html.a( 278 - [ 279 - attribute.aria_label("Matrix"), 280 - attribute.target("_blank"), 281 - attribute.href("https://matrix.to/#/@me:ollie.earth"), 282 - 283 - attribute.attribute("data-hover-color", "var(--background)"), 284 - attribute.attribute("data-hover-background", "var(--foreground)"), 285 - attribute.style("cursor", "pointer"), 286 - attribute.style("width", "26px"), 287 - attribute.style("height", "26px"), 288 - ], 289 - [ 290 - svg.svg( 291 - [ 292 - attribute("xmlns", "http://www.w3.org/2000/svg"), 293 - attribute("xml:space", "preserve"), 294 - attribute("viewBox", "0 0 26 26"), 295 - attribute("version", "1.1"), 296 - attribute("height", "26"), 297 - attribute("width", "26"), 298 - ], 299 - [ 300 - svg.g( 301 - [ 302 - attribute("stroke-width", ".05"), 303 - attribute("fill", "currentColor"), 304 - ], 305 - [ 306 - svg.path([ 307 - attribute( 308 - "d", 309 - "m0.685 0.595v24.81h1.785v0.59499h-2.47v-26h2.47v0.595z", 310 - ), 311 - ]), 312 - svg.path([ 313 - attribute( 314 - "d", 315 - "m8.315 8.46v1.255h0.035007c0.33499-0.48 0.73999-0.85 1.21-1.11 0.47-0.265 1.015-0.395 1.625-0.395 0.585 0 1.12 0.115 1.605 0.34 0.48501 0.225 0.85001 0.63 1.105 1.2 0.275-0.405 0.65-0.765 1.12-1.075 0.47001-0.31 1.03-0.465 1.675-0.465 0.49001 0 0.94501 0.060005 1.365 0.18 0.42001 0.12 0.775 0.31 1.075 0.575 0.3 0.265 0.52999 0.605 0.69999 1.03 0.16501 0.425 0.25001 0.935 0.25001 1.535v6.205h-2.545v-5.255c0-0.31-0.0093-0.605-0.03492-0.88001-0.02507-0.27499-0.09007-0.51499-0.19506-0.71499-0.11002-0.205-0.26503-0.365-0.47502-0.485-0.21-0.12-0.495-0.18-0.85-0.18-0.36001 0-0.65 0.06999-0.87002 0.205-0.22 0.14-0.395 0.315-0.52 0.54-0.12498 0.22-0.20999 0.47-0.24999 0.755-0.03993 0.28-0.065 0.565-0.065 0.85v5.165h-2.545v-5.2c0-0.275-0.0047-0.54501-0.02005-0.81501-0.0099-0.27-0.06498-0.515-0.15497-0.745-0.08994-0.225-0.23997-0.41-0.44996-0.545-0.21-0.135-0.515-0.205-0.925-0.205-0.12 0-0.28 0.02497-0.475 0.08-0.195 0.05501-0.39 0.155-0.575 0.305-0.185 0.15-0.345 0.365-0.475 0.645-0.13 0.28-0.195 0.65-0.195 1.105v5.38h-2.545v-9.28z", 316 - ), 317 - ]), 318 - svg.path([ 319 - attribute( 320 - "d", 321 - "m25.315 25.405v-24.81h-1.785v-0.595h2.47v26h-2.47v-0.59499z", 322 - ), 323 - ]), 324 - ], 325 - ), 326 - ], 327 - ), 328 - ], 329 - ) 330 - } 331 - 332 - fn email() { 333 - html.a( 334 - [ 335 - attribute.aria_label("Email"), 336 - attribute.target("_blank"), 337 - attribute.href("mailto:web@ollie.earth"), 338 - attribute.attribute("data-hover-color", "#cc3856"), 339 - attribute.style("cursor", "pointer"), 340 - attribute.style("width", "26px"), 341 - attribute.style("height", "26px"), 342 - ], 343 - [ 344 - svg.svg( 345 - [ 346 - attribute("xmlns", "http://www.w3.org/2000/svg"), 347 - attribute("viewBox", "0 0 .72 .72"), 348 - attribute("version", "1.1"), 349 - attribute("fill", "none"), 350 - attribute("height", "24"), 351 - attribute("width", "24"), 352 - ], 353 - [ 354 - svg.path([ 355 - attribute("stroke-width", ".072"), 356 - attribute("stroke-linejoin", "round"), 357 - attribute("stroke-linecap", "round"), 358 - attribute("stroke", "currentColor"), 359 - attribute( 360 - "d", 361 - "m0.074646 0.1641 0.24984 0.15615c0.023346 0.014591 0.052974 0.014591 0.07632 0l0.24984-0.15615m-0.54 0.396h0.504c0.039766 0 0.072-0.032234 0.072-0.072v-0.288c0-0.039764-0.032234-0.072-0.072-0.072h-0.504c-0.039764 0-0.072 0.032236-0.072 0.072v0.288c0 0.039766 0.032236 0.072 0.072 0.072z", 362 - ), 363 - ]), 364 - ], 365 - ), 366 - ], 367 - ) 368 - } 369 - 370 - fn bluesky() { 371 - html.a( 372 - [ 373 - attribute.aria_label("Bluesky"), 374 - attribute.target("_blank"), 375 - attribute.href("https://bsky.app/profile/ollie.earth"), 376 - attribute.attribute("data-hover-color", "#006aff"), 377 - attribute.style("cursor", "pointer"), 378 - attribute.style("width", "26px"), 379 - attribute.style("height", "26px"), 380 - ], 381 - [ 382 - svg.svg( 383 - [ 384 - attribute("xmlns", "http://www.w3.org/2000/svg"), 385 - attribute("viewBox", "0 0 48 24"), 386 - attribute("version", "1.1"), 387 - attribute("fill", "none"), 388 - attribute("height", "24"), 389 - attribute("width", "24"), 390 - ], 391 - [ 392 - svg.path([ 393 - attribute("stroke-width", ".65268"), 394 - attribute("fill", "currentColor"), 395 - attribute( 396 - "d", 397 - "m12.083-4.7208c4.7887 3.6074 9.9404 10.921 11.831 14.845v10.366c0-0.22061-0.08485 0.02872-0.2676 0.56588-0.98686 2.9084-4.8416 14.259-13.656 5.1849-4.6412-4.7776-2.4926-9.5553 5.9557-10.998-4.8331 0.82499-10.267-0.53846-11.757-5.8839-0.42947-1.5377-1.1605-11.009-1.1605-12.289 0-6.408 5.5994-4.3939 9.0547-1.7916zm23.662 0c-4.7887 3.6074-9.9404 10.921-11.831 14.845v10.366c0-0.22061 0.08485 0.02872 0.2676 0.56588 0.98686 2.9084 4.8416 14.259 13.656 5.1849 4.6412-4.7776 2.4926-9.5553-5.9557-10.998 4.8331 0.82499 10.267-0.53846 11.757-5.8839 0.42946-1.5377 1.1605-11.009 1.1605-12.289 0-6.408-5.5987-4.3939-9.0547-1.7916z", 398 - ), 399 - ]), 400 - ], 401 - ), 402 - ], 403 - ) 404 - }
+761
src/page/svgs.gleam
··· 1 + import gleam/int 2 + import gleam/option 3 + import lustre/attribute.{attribute} 4 + import lustre/element.{type Element, element} 5 + import lustre/element/html 6 + import lustre/element/svg 7 + 8 + pub type Sizing { 9 + Size(width: Int, height: Int) 10 + } 11 + 12 + // services --------------------------------------------------------------------- 13 + 14 + pub fn services(append_class class: option.Option(String), size size: Sizing) { 15 + html.div( 16 + [ 17 + attribute.class( 18 + "hstack" 19 + <> class 20 + |> option.map(fn(class) { " " <> class }) 21 + |> option.unwrap(""), 22 + ), 23 + ], 24 + [ 25 + matrix(size), 26 + tangled(size), 27 + forgejo(size), 28 + woodpecker(size), 29 + navidrome(size), 30 + doodler(size), 31 + ], 32 + ) 33 + } 34 + 35 + fn doodler(size: Sizing) { 36 + html.a( 37 + [ 38 + attribute.aria_label("Doodler"), 39 + attribute.href("https://doodler.ollie.earth"), 40 + attribute.style("width", int.to_string(size.width) <> "px"), 41 + attribute.style("height", int.to_string(size.height) <> "px"), 42 + ], 43 + [ 44 + svg.svg( 45 + [ 46 + attribute("xmlns", "http://www.w3.org/2000/svg"), 47 + attribute("viewBox", "-8 -8 16 16"), 48 + attribute("data-hover-color", "light-dark(#000000, #ffffff)"), 49 + ], 50 + [ 51 + svg.circle([ 52 + attribute("r", "1"), 53 + attribute("fill", "currentColor"), 54 + attribute("cy", "-5"), 55 + attribute("cx", "-5"), 56 + ]), 57 + svg.circle([ 58 + attribute("r", "1"), 59 + attribute("fill", "currentColor"), 60 + attribute("cy", "5"), 61 + attribute("cx", "5"), 62 + ]), 63 + svg.circle([ 64 + attribute("r", "1"), 65 + attribute("fill", "currentColor"), 66 + attribute("cy", "-5"), 67 + attribute("cx", "5"), 68 + ]), 69 + svg.circle([ 70 + attribute("r", "1"), 71 + attribute("fill", "currentColor"), 72 + attribute("cy", "0"), 73 + attribute("cx", "5"), 74 + ]), 75 + svg.circle([ 76 + attribute("r", "1"), 77 + attribute("fill", "currentColor"), 78 + attribute("cy", "5"), 79 + attribute("cx", "-5"), 80 + ]), 81 + svg.circle([ 82 + attribute("r", "1"), 83 + attribute("fill", "currentColor"), 84 + attribute("cy", "5"), 85 + attribute("cx", "0"), 86 + ]), 87 + svg.circle([ 88 + attribute("r", "1"), 89 + attribute("fill", "currentColor"), 90 + attribute("cy", "0"), 91 + attribute("cx", "-5"), 92 + ]), 93 + svg.circle([ 94 + attribute("r", "1"), 95 + attribute("fill", "currentColor"), 96 + attribute("cy", "-5"), 97 + attribute("cx", "0"), 98 + ]), 99 + svg.circle([ 100 + attribute("r", "1"), 101 + attribute("fill", "currentColor"), 102 + attribute("cy", "0"), 103 + attribute("cx", "0"), 104 + ]), 105 + ], 106 + ), 107 + ], 108 + ) 109 + } 110 + 111 + fn navidrome(size: Sizing) -> Element(_) { 112 + html.a( 113 + [ 114 + attribute.aria_label("Navidrome"), 115 + attribute.href("https://tunes.ollie.earth"), 116 + attribute.style("width", int.to_string(size.width) <> "px"), 117 + attribute.style("height", int.to_string(size.height) <> "px"), 118 + ], 119 + [ 120 + svg.svg( 121 + [ 122 + attribute("style", "enable-background:new 0 0 512 512"), 123 + attribute("viewBox", "0 0 512 512"), 124 + attribute.id("Layer_1"), 125 + attribute("xmlns:xlink", "http://www.w3.org/1999/xlink"), 126 + attribute("width", "100%"), 127 + attribute("height", "100%"), 128 + ], 129 + [ 130 + svg.path([ 131 + attribute.attribute("data-hover-color", "#0084ff"), 132 + attribute.class("has-hover-color"), 133 + 134 + attribute( 135 + "d", 136 + "M256 10.449C120.275 10.449 10.449 120.276 10.449 256c0 135.725 109.826 245.551 245.551 245.551S501.551 391.725 501.551 256C501.551 120.276 391.725 10.449 256 10.449z", 137 + ), 138 + attribute("style", "fill:currentColor"), 139 + ]), 140 + svg.path([ 141 + attribute( 142 + "d", 143 + "M256 168.229c-48.515.0-87.771 39.257-87.771 87.771s39.257 87.771 87.771 87.771 87.771-39.257 87.771-87.771S304.515 168.229 256 168.229z", 144 + ), 145 + 146 + attribute.attribute("data-hover-color", "#fff"), 147 + attribute.class("has-hover-color"), 148 + attribute("style", "fill:var(--background)"), 149 + ]), 150 + svg.path([ 151 + attribute("data-hover-color", "light-dark(#000000, #ffffff)"), 152 + attribute.class("has-hover-color"), 153 + attribute("style", "fill:var(--primary)"), 154 + attribute( 155 + "d", 156 + "M437.061 74.94C388.735 26.615 324.434.0 256 0S123.265 26.615 74.939 74.94.0 187.566.0 256s26.614 132.735 74.939 181.061S187.566 512 256 512s132.735-26.614 181.061-74.939S512 324.434 512 256 485.386 123.266 437.061 74.94zM256 491.102C126.365 491.102 20.898 385.635 20.898 256S126.365 20.898 256 20.898 491.102 126.365 491.102 256 385.635 491.102 256 491.102z", 157 + ), 158 + ]), 159 + svg.path([ 160 + attribute("data-hover-color", "light-dark(#000000, #ffffff)"), 161 + attribute.class("has-hover-color"), 162 + attribute("style", "fill:var(--primary)"), 163 + attribute( 164 + "d", 165 + "M354.22 256c0-54.158-44.061-98.22-98.22-98.22s-98.22 44.062-98.22 98.22 44.062 98.22 98.22 98.22 98.22-44.061 98.22-98.22zm-175.542.0c0-42.636 34.686-77.322 77.322-77.322s77.322 34.686 77.322 77.322S298.636 333.322 256 333.322 178.678 298.636 178.678 256z", 166 + ), 167 + ]), 168 + svg.path([ 169 + attribute("data-hover-color", "light-dark(#000000, #ffffff)"), 170 + attribute.class("has-hover-color"), 171 + attribute("style", "fill:var(--primary)"), 172 + attribute( 173 + "d", 174 + "M285.257 256c0-16.132-13.124-29.257-29.257-29.257S226.743 239.868 226.743 256s13.125 29.257 29.257 29.257S285.257 272.133 285.257 256zm-37.616.0c0-4.609 3.75-8.359 8.359-8.359s8.359 3.75 8.359 8.359c0 4.609-3.75 8.359-8.359 8.359C251.391 264.359 247.641 260.609 247.641 256z", 175 + ), 176 + ]), 177 + svg.path([ 178 + attribute("data-hover-color", "light-dark(#000000, #ffffff)"), 179 + attribute.class("has-hover-color"), 180 + attribute("style", "fill:var(--background)"), 181 + attribute( 182 + "d", 183 + "M256 391.837c-5.771.0-10.449 4.678-10.449 10.449s4.678 10.449 10.449 10.449c41.897.0 81.265-16.294 110.853-45.883 29.587-29.587 45.881-68.955 45.881-110.852.0-5.771-4.678-10.449-10.449-10.449s-10.449 4.678-10.449 10.449C391.837 330.9 330.9 391.837 256 391.837z", 184 + ), 185 + ]), 186 + svg.path([ 187 + attribute("data-hover-color", "light-dark(#000000, #ffffff)"), 188 + attribute.class("has-hover-color"), 189 + attribute("style", "fill:var(--background)"), 190 + attribute( 191 + "d", 192 + "M449.306 245.551c-5.771.0-10.449 4.678-10.449 10.449.0 1.481-.018 2.958-.052 4.43-.136 5.769 4.43 10.557 10.199 10.692.085.002.168.003.252.003 5.656.0 10.307-4.517 10.442-10.202.039-1.637.059-3.279.059-4.925C459.755 250.229 455.077 245.551 449.306 245.551z", 193 + ), 194 + ]), 195 + svg.path([ 196 + attribute("data-hover-color", "light-dark(#000000, #ffffff)"), 197 + attribute.class("has-hover-color"), 198 + attribute("style", "fill:var(--background)"), 199 + attribute( 200 + "d", 201 + "M447.55 284.239c-5.656-1.145-11.168 2.52-12.308 8.178-17.107 84.854-92.489 146.44-179.242 146.44-5.771.0-10.449 4.678-10.449 10.449s4.678 10.449 10.449 10.449c47.353.0 93.467-16.573 129.847-46.668 35.9-29.697 60.717-71.084 69.881-116.54C456.868 290.891 453.207 285.38 447.55 284.239z", 202 + ), 203 + ]), 204 + svg.path([ 205 + attribute("data-hover-color", "light-dark(#000000, #ffffff)"), 206 + attribute.class("has-hover-color"), 207 + attribute("style", "fill:var(--background)"), 208 + attribute( 209 + "d", 210 + "M256 120.163c5.771.0 10.449-4.678 10.449-10.449S261.771 99.265 256 99.265c-41.897.0-81.265 16.294-110.853 45.883C115.559 174.735 99.265 214.103 99.265 256c0 5.771 4.678 10.449 10.449 10.449s10.449-4.678 10.449-10.449c0-74.9 60.937-135.837 135.837-135.837z", 211 + ), 212 + ]), 213 + svg.path([ 214 + attribute("data-hover-color", "light-dark(#000000, #ffffff)"), 215 + attribute.class("has-hover-color"), 216 + attribute("style", "fill:var(--background)"), 217 + attribute( 218 + "d", 219 + "M62.996 240.876c-5.759-.14-10.557 4.43-10.692 10.199-.039 1.637-.059 3.279-.059 4.925.0 5.771 4.678 10.449 10.449 10.449S73.143 261.771 73.143 256c0-1.481.018-2.958.052-4.43C73.331 245.8 68.765 241.013 62.996 240.876z", 220 + ), 221 + ]), 222 + svg.path([ 223 + attribute("data-hover-color", "light-dark(#000000, #ffffff)"), 224 + attribute.class("has-hover-color"), 225 + attribute("style", "fill:var(--background)"), 226 + attribute( 227 + "d", 228 + "M256 73.143c5.771.0 10.449-4.678 10.449-10.449S261.771 52.245 256 52.245c-47.353.0-93.467 16.573-129.847 46.668-35.9 29.697-60.717 71.084-69.881 116.54-1.14 5.657 2.521 11.168 8.178 12.308.697.141 1.392.208 2.076.208 4.872.0 9.232-3.426 10.232-8.386C93.864 134.729 169.247 73.143 256 73.143z", 229 + ), 230 + ]), 231 + ], 232 + ), 233 + ], 234 + ) 235 + } 236 + 237 + fn woodpecker(size: Sizing) { 238 + html.a( 239 + [ 240 + attribute.style("width", int.to_string(size.width) <> "px"), 241 + attribute.style("height", int.to_string(size.height) <> "px"), 242 + attribute.href("https://ci.ollie.earth"), 243 + attribute("data-hover-color", "light-dark(#000000, #ffffff)"), 244 + ], 245 + [ 246 + svg.svg( 247 + [ 248 + attribute("viewBox", "0 0 22 22"), 249 + attribute("height", "100%"), 250 + attribute("width", "100%"), 251 + attribute("xmlns", "http://www.w3.org/2000/svg"), 252 + ], 253 + [ 254 + svg.path([ 255 + attribute("fill", "currentColor"), 256 + attribute( 257 + "d", 258 + "M1.263 2.744C2.41 3.832 2.845 4.932 4.118 5.08l.036.007c-.588.606-1.09 1.402-1.443 2.423-.38 1.096-.488 2.285-.614 3.659-.19 2.046-.401 4.364-1.556 7.269-2.486 6.258-1.12 11.63.332 17.317.664 2.604 1.348 5.297 1.642 8.107a.857.857 0 00.633.744.86.86 0 00.922-.323c.227-.313.524-.797.86-1.424.84 3.323 1.355 6.13 1.783 8.697a.866.866 0 001.517.41c2.88-3.463 3.763-8.636 2.184-12.674.459-2.433 1.402-4.45 2.398-6.583.536-1.15 1.08-2.318 1.55-3.566.228-.084.569-.314.79-.441l1.707-.981-.256 1.052a.864.864 0 001.678.408l.68-2.858 1.285-2.95a.863.863 0 10-1.581-.687l-1.152 2.669-2.383 1.372a18.97 18.97 0 00.508-2.981c.432-4.86-.718-9.074-3.066-11.266-.163-.157-.208-.281-.247-.26.095-.12.249-.26.358-.374 2.283-1.693 6.047-.147 8.319.75.589.232.876-.337.316-.67-1.95-1.153-5.948-4.196-8.188-6.193-.313-.275-.527-.607-.89-.913C9.825.555 4.072 3.057 1.355 2.569c-.102-.018-.166.103-.092.175m10.98 5.899c-.06 1.242-.603 1.8-1 2.208-.217.224-.426.436-.524.738-.236.714.008 1.51.66 2.143 1.974 1.84 2.925 5.527 2.538 9.86-.291 3.288-1.448 5.763-2.671 8.385-1.031 2.207-2.096 4.489-2.577 7.259a.853.853 0 00.056.48c1.02 2.434 1.135 6.197-.672 9.46a96.586 96.586 0 00-1.97-8.711c1.964-4.488 4.203-11.75 2.919-17.668-.325-1.497-1.304-3.276-2.387-4.207-.208-.18-.402-.237-.495-.167-.084.06-.151.238-.062.444.55 1.266.879 2.599 1.226 4.276 1.125 5.443-.956 12.49-2.835 16.782l-.116.259-.457.982c-.356-2.014-.85-3.95-1.33-5.84-1.38-5.406-2.68-10.515-.401-16.254 1.247-3.137 1.483-5.692 1.672-7.746.116-1.263.216-2.355.526-3.252.905-2.605 3.062-3.178 4.744-2.852 1.632.316 3.24 1.593 3.156 3.42zm-2.868.62a1.177 1.177 0 10.736-2.236 1.178 1.178 0 10-.736 2.237z", 259 + ), 260 + ]), 261 + ], 262 + ), 263 + ], 264 + ) 265 + } 266 + 267 + // socials ---------------------------------------------------------------------- 268 + 269 + pub fn socials( 270 + append_class class: option.Option(String), 271 + size size: Sizing, 272 + ) -> Element(_) { 273 + html.div( 274 + [ 275 + attribute.class( 276 + "hstack" 277 + <> class 278 + |> option.map(fn(class) { " " <> class }) 279 + |> option.unwrap(""), 280 + ), 281 + ], 282 + [ 283 + matrix(size), 284 + email(size), 285 + bluesky(size), 286 + tangled(size), 287 + github(size), 288 + // bsky 289 + // tangled 290 + // github 291 + // matrix 292 + // discord 293 + // email 294 + ], 295 + ) 296 + } 297 + 298 + fn matrix(size: Sizing) -> Element(_) { 299 + html.a( 300 + [ 301 + attribute.aria_label("Matrix"), 302 + attribute.href("https://matrix.to/#/@me:ollie.earth"), 303 + 304 + attribute.attribute("data-hover-color", "black"), 305 + attribute.attribute("data-hover-background", "white"), 306 + attribute.style("width", int.to_string(size.width) <> "px"), 307 + attribute.style("height", int.to_string(size.height) <> "px"), 308 + ], 309 + [ 310 + svg.svg( 311 + [ 312 + attribute("xmlns", "http://www.w3.org/2000/svg"), 313 + attribute("xml:space", "preserve"), 314 + attribute("viewBox", "0 0 26 26"), 315 + attribute("version", "1.1"), 316 + attribute("width", "100%"), 317 + attribute("height", "100%"), 318 + ], 319 + [ 320 + svg.g( 321 + [ 322 + attribute("stroke-width", ".05"), 323 + attribute("fill", "currentColor"), 324 + ], 325 + [ 326 + svg.path([ 327 + attribute( 328 + "d", 329 + "m0.685 0.595v24.81h1.785v0.59499h-2.47v-26h2.47v0.595z", 330 + ), 331 + ]), 332 + svg.path([ 333 + attribute( 334 + "d", 335 + "m8.315 8.46v1.255h0.035007c0.33499-0.48 0.73999-0.85 1.21-1.11 0.47-0.265 1.015-0.395 1.625-0.395 0.585 0 1.12 0.115 1.605 0.34 0.48501 0.225 0.85001 0.63 1.105 1.2 0.275-0.405 0.65-0.765 1.12-1.075 0.47001-0.31 1.03-0.465 1.675-0.465 0.49001 0 0.94501 0.060005 1.365 0.18 0.42001 0.12 0.775 0.31 1.075 0.575 0.3 0.265 0.52999 0.605 0.69999 1.03 0.16501 0.425 0.25001 0.935 0.25001 1.535v6.205h-2.545v-5.255c0-0.31-0.0093-0.605-0.03492-0.88001-0.02507-0.27499-0.09007-0.51499-0.19506-0.71499-0.11002-0.205-0.26503-0.365-0.47502-0.485-0.21-0.12-0.495-0.18-0.85-0.18-0.36001 0-0.65 0.06999-0.87002 0.205-0.22 0.14-0.395 0.315-0.52 0.54-0.12498 0.22-0.20999 0.47-0.24999 0.755-0.03993 0.28-0.065 0.565-0.065 0.85v5.165h-2.545v-5.2c0-0.275-0.0047-0.54501-0.02005-0.81501-0.0099-0.27-0.06498-0.515-0.15497-0.745-0.08994-0.225-0.23997-0.41-0.44996-0.545-0.21-0.135-0.515-0.205-0.925-0.205-0.12 0-0.28 0.02497-0.475 0.08-0.195 0.05501-0.39 0.155-0.575 0.305-0.185 0.15-0.345 0.365-0.475 0.645-0.13 0.28-0.195 0.65-0.195 1.105v5.38h-2.545v-9.28z", 336 + ), 337 + ]), 338 + svg.path([ 339 + attribute( 340 + "d", 341 + "m25.315 25.405v-24.81h-1.785v-0.595h2.47v26h-2.47v-0.59499z", 342 + ), 343 + ]), 344 + ], 345 + ), 346 + ], 347 + ), 348 + ], 349 + ) 350 + } 351 + 352 + fn email(size: Sizing) -> Element(_) { 353 + html.a( 354 + [ 355 + attribute.aria_label("Email"), 356 + attribute.href("mailto:web@ollie.earth"), 357 + // attribute.attribute("data-hover-color", "var(--secondary)"), 358 + attribute.style("width", int.to_string(size.width) <> "px"), 359 + attribute.style("height", int.to_string(size.height) <> "px"), 360 + ], 361 + [ 362 + svg.svg( 363 + [ 364 + attribute("xmlns", "http://www.w3.org/2000/svg"), 365 + attribute("viewBox", "0 0 .72 .72"), 366 + attribute("version", "1.1"), 367 + attribute("fill", "none"), 368 + attribute("width", "100%"), 369 + attribute("height", "100%"), 370 + ], 371 + [ 372 + svg.path([ 373 + attribute("stroke-width", ".072"), 374 + attribute("stroke-linejoin", "round"), 375 + attribute("stroke-linecap", "round"), 376 + attribute("stroke", "currentColor"), 377 + attribute( 378 + "d", 379 + "m0.074646 0.1641 0.24984 0.15615c0.023346 0.014591 0.052974 0.014591 0.07632 0l0.24984-0.15615m-0.54 0.396h0.504c0.039766 0 0.072-0.032234 0.072-0.072v-0.288c0-0.039764-0.032234-0.072-0.072-0.072h-0.504c-0.039764 0-0.072 0.032236-0.072 0.072v0.288c0 0.039766 0.032236 0.072 0.072 0.072z", 380 + ), 381 + ]), 382 + ], 383 + ), 384 + ], 385 + ) 386 + } 387 + 388 + fn bluesky(size: Sizing) -> Element(_) { 389 + html.a( 390 + [ 391 + attribute.aria_label("Bluesky"), 392 + attribute.href("https://bsky.app/profile/ollie.earth"), 393 + attribute.attribute("data-hover-color", "#006aff"), 394 + attribute.style("width", int.to_string(size.width) <> "px"), 395 + attribute.style("height", int.to_string(size.height) <> "px"), 396 + ], 397 + [ 398 + svg.svg( 399 + [ 400 + attribute("xmlns", "http://www.w3.org/2000/svg"), 401 + attribute("viewBox", "0 0 48 24"), 402 + attribute("version", "1.1"), 403 + attribute("fill", "none"), 404 + attribute("width", "100%"), 405 + attribute("height", "100%"), 406 + ], 407 + [ 408 + svg.path([ 409 + attribute("stroke-width", ".65268"), 410 + attribute("fill", "currentColor"), 411 + attribute( 412 + "d", 413 + "m12.083-4.7208c4.7887 3.6074 9.9404 10.921 11.831 14.845v10.366c0-0.22061-0.08485 0.02872-0.2676 0.56588-0.98686 2.9084-4.8416 14.259-13.656 5.1849-4.6412-4.7776-2.4926-9.5553 5.9557-10.998-4.8331 0.82499-10.267-0.53846-11.757-5.8839-0.42947-1.5377-1.1605-11.009-1.1605-12.289 0-6.408 5.5994-4.3939 9.0547-1.7916zm23.662 0c-4.7887 3.6074-9.9404 10.921-11.831 14.845v10.366c0-0.22061 0.08485 0.02872 0.2676 0.56588 0.98686 2.9084 4.8416 14.259 13.656 5.1849 4.6412-4.7776 2.4926-9.5553-5.9557-10.998 4.8331 0.82499 10.267-0.53846 11.757-5.8839 0.42946-1.5377 1.1605-11.009 1.1605-12.289 0-6.408-5.5987-4.3939-9.0547-1.7916z", 414 + ), 415 + ]), 416 + ], 417 + ), 418 + ], 419 + ) 420 + } 421 + 422 + fn forgejo(size: Sizing) { 423 + html.a( 424 + [ 425 + attribute.style("width", int.to_string(size.width) <> "px"), 426 + attribute.style("height", int.to_string(size.height) <> "px"), 427 + attribute.href("https://git.ollie.earth/nuv"), 428 + ], 429 + [ 430 + svg.svg( 431 + [ 432 + attribute("viewBox", "0 0 212 212"), 433 + attribute("xmlns", "http://www.w3.org/2000/svg"), 434 + attribute("width", "100%"), 435 + attribute("height", "100%"), 436 + ], 437 + [ 438 + svg.metadata( 439 + [ 440 + attribute("xmlns:dc", "http://purl.org/dc/elements/1.1/"), 441 + attribute("xmlns:cc", "http://creativecommons.org/ns#"), 442 + attribute( 443 + "xmlns:rdf", 444 + "http://www.w3.org/1999/02/22-rdf-syntax-ns#", 445 + ), 446 + ], 447 + [ 448 + element("rdf:rdf", [], [ 449 + element( 450 + "cc:work", 451 + [ 452 + attribute( 453 + "rdf:about", 454 + "https://codeberg.org/forgejo/meta/src/branch/readme/branding#logo", 455 + ), 456 + ], 457 + [ 458 + element("dc:title", [], [html.text("Forgejo logo")]), 459 + element( 460 + "cc:creator", 461 + [attribute("rdf:resource", "https://caesarschinas.com/")], 462 + [ 463 + element("cc:attributionname", [], [ 464 + html.text("Caesar Schinas"), 465 + ]), 466 + ], 467 + ), 468 + element( 469 + "cc:license", 470 + [ 471 + attribute( 472 + "rdf:resource", 473 + "http://creativecommons.org/licenses/by-sa/4.0/", 474 + ), 475 + ], 476 + [], 477 + ), 478 + ], 479 + ), 480 + ]), 481 + ], 482 + ), 483 + svg.g([attribute("transform", "translate(6,6)")], [ 484 + svg.path([ 485 + attribute("data-hover-stroke", "#ff6600"), 486 + attribute.class("has-hover-stroke"), 487 + attribute("stroke", "currentColor"), 488 + 489 + attribute("fill", "none"), 490 + attribute("stroke-width", "25"), 491 + attribute("d", "M58 168 v-98 a50 50 0 0 1 50-50 h20"), 492 + ]), 493 + svg.path([ 494 + attribute("data-hover-stroke", "#d40000"), 495 + attribute.class("has-hover-stroke"), 496 + attribute("stroke", "currentColor"), 497 + 498 + attribute("fill", "none"), 499 + attribute("stroke-width", "25"), 500 + attribute("d", "M58 168 v-30 a50 50 0 0 1 50-50 h20"), 501 + ]), 502 + svg.circle([ 503 + attribute("data-hover-stroke", "#ff6600"), 504 + attribute.class("has-hover-stroke"), 505 + attribute("stroke", "currentColor"), 506 + 507 + attribute("fill", "none"), 508 + attribute("stroke-width", "15"), 509 + attribute("r", "18"), 510 + attribute("cy", "20"), 511 + attribute("cx", "142"), 512 + ]), 513 + svg.circle([ 514 + attribute("data-hover-stroke", "#d40000"), 515 + attribute.class("has-hover-stroke"), 516 + attribute("stroke", "currentColor"), 517 + 518 + attribute("fill", "none"), 519 + attribute("stroke-width", "15"), 520 + attribute("r", "18"), 521 + attribute("cy", "88"), 522 + attribute("cx", "142"), 523 + ]), 524 + svg.circle([ 525 + attribute("data-hover-stroke", "#d40000"), 526 + attribute.class("has-hover-stroke"), 527 + attribute("stroke", "currentColor"), 528 + 529 + attribute("fill", "none"), 530 + attribute("stroke-width", "15"), 531 + attribute("r", "18"), 532 + attribute("cy", "180"), 533 + attribute("cx", "58"), 534 + ]), 535 + ]), 536 + ], 537 + ), 538 + ], 539 + ) 540 + } 541 + 542 + fn github(size: Sizing) { 543 + html.a( 544 + [ 545 + attribute.style("width", int.to_string(size.width) <> "px"), 546 + attribute.style("height", int.to_string(size.height) <> "px"), 547 + attribute.href("https://github.com/nnuuvv"), 548 + attribute("data-hover-color", "light-dark(#000000, #ffffff)"), 549 + ], 550 + [ 551 + svg.svg( 552 + [ 553 + attribute("viewBox", "0 0 512 512"), 554 + attribute("xml:space", "preserve"), 555 + attribute("xmlns", "http://www.w3.org/2000/svg"), 556 + ], 557 + [ 558 + svg.path([ 559 + attribute( 560 + "style", 561 + "fill-rule:evenodd;clip-rule:evenodd;fill:currentColor", 562 + ), 563 + attribute( 564 + "d", 565 + "M256 6.3C114.6 6.3 0 120.9 0 262.3c0 113.3 73.3 209 175 242.9 12.8 2.2 17.6-5.4 17.6-12.2 0-6.1-.3-26.2-.3-47.7-64.3 11.8-81-15.7-86.1-30.1-2.9-7.4-15.4-30.1-26.2-36.2-9-4.8-21.8-16.6-.3-17 20.2-.3 34.6 18.6 39.4 26.2 23 38.7 59.8 27.8 74.6 21.1 2.2-16.6 9-27.8 16.3-34.2-57-6.4-116.5-28.5-116.5-126.4 0-27.8 9.9-50.9 26.2-68.8-2.6-6.4-11.5-32.6 2.6-67.8 0 0 21.4-6.7 70.4 26.2 20.5-5.8 42.2-8.6 64-8.6s43.5 2.9 64 8.6c49-33.3 70.4-26.2 70.4-26.2 14.1 35.2 5.1 61.4 2.6 67.8 16.3 17.9 26.2 40.6 26.2 68.8 0 98.2-59.8 120-116.8 126.4 9.3 8 17.3 23.4 17.3 47.4 0 34.2-.3 61.8-.3 70.4 0 6.7 4.8 14.7 17.6 12.2C438.7 471.3 512 375.3 512 262.3c0-141.4-114.6-256-256-256", 566 + ), 567 + attribute("fill", "currentColor"), 568 + ]), 569 + ], 570 + ), 571 + ], 572 + ) 573 + } 574 + 575 + fn tangled(size: Sizing) { 576 + html.a( 577 + [ 578 + attribute.style("width", int.to_string(size.width) <> "px"), 579 + attribute.style("height", int.to_string(size.height) <> "px"), 580 + attribute.href("https://tangled.org/ollie.earth"), 581 + attribute("data-hover-color", "light-dark(#000000, #ffffff)"), 582 + ], 583 + [ 584 + svg.svg( 585 + [ 586 + attribute("height", "100%"), 587 + attribute("width", "100%"), 588 + 589 + attribute("xmlns:cc", "http://creativecommons.org/ns#"), 590 + attribute("xmlns:rdf", "http://www.w3.org/1999/02/22-rdf-syntax-ns#"), 591 + attribute("xmlns:svg", "http://www.w3.org/2000/svg"), 592 + attribute("xmlns", "http://www.w3.org/2000/svg"), 593 + attribute( 594 + "xmlns:sodipodi", 595 + "http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd", 596 + ), 597 + attribute( 598 + "xmlns:inkscape", 599 + "http://www.inkscape.org/namespaces/inkscape", 600 + ), 601 + attribute("inkscape:version", "1.4 (e7c3feb100, 2024-10-09)"), 602 + attribute("inkscape:export-ydpi", "96"), 603 + attribute("inkscape:export-xdpi", "96"), 604 + attribute( 605 + "inkscape:export-filename", 606 + "tangled_logotype_black_on_trans.svg", 607 + ), 608 + attribute( 609 + "sodipodi:docname", 610 + "tangled_dolly_face_only_black_on_trans.svg", 611 + ), 612 + attribute("viewBox", "0 0 25 25"), 613 + attribute.class(""), 614 + attribute.id("svg1"), 615 + attribute("version", "1.1"), 616 + ], 617 + [ 618 + element( 619 + "sodipodi:namedview", 620 + [ 621 + attribute("borderlayer", "true"), 622 + attribute("inkscape:current-layer", "g1"), 623 + attribute("inkscape:window-maximized", "0"), 624 + attribute("inkscape:window-y", "0"), 625 + attribute("inkscape:window-x", "0"), 626 + attribute("inkscape:window-height", "2160"), 627 + attribute("inkscape:window-width", "3840"), 628 + attribute("inkscape:cy", "8.9382717"), 629 + attribute("inkscape:cx", "3.1377863"), 630 + attribute("inkscape:zoom", "45.254834"), 631 + attribute("inkscape:deskcolor", "#d5d5d5"), 632 + attribute("inkscape:pagecheckerboard", "true"), 633 + attribute("inkscape:pageopacity", "0.0"), 634 + attribute("inkscape:showpageshadow", "2"), 635 + attribute("borderopacity", "0.25"), 636 + attribute("bordercolor", "#000000"), 637 + attribute("pagecolor", "#ffffff"), 638 + attribute.id("namedview1"), 639 + ], 640 + [ 641 + element( 642 + "inkscape:page", 643 + [ 644 + attribute("bleed", "0"), 645 + attribute("margin", "0"), 646 + attribute.id("page2"), 647 + attribute("height", "25"), 648 + attribute("width", "25"), 649 + attribute("y", "0"), 650 + attribute("x", "0"), 651 + ], 652 + [], 653 + ), 654 + ], 655 + ), 656 + svg.g( 657 + [ 658 + attribute("transform", "translate(-0.42924038,-0.87777209)"), 659 + attribute.id("g1"), 660 + attribute("inkscape:label", "Image"), 661 + attribute("inkscape:groupmode", "layer"), 662 + ], 663 + [ 664 + svg.path([ 665 + attribute( 666 + "sodipodi:nodetypes", 667 + "sccccccccccccccccccsscccccccccsccccccccccccccccccccccc", 668 + ), 669 + attribute.id("path4"), 670 + attribute( 671 + "d", 672 + "m 16.775491,24.987061 c -0.78517,-0.0064 -1.384202,-0.234614 -2.033994,-0.631295 -0.931792,-0.490188 -1.643475,-1.31368 -2.152014,-2.221647 C 11.781409,23.136647 10.701392,23.744942 9.4922931,24.0886 8.9774725,24.238111 8.0757679,24.389777 6.5811304,23.84827 4.4270703,23.124679 2.8580086,20.883331 3.0363279,18.599583 3.0037061,17.652919 3.3488675,16.723769 3.8381157,15.925061 2.5329485,15.224503 1.4686756,14.048584 1.0611184,12.606459 0.81344502,11.816973 0.82385989,10.966486 0.91519098,10.154906 1.2422711,8.2387903 2.6795811,6.5725716 4.5299585,5.9732484 5.2685364,4.290122 6.8802592,3.0349975 8.706276,2.7794663 c 1.2124148,-0.1688264 2.46744,0.084987 3.52811,0.7011837 1.545426,-1.7139736 4.237779,-2.2205077 6.293579,-1.1676231 1.568222,0.7488935 2.689625,2.3113526 2.961888,4.0151464 1.492195,0.5977882 2.749007,1.8168898 3.242225,3.3644951 0.329805,0.9581836 0.340709,2.0135956 0.127128,2.9974286 -0.381606,1.535184 -1.465322,2.842146 -2.868035,3.556463 0.0034,0.273204 0.901506,2.243045 0.751284,3.729647 -0.03281,1.858525 -1.211631,3.619894 -2.846433,4.475452 -0.953967,0.556812 -2.084452,0.546309 -3.120531,0.535398 z m -4.470079,-5.349839 c 1.322246,-0.147248 2.189053,-1.300106 2.862307,-2.338363 0.318287,-0.472954 0.561404,-1.002348 0.803,-1.505815 0.313265,0.287151 0.578698,0.828085 1.074141,0.956909 0.521892,0.162542 1.133743,0.03052 1.45325,-0.443554 0.611414,-1.140449 0.31004,-2.516537 -0.04602,-3.698347 C 18.232844,11.92927 17.945151,11.232927 17.397785,10.751793 17.514522,9.9283111 17.026575,9.0919791 16.332883,8.6609491 15.741721,9.1323278 14.842258,9.1294949 14.271975,8.6252369 13.178927,9.7400102 12.177239,9.7029996 11.209704,8.8195135 10.992255,8.6209543 10.577326,10.031484 9.1211947,9.2324497 8.2846288,9.9333947 7.6359672,10.607693 7.0611981,11.578553 6.5026891,12.62523 5.9177873,13.554793 5.867393,14.69141 c -0.024234,0.66432 0.4948601,1.360337 1.1982269,1.306329 0.702996,0.06277 1.1815208,-0.629091 1.7138087,-0.916491 0.079382,0.927141 0.1688108,1.923227 0.4821259,2.828358 0.3596254,1.171275 1.6262605,1.915695 2.8251855,1.745211 0.08481,-0.0066 0.218672,-0.01769 0.218672,-0.0176 z m 0.686342,-3.497495 c -0.643126,-0.394168 -0.33365,-1.249599 -0.359402,-1.870938 0.064,-0.749774 0.115321,-1.538054 0.452402,-2.221125 0.356724,-0.487008 1.226721,-0.299139 1.265134,0.325689 -0.02558,0.628509 -0.314101,1.25416 -0.279646,1.9057 -0.07482,0.544043 0.05418,1.155133 -0.186476,1.652391 -0.197455,0.275121 -0.599638,0.355105 -0.892012,0.208283 z m -2.808766,-0.358124 c -0.605767,-0.328664 -0.4133176,-1.155655 -0.5083256,-1.73063 0.078762,-0.66567 0.013203,-1.510085 0.5705316,-1.976886 0.545037,-0.380109 1.286917,0.270803 1.029164,0.868384 -0.274913,0.755214 -0.09475,1.580345 -0.08893,2.34609 -0.104009,0.451702 -0.587146,0.691508 -1.002445,0.493042 z", 673 + ), 674 + attribute("style", "stroke-width:0.111183;"), 675 + attribute("fill", "currentColor"), 676 + attribute.class("dolly"), 677 + ]), 678 + ], 679 + ), 680 + svg.metadata([attribute.id("metadata1")], [ 681 + element("rdf:rdf", [], [ 682 + element("cc:work", [attribute("rdf:about", "")], [ 683 + element( 684 + "cc:license", 685 + [ 686 + attribute( 687 + "rdf:resource", 688 + "http://creativecommons.org/licenses/by/4.0/", 689 + ), 690 + ], 691 + [], 692 + ), 693 + ]), 694 + element( 695 + "cc:license", 696 + [ 697 + attribute( 698 + "rdf:about", 699 + "http://creativecommons.org/licenses/by/4.0/", 700 + ), 701 + ], 702 + [ 703 + element( 704 + "cc:permits", 705 + [ 706 + attribute( 707 + "rdf:resource", 708 + "http://creativecommons.org/ns#Reproduction", 709 + ), 710 + ], 711 + [], 712 + ), 713 + element( 714 + "cc:permits", 715 + [ 716 + attribute( 717 + "rdf:resource", 718 + "http://creativecommons.org/ns#Distribution", 719 + ), 720 + ], 721 + [], 722 + ), 723 + element( 724 + "cc:requires", 725 + [ 726 + attribute( 727 + "rdf:resource", 728 + "http://creativecommons.org/ns#Notice", 729 + ), 730 + ], 731 + [], 732 + ), 733 + element( 734 + "cc:requires", 735 + [ 736 + attribute( 737 + "rdf:resource", 738 + "http://creativecommons.org/ns#Attribution", 739 + ), 740 + ], 741 + [], 742 + ), 743 + element( 744 + "cc:permits", 745 + [ 746 + attribute( 747 + "rdf:resource", 748 + "http://creativecommons.org/ns#DerivativeWorks", 749 + ), 750 + ], 751 + [], 752 + ), 753 + ], 754 + ), 755 + ]), 756 + ]), 757 + ], 758 + ), 759 + ], 760 + ) 761 + }
static/fonts/Papernotes.woff2

This is a binary file and will not be displayed.

-27
static/media/discord.svg
··· 1 - <svg version="1.2" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1396 1070" width="1396" height="1070"> 2 - <title>Discord_logo-svg</title> 3 - <defs> 4 - <clipPath clipPathUnits="userSpaceOnUse" id="cp1"> 5 - <path d="m0 0h5586.5v1069.8h-5586.5z"/> 6 - </clipPath> 7 - <clipPath clipPathUnits="userSpaceOnUse" id="cp2"> 8 - <path d="m0 0h5586.5v1069.8h-5586.5z"/> 9 - </clipPath> 10 - </defs> 11 - <style> 12 - .s0 { fill: #5865f2 } 13 - </style> 14 - <g id="layer1"> 15 - <g id="g866"> 16 - <g id="Clip-Path: g835" clip-path="url(#cp1)"> 17 - <g id="g835"> 18 - <g id="Clip-Path: g833" clip-path="url(#cp2)"> 19 - <g id="g833"> 20 - <path id="path815" fill-rule="evenodd" class="s0" d="m1389.7 890.5c-120.8 89.5-238.1 143.8-353.3 179.3-28.6-38.7-53.8-80-75.7-123.3 41.6-15.7 81.6-35 119.4-57.6-9.9-7.3-19.7-14.9-29.2-22.8-226.9 106.3-476.5 106.3-706.1 0-9.4 7.9-19.2 15.5-29.2 22.8 37.7 22.5 77.5 41.8 119.1 57.4-21.8 43.5-47.2 84.6-75.6 123.4-115.2-35.5-232.3-89.8-353.2-179.2-24.7-262.1 24.7-528 207-800.7 90.3-41.9 187-72.5 288.1-89.8 12.5 22.2 27.3 52.1 37.3 75.8q158.1-24 319.1 0c10-23.7 24.5-53.6 36.9-75.8 101 17.3 197.6 47.7 288 89.6 157.9 233.6 236.4 497 207.4 800.9zm-798.2-302.6c0-78.2-56.1-141.4-125.5-141.4-69.4 0-125.5 63.2-125.5 141.4 0 78.2 56.1 141.4 125.5 141.4 69.4 0 125.5-63.2 125.5-141.4zm463.7 0c0-78.2-56.1-141.4-125.5-141.4-69.4 0-125.5 63.2-125.5 141.4 0 78.2 56.1 141.4 125.5 141.4 69.4 0 125.5-63.2 125.5-141.4z"/> 21 - </g> 22 - </g> 23 - </g> 24 - </g> 25 - </g> 26 - </g> 27 - </svg>
-95
static/media/dolly.svg
··· 1 - 2 - <svg 3 - version="1.1" 4 - id="svg1" 5 - class="" 6 - width="25" 7 - height="25" 8 - viewBox="0 0 25 25" 9 - sodipodi:docname="tangled_dolly_face_only_black_on_trans.svg" 10 - inkscape:export-filename="tangled_logotype_black_on_trans.svg" 11 - inkscape:export-xdpi="96" 12 - inkscape:export-ydpi="96" 13 - inkscape:version="1.4 (e7c3feb100, 2024-10-09)" 14 - xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" 15 - xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" 16 - xmlns="http://www.w3.org/2000/svg" 17 - xmlns:svg="http://www.w3.org/2000/svg" 18 - xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 19 - xmlns:cc="http://creativecommons.org/ns#"> 20 - <style> 21 - .dolly { 22 - color: #000000; 23 - } 24 - 25 - @media (prefers-color-scheme: dark) { 26 - .dolly { 27 - color: #ffffff; 28 - } 29 - } 30 - </style> 31 - <sodipodi:namedview 32 - id="namedview1" 33 - pagecolor="#ffffff" 34 - bordercolor="#000000" 35 - borderopacity="0.25" 36 - inkscape:showpageshadow="2" 37 - inkscape:pageopacity="0.0" 38 - inkscape:pagecheckerboard="true" 39 - inkscape:deskcolor="#d5d5d5" 40 - inkscape:zoom="45.254834" 41 - inkscape:cx="3.1377863" 42 - inkscape:cy="8.9382717" 43 - inkscape:window-width="3840" 44 - inkscape:window-height="2160" 45 - inkscape:window-x="0" 46 - inkscape:window-y="0" 47 - inkscape:window-maximized="0" 48 - inkscape:current-layer="g1" 49 - borderlayer="true"> 50 - <inkscape:page 51 - x="0" 52 - y="0" 53 - width="25" 54 - height="25" 55 - id="page2" 56 - margin="0" 57 - bleed="0" /> 58 - </sodipodi:namedview> 59 - <g 60 - inkscape:groupmode="layer" 61 - inkscape:label="Image" 62 - id="g1" 63 - transform="translate(-0.42924038,-0.87777209)"> 64 - <path 65 - class="dolly" 66 - fill="currentColor" 67 - style="stroke-width:0.111183;" 68 - d="m 16.775491,24.987061 c -0.78517,-0.0064 -1.384202,-0.234614 -2.033994,-0.631295 -0.931792,-0.490188 -1.643475,-1.31368 -2.152014,-2.221647 C 11.781409,23.136647 10.701392,23.744942 9.4922931,24.0886 8.9774725,24.238111 8.0757679,24.389777 6.5811304,23.84827 4.4270703,23.124679 2.8580086,20.883331 3.0363279,18.599583 3.0037061,17.652919 3.3488675,16.723769 3.8381157,15.925061 2.5329485,15.224503 1.4686756,14.048584 1.0611184,12.606459 0.81344502,11.816973 0.82385989,10.966486 0.91519098,10.154906 1.2422711,8.2387903 2.6795811,6.5725716 4.5299585,5.9732484 5.2685364,4.290122 6.8802592,3.0349975 8.706276,2.7794663 c 1.2124148,-0.1688264 2.46744,0.084987 3.52811,0.7011837 1.545426,-1.7139736 4.237779,-2.2205077 6.293579,-1.1676231 1.568222,0.7488935 2.689625,2.3113526 2.961888,4.0151464 1.492195,0.5977882 2.749007,1.8168898 3.242225,3.3644951 0.329805,0.9581836 0.340709,2.0135956 0.127128,2.9974286 -0.381606,1.535184 -1.465322,2.842146 -2.868035,3.556463 0.0034,0.273204 0.901506,2.243045 0.751284,3.729647 -0.03281,1.858525 -1.211631,3.619894 -2.846433,4.475452 -0.953967,0.556812 -2.084452,0.546309 -3.120531,0.535398 z m -4.470079,-5.349839 c 1.322246,-0.147248 2.189053,-1.300106 2.862307,-2.338363 0.318287,-0.472954 0.561404,-1.002348 0.803,-1.505815 0.313265,0.287151 0.578698,0.828085 1.074141,0.956909 0.521892,0.162542 1.133743,0.03052 1.45325,-0.443554 0.611414,-1.140449 0.31004,-2.516537 -0.04602,-3.698347 C 18.232844,11.92927 17.945151,11.232927 17.397785,10.751793 17.514522,9.9283111 17.026575,9.0919791 16.332883,8.6609491 15.741721,9.1323278 14.842258,9.1294949 14.271975,8.6252369 13.178927,9.7400102 12.177239,9.7029996 11.209704,8.8195135 10.992255,8.6209543 10.577326,10.031484 9.1211947,9.2324497 8.2846288,9.9333947 7.6359672,10.607693 7.0611981,11.578553 6.5026891,12.62523 5.9177873,13.554793 5.867393,14.69141 c -0.024234,0.66432 0.4948601,1.360337 1.1982269,1.306329 0.702996,0.06277 1.1815208,-0.629091 1.7138087,-0.916491 0.079382,0.927141 0.1688108,1.923227 0.4821259,2.828358 0.3596254,1.171275 1.6262605,1.915695 2.8251855,1.745211 0.08481,-0.0066 0.218672,-0.01769 0.218672,-0.0176 z m 0.686342,-3.497495 c -0.643126,-0.394168 -0.33365,-1.249599 -0.359402,-1.870938 0.064,-0.749774 0.115321,-1.538054 0.452402,-2.221125 0.356724,-0.487008 1.226721,-0.299139 1.265134,0.325689 -0.02558,0.628509 -0.314101,1.25416 -0.279646,1.9057 -0.07482,0.544043 0.05418,1.155133 -0.186476,1.652391 -0.197455,0.275121 -0.599638,0.355105 -0.892012,0.208283 z m -2.808766,-0.358124 c -0.605767,-0.328664 -0.4133176,-1.155655 -0.5083256,-1.73063 0.078762,-0.66567 0.013203,-1.510085 0.5705316,-1.976886 0.545037,-0.380109 1.286917,0.270803 1.029164,0.868384 -0.274913,0.755214 -0.09475,1.580345 -0.08893,2.34609 -0.104009,0.451702 -0.587146,0.691508 -1.002445,0.493042 z" 69 - id="path4" 70 - sodipodi:nodetypes="sccccccccccccccccccsscccccccccsccccccccccccccccccccccc" /> 71 - </g> 72 - <metadata 73 - id="metadata1"> 74 - <rdf:RDF> 75 - <cc:Work 76 - rdf:about=""> 77 - <cc:license 78 - rdf:resource="http://creativecommons.org/licenses/by/4.0/" /> 79 - </cc:Work> 80 - <cc:License 81 - rdf:about="http://creativecommons.org/licenses/by/4.0/"> 82 - <cc:permits 83 - rdf:resource="http://creativecommons.org/ns#Reproduction" /> 84 - <cc:permits 85 - rdf:resource="http://creativecommons.org/ns#Distribution" /> 86 - <cc:requires 87 - rdf:resource="http://creativecommons.org/ns#Notice" /> 88 - <cc:requires 89 - rdf:resource="http://creativecommons.org/ns#Attribution" /> 90 - <cc:permits 91 - rdf:resource="http://creativecommons.org/ns#DerivativeWorks" /> 92 - </cc:License> 93 - </rdf:RDF> 94 - </metadata> 95 - </svg>
static/media/forgejo.png

This is a binary file and will not be displayed.

-16
static/media/github.svg
··· 1 - <svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" viewBox="0 0 512 512"> 2 - <style> 3 - .github { 4 - color: #000000; 5 - } 6 - 7 - @media (prefers-color-scheme: dark) { 8 - .github { 9 - color: #ffffff; 10 - } 11 - } 12 - </style> 13 - <path 14 - class="github" 15 - fill="currentColor" 16 - d="M256 6.3C114.6 6.3 0 120.9 0 262.3c0 113.3 73.3 209 175 242.9 12.8 2.2 17.6-5.4 17.6-12.2 0-6.1-.3-26.2-.3-47.7-64.3 11.8-81-15.7-86.1-30.1-2.9-7.4-15.4-30.1-26.2-36.2-9-4.8-21.8-16.6-.3-17 20.2-.3 34.6 18.6 39.4 26.2 23 38.7 59.8 27.8 74.6 21.1 2.2-16.6 9-27.8 16.3-34.2-57-6.4-116.5-28.5-116.5-126.4 0-27.8 9.9-50.9 26.2-68.8-2.6-6.4-11.5-32.6 2.6-67.8 0 0 21.4-6.7 70.4 26.2 20.5-5.8 42.2-8.6 64-8.6s43.5 2.9 64 8.6c49-33.3 70.4-26.2 70.4-26.2 14.1 35.2 5.1 61.4 2.6 67.8 16.3 17.9 26.2 40.6 26.2 68.8 0 98.2-59.8 120-116.8 126.4 9.3 8 17.3 23.4 17.3 47.4 0 34.2-.3 61.8-.3 70.4 0 6.7 4.8 14.7 17.6 12.2C438.7 471.3 512 375.3 512 262.3c0-141.4-114.6-256-256-256" style="fill-rule:evenodd;clip-rule:evenodd;fill:currentColor"/></svg>
+7
static/media/lucy.svg
··· 1 + <svg width="2105" height="2016" viewBox="0 0 2105 2016" fill="none" xmlns="http://www.w3.org/2000/svg"> 2 + <path d="M842.026 129.177C870.114 49.5833 974.531 31.1719 1028.15 96.3575L1309.17 438.02C1343.94 480.296 1395.4 505.347 1450.14 506.68L1892.78 517.45C1977.29 519.505 2026.92 612.947 1981.45 683.983L1742.87 1056.65C1728.28 1079.43 1718.77 1105.09 1715 1131.88C1711.22 1158.66 1713.27 1185.95 1721 1211.87L1847.34 1635.7C1871.42 1716.45 1797.88 1792.71 1716.03 1771.44L1287.55 1660.11C1261.36 1653.3 1234.01 1652.21 1207.36 1656.91C1180.72 1661.6 1155.39 1671.98 1133.11 1687.34L768.557 1938.51C698.913 1986.48 603.729 1939.98 598.726 1855.86L572.502 1414.38C569.257 1359.74 542.373 1309.24 498.866 1276.01L147.203 1007.41C80.1767 956.216 94.8588 851.43 173.566 820.594L585.833 659.08C636.813 639.107 676.599 597.967 694.813 546.348L842.026 129.177Z" fill="#FFAFF3"/> 3 + <path d="M918.91 20.3875C868.969 29.1948 823.32 62.3526 804.42 115.904L657.186 533.07C642.831 573.741 611.52 606.123 571.327 621.871L159.044 783.395C53.2498 824.843 32.7918 970.356 122.981 1039.24L474.644 1307.81C491.576 1320.73 505.522 1337.15 515.528 1355.96C525.534 1374.76 531.366 1395.5 532.625 1416.76L558.835 1858.23C565.559 1971.49 697.668 2035.92 791.287 1971.44L791.289 1971.43L1155.87 1720.26L1155.87 1720.25C1173.42 1708.15 1193.38 1699.97 1214.37 1696.27C1235.37 1692.57 1256.92 1693.43 1277.55 1698.8L1277.55 1698.8L1706.04 1810.11C1816.06 1838.7 1918.17 1732.96 1885.75 1624.22L1885.75 1624.23L1759.42 1200.41L1759.42 1200.41C1753.33 1180 1751.72 1158.52 1754.69 1137.42C1757.66 1116.33 1765.15 1096.13 1776.65 1078.2L1776.65 1078.19L2015.25 705.513L2015.24 705.511C2076.44 609.933 2007.46 480.197 1893.87 477.434L1451.21 466.681C1408.06 465.633 1367.56 445.914 1340.17 412.608L1059.15 70.9554C1023.08 27.1014 968.841 11.5585 918.896 20.3665M932.34 96.6134C955.035 92.6111 979.819 100.451 997.365 121.779L1278.38 463.422C1320.52 514.663 1382.95 545.042 1449.26 546.655L1891.92 557.408C1947.35 558.754 1977.63 615.896 1947.86 662.382L1709.27 1035.06C1673.48 1090.93 1663.8 1159.69 1682.74 1223.26L1809.08 1647.07C1824.81 1699.85 1779.83 1746.62 1726.15 1732.68L1726.15 1732.68L1297.66 1621.36C1233.45 1604.67 1165.09 1616.73 1110.46 1654.38L745.884 1905.55C700.205 1937.02 641.945 1908.45 638.676 1853.48L612.469 1412.01C608.537 1345.78 575.914 1284.5 523.186 1244.22L171.524 975.65C127.662 942.151 136.58 878.1 188.203 857.867L600.485 696.341C662.256 672.139 710.525 622.24 732.608 559.671L732.608 559.669L879.842 142.504C889.034 116.463 909.64 100.618 932.335 96.6154" fill="#151515"/> 4 + <path d="M790.631 1144.08C833.367 1136.54 861.904 1095.79 854.37 1053.06C846.836 1010.32 806.085 981.793 763.349 989.329C720.613 996.866 692.076 1037.62 699.61 1080.35C707.144 1123.08 747.896 1151.62 790.631 1144.08Z" fill="#151515"/> 5 + <path d="M1423.7 1032.45C1466.43 1024.92 1494.97 984.164 1487.43 941.432C1479.9 898.699 1439.15 870.166 1396.41 877.703C1353.68 885.239 1325.14 925.991 1332.67 968.724C1340.21 1011.46 1380.96 1039.99 1423.7 1032.45Z" fill="#151515"/> 6 + <path d="M1042.09 1126.57C1037.19 1128.46 1032.71 1131.3 1028.9 1134.92C1025.1 1138.54 1022.04 1142.88 1019.92 1147.68C1017.79 1152.49 1016.63 1157.66 1016.5 1162.91C1016.37 1168.16 1017.28 1173.39 1019.17 1178.29C1024.11 1191.06 1031.51 1202.74 1040.96 1212.66L1040.96 1212.66C1050.41 1222.58 1061.72 1230.53 1074.25 1236.07L1074.26 1236.08C1086.77 1241.62 1100.25 1244.64 1113.94 1244.97L1113.95 1244.97L1113.97 1244.97C1127.65 1245.29 1141.26 1242.92 1154.03 1237.99L1154.04 1237.99C1166.81 1233.06 1178.49 1225.66 1188.4 1216.21L1188.41 1216.21L1188.41 1216.2C1198.32 1206.76 1206.27 1195.45 1211.81 1182.94C1217.37 1170.41 1220.39 1156.9 1220.71 1143.2C1220.96 1132.6 1216.99 1122.33 1209.67 1114.65C1202.34 1106.98 1192.27 1102.53 1181.66 1102.28C1176.41 1102.15 1171.19 1103.07 1166.29 1104.96C1161.39 1106.86 1156.91 1109.7 1153.11 1113.33C1149.31 1116.95 1146.26 1121.29 1144.14 1126.1C1142.02 1130.9 1140.86 1136.08 1140.74 1141.33C1140.66 1144.5 1139.96 1147.63 1138.67 1150.53L1138.67 1150.54L1138.66 1150.56C1137.37 1153.47 1135.52 1156.1 1133.22 1158.3C1130.91 1160.5 1128.2 1162.22 1125.23 1163.36L1125.21 1163.37C1122.23 1164.52 1119.06 1165.07 1115.87 1165C1112.69 1164.92 1109.55 1164.21 1106.64 1162.92L1106.62 1162.92L1106.61 1162.91C1103.7 1161.62 1101.08 1159.78 1098.88 1157.48L1098.88 1157.47L1098.88 1157.47C1096.68 1155.16 1094.96 1152.45 1093.81 1149.47C1091.92 1144.57 1089.08 1140.09 1085.46 1136.29C1081.83 1132.49 1077.5 1129.43 1072.69 1127.31C1067.89 1125.18 1062.71 1124.02 1057.46 1123.89C1052.21 1123.76 1046.99 1124.67 1042.09 1126.57Z" fill="#151515"/> 7 + </svg>
static/media/lustre.png

This is a binary file and will not be displayed.

static/media/small_snoot_round.png

This is a binary file and will not be displayed.

static/media/snoot.png

This is a binary file and will not be displayed.

+61 -2
static/style.css
··· 1 - nav[data-topnav] { 2 - font-size: var(--text-7) 1 + @font-face { 2 + font-family: "Papernotes"; 3 + font-display: swap; 4 + src: url('/fonts/Papernotes.woff2') format("woff2"); 3 5 } 4 6 7 + * { 8 + font-family: "Papernotes" !important; 9 + } 10 + 11 + /* hover colors using `data-hover-color` and `data-hover-background` attributes */ 5 12 a:hover { 13 + cursor: pointer; 14 + 6 15 color: attr(data-hover-color type(<color>), var(--foreground)); 7 16 background: attr(data-hover-background type(<color>), var(--background)); 8 17 } 18 + 19 + a:hover .has-hover-color { 20 + fill: currentColor !important; 21 + color: attr(data-hover-color type(<color>), var(--foreground)); 22 + 23 + } 24 + 25 + a:hover .has-hover-stroke { 26 + stroke: currentColor; 27 + color: attr(data-hover-stroke type(<color>), var(--foreground)); 28 + 29 + } 30 + 31 + 32 + /* custom styling stuff */ 33 + 34 + nav[data-topnav] { 35 + font-size: var(--text-7); 36 + } 37 + 38 + @media screen and (max-width: 600px) { 39 + .hide-md { 40 + display: none; 41 + } 42 + } 43 + 44 + @media screen and (max-width: 350px) { 45 + .hide-s { 46 + display: none; 47 + } 48 + } 49 + 50 + @media screen and (min-width: 600px) { 51 + .show-md { 52 + display: none; 53 + } 54 + } 55 + 56 + .badge:hover { 57 + color: var(--background); 58 + background-color: var(--foreground); 59 + } 60 + 61 + .footer { 62 + margin: var(--space-6) 0; 63 + } 64 + 65 + .text-light { 66 + color: var(--muted-foreground); 67 + }