витрина ФДОткрыть макеты

Журнал на бланке

Бумага и чернила, красный только у того, что не сошлось, тонкие линии и радиус 2 px. Таблица с настоящими данными вместо картинок, одна карточка-документ на экран. Всё на этой странице собрано из packages/ui, теми же стилями, что на страницах продукта.

Цвет

Бумага и чернила. Цвет не обозначает исход: сошедшийся расчёт набирается чернилами, красный значит одно, не сошлось или сорвано, охра значит ожидание (docs/ui-colors.md). Тёмная тема включается настройкой системы и держит те же роли. Числа ниже посчитаны по формуле WCAG от этих значений; замер по пикселям под глифами лежит в отчёте.

ПеременнаяСветлаяКонтраст: бумага / поверхность / пов.-2ТёмнаяКонтраст
--paper
бумага, фон страницы
#f7f4eeфон #121418фон
--surface
поверхность: карточка, поле, лист
#fdfcfaфон #181b20фон
--surface-2
поверхность-2: ожидание, выделение
#efebe3фон #21252bфон
--text
основной текст и чернила кнопки
#15191f16,1 / 17,2 / 14,8 #f2eee615,9 / 14,9 / 13,3
--text-2
второй текст: пояснения
#4e555e6,9 / 7,4 / 6,3 #bdb7ac9,2 / 8,7 / 7,7
--text-3
третий текст: подписи, шапки таблиц
#5c636c5,5 / 5,9 / 5,1 #a8a2967,3 / 6,8 / 6,1
--match
совпало: чернила, точка и текст
#15191f16,1 / 17,2 / 14,8 #f2eee615,9 / 14,9 / 13,3
--band-match
полоса Совпало; слово на ней белое, в тёмной теме чернила
#15191fфон #f2eee6фон
--band-mismatch
полоса Не совпало, слово белое
#b3261eфон #b3261eфон
--mismatch
не совпало, ошибки полей
#b3261e6,0 / 6,4 / 5,5 #ff7b727,3 / 6,8 / 6,1
--wait
ожидание: текст 14-16 px
#7e5b005,7 / 6,1 / 5,2 #d9a4418,2 / 7,7 / 6,8
--wait-dot
ожидание: точка 8 px и крупный кегль
#8a64004,9 / 5,2 / 4,5 #d9a4418,2 / 7,7 / 6,8
--line-field
рамка поля и вторичной кнопки
rgba(21,25,31,.5)3,3 / 3,4 / 3,2 rgba(242,238,230,.5)4,7 / 4,6 / 4,4
--line-doc
внешняя линия двойной рамки
rgba(21,25,31,.45)2,9 / 2,9 / 2,8 rgba(242,238,230,.42)3,7 / 3,7 / 3,6
--line
разделители таблиц, внутренняя линия рамки
rgba(21,25,31,.12)1,3 / 1,3 / 1,3 rgba(242,238,230,.12)1,4 / 1,4 / 1,4

Плашка OBS

РольЗначениеКонтраст к #15191F
подложка rgba(21,25,31,.92)фон
текст #f7f4ee16,1
ожидание #d9a4417,8

Третий текст на плашке не используется: поверх игры он даёт от 2,6 до 3,3.

Подсветка кода

#e3c27aстрока, значение10,3
#8fd1a8команда, ключ10,0
#9aa1aaкомментарий, подсказка6,8

Шрифт и шкала

Одно семейство Golos Text: 400 и 500 для текста, 600 для заголовков с трекингом −0,02 em, курсива нет. JetBrains Mono 400 и 500 с перечёркнутым нулём для отпечатков, раундов и номеров. Цифры везде табличные.

Журнал отметок

display 64/68 · 40/44

Розыгрыш, который можно проверить

h1 48/52 · 34/38

Что публикуем и когда

h2 32/38 · 26/32

Квитанция участника

h3 22/28

Победителя считает формула из условий, и расчёт повторяется в браузере зрителя.

текст 17/28 · 16/26

Приём закрыт в 14:26:48, 1000 участников.

мелкий 14/20

Запись Rekor · раунд drand

моно-подпись 12/16, капс, 0,06 em
dd948d312e6e28ff059af59ec92ea955d0187b9d4cf8abab4adcb9d5d50faef7моно-код 14/22, группы по четыре

Не совпало

итог 72/76 · 56/60 от 430 · 48/52

Русская вёрстка

Сплошной текст по ширине с красной строкой и переносами. Предлоги и короткие слова держатся за следующее слово, частицы за предыдущее. Если в строке меньше 34 знаков, текст идёт влево; внутри карточки-документа на телефоне тоже.

До начала приёма условия розыгрыша и обязательство на секретное число записаны в журнал сервиса, а отпечаток журнала отмечен в Sigstore Rekor, внешнем открытом журнале. Когда приём закрыли, туда же ушёл отпечаток списка участников, и с тех пор список не менялся. Число drand выходит позже закрытия. Победителя считает формула из условий, и расчёт повторяется в вашем браузере.

Журнал доказывает, что записанное никто не менял, но не доказывает, что организатор передал все события. Квитанция говорит, что запись принята, но не говорит, чья она. Запись положена одна на каждый аккаунт площадки, а не на каждого человека. Если вашей записи нет в списке, покажите квитанцию организатору и сервису.

Деньги через сервис не проходят, победителя он не выбирает, призы выдаёт организатор. Эта страница не одобряет организатора, его продукты и услуги и не подтверждает законность акции.

dd948d312e6e28ff059af59ec92ea955d0187b9d4cf8abab4adcb9d5d50faef7
коды ячейками по четыре, совпавшие ячейки подчёркнуты

Кнопки

Высота 48, малая 40. Одна акцентная кнопка на экран, остальные вторичные с линией поля. Фокус: кольцо 2 px чернилами с отступом 2 px. Подпись не переносится; на 320 px допускаются две строки.

48 · основная и вторичная
40 · малая, с иконкой, тихая
недоступна · фокус

Поля

Поле бланкового вида: нижняя линия, как графа на бумаге. Подпись 13/18 над полем, ошибка красным текстом под ним: что не так и как поправить.

Приз даёт стример
Закрыть раньше можно, позже нельзя
Начало позже конца. Поставьте начало раньше 22:00.
Необязательно, до 500 знаков
Главный выигрыш вечера: наушники
Слово выигрыш на стриме нельзя: приз даёт стример, участие бесплатное. Напишите, что именно разыгрывается.

Таблицы

Шапка моноширинным капсом, линии только горизонтальные, цифры табличные. Высота строки журнала постоянная: новая строка не сдвигает страницу.

МоментСобытиеКореньRekor
15:40:01Итог записанрозыгрыш 202610181236459a82 b90328
15:40:00Секретное число раскрыторозыгрыш 202610181236459ec0 12de27
15:38:57Приём закрытрозыгрыш 2026101812364597c0 c88a26
15:36:45Условия зафиксированырозыгрыш 20261018123645a7cb 9d3825

пример отметки стенда за 18 октября

Список участников

  • запись № 70114:26:46
  • запись № 70014:26:45
  • запись № 69914:26:44
  • записываем…14:26:47

В списках только номер записи и время, без имён и псевдонимов.

Вкладки

Подчёркивание 2 px у выбранной, остальные вторым цветом текста. Счётчик рядом с названием моноширинным.

Приём открыт до 22:00. Последние записи появляются сверху.

Статусы

Точка 8 px и слово, цвет никогда не работает один. Галочка и крест бывают только внутри статуса.

совпалоне совпалоожиданиене проверено
точка и слово
в канале в реестре: досылаемкод не подходит
шаги и проверки с временем

Полоса итога проверки

Во всю ширину, высота по содержимому, никогда внутри рамки. Крупных слов два: совпало на чернилах, не совпало на красном. Под словом Совпало одна строка о том, кого назвал расчёт; время пересчёта стоит под кнопкой. Ожидание набирается заголовком с точкой на поверхности-2, оговорка идёт строкой под словом. Это компоненты страницы проверки как есть.

Совпало

победитель: запись № 207

Отпечаток списка опубликован в канале в 14:26:53, до выхода числа; запись в Rekor появилась позже.

Не совпало

пересчитано в браузере за 51 мс

Ещё рано: число выйдет в 14:27:51

по данным сервера

  1. Условия те же, что до стартасовпало

    Что сравнивали, отпечатки рядом и ссылки наружу.

  2. Список тот же, что при закрытиисовпало

    Что сравнивали, отпечатки рядом и ссылки наружу.

  3. Число подписано сетью drandсовпало

    Что сравнивали, отпечатки рядом и ссылки наружу.

  4. Победитель посчитан верносовпало

    Что сравнивали, отпечатки рядом и ссылки наружу.

Четыре строки: условия те же, что до старта; список тот же, что при закрытии; число подписано сетью drand; победитель посчитан верно.

Отпечаток

Моноширинный, группами по четыре. В тесной строке сокращается до первых и последних четырёх знаков, по нажатию копируется целиком.

1ab51b4f3e9c6a5850d6087c7c2f2de5cb978f6765098e0573f2bfb0f7afe42cполный, 64 знака
сокращённый, копирует по нажатию

Номер раунда drand

Живой раунд сети quicknet из браузера к четырём зеркалам. Полоска хода идёт от прихода последнего раунда на период 3 с, часы телефона не участвуют. Если зеркала молчат, полоска стоит и строка говорит, какой раунд и когда пришёл.

33 173 169
получен 14:27:51 · случайность 8f061bdcРаунд на момент сборки страницы, ждём зеркала drand.
моно 28, табличные цифры, полоска 2 px; до первого ответа зеркал стоит раунд из HTML

Квитанция

Единственная двойная рамка на экране: запись с номером и датой. Внутри карточки всё по левому краю. Основной путь сохранить файл или картинку с QR, копия в браузере это удобство.

Квитанция · розыгрыш № 31818.10.2026

№ 207

Запись принята в 21:52:10.

Канал
primer_live
Приз
Наушники с шумоподавлением
Итог
около 22:01:03, страница обновится сама
Код
3f9a0c7e51d2b8a46e0f93c1d7b2a584

Копия в браузере живёт около недели, файл хранится всегда. Мои розыгрыши это удобство, а доказательство это файл.

Пустые состояния и ошибки

Пустое состояние: одна фраза и одно действие. Ошибка: что случилось и что делать.

Пока никого: покажите QR в камеру.

Вы ещё не участвовали. Розыгрыши открываются по QR со стрима.

Квитанция не от нашего сервера

Подпись не сходится ни с одним ключом сервиса. Проверьте, что файл взят со страницы розыгрыша, или напишите стримеру.

Нет связи с сервером

Счётчик обновится сам, когда связь вернётся. Приём при этом идёт.

Иконки

Свои, на сетке 20, линия 1,5 px, концы и стыки прямые. Двенадцать штук, больше не заводим.

  • копировать
  • наружу
  • скачать
  • печать
  • раскрыть
  • закрыть
  • поиск
  • QR
  • ссылка OBS
  • настройки
  • галочка
  • крест
те же в 40 px: сетка видна

Знак

Квадрат в двойной рамке на своей поверхности. Длинный штрих галочки идёт через углы обеих рамок и выходит наружу: отметка сделана внутри и вынесена. Пустой квадрат значит, что итога ещё нет; что именно происходит, говорят слова рядом.

СостояниеСветлаяТёмная
приём открыт
ждём число
итог посчитан
приостановлено
такой акции нет

16, 24 и 32 px

На стриме

стримовый вариант: розыгрыш, без перехода в реестр

Код

Тёмный блок для команд и файлов, три цвета подсветки без неона.

# пересчитать розыгрыш без браузера
python -m notarius_verify https://verify.vdraw.31.130.135.237.nip.io/d/e2e-20261018112438/

Плашка OBS

Одна тёмная тема поверх игры. Любой текст не меньше 40 px на холсте 1920×1080, счётчик и номер записи итога 72, линии не тоньше 2 px. Итог появляется карточкой за 240 мс, барабана нет.

розыгрыш, приём открыт
итог карточкой
пусто, рамка в предпросмотре

Движение

Движется только то, что происходит на самом деле. Анимации только transform и opacity. Если в системе включено уменьшение движения, всё видно сразу.

  1. 1Пульс drandоткрытьНомер раунда, время прихода и первые восемь знаков; кроссфейд 200 мс; полоска от прихода раунда.
  2. 2Лента отметокоткрытьНовая строка входит сверху со сдвигом 8 px за 240 мс, последняя уходит снизу, высота списка постоянная.
  3. 3Путь по деревуоткрытьНа странице проверки по кнопке: узлы от записи к корню, не дольше 600 мс.
  4. 4Колесо, черновикоткрытьСтоит, пока раунд не вышел; потом разгон 300 мс и торможение 5 с, только rotate.

Лента

15:40:01Итог записанрозыгрыш 202610181236459a82 b90328
15:40:00Секретное число раскрыторозыгрыш 202610181236459ec0 12de27
15:38:57Приём закрытрозыгрыш 2026101812364597c0 c88a26
15:36:45Условия зафиксированырозыгрыш 20261018123645a7cb 9d3825
14:27:55Итог записанрозыгрыш 202610181124386d02 69e021
В витрине строку добавляете вы; на главной она приходит с сервера.

Макеты

Ключевые экраны на статических данных стенда, на каждом пометка пример.