Визуальный язык Пульса — парящие карточки на тонированной земле, пилюли, стекло, чернильное главное действие, дровер с режимами, параметры пилюлями, чат как в мессенджере — оформлен как библиотека компонентов. Она одинаково работает в HTML, PHP, React, Svelte, Astro и Tailwind.
Две строки в <head> — и все компоненты доступны как теги. Шрифты, значки и обе темы приезжают вместе с ними.
<link rel="stylesheet" href="https://ds.partsbooster.com/v1/pulse-ds.css">
<script type="module" src="https://ds.partsbooster.com/v1/pulse-ds.js"></script>
<body class="pz-app">
<pz-page-header title="Заказы">
<pz-button slot="actions" variant="ink" icon="add">Заказ</pz-button>
</pz-page-header>
</body>/* app.css */
@import "tailwindcss";
@import url("https://ds.partsbooster.com/v1/tailwind.css");
<!-- index.html: те же две строки, что для HTML -->
<div class="bg-pz-surface rounded-pz-card shadow-pz-card p-6">
<h2 class="text-pz-h3 font-pz-head">Выручка</h2>
</div>// скачать https://ds.partsbooster.com/v1/tailwind-preset.cjs в проект
module.exports = {
presets: [require('./tailwind-preset.cjs')],
content: ['./src/**/*.{html,js,jsx,ts,tsx,vue,svelte}'],
};// npm i git+ssh://git@gitlab.s25.app/labs/pulse-ds.git
// index.html — те же две строки с CDN
import { PzButton, PzSegmented } from '@s25/pulse-ds/react';
<PzSegmented value={view} onPzChange={(e) => setView(e.detail.value)}>
<pz-option value="list">Список</pz-option>
<pz-option value="board">Доска</pz-option>
</PzSegmented><!-- index.html — те же две строки с CDN -->
<pz-segmented value={view} onpz-change={(e) => (view = e.detail.value)}>
<pz-option value="list">Список</pz-option>
<pz-option value="board">Доска</pz-option>
</pz-segmented>Прочитай https://ds.partsbooster.com/v1/llms.txt и собери интерфейс на pulse-ds: готовые блоки и компоненты <pz-*>, свои стили — только через var(--pz-*). # в Claude Code это делает скилл pulse-ds сам
.dark или data-theme="dark" на <html> (или любом блоке), data-theme="auto" — по системе. Сообщения — PulseDS.toast(), подтверждения — PulseDS.confirmDialog().Та же система живёт в Claude: из неё делаются макеты, слайды и прототипы, а Claude Code собирает по ней настоящие экраны. Всё — из этого репозитория, поэтому макет и код не расходятся.
<pz-*>. В Claude Code это делает скилл pulse-ds и правило в глобальном CLAUDE.md — без напоминаний.
Правка делается один раз — в репозитории — и расходится везде: в приложения через CDN, в Claude через артефакт.
labs/pulse-ds по его CLAUDE.md.src/components/pz-* (код + описание), значение — tokens/tokens.json. Каталог, типы и этот сайт обновятся сами.npm test и витрина глазами: светлая, тёмная, телефон.version, слить в main, джоба deploy в GitLab CI. Через 5 минут правка во всех приложениях на v1.npm run artifact и публикация в артефакт — макеты в Claude совпадают с кодом.Форма, тени, компоненты и движение общие. Приложение меняет только слой бренда — несколько токенов в одном файле после pulse-ds.css:
/* brand.css */
:root {
--pz-accent: #0f9fb4;
--pz-accent-2: #3cc6d6;
--pz-grad: linear-gradient(135deg, #3cc6d6, #0f9fb4);
--pz-font-head: "Manrope", var(--pz-font-text);
}Токены — CSS-переменные --pz-*; в Tailwind — утилиты с префиксом pz-. Переключите тему вверху — значения поменяются здесь же.
--pz-bgЗемля: фон приложения под градиентом --ground.--pz-bg-2Фон дровера и вложенных панелей.--pz-surfaceКарточки, белые пилюли, выбранный сегмент.--pz-surface-2Колодцы внутри карточек, поля форм.--pz-wellДорожки полос этапов и колец.--pz-segДорожка сегмента и степпера.--pz-glassСтекло плавающих шапок.--pz-glass-strongСтекло меню, листов, палитры.--pz-scrimЗатемнение под окном и листом.--pz-hoverНаведение на пункт меню, день календаря, строку на белом.--pz-fgОсновной текст и заголовки.--pz-text-2Вторичный текст, описания.--pz-mutedПодписи, мета-строки.--pz-faintПлейсхолдеры, заглавные подписи.--pz-chevШевроны, выключенные точки, ручки.--pz-hairПодложка hover, чипы, тончайшие заливки.--pz-hair-2Контуры пустых пилюль и полей.--pz-inkГлавное действие, тосты, выбранный чип.--pz-ink-2Верх градиента чернил.--pz-on-inkТекст на чернилах.--pz-selectionВыделение текста.--pz-linkСсылки, кольцо фокуса, непрочитанное.--pz-link-softОреол фокуса, выделение.--pz-accentБренд: логотип, «ждут тебя», горящий срок.--pz-accent-2Светлый край оранжевого градиента.--pz-accent-softПодложка горящего срока.--pz-accent-deepТекст на accent-soft.--pz-ideaИдея.--pz-idea-softИдея.--pz-taskЗадача.--pz-task-softЗадача.--pz-bugБаг.--pz-bug-softБаг.--pz-docДокумент.--pz-doc-softДокумент.--pz-annОбъявление.--pz-ann-softОбъявление.--pz-okУспех.--pz-ok-softУспех.--pz-ok-brightУспех.--pz-warnВнимание.--pz-warn-softВнимание.--pz-dangerОшибка и удаление.--pz-danger-softОшибка и удаление.--pz-st-newЦвет этапа в полосе.--pz-st-discЦвет этапа в полосе.--pz-st-workЦвет этапа в полосе.--pz-st-doneЦвет этапа в полосе.--pz-pri-highВажность «Высокая»: янтарный текст.--pz-pri-high-softВажность «Высокая»: подложка, отличается от danger-soft.--pz-chat-aФон чата, верх.--pz-chat-bФон чата, низ.--pz-bubЧужой пузырь.--pz-bub-meСвой пузырь.--pz-bub-me-fgТекст своего пузыря.--pz-ai-aСлой ИИ, начало градиента.--pz-ai-bСлой ИИ, конец градиента.--pz-ai-fgТекст и иконки ИИ.--pz-accent-fgТекст на оранжевом градиенте.--pz-glass-edgeСветлая кромка стекла.--pz-veilПолупрозрачная подложка значка на ИИ-пилюле.--pz-toast-btnКнопка внутри чернильного тоста.--pz-orb-aШар пустого состояния, блик.--pz-orb-bШар пустого состояния, край.r-pill999pxr-card24pxr-panel28pxr-in16pxr-tile14pxr-ctl13pxr-well20pxr-menu22pxr-area15pxr-tip10pxsh-cardПарящая карточка.sh-card-hoverКарточка и пилюля на hover.sh-btnБелые пилюли и круглые кнопки.sh-segВыбранный сегмент, активный пункт меню, открытая строка.sh-popМеню и выпадашки.sh-floatДровер, панель чатов, окна, листы.sh-inkЧернильные кнопки и тосты.sh-glassСтеклянные шапки и поле чата.space-22px — Между строками списка.space-44px — Внутри групп иконок.space-88px — Между пилюлями в строке.space-1212px — Между блоками в карточке.space-1616px — Между карточками.space-2424px — Поля карточки.space-3232px — Между секциями.Шапка с ИИ-брифом, сетка виджетов-карточек: «Ждут тебя», ключевые числа, «Где горит», ИИ-итог. Числа — табличные цифры, графики — sparkline/диаграммы по правилам dataviz. Основа «Моего Пульса» и любых сводок.
Контролы: кнопки, поля, выбор, метки
Значок Material Symbols Rounded по имени. Размеры 16/18/20/24; у активного пункта и статуса — заливка (fill).
<div class="pz-row"><pz-icon name="monitor_heart" size="24"></pz-icon><pz-icon name="forum" tone="muted"></pz-icon><pz-icon name="auto_awesome" tone="ai"></pz-icon><pz-icon name="check_circle" tone="ok" fill></pz-icon><pz-icon name="local_fire_department" tone="accent" fill size="18"></pz-icon></div>
namestringИмя значка из Material Symbols (add, search, forum, monitor_heart…).sizenumberРазмер в px. По умолчанию — размер значка контрола (--ic), иначе 20.fillbooleanЗалитый вариант: активный пункт, статус.tonemuted · faint · link · accent · ok · danger · aiЦвет. Без атрибута — цвет текста.Кнопка-пилюля. Белая — обычное действие, чернильная — одно главное на экран, тихая (ghost), синяя — отправка в чате, danger — удаление.
<div class="pz-row"><pz-button variant="ink" icon="add">Создать</pz-button><pz-button icon="ios_share">Поделиться</pz-button><pz-button variant="ghost">Отмена</pz-button><pz-button variant="blue" icon="send">Отправить</pz-button><pz-button variant="danger" icon="delete">Удалить</pz-button></div>
<div class="pz-stack tight"><div class="pz-row pz-sm"><pz-button>Малая</pz-button><pz-button dropdown>Фильтр</pz-button></div><div class="pz-row"><pz-button loading>Сохраняю</pz-button><pz-button disabled>Недоступна</pz-button></div><div class="pz-row pz-lg"><pz-button variant="ink" icon="add" dropdown>Создать</pz-button></div></div>
variantwhite · ink · ghost · blue · danger · whiteВид. ink — главное действие (в тёмной теме светлое).sizesm · md · lg · mdВысота 32/40/48. Обычно задаётся рядом (.pz-sm/.pz-lg на предке), а не кнопкой.iconstringЗначок слева.icon-endstringЗначок справа.dropdownbooleanШеврон справа — кнопка открывает меню.loadingbooleanКольцо вместо значка, нажатия не проходят.disabledbooleanblockbooleanНа всю ширину.hrefstringСделать ссылкой <a>.typebutton · submit · reset · buttonsubmit отправляет форму, в которой стоит кнопка.@clickОбычный click; при disabled и loading не всплывает.slot ·Подпись.slot startПеред подписью (аватар, плитка).slot endПосле подписи (счётчик pz-counter).Круглая кнопка со значком. Без заливки по умолчанию, solid — белая с тенью, ink — чернильная. Счётчик и точка непрочитанного.
<div class="pz-row"><pz-icon-button icon="more_horiz" label="Ещё"></pz-icon-button><pz-icon-button icon="close" label="Закрыть" variant="solid"></pz-icon-button><pz-icon-button icon="add" label="Создать" variant="ink"></pz-icon-button><pz-icon-button icon="send" label="Отправить" variant="blue"></pz-icon-button><pz-icon-button icon="notifications" label="Уведомления" variant="solid" dot></pz-icon-button></div>
iconstringЗначок.labelstringПодпись для экранных дикторов и подсказка. Обязательна.variantplain · solid · ink · blue · plainsizesm · md · lg · mdonbooleanВыбрана (в группе — чернильная).badgestringЧисло в чернильном кружке.dotbooleanОранжевая точка — есть новое.fillbooleanЗалитый значок.hrefstringdisabledboolean@clickБелая пилюля с кнопками-значками внутри: шапка страницы (чаты, объявления, колокольчик), переключатель вида. Выбранная — чернильная.
<div class="pz-row"><pz-icon-group size="lg" label="Сообщения"><pz-icon-button icon="forum" label="Чаты" badge="3"></pz-icon-button><pz-icon-button icon="campaign" label="Объявления"></pz-icon-button><pz-icon-button icon="notifications" label="Уведомления" dot></pz-icon-button></pz-icon-group><pz-icon-group label="Вид"><pz-icon-button icon="view_agenda" label="Список" on></pz-icon-button><pz-icon-button icon="view_kanban" label="Доска"></pz-icon-button><pz-sep></pz-sep><pz-icon-button icon="tune" label="Настроить"></pz-icon-button></pz-icon-group></div>
sizesm · md · lg · mdlabelstringaria-label группы.slot ·pz-icon-button и разделители <pz-sep>.Поле с подписью сверху и подсказкой или ошибкой снизу: однострочное, многострочное (multiline), поиск-пилюля (variant="search"). Работает в <form> как обычный input.
<div class="pz-stack tight" style="max-width:420px"><pz-field label="Название" placeholder="Коротко, что сделать" required></pz-field><pz-field label="Почта" type="email" value="anna@" error="Нужен адрес целиком"></pz-field><pz-field label="Описание" multiline autogrow hint="Можно Markdown"></pz-field><pz-field label="Недоступно" value="Только чтение" disabled></pz-field></div>
<div class="pz-row"><pz-field variant="search" size="lg" placeholder="Поиск и команды" kbd="⌘K" style="width:320px"></pz-field><pz-field variant="search" placeholder="Найти в списке" clearable value="бриф"></pz-field></div>
labelstringПодпись сверху (500 13 px, без капслока).valuestringplaceholderstringnamestringИмя в FormData.typetext · email · password · number · search · tel · url · date · time · texthintstringПодсказка под полем.errorstringТекст ошибки: поле красным ореолом, текст вместо подсказки.iconstringЗначок слева.kbdstringКлавиша справа (⌘K).multilinebooleanМногострочное, от 88 px.rowsnumber · 3autogrowbooleanРастёт по тексту.clearablebooleanКрестик очистки, когда есть текст.variantfield · search · fieldsearch — пилюля с тенью для поиска.sizesm · md · lg · mdДля поиска — высота пилюли; для поля sm — 32.requiredbooleandisabledbooleanreadonlybooleanautofocusbooleanautocompletestringmaxlengthnumberminstringmaxstringinputmodestring@input—Каждый ввод (родное событие; значение — el.value).@pz-change{ value }Значение зафиксировано (blur, Enter, очистка).slot startПеред текстом (аватар, чип).slot endПосле текста (кнопка-значок).Флажок 18 px (включённый — синий с галочкой) и радио (type="radio" в <pz-radio-group>). Подпись — содержимое, пояснение — hint.
<div class="pz-row" style="gap:32px;align-items:flex-start"><div class="pz-stack tight"><pz-checkbox checked>Сверстать корзину</pz-checkbox><pz-checkbox>Проверить оплату</pz-checkbox><pz-checkbox indeterminate hint="2 из 5 подзадач">Чеклист</pz-checkbox></div><pz-radio-group><pz-checkbox type="radio" name="w" value="day" checked>Каждый день</pz-checkbox><pz-checkbox type="radio" name="w" value="week">Раз в неделю</pz-checkbox></pz-radio-group></div>
checkedbooleanindeterminatebooleanЧастично выбрано (минус).typecheckbox · radio · checkboxnamestringvaluestring · onhintstringВторая строка серым.disabledboolean@pz-change{ checked, value }slot ·Подпись.Тумблер 44×26: включённый — синий градиент. Для настроек — внутри pz-setting-row, подпись и пояснение даёт строка.
<div class="pz-row"><pz-toggle checked label="Уведомления"></pz-toggle><pz-toggle label="Дайджест"></pz-toggle><pz-toggle disabled label="Недоступно"></pz-toggle></div>
checkedbooleanlabelstringaria-label, если рядом нет подписи.namestringvaluestring · ondisabledboolean@pz-change{ checked }Выбор одного из 2–6 вариантов в строке: вкладки страницы, переключатель вида, фильтр. Выбранный — чернильная пилюля; на белой карточке — мягкая синяя заливка (variant="soft").
<div class="pz-stack tight"><pz-segmented value="work"><pz-option value="all">Все</pz-option><pz-option value="work" count="12">В работе</pz-option><pz-option value="wait" count="3" hot>Ждут меня</pz-option><pz-option value="done">Готово</pz-option></pz-segmented><pz-segmented size="sm" value="week"><pz-option value="day">День</pz-option><pz-option value="week">Неделя</pz-option><pz-option value="month">Месяц</pz-option></pz-segmented><pz-segmented icons value="list"><pz-option value="list" icon="view_agenda">Список</pz-option><pz-option value="board" icon="view_kanban">Доска</pz-option></pz-segmented></div>
valuestringВыбранный вариант (value у pz-option). По умолчанию — первый.variantink · soft · inksoft — на белой карточке, в меню, дровере.sizesm · md · mdsm 28 — вторичный фильтр внутри карточки (сразу soft).fillbooleanРастянуть на всю ширину.iconsbooleanТолько значки (подписи — в подсказках).labelstringaria-label группы.namestring@pz-change{ value }slot ·<pz-option value icon count hot disabled>Подпись</pz-option> — варианты.Метка 26 px: тип записи, тег, срок. Ненажимаемый — тонированный; нажимаемый (clickable) — белый с тенью; выбранный фильтр — чернильный (on).
<div class="pz-row"><pz-chip tone="idea" icon="lightbulb">Идея</pz-chip><pz-chip tone="task" icon="task_alt">Задача</pz-chip><pz-chip tone="bug" icon="bug_report">Баг</pz-chip><pz-chip tone="doc" icon="description">Документ</pz-chip><pz-chip tone="ann" icon="campaign">Объявление</pz-chip><pz-chip tone="hot" icon="schedule">Сегодня</pz-chip><pz-chip tone="ai" icon="auto_awesome">ИИ-итог</pz-chip><pz-chip>оплата</pz-chip></div>
<div class="pz-row"><pz-chip clickable on>Все</pz-chip><pz-chip clickable tone="bug" icon="bug_report">Баги</pz-chip><pz-chip clickable removable>Исполнитель: Дима</pz-chip></div>
toneneutral · idea · task · bug · doc · ann · ok · warn · hot · lnk · ai · danger · neutraliconstringclickablebooleanКнопка-фильтр.onbooleanВыбран (чернильный).outbooleanБелый с тенью, ненажимаемый.removablebooleanКрестик, событие pz-remove.@click@pz-removeНажат крестик.slot ·Текст.Статус записи: белая пилюля 28 с точкой цвета этапа и словом. Этапы: новые, обсуждаем, в работе, на проверке, сделано, выключено, блокер.
<div class="pz-row"><pz-badge status="new">Новая</pz-badge><pz-badge status="disc">Обсуждаем</pz-badge><pz-badge status="work">В работе</pz-badge><pz-badge status="rev">На проверке</pz-badge><pz-badge status="done">Сделано</pz-badge><pz-badge status="block">Блокер</pz-badge><pz-badge status="off">В архиве</pz-badge></div>
statusnew · disc · work · rev · done · off · blockЭтап → цвет точки.colorstringСвой цвет точки (CSS-цвет или var(--pz-…)).slot ·Название статуса.Число в пилюле 22 px: синий — обращаются ко мне, оранжевый (hot) — ждут тебя, серый (mute), чернильный (ink), plain — серое число без подложки.
<div class="pz-row"><pz-counter value="3"></pz-counter><pz-counter tone="hot" value="5"></pz-counter><pz-counter tone="mute" value="12"></pz-counter><pz-counter tone="ink" value="1"></pz-counter><pz-counter tone="plain" value="37"></pz-counter></div>
toneblue · hot · mute · ink · plain · bluevaluestringЧисло (или содержимое).Подсказка клавиши: ⌘K, ⌘N, ↵, Esc. В поле — атрибут kbd у pz-field, в пункте меню — kbd у pz-menu-item.
<div class="pz-row"><pz-kbd>⌘K</pz-kbd><pz-kbd>⌘N</pz-kbd><pz-kbd>↵</pz-kbd><pz-kbd>Esc</pz-kbd></div>
slot ·Клавиша.Аватар: фото или инициалы на мягкой подложке (цвет стабилен по имени). <pz-faces max> — стопка лиц участников с «+N».
<div class="pz-row"><pz-avatar name="Анна Котова"></pz-avatar><pz-avatar name="Дима Смирнов" size="36"></pz-avatar><pz-avatar name="Олег" solid size="36"></pz-avatar><pz-avatar name="Борис" icon="smart_toy" size="36"></pz-avatar><pz-faces max="3"><pz-avatar name="Анна"></pz-avatar><pz-avatar name="Дима"></pz-avatar><pz-avatar name="Олег"></pz-avatar><pz-avatar name="Ира"></pz-avatar><pz-avatar name="Саша"></pz-avatar></pz-faces></div>
namestringИмя: инициалы, цвет и подсказка.srcstringФото; при ошибке загрузки — инициалы.sizenumber · 3024 / 30 / 36 / 44 / 56 / 72.solidbooleanСплошной цвет, белые буквы.iconstringЗначок вместо инициалов.ringbooleanБелая обводка (в стопке ставится сама).Тонированная плитка со значком: тип записи, пространство, тема, раздел. Подложка — цвет 15 %, глиф того же цвета. logo — оранжевый градиент бренда.
<div class="pz-row"><pz-tile tone="logo" icon="ecg_heart"></pz-tile><pz-tile tone="idea" icon="lightbulb"></pz-tile><pz-tile tone="task" icon="task_alt"></pz-tile><pz-tile tone="bug" icon="bug_report"></pz-tile><pz-tile tone="doc" icon="description"></pz-tile><pz-tile tone="ann" icon="campaign"></pz-tile><pz-tile tone="ai" icon="auto_awesome"></pz-tile><pz-tile color="#d6418f" icon="shopping_cart" size="sm"></pz-tile><pz-tile color="#0f9fb4" icon="local_shipping" size="xs"></pz-tile><pz-tile tone="ink" icon="add" round size="lg"></pz-tile></div>
iconstringtoneidea · task · bug · doc · ann · ok · warn · hot · lnk · ai · danger · ink · logocolorstringСвой цвет (цвет пространства/темы): #hex или var(--pz-…).sizexs · sm · md · lg · md28 / 36 / 44 / 56.roundbooleanlabelstringПодпись для экранных дикторов, если плитка несёт смысл.Чернильная плашка над элементом по наведению и фокусу (задержка 400 мс), с клавишей. Оборачивает элемент.
<div class="pz-row"><pz-tooltip text="Быстрая подача" kbd="⌘N"><pz-icon-button icon="bolt" label="Быстрая подача" variant="solid"></pz-icon-button></pz-tooltip><pz-tooltip text="Поиск и команды" kbd="⌘K" placement="bottom"><pz-button icon="search">Поиск</pz-button></pz-tooltip></div>
textstringkbdstringКлавиша справа.placementtop · bottom · topslot ·Элемент, к которому подсказка.Кольцо загрузки цвета текста. Для кнопки — атрибут loading у pz-button, для содержимого — pz-skeleton.
<div class="pz-row"><pz-spinner></pz-spinner><pz-spinner size="28"></pz-spinner></div>
sizenumber · 20labelstring · ЗагрузкаЗаглушка на время загрузки: строки текста (lines) или блок нужного размера. Форма повторяет будущее содержимое.
<pz-card style="max-width:360px"><div class="pz-row nowrap" style="gap:12px"><pz-skeleton width="44px" height="44px" radius="14px" style="flex:none"></pz-skeleton><pz-skeleton lines="2" style="flex:1"></pz-skeleton></div><pz-skeleton lines="3" style="margin-top:16px"></pz-skeleton></pz-card>
linesnumberСколько строк текста.widthstring · 100%heightstring · 12pxradiusstring · 10pxСоставные: параметры, меню, карточки, списки
Парящая белая карточка — виджет, блок формы, секция. Шапка: плитка, заголовок, счётчик, подзаголовок, действия справа. Вложенные блоки — <pz-well> (колодец без тени).
Закрыто 14 задач, 2 бага ждут решения. Больше всего движения в «Оплате».
<div class="pz-grid"><pz-card title="Ждут тебя" count="3" icon="hourglass_top" tone="hot"><pz-button slot="actions" variant="ghost">Все</pz-button><div class="pz-stack tight"><pz-well><b>Проверить оплату PayPal</b><div class="pz-small">Дима отдал на проверку 8 ч назад</div></pz-well><pz-well><b>Ответить по возвратам</b><div class="pz-small">срок сегодня</div></pz-well></div></pz-card><pz-card title="Итог недели" icon="auto_awesome" tone="ai" tint="ai" subtitle="ИИ-сводка по пространству"><p class="pz-body" style="margin:0">Закрыто 14 задач, 2 бага ждут решения. Больше всего движения в «Оплате».</p><pz-button slot="footer" size="sm">Открыть сводку</pz-button></pz-card></div>
titlestringЗаголовок h3.subtitlestringcountstringСерое число рядом с заголовком.iconstringПлитка слева от заголовка.tonestringТон плитки (как у pz-tile).colorstringСвой цвет плитки.hoverbooleanПоднимается на 3 px при наведении (кликабельная карточка).hrefstringВся карточка — ссылка.padmd · sm · none · mdПоля 22×24 / 16×18 / 0 (для списков и картинок до края).tintai · hotТонированная подложка: ИИ-итог, горящее.slot ·Содержимое.slot actionsСправа в шапке (кнопки sm, сегмент).slot headerПод заголовком (чипы, лица).slot leadВместо плитки (аватар).slot footerНиз карточки (кнопки).Параметр записи одной пилюлей: исполнитель, срок, важность, тема, связи. Лид-круг (значок или аватар), значение, тихая подпись, шеврон. Ряд пилюль заменяет лист свойств.
<div class="pz-row"><pz-param-pill avatar="Дима Смирнов" value="Дима"></pz-param-pill><pz-param-pill icon="event" value="Сегодня" label="срок" hot></pz-param-pill><pz-param-pill icon="flag" value="Высокая"></pz-param-pill><pz-param-pill icon="sell" value="Метка" none></pz-param-pill><pz-param-pill icon="person_add" ai value="Анна" label="предлагает ИИ"></pz-param-pill><pz-param-pill size="sm" icon="link" value="2 связи"></pz-param-pill></div>
valuestringЗначение (или содержимое).labelstringТихая подпись после значения («срок», «важность»).iconstringЗначок в круге.avatarstringИмя человека — аватар в круге.srcstringФото для аватара.nonebooleanНе задано: пунктирный контур, серый текст («+ Исполнитель»).hotbooleanГорит: просроченный или сегодняшний срок.aibooleanПредложение ИИ.openbooleanМеню открыто — ореол (pz-dropdown ставит сам).errorbooleansizesm · md · mdno-chevronbooleanБез шеврона (параметр только для чтения).disabledbooleanslot ·Значение.slot leadСвой лид вместо icon/avatar.Триггер + стеклянная плавающая панель (меню, календарь, любая форма). Верхний слой, закрытие кликом мимо и Esc, переворот у края экрана; на телефоне — лист снизу.
<pz-dropdown><pz-param-pill slot="trigger" avatar="Дима Смирнов" value="Дима"></pz-param-pill><pz-menu search="Найти человека" select="single"><pz-menu-label>Команда</pz-menu-label><pz-menu-item value="dima" avatar="Дима Смирнов" hint="frontend" selected>Дима Смирнов</pz-menu-item><pz-menu-item value="anna" avatar="Анна Котова" hint="дизайн">Анна Котова</pz-menu-item><pz-menu-item value="oleg" avatar="Олег Петров">Олег Петров</pz-menu-item><pz-menu-item value="boris" icon="smart_toy" hint="ИИ-исполнитель">Борис</pz-menu-item><pz-sep></pz-sep><pz-menu-item value="" icon="person_off">Без исполнителя</pz-menu-item></pz-menu></pz-dropdown>
<div class="pz-row"><pz-dropdown placement="bottom-end"><pz-button slot="trigger" variant="ink" icon="add" dropdown>Создать</pz-button><pz-menu><pz-menu-item icon="task_alt" kbd="T">Задача</pz-menu-item><pz-menu-item icon="bug_report" kbd="B">Баг</pz-menu-item><pz-menu-item icon="lightbulb" kbd="I">Идея</pz-menu-item><pz-menu-item icon="description">Документ</pz-menu-item><pz-sep></pz-sep><pz-menu-item icon="draft" hint="3 черновика">Черновики</pz-menu-item></pz-menu></pz-dropdown><pz-dropdown flush><pz-param-pill slot="trigger" icon="event" value="Пятница" label="срок"></pz-param-pill><pz-calendar></pz-calendar></pz-dropdown></div>
openbooleanplacementbottom-start · bottom-end · top-start · top-end · bottom-startflushbooleanБез внутренних полей (календарь, своя разметка).widthstring"trigger" — по ширине триггера, или CSS-длина.sheetbooleanВсегда листом снизу.titlestringЗаголовок листа на телефоне.@pz-open@pz-closeslot triggerКнопка, пилюля-параметр, аватар — что открывает.slot ·Содержимое панели: pz-menu, pz-calendar, форма.Список пунктов для pz-dropdown: действия или выбор значения. Поиск-шапка (search) фильтрует на месте, ↑↓ ↵ с клавиатуры, группы с подписями, галочка у выбранного.
<pz-card pad="sm" style="max-width:300px"><pz-menu><pz-menu-item icon="open_in_full" kbd="F">Во весь экран</pz-menu-item><pz-menu-item icon="link">Скопировать ссылку</pz-menu-item><pz-menu-item icon="call_merge" hint="объединить с похожей">Слить с задачей</pz-menu-item><pz-sep></pz-sep><pz-menu-item icon="delete" danger>Удалить</pz-menu-item></pz-menu></pz-card>
searchstringПлейсхолдер поиска — включает поиск-шапку.selectsingle · multipleРежим выбора: пункты отмечаются галочкой, событие pz-change.emptystring · Ничего не нашлосьТекст, когда поиск ничего не нашёл.@pz-select{ value, item, selected }Нажат пункт (закрывает выпадашку, кроме multiple).@pz-change{ value }Изменился выбор (select).@pz-search{ query }Ввод в поиске — для подгрузки с сервера.slot ·<pz-menu-item value icon avatar hint kbd selected danger disabled href>Текст</pz-menu-item>, <pz-menu-label>Группа</pz-menu-label>, <pz-sep>.Выбор даты в две панели: быстрые варианты слева (Сегодня, Завтра, Пятница, Через неделю…), месяц справа. На телефоне варианты — пилюли над месяцем. Обычно — внутри <pz-dropdown flush>.
<pz-card pad="none" style="display:inline-block"><pz-calendar></pz-calendar></pz-card>
valuestringISO-дата YYYY-MM-DD; пусто — без срока.no-quickbooleanБез панели быстрых вариантов — только месяц.no-nonebooleanБез варианта «Без срока» (дата обязательна).minstringРаньше этой даты выбрать нельзя.@pz-change{ value }@pz-select{ value }Закрывает выпадашку.Строка списка записей внутри карточки: плитка типа, номер, заголовок, мета-строка, справа — лица, срок, статус. Наведение — колодец, открытая — мягкая синяя заливка.
<pz-card pad="sm" style="max-width:720px"><div style="display:grid;gap:2px"><pz-list-row icon="bug_report" tone="bug" id-label="ПРО-141" title="Корзина теряет купон после входа" meta="Дима · обновлено 2 ч назад" unread><pz-chip slot="end" tone="hot" icon="schedule">Сегодня</pz-chip><pz-avatar slot="end" name="Дима Смирнов" size="24"></pz-avatar></pz-list-row><pz-list-row icon="task_alt" tone="task" id-label="ПРО-140" title="Гостевой чекаут" meta="Анна · в работе" selected><pz-badge slot="end" status="work">В работе</pz-badge></pz-list-row><pz-list-row icon="lightbulb" tone="idea" title="Оплата частями" meta="12 голосов · обсуждаем"><pz-faces slot="end" max="2" size="24"><pz-avatar name="Анна"></pz-avatar><pz-avatar name="Олег"></pz-avatar><pz-avatar name="Ира"></pz-avatar></pz-faces></pz-list-row></div></pz-card>
titlestringЗаголовок (или содержимое).metastringВторая строка серым.id-labelstringНомер записи (ПРО-140), моноширинным.iconstringПлитка слева.tonestringcolorstringhrefstringselectedbooleanОткрыта в дровере.unreadbooleanСиняя точка слева.denseboolean@clickОткрыть запись (обычно — в pz-drawer).slot ·Заголовок.slot metaМета-строка с разметкой.slot leadСвой лид (аватар).slot endСправа: pz-faces, pz-chip, pz-badge, pz-counter.Степпер статуса записи — одна рейка: этапы пилюлями, подсказка «что дальше», действие справа. <pz-stages> — компактная лента этапов конвейера (сделано → сейчас → дальше).
<pz-stepper steps="Новая, Обсуждаем, В работе, Проверка, Готово" current="2" hint="Осталось 2 пункта чеклиста" interactive><pz-button variant="ink" icon="send">На проверку</pz-button></pz-stepper>
<pz-stages steps="Разбор, План, Код, Проверка, Выкатка" current="2"></pz-stages>
stepsstringЭтапы через запятую: «Новая, Обсуждаем, В работе, Проверка, Готово».currentnumber · 0Индекс текущего этапа (с нуля).hintstringЧто дальше: «Ждёт ревью Анны».interactivebooleanЭтапы нажимаются — событие pz-change.@pz-change{ index, step }slot ·Действие справа (pz-button, обычно ink — «Отдать на проверку»).Файл, картинка или ссылка: ряд 56 с квадратом-превью и двумя строками. add — пунктирная кнопка «Прикрепить». Раскладка — .pz-row.
<div class="pz-row"><pz-attachment name="Договор поставки 2026.pdf" meta="1,2 МБ" removable></pz-attachment><pz-attachment kind="img" name="Макет корзины.png" meta="840 КБ"></pz-attachment><pz-attachment kind="link" name="figma.com/file/…" meta="Figma"></pz-attachment><pz-attachment add meta="или перетащи файл"></pz-attachment></div>
namestringmetastringРазмер, источник.kindfile · img · link · filethumbstringПревью картинки.hrefstringiconstringaddbooleanremovablebooleanКрестик при наведении, событие pz-remove.@click@pz-removeНастройка в колодце: заголовок и пояснение слева, контрол справа (тумблер, сегмент, кнопка). Стопка строк — .pz-stack.tight внутри карточки.
<pz-card title="Уведомления" style="max-width:620px"><div class="pz-stack tight"><pz-setting-row title="Telegram" hint="Сразу, когда что-то ждёт тебя" icon="send" tone="lnk"><pz-toggle checked label="Telegram"></pz-toggle></pz-setting-row><pz-setting-row title="Сводка «Пока тебя не было»" hint="После суток отсутствия"><pz-segmented size="sm" value="tg"><pz-option value="tg">Telegram</pz-option><pz-option value="mail">Почта</pz-option><pz-option value="off">Нет</pz-option></pz-segmented></pz-setting-row></div></pz-card>
titlestringhintstringПояснение серым.iconstringПлитка слева.tonestringslot ·Контрол справа.slot hintПояснение с разметкой.Короткое сообщение чернильной пилюлей снизу по центру, с действием («Вернуть»). Вызывается функцией toast(текст, { action, onAction, tone, ms }).
<div class="pz-stack tight" style="justify-items:start"><pz-toast action="Вернуть">Задача удалена</pz-toast><pz-toast tone="ok">Сохранено</pz-toast><pz-button onclick="PulseDS.toast('Ссылка скопирована', { tone: 'ok' })">Показать тост</pz-button></div>actionstringКнопка действия справа.iconstringtoneok · errЗначок успеха или ошибки.@pz-actionНажата кнопка действия.Когда показывать нечего или загрузка упала: шар со значком, заголовок, короткий текст и действие.
<div class="pz-grid"><pz-card><pz-empty icon="lightbulb" title="Идей пока нет" text="Подай первую — команда увидит её в ленте и сможет проголосовать."><pz-button variant="ink" icon="add">Новая идея</pz-button></pz-empty></pz-card><pz-card><pz-empty compact tone="ok" icon="done_all" title="Всё разобрано" text="Ничего не ждёт тебя."></pz-empty></pz-card><pz-card><pz-empty compact tone="err" title="Не загрузилось" text="Нет связи с сервером."><pz-button icon="refresh" size="sm">Повторить</pz-button></pz-empty></pz-card></div>
iconstring · inboxtitlestringtextstringtoneerr · okerr — ошибка (значок cloud_off), ok — «всё сделано».compactbooleanВнутри карточки.slot ·Действия (кнопки).slot textТекст с разметкой вместо атрибута text.Панели и каркас: дровер, шапка, сайдбар, чат
Запись открывается дровером, а не отдельной страницей. Три режима: справа рядом со списком (side), окном (window), на весь экран (full). Шапка с ↑↓ «1 из 5», пилюлей номера и переключателем режимов; ряд параметров; тело; низ. На телефоне — на весь экран.
Покупатель оформляет заказ без аккаунта; аккаунт создаётся после оплаты, письмо со ссылкой на пароль.
<pz-button icon="open_in_new" onclick="this.nextElementSibling.show()">Открыть запись</pz-button><pz-drawer id-label="ПРО-140" icon="task_alt" tone="task" title="Гостевой чекаут без регистрации" index="2" total="5"><pz-badge slot="header" status="work">В работе</pz-badge><pz-icon-button slot="actions" icon="more_horiz" label="Ещё" variant="solid" size="sm"></pz-icon-button><pz-param-pill slot="params" avatar="Анна Котова" value="Анна" size="sm"></pz-param-pill><pz-param-pill slot="params" icon="event" value="Пятница" label="срок" size="sm"></pz-param-pill><pz-param-pill slot="params" icon="flag" value="Высокая" size="sm"></pz-param-pill><pz-stepper steps="Новая, В работе, Проверка, Готово" current="1" hint="Осталось 2 пункта"></pz-stepper><p class="pz-body-lg" style="margin:0">Покупатель оформляет заказ без аккаунта; аккаунт создаётся после оплаты, письмо со ссылкой на пароль.</p><pz-well title="Чеклист"><div class="pz-stack tight"><pz-checkbox checked>Форма без пароля</pz-checkbox><pz-checkbox>Письмо после оплаты</pz-checkbox></div></pz-well><pz-button slot="footer" variant="ghost">Отложить</pz-button><span slot="footer" class="pz-spacer"></span><pz-button slot="footer" variant="ink" icon="send">На проверку</pz-button></pz-drawer>
openbooleanmodeside · window · full · sidetitlestringЗаголовок записи (h2).id-labelstringНомер записи в пилюле (ПРО-140).iconstringПлитка типа в пилюле номера.tonestringindexnumberПозиция в списке (с 1).totalnumberСколько в списке — показывает ↑↓ и «1 из N».no-modesbooleanБез переключателя режимов.pushbooleanВ режиме side ужимать страницу (pz-app-shell сдвигает контент).widthstring · 560pxШирина в режиме side.@pz-open@pz-close@pz-mode{ mode }@pz-prev@pz-nextslot ·Тело: описание, чеклист (pz-well), вложения, степпер.slot paramsРяд pz-param-pill / pz-dropdown под заголовком.slot actionsКнопки в шапке перед «Закрыть» (ещё, поделиться).slot headerПосле пилюли номера (бейдж статуса).slot titleСвой заголовок вместо title (правка на месте).slot footerНиз: главное действие справа.Окно по центру с затемнением: подтверждение, короткая форма. На телефоне — лист снизу. Подтверждение одной строкой — confirmDialog({ title, text, ok, danger }).
<div class="pz-row"><pz-button icon="person_add" onclick="this.nextElementSibling.show()">Пригласить</pz-button><pz-dialog title="Пригласить в пространство" text="Ссылка придёт на почту." icon="person_add" tone="lnk"><pz-field label="Почта" type="email" placeholder="name@company.ru"></pz-field><pz-button slot="footer" variant="ghost" onclick="this.closest('pz-dialog').close()">Отмена</pz-button><pz-button slot="footer" variant="ink">Пригласить</pz-button></pz-dialog><pz-button variant="danger" icon="delete" onclick="PulseDS.confirmDialog({ title: 'Удалить задачу?', text: 'Вернуть её будет нельзя.', ok: 'Удалить', danger: true }).then(ok => ok && PulseDS.toast('Удалено'))">Удалить</pz-button></div>openbooleantitlestringtextstringiconstringПлитка слева от заголовка.tonestringsizesm · md · lg · md400 / 480 / 720.persistentbooleanНе закрывать по Esc и клику мимо.@pz-open@pz-close{ value }slot ·Тело (поля формы).slot footerДействия справа: ghost «Отмена» + ink или danger.Стеклянный лист снизу с ручкой — действия и выбор на телефоне. Меню pz-dropdown становится листом само; pz-sheet — для своих экранов (фильтры, «ещё»).
<pz-button icon="tune" onclick="this.nextElementSibling.show()">Фильтры</pz-button><pz-sheet title="Фильтры"><pz-button slot="actions" variant="ghost" size="sm">Сбросить</pz-button><div class="pz-stack tight"><pz-segmented fill value="all"><pz-option value="all">Все</pz-option><pz-option value="mine">Мои</pz-option><pz-option value="wait">Ждут</pz-option></pz-segmented><pz-setting-row title="Только горящие"><pz-toggle label="Только горящие"></pz-toggle></pz-setting-row><pz-button variant="ink" block>Показать 12</pz-button></div></pz-sheet>
openbooleantitlestring@pz-closeslot ·Содержимое (pz-menu, поля, кнопки).slot actionsСправа от заголовка.Заголовок страницы H1 с плиткой раздела и контекстным чипом, ИИ-строка или подзаголовок под ним; справа — действия высотой 48 (поиск, группа значков, «+ Создать», аватар); ниже — вкладки.
<pz-page-header title="Мой Пульс" ai="3 записи ждут тебя, одна горит. Дима закрыл 4 задачи по корзине."><pz-chip slot="chip" clickable icon="expand_more">Все пространства</pz-chip><pz-field slot="actions" variant="search" placeholder="Поиск и команды" kbd="⌘K" style="width:260px"></pz-field><pz-icon-group slot="actions" label="Сообщения"><pz-icon-button icon="forum" label="Чаты" badge="2"></pz-icon-button><pz-icon-button icon="notifications" label="Уведомления" dot></pz-icon-button></pz-icon-group><pz-button slot="actions" variant="ink" icon="add">Создать</pz-button><pz-avatar slot="actions" name="Иван Яким" solid size="40"></pz-avatar><pz-segmented slot="tabs" value="all"><pz-option value="all">Всё</pz-option><pz-option value="mine" count="5">Моя работа</pz-option><pz-option value="wait" count="3" hot>Ждут меня</pz-option></pz-segmented></pz-page-header>
titlestringsubtitlestringaistringИИ-строка (бриф) со значком auto_awesome — вместо подзаголовка.iconstringПлитка раздела.tonestringcolorstringslot actionsСправа: pz-field variant="search", pz-icon-group, pz-dropdown с «Создать», pz-avatar.slot chipРядом с заголовком: охват, статус, лица.slot tabsВкладки и фильтры (pz-segmented).slot leadСвой лид.slot subtitleПодзаголовок с разметкой.Сайдбар слева прямо на тонированной земле и колонка контента; на телефоне вместо сайдбара — плавающий таб-бар. collapsed — рельс из значков. Дровер с push ужимает контент.
<div style="height:520px;overflow:hidden;border-radius:20px;box-shadow:var(--pz-sh-card)"><pz-app-shell style="min-height:520px"><pz-nav-brand slot="brand" title="Продукт" caption="Пульс" color="#5b4fd6"></pz-nav-brand><pz-nav-item slot="sidebar" icon="monitor_heart" active count="3" count-tone="hot">Мой Пульс</pz-nav-item><pz-nav-item slot="sidebar" icon="lightbulb">Идеи</pz-nav-item><pz-nav-item slot="sidebar" icon="description">Документы</pz-nav-item><pz-nav-section slot="sidebar">Темы</pz-nav-section><pz-nav-item slot="sidebar" tile="shopping_cart" color="#d6418f" count="2" count-tone="hot">Корзина</pz-nav-item><pz-nav-item slot="sidebar" tile="local_shipping" color="#0f9fb4">Доставка</pz-nav-item><pz-nav-item slot="sidebar-bottom" icon="settings">Настройки</pz-nav-item><pz-page-header title="Мой Пульс" ai="Всё спокойно: ничего не горит."></pz-page-header><div class="pz-grid"><pz-card title="Ждут тебя" count="3"><pz-skeleton lines="3"></pz-skeleton></pz-card><pz-card title="Моя работа"><pz-skeleton lines="3"></pz-skeleton></pz-card></div></pz-app-shell></div>
collapsedbooleanРельс 76 px.no-groundbooleanБез своей земли (если она уже на body.pz-app).slot brandВерх сайдбара: pz-nav-brand (переключатель пространства).slot sidebarpz-nav-item, pz-nav-section.slot sidebar-bottomНиз сайдбара: настройки, профиль.slot ·Контент: pz-page-header + карточки.slot tabbarpz-tabbar для телефона.Пункт сайдбара 42 px: значок или плитка темы, подпись, счётчик. Активный — белая пилюля с тенью. <pz-nav-section> — подпись группы, <pz-nav-brand> — логотип и переключатель пространства (триггер для pz-dropdown).
<div style="width:264px;display:grid;gap:2px"><pz-dropdown><pz-nav-brand slot="trigger" title="Продукт" caption="Пульс" color="#5b4fd6"></pz-nav-brand><pz-menu search="Найти пространство" select="single"><pz-menu-label>Закреплённые</pz-menu-label><pz-menu-item value="p" selected icon="rocket_launch" hint="ты здесь · 3 ждут тебя" kbd="⌘1">Продукт</pz-menu-item><pz-menu-item value="s" icon="storefront" hint="в норме" kbd="⌘2">Магазин</pz-menu-item></pz-menu></pz-dropdown><div style="height:14px"></div><pz-nav-item icon="monitor_heart" active count="3" count-tone="hot">Мой Пульс</pz-nav-item><pz-nav-item icon="smart_toy" count="2" count-tone="blue">Борис</pz-nav-item><pz-nav-item icon="lightbulb" count="4">Идеи</pz-nav-item><pz-nav-section>Темы<pz-icon-button slot="action" icon="add" label="Новая тема" size="sm"></pz-icon-button></pz-nav-section><pz-nav-item tile="shopping_cart" color="#d6418f" count="2" count-tone="hot">Корзина</pz-nav-item><pz-nav-item tile="payments" color="#1d7d53">Оплата</pz-nav-item><pz-nav-item add>Тема</pz-nav-item></div>
iconstringtilestringЗначок в плитке (для тем и пространств).colorstringЦвет плитки.tonestringhrefstringactivebooleancountstringcount-toneplain · blue · hot · mute · plainhot — ждут моего шага.addbooleanТихий пункт «+ Тема».slot ·Подпись.Плавающая стеклянная пилюля снизу на телефоне (≤760 px): 4 вкладки и круглая чернильная «+» по центру. На широком экране скрыт (always — показывать всегда).
<div style="max-width:420px"><pz-tabbar always><pz-tab icon="monitor_heart" active badge="3">Пульс</pz-tab><pz-tab icon="lightbulb">Идеи</pz-tab><pz-tab fab icon="add" label="Создать"></pz-tab><pz-tab icon="forum" badge="2">Чаты</pz-tab><pz-tab icon="menu">Ещё</pz-tab></pz-tabbar></div>
alwaysbooleanПоказывать и на широком экране, в потоке (для витрины).slot ·<pz-tab icon href active badge>Подпись</pz-tab>, <pz-tab fab icon="add" label="Создать"></pz-tab>.Тёплый слой ИИ: итог, вердикт, вопрос или предложение ИИ-исполнителя (Борис). Заголовок со значком, вердикт пилюлей, текст, этапы конвейера, действия.
<pz-ai-block title="Борис спрашивает" verdict="Нужен ответ" verdict-tone="warn" style="max-width:620px"><pz-avatar slot="avatar" name="Борис" icon="smart_toy" size="28"></pz-avatar>Купон применять до расчёта доставки или после? В коде сейчас — после, а в ТЗ — до.<pz-stages slot="stages" steps="Разбор, План, Код, Проверка" current="2"></pz-stages><pz-button slot="actions" variant="ink">До доставки</pz-button><pz-button slot="actions">После</pz-button><pz-button slot="actions" variant="ghost">Обсудить в чате</pz-button></pz-ai-block>
titlestring · ИИiconstring · auto_awesomeverdictstringПилюля справа: «Готово к выкатке», «Нужен ответ».verdict-toneok · warn · dangercompactbooleanslot ·Текст.slot avatarАватар исполнителя слева от заголовка.slot stagespz-stages — этапы конвейера.slot actionsКнопки ответа.Обсуждение — как в мессенджере: фон с узором, пузыри (свой справа, голубой), стеклянное поле ввода с синей кнопкой «Отправить». <pz-chat> — лента, <pz-bubble> — сообщение, <pz-composer> — поле (Enter — отправить, Shift+Enter — строка).
<div style="height:420px;max-width:560px;border-radius:24px;overflow:hidden;box-shadow:var(--pz-sh-card)"><pz-chat><pz-bubble author="Дима Смирнов" time="09:10">Купон слетает после входа — воспроизвёл на стенде.</pz-bubble><pz-bubble author="Дима Смирнов" time="09:11" cont>Похоже, корзина гостя не сливается с корзиной аккаунта.</pz-bubble><pz-bubble me time="09:14">Да, слияние теряет поле coupon. Поправлю сегодня.</pz-bubble><pz-composer slot="composer" placeholder="Сообщение в ПРО-141"></pz-composer></pz-chat></div>
titlestring@pz-send{ value }От pz-composer: отправить сообщение (preventDefault — не очищать поле).@pz-attachОт pz-composer: нажата скрепка.slot ·pz-bubble me author avatar time cont.slot headerПлавающие стеклянные пилюли сверху (название, участники).slot composerpz-composer.Эталонные композиции целиком: копируйте и меняйте данные. С них нейросеть начинает любую новую страницу.
<pz-app-shell style="min-height:640px">
<pz-nav-brand slot="brand" title="Заказы" caption="Магазин" color="#2466c4" icon="storefront"></pz-nav-brand>
<pz-nav-item slot="sidebar" icon="inbox" active count="12" count-tone="hot">Входящие</pz-nav-item>
<pz-nav-item slot="sidebar" icon="local_shipping" count="38">В доставке</pz-nav-item>
<pz-nav-item slot="sidebar" icon="assignment_return">Возвраты</pz-nav-item>
<pz-nav-section slot="sidebar">Отчёты</pz-nav-section>
<pz-nav-item slot="sidebar" icon="monitoring">Выручка</pz-nav-item>
<pz-nav-item slot="sidebar-bottom" icon="settings">Настройки</pz-nav-item>
<pz-page-header title="Входящие" icon="inbox" tone="hot" subtitle="Новые заказы, которые ещё никто не взял">
<pz-field slot="actions" variant="search" placeholder="Номер, клиент, артикул" style="width:280px"></pz-field>
<pz-button slot="actions" variant="ink" icon="add">Заказ</pz-button>
<pz-segmented slot="tabs" value="all">
<pz-option value="all" count="12">Все</pz-option>
<pz-option value="paid" count="9">Оплачены</pz-option>
<pz-option value="wait" count="3" hot>Ждут ответа</pz-option>
</pz-segmented>
<pz-chip slot="tabs" clickable icon="filter_list">Фильтры</pz-chip>
</pz-page-header>
<pz-card pad="sm">
<div style="display:grid;gap:2px">
<pz-list-row icon="shopping_bag" tone="task" id-label="#48213" title="Тормозные колодки Toyota Camry" meta="Иван Петров · 12 480 ₽ · оплачен 10 мин назад" unread onclick="document.getElementById('order').show()">
<pz-badge slot="end" status="new">Новый</pz-badge>
</pz-list-row>
<pz-list-row icon="shopping_bag" tone="task" id-label="#48212" title="Масляный фильтр, 4 шт." meta="ООО «Автодом» · 3 120 ₽">
<pz-chip slot="end" tone="hot" icon="schedule">ждёт 2 ч</pz-chip>
</pz-list-row>
<pz-list-row icon="shopping_bag" tone="task" id-label="#48210" title="Амортизаторы передние" meta="Ольга С. · 18 900 ₽">
<pz-badge slot="end" status="work">Собираем</pz-badge><pz-avatar slot="end" name="Дима Смирнов" size="24"></pz-avatar>
</pz-list-row>
</div>
</pz-card>
<pz-drawer id="order" push id-label="#48213" icon="shopping_bag" tone="task" title="Тормозные колодки Toyota Camry" index="1" total="12">
<pz-badge slot="header" status="new">Новый</pz-badge>
<pz-param-pill slot="params" avatar="Иван Петров" value="Иван Петров" size="sm"></pz-param-pill>
<pz-param-pill slot="params" icon="payments" value="12 480 ₽" label="оплачен" size="sm"></pz-param-pill>
<pz-dropdown slot="params"><pz-param-pill slot="trigger" icon="person" value="Ответственный" none size="sm"></pz-param-pill>
<pz-menu search="Найти" select="single"><pz-menu-item value="dima" avatar="Дима Смирнов">Дима Смирнов</pz-menu-item><pz-menu-item value="anna" avatar="Анна Котова">Анна Котова</pz-menu-item></pz-menu></pz-dropdown>
<pz-stepper steps="Новый, Собираем, Отправлен, Доставлен" current="0" hint="Взять в работу и собрать"></pz-stepper>
<pz-well title="Состав">
<div class="pz-row between"><span>Колодки передние, 04465-33450</span><b class="pz-num">9 980 ₽</b></div>
<div class="pz-row between" style="margin-top:8px"><span>Доставка СДЭК</span><b class="pz-num">2 500 ₽</b></div>
</pz-well>
<div class="pz-row"><pz-attachment name="Счёт 48213.pdf" meta="86 КБ"></pz-attachment></div>
<pz-button slot="footer" variant="ghost">Отменить заказ</pz-button>
<span slot="footer" class="pz-spacer"></span>
<pz-button slot="footer" variant="ink" icon="play_arrow">Взять в работу</pz-button>
</pz-drawer>
<pz-tabbar slot="tabbar">
<pz-tab icon="inbox" active badge="12">Входящие</pz-tab><pz-tab icon="local_shipping">Доставка</pz-tab>
<pz-tab fab icon="add" label="Новый заказ"></pz-tab><pz-tab icon="monitoring">Отчёты</pz-tab><pz-tab icon="menu">Ещё</pz-tab>
</pz-tabbar>
</pz-app-shell><div class="pz-page" style="padding:0">
<pz-page-header title="Сводка" ai="Выручка за неделю выше плана на 8 %. Три возврата ждут решения, один — дольше суток.">
<pz-chip slot="chip" clickable icon="expand_more">Эта неделя</pz-chip>
<pz-icon-group slot="actions" label="Действия"><pz-icon-button icon="refresh" label="Обновить"></pz-icon-button><pz-icon-button icon="ios_share" label="Поделиться"></pz-icon-button></pz-icon-group>
</pz-page-header>
<div class="pz-grid">
<pz-card title="Ждут тебя" count="3" icon="hourglass_top" tone="hot">
<pz-button slot="actions" variant="ghost">Все</pz-button>
<div style="display:grid;gap:2px">
<pz-list-row dense icon="assignment_return" tone="bug" title="Возврат #9921" meta="ждёт 26 ч"><pz-chip slot="end" tone="hot">горит</pz-chip></pz-list-row>
<pz-list-row dense icon="payments" tone="task" title="Подтвердить оплату PayPal" meta="Дима · 8 ч"></pz-list-row>
<pz-list-row dense icon="help" tone="idea" title="Вопрос по поставщику" meta="Анна · 1 ч"></pz-list-row>
</div>
</pz-card>
<pz-card title="Выручка" icon="monitoring" tone="ok" subtitle="за 7 дней">
<div class="pz-h0 pz-num">2,41 <span class="pz-h3 pz-muted">млн ₽</span></div>
<div class="pz-row" style="margin-top:10px"><pz-chip tone="ok" icon="trending_up">+8 % к плану</pz-chip><pz-chip>1 284 заказа</pz-chip></div>
</pz-card>
<pz-card title="Где горит" icon="local_fire_department" tone="hot">
<div class="pz-stack tight">
<pz-well pad="sm"><div class="pz-row between"><b>Склад Москва</b><pz-counter tone="hot" value="7"></pz-counter></div><div class="pz-small">заказы старше 24 ч</div></pz-well>
<pz-well pad="sm"><div class="pz-row between"><b>Поставщик Emex</b><pz-counter tone="mute" value="2"></pz-counter></div><div class="pz-small">нет ответа по ценам</div></pz-well>
</div>
</pz-card>
<pz-ai-block title="Итог недели" verdict="В норме" verdict-tone="ok">
Больше всего движения в «Возвратах»: закрыто 14, новых 9. Предлагаю назначить второго ответственного по PayPal — очередь растёт третью неделю.
<pz-button slot="actions" variant="ink">Назначить</pz-button><pz-button slot="actions" variant="ghost">Позже</pz-button>
</pz-ai-block>
</div>
</div><form class="pz-stack" style="max-width:720px" onsubmit="event.preventDefault(); PulseDS.toast('Задача создана', { tone: 'ok', action: 'Открыть' })">
<pz-card>
<div class="pz-stack">
<pz-field name="title" label="Что сделать" placeholder="Коротко, глаголом: «Починить купон в корзине»" required></pz-field>
<div class="pz-row">
<pz-dropdown><pz-param-pill slot="trigger" icon="person_add" value="Исполнитель" none></pz-param-pill>
<pz-menu search="Найти человека" select="single"><pz-menu-item value="dima" avatar="Дима Смирнов">Дима Смирнов</pz-menu-item><pz-menu-item value="anna" avatar="Анна Котова">Анна Котова</pz-menu-item><pz-menu-item value="boris" icon="smart_toy" hint="ИИ-исполнитель">Борис</pz-menu-item></pz-menu></pz-dropdown>
<pz-dropdown flush><pz-param-pill slot="trigger" icon="event" value="Срок" none></pz-param-pill><pz-calendar></pz-calendar></pz-dropdown>
<pz-dropdown><pz-param-pill slot="trigger" icon="flag" value="Обычная"></pz-param-pill>
<pz-menu select="single"><pz-menu-item value="high" icon="flag">Высокая</pz-menu-item><pz-menu-item value="mid" icon="flag" selected>Обычная</pz-menu-item><pz-menu-item value="low" icon="flag">Низкая</pz-menu-item></pz-menu></pz-dropdown>
</div>
<pz-field name="body" label="Подробности" multiline autogrow rows="4" hint="Как воспроизвести, что ожидается, ссылки"></pz-field>
<div class="pz-row"><pz-attachment add meta="или перетащи файл"></pz-attachment></div>
<pz-setting-row title="Сообщить в Telegram" hint="Исполнитель получит уведомление сразу"><pz-toggle name="notify" checked label="Сообщить в Telegram"></pz-toggle></pz-setting-row>
</div>
<pz-button slot="footer" variant="ghost" type="reset">Очистить</pz-button>
<span slot="footer" class="pz-spacer"></span>
<pz-button slot="footer">Сохранить черновик</pz-button>
<pz-button slot="footer" variant="ink" type="submit" icon="add">Создать</pz-button>
</pz-card>
</form><div class="pz-stack" style="max-width:760px">
<pz-card>
<div class="pz-row nowrap" style="gap:16px"><pz-avatar name="Иван Якимов" size="56" solid></pz-avatar>
<div style="flex:1;min-width:0"><div class="pz-h3">Иван Якимов</div><div class="pz-small">владелец · 4 пространства</div></div>
<pz-button icon="edit" size="sm">Изменить</pz-button></div>
</pz-card>
<pz-card title="Интерфейс" icon="palette" tone="idea">
<div class="pz-stack tight">
<pz-setting-row title="Тема" hint="Светлая, тёмная или как в системе">
<!-- по событию pz-change: PulseDS.setTheme(e.detail.value) -->
<pz-segmented size="sm" value="auto"><pz-option value="light">Светлая</pz-option><pz-option value="dark">Тёмная</pz-option><pz-option value="auto">Система</pz-option></pz-segmented>
</pz-setting-row>
<pz-setting-row title="Компактные списки" hint="Меньше воздуха между строками"><pz-toggle label="Компактные списки"></pz-toggle></pz-setting-row>
</div>
</pz-card>
<pz-card title="Уведомления" icon="notifications" tone="lnk">
<div class="pz-stack tight">
<pz-setting-row title="Telegram" hint="Сразу, когда что-то ждёт тебя"><pz-toggle checked label="Telegram"></pz-toggle></pz-setting-row>
<pz-setting-row title="Дайджест недели" hint="Понедельник, 09:00"><pz-toggle checked label="Дайджест"></pz-toggle></pz-setting-row>
</div>
</pz-card>
<pz-card title="Опасная зона" icon="warning" tone="danger">
<pz-setting-row title="Выйти со всех устройств" hint="Понадобится войти заново"><pz-button variant="danger" size="sm" icon="logout">Выйти везде</pz-button></pz-setting-row>
</pz-card>
</div>