Первый экран для сайта кадрового агентства
Главный экран агентства по подбору персонала: оффер, четыре формата услуги с разными сроками и гарантиями, три растущие цифры и переход к калькулятору.
<section class="vbpka">
<div class="vbpka-wrap">
<div class="vbpka-top">
<div class="vbpka-intro">
<span class="vbpka-badge">Кадровое агентство</span>
<h1 class="vbpka-h1">Находим людей, которые <span>выходят и остаются</span></h1>
<p class="vbpka-lead">Массовый набор, точечный поиск специалистов, руководители и аутстаффинг. Первые кандидаты приходят на седьмой день, оплата наступает после выхода человека на работу.</p>
<div class="vbpka-acts">
<a class="vbpka-cta" href="#raschet">Рассчитать стоимость подбора</a>
<a class="vbpka-more" href="#kak-idet">Как устроен подбор</a>
</div>
<ul class="vbpka-marks">
<li>
<svg viewBox="0 0 24 24" aria-hidden="true" focusable="false"><g fill="none" stroke="currentColor" stroke-width="1.7" stroke-linecap="round" stroke-linejoin="round"><path d="M4 7h16v13H4z"/><path d="M9 7V4h6v3"/><path d="M4 12h16"/></g></svg>
Договор с закреплённым сроком закрытия
</li>
<li>
<svg viewBox="0 0 24 24" aria-hidden="true" focusable="false"><g fill="none" stroke="currentColor" stroke-width="1.7" stroke-linecap="round" stroke-linejoin="round"><path d="M12 3l7 3v6c0 4.4-2.9 7.5-7 9-4.1-1.5-7-4.6-7-9V6z"/><path d="M9 12l2 2 4-4"/></g></svg>
Бесплатная замена, если кандидат ушёл в гарантийный срок
</li>
<li>
<svg viewBox="0 0 24 24" aria-hidden="true" focusable="false"><g fill="none" stroke="currentColor" stroke-width="1.7" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="9"/><path d="M12 7v5l3.5 2"/></g></svg>
Отчёт по воронке кандидатов каждую пятницу
</li>
</ul>
</div>
<div class="vbpka-panel">
<h2 class="vbpka-panel__ttl">Сроки и гарантия по форматам</h2>
<p class="vbpka-panel__sub">Выберите задачу, чтобы увидеть срок первых кандидатов и условия замены.</p>
<div class="vbpka-tabs" id="vbpka-tabs"></div>
<div class="vbpka-body" id="vbpka-body" aria-live="polite"></div>
</div>
</div>
<ul class="vbpka-nums" id="vbpka-nums">
<li><b data-num="1240" data-suf="">0</b><span>вакансий закрыто с 2019 года</span></li>
<li><b data-num="14" data-suf=" дней">0</b><span>средний срок от заявки до выхода</span></li>
<li><b data-num="92" data-suf="%">0</b><span>кандидатов проходят испытательный срок</span></li>
</ul>
</div>
</section>
<style>
.vbpka, .vbpka *, .vbpka *::before, .vbpka *::after { box-sizing: border-box; }
.vbpka {
--acc: #5b8def; --acc-dark: #4372d6; --bg: #101827; --panel: #182238; --ink: #eef2f9; --muted: #94a3bd; --line: #27324b;
--f: var(--t-text-font, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Arial, sans-serif);
--fh: var(--t-headline-font, var(--f));
background: var(--bg); color: var(--ink); font-family: var(--f); padding: clamp(36px, 5vw, 84px) 20px;
}
.vbpka-wrap { max-width: 1200px; margin: 0 auto; padding: 0 clamp(0px, 2vw, 40px); }
.vbpka-top { display: grid; grid-template-columns: minmax(0, 1.1fr) minmax(0, .9fr); gap: clamp(26px, 4vw, 60px); align-items: start; }
.vbpka-badge { display: inline-block; font-size: 12px; letter-spacing: .08em; text-transform: uppercase; color: var(--acc);
border: 1px solid var(--line); border-radius: 999px; padding: 7px 14px; margin-bottom: 18px; }
.vbpka-h1 { font-family: var(--fh); font-size: clamp(30px, 4.4vw, 56px); line-height: 1.06; font-weight: 700; letter-spacing: -.024em; margin: 0 0 18px; }
.vbpka-h1 span { color: var(--acc); }
.vbpka-lead { font-size: clamp(16px, 1.3vw, 18.5px); line-height: 1.62; color: var(--muted); margin: 0 0 28px; max-width: 32em; }
.vbpka-acts { display: flex; flex-wrap: wrap; align-items: center; gap: 12px 24px; margin-bottom: 30px; }
.vbpka-cta, .vbpka-cta:link, .vbpka-cta:visited, .vbpka-cta:active, .vbpka-cta:focus { display: inline-flex; align-items: center; justify-content: center;
min-height: 56px; padding: 0 30px; border-radius: 12px; font-size: 16px; font-weight: 600;
background: var(--acc); color: #fff !important; text-decoration: none !important; transition: background .2s ease; }
.vbpka-cta:hover { background: var(--acc-dark); color: #fff !important; }
.vbpka-more, .vbpka-more:link, .vbpka-more:visited, .vbpka-more:active, .vbpka-more:focus { font-size: 15px; color: var(--ink) !important; text-decoration: underline !important; text-underline-offset: 4px; }
.vbpka-more:hover { color: var(--acc) !important; }
.vbpka-marks { list-style: none; margin: 0; padding: 0; display: grid; gap: 12px; }
.vbpka-marks li { display: grid; grid-template-columns: 24px minmax(0, 1fr); gap: 12px; align-items: center; font-size: 14.5px; line-height: 1.5; color: var(--muted); }
.vbpka-marks svg { width: 22px; height: 22px; color: var(--acc); }
.vbpka-panel { background: var(--panel); border: 1px solid var(--line); border-radius: 24px; padding: clamp(22px, 2.6vw, 32px); }
.vbpka-panel__ttl { font-family: var(--fh); font-size: 21px; line-height: 1.25; font-weight: 700; margin: 0 0 8px; }
.vbpka-panel__sub { font-size: 13.5px; line-height: 1.55; color: var(--muted); margin: 0 0 20px; }
.vbpka-tabs { display: grid; grid-template-columns: repeat(auto-fit, minmax(96px, 1fr)); gap: 7px; margin-bottom: 20px; }
.vbpka-tab { border: 1px solid var(--line); margin: 0; padding: 11px 8px; -webkit-appearance: none; appearance: none; font: inherit; font-size: 13px;
cursor: pointer; border-radius: 10px; background: transparent !important; color: var(--muted) !important; transition: .18s ease; }
.vbpka-tab:hover { color: var(--ink) !important; border-color: var(--acc); }
.vbpka-tab[aria-pressed="true"] { background: var(--acc) !important; color: #fff !important; border-color: var(--acc); }
.vbpka-when { display: flex; align-items: baseline; gap: 10px; margin-bottom: 14px; }
.vbpka-when b { font-family: var(--fh); font-size: clamp(30px, 3.6vw, 42px); line-height: 1; font-weight: 700; color: var(--acc); letter-spacing: -.02em; }
.vbpka-when span { font-size: 13.5px; color: var(--muted); }
.vbpka-txt { font-size: 14.5px; line-height: 1.6; color: var(--muted); margin: 0 0 18px; }
.vbpka-rows { list-style: none; margin: 0; padding: 0; display: grid; gap: 9px; }
.vbpka-rows li { display: flex; justify-content: space-between; gap: 14px; font-size: 14px; border-top: 1px solid var(--line); padding-top: 9px; }
.vbpka-rows li span { color: var(--muted); }
.vbpka-rows li b { font-weight: 600; text-align: right; }
.vbpka-nums { list-style: none; margin: clamp(30px, 4vw, 56px) 0 0; padding: 0; display: grid;
grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); gap: 14px; }
.vbpka-nums li { background: var(--panel); border: 1px solid var(--line); border-radius: 18px; padding: 22px 24px; }
.vbpka-nums b { display: block; font-family: var(--fh); font-size: clamp(28px, 3.6vw, 40px); line-height: 1.05; font-weight: 700; letter-spacing: -.02em; margin-bottom: 6px; }
.vbpka-nums span { font-size: 13.5px; line-height: 1.5; color: var(--muted); }
@media (max-width: 900px) { .vbpka-top { grid-template-columns: minmax(0, 1fr); } }
@media (max-width: 560px) { .vbpka-h1 { font-size: clamp(26px, 7.4vw, 34px); } .vbpka-rows li { flex-direction: column; gap: 2px; } .vbpka-rows li b { text-align: left; } }
@media (prefers-reduced-motion: reduce) { .vbpka * { transition: none !important; } }
</style>
<script>
(function () {
/* ── ФОРМАТЫ ПОДБОРА: срок первых кандидатов, гарантия, условия ── */
var FORMATS = [
{ k: 'Массовый', n: '7', u: 'дней до первых выходов',
t: 'Продавцы, комплектовщики, курьеры, операторы линии. Держим поток кандидатов и закрываем сразу группу позиций.',
rows: [['Гарантия замены', '30 дней'], ['Оплата', 'за каждого вышедшего'], ['Объём', 'от 5 позиций в месяц']] },
{ k: 'Специалисты', n: '14', u: 'дней до трёх финалистов',
t: 'Инженеры, бухгалтеры, менеджеры по продажам, снабженцы. Проверяем задачи по профилю и собираем рекомендации.',
rows: [['Гарантия замены', '90 дней'], ['Оплата', 'после выхода на работу'], ['Кандидатов на выбор', 'от 3 до 5']] },
{ k: 'Руководители', n: '35', u: 'дней до выхода директора',
t: 'Директора направлений, главные инженеры, коммерческие руководители. Ищем прямым поиском по рынку и закрытым спискам.',
rows: [['Гарантия замены', '180 дней'], ['Оплата', 'тремя частями по этапам'], ['Оценка', 'кейсы и интервью по опыту']] },
{ k: 'Аутстаффинг', n: '3', u: 'дня до выхода смены',
t: 'Люди работают на вашей площадке, в штате у нас. Кадровый учёт, выплаты и замены на нашей стороне.',
rows: [['Гарантия замены', 'в тот же день'], ['Оплата', 'по фактическим часам'], ['Смена', 'от 8 человек']] }
];
var roots = document.querySelectorAll('.vbpka');
for (var i = 0; i < roots.length; i++) init(roots[i]);
function init(root) {
if (root.__vb) return; root.__vb = 1;
var tabs = root.querySelector('#vbpka-tabs'), body = root.querySelector('#vbpka-body');
var cur = 0;
tabs.innerHTML = FORMATS.map(function (f, i) {
return '<button type="button" class="vbpka-tab" data-i="' + i + '" aria-pressed="' + (i === 0) + '">' + f.k + '<\/button>';
}).join('');
function draw() {
var f = FORMATS[cur];
body.innerHTML = '<div class="vbpka-when"><b>' + f.n + '<\/b><span>' + f.u + '<\/span><\/div>' +
'<p class="vbpka-txt">' + f.t + '<\/p><ul class="vbpka-rows">' +
f.rows.map(function (r) { return '<li><span>' + r[0] + '<\/span><b>' + r[1] + '<\/b><\/li>'; }).join('') + '<\/ul>';
var bs = tabs.querySelectorAll('.vbpka-tab');
for (var i = 0; i < bs.length; i++) bs[i].setAttribute('aria-pressed', i === cur ? 'true' : 'false');
}
tabs.addEventListener('click', function (e) {
var b = e.target.closest ? e.target.closest('.vbpka-tab') : null;
if (!b) return;
cur = +b.getAttribute('data-i');
draw();
});
draw();
var nums = root.querySelectorAll('#vbpka-nums b');
function fmt(n) { return String(n).replace(/\B(?=(\d{3})+(?!\d))/g, ' '); }
var slow = window.matchMedia && window.matchMedia('(prefers-reduced-motion: reduce)').matches;
function run() {
for (var i = 0; i < nums.length; i++) count(nums[i]);
}
function count(el) {
var to = +el.getAttribute('data-num') || 0, suf = el.getAttribute('data-suf') || '';
if (slow) { el.textContent = fmt(to) + suf; return; }
var t0 = 0, dur = 1100;
function step(ts) {
if (!t0) t0 = ts;
var p = Math.min(1, (ts - t0) / dur);
el.textContent = fmt(Math.round(to * (1 - Math.pow(1 - p, 3)))) + suf;
if (p < 1) requestAnimationFrame(step);
}
requestAnimationFrame(step);
}
var box = root.querySelector('#vbpka-nums');
if (!('IntersectionObserver' in window)) { run(); return; }
var io = new IntersectionObserver(function (es) {
for (var i = 0; i < es.length; i++) if (es[i].isIntersecting) { run(); io.disconnect(); }
}, { rootMargin: '0px 0px -12% 0px' });
io.observe(box);
setTimeout(run, 2600);
}
})();
</script> Вставляется целиком в блок T123 «HTML-код». Внутри уже есть стили и скрипт, подключать ничего не нужно.
Как вставить блок в Tilda
- Скопируйте кодКнопка «Скопировать код» выше кладёт всё содержимое в буфер обмена.
- Добавьте блок T123В редакторе страницы: «Библиотека блоков» → «Другое» → T123 «HTML-код».
- Вставьте и сохранитеНажмите «Контент», вставьте код в поле, сохраните и обновите страницу.
- ОпубликуйтеВ превью скрипты Tilda работают не всегда — проверяйте на опубликованной странице.
Подробная инструкция с граблями — как вставить вайб-блок в Tilda.
Что менять под себя
| Где в коде | За что отвечает |
|---|---|
FORMATS в начале скрипта | названия форматов подбора, сроки, гарантия и схема оплаты |
data-num у трёх цифр | число закрытых вакансий, средний срок и доля прошедших испытательный срок |
href у кнопки и ссылки | адреса блока с расчётом стоимости и описания этапов |
--acc в начале стилей | цвет кнопки, активного формата и акцента в заголовке |
Первый экран кадрового агентства: зачем он нужен
Работодатель приходит на сайт агентства с двумя вопросами: когда выйдет человек и что будет, если он уволится через месяц. Блок отвечает на оба в первом же экране. Слева стоит оффер, три коротких обещания по договору и кнопка на расчёт стоимости. Справа лежит панель с четырьмя форматами услуги, и по клику меняются срок первых кандидатов, гарантийный период и схема оплаты.
Внизу идут три опорные цифры: сколько вакансий закрыто, сколько дней проходит от заявки до выхода и какая доля кандидатов остаётся после испытательного срока. Значения набегают счётчиком, когда экран попадает в поле зрения, а при включённом уменьшении движения сразу показываются готовыми. Формы в блоке нет, целевое действие ведёт ссылкой на калькулятор или на блок с этапами подбора.
Вопросы по этому блоку
-
Да, лишние объекты удаляются из массива FORMATS в начале скрипта. Кнопки строятся по числу элементов, сетка перестроится сама, править разметку не нужно.
-
Первый экран ведёт посетителя дальше по странице, а заявку удобнее собирать штатной формой Tilda ниже. Кнопка блока настраивается на любой якорь или адрес страницы.
-
Впишите готовые значения внутрь тегов b вместо нуля и удалите вызов функции run в скрипте. Посетителям, которые включили уменьшение движения в системе, блок и так показывает цифры без счёта.
-
Да. Код на этой странице копируется целиком, без регистрации и подписки. Указывать авторство не нужно, использовать можно в коммерческих проектах.
-
Нет. Все классы внутри имеют собственный префикс vbpka, поэтому не пересекаются ни со стилями Tilda, ни с другими блоками. Скрипт привязан к своему элементу и запускается один раз, даже если блок вставлен дважды.
-
Раскладка перестраивается под узкие экраны, размеры заданы через clamp, поля ввода имеют шрифт 16 пикселей — iOS не будет зумить страницу при фокусе. Отдельной мобильной версии подключать не нужно.
Другие главные экраны
Ещё блоки для подбора персонала
Собрать сайт целиком
Дровосеки делают сайты на Tilda под ключ: структура, тексты, дизайн, вёрстка и вайб-блоки под задачи бизнеса. Как это выглядит для ниши «Подбор персонала», видно на отдельной странице.