Added blog posts, and improved homepage

This commit is contained in:
2025-05-23 18:12:16 +02:00
parent 99ab5d388c
commit 847fb6491d
28 changed files with 721 additions and 132 deletions

5
.idea/codeStyles/codeStyleConfig.xml generated Normal file
View File

@@ -0,0 +1,5 @@
<component name="ProjectCodeStyleConfiguration">
<state>
<option name="PREFERRED_PROJECT_CODE_STYLE" value="Default" />
</state>
</component>

7
.idea/dictionaries/project.xml generated Normal file
View File

@@ -0,0 +1,7 @@
<component name="ProjectDictionaryState">
<dictionary name="project">
<words>
<w>prettysunflower</w>
</words>
</dictionary>
</component>

4
.idea/watcherTasks.xml generated Normal file
View File

@@ -0,0 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectTasksOptions" suppressed-tasks="SCSS" />
</project>

View File

@@ -0,0 +1,6 @@
package baseTemplates
import "embed"
//go:embed templates/*
var FS embed.FS

View File

@@ -0,0 +1,36 @@
{{define "base"}}
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="/static/css/style.css">
<title></title>
</head>
<body class="{{ template "bodyClass" . }}">
<header>
<nav>
<div>
<div>
<a href="/">
<img src="https://kakigoori.dev/5819581e-42b9-41a7-bab6-c3f99de30934/auto" alt="Avatar of prettysunflower">
</a>
<a href="/">
prettysunflower
</a>
</div>
<div>
<a href="/blog/">Blog</a>
<a href="/regio43/">Regio43</a>
<a href="https://git.prettysunflower.moe">Git</a>
<a href="#">Bookmarks</a>
<a href="/keys">Public keys</a>
</div>
</div>
</nav>
</header>
{{ template "content" . }}
</body>
</html>
{{ end }}

View File

@@ -0,0 +1,8 @@
{{ define "bodyClass" }}post post-{{ .Slug }}{{ end }}
{{ define "content" }}
<main class="max-80">
<h1>{{ .Title }}</h1>
{{ .Body }}
</main>
{{ end }}

View File

@@ -0,0 +1,13 @@
{{ define "bodyClass" }}page-postsList{{ end }}
{{ define "content" }}
<main class="max-80">
<h1>Blog</h1>
<ul>
{{ range .Posts }}
<li><a href="/blog/{{ .Slug }}/"><strong>{{ .Date.Format "2006-01-02" }}</strong> - {{ .Title }}</a></li>
{{ end }}
</ul>
</main>
{{ end }}

View File

@@ -0,0 +1,77 @@
{{ define "bodyClass" }}page-index{{ end }}
{{ define "content" }}
<main>
<div class="columns max-80" id="presentation">
<div class="image-container">
<img src="https://kakigoori.dev/53783a71-b5fc-4f5c-b2b8-86a0a969cba8/height/1000/auto">
</div>
<div>
<h1>Nyallo! (=^ ◡ ^=)</h1>
<p>
We're Remilia (<a href="https://pronouns.within.lgbt/she/her/her/hers/herself">she</a>/<a href="https://pronouns.within.lgbt/they/them/their/theirs/themself">they</a>), Xeon (<a href="https://pronouns.within.lgbt/they/them/their/theirs/themselves">they/them</a>), and Takeno (<a href="https://pronouns.within.lgbt/she/her/her/hers/herself">she/her</a>),
alias prettysunflower! 🌻
</p>
<p>
We are software/website developers at the <a href="https://koumbit.org">Réseau Koumbit</a>, Factorio and Touhou players, and your local trans woman/enby/plural person.
</p>
<p>
We do love doing computer/servers/code stuff, riding trains, reading yuri manga, and making HRT in our kitchen. Oh, and sunflowers, of course, they're pretty!
</p>
</div>
</div>
<div class="max-80" id="on-the-internet">
<h2>Where are we on the Internet?</h2>
<div class="columns">
<div>
<div>
<h3>Contact</h3>
<a href="mailto:me@prettysunflower.moe"><img src="/static/svg/email.svg"> me@prettysunflower.moe</a>
<a href="https://signal.me/#eu/zjqNXS3NkV3u5tPjdactntaSODDy1IPRUQmcQ-v2g7LZ4W6Ip2xJ7pyL1PN1gd_q"><img src="/static/svg/signal.svg"> Signal (prettysunflower.43)</a>
<a href="/keys/"><img src="/static/svg/key.svg"> Public keys</a>
</div>
<div>
<h3>Socials</h3>
<a href="https://bsky.app/profile/prettysunflower.moe"><img src="/static/svg/bluesky.svg"> prettysunflower.moe</a>
<a href="https://akkoma.prettysunflower.moe/prettysunflower"><img src="/static/svg/fediverse.svg"> @prettysunflower<wbr />@akkoma.prettysunflower.moe</a>
</div>
</div>
<div>
<div>
<h3>Code</h3>
<a href="https://git.prettysunflower.moe"><img src="/static/svg/gitea.svg"> Gitea (self-hosted git)</a>
<a href="https://github.com/prettysunflower"><img src="/static/svg/github.svg"> GitHub</a>
</div>
<div>
<h3>Internal and public services</h3>
<a href="https://privatebin.remilia.koumbit.org/">Privatebin</a>
<a href="https://qr.prettysunflower.moe">QR Generator</a>
<a href="https://invidious.prettysunflower.moe">Invidious</a>
<a href="https://httpdebug.remilia.koumbit.org">HTTP Debug</a>
</div>
</div>
</div>
</div>
<div class="max-80" id="main-projects">
<h2>Our main projects</h2>
<div>
<img src="https://kakigoori.dev/bcf6fdd9-3855-4f4d-9b5a-0791e14e29c7/height/400/auto">
<div>
<h3>Kakigoori</h3>
<p>
Kakigoori is an picture distribution system to publish images on the web.
Upload it once, and Kakigoori will create versions of the image
optimized for the web (AVIF, WebP).
</p>
</div>
</div>
</div>
</main>
{{ end }}

12
blog/init.go Normal file
View File

@@ -0,0 +1,12 @@
package blog
import (
"fmt"
"net/http"
)
func InitHttpHandlers() {
prefix := "/blog/"
http.HandleFunc(fmt.Sprint(prefix, "{$}"), blogTop)
http.HandleFunc(fmt.Sprint(prefix, "{slug}/"), showPost)
}

57
blog/postBuilder.go Normal file
View File

@@ -0,0 +1,57 @@
package blog
import (
"github.com/gomarkdown/markdown"
"github.com/gomarkdown/markdown/html"
"github.com/gomarkdown/markdown/parser"
"html/template"
"regexp"
"time"
)
func makePost(markdownContent []byte) Post {
headerRegex := regexp.MustCompile(`(?ms)^---\n.*?---`)
header := headerRegex.Find(markdownContent)
headerKeysRegex := regexp.MustCompile(`(?m)^(\w+): ([^\n]*)$`)
headerKeys := headerKeysRegex.FindAllSubmatch(header, -1)
postBody := headerRegex.ReplaceAll(markdownContent, []byte(""))
post := Post{}
for _, headerKey := range headerKeys {
key, value := string(headerKey[1]), string(headerKey[2])
switch key {
case "title":
post.Title = value
case "date":
date, err := time.Parse(time.DateOnly, value)
if err != nil {
panic(err)
}
post.Date = date
case "updatedDate":
date, err := time.Parse(time.DateOnly, value)
if err != nil {
panic(err)
}
post.UpdatedDate = date
case "author":
post.Author = value
case "slug":
post.Slug = value
}
}
extensions := parser.CommonExtensions | parser.AutoHeadingIDs | parser.NoEmptyLineBeforeBlock
p := parser.NewWithExtensions(extensions)
doc := p.Parse(postBody)
// create HTML renderer with extensions
htmlFlags := html.CommonFlags | html.HrefTargetBlank
opts := html.RendererOptions{Flags: htmlFlags}
renderer := html.NewRenderer(opts)
post.Body = template.HTML(markdown.Render(doc, renderer))
return post
}

87
blog/posts.go Normal file
View File

@@ -0,0 +1,87 @@
package blog
import (
"embed"
"fmt"
"html/template"
"net/http"
"prettysunflower-website/baseTemplates"
"sort"
"strings"
"time"
)
type Post struct {
Slug string
Title string
Author string
Date time.Time
UpdatedDate time.Time
Body template.HTML
}
//go:embed posts/*
var postsFS embed.FS
func getAllPosts() []Post {
postsDir, err := postsFS.ReadDir("posts")
if err != nil {
panic(err)
}
var posts []Post
for _, postFileName := range postsDir {
post, err := postsFS.ReadFile(fmt.Sprint("posts/", postFileName.Name()))
if err != nil {
panic(err)
}
posts = append(posts, makePost(post))
}
//fmt.Println(posts[0].UpdatedDate.IsZero())
return posts
}
type PostListTemplateData struct {
Posts []Post
}
func blogTop(w http.ResponseWriter, r *http.Request) {
posts := getAllPosts()
templateData := PostListTemplateData{
Posts: posts,
}
tmpl := template.Must(template.ParseFS(baseTemplates.FS, "templates/base.tmpl", "templates/blog/postsList.tmpl"))
err := tmpl.ExecuteTemplate(w, "base", templateData)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
}
func showPost(w http.ResponseWriter, r *http.Request) {
slug := r.PathValue("slug")
posts := getAllPosts()
postIndex, found := sort.Find(len(posts), func(i int) int {
return strings.Compare(slug, posts[i].Slug)
})
if !found {
http.NotFound(w, r)
return
}
post := posts[postIndex]
tmpl := template.Must(template.ParseFS(baseTemplates.FS, "templates/base.tmpl", "templates/blog/blogPost.tmpl"))
err := tmpl.ExecuteTemplate(w, "base", post)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
}

View File

@@ -0,0 +1,37 @@
---
title: Le Progress Pride flag de Genève
date: 2024-06-08
updatedDate: 2024-06-20
author: Remilia
slug: pride-flag-geneve
---
Cette année, lors de la journée internationale contre l'homophobie, la transphobie et la biphobie,
le pont du Mont-Blanc à Genève avait ces drapeaux de déployés, une version modifiée du Progress Pride flag
que je trouve absolument magnifique
![image](https://kakigoori.dev/0e7cb84c-bad2-4519-9c04-c4481628c410/height/2100/auto)
Pour avoir plus d'informations à propos de ce drapeau, j'ai contacté la ville de Genève,
qui m'a répondu par courriel: ce drapeau a apparemment été créé en 2020 spécialement pour la Ville de Genève,
par une personne qui souhaite rester anonyme, pour les pavoisements du Pont du Mont-Blanc et du Palais Anna et
Jean-Gabriel Eynard. Il a été introduit en 2021 lors de la campagne Ma vie, ma ville, mes couleurs.
Il existe aussi des versions verticales de ce drapeau, qui sont notamment utilisées à d'autres endroits
comme la gare Cornavin ou la Place de Neuve.
Les raisons pour la création de ce nouveau drapeau, selon la Ville, étaient qu'elle « souhaitait pouvoir
bénéficier de supports plus inclusifs et représentatifs de la diversité des communautés LGBTIQ+ tout en
répondant aux contraintes techniques spécifiques à ce type de pavoisement ».
Étant donné que je ne trouve pas de versions de ce drapeau hors des photos, j'ai recréé ce drapeau dans Sketch,
si vous souhaitez désormais l'utiliser.
<p style="text-align: center">
<img src="https://www.remilia.ch/progress-flag/progress_flag.svg" alt="Geneva's progress flag image" style="width: 50%; margin-left: auto; margin-right: auto"/>
</p>
Veuillez noter que selon la Ville, « l'utilisation de ce design, réalisé sur commande par une personne concernée
qui a souhaité rester anonyme, est libre de droits, sous réserve de mention de son origine. »
Veuillez donc créditer correctement la personne qui a créé ce design si vous souhaitez l'utiliser ^^
(et non, ce n'est pas moi 🙃).

2
go.mod
View File

@@ -1,3 +1,5 @@
module prettysunflower-website
go 1.24
require github.com/gomarkdown/markdown v0.0.0-20250311123330-531bef5e742b

2
go.sum Normal file
View File

@@ -0,0 +1,2 @@
github.com/gomarkdown/markdown v0.0.0-20250311123330-531bef5e742b h1:EY/KpStFl60qA17CptGXhwfZ+k1sFNJIUNR8DdbcuUk=
github.com/gomarkdown/markdown v0.0.0-20250311123330-531bef5e742b/go.mod h1:JDGcbDT52eL4fju3sZ4TeHGsQwhG9nbDV21aMyhwPoA=

View File

@@ -2,6 +2,7 @@ package main
import (
"net/http"
"prettysunflower-website/blog"
"prettysunflower-website/keys"
"prettysunflower-website/pages"
"prettysunflower-website/regio43"
@@ -13,6 +14,7 @@ func main() {
regio43.InitHttpHandlers()
static.InitHttpHandlers()
keys.InitHttpHandlers()
blog.InitHttpHandlers()
_ = http.ListenAndServe(":3334", nil)
}

View File

@@ -3,17 +3,13 @@ package pages
import (
"html/template"
"net/http"
"prettysunflower-website/baseTemplates"
)
func homepage(w http.ResponseWriter, r *http.Request) {
templateFile := "templates/homepage.tmpl"
files, err := template.New(templateFile).ParseFS(content, templateFile)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
files := template.Must(template.ParseFS(baseTemplates.FS, "templates/base.tmpl", "templates/pages/homepage.tmpl"))
err = files.ExecuteTemplate(w, "homepage.tmpl", nil)
err := files.ExecuteTemplate(w, "base", nil)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)

View File

@@ -1,78 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>prettysunflower</title>
<link rel="stylesheet" type="text/css" href="/static/css/style.css">
</head>
<body class="page-index">
<header>
<div>
<img src="https://kakigoori.dev/5819581e-42b9-41a7-bab6-c3f99de30934/auto" alt="Avatar of prettysunflower">
<div>
<h1>prettysunflower</h1>
<p>
Nyallo! We're Remilia, Xeon, and Takeno!
</p>
<p>
We're a system of 3, we're software and website developers at
the <a href="https://koumbit.org">Réseau Koumbit</a>, we're Touhou and Factorio players,
and we're your local trans women/enby/plural person wishing you a good day!
</p>
</div>
</div>
</header>
<main>
<div class="columns">
<div>
<h2>Our pronouns 🏳️‍⚧</h2>
<p>
<strong>Remilia:</strong> <a href="https://pronouns.within.lgbt/they/them/their/theirs/themself">they/them</a> and <a href="https://pronouns.within.lgbt/she/her/her/hers/herself">she/her</a><br>
<strong>Xeon:</strong> <a href="https://pronouns.within.lgbt/they/them/their/theirs/themselves">they/them</a><br>
<strong>Takeno:</strong> <a href="https://pronouns.within.lgbt/she/her/her/hers/herself">she/her</a>
</p>
</div>
<div>
<h2>The ways to contact us</h2>
<p>
<a href="mailto:me@prettysunflower.moe">me@prettysunflower.moe</a><br>
<a href="https://bsky.app/profile/prettysunflower.moe">Bluesky</a><br>
<a href="https://akkoma.prettysunflower.moe">Fediverse</a>
</p>
</div>
<div>
<h2>Our code</h2>
<p>
<a href="https://git.prettysunflower.moe">Gitea</a><br>
<a href="https://github.com/prettysunflower">GitHub</a>
</p>
</div>
</div>
<hr>
<div class="main-projects">
<h2>Our main projects</h2>
<div>
<img src="https://kakigoori.dev/bcf6fdd9-3855-4f4d-9b5a-0791e14e29c7/height/200/auto">
<div>
<h3>Kakigoori</h3>
<p>
Kakigoori is an picture distribution system to publish images on the web.
Upload it once, and Kakigoori will create versions of the image
optimized for the web (AVIF, WebP).
</p>
</div>
</div>
</div>
</main>
</body>
</html>

View File

@@ -6,43 +6,123 @@
height: 75vh;
background-image: url('https://kakigoori.dev/c152e805-b859-4ad0-817c-4d671e5f15ad/auto');
background-size: cover;
background-position: top center;
display: flex;
justify-content: center;
align-items: center;
background-position: center bottom;
position: relative;
& > div {
nav {
position: absolute;
bottom: 0;
left: 0;
right: 0;
display: flex;
justify-content: center;
align-items: center;
gap: 2rem;
width: min(80%, 800px);
margin: 0 auto;
padding: 2rem;
padding: 1rem;
background-color: rgba(255, 255, 255, 0.5);
backdrop-filter: blur(15px);
border-radius: 1rem;
backdrop-filter: blur(10px);
margin: 0;
width: auto;
& > div {
display: flex;
flex-wrap: wrap;
justify-content: space-between;
gap: 1rem;
@media screen and (max-width: 992px) {
flex-direction: column;
align-items: center;
}
width: 100%;
max-width: 80%;
img {
height: 3em;
border-radius: 50%;
}
& > div:first-child {
display: flex;
justify-content: center;
align-items: center;
gap: 1rem;
font-weight: 700;
font-size: 1.5rem;
}
& > div:last-child {
display: flex;
justify-content: center;
align-items: center;
gap: 1rem;
flex-wrap: wrap;
}
}
}
}
main {
margin-top: 2rem;
margin-bottom: 2rem;
#presentation {
.image-container {
display: flex;
justify-content: center;
align-items: center;
img {
max-height: 500px;
max-width: 100%;
object-fit: contain;
border-radius: 1rem;
}
}
@media screen and (max-width: 768px) {
flex-direction: column;
}
margin-bottom: 2rem;
}
img {
height: 200px;
border-radius: 50%;
#on-the-internet {
img {
max-height: 1em;
}
.columns > div > div {
display: flex;
flex-direction: column;
}
}
#main-projects {
& > div {
display: flex;
gap: 1rem;
flex-wrap: wrap;
img {
width: 200px;
max-width: 100%;
object-fit: contain;
}
& > div {
flex: 1;
}
@media screen and (max-width: 768px) {
flex-direction: column;
align-items: center;
}
}
}
}
hr {
@include layout.light-hr;
}
.columns {
h2 {
text-align: center;
}
}
.main-projects {
& > div {
display: flex;
}
}
}

View File

@@ -1,10 +1,95 @@
@use "colors";
.columns {
display: flex;
flex-wrap: wrap;
gap: 1rem;
justify-content: space-evenly;
& > * {
flex: 1;
}
}
.max-80 {
max-width: 80vw;
margin-left: auto;
margin-right: auto;
}
@mixin light-hr($height: .5px, $color: oklch(75% 0 0deg)) {
border: $height solid $color;
}
nav {
display: flex;
justify-content: center;
align-items: center;
width: 100%;
padding: 1rem 0;
background-color: oklch(from colors.$background-color calc(l - 0.05) c h);
img {
height: 4rem;
border-radius: 50%;
}
& > div {
display: flex;
flex-wrap: wrap;
justify-content: space-between;
gap: 1rem;
width: 100%;
max-width: 80vw;
@media screen and (max-width: 992px) {
flex-direction: column;
align-items: center;
}
img {
height: 3em;
border-radius: 50%;
}
a {
text-decoration: none;
color: black;
&:hover, &:focus, &:active {
text-decoration: underline;
}
&:visited {
color: black;
}
}
& > div:first-child {
display: flex;
justify-content: center;
align-items: center;
gap: 1rem;
font-weight: 700;
font-size: 1.5rem;
}
& > div:last-child {
display: flex;
justify-content: center;
align-items: center;
gap: 1rem;
flex-wrap: wrap;
}
}
}
.post {
main {
img {
max-width: 100%;
}
}
margin-bottom: 2rem;
}

View File

@@ -5,6 +5,78 @@
gap: 1rem;
justify-content: space-evenly;
}
.columns > * {
flex: 1;
}
.max-80 {
max-width: 80vw;
margin-left: auto;
margin-right: auto;
}
nav {
display: flex;
justify-content: center;
align-items: center;
width: 100%;
padding: 1rem 0;
background-color: oklch(from oklch(97% 0.0261 90.1deg) calc(l - 0.05) c h);
}
nav img {
height: 4rem;
border-radius: 50%;
}
nav > div {
display: flex;
flex-wrap: wrap;
justify-content: space-between;
gap: 1rem;
width: 100%;
max-width: 80vw;
}
@media screen and (max-width: 992px) {
nav > div {
flex-direction: column;
align-items: center;
}
}
nav > div img {
height: 3em;
border-radius: 50%;
}
nav > div a {
text-decoration: none;
color: black;
}
nav > div a:hover, nav > div a:focus, nav > div a:active {
text-decoration: underline;
}
nav > div a:visited {
color: black;
}
nav > div > div:first-child {
display: flex;
justify-content: center;
align-items: center;
gap: 1rem;
font-weight: 700;
font-size: 1.5rem;
}
nav > div > div:last-child {
display: flex;
justify-content: center;
align-items: center;
gap: 1rem;
flex-wrap: wrap;
}
.post {
margin-bottom: 2rem;
}
.post main img {
max-width: 100%;
}
body {
font-family: "Open Sans", apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
@@ -17,36 +89,108 @@ body {
height: 75vh;
background-image: url("https://kakigoori.dev/c152e805-b859-4ad0-817c-4d671e5f15ad/auto");
background-size: cover;
background-position: top center;
background-position: center bottom;
position: relative;
}
.page-index header nav {
position: absolute;
bottom: 0;
left: 0;
right: 0;
display: flex;
justify-content: center;
align-items: center;
padding: 1rem;
background-color: rgba(255, 255, 255, 0.5);
backdrop-filter: blur(10px);
margin: 0;
width: auto;
}
.page-index header nav > div {
display: flex;
flex-wrap: wrap;
justify-content: space-between;
gap: 1rem;
width: 100%;
max-width: 80%;
}
@media screen and (max-width: 992px) {
.page-index header nav > div {
flex-direction: column;
align-items: center;
}
}
.page-index header nav > div img {
height: 3em;
border-radius: 50%;
}
.page-index header nav > div > div:first-child {
display: flex;
justify-content: center;
align-items: center;
gap: 1rem;
font-weight: 700;
font-size: 1.5rem;
}
.page-index header nav > div > div:last-child {
display: flex;
justify-content: center;
align-items: center;
gap: 1rem;
flex-wrap: wrap;
}
.page-index main {
margin-top: 2rem;
margin-bottom: 2rem;
}
.page-index main #presentation {
margin-bottom: 2rem;
}
.page-index main #presentation .image-container {
display: flex;
justify-content: center;
align-items: center;
}
.page-index header > div {
display: flex;
justify-content: center;
align-items: center;
gap: 2rem;
width: min(80%, 800px);
margin: 0 auto;
padding: 2rem;
background-color: rgba(255, 255, 255, 0.5);
backdrop-filter: blur(15px);
.page-index main #presentation .image-container img {
max-height: 500px;
max-width: 100%;
object-fit: contain;
border-radius: 1rem;
}
.page-index header img {
height: 200px;
border-radius: 50%;
@media screen and (max-width: 768px) {
.page-index main #presentation {
flex-direction: column;
}
}
.page-index main #on-the-internet img {
max-height: 1em;
}
.page-index main #on-the-internet .columns > div > div {
display: flex;
flex-direction: column;
}
.page-index main #main-projects > div {
display: flex;
gap: 1rem;
flex-wrap: wrap;
}
.page-index main #main-projects > div img {
width: 200px;
max-width: 100%;
object-fit: contain;
}
.page-index main #main-projects > div > div {
flex: 1;
}
@media screen and (max-width: 768px) {
.page-index main #main-projects > div {
flex-direction: column;
align-items: center;
}
}
.page-index hr {
border: 0.5px solid oklch(75% 0 0deg);
}
.page-index .columns h2 {
text-align: center;
}
.page-index .main-projects > div {
display: flex;
}
.page-radio-trains .video-zone {
display: flex;

View File

@@ -1 +1 @@
{"version":3,"sourceRoot":"","sources":["fonts.scss","layout.scss","body.scss","colors.scss","index.scss","radio.scss"],"names":[],"mappings":"AAAQ;ACAR;EACI;EACA;EACA;EACA;;;ACDJ;EACI,aFFS;EEGT,kBCLe;EDMf;;;AEHA;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGJ;EACI;EACA;;AAIR;EHxBA;;AG6BI;EACI;;AAKJ;EACI;;;ACzCR;EACI;EACA;EACA;EACA;;AAEA;EACI;EACA;EACA;EACA;;AAIR;EACI;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAGI;EACI;;AAGJ;EACI;;AAGJ;EACI;;AAEA;EACI;EACA;;AAKZ;EAzBJ;IA0BQ;;;AAGJ;EA7BJ;IA8BQ;;;AAGJ;EAjCJ;IAkCQ","file":"style.css"}
{"version":3,"sourceRoot":"","sources":["fonts.scss","layout.scss","body.scss","colors.scss","index.scss","radio.scss"],"names":[],"mappings":"AAAQ;ACER;EACI;EACA;EACA;EACA;;AAEA;EACI;;;AAIR;EACI;EACA;EACA;;;AAOJ;EACI;EACA;EACA;EACA;EACA;EACA;;AAEA;EACI;EACA;;AAGJ;EACI;EACA;EACA;EACA;EACA;EACA;;AAEA;EARJ;IASQ;IACA;;;AAGJ;EACI;EACA;;AAGJ;EACI;EACA;;AAEA;EACI;;AAGJ;EACI;;AAIR;EACI;EACA;EACA;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;EACA;;;AAKZ;EAOI;;AALI;EACI;;;ACtFZ;EACI,aFFS;EEGT,kBCLe;EDMf;;;AEHA;EACI;EACA;EACA;EACA;EACA;EACA;;AAEA;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACI;EACA;EACA;EACA;EAOA;EACA;;AANA;EANJ;IAOQ;IACA;;;AAMJ;EACI;EACA;;AAGJ;EACI;EACA;EACA;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;EACA;;AAMhB;EACI;EACA;;AAEA;EAkBI;;AAjBA;EACI;EACA;EACA;;AAEA;EACI;EACA;EACA;EACA;;AAIR;EAdJ;IAeQ;;;AAOJ;EACI;;AAGJ;EACI;EACA;;AAKJ;EACI;EACA;EACA;;AAEA;EACI;EACA;EACA;;AAGJ;EACI;;AAGJ;EAfJ;IAgBQ;IACA;;;AAMhB;EHxGA;;;AIjBA;EACI;EACA;EACA;EACA;;AAEA;EACI;EACA;EACA;EACA;;AAIR;EACI;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAGI;EACI;;AAGJ;EACI;;AAGJ;EACI;;AAEA;EACI;EACA;;AAKZ;EAzBJ;IA0BQ;;;AAGJ;EA7BJ;IA8BQ;;;AAGJ;EAjCJ;IAkCQ","file":"style.css"}

View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path fill="currentColor" d="M12 11.388c-.906-1.761-3.372-5.044-5.665-6.662c-2.197-1.55-3.034-1.283-3.583-1.033C2.116 3.978 2 4.955 2 5.528c0 .575.315 4.709.52 5.4c.68 2.28 3.094 3.05 5.32 2.803c-3.26.483-6.157 1.67-2.36 5.898c4.178 4.325 5.726-.927 6.52-3.59c.794 2.663 1.708 7.726 6.444 3.59c3.556-3.59.977-5.415-2.283-5.898c2.225.247 4.64-.523 5.319-2.803c.205-.69.52-4.825.52-5.399c0-.575-.116-1.55-.752-1.838c-.549-.248-1.386-.517-3.583 1.033c-2.293 1.621-4.76 4.904-5.665 6.664"/></svg>

After

Width:  |  Height:  |  Size: 575 B

View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path fill="currentColor" d="M9.948 4.444h-.005c-1.92.788-2.126 2.55-1.817 3.499v.02C9.236 7.18 10.658 6.76 12 6.76c3.26 0 5.902 2.156 5.902 4.815S15.259 16.391 12 16.391l-.083-.002c-.155-.006-.354-.013-.435.118c-.096.156.116.397.238.536c1.274 1.441 3.123 1.622 3.608 1.67l.076.008c-4.281.414-9.304-2.32-9.306-7.076c0-1.12.414-2.073 1.075-2.83l-.005-.002h-.003C7.31 6.38 6.376 3.47 4.629 2.898c-.124-.04-.246.054-.262.183c-.23 1.924-.727 2.59-1.264 3.31c-.805 1.08-1.39 2.328-1.365 3.698a11 11 0 0 1-.705-1.91c-.024-.09-.17-.365-.333-.272c-.13.072-.227.274-.296.485A12 12 0 0 0 0 11.489c0 6.536 5.475 12 12 12c6.627 0 12-5.372 12-12c0-2.526-.781-4.87-2.115-6.805l.167-.002c.518 0 1.024.045 1.51.129c-.734-.816-1.724-1.475-2.877-1.904a8.5 8.5 0 0 1 2.494-.495c-1.426-1.166-3.508-1.9-5.827-1.9c-3.355 0-6.648 1.29-7.404 3.93zm.682 9.166c-.87-.905-3.473-3.91-3.473-3.91l.202.01l4.075 3.042c.305.223.74.22 1.043-.004l3.996-3.034l.212-.018s-2.518 2.935-3.483 3.9c-.964.968-1.703.919-2.572.014m2.774-10.083s.055.625-.576.824c-.722.227-1.042-.38-1.042-.38s.09-.417.676-.61c.626-.206.942.166.942.166"/></svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="256" height="256" viewBox="0 0 256 256"><path fill="currentColor" d="M212 96a27.8 27.8 0 0 0-10.51 2L171 59.94A28 28 0 1 0 120 44a29 29 0 0 0 .15 2.94L73.68 66.3a28 28 0 1 0-28.6 44.83l1.85 46.38a28 28 0 1 0 32.74 41.42L128 212.47a28 28 0 1 0 49.13-18.79l27.21-42.75A28 28 0 1 0 212 96m-56 88h-.89l-16.18-48.53l46.65-2.22a27.9 27.9 0 0 0 5.28 9L163.65 185a28 28 0 0 0-7.65-1m-93.08-27.13l-1.85-46.38a28 28 0 0 0 10.12-6.13L113.72 129l-41.46 32.22a28 28 0 0 0-9.34-4.35M149.57 72a27.8 27.8 0 0 0 8.94-2L189 108.06a27.9 27.9 0 0 0-4.18 9.22l-46.57 2.22ZM82.09 173.85L124 141.26l15.94 47.83a28.2 28.2 0 0 0-7.6 8L84 183.53a28 28 0 0 0-1.91-9.68M148 32a12 12 0 1 1-12 12a12 12 0 0 1 12-12m-21.68 29.7a28.4 28.4 0 0 0 7.68 6.54l-11.3 47.45l-43.47-25.17A28 28 0 0 0 80 84a29 29 0 0 0-.15-2.94ZM40 84a12 12 0 1 1 12 12a12 12 0 0 1-12-12m16 112a12 12 0 1 1 12-12a12 12 0 0 1-12 12m100 28a12 12 0 1 1 12-12a12 12 0 0 1-12 12m56-88a12 12 0 1 1 12-12a12 12 0 0 1-12 12"/></svg>

After

Width:  |  Height:  |  Size: 1013 B

View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><path fill="currentColor" fill-rule="evenodd" d="M15.46 3.206s.14-.003.245.102l.01.01c.064.06.258.244.285 1.074c0 2.902-1.405 5.882-1.405 5.882a9 9 0 0 1-.359.713c-.458.802-.786 1.153-.786 1.153s-.318.379-.675.595c-.415.265-.72.263-.72.263L7.247 13c-.636-.079-1.29-.736-1.927-1.578c-.47-.677-.779-1.413-.779-1.413s-2.51.034-3.675-1.394C.235 7.895.103 7.067.06 6.769q0-.012-.004-.029c-.05-.324-.285-1.873.821-2.86c.517-.496 1.148-.638 1.37-.684c.371-.081.667-.06.903-.044l.09.006c.391.035 3.99.216 3.99.216s1.532.066 2.27.056c0 0 .003 1.853.003 2.78q.105.048.211.1l.212.1V3.427q.494-.005.996-.017h.011c1.545-.036 4.528-.204 4.528-.204ZM2.113 8.026s.28.26.94.477c.43.152 1.094.231 1.094.231S3.699 7.5 3.516 6.757c-.22-.886-.4-2.398-.4-2.398s-.438-.015-.789.079c-.766.19-.98.763-.98.763s-.384.688.036 1.813c.244.672.73 1.013.73 1.013Zm8.084 3.607c.344-.023.499-.392.499-.392s1.24-2.486 1.4-2.878a.7.7 0 0 0 .046-.438c-.07-.267-.39-.412-.39-.412l-1.926-.935l-.165.339l-.18.369a.46.46 0 0 1 .128.341s.433.186.743.387c0 0 .257.135.32.425c.075.273-.04.488-.066.539l-.002.003s-.216.51-.343.774l-.004.007q-.07.144-.139.28a.454.454 0 1 1-.32-.15s.41-.84.468-1.033c0 0 .096-.24.048-.38a.47.47 0 0 0-.19-.188a6 6 0 0 0-.678-.34s-.076.068-.18.09a.5.5 0 0 1-.158.014l-.611 1.25a.46.46 0 0 1 .046.587a.46.46 0 0 1-.578.138a.46.46 0 0 1-.232-.51a.46.46 0 0 1 .44-.35L8.8 7.886a.457.457 0 0 1 .361-.744l.185-.375l.167-.341l-.579-.281s-.251-.125-.458-.072a.6.6 0 0 0-.114.039c-.189.084-.31.33-.31.33L6.668 9.293s-.124.254-.068.46c.048.252.325.397.325.397l2.874 1.4l.135.054s.114.04.262.03Z" clip-rule="evenodd"/></svg>

After

Width:  |  Height:  |  Size: 1.6 KiB

View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path fill="currentColor" d="M12 2A10 10 0 0 0 2 12c0 4.42 2.87 8.17 6.84 9.5c.5.08.66-.23.66-.5v-1.69c-2.77.6-3.36-1.34-3.36-1.34c-.46-1.16-1.11-1.47-1.11-1.47c-.91-.62.07-.6.07-.6c1 .07 1.53 1.03 1.53 1.03c.87 1.52 2.34 1.07 2.91.83c.09-.65.35-1.09.63-1.34c-2.22-.25-4.55-1.11-4.55-4.92c0-1.11.38-2 1.03-2.71c-.1-.25-.45-1.29.1-2.64c0 0 .84-.27 2.75 1.02c.79-.22 1.65-.33 2.5-.33s1.71.11 2.5.33c1.91-1.29 2.75-1.02 2.75-1.02c.55 1.35.2 2.39.1 2.64c.65.71 1.03 1.6 1.03 2.71c0 3.82-2.34 4.66-4.57 4.91c.36.31.69.92.69 1.85V21c0 .27.16.59.67.5C19.14 20.16 22 16.42 22 12A10 10 0 0 0 12 2"/></svg>

After

Width:  |  Height:  |  Size: 679 B

View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><path fill="currentColor" d="M7.5 11.5v.5a.5.5 0 0 1-.5.5H6v.5a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1v-1.293A1 1 0 0 1 2.293 11l3.87-3.87A4 4 0 1 1 10 10H8.999v1a.5.5 0 0 1-.5.5zM11 6a1 1 0 1 0 0-2a1 1 0 0 0 0 2"/></svg>

After

Width:  |  Height:  |  Size: 294 B

View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path fill="currentColor" d="M12 0q-.934 0-1.83.139l.17 1.111a11 11 0 0 1 3.32 0l.172-1.111A12 12 0 0 0 12 0M9.152.34A12 12 0 0 0 5.77 1.742l.584.961a10.8 10.8 0 0 1 3.066-1.27zm5.696 0l-.268 1.094a10.8 10.8 0 0 1 3.066 1.27l.584-.962A12 12 0 0 0 14.848.34M12 2.25a9.75 9.75 0 0 0-8.539 14.459c.074.134.1.292.064.441l-1.013 4.338l4.338-1.013a.62.62 0 0 1 .441.064A9.7 9.7 0 0 0 12 21.75c5.385 0 9.75-4.365 9.75-9.75S17.385 2.25 12 2.25m-7.092.068a12 12 0 0 0-2.59 2.59l.909.664a11 11 0 0 1 2.345-2.345zm14.184 0l-.664.909a11 11 0 0 1 2.345 2.345l.909-.664a12 12 0 0 0-2.59-2.59M1.742 5.77A12 12 0 0 0 .34 9.152l1.094.268a10.8 10.8 0 0 1 1.269-3.066zm20.516 0l-.961.584a10.8 10.8 0 0 1 1.27 3.066l1.093-.268a12 12 0 0 0-1.402-3.383M.138 10.168A12 12 0 0 0 0 12q0 .934.139 1.83l1.111-.17A11 11 0 0 1 1.125 12q0-.848.125-1.66zm23.723.002l-1.111.17q.125.812.125 1.66c0 .848-.042 1.12-.125 1.66l1.111.172a12.1 12.1 0 0 0 0-3.662M1.434 14.58l-1.094.268a12 12 0 0 0 .96 2.591l-.265 1.14l1.096.255l.36-1.539l-.188-.365a10.8 10.8 0 0 1-.87-2.35m21.133 0a10.8 10.8 0 0 1-1.27 3.067l.962.584a12 12 0 0 0 1.402-3.383zm-1.793 3.848a11 11 0 0 1-2.345 2.345l.664.909a12 12 0 0 0 2.59-2.59zm-19.959 1.1L.357 21.48a1.8 1.8 0 0 0 2.162 2.161l1.954-.455l-.256-1.095l-1.953.455a.675.675 0 0 1-.81-.81l.454-1.954zm16.832 1.769a10.8 10.8 0 0 1-3.066 1.27l.268 1.093a12 12 0 0 0 3.382-1.402zm-10.94.213l-1.54.36l.256 1.095l1.139-.266c.814.415 1.683.74 2.591.961l.268-1.094a10.8 10.8 0 0 1-2.35-.869zm3.634 1.24l-.172 1.111a12.1 12.1 0 0 0 3.662 0l-.17-1.111q-.812.125-1.66.125a11 11 0 0 1-1.66-.125"/></svg>

After

Width:  |  Height:  |  Size: 1.6 KiB