Files
Cosmo def9a6e327
All checks were successful
Deploy Remont Site / deploy (push) Successful in 57s
Ремонт квартиры: сайт remont.digital-home.site из заметок + авто-деплой
- переименованы заметки (Планировка, Гостиная-кухня, Спальня) и картинки
- вычищены таблицы, добавлен README-индекс
- .site/: генератор сайта из markdown (node+sharp → nginx), дизайн из assets
- .gitea/workflows/deploy-remont.yml: авто-сборка и деплой по пушу в папку

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-15 17:46:08 +00:00

80 lines
3.4 KiB
JavaScript

// ── тема ──────────────────────────────────────────────────
(function () {
const root = document.documentElement;
const saved = localStorage.getItem('remont-theme');
const prefersDark = window.matchMedia('(prefers-color-scheme: dark)').matches;
root.setAttribute('data-theme', saved || (prefersDark ? 'dark' : 'light'));
const btn = document.getElementById('themeBtn');
btn.addEventListener('click', () => {
const next = root.getAttribute('data-theme') === 'dark' ? 'light' : 'dark';
root.setAttribute('data-theme', next);
localStorage.setItem('remont-theme', next);
document.querySelector('meta[name=theme-color]')
.setAttribute('content', next === 'dark' ? '#201F1B' : '#EDE8DE');
});
})();
// ── тень шапки при скролле ────────────────────────────────
(function () {
const bar = document.getElementById('topbar');
const onScroll = () => bar.classList.toggle('scrolled', window.scrollY > 8);
onScroll();
window.addEventListener('scroll', onScroll, { passive: true });
})();
// ── появление секций ──────────────────────────────────────
(function () {
const io = new IntersectionObserver((entries) => {
entries.forEach((e) => {
if (e.isIntersecting) { e.target.classList.add('in'); io.unobserve(e.target); }
});
}, { threshold: 0.12, rootMargin: '0px 0px -8% 0px' });
document.querySelectorAll('.reveal').forEach((el) => io.observe(el));
})();
// ── активный пункт навигации ──────────────────────────────
(function () {
const links = [...document.querySelectorAll('#nav a')];
const map = new Map(links.map((a) => [a.getAttribute('href').slice(1), a]));
const io = new IntersectionObserver((entries) => {
entries.forEach((e) => {
if (e.isIntersecting) {
links.forEach((l) => l.classList.remove('active'));
map.get(e.target.id)?.classList.add('active');
}
});
}, { rootMargin: '-45% 0px -50% 0px' });
['plan', 'living', 'bedroom'].forEach((id) => {
const el = document.getElementById(id);
if (el) io.observe(el);
});
})();
// ── лайтбокс ──────────────────────────────────────────────
(function () {
const lb = document.getElementById('lightbox');
const lbImg = document.getElementById('lbImg');
const close = document.getElementById('lbClose');
function open(src, alt) {
lbImg.src = src; lbImg.alt = alt || '';
lb.classList.add('open'); lb.setAttribute('aria-hidden', 'false');
document.body.style.overflow = 'hidden';
}
function hide() {
lb.classList.remove('open'); lb.setAttribute('aria-hidden', 'true');
document.body.style.overflow = '';
lbImg.src = '';
}
document.querySelectorAll('[data-zoom]').forEach((img) => {
img.style.cursor = 'zoom-in';
img.addEventListener('click', (ev) => { ev.stopPropagation(); open(img.src, img.alt); });
});
lb.addEventListener('click', (e) => { if (e.target !== lbImg) hide(); });
close.addEventListener('click', hide);
document.addEventListener('keydown', (e) => { if (e.key === 'Escape') hide(); });
})();