Added blog posts, and improved homepage
5
.idea/codeStyles/codeStyleConfig.xml
generated
Normal 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
@@ -0,0 +1,7 @@
|
||||
<component name="ProjectDictionaryState">
|
||||
<dictionary name="project">
|
||||
<words>
|
||||
<w>prettysunflower</w>
|
||||
</words>
|
||||
</dictionary>
|
||||
</component>
|
4
.idea/watcherTasks.xml
generated
Normal file
@@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="ProjectTasksOptions" suppressed-tasks="SCSS" />
|
||||
</project>
|
6
baseTemplates/baseTemplates.go
Normal file
@@ -0,0 +1,6 @@
|
||||
package baseTemplates
|
||||
|
||||
import "embed"
|
||||
|
||||
//go:embed templates/*
|
||||
var FS embed.FS
|
36
baseTemplates/templates/base.tmpl
Normal 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 }}
|
8
baseTemplates/templates/blog/blogPost.tmpl
Normal file
@@ -0,0 +1,8 @@
|
||||
{{ define "bodyClass" }}post post-{{ .Slug }}{{ end }}
|
||||
|
||||
{{ define "content" }}
|
||||
<main class="max-80">
|
||||
<h1>{{ .Title }}</h1>
|
||||
{{ .Body }}
|
||||
</main>
|
||||
{{ end }}
|
13
baseTemplates/templates/blog/postsList.tmpl
Normal 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 }}
|
77
baseTemplates/templates/pages/homepage.tmpl
Normal 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
@@ -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
@@ -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
@@ -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
|
||||
}
|
||||
}
|
37
blog/posts/2024-06-08-pride-flag-geneva.md
Normal 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
|
||||
|
||||

|
||||
|
||||
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
@@ -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
@@ -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=
|
2
main.go
@@ -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)
|
||||
}
|
||||
|
@@ -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)
|
||||
|
@@ -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>
|
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
@@ -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;
|
||||
}
|
@@ -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;
|
||||
|
@@ -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"}
|
1
static/static/svg/bluesky.svg
Normal 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 |
1
static/static/svg/email.svg
Normal 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 |
1
static/static/svg/fediverse.svg
Normal 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 |
1
static/static/svg/gitea.svg
Normal 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 |
1
static/static/svg/github.svg
Normal 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 |
1
static/static/svg/key.svg
Normal 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 |
1
static/static/svg/signal.svg
Normal 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 |