summaryrefslogtreecommitdiff
diff refs
from: back
to: back
| flip
diff options
context:
space:
mode:
-rw-r--r--.github/workflows/build-and-deploy.yml82
-rw-r--r--.gitignore1
-rw-r--r--deploy/inventory.yml15
-rw-r--r--deploy/playbook.yml21
-rw-r--r--internal/frontmatter/parser.go1
-rw-r--r--internal/lightgallery/html_renderer.go12
-rw-r--r--internal/tailwind/transformer.go26
-rw-r--r--main.go13
-rw-r--r--static/input.css170
-rw-r--r--static/output.css932
-rw-r--r--views/index.html51
-rw-r--r--views/layouts/blog-page.html122
12 files changed, 339 insertions, 1107 deletions
diff --git a/.github/workflows/build-and-deploy.yml b/.github/workflows/build-and-deploy.yml
new file mode 100644
index 0000000..ffb81c5
--- /dev/null
+++ b/.github/workflows/build-and-deploy.yml
@@ -0,0 +1,82 @@
+name: Publish Docker image
+on:
+ push:
+ tags:
+ - "*"
+jobs:
+ build-and-push:
+ if: github.repository == 'SayaAndy/saya-today-web'
+ runs-on: ubuntu-latest
+ environment: Production
+ permissions:
+ packages: write
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v4
+ - name: Generate output.css with tailwindcss
+ uses: ZoeyVid/tailwindcss-update@main
+ with:
+ input: static/input.css
+ output: static/output.css
+ params: "--minify"
+ - name: Set up QEMU
+ uses: docker/setup-qemu-action@v3
+ - name: Set up Docker Buildx
+ uses: docker/setup-buildx-action@v3
+ - name: Login to GitHub Container Registry
+ uses: docker/login-action@v3
+ with:
+ registry: ghcr.io
+ username: ${{ github.repository_owner }}
+ password: ${{ secrets.GHCR_TOKEN }}
+ - name: Build and push
+ uses: docker/build-push-action@v6
+ with:
+ context: .
+ file: ./Dockerfile
+ push: true
+ tags: |
+ ghcr.io/sayaandy/saya-today-web:latest
+ ghcr.io/sayaandy/saya-today-web:${{ github.ref_name }}
+
+ deploy:
+ if: github.repository == 'SayaAndy/saya-today-web'
+ runs-on: ubuntu-latest
+ environment: Production
+ needs: [build-and-push]
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v4
+
+ - name: Set up SSH connection for pl.saya.today
+ run: |
+ mkdir -p ~/.ssh
+ (cat <<EOF
+ ${{ secrets.SVC_GITHUB_PK }}
+ EOF
+ ) > ~/.ssh/id_ed25519
+ chmod 600 ~/.ssh/id_ed25519
+ sed -i 's/\r$//' ~/.ssh/id_ed25519
+ ssh-keyscan -H pl.saya.today >> ~/.ssh/known_hosts
+
+ - name: Test SSH connection
+ run: |
+ ssh -o ConnectTimeout=10 -i ~/.ssh/id_rsa svc_github@pl.saya.today "echo 'SSH connection successful'"
+
+ - name: Install Ansible
+ shell: bash
+ run: |
+ sudo apt update
+ sudo apt install -y ansible
+
+ - name: Run Ansible playbook
+ env:
+ ANSIBLE_HOST_KEY_CHECKING: False
+ working-directory: ./deploy
+ run: >
+ ansible-playbook -i inventory.yml -l stage playbook.yml
+ --private-key ~/.ssh/id_ed25519
+ -u svc_github
+ -e saya_today_web_b2_key_id=${{ secrets.B2_KEY_ID }}
+ -e saya_today_web_b2_application_key=${{ secrets.B2_APPLICATION_KEY }}
+ -e saya_today_web_tag=${{ github.ref_name }}
diff --git a/.gitignore b/.gitignore
index 9fb93e9..5e9bfe0 100644
--- a/.gitignore
+++ b/.gitignore
@@ -36,6 +36,7 @@ config*.json
/main
/sayana-demo
+/static/input.css
/.vscode
.envrc
diff --git a/deploy/inventory.yml b/deploy/inventory.yml
new file mode 100644
index 0000000..3c1220d
--- /dev/null
+++ b/deploy/inventory.yml
@@ -0,0 +1,15 @@
+all:
+ children:
+ prod:
+ hosts:
+ pl.saya.today:
+ saya_today_web_name: sayana-web
+ saya_today_web_hostname: sayana-web
+ saya_today_web_ipv4_address: 172.16.0.18
+
+ stage:
+ hosts:
+ pl.saya.today:
+ saya_today_web_name: sayana-demo
+ saya_today_web_hostname: sayana-demo
+ saya_today_web_ipv4_address: 172.16.0.17
diff --git a/deploy/playbook.yml b/deploy/playbook.yml
new file mode 100644
index 0000000..caeb8ef
--- /dev/null
+++ b/deploy/playbook.yml
@@ -0,0 +1,21 @@
+---
+- name: Deploy saya-today-web Docker Container
+ hosts: all
+ remote_user: svc_github
+
+ tasks:
+ - name: Deploy saya-today-web Docker Container
+ community.docker.docker_container:
+ name: "{{ saya_today_web_name }}"
+ hostname: "{{ saya_today_web_hostname }}"
+ image: "ghcr.io/sayaandy/saya-today-web:{{ saya_today_web_tag }}"
+ env:
+ B2_KEY_ID: "{{ saya_today_web_b2_key_id }}"
+ B2_APPLICATION_KEY: "{{ saya_today_web_b2_application_key }}"
+ network_mode: caddy
+ networks:
+ - name: caddy
+ ipv4_address: "{{ saya_today_web_ipv4_address }}"
+ restart_policy: unless-stopped
+ no_log: true
+...
diff --git a/internal/frontmatter/parser.go b/internal/frontmatter/parser.go
index 6cc3ee8..1a521c0 100644
--- a/internal/frontmatter/parser.go
+++ b/internal/frontmatter/parser.go
@@ -15,6 +15,7 @@ type Metadata struct {
PublishedTime time.Time `yaml:"publishedTime"`
Thumbnail string `yaml:"thumbnail"`
Tags []string `yaml:"tags"`
+ Geolocation string `yaml:"geolocation"`
}
func ParseFrontmatter(content []byte) (metadata *Metadata, markdown []byte, err error) {
diff --git a/internal/lightgallery/html_renderer.go b/internal/lightgallery/html_renderer.go
index fb65b06..e611f0b 100644
--- a/internal/lightgallery/html_renderer.go
+++ b/internal/lightgallery/html_renderer.go
@@ -38,13 +38,13 @@ func (r *LightGalleryHTMLRenderer) renderLightGallery(w util.BufWriter, source [
return ast.WalkContinue, nil
}
- galleryID := generateDivId(4)
+ galleryID := generateDivId(8)
w.WriteString(fmt.Sprintf(`
<div class="justify-content-center display-block m-2">
- <hr class="border-t-4 border-dotted border-main-dark mt-vmin0-8 mb-vmin0-8 w-p80 ml-auto mr-auto">
+ <hr class="border-t-4 border-dotted border-main-dark mt-[0.8vmin] mb-[0.8vmin] w-[80%%] ml-auto mr-auto">
<div id="lg-%s" class="inline-gallery-container relative ml-auto mr-auto"></div>
- <hr class="border-t-4 border-dotted border-main-dark mt-vmin0-8 mb-vmin0-8 w-p80 ml-auto mr-auto">
+ <hr class="border-t-4 border-dotted border-main-dark mt-[0.8vmin] mb-[0.8vmin] w-[80%%] ml-auto mr-auto">
</div>`, galleryID))
var dynamicElements []string
@@ -67,8 +67,8 @@ func (r *LightGalleryHTMLRenderer) renderLightGallery(w util.BufWriter, source [
thumb:
"https://f003.backblazeb2.com/file/sayana-photos/thumbnails/%s.webp",
subHtml: `+"`"+`<div class="flex flex-row light-gallery-captions">
- <p class="grow text-vmax1 text-left lh-0-9 font-spectral text-main-dark">%s</p>
- <p class="text-vmax1 text-right lh-0-9 font-spectral text-secondary">%s</p>
+ <p class="grow !text-[1vmax]/[0.9] text-left font-spectral text-main-dark">%s</p>
+ <p class="!text-[1vmax]/[0.9] text-right font-spectral text-secondary">%s</p>
</div>`+"`"+`
}`, img.URL, img.URL, img.Caption, imageUrlWithoutExt, imageUrlWithoutExt, img.Caption, dayDate.Format("2006-01-02 15:04:05 -07:00")))
}
@@ -87,7 +87,7 @@ function createLightLibrary%s() {
closable: false,
showMaximizeIcon: true,
appendSubHtmlTo: ".lg-sub-html",
- isMobile: () => { return false; },
+ isMobile: () => false,
slideDelay: 0,
plugins: [lgZoom, lgThumbnail],
thumbWidth: 160,
diff --git a/internal/tailwind/transformer.go b/internal/tailwind/transformer.go
index 51a33bc..2f052b9 100644
--- a/internal/tailwind/transformer.go
+++ b/internal/tailwind/transformer.go
@@ -17,44 +17,44 @@ func (t *TailwindTransformer) Transform(node *ast.Document, reader text.Reader,
switch node := n.(type) {
case *ast.Heading:
classes := map[int]string{
- 1: "font-patua text-vmax2-5 font-bold text-main-dark mb-vmin1-2 ls-vmin0-04",
- 2: "font-spectral text-vmax2 font-bold text-main-dark mb-vmin0-8 ls-vmin0-04",
- 3: "font-spectral text-vmax1-5 font-medium text-main-dark mb-vmin0-6 ls-vmin0-04",
- 4: "font-spectral text-vmax1-2 font-medium text-main-medium mb-vmin0-4 ls-vmin0-04",
- 5: "font-spectral text-vmax1 font-medium text-main-medium mb-vmin0-4 italic ls-vmin0-04",
- 6: "font-spectral text-vmax1 font-medium text-secondary mb-vmin0-4",
+ 1: "font-patua text-[2.5vmax] font-bold text-main-dark mb-[1.2vmin] tracking-[0.04vmin]",
+ 2: "font-spectral text-[2vmax] font-bold text-main-dark mb-[0.8vmin] tracking-[0.04vmin]",
+ 3: "font-spectral text-[1.5vmax] font-medium text-main-dark mb-[0.6vmin] tracking-[0.04vmin]",
+ 4: "font-spectral text-[1.2vmax] font-medium text-main-medium mb-[0.4vmin] tracking-[0.04vmin]",
+ 5: "font-spectral text-[1vmax] font-medium text-main-medium mb-[0.4vmin] italic tracking-[0.04vmin]",
+ 6: "font-spectral text-[1vmax] font-medium text-secondary mb-[0.4vmin]",
}
if class, ok := classes[node.Level]; ok {
node.SetAttribute([]byte("class"), []byte(class))
}
case *ast.Paragraph:
- node.SetAttribute([]byte("class"), []byte("text-vmax1 font-spectral lh-2 ls-vmin0-04 timl-vmax2 mb-vmin1-6"))
+ node.SetAttribute([]byte("class"), []byte("text-[1vmax]/[2] font-spectral tracking-[0.04vmin] -indent-[2vmax] ml-[2vmax] mb-[1.6vmin]"))
case *ast.List:
if node.IsOrdered() {
- node.SetAttribute([]byte("class"), []byte("list-decimal list-inside space-y-vmin0-8 mb-vmin1-6 pl-vmax2"))
+ node.SetAttribute([]byte("class"), []byte("list-decimal list-inside space-y-[0.8vmin] mb-[1.6vmin] pl-[2vmax]"))
} else {
- node.SetAttribute([]byte("class"), []byte("list-disc list-inside space-y-vmin0-8 mb-vmin1-6 pl-vmax2"))
+ node.SetAttribute([]byte("class"), []byte("list-disc list-inside space-y-[0.8vmin] mb-[1.6vmin] pl-[2vmax]"))
}
case *ast.ListItem:
- node.SetAttribute([]byte("class"), []byte("text-vmax1 font-spectral lh-2 ls-vmin0-04"))
+ node.SetAttribute([]byte("class"), []byte("text-[1vmax]/[2] font-spectral tracking-[0.04vmin]"))
case *ast.Blockquote:
- node.SetAttribute([]byte("class"), []byte("border-l-vmin0-4 border-main-medium bg-background-dark p-vmin0-8 mb-vmin0-8 italic"))
+ node.SetAttribute([]byte("class"), []byte("border-l-[0.4vmin] border-main-medium bg-background-dark p-[0.8vmin] mb-[0.8vmin] italic"))
case *ast.CodeSpan:
node.SetAttribute([]byte("class"), []byte("bg-background-dark"))
case *ast.CodeBlock, *ast.FencedCodeBlock:
- node.SetAttribute([]byte("class"), []byte("bg-background-dark p-vmin0-8 rounded-lg overflow-x-auto mb-vmin1-6"))
+ node.SetAttribute([]byte("class"), []byte("bg-background-dark p-[0.8vmin] rounded-lg overflow-x-auto mb-[1.6vmin]"))
case *ast.Link:
node.SetAttribute([]byte("class"), []byte("text-secondary hover:text-main-dark underline"))
case *ast.Image:
- node.SetAttribute([]byte("class"), []byte("max-w-full h-auto rounded-lg shadow-lg mb-vmin1-6"))
+ node.SetAttribute([]byte("class"), []byte("max-w-full h-auto rounded-lg shadow-lg mb-[1.6vmin]"))
case *ast.Emphasis:
switch node.Level {
diff --git a/main.go b/main.go
index 37d6e8d..447329b 100644
--- a/main.go
+++ b/main.go
@@ -101,12 +101,25 @@ func main() {
return c.Status(fiber.ErrNotFound.Code).SendString(fmt.Sprintf("failed to find '%s' post", c.Params("title")))
}
+ geolocationParts := strings.Split(metadata.Geolocation, " ")
+ var x, y, areaError string
+ if len(geolocationParts) >= 2 {
+ x = geolocationParts[0]
+ y = geolocationParts[1]
+ }
+ if len(geolocationParts) >= 3 {
+ areaError = geolocationParts[2]
+ }
+
return c.Render("layouts/blog-page", fiber.Map{
"Title": metadata.Title,
"PublishedDate": metadata.PublishedTime.Format("2006-01-02 15:04:05 -07:00"),
"PublishedYear": strconv.Itoa(metadata.PublishedTime.Year()),
"ParsedMarkdownDesktop": template.HTML(parsedMarkdownDesktop),
"ParsedMarkdownMobile": template.HTML(parsedMarkdownMobile),
+ "MapLocationX": x,
+ "MapLocationY": y,
+ "MapLocationAreaMeters": areaError,
})
})
diff --git a/static/input.css b/static/input.css
index dfa9219..edecc19 100644
--- a/static/input.css
+++ b/static/input.css
@@ -25,11 +25,12 @@
--sidebar-text-color: var(--background-dark-color);
--sidebar-stroke-color: var(--main-dark-color);
--secondary-color: var(--main-light-color);
- --interlocked-hexagons-background: url('https://f003.backblazeb2.com/file/sayana-static/themes/olive/interlocked-hexagons.svg');
+ --interlocked-hexagons-background: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22100%22%20height%3D%22100%22%3E%3Crect%20width%3D%22100%25%22%20height%3D%22100%25%22%20fill%3D%22%23ffffdb%22%2F%3E%3Cpath%20fill%3D%22%23777e63%22%20d%3D%22m33.64%200-.17.25h-33L4.3%206h33.07l4-6zm8.33%200-4.33%206.5h-33l3.83%205.75h33.06L49.7%200zm8.34%200-8.5%2012.75h-33l3.83%205.75H45.7L58.03%200zm8.33%200L45.97%2019h-33l3.83%205.75h33.06L66.36%200zm-8.5%2025.25L33.63%2050l3.86%205.8L54.03%2031h33l-3.83-5.75zm4.16%206.25L37.8%2056.25l3.87%205.8%2016.53-24.8h33l-3.84-5.75zm4.17%206.25L41.97%2062.5l3.86%205.8%2016.54-24.8h33l-3.84-5.75zM62.63%2044l-16.5%2024.75%203.87%205.8%2016.53-24.8h33L95.7%2044zM100%2050.45l-3.87%205.8%203.87%205.81v-11.6zM0%2050.46v11.6L12.5%2080.8l3.86-5.8zm95.83%206.25-3.87%205.8L100%2074.55v-11.6zm-4.17%206.24-3.86%205.8%2012.2%2018.3v-11.6zM0%2062.96v11.6l8.33%2012.49%203.86-5.8zm87.5%206.24L83.63%2075%20100%2099.54V87.96zM50%2075.45%2033.64%20100h7.72l12.5-18.75zm-50%200v11.6l4.16%206.24%203.87-5.8zm54.17%206.25L41.97%20100h7.73l8.33-12.5zm4.17%206.25L50.3%20100h7.73l4.17-6.25zM0%2087.95v11.59l3.86-5.8zm62.5%206.25-3.87%205.8h7.73z%22%2F%3E%3Cpath%20fill%3D%22%23a0a182%22%20d%3D%22M66.8.25%2062.97%206h33l4.03%206.05V.45l-.14-.2zM0%20.45v11.61L12.5%2030.8l3.86-5.8zM62.63%206.5l-3.83%205.75h33l8.2%2012.3v-11.6L95.7%206.5zm-4.16%206.25-3.84%205.75h33L100%2037.06v-11.6l-8.47-12.71zM0%2012.96v11.6l8.33%2012.49%203.86-5.8zM54.3%2019l-3.84%205.75h33L100%2049.55l.01-.01V37.96L87.36%2019zm-4.77%206.25H41.8L25.3%2050l16.66%2025-16.5%2024.75h7.74L49.7%2075%2033.03%2050zm-8.33%200h-7.74L16.96%2050l16.67%2025-16.5%2024.75h7.73L41.36%2075%2024.7%2050Zm-8.34%200h-7.73L8.63%2050%2025.3%2075%208.8%2099.75h7.73L33.03%2075%2016.36%2050zm-16.07%200L.3%2050l16.67%2025L.46%2099.75H8.2L24.7%2075%208.02%2050l16.5-24.75zM0%2025.46v11.6l4.16%206.24%203.87-5.8zm0%2012.5v11.58l3.86-5.79zm66.8%2012.29L50.3%2074.99l3.87%205.81%204.16%206.25%204.17%206.25%204.3%206.45h7.73L58.03%2075l16.5-24.75zm16.06%200h-7.73L58.63%2075l16.5%2024.75h7.73L66.36%2075zm.6%200L66.96%2075l16.5%2024.75h7.74L74.7%2075l16.5-24.75zm16.07%200H91.8L75.3%2075l16.5%2024.75h7.73L83.03%2075z%22%2F%3E%3C%2Fsvg%3E");
--interlocked-hexagons-background-repeat: repeat;
- --interlocked-hexagons-background-size: 10vw;
- --squares-and-triangles-background: url('https://f003.backblazeb2.com/file/sayana-static/themes/olive/squares-and-triangles.svg');
+ --interlocked-hexagons-background-size: 10vh;
+ --squares-and-triangles-background: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22100%22%20height%3D%22100%22%3E%3Crect%20width%3D%22100%25%22%20height%3D%22100%25%22%20fill%3D%22%234a5139%22%2F%3E%3Cpath%20fill%3D%22%23b2b285%22%20d%3D%22M0%200v6.77L6.72%200zm8.91%200L0%208.96v3.86L12.83%200zm6.11%200L0%2015.06v3.87L18.9%200zm6.11%200L0%2021.12v3.92L25%200zM25%200l25%2024.99v-3.87L28.87%200zm25%2024.99%2025%2024.98L100%2025%2075%200zm-50%20.05v3.87l21.13%2021.12H25l-25-25zm25%2024.99h3.87L50%2028.9v-3.87zm0%200L0%2075l25%2025%2025-24.99zM50%2075l25-24.98h-3.87L50%2071.14v3.87zm0%200v3.87L71.13%20100H75L50%2075.01zm25%2025h3.87L100%2078.88v-3.87zm25-24.99v-3.87L78.87%2050.03H75L100%2075zM31.1%200%2050%2018.93v-3.87L34.98%200h-3.87zm6.07%200L50%2012.82V8.96L41.04%200zm6.1%200L50%206.77V0h-6.72zM25%202.19%202.14%2025.04H25zm0%2022.85v22.8l22.81-22.8zM75%203.92l21.13%2021.12L75%2046.16%2053.87%2025.04zm0%202.19L56.06%2025.04l18.89%2018.88%2018.94-18.88L75%206.1zm0%203.92%2015.07%2015L75%2040.06%2059.98%2025.04zm0%202.18L62.17%2025.04%2075%2037.86l12.83-12.82L75%2012.2zm0%203.82%208.96%209L75%2033.95%2066.04%2025zm0%202.24-6.72%206.77L75%2031.76l6.77-6.72h-.05zM0%2031.09v3.87l15.02%2015.07h3.87zm50%200L31.1%2050.03h3.88L50%2034.96V31.1zM0%2037.2v3.87l8.91%208.96h3.92zm50%200L37.17%2050.03h3.87L50%2041.07zM0%2043.3v6.73h6.72zm50%200-6.72%206.73H50zm0%206.73v6.71l6.72-6.71zm8.96%200L50%2058.93v3.92l12.83-12.82zm6.06%200L50%2065.03v3.88l18.94-18.88zm16.09%200L100%2068.9v-3.87l-15.02-15zm6.11%200L100%2062.85v-3.92l-8.91-8.9zm6.06%200%206.72%206.71v-6.71zM75%2052.2%2052.19%2075H75zM75%2075v22.8L97.81%2075zM25%2053.9l21.13%2021.12L25%2096.13%203.87%2075.01zm0%202.2L6.1%2074.95l18.95%2018.88%2018.9-18.88L25%2056.08zm0%203.9%2015.02%2015.01L25%2090.03%209.98%2075zm0%202.19L12.17%2075%2025%2087.84%2037.83%2075%2025%2062.2zm0%203.87L33.96%2075%2025%2083.97%2016.04%2075zm0%202.23-6.72%206.72L25%2081.73l6.72-6.72L25%2068.3zm25%2012.83v3.87L65.02%20100h3.87zm50%200L81.1%20100h3.88L100%2084.99zm-50%206.06v3.86l8.96%208.96h3.87zm50%200L87.22%20100h3.87l8.91-8.96zm-50%206.1V100h6.72zm50%200L93.28%20100H100z%22%2F%3E%3C%2Fsvg%3E");
--squares-and-triangles-background-repeat: repeat;
+ --squares-and-triangles-background-size: 10;
}
[data-theme="lettuce"] {
@@ -41,11 +42,12 @@
--sidebar-text-color: var(--main-dark-color);
--sidebar-stroke-color: var(--background-dark-color);
--secondary-color: var(--main-medium-color);
- --interlocked-hexagons-background: url('https://f003.backblazeb2.com/file/sayana-static/themes/lettuce/interlocked-hexagons.svg');
+ --interlocked-hexagons-background: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22100%22%20height%3D%22100%22%3E%3Crect%20width%3D%22100%25%22%20height%3D%22100%25%22%20fill%3D%22%23f5ede1%22%2F%3E%3Cpath%20fill%3D%22%239ab663%22%20d%3D%22m33.64%200-.17.25h-33L4.3%206h33.07l4-6zm8.33%200-4.33%206.5h-33l3.83%205.75h33.06L49.7%200zm8.34%200-8.5%2012.75h-33l3.83%205.75H45.7L58.03%200zm8.33%200L45.97%2019h-33l3.83%205.75h33.06L66.36%200zm-8.5%2025.25L33.63%2050l3.86%205.8L54.03%2031h33l-3.83-5.75zm4.16%206.25L37.8%2056.25l3.87%205.8%2016.53-24.8h33l-3.84-5.75zm4.17%206.25L41.97%2062.5l3.86%205.8%2016.54-24.8h33l-3.84-5.75zM62.63%2044l-16.5%2024.75%203.87%205.8%2016.53-24.8h33L95.7%2044zM100%2050.45l-3.87%205.8%203.87%205.81v-11.6zM0%2050.46v11.6L12.5%2080.8l3.86-5.8zm95.83%206.25-3.87%205.8L100%2074.55v-11.6zm-4.17%206.24-3.86%205.8%2012.2%2018.3v-11.6zM0%2062.96v11.6l8.33%2012.49%203.86-5.8zm87.5%206.24L83.63%2075%20100%2099.54V87.96zM50%2075.45%2033.64%20100h7.72l12.5-18.75zm-50%200v11.6l4.16%206.24%203.87-5.8zm54.17%206.25L41.97%20100h7.73l8.33-12.5zm4.17%206.25L50.3%20100h7.73l4.17-6.25zM0%2087.95v11.59l3.86-5.8zm62.5%206.25-3.87%205.8h7.73z%22%2F%3E%3Cpath%20fill%3D%22%23bbd095%22%20d%3D%22M66.8.25%2062.97%206h33l4.03%206.05V.45l-.14-.2zM0%20.45v11.61L12.5%2030.8l3.86-5.8zM62.63%206.5l-3.83%205.75h33l8.2%2012.3v-11.6L95.7%206.5zm-4.16%206.25-3.84%205.75h33L100%2037.06v-11.6l-8.47-12.71zM0%2012.96v11.6l8.33%2012.49%203.86-5.8zM54.3%2019l-3.84%205.75h33L100%2049.55l.01-.01V37.96L87.36%2019zm-4.77%206.25H41.8L25.3%2050l16.66%2025-16.5%2024.75h7.74L49.7%2075%2033.03%2050zm-8.33%200h-7.74L16.96%2050l16.67%2025-16.5%2024.75h7.73L41.36%2075%2024.7%2050Zm-8.34%200h-7.73L8.63%2050%2025.3%2075%208.8%2099.75h7.73L33.03%2075%2016.36%2050zm-16.07%200L.3%2050l16.67%2025L.46%2099.75H8.2L24.7%2075%208.02%2050l16.5-24.75zM0%2025.46v11.6l4.16%206.24%203.87-5.8zm0%2012.5v11.58l3.86-5.79zm66.8%2012.29L50.3%2074.99l3.87%205.81%204.16%206.25%204.17%206.25%204.3%206.45h7.73L58.03%2075l16.5-24.75zm16.06%200h-7.73L58.63%2075l16.5%2024.75h7.73L66.36%2075zm.6%200L66.96%2075l16.5%2024.75h7.74L74.7%2075l16.5-24.75zm16.07%200H91.8L75.3%2075l16.5%2024.75h7.73L83.03%2075z%22%2F%3E%3C%2Fsvg%3E");
--interlocked-hexagons-background-repeat: repeat;
- --interlocked-hexagons-background-size: 10vw;
- --squares-and-triangles-background: url('https://f003.backblazeb2.com/file/sayana-static/themes/lettuce/squares-and-triangles.svg');
+ --interlocked-hexagons-background-size: 10vh;
+ --squares-and-triangles-background: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22100%22%20height%3D%22100%22%3E%3Crect%20width%3D%22100%25%22%20height%3D%22100%25%22%20fill%3D%22%23bbd095%22%2F%3E%3Cpath%20fill%3D%22%23f5ede1%22%20d%3D%22M0%200v6.77L6.72%200zm8.91%200L0%208.96v3.86L12.83%200zm6.11%200L0%2015.06v3.87L18.9%200zm6.11%200L0%2021.12v3.92L25%200zM25%200l25%2024.99v-3.87L28.87%200zm25%2024.99%2025%2024.98L100%2025%2075%200zm-50%20.05v3.87l21.13%2021.12H25l-25-25zm25%2024.99h3.87L50%2028.9v-3.87zm0%200L0%2075l25%2025%2025-24.99zM50%2075l25-24.98h-3.87L50%2071.14v3.87zm0%200v3.87L71.13%20100H75L50%2075.01zm25%2025h3.87L100%2078.88v-3.87zm25-24.99v-3.87L78.87%2050.03H75L100%2075zM31.1%200%2050%2018.93v-3.87L34.98%200h-3.87zm6.07%200L50%2012.82V8.96L41.04%200zm6.1%200L50%206.77V0h-6.72zM25%202.19%202.14%2025.04H25zm0%2022.85v22.8l22.81-22.8zM75%203.92l21.13%2021.12L75%2046.16%2053.87%2025.04zm0%202.19L56.06%2025.04l18.89%2018.88%2018.94-18.88L75%206.1zm0%203.92%2015.07%2015L75%2040.06%2059.98%2025.04zm0%202.18L62.17%2025.04%2075%2037.86l12.83-12.82L75%2012.2zm0%203.82%208.96%209L75%2033.95%2066.04%2025zm0%202.24-6.72%206.77L75%2031.76l6.77-6.72h-.05zM0%2031.09v3.87l15.02%2015.07h3.87zm50%200L31.1%2050.03h3.88L50%2034.96V31.1zM0%2037.2v3.87l8.91%208.96h3.92zm50%200L37.17%2050.03h3.87L50%2041.07zM0%2043.3v6.73h6.72zm50%200-6.72%206.73H50zm0%206.73v6.71l6.72-6.71zm8.96%200L50%2058.93v3.92l12.83-12.82zm6.06%200L50%2065.03v3.88l18.94-18.88zm16.09%200L100%2068.9v-3.87l-15.02-15zm6.11%200L100%2062.85v-3.92l-8.91-8.9zm6.06%200%206.72%206.71v-6.71zM75%2052.2%2052.19%2075H75zM75%2075v22.8L97.81%2075zM25%2053.9l21.13%2021.12L25%2096.13%203.87%2075.01zm0%202.2L6.1%2074.95l18.95%2018.88%2018.9-18.88L25%2056.08zm0%203.9%2015.02%2015.01L25%2090.03%209.98%2075zm0%202.19L12.17%2075%2025%2087.84%2037.83%2075%2025%2062.2zm0%203.87L33.96%2075%2025%2083.97%2016.04%2075zm0%202.23-6.72%206.72L25%2081.73l6.72-6.72L25%2068.3zm25%2012.83v3.87L65.02%20100h3.87zm50%200L81.1%20100h3.88L100%2084.99zm-50%206.06v3.86l8.96%208.96h3.87zm50%200L87.22%20100h3.87l8.91-8.96zm-50%206.1V100h6.72zm50%200L93.28%20100H100z%22%2F%3E%3C%2Fsvg%3E");
--squares-and-triangles-background-repeat: repeat;
+ --squares-and-triangles-background-size: 10;
}
[data-theme="night"] {
@@ -60,8 +62,9 @@
--interlocked-hexagons-background: radial-gradient(33.5% 25% at 100% 82%, rgba(190, 227, 248, 0.2) 0%, rgba(197, 179, 246, 0.13) 33.33%, rgba(255, 0, 0, 0) 100%), radial-gradient(54% 25% at 55% 100%, rgba(190, 227, 248, 0.2) 0%, rgba(197, 179, 246, 0.13) 33.33%, rgba(255, 0, 0, 0) 100%), radial-gradient(37% 19.5% at 20% 100%, rgba(176, 220, 248, 0.3) 0%, rgba(197, 172, 247, 0.2) 33.33%, rgba(255, 0, 0, 0) 100%), radial-gradient(63% 34.5% at 66% 77%, rgba(190, 227, 248, 0.15) 0%, rgba(197, 179, 246, 0.1) 33.33%, rgba(255, 0, 0, 0) 100%), linear-gradient(0deg, #2f5883 0%, #2f4e7a 4.75%, #2e4472 9.5%, #2a3065 19%, #272e57 26.5%, #242b4b 34%, #1f2437 49%, #1c2030 57.75%, #1a1b29 66.5%, #13131b 84%);
--interlocked-hexagons-background-repeat: no-repeat;
--interlocked-hexagons-background-size: 100vw 100vh;
- --squares-and-triangles-background: url("data:image/svg+xml,<svg id='patternId' width='100%' height='100%' xmlns='http://www.w3.org/2000/svg'><defs><pattern id='a' patternUnits='userSpaceOnUse' width='60' height='60' patternTransform='scale(2) rotate(0)'><rect x='0' y='0' width='100%' height='100%' fill='%2313131bff'/><path d='M10 50H0m60-40H50m0 40v10M10 0v10m21 30v20m0-60v20m9 10h20M0 30h20m0 10h20V20H20v10zM10 10h40v40H10zM0 0h60v60H0z' stroke-width='0.5' stroke='%23353543ff' fill='none'/></pattern></defs><rect width='800%' height='800%' transform='translate(0,0)' fill='url(%23a)'/></svg>");
+ --squares-and-triangles-background: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2260%22%20height%3D%2260%22%3E%3Crect%20width%3D%22100%25%22%20height%3D%22100%25%22%20fill%3D%22%2313131b%22%2F%3E%3Cpath%20fill%3D%22none%22%20stroke%3D%22%23363645%22%20stroke-width%3D%22.5%22%20d%3D%22M10%2050H0m60-40H50m0%2040v10M10%200v10m21%2030v20m0-60v20m9%2010h20M0%2030h20m0%2010h20V20H20v10zM10%2010h40v40H10zM0%200h60v60H0z%22%2F%3E%3C%2Fsvg%3E");
--squares-and-triangles-background-repeat: repeat;
+ --squares-and-triangles-background-size: 5;
}
.bg-interlocked-hexagons {
@@ -121,16 +124,24 @@
.desktop-sidebar-custom {
width: 5vw;
- background-size: 10vw;
+ background-size: calc(var(--squares-and-triangles-background-size) * 1vw);
+}
+
+body:has(.lg-container:not([class~="lg-inline"])) .desktop-sidebar-custom {
+ display: none !important;
}
.mobile-topbar-custom {
width: 90vw;
- height: 10vh;
- background-size: 20vh;
+ height: 8%;
+ background-size: calc(var(--squares-and-triangles-background-size) * 1.6vh);
margin-left: 5vw;
}
+body:has(.lg-container:not([class~="lg-inline"])) .mobile-topbar-custom {
+ display: none !important;
+}
+
.logo-custom {
width: 3.5vw;
height: 20vw;
@@ -183,117 +194,20 @@
display: none;
}
-.lh-0-9 {
- line-height: 0.9;
-}
-
-.lh-2 {
- line-height: 2;
-}
-
-.ls-vmin0-04 {
- letter-spacing: 0.04vmin;
-}
-
-.timl-vmax2 {
- text-indent: 2vmax hanging;
-}
-
-.text-vmax0-8 {
- font-size: 0.8vmax;
-}
-
-.text-vmax1 {
- font-size: 1vmax !important;
-}
-
-.text-vmax1-2 {
- font-size: 1.2vmax;
-}
-
-.text-vmax1-5 {
- font-size: 1.5vmax !important;
-}
-
-.text-vmax2 {
- font-size: 2vmax;
-}
-
-.text-vmax2-5 {
- font-size: 2.5vmax;
-}
-
-.w-vw90 {
- width: 90vw;
-}
-
-.h-vh90 {
- height: 90vh;
-}
-
-.w-p80 {
- width: 80%;
-}
-
-.mt-vmin0-8 {
- margin-top: 0.8vmin;
-}
-
-.mt-vmin1-6 {
- margin-top: 1.6vmin;
-}
-
-.mx-vmin1-6 {
- margin-left: 1.6vmin;
- margin-right: 1.6vmin;
-}
-
-.mb-vmin0-4 {
- margin-bottom: 0.4vmin;
-}
-
-.mb-vmin0-6 {
- margin-bottom: 0.8vmin;
-}
-
-.mb-vmin0-8 {
- margin-bottom: 0.8vmin;
-}
-
-.mb-vmin1-2 {
- margin-bottom: 1.2vmin;
-}
-
-.mb-vmin1-6 {
- margin-bottom: 1.6vmin;
-}
-
-.pl-vmin0-8 {
- padding-left: 0.8vmin;
-}
-
-.pl-vmax2 {
- padding-left: 2vmax;
-}
-
-.pr-vmin1-2 {
- padding-right: 1.2vmin;
-}
-
-.p-vmin2-4 {
- padding: 2.4vmin;
-}
-
-.space-y-vmin0-8 {
- column-gap: 0.8vmin;
-}
-
.lg-backdrop {
background-color: var(--background-light-color);
+ opacity: 0.8 !important;
+}
+
+.lg-container:not([class~="lg-inline"]) .lg-outer {
+ width: 90%;
+ height: 90%;
+ margin: 5vh 5vw;
}
.lg-thumb-outer {
background-color: var(--background-light-color) !important;
+ opacity: 0.8 !important;
}
.lg-prev {
@@ -314,6 +228,19 @@
height: 1vmax;
}
+.lg-container:not([class~="lg-inline"]) .lg-counter {
+ font-size: 2vmax;
+ height: 2vmax;
+}
+
+.lg-content {
+ top: 3vmax !important;
+}
+
+.lg-container:not([class~="lg-inline"]) .lg-content {
+ top: 4vmax !important;
+}
+
.lg-toolbar .lg-icon {
padding: 0 0.7vmax;
font-size: 1.5vmax !important;
@@ -322,6 +249,11 @@
color: var(--main-dark-color);
}
+.lg-container:not([class~="lg-inline"]) .lg-toolbar .lg-icon {
+ font-size: 3vmax !important;
+ height: 3vmax;
+}
+
.lg-toolbar .lg-icon:hover {
color: var(--main-medium-color);
}
@@ -407,16 +339,16 @@
}
.nav-icon-custom {
- font-size: 6vh !important;
+ font-size: 5vh !important;
-webkit-text-stroke: 0.1vh var(--sidebar-stroke-color);
- width: 10vh;
- height: 10vh;
+ width: 8vh;
+ height: 8vh;
align-content: center;
text-align: center;
}
.nav-icon-custom:hover {
- font-size: 8vh;
+ font-size: 7vh;
}
.bg-pattern-body {
diff --git a/static/output.css b/static/output.css
deleted file mode 100644
index 2ba01ad..0000000
--- a/static/output.css
+++ /dev/null
@@ -1,932 +0,0 @@
-/*! tailwindcss v4.1.11 | MIT License | https://tailwindcss.com */
-@layer properties;
-@layer theme, base, components, utilities;
-@layer theme {
- :root, :host {
- --font-sans: ui-sans-serif, system-ui, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol',
- 'Noto Color Emoji';
- --font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', 'Courier New',
- monospace;
- --color-yellow-100: oklch(97.3% 0.071 103.193);
- --color-sky-100: oklch(95.1% 0.026 236.824);
- --color-sky-200: oklch(90.1% 0.058 230.902);
- --color-sky-300: oklch(82.8% 0.111 230.318);
- --spacing: 0.25rem;
- --text-4xl: 2.25rem;
- --text-4xl--line-height: calc(2.5 / 2.25);
- --font-weight-medium: 500;
- --font-weight-bold: 700;
- --font-weight-extrabold: 800;
- --radius-md: 0.375rem;
- --radius-lg: 0.5rem;
- --radius-4xl: 2rem;
- --default-transition-duration: 150ms;
- --default-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
- --default-font-family: var(--font-sans);
- --default-mono-font-family: var(--font-mono);
- --font-spectral: Spectral, serif;
- --font-patua: "Patua One", cursive;
- }
-}
-@layer base {
- *, ::after, ::before, ::backdrop, ::file-selector-button {
- box-sizing: border-box;
- margin: 0;
- padding: 0;
- border: 0 solid;
- }
- html, :host {
- line-height: 1.5;
- -webkit-text-size-adjust: 100%;
- tab-size: 4;
- font-family: var(--default-font-family, ui-sans-serif, system-ui, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji');
- font-feature-settings: var(--default-font-feature-settings, normal);
- font-variation-settings: var(--default-font-variation-settings, normal);
- -webkit-tap-highlight-color: transparent;
- }
- hr {
- height: 0;
- color: inherit;
- border-top-width: 1px;
- }
- abbr:where([title]) {
- -webkit-text-decoration: underline dotted;
- text-decoration: underline dotted;
- }
- h1, h2, h3, h4, h5, h6 {
- font-size: inherit;
- font-weight: inherit;
- }
- a {
- color: inherit;
- -webkit-text-decoration: inherit;
- text-decoration: inherit;
- }
- b, strong {
- font-weight: bolder;
- }
- code, kbd, samp, pre {
- font-family: var(--default-mono-font-family, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', 'Courier New', monospace);
- font-feature-settings: var(--default-mono-font-feature-settings, normal);
- font-variation-settings: var(--default-mono-font-variation-settings, normal);
- font-size: 1em;
- }
- small {
- font-size: 80%;
- }
- sub, sup {
- font-size: 75%;
- line-height: 0;
- position: relative;
- vertical-align: baseline;
- }
- sub {
- bottom: -0.25em;
- }
- sup {
- top: -0.5em;
- }
- table {
- text-indent: 0;
- border-color: inherit;
- border-collapse: collapse;
- }
- :-moz-focusring {
- outline: auto;
- }
- progress {
- vertical-align: baseline;
- }
- summary {
- display: list-item;
- }
- ol, ul, menu {
- list-style: none;
- }
- img, svg, video, canvas, audio, iframe, embed, object {
- display: block;
- vertical-align: middle;
- }
- img, video {
- max-width: 100%;
- height: auto;
- }
- button, input, select, optgroup, textarea, ::file-selector-button {
- font: inherit;
- font-feature-settings: inherit;
- font-variation-settings: inherit;
- letter-spacing: inherit;
- color: inherit;
- border-radius: 0;
- background-color: transparent;
- opacity: 1;
- }
- :where(select:is([multiple], [size])) optgroup {
- font-weight: bolder;
- }
- :where(select:is([multiple], [size])) optgroup option {
- padding-inline-start: 20px;
- }
- ::file-selector-button {
- margin-inline-end: 4px;
- }
- ::placeholder {
- opacity: 1;
- }
- @supports (not (-webkit-appearance: -apple-pay-button)) or (contain-intrinsic-size: 1px) {
- ::placeholder {
- color: currentcolor;
- @supports (color: color-mix(in lab, red, red)) {
- color: color-mix(in oklab, currentcolor 50%, transparent);
- }
- }
- }
- textarea {
- resize: vertical;
- }
- ::-webkit-search-decoration {
- -webkit-appearance: none;
- }
- ::-webkit-date-and-time-value {
- min-height: 1lh;
- text-align: inherit;
- }
- ::-webkit-datetime-edit {
- display: inline-flex;
- }
- ::-webkit-datetime-edit-fields-wrapper {
- padding: 0;
- }
- ::-webkit-datetime-edit, ::-webkit-datetime-edit-year-field, ::-webkit-datetime-edit-month-field, ::-webkit-datetime-edit-day-field, ::-webkit-datetime-edit-hour-field, ::-webkit-datetime-edit-minute-field, ::-webkit-datetime-edit-second-field, ::-webkit-datetime-edit-millisecond-field, ::-webkit-datetime-edit-meridiem-field {
- padding-block: 0;
- }
- :-moz-ui-invalid {
- box-shadow: none;
- }
- button, input:where([type='button'], [type='reset'], [type='submit']), ::file-selector-button {
- appearance: button;
- }
- ::-webkit-inner-spin-button, ::-webkit-outer-spin-button {
- height: auto;
- }
- [hidden]:where(:not([hidden='until-found'])) {
- display: none !important;
- }
-}
-@layer utilities {
- .absolute {
- position: absolute;
- }
- .fixed {
- position: fixed;
- }
- .relative {
- position: relative;
- }
- .z-0 {
- z-index: 0;
- }
- .z-1 {
- z-index: 1;
- }
- .z-10 {
- z-index: 10;
- }
- .z-20 {
- z-index: 20;
- }
- .container {
- width: 100%;
- @media (width >= 40rem) {
- max-width: 40rem;
- }
- @media (width >= 48rem) {
- max-width: 48rem;
- }
- @media (width >= 64rem) {
- max-width: 64rem;
- }
- @media (width >= 80rem) {
- max-width: 80rem;
- }
- @media (width >= 96rem) {
- max-width: 96rem;
- }
- }
- .m-2 {
- margin: calc(var(--spacing) * 2);
- }
- .mx-auto {
- margin-inline: auto;
- }
- .my-auto {
- margin-block: auto;
- }
- .mt-2 {
- margin-top: calc(var(--spacing) * 2);
- }
- .mt-auto {
- margin-top: auto;
- }
- .mr-2 {
- margin-right: calc(var(--spacing) * 2);
- }
- .mr-auto {
- margin-right: auto;
- }
- .mb-4 {
- margin-bottom: calc(var(--spacing) * 4);
- }
- .mb-auto {
- margin-bottom: auto;
- }
- .ml-auto {
- margin-left: auto;
- }
- .block {
- display: block;
- }
- .flex {
- display: flex;
- }
- .h-4\/12 {
- height: calc(4/12 * 100%);
- }
- .h-16 {
- height: calc(var(--spacing) * 16);
- }
- .h-auto {
- height: auto;
- }
- .h-screen {
- height: 100vh;
- }
- .min-h-16 {
- min-height: calc(var(--spacing) * 16);
- }
- .w-6\/12 {
- width: calc(6/12 * 100%);
- }
- .w-10\/12 {
- width: calc(10/12 * 100%);
- }
- .w-16 {
- width: calc(var(--spacing) * 16);
- }
- .max-w-full {
- max-width: 100%;
- }
- .flex-1 {
- flex: 1;
- }
- .flex-3 {
- flex: 3;
- }
- .flex-5 {
- flex: 5;
- }
- .flex-grow {
- flex-grow: 1;
- }
- .grow {
- flex-grow: 1;
- }
- .transform {
- transform: var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,);
- }
- .cursor-pointer {
- cursor: pointer;
- }
- .resize {
- resize: both;
- }
- .list-inside {
- list-style-position: inside;
- }
- .list-decimal {
- list-style-type: decimal;
- }
- .list-disc {
- list-style-type: disc;
- }
- .flex-col {
- flex-direction: column;
- }
- .flex-row {
- flex-direction: row;
- }
- .items-center {
- align-items: center;
- }
- .justify-center {
- justify-content: center;
- }
- .justify-items-center {
- justify-items: center;
- }
- .gap-0 {
- gap: calc(var(--spacing) * 0);
- }
- .gap-4 {
- gap: calc(var(--spacing) * 4);
- }
- .justify-self-center {
- justify-self: center;
- }
- .overflow-hidden {
- overflow: hidden;
- }
- .overflow-x-auto {
- overflow-x: auto;
- }
- .overflow-y-auto {
- overflow-y: auto;
- }
- .rounded-4xl {
- border-radius: var(--radius-4xl);
- }
- .rounded-lg {
- border-radius: var(--radius-lg);
- }
- .rounded-md {
- border-radius: var(--radius-md);
- }
- .border-t-4 {
- border-top-style: var(--tw-border-style);
- border-top-width: 4px;
- }
- .border-r-1 {
- border-right-style: var(--tw-border-style);
- border-right-width: 1px;
- }
- .border-dashed {
- --tw-border-style: dashed;
- border-style: dashed;
- }
- .border-dotted {
- --tw-border-style: dotted;
- border-style: dotted;
- }
- .bg-repeat {
- background-repeat: repeat;
- }
- .object-cover {
- object-fit: cover;
- }
- .p-4 {
- padding: calc(var(--spacing) * 4);
- }
- .pr-2 {
- padding-right: calc(var(--spacing) * 2);
- }
- .text-center {
- text-align: center;
- }
- .text-left {
- text-align: left;
- }
- .text-right {
- text-align: right;
- }
- .font-patua {
- font-family: var(--font-patua);
- }
- .font-spectral {
- font-family: var(--font-spectral);
- }
- .text-4xl {
- font-size: var(--text-4xl);
- line-height: var(--tw-leading, var(--text-4xl--line-height));
- }
- .font-bold {
- --tw-font-weight: var(--font-weight-bold);
- font-weight: var(--font-weight-bold);
- }
- .font-extrabold {
- --tw-font-weight: var(--font-weight-extrabold);
- font-weight: var(--font-weight-extrabold);
- }
- .font-medium {
- --tw-font-weight: var(--font-weight-medium);
- font-weight: var(--font-weight-medium);
- }
- .italic {
- font-style: italic;
- }
- .underline {
- text-decoration-line: underline;
- }
- .opacity-70 {
- opacity: 70%;
- }
- .opacity-100 {
- opacity: 100%;
- }
- .shadow-2xl {
- --tw-shadow: 0 25px 50px -12px var(--tw-shadow-color, rgb(0 0 0 / 0.25));
- box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
- }
- .shadow-lg {
- --tw-shadow: 0 10px 15px -3px var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 4px 6px -4px var(--tw-shadow-color, rgb(0 0 0 / 0.1));
- box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
- }
- .transition-colors {
- transition-property: color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, --tw-gradient-from, --tw-gradient-via, --tw-gradient-to;
- transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));
- transition-duration: var(--tw-duration, var(--default-transition-duration));
- }
- .duration-300 {
- --tw-duration: 300ms;
- transition-duration: 300ms;
- }
- .select-none {
- -webkit-user-select: none;
- user-select: none;
- }
-}
-[data-theme="olive"] {
- --main-dark-color: #4b513a;
- --main-medium-color: #8a9d8a;
- --main-light-color: #a5b8a5;
- --background-dark-color: #ffffdd;
- --background-light-color: #fffff0;
- --sidebar-text-color: var(--background-dark-color);
- --sidebar-stroke-color: var(--main-dark-color);
- --secondary-color: var(--main-light-color);
- --interlocked-hexagons-background: url('https://f003.backblazeb2.com/file/sayana-static/themes/olive/interlocked-hexagons.svg');
- --interlocked-hexagons-background-repeat: repeat;
- --interlocked-hexagons-background-size: 10vw;
- --squares-and-triangles-background: url('https://f003.backblazeb2.com/file/sayana-static/themes/olive/squares-and-triangles.svg');
- --squares-and-triangles-background-repeat: repeat;
-}
-[data-theme="lettuce"] {
- --main-dark-color: #384a0c;
- --main-medium-color: #9bb665;
- --main-light-color: #bbd095;
- --background-dark-color: #f5eee2;
- --background-light-color: #fff9ef;
- --sidebar-text-color: var(--main-dark-color);
- --sidebar-stroke-color: var(--background-dark-color);
- --secondary-color: var(--main-medium-color);
- --interlocked-hexagons-background: url('https://f003.backblazeb2.com/file/sayana-static/themes/lettuce/interlocked-hexagons.svg');
- --interlocked-hexagons-background-repeat: repeat;
- --interlocked-hexagons-background-size: 10vw;
- --squares-and-triangles-background: url('https://f003.backblazeb2.com/file/sayana-static/themes/lettuce/squares-and-triangles.svg');
- --squares-and-triangles-background-repeat: repeat;
-}
-[data-theme="night"] {
- --main-dark-color: var(--color-sky-100);
- --main-medium-color: var(--color-sky-200);
- --main-light-color: var(--color-sky-300);
- --background-dark-color: #13131b;
- --background-light-color: #222230;
- --sidebar-text-color: var(--main-dark-color);
- --sidebar-stroke-color: var(--background-light-color);
- --secondary-color: var(--main-light-color);
- --interlocked-hexagons-background: radial-gradient(33.5% 25% at 100% 82%, rgba(190, 227, 248, 0.2) 0%, rgba(197, 179, 246, 0.13) 33.33%, rgba(255, 0, 0, 0) 100%), radial-gradient(54% 25% at 55% 100%, rgba(190, 227, 248, 0.2) 0%, rgba(197, 179, 246, 0.13) 33.33%, rgba(255, 0, 0, 0) 100%), radial-gradient(37% 19.5% at 20% 100%, rgba(176, 220, 248, 0.3) 0%, rgba(197, 172, 247, 0.2) 33.33%, rgba(255, 0, 0, 0) 100%), radial-gradient(63% 34.5% at 66% 77%, rgba(190, 227, 248, 0.15) 0%, rgba(197, 179, 246, 0.1) 33.33%, rgba(255, 0, 0, 0) 100%), linear-gradient(0deg, #2f5883 0%, #2f4e7a 4.75%, #2e4472 9.5%, #2a3065 19%, #272e57 26.5%, #242b4b 34%, #1f2437 49%, #1c2030 57.75%, #1a1b29 66.5%, #13131b 84%);
- --interlocked-hexagons-background-repeat: no-repeat;
- --interlocked-hexagons-background-size: 100vw 100vh;
- --squares-and-triangles-background: url("data:image/svg+xml,<svg id='patternId' width='100%' height='100%' xmlns='http://www.w3.org/2000/svg'><defs><pattern id='a' patternUnits='userSpaceOnUse' width='60' height='60' patternTransform='scale(2) rotate(0)'><rect x='0' y='0' width='100%' height='100%' fill='%2313131bff'/><path d='M10 50H0m60-40H50m0 40v10M10 0v10m21 30v20m0-60v20m9 10h20M0 30h20m0 10h20V20H20v10zM10 10h40v40H10zM0 0h60v60H0z' stroke-width='0.5' stroke='%23353543ff' fill='none'/></pattern></defs><rect width='800%' height='800%' transform='translate(0,0)' fill='url(%23a)'/></svg>");
- --squares-and-triangles-background-repeat: repeat;
-}
-.bg-interlocked-hexagons {
- background-image: var(--interlocked-hexagons-background);
- background-repeat: var(--interlocked-hexagons-background-repeat);
- background-size: var(--interlocked-hexagons-background-size);
-}
-.bg-squares-and-triangles {
- background-image: var(--squares-and-triangles-background);
- background-repeat: var(--squares-and-triangles-background-repeat);
-}
-.text-sidebar {
- color: var(--sidebar-text-color);
-}
-.stroke-sidebar {
- border-color: var(--sidebar-stroke-color);
-}
-.text-main-dark {
- color: var(--main-dark-color);
-}
-.text-main-medium {
- color: var(--main-medium-color);
-}
-.text-background-dark {
- color: var(--background-dark-color);
-}
-.text-secondary {
- color: var(--secondary-color);
-}
-.bg-main-dark {
- background-color: var(--main-dark-color);
-}
-.bg-background-dark {
- background-color: var(--background-dark-color);
-}
-.bg-background-light {
- background-color: var(--background-light-color);
-}
-.border-main-dark {
- border-color: var(--main-dark-color);
-}
-.border-main-medium {
- border-color: var(--main-medium-color);
-}
-.desktop-sidebar-custom {
- width: 5vw;
- background-size: 10vw;
-}
-.mobile-topbar-custom {
- width: 90vw;
- height: 10vh;
- background-size: 20vh;
- margin-left: 5vw;
-}
-.logo-custom {
- width: 3.5vw;
- height: 20vw;
- font-size: 2.5vw;
- -webkit-text-stroke: 0.1vw var(--sidebar-stroke-color);
- writing-mode: sideways-lr;
- text-orientation: mixed;
- display: block;
-}
-.nav-icon-custom {
- font-size: 3vw !important;
- -webkit-text-stroke: 0.1vw var(--sidebar-stroke-color);
- width: 5vw;
- height: 5vw;
- align-content: center;
- text-align: center;
-}
-.nav-icon-custom:hover {
- font-size: 4vw;
-}
-.content-square {
- width: 100vh;
-}
-.border-left-custom {
- width: 0.5vw;
- border-right: 0.3vh dashed var(--main-dark-color);
-}
-.border-right-custom {
- width: 0.5vw;
- border-left: 0.5vh dotted var(--main-dark-color);
-}
-.inset-shadow {
- box-shadow: inset 0vh 1vh 1vh -1vh rgba(75, 81, 58, 0.5), inset 1vh 0vh 1vh -1vh rgba(75, 81, 58, 0.5), inset -1vh 0vh 1vh -1vh rgba(75, 81, 58, 0.5), inset 0vh -0.5vh rgba(75, 81, 58, 0.5);
-}
-.desktop {
- display: flex;
-}
-.mobile {
- display: none;
-}
-.lh-0-9 {
- line-height: 0.9;
-}
-.lh-2 {
- line-height: 2;
-}
-.ls-vmin0-04 {
- letter-spacing: 0.04vmin;
-}
-.timl-vmax2 {
- text-indent: 2vmax hanging;
-}
-.text-vmax0-8 {
- font-size: 0.8vmax;
-}
-.text-vmax1 {
- font-size: 1vmax !important;
-}
-.text-vmax1-2 {
- font-size: 1.2vmax;
-}
-.text-vmax1-5 {
- font-size: 1.5vmax !important;
-}
-.text-vmax2 {
- font-size: 2vmax;
-}
-.text-vmax2-5 {
- font-size: 2.5vmax;
-}
-.w-vw90 {
- width: 90vw;
-}
-.h-vh90 {
- height: 90vh;
-}
-.w-p80 {
- width: 80%;
-}
-.mt-vmin0-8 {
- margin-top: 0.8vmin;
-}
-.mt-vmin1-6 {
- margin-top: 1.6vmin;
-}
-.mx-vmin1-6 {
- margin-left: 1.6vmin;
- margin-right: 1.6vmin;
-}
-.mb-vmin0-4 {
- margin-bottom: 0.4vmin;
-}
-.mb-vmin0-6 {
- margin-bottom: 0.8vmin;
-}
-.mb-vmin0-8 {
- margin-bottom: 0.8vmin;
-}
-.mb-vmin1-2 {
- margin-bottom: 1.2vmin;
-}
-.mb-vmin1-6 {
- margin-bottom: 1.6vmin;
-}
-.pl-vmin0-8 {
- padding-left: 0.8vmin;
-}
-.pl-vmax2 {
- padding-left: 2vmax;
-}
-.pr-vmin1-2 {
- padding-right: 1.2vmin;
-}
-.p-vmin2-4 {
- padding: 2.4vmin;
-}
-.space-y-vmin0-8 {
- column-gap: 0.8vmin;
-}
-.lg-backdrop {
- background-color: var(--background-light-color);
-}
-.lg-thumb-outer {
- background-color: var(--background-light-color) !important;
-}
-.lg-prev {
- background-color: var(--background-light-color);
- color: var(--main-dark-color);
-}
-.lg-next {
- background-color: var(--background-light-color);
- color: var(--main-dark-color);
-}
-.lg-counter {
- color: var(--main-dark-color);
- font-family: 'Spectral';
- font-size: 1vmax;
- padding-top: 0;
- height: 1vmax;
-}
-.lg-toolbar .lg-icon {
- padding: 0 0.7vmax;
- font-size: 1.5vmax !important;
- height: 1.5vmax;
- width: auto;
- color: var(--main-dark-color);
-}
-.lg-toolbar .lg-icon:hover {
- color: var(--main-medium-color);
-}
-.lg-toolbar .lg-icon {
- font-size: 1.5vmax !important;
- color: var(--main-dark-color);
-}
-.lg-content .lg-icon:hover {
- color: var(--main-medium-color);
-}
-.lg-sub-html {
- padding: 0.7vmin 1.25vmin !important;
-}
-.inline-gallery-container {
- width: 80%;
- height: 60vmin;
-}
-.light-gallery-captions {
- p {
- transform: translate3d(0, 0, 0px);
- transition-delay: 500ms;
- opacity: 1;
- }
-}
-.lg-slide-progress {
- .light-gallery-captions {
- h4 {
- transform: translate3d(-60px, 0, 0px);
- }
- p {
- transform: translate3d(60px, 0, 0px);
- }
- h4, p {
- opacity: 0;
- }
- }
-}
-.lg-current {
- &.lg-slide-progress {
- .light-gallery-captions {
- h4, p {
- transition-delay: 0ms;
- }
- }
- }
-}
-@media (max-aspect-ratio: 1.1/1) {
- .desktop {
- display: none;
- }
- .mobile {
- display: flex;
- }
- .inline-gallery-container {
- width: 100%;
- }
- .desktop-sidebar-custom {
- width: 90%;
- margin-left: 5vw;
- height: 10vh;
- background-size: 20vh;
- }
- .logo-custom {
- display: none;
- }
- .nav-icon-custom {
- font-size: 6vh !important;
- -webkit-text-stroke: 0.1vh var(--sidebar-stroke-color);
- width: 10vh;
- height: 10vh;
- align-content: center;
- text-align: center;
- }
- .nav-icon-custom:hover {
- font-size: 8vh;
- }
- .bg-pattern-body {
- background-size: 10vh;
- }
- .border-left-custom {
- width: 1%;
- border-right: 0.3vw dashed var(--main-dark-color);
- }
- .border-right-custom {
- width: 1.5%;
- border-left: 0.5vw dotted var(--main-dark-color);
- }
-}
-@media (max-aspect-ratio: 0.4/1) {
- .desktop-sidebar-custom {
- width: 100%;
- margin-left: 0;
- }
-}
-.star {
- color: var(--color-yellow-100);
- animation-name: blink;
- animation-duration: 5s;
- animation-iteration-count: infinite;
- user-select: none;
- -webkit-user-select: none;
-}
-@keyframes blink {
- 0% {
- opacity: 1;
- }
- 20% {
- opacity: 0.2;
- }
- 80% {
- opacity: 0.2;
- }
- 100% {
- opacity: 1;
- }
-}
-@property --tw-rotate-x {
- syntax: "*";
- inherits: false;
-}
-@property --tw-rotate-y {
- syntax: "*";
- inherits: false;
-}
-@property --tw-rotate-z {
- syntax: "*";
- inherits: false;
-}
-@property --tw-skew-x {
- syntax: "*";
- inherits: false;
-}
-@property --tw-skew-y {
- syntax: "*";
- inherits: false;
-}
-@property --tw-border-style {
- syntax: "*";
- inherits: false;
- initial-value: solid;
-}
-@property --tw-font-weight {
- syntax: "*";
- inherits: false;
-}
-@property --tw-shadow {
- syntax: "*";
- inherits: false;
- initial-value: 0 0 #0000;
-}
-@property --tw-shadow-color {
- syntax: "*";
- inherits: false;
-}
-@property --tw-shadow-alpha {
- syntax: "<percentage>";
- inherits: false;
- initial-value: 100%;
-}
-@property --tw-inset-shadow {
- syntax: "*";
- inherits: false;
- initial-value: 0 0 #0000;
-}
-@property --tw-inset-shadow-color {
- syntax: "*";
- inherits: false;
-}
-@property --tw-inset-shadow-alpha {
- syntax: "<percentage>";
- inherits: false;
- initial-value: 100%;
-}
-@property --tw-ring-color {
- syntax: "*";
- inherits: false;
-}
-@property --tw-ring-shadow {
- syntax: "*";
- inherits: false;
- initial-value: 0 0 #0000;
-}
-@property --tw-inset-ring-color {
- syntax: "*";
- inherits: false;
-}
-@property --tw-inset-ring-shadow {
- syntax: "*";
- inherits: false;
- initial-value: 0 0 #0000;
-}
-@property --tw-ring-inset {
- syntax: "*";
- inherits: false;
-}
-@property --tw-ring-offset-width {
- syntax: "<length>";
- inherits: false;
- initial-value: 0px;
-}
-@property --tw-ring-offset-color {
- syntax: "*";
- inherits: false;
- initial-value: #fff;
-}
-@property --tw-ring-offset-shadow {
- syntax: "*";
- inherits: false;
- initial-value: 0 0 #0000;
-}
-@property --tw-duration {
- syntax: "*";
- inherits: false;
-}
-@layer properties {
- @supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))) {
- *, ::before, ::after, ::backdrop {
- --tw-rotate-x: initial;
- --tw-rotate-y: initial;
- --tw-rotate-z: initial;
- --tw-skew-x: initial;
- --tw-skew-y: initial;
- --tw-border-style: solid;
- --tw-font-weight: initial;
- --tw-shadow: 0 0 #0000;
- --tw-shadow-color: initial;
- --tw-shadow-alpha: 100%;
- --tw-inset-shadow: 0 0 #0000;
- --tw-inset-shadow-color: initial;
- --tw-inset-shadow-alpha: 100%;
- --tw-ring-color: initial;
- --tw-ring-shadow: 0 0 #0000;
- --tw-inset-ring-color: initial;
- --tw-inset-ring-shadow: 0 0 #0000;
- --tw-ring-inset: initial;
- --tw-ring-offset-width: 0px;
- --tw-ring-offset-color: #fff;
- --tw-ring-offset-shadow: 0 0 #0000;
- --tw-duration: initial;
- }
- }
-}
diff --git a/views/index.html b/views/index.html
index cff3826..731def6 100644
--- a/views/index.html
+++ b/views/index.html
@@ -9,9 +9,42 @@
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Spectral:ital,wght@0,200;0,300;0,400;0,500;0,600;0,700;0,800;1,200;1,300;1,400;1,500;1,600;1,700;1,800&family=Patua+One&display=swap" rel="stylesheet">
<link href="/output.css" rel="stylesheet">
+ <style>
+ .menu-outer-body {
+ border-radius: 10%;
+ width: 60vw;
+ height: 40vh;
+ }
+
+ .menu-inner-body {
+ width: 85%;
+ }
+
+ @media (max-aspect-ratio: 1.2/1) {
+ .menu-outer-body {
+ border-radius: 5%;
+ }
+
+ .menu-inner-body {
+ width: 92.5%;
+ }
+ }
+
+ @media (max-aspect-ratio: 0.8/1) {
+ .menu-outer-body {
+ width: 100vw;
+ height: 80vh;
+ border-radius: 0;
+ }
+
+ .menu-inner-body {
+ width: 100%;
+ }
+ }
+ </style>
</head>
-<body data-theme="night" class="font-spectral text-main-dark overflow-hidden bg-interlocked-hexagons h-screen flex flex-col">
+<body data-theme="night" class="font-spectral text-main-dark text-[1.5vmax] overflow-hidden bg-interlocked-hexagons h-screen flex flex-col">
<div class="absolute star z-0">*</div>
<div class="absolute star z-0">*</div>
@@ -57,22 +90,22 @@
switchTheme(savedTheme);
</script>
- <div class="p-4 w-6/12 h-4/12 z-1 rounded-4xl bg-background-dark flex flex-col mx-auto my-auto opacity-70">
- <p class="font-patua mx-auto text-4xl mt-2 mb-4">saya.today</p>
- <div class="w-10/12 grow bg-background-light flex flex-col mx-auto mb-4 overflow-y-auto opacity-100">
+ <div class="menu-outer-body p-4 z-1 bg-background-dark flex flex-col mx-auto my-auto opacity-70">
+ <p class="font-patua mx-auto text-[2.5vmax] mt-[0.8vmin] mb-[1.6vmin]">saya.today</p>
+ <div class="menu-inner-body grow bg-background-light flex flex-col mx-auto mb-[1.6vmin] overflow-y-auto opacity-100">
{{- range .BlogPages }}
- <div class="m-2 min-h-16 flex flex-row justify-center justify-items-center gap-4">
- <img style="flex-grow: 0;" class="flex-1 object-cover w-16 h-16 rounded-4xl select-none" src="https://f003.backblazeb2.com/file/sayana-photos/thumbnails/{{ .Thumbnail }}.webp">
+ <div class="m-2 flex flex-row justify-center justify-items-center gap-4">
+ <img onclick="location.href='/blog/{{ .Link }}';" style="flex-grow: 0;" class="flex-1 cursor-pointer object-cover rounded-4xl select-none w-[4vmax] h-[4vmax]" src="https://f003.backblazeb2.com/file/sayana-photos/thumbnails/{{ .Thumbnail }}.webp">
<div class="flex-5 justify-self-center flex-col border-r-1 border-dashed border-opacity-50 border-main-medium">
<a href="/blog/{{ .Link }}" class="block font-extrabold">{{ .Title }}</a>
- <a href="/blog/{{ .Link }}" class="block italic text-secondary">{{ .ActionDate }}</a>
+ <a href="/blog/{{ .Link }}" class="block italic text-[1vmax] text-secondary">{{ .ActionDate }}</a>
<p>{{ .ShortDescription }}</p>
</div>
<div class="flex-3 justify-self-center flex flex-col text-right">
- <p class="grow">
+ <p class="grow text-[1vmax]">
Тэги: {{ .Tags }}
</p>
- <p class="italic text-secondary">
+ <p class="italic text-secondary text-[1vmax]">
{{ .PublishedTime }}
</p>
</div>
diff --git a/views/layouts/blog-page.html b/views/layouts/blog-page.html
index 6ee7d85..08a6f93 100644
--- a/views/layouts/blog-page.html
+++ b/views/layouts/blog-page.html
@@ -8,13 +8,23 @@
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/lightgallery/2.8.3/css/lightgallery.min.css">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/lightgallery/2.8.3/css/lg-zoom.min.css">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/lightgallery/2.8.3/css/lg-thumbnail.min.css">
+{{- if .MapLocationX }}
+ <link rel="stylesheet" href="https://f003.backblazeb2.com/file/sayana-static/libs/leaflet/1.9.4/leaflet.css">
+{{- end }}
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Spectral:ital,wght@0,200;0,300;0,400;0,500;0,600;0,700;0,800;1,200;1,300;1,400;1,500;1,600;1,700;1,800&family=Patua+One&display=swap" rel="stylesheet">
<link href="/output.css" rel="stylesheet">
+
+ <style>
+ .map-container .leaflet-container {
+ width: 100% !important;
+ height: 100% !important;
+ }
+ </style>
</head>
-<body data-theme="olive" class="font-spectral text-main-dark overflow-hidden bg-interlocked-hexagons bg-repeat bg-pattern-body h-screen flex">
+<body data-theme="night" class="font-spectral text-main-dark overflow-hidden bg-interlocked-hexagons h-screen flex">
<script>
function switchTheme(theme) {
@@ -30,11 +40,11 @@
document.body.setAttribute('data-theme', theme);
}
- const savedTheme = localStorage.getItem('theme') || 'olive';
+ const savedTheme = localStorage.getItem('theme') || 'night';
switchTheme(savedTheme);
</script>
- <div class="desktop-sidebar-custom fixed bg-squares-and-triangles bg-repeat flex-col items-center shadow-2xl z-20 h-screen desktop">
+ <div class="desktop-sidebar-custom sticky bg-squares-and-triangles bg-repeat flex-col items-center shadow-2xl z-20 h-screen desktop">
<div class="logo-custom text-sidebar font-patua font-extrabold text-center relative z-20">
saya.today
</div>
@@ -46,24 +56,29 @@
</div>
</div>
- <div class="bg-background-dark z-10 h-screen desktop" style="padding-left: 5vw;">
+ <div class="bg-background-dark z-10 h-screen desktop">
<div class="border-left-custom bg-background-dark"></div>
- <div class="content-square flex flex-col bg-background-dark relative mt-vmin1-6 mx-vmin1-6">
- <div class="flex flex-row mb-vmin0-4">
- <i onclick="location.href='/';" class="fas fa-circle-left hover:bg-main-dark hover:bg-opacity-10 cursor-pointer transition-colors duration-300 rounded-md text-vmax2 mt-auto mb-auto pl-vmin0-8 pr-2"></i>
- <p class="text-vmax2 font-spectral italic font-extrabold select-none mt-auto pl-vmin0-8 pr-vmin1-2">//</p>
- <p class="text-vmax2 font-spectral italic text-left mt-auto">{{ .Title }}</p>
- <p class="grow text-vmax1-5 font-spectral text-secondary text-right mt-auto">{{ .PublishedDate }}</p>
+ <div class="content-square flex flex-col bg-background-dark relative mt-[1.6vmin] mx-[1.6vmin]">
+ <div class="flex flex-row mb-[0.4vmin]">
+ <i onclick="location.href='/';" class="fas fa-circle-left hover:bg-main-dark hover:bg-opacity-10 cursor-pointer transition-colors duration-300 rounded-md text-[2vmax] mt-auto mb-auto px-[0.8vmin]"></i>
+ <p class="text-[2vmax] font-spectral italic font-extrabold select-none mt-auto pl-[0.8vmin] pr-[1.2vmin]">//</p>
+ <p class="text-[2vmax] font-spectral italic text-left mt-auto">{{ .Title }}</p>
+ <p class="grow text-[1.5vmax] font-spectral text-secondary text-right mt-auto">{{ .PublishedDate }}</p>
</div>
- <hr class="border-t-4 border-dotted border-main-dark mb-vmin0-8">
+ <hr class="border-t-4 border-dotted border-main-dark mb-[0.8vmin]">
- <div class="bg-background-light flex flex-col flex-1 overflow-y-auto inset-shadow p-vmin2-4">
+ <div class="bg-background-light flex flex-col flex-1 overflow-y-auto inset-shadow p-[2.4vmin]">
{{ .ParsedMarkdownDesktop }}
+ {{- if .MapLocationX }}
+ <hr class="border-t-4 border-dotted border-main-dark mt-[0.8vmin] mb-[0.8vmin] w-[80%] ml-auto mr-auto">
+ <div id="location-map-desktop" class="relative p-[0.8vmin] flex-none ml-auto mr-auto w-[60%] h-[40vh]"></div>
+ <hr class="border-t-4 border-dotted border-main-dark mt-[0.8vmin] mb-[0.8vmin] w-[80%] ml-auto mr-auto">
+ {{- end }}
</div>
- <div class="flex flex-row mt-vmin0-8 mb-vmin0-4">
- <p class="grow text-vmax0-8 lh-0-9 font-spectral italic text-right text-secondary mr-2">
+ <div class="flex flex-row mt-[0.8vmin] mb-[0.4vmin]">
+ <p class="grow text-[0.8vmax]/[0.9] font-spectral italic text-right text-secondary mr-2">
<a href="">{{ .Title }}</a> © {{ .PublishedYear }} by <a href="https://t.me/EarlInisMona">Saya Andy</a> is licensed under <a href="https://creativecommons.org/licenses/by-sa/4.0/">CC BY-SA 4.0</a>
</p>
<img src="https://mirrors.creativecommons.org/presskit/icons/cc.svg" alt="" style="max-width:1.2vh; max-height:1.2vh;">
@@ -71,13 +86,13 @@
<img src="https://mirrors.creativecommons.org/presskit/icons/sa.svg" alt="" style="max-width:1.2vh; max-height:1.2vh;">
</div>
- <hr class="border-t-4 border-dotted border-main-dark mb-vmin0-8">
+ <hr class="border-t-4 border-dotted border-main-dark mb-[0.8vmin]">
</div>
<div class="border-right-custom bg-background-dark shadow-2xl"></div>
</div>
- <div class="mobile-topbar-custom fixed bg-squares-and-triangles bg-repeat flex-row items-center shadow-2xl w-vw90 z-20 mobile">
+ <div class="mobile-topbar-custom fixed bg-squares-and-triangles bg-repeat flex-row items-center shadow-2xl w-[90vw] z-20 mobile">
<div class="flex flex-row gap-0 relative z-20">
<i onclick="location.href='/';" class="fas fa-home nav-icon-custom text-sidebar hover:bg-background-dark cursor-pointer transition-colors duration-300 flex justify-center items-center rounded-lg"></i>
<i class="fas fa-search nav-icon-custom text-sidebar hover:bg-background-dark cursor-pointer transition-colors duration-300 flex justify-center items-center rounded-lg"></i>
@@ -89,24 +104,29 @@
</div>
</div>
- <div class="bg-background-dark flex-row z-10 w-vw90 h-vh90 mobile" style="margin-left: 5vw; margin-top: 10vh;">
+ <div class="bg-background-dark flex-row z-10 w-[90vw] h-[92vh] mobile ml-[5vw] mt-[8vh]">
<div class="border-left-custom bg-background-dark"></div>
- <div class="content-square flex flex-col bg-background-dark relative mt-vmin1-6 mx-vmin1-6">
- <div class="flex flex-row mb-vmin0-4">
- <i onclick="location.href='/';" class="fas fa-circle-left hover:bg-main-dark hover:bg-opacity-10 cursor-pointer transition-colors duration-300 rounded-md text-vmax2 mt-auto mb-auto pl-vmin0-8 pr-2"></i>
- <p class="text-vmax2 font-spectral italic font-extrabold select-none mt-auto pl-vmin0-8 pr-vmin1-2">//</p>
- <p class="text-vmax2 font-spectral italic text-left mt-auto">{{ .Title }}</p>
- <p class="grow text-vmax1-5 font-spectral text-secondary text-right mt-auto">{{ .PublishedDate }}</p>
+ <div class="content-square flex flex-col bg-background-dark relative mt-[1.6vmin] mx-[1.6vmin]">
+ <div class="flex flex-row mb-[0.4vmin]">
+ <i onclick="location.href='/';" class="fas fa-circle-left hover:bg-main-dark hover:bg-opacity-10 cursor-pointer transition-colors duration-300 rounded-md text-[2vmax] mt-auto mb-auto px-[0.8vmin]"></i>
+ <p class="text-[2vmax] font-spectral italic font-extrabold select-none mt-auto pl-[0.8vmin] pr-[1.2vmin]">//</p>
+ <p class="text-[2vmax] font-spectral italic text-left mt-auto">{{ .Title }}</p>
+ <p class="grow text-[1.5vmax] font-spectral text-secondary text-right mt-auto">{{ .PublishedDate }}</p>
</div>
- <hr class="border-t-4 border-dotted border-main-dark mb-vmin0-8">
+ <hr class="border-t-4 border-dotted border-main-dark mb-[0.8vmin]">
- <div class="bg-background-light flex flex-col flex-1 overflow-y-auto inset-shadow p-vmin2-4">
+ <div class="bg-background-light flex flex-col overflow-y-auto inset-shadow p-[2.4vmin] max-h-[80%]">
{{ .ParsedMarkdownMobile }}
+ {{- if .MapLocationX }}
+ <hr class="border-t-4 border-dotted border-main-dark mt-[0.8vmin] mb-[0.8vmin] w-[80%] ml-auto mr-auto">
+ <div id="location-map-mobile" class="relative p-[0.8vmin] flex-none ml-auto mr-auto w-[100%] h-[40vh]"></div>
+ <hr class="border-t-4 border-dotted border-main-dark mt-[0.8vmin] mb-[0.8vmin] w-[80%] ml-auto mr-auto">
+ {{- end }}
</div>
- <div class="flex flex-row mt-vmin0-8 mb-vmin0-4">
- <p class="grow text-vmax0-8 lh-0-9 font-spectral italic text-right text-secondary mr-2">
+ <div class="flex flex-row mt-[0.8vmin] mb-[0.4vmin]">
+ <p class="grow text-[0.8vmax]/[0.9] font-spectral italic text-right text-secondary mr-2">
<a href="">{{ .Title }}</a> © {{ .PublishedYear }} by <a href="https://t.me/EarlInisMona">Saya Andy</a> is licensed under <a href="https://creativecommons.org/licenses/by-sa/4.0/">CC BY-SA 4.0</a>
</p>
<img src="https://mirrors.creativecommons.org/presskit/icons/cc.svg" alt="" style="max-width:1.2vh; max-height:1.2vh;">
@@ -114,7 +134,7 @@
<img src="https://mirrors.creativecommons.org/presskit/icons/sa.svg" alt="" style="max-width:1.2vh; max-height:1.2vh;">
</div>
- <hr class="border-t-4 border-dotted border-main-dark mb-vmin0-8">
+ <hr class="border-t-4 border-dotted border-main-dark mb-[0.8vmin]">
</div>
<div class="border-right-custom bg-background-dark shadow-2xl"></div>
@@ -123,6 +143,52 @@
<script src="https://f003.backblazeb2.com/file/sayana-static/libs/lightgallery/2.8.3/lightgallery.min.js"></script>
<script src="https://f003.backblazeb2.com/file/sayana-static/libs/lightgallery/2.8.3/plugins/lg-zoom.min.js"></script>
<script src="https://f003.backblazeb2.com/file/sayana-static/libs/lightgallery/2.8.3/plugins/lg-thumbnail.min.js"></script>
+{{- if .MapLocationX }}
+ <script src="https://f003.backblazeb2.com/file/sayana-static/libs/leaflet/1.9.4/leaflet.js"></script>
+
+ <script>
+ function initLocationMap(id, x, y, relativeErrorMeters = 0) {
+ var map = L.map(id).setView([x, y], 13);
+
+ L.tileLayer('https://tile.openstreetmap.org/{z}/{x}/{y}.png', {
+ maxZoom: 19,
+ attribution: '&copy; <a href="http://www.openstreetmap.org/copyright">OpenStreetMap</a>'
+ }).addTo(map);
+
+ if (relativeErrorMeters != 0) {
+ var circle = L.circle([x, y], {
+ color: '#8a9d8a',
+ fillColor: '#8a9d8a',
+ fillOpacity: 0.15,
+ radius: relativeErrorMeters
+ }).addTo(map);
+ }
+
+ var marker = L.marker([x, y]).addTo(map);
+ }
+
+ document.addEventListener('DOMContentLoaded', () => {initLocationMap(
+ 'location-map-desktop',
+ {{ .MapLocationX }},
+ {{ .MapLocationY }},
+ {{ .MapLocationAreaMeters }}
+ )});
+
+ document.addEventListener('DOMContentLoaded', () => {initLocationMap(
+ 'location-map-mobile',
+ {{ .MapLocationX }},
+ {{ .MapLocationY }},
+ {{ .MapLocationAreaMeters }}
+ )});
+
+ window.addEventListener('resize', function() {
+ setTimeout(() => {
+ if (window.location-map-desktop) window.location-map-desktop.invalidateSize();
+ if (window.location-map-mobile) window.location-map-mobile.invalidateSize();
+ }, 100);
+ });
+ </script>
+{{- end }}
</body>
</html>