{"id":664,"date":"2026-01-03T16:26:54","date_gmt":"2026-01-03T22:26:54","guid":{"rendered":"https:\/\/project.arhaero.ru\/?page_id=664"},"modified":"2026-02-03T11:05:36","modified_gmt":"2026-02-03T17:05:36","slug":"%d1%82%d0%b0%d0%b1%d0%bb%d0%be-%d1%80%d0%b5%d0%b9%d1%81%d0%be%d0%b2","status":"publish","type":"page","link":"https:\/\/project.arhaero.ru\/?page_id=664","title":{"rendered":"\u0422\u0430\u0431\u043b\u043e \u0440\u0435\u0439\u0441\u043e\u0432"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"664\" class=\"elementor elementor-664\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-d8a6425 e-flex e-con-boxed e-con e-parent\" data-id=\"d8a6425\" data-element_type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-342a157 elementor-widget elementor-widget-html\" data-id=\"342a157\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<div id=\"unique-flight-widget\">\r\n    \r\n<style>\r\n    \/* ========================================= *\/\r\n    \/* 1. \u0413\u041b\u041e\u0411\u0410\u041b\u042c\u041d\u042b\u0419 \u0421\u0411\u0420\u041e\u0421 \u0418 \u041a\u041e\u041d\u0422\u0415\u0419\u041d\u0415\u0420 *\/\r\n    \/* ========================================= *\/\r\n    #unique-flight-widget {\r\n        font-family: Arial, Helvetica, sans-serif;\r\n        width: 98%; \/* \u0427\u0443\u0442\u044c \u0448\u0438\u0440\u0435 \u043f\u043e \u043a\u0440\u0430\u044f\u043c *\/\r\n        max-width: 1600px !important; \/* \u0423\u0412\u0415\u041b\u0418\u0427\u0415\u041d\u041e \u0441 1400 \u0434\u043e 1600 *\/\r\n        margin: 0 auto 0 auto !important; \r\n        padding: 0 !important;\r\n        display: block;\r\n    }\r\n\r\n    #unique-flight-widget * {\r\n        box-sizing: border-box;\r\n        outline: none;\r\n    }\r\n\r\n    \/* ========================================= *\/\r\n    \/* 2. \u041a\u041d\u041e\u041f\u041a\u0418 (\u0412\u041a\u041b\u0410\u0414\u041a\u0418) - \u041e\u0412\u0410\u041b\u042c\u041d\u042b\u0415 \u041f\u0418\u041b\u042e\u041b\u0418 *\/\r\n    \/* ========================================= *\/\r\n    #unique-flight-widget .type-buttons {\r\n        display: flex;\r\n        align-items: center;\r\n        justify-content: center;\r\n        gap: 20px;\r\n        margin-bottom: 25px;\r\n        flex-wrap: wrap; \r\n    }\r\n\r\n    #unique-flight-widget .type-button {\r\n        border: none;\r\n        cursor: pointer;\r\n        font-family: Arial, Helvetica, sans-serif;\r\n        line-height: 1;\r\n        color: #ffffff;\r\n        font-weight: 700;\r\n        font-size: 20px; \r\n        padding: 12px 35px;\r\n        background: #14234D; \r\n        border-radius: 50px; \r\n        box-shadow: 0 4px 10px rgba(0,0,0,0.15);\r\n        transition: all 0.3s ease;\r\n        display: flex;\r\n        align-items: center;\r\n        gap: 12px;\r\n    }\r\n\r\n    #unique-flight-widget .type-button img {\r\n        height: 24px;\r\n        width: auto;\r\n        display: block;\r\n    }\r\n\r\n    #unique-flight-widget .type-button:hover {\r\n        background: #14234D;\r\n        transform: translateY(-2px);\r\n    }\r\n\r\n    #unique-flight-widget .type-button.active {\r\n        background: #14234D; \r\n        font-weight: 900;\r\n        box-shadow: 0 6px 15px rgba(0,0,0,0.25);\r\n        transform: translateY(-2px);\r\n    }\r\n\r\n    \/* ========================================= *\/\r\n    \/* 3. \u041e\u0421\u041d\u041e\u0412\u041d\u042b\u0415 \u0411\u041b\u041e\u041a\u0418 \u0414\u041d\u0415\u0419 *\/\r\n    \/* ========================================= *\/\r\n    #unique-flight-widget .days-container {\r\n        display: flex;\r\n        flex-direction: column;\r\n        gap: 20px; \r\n        width: 100%;\r\n    }\r\n\r\n    #unique-flight-widget .day-board {\r\n        background: #FFFFFF;\r\n        border-radius: 20px;\r\n        overflow: hidden;\r\n        display: flex;\r\n        flex-direction: column;\r\n        box-shadow: 0 15px 40px rgba(0,0,0,0.1);\r\n    }\r\n\r\n    #unique-flight-widget .day-header {\r\n        background: #FFFFFF;\r\n        padding: 15px 20px; \r\n        font-size: 20px; \r\n        font-weight: 900;\r\n        color: #000000;\r\n        text-transform: uppercase;\r\n        text-align: center;\r\n        border-bottom: 1px solid #e0e0e0;\r\n        margin: 0;\r\n    }\r\n\r\n    #unique-flight-widget .flight-board {\r\n        background: #FFFFFF;\r\n        padding: 15px;\r\n        display: flex;\r\n        flex-direction: column;\r\n    }\r\n    \r\n    #unique-flight-widget .table-container {\r\n        display: flex;\r\n        flex-direction: column;\r\n        width: 100%;\r\n        gap: 10px; \r\n    }\r\n\r\n    \/* ========================================= *\/\r\n    \/* 4. \u0421\u0415\u0422\u041a\u0410 \u0414\u041b\u042f \u041a\u041e\u041c\u041f\u042c\u042e\u0422\u0415\u0420\u0410 (PC) *\/\r\n    \/* ========================================= *\/\r\n    \r\n    \/* \u0418\u0417\u041c\u0415\u041d\u0415\u041d\u041e: \u041f\u0435\u0440\u0435\u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043a\u043e\u043b\u043e\u043d\u043e\u043a *\/\r\n    #unique-flight-widget .pc-header-row {\r\n        display: grid !important;\r\n        \/* \u0411\u044b\u043b\u043e: 0.8fr 0.8fr 1fr 1fr 1fr 1.8fr 2.2fr 0.8fr *\/\r\n        \/* \u0421\u0442\u0430\u043b\u043e: \u0411\u043e\u043b\u044c\u0448\u0435 \u043c\u0435\u0441\u0442\u0430 3-\u0439 \u0438 4-\u0439 \u043a\u043e\u043b\u043e\u043d\u043a\u0435 (\u0410\/\u041a \u0438 \u0420\u0435\u0439\u0441), \u043c\u0435\u043d\u044c\u0448\u0435 \u0421\u0442\u0430\u0442\u0443\u0441\u0443 *\/\r\n        grid-template-columns: 0.8fr 0.8fr 1.2fr 1.4fr 1.1fr 1.8fr 1.8fr 0.8fr; \r\n        gap: 5px; \/* \u0414\u043e\u0431\u0430\u0432\u0438\u043b \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0437\u0430\u0437\u043e\u0440 *\/\r\n        align-items: center;\r\n        text-align: center;\r\n        width: 100%;\r\n        margin-bottom: 5px; \r\n        padding: 0 10px;\r\n    }\r\n\r\n    #unique-flight-widget .pc-header-row div {\r\n        font-size: 16px; \r\n        font-weight: 700 !important;\r\n        color: #000000;\r\n        text-transform: none;\r\n        white-space: nowrap;\r\n        overflow: hidden;\r\n        text-overflow: ellipsis;\r\n    }\r\n\r\n    #unique-flight-widget .flight-row-wrapper {\r\n        background: #F1F1F1; \r\n        border-radius: 15px;\r\n        overflow: hidden;\r\n        transition: background 0.2s ease;\r\n    }\r\n\r\n    #unique-flight-widget .flight-row-wrapper.completed {\r\n        background: #F1F1F1;\r\n        opacity: 0.6;\r\n    }\r\n\r\n    \/* \u0418\u0417\u041c\u0415\u041d\u0415\u041d\u041e: \u0422\u0435 \u0436\u0435 \u043f\u0440\u043e\u043f\u043e\u0440\u0446\u0438\u0438 \u043a\u043e\u043b\u043e\u043d\u043e\u043a \u0434\u043b\u044f \u043a\u043e\u043d\u0442\u0435\u043d\u0442\u0430 *\/\r\n    #unique-flight-widget .pc-row-content {\r\n        display: grid !important;\r\n        grid-template-columns: 0.8fr 0.8fr 1.2fr 1.4fr 1.1fr 1.8fr 1.8fr 0.8fr;\r\n        min-height: 60px;\r\n        align-items: center;\r\n        text-align: center;\r\n        padding: 0 5px;\r\n    }\r\n\r\n    #unique-flight-widget .pc-row-content > div {\r\n        \/* \u0418\u0417\u041c\u0415\u041d\u0415\u041d\u041e: \u0420\u0430\u0437\u043c\u0435\u0440 \u0448\u0440\u0438\u0444\u0442\u0430 \u0443\u043c\u0435\u043d\u044c\u0448\u0435\u043d \u0441 19px \u0434\u043e 17px \u0434\u043b\u044f \u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0441\u0442\u0438 *\/\r\n        font-size: 17px; \r\n        font-weight: 700;\r\n        color: #000000;\r\n        padding: 5px; \r\n        white-space: nowrap;\r\n        overflow: hidden;\r\n        text-overflow: ellipsis;\r\n        height: 100%;\r\n        display: flex;\r\n        align-items: center;\r\n        justify-content: center;\r\n    }\r\n\r\n    #unique-flight-widget .status-cell-pc {\r\n        white-space: normal !important; \r\n        line-height: 1.1;\r\n        text-align: center;\r\n        font-size: 15px !important; \/* \u0427\u0443\u0442\u044c \u043c\u0435\u043d\u044c\u0448\u0435 \u0434\u043b\u044f \u0434\u043b\u0438\u043d\u043d\u044b\u0445 \u0441\u0442\u0430\u0442\u0443\u0441\u043e\u0432 *\/\r\n        font-weight: 700 !important;\r\n    }\r\n\r\n    #unique-flight-widget .mob-row-content {\r\n        display: none !important;\r\n    }\r\n\r\n    \/* ========================================= *\/\r\n    \/* 5. \u041c\u041e\u0411\u0418\u041b\u042c\u041d\u0410\u042f \u0412\u0415\u0420\u0421\u0418\u042f (\u0414\u041e 900px) *\/\r\n    \/* ========================================= *\/\r\n    \r\n    @media (max-width: 900px) {\r\n        \r\n        #unique-flight-widget .pc-header-row,\r\n        #unique-flight-widget .pc-row-content {\r\n            display: none !important;\r\n        }\r\n\r\n        #unique-flight-widget .mob-row-content {\r\n            display: block !important;\r\n            width: 100%;\r\n        }\r\n\r\n        #unique-flight-widget .mob-main-line {\r\n            display: grid;\r\n            grid-template-columns: 50px 1fr 105px 40px; \r\n            align-items: center;\r\n            padding: 10px 5px;\r\n            cursor: pointer;\r\n            min-height: 60px;\r\n        }\r\n\r\n        #unique-flight-widget .mob-time {\r\n            font-size: 14px; \r\n            font-weight: 900;\r\n            color: #000;\r\n            text-align: center;\r\n            padding-right: 5px;\r\n        }\r\n\r\n        #unique-flight-widget .mob-info-stack {\r\n            display: flex;\r\n            flex-direction: column;\r\n            justify-content: center;\r\n            padding-left: 5px;\r\n            padding-right: 5px;\r\n            text-align: left;\r\n            overflow: hidden;\r\n        }\r\n\r\n        #unique-flight-widget .mob-route {\r\n            font-size: 11px;\r\n            font-weight: 900;\r\n            text-transform: uppercase;\r\n            color: #333;\r\n            margin-bottom: 2px;\r\n            line-height: 1.1;\r\n            white-space: nowrap;\r\n            overflow: hidden;\r\n            text-overflow: ellipsis;\r\n        }\r\n        \r\n        #unique-flight-widget .mob-flight {\r\n            font-size: 11px;\r\n            font-weight: 700;\r\n            color: #000;\r\n        }\r\n        \r\n        #unique-flight-widget .mob-airline {\r\n            font-size: 10px;\r\n            color: #555;\r\n            white-space: nowrap;\r\n            overflow: hidden;\r\n            text-overflow: ellipsis;\r\n        }\r\n\r\n        #unique-flight-widget .mob-status {\r\n            font-size: 11px;\r\n            text-align: center;\r\n            line-height: 1.1;\r\n            padding: 0 4px;\r\n            display: flex;\r\n            align-items: center;\r\n            justify-content: center;\r\n            height: 100%;\r\n            font-weight: 900;\r\n        }\r\n\r\n        #unique-flight-widget .mob-arrow-box {\r\n            display: flex;\r\n            align-items: center;\r\n            justify-content: center;\r\n            height: 100%;\r\n        }\r\n\r\n        #unique-flight-widget .mob-chevron {\r\n            width: 10px;\r\n            height: 10px;\r\n            border-top: 3px solid #555;\r\n            border-right: 3px solid #555;\r\n            transform: rotate(45deg);\r\n            transition: transform 0.3s ease;\r\n            border-radius: 2px;\r\n            margin-right: 5px;\r\n        }\r\n\r\n        #unique-flight-widget .flight-row-wrapper.expanded .mob-chevron {\r\n            transform: rotate(135deg); \r\n            border-color: #000;\r\n        }\r\n\r\n        #unique-flight-widget .mob-expanded-details {\r\n            display: none;\r\n            background: rgba(0,0,0,0.05);\r\n            padding: 0; \r\n            border-top: 1px dashed #999;\r\n        }\r\n\r\n        #unique-flight-widget .flight-row-wrapper.expanded .mob-expanded-details {\r\n            display: block;\r\n            animation: fadeIn 0.3s ease;\r\n        }\r\n        \r\n        @keyframes fadeIn {\r\n            from { opacity: 0; }\r\n            to { opacity: 1; }\r\n        }\r\n\r\n        #unique-flight-widget .mob-detail-row {\r\n            display: flex;\r\n            justify-content: space-between;\r\n            padding: 8px 15px; \r\n            font-size: 13px;\r\n            color: #333;\r\n            border-bottom: 1px solid rgba(0,0,0,0.05); \r\n        }\r\n        \r\n        #unique-flight-widget .mob-detail-row:last-child {\r\n            border-bottom: none !important;\r\n        }\r\n        \r\n        #unique-flight-widget .day-header { font-size: 16px; padding: 10px; }\r\n        \r\n        \/* \u041c\u043e\u0431\u0438\u043b\u044c\u043d\u044b\u0435 \u043a\u043d\u043e\u043f\u043a\u0438 *\/\r\n        #unique-flight-widget .type-button { font-size: 16px; padding: 10px 20px; }\r\n        #unique-flight-widget .type-button img { height: 18px; }\r\n        #unique-flight-widget .flight-board { padding: 10px; } \r\n    }\r\n\r\n    \/* \u0426\u0412\u0415\u0422\u0410 \u0421\u0422\u0410\u0422\u0423\u0421\u041e\u0412 *\/\r\n    #unique-flight-widget .status-finished { color: #2e7d32 !important; } \r\n    #unique-flight-widget .status-delayed { color: #d32f2f !important; } \r\n    #unique-flight-widget .status-process { color: #1976d2 !important; }\r\n    #unique-flight-widget .status-on-time { color: #000000 !important; }\r\n    #unique-flight-widget .status-changed { color: #d32f2f !important; }\r\n\r\n    #unique-flight-widget .no-flights {\r\n        text-align: center; color: #000; font-weight: 700; padding: 20px; font-size: 16px;\r\n    }\r\n    \r\n    #unique-flight-widget .completed-separator {\r\n        height: 2px;\r\n        margin: 5px 0; \r\n        border-bottom: 2px dashed rgba(0,0,0,0.2);\r\n        width: 100%;\r\n        flex-shrink: 0;\r\n    }\r\n<\/style>\r\n\r\n    <!-- \u041a\u041d\u041e\u041f\u041a\u0418 (\u041f\u0418\u041b\u042e\u041b\u0418 \u0421 \u0418\u041a\u041e\u041d\u041a\u0410\u041c\u0418) -->\r\n    <div class=\"type-buttons\">\r\n        <button class=\"type-button active\" onclick=\"window.uniqueFlightWidget?.showDepartures()\">\r\n            <img decoding=\"async\" src=\"https:\/\/project.arhaero.ru\/wp-content\/uploads\/2026\/02\/departures-icon.png\" alt=\"icon\">\r\n            \u0412\u044b\u043b\u0435\u0442\r\n        <\/button>\r\n        <button class=\"type-button\" onclick=\"window.uniqueFlightWidget?.showArrivals()\">\r\n            <img decoding=\"async\" src=\"https:\/\/project.arhaero.ru\/wp-content\/uploads\/2026\/02\/arrivals-icon.png\" alt=\"icon\">\r\n            \u041f\u0440\u0438\u043b\u0435\u0442\r\n        <\/button>\r\n    <\/div>\r\n    \r\n    <!-- \u041a\u041e\u041d\u0422\u0415\u0419\u041d\u0415\u0420 \u0414\u041d\u0415\u0419 -->\r\n    <div class=\"days-container\" id=\"daysContainer\">\r\n        <!-- JS \u0441\u044e\u0434\u0430 \u0432\u0441\u0451 \u0432\u0441\u0442\u0430\u0432\u0438\u0442 -->\r\n    <\/div>\r\n\r\n    <script>\r\n        window.uniqueFlightWidget = (function() { \r\n            let currentType = localStorage.getItem('flight_widget_type') || 'departures';\r\n            let flightsData = { arrivals: [], departures: [] };\r\n            \r\n            const filePaths = {\r\n                arrivals: '\/wp-content\/uploads\/flights\/online_arrivals.csv',\r\n                departures: '\/wp-content\/uploads\/flights\/online_departures.csv'\r\n            };\r\n            \r\n            function getDates() {\r\n                const today = new Date();\r\n                const yesterday = new Date(today);\r\n                const tomorrow = new Date(today);\r\n                \r\n                yesterday.setDate(today.getDate() - 1);\r\n                tomorrow.setDate(today.getDate() + 1);\r\n                \r\n                const formatDate = (date) => `${String(date.getDate()).padStart(2,'0')}.${String(date.getMonth()+1).padStart(2,'0')}.${date.getFullYear()}`;\r\n                \r\n                return {\r\n                    today: formatDate(today),\r\n                    tomorrow: formatDate(tomorrow),\r\n                    yesterday: formatDate(yesterday)\r\n                };\r\n            }\r\n            \r\n            function getDayName(dateStr) {\r\n                const [day, month, year] = dateStr.split('.');\r\n                const date = new Date(year, month-1, day);\r\n                const days = ['\u0412\u043e\u0441\u043a\u0440\u0435\u0441\u0435\u043d\u044c\u0435', '\u041f\u043e\u043d\u0435\u0434\u0435\u043b\u044c\u043d\u0438\u043a', '\u0412\u0442\u043e\u0440\u043d\u0438\u043a', '\u0421\u0440\u0435\u0434\u0430', '\u0427\u0435\u0442\u0432\u0435\u0440\u0433', '\u041f\u044f\u0442\u043d\u0438\u0446\u0430', '\u0421\u0443\u0431\u0431\u043e\u0442\u0430'];\r\n                return days[date.getDay()];\r\n            }\r\n            \r\n            async function loadCSV(fileType) {\r\n                try {\r\n                    const filePath = filePaths[fileType];\r\n                    const timestamp = new Date().getTime();\r\n                    const response = await fetch(`${filePath}?t=${timestamp}`);\r\n                    if (!response.ok) return [];\r\n                    const buffer = await response.arrayBuffer();\r\n                    const decoder = new TextDecoder('windows-1251');\r\n                    return parseCSV(decoder.decode(buffer));\r\n                } catch (e) { console.error(e); return []; }\r\n            }\r\n            \r\n            function parseCSV(csvText) {\r\n                const rows = csvText.split('\\n');\r\n                if (rows.length < 2) return [];\r\n                const headers = rows[0].split('|').map(h => h.trim());\r\n                return rows.slice(1).map(row => {\r\n                    if (!row.trim()) return null;\r\n                    const cells = row.split('|');\r\n                    let obj = {};\r\n                    headers.forEach((h, i) => obj[h] = cells[i]?.trim() || '');\r\n                    return obj;\r\n                }).filter(r => r && r.ST1); \r\n            }\r\n\r\n            function formatTime(t) {\r\n                if (!t || t === '--:--') return '--:--';\r\n                return t.length === 4 ? '0' + t : t;\r\n            }\r\n            \r\n            function timeToMinutes(timeStr) {\r\n                if (!timeStr || timeStr === '--:--') return 0;\r\n                const time = formatTime(timeStr);\r\n                const [hours, minutes] = time.split(':').map(Number);\r\n                return hours * 60 + minutes;\r\n            }\r\n            \r\n            function getStatusColorClass(text, type) {\r\n                const lowerText = (text || '').toLowerCase().replace(\/\u0451\/g, '\u0435');\r\n                \r\n                if (lowerText.includes('\u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435') || lowerText.includes('\u043f\u0435\u0440\u0435\u043d\u043e\u0441')) {\r\n                    return 'status-changed';\r\n                }\r\n\r\n                if (lowerText.includes('\u043e\u0442\u043c\u0435\u043d\u0435\u043d') || lowerText.includes('\u0437\u0430\u0434\u0435\u0440\u0436\u0430\u043d') || lowerText.includes('\u0437\u0430\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f') || lowerText.includes('\u043e\u0442\u043b\u043e\u0436\u0435\u043d')) {\r\n                    return 'status-delayed';\r\n                }\r\n                \r\n                if (lowerText.includes('\u0432\u044b\u043b\u0435\u0442\u0435\u043b') || lowerText.includes('\u043e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d')) {\r\n                    if (type === 'departures') {\r\n                        return 'status-finished';\r\n                    } else {\r\n                        return 'status-process';\r\n                    }\r\n                }\r\n\r\n                if (lowerText.includes('\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u043b \u043f\u043e\u0441\u0430\u0434\u043a\u0443') || lowerText.includes('\u043f\u0440\u0438\u0431\u044b\u043b') || lowerText.includes('\u043f\u0440\u0438\u0437\u0435\u043c\u043b\u0438\u043b\u0441\u044f')) {\r\n                    return 'status-finished';\r\n                }\r\n\r\n                if (lowerText.includes('\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044f') || lowerText.includes('\u043f\u043e\u0441\u0430\u0434\u043a\u0430') || \r\n                    lowerText.includes('\u043e\u0436\u0438\u0434\u0430\u0435\u0442\u0441\u044f') || lowerText.includes('\u0440\u0430\u0441\u0447\u0435\u0442\u043d\u043e\u0435') || \r\n                    lowerText.includes('\u0432\u0437\u043b\u0435\u0442') || lowerText.includes('\u0440\u0443\u043b\u0435\u043d\u0438\u0435')) {\r\n                    return 'status-process';\r\n                }\r\n\r\n                return 'status-on-time';\r\n            }\r\n            \r\n            function formatStatusText(remark, type) {\r\n                const statusText = remark || '\u041f\u043e \u0440\u0430\u0441\u043f\u0438\u0441\u0430\u043d\u0438\u044e';\r\n                const statusClass = getStatusColorClass(statusText, type);\r\n                const isCompleted = (statusClass === 'status-finished');\r\n                return { text: statusText, class: statusClass, completed: isCompleted };\r\n            }\r\n            \r\n            function prepareDayData(flights, dateStr) {\r\n                const dayFlights = flights.filter(f => f.SD1 === dateStr);\r\n                if (dayFlights.length === 0) return { upcoming: [], completed: [] };\r\n                \r\n                const completed = [];\r\n                const upcoming = [];\r\n                dayFlights.forEach(flight => {\r\n                    const status = formatStatusText(flight.REMARK, currentType);\r\n                    const item = { ...flight, status, sortTime: timeToMinutes(flight.ST1) };\r\n                    \r\n                    if (status.completed) {\r\n                        completed.push(item);\r\n                    } else {\r\n                        upcoming.push(item);\r\n                    }\r\n                });\r\n                \r\n                upcoming.sort((a, b) => a.sortTime - b.sortTime);\r\n                completed.sort((a, b) => a.sortTime - b.sortTime);\r\n                \r\n                return { upcoming, completed };\r\n            }\r\n            \r\n            function getHeaderHTML() {\r\n                const col7 = currentType === 'departures' ? '\u041f\u0440\u0438\u0431\u044b\u0442\u0438\u0435' : '\u0412\u044b\u043b\u0435\u0442';\r\n                const col6 = currentType === 'departures' ? '\u041d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435' : '\u041e\u0442\u043a\u0443\u0434\u0430';\r\n                return `\r\n                    <div class=\"pc-header-row\">\r\n                        <div>\u041f\u043e \u0440\u0430\u0441\u043f\u0438\u0441\u0430\u043d\u0438\u044e<\/div>\r\n                        <div>\u0424\u0430\u043a\u0442<\/div>\r\n                        <div>\u0410\/\u041a<\/div>\r\n                        <div>\u0420\u0435\u0439\u0441<\/div>\r\n                        <div>\u0422\u0438\u043f \u0412\u0421<\/div>\r\n                        <div>${col6}<\/div>\r\n                        <div>\u0421\u0442\u0430\u0442\u0443\u0441<\/div>\r\n                        <div>${col7}<\/div>\r\n                    <\/div>`;\r\n            }\r\n            \r\n            function renderDayTable(dayFlights, dateStr, dayName, dayTitle, expandedIds) {\r\n                const { upcoming, completed } = dayFlights;\r\n                if (upcoming.length === 0 && completed.length === 0) {\r\n                    return `\r\n                        <div class=\"day-board\">\r\n                            <h3 class=\"day-header\">${dayTitle} (${dayName}) ${dateStr}<\/h3>\r\n                            <div class=\"flight-board\"><div class=\"no-flights\">\u0420\u0435\u0439\u0441\u043e\u0432 \u043d\u0430 \u044d\u0442\u043e\u0442 \u0434\u0435\u043d\u044c \u043d\u0435\u0442<\/div><\/div>\r\n                        <\/div>`;\r\n                }\r\n                let html = getHeaderHTML();\r\n                \r\n                upcoming.forEach(f => { html += createFlightRowHTML(f, false, expandedIds); });\r\n                \r\n                if (upcoming.length > 0 && completed.length > 0) html += '<div class=\"completed-separator\"><\/div>';\r\n                \r\n                completed.forEach(f => { html += createFlightRowHTML(f, true, expandedIds); });\r\n                \r\n                return `\r\n                    <div class=\"day-board\">\r\n                        <h3 class=\"day-header\">${dayTitle} (${dayName}) ${dateStr}<\/h3>\r\n                        <div class=\"flight-board\">\r\n                            <div class=\"table-container\">${html}<\/div>\r\n                        <\/div>\r\n                    <\/div>`;\r\n            }\r\n            \r\n            function createFlightRowHTML(f, isCompleted, expandedIds) {\r\n                const st = f.status;\r\n                const timeDisplay = formatTime(f.ST1);\r\n                const actualTimeDisplay = formatTime(f.AT1) || '--:--';\r\n                const extraTimeDisplay = formatTime(f.AT2) || '--:--';\r\n\r\n                let mobileExtraLabel = '';\r\n                let factTimeLabel = '';\r\n\r\n                if (currentType === 'departures') {\r\n                    mobileExtraLabel = '\u041f\u0440\u0438\u0431\u044b\u043b \u0432 ' + f.ROUTE + ':';\r\n                    factTimeLabel = '\u0424\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u0432\u044b\u043b\u0435\u0442\u0430:';\r\n                } else {\r\n                    mobileExtraLabel = '\u0412\u044b\u043b\u0435\u0442\u0435\u043b \u0438\u0437 ' + f.ROUTE + ':';\r\n                    factTimeLabel = '\u0424\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u043f\u0440\u0438\u043b\u0451\u0442\u0430:';\r\n                }\r\n\r\n                const flightId = `${f.FLIGHT}_${f.SD1}_${f.ST1}`;\r\n                const isExpanded = expandedIds.has(flightId) ? 'expanded' : '';\r\n\r\n                return `\r\n                <div class=\"flight-row-wrapper ${isCompleted ? 'completed' : ''} ${isExpanded}\" \r\n                     data-flight-id=\"${flightId}\" \r\n                     onclick=\"this.classList.toggle('expanded')\">\r\n                    \r\n                    <div class=\"pc-row-content\">\r\n                        <div>${timeDisplay}<\/div>\r\n                        <div>${actualTimeDisplay}<\/div>\r\n                        <div>${f.COMPANY}<\/div>\r\n                        <div>${f.FLIGHT}<\/div>\r\n                        <div>${f.CRAFT}<\/div>\r\n                        <div style=\"text-transform:uppercase;\">${f.ROUTE}<\/div>\r\n                        <div class=\"status-cell-pc ${st.class}\">${st.text}<\/div>\r\n                        <div>${extraTimeDisplay}<\/div>\r\n                    <\/div>\r\n\r\n                    <div class=\"mob-row-content\">\r\n                        <div class=\"mob-main-line\">\r\n                            <div class=\"mob-time\">${timeDisplay}<\/div>\r\n                            <div class=\"mob-info-stack\">\r\n                                <div class=\"mob-route\">${f.ROUTE}<\/div>\r\n                                <div class=\"mob-flight\">${f.FLIGHT}<\/div>\r\n                                <div class=\"mob-airline\">${f.COMPANY}<\/div>\r\n                            <\/div>\r\n                            <div class=\"mob-status ${st.class}\">${st.text}<\/div>\r\n                            <div class=\"mob-arrow-box\"><div class=\"mob-chevron\"><\/div><\/div>\r\n                        <\/div>\r\n\r\n                        <div class=\"mob-expanded-details\">\r\n                            <div class=\"mob-detail-row\">\r\n                                <span class=\"mob-detail-label\">\u0410\u0432\u0438\u0430\u043a\u043e\u043c\u043f\u0430\u043d\u0438\u044f:<\/span>\r\n                                <span class=\"mob-detail-value\">${f.COMPANY}<\/span>\r\n                            <\/div>\r\n                            <div class=\"mob-detail-row\">\r\n                                <span class=\"mob-detail-label\">\u0420\u0435\u0439\u0441:<\/span>\r\n                                <span class=\"mob-detail-value\">${f.FLIGHT}<\/span>\r\n                            <\/div>\r\n                            <div class=\"mob-detail-row\">\r\n                                <span class=\"mob-detail-label\">\u0412\u0430\u0448 \u0441\u0430\u043c\u043e\u043b\u0451\u0442:<\/span>\r\n                                <span class=\"mob-detail-value\">${f.CRAFT}<\/span>\r\n                            <\/div>\r\n                            <div class=\"mob-detail-row\">\r\n                                <span class=\"mob-detail-label\">${factTimeLabel}<\/span>\r\n                                <span class=\"mob-detail-value\">${actualTimeDisplay}<\/span>\r\n                            <\/div>\r\n                            <div class=\"mob-detail-row\">\r\n                                <span class=\"mob-detail-label\">${mobileExtraLabel}<\/span>\r\n                                <span class=\"mob-detail-value\">${extraTimeDisplay}<\/span>\r\n                            <\/div>\r\n                        <\/div>\r\n                    <\/div>\r\n                <\/div>\r\n                `;\r\n            }\r\n            \r\n            function getExpandedFlights() {\r\n                const expandedSet = new Set();\r\n                document.querySelectorAll('.flight-row-wrapper.expanded').forEach(el => {\r\n                    if (el.dataset.flightId) {\r\n                        expandedSet.add(el.dataset.flightId);\r\n                    }\r\n                });\r\n                return expandedSet;\r\n            }\r\n            \r\n            function renderAllDays() {\r\n                const expandedIds = getExpandedFlights();\r\n                const dates = getDates();\r\n                const flights = flightsData[currentType];\r\n                if (!flights || flights.length === 0) {\r\n                    document.getElementById('daysContainer').innerHTML = '<div class=\"day-board\"><h3 class=\"day-header\">\u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0434\u0430\u043d\u043d\u044b\u0445...<\/h3><div class=\"flight-board\"><div class=\"no-flights\">\u0414\u0430\u043d\u043d\u044b\u0435 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u044e\u0442\u0441\u044f...<\/div><\/div><\/div>';\r\n                    return;\r\n                }\r\n                let html = '';\r\n                html += renderDayTable(prepareDayData(flights, dates.today), dates.today, getDayName(dates.today), '\u0421\u0415\u0413\u041e\u0414\u041d\u042f', expandedIds);\r\n                html += renderDayTable(prepareDayData(flights, dates.tomorrow), dates.tomorrow, getDayName(dates.tomorrow), '\u0417\u0410\u0412\u0422\u0420\u0410', expandedIds);\r\n                html += renderDayTable(prepareDayData(flights, dates.yesterday), dates.yesterday, getDayName(dates.yesterday), '\u0412\u0427\u0415\u0420\u0410', expandedIds);\r\n                \r\n                document.getElementById('daysContainer').innerHTML = html;\r\n            }\r\n            \r\n            function showDepartures() { currentType = 'departures'; toggleTypeButtons(); renderAllDays(); }\r\n            function showArrivals() { currentType = 'arrivals'; toggleTypeButtons(); renderAllDays(); }\r\n            \r\n            function toggleTypeButtons() {\r\n                localStorage.setItem('flight_widget_type', currentType);\r\n                const buttons = document.querySelectorAll('#unique-flight-widget .type-button');\r\n                buttons.forEach(t => {\r\n                    const isDep = t.textContent.includes('\u0412\u044b\u043b\u0435\u0442');\r\n                    const isActive = (currentType === 'departures' && isDep) || (currentType === 'arrivals' && !isDep);\r\n                    if(isActive) t.classList.add('active'); else t.classList.remove('active');\r\n                });\r\n            }\r\n\r\n            async function init() {\r\n                toggleTypeButtons();\r\n                document.getElementById('daysContainer').innerHTML = '<div class=\"day-board\"><h3 class=\"day-header\">\u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0430...<\/h3><div class=\"flight-board\"><div class=\"no-flights\">\u041f\u043e\u0434\u043e\u0436\u0434\u0438\u0442\u0435...<\/div><\/div><\/div>';\r\n                try {\r\n                    const [dep, arr] = await Promise.all([loadCSV('departures'), loadCSV('arrivals')]);\r\n                    flightsData.departures = dep;\r\n                    flightsData.arrivals = arr;\r\n                    renderAllDays();\r\n                } catch (error) { console.error(error); }\r\n                setInterval(async () => {\r\n                    try {\r\n                        const [dep, arr] = await Promise.all([loadCSV('departures'), loadCSV('arrivals')]);\r\n                        flightsData.departures = dep;\r\n                        flightsData.arrivals = arr;\r\n                        renderAllDays();\r\n                    } catch (e) { } \r\n                }, 30000);\r\n            }\r\n            return { showDepartures, showArrivals, init };\r\n        })();\r\n\r\n        if (document.readyState === 'loading') {\r\n            document.addEventListener('DOMContentLoaded', () => { window.uniqueFlightWidget?.init(); });\r\n        } else {\r\n            window.uniqueFlightWidget?.init();\r\n        }\r\n    <\/script>\r\n<\/div>\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>\u0412\u044b\u043b\u0435\u0442 \u041f\u0440\u0438\u043b\u0435\u0442<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"elementor_header_footer","meta":{"footnotes":""},"class_list":["post-664","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/project.arhaero.ru\/index.php?rest_route=\/wp\/v2\/pages\/664","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/project.arhaero.ru\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/project.arhaero.ru\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/project.arhaero.ru\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/project.arhaero.ru\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=664"}],"version-history":[{"count":130,"href":"https:\/\/project.arhaero.ru\/index.php?rest_route=\/wp\/v2\/pages\/664\/revisions"}],"predecessor-version":[{"id":2541,"href":"https:\/\/project.arhaero.ru\/index.php?rest_route=\/wp\/v2\/pages\/664\/revisions\/2541"}],"wp:attachment":[{"href":"https:\/\/project.arhaero.ru\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=664"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}