Интересное Полезное Развлечения
КиноТестыЗдоровьеСоветыСпортЕдаЖивотныеЮморПутешествияИсторияНаука и техникаМузыкаКосмосКомпьютерные игрыОбществоЗнаменитостиДизайнПогодаКультураЭкологияТехнологииНедвижимостьСтильИнтернетАвтоЛитератураГородПолитикаЭкономикаВидеоПроисшествияОбразованиеВоенное делоРелигияКриминалБизнесПравоВоенные конфликты

Лунный календарь красоты на апрель 2026 года

Лунный календарь красоты
Апрель 2026 года — период обновления внешности, ухода за кожей, волосами и телом после зимнего сезона. Лунный календарь красоты на апрель 2026 года помогает выбрать наиболее благоприятные дни для косметических процедур, ухода и экспериментов с внешностью с учётом фаз Луны. .lb26b { --lb26b-bg: #fcf7f8; --lb26b-surface: #ffffff; --lb26b-surface-soft: #fff6f7; --lb26b-text: #3a2f35; --lb26b-muted: #7b6a72; --lb26b-line: #ecdde2; --lb26b-accent: #d96c8d; --lb26b-accent-2: #f4b5c7; --lb26b-good-bg: #fff1f5; --lb26b-good-text: #b44569; --lb26b-neutral-bg: #f6f1ff; --lb26b-neutral-text: #6d5aa7; --lb26b-caution-bg: #fff8ec; --lb26b-caution-text: #b67b1d; --lb26b-bad-bg: #fff0f0; --lb26b-bad-text: #c35a5a; --lb26b-shadow: 0 12px 32px rgba(115, 66, 86, 0.08); --lb26b-radius: 20px; color: var(--lb26b-text); font-family: Inter, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; line-height: 1.5; } .lb26b, .lb26b * { box-sizing: border-box; } .lb26b a { color: inherit; } .lb26b__shell { max-width: 740px; width: 100%; overflow: hidden; margin: 0 auto; padding: 20px 0 56px; background: radial-gradient(circle at top left, rgba(244,181,199,.18), transparent 28%), radial-gradient(circle at bottom right, rgba(244,181,199,.16), transparent 24%), var(--lb26b-bg); border-radius: 28px; } .lb26b__container { width: calc(100% - 16px); max-width: 724px; margin: 0 auto; } .lb26b__hero { text-align: center; padding: 28px 0 18px; } .lb26b__eyebrow { display: inline-flex; align-items: center; gap: 8px; padding: 8px 14px; border: 1px solid var(--lb26b-line); border-radius: 999px; background: rgba(255,255,255,.72); color: var(--lb26b-muted); font-size: 14px; margin-bottom: 14px; } .lb26b__title { margin: 0; font-size: clamp(28px, 5vw, 44px); line-height: 1.06; letter-spacing: -0.03em; color: var(--lb26b-text); } .lb26b__lead { max-width: 620px; margin: 14px auto 0; color: var(--lb26b-muted); font-size: clamp(15px, 2.2vw, 18px); } .lb26b__summary { margin: 22px auto 0; display: grid; grid-template-columns: repeat(3, 1fr); gap: 10px; max-width: 700px; } .lb26b__summary-item, .lb26b__card, .lb26b__mini-card, .lb26b__related-card { background: rgba(255,255,255,.8); border: 1px solid var(--lb26b-line); box-shadow: var(--lb26b-shadow); } .lb26b__summary-item { padding: 14px 16px; border-radius: 18px; text-align: left; } .lb26b__summary-item small { display: block; color: var(--lb26b-muted); margin-bottom: 6px; font-size: 13px; } .lb26b__summary-item strong { font-size: 15px; display: block; } .lb26b__actions { display: flex; gap: 12px; justify-content: center; flex-wrap: wrap; margin-top: 18px; } .lb26b__button, .lb26b__goal-btn, .lb26b__tab-btn, .lb26b__day { font: inherit; } .lb26b__button { appearance: none; border: 0; cursor: pointer; text-decoration: none; padding: 14px 18px; border-radius: 999px; font-weight: 700; font-size: 15px; transition: transform .2s ease, box-shadow .2s ease, background .2s ease; display: inline-flex; align-items: center; justify-content: center; gap: 8px; } .lb26b__button:hover { transform: translateY(-1px); } .lb26b__button--primary { background: linear-gradient(180deg, #e982a1 0%, var(--lb26b-accent) 100%); color: #fff; box-shadow: 0 14px 28px rgba(217,108,141,.24); } .lb26b__button--ghost { background: rgba(255,255,255,.78); color: var(--lb26b-text); border: 1px solid var(--lb26b-line); } .lb26b__stack { display: grid; gap: 18px; margin-top: 18px; } .lb26b__card { border-radius: var(--lb26b-radius); padding: 18px; backdrop-filter: blur(10px); } .lb26b__section-head { display: flex; justify-content: space-between; gap: 12px; align-items: start; margin-bottom: 14px; } .lb26b__section-head h2 { margin: 0; font-size: clamp(22px, 2.8vw, 30px); line-height: 1.1; letter-spacing: -0.03em; color: var(--lb26b-text); } .lb26b__section-head p { margin: 4px 0 0; color: var(--lb26b-muted); max-width: 520px; font-size: 14px; } .lb26b__today { display: grid; grid-template-columns: 160px 1fr; gap: 14px; align-items: center; } .lb26b__today-date { border-radius: 18px; background: var(--lb26b-surface-soft); border: 1px solid var(--lb26b-line); padding: 18px; text-align: center; } .lb26b__today-date strong { display: block; font-size: 30px; line-height: 1; margin-bottom: 6px; } .lb26b__today-date span { color: var(--lb26b-muted); font-size: 14px; } .lb26b__today-badges { display: flex; gap: 10px; flex-wrap: wrap; margin-bottom: 10px; } .lb26b__pill { display: inline-flex; align-items: center; gap: 8px; min-height: 40px; padding: 10px 14px; border-radius: 999px; font-weight: 600; font-size: 14px; border: 1px solid transparent; } .lb26b__pill--good { background: var(--lb26b-good-bg); color: var(--lb26b-good-text); } .lb26b__pill--neutral { background: var(--lb26b-neutral-bg); color: var(--lb26b-neutral-text); } .lb26b__pill--caution { background: var(--lb26b-caution-bg); color: var(--lb26b-caution-text); } .lb26b__pill--bad { background: var(--lb26b-bad-bg); color: var(--lb26b-bad-text); } .lb26b__goal-grid, .lb26b__mini-grid, .lb26b__related-grid { display: grid; grid-template-columns: repeat(4, minmax(0,1fr)); gap: 12px; } .lb26b__goal-btn, .lb26b__tab-btn { appearance: none; border: 1px solid var(--lb26b-line); background: #fff; color: var(--lb26b-text); border-radius: 16px; padding: 14px 16px; font-weight: 700; cursor: pointer; text-align: center; transition: .2s ease; } .lb26b__goal-btn:hover, .lb26b__tab-btn:hover { border-color: var(--lb26b-accent-2); } .lb26b__goal-btn.is-active, .lb26b__tab-btn.is-active { background: var(--lb26b-good-bg); color: var(--lb26b-good-text); border-color: #f0c5d3; box-shadow: inset 0 0 0 1px rgba(217,108,141,.08); } .lb26b__goal-result { margin-top: 14px; padding: 14px 16px; border-radius: 16px; background: var(--lb26b-surface-soft); border: 1px solid var(--lb26b-line); font-weight: 600; } .lb26b__goal-result strong { color: var(--lb26b-good-text); } .lb26b__toolbar { display: flex; justify-content: space-between; gap: 12px; margin-bottom: 14px; flex-wrap: wrap; } .lb26b__tabs, .lb26b__filters { display: flex; gap: 10px; flex-wrap: wrap; align-items: center; } .lb26b__filters label { display: inline-flex; gap: 8px; align-items: center; padding: 10px 12px; border: 1px solid var(--lb26b-line); border-radius: 999px; background: #fff; font-size: 14px; cursor: pointer; } .lb26b__calendar-shell { display: grid; grid-template-columns: minmax(0,1fr) 220px; gap: 10px; align-items: start; max-width: 100%; } .lb26b__calendar { border: 1px solid var(--lb26b-line); border-radius: 22px; overflow: hidden; background: var(--lb26b-surface); min-width: 0; max-width: 100%; } .lb26b__weekdays, .lb26b__grid { display: grid; grid-template-columns: repeat(7, minmax(0,1fr)); } .lb26b__weekdays > div { padding: 12px 6px; text-align: center; font-weight: 700; color: var(--lb26b-muted); background: #fcf3f6; border-bottom: 1px solid var(--lb26b-line); font-size: 13px; } .lb26b__day { min-height: 98px; border-right: 1px solid var(--lb26b-line); border-bottom: 1px solid var(--lb26b-line); padding: 8px 6px; display: flex; flex-direction: column; gap: 6px; background: #fff; position: relative; transition: background .2s ease; text-align: left; width: 100%; border-left: 0; border-top: 0; color: inherit; cursor: pointer; min-width: 0; } .lb26b__day:hover { background: #fff8fa; } .lb26b__day:nth-child(7n) { border-right: 0; } .lb26b__day--empty { background: #fffafc; cursor: default; } .lb26b__day--hidden { display: none; } .lb26b__day-top { display: flex; justify-content: space-between; gap: 4px; align-items: start; } .lb26b__day-num { font-size: 14px; font-weight: 800; line-height: 1; } .lb26b__day-icon { font-size: 14px; line-height: 1; } .lb26b__day-title { font-size: 12px; font-weight: 700; line-height: 1.15; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; word-break: break-word; } .lb26b__day-title-short { display: none; } .lb26b__day-meta { margin-top: auto; font-size: 10px; color: var(--lb26b-muted); line-height: 1.2; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; word-break: break-word; } .lb26b__day.is-active { background: #fff3f7; box-shadow: inset 0 0 0 2px #f4c4d3; } .lb26b__day--today::after { content: ""; position: absolute; top: 8px; right: 8px; width: 7px; height: 7px; border-radius: 50%; background: var(--lb26b-accent); box-shadow: 0 0 0 4px rgba(217,108,141,.14); } .lb26b__day[data-type="good"] { background-image: linear-gradient(180deg, rgba(255,241,245,.55), transparent 48%); } .lb26b__day[data-type="neutral"] { background-image: linear-gradient(180deg, rgba(246,241,255,.6), transparent 48%); } .lb26b__day[data-type="caution"] { background-image: linear-gradient(180deg, rgba(255,248,236,.8), transparent 48%); } .lb26b__day[data-type="bad"] { background-image: linear-gradient(180deg, rgba(255,240,240,.8), transparent 48%); } .lb26b__detail { position: sticky; top: 16px; min-height: 280px; padding: 12px; max-width: 100%; overflow: hidden; } .lb26b__detail-head { display: flex; flex-direction: column; justify-content: start; gap: 10px; align-items: start; margin-bottom: 10px; } .lb26b__detail-head h3 { margin: 0; font-size: 18px; line-height: 1.08; } .lb26b__detail-status { margin: 2px 0 0; color: var(--lb26b-muted); font-size: 13px; } .lb26b__detail-list { list-style: none; padding: 0; margin: 12px 0; display: grid; gap: 8px; } .lb26b__detail-list li { display: flex; gap: 8px; padding: 10px 11px; border-radius: 14px; background: var(--lb26b-surface-soft); border: 1px solid var(--lb26b-line); font-size: 13px; line-height: 1.3; } .lb26b__detail-advice { margin: 0; padding: 12px; border-radius: 14px; background: #fff; border: 1px dashed #e7bcc8; font-size: 14px; line-height: 1.4; } .lb26b__mini-card, .lb26b__related-card { padding: 18px; border-radius: 18px; } .lb26b__mini-card h3, .lb26b__related-card strong { margin: 0 0 10px; font-size: 16px; line-height: 1.25; display: block; } .lb26b__mini-card p, .lb26b__related-card span { margin: 0; color: var(--lb26b-muted); font-size: 15px; display: block; } .lb26b__related-card { text-decoration: none; color: inherit; transition: transform .2s ease; } .lb26b__related-card:hover { transform: translateY(-2px); } .lb26b__article { display: grid; gap: 14px; } .lb26b__article h2, .lb26b__article h3 { margin: 0; line-height: 1.15; letter-spacing: -0.02em; color: var(--lb26b-text); } .lb26b__article p, .lb26b__article li { color: #54464d; margin: 0; } .lb26b__article ul { margin: 0; padding-left: 20px; } .lb26b__drawer { position: fixed; inset: auto 0 0 0; background: rgba(252,247,248,.96); backdrop-filter: blur(14px); border-top: 1px solid var(--lb26b-line); border-radius: 22px 22px 0 0; padding: 16px 16px max(16px, env(safe-area-inset-bottom)); box-shadow: 0 -18px 48px rgba(72, 40, 54, 0.12); transform: translateY(104%); transition: transform .24s ease; z-index: 9999; max-height: 86vh; overflow: auto; } .lb26b__drawer.is-open { transform: translateY(0); } .lb26b__drawer-handle { width: 52px; height: 6px; background: #dec8cf; border-radius: 999px; margin: 0 auto 14px; } .lb26b__drawer-close { width: 100%; margin-top: 12px; } .lb26b__calendar, .lb26b__calendar-shell, .lb26b__grid, .lb26b__weekdays, .lb26b__card, .lb26b__summary, .lb26b__mini-grid, .lb26b__related-grid { max-width: 100%; } .lb26b__day, .lb26b__summary-item, .lb26b__mini-card, .lb26b__related-card { min-width: 0; } .lb26b.lb26b--compact .lb26b__calendar-shell { grid-template-columns: 1fr; } .lb26b.lb26b--compact .lb26b__detail { display: none; } .lb26b.lb26b--compact .lb26b__weekdays { display: none; } .lb26b.lb26b--compact .lb26b__calendar { overflow: hidden; } .lb26b.lb26b--compact .lb26b__grid { grid-template-columns: repeat(2, minmax(0,1fr)); width: 100%; min-width: 0; } .lb26b.lb26b--compact .lb26b__day, .lb26b.lb26b--compact .lb26b__day--empty { min-height: 92px; padding: 8px 6px; } .lb26b.lb26b--compact .lb26b__day-title { display: block; font-size: 12px; -webkit-line-clamp: 2; } .lb26b.lb26b--compact .lb26b__day-title-short { display: none; } .lb26b.lb26b--compact .lb26b__day-meta { display: block; font-size: 10px; } .lb26b.lb26b--compact .lb26b__day-top { margin-bottom: 2px; } .lb26b.lb26b--compact .lb26b__day[data-day] { display: flex; } .lb26b.lb26b--compact .lb26b__day--empty { display: none; } .lb26b.lb26b--tiny .lb26b__summary, .lb26b.lb26b--tiny .lb26b__goal-grid, .lb26b.lb26b--tiny .lb26b__mini-grid, .lb26b.lb26b--tiny .lb26b__related-grid { grid-template-columns: 1fr; } .lb26b.lb26b--tiny .lb26b__today { grid-template-columns: 1fr; } .lb26b.lb26b--tiny .lb26b__actions { flex-direction: column; } .lb26b.lb26b--tiny .lb26b__button { width: 100%; } .lb26b.lb26b--tiny .lb26b__tabs, .lb26b.lb26b--tiny .lb26b__filters { margin-bottom: 10px; } .lb26b.lb26b--tiny .lb26b__toolbar { display: block; } .lb26b.lb26b--tiny .lb26b__grid { grid-template-columns: 1fr; } .lb26b.lb26b--tiny .lb26b__day, .lb26b.lb26b--tiny .lb26b__day--empty { min-height: 84px; } @media (max-width: 740px) { .lb26b__shell { border-radius: 22px; } .lb26b__container { width: min(calc(100% - 18px), 740px); } .lb26b__summary, .lb26b__goal-grid, .lb26b__mini-grid, .lb26b__related-grid { grid-template-columns: 1fr 1fr; } .lb26b__today { grid-template-columns: 1fr; } .lb26b__section-head { display: block; } .lb26b__toolbar { display: block; } .lb26b__tabs, .lb26b__filters { margin-bottom: 10px; } .lb26b__calendar-shell { grid-template-columns: 1fr; } .lb26b__detail { display: none; } } @media (max-width: 620px) { .lb26b__shell { padding-top: 10px; border-radius: 18px; overflow: hidden; } .lb26b__container { width: calc(100% - 12px); max-width: 728px; } .lb26b__card { padding: 14px; border-radius: 18px; } .lb26b__summary, .lb26b__goal-grid, .lb26b__mini-grid, .lb26b__related-grid { grid-template-columns: 1fr; } .lb26b__actions { flex-direction: column; } .lb26b__button { width: 100%; } .lb26b__hero { padding-top: 18px; } .lb26b__title { font-size: 32px; } .lb26b__calendar { overflow: hidden; -webkit-overflow-scrolling: touch; margin-right: 0; } .lb26b__weekdays, .lb26b__grid { min-width: 0; width: 100%; } .lb26b__weekdays > div { padding: 8px 2px; font-size: 10px; } .lb26b__day { min-height: 62px; padding: 4px 3px; gap: 3px; } .lb26b__day-num, .lb26b__day-icon { font-size: 11px; } .lb26b__day-title { display: none; } .lb26b__day-title-short { display: block; font-size: 9px; font-weight: 700; line-height: 1.05; display: -webkit-box; -webkit-line-clamp: 1; -webkit-box-orient: vertical; overflow: hidden; word-break: break-word; } .lb26b__day-meta { display: none; } .lb26b__filters label { font-size: 13px; padding: 8px 10px; } .lb26b__goal-btn, .lb26b__tab-btn { padding: 12px 12px; } .lb26b__pill { font-size: 13px; padding: 9px 12px; } } 💅 Лунные календари • Апрель 2026

Лунный календарь красоты
на апрель 2026 года

Благоприятные и неблагоприятные дни для ухода за кожей, обновления образа, косметических процедур и расслабляющих практик.

✨ Благоприятные дни4–6, 10–14, 18–30 апреля ⚠ Осторожно7–9, 15–17 апреля ⛔ Неблагоприятный день2 апреля Узнать про сегодняПерейти к календарю

Сегодня по Луне

 

Под вашу цель

Выберите задачу, чтобы сразу увидеть наиболее удачные даты.

   

Календарь красоты на апрель

Нажмите на дату, чтобы открыть подробную рекомендацию.

  Благоприятные Нейтральные Осторожно Неблагоприятные Пн Вт Ср Чт Пт Сб Вс    

Быстрые ориентиры

Лучшие дни для ухода

4–14 апреля

Когда менять образ

18–30 апреля

Когда избегать экспериментов

2, 7–9, 15–17 апреля

Когда делать очищение

3–14 апреля

Подробный лунный календарь красоты на апрель 2026 года

Апрель 2026 года — период обновления внешности, ухода за кожей, волосами и телом после зимнего сезона. Такой формат помогает быстро выбрать удачные дни для косметических процедур, очищения и смены образа.

Основные фазы Луны

Как использовать календарь

Выберите цель, отфильтруйте типы дней и нажмите на нужную дату. В карточке дня откроется краткая рекомендация для ухода, процедур и обновления образа.

Смотрите также

Лунный календарь стрижекЛучшие дни для ухода и смены образаЛунный календарь домашних делУдачные дни для уборки, стирки, ремонта,Лунный календарь здоровьяРежим, восстановление и самочувствиеЛунный календарь покупокЛучшие дни для крупных трат     Закрыть (function() { const root = document.getElementById('lb26b-root'); if (!root) return; const goals = { care: { label: 'Уход и восстановление', result: 'Лучшие дни: 4–14 апреля' }, image: { label: 'Смена образа', result: 'Лучшие дни: 18–30 апреля' }, cleansing: { label: 'Очищение кожи', result: 'Лучшие дни: 3–14 апреля' }, avoid: { label: 'Избежать рисков', result: 'Осторожные даты: 2, 7–9, 15–17 апреля' } }; const topics = [{ id: 'care', label: '✨ Уход' }, { id: 'procedures', label: '💆 Процедуры' }, { id: 'image', label: '💄 Образ' }]; const shortTitles = {1:'Базовый уход',2:'Без процедур',3:'Очищение',4:'Уход',5:'База',6:'Уход за кожей',7:'Без новинок',8:'Чувствительность',9:'Пауза',10:'Восстановление',11:'Расслабление',12:'Комплексный уход',13:'Восстановление',14:'Уход',15:'Минимум',16:'Щадящий режим',17:'Отдых',18:'Обновление',19:'Лёгкие изменения',20:'Процедуры',21:'Эксперименты',22:'Образ',23:'Окрашивание',24:'Косметология',25:'Смена образа',26:'Комплексный уход',27:'Красота',28:'Процедуры',29:'Закрепление',30:'Уход'}; const days = { 1:{type:'neutral',title:'Базовый уход',icon:'🪞',month:'апреля',care:'Подходит для базового ухода без экспериментов.',procedures:'Лучше ограничиться лёгкими процедурами.',image:'Образ лучше не менять резко.',advice:'Выбирайте привычный уход и не перегружайте кожу.'}, 2:{type:'bad',title:'Без процедур',icon:'⛔',month:'апреля',care:'Кожа может быть чувствительной.',procedures:'Активные процедуры не рекомендуются.',image:'Новый образ может разочаровать.',advice:'Лучше отложить косметические эксперименты и агрессивные процедуры.'}, 3:{type:'neutral',title:'Очищение',icon:'🧴',month:'апреля',care:'Подходит для лёгкого очищения кожи.',procedures:'Можно сделать спокойные домашние процедуры.',image:'Для смены образа день нейтральный.',advice:'Хорошо для очищающих масок и мягкого ухода.'}, 4:{type:'good',title:'Уход',icon:'✨',month:'апреля',care:'Хороший день для ухода и восстановления.',procedures:'Процедуры проходят мягко.',image:'Обновление внешности пойдёт на пользу.',advice:'Подходит для ухода за кожей, волосами и телом.'}, 5:{type:'good',title:'Базовые процедуры',icon:'🧴',month:'апреля',care:'Лучше всего работают привычные средства.',procedures:'Хороший день для регулярных процедур.',image:'Резкие перемены не обязательны.',advice:'Отличное время для ровного, спокойного ухода.'}, 6:{type:'good',title:'Уход за кожей',icon:'🌸',month:'апреля',care:'Кожа хорошо воспринимает уход.',procedures:'Можно делать уходовые процедуры.',image:'Подходят мягкие изменения.',advice:'День хорош для восстановления и питания кожи.'}, 7:{type:'caution',title:'Без новинок',icon:'⚠️',month:'апреля',care:'Новые средства могут не подойти.',procedures:'Лучше избегать активного вмешательства.',image:'Эксперименты лучше отложить.',advice:'Не тестируйте новые продукты и процедуры.'}, 8:{type:'caution',title:'Чувствительность',icon:'⚠️',month:'апреля',care:'Кожа может реагировать сильнее обычного.',procedures:'Подходит только щадящий уход.',image:'Обновление образа лучше перенести.',advice:'Выбирайте максимально мягкий режим.'}, 9:{type:'caution',title:'Пауза',icon:'⏸️',month:'апреля',care:'Лучше сократить нагрузку на кожу.',procedures:'Активные процедуры нежелательны.',image:'Риск неудачного впечатления от результата.',advice:'Ограничьтесь базовым уходом и дайте коже отдых.'}, 10:{type:'good',title:'Восстановление',icon:'💆',month:'апреля',care:'Хороший день для восстановления кожи.',procedures:'Подходят уходовые и расслабляющие процедуры.',image:'Резкие перемены не нужны.',advice:'Один из лучших дней для восстановления и питания.'}, 11:{type:'good',title:'Расслабление',icon:'🛁',month:'апреля',care:'Подходит для мягкого ухода.',procedures:'Хороший день для масок и расслабляющих процедур.',image:'Можно освежить внешний вид.',advice:'Выбирайте спокойные процедуры и домашний уход.'}, 12:{type:'good',title:'Комплексный уход',icon:'✨',month:'апреля',care:'Удачное время для комплексного ухода.',procedures:'Процедуры дают заметный результат.',image:'Можно улучшить образ без риска.',advice:'Подходит для ухода за лицом, телом и волосами.'}, 13:{type:'good',title:'Восстановление',icon:'🌿',month:'апреля',care:'Можно проводить восстановительные процедуры.',procedures:'Хорошо идёт домашний и салонный уход.',image:'Образ лучше не менять резко, а улучшать.',advice:'Идеально для мягкого восстановления и питания.'}, 14:{type:'good',title:'Уход',icon:'🌸',month:'апреля',care:'Благоприятный день для ухода.',procedures:'Подходят мягкие процедуры и массажи.',image:'Лёгкое обновление внешности пойдёт хорошо.',advice:'Один из самых гармоничных дней для красоты.'}, 15:{type:'caution',title:'Минимум',icon:'⚠️',month:'апреля',care:'Лучше ограничиться минимумом ухода.',procedures:'Активные процедуры могут утомить.',image:'Для смены образа фон слабый.',advice:'Не перегружайте кожу и не спешите с экспериментами.'}, 16:{type:'caution',title:'Щадящий режим',icon:'🌙',month:'апреля',care:'Подходит только щадящий уход.',procedures:'Лучше без сложных салонных процедур.',image:'Результат может не порадовать.',advice:'Оставьте только самые спокойные этапы ухода.'}, 17:{type:'caution',title:'Отдых',icon:'🌑',month:'апреля',care:'День отдыха для кожи и тела.',procedures:'От активных процедур лучше отказаться.',image:'Смену образа лучше только планировать.',advice:'Спокойный день для паузы и восстановления.'}, 18:{type:'good',title:'Обновление',icon:'💄',month:'апреля',care:'Хороший день для обновления внешности.',procedures:'Можно начинать активные процедуры.',image:'Отличный момент для мягкой смены образа.',advice:'Подходит для первых шагов к обновлению внешности.'}, 19:{type:'good',title:'Лёгкие изменения',icon:'🪞',month:'апреля',care:'Уход проходит стабильно.',procedures:'Подходят лёгкие процедуры.',image:'Хорошо освежить образ без резких перемен.',advice:'День для аккуратных изменений и внимания к деталям.'}, 20:{type:'good',title:'Процедуры',icon:'💆',month:'апреля',care:'Уход даёт заметный результат.',procedures:'Очень хороший день для процедур красоты.',image:'Можно смело улучшать образ.',advice:'Подходит для салонного ухода и комплексных процедур.'}, 21:{type:'good',title:'Эксперименты',icon:'💋',month:'апреля',care:'Кожа и волосы хорошо воспринимают уход.',procedures:'Можно пробовать новые форматы.',image:'Хороший день для экспериментов.',advice:'Подходит для обновления стиля и новых решений.'}, 22:{type:'good',title:'Образ',icon:'✨',month:'апреля',care:'Благоприятный день для ухода.',procedures:'Хорошо делать активные процедуры.',image:'Удачный момент для обновления образа.',advice:'Можно менять акценты во внешности и планировать важный выход.'}, 23:{type:'good',title:'Окрашивание',icon:'🎨',month:'апреля',care:'Подходит для ухода и восстановления.',procedures:'Хороший день для профессиональных процедур.',image:'Особенно удачен для окрашивания и обновления цвета.',advice:'Один из лучших дней для окрашивания и заметных перемен.'}, 24:{type:'good',title:'Косметология',icon:'🧖',month:'апреля',care:'Кожа благодарно реагирует на уход.',procedures:'Отличный день для косметических процедур.',image:'Результат заметен и радует.',advice:'Подходит для салонного ухода, масок и аппаратов.'}, 25:{type:'good',title:'Смена образа',icon:'💄',month:'апреля',care:'Подходит для комплексного ухода.',procedures:'Процедуры проходят удачно.',image:'Сильный день для изменения внешности.',advice:'Лучший момент для смелой смены образа.'}, 26:{type:'good',title:'Комплексный уход',icon:'🪷',month:'апреля',care:'Можно сочетать несколько этапов ухода.',procedures:'Комплексные процедуры особенно удачны.',image:'Образ можно аккуратно доработать.',advice:'Хороший день для полного ритуала красоты.'}, 27:{type:'good',title:'Красота',icon:'🌸',month:'апреля',care:'Благоприятный день для красоты и ухода.',procedures:'Подходят почти все процедуры.',image:'Внешность легко освежить.',advice:'День гармонии, когда уход даёт особенно приятный эффект.'}, 28:{type:'good',title:'Процедуры',icon:'💆',month:'апреля',care:'Хороший день для поддержки результата.',procedures:'Можно делать уходовые процедуры.',image:'Образ выглядит собраннее и свежее.',advice:'Подходит для визита в салон и закрепления эффекта.'}, 29:{type:'good',title:'Закрепление',icon:'🪞',month:'апреля',care:'Подходит для закрепления результата.',procedures:'Лучше поддерживающие процедуры.',image:'Хороший день для финальных штрихов.',advice:'Отличный момент для поддержания формы и результата.'}, 30:{type:'good',title:'Уход',icon:'✨',month:'апреля',care:'Удачный день для ухода и завершения месяца.',procedures:'Процедуры проходят спокойно и эффективно.',image:'Можно красиво завершить месяц обновлением образа.',advice:'Подходит для приятного ухода и подведения итогов месяца.'} }; const calendarGrid = root.querySelector('[data-calendar-grid]'); const detailPanel = root.querySelector('[data-detail-panel]'); const drawer = root.querySelector('[data-drawer]'); const drawerContent = root.querySelector('[data-drawer-content]'); const drawerClose = root.querySelector('[data-drawer-close]'); const topicTabs = root.querySelector('[data-topic-tabs]'); const goalButtons = root.querySelector('[data-goal-buttons]'); const goalResult = root.querySelector('[data-goal-result]'); const todayCard = root.querySelector('[data-today-card]'); const todayBtn = root.querySelector('[data-today-btn]'); let activeDay = 18; let activeTopic = 'care'; let activeGoal = 'care'; const visibleTypes = new Set(['good', 'neutral', 'caution', 'bad']); function getTypeLabel(type) { return {good:'Благоприятный день',neutral:'Нейтральный день',caution:'День повышенной осторожности',bad:'Неблагоприятный день'}[type]; } function buildGoals() { goalButtons.innerHTML = Object.entries(goals).map(([id, item]) => '' + item.label + '').join(''); goalResult.innerHTML = '' + goals[activeGoal].label + ': ' + goals[activeGoal].result; goalButtons.querySelectorAll('[data-goal]').forEach(function(btn) { btn.addEventListener('click', function() { activeGoal = btn.getAttribute('data-goal'); buildGoals(); }); }); } function buildTabs() { topicTabs.innerHTML = topics.map(function(topic) { return '' + topic.label + ''; }).join(''); topicTabs.querySelectorAll('[data-topic]').forEach(function(btn) { btn.addEventListener('click', function() { activeTopic = btn.getAttribute('data-topic'); buildTabs(); renderCalendar(); renderDetail(); }); }); } function getTopicText(item) { if (activeTopic === 'procedures') return item.procedures; if (activeTopic === 'image') return item.image; return item.care; } function shorten(text, limit) { return text.length > limit ? text.slice(0, limit).trim() + '…' : text; } function renderCalendar() { const cells = []; for (let i = 0; i < 2; i++) cells.push(''); for (let day = 1; day