/ kit
Potato Kit
Витрина токенов и компонентов. Источник правды — src/styles/tokens.css
+ файлы в src/components/. Любое новое значение идёт сюда.
Не индексируется поисковиками. Не линкуется из публичной навигации.
01 / Tokens
Colors
По одному цвету в строке — видно реальную востребованность каждого токена.
«Used by» считается автоматически: grep var(--color-…) по
src/components, src/layouts, src/pages и
src/styles/*.css (кроме самого tokens.css и этой страницы).
Пустой список — токен ничей, кандидат на удаление.
-
--color-bg#EEF2F3Page background — cool light grey14× ArticleCard, BeforeAfter, Callout, CaseCard, Header, KitLayout, NavTabs, Placeholder, ProjectCard, Summary, Toc, YearBlock, global.css, longread.css
-
--color-bg-elevated#ffffffCards, elevated surfaces10× ArticleCard, Callout, CaseCard, KitLayout, NavTabs, Placeholder, ProjectCard, Summary, Toc, longread.css
-
--color-bg-deep#ddccbaDeeper beige (sparingly)1× Toc
-
--color-text#2a2e36Primary text (cool-tinted, never #000)31× ArticleCard, BeforeAfter, Button, Callout, CaseCard, CaseMeta, CaseTile, CasesSection, CollapsibleSection, Footer, Header, Hero, Insights, KitLayout, Lightbox, NavTabs, Placeholder, PlaySection, ProjectCard, Quote, ResultsBlock, SectionHeading, Spec, Stat, Summary, Tag, Toc, WritingSection, YearBlock, global.css, longread.css
-
--color-heading#152242Deep navy — all headings14× ArticleCard, CaseMeta, CaseTile, Header, Hero, Insights, KitLayout, NavTabs, PlaySection, TalksSection, Toc, WritingSection, about, longread.css
-
--color-text-secondary#585c66Secondary text9× ArticleCard, BeforeAfter, Button, CaseCard, KitLayout, ProjectCard, SectionHeading, Stat, Tag
-
--color-text-muted#9a9588Meta, eyebrows17× ArticleCard, BeforeAfter, CaseCard, CasesSection, Footer, KitLayout, Placeholder, ProjectCard, Quote, ResultsBlock, SectionHeading, Spec, Stat, Summary, Toc, WritingSection, longread.css
-
--color-caption#ACACACImage caption — cool grey2× CaseTile, Image
-
--color-text-inverted#ffffffWhite text on dark surfaces (buttons, selection, nav pills)6× Button, CaseTile, KitLayout, Lightbox, NavTabs, global.css
-
--color-border#ede7deDividers, card borders19× ArticleCard, BeforeAfter, Button, CaseCard, CaseMeta, CaseTile, Footer, Image, Insights, KitLayout, Placeholder, ProjectCard, SectionHeading, Spec, Stat, Summary, Tag, Toc, longread.css
-
--color-border-strong#ddccbaHover/strong border4× ArticleCard, ProjectCard, Toc, longread.css
-
--color-border-cool#D7D7D7Cool grey border — media frames1× CaseTile
-
--color-accent#c8553dAccent (terracotta)16× ArticleCard, BeforeAfter, Button, Callout, CaseCard, CaseTile, CollapsibleSection, KitLayout, ProjectCard, Quote, SectionHeading, Stat, Summary, YearBlock, global.css, longread.css
-
--color-accent-hover#a94632Accent hoverNot used anywhere — candidate for removal
-
--color-positive#2f7a4eGrowth / success metric2× CaseMeta, ResultsBlock
-
--color-overlayrgba(0, 0, 0, 0.85)Modal backdrop, overlays1× Lightbox
-
--color-bg-glasscolor-mix(in srgb, var(--color-bg) 75%, transparent)Sticky frosted surfaces (header, kit chrome)2× Header, KitLayout
02 / Tokens
Typography
Inter Variable (display + body) · system mono
03 / Tokens
Spacing
4px base. Use as var(--space-N). Rendered widths below.
-
--space-10.25rem4px -
--space-20.5rem8px -
--space-30.75rem12px -
--space-41rem16px -
--space-51.25rem20px -
--space-61.5rem24px -
--space-71.75rem28px -
--space-82rem32px -
--space-102.5rem40px -
--space-123rem48px -
--space-133.25rem52px -
--space-164rem64px -
--space-246rem96px -
--space-328rem128px -
--space-4812rem192px
04 / Tokens
Radii
Border-radius. Used everywhere from chips to hero card.
-
--radius-sm6pxSmall inputs, code chips -
--radius-md10pxCards, sample frames -
--radius-lg16pxBig cards, callouts -
--radius-card20pxHero card, primary surfaces -
--radius-pill999pxPills, round buttons (TG)
05 / Tokens
Layout widths
Container max-widths for different page types.
-
--width-prose42.5rem (680px)Long-form reading column -
--width-text47.5rem (760px)Case page text column -
--width-content60rem (960px)Standard pages -
--width-wide75rem (1200px)Home grid -
--gutterclamp(1rem, 4vw, 3rem)Container side gutter (fluid) -
--sticky-offset120pxSticky-header clearance for anchors + panels
06 / Tokens
Motion
Durations + a single easing curve. Hover the swatches to feel the timing.
-
--duration-fast120msHover/focus state transitions -
--duration-normal240msStandard transitions -
--duration-slow480msSlow reveals -
--easing-defaultcubic-bezier(0.2, 0.8, 0.2, 1)All easing
07 / Tokens
Z-index
Layer scale. Anything higher than overlay is a code smell.
-
--z-base1Default content stack -
--z-sticky10Sticky header, sticky-year -
--z-overlay100Modal, tooltip overlays
08 / Tokens
Effects
Frosted-glass surfaces — sticky-шапка и kit chrome. Скролль страницу:
под шапкой контент размывается через backdrop-filter.
-
--blur-glass12pxbackdrop-filter blur radius -
--color-bg-glass--color-bg @ 75%translucent surface tint (см. в Colors)
09 / Components
Buttons
Primary
Secondary
Ghost
External link
Decorative (as="span") — для CTA внутри другой ссылки
10 / Components
Brand
Inline-иконка компании с автоматическим скейлом по высоте текста.
Реестр в src/data/brands.ts; SVG-файлы в public/brands/.
Два режима: только иконка (<Brand name="cian"/>) или иконка+текст
в обёртке (<Brand name="cian">Циан</Brand>).
В body (18px) — иконка-only:
Мы посмотрели в Циан и нашли несколько паттернов.
В body — wrapper-режим:
Сравнили с Циан напрямую — кейс показал разницу.
Внутри h3:
Циан рендерится крупнее
В caption (16px): Циан — иконка меньше.
Workflow: положить SVG в public/brands/<name>.svg →
добавить запись в src/data/brands.ts →
использовать <Brand name="<name>"/>. TS подскажет опечатку.
11 / Components
Section heading
03 / Section
Section title example
Все →12 / Components
Case tile
Плитка кейса в секции «Проекты» на главной. Заголовок + год справа, cover (или placeholder),
и dark-pill CTA «Раскрыть кейс →». Карточка целиком — одна ссылка; кнопка — визуальный Button
в режиме as="span".
13 / Components
Project card
Card in the Play section. External-link by default.
14 / Components
Tag
Pill-метка с моноширинным капсом. Используется в карточках статей и кейсов. Filled — заливка фоном; subtle — полупрозрачный вариант для перегруженных контекстов.
Filled
Subtle
15 / Components
Article card
Карточка в листинге статей. Внутри — title, опциональный source (для external), excerpt, теги и дата. Справа thumbnail (если указан в frontmatter), иначе placeholder.
Internal article example — written here
Internal articles live in the repo as markdown. They render at /writing/[slug]. Thumbnail задаётся явно в frontmatter, выбирается осмысленный кадр из /public/articles/<slug>/.
External article example — link to Medium
External articles list a link out instead of an internal page. Frontmatter sets externalUrl и source — отображается лого+имя источника под заголовком.
Internal article without thumbnail (placeholder fallback)
Если thumbnail не указан, карточка не падает и не скрывается — рендерится плоский placeholder.
16 / Components
Nav tabs
Pill-навигация для шапки. Активный пункт считается по Astro.url.pathname.
Используется в Header.astro. На этой странице второй пример включает ссылку на /kit — она подсвечена как активная.
Без активного пункта (ни один href не совпадает с /kit)
С активным пунктом (href совпадает с /kit)
17 / Layout
Header
Sticky-шапка сайта. Аватар + имя слева, pill-навигация по центру, соцссылки справа.
В демо отключаю position: sticky, чтобы не липла к окну кита.
18 / Layout
Footer
Подвал сайта.
19 / Page-level
Hero
Главный экран. Inline-рендер прямо из компонента — обновляется синхронно с кодом.
Привет, я — Роман Ведущий продуктовый дизайнер в
Отвечаю за дизайн в команде, которая делает все передовые сервисы для агентов недвижимости. Делаю сайд-проекты. В прошлом стартап-фаундер, закрыл pre-seed раунд.
20 / Page-level
Year block (sticky-year cases grid)
Контекстный компонент — sticky-год прилипает пока скроллишь его кейсы. Эффект работает на всю страницу; здесь показан в уменьшённом виде.
21 / Case page
Quote
Pulled quote inside a case body. Optional attribution + role.
Идея была в том, чтобы дать агенту видимость своего процесса для собственника — и снизить тревогу обеих сторон.
22 / Case page
Stat
Big metric. Variants: up (accent color), down (muted), neutral (default).
+12%
Conversion lift
A/B-тест на 4 недели, доля выкупов из лида.
3 мес.
Duration
От ресёрча до выката на 100% аудитории.
−18%
Time on task
Сценарий «связаться с агентом», med.
23 / Case page
Image with caption
Astro <Image> wrapper with caption + optional fullbleed.
Проп zoomable включает зум-модалку и курсор-лупу — кликни по второму примеру.
24 / Case page
Spec
Key/value table for case meta — кому, когда, что использовали.
- Клиент
- ЦИАН
- Команда
- ProApp · 3 продуктовых дизайнера, 8 инженеров, 1 PM
- Роль
- Senior Product Designer · ведущий дизайнер фичи
- Длительность
- 3 месяца от ресёрча до выката
- Инструменты
- Figma, Notion, Amplitude, A/B-платформа ЦИАН
25 / Case page
Case meta
Объединённый блок «Коротко + Результаты». Ставится под hero-медиа кейса, ширина — текстовой колонки.
26 / Case page
Summary
Краткие тезисы кейса. Принимает либо массив points, либо slot.
Кратко
- Перевели агентов на новую воронку сделок за 4 спринта
- Conversion lift +12% на ключевом шаге
- Сэкономили 3+ часа в неделю на агента, измерено в Amplitude
27 / Case page
Results block
Финальная плашка с метриками — крупно, в конце кейса.
Результаты проекта
26.5 / Case page
Insights
Финальные инсайты кейса. Тот же визуальный паттерн, что и Case meta: лейбл слева, тезисы справа, разделители между.
28 / Case page
Callout
Замечание в тексте кейса. Варианты: note, insight, warn.
29 / Case page
Collapsible section
Крупный сворачиваемый блок с заголовком — для отдельных глав кейса.
Контекст и задача
Содержимое главы. Здесь длинный текст про предысторию проекта.
Процесс
Этот блок открыт через проп open. Внутри — process steps, скриншоты, и т.д.
30 / Case page
Before / After (tabs)
Интерактивный переключатель «было / стало». Проп zoomable добавляет зум-модалку
для текущей выбранной вкладки.
31 / Case page
TOC (table of contents)
Sticky-сайдбар «Содержание» для страницы кейса. Появляется при viewport ≥1280px, активный пункт обновляется через IntersectionObserver. H3-сабтайтлы видны только у активного H2. В демо ниже компонент принудительно показан в статическом виде — активный пункт зашит вручную для иллюстрации.
32 / Helpers
Placeholder
SVG-болванка для прототипов и кита. Прозрачный фон, dashed border, диагонали.
33 / Coming
To be added
- 404 page
- SEO meta block
- Form input + textarea (when contact form added)
- Reading-progress bar (case page)