feat: rebuild site content management
Replace legacy FAQ, downloads, and release flows with project and blog publishing. Add configurable branding and theme fields plus clean-start Compose seeding support.
This commit is contained in:
@@ -95,6 +95,28 @@ body::before {
|
||||
z-index: 0;
|
||||
}
|
||||
|
||||
/* Blog */
|
||||
.blog-grid {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(auto-fit, minmax(min(100%, 300px), 1fr));
|
||||
gap: var(--spacing-md);
|
||||
}
|
||||
|
||||
.blog-card { overflow: hidden; }
|
||||
.blog-card-image { display: block; aspect-ratio: 16 / 9; overflow: hidden; }
|
||||
.blog-card-image img { width: 100%; height: 100%; object-fit: cover; transition: var(--transition-smooth); }
|
||||
.blog-card:hover .blog-card-image img { transform: scale(1.04); }
|
||||
.blog-card-body { padding: var(--spacing-md); }
|
||||
.blog-meta { color: var(--text-muted); font-size: .86rem; margin-bottom: .7rem; }
|
||||
.blog-card-title { font-size: 1.35rem; margin-bottom: .7rem; }
|
||||
.blog-card-title a { color: var(--text-primary); }
|
||||
.blog-card-excerpt { color: var(--text-secondary); margin-bottom: var(--spacing-sm); }
|
||||
.blog-detail-header { max-width: 900px; }
|
||||
.blog-article-wrap { max-width: 900px; }
|
||||
.blog-cover { width: 100%; max-height: 520px; object-fit: cover; border-radius: var(--radius-lg); margin-bottom: var(--spacing-md); }
|
||||
.blog-article { padding: clamp(1.5rem, 4vw, 3rem); }
|
||||
.pagination { display: flex; align-items: center; justify-content: center; gap: var(--spacing-sm); margin-top: var(--spacing-xl); color: var(--text-secondary); }
|
||||
|
||||
#main-content {
|
||||
position: relative;
|
||||
z-index: 1;
|
||||
|
||||
@@ -5,9 +5,6 @@ const SELECTORS = {
|
||||
navbarToggle: '#navbarToggle',
|
||||
navbarMenu: '#navbarMenu',
|
||||
productsNavItem: '#productsNavItem',
|
||||
faqItems: '.faq-item',
|
||||
faqQuestion: '.faq-question',
|
||||
faqAnswer: '.faq-answer',
|
||||
fadeInElements: '.fade-in',
|
||||
citationCopy: '.citation-copy',
|
||||
};
|
||||
@@ -192,33 +189,6 @@ function initMegaMenu() {
|
||||
});
|
||||
}
|
||||
|
||||
function initFAQAccordion() {
|
||||
const faqItems = document.querySelectorAll(SELECTORS.faqItems);
|
||||
faqItems.forEach((item) => {
|
||||
const question = item.querySelector(SELECTORS.faqQuestion);
|
||||
const answer = item.querySelector(SELECTORS.faqAnswer);
|
||||
if (!question || !answer) return;
|
||||
|
||||
question.addEventListener('click', () => {
|
||||
const isOpen = item.classList.contains('open');
|
||||
|
||||
faqItems.forEach((other) => {
|
||||
if (other !== item) {
|
||||
other.classList.remove('open');
|
||||
const otherQuestion = other.querySelector(SELECTORS.faqQuestion);
|
||||
const otherAnswer = other.querySelector(SELECTORS.faqAnswer);
|
||||
if (otherQuestion) otherQuestion.setAttribute('aria-expanded', 'false');
|
||||
if (otherAnswer) otherAnswer.hidden = true;
|
||||
}
|
||||
});
|
||||
|
||||
item.classList.toggle('open', !isOpen);
|
||||
question.setAttribute('aria-expanded', String(!isOpen));
|
||||
answer.hidden = isOpen;
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
function initIntersectionObserver() {
|
||||
const elements = document.querySelectorAll(SELECTORS.fadeInElements);
|
||||
if (!elements.length) return;
|
||||
@@ -329,7 +299,6 @@ function init() {
|
||||
initNavbarScroll();
|
||||
initMobileMenu();
|
||||
initMegaMenu();
|
||||
initFAQAccordion();
|
||||
initIntersectionObserver();
|
||||
initReadMore();
|
||||
initCitationCopy();
|
||||
|
||||
Reference in New Issue
Block a user