Kotsna is a dating app in Tbilisi: real people, each one verified by the team. This site holds what you need to draw it and to talk about it.
Ultraviolet palette
Dark by default
EN · FR · ES · RU · KA
Updated 17 October 2026
01 Logo
Two shapes coming closer
The mark is a violet disc and an acid green ring that touch. A kiss reduced to its geometry: kotsna means kiss in Georgian.
Construction. w: the ring thickness. Dashed: the clear space, r all around.
Two circles of the same diameter, a violet disc and an acid green ring, touching on the diagonal. The contact point falls at the exact centre of the square.
Grid: a square of (2 + √2) r per side, r being the radius of one circle. The whole mark fits in a circle of radius 2r, the safe zone for app icons.
Ring thickness: 0.21 d at large sizes, 0.25 d up to 28 px, 0.29 d up to 18 px (the small mark).
Clear space: r all around, with no text, edge or other logo.
The word kotsna is set in Unbounded, the line კოცნა in Noto Sans Georgian. Both are outlined: no font to install.
Clear space
r, the radius of one circle, all around the logo: no text, no edge, no other logo inside the dashed line. On the horizontal lockup r is 29 % of the logo height.
Versions
Dark
Violet and acid green, light text. On night backgrounds.
Light
Violet and night, no acid green. On light backgrounds.
Night
One colour, night. Print, stamps, light backgrounds.
White
One colour, white. On violet or on a veiled photo.
Elements
Transparent background, tight crop. Four versions of each element: dark, light, night, white. Each link opens the SVG in a new tab.
Mark: 16 px at least. Under 28 px, use the small mark (thicker ring).
Horizontal: a 20 px mark at least.
With კოცნა: never under a 12 px body, so 40 px high horizontal, 96 px stacked.
Don't
No Do not distort, stretch or squash the logo.
No No acid green on a light background: use the light version.
No Do not rotate: the diagonal always rises to the right.
App icon and favicon: favicon.svg. The PWA and App Store PNG files will ship with the brand kit.
02 Colours
Ultraviolet
An electric violet to act, an acid green to signal, on a blue-tinted night. 41 tokens, each with a dark and a light value. Select a value to copy it.
Electric violetAction
Acid greenSignal
NightBackground
InkText
Acid green is never text on a light background: in light mode, accentInk turns to violet.
In light mode, acid green only appears as a chip or active tab fill, with onAccent on it.
Body text uses ink (AAA everywhere). muted is kept for secondary text (AA at least).
Success is a mint green, distinct from acid green, which stays the signal (tonight, verified, active tab).
On photos the veil is always dark, in both modes; text stays where it passes 70 %.
Focus: a 2 px ring, offset by 2 px, never removed.
A state never relies on colour alone: an icon and a text always come with it.
Backgrounds and surfaces
bg
App background, behind every screen.
Dark
Light
surface
Surfaces on the background: fields, sheets, lists.
Dark
Light
surface2
Cards and received bubbles, one step above surface.
Dark
Light
chipBg
Background of inactive chips and filters.
Dark
Light
tabBg
Pill tab bar, dark in both modes.
Dark
Light
backdrop
Veil behind an open sheet or modal.
Dark
Light
Lines
line
Dividers and decorative outlines of cards and chips.
Dark
Light
lineStrong
Outline of fields and checkboxes, 3:1 at least on every surface.
Dark
Light
Text
ink
Main text, titles and body copy.
Dark
Light
muted
Secondary text: captions, hints, metadata.
Dark
Light
tabMuted
Labels of inactive tabs, on tabBg.
Dark
Light
Action (violet)
primary
Electric violet: main button, active switch, strong link.
Dark
Light
onPrimary
Text and icons on primary.
Dark
Light
primaryInk
Violet as text: links and highlighted words.
Dark
Light
primaryDeep
Violet tint: selected item, sent bubble; ink text on it.
Dark
Light
Signal (acid green)
accent
Acid green: tonight, verified, active tab. Always a chip fill, never text on light.
Dark
Light
onAccent
Text on acid green.
Dark
Light
accentInk
Signal as text: acid green on dark, replaced by violet on light.
Dark
Light
verify
Verified badge, on a veiled photo or on dark.
Dark
Light
tabOn
Pill of the active tab.
Dark
Light
tabOnInk
Label of the active tab.
Dark
Light
Error
danger
Solid red: danger button, field outline in error, icon.
Dark
Light
onDanger
Text on danger.
Dark
Light
dangerInk
Error message as text.
Dark
Light
dangerBg
Background of an error banner.
Dark
Light
Success
success
Mint green: confirmation icon and outline, distinct from acid green.
Dark
Light
successInk
Confirmation text.
Dark
Light
successBg
Background of a confirmation banner.
Dark
Light
Warning
warning
Amber: warning icon and outline, never a large fill.
Dark
Light
warningInk
Warning text.
Dark
Light
warningBg
Background of a warning banner.
Dark
Light
Info
info
Sky blue: information icon, distinct from the action violet.
Dark
Light
infoInk
Information text.
Dark
Light
infoBg
Background of an information banner.
Dark
Light
Veil on photos
scrim
Solid 70 % veil under a label placed on a photo. Same in both modes.
Dark
Light
scrimGradient
Gradient at the bottom of photo cards; text stays where the veil passes 70 %.
Darkgradient
Lightgradient
onScrim
Main text on a veiled photo.
Dark
Light
onScrimMuted
Secondary text on a veiled photo (distance, district).
Dark
Light
Disabled state
disabledBg
Background of a disabled button or field.
Dark
Light
disabledInk
Disabled text and icons (exempt from WCAG, 3:1 aimed for).
Dark
Light
Focus
focus
Keyboard focus ring: 2 px, offset by 2 px, on every active element.
Dark
Light
Contrast (WCAG 2.2)
Body text 7:1 (AAA required), other text 4.5:1 (AA), graphic elements 3:1. Ratios computed at build time from the token values. Veiled photos are checked in the worst case: a white photo under the 70 % veil.
Dark mode
AaBody text on the backgroundink on bg17.76AAA
AaBody text on a cardink on surface214.29AAA
AaSecondary text on the backgroundmuted on bg8.04AAA
AaSecondary text on a cardmuted on surface26.47AA
AaMain button labelonPrimary on primary5.38AA
AaViolet as text on the backgroundprimaryInk on bg7.22AAA
AaText on a selectionink on primaryDeep10.73AAA
AaAccent chip labelonAccent on accent16.43AAA
AaSignal as text on the backgroundaccentInk on bg16.43AAA
AaError text on its bannerdangerInk on dangerBg6.77AA
AaSuccess text on its bannersuccessInk on successBg9.05AAA
AaWarning text on its bannerwarningInk on warningBg8.91AAA
AaInfo text on its bannerinfoInk on infoBg7.75AAA
Field outline on a surfacelineStrong on surface3.763:1
Focus ring on the backgroundfocus on bg16.433:1
Light mode
AaBody text on the backgroundink on bg16.34AAA
AaBody text on a cardink on surface214.41AAA
AaSecondary text on the backgroundmuted on bg6.24AA
AaSecondary text on a cardmuted on surface25.50AA
AaMain button labelonPrimary on primary5.38AA
AaViolet as text on the backgroundprimaryInk on bg6.46AA
AaText on a selectionink on primaryDeep14.07AAA
AaAccent chip labelonAccent on accent16.43AAA
AaSignal as text on the backgroundaccentInk on bg6.46AA
AaError text on its bannerdangerInk on dangerBg6.29AA
AaSuccess text on its bannersuccessInk on successBg5.72AA
AaWarning text on its bannerwarningInk on warningBg6.83AA
AaInfo text on its bannerinfoInk on infoBg6.49AA
Field outline on a surfacelineStrong on surface4.223:1
Focus ring on the backgroundfocus on bg6.463:1
03 Typography
Three scripts, one voice
Unbounded for titles, wide and round. Onest for reading. Noto Sans Georgian for Georgian, with more line height and one more weight step to stand up to Unbounded.
Eleven levels, in CSS px. Each sample is rendered with its own token settings, in English, Russian and Georgian (Georgian takes its own column: weight, line height).
Screen title
One per screen, at the top. Two lines at most.
Unbounded 700, clamp(20px, 6vw, 24px) / 28, -0.02 em
KA: Noto Sans Georgian 800, same size / 34, 0 em
Notification settings
Настройки уведомлений
შეტყობინებების პარამეტრები
Section title
Settings groups, profile blocks, list headers.
Unbounded 600, 18 px / 24, -0.01 em
KA: Noto Sans Georgian 700, 18 px / 26, 0 em
You are on the list
Ты в списке ожидания
მოლოდინის სიაში ხარ
Card title
Name and age on the photo card, sheet title.
Unbounded 600, 22 px / 26, -0.01 em
KA: Noto Sans Georgian 700, 22 px / 30, 0 em
Nino, 27
Нино, 27
ნინო, 27
Body
Running text, bios, messages.
Onest 400, 16 px / 24, 0 em
KA: Noto Sans Georgian 400, 16 px / 26, 0 em
Real people in Tbilisi, each one checked by our team. Go at your own pace.
Настоящие люди в Тбилиси, каждого проверяет наша команда. Не торопись.
ნამდვილი ადამიანები თბილისში, თითოეულს ჩვენი გუნდი ამოწმებს. ნუ იჩქარებ.
Small body
Hints under fields, notes, banner text.
Onest 400, 14 px / 20, 0 em
KA: Noto Sans Georgian 400, 14 px / 22, 0 em
Our team reads every application by hand.
Наша команда читает каждую заявку вручную.
ჩვენი გუნდი ყველა განაცხადს ხელით განიხილავს.
Caption
Metadata: district, distance, time. 12 px is the minimum, Georgian too.
Onest 500, 12 px / 16, 0.01 em
KA: Noto Sans Georgian 500, 12 px / 18, 0 em
Vake · 21:40
Ваке · 21:40
ვაკე · 21:40
Button
Button label, on one line.
Onest 600, 16 px / 20, 0 em
KA: Noto Sans Georgian 600, 16 px / 22, 0 em
Send the verification code
Отправить код подтверждения
კოდის გაგზავნა
Chip
Filters, interests, "tonight".
Onest 600, 13 px / 16, 0.01 em
KA: Noto Sans Georgian 600, 13 px / 18, 0 em
Free tonight
Свободна сегодня
ამაღამ თავისუფალია
Label
Short label in capitals. The only level in mtavruli.
Onest 700, 12 px / 16, 0.08 em
KA: Noto Sans Georgian 700, 12 px / 18, 0.06 em
THIS OR THAT
ЭТО ИЛИ ТО
ᲔᲡ ᲗᲣ ᲘᲡ
Figure
Token balance, referral gauge. Tabular figures.
Unbounded 700, 40 px / 44, -0.02 em
KA: Unbounded in every language
120
120
120
Small figure
Counters in a line (2 / 3, 120 tokens).
Unbounded 600, 20 px / 24, -0.01 em
KA: Unbounded in every language
2 / 3
2 / 3
2 / 3
Rules
Georgian
Mkhedruli has ascenders and descenders on many letters (ბ, ძ, ფ, ყ, ჯ). Georgian line height: 1.35 to 1.4 for titles (1.15 to 1.2 in Latin), 1.6 to 1.65 for body (1.4 to 1.5). Tracking always 0, except the mtavruli label (0.06 em).
Weight
Georgian titles take one weight step above Unbounded (800 for 700, 700 for 600) to keep the same presence.
Cyrillic
Same font and size as Latin. Unbounded is wide: Russian titles often wrap to two lines, and the layout plans for it.
Figures
Figures are in Unbounded in every language, with font-variant-numeric: tabular-nums. The word after them is in the text font.
Titles
Two lines at most. No automatic hyphenation, no break inside a word. A single word never overflows its box.
Buttons
One line aimed for. If a translation does not fit: two centred lines (line height 1.25), never truncated or shrunk, and the string is flagged for shortening.
Minimum size
12 px, in every script.
Georgian capitals (mtavruli)
Only at the label level: short labels in capitals (ᲔᲡ ᲗᲣ ᲘᲡ in the This or that game, group headers like ᲘᲜᲢᲔᲠᲔᲡᲔᲑᲘ), three words at most, tracking 0.06 em, Noto Sans Georgian 700.
Do not rely on text-transform: uppercase for Georgian (the result depends on the browser). Write the strings in mtavruli in the translation files, or convert with the table U+10D0 to U+10FA into U+1C90 to U+1CBA (+0xBC0). text-transform: capitalize never applies to Georgian.
Never
As an initial: Georgian has no capital at the start of a sentence or a name (ნინო, never Ნინო).
In screen, section and card titles, body text, buttons, fields or error messages.
In member content: names, bios, messages, answers.
Mixed with mkhedruli in one word, or to stress a word in a sentence.
In the კოცნა logotype.
04 Icons
Eight of our own, Lucide for the rest
The icons Lucide does not cover, drawn in its style so the two families mix. 24 grid, 1.5 stroke, round caps and joins, inherited colour (currentColor).
Signature: a small tangent circle on the diagonal, taken from the logo, on verified, Plus and tonight.
Plus is said with rising chevrons, not a + sign: we stay far from the cross.
For everything else, Lucide, set to strokeWidth 1.5 to match these eight.
The pin always comes with a band ("1 to 3 km"), never a map or an exact point.
Short, clear transitions, springs during gestures. One animated brand image only: the two shapes rolling towards each other, at the match.
A kiss in the air
1.1 s from the like to the open screen. A tap on the scene jumps to the end. With reduced motion, everything arrives in a single 120 ms fade, the shapes already in contact.
0 msLike. The card leaves to the right with the throw spring.
120 msVeil. Backdrop veil in 220 ms (enter curve). The violet disc enters bottom left, the green ring top right.
320 msRoll. Roll spring. Each shape turns on itself once, without sliding: rotation = distance / radius.
560 msApproach. The shapes slow down, the spring absorbs the speed.
700 msContact. Contact at the centre of the screen. Contact spring: 4 % squash, then back. A light 10 ms vibration if allowed.
820 msOpening. Both shapes grow and become the frames of the two photos; the title rises 16 px as it fades in (base, enter).
1100 msMatch screen. Buttons active. A tap anywhere during the animation jumps straight here.
Principles
Motion follows the finger
During a gesture nothing runs on a fixed duration: everything goes through a spring.
Two shapes coming closer
The only animated brand image, kept for the match and for loading.
Short and clear
Interface transitions stay under 320 ms; only the match takes its time (1.1 s).
No flashing
Never any flashing, never an endless loop on screen except loading.
Reduced motion
With prefers-reduced-motion: no movement and no rolling, only 120 ms fades and instant state changes. Content and controls stay the same.
City lights in the evening, laughs caught in the moment, every orientation and every age. And nothing that locates anyone: no street, no number, no recognisable square.
Night
The lights of Tbilisi
Real, varied people
Warmth
Nothing sexualised
No place that locates anyone
Do
Yes The city, from afar
The lights of Tbilisi seen from above, blurred or distant: a mood, never a street.
Drawn until the consented shoot
Yes A real laugh
A caught moment, not a pose. Warm bar light, a little grain.
Drawn until the consented shoot
Yes Every orientation
Two people side by side, any genders, with no caption that explains: we assume nothing.
Drawn until the consented shoot
Yes Varied ages
Adults from 20 to 60 and over. Warmth does not depend on age.
Drawn until the consented shoot
Yes The night beginning
Fairy lights, candles, signs: the light comes from the scene.
Yes The shared table
A meal, glasses, candles: warmth, even without a face. Nothing sexualised.
Avoid
No A number, a door
A facade or a house number locates someone. Never a recognisable place near a home.
No A readable sign
Street name, shop sign, plate: blur it or crop it.
No A district landmark
A square, a monument: it locates a date. Broad daylight is not us either.
Drawn until the consented shoot
No Stock photography
Stiff poses, poster smiles, offices: cold and fake.
No Unreadable
Too dark, motion blur: night yes, black no.
Deliberately without an image
No Nothing sexualised
Bare bodies, suggestive poses, close-ups of bodies: never, not even hinted. It is not illustrated here.
In the app
TonightNino, 27under 2 km
4:5 crop. Chips at the top within 72 px, face in the upper third.
Text in the bottom 45 %, on the scrimGradient, with a 16 px margin.
File of 1080 × 1350 px at least, in sRGB.
No text on a photo without a veil. A lone label sits on the solid 70 % scrim. The veil stays dark in both modes.
Photos of people come only from the Tbilisi shoot, with models who signed a release for this exact use. Until then, people are drawn, never taken from a photo library.
Blurred likes
For members without Plus, received likes are blurred. Blur measured on the 160 px thumbnail; 16 px is the retained value.
0 px
8 px
16 px, kept
24 px
32 px
08 Voice and tone
Like someone who knows the city
Direct, warm, discreet. Never crude, never judging. Informal, and we assume nothing.
Direct
One idea per sentence, verb first. Say what is happening and what you can do.
Yes Application sent.
No Woohoo, you did it!!!
Warm
Speak like someone who knows the city and wants the best for you. Informal "you" in FR, ES, RU and KA.
Yes Go at your own pace.
No Please complete all required fields.
Discreet
Nothing shown outside the app (notification, receipt) gives away a dating app.
Yes Kotsna: new message
No Nino sent you a kiss
Never crude
No double meaning, no sexual hint, no suggestive emoji. Desire is said with tact.
Yes A kiss in the air
No Ready for a hot night?
Inclusive
Assume neither gender nor orientation. Neutral forms: "they", no gendered past tense in RU.
Yes People near you
No Girls near you
No judgment
A sanction says what, why, until when and how to appeal. Never a lecture.
Yes This is a warning, nothing more.
No Your behaviour is unacceptable.
Writing rules
Titles: 32 characters at most in English. Russian and Georgian run 30 to 40 % longer: the layout keeps a fixed-height zone for them, nothing moves from one language to another.
Body: 150 characters at most in English, three sentences at most.
No exclamation mark and no emoji in system text.
Numbers as digits; precise dates and times for sanctions.
A sanction always states the measure, the reason, the duration and how to appeal.
A refusal never judges the person.
Gender-neutral forms in every language. Informal "you" in French, Spanish, Russian and Georgian.
Sample lines
Values in braces are inserted by the app. Russian and Georgian are to be reviewed by a native speaker; French and Spanish too.
Welcome
English
Welcome to Kotsna
Real people in Tbilisi, each one checked by our team. Go at your own pace.
Get started
Français
Bienvenue sur Kotsna
Des gens vrais à Tbilissi, chacun vérifié par notre équipe. Prends ton temps.
Commencer
Español
Te damos la bienvenida a Kotsna
Gente real en Tbilisi, cada perfil revisado por nuestro equipo. Ve a tu ritmo.
Empezar
Русский
Добро пожаловать в Kotsna
Настоящие люди в Тбилиси, каждого проверяет наша команда. Не торопись.
Начать
ქართული
კეთილი იყოს შენი მობრძანება Kotsna-ში
ნამდვილი ადამიანები თბილისში, თითოეულს ჩვენი გუნდი ამოწმებს. ნუ იჩქარებ.
დაწყება
Match
English
A kiss in the air
You and {name} like each other. Say hello, or start with This or that.
Say hello
Français
Un baiser dans l'air
{prénom} et toi, vous vous plaisez. Dis bonjour, ou commence par Ceci ou cela.
Dire bonjour
Español
Un beso en el aire
Hay interés mutuo entre {nombre} y tú. Saluda o empieza con Esto o aquello.
Saludar
Русский
Поцелуй в воздухе
Вы с {имя} понравились друг другу. Поздоровайся или начни с «Это или то».
Поздороваться
ქართული
კოცნა ჰაერში
შენ და {სახელი} ერთმანეთი მოგწონთ. მიესალმე ან დაიწყე „ეს თუ ის“-ით.
მიესალმე
Application refused
English
Not this time
We can't accept your application right now. Reason: {reason}. Your details have been deleted, and you can apply again in 6 months.
Close
Français
Pas cette fois
Nous ne pouvons pas accepter ta candidature pour le moment. Motif : {motif}. Tes données sont supprimées, et tu pourras candidater de nouveau dans 6 mois.
Fermer
Español
Esta vez no
Ahora mismo no podemos aceptar tu solicitud. Motivo: {motivo}. Hemos borrado tus datos y podrás volver a solicitar acceso dentro de 6 meses.
Cerrar
Русский
В этот раз нет
Сейчас мы не можем принять твою заявку. Причина: {причина}. Твои данные удалены, подать заявку снова можно через 6 месяцев.
Закрыть
ქართული
ამჯერად არა
ამ ეტაპზე შენს განაცხადს ვერ მივიღებთ. მიზეზი: {მიზეზი}. შენი მონაცემები წაშლილია, ხელახლა განაცხადის გაგზავნა 6 თვეში შეგიძლია.
დახურვა
Warning
English
A word about our rules
We were told about something that goes against our rules: {reason}. This is a warning, nothing more. If it happens again, your account may be suspended.
I understand
Français
Un mot sur nos règles
On nous a signalé quelque chose de contraire à nos règles : {motif}. C'est un avertissement, rien de plus. Si ça se reproduit, ton compte pourra être suspendu.
J'ai compris
Español
Una nota sobre nuestras normas
Nos han avisado de algo que va contra nuestras normas: {motivo}. Es solo un aviso. Si se repite, tu cuenta podría suspenderse.
Entendido
Русский
Пара слов о наших правилах
Нам сообщили о нарушении наших правил: {причина}. Это только предупреждение. Если это повторится, аккаунт может быть приостановлен.
Понятно
ქართული
ორიოდე სიტყვა ჩვენს წესებზე
გვაცნობეს ჩვენი წესების დარღვევის შესახებ: {მიზეზი}. ეს მხოლოდ გაფრთხილებაა. თუ განმეორდება, შენი ანგარიში შეიძლება შეჩერდეს.
გასაგებია
Outage
English
We'll be right back
Kotsna is having trouble right now. We keep trying on our own. Your chats and matches are safe.
Try again
Français
On revient très vite
Kotsna a un souci en ce moment. On réessaie tout seuls. Tes conversations et tes matches sont en sécurité.
Réessayer
Español
Volvemos enseguida
Kotsna tiene un problema ahora mismo. Seguimos intentándolo solos. Tus chats y tus matches están a salvo.
Reintentar
Русский
Скоро вернёмся
У Kotsna сейчас неполадки. Мы продолжаем попытки сами. Твои чаты и мэтчи в безопасности.
Повторить
ქართული
მალე დავბრუნდებით
Kotsna-ს ახლა პრობლემა აქვს. ცდას თავად ვაგრძელებთ. შენი ჩატები და მატჩები უსაფრთხოდაა.
ხელახლა ცდა
Payment receipt
English
Payment received
Kotsna Plus, 1 month: 13.99 ₾. Renews on {date}. Cancel anytime in Settings. The receipt is also in your email.
Done
Français
Paiement reçu
Kotsna Plus, 1 mois : 13,99 ₾. Renouvellement le {date}. Résiliable à tout moment dans les réglages. Le reçu est aussi dans ta boîte mail.
Terminé
Español
Pago recibido
Kotsna Plus, 1 mes: 13,99 ₾. Se renueva el {fecha}. Puedes cancelar cuando quieras en Ajustes. El recibo también está en tu correo.
Listo
Русский
Оплата получена
Kotsna Plus, 1 месяц: 13,99 ₾. Продление {дата}. Отменить можно в любой момент в настройках. Чек также отправлен на почту.
Готово
ქართული
გადახდა მიღებულია
Kotsna Plus, 1 თვე: 13,99 ₾. განახლდება {თარიღი}. გაუქმება ნებისმიერ დროს შეგიძლია პარამეტრებში. ქვითარი ელფოსტაზეც გამოგეგზავნა.
მზადაა
09 Downloads
The brand kit
Coming soon
Every file of this site, and more, will live in the brand-kit repository: logo in SVG and PNG, app icons, icons, stickers, fonts with their licences, and the tokens in CSS, TypeScript and JSON.
Repository: Kotsna/brand-kit, private for now; the link comes when it opens.
Until then, every SVG on this page opens on its own from its link. The fonts are free from Google Fonts under the SIL Open Font License.