diff options
| -rw-r--r-- | .gitignore | 37 | ||||
| -rw-r--r-- | go.mod | 19 | ||||
| -rw-r--r-- | go.sum | 27 | ||||
| -rw-r--r-- | main.go | 15 | ||||
| -rw-r--r-- | public/index.html | 643 |
5 files changed, 741 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..d1cb3a6 --- /dev/null +++ b/.gitignore @@ -0,0 +1,37 @@ +# If you prefer the allow list template instead of the deny list, see community template: +# https://github.com/github/gitignore/blob/main/community/Golang/Go.AllowList.gitignore +# +# Binaries for programs and plugins +*.exe +*.exe~ +*.dll +*.so +*.dylib + +# Test binary, built with `go test -c` +*.test + +# Code coverage profiles and other test artifacts +*.out +coverage.* +*.coverprofile +profile.cov + +# Dependency directories (remove the comment below to include it) +# vendor/ + +# Go workspace file +go.work +go.work.sum + +# env file +.env + +# Editor/IDE +# .idea/ +# .vscode/ + +config*.json +!config*.sample.json + +/main @@ -0,0 +1,19 @@ +module gitlab.com/SayaAndy/saya-today-web + +go 1.24.5 + +require github.com/gofiber/fiber/v2 v2.52.9 + +require ( + github.com/andybalholm/brotli v1.1.0 // indirect + github.com/google/uuid v1.6.0 // indirect + github.com/klauspost/compress v1.17.9 // indirect + github.com/mattn/go-colorable v0.1.13 // indirect + github.com/mattn/go-isatty v0.0.20 // indirect + github.com/mattn/go-runewidth v0.0.16 // indirect + github.com/rivo/uniseg v0.2.0 // indirect + github.com/valyala/bytebufferpool v1.0.0 // indirect + github.com/valyala/fasthttp v1.51.0 // indirect + github.com/valyala/tcplisten v1.0.0 // indirect + golang.org/x/sys v0.28.0 // indirect +) @@ -0,0 +1,27 @@ +github.com/andybalholm/brotli v1.1.0 h1:eLKJA0d02Lf0mVpIDgYnqXcUn0GqVmEFny3VuID1U3M= +github.com/andybalholm/brotli v1.1.0/go.mod h1:sms7XGricyQI9K10gOSf56VKKWS4oLer58Q+mhRPtnY= +github.com/gofiber/fiber/v2 v2.52.9 h1:YjKl5DOiyP3j0mO61u3NTmK7or8GzzWzCFzkboyP5cw= +github.com/gofiber/fiber/v2 v2.52.9/go.mod h1:YEcBbO/FB+5M1IZNBP9FO3J9281zgPAreiI1oqg8nDw= +github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= +github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/klauspost/compress v1.17.9 h1:6KIumPrER1LHsvBVuDa0r5xaG0Es51mhhB9BQB2qeMA= +github.com/klauspost/compress v1.17.9/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw= +github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= +github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= +github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= +github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= +github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= +github.com/mattn/go-runewidth v0.0.16 h1:E5ScNMtiwvlvB5paMFdw9p4kSQzbXFikJ5SQO6TULQc= +github.com/mattn/go-runewidth v0.0.16/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= +github.com/rivo/uniseg v0.2.0 h1:S1pD9weZBuJdFmowNwbpi7BJ8TNftyUImj/0WQi72jY= +github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= +github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw= +github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= +github.com/valyala/fasthttp v1.51.0 h1:8b30A5JlZ6C7AS81RsWjYMQmrZG6feChmgAolCl1SqA= +github.com/valyala/fasthttp v1.51.0/go.mod h1:oI2XroL+lI7vdXyYoQk03bXBThfFl2cVdIA3Xl7cH8g= +github.com/valyala/tcplisten v1.0.0 h1:rBHj/Xf+E1tRGZyWIWwJDiRY0zc1Js+CV5DqwacVSA8= +github.com/valyala/tcplisten v1.0.0/go.mod h1:T0xQ8SeCZGxckz9qRXTfG43PvQ/mcWh7FwZEA7Ioqkc= +golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= +golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= @@ -0,0 +1,15 @@ +package main + +import ( + "log" + + "github.com/gofiber/fiber/v2" +) + +func main() { + app := fiber.New() + + app.Static("/", "./public") + + log.Fatal(app.Listen(":3000")) +} diff --git a/public/index.html b/public/index.html new file mode 100644 index 0000000..c1a8fed --- /dev/null +++ b/public/index.html @@ -0,0 +1,643 @@ +<!DOCTYPE html> +<html lang="en"> +<head> + <meta charset="UTF-8"> + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + <title>SAYA TODAY // Демо-материал после демон-аэропорта</title> + <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css"> + <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"> + <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/lightgallery/2.8.3/css/lg-fullscreen.min.css"> + <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/lightgallery@2.8.3/css/lightgallery-bundle.min.css"> + <script src="https://cdn.tailwindcss.com"></script> + <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"> + + <script> + tailwind.config = { + theme: { + extend: { + colors: { + 'olive-dark': '#4b513a', + 'olive-medium': '#8a9d8a', + 'olive-light': '#a5b8a5', + 'cream-dark': '#ffffdd', + 'cream-light': '#fffff0', + 'lettuce-dark': '#384a0c', + 'lettuce-medium': '#9bb665', + 'lettuce-light': '#bbd095', + 'sunny-dark': '#f5eee2', + 'sunny-light': '#fff9ef', + }, + fontFamily: { + 'spectral': ['Spectral', 'serif'], + 'patua': ['Patua One', 'cursive'] + }, + backgroundImage: { + 'olive-interlocked-hexagons': "url('https://f003.backblazeb2.com/file/sayana-static/themes/olive/interlocked-hexagons.svg')", + 'olive-squares-and-triangles': "url('https://f003.backblazeb2.com/file/sayana-static/themes/olive/squares-and-triangles.svg')", + 'lettuce-interlocked-hexagons': "url('https://f003.backblazeb2.com/file/sayana-static/themes/lettuce/interlocked-hexagons.svg')", + 'lettuce-squares-and-triangles': "url('https://f003.backblazeb2.com/file/sayana-static/themes/lettuce/squares-and-triangles.svg')" + } + } + } + } + </script> + + <style> + [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); + --interlocked-hexagons-background: url('https://f003.backblazeb2.com/file/sayana-static/themes/olive/interlocked-hexagons.svg'); + --squares-and-triangles-background: url('https://f003.backblazeb2.com/file/sayana-static/themes/olive/squares-and-triangles.svg'); + --invert-colors-in-sidebar: false; + } + + [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); + --interlocked-hexagons-background: url('https://f003.backblazeb2.com/file/sayana-static/themes/lettuce/interlocked-hexagons.svg'); + --squares-and-triangles-background: url('https://f003.backblazeb2.com/file/sayana-static/themes/lettuce/squares-and-triangles.svg'); + --invert-colors-in-sidebar: true; + } + + .bg-interlocked-hexagons { + background-image: var(--interlocked-hexagons-background); + } + + .bg-squares-and-triangles { + background-image: var(--squares-and-triangles-background); + } + + .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-main-light { + color: var(--main-light-color); + } + + .text-background-dark { + color: var(--background-dark-color); + } + + .text-background-light { + color: var(--background-light-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); + } + + .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: 25vw; + font-size: 2.5vw; + -webkit-text-stroke: 0.1vw var(--sidebar-stroke-color); + writing-mode: sideways-lr; + text-orientation: mixed; + } + + .nav-icon-custom { + font-size: 3vw !important; + -webkit-text-stroke: 0.1vw var(--sidebar-stroke-color); + width: 5vw; + height: 5vw; + } + + .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); + } + + .bg-pattern-body { + background-size: 10vw; + } + + .content-tail-text { + font-size: 1.2vh; + line-height: 0.9; + } + + .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-1-5 { + line-height: 1.5; + } + + .lh-2 { + line-height: 2; + } + + .ls-vw0-03 { + letter-spacing: 0.03vw; + } + + .timl-vh3 { + text-indent: 3vh hanging; + } + + .text-vh1-2 { + font-size: 1.2vh; + } + + .text-vh1-5 { + font-size: 1.5vh !important; + } + + .text-vh2 { + font-size: 2vh !important; + } + + .text-vh3 { + font-size: 3vh; + } + + .w-vw90 { + width: 90vw; + } + + .h-vh1-5 { + max-height: 1.5vh; + } + + .h-vh40 { + height: 40vh; + } + + .h-vh50 { + height: 50vh; + } + + .h-vh60 { + height: 60vh; + } + + .h-vh90 { + height: 90vh; + } + + .w-p70 { + width: 70%; + } + + .w-p80 { + width: 80%; + } + + .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: 1.5vh; + } + + .lg-toolbar .lg-icon { + font-size: 2vh !important; + padding: 1vh 1vh; + height: 2vh; + width: auto; + color: var(--main-dark-color); + } + + .lg-toolbar .lg-icon:hover { + color: var(--main-medium-color); + } + + .lg-toolbar .lg-icon { + font-size: 2vh !important; + color: var(--main-dark-color); + } + + .lg-content .lg-icon:hover { + color: var(--main-medium-color); + } + + .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; + } + } + } + } + + /* Mobile responsive styles */ + @media (max-aspect-ratio: 1.1/1) { + .desktop { + display: none; + } + + .mobile { + display: flex; + } + + .desktop-sidebar-custom { + width: 90%; + margin-left: 5vw; + height: 10vh; + background-size: 20vh; + } + + .logo-custom { + writing-mode: initial; + text-orientation: initial; + font-size: 6vh; + width: auto; + } + + .nav-icon-custom { + font-size: 6vh !important; + -webkit-text-stroke: 0.1vh var(--main-dark-color); + width: 10vh; + height: 10vh; + } + + .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.8/1) { + .logo-custom { + display: none; + } + } + + @media (max-aspect-ratio: 0.4/1) { + .desktop-sidebar-custom { + width: 100%; + margin-left: 0; + } + } + </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"> + + <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="logo-custom text-sidebar font-patua font-extrabold text-center relative z-20"> + demo.saya.today + </div> + <div class="flex flex-col gap-0 relative z-20"> + <i 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> + <i class="fas fa-images nav-icon-custom text-sidebar hover:bg-background-dark cursor-pointer transition-colors duration-300 flex justify-center items-center rounded-lg"></i> + <i onclick="switchTheme()" class="fas fa-swatchbook nav-icon-custom text-sidebar hover:bg-background-dark cursor-pointer transition-colors duration-300 flex justify-center items-center rounded-lg"></i> + </div> + </div> + + <div class="bg-background-dark z-10 h-screen desktop" style="padding-left: 5vw;"> + <div class="border-left-custom bg-background-dark"></div> + + <div class="content-square flex flex-col bg-background-dark relative mt-4 mx-4"> + <div class="flex flex-row mb-1"> + <i class="fas fa-circle-left hover:bg-main-dark hover:bg-opacity-10 cursor-pointer transition-colors duration-300 rounded-md text-vh3 mt-auto mb-auto pl-2 pr-2"></i> + <p class="text-vh3 font-spectral italic font-extrabold select-none mt-auto pl-2 pr-3">//</p> + <p class="text-vh3 font-spectral italic text-left mt-auto">Демо-материал после демон-аэропорта</p> + <p class="grow text-vh2 font-spectral text-main-light text-right mt-auto">2025.07.21 20:34:44 UTC+3</p> + </div> + <hr class="border-t-4 border-dotted border-main-dark mb-2"> + + <div class="bg-background-light flex flex-col flex-1 overflow-y-auto inset-shadow p-6"> + <p class="text-vh1-5 font-spectral lh-2 ls-vw0-03 timl-vh3 text-left">Ученик однажды попросил мудреца переименовать фотографические файлы формата JPG за 21 июля 2025 на своём телефоне, чтобы структура их имён была идентична. Ученик очень хотел поделиться своими двоякими впечатлениями от современных реалий российского авиатранспорта и хотел сначала загрузить свои фотографии в нужном формате. В ответ мудрец удалил их нахуй</p> + <p class="text-vh1-5 font-spectral lh-2 ls-vw0-03 timl-vh3 text-left mt-4">Мудрец будет удалён к ебеням с телефона и оценён на 1 звезду.</p> + <p class="text-vh1-5 font-spectral lh-2 ls-vw0-03 timl-vh3 text-left mt-4">В итоге, чтобы собрать материал под эту демо-страницу, я вспомнил про недавно купленную клавиатуру.</p> + <p class="text-vh1-5 font-spectral lh-2 ls-vw0-03 timl-vh3 text-left mt-4">Это Apple Keyboard 1048 из 2003!</p> + <div class="justify-content-center display-block m-2"> + <hr class="border-t-4 border-dotted border-main-dark mt-2 mb-2 w-p80 ml-auto mr-auto"> + <div class="inline-gallery-container-1 relative w-p70 h-vh50 ml-auto mr-auto"></div> + <hr class="border-t-4 border-dotted border-main-dark mt-2 mb-2 w-p80 ml-auto mr-auto"> + </div> + <p class="text-vh1-5 font-spectral lh-2 ls-vw0-03 timl-vh3 text-left">Мотив был такой -- мне нравится её внешний вид, эта курватура аля склона холма. Ну и USB, ничего не мешает подключить куда угодно. И цена таким на рынке -- 2 тыщи на рынке (~25$).</p> + <p class="text-vh1-5 font-spectral lh-2 ls-vw0-03 timl-vh3 text-left mt-4">Купил -- понравилась и тактильность, хоть это и мембранная клава!</p> + <p class="text-vh1-5 font-spectral lh-2 ls-vw0-03 timl-vh3 text-left mt-4">Но зачем я решил её почистить, ибо она была желтоватая и у неё слипались пробел и клавиша Mac. На выходе действительно она получилась белей, клавиши все нажимаются на ура... но идея опрыскать базу клавы перекисью была ошибкой. Теперь у неё работает только Enter. :(</p> + <p class="text-vh1-5 font-spectral lh-2 ls-vw0-03 timl-vh3 text-left mt-4">Напоследок немного макросъёмки, ибо почему бы и нет:</p> + <div class="justify-content-center display-block m-2"> + <hr class="border-t-4 border-dotted border-main-dark mt-2 mb-2 w-p80 ml-auto mr-auto"> + <div class="inline-gallery-container-2 relative w-p70 h-vh50 ml-auto mr-auto"></div> + <hr class="border-t-4 border-dotted border-main-dark mt-2 mb-2 w-p80 ml-auto mr-auto"> + </div> + </div> + + <div class="flex flex-row mt-2 mb-1"> + <p class="grow text-vh1-2 lh-0-9 font-spectral italic text-right text-main-light mr-2"> + <a href="https://demo.saya.today">Демо-материал после демон-аэропорта</a> © 2025 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;"> + <img src="https://mirrors.creativecommons.org/presskit/icons/by.svg" alt="" style="max-width:1.2vh; max-height:1.2vh;"> + <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-2"> + </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="flex flex-row gap-0 relative z-20"> + <i 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> + <i class="fas fa-images nav-icon-custom text-sidebar hover:bg-background-dark cursor-pointer transition-colors duration-300 flex justify-center items-center rounded-lg"></i> + <i onclick="switchTheme()" class="fas fa-swatchbook nav-icon-custom text-sidebar hover:bg-background-dark cursor-pointer transition-colors duration-300 flex justify-center items-center rounded-lg"></i> + </div> + <div class="logo-custom text-background-dark font-patua font-extrabold text-center relative grow z-20"> + demo.saya.today + </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="border-left-custom bg-background-dark"></div> + + <div class="content-square flex flex-col bg-background-dark relative mt-4 mx-4"> + <div class="flex flex-row mb-1"> + <i class="fas fa-circle-left hover:bg-main-dark hover:bg-opacity-10 cursor-pointer transition-colors duration-300 rounded-md text-vh3 mt-auto mb-auto pl-2 pr-2"></i> + <p class="text-vh3 font-spectral italic font-extrabold select-none mt-auto pl-2 pr-3">//</p> + <p class="text-vh3 font-spectral italic text-left mt-auto">Демо-материал после демон-аэропорта</p> + <p class="grow text-vh2 font-spectral text-main-light text-right mt-auto">2025.07.21 20:34:44 UTC+3</p> + </div> + <hr class="border-t-4 border-dotted border-main-dark mb-2"> + + <div class="bg-background-light flex flex-col flex-1 overflow-y-auto inset-shadow p-6"> + <p class="text-vh1-5 font-spectral lh-2 ls-vw0-03 timl-vh3 text-left">Ученик однажды попросил мудреца переименовать фотографические файлы формата JPG за 21 июля 2025 на своём телефоне, чтобы структура их имён была идентична. Ученик очень хотел поделиться своими двоякими впечатлениями от современных реалий российского авиатранспорта и хотел сначала загрузить свои фотографии в нужном формате. В ответ мудрец удалил их нахуй</p> + <p class="text-vh1-5 font-spectral lh-2 ls-vw0-03 timl-vh3 text-left mt-4">Мудрец будет удалён к ебеням с телефона и оценён на 1 звезду.</p> + <p class="text-vh1-5 font-spectral lh-2 ls-vw0-03 timl-vh3 text-left mt-4">В итоге, чтобы собрать материал под эту демо-страницу, я вспомнил про недавно купленную клавиатуру.</p> + <p class="text-vh1-5 font-spectral lh-2 ls-vw0-03 timl-vh3 text-left mt-4">Это Apple Keyboard 1048 из 2003!</p> + <div class="justify-content-center display-block m-2"> + <hr class="border-t-4 border-dotted border-main-dark mt-2 mb-2 w-p80 ml-auto mr-auto"> + <div class="inline-gallery-container-1 relative w-p70 h-vh50 ml-auto mr-auto"></div> + <hr class="border-t-4 border-dotted border-main-dark mt-2 mb-2 w-p80 ml-auto mr-auto"> + </div> + <p class="text-vh1-5 font-spectral lh-2 ls-vw0-03 timl-vh3 text-left">Мотив был такой -- мне нравится её внешний вид, эта курватура аля склона холма. Ну и USB, ничего не мешает подключить куда угодно. И цена таким на рынке -- 2 тыщи на рынке (~25$).</p> + <p class="text-vh1-5 font-spectral lh-2 ls-vw0-03 timl-vh3 text-left mt-4">Купил -- понравилась и тактильность, хоть это и мембранная клава!</p> + <p class="text-vh1-5 font-spectral lh-2 ls-vw0-03 timl-vh3 text-left mt-4">Но зачем я решил её почистить, ибо она была желтоватая и у неё слипались пробел и клавиша Mac. На выходе действительно она получилась белей, клавиши все нажимаются на ура... но идея опрыскать базу клавы перекисью была ошибкой. Теперь у неё работает только Enter. :(</p> + <p class="text-vh1-5 font-spectral lh-2 ls-vw0-03 timl-vh3 text-left mt-4">Напоследок немного макросъёмки, ибо почему бы и нет:</p> + <div class="justify-content-center display-block m-2"> + <hr class="border-t-4 border-dotted border-main-dark mt-2 mb-2 w-p80 ml-auto mr-auto"> + <div class="inline-gallery-container-2 relative w-p70 h-vh50 ml-auto mr-auto"></div> + <hr class="border-t-4 border-dotted border-main-dark mt-2 mb-2 w-p80 ml-auto mr-auto"> + </div> + </div> + + <div class="flex flex-row mt-2 mb-1"> + <p class="grow text-vh1-2 lh-0-9 font-spectral italic text-right text-main-light mr-2"> + <a href="https://demo.saya.today">Демо-материал после демон-аэропорта</a> © 2025 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;"> + <img src="https://mirrors.creativecommons.org/presskit/icons/by.svg" alt="" style="max-width:1.2vh; max-height:1.2vh;"> + <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-2"> + </div> + + <div class="border-right-custom bg-background-dark shadow-2xl"></div> + </div> + + <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> + + <script> + function switchTheme() { + const currentTheme = document.body.getAttribute('data-theme') + document.body.setAttribute('data-theme', currentTheme == "olive" ? "lettuce" : "olive"); + localStorage.setItem('theme', currentTheme == "olive" ? "lettuce" : "olive"); + } + </script> + + <script> + const $lgContainers1 = document.getElementsByClassName("inline-gallery-container-1"); + for (i = 0; i < $lgContainers1.length; i++) { + const $lgContainer1 = $lgContainers1[i]; + const inlineGallery1 = lightGallery($lgContainer1, { + container: $lgContainer1, + dynamic: true, + width: "70%", + height: "50vh", + hash: false, + closable: false, + showMaximizeIcon: true, + appendSubHtmlTo: ".lg-sub-html", + slideDelay: 0, + plugins: [lgZoom, lgThumbnail], + dynamicEl: [ + { + src: + "https://f003.backblazeb2.com/file/sayana-photos/full/Novosibirsk-Home-20250721-191056.jpg", + responsive: + "https://f003.backblazeb2.com/file/sayana-photos/thumbnails/Novosibirsk-Home-20250721-191056.webp", + thumb: + "https://f003.backblazeb2.com/file/sayana-photos/thumbnails/Novosibirsk-Home-20250721-191056.webp", + subHtml: `<div class="flex flex-row light-gallery-captions"> + <p class="grow text-vh1-5 text-left lh-0-9 font-spectral text-main-dark">Табло #3</p> + <p class="text-vh1-5 text-right lh-0-9 font-spectral text-main-light">2025.07.21 19:10:56 UTC+7</p> + </div>` + } + ], + + // Completely optional + // Adding as the codepen preview is usually smaller + thumbWidth: 160, + thumbHeight: "8vh", + thumbMargin: 4 + }); + + setTimeout(() => { + inlineGallery1.openGallery(); + }, 200); + } + </script> + + <script> + const $lgContainers2 = document.getElementsByClassName("inline-gallery-container-2"); + for (i = 0; i < $lgContainers2.length; i++) { + const $lgContainer2 = $lgContainers2[i]; + const inlineGallery2 = lightGallery($lgContainer2, { + container: $lgContainer2, + dynamic: true, + width: "70%", + height: "50vh", + hash: false, + closable: false, + showMaximizeIcon: true, + appendSubHtmlTo: ".lg-sub-html", + slideDelay: 0, + plugins: [lgZoom, lgThumbnail], + dynamicEl: [ + { + src: + "https://f003.backblazeb2.com/file/sayana-photos/full/Novosibirsk-Home-20250721-185010.jpg", + responsive: + "https://f003.backblazeb2.com/file/sayana-photos/thumbnails/Novosibirsk-Home-20250721-185010.webp", + thumb: + "https://f003.backblazeb2.com/file/sayana-photos/thumbnails/Novosibirsk-Home-20250721-185010.webp", + subHtml: `<div class="flex flex-row light-gallery-captions"> + <p class="grow text-vh1-5 text-left lh-0-9 font-spectral text-main-dark">Табло #1</p> + <p class="text-vh1-5 text-right lh-0-9 font-spectral text-main-light">2025.07.21 18:50:10 UTC+7</p> + </div>` + }, + { + src: + "https://f003.backblazeb2.com/file/sayana-photos/full/Novosibirsk-Home-20250721-190655.jpg", + responsive: + "https://f003.backblazeb2.com/file/sayana-photos/thumbnails/Novosibirsk-Home-20250721-190655.webp", + thumb: + "https://f003.backblazeb2.com/file/sayana-photos/thumbnails/Novosibirsk-Home-20250721-190655.webp", + subHtml: `<div class="flex flex-row light-gallery-captions"> + <p class="grow text-vh1-5 text-left lh-0-9 font-spectral text-main-dark">Табло #2</p> + <p class="text-vh1-5 text-right lh-0-9 font-spectral text-main-light">2025.07.21 19:06:55 UTC+7</p> + </div>` + } + ], + + // Completely optional + // Adding as the codepen preview is usually smaller + thumbWidth: 160, + thumbHeight: "8vh", + thumbMargin: 4 + }); + + setTimeout(() => { + inlineGallery2.openGallery(); + }, 200); + } + </script> + +</body> +</html> |