Первый экран для сайта кадрового агентства
Главный экран агентства по подбору персонала: оффер, четыре формата услуги с разными сроками и гарантиями, три растущие цифры и переход к калькулятору.
<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 под ключ: структура, тексты, дизайн, вёрстка и вайб-блоки под задачи бизнеса.