{"id":670,"date":"2026-07-17T08:25:22","date_gmt":"2026-07-17T08:25:22","guid":{"rendered":"https:\/\/onestepblowmachine.com\/?page_id=670"},"modified":"2026-07-17T08:25:29","modified_gmt":"2026-07-17T08:25:29","slug":"blogs","status":"publish","type":"page","link":"https:\/\/onestepblowmachine.com\/ru\/blogs\/","title":{"rendered":"Blogs"},"content":{"rendered":"<p>[et_pb_section fb_built=&#8221;1&#8243; fullwidth=&#8221;on&#8221; _builder_version=&#8221;4.27.6&#8243; _module_preset=&#8221;default&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_fullwidth_code _builder_version=&#8221;4.27.6&#8243; _module_preset=&#8221;default&#8221; hover_enabled=&#8221;0&#8243; global_colors_info=&#8221;{}&#8221; sticky_enabled=&#8221;0&#8243;]<\/p>\n<div id=\"wp-dynamic-blog-hub\"><!-- [et_pb_line_break_holder] -->    <\/p>\n<style><!-- [et_pb_line_break_holder] -->        \/* Base styles and variables *\/<!-- [et_pb_line_break_holder] -->        :root {<!-- [et_pb_line_break_holder] -->            --primary-color: #0056b3;<!-- [et_pb_line_break_holder] -->            --text-main: #333333;<!-- [et_pb_line_break_holder] -->            --text-muted: #666666;<!-- [et_pb_line_break_holder] -->            --border-color: #eaeaea;<!-- [et_pb_line_break_holder] -->            --bg-light: #f9f9f9;<!-- [et_pb_line_break_holder] -->            --bg-white: #ffffff;<!-- [et_pb_line_break_holder] -->            --shadow-sm: 0 2px 4px rgba(0,0,0,0.05);<!-- [et_pb_line_break_holder] -->            --shadow-md: 0 4px 12px rgba(0,0,0,0.08);<!-- [et_pb_line_break_holder] -->            --border-radius: 8px;<!-- [et_pb_line_break_holder] -->            --transition: all 0.3s ease;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        #wp-dynamic-blog-hub {<!-- [et_pb_line_break_holder] -->            font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif;<!-- [et_pb_line_break_holder] -->            color: var(--text-main);<!-- [et_pb_line_break_holder] -->            max-width: 90%;<!-- [et_pb_line_break_holder] -->            margin: 0 auto;<!-- [et_pb_line_break_holder] -->            line-height: 1.6;<!-- [et_pb_line_break_holder] -->            display: flex;<!-- [et_pb_line_break_holder] -->            gap: 40px;<!-- [et_pb_line_break_holder] -->            align-items: flex-start;<!-- [et_pb_line_break_holder] -->            padding: 20px 0;<!-- [et_pb_line_break_holder] -->            box-sizing: border-box;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        #wp-dynamic-blog-hub * {<!-- [et_pb_line_break_holder] -->            box-sizing: border-box;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        \/* Layout Configuration *\/<!-- [et_pb_line_break_holder] -->        .hub-main-content {<!-- [et_pb_line_break_holder] -->            flex: 1;<!-- [et_pb_line_break_holder] -->            min-width: 0; \/* Prevents flex items from overflowing *\/<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .hub-sidebar {<!-- [et_pb_line_break_holder] -->            width: 300px;<!-- [et_pb_line_break_holder] -->            flex-shrink: 0;<!-- [et_pb_line_break_holder] -->            position: sticky;<!-- [et_pb_line_break_holder] -->            top: 40px;<!-- [et_pb_line_break_holder] -->            background: var(--bg-white);<!-- [et_pb_line_break_holder] -->            border-radius: var(--border-radius);<!-- [et_pb_line_break_holder] -->            padding: 20px;<!-- [et_pb_line_break_holder] -->            box-shadow: var(--shadow-sm);<!-- [et_pb_line_break_holder] -->            border: 1px solid var(--border-color);<!-- [et_pb_line_break_holder] -->            max-height: calc(100vh - 80px);<!-- [et_pb_line_break_holder] -->            overflow-y: auto;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        \/* Typography *\/<!-- [et_pb_line_break_holder] -->        .hub-title {<!-- [et_pb_line_break_holder] -->            font-size: 1.8rem;<!-- [et_pb_line_break_holder] -->            margin-top: 0;<!-- [et_pb_line_break_holder] -->            margin-bottom: 20px;<!-- [et_pb_line_break_holder] -->            color: var(--primary-color);<!-- [et_pb_line_break_holder] -->            border-bottom: 2px solid var(--border-color);<!-- [et_pb_line_break_holder] -->            padding-bottom: 10px;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .hub-subtitle {<!-- [et_pb_line_break_holder] -->            font-size: 1.4rem;<!-- [et_pb_line_break_holder] -->            margin-top: 30px;<!-- [et_pb_line_break_holder] -->            margin-bottom: 15px;<!-- [et_pb_line_break_holder] -->            color: var(--text-main);<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        \/* Sidebar Navigation *\/<!-- [et_pb_line_break_holder] -->        .hub-sidebar-nav {<!-- [et_pb_line_break_holder] -->            list-style: none;<!-- [et_pb_line_break_holder] -->            padding: 0;<!-- [et_pb_line_break_holder] -->            margin: 0;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .hub-sidebar-nav li {<!-- [et_pb_line_break_holder] -->            margin-bottom: 8px;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .hub-sidebar-nav a {<!-- [et_pb_line_break_holder] -->            text-decoration: none;<!-- [et_pb_line_break_holder] -->            color: var(--text-muted);<!-- [et_pb_line_break_holder] -->            display: block;<!-- [et_pb_line_break_holder] -->            padding: 6px 10px;<!-- [et_pb_line_break_holder] -->            border-radius: 4px;<!-- [et_pb_line_break_holder] -->            transition: var(--transition);<!-- [et_pb_line_break_holder] -->            font-size: 0.95rem;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .hub-sidebar-nav a:hover {<!-- [et_pb_line_break_holder] -->            background-color: var(--bg-light);<!-- [et_pb_line_break_holder] -->            color: var(--primary-color);<!-- [et_pb_line_break_holder] -->            padding-left: 15px;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .hub-sidebar-nav .nav-level-1 > a {<!-- [et_pb_line_break_holder] -->            font-weight: 600;<!-- [et_pb_line_break_holder] -->            color: var(--text-main);<!-- [et_pb_line_break_holder] -->            border-left: 3px solid transparent;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .hub-sidebar-nav .nav-level-1 > a:hover {<!-- [et_pb_line_break_holder] -->            border-left-color: var(--primary-color);<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .hub-sidebar-nav .nav-level-2 {<!-- [et_pb_line_break_holder] -->            padding-left: 15px;<!-- [et_pb_line_break_holder] -->            margin-top: 5px;<!-- [et_pb_line_break_holder] -->            list-style: none;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .hub-sidebar-nav .nav-level-2 a {<!-- [et_pb_line_break_holder] -->            font-size: 0.85rem;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        \/* Content Sections *\/<!-- [et_pb_line_break_holder] -->        .category-section {<!-- [et_pb_line_break_holder] -->            background: var(--bg-white);<!-- [et_pb_line_break_holder] -->            border: 1px solid var(--border-color);<!-- [et_pb_line_break_holder] -->            border-radius: var(--border-radius);<!-- [et_pb_line_break_holder] -->            padding: 24px;<!-- [et_pb_line_break_holder] -->            margin-bottom: 30px;<!-- [et_pb_line_break_holder] -->            box-shadow: var(--shadow-sm);<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .category-badge {<!-- [et_pb_line_break_holder] -->            display: inline-block;<!-- [et_pb_line_break_holder] -->            background: var(--bg-light);<!-- [et_pb_line_break_holder] -->            color: var(--text-muted);<!-- [et_pb_line_break_holder] -->            font-size: 0.8rem;<!-- [et_pb_line_break_holder] -->            padding: 4px 10px;<!-- [et_pb_line_break_holder] -->            border-radius: 20px;<!-- [et_pb_line_break_holder] -->            margin-bottom: 15px;<!-- [et_pb_line_break_holder] -->            border: 1px solid var(--border-color);<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        \/* Posts Grid *\/<!-- [et_pb_line_break_holder] -->        .posts-grid {<!-- [et_pb_line_break_holder] -->            display: grid;<!-- [et_pb_line_break_holder] -->            grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));<!-- [et_pb_line_break_holder] -->            gap: 20px;<!-- [et_pb_line_break_holder] -->            margin-bottom: 20px;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .post-card {<!-- [et_pb_line_break_holder] -->            border: 1px solid var(--border-color);<!-- [et_pb_line_break_holder] -->            border-radius: 6px;<!-- [et_pb_line_break_holder] -->            padding: 16px;<!-- [et_pb_line_break_holder] -->            transition: var(--transition);<!-- [et_pb_line_break_holder] -->            display: flex;<!-- [et_pb_line_break_holder] -->            flex-direction: column;<!-- [et_pb_line_break_holder] -->            justify-content: space-between;<!-- [et_pb_line_break_holder] -->            background: var(--bg-white);<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .post-card:hover {<!-- [et_pb_line_break_holder] -->            box-shadow: var(--shadow-md);<!-- [et_pb_line_break_holder] -->            transform: translateY(-2px);<!-- [et_pb_line_break_holder] -->            border-color: #ccc;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .post-card-title {<!-- [et_pb_line_break_holder] -->            font-size: 1.05rem;<!-- [et_pb_line_break_holder] -->            line-height: 1.4;<!-- [et_pb_line_break_holder] -->            margin: 0 0 10px 0;<!-- [et_pb_line_break_holder] -->            white-space: normal;<!-- [et_pb_line_break_holder] -->            word-wrap: break-word;<!-- [et_pb_line_break_holder] -->            overflow-wrap: break-word;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .post-card-title a {<!-- [et_pb_line_break_holder] -->            text-decoration: none;<!-- [et_pb_line_break_holder] -->            color: var(--text-main);<!-- [et_pb_line_break_holder] -->            transition: var(--transition);<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .post-card-title a:hover {<!-- [et_pb_line_break_holder] -->            color: var(--primary-color);<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .post-card-meta {<!-- [et_pb_line_break_holder] -->            font-size: 0.8rem;<!-- [et_pb_line_break_holder] -->            color: var(--text-muted);<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        \/* Buttons & Utilities *\/<!-- [et_pb_line_break_holder] -->        .btn-view-more {<!-- [et_pb_line_break_holder] -->            display: inline-block;<!-- [et_pb_line_break_holder] -->            padding: 10px 20px;<!-- [et_pb_line_break_holder] -->            background-color: var(--bg-light);<!-- [et_pb_line_break_holder] -->            color: var(--primary-color);<!-- [et_pb_line_break_holder] -->            text-decoration: none;<!-- [et_pb_line_break_holder] -->            border-radius: 4px;<!-- [et_pb_line_break_holder] -->            font-weight: 500;<!-- [et_pb_line_break_holder] -->            font-size: 0.9rem;<!-- [et_pb_line_break_holder] -->            border: 1px solid var(--border-color);<!-- [et_pb_line_break_holder] -->            transition: var(--transition);<!-- [et_pb_line_break_holder] -->            text-align: center;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        .btn-view-more:hover {<!-- [et_pb_line_break_holder] -->            background-color: var(--primary-color);<!-- [et_pb_line_break_holder] -->            color: #fff;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        \/* Loading Spinner *\/<!-- [et_pb_line_break_holder] -->        .loader-container {<!-- [et_pb_line_break_holder] -->            display: flex;<!-- [et_pb_line_break_holder] -->            flex-direction: column;<!-- [et_pb_line_break_holder] -->            align-items: center;<!-- [et_pb_line_break_holder] -->            justify-content: center;<!-- [et_pb_line_break_holder] -->            padding: 40px;<!-- [et_pb_line_break_holder] -->            width: 100%;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] -->        <!-- [et_pb_line_break_holder] -->        .spinner {<!-- [et_pb_line_break_holder] -->            width: 40px;<!-- [et_pb_line_break_holder] -->            height: 40px;<!-- [et_pb_line_break_holder] -->            border: 4px solid var(--bg-light);<!-- [et_pb_line_break_holder] -->            border-top: 4px solid var(--primary-color);<!-- [et_pb_line_break_holder] -->            border-radius: 50%;<!-- [et_pb_line_break_holder] -->            animation: spin 1s linear infinite;<!-- [et_pb_line_break_holder] -->            margin-bottom: 10px;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        @keyframes spin {<!-- [et_pb_line_break_holder] -->            0% { transform: rotate(0deg); }<!-- [et_pb_line_break_holder] -->            100% { transform: rotate(360deg); }<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        \/* Responsive Design *\/<!-- [et_pb_line_break_holder] -->        @media (max-width: 900px) {<!-- [et_pb_line_break_holder] -->            #wp-dynamic-blog-hub {<!-- [et_pb_line_break_holder] -->                flex-direction: column-reverse;<!-- [et_pb_line_break_holder] -->            }<!-- [et_pb_line_break_holder] -->            .hub-sidebar {<!-- [et_pb_line_break_holder] -->                width: 100%;<!-- [et_pb_line_break_holder] -->                position: static;<!-- [et_pb_line_break_holder] -->                max-height: none;<!-- [et_pb_line_break_holder] -->            }<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] -->    <\/style>\n<p><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    <main class=\"hub-main-content\"><!-- [et_pb_line_break_holder] -->        <!-- Technical Articles Section (Specific Requirement) --><!-- [et_pb_line_break_holder] -->        <\/p>\n<section class=\"category-section\" id=\"latest-tech-posts\"><!-- [et_pb_line_break_holder] -->            <\/p>\n<h2 class=\"hub-title\">Latest Technical Articles<\/h2>\n<p><!-- [et_pb_line_break_holder] -->            <\/p>\n<div id=\"latest-posts-list\"><!-- [et_pb_line_break_holder] -->                <\/p>\n<div class=\"loader-container\"><!-- [et_pb_line_break_holder] -->                    <\/p>\n<div class=\"spinner\"><\/div>\n<p><!-- [et_pb_line_break_holder] -->                    <span>Loading latest updates&#8230;<\/span><!-- [et_pb_line_break_holder] -->                <\/div>\n<p><!-- [et_pb_line_break_holder] -->            <\/div>\n<p><!-- [et_pb_line_break_holder] -->        <\/section>\n<p><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        <!-- Dynamic Categories Container --><!-- [et_pb_line_break_holder] -->        <\/p>\n<div id=\"dynamic-categories-container\"><!-- [et_pb_line_break_holder] -->            <!-- Content injected via JS --><!-- [et_pb_line_break_holder] -->        <\/div>\n<p><!-- [et_pb_line_break_holder] -->    <\/main><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    <\/p>\n<aside class=\"hub-sidebar\" id=\"hub-sidebar\"><!-- [et_pb_line_break_holder] -->        <\/p>\n<h3 class=\"hub-title\" style=\"font-size: 1.4rem;\">Collections<\/h3>\n<p><!-- [et_pb_line_break_holder] -->        <\/p>\n<nav><!-- [et_pb_line_break_holder] -->            <\/p>\n<ul class=\"hub-sidebar-nav\" id=\"sidebar-nav-list\"><!-- [et_pb_line_break_holder] -->                <\/p>\n<div class=\"loader-container\" style=\"padding: 20px;\"><!-- [et_pb_line_break_holder] -->                    <\/p>\n<div class=\"spinner\" style=\"width: 20px; height: 20px; border-width: 2px;\"><\/div>\n<p><!-- [et_pb_line_break_holder] -->                <\/div>\n<p><!-- [et_pb_line_break_holder] -->            <\/ul>\n<p><!-- [et_pb_line_break_holder] -->        <\/nav>\n<p><!-- [et_pb_line_break_holder] -->    <\/aside>\n<p><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    <script><!-- [et_pb_line_break_holder] -->        document.addEventListener('DOMContentLoaded', () => {<!-- [et_pb_line_break_holder] -->            const SITE_URL = 'https:\/\/onestepblowmachine.com';<!-- [et_pb_line_break_holder] -->            const API_BASE = `${SITE_URL}\/wp-json\/wp\/v2`;<!-- [et_pb_line_break_holder] -->            <!-- [et_pb_line_break_holder] -->            \/\/ DOM Elements<!-- [et_pb_line_break_holder] -->            const latestPostsContainer = document.getElementById('latest-posts-list');<!-- [et_pb_line_break_holder] -->            const categoriesContainer = document.getElementById('dynamic-categories-container');<!-- [et_pb_line_break_holder] -->            const sidebarNavList = document.getElementById('sidebar-nav-list');<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            \/\/ Initialize the application<!-- [et_pb_line_break_holder] -->            async function initApp() {<!-- [et_pb_line_break_holder] -->                try {<!-- [et_pb_line_break_holder] -->                    await fetchLatestPosts();<!-- [et_pb_line_break_holder] -->                    const categories = await fetchCategories();<!-- [et_pb_line_break_holder] -->                    const hierarchy = buildCategoryHierarchy(categories);<!-- [et_pb_line_break_holder] -->                    <!-- [et_pb_line_break_holder] -->                    renderSidebar(hierarchy);<!-- [et_pb_line_break_holder] -->                    await renderMainContent(hierarchy);<!-- [et_pb_line_break_holder] -->                } catch (error) {<!-- [et_pb_line_break_holder] -->                    console.error('Initialization Error:', error);<!-- [et_pb_line_break_holder] -->                    categoriesContainer.innerHTML = `<pee style=\"color: red;\">Failed to load collections. Please ensure the REST API is accessible.<\/pee>`;<!-- [et_pb_line_break_holder] -->                }<!-- [et_pb_line_break_holder] -->            }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            \/\/ Fetch Latest Technical Posts (Generic post fetch)<!-- [et_pb_line_break_holder] -->            async function fetchLatestPosts() {<!-- [et_pb_line_break_holder] -->                try {<!-- [et_pb_line_break_holder] -->                    const response = await fetch(`${API_BASE}\/posts?per_page=6`);<!-- [et_pb_line_break_holder] -->                    if (!response.ok) throw new Error('Network response was not ok');<!-- [et_pb_line_break_holder] -->                    const posts = await response.json();<!-- [et_pb_line_break_holder] -->                    <!-- [et_pb_line_break_holder] -->                    if (posts.length === 0) {<!-- [et_pb_line_break_holder] -->                        latestPostsContainer.innerHTML = '<pee>No recent articles found.<\/pee>';<!-- [et_pb_line_break_holder] -->                        return;<!-- [et_pb_line_break_holder] -->                    }<!-- [et_pb_line_break_holder] -->                    latestPostsContainer.innerHTML = generatePostsGridHTML(posts);<!-- [et_pb_line_break_holder] -->                } catch (error) {<!-- [et_pb_line_break_holder] -->                    console.error('Error fetching latest posts:', error);<!-- [et_pb_line_break_holder] -->                    latestPostsContainer.innerHTML = '<pee>Unable to load latest articles at this time.<\/pee>';<!-- [et_pb_line_break_holder] -->                }<!-- [et_pb_line_break_holder] -->            }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            \/\/ Fetch all non-empty categories<!-- [et_pb_line_break_holder] -->            async function fetchCategories() {<!-- [et_pb_line_break_holder] -->                const response = await fetch(`${API_BASE}\/categories?hide_empty=true&per_page=100`);<!-- [et_pb_line_break_holder] -->                if (!response.ok) throw new Error('Failed to fetch categories');<!-- [et_pb_line_break_holder] -->                return await response.json();<!-- [et_pb_line_break_holder] -->            }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            \/\/ Structure flat category array into parent-child hierarchy<!-- [et_pb_line_break_holder] -->            function buildCategoryHierarchy(categories) {<!-- [et_pb_line_break_holder] -->                \/\/ Filter out default \"Uncategorized\" if necessary (id: 1 is usually default)<!-- [et_pb_line_break_holder] -->                const validCats = categories.filter(c => c.slug !== 'uncategorized');<!-- [et_pb_line_break_holder] -->                <!-- [et_pb_line_break_holder] -->                const parents = validCats.filter(c => c.parent === 0);<!-- [et_pb_line_break_holder] -->                return parents.map(parent => {<!-- [et_pb_line_break_holder] -->                    return {<!-- [et_pb_line_break_holder] -->                        ...parent,<!-- [et_pb_line_break_holder] -->                        children: validCats.filter(c => c.parent === parent.id)<!-- [et_pb_line_break_holder] -->                    };<!-- [et_pb_line_break_holder] -->                });<!-- [et_pb_line_break_holder] -->            }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            \/\/ Generate HTML for Post Grid<!-- [et_pb_line_break_holder] -->            function generatePostsGridHTML(posts) {<!-- [et_pb_line_break_holder] -->                if (!posts || posts.length === 0) return '<pee>No articles available in this collection.<\/pee>';<!-- [et_pb_line_break_holder] -->                <!-- [et_pb_line_break_holder] -->                let html = '<\/p>\n<div class=\"posts-grid\">';<!-- [et_pb_line_break_holder] -->                posts.forEach(post => {<!-- [et_pb_line_break_holder] -->                    const date = new Date(post.date).toLocaleDateString('en-US', {<!-- [et_pb_line_break_holder] -->                        year: 'numeric', month: 'short', day: 'numeric'<!-- [et_pb_line_break_holder] -->                    });<!-- [et_pb_line_break_holder] -->                    <!-- [et_pb_line_break_holder] -->                    html += `<!-- [et_pb_line_break_holder] -->                        <\/p>\n<article class=\"post-card\"><!-- [et_pb_line_break_holder] -->                            <\/p>\n<h3 class=\"post-card-title\"><!-- [et_pb_line_break_holder] -->                                <a href=\"${post.link}\" target=\"_blank\" rel=\"noopener noreferrer\"><!-- [et_pb_line_break_holder] -->                                    ${post.title.rendered}<!-- [et_pb_line_break_holder] -->                                <\/a><!-- [et_pb_line_break_holder] -->                            <\/h3>\n<p><!-- [et_pb_line_break_holder] -->                            <\/p>\n<div class=\"post-card-meta\"><!-- [et_pb_line_break_holder] -->                                <span>Published: ${date}<\/span><!-- [et_pb_line_break_holder] -->                            <\/div>\n<p><!-- [et_pb_line_break_holder] -->                        <\/article>\n<p><!-- [et_pb_line_break_holder] -->                    `;<!-- [et_pb_line_break_holder] -->                });<!-- [et_pb_line_break_holder] -->                html += '<\/div>\n<p>';<!-- [et_pb_line_break_holder] -->                return html;<!-- [et_pb_line_break_holder] -->            }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            \/\/ Render right sidebar navigation<!-- [et_pb_line_break_holder] -->            function renderSidebar(hierarchy) {<!-- [et_pb_line_break_holder] -->                if (hierarchy.length === 0) {<!-- [et_pb_line_break_holder] -->                    sidebarNavList.innerHTML = '<\/p>\n<li>No collections found.<\/li>\n<p>';<!-- [et_pb_line_break_holder] -->                    return;<!-- [et_pb_line_break_holder] -->                }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->                let navHTML = '';<!-- [et_pb_line_break_holder] -->                hierarchy.forEach(parent => {<!-- [et_pb_line_break_holder] -->                    const parentId = `cat-section-${parent.id}`;<!-- [et_pb_line_break_holder] -->                    navHTML += `<!-- [et_pb_line_break_holder] -->                        <\/p>\n<li class=\"nav-level-1\"><!-- [et_pb_line_break_holder] -->                            <a href=\"#${parentId}\">${parent.name}<\/a><!-- [et_pb_line_break_holder] -->                            ${parent.children.length > 0 ? `\n<ul class=\"nav-level-2\"><!-- [et_pb_line_break_holder] -->                                ${parent.children.map(child => `<!-- [et_pb_line_break_holder] -->                                    <\/p>\n<li><a href=\"#cat-section-${child.id}\">${child.name}<\/a><\/li>\n<p><!-- [et_pb_line_break_holder] -->                                `).join('')}<!-- [et_pb_line_break_holder] -->                            <\/ul>\n<p>` : ''}<!-- [et_pb_line_break_holder] -->                        <\/li>\n<p><!-- [et_pb_line_break_holder] -->                    `;<!-- [et_pb_line_break_holder] -->                });<!-- [et_pb_line_break_holder] -->                sidebarNavList.innerHTML = navHTML;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->                \/\/ Implement smooth scroll for sidebar links<!-- [et_pb_line_break_holder] -->                document.querySelectorAll('.hub-sidebar-nav a').forEach(anchor => {<!-- [et_pb_line_break_holder] -->                    anchor.addEventListener('click', function (e) {<!-- [et_pb_line_break_holder] -->                        e.preventDefault();<!-- [et_pb_line_break_holder] -->                        const targetId = this.getAttribute('href').substring(1);<!-- [et_pb_line_break_holder] -->                        const targetElement = document.getElementById(targetId);<!-- [et_pb_line_break_holder] -->                        if (targetElement) {<!-- [et_pb_line_break_holder] -->                            window.scrollTo({<!-- [et_pb_line_break_holder] -->                                top: targetElement.offsetTop - 60, \/\/ Offset for potential sticky headers<!-- [et_pb_line_break_holder] -->                                behavior: 'smooth'<!-- [et_pb_line_break_holder] -->                            });<!-- [et_pb_line_break_holder] -->                        }<!-- [et_pb_line_break_holder] -->                    });<!-- [et_pb_line_break_holder] -->                });<!-- [et_pb_line_break_holder] -->            }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            \/\/ Render main content areas and fetch posts per category<!-- [et_pb_line_break_holder] -->            async function renderMainContent(hierarchy) {<!-- [et_pb_line_break_holder] -->                categoriesContainer.innerHTML = ''; <!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->                for (const parent of hierarchy) {<!-- [et_pb_line_break_holder] -->                    \/\/ Render Parent Section container<!-- [et_pb_line_break_holder] -->                    const sectionHTML = document.createElement('section');<!-- [et_pb_line_break_holder] -->                    sectionHTML.className = 'category-section';<!-- [et_pb_line_break_holder] -->                    sectionHTML.id = `cat-section-${parent.id}`;<!-- [et_pb_line_break_holder] -->                    <!-- [et_pb_line_break_holder] -->                    sectionHTML.innerHTML = `<!-- [et_pb_line_break_holder] -->                        <\/p>\n<h2 class=\"hub-subtitle\">${parent.name}<\/h2>\n<p><!-- [et_pb_line_break_holder] -->                        <\/p>\n<div id=\"posts-container-${parent.id}\"><!-- [et_pb_line_break_holder] -->                            <\/p>\n<div class=\"loader-container\"><!-- [et_pb_line_break_holder] -->                                <\/p>\n<div class=\"spinner\"><\/div>\n<p><!-- [et_pb_line_break_holder] -->                            <\/div>\n<p><!-- [et_pb_line_break_holder] -->                        <\/div>\n<p><!-- [et_pb_line_break_holder] -->                    `;<!-- [et_pb_line_break_holder] -->                    categoriesContainer.appendChild(sectionHTML);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->                    \/\/ Fetch Parent Posts<!-- [et_pb_line_break_holder] -->                    await injectCategoryPosts(parent.id, parent.link, `posts-container-${parent.id}`);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->                    \/\/ Render Child Sections<!-- [et_pb_line_break_holder] -->                    if (parent.children.length > 0) {<!-- [et_pb_line_break_holder] -->                        for (const child of parent.children) {<!-- [et_pb_line_break_holder] -->                            const childSection = document.createElement('div');<!-- [et_pb_line_break_holder] -->                            childSection.style.marginTop = '40px';<!-- [et_pb_line_break_holder] -->                            childSection.id = `cat-section-${child.id}`;<!-- [et_pb_line_break_holder] -->                            <!-- [et_pb_line_break_holder] -->                            childSection.innerHTML = `<!-- [et_pb_line_break_holder] -->                                <\/p>\n<h3 class=\"hub-subtitle\" style=\"font-size: 1.2rem;\">${child.name}<\/h3>\n<p><!-- [et_pb_line_break_holder] -->                                <span class=\"category-badge\">Product Series: ${parent.name}<\/span><!-- [et_pb_line_break_holder] -->                                <\/p>\n<div id=\"posts-container-${child.id}\"><!-- [et_pb_line_break_holder] -->                                    <\/p>\n<div class=\"loader-container\"><!-- [et_pb_line_break_holder] -->                                        <\/p>\n<div class=\"spinner\"><\/div>\n<p><!-- [et_pb_line_break_holder] -->                                    <\/div>\n<p><!-- [et_pb_line_break_holder] -->                                <\/div>\n<p><!-- [et_pb_line_break_holder] -->                            `;<!-- [et_pb_line_break_holder] -->                            sectionHTML.appendChild(childSection);<!-- [et_pb_line_break_holder] -->                            <!-- [et_pb_line_break_holder] -->                            \/\/ Fetch Child Posts<!-- [et_pb_line_break_holder] -->                            await injectCategoryPosts(child.id, child.link, `posts-container-${child.id}`);<!-- [et_pb_line_break_holder] -->                        }<!-- [et_pb_line_break_holder] -->                    }<!-- [et_pb_line_break_holder] -->                }<!-- [et_pb_line_break_holder] -->            }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            \/\/ Fetch and inject posts for a specific category ID<!-- [et_pb_line_break_holder] -->            async function injectCategoryPosts(categoryId, categoryLink, containerId) {<!-- [et_pb_line_break_holder] -->                const container = document.getElementById(containerId);<!-- [et_pb_line_break_holder] -->                try {<!-- [et_pb_line_break_holder] -->                    \/\/ Fetch 7 to check if there are more than 6<!-- [et_pb_line_break_holder] -->                    const response = await fetch(`${API_BASE}\/posts?categories=${categoryId}&per_page=7`);<!-- [et_pb_line_break_holder] -->                    if (!response.ok) throw new Error('Fetch failed');<!-- [et_pb_line_break_holder] -->                    const posts = await response.json();<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->                    if (posts.length === 0) {<!-- [et_pb_line_break_holder] -->                        container.innerHTML = '<pee>No articles yet.<\/pee>';<!-- [et_pb_line_break_holder] -->                        return;<!-- [et_pb_line_break_holder] -->                    }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->                    const displayPosts = posts.slice(0, 6);<!-- [et_pb_line_break_holder] -->                    const hasMore = posts.length > 6;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->                    let html = generatePostsGridHTML(displayPosts);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->                    \/\/ Add \"View More\" button if threshold exceeded<!-- [et_pb_line_break_holder] -->                    if (hasMore) {<!-- [et_pb_line_break_holder] -->                        html += `<!-- [et_pb_line_break_holder] -->                            <\/p>\n<div style=\"text-align: center; margin-top: 15px;\"><!-- [et_pb_line_break_holder] -->                                <a href=\"${categoryLink}\" target=\"_blank\" class=\"btn-view-more\"><!-- [et_pb_line_break_holder] -->                                    View All Articles in this Collection<!-- [et_pb_line_break_holder] -->                                <\/a><!-- [et_pb_line_break_holder] -->                            <\/div>\n<p><!-- [et_pb_line_break_holder] -->                        `;<!-- [et_pb_line_break_holder] -->                    }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->                    container.innerHTML = html;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->                } catch (error) {<!-- [et_pb_line_break_holder] -->                    console.error(`Error loading posts for category ${categoryId}:`, error);<!-- [et_pb_line_break_holder] -->                    container.innerHTML = '<pee>Failed to load articles.<\/pee>';<!-- [et_pb_line_break_holder] -->                }<!-- [et_pb_line_break_holder] -->            }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            \/\/ Bootstrap<!-- [et_pb_line_break_holder] -->            initApp();<!-- [et_pb_line_break_holder] -->        });<!-- [et_pb_line_break_holder] -->    <\/script><!-- [et_pb_line_break_holder] --><\/div>\n<p>[\/et_pb_fullwidth_code][\/et_pb_section]<\/p>","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_et_pb_use_builder":"on","_et_pb_old_content":"","_et_gb_content_width":"","footnotes":""},"class_list":["post-670","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/onestepblowmachine.com\/ru\/wp-json\/wp\/v2\/pages\/670","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/onestepblowmachine.com\/ru\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/onestepblowmachine.com\/ru\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/onestepblowmachine.com\/ru\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/onestepblowmachine.com\/ru\/wp-json\/wp\/v2\/comments?post=670"}],"version-history":[{"count":3,"href":"https:\/\/onestepblowmachine.com\/ru\/wp-json\/wp\/v2\/pages\/670\/revisions"}],"predecessor-version":[{"id":673,"href":"https:\/\/onestepblowmachine.com\/ru\/wp-json\/wp\/v2\/pages\/670\/revisions\/673"}],"wp:attachment":[{"href":"https:\/\/onestepblowmachine.com\/ru\/wp-json\/wp\/v2\/media?parent=670"}],"curies":[{"name":"WP","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}