31 Commits
Author SHA1 Message Date
Nikolay Mamadaev e5bead9104 feat(fonts): preset Sans uses Medeo Sans (replaces Geologica + PT Sans) 2026-10-29 18:20:45 +02:00
Nikolay Mamadaev cd5aefbb14 fix: load Umami analytics only on production domain 2026-10-19 12:39:34 +02:00
Nikolay Mamadaev 1d19ea0eb8 feat: add Umami analytics tracking 2026-10-07 20:28:12 +02:00
Nikolay Mamadaev f383ec350a feat: llms.txt — карта сайта для LLM-агентов + link-relation describedby в head
Генерируется в build-pages.mjs из тех же страниц, что и sitemap.xml, с ручными описаниями по каждому URL. Страницы-каталоги дизайн-системы (noindex) в файл не попадают.
2026-10-07 14:01:09 +02:00
root 90b77e4433 refactor: убрать стеклянный слой со всех карточек через data-glass="false" 2026-10-05 19:06:51 +02:00
root c2ee622680 refactor: убрать стеклянный слой с карточек портфолио через параметр data-glass="false" 2026-10-05 17:53:19 +02:00
root 3aced0387b refactor: стекло только на .mp-card--stack-bottom (убрать с остальных) 2026-10-01 18:45:32 +02:00
root 207e6121aa fix: резюме подхватывает акцент темы из localStorage (формат light/dark) 2026-10-01 14:22:13 +02:00
root 1891a99ef1 feat: glass-слой на связанных карточках кейсов (mp-card--glass) 2026-09-29 21:11:12 +02:00
root daa623fe73 feat(mesh-bg): fade-in шейдера фона + modulepreload графа
- canvas стартует с opacity:0 и плавно проявляется (0.9s) при .is-ready
- initPageMeshShader ставит is-ready после первого кадра
- modulepreload page-mesh-shader.js для параллельной загрузки с main.js
- пересборка страниц (build:pages)
2026-09-24 21:37:40 +02:00
root 15bf0e3293 fix(glass): рябь -> плавные волны — низкочастотная карта смещений
- displacement.png: вместо per-pixel шума — крупные блобы (8px+20px октавы, гаусс), плавные градиенты
- scale снижен 28->14 (панели), 12->6 (кнопки) под крупные пятна
2026-09-24 15:30:00 +02:00
root 449d5ac782 style(glass): убрана матовость — чистое искажение фона (без blur)
- glass-панели: --v12-glass-neutral-filter-lg = url(#liquid-glass-displacement) без blur
- кнопки: отдельный фильтр #liquid-glass-displacement-btn (scale=12), blur убран
- видно само искажение стекла, как просил пользователь
2026-09-24 15:26:29 +02:00
root 5fd8324b47 feat(glass): Liquid Glass эффект через SVG displacement-фильтр (по статье Хабра)
- PNG карта мелкого равномерного шума (public/assets/liquid-glass/displacement.png)
- инлайн SVG feDisplacementMap инъецируется во все страницы сборщиком (build-pages.mjs)
- glass-neutral + шапка/панели/FAB/overflow получают url(#filter) blur в Chromium
- Safari/Firefox: детект через @supports not (hanging-punctuation:first), остаётся чистый blur
- токены --v12-glass-neutral-filter-lg / -elevated-lg для обеих тем
2026-09-24 15:14:55 +02:00
root b6161c92cd feat(seo): robots.txt, ai.txt, sitemap.xml, canonical/hreflang, OG/Twitter, JSON-LD, og-image, noindex служебных 2026-09-22 11:09:26 +02:00
root 5bb8dc8ad2 feat(mp-card): deterministic pastel tag colors (distinct per content), padding 0.35rem 0.7rem, dark-theme aware 2026-09-18 11:14:46 +02:00
root 6d66e4cf12 feat(mp-card): color portfolio card tags with deterministic pastel palette (constant per content) 2026-09-17 22:37:22 +02:00
root 588e3a2b9d fix(mp-card): apply stack-bottom variant to portfolio section, revert activity section 2026-09-17 21:30:13 +02:00
root 0c172aecfe fix(anchors): rename #projects → #portfolio and #mini-projects → #activity (links + targets + css) 2026-09-17 18:38:13 +02:00
root e29a0619b2 feat(lang-switch): footer shows single word — 'English' on RU pages, 'Русский' on EN; keep path-aware href 2026-09-17 18:13:30 +02:00
root fe9248c212 fix(contacts): remove Yandex card from contacts block
- drop contact-card--brand-ya (yandex chat) from contact-section ru/en
- update cookie-policy contacts enumeration to drop Yandex (ru/en)
- rebuild public/
2026-09-16 12:50:10 +02:00
root 20ee81bfaf feat(i18n): move language switcher into footer, restyle laconic
- remove {{> lang-switch}} from header-home/case/minimal
- add {{> lang-switch}} to footer
- restyle .lang-switch as compact text group 'RU / EN' (active = accent),
  drop pill borders/background for a minimal look
2026-09-15 23:02:53 +02:00
root a0dda98b83 i18n: build-time ru/en localization + EN homepage & cookie-policy
- build-pages.mjs: per-locale page/partial overrides (*.en.html), i18n token
  resolution with ru fallback, <html lang> + assetPrefix per locale
- UI dictionaries src/i18n/{ru,en}.json; lang-switch partial
- headers/footer/partials converted to {{i18n:…}} tokens
- root-absolute static asset refs so /en/ subpath loads css/js/vendor
- EN content: homepage (index.en.html + partials) and cookie-policy.en.html
  (cookie-policy body translated via apinex.bond /v1/tools/translator)
2026-09-15 22:27:51 +02:00
root 4212579c5a fix: внутренние ссылки без .html (clean URL) в партиалах, cases, cookie-policy, resume 2026-09-11 13:43:53 +02:00
root 8f40fcb5ed feat: дефолт fade для карусели; просмотрщик без анимации смены кадра 2026-09-11 13:03:46 +02:00
root a43aaa5e22 feat: case-media-gallery--wide — 4 колонки, выход за колонку как у case-media--wide 2026-09-10 21:35:49 +02:00
root 2d0f3f3989 feat: варианты анимации слайдера (slide/fade/none), пилюли-точки, blur-фон просмотрщика, фикс открытия в natural-слайдерах 2026-09-10 19:58:21 +02:00
root c14bb1f543 fix: доработки слайдера и просмотрщика
- case-media-slider: обрамление+hover как у карточек, стрелки только при наведении (fade-in),
  группа пред/след-пилюля в правом нижнем углу, disabled-кнопки видны (не скрываются),
  убран border-radius у img/figcaption (скругление у viewport), неактивные слайды не скрываются
  visibility (нет 'дырки' при перелистывании), настраиваемая ширина --wide/--content/--natural
- image-load-placeholder: исключён .case-media-slider (нет блика/серого фона)
- icon-press: универсальный эффект 'продавливания' иконки при нажатии (.icon-press + :active/.is-pressed),
  применён к слайдеру и всем кнопкам просмотрщика
2026-09-09 19:29:30 +02:00
root 95b4eaca93 feat: галерея-слайдер, листалка в просмотрщике и TUI braille-спиннер
- case-media-slider: переиспользуемый слайдер (prev/next + точки, swipe, клавиатура, lazy)
- image-viewer: листалка prev/next в тулбаре как пилюли, пагинация-точки в тулбаре слева,
  группа масштаба (slider + текст) с gap 0.25rem, текст масштаба --text-muted/400
- tui-spinner: переиспользуемый braille-спиннер (чистый CSS), лоадер просмотрщика
- design-system.html: живой пример TUI braille-спиннера
- fix: удалён мёртвый textContent='Загрузка...', убивавший .tui-spinner при повторном открытии
2026-09-09 17:49:56 +02:00
root 16dafcbf01 chore: удалена пустая секция section--surface после контактов
Убран инклюд {{> footer-spacer}} (пустая <section class="section section--surface"
aria-hidden> как прокладка перед футером) на главной и во всех 16 кейсах.
Пересобраны страницы (build:pages).
2026-09-08 18:15:04 +02:00
Local Build 8ce691eee7 Чистый URL для cookie-policy: cookie-policy/ вместо cookie-policy.html 2026-08-15 20:06:12 +02:00
Local Build c4bfe5c9ee Чистые URL для кейсов: cases/slug/ вместо cases/slug.html, исправлены пути к ассетам 2026-08-15 16:37:54 +02:00