Clear before clever
Start with the useful outcome. Give each section one job. Put the essential answer before the explanation.
The words, shapes and interface rules that make Gem feel familiar — on the web, in Telegram and inside the apps people build.
Gem helps with everyday questions and tasks, gives projects a place on the web, and runs small apps in Telegram. Across those jobs, people should recognize the same controls, understand what is happening and know what to do next.
Start with the useful outcome. Give each section one job. Put the essential answer before the explanation.
Use familiar Telegram surfaces, comfortable spacing and blue to guide attention. Let the drawings explain something.
Keep the mark, palette and voice consistent across pages, apps, documentation and messages. Adjust the density to the task.
BotFather provides the interface foundation: surfaces, controls, corners and states. Gem adds its upright sparkle, custom pictograms, Noto Sans typography and plain language. These rules apply to the public pages and product interfaces.
Write Gem in prose: Gem Apps, Gem Projects, Gem: Telegram How To. The interface wordmark is lowercase gem. Use @gembot for the Telegram handle. Avoid all-caps GEM in running text.
Use the original outlined four-point SVG, upright. Set the wordmark in Noto Sans at weight 800 with tight tracking. The wordmark is typeset; it does not need a separate logo font.
Four curved points meet around an open center. Keep the original path and proportions. Give it room instead of changing its shape.
Keep the path unchanged. Use a single outline color, without fills, gradients or stretching. The standalone mark stays upright. Only a small sparkle paired with another object may tilt slightly.
Leave at least half the mark’s width clear around a standalone logo. Start with the 24px SVG for interface use and check the result at its actual display size.
Build on a graphite canvas, flat grouped surfaces, rounded controls and blue actions. The dark palette comes from BotFather’s public stylesheet; the light palette is Gem’s adaptation. Use the semantic tokens below so both themes stay consistent.
| Role | Light | Dark |
|---|---|---|
--bgCanvas | ||
--surfaceFields, cards, grouped content | ||
--bg2Table headers and secondary surfaces | ||
--textHeadings and primary values | ||
--hintSecondary text | ||
--linkLinks and icon outlines | ||
--accentEmphasis | ||
--buttonPrimary action | ||
--button-textOn primary action | ||
--lineBorder / BotFather inactive color | ||
--softAccent wash | ||
--hoverSecondary hover | ||
--button-hoverPrimary hover | ||
--button-disabled-textDisabled primary text | ||
--placeholderPlaceholder | ||
--dropdownDropdown surface | ||
--dropdown-hoverDropdown hover | ||
--footer-bgFooter surface | ||
--footer-textFooter text | ||
--goodSuccess | ||
--warningWarning | ||
--dangerDanger | ||
--good-bgSuccess wash | ||
--warning-bgWarning wash | ||
--danger-bgDanger wash |
Clear text and a visible next step.
Open Gem ↗The same reading order in dark mode.
Open Gem ↗BotFather uses 12px × 15px button padding and 11px × 14px field padding. In Gem, controls must also meet the 44–48px target size. Keep keyboard focus visible, text selectable and browser zoom available.
In Telegram, use the host’s theme parameters and respond to themeChanged. Outside Telegram, follow prefers-color-scheme, including changes while the page is open. The selector here is for comparing the two palettes.
bg_color → --bg secondary_bg_color → --bg2 section_bg_color → --surface text_color → --text hint_color → --hint link_color → --link accent_text_color → --accent button_color → --button button_text_color → --button-text header_bg_color → --header
When Telegram omits a value, use the matching Gem theme token. Keep borders and accent washes within that palette. The shared theme script combines safe-area and content-safe-area insets.
The dark status, dropdown, hover and accent-wash colors follow BotFather’s published variables. Light equivalents are adapted for Gem. Telegram theme parameters override the defaults inside Telegram.
Headlines: 36px on phones, 48px on tablets, 56px on wide screens. Section titles: 28 / 32 / 36px. Body: 16px with 1.6 line height. Controls: 14px. Supporting labels: at least 13px. Never shrink a desktop composition to fit a phone; stack its content and let headings wrap naturally.
Use the variables in www/design/foundation.css. Run node www/tools/sync-design.cjs after editing the foundation. Cards and buttons use 8px corners; dialogs use 12px. Touch targets are at least 44px, with 48px primary actions.
Use Noto Sans for headings, body text and controls in both English and Russian. Establish hierarchy through size, weight and spacing; keep all type sans serif.
'Noto Sans', Arial, sans-serif
36 / 48 / 56px · 700 · 1.15 line-height28 / 32 / 36px · 700 · 1.25 line-height18px · 650–700 · 1.4 line-heightExplain the useful part, then leave room to read it.
16px · 400 · 1.6 line-heightgem.bot/yourname
Noto Sans · tabular numeralsWrite headings in sentence case, with restrained tracking (−0.025em). Use blue to emphasize a meaningful phrase. Omit a terminal full stop; keep question marks and other punctuation when the wording calls for them.
Supporting labels use 13px or 14px. Never use tiny text to make a layout fit. Controls use 14px, fields use 16px, and the minimum touch target is 44px.
Noto Sans was selected with reference to Kogda’s style guide. Gem uses it for body text too. The font is self-hosted under the SIL Open Font License. It is the shared font for the brand book, builder kit and public pages.
The library contains 34 symbols with a shared stroke weight and rounded construction. It includes the original sparkle and 12 editorial symbols for writing, diagrams, charts and publishing.
34 icons
No matching icons. Try another name.
Draw a recognizable silhouette with open shapes and rounded ends. Add a small sparkle only when it helps identify the function. Use the supplied SVGs and their stable symbol IDs. The offer icon is a tag; keep it distinct from the Gem mark and Telegram Stars.
Use 16–20px icons in navigation, 24–32px on cards and 40–56px for larger accents. Illustrations can use larger marks. Hide decorative icons from assistive technology and name every icon-only control.
<svg class="icon" aria-hidden="true">
<use href="#gem-memory" />
</svg>
.icon { width: 24px; height: 24px; color: var(--link); }Do not replace this family with emoji or a mixed stock icon set. Telegram Stars may appear as ⭐ when describing the currency, not as a generic interface icon.
4812162024324864Use the shared spacing scale to keep related items close and separate distinct sections.
Use the shared 1160px content width, with 20px phone gutters and 32–40px gutters on wider screens. Section spacing grows from 56px to 88px. Stack columns on phones and let headings wrap; never shrink the whole composition.
Separate content with 1px borders and surface colors. Use 8px corners for cards, buttons and fields, and 12px for dialogs and larger panels. Keep shadows restrained.
Product screens can hold more information, but controls still need room. Respect Telegram’s safe insets and the keyboard. Keep primary navigation reachable, settings in Settings and a clear way back from inner screens.
Name the action with a verb. Use blue for the primary choice and a quieter treatment for alternatives. Use links for navigation and buttons for actions.
A field example, not an availability check.
Keep the original question beside its latest answer. Show when it was updated and when another update is available.
Pair icons with short labels and mark the current destination. Examples should use real product routes.
No notes yet
Explain how to add the first item.Checking availability…
Say what is happening.Couldn’t check. Try again.
Keep the person’s input and offer Retry.Sample data
Label examples so they cannot be mistaken for live results.Public pages finish with Gem by Labs. The Mini App has no marketing footer. Native disclosure elements work well for FAQs and keep content readable without JavaScript.
Build illustrations from recognizable product elements: messages, saved cards, forms, progress indicators and charts. Use the Gem mark to connect related pieces. Each scene should help explain the section.
Use the same blue and graphite surfaces as the interface. Keep product cards aligned, corners consistent and shadows light. Illustration objects may tilt slightly; the standalone sparkle stays upright. On phones, replace overlapping scenes with readable stacks. Mark sample metrics as Preview.
Social cover composition: the headline is centered horizontally and vertically; the sparkle illustration sits above it, @gembot below. Use the same palette and type. Russian copy is rewritten naturally. This is a reconstructed layout specimen, not a claim to be the archived cover file.
Carry the interface’s line weight and corners into diagrams. Connect only related items, keep labels readable and give charts labels as well as color.
One useful thought. A little context. Then the next step.
Make the important thing easy to find.
Direct labels. One accent. Shared baseline. No decorative axes.
Keep decorative motion brief and optional. Avoid continuous sparkle loops. Remove animations and transitions for prefers-reduced-motion: reduce. Keep the content complete in the still frame.
Gem is the chat you turn to with a question, a half-written reply or something you keep forgetting. Write for that moment. Name the thing the person needs, say what Gem can do with it, and stop before the explanation becomes a pitch.
“Help with your day” could describe anything. “Send the voice note. Ask for the next steps” tells someone when to use Gem. A concrete task, document or decision earns its place in the copy; another claim about being helpful does not.
A draft is not a published page. A request is not a confirmed booking. Say “Saved” only after the save succeeds. When a feature is planned, name what people can use today instead. The useful detail is often the difference between two states.
| Write | Instead of |
|---|---|
| Your draft is ready. Check it before you publish. | Your project is ready. |
| Saved to Notes. | You’re all set. |
| Couldn’t check that name. Try again. | Something went wrong. |
| Group answers are planned. People can ask on your project page now. | Keep your community connected everywhere. |
Assistant copy starts with something to ask or hand over. Project copy starts with the person’s work and the people who need it. App copy starts with something to make or use. The examples below show different situations in each language; they are writing samples, not live results.
Forward it to Gem and ask for the next steps.
Пришли PDF и спроси о том, что непонятно. Текст не придётся переносить в чат.
Post the meeting point, answer first-timers’ questions and collect sign-ups.
Расскажи о занятиях, добавь расписание и принимай заявки на странице проекта.
Build a small scorekeeper, send the code to Gem and open it in Telegram.
Собери свой счётчик чтения. Отправь код Gem — и отмечай прочитанное в Telegram.
Start again with what the reader wants to do. “Get more done” does not have to become «Успевай больше»: name the unfinished letter, the question or the forgotten appointment. Use «ты», short verbs and ordinary word order. Read the result aloud. If it sounds like a translated button or a presentation slide, rewrite it.
«Осуществить публикацию» → «Опубликовать». «Ваш запрос успешно обработан» → «Заметка сохранена». «Узнай, как использовать возможности платформы» → «Посмотри, как сделать приложение».
Use sentence case. Omit terminal full stops in headings; keep real questions as questions. Name the next action on the button: Save, Publish, Open in Telegram. A short label still needs to say what happens. Use an arrow only when it helps show a destination.
Keep Gem, Gem Apps, Gem Projects and Gem: Telegram How To as product names. Match exact interface labels when giving directions. In public explanations, say “materials” / «материалы» for the files a person adds; use Knowledge / «Знания» when naming that menu. Introduce «Панель управления» once, then use «панель».
Keep the facts aligned across languages: availability, limits, prices and what happens after a click. English uses 1,000,000 Stars; Russian uses 1 000 000 ⭐. A different example or headline is welcome. A different promise is not.
Begin with a focused overview: the purpose, a useful illustration, a few capabilities and a primary action. Put Learn more at the end to reveal the detailed sections on the same page. Write English and Russian independently, with the same facts and clear next steps.
Use Telegram colors and safe areas. One-word screen titles and short icon labels. Keep marketing eyebrows, subtitles, help paragraphs and footers out of routine screens. Put account, preferences and dated memories in Settings.
Reach the owner dashboard from Settings. Group projects and apps, show the selected time period and make drafts and unanswered questions easy to spot. Label sample data and report only activity Gem can measure.
Keep API names exact, examples copyable and explanations close to the code they describe. Builder terminology belongs here. The interface defaults use 8px corners, a safe top bar, 48px actions and 16px field text.
Answer the question in a short text or card, then offer the next useful action. Use the person’s language and project context. Make it clear whether Gem has completed something or is asking the person to do it.
Use this book for presentation decisions. Use the current product code and API documentation for routes, behavior and availability.
Semantic headings, real buttons and links, explicit input labels and visible keyboard focus. Use aria-current for the current page and accessible names for icon-only controls. Never use color alone for status.
Test at 375, 768 and 1280px, both languages and themes. No horizontal page scrolling. Prefer 44–48px action targets. Allow longer Russian copy and browser zoom; don’t hide overflow to conceal layout errors.
BotFather’s primary button token is #248bda with white text. Its contrast is about 3.6:1, below the 4.5:1 target for normal-sized text. This guide retains the requested BotFather palette and records the issue; a contrast-adjusted action variant remains a separate design decision. Also test custom Telegram theme combinations.
Keep core content readable without JavaScript. Respect reduced motion and system appearance changes. Loading, error and empty states should explain what happened without blaming the person.
Primary reference: Telegram BotFather and its public stylesheet, inspected 20 October 2026. The app itself required an active Telegram session; measurements here come from the stylesheet, not an authenticated screen review. Gem’s 34-symbol library, public page patterns, Mini App conventions and writing rules complete the system.
Start new work from this reference. Check capability claims against the current product, refresh examples as it changes and extend the icon library with the same construction rules.
Published reference: gem.bot/style. This edition defines the brand book and reusable assets used by Gem’s public pages. Functional pages are checked separately against these tokens. The assets are vector/code originals; Noto Sans is bundled locally, with no external font service.