История обновлений

Все обновления сайта и серверного мода, самые новые сверху

Здесь собрана вся история сайта CloudRidge и серверного мода, от новых к старым, чтобы ты мог посмотреть, когда появилась какая-то функция и когда починили какой-то баг.

По месяцу 2026-114 2026-1066 2026-0957
По версии Сбросить

Фильтр: 66 из 127

v1.9.86 Сайт 2026-10-31

换页不再白屏一下、注册页的「手机号注册」能点了

  • 点站内链接时,旧页面不再先淡成一片白底 —— 之前新页面要等网络往返才到,中间那一下就是白屏。现在旧页面保持原样,换页后新页面照旧淡入、内容依次上滑。
  • 注册页的「手机号注册」原来点了像是没反应:它只是把单选按钮选中,页面上的提示文案与「发验证码」的去向都没变。现在切一下就整页重渲染,提示、去向、表单都跟着变。
  • 如果站点没有配置短信服务,注册页不会再把你留在「手机号注册」这个空壳上,而是自动退回邮箱注册。
v1.9.85 Сайт 2026-10-31

В шапке только «Вход», а 3D-герой подобран по размеру

  • Вход через QQ убран из шапки: раньше рядом стояли две кнопки, теперь только «Вход». QQ показывается лишь на страницах входа и регистрации.
  • Камера 3D теперь считает расстояние от высоты модели: в высоком окне сцена не заполняет всё, а в низком не сжимается в пятно.
  • Цвета блоков приведены к вишнёвой гамме: багровые доски, адский нарост и кораллы заменены на вишнёвое дерево, лепестки и листву — цветного шума больше нет. Ни один блок не сдвинут.
v1.9.84 Сайт 2026-10-31

Главный экран теперь — вращаемая 3D-сцена

  • Весь главный экран — это 3D-сцена сада: тяните для вращения, колесо для масштаба, клик по блоку его ломает — через десять секунд он возвращается.
  • Телефоны и браузеры без WebGL2 не загружают 3D принудительно: им показывается статичный постер с того же ракурса и кнопка Смотреть в 3D в углу.
  • Переходы между страницами стали плавными: текущая страница гаснет, новая появляется, а её блоки поднимаются один за другим. При включённом уменьшении движения ссылки работают как раньше.
  • Кричащий синий квадрат QQ убран — теперь там официальная самая маленькая иконка Tencent 16×16, наравне с остальными.
v1.9.83 Сайт 2026-10-31

Одна кнопка QQ на всём сайте

  • Вход, регистрация, шапка и личный кабинет теперь используют одну и ту же кнопку QQ: официальный значок Tencent в нашей собственной обводке-пилюле. Tencent допускает вариант «маленький значок плюс текст», и значок остаётся официальным оригиналом.
  • В разделе «Аккаунт и безопасность» появилась строка QQ: привязать, перепривязать, отвязать. Аккаунты без пароля отвязать нельзя — у аккаунта, созданного только через QQ, пароля нет, и он потерял бы доступ навсегда.
  • Типографика и фактура: заголовки плотнее и весомее, больше воздуха между блоками, а по карточкам следует мягкое свечение за курсором.
  • Анимация: первый экран поднимается строка за строкой, числа отсчитываются, сверху идёт полоса прочитанного, карточки на главной слегка плывут. Если в системе включено «уменьшить движение», всё это отключается; на устройствах без наведения свечения нет.
v1.9.82 Сайт 2026-10-31

Вход через QQ теперь на официальной кнопке Tencent — на странице входа, регистрации и в верхнем меню

  • На страницах входа и регистрации раньше были нарисованный вручную пингвин и подпись «вход через QQ в один клик». Требования Tencent к страницам сайтов предписывают использовать официальный знак «QQ登录» и запрещают его изменять, поэтому теперь в обоих местах стоит оригинальное изображение Tencent 230×48 в натуральном размере — без растягивания и масштабирования.
  • В верхнем меню тоже появилась кнопка: официальная 76×24 «QQ登录» на широких экранах и официальная иконка 24×24 ниже 375 px, чтобы шапке не требовалась горизонтальная прокрутка.
  • Попутно исправлены две мелочи. Официальная кнопка никогда не становится серой: если галочка согласия не стоит, нажатие прокручивает страницу к флажку и подсвечивает его красным, а не отключает кнопку (серая кнопка выглядит ровно как «кнопка стоит не там»). А фраза «сайт использует вход по почте и паролю» устарела — во всех десяти языках осталась только часть про регистрацию.
v1.9.81 Сайт 2026-10-18

На телефоне текст Руководства по серверу перекрывался собственным оглавлением — исправлено

  • На компьютере боковая колонка руководства — узкая полоса, закреплённая вверху слева. Когда раскладка схлопывается в одну колонку, она становится во всю ширину и выше экрана, но по-прежнему была закреплена сверху: статья прокручивалась под ней, текст выглядел наложенным, белые блоки плавали поверх слов, а содержимое словно отсутствовало. На узких экранах (900 px и меньше) она теперь прокручивается вместе со страницей; на компьютере остаётся закреплённой. Ошибка существовала и раньше, просто на телефоне её не замечали.
v1.9.80 Сайт 2026-10-18

Инструменты починены: полоса вкладок работает, градиент стал свободнее, а калькулятор выдаёт список, который можно заполнить и запускать

  • Раньше все десять инструментов лежали на одной странице, а нажатие на капсулу сверху всего лишь перепрыгивало к якорю — казалось, что ничего не происходит. Теперь это настоящая полоса вкладок, и показывается только один инструмент; адрес с #t-xxx по-прежнему сразу открывает нужный инструмент, а на телефоне полосу можно листать вбок. Градиентный текст вместо двух жёстко заданных цветов получил 2~6 цветовых точек: нажатие на полосу добавляет точку, перетаскивание меняет её позицию, выбор точки и «Удалить этот цвет» убирают её; цвета интерполируются посимвольно по позиции, поэтому §-коды / MiniMessage / tellraw / MOTD меняются вместе, а слишком длинный MOTD выдаёт предупреждение
  • Калькулятор конфигурации сервера вырос с трёх уровней бюджета до девяти полей. Можно указать число модов, дальность прорисовки, дальность симуляции, работу редстоуна, целевой TPS и версию. На выходе больше не несколько строк с числами: память объясняет, почему она растёт, а ещё выдаются готовая к копированию команда запуска с Aikar’s flags, построчные советы для server.properties и spigot.yml и список модов и плагинов по стилю игры. Три самых переменчивых коэффициента — память на игрока, коэффициент модов и коэффициент редстоуна — перенесены в админский раздел «Инструменты», и после правки достаточно обновить страницу
  • Проверка лагов теперь считает по пунктам и сравнивается с живыми данными сайта. Добавлены четыре поля: постоянные сущности, загрузчики чанков, редстоун-проводка и автоматические фермы. Результат раскладывает MSPT на семь пунктов с долей и миллисекундами и называет «вот это и тянет» только тогда, когда пункт действительно забирает большую часть (свыше 45%); иначе честно говорит, что самый большой — он, но в целом нагрузка невысокая. К каждому пункту прилагается выполнимое исправление, а ещё инструмент подтягивает живые данные сайта, чтобы сказать, сколько в теории съедает ваш масштаб и сколько здесь сейчас осталось запаса; если данные недоступны, остаётся локальная оценка и никакой ошибки не выскакивает
v1.9.79 Сайт 2026-10-18

Жидкое стекло сделано заново по-эппловски: оно преломляет, бликует и держится на белом

  • ① В прошлой версии стекло было почти одной белой заливкой и пропадало, стоило положить его на белую карточку. Сейчас материал переделан по образцу iOS 26: светлая линия сверху, тёмная снизу, кольцо-хайрлайн в 1px снаружи, мягкое свечение внутри и совсем лёгкая тень; на десктопе по-прежнему настоящее преломление (фон слегка изгибается, вся пластина приподнимается на 1 пиксель при наведении и опускается обратно при нажатии). Основная и опасная кнопки раньше были целиком исключены из стекла, теперь они в нём: фирменный градиент остаётся на самой кнопке, контраст белого текста не меняется, а стеклянный слой отвечает только за блик и обводку, без наложения преломления. Тот же материал разложен на поля ввода, выпадающие списки, теги, значки игры, инструмента и игрока и верхнюю навигацию.
  • ② Телефоны больше не считают преломление (это самый дорогой шаг) и сами переходят на размытие с бликом по контуру: выглядит по-прежнему как стекло, но почти не тратит GPU. Заодно исправлен настоящий баг: мобильная ветка просто выходила и даже не включала упрощённый вариант, то есть на телефонах стекла не было вовсе. На десктопе сделано ещё две вещи: пластины одного размера получают одну карту смещения (у 7 пластин на главной их всего 4), а ушедшие за экран больше не рассчитываются; кроме того, новые не создаются, если пластина больше 300 тысяч пикселей или на странице их больше 80 — лучше одной пластиной меньше, чем подтормаживающей прокруткой.
  • ③ В админке в разделе Оформление остаётся тот же переключатель, теперь включённый по умолчанию; браузеры без backdrop-filter (Safari, Firefox) откатываются к матовой заливке, а не выглядят сломанными. Цветовая схема и вёрстка в этот раз не тронуты, тема по-прежнему Cloudridge Blue; эппловский белый фон из прошлой версии откатан по всему сайту (админка, форум, галерея и карта вернулись к прежнему виду), остались только два настоящих исправления: у диалога подтверждения опасных действий в админке вообще не было стилей (все 43 подтверждения удаления выпадали голой коробкой без затемнения), а заголовки галереи на узких экранах появлялись только при наведении мыши.
v1.9.78 Сайт 2026-10-17

Весь сайт в стиле Apple: белый фон, волосяные линии, кнопки-капсулы, а заодно исправлена пачка неверных чисел

  • Внешний вид сайта переделан целиком по лекалам Apple: белый фон, почти чёрный текст, одна линия в 1px вместо теней, кнопки и фильтры приведены к капсулам высотой 44, а верхняя панель при прокрутке переходит из полупрозрачной в плотную. Матовое стекло убрано полностью — размытые слои на карточках данных, таймлайне и карточках состояния исчезли, остался только один очень бледный полупрозрачный слой на верхней панели. Китайские заголовки больше не получают отрицательный трекинг: китайские знаки и так занимают всю свою ширину, от сжатия они сбиваются в кучу и выглядят жирными, сжимать нужно только цифры. Заодно перестроена админка, и исправлен настоящий баг: у диалогов подтверждения опасных действий в админке вообще не было стилей — они выпадали голой коробкой без затемнения и без позиционирования, и это задевало все 51 место с подтверждением удаления на сайте; теперь это центрированная карточка с затемнением и красным заголовком. Всё это висит на цветовой схеме Apple (выбирается в Admin → Оформление), и возврат к Cloudridge Blue откатывает всё целиком, без правки кода.
  • В мобильной версии на этот раз целились ровно в то, что ощущалось неудобным: четыре большие цифры на странице данных занимали по целой строке каждая, теперь они укладываются 2×2 на один экран; поле поиска игрока и кнопка Поиск были наложены друг на друга (кнопка перекрывала почти 70 пикселей текста-подсказки), теперь они стоят рядом в одной строке; в рейтинге серая линия сверху и снизу каждой строки сливались в толстую полосу, теперь это одна линия в 1px; двойная рамка карточки внутри карточки на таймлайне, разные пунктирные рамки и толстый тёмно-серый скроллбар Windows убраны разом; в боковой колонке страницы руководства подпись и значение состояния сервера были слипшимися (показывалось Version1.21.1), теперь они разведены по краям с разделительной линией.
  • Исправлено десять проблем с данными из аудита. Две самые важные: суммарное время в сети на главной показывало секунды как часы (стояло 35,7 млн ч, а настоящее значение — 9907 часов, разница в 3600 раз); и четыре человека в списке блокировок значились снятыми, хотя блокировка продолжала действовать — когда heartbeat сообщал, что запись уже есть, тихо возвращался только статус, без записи в историю и без восстановления отметки блокировки у игрока. Остальное: число установленных модов на странице состояния показывалось как 0 / 12 / 160 в трёх местах (настоящее значение 160), а операционная система — прочерком, и причина у обоих одна: лежащий в основе запрос отдаёт белый список, в котором этих двух полей нет; вереница UUID занимала рейтинг вместо имён, теперь она показывается как Неизвестный игрок · 87274f; потолок доступности был жёстко прописан как 99,2 процента (считался по фиксированному интервалу 30 секунд, а реальный heartbeat приходит раз в 31 секунду); и K/D при отсутствии смертей выдавал астрономические числа, теперь там прочерк. Ещё два пункта относятся к политике рейтинга (два способа слияния, по роли и по аккаунту, и теневой аккаунт, у которого есть только убийства) и насильно не правились — различия и их цена записаны в комментариях в коде, решать владельцу сайта.
v1.9.77 Сайт 2026-10-11

Подделать настоящий IP больше нельзя: путь закрыт от nginx до прикладного слоя

  • ① Сначала измеряем, потом меняем: живой зонд на сервере дал два факта — nginx от BaoTa использует протокол PROXY, поэтому настоящий адрес клиента и так уже лежит в REMOTE_ADDR (замерено 222.212.76.94, а не 127.0.0.1); а подставленные самим клиентом X-Real-IP / X-Forwarded-For / CF-Connecting-IP nginx передаёт в PHP как есть: все три поддельных заголовка доходят без изменений, и ни один из них nginx не перезаписывает. ② Укрепляем оба конца: nginx подставляет секрет, известный только своему прокси (даже если клиент подделает этот заголовок, nginx его перезапишет), а прикладной слой добавляет ещё один заслон — если REMOTE_ADDR публичный, он берётся напрямую и прокси-заголовки больше не смотрятся вовсе, — так что даже если trust_proxy когда-нибудь включат по ошибке, IP в ограничении частоты, блокировках и аудите не станет значением, которое выбрал сам посетитель.
  • Заодно три вещи: вводящий в заблуждение комментарий в site/config/config.php («включать true за CDN / обратным прокси») заменён на результат замера и предупреждение — если последовать ему на этом сайте, подделываемый заголовок только станет авторитетным значением; у этого изменения появились автотесты (trust_proxy включён + публичный REMOTE_ADDR + поддельные заголовки ⇒ всё равно возвращается настоящий адрес), набор вырос с 81 проверки до 83 и весь зелёный; временный зонд для разбора на живом сервере удалён, как и договаривались, и теперь запрос к нему даёт 404.
v1.9.76 Сайт 2026-10-11

Плавнее прокрутка на телефоне, несколько дыр в безопасности закрыто, а история чата больше не теряет середину

  • Четыре места по плавности на телефоне: матовое стекло верхней панели при прокрутке, матовое стекло всех карточек на узких экранах, слой композиции, который анимация появления держала постоянным для каждого элемента, и полоса прогресса чтения, вызывавшая пересчёт раскладки на каждый прокрученный пиксель — всё заменено на равноценные, но более дешёвые приёмы (у прокрученной панели фон и так непрозрачный, так что размытие было чистой тратой; а когда анимация действительно начинается, браузер сам поднимает слой). Замерено во вьюпорте телефона шириной 390 при 20-кратном замедлении CPU: худший кадр упал с 364 миллисекунд до 57 миллисекунд. Разница в общем числе кадров тонет в шуме этой машины, устойчивого вывода по ней не сделать — поэтому каждый пункт выше трогали только тогда, когда он объясним механически.
  • Три места по безопасности (высокий/средний риск, исправлены сразу): ① локальный отладочный _admlogin.php теперь обязан отдавать 404 в проде (он мог сделать посетителя администратором напрямую), и ?to= больше не может увести за пределы сайта; ② ping / dns на странице теста скорости передавал доменное имя для проверки порта, и DNS rebinding мог увести это во внутреннюю сеть — теперь подключение идёт только к уже проверенному IP; ③ подделка X-Real-IP / CF-Connecting-IP позволяла обойти ограничение по IP; теперь такие заголовки принимаются, только если запрос действительно пришёл с loopback. Чтобы закрыть ③ полностью, нужно внедрить X-CDR-Proxy-Secret в nginx и прописать security.proxy_secret в site/config/config.php — это уже настройка сервера, так что жду вашего согласия.
  • Три настоящих бага в истории чата: ① как только за день набиралось больше 200 сообщений, весь этот средний кусок на странице не показывался никогда (в самый занятый день 2796 сообщений, а старый путь листал только до 500, так что 2296 посередине не видел никто); ② сортировка смотрела только на первичный ключ id, поэтому в дни, пересекающие границу, сообщения после полуночи выталкивались из окна (замерено: 53 более новых сообщения пропускались навсегда); ③ при неудачной отправке интерфейс делал вид, что сообщение уже ушло. Теперь выборка идёт по времени, появилась кнопка «загрузить более ранние» для листания назад, а неудача честно сообщается и позволяет повторить.
  • Заодно: страницы для посетителей больше не запрещены к кешированию поголовно (назад и вперёд работают быстрее), а состояние входа по-прежнему не кешируется вообще. Все 218 PHP-файлов сайта проходят проверку синтаксиса без ошибок, все 59 самопроверок прогнаны — 15 наборов, связанных с этим изменением, дали результат в точности как до него (ни одного лишнего сбоя в локальном окружении).
v1.6.7 Мод 2026-10-10

Версия, которая бережнее относится к главному потоку сервера

  • Отчёт по карте перешёл от «собрать JSON на 197 тысяч точек внутри серверного тика» к «тот тик только отдаёт данные, а сборка идёт в фоновом потоке». Это единственное место во всём моде, которое могло давать «сотни миллисекунд за один тик», и оно точно соответствует редкому всплеску раз в полчаса.
  • Остальные места, растущие с числом игроков или сущностей, тоже оптимизированы: форматирование чисел TAB кешируется на тик, поиск игроков по имени использует индекс имён, перестраиваемый раз в тик, список достижений больше не строит строку на каждую запись, файлы конфигурации и список блокировок, читавшиеся каждые 30 секунд, переехали в фон, проверка длины очереди чата использует счётчик, сетевой замер больше не создаёт поток каждые 20 секунд, а таблица ограничения команд больше не только растёт. Формат отчёта, имена полей и момент снятия значений не изменились.
v1.9.75 Сайт 2026-10-10

Мод на сервере похудел: расходы, растущие с числом игроков, вынесены из главного потока

  • Самый крупный блок в отчёте мода — это карта: три карты по 256×256, около 197 тысяч точек. Раньше эти точки собирались в JSON прямо внутри серверного тика, и сервер продолжал работу только после сборки — раз в полчаса, что точно совпадает с теми редкими всплесками «иногда на миг подвисает». Теперь тот тик только отдаёт данные, а сборка уходит в фоновый поток: данные и так были готовы, а сборка JSON никогда не требовала занимать главный поток.
  • Заодно убраны несколько расходов, которые растут с числом игроков онлайн: числа в списке TAB (время игры, число игроков и прочее) пересчитывались для каждой строки каждого игрока, хотя меняются раз в 30 секунд; поиск игрока по имени в худшем случае построчно перебирал всю таблицу (10 игроков — это 100 поисков); список достижений каждые 10 минут проходил и по тысяче с лишним рецептов; а каждые 30 секунд только ради подсчёта сущностей полностью обходились все миры, причём файлы конфигурации и список блокировок читались в главном потоке. Теперь это соответственно кеш, индекс, однократный расчёт и фоновое чтение — в том, что отправляется на сайт, не изменилось ни одного байта, и страницы выглядят точно так же, как раньше.
v1.9.74 Сайт 2026-10-05

Улучшены админка и приватность профиля

  • Счётчик ожидающих проверки в боковом меню учитывал только форум и галерею, тогда как панель администратора считала пять очередей; теперь всё берётся из одной функции, и у каждого пункта меню своё число. Опасные действия (удалить группу пользователей, удалить пункт навигации, очистить журнал чата, очистить кеш) выполнялись без вопросов — теперь они просят подтверждение. Списки скинов, фонов аватара и журнала чата ограничивались 200 и 60 строками, теперь по ним можно листать.
  • Переключатель «разрешить другим видеть мой профиль» влиял только на страницу команды, а сам профиль был виден всем; теперь он действительно работает, кроме вас самих. Смена пароля и выход на других устройствах тоже попадают в журнал аудита.
v1.9.73 Сайт 2026-10-05

Красные кнопки подтверждения и удаления снова видны

  • Кнопка подтверждения при отзыве сообщения была пустой: при включённом жидком стекле правило стекла убирает фон кнопки, но оставляет белый текст, и красная кнопка становилась белым на белом. Теперь красные сплошные кнопки, как и синяя основная, не участвуют в стекле.
  • Та же проблема была у всех красных кнопок сайта (отзыв, удаление, отвязка и другие) — исправлены все сразу.
v1.9.72 Сайт 2026-10-05

Перелистывание больше не бросает наверх

  • Нажатие «следующая страница» внизу страницы возвращало вас в самый верх. Теперь пагинатор выравнивает список над собой и вообще ничего не делает, если этот список уже виден. Назад и вперёд возвращают к прежней позиции прокрутки.
  • Заодно мелочи: карта сида появилась в меню «Серверы», якоря больше не прячутся под липкой шапкой, карточки галереи показывают автора, а онлайн-игроки на главной ведут в профиль.
v1.9.71 Сайт 2026-10-05

Ужесточены права в админке и исправлены мелочи

  • Настройки, смена ключа, резервные копии и системные инструменты теперь доступны только владельцу — у администраторов сервера остаются контент, жалобы и белый список.
  • Исправлены мелкие проблемы при перелистывании без перезагрузки: тёмная тема сохраняется, формы не отправляются дважды, отсчёт идёт с обычной скоростью, а выбор сортировки больше не перезагружает страницу.
v1.9.70 Сайт 2026-10-05

Перелистывание без полной перезагрузки

  • Постраничный переход, фильтры, поиск и сортировка теперь подменяют только содержимое — адрес по-прежнему меняется, кнопка «Назад» работает.
  • Сохранение, проверка и удаление по-прежнему открывают новую страницу.
v1.9.69 Сайт 2026-10-05

Список подсказок поиска перекрывался карточками

  • У анимированных элементов есть will-change, а will-change создаёт контекст наложения, поэтому z-index списка работал только внутри своей карточки и проигрывал карточкам статистики, стоящим позже в DOM
  • Теперь поднята вся карточка поиска, и список полностью отображается сверху
v1.9.68 Сайт 2026-10-04

Исправлено: профиль не прокручивался на телефоне

  • 3D-просмотр скина жёстко задавал touch-action:none и безусловно вызывал preventDefault на touchstart/touchmove — палец на нём блокировал всю страницу. Теперь вертикальный жест отдаётся браузеру, а модель вращается только горизонтальным
  • Перетаскивание фона в шапке тоже теперь только мышью
v1.9.67 Сайт 2026-10-04

Руководство по серверу переписано: текста вдвое больше, а команды теперь разделены на игровые и админские

  • Все четыре страницы — начало игры, правила, частые вопросы и о сервере — переписаны заново: объясняется, зачем нужен каждый шаг и что делать, если не получилось
  • Страница команд начинается с раздела «Команды для игроков», сгруппированного по темам: первые шаги, перемещение, чат и состояние; полная таблица из 435 строк осталась ниже
v1.9.66 Сайт 2026-10-04

Подсказка о прокрутке больше не липнет к таблице

  • Подсказка над таблицей упиралась в её верхнюю границу и выглядела наложенной; теперь есть отступ
  • Шапка становится полностью непрозрачной при прокрутке (раньше была полупрозрачной)
v1.9.65 Сайт 2026-10-04

Закрыта уязвимость в загружаемых SVG

  • Раньше специально подготовленный SVG в качестве аватара или фона мог раскрыть IP-адрес и данные браузера всех, кто его просматривал. Теперь такие внешние ссылки удаляются, а само изображение не меняется.
  • Также добавлены HSTS и несколько осторожных правил безопасности содержимого.
v1.9.64 Сайт 2026-10-04

Значок проверки больше не горит постоянно + на странице статуса нет внутренних адресов

  • Значок «проверка» в админке считал пять очередей, а панель «управление сервером» умеет только две — значок горел, хотя проверять было нечего. Теперь критерий один, а в панели появилась строка «ещё ждут проверки»: галерея / скины / форум со ссылками на существующие страницы админки.
  • Строка «веб-карта» на странице статуса показывала 127.0.0.1:8100 (внутренний адрес, нужен только для проверки). Теперь выводится публичный адрес веб-карты.
v1.9.63 Сайт 2026-10-04

Видео видно прямо в админке

  • У фонов с фоновым видео карточка проверки теперь проигрывает это видео: нажмите play, по умолчанию загружается только начало (трафик не тратится), плюс метка «есть видео».
  • Раньше в карточке была только отдельно выбранная обложка, которая могла быть вообще не связана с видео. Больше не одобрим вслепую.
  • Заодно исправлено «время загрузки 1970-01-01»: мой инструмент загрузки писал неверный формат. Данные и инструмент исправлены.
v1.9.62 Сайт 2026-10-04

Исправлена ошибка 500 + две правки вида

  • Исправлена ошибка 500: в прошлой версии я перепутал позиции аргументов журнала аудита после входа, из-за чего любой успешный вход вызывал внутреннюю ошибку. Теперь вход перенаправляет как надо.
  • Строка «Я прочитал и принимаю Условия использования и Политика конфиденциальности» переехала в самый низ формы (под кнопкой входа), как на обычных страницах входа. Без галочки войти по-прежнему нельзя.
  • Затемнение в шапке страницы игрока стало плавным градиентом: заметная горизонтальная линия исчезла, переход выглядит естественно.
v1.9.61 Сайт 2026-10-04

Для входа нужно принять условия

  • На странице входа появился флажок: «Я прочитал и принимаю Условия использования и Политика конфиденциальности» — без него войти нельзя. Это касается обоих способов (QQ в один клик и почта с паролем), и сервер тоже это проверяет: отключённая кнопка никого не остановит.
  • Мы написали две настоящие страницы — Условия использования и Политика конфиденциальности, — где по пунктам перечислено, что сайт хранит: ник и openid от QQ, почту и хеш пароля, привязанных персонажей, игровую статистику, загруженные изображения, а также IP и время входа.
  • Там же прямо сказано, с кем мы делимся данными — только три стороны: QQ Connect (вход), mc-heads.net (аватар скина, если свой не загружен) и 126 Mail (коды подтверждения). Никаких рекламных сетей и продажи данных.
  • Также описаны сроки хранения, как запросить удаление или выгрузку и как мы поступаем с несовершеннолетними. Обе страницы есть и в подвале сайта.
v1.9.60 Сайт 2026-10-04

Текст в шапке теперь читается и на светлых кадрах

  • После замены фото на видео белый текст шапки оказался на светлом небе и облаках с худшим значением 1,16:1, то есть практически нечитаемым. Причина — порядок отрисовки: видео является настоящим дочерним элементом, а затемняющий градиент лежал на body.cdr-body::before (генерируемое содержимое), а генерируемое содержимое всегда рисуется раньше настоящих детей, поэтому видео полностью перекрывало градиент и он ни на что не влиял
  • Исправление делает затемнение собственным фоном шапки: один вертикальный градиент (62 процента сверху, исчезает к 350px), который накрывает только полосу шапки и не трогает ни пикселя персонажа, земли и воды; новый фиксированный слой не добавлялся, высота страницы осталась 6816px
  • На самом светлом кадре контраст шапки вырос с 1,16 и 2,63 до 4,85 и 6,91 к 1 (норма для белого текста — 4,5 к 1). Заодно исправлена регрессия, заметная только онлайн: под жидким стеклом у кнопки «Назад» полупрозрачная поверхность, и затемнение гасило и её (5,19 к 1 падало до 2,14 к 1); теперь и её надпись белая, худший случай 6,04 к 1
  • Это касается только страниц с баннером; страницы без баннера не изменились ни на байт. Колесо, кнопки и воспроизведение видео перепроверены
v1.9.59 Сайт 2026-10-04

Анимированные фоны: найдена настоящая причина неработающего колеса и кликов

  • Причина — совпадение имён классов: .pub-bg-video был и классом видеоэлемента, и классом-переключателем на <html>. Из-за этого всё правило полноэкранного фиксированного видеослоя применилось к корневому элементу: корень стал position: fixed, высота страницы схлопнулась до одного экрана, и колесу стало нечего прокручивать
  • Ещё коварнее то, что pointer-events: none наследуется: всё дерево документа перестало получать мышь, её ловил только <html>, и кнопка «Назад» стала недосягаемой
  • Исправление: класс состояния переименован в pub-bg-on, а правило элемента сужено до video.pub-bg-video, чтобы они больше никогда не совпадали
  • Фоновый материал возвращён к первой версии (4,50 МБ → 4,41 МБ) без затемнения, вшитого в кадры, поэтому цвета снова нормальные; также исправлены три локальных стенда — они измеряли <html>, думая, что измеряют видеослой
v1.9.58 Сайт 2026-10-04

Анимированные фоны: убрали лишний экран высоты, перетаскивание заметнее

  • Новое видео (15,98 МБ → 4,50 МБ), затемнение вшито прямо в кадры; статичная картинка на телефоне — тот же кадр
  • Удалён невидимый слой маски, который при этом добавлял больше экрана высоты
  • Курсор над шапкой становится «хватающей» рукой; условие ослаблено, чтобы работали ноутбуки с сенсорным экраном
  • Проблема с колесом ещё разбирается; этот выпуск исправляет три пункта выше
v1.9.57 Сайт 2026-10-04

В профиле теперь может быть анимированный фон

  • Загрузите беззвучный клип от 5 секунд до 1 минуты: на компьютере он зациклится, а телефон оставит статичную картинку и не потратит ни байта лишнего
  • Видео принимает только ячейка «баннер», и оно проходит ту же проверку, что и картинки; лимит — 6 МБ, выше — понятный отказ, а не тихий провал
  • Статичная картинка на телефоне — это ваш баннер, поэтому выберите ту, что подходит клипу
  • По умолчанию функция выключена: включите её в настройках админки, и поле загрузки появится
v1.9.56 Сайт 2026-10-03

Исправлено: «выбрал изображение, сохранил — и ничего не произошло»

  • Игрок загрузил аватар и баннер — даже прислал видео — а в модерации ничего не появилось. Изображение так и не дошло до сервера: $_FILES был пуст от начала до конца
  • Причина — HEIC с iPhone: браузер не может его декодировать, окно обрезки сочло это отменой, а отмена стирает файл из формы. Файла нет — сервер мог только решить, что «изображение не меняется», и отвечал зелёным сообщением об успехе
  • Теперь нечитаемые изображения не выбрасываются — оригинал загружается как есть (просто без обрезки), и вам объясняют причину
  • Плюс появилась страховка на стороне сервера: если браузер сообщает, что изображение выбрано, а файл не пришёл, выводится ошибка вместо имитации успеха. Настоящая отмена тоже сообщается явно
v1.9.55 Сайт 2026-10-03

Исправление имён «неизвестных игроков» переехало в админку

  • Скрипт .tools/_backfill-names.php теперь кнопка в разделе «Системные инструменты»
  • Он читает usercache.json из исторических резервных копий, возвращает настоящие имена строкам, названным по UUID, и переносит вместе с ними историю сессий / достижения / скины
  • Страница сначала показывает, какие строки и на что изменятся; перед записью автоматически снимается снимок базы
  • Затрагиваются только строки, имя которых целиком является UUID; если настоящее имя занято, строки объединяются, а обычные игроки никогда не переименовываются
v1.9.54 Сайт 2026-10-03

Рейтинги: десятка лучших в девяти категориях на одном экране

  • Это те «подробные рейтинги», о которых ты просил. Выпадающий список сортировки в списке игроков показывает только одно измерение за раз, поэтому сравнить «кто больше всех накопал» и «кто больше всех умирал» можно было только переключаясь. /ranking собирает десятку лучших в девяти категориях на одном экране
  • По одной карточке на категорию: место, аватар, имя и значение этой категории —
  • числа совпадают со списком игроков символ в символ, потому что оба читают один и тот же код форматирования. Нажми на имя, чтобы открыть страницу игрока
  • Ссылка «Смотреть все» в шапке карточки открывает полный список, уже отсортированный по этой колонке (?sort=). Вход — кнопка «Рейтинги» под заголовком списка игроков. Категории без данных не создают пустую карточку, а боты по-прежнему исключены
v1.9.53 Сайт 2026-10-03

Фон профиля теперь можно перетаскивать

  • На профилях с баннером фотографию фона можно зажать мышью и двигать — как будто сдвигаешь отпечаток пейзажа, а шапка, аватар и имя остаются на месте
  • Реагирует только верхняя область (шапка страницы). Карточки, таблицы и кнопки ниже работают как обычно, выделять текст по-прежнему можно, а нажатие кнопки никогда не начинает перетаскивание
  • При отпускании всё возвращается на место; у края движение останавливается (по кругу остаётся небольшой запас), поэтому фото никогда не уходит за экран и не открывает цвет фона
  • Только мышь и тачпад. Сенсорные экраны и те, у кого включено «уменьшить движение», исключены и ведут себя как раньше
v1.9.52 Сайт 2026-10-03

«Неизвестные игроки» теперь исправляются сами

  • Несколько строк в списке показывают «Неизвестный игрок · 87274f» — на самом деле это его UUID. Кэш имён на сервере хранится около месяца, поэтому после долгой паузы мод не может определить имя и отправляет UUID
  • Проблема была в том, что такая строка не могла исправиться никогда: когда игрок возвращался и сервер снова узнавал его имя, переименование упиралось в ограничение уникальности (строка с настоящим именем обычно уже существовала), ошибка проглатывалась, и UUID оставался
  • Теперь работают оба пути: если настоящее имя свободно — переименовываем и переносим сессии, достижения и скин; если занято — объединяем: время складывается, прогресс объединяется, первое/последнее посещение расширяются
  • От вас ничего не требуется — всё исправится при следующем входе. В журнале синхронизации появится «adopted=N», это видно в «Системных инструментах»
v1.9.51 Сайт 2026-10-03

Аватар теперь виден везде; история входов разбита на страницы; светлые кнопки исправлены

  • Загруженный аватар показывался только в вашем профиле — все остальные аватары на сайте шли другим путём, который ничего не знал о загрузке. Теперь его используют и списки игроков, и комментарии, и навигация. У тех, кто ничего не загружал, всё как было
  • История последних входов показывала 30 строк сразу. Теперь по 10 на страницу, с той же постраничной навигацией, что и в остальных списках сайта (скрыта, если страница одна)
  • Кнопка «развернуть все значки» выглядела серой и неактивной — проблема специфичности: синяя подложка светлой кнопки проигрывала базовому белому слою, а её собственный фон тоже стирался. Исправлено
  • Пустое место под левой колонкой профиля: теперь левая колонка растягивается до высоты правой, а карточка рейтинга заполняет остаток. Пропасти не остаётся независимо от того, развёрнуты значки или нет. Пояснения к радару тоже свёрнуты по умолчанию
v1.9.50 Сайт 2026-10-03

Жидкое стекло переписано по образцу: теперь это настоящее стекло

  • Прошлая версия была лишь «карта градиента + смещение», и никакая настройка не делала её похожей. Построчное сравнение с образцом показало три недостающих части — все три теперь есть
  • Преломление теперь считается по настоящей оптике: толщина стекла, ширина фаски, показатель преломления (1,0–3,0) и скруглённая поверхность — всё участвует в расчёте, и именно это даёт кромке эффект лупы «толстого стекла»
  • Добавлен слой блика — отражение по краю, направленное в одну сторону. Это самая узнаваемая черта жидкого стекла, а в прошлой версии его не было вовсе
  • Насыщенность возвращается после смещения (преломление обесцвечивает), плюс лёгкое сглаживание. Размытие остаётся 0,3 px: больше — и соседние пиксели перестают различаться, а преломление исчезает совсем
v1.9.49 Сайт 2026-10-03

Аватар теперь можно обрезать самому: потяните — что в рамке, то и получится

  • Раньше вы загружали картинку целиком, и сайт сам масштабировал её от центра — если лицо оказалось сбоку, так и оставалось. Теперь при выборе картинки открывается рамка: тяните, чтобы сдвинуть, колесо или ползунок — чтобы приблизить, и то, что внутри рамки, становится итоговым аватаром
  • Экспорт — 512×512 (тот же предел, что и на сервере) в WebP. Маленькие картинки не увеличиваются — от этого они только мутнеют, поэтому обрезаются в своём размере. На узких экранах рамка автоматически уменьшается, так что и на телефоне всё работает
  • Два типа изображений намеренно не трогаются: анимированные GIF (при обрезке остался бы один кадр и анимация пропала бы) и SVG — они идут прежним путём. Если на любом шаге что-то сорвётся (браузер не умеет, не хватило памяти), отправится исходный файл — застрять на «выбрал файл и ничего не происходит» невозможно
  • Баннеры не обрезаются — они широкие по своей природе, и делать их квадратными бессмысленно. Рамка появляется только при загрузке аватара в разделе «Моё → Мой профиль».
v1.9.48 Сайт 2026-10-03

Матовое стекло на узких экранах стало на ступень легче — рывки на телефоне должны уйти

  • Рывки на мобильной странице профиля возникали не из-за плохо написанной анимации, а потому что само размытие стоило слишком дорого: на каждой карточке висело blur(32px) saturate(180%), а на этой странице одновременно видно семь-восемь стеклянных поверхностей — каждый прокрученный кадр должен был заново пересэмплировать все пиксели за ними
  • Разница между 32px и 14px почти незаметна глазу — карточки и так лежат на белом .70–.78, а размытие лишь смягчает фотографию позади; зато стоимость сэмплирования растёт примерно как квадрат радиуса. Насыщенность тоже снижена с 180% до 150%; на этой странице более яркие цвета нигде не нужны
  • На ступень ниже только узкие экраны: на десктопе не сдвинулся ни один пиксель. Это чисто производительное изменение, которое вы почти не заметите — но прокрутка на телефоне станет заметно плавнее
  • Понижение затрагивает только узкие экраны; на десктопе не изменился ни один пиксель. Это чисто производительная правка, почти незаметная глазу, — но прокрутка на телефоне станет заметно плавнее
v1.9.47 Сайт 2026-10-03

Мобильная страница состояния стала заметно короче; список блокировок больше не повторяет «QQ не привязан» в каждой строке

  • На телефоне каждая строка сервиса переносилась на две-три строки. Причина конкретна: строка была сеткой из трёх колонок, минимальные ширины которых в сумме давали 504 px, а вьюпорт телефона — всего 492 px, то есть чуть-чуть не хватало, и каждая строка принудительно переносилась. На узких экранах теперь две колонки, а примечание вынесено в отдельную строку — страница стала короче более чем на 500 px
  • Заодно на узких экранах подтянуты отступы панелей, полоса доступности и карточки узлов. Эти изменения живут только в блоке стилей внутри самой страницы состояния — на остальных страницах не сдвинулся ни один пиксель
  • В списке блокировок в каждой строке под именем игрока стояла одна и та же надпись «QQ не привязан», из-за чего таблица выглядела сломанной. Оказалось, переключатель «скрывать QQ на странице блокировок» в админке вычислялся и никогда не использовался — настройка всё время была мёртвой
  • Теперь все три места слушают этот переключатель: строка списка, значок QQ и подсказка на аватаре, а также раскрытая подробность. Причины блокировки по-прежнему зашиты по-китайски (во всех десяти языках отображается китайский); этим займусь отдельно
v1.9.46 Сайт 2026-10-03

Фоновые изображения ожили и мягко уступают курсору

  • Теперь поддерживаются анимированные GIF-фоны. Дело было не в отсутствии поддержки, а в том, что её убивало сжатие: каждая загрузка перекодировалась в WebP, а декодирование GIF даёт только первый кадр —— анимация приходила статичной картинкой
  • Решение: многокадровый GIF сохраняется байт в байт, без перекодирования, и анимация выживает. Плата за это — анимированный фон не уменьшается до 1920x1080 (перекодирование убило бы анимацию), это осознанный выбор
  • Фон теперь следует за курсором: при движении указателя слой фона смещается до 10 пикселей в обратную сторону, и фотография читается как объёмная
  • За кадр меняется только одна переменная CSS, поэтому сама фотография не перерисовывается ни разу; когда указатель останавливается, цикл завершается, и неподвижная страница стоит ровно столько же, сколько раньше. Только мышь и трекпад, и полностью отключено при уменьшенной анимации
v1.9.45 Сайт 2026-10-03

Крестик на кнопке «Назад»: четыре захода, а причина оказалась внутри комментария

  • Крестик исчез. Это было светлое пятно, которое браузер оставляет у верхней кромки по центру, когда сэмплирует фон маленького блока —— кнопка всего 58x35, поэтому пятно занимает заметную её часть; на большой карточке то же пятно размывается и не видно
  • Решение: эта маленькая кнопка больше не сэмплирует фон, а её подкраска поднята с 8 % до 14 %, чтобы сохранить прозрачность. Цена нулевая: с преломлением и без него кнопка отличается на 0 из 1 766 688 пикселей (максимальная разница по каналу — 1)
  • По-настоящему каверзный слой был следующим: правила верные, но не работают. Дословно цитируя эталонный CSS внутри комментария, я написал /* 6% */ —— комментарии CSS не вкладываются, этот */ закрыл внешний комментарий раньше времени, следующая } закрыла правило раньше времени, и парсер проглотил все последующие правила
  • Этот испорченный комментарий жил там с 1.9.42, так что целых три версии у стекла кнопок не было внутреннего свечения и внешней тени —— теперь оба вернулись. Урок стал тестом: никогда не писать в комментарий то, что закрывает его раньше времени (в PHP эта же ловушка поймала меня уже дважды)
v1.9.44 Сайт 2026-10-03

Та мигающая линия при движении мыши: восемь версий спустя — причина в подъёме карточки на 2px при наведении

  • Причина была не в блике и не в площади матового стекла, а в общем правиле наведения: каждый раз, когда курсор проходил по карточке, она приподнималась на 2px. У карточек матовый фон, поэтому в момент движения браузер обязан заново пересэмплировать изображение позади — а этот сэмплинг режется на тайлы; стыки тайлов и есть та линия
  • По пути было пять тупиков (перенести блик с фона в псевдоэлемент, перевести на transform, сделать настоящим дочерним элементом, вынести из стекла, удалить целиком). Каждый выглядел так, будто «должен» сработать, и ни один не задевал причину
  • Исправление: стеклянные поверхности больше не смещаются при наведении — они отвечают рамкой и тенью. Две матовые полосы во всю ширину (панель навигации и закреплённая строка с именем) тоже лишились размытия; сэмплинг по большой площади — самый дорогой
  • Из той же партии вышли две заметные вещи: блик, следящий за мышью, удалён полностью (слишком мельтешит), а стекло кнопок переписано в три слоя как в референсе (преломление и тонировка раздельно)
v1.9.43 Сайт 2026-10-03

Кнопка входа в админку исчезла: баг специфичности, который я внёс в прошлой версии

  • В стекле кнопок из v1.9.42 была ошибка специфичности: базовый слой с 8 % белой окраски считался как «пять классов плюс два элемента», а тёмно-синий градиент главной кнопки —— всего как «три класса». Поэтому базовый слой всегда побеждал, и градиент вообще не рисовался. Вдобавок background: none в том же блоке стирал собственный градиент главной кнопки. Тёмно-синий фон с белым текстом превратился в белое на белом, и кнопка исчезла полностью
  • Исправление: сплошные фирменные кнопки (главная кнопка) больше не участвуют в стекле. Это тёмно-синяя кнопка с белым текстом; такое стекло подходит только светлым кнопкам. Главная кнопка вернулась к исходному сплошному виду
  • Тот же баг тихо съедал и подсветку при наведении (она считалась как «четыре класса» и проигрывала пяти) —— то есть обещание прошлой версии «наведение теперь заметно» никогда не работало. Теперь работает
  • Ещё один побочный эффект: background: none стирал и загружающиеся кнопки, а слои стекла их исключают —— на эти секунды кнопка становилась полностью прозрачной. Теперь фон к ним возвращается
v1.9.41 Сайт 2026-10-02

Свечение, следовавшее за курсором, удалено

  • Что удалено: холодное синее свечение, которое ходило за курсором по карточкам. Убрано целиком — переменные, переключатель, слой, скрипт, не осталось ни одного фрагмента
  • Почему: вы четыре раза сообщали об одном и том же — «стоит двинуть мышью, и этот участок мигает» / «горизонтальная линия». Я переписывал это четырьмя способами (рисовал в фоне карточки, переносил в псевдоэлемент, делал настоящим дочерним элементом, выносил в отдельный слой на всю страницу) — ничего не помогло. Вашими последними словами было «удали свечение за курсором, слишком уж трясёт» — значит, удалено
  • Побочный эффект: без него движение указателя больше не вызывает ни одной перерисовки. Это и оказалось последним кусочком головоломки с мигающей линией — пока внутри элемента с матовым стеклом что-то меняется кадр за кадром, браузер вынужден снова и снова пересчитывать картинку позади него, а считает он её плитками: стыки плиток и есть та линия, которую вы видели
  • Всё остальное не изменилось: прозрачность стекла, первый экран только с фотографией, закреплённая строка с именем и кнопки с жидким стеклом остались как были. Посетители без мыши и на сенсорных экранах этого свечения и не видели, так что для них это обновление — ноль перемен
v1.9.36 Сайт 2026-10-02

Свечение больше не прыгает между элементами, а жидкое стекло кнопок стало сильнее

  • Свечение за курсором больше не «прыгает»: при переходе курсора с одной карточки на другую свечение телепортировалось —— старое исчезало, новое появлялось мгновенно. Теперь старое гаснет на месте, а новое проявляется под курсором, и центр плавно смещается; всё занимает около 180ms
  • Почему не CSS-переход: transition заменяет объявление целиком, и добавить переход только к одному свойству нельзя; для этого понадобился бы селектор, который заодно перекрыл бы анимации появления и наведения карточек, и появление при прокрутке превратилось бы из «проявления с подъёмом» в резкий скачок. Поэтому скрипт покадрово сглаживает одно число (интенсивность свечения) и останавливается, как только оно устоялось
  • Жидкое стекло кнопок стало сильнее: смещение преломления выросло с 14 до 50, полоса фаски расширена, и добавлено то, что действительно делает поверхность похожей на стекло —— зеркальный блик по верхнему краю, тёплая и холодная дисперсионные каёмки по левому и правому краям, а также внутренний отблеск. Заодно размытие уменьшено с 1,5px до 0,8px (размытие как раз стирает ту детализацию, которой питается смещение)
  • Честная оговорка в силе: отрисовывают только Chrome и Edge, к тому же преломление видно лишь тогда, когда есть что преломлять —— на белой карточке это практически ноль, а на контрастном фото баннера заметно. Переключатель находится в админке, «Системные настройки → Визуальные эффекты», и по умолчанию выключен
v1.9.35 Сайт 2026-10-02

Первый экран теперь только фото, контент поднимается при прокрутке, а у кнопок появилось жидкое стекло

  • Первый экран стал «хиро»: на странице игрока с баннером при входе видно только шапку страницы и фоновое фото на весь экран — область контента не показывается вообще. Один щелчок колесом вниз проявляет весь блок контента с плавным появлением и приподнимает его (прозрачность по-прежнему 28 %); при возврате наверх он снова убирается, сколько угодно раз
  • Почему двигаются сами блоки контента, а не обёртка: любой предок с непрозрачностью меньше 1 создаёт новый backdrop-root, и все поверхности backdrop-filter внутри начинают брать пробу из пустого фона — матовое стекло полностью ломается. При поблочном появлении такого предка нет. Единственные два position: fixed в body (фоновый слой и закреплённая строка с именем) в этот набор не входят, поэтому сдвигать их безопасно
  • Преломление «жидкое стекло» на кнопках (новый переключатель в админке «Системные настройки → Визуальные эффекты», по умолчанию выключен): край кнопки теперь слегка искривляет узор за ней, как это делал бы толстый кусок стекла. Используется карта смещения SVG плюс backdrop-filter; карта рисуется один раз через canvas при открытии страницы, и никакого скрипта на каждый кадр нет
  • Рисуют только Chrome и Edge: Safari и Firefox не поддерживают эту возможность CSS и отказывают молча (ни ошибки, ни отрисовки), поэтому возвращаются к нынешнему матовому стеклу. И преломлению нужно что преломлять — над ровной поверхностью вроде белой карточки эффект практически нулевой; он заметен только там, где есть светотень, например на фото баннера
v1.9.34 Сайт 2026-10-02

Карточки стали чуть прозрачнее, свечение за курсором меньше, а закреплённая строка выезжает

  • Что изменилось: на странице игрока с баннером большие карточки теперь пропускают около 28 % фото вместо 5-10 % (его действительно видно), а ячейки статистики и карточка радара осветлены соответственно
  • Почему ячейки статистики выглядели двумя разными цветами: свечение за курсором было пятном холодно-синего цвета радиусом 320px при alpha .22. Когда оно накрывало левую половину карточки, первая ячейка измерялась как rgb(189,193,197), а четвёртая, вне пятна, —— rgb(245,246,247): разброс 56 уровней в одном ряду. Теперь пятно 200px при alpha .10, и ячейки больше не подсвечиваются сами (подсвечивается всегда самая внешняя карточка); в том же ряду разброс 3 уровня
  • Вторая половина «мерцания»: при переходе курсора с пустого места карточки на ячейку цель скрипта прыгала между всей карточкой и этой ячейкой, и свечение мгновенно превращалось из большого пятна в маленькую точку. Если убрать ячейки из подсветки, этот прыжок исчезает
  • У закрепления появился выезд: строка с именем опускается на 10px и проявляется под навигацией за 180ms. Если включено «уменьшить движение», эта анимация и пружина кнопок отключаются (свечение за курсором остаётся)
v1.9.33 Сайт 2026-10-02

Строка с именем теперь прилипает под навигацией при прокрутке

  • Что изменилось: на странице игрока с баннером при прокрутке вниз строка «аватар + имя + уровень + значки» закрепляется сразу под навигацией сайта, а карточки проходят под ней. Подпись в эту строку не входит и уезжает как раньше; кнопка «Назад» закрепляется вместе с именем
  • Почему `position: sticky` тут не годится: родитель этой строки —— .cdr-container, а он высотой только с шапку страницы, поэтому ход sticky заперт внутри него: за шапкой строка уезжает вместе со всем остальным. Поэтому строка сделана position: fixed, а скрипт вставляет на её прежнее место заполнитель той же высоты (fixed выводит её из потока; без заполнителя вся страница подпрыгивает на 86px в момент закрепления)
  • При закреплении приходится ещё и переворачивать цвет текста: обычно эта строка несёт белый текст поверх фото баннера, но закреплённая оказывается на светлом стекле, а белое на белом не видно (в измеренной сборке аватар и значок «в сети» были на месте, а ячейка имени полностью пустой). Поэтому закреплённое состояние переводит имя, уровень и значки в цвет чернил, используемый на стеклянных поверхностях
  • Затрагивает только страницы игроков, загрузивших баннер —— страницы без баннера (например, /players/zlc) не тронуты ни на байт
v1.9.32 Сайт 2026-10-02

Блик за курсором теперь подсвечивает только ту поверхность, которую должен

  • Причина была в наследовании пользовательских свойств. Скрипт ставит .is-lit на карточку под курсором, и --glass-spot спускается по цепочке наследования в каждый .stat-mini этой карточки —— один переключатель превращался в семь-восемь светящихся поверхностей. Именно это вы и увидели: «мышь в другом месте, почему всё загорелось?». Доказательство: в жёлтой строке пробы появился счётчик spot=, который считает не элементы с .is-lit, а сколько вычисленных значений --glass-spot не прозрачны —— до исправления курсор на пустой зоне заголовка карточки давал lit=1 spot=8/27
  • Исправление: каждая стеклянная поверхность теперь сама сбрасывает --glass-spot в transparent, и цепочка наследования обрывается на ней; .is-lit от скрипта получает только та поверхность, над которой действительно находится курсор. После изменения: spot=1/27
  • Вторая ловушка, исправленная попутно: у этого сброса та же специфичность, что и у правила .is-lit, и он написан ниже —— по принципу «побеждает последний» простой body.cdr-body .is-lit был бы полностью перекрыт и блик исчез бы совсем (измерено lit=1 spot=0/27). Поэтому правило .is-lit должно перечислить все четыре селектора и поднять специфичность. Пропустите этот шаг —— и ошибка из «светится слишком много» превратится в «не светится вообще»
  • Координаты теперь записываются синхронно при входе в новый элемент, а не только по requestAnimationFrame: иначе у первого кадра нет координат и блик вспыхивает в центре карточки, прежде чем перескочить к курсору. Теперь один .is-lit —— это одна светящаяся поверхность: где курсор, там и свет
v1.9.31 Сайт 2026-10-02

Жидкое стекло получило две тактильные детали: блик за курсором и пружинящие кнопки

  • Блик, следующий за курсором: когда курсор движется по стеклянной поверхности, за ним следует небольшое пятно холодного сине-белого света —— подсвечивается только карточка под курсором, остальное остаётся как было. Это слой radial-gradient, нарисованный в фоне карточки, который читает --glass-mx / --glass-my, записываемые скриптом на лету. Никаких лишних узлов, никакого вмешательства в контекст наложения и никаких помех размытию карточки. В светлой теме используется не белый, а холодный сине-белый: белую карточку (rgb 229~245) белым светом можно поднять лишь на 6 уровней, глаз этого не замечает
  • Более высокая фотополоса в шапке: нижний отступ .page-head вырос с 30px до 160px (около 317px всего), сдвигая весь ряд белых карточек вниз: аватар, имя и значок уровня теперь лежат прямо на изображении баннера —— это и есть «показать больше фона». Только высота, без нового содержимого, на маленьких экранах — 72px. Содержимое намеренно не сдвигалось целиком: это потратило бы самую тёмную часть верхней маски и сделало бы побелевшие строки нечитаемыми
  • Пружинящие кнопки: при нажатии сжимается до .955, при отпускании возвращается через cubic-bezier(.34, 1.56, .64, 1) —— у второй контрольной точки y = 1.56 > 1, поэтому кривая проскакивает цель и возвращается; этот заброс и есть «пружина». Чистый CSS, без JavaScript и без физического движка
  • Резервный режим prefers-reduced-motion теперь гасит только самостоятельное движение: пружина кнопки (которая сама отскакивает после отпускания) превращается в обычный короткий переход, отклик на нажатие сохраняется, а блик за курсором остаётся —— слежение за курсором это прямое управление: движется курсор, а не страница. Ваш собственный референс по жидкому стеклу говорит ровно это: убрать displacement, оставить blur и блик. Это ещё и единственный способ увидеть блик на этой машине: эффекты анимации Windows здесь выключены (MinAnimate = 0 / DragFullWindows = 0 / VisualFXSetting = 2), и браузеры честно сообщают об этом как reduce —— если завязать блик на это, он исчезнет навсегда
  • Всё перечисленное действует только на профили с загруженным баннером (блок по-прежнему внутри $pubBgCss !== ''); любая другая страница —— включая профили без баннера —— не изменилась ни на байт, и за этим следят четыре проверки в наборе тестов
  • Честное замечание: оба эффекта — про «ощущение», и на статичном скриншоте их не видно —— нужно действительно провести курсором по карточке и действительно нажать кнопку. Ещё стоит вернуть анимации Windows (Параметры → Специальные возможности → Визуальные эффекты → Эффекты анимации), иначе браузер сообщает всем сайтам, что пользователь просит меньше движения
v1.9.30 Сайт 2026-10-02

Жидкое стекло переделано: цвет карточек больше не меняется при прокрутке

  • Причина не в движке отрисовки. Страницы профиля вешали изображение баннера на body через background-attachment: fixed. Эта запись означает «изображение прикреплено к вьюпорту», и оно не является отдельным композитным слоем —— браузер обязан пересэмплировать его каждый кадр для backdrop-filter каждой карточки; когда окно сэмплирования и позиция прокрутки расходятся, цвет «прыгает». Одновременно карточки движутся, а изображение нет, поэтому каждая полупрозрачная карточка проезжает по всей фотографии. Вместе это и давало «то темнее, то светлее, то нормально»
  • Лечим мерцание при прокрутке: фон переехал с body в отдельный слой position: fixed (body::before, z-index: -1, pointer-events: none, will-change: transform). Отдельный слой может быть повышен до композитного, поэтому источник сэмплирования на протяжении всей прокрутки —— одна уже скомпонованная битмапа
  • Лечим разницу в покое: теперь карточки задают цвет сами. В основе линейная экстраполяция из измерений —— разброс ≈ (1−alpha)×53, чтобы удержаться в пределах 4 уровней нужно alpha ≥ .925. Большие карточки: 72 % → 95 % сверху и 60 % → 90 % снизу; плитки статистики: 80 %/70 % → 97 %/94 %; карточка радара: 76 %/66 % → 96 %/92 %. Фотография по-прежнему просвечивает на 5~10 % —— именно оттуда берётся оттенок стекла
  • Стекло теперь многослойный материал: слой шума + вертикальный градиент + скользящий блик по краю + внутренняя фаска преломления; все параметры вынесены в переменные (--glass-blur --glass-sat --glass-highlight --glass-displacement --glass-noise). Честное замечание: настоящее преломление через SVG feDisplacementMap здесь недостижимо —— Chromium и Safari принимают в backdrop-filter только функции фильтров, но не url(#svgfilter); внутренняя фаска лишь приближает этот вид, а не имитирует его
  • Результат: в одной и той же точке разброс при прокрутке теперь всего 3~6 уровней (18 в прошлой версии, 100 изначально), общая яркость 229~245, в тёмной теме — всего 1~3 уровня. Заодно убрано свечение text-shadow на стеклянных поверхностях —— при стабильной карточке оно уже не помогает и лишь съедает штрихи 12-пиксельного текста
  • Также исправлено «подписи радара способностей плохо читаются»: прозрачность не тронута вовсе. Подписи «среднее по серверу» просто перешли с .76rem на .84rem основной строки, с приглушённого серого на цвет основного текста, плюс немного насыщенности. Настоящая причина в том, что CJK 12 px и 13 px в Windows идут по разным путям сглаживания. Всё перечисленное затрагивает только профили с загруженным баннером; на страницах без баннера не изменился ни один байт
v1.9.29 Сайт 2026-10-02

Яркость карточек больше не меняется при прокрутке

  • Причина — не ошибка отрисовки. На страницах профиля для баннера задан background-attachment: fixed: изображение прикреплено к вьюпорту, а карточки прокручиваются поверх него —— каждая полупрозрачная карточка «проезжает» по всей фотографии: на тёмном небе тускнеет, на светлых зданиях выцветает. Одна и та же карточка в зависимости от положения давала от rgb(99,107,125) до rgb(201,197,200) —— разброс в 100 уровней
  • Исправление — сделать само стекло плотнее, ведь alpha это единственный рычаг, сохраняющий и прозрачность, и стабильность: большие карточки — с 56 % → 72 % сверху и с 34 % → 60 % снизу; плитки статистики — с 76 %/60 % → 80 %/70 %; карточка радара — с 70 %/52 % → 76 %/66 %. Порядок плотности (большие карточки самые светлые, плитки самые плотные) не изменился
  • Результат: в одной и той же точке разброс при прокрутке теперь всего 14 уровней вместо 47, а общая яркость держится в диапазоне 163~206 —— явно светлая матовая поверхность вместо мутно-серой. Тёмная тема уплотнена соответственно (уровень 82 %/72 %), там остаточный разброс — всего 4~8 уровней
  • Затронуты только профили с загруженным баннером. Страницы без баннера (например, /players/zlc) этот стиль стекла вообще не выводят —— там не изменился ни один байт
v1.9.28 Сайт 2026-10-02

«86 часов игры в сутки» исправлено

  • Прежняя формула была «общее время игры ÷ дни с записями сессий» —— числитель охватывает десять лет, а знаменатель — только 11 дней после 2026-09-12. Деление двух разных эпох давало «86 часов в сутки». Числитель не был ошибочным; в знаменателе не хватало большей части
  • Теперь знаменатель — это общее число активных дней: сообщения чата, полученные достижения и игровые сессии объединяются по дням —— для этого аккаунта 423 дня. 941 час ÷ 423 дня = 2 часа в сутки, порядок величины наконец верный
  • Заодно исправлены ещё две вещи: число входов теперь берётся за всё время (1 655, тогда как у 929 старых игроков показывался 0), а самая долгая сессия больше не может показывать невозможную пару «в среднем 21 минута, максимум 0 часов»
  • Также разблокированы три достижения: 7 / 30 / 100 активных дней были недостижимы из-за того же знаменателя —— на всём сервере записи сессий покрывали лишь 16 дней, пороги оставались вне пределов досягаемости
  • Аудит безопасности, часть первая: закрыт ряд реально эксплуатируемых уязвимостей —— CSS-экранирование позволяло спрятать внешнюю ссылку внутри загруженного SVG (через аватар можно было узнать IP посетителей), из админпанели можно было удалить файлы за пределами uploads, у входа была открытая переадресация, скрипт внутри архива резервной копии мог установиться как веб-оболочка, а два локальных отладочных скрипта были доступны в интернете
  • Аудит безопасности, часть вторая: усиление API и админпанели —— пустой список больше не может одним запросом снять все блокировки на сервере, у отчётов появились ограничения по строкам, имена в белом списке проверяются, одна сбойная строка чата больше не роняет всю партию, а ошибки базы данных не показывают подробности посетителям
v1.9.27 Сайт 2026-10-02

Мелкий текст в блоке радара теперь читается

  • Мелкий текст в блоке «радар способностей» (названия осей, числа справа, строки «среднее по серверу» и примечание ниже) лежал на стекле 34 %, самые тёмные участки которого давали всего 3,3 : 1 контраста —— меньше 4,5 : 1, необходимых для мелкого шрифта. Это и есть ваше «не читается», и это моя недоработка в прошлой версии
  • Две правки: цвет вторичного текста стал на ступень темнее, а блок радара получил собственную подложку —— почти все строки этой карточки набраны мелким шрифтом, поэтому она не должна делить одну прозрачность с большими карточками
  • Большие карточки не тронуты: карточка скина, карточка достижений и подвал по-прежнему на 34 %, картинка за ними так же просвечивает, а плитки статистики сохранили свою более плотную подложку
  • Тёмная тема получила то же самое. И это по-прежнему происходит только на страницах, владельцы которых загрузили баннер —— страницы без баннера не сдвинулись ни на пиксель
v1.9.26 Сайт 2026-10-02

Ещё на ступень прозрачнее —— и текст по-прежнему читается

  • Профили: верх с 62 % до 56 %, низ с 40 % до 34 %. Изображение позади теперь действительно видно —— вертикальные полосы огней, линия горизонта и блочные силуэты просвечивают, а не сплошная матовая плита
  • «Видеть картинку» и «читать текст» мешают друг другу, поэтому они разведены: плитки статистики (места скопления мелкого текста вроде «всего наиграно» и «входов») сохраняют собственную более плотную подложку (76 % → 60 %), а крупные карточки остаются очень прозрачными. Малое плотнее, большое прозрачнее —— обратный обычной иерархии Apple порядок, и намеренно
  • У текста появился очень слабый ореол в ту же сторону (text-shadow) —— незаметный на светлом фоне и проявляющийся только на тёмном: так шрифт несёт собственную локальную подложку. Именно это позволяет опуститься до 34 %
  • Тёмная тема получила соответствующие тёмное стекло и тёмный ореол. И всё это по-прежнему происходит только на страницах, владелец которых загрузил баннер —— страницы без баннера не сдвинулись ни на пиксель
v1.9.25 Сайт 2026-10-01

Стекло стало прозрачнее и больше похоже на Apple

  • Профили: вместо ровных «68 % белого» теперь вертикальный градиент —— светлый сверху и более прозрачный снизу (62 % → 40 %), размытие по Гауссу выросло с 22 px до 32 px, добавлены saturate(180%) и brightness(1.12). Стекло в стиле Apple подхватывает цвет позади и слегка его поднимает; одно лишь размытие даёт просто матовость
  • У стекла появился преломляющий край по всему периметру —— скользящий блик 1 px сверху и очень слабый внутренний контур. Тень разделена на два слоя (плотная контактная и широкая рассеянная), чтобы пластина казалась парящей над изображением, а не наклеенной на него, как бумага
  • Исправлено то, что вылезло только после осветления стекла: второстепенные подписи вроде «всего наиграно» и «входов» были почти не видны —— их серый на полупрозрачном белом даёт всего 2,5:1. Теперь внутри стекла они темнее на ступень, а мелкий текст прямо на баннере не тронут
  • Тёмная тема получила свой набор значений для тёмного стекла. И всё это по-прежнему происходит только на страницах, владелец которых загрузил баннер —— страницы без баннера не сдвинулись ни на пиксель
v1.9.24 Сайт 2026-10-01

Профили стали «жидким стеклом»

  • Карточки, панель скина, шесть плиток статистики и весь подвал теперь полупрозрачное стекло (68 % белого + размытие по Гауссу 22 px), сквозь которое просвечивает размытый баннер. Текст остался тёмным и читается поверх картинки; в тёмной теме стекло становится тёмным
  • В заголовке карточки достижений появились «Свернуть все» / «Развернуть все» —— все 8 категорий сразу, больше не нужно прокручивать до самого низа стены из 98 значков
  • В панели управления справа внизу появилась четвёртая вкладка «Аватары / Фоны», где можно одобрить или отклонить ожидающие загрузки. Это те же данные, что и в «Игроки и данные → Аватары / фоны» —— проверять можно откуда угодно
  • Всё это происходит только на страницах, владелец которых загрузил баннер —— страницы персонажей без баннера не сдвинулись ни на пиксель (я сравнил снимки до и после попиксельно)
  • Там, где стекло недоступно (старые браузеры), возвращаются прежние непрозрачные карточки. А вот системную настройку «уменьшить прозрачность» мы намеренно не соблюдаем —— на Windows у владельца сайта эффекты прозрачности отключены, и если её соблюдать, он сам никогда не увидит стекло
v1.9.23 Сайт 2026-10-01

Страница профиля теперь может занимать весь экран

  • Фон —— если вы загрузили баннер, страница персонажа использует это изображение, чтобы заполнить всё окно браузера, а аватар, имя, уровень и местоположение ложатся сверху. Страницы без баннера не меняются ни на пиксель
  • Местоположение —— в разделе «Я» → «Персонализация» можно выбрать страну (а для Китая ещё и провинцию); оно появится в профиле рядом с «не в сети / место #8». Не выбрали —— ничего не показывается
  • Аватары в списке игроков теперь предпочитают загруженный вами. Раньше всегда запрашивался официальный аватар скина с зарубежного хоста, который здесь почти никогда не загружается —— отсюда и цветные квадратики с буквами
  • Загруженные аватары и фоны проходят проверку перед публикацией. Пока новая ждёт, показывается прежняя картинка, поэтому «наполовину новой» страницы не бывает; а удаление действует сразу
  • Лимит загрузки расширен: баннеры до 3840×2160 (было 1920×1080), и теперь принимается SVG —— SVG очищается: скрипты, внешние ссылки и встроенный HTML удаляются
v1.9.22 Сайт 2026-10-01

Новые окна · и старые баны вернулись

  • Все 16 всплывающих окон сайта теперь используют собственный диалог. Раньше это были окна самого браузера с заголовком «cloudridge.cn сообщает» —— на телефоне они особенно выбивались, а стиль сайта не соблюдался вовсе. Теперь заголовки, текст и кнопки наши; опасные действия помечены красной кнопкой, Esc отменяет, Enter подтверждает, а фокус возвращается на нажатую кнопку
  • 8 игроков и 3 IP, всё ещё забаненные к моменту закрытия старого сервера, возвращены в список: публичная страница теперь показывает 12 игроков и 7 IP. Имена, IP, время бана и исполнители перенесены из архивов дословно, ничего не выдумано. Оговорка: мод лишь читает файлы банов сервера и передаёт их —— кого реально блокируют в игре, по-прежнему решает список сервера, поэтому ему нужно перечитать файлы
v1.9.21 Сайт 2026-10-01

Тот «неизвестный игрок» — это тот же человек

  • В списке игроков всегда висела строка «未知玩家 · 000000» (неизвестный игрок), будто четвёртый, никем не посчитанный человек. Причина выяснена: floodgate старого сервера выдавал игрокам Bedrock UUID из служебного диапазона 00000000-0000-0000-0009-…, а мод мог сообщить только *имя* —— и в тот момент именем оказался сам этот UUID. На самом деле это был birdzhonghuifei, игравший с Bedrock; строку присоединили к её владельцу
  • Правило объединения: счётчики (время игры, входы, смерти, добытые и поставленные блоки, расстояние) складываются, достижения объединяются, а первый вход берёт более раннюю из двух дат, последний визит — более позднюю —— складывать метки времени нельзя. Все девять значков с этой строки у владельца уже были, дубликаты отброшены. В таблице стало на строку меньше, а цифры birdzhonghuifei теперь полнее
v1.9.20 Сайт 2026-10-01

В календаре можно сразу перейти к любому месяцу

  • В окне календаря слева вверху появились два списка — год и месяц: выбрали год, выбрали месяц, и вы в два щелчка от любого месяца —— больше не нужно листать по одному месяцу кнопкой ‹. Кнопки «назад/вперёд» и «Сегодня» остались, а списки следуют за перелистыванием
  • Заодно исправлена ошибка сортировки: при сортировке по «первому входу» строки с неизвестной датой поднимались на 1–4 места, и вся таблица выглядела сломанной —— «нет значения» не то же самое, что «самый ранний». Теперь такие строки уходят в конец списка при любом направлении
v1.9.19 Сайт 2026-10-01

Восстановлено ещё 229 сообщений чата

  • Журнал плагина TrChat начинается только с 2023-09-01, поэтому часть второй половины 2024 года отсутствовала. В трёх никогда не импортированных базах CoreProtect со старых серверов нашлось 34 417 сообщений за 2024-07 — 2024-12; после удаления дублей это чистые 229 сообщений за 37 дней, самое раннее — 2024-07-11
  • Дубли определяются по правилу «этот игрок уже сказал то же самое в пределах ±5 секунд» —— одно и то же сообщение записано и в TrChat, и в CoreProtect, их метки времени обычно различаются на секунду и иногда переходят через минуту; сравнение по минутам пропустило бы эти несколько десятков как дубли
  • Эти 37 дней не были пустыми изначально —— TrChat записал большую часть; вернулись отдельные строки, которые он пропустил. Теперь при просмотре этих дней с июля по декабрь 2024 года разговор виден полнее
v1.9.18 Сайт 2026-10-01

Персонажи одного аккаунта теперь раскрываются

  • Строки списка игроков, у которых больше одного персонажа, теперь начинаются со стрелки: по умолчанию свёрнуто, одно нажатие разворачивает каждого персонажа в отдельную строку с его временем игры, числом входов, последним входом и статусом (главная строка — сумма, вложенные — отдельные значения). Повторное нажатие сворачивает обратно
  • Поиск по имени дополнительного персонажа автоматически разворачивает эту строку —— поиск Winter сразу показывает его цифры рядом с Fruity_oxygen, и не нужно угадывать, под чьим именем он прячется. Попутно исправлена старая ошибка: при сортировке по имени игрока в шапке было на одну колонку меньше, чем в теле, и вся таблица съезжала
v1.9.17 Сайт 2026-10-01

Рейтинг по аккаунтам · три года переписки восстановлены

  • Список игроков теперь показывает одну строку на аккаунт сайта: персонажи одного аккаунта суммируются (Fruity_oxygen и Winter объединяются в одну строку, ElfinLettuc и Faithe — в другую), а те, кто не привязывал аккаунт, сохраняют свою строку. Значок «N персонажей» рядом с именем показывает, кто с кем объединён, — прежний рейтинг разносил основной и дополнительный аккаунты по разным строкам, и казалось, что на дополнительном время потрачено зря
  • Новая страница аккаунта (/accounts/<id>): каждый персонаж аккаунта перечислен отдельно со своим временем игры и числом входов, а сводные цифры сверху — их сумма. Страница полностью публична, вход не нужен. Попутно исправлена одна некорректная запись: персонаж ссылался на несуществующий идентификатор аккаунта
  • Заполнены три поля, которые застряли на фиктивных значениях: последний вход (929 персонажей указывали 2026-09-13), первый вход (936 столь же ложных 2026-09-13) и число входов (всего 291 по сайту, у 928 игроков стояло «—»). Последний вход берётся из времени изменения файлов сохранения сервера, первый вход и число входов — из журналов всех поколений сервера. Теперь wwwsum честно показывает 2024-08-22, а 7Strawberry — 2024-03-07, и суммарное число входов выросло с 291 до 21 766
  • Панель чата вернула всю переписку с момента открытия сервера: от первой строки 2022-12-16 до момента, когда 2026-09-25 эстафету приняла передача данных от мода, — это 174 457 сообщений и записей о входе/выходе (124 024 сообщения, 25 424 входа, 25 009 выходов). Раньше история была только за те несколько дней, когда стоял мод; теперь любой день, выбранный на веб-карте, показывает переписку того дня
  • Календарь делал кликабельными только последние 400 дней, поэтому 492 из 729 восстановленных дней не открывались — восстановлены, но недоступны. Теперь каждый день с записями кликабелен. Кроме того, число «зарегистрированных игроков» различалось на 2 между главной страницей и списком (791 против 789); теперь оба используют подсчёт по аккаунтам

Даты — это дата выхода соответствующей версии. Нашёл новую проблему — напиши на форуме или сразу владельцу сервера.