Бумага и чернила, красный только у того, что не сошлось, тонкие линии и радиус 2 px. Таблица с настоящими данными вместо картинок, одна карточка-документ на экран. Всё на этой странице собрано из packages/ui, теми же стилями, что на страницах продукта.
Цвет
Бумага и чернила. Цвет не обозначает исход: сошедшийся расчёт набирается чернилами, красный значит одно, не сошлось или сорвано, охра значит ожидание (docs/ui-colors.md). Тёмная тема включается настройкой системы и держит те же роли. Числа ниже посчитаны по формуле WCAG от этих значений; замер по пикселям под глифами лежит в отчёте.
Переменная
Светлая
Контраст: бумага / поверхность / пов.-2
Тёмная
Контраст
--paper бумага, фон страницы
#f7f4ee
фон
#121418
фон
--surface поверхность: карточка, поле, лист
#fdfcfa
фон
#181b20
фон
--surface-2 поверхность-2: ожидание, выделение
#efebe3
фон
#21252b
фон
--text основной текст и чернила кнопки
#15191f
16,1 / 17,2 / 14,8
#f2eee6
15,9 / 14,9 / 13,3
--text-2 второй текст: пояснения
#4e555e
6,9 / 7,4 / 6,3
#bdb7ac
9,2 / 8,7 / 7,7
--text-3 третий текст: подписи, шапки таблиц
#5c636c
5,5 / 5,9 / 5,1
#a8a296
7,3 / 6,8 / 6,1
--match совпало: чернила, точка и текст
#15191f
16,1 / 17,2 / 14,8
#f2eee6
15,9 / 14,9 / 13,3
--band-match полоса Совпало; слово на ней белое, в тёмной теме чернила
#15191f
фон
#f2eee6
фон
--band-mismatch полоса Не совпало, слово белое
#b3261e
фон
#b3261e
фон
--mismatch не совпало, ошибки полей
#b3261e
6,0 / 6,4 / 5,5
#ff7b72
7,3 / 6,8 / 6,1
--wait ожидание: текст 14-16 px
#7e5b00
5,7 / 6,1 / 5,2
#d9a441
8,2 / 7,7 / 6,8
--wait-dot ожидание: точка 8 px и крупный кегль
#8a6400
4,9 / 5,2 / 4,5
#d9a441
8,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)
фон
текст
#f7f4ee
16,1
ожидание
#d9a441
7,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 выходит позже закрытия. Победителя считает формула из условий, и расчёт повторяется в вашем браузере.
Журнал доказывает, что записанное никто не менял, но не доказывает, что организатор передал все события. Квитанция говорит, что запись принята, но не говорит, чья она. Запись положена одна на каждый аккаунт площадки, а не на каждого человека. Если вашей записи нет в списке, покажите квитанцию организатору и сервису.
Деньги через сервис не проходят, победителя он не выбирает, призы выдаёт организатор. Эта страница не одобряет организатора, его продукты и услуги и не подтверждает законность акции.
коды ячейками по четыре, совпавшие ячейки подчёркнуты
Кнопки
Высота 48, малая 40. Одна акцентная кнопка на экран, остальные вторичные с линией поля. Фокус: кольцо 2 px чернилами с отступом 2 px. Подпись не переносится; на 320 px допускаются две строки.
48 · основная и вторичная
40 · малая, с иконкой, тихая
недоступна · фокус
Поля
Поле бланкового вида: нижняя линия, как графа на бумаге. Подпись 13/18 над полем, ошибка красным текстом под ним: что не так и как поправить.
Приз даёт стример
Закрыть раньше можно, позже нельзя
Начало позже конца. Поставьте начало раньше 22:00.
Необязательно, до 500 знаков
Главный выигрыш вечера: наушники
Слово выигрыш на стриме нельзя: приз даёт стример, участие бесплатное. Напишите, что именно разыгрывается.
Таблицы
Шапка моноширинным капсом, линии только горизонтальные, цифры табличные. Высота строки журнала постоянная: новая строка не сдвигает страницу.
Момент
Событие
Корень
Rekor
15:40:01
Итог записанрозыгрыш 20261018123645
9a82 b903
28
15:40:00
Секретное число раскрыторозыгрыш 20261018123645
9ec0 12de
27
15:38:57
Приём закрытрозыгрыш 20261018123645
97c0 c88a
26
15:36:45
Условия зафиксированырозыгрыш 20261018123645
a7cb 9d38
25
пример отметки стенда за 18 октября
Список участников
запись № 70114:26:46
запись № 70014:26:45
запись № 69914:26:44
записываем…14:26:47
В списках только номер записи и время, без имён и псевдонимов.
Вкладки
Подчёркивание 2 px у выбранной, остальные вторым цветом текста. Счётчик рядом с названием моноширинным.
Приём открыт до 22:00. Последние записи появляются сверху.
Итог появится после выхода числа drand.
Предъявленных квитанций нет.
Статусы
Точка 8 px и слово, цвет никогда не работает один. Галочка и крест бывают только внутри статуса.
совпалоне совпалоожиданиене проверено
точка и слово
в канале в реестре: досылаемкод не подходит
шаги и проверки с временем
Полоса итога проверки
Во всю ширину, высота по содержимому, никогда внутри рамки. Крупных слов два: совпало на чернилах, не совпало на красном. Под словом Совпало одна строка о том, кого назвал расчёт; время пересчёта стоит под кнопкой. Ожидание набирается заголовком с точкой на поверхности-2, оговорка идёт строкой под словом. Это компоненты страницы проверки как есть.
Совпало
победитель: запись № 207
Отпечаток списка опубликован в канале в 14:26:53, до выхода числа; запись в Rekor появилась позже.
Не совпало
пересчитано в браузере за 51 мс
Ещё рано: число выйдет в 14:27:51
по данным сервера
Условия те же, что до стартасовпало
Что сравнивали, отпечатки рядом и ссылки наружу.
Список тот же, что при закрытиисовпало
Что сравнивали, отпечатки рядом и ссылки наружу.
Число подписано сетью drandсовпало
Что сравнивали, отпечатки рядом и ссылки наружу.
Победитель посчитан верносовпало
Что сравнивали, отпечатки рядом и ссылки наружу.
Четыре строки: условия те же, что до старта; список тот же, что при закрытии; число подписано сетью 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
На стриме
стримовый вариант: розыгрыш, без перехода в реестр
Логотип
Имя набрано Golos Text 600 и переведено в кривые, перед ним знак без подложки. Короткая форма для панели и узких мест.
полный, 40 px
короткий, 32 и 24 px
Код
Тёмный блок для команд и файлов, три цвета подсветки без неона.
# пересчитать розыгрыш без браузераpython -m notarius_verifyhttps://verify.vdraw.31.130.135.237.nip.io/d/e2e-20261018112438/
Плашка OBS
Одна тёмная тема поверх игры. Любой текст не меньше 40 px на холсте 1920×1080, счётчик и номер записи итога 72, линии не тоньше 2 px. Итог появляется карточкой за 240 мс, барабана нет.
розыгрыш, приём открытитог карточкойпусто, рамка в предпросмотре
Движение
Движется только то, что происходит на самом деле. Анимации только transform и opacity. Если в системе включено уменьшение движения, всё видно сразу.
1Пульс drandоткрытьНомер раунда, время прихода и первые восемь знаков; кроссфейд 200 мс; полоска от прихода раунда.
2Лента отметокоткрытьНовая строка входит сверху со сдвигом 8 px за 240 мс, последняя уходит снизу, высота списка постоянная.
3Путь по деревуоткрытьНа странице проверки по кнопке: узлы от записи к корню, не дольше 600 мс.
4Колесо, черновикоткрытьСтоит, пока раунд не вышел; потом разгон 300 мс и торможение 5 с, только rotate.
Лента
15:40:01
Итог записанрозыгрыш 20261018123645
9a82 b903
28
15:40:00
Секретное число раскрыторозыгрыш 20261018123645
9ec0 12de
27
15:38:57
Приём закрытрозыгрыш 20261018123645
97c0 c88a
26
15:36:45
Условия зафиксированырозыгрыш 20261018123645
a7cb 9d38
25
14:27:55
Итог записанрозыгрыш 20261018112438
6d02 69e0
21
В витрине строку добавляете вы; на главной она приходит с сервера.
Макеты
Ключевые экраны на статических данных стенда, на каждом пометка пример.