|
|
|
@ -8,24 +8,24 @@ export const metadata: Metadata = { |
|
|
|
const LLM_HERO_TEXT = ` |
|
|
|
const LLM_HERO_TEXT = ` |
|
|
|
БЛОК: Hero-баннер (главный баннер страницы) |
|
|
|
БЛОК: Hero-баннер (главный баннер страницы) |
|
|
|
Источник: perm.oclinica.ru/lor — реальный баннер раздела ЛОР |
|
|
|
Источник: perm.oclinica.ru/lor — реальный баннер раздела ЛОР |
|
|
|
Версия: v1.0 |
|
|
|
Версия: v1.1 |
|
|
|
|
|
|
|
|
|
|
|
ЗАГОЛОВОК СТРАНИЦЫ (H1, над баннером): |
|
|
|
ЗАГОЛОВОК СТРАНИЦЫ (H1, над баннером): |
|
|
|
«ЛОР Клиника ухо, горло, нос – медицинский центр лечения ЛОР заболеваний у детей и взрослых» |
|
|
|
«ЛОР Клиника ухо, горло, нос – медицинский центр лечения ЛОР заболеваний у детей и взрослых» |
|
|
|
Шрифт: Fira Sans, ~26–28px, weight 700, цвет: #53514e (--brand-073m) |
|
|
|
Шрифт: Fira Sans, ~26–28px, weight 700, цвет: #53514e (--brand-073m) |
|
|
|
|
|
|
|
|
|
|
|
СТРУКТУРА БАННЕРА (двухколоночная, фон: #b8e6ed): |
|
|
|
СТРУКТУРА БАННЕРА (двухколоночная, единый фон #f9f4e7): |
|
|
|
Левая колонка (~50%, белый блок): |
|
|
|
Левая колонка (~50%): |
|
|
|
— Заголовок: «ЭНДОСКОПИЧЕСКОЕ ХИРУРГИЧЕСКОЕ ЛЕЧЕНИЕ ЛОР ОРГАНОВ» |
|
|
|
— Заголовок: «ЭНДОСКОПИЧЕСКОЕ ХИРУРГИЧЕСКОЕ ЛЕЧЕНИЕ ЛОР ОРГАНОВ» |
|
|
|
Шрифт: Fira Sans, ~18px, weight 700, uppercase, цвет #111827 |
|
|
|
Шрифт: Fira Sans, ~18px, weight 700, uppercase, цвет #111827 |
|
|
|
— 3 пункта с галочками (✓ зелёный): |
|
|
|
— 3 пункта с галочками (✓ зелёный): |
|
|
|
1. «БЕЗОПАСНО – оперируют хирурги с 15-летним опытом работы» |
|
|
|
1. «БЕЗОПАСНО – оперируют хирурги с 15-летним опытом работы» |
|
|
|
2. «БЕЗ ВНЕШНИХ РАЗРЕЗОВ – хирургия смяткими размерами» |
|
|
|
2. «БЕЗ ВНЕШНИХ РАЗРЕЗОВ – хирургия сверхмалых размеров» |
|
|
|
3. «БЫСТРО – под наблюдением врача пациент находится 1 сутки» |
|
|
|
3. «БЫСТРО – под наблюдением врача пациент находится 1 сутки» |
|
|
|
Ключевое слово: uppercase bold; описание: обычный текст, ~13px |
|
|
|
Ключевое слово: uppercase bold; описание: обычный текст, ~13px |
|
|
|
— Кнопка «Узнать стоимость операции» — стиль: bb-btn-primary (#FFA39C) |
|
|
|
— Кнопка «Узнать стоимость операции» — стиль: bb-btn-outline (светлая, без заливки) |
|
|
|
Правая колонка (~50%): |
|
|
|
Правая колонка (~50%): |
|
|
|
— Фото врача с пациентом, фон #b8e6ed |
|
|
|
— Фото врача с пациентом |
|
|
|
— Изображение занимает всю высоту блока |
|
|
|
— Изображение занимает всю высоту блока |
|
|
|
|
|
|
|
|
|
|
|
ПОД БАННЕРОМ: |
|
|
|
ПОД БАННЕРОМ: |
|
|
|
@ -33,18 +33,19 @@ const LLM_HERO_TEXT = ` |
|
|
|
— Счётчик просмотров |
|
|
|
— Счётчик просмотров |
|
|
|
|
|
|
|
|
|
|
|
ЦВЕТА: |
|
|
|
ЦВЕТА: |
|
|
|
Фон баннера: #b8e6ed (светло-бирюзовый) |
|
|
|
Фон баннера: #f9f4e7 (светло-кремовый, единый для всего блока) |
|
|
|
Левый блок: #ffffff |
|
|
|
Кнопка CTA: outline-стиль (светлая), не коралловая |
|
|
|
Кнопка CTA: #FFA39C (--bb-btn-primary) |
|
|
|
Заголовок блока: #111827 |
|
|
|
Заголовок: #111827 |
|
|
|
Пункты: ключевое слово #111827 bold, описание #374151 |
|
|
|
Пункты: ключ #111827 bold, описание #374151 |
|
|
|
Галочка: цвет бренда (бежевый/золотой ~#bf9975) |
|
|
|
|
|
|
|
|
|
|
|
ПРАВИЛА: |
|
|
|
ПРАВИЛА: |
|
|
|
✓ Фон баннера всегда #b8e6ed |
|
|
|
✓ Фон баннера всегда #f9f4e7 (светло-кремовый) — единый, без разделения на зоны |
|
|
|
✓ Кнопка CTA — всегда primary (#FFA39C) |
|
|
|
|
|
|
|
✓ Заголовок блока uppercase, жирный |
|
|
|
✓ Заголовок блока uppercase, жирный |
|
|
|
|
|
|
|
✓ Три пункта с галочками обязательны |
|
|
|
✕ Не менять фон баннера на другой цвет |
|
|
|
✕ Не менять фон баннера на другой цвет |
|
|
|
✕ Не убирать все 3 пункта с галочками |
|
|
|
✕ Не разбивать фон на два разных цвета |
|
|
|
|
|
|
|
✕ Не убирать три пункта с галочками |
|
|
|
`.trim();
|
|
|
|
`.trim();
|
|
|
|
|
|
|
|
|
|
|
|
const HERO_CHECKS = [ |
|
|
|
const HERO_CHECKS = [ |
|
|
|
@ -77,7 +78,7 @@ export default function HeroPage() { |
|
|
|
Hero-баннер |
|
|
|
Hero-баннер |
|
|
|
</h1> |
|
|
|
</h1> |
|
|
|
<p className="text-sm" style={{ color: "var(--bb-text-muted)" }}> |
|
|
|
<p className="text-sm" style={{ color: "var(--bb-text-muted)" }}> |
|
|
|
Главный баннер страницы раздела ЛОР — perm.oclinica.ru/lor. Двухколоночный блок с фоном #b8e6ed. |
|
|
|
Главный баннер страницы раздела ЛОР — perm.oclinica.ru/lor. Двухколоночный блок, единый светло-кремовый фон <strong>#f9f4e7</strong>. |
|
|
|
</p> |
|
|
|
</p> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
|
|
|
|
|
|
|
|
@ -95,15 +96,15 @@ export default function HeroPage() { |
|
|
|
ЛОР Клиника ухо, горло, нос – медицинский центр лечения ЛОР заболеваний у детей и взрослых |
|
|
|
ЛОР Клиника ухо, горло, нос – медицинский центр лечения ЛОР заболеваний у детей и взрослых |
|
|
|
</h2> |
|
|
|
</h2> |
|
|
|
|
|
|
|
|
|
|
|
{/* Баннер */} |
|
|
|
{/* Баннер — единый светло-кремовый фон */} |
|
|
|
<div |
|
|
|
<div |
|
|
|
className="rounded-xl overflow-hidden flex" |
|
|
|
className="rounded-xl overflow-hidden flex" |
|
|
|
style={{ background: "#b8e6ed", minHeight: 280, border: "1px solid var(--bb-border)" }} |
|
|
|
style={{ background: "#f9f4e7", minHeight: 280 }} |
|
|
|
> |
|
|
|
> |
|
|
|
{/* Левая часть — белый блок */} |
|
|
|
{/* Левая часть — контент на кремовом фоне */} |
|
|
|
<div |
|
|
|
<div |
|
|
|
className="flex flex-col justify-center gap-5 p-8" |
|
|
|
className="flex flex-col justify-center gap-5 p-8" |
|
|
|
style={{ background: "#fff", minWidth: "48%", maxWidth: "52%" }} |
|
|
|
style={{ width: "50%", flexShrink: 0 }} |
|
|
|
> |
|
|
|
> |
|
|
|
<p |
|
|
|
<p |
|
|
|
className="text-base font-bold uppercase leading-snug" |
|
|
|
className="text-base font-bold uppercase leading-snug" |
|
|
|
@ -116,7 +117,7 @@ export default function HeroPage() { |
|
|
|
<li key={c.key} className="flex items-start gap-2 text-sm"> |
|
|
|
<li key={c.key} className="flex items-start gap-2 text-sm"> |
|
|
|
<span |
|
|
|
<span |
|
|
|
className="shrink-0 font-bold" |
|
|
|
className="shrink-0 font-bold" |
|
|
|
style={{ color: "#22c55e", marginTop: 1 }} |
|
|
|
style={{ color: "#bf9975", marginTop: 1 }} |
|
|
|
> |
|
|
|
> |
|
|
|
✓ |
|
|
|
✓ |
|
|
|
</span> |
|
|
|
</span> |
|
|
|
@ -130,31 +131,30 @@ export default function HeroPage() { |
|
|
|
))} |
|
|
|
))} |
|
|
|
</ul> |
|
|
|
</ul> |
|
|
|
<div> |
|
|
|
<div> |
|
|
|
<button className="bb-btn bb-btn-md bb-btn-primary"> |
|
|
|
<button className="bb-btn bb-btn-md bb-btn-outline"> |
|
|
|
Узнать стоимость операции |
|
|
|
Узнать стоимость операции |
|
|
|
</button> |
|
|
|
</button> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
|
|
|
|
|
|
|
|
{/* Правая часть — фото-заглушка */} |
|
|
|
{/* Правая часть — фото врача */} |
|
|
|
<div |
|
|
|
<div |
|
|
|
className="flex-1 flex items-center justify-center" |
|
|
|
className="flex-1 relative overflow-hidden" |
|
|
|
style={{ background: "#b8e6ed" }} |
|
|
|
style={{ minHeight: 280 }} |
|
|
|
> |
|
|
|
> |
|
|
|
<div className="text-center space-y-2"> |
|
|
|
{/* eslint-disable-next-line @next/next/no-img-element */} |
|
|
|
<div |
|
|
|
<img |
|
|
|
className="w-20 h-20 rounded-full mx-auto flex items-center justify-center text-3xl" |
|
|
|
src="/hero-doctor.jpg" |
|
|
|
style={{ background: "rgba(255,255,255,0.4)" }} |
|
|
|
alt="Врач на приёме с пациентом" |
|
|
|
> |
|
|
|
style={{ |
|
|
|
👨⚕️ |
|
|
|
width: "100%", |
|
|
|
</div> |
|
|
|
height: "100%", |
|
|
|
<p className="text-xs font-medium" style={{ color: "#0089c3" }}> |
|
|
|
objectFit: "cover", |
|
|
|
Фото врача с пациентом |
|
|
|
objectPosition: "center top", |
|
|
|
</p> |
|
|
|
position: "absolute", |
|
|
|
<p className="text-[10px]" style={{ color: "#53514e" }}> |
|
|
|
inset: 0, |
|
|
|
Фон: #b8e6ed |
|
|
|
}} |
|
|
|
</p> |
|
|
|
/> |
|
|
|
</div> |
|
|
|
|
|
|
|
</div> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
|
|
|
|
|
|
|
|
@ -187,37 +187,20 @@ export default function HeroPage() { |
|
|
|
<h2 className="font-semibold text-base" style={{ color: "var(--bb-text)" }}> |
|
|
|
<h2 className="font-semibold text-base" style={{ color: "var(--bb-text)" }}> |
|
|
|
Анатомия баннера |
|
|
|
Анатомия баннера |
|
|
|
</h2> |
|
|
|
</h2> |
|
|
|
<div className="grid grid-cols-2 gap-4"> |
|
|
|
|
|
|
|
{[ |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
zone: "Левый блок (белый)", |
|
|
|
|
|
|
|
bg: "#f8fafc", |
|
|
|
|
|
|
|
items: [ |
|
|
|
|
|
|
|
"Заголовок uppercase bold", |
|
|
|
|
|
|
|
"3 пункта с галочками ✓", |
|
|
|
|
|
|
|
"Кнопка bb-btn-primary", |
|
|
|
|
|
|
|
], |
|
|
|
|
|
|
|
}, |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
zone: "Правый блок (#b8e6ed)", |
|
|
|
|
|
|
|
bg: "#f0fdfa", |
|
|
|
|
|
|
|
items: [ |
|
|
|
|
|
|
|
"Фото врача с пациентом", |
|
|
|
|
|
|
|
"Фон: #b8e6ed (светло-бирюзовый)", |
|
|
|
|
|
|
|
"Занимает всю высоту блока", |
|
|
|
|
|
|
|
], |
|
|
|
|
|
|
|
}, |
|
|
|
|
|
|
|
].map((z) => ( |
|
|
|
|
|
|
|
<div |
|
|
|
<div |
|
|
|
key={z.zone} |
|
|
|
className="rounded-xl p-5 space-y-2" |
|
|
|
className="rounded-xl p-4 space-y-2" |
|
|
|
style={{ background: "#f5f0e8", border: "1px solid #d5cfbd" }} |
|
|
|
style={{ background: z.bg, border: "1px solid var(--bb-border)" }} |
|
|
|
|
|
|
|
> |
|
|
|
> |
|
|
|
<p className="font-semibold text-sm" style={{ color: "var(--bb-text)" }}> |
|
|
|
<p className="font-semibold text-sm" style={{ color: "var(--bb-text)" }}> |
|
|
|
{z.zone} |
|
|
|
Весь баннер — единый фон <span className="font-mono">#f9f4e7</span> |
|
|
|
</p> |
|
|
|
</p> |
|
|
|
<ul className="space-y-1"> |
|
|
|
<ul className="space-y-1"> |
|
|
|
{z.items.map((item) => ( |
|
|
|
{[ |
|
|
|
|
|
|
|
"Фон: #f9f4e7 (светло-кремовый) — одинаковый для всего блока", |
|
|
|
|
|
|
|
"Левая половина (~50%): заголовок uppercase bold + 3 галочки + кнопка outline", |
|
|
|
|
|
|
|
"Правая половина (~50%): фото врача с пациентом", |
|
|
|
|
|
|
|
"Минимальная высота: ~280px", |
|
|
|
|
|
|
|
].map((item) => ( |
|
|
|
<li key={item} className="text-xs flex items-start gap-1.5"> |
|
|
|
<li key={item} className="text-xs flex items-start gap-1.5"> |
|
|
|
<span style={{ color: "var(--brand-053m)" }}>·</span> |
|
|
|
<span style={{ color: "var(--brand-053m)" }}>·</span> |
|
|
|
<span style={{ color: "var(--bb-text-muted)" }}>{item}</span> |
|
|
|
<span style={{ color: "var(--bb-text-muted)" }}>{item}</span> |
|
|
|
@ -225,8 +208,6 @@ export default function HeroPage() { |
|
|
|
))} |
|
|
|
))} |
|
|
|
</ul> |
|
|
|
</ul> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
))} |
|
|
|
|
|
|
|
</div> |
|
|
|
|
|
|
|
</section> |
|
|
|
</section> |
|
|
|
|
|
|
|
|
|
|
|
{/* Пункты с галочками */} |
|
|
|
{/* Пункты с галочками */} |
|
|
|
@ -261,13 +242,14 @@ export default function HeroPage() { |
|
|
|
</section> |
|
|
|
</section> |
|
|
|
|
|
|
|
|
|
|
|
{/* LLM блок */} |
|
|
|
{/* LLM блок */} |
|
|
|
<LlmBlock path="/blocks/hero" version="v1.0" specText={LLM_HERO_TEXT}> |
|
|
|
<LlmBlock path="/blocks/hero" version="v1.1" specText={LLM_HERO_TEXT}> |
|
|
|
<LlmSection title="Структура баннера" /> |
|
|
|
<LlmSection title="Структура баннера" /> |
|
|
|
<LlmTable |
|
|
|
<LlmTable |
|
|
|
headers={["Зона", "Ширина", "Фон", "Содержимое"]} |
|
|
|
headers={["Зона", "Ширина", "Фон", "Содержимое"]} |
|
|
|
rows={[ |
|
|
|
rows={[ |
|
|
|
["Левый блок", "~50%", "#ffffff", "Заголовок uppercase + 3 галочки + кнопка bb-btn-primary"], |
|
|
|
["Весь баннер", "100%", "#f9f4e7", "Единый светло-кремовый фон"], |
|
|
|
["Правый блок", "~50%", "#b8e6ed", "Фото врача с пациентом"], |
|
|
|
["Левый блок", "~50%", "#f9f4e7 (общий)", "Заголовок uppercase + 3 галочки + кнопка outline"], |
|
|
|
|
|
|
|
["Правый блок", "~50%", "#f9f4e7 (общий)", "Фото врача с пациентом"], |
|
|
|
["Под баннером", "100%", "#fff", "Кнопки соцсетей + счётчик просмотров"], |
|
|
|
["Под баннером", "100%", "#fff", "Кнопки соцсетей + счётчик просмотров"], |
|
|
|
]} |
|
|
|
]} |
|
|
|
/> |
|
|
|
/> |
|
|
|
@ -280,21 +262,21 @@ export default function HeroPage() { |
|
|
|
<LlmTable |
|
|
|
<LlmTable |
|
|
|
headers={["Элемент", "Цвет", "Токен"]} |
|
|
|
headers={["Элемент", "Цвет", "Токен"]} |
|
|
|
rows={[ |
|
|
|
rows={[ |
|
|
|
["Фон баннера", "#b8e6ed", "—"], |
|
|
|
["Фон баннера (единый)", "#f9f4e7", "Светло-кремовый фон"], |
|
|
|
["Левый блок", "#ffffff", "—"], |
|
|
|
["Кнопка CTA", "outline-стиль", "bb-btn-outline"], |
|
|
|
["Кнопка CTA", "#FFA39C", "bb-btn-primary"], |
|
|
|
|
|
|
|
["Заголовок блока", "#111827", "—"], |
|
|
|
["Заголовок блока", "#111827", "—"], |
|
|
|
["Галочка", "#22c55e", "—"], |
|
|
|
["Галочка ✓", "#bf9975", "Бежевый (--brand-081m approx.)"], |
|
|
|
]} |
|
|
|
]} |
|
|
|
/> |
|
|
|
/> |
|
|
|
<LlmSection title="Правила" /> |
|
|
|
<LlmSection title="Правила" /> |
|
|
|
<LlmRules |
|
|
|
<LlmRules |
|
|
|
rules={[ |
|
|
|
rules={[ |
|
|
|
{ ok: true, text: "Фон баннера: #b8e6ed (светло-бирюзовый)" }, |
|
|
|
{ ok: true, text: "Фон баннера: #f9f4e7 (светло-кремовый) — единый для всего блока" }, |
|
|
|
{ ok: true, text: "Кнопка CTA: bb-btn-primary (#FFA39C)" }, |
|
|
|
{ ok: true, text: "Кнопка CTA: bb-btn-outline (светлая)" }, |
|
|
|
{ ok: true, text: "Заголовок: uppercase, bold" }, |
|
|
|
{ ok: true, text: "Заголовок: uppercase, bold" }, |
|
|
|
{ ok: true, text: "Три пункта с галочками ✓ (#22c55e)" }, |
|
|
|
{ ok: true, text: "Три пункта с галочками ✓ (#bf9975)" }, |
|
|
|
{ ok: false, text: "Не менять фон баннера на другой цвет" }, |
|
|
|
{ ok: false, text: "Не менять фон баннера на другой цвет" }, |
|
|
|
|
|
|
|
{ ok: false, text: "Не разбивать баннер на два разных цвета фона" }, |
|
|
|
{ ok: false, text: "Не убирать три пункта с галочками" }, |
|
|
|
{ ok: false, text: "Не убирать три пункта с галочками" }, |
|
|
|
]} |
|
|
|
]} |
|
|
|
/> |
|
|
|
/> |
|
|
|
|