mod: localized English version of README and UI texts, enhanced accessibility and internationalization features
HYPN0 Build and Push Docker Image / build-and-push (push) Successful in 51s
HYPN0 Build and Push Docker Image / build-and-push (push) Successful in 51s
This commit is contained in:
+60
-61
@@ -135,7 +135,7 @@
|
||||
|
||||
<!-- Загрузка файла -->
|
||||
<div class="order-1 w-full bg-white dark:bg-zinc-900 p-3 sm:p-4 lg:p-0 rounded-2xl lg:rounded-none border border-stone-200 dark:border-zinc-800 lg:border-0 shadow-sm lg:shadow-none mb-0 lg:mb-8">
|
||||
<label class="hidden lg:block text-sm font-bold mb-2 uppercase tracking-wider text-stone-500 dark:text-zinc-400">Источник</label>
|
||||
<label class="hidden lg:block text-sm font-bold mb-2 uppercase tracking-wider text-stone-500 dark:text-zinc-400">Source</label>
|
||||
<div class="relative group">
|
||||
<input type="file" name="image" accept="image/*"
|
||||
@change="handleFileChange($event)"
|
||||
@@ -148,17 +148,17 @@
|
||||
<div x-show="!hasImage" class="text-stone-400 group-hover:text-emerald-500 flex flex-row lg:flex-col items-center gap-3 transition-colors">
|
||||
<svg class="w-8 h-8 sm:w-10 sm:h-10 lg:w-20 lg:h-20 shrink-0 fill-current transition-colors opacity-50" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">
|
||||
<path d="M477 174c8.812-13.708 13.948-29.993 13.948-47.466 0-48.55-39.499-88.048-88.05-88.048-32.839 0-61.516 18.084-76.651 44.803-22.773-5.031-46.356-7.586-70.424-7.586-24.003 0-47.624 2.55-70.427 7.582-15.135-26.717-43.813-44.799-76.65-44.799-48.55 0-88.048 39.498-88.048 88.049 0 17.473 5.137 33.759 13.949 47.467C11.987 204.676 0 239.016 0 274.61c0 53.849 27.194 104.194 76.573 141.763C124.677 452.97 188.399 473.125 256 473.125s131.323-20.155 179.427-56.753C484.806 378.803 512 328.457 512 274.609c0-35.59-11.986-69.935-34.822-100.219zM403.076 70.224c31.266 0 56.703 25.436 56.703 56.701s-25.437 56.702-56.703 56.702-56.701-25.436-56.701-56.702 25.436-56.701 56.701-56.701zm-294.152 0c31.266 0 56.703 25.436 56.703 56.701s-25.437 56.702-56.703 56.702-56.701-25.436-56.701-56.702 25.435-56.701 56.701-56.701zM56.629 197.71a87.57 87.57 0 0 0 52.294 17.264c48.55 0 88.05-39.498 88.05-88.049a88.25 88.25 0 0 0-1.02-13.409c19.464-4.03 39.588-6.075 60.047-6.075 20.515 0 40.613 2.041 60.048 6.068-.672 4.376-1.021 8.857-1.021 13.417 0 48.55 39.498 88.049 88.049 88.049 19.568 0 37.66-6.424 52.294-17.263 15.157 21.633 23.712 45.416 25.08 69.911-23.821 20.076-49.402 34.122-79.949 43.943-38.207 12.281-85.474 18.252-144.5 18.252s-106.292-5.971-144.499-18.253c-30.549-9.821-56.132-23.869-79.952-43.945 1.369-24.496 9.921-48.278 25.079-69.91zm199.372 244.067c-107.337 0-197.317-56.31-219.433-131.312 19.882 13.102 41.246 23.196 65.34 30.94 41.355 13.295 91.76 19.758 154.094 19.758s112.738-6.463 154.095-19.758c24.092-7.745 45.456-17.839 65.338-30.939-22.12 75.002-112.099 131.311-219.434 131.311z"/><use href="#B"/><use href="#B" x="294.153"/><path d="M219.852 256.624c-9.79 0-17.756 8.048-17.756 17.986s7.966 17.992 17.756 17.992c9.802 0 17.767-8.055 17.767-17.992s-7.965-17.986-17.767-17.986zm72.163-.14c-9.885 0-17.902 8.115-17.902 18.126s8.017 18.126 17.902 18.126c9.872 0 17.89-8.115 17.89-18.126s-8.018-18.126-17.89-18.126z"/><defs><path id="B" d="M108.931 105.926c-11.45 0-20.738 9.401-20.738 20.998s9.288 20.998 20.738 20.998c11.436 0 20.725-9.401 20.725-20.998s-9.289-20.998-20.725-20.998z"/></defs></svg>
|
||||
<span class="text-xs sm:text-sm lg:text-base font-medium text-left lg:text-center">Покорми Гипнoжабу,<br class="hidden lg:inline" /> притащи сюда img или кликни</span>
|
||||
<span class="text-xs sm:text-sm lg:text-base font-medium text-left lg:text-center">Feed the Hypnotoad,<br class="hidden lg:inline" /> drag img here or click</span>
|
||||
</div>
|
||||
|
||||
<!-- Состояние 2: Файл выбран -->
|
||||
<div x-show="hasImage" class="flex flex-row lg:flex-col items-center gap-3 text-emerald-600 dark:text-emerald-400 text-left lg:text-center">
|
||||
<img :src="imagePreviewUrl" alt="Превью"
|
||||
<img :src="imagePreviewUrl" alt="Preview"
|
||||
class="w-12 h-12 sm:w-14 sm:h-14 lg:w-24 lg:h-24 shrink-0 object-cover rounded-xl border-2 border-emerald-500 shadow-md">
|
||||
<div class="text-xs font-mono">
|
||||
<p class="font-bold">Гипножаба облизывается на:</p>
|
||||
<p class="font-bold">Hypnotoad salivates over:</p>
|
||||
<p class="truncate max-w-[200px] sm:max-w-[260px] text-stone-700 dark:text-zinc-300 font-semibold mt-0.5" x-text="fileName"></p>
|
||||
<p class="text-[10px] sm:text-[11px] text-stone-400 dark:text-zinc-500 mt-0.5">кликни или притащи другой файл</p>
|
||||
<p class="text-[10px] sm:text-[11px] text-stone-400 dark:text-zinc-500 mt-0.5">click or drag another file</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -172,15 +172,15 @@
|
||||
<nav class="flex border-b border-stone-200 dark:border-zinc-800 mb-6 overflow-x-auto no-scrollbar">
|
||||
<button type="button" @click="activeTab = 'style'"
|
||||
:class="activeTab === 'style' ? 'border-emerald-500 text-emerald-600' : 'border-transparent text-stone-400'"
|
||||
class="pb-2 px-4 border-b-2 font-bold text-sm uppercase transition-all whitespace-nowrap">Гюко-элемент
|
||||
class="pb-2 px-4 border-b-2 font-bold text-sm uppercase transition-all whitespace-nowrap">Element
|
||||
</button>
|
||||
<button type="button" @click="activeTab = 'params'"
|
||||
:class="activeTab === 'params' ? 'border-emerald-500 text-emerald-600' : 'border-transparent text-stone-400'"
|
||||
class="pb-2 px-4 border-b-2 font-bold text-sm uppercase transition-all whitespace-nowrap">Параметры
|
||||
class="pb-2 px-4 border-b-2 font-bold text-sm uppercase transition-all whitespace-nowrap">Parameters
|
||||
</button>
|
||||
<button type="button" @click="activeTab = 'color'"
|
||||
:class="activeTab === 'color' ? 'border-emerald-500 text-emerald-600' : 'border-transparent text-stone-400'"
|
||||
class="pb-2 px-4 border-b-2 font-bold text-sm uppercase transition-all whitespace-nowrap">Цвета
|
||||
class="pb-2 px-4 border-b-2 font-bold text-sm uppercase transition-all whitespace-nowrap">Colors
|
||||
</button>
|
||||
</nav>
|
||||
|
||||
@@ -189,7 +189,7 @@
|
||||
<!-- Таб: Стиль (Фигуры) -->
|
||||
<div x-show="activeTab === 'style'" class="grid grid-cols-4 gap-2">
|
||||
<!-- 1. Круг -->
|
||||
<label class="cursor-pointer group" title="Круг">
|
||||
<label class="cursor-pointer group" title="Circle">
|
||||
<input type="radio" name="shape" value="circle" class="hidden peer" checked>
|
||||
<div class="aspect-square flex flex-col items-center justify-center p-2 border-2 border-stone-100 dark:border-zinc-800 rounded-xl text-stone-400 group-hover:text-emerald-500 peer-checked:text-emerald-500 peer-checked:border-emerald-500 peer-checked:bg-emerald-50/10 transition-all hover:border-stone-300 dark:hover:border-zinc-700">
|
||||
<div class="w-6 h-6 rounded-full bg-current transition-colors"></div>
|
||||
@@ -197,7 +197,7 @@
|
||||
</label>
|
||||
|
||||
<!-- 2. Кольцо (Бублик) -->
|
||||
<label class="cursor-pointer group" title="Кольцо">
|
||||
<label class="cursor-pointer group" title="Ring">
|
||||
<input type="radio" name="shape" value="ring" class="hidden peer">
|
||||
<div class="aspect-square flex flex-col items-center justify-center p-2 border-2 border-stone-100 dark:border-zinc-800 rounded-xl text-stone-400 group-hover:text-emerald-500 peer-checked:text-emerald-500 peer-checked:border-emerald-500 peer-checked:bg-emerald-50/10 transition-all hover:border-stone-300 dark:hover:border-zinc-700">
|
||||
<div class="w-6 h-6 rounded-full border-[6px] border-current transition-colors"></div>
|
||||
@@ -205,7 +205,7 @@
|
||||
</label>
|
||||
|
||||
<!-- 3. Треугольник -->
|
||||
<label class="cursor-pointer group" title="Треугольник">
|
||||
<label class="cursor-pointer group" title="Triangle">
|
||||
<input type="radio" name="shape" value="triangle" class="hidden peer">
|
||||
<div class="aspect-square flex flex-col items-center justify-center p-2 border-2 border-stone-100 dark:border-zinc-800 rounded-xl text-stone-400 group-hover:text-emerald-500 peer-checked:text-emerald-500 peer-checked:border-emerald-500 peer-checked:bg-emerald-50/10 transition-all hover:border-stone-300 dark:hover:border-zinc-700">
|
||||
<svg class="w-6 h-6 fill-current transition-colors" viewBox="0 0 24 24">
|
||||
@@ -215,7 +215,7 @@
|
||||
</label>
|
||||
|
||||
<!-- 4. Квадрат -->
|
||||
<label class="cursor-pointer group" title="Квадрат">
|
||||
<label class="cursor-pointer group" title="Square">
|
||||
<input type="radio" name="shape" value="square" class="hidden peer">
|
||||
<div class="aspect-square flex flex-col items-center justify-center p-2 border-2 border-stone-100 dark:border-zinc-800 rounded-xl text-stone-400 group-hover:text-emerald-500 peer-checked:text-emerald-500 peer-checked:border-emerald-500 peer-checked:bg-emerald-50/10 transition-all hover:border-stone-300 dark:hover:border-zinc-700">
|
||||
<div class="w-5 h-5 rounded-xs bg-current transition-colors"></div>
|
||||
@@ -223,7 +223,7 @@
|
||||
</label>
|
||||
|
||||
<!-- 5. Ромб (Бриллиант) -->
|
||||
<label class="cursor-pointer group" title="Ромб">
|
||||
<label class="cursor-pointer group" title="Diamond">
|
||||
<input type="radio" name="shape" value="diamond" class="hidden peer">
|
||||
<div class="aspect-square flex flex-col items-center justify-center p-2 border-2 border-stone-100 dark:border-zinc-800 rounded-xl text-stone-400 group-hover:text-emerald-500 peer-checked:text-emerald-500 peer-checked:border-emerald-500 peer-checked:bg-emerald-50/10 transition-all hover:border-stone-300 dark:hover:border-zinc-700">
|
||||
<div class="w-5 h-5 rotate-45 rounded-xs bg-current transition-colors"></div>
|
||||
@@ -231,7 +231,7 @@
|
||||
</label>
|
||||
|
||||
<!-- 6. Шестиугольник (Гексагон) -->
|
||||
<label class="cursor-pointer group" title="Гексагон">
|
||||
<label class="cursor-pointer group" title="Hexagon">
|
||||
<input type="radio" name="shape" value="hexagon" class="hidden peer">
|
||||
<div class="aspect-square flex flex-col items-center justify-center p-2 border-2 border-stone-100 dark:border-zinc-800 rounded-xl text-stone-400 group-hover:text-emerald-500 peer-checked:text-emerald-500 peer-checked:border-emerald-500 peer-checked:bg-emerald-50/10 transition-all hover:border-stone-300 dark:hover:border-zinc-700">
|
||||
<svg class="w-6 h-6 fill-current transition-colors" viewBox="0 0 24 24">
|
||||
@@ -241,7 +241,7 @@
|
||||
</label>
|
||||
|
||||
<!-- 7. Звездочка -->
|
||||
<label class="cursor-pointer group" title="Звезда">
|
||||
<label class="cursor-pointer group" title="Star">
|
||||
<input type="radio" name="shape" value="star" class="hidden peer">
|
||||
<div class="aspect-square flex flex-col items-center justify-center p-2 border-2 border-stone-100 dark:border-zinc-800 rounded-xl text-stone-400 group-hover:text-emerald-500 peer-checked:text-emerald-500 peer-checked:border-emerald-500 peer-checked:bg-emerald-50/10 transition-all hover:border-stone-300 dark:hover:border-zinc-700">
|
||||
<svg class="w-6 h-6 fill-current transition-colors" viewBox="0 0 24 24">
|
||||
@@ -251,7 +251,7 @@
|
||||
</label>
|
||||
|
||||
<!-- 8. Сердечко -->
|
||||
<label class="cursor-pointer group" title="Сердечко">
|
||||
<label class="cursor-pointer group" title="Heart">
|
||||
<input type="radio" name="shape" value="heart" class="hidden peer">
|
||||
<div class="aspect-square flex flex-col items-center justify-center p-2 border-2 border-stone-100 dark:border-zinc-800 rounded-xl text-stone-400 group-hover:text-emerald-500 peer-checked:text-emerald-500 peer-checked:border-emerald-500 peer-checked:bg-emerald-50/10 transition-all hover:border-stone-300 dark:hover:border-zinc-700">
|
||||
<svg class="w-6 h-6 fill-current transition-colors" viewBox="0 0 24 24">
|
||||
@@ -261,7 +261,7 @@
|
||||
</label>
|
||||
|
||||
<!-- 9. Крестик / Плюс -->
|
||||
<label class="cursor-pointer group" title="Крестик">
|
||||
<label class="cursor-pointer group" title="Cross">
|
||||
<input type="radio" name="shape" value="cross" class="hidden peer">
|
||||
<div class="aspect-square flex flex-col items-center justify-center p-2 border-2 border-stone-100 dark:border-zinc-800 rounded-xl text-stone-400 group-hover:text-emerald-500 peer-checked:text-emerald-500 peer-checked:border-emerald-500 peer-checked:bg-emerald-50/10 transition-all hover:border-stone-300 dark:hover:border-zinc-700">
|
||||
<svg class="w-6 h-6 fill-current transition-colors" viewBox="0 0 24 24">
|
||||
@@ -271,7 +271,7 @@
|
||||
</label>
|
||||
|
||||
<!-- 10. Черточка / Линия -->
|
||||
<label class="cursor-pointer group" title="Линия">
|
||||
<label class="cursor-pointer group" title="Line">
|
||||
<input type="radio" name="shape" value="line" class="hidden peer">
|
||||
<div class="aspect-square flex flex-col items-center justify-center p-2 border-2 border-stone-100 dark:border-zinc-800 rounded-xl text-stone-400 group-hover:text-emerald-500 peer-checked:text-emerald-500 peer-checked:border-emerald-500 peer-checked:bg-emerald-50/10 transition-all hover:border-stone-300 dark:hover:border-zinc-700">
|
||||
<div class="w-5 h-1 rounded-full bg-current transition-colors"></div>
|
||||
@@ -280,7 +280,7 @@
|
||||
|
||||
|
||||
<!-- 11. Снежинка / Звездочка -->
|
||||
<label class="cursor-pointer group" title="Снежинка">
|
||||
<label class="cursor-pointer group" title="Snowflake">
|
||||
<input type="radio" name="shape" value="snowflake" class="hidden peer">
|
||||
<div class="aspect-square flex flex-col items-center justify-center p-2 border-2 border-stone-100 dark:border-zinc-800 rounded-xl text-stone-400 group-hover:text-emerald-500 peer-checked:text-emerald-500 peer-checked:border-emerald-500 peer-checked:bg-emerald-50/10 transition-all hover:border-stone-300 dark:hover:border-zinc-700">
|
||||
<svg class="w-6 h-6 fill-current transition-colors" viewBox="0 0 24 24">
|
||||
@@ -290,7 +290,7 @@
|
||||
</label>
|
||||
|
||||
<!-- 12. Двоичный блок 2x2 -->
|
||||
<label class="cursor-pointer group" title="Матрица 2x2 (0/1)">
|
||||
<label class="cursor-pointer group" title="Binary Matrix 2x2 (0/1)">
|
||||
<input type="radio" name="shape" value="binary" class="hidden peer">
|
||||
<div class="aspect-square flex flex-col items-center justify-center p-1 border-2 border-stone-100 dark:border-zinc-800 rounded-xl text-stone-400 group-hover:text-emerald-500 peer-checked:text-emerald-500 peer-checked:border-emerald-500 peer-checked:bg-emerald-50/10 transition-all hover:border-stone-300 dark:hover:border-zinc-700">
|
||||
<div class="grid grid-cols-2 gap-0.5 font-mono text-[14px] leading-[12px] font-black transition-colors select-none">
|
||||
@@ -307,9 +307,9 @@
|
||||
<!-- Таб: Цвет -->
|
||||
<div x-show="activeTab === 'color'" class="space-y-4">
|
||||
<div class="flex items-center justify-between pb-1 border-b border-stone-100 dark:border-zinc-800">
|
||||
<span class="text-xs font-bold text-stone-400 uppercase">Цветовая схема</span>
|
||||
<span class="text-xs font-bold text-stone-400 uppercase">Color Scheme</span>
|
||||
<span class="text-xs font-semibold px-2.5 py-0.5 rounded-full bg-emerald-100 text-emerald-800 dark:bg-emerald-950/60 dark:text-emerald-400"
|
||||
x-text="colors.length === 1 ? 'Монотон (1 цвет)' : (colors.length === 2 ? 'Дуотон (2 цвета)' : 'Триатон (3 цвета)')"></span>
|
||||
x-text="colors.length === 1 ? 'Monotone (1 color)' : (colors.length === 2 ? 'Duotone (2 colors)' : 'Triatone (3 colors)')"></span>
|
||||
</div>
|
||||
|
||||
<div class="space-y-3">
|
||||
@@ -318,7 +318,7 @@
|
||||
<div class="flex-1">
|
||||
<div class="flex justify-between mb-1">
|
||||
<label class="text-xs font-bold text-stone-400 uppercase"
|
||||
x-text="colors.length === 1 ? 'Основной цвет' : ('Цвет ' + (index + 1))"></label>
|
||||
x-text="colors.length === 1 ? 'Primary color' : ('Color ' + (index + 1))"></label>
|
||||
<span class="text-xs font-mono uppercase text-stone-500 dark:text-stone-400" x-text="colors[index]"></span>
|
||||
</div>
|
||||
<input type="color" name="colors" x-model="colors[index]"
|
||||
@@ -328,7 +328,7 @@
|
||||
<button type="button"
|
||||
@click="colors.splice(index, 1); $nextTick(() => $el.closest('form').dispatchEvent(new Event('change')))"
|
||||
class="self-end mb-1 p-2 text-stone-400 hover:text-red-500 rounded-lg hover:bg-stone-100 dark:hover:bg-zinc-800 transition-colors"
|
||||
title="Удалить цвет">
|
||||
title="Remove color">
|
||||
<svg class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16"/>
|
||||
</svg>
|
||||
@@ -345,16 +345,16 @@
|
||||
<svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 4v16m8-8H4"/>
|
||||
</svg>
|
||||
<span x-text="colors.length === 1 ? 'Добавить второй цвет (Дуотон)' : 'Добавить третий цвет (Триатон)'"></span>
|
||||
<span x-text="colors.length === 1 ? 'Add second color (Duotone)' : 'Add third color (Triatone)'"></span>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Таб: Параметры -->
|
||||
<div x-show="activeTab === 'params'" class="space-y-4">
|
||||
{# ПЛОТНОСТЬ СЕТКИ (ЧИСЛО КОЛОНОК) #}<div>
|
||||
{# GRID DENSITY (NUMBER OF COLUMNS) #}<div>
|
||||
<div class="flex justify-between mb-1">
|
||||
<label class="text-xs font-bold text-stone-400 uppercase">Плотность галлюцинации</label>
|
||||
<label class="text-xs font-bold text-stone-400 uppercase">Hallucination Density</label>
|
||||
<span class="text-xs transition-colors duration-300"
|
||||
:class="cols >= 60 ? 'text-red-600' : (cols > 50 ? 'text-yellow-500' : 'text-emerald-600')"
|
||||
x-text="cols"></span>
|
||||
@@ -364,9 +364,9 @@
|
||||
:class="cols >= 60 ? 'accent-red-600' : (cols > 50 ? 'accent-yellow-500' : 'accent-emerald-500')"
|
||||
class="w-full transition-all duration-300">
|
||||
</div>
|
||||
{# РАЗМЕР ЭЛЕМЕНТА #}<div>
|
||||
{# ELEMENT SIZE #}<div>
|
||||
<div class="flex justify-between mb-1">
|
||||
<label class="text-xs font-bold text-stone-400 uppercase">Размер гипно-точки</label>
|
||||
<label class="text-xs font-bold text-stone-400 uppercase">Hypno-Dot Radius</label>
|
||||
<span class="text-xs transition-colors duration-300"
|
||||
:class="radius < 4 ? 'text-red-600' : (radius < 5 ? 'text-yellow-600' : (radius > 22 ? 'text-red-600' : (radius > 16 ? 'text-yellow-600' : 'text-emerald-600')))"
|
||||
x-text="radius"></span>
|
||||
@@ -376,9 +376,9 @@
|
||||
:class="radius < 4 ? 'accent-red-600' : (radius < 5 ? 'accent-yellow-500' : (radius > 15 ? 'accent-red-600' : (radius > 12 ? 'accent-yellow-500' : 'accent-emerald-500')))"
|
||||
class="w-full accent-emerald-500">
|
||||
</div>
|
||||
{# МЕРЦАНИЕ #}<div>
|
||||
{# BLINK / FLICKER #}<div>
|
||||
<div class="flex justify-between mb-1">
|
||||
<label class="text-xs font-bold text-stone-400 uppercase">Мерцание</label>
|
||||
<label class="text-xs font-bold text-stone-400 uppercase">Flicker Intensity</label>
|
||||
<span class="text-xs transition-colors duration-300"
|
||||
:class="blink <= 7 ? 'accent-emerald-600' : (blink > 9 ? 'accent-red-600' : (blink > 7 ? 'accent-yellow-500' : 'accent-emerald-500'))"
|
||||
x-text="blink"></span>
|
||||
@@ -388,9 +388,9 @@
|
||||
:class="blink <= 7 ? 'accent-emerald-600' : (blink > 9 ? 'accent-red-600' : (blink > 7 ? 'accent-yellow-500' : 'accent-emerald-500'))"
|
||||
class="w-full accent-emerald-500">
|
||||
</div>
|
||||
{# ПОВОРОТЫ #}<div>
|
||||
{# ROTATION #}<div>
|
||||
<div class="flex justify-between mb-1">
|
||||
<label class="text-xs font-bold text-stone-400 uppercase">Укачивание</label>
|
||||
<label class="text-xs font-bold text-stone-400 uppercase">Oscillation Sway</label>
|
||||
<span class="text-xs transition-colors duration-300"
|
||||
:class="rotation < -7 ? 'text-red-600' : (rotation < -4 ? 'text-yellow-600' : (rotation > 7 ? 'text-red-600' : (rotation > 4 ? 'text-yellow-600' : 'text-emerald-600')))"
|
||||
x-text="rotation + '°'"></span>
|
||||
@@ -400,9 +400,9 @@
|
||||
:class="rotation < -7 ? 'accent-red-600' : (rotation < -4 ? 'accent-yellow-500' : (rotation > 7 ? 'accent-red-600' : (rotation > 4 ? 'accent-yellow-500' : 'accent-emerald-500')))"
|
||||
class="w-full accent-emerald-500">
|
||||
</div>
|
||||
{# МАСШТАБ #}<div>
|
||||
{# SCALE #}<div>
|
||||
<div class="flex justify-between mb-1">
|
||||
<label class="text-xs font-bold text-stone-400">Взз-з-з-з…</label>
|
||||
<label class="text-xs font-bold text-stone-400">Bzz-z-z-z…</label>
|
||||
<span class="text-xs transition-colors duration-300"
|
||||
:class="scale < 900 ? 'text-red-600' : (scale < 950 ? 'text-yellow-600' : (scale > 1030 ? 'text-red-600' : (scale > 1010 ? 'text-yellow-600' : 'text-emerald-600')))"
|
||||
x-text="(scale / 10).toFixed(1) + '%'"></span>
|
||||
@@ -412,9 +412,9 @@
|
||||
:class="scale < 900 ? 'accent-red-600' : (scale < 950 ? 'accent-yellow-500' : (scale > 1030 ? 'accent-red-600' : (scale > 1010 ? 'accent-yellow-500' : 'accent-emerald-500')))"
|
||||
class="w-full accent-emerald-500">
|
||||
</div>
|
||||
{# НАКЛОН СЕТКИ #}<div>
|
||||
{# GRID TILT / ANGLE #}<div>
|
||||
<div class="flex justify-between mb-1">
|
||||
<label class="text-xs font-bold text-stone-400 uppercase">Перекос</label>
|
||||
<label class="text-xs font-bold text-stone-400 uppercase">Grid Skew</label>
|
||||
<span class="text-xs transition-colors duration-300 text-emerald-600" x-text="angle + '°'"></span>
|
||||
</div>
|
||||
<input type="range" name="angle" min="-44" max="45" step="1" x-model="angle"
|
||||
@@ -430,16 +430,16 @@
|
||||
x-transition
|
||||
class="flex items-center gap-2 px-3.5 py-1 rounded-full bg-emerald-500/10 border border-emerald-500/30 text-emerald-600 dark:text-emerald-400 text-xs font-bold font-mono tracking-wide animate-pulse">
|
||||
<img src="{% static 'img/thinking.svg' %}" class="w-4 h-4 animate-spin [animation-duration:3s]">
|
||||
<span>Глюкало думает...</span>
|
||||
<span>Glitchotron thinking...</span>
|
||||
</div>
|
||||
<div x-show="!isLoading && !hasChanges"
|
||||
class="text-[11px] font-mono text-stone-400 dark:text-zinc-500 tracking-wider">
|
||||
Параметры зафиксированы
|
||||
Parameters calibrated
|
||||
</div>
|
||||
<div x-show="!isLoading && hasChanges"
|
||||
class="text-[11px] font-mono text-emerald-600 dark:text-emerald-500 font-semibold tracking-wider flex items-center gap-1.5">
|
||||
<span class="w-1.5 h-1.5 rounded-full bg-emerald-500 animate-ping"></span>
|
||||
<span>Готово к запуску транса</span>
|
||||
<span>Ready for trance launch</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -453,11 +453,11 @@
|
||||
<template x-if="isLoading">
|
||||
<span class="flex items-center gap-2">
|
||||
<img src="{% static 'img/thinking.svg' %}" class="w-5 h-5 animate-spin [animation-duration:2s]">
|
||||
<span>ГЛЮКОТРОН В ТРАНСЕ...</span>
|
||||
<span>GLITCHOTRON IN TRANCE...</span>
|
||||
</span>
|
||||
</template>
|
||||
<template x-if="!isLoading">
|
||||
<span>ЗАПУСТИТЬ ГЛЮКОТРОН</span>
|
||||
<span>LAUNCH GLITCHOTRON</span>
|
||||
</template>
|
||||
</button>
|
||||
</form>
|
||||
@@ -476,7 +476,7 @@
|
||||
</svg>
|
||||
<p class="transition-all duration-300 text-xs sm:text-sm lg:text-base font-mono"
|
||||
:class="isLoading ? 'text-emerald-600 dark:text-emerald-400 font-mono text-xs font-bold uppercase tracking-wider animate-pulse' : 'font-medium opacity-60'"
|
||||
x-text="isLoading ? 'Гипножаба переваривает пиксели…' : 'Ваше искусство появится здесь'"></p>
|
||||
x-text="isLoading ? 'Hypnotoad is digesting pixels…' : 'Your artwork will materialize here'"></p>
|
||||
</div>
|
||||
</div>
|
||||
{# КНОПКИ КОПИРОВАНИЕ И СКАЧИВАНИЕ (ПОД ПРЕВЬЮ)#}
|
||||
@@ -487,14 +487,14 @@
|
||||
class="bg-stone-800 text-white dark:bg-zinc-800 py-3.5 rounded-xl font-bold flex items-center justify-center gap-2 hover:bg-stone-700 transition-colors cursor-pointer active:scale-95 text-xs sm:text-sm md:text-base">
|
||||
<svg class="w-5 h-5 shrink-0" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path d="M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z"/></svg>
|
||||
<span x-text="copied ? 'СКОПИРОВАНО В БУФЕР!' : 'КОПИРОВАТЬ SVG'"></span>
|
||||
<span x-text="copied ? 'COPIED TO CLIPBOARD!' : 'COPY SVG'"></span>
|
||||
</button>
|
||||
<button
|
||||
type="button"
|
||||
@click="downloadSvg(){% if ALLOW_TRACKING %}; window.ym && ym(112812760, 'reachGoal', 'download_svg'){% endif %}"
|
||||
class="bg-emerald-600 text-white py-3.5 rounded-xl font-bold flex items-center justify-center gap-2 hover:bg-emerald-500 transition-colors shadow-lg shadow-emerald-900/20 cursor-pointer active:scale-95 text-xs sm:text-sm md:text-base">
|
||||
<svg class="w-5 h-5 shrink-0" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path d="M4 16v1a2 2 0 002 2h12a2 2 0 002-2v-1m-4-4l-4 4m0 0l-4-4m4 4V4"/></svg>
|
||||
СКАЧАТЬ
|
||||
DOWNLOAD
|
||||
</button>
|
||||
</div>
|
||||
</section>
|
||||
@@ -504,10 +504,10 @@
|
||||
<section class="mt-20 space-y-12">
|
||||
<div class="flex flex-col sm:flex-row sm:items-center justify-between gap-4 pb-6 border-b border-stone-200 dark:border-zinc-800">
|
||||
<div>
|
||||
<h2 class="text-3xl font-black uppercase tracking-tighter">Галерея транса</h2>
|
||||
<p class="text-sm text-stone-500 dark:text-zinc-400 mt-1">Многоуровневое хранилище зрительного подчинения</p>
|
||||
<h2 class="text-3xl font-black uppercase tracking-tighter">Trance Gallery</h2>
|
||||
<p class="text-sm text-stone-500 dark:text-zinc-400 mt-1">Multi-tier vault of visual subjugation</p>
|
||||
</div>
|
||||
<a href="{% url 'hypn0_site:gallery_archive' %}" class="text-emerald-600 dark:text-emerald-400 font-bold hover:underline self-start sm:self-auto">Смотреть весь архив →</a>
|
||||
<a href="{% url 'hypn0_site:gallery_archive' %}" class="text-emerald-600 dark:text-emerald-400 font-bold hover:underline self-start sm:self-auto">View full archive →</a>
|
||||
</div>
|
||||
|
||||
<!-- 1-й ЭТАЖ: ПЛЕСК БЕССОЗНАТЕЛЬНОГО (Свежий поток)... Сюда попадает только что созданный шедевр -->
|
||||
@@ -517,14 +517,14 @@
|
||||
<div class="w-5 h-5 rounded-full bg-amber-500"></div>
|
||||
<div>
|
||||
<h3 class="text-xl font-black uppercase tracking-tight flex items-center gap-2">
|
||||
Плеск бессознательного
|
||||
Incubator of the Unconscious
|
||||
<span class="text-xs font-bold font-mono px-2 py-0.5 rounded-full bg-amber-100 dark:bg-amber-950/70 text-amber-700 dark:text-amber-400 border border-amber-300 dark:border-amber-800/50">FRESH STREAM</span>
|
||||
</h3>
|
||||
<p class="text-xs text-stone-400 dark:text-zinc-500">Свежие галлюцинации из инкубатора • Первичная оценка сообщества</p>
|
||||
<p class="text-xs text-stone-400 dark:text-zinc-500">Fresh hallucinations from the incubator • Community primary evaluation</p>
|
||||
</div>
|
||||
</div>
|
||||
<a href="{% url 'hypn0_site:gallery_archive' %}?floor=fresh" class="text-xs font-bold text-amber-600 dark:text-amber-400 hover:underline">
|
||||
Смотреть весь поток →
|
||||
View full stream →
|
||||
</a>
|
||||
</div>
|
||||
|
||||
@@ -533,7 +533,7 @@
|
||||
{% include "block/gallery_card.html" %}
|
||||
{% empty %}
|
||||
<div class="col-span-full py-10 text-center text-stone-400 bg-stone-100/50 dark:bg-zinc-900/50 rounded-2xl border border-dashed border-stone-300 dark:border-zinc-800 text-xs">
|
||||
Инкубатор бессознательного пуст. Сгенерируйте и опубликуйте первую картину выше!
|
||||
The incubator is empty. Synthesize and nominate the first artwork above!
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
@@ -546,14 +546,14 @@
|
||||
<div class="w-5 h-5 rounded-full bg-cyan-500"></div>
|
||||
<div>
|
||||
<h3 class="text-xl font-black uppercase tracking-tight flex items-center gap-2">
|
||||
Одобрено Мозговым Слизнем
|
||||
Approved by Brain Slug
|
||||
<span class="text-xs font-bold font-mono px-2 py-0.5 rounded-full bg-cyan-100 dark:bg-cyan-950/70 text-cyan-700 dark:text-cyan-400 border border-cyan-300 dark:border-cyan-800/50">CURATED</span>
|
||||
</h3>
|
||||
<p class="text-xs text-stone-400 dark:text-zinc-500">Проверено контролем качества • Высокий психоделический резонанс</p>
|
||||
<p class="text-xs text-stone-400 dark:text-zinc-500">Passed quality control • High psychedelic resonance</p>
|
||||
</div>
|
||||
</div>
|
||||
<a href="{% url 'hypn0_site:gallery_archive' %}?floor=curated" class="text-xs font-bold text-cyan-600 dark:text-cyan-400 hover:underline">
|
||||
Смотреть все одобренные →
|
||||
View all approved →
|
||||
</a>
|
||||
</div>
|
||||
|
||||
@@ -562,7 +562,7 @@
|
||||
{% include "block/gallery_card.html" %}
|
||||
{% empty %}
|
||||
<div class="col-span-full py-10 text-center text-stone-400 bg-stone-100/50 dark:bg-zinc-900/50 rounded-2xl border border-dashed border-stone-300 dark:border-zinc-800 text-xs">
|
||||
Мозговой слизень пока не отобрал картины для второго уровня. Голосуйте за свежие работы в инкубаторе!
|
||||
Brain Slug has not yet selected artworks for tier 2. Vote for fresh works in the incubator!
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
@@ -575,14 +575,14 @@
|
||||
<div class="w-5 h-5"><img src="{% static 'img/favicon.svg' %}" alt="Favicon" class="w-full h-full object-cover"></div>
|
||||
<div>
|
||||
<h3 class="text-xl font-black uppercase tracking-tight flex items-center gap-2">
|
||||
Глубокий транс
|
||||
Deep Trance Hall of Fame
|
||||
<span class="text-xs font-bold font-mono px-2 py-0.5 rounded-full bg-emerald-100 dark:bg-emerald-950/70 text-emerald-700 dark:text-emerald-400 border border-emerald-300 dark:border-emerald-800/50">TOP TIER</span>
|
||||
</h3>
|
||||
<p class="text-xs text-stone-400 dark:text-zinc-500">Золотой фонд гипноза • Абсолютное подчинение воли</p>
|
||||
<p class="text-xs text-stone-400 dark:text-zinc-500">Gold fund of hypnosis • Absolute will subjugation</p>
|
||||
</div>
|
||||
</div>
|
||||
<a href="{% url 'hypn0_site:gallery_archive' %}?floor=top" class="text-xs font-bold text-emerald-600 dark:text-emerald-400 hover:underline">
|
||||
Смотреть весь золотой фонд →
|
||||
View all Hall of Fame →
|
||||
</a>
|
||||
</div>
|
||||
|
||||
@@ -591,11 +591,10 @@
|
||||
{% include "block/gallery_card.html" %}
|
||||
{% empty %}
|
||||
<div class="col-span-full py-10 text-center text-stone-400 bg-stone-100/50 dark:bg-zinc-900/50 rounded-2xl border border-dashed border-stone-300 dark:border-zinc-800 text-xs">
|
||||
Зал славы глубокого транса формируется. Только истинные бессмертные шедевры попадают сюда.
|
||||
Hall of Fame is forming. Only true immortal masterpieces ascend here.
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
</section>{% endblock CONTENT %}
|
||||
Reference in New Issue
Block a user