<?php
// EZEKEN Group - index.php (фронтенд, PHP 7.4+)
require __DIR__.'/config.php';
@include __DIR__.'/track.php';
@include __DIR__.'/tg.php';

$lang = current_lang();
$page = isset($_GET['p']) ? $_GET['p'] : 'index';
if (!in_array($page, $PAGES, true)) $page = 'index';

// -- банер 3D-конфігуратора COVEX: список сторінок, де показувати --
$C3D_PAGES = array('covex','hangars','stage-roofs','truss');
$show_c3d  = in_array($page, $C3D_PAGES, true);
$c3d_url   = 'covex-3d.php?lang='.$lang;

$common   = jload('common');     $t  = isset($common[$lang]) ? $common[$lang] : (isset($common['pl']) ? $common['pl'] : array());
$pages    = jload('pages_'.$lang);
if (!isset($pages['index'])) {          // файл відсутній або пошкоджений - відкат на PL
    $pages = jload('pages_pl');
    if (!isset($pages['index'])) { $pages = jload('pages_en'); }
}
$pg       = isset($pages[$page]) ? $pages[$page] : (isset($pages['index']) ? $pages['index'] : null);
if ($pg === null) {                     // дані взагалі недоступні
    http_response_code(503);
    echo 'Site content is being updated. Please try again shortly.';
    exit;
}
$settings = jload('settings');
$projects = jload('projects', array());
$faq      = jload('faq', array());
$partners = jload('partners', array());
$posts    = jload('posts', array());

// -- новини: одиночний пост --
$news_post = null;
if ($page === 'news' && isset($_GET['id'])) {
    foreach ($posts as $ps) {
        if (isset($ps['id']) && $ps['id'] === $_GET['id']) { $news_post = $ps; break; }
    }
}
if ($news_post) {
    // SEO-мета поста перекриває мету сторінки
    $pt = isset($news_post['seo_title'][$lang]) && $news_post['seo_title'][$lang] !== '' ? $news_post['seo_title'][$lang] : (isset($news_post['title'][$lang]) ? $news_post['title'][$lang] : '');
    $pm = isset($news_post['seo_description'][$lang]) ? $news_post['seo_description'][$lang] : '';
    $pg = array('title'=>$pt, 'meta'=>$pm, 'hero'=>$pg['hero'], 'sections'=>array());
}

// -- проєктний бриф: обробка форми --
$brief_sent = false; $brief_error = '';
if ($page === 'brief' && isset($_POST['send_brief'])) {
    $hp = isset($_POST['website']) ? trim($_POST['website']) : '';           // honeypot
    $ts = isset($_POST['form_ts']) ? (int)$_POST['form_ts'] : 0;             // мін. 4с на заповнення
    $btype  = isset($_POST['btype']) ? trim($_POST['btype']) : '';
    $bname  = isset($_POST['bname']) ? trim($_POST['bname']) : '';
    $bemail = isset($_POST['bemail']) ? trim($_POST['bemail']) : '';
    if ($hp !== '' || ($ts > 0 && time() - $ts < 4)) {
        $brief_sent = true; // бот: тихо "приймаємо", нічого не зберігаючи
    } elseif ($btype === '' || $bname === '' || !filter_var($bemail, FILTER_VALIDATE_EMAIL)) {
        $brief_error = isset($t['bf_err']) ? $t['bf_err'] : 'Please fill in the required fields.';
    } else {
        $fields = array('btype','bcountry','bcity','bwidth','blength','bheight','bduration',
                        'bwind','bsnow','bother','bdoor','bvehicle','baircraft','bdate',
                        'bconfig','bname','bcompany','bemail','bphone');
        $item = array('id'=>date('ymd-His').'-'.substr(bin2hex(random_bytes(3)),0,6),
                      'ts'=>date('Y-m-d H:i:s'), 'lang'=>$lang);
        foreach ($fields as $f) {
            $v = isset($_POST[$f]) ? trim((string)$_POST[$f]) : '';
            if (function_exists('mb_substr')) $v = mb_substr($v, 0, 500); else $v = substr($v, 0, 500);
            $item[$f] = $v;
        }
        $item['bfiles'] = brief_files_save($item['id']);
        $briefs = jload('briefs', array());
        $briefs[] = $item;
        jsave('briefs', $briefs);
        // сповіщення на пошту (не критично, якщо mail() недоступний)
        $to = isset($settings['email']) ? $settings['email'] : '';
        $mail_ok = null;
        if ($to) {
            $lines = array();
            foreach ($fields as $f) if ($item[$f] !== '') $lines[] = $f.': '.$item[$f];
            foreach ($item['bfiles'] as $bf) $lines[] = 'file: '.$bf['name'].' ('.round($bf['size']/1024).' KB)';
            $body = "New project brief (".$item['id'].")\n".implode("\n", $lines);

            // вкладення: малі файли кладемо в лист, завеликі лишаються лише на сайті,
            // щоб через них не завалилась уся відправка
            $ATT_ONE   = 4 * 1024 * 1024;
            $ATT_TOTAL = 8 * 1024 * 1024;
            $att = array(); $sum = 0; $skip = array();
            foreach ($item['bfiles'] as $bf) {
                $path = DATA.'/brief-files/'.$item['id'].'/'.$bf['file'];
                if (!is_file($path)) continue;
                if ($bf['size'] > $ATT_ONE || $sum + $bf['size'] > $ATT_TOTAL) { $skip[] = $bf['name']; continue; }
                $att[] = array($bf['name'], $path);
                $sum += $bf['size'];
            }
            if ($skip)            $body .= "\n\nЗавеликі для листа, завантажити на сайті:\n - ".implode("\n - ", $skip);
            if ($item['bfiles'])  $body .= "\n\nУсі файли заявки: https://ezeken.eu/brief-files.php";

            $subj = 'EZEKEN - Project Brief '.$item['id'];
            if ($att) {
                $bnd = '=_ez_'.bin2hex(random_bytes(8));
                $hdr = 'From: viko@ezeken.eu'."\r\n".
                       'Reply-To: '.$item['bemail']."\r\n".
                       'MIME-Version: 1.0'."\r\n".
                       'Content-Type: multipart/mixed; boundary="'.$bnd.'"';
                $msg = '--'.$bnd."\r\n".
                       'Content-Type: text/plain; charset=UTF-8'."\r\n".
                       'Content-Transfer-Encoding: 8bit'."\r\n\r\n".$body."\r\n";
                foreach ($att as $a) {
                    $raw = @file_get_contents($a[1]);
                    if ($raw === false) continue;
                    $fn = preg_replace('/[^a-zA-Z0-9._-]+/', '_', $a[0]);
                    $msg .= '--'.$bnd."\r\n".
                            'Content-Type: application/octet-stream; name="'.$fn.'"'."\r\n".
                            'Content-Transfer-Encoding: base64'."\r\n".
                            'Content-Disposition: attachment; filename="'.$fn.'"'."\r\n\r\n".
                            chunk_split(base64_encode($raw))."\r\n";
                    unset($raw);
                }
                $msg .= '--'.$bnd.'--'."\r\n";
                $mail_ok = @mail($to, $subj, $msg, $hdr);
            } else {
                $hdr = 'From: viko@ezeken.eu'."\r\n".
                       'Reply-To: '.$item['bemail']."\r\nContent-Type: text/plain; charset=UTF-8";
                $mail_ok = @mail($to, $subj, $body, $hdr);
            }
        }
        // миттєве сповіщення в Telegram
        if (function_exists('ez_tg_send')) {
            $dim = trim($item['bwidth'].' x '.$item['blength'].' x '.$item['bheight']);
            $L = array('<b>Нова заявка з брифу</b>');
            $L[] = 'Тип: '.ez_tg_esc($item['btype'] !== '' ? $item['btype'] : '-');
            if (trim($item['bcountry'].$item['bcity']) !== '') $L[] = 'Місце: '.ez_tg_esc(trim($item['bcountry'].' '.$item['bcity']));
            if (trim(str_replace('x', '', $dim)) !== '')       $L[] = 'Габарити: '.ez_tg_esc($dim).' м';
            if ($item['bduration'] !== '')                     $L[] = 'Термін: '.ez_tg_esc($item['bduration']);
            $L[] = 'Контакт: '.ez_tg_esc($item['bname'].($item['bcompany'] !== '' ? ', '.$item['bcompany'] : ''));
            $L[] = ez_tg_esc($item['bemail'].($item['bphone'] !== '' ? ' / '.$item['bphone'] : ''));
            if ($item['bfiles']) $L[] = 'Файлів: '.count($item['bfiles']);
            if ($mail_ok === false) $L[] = '<b>УВАГА: лист на пошту НЕ пішов</b>';
            elseif ($mail_ok === true) $L[] = 'Лист на '.ez_tg_esc($to).': доставлено';
            $L[] = 'Мова сайту: '.ez_tg_esc($lang).' | ID '.ez_tg_esc($item['id']);
            ez_tg_send(implode("\n", $L));
        }
        $brief_sent = true;
    }
}

function bfv($f) {              // значення поля брифу: POST -> GET (з конфігуратора) -> порожньо
    if (isset($_POST[$f])) return (string)$_POST[$f];
    if (isset($_GET[$f]))  return (string)$_GET[$f];
    return '';
}

/**
 * Файли, прикріплені до брифу. Кладемо в data/brief-files/<id>/, тобто в теку,
 * закриту nginx. Назовні вони недоступні, віддає їх brief-files.php після логіна.
 * Повертає список array('name'=>оригінальна назва,'file'=>ім'я на диску,'size'=>байтів).
 */
function brief_files_save($id) {
    $out = array();
    if (empty($_FILES['bfiles']) || !is_array($_FILES['bfiles']['name'])) return $out;

    $MAX_N    = 3;
    $MAX_SIZE = 12 * 1024 * 1024;
    $OK_EXT   = array('pdf','jpg','jpeg','png','zip','docx','xlsx','dxf');
    $OK_MIME  = array(
        'application/pdf', 'image/jpeg', 'image/png', 'application/zip',
        'application/x-zip-compressed', 'application/octet-stream',
        'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
        'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
        'image/vnd.dxf', 'text/plain',
    );

    $dir = DATA . '/brief-files/' . $id;
    $n = 0;
    foreach ($_FILES['bfiles']['name'] as $i => $orig) {
        if ($n >= $MAX_N) break;
        if (!isset($_FILES['bfiles']['error'][$i]) || $_FILES['bfiles']['error'][$i] !== UPLOAD_ERR_OK) continue;
        $tmp  = $_FILES['bfiles']['tmp_name'][$i];
        $size = (int)$_FILES['bfiles']['size'][$i];
        if ($size <= 0 || $size > $MAX_SIZE) continue;
        if (!is_uploaded_file($tmp)) continue;

        $ext = strtolower(pathinfo((string)$orig, PATHINFO_EXTENSION));
        if (!in_array($ext, $OK_EXT, true)) continue;

        if (function_exists('finfo_open')) {                 // реальний тип, а не лише розширення
            $fi = finfo_open(FILEINFO_MIME_TYPE);
            $mime = $fi ? finfo_file($fi, $tmp) : '';
            if ($fi) finfo_close($fi);
            if ($mime && !in_array($mime, $OK_MIME, true)) continue;
        }

        if (!is_dir($dir) && !@mkdir($dir, 0750, true)) return $out;

        $base = preg_replace('/[^a-zA-Z0-9._-]+/', '_', (string)$orig);
        $base = function_exists('mb_substr') ? mb_substr($base, 0, 60) : substr($base, 0, 60);
        $name = sprintf('%02d-%s', $n + 1, $base);
        if (strtolower(pathinfo($name, PATHINFO_EXTENSION)) !== $ext) $name .= '.' . $ext;

        if (@move_uploaded_file($tmp, $dir . '/' . $name)) {
            @chmod($dir . '/' . $name, 0640);
            $out[] = array('name' => (string)$orig, 'file' => $name, 'size' => $size);
            $n++;
        }
    }
    return $out;
}

function ph($img, $label) { // image or placeholder
    if ($img && file_exists(UPLOADS.'/'.$img))
        return '<div class="ph" style="background-image:url(\'uploads/'.e($img).'\');background-size:cover;background-position:center"></div>';
    return '<div class="ph">'.e($label).'</div>';
}

function c3d_band($t, $url, $lang) {           // банер 3D-конфігуратора COVEX
    if (empty($t['c3d_h'])) return '';          // немає перекладу - не показуємо
    $btn2 = isset($t['cta_params']) ? $t['cta_params'] : (isset($t['cta_brief']) ? $t['cta_brief'] : '');
    $out  = '<section class="c3d-band"><div class="wrap c3d-in rv">';
    $out .= '<div class="c3d-txt">';
    if (!empty($t['c3d_eyebrow'])) $out .= '<span class="eyebrow">'.e($t['c3d_eyebrow']).'</span>';
    $out .= '<h2>'.e($t['c3d_h']).'</h2>';
    if (!empty($t['c3d_p'])) $out .= '<p>'.e($t['c3d_p']).'</p>';
    $out .= '</div><div class="c3d-act">';
    $out .= '<a class="btn primary" href="'.e($url).'">'.e($t['c3d_btn']).' &rarr;</a>';
    if ($btn2 !== '') $out .= '<a class="btn ghost" href="'.url('brief',$lang).'">'.e($btn2).'</a>';
    $out .= '</div>';
    if (!empty($t['c3d_note'])) $out .= '<p class="c3d-note">'.e($t['c3d_note']).'</p>';
    $out .= '</div></section>';
    return $out;
}

function render_section($s, $lang, $t, $projects, $faq, $partners, $i) {
    $alt = ($i % 2 === 1) ? ' class="alt"' : '';
    $eyebrow = !empty($s['eyebrow']) ? '<span class="eyebrow">'.e($s['eyebrow']).'</span>' : '';
    $type = isset($s['type']) ? $s['type'] : '';
    $out = '';

    if ($type === 'split') {
        $txt = '<div class="rv">'.$eyebrow.'<h2>'.e($s['h2']).'</h2>';
        if (!empty($s['paras'])) foreach ($s['paras'] as $p) $txt .= '<p style="margin-top:14px">'.e($p).'</p>';
        if (!empty($s['checks'])) {
            $txt .= '<ul class="checks" style="margin-top:20px">';
            foreach ($s['checks'] as $c) $txt .= '<li><span><b>'.e($c['b']).'</b> '.e($c['t']).'</span></li>';
            $txt .= '</ul>';
        }
        $txt .= '</div>';
        $img = ph(isset($s['img'])?$s['img']:'', 'Photo');
        $img = str_replace('<div class="ph"', '<div class="ph rv"', $img);
        $inner = (isset($s['side']) && $s['side']==='left') ? $img.$txt : $txt.$img;
        $out = '<section'.$alt.'><div class="wrap split">'.$inner.'</div></section>';

    } elseif ($type === 'cards') {
        $cols = isset($s['cols']) ? (int)$s['cols'] : 3; if ($cols<2||$cols>4) $cols = 3;
        $head = ($eyebrow || !empty($s['h2'])) ? '<div class="sec-head rv">'.$eyebrow.'<h2>'.e($s['h2']).'</h2>'.(!empty($s['p'])?'<p>'.e($s['p']).'</p>':'').'</div>' : '';
        $cards = '';
        foreach ($s['items'] as $it) {
            $tag = !empty($it['tag']) ? '<div class="tag">'.e($it['tag']).'</div>' : '';
            $more = '';
            if (!empty($it['href'])) {
                $isExt = preg_match('~^https?://~i', $it['href']);
                $href = ($it['href']==='#') ? '#' : ($isExt ? $it['href'] : url($it['href'], $lang));
                $ext  = $isExt ? ' target="_blank" rel="noopener"' : '';
                $more = '<a class="more" href="'.e($href).'"'.$ext.'>'.e($t['more']).' '.($isExt?'↗':'→').'</a>';
            }
            $cards .= '<div class="card rv">'.$tag.'<h3>'.e($it['h']).'</h3><p>'.e($it['p']).'</p>'.$more.'</div>';
        }
        $ctaBtn = '';
        if (!empty($s['cta']) && $s['cta'] === 'params') {
            $lbl = isset($t['cta_params']) ? $t['cta_params'] : (isset($t['cta_brief']) ? $t['cta_brief'] : 'Send project brief');
            $ctaBtn = '<div class="rv" style="margin-top:28px"><a class="btn primary" href="'.url('brief',$lang).'">'.e($lbl).' →</a></div>';
        }
        $out = '<section'.$alt.'><div class="wrap">'.$head.'<div class="grid g'.$cols.'">'.$cards.'</div>'.$ctaBtn.'</div></section>';

    } elseif ($type === 'table') {
        $head = '<div class="sec-head rv">'.$eyebrow.'<h2>'.e($s['h2']).'</h2></div>';
        $tbl = '<table class="spec"><tr>';
        foreach ($s['head'] as $h) $tbl .= '<th>'.e($h).'</th>';
        $tbl .= '</tr>';
        foreach ($s['rows'] as $r) { $tbl .= '<tr>'; foreach ($r as $c) $tbl .= '<td>'.e($c).'</td>'; $tbl .= '</tr>'; }
        $tbl .= '</table>';
        $note = !empty($s['note']) ? '<p style="margin-top:14px;font-size:.85rem">'.e($s['note']).'</p>' : '';
        $out = '<section'.$alt.'><div class="wrap">'.$head.'<div class="rv" style="overflow-x:auto">'.$tbl.$note.'</div></div></section>';

    } elseif ($type === 'stats') {
        $st = '';
        foreach ($s['items'] as $it) $st .= '<div class="stat"><b>'.e($it['b']).'</b><span>'.e($it['t']).'</span></div>';
        $out = '<section'.$alt.'><div class="wrap"><div class="stats rv">'.$st.'</div></div></section>';

    } elseif ($type === 'projects') {
        $limit = isset($s['limit']) ? (int)$s['limit'] : 0;
        $list = ($limit > 0) ? array_slice($projects, 0, $limit) : $projects;
        $head = ($eyebrow || !empty($s['h2'])) ? '<div class="sec-head rv">'.$eyebrow.'<h2>'.e($s['h2']).'</h2>'.(!empty($s['p'])?'<p>'.e($s['p']).'</p>':'').'</div>' : '';
        $g = '';
        foreach ($list as $p) {
            $title = isset($p['title'][$lang]) ? $p['title'][$lang] : '';
            $desc  = isset($p['desc'][$lang]) ? $p['desc'][$lang] : '';
            $bg = (!empty($p['img']) && file_exists(UPLOADS.'/'.$p['img'])) ? ' style="background-image:url(\'uploads/'.e($p['img']).'\');background-size:cover;background-position:center"' : '';
            $stv = isset($p['status']) ? $p['status'] : 'completed';
            $stmap = array('completed'=>'st_completed','concept'=>'st_concept','proposed'=>'st_proposed','development'=>'st_development');
            $stkey = isset($stmap[$stv]) ? $stmap[$stv] : 'st_completed';
            $stlabel = isset($t[$stkey]) ? $t[$stkey] : '';
            $badge = $stlabel !== '' ? '<span class="st-badge st-'.e($stv).'">'.e($stlabel).'</span>' : '';
            $imgAttr = (!empty($p['img']) && file_exists(UPLOADS.'/'.$p['img'])) ? e($p['img']) : '';
            $g .= '<div class="proj rv" tabindex="0" role="button" data-tag="'.e($p['tag']).'" data-title="'.e($title).'" data-desc="'.e($desc).'" data-st="'.e($stv).'" data-stlabel="'.e($stlabel).'" data-img="'.$imgAttr.'"'.$bg.'>'.$badge.'<div class="info"><span>'.e($p['tag']).'</span><b>'.e($title).'</b><p class="pdesc">'.e($desc).'</p></div></div>';
        }
        $more = ($limit > 0) ? '<div style="margin-top:30px" class="rv"><a class="btn ghost" href="'.url('projects',$lang).'">'.e($t['all_projects']).' →</a></div>' : '';
        $out = '<section'.$alt.'><div class="wrap">'.$head.'<div class="grid g3">'.$g.'</div>'.$more.'</div></section>';

    } elseif ($type === 'partners') {
        $ps = '';
        foreach ($partners as $p) $ps .= '<span>'.e($p['name']).'</span>';
        $sub  = !empty($s['sub']) ? '<div class="partners-sub rv">'.e($s['sub']).'</div>' : '';
        $desc = !empty($s['p'])   ? '<p class="partners-desc rv">'.e($s['p']).'</p>' : '';
        $out = '<section'.$alt.'><div class="wrap"><div class="sec-head rv">'.$eyebrow.'<h2>'.e($s['h2']).'</h2></div>'.$sub.$desc.'<div class="partners rv">'.$ps.'</div></div></section>';

    } elseif ($type === 'pitch') {
        $li = '';
        foreach ($s['items'] as $it) $li .= '<li>'.e($it).'</li>';
        $out = '<section class="pitch"><div class="wrap"><div class="rv"><h2>'.e($s['h2']).'</h2><p class="lead">'.e($s['p']).'</p></div><ul class="rv">'.$li.'</ul></div></section>';

    } elseif ($type === 'faq') {
        $fs = '';
        foreach ($faq as $f) {
            $q = isset($f['q'][$lang]) ? $f['q'][$lang] : '';
            $a = isset($f['a'][$lang]) ? $f['a'][$lang] : '';
            $fs .= '<details><summary>'.e($q).'</summary><div class="ans">'.e($a).'</div></details>';
        }
        $out = '<section'.$alt.'><div class="wrap"><div class="sec-head rv">'.$eyebrow.'<h2>'.e($s['h2']).'</h2></div><div class="rv">'.$fs.'</div></div></section>';
    }
    return $out;
}

// ---------- output ----------
header('Content-Type: text/html; charset=utf-8');

// ---- канонічний домен і мовні коди ----
// Домен зашитий навмисно: інакше www.ezeken.eu канонізує сам себе і виходить дубль.
define('SITE_URL', 'https://ezeken.eu');
$HTMLLANG = array('pl' => 'pl',    'en' => 'en',    'ua' => 'uk');   // ua це наш параметр, у розмітці uk
$OGLOCALE = array('pl' => 'pl_PL', 'en' => 'en_US', 'ua' => 'uk_UA');
$canon    = SITE_URL . '/' . url($page, $lang);
$og_image = SITE_URL . '/assets/og-image.jpg';
$title    = $pg['title'] . ' | EZEKEN Group';

// ---- юридичні реквізити для JSON-LD (settings.json дає контакти і соцмережі) ----
$ORG_LEGAL  = 'EZEKEN GROUP Sp. z o.o.';
$ORG_STREET = 'al. Marsz. J. Piłsudskiego 4E/3';
$ORG_CITY   = 'Warszawa';
$ORG_ZIP    = '05-077';
?><!DOCTYPE html>
<html lang="<?=e($HTMLLANG[$lang])?>">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title><?=e($title)?></title>
<meta name="description" content="<?=e($pg['meta'])?>">
<meta name="referrer" content="strict-origin-when-cross-origin">
<link rel="canonical" href="<?=e($canon)?>">
<?php foreach ($HTMLLANG as $L => $code): ?>
<link rel="alternate" hreflang="<?=e($code)?>" href="<?=e(SITE_URL.'/'.url($page,$L))?>">
<?php endforeach; ?>
<link rel="alternate" hreflang="x-default" href="<?=e(SITE_URL.'/'.url($page,'en'))?>">
<meta property="og:site_name" content="EZEKEN Group">
<meta property="og:title" content="<?=e($title)?>">
<meta property="og:description" content="<?=e($pg['meta'])?>">
<meta property="og:type" content="website">
<meta property="og:url" content="<?=e($canon)?>">
<meta property="og:image" content="<?=e($og_image)?>">
<meta property="og:image:width" content="1200">
<meta property="og:image:height" content="630">
<meta property="og:image:alt" content="EZEKEN Group - Engineering &amp; Structures Integrator">
<meta property="og:locale" content="<?=e($OGLOCALE[$lang])?>">
<?php foreach ($OGLOCALE as $L => $loc): if ($L === $lang) continue; ?>
<meta property="og:locale:alternate" content="<?=e($loc)?>">
<?php endforeach; ?>
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:title" content="<?=e($title)?>">
<meta name="twitter:description" content="<?=e($pg['meta'])?>">
<meta name="twitter:image" content="<?=e($og_image)?>">
<link rel="icon" type="image/svg+xml" href="assets/logo.svg">
<link rel="icon" href="/favicon.ico" sizes="32x32">
<?php
$ld = array('@context' => 'https://schema.org', '@graph' => array(
  array(
    '@type' => 'Organization',
    '@id'   => SITE_URL . '/#organization',
    'name'      => 'EZEKEN Group',
    'legalName' => $ORG_LEGAL,
    'url'       => SITE_URL,
    'logo'      => SITE_URL . '/assets/logo.svg',
    'image'     => $og_image,
    'description' => $pg['meta'],
    'address' => array(
      '@type' => 'PostalAddress',
      'streetAddress'   => $ORG_STREET,
      'addressLocality' => $ORG_CITY,
      'postalCode'      => $ORG_ZIP,
      'addressCountry'  => 'PL',
    ),
  ),
  array(
    '@type' => 'WebSite',
    '@id'   => SITE_URL . '/#website',
    'url'   => SITE_URL,
    'name'  => 'EZEKEN Group',
    'publisher'  => array('@id' => SITE_URL . '/#organization'),
    'inLanguage' => array_values($HTMLLANG),
  ),
  array(
    '@type' => 'WebPage',
    '@id'   => $canon,
    'url'   => $canon,
    'name'  => $title,
    'description' => $pg['meta'],
    'isPartOf'   => array('@id' => SITE_URL . '/#website'),
    'about'      => array('@id' => SITE_URL . '/#organization'),
    'inLanguage' => $HTMLLANG[$lang],
  ),
));
if (!empty($settings['email']))  $ld['@graph'][0]['email']     = $settings['email'];
if (!empty($settings['phone']))  $ld['@graph'][0]['telephone'] = $settings['phone'];
if (!empty($settings['nip'])) {
    $ld['@graph'][0]['vatID'] = 'PL' . $settings['nip'];
    $ld['@graph'][0]['taxID'] = $settings['nip'];
}
$ids = array();
foreach (array('krs' => 'KRS', 'nip' => 'NIP', 'regon' => 'REGON') as $k => $lbl) {
    if (!empty($settings[$k])) $ids[] = array('@type' => 'PropertyValue', 'name' => $lbl, 'value' => $settings[$k]);
}
if ($ids) $ld['@graph'][0]['identifier'] = $ids;
$same = array();
foreach (array('linkedin', 'facebook', 'instagram') as $k) if (!empty($settings[$k])) $same[] = $settings[$k];
if ($same) $ld['@graph'][0]['sameAs'] = $same;

/* ---- хлібні крихти на всіх сторінках, окрім головної ---- */
if ($page !== 'index') {
    $navname = isset($t['nav'][$page]) ? $t['nav'][$page] : $pg['title'];
    $crumbs  = array(
        array('@type' => 'ListItem', 'position' => 1,
              'name' => (isset($t['nav']['index']) ? $t['nav']['index'] : 'Home'),
              'item' => SITE_URL . '/' . url('index', $lang)),
        array('@type' => 'ListItem', 'position' => 2, 'name' => $navname, 'item' => $canon),
    );
    if ($news_post) {
        $crumbs[1]['item'] = SITE_URL . '/' . url('news', $lang);
        $crumbs[] = array('@type' => 'ListItem', 'position' => 3,
                          'name' => $pg['title'], 'item' => $canon);
    }
    $ld['@graph'][] = array(
        '@type' => 'BreadcrumbList',
        '@id'   => $canon . '#breadcrumb',
        'itemListElement' => $crumbs,
    );
}

/* ---- Service на сторінках рішень ---- */
$SERVICE_PAGES = array('covex','hangars','aviation','stage-roofs','stages','trybuny',
                       'ryshtuvannya','truss','gis','pakuvannya','engineering',
                       'industrial','construction','live-events','expo');
if (in_array($page, $SERVICE_PAGES, true) && !$news_post) {
    $ld['@graph'][] = array(
        '@type'       => 'Service',
        '@id'         => $canon . '#service',
        'name'        => $pg['title'],
        'description' => $pg['meta'],
        'serviceType' => isset($t['nav'][$page]) ? $t['nav'][$page] : $pg['title'],
        'provider'    => array('@id' => SITE_URL . '/#organization'),
        'areaServed'  => array(
            array('@type' => 'Country', 'name' => 'PL'),
            array('@type' => 'Place',   'name' => 'Europe'),
        ),
        'url'         => $canon,
    );
}

/* ---- Article на сторінці новини ---- */
if ($news_post) {
    $art = array(
        '@type'            => 'Article',
        '@id'              => $canon . '#article',
        'headline'         => $pg['title'],
        'description'      => $pg['meta'],
        'mainEntityOfPage' => array('@id' => $canon),
        'publisher'        => array('@id' => SITE_URL . '/#organization'),
        'author'           => array('@id' => SITE_URL . '/#organization'),
        'inLanguage'       => $HTMLLANG[$lang],
    );
    if (!empty($news_post['date'])) {
        $art['datePublished'] = substr($news_post['date'], 0, 10);
        $art['dateModified']  = substr($news_post['date'], 0, 10);
    }
    if (!empty($news_post['img']) && file_exists(UPLOADS . '/' . $news_post['img'])) {
        $art['image'] = SITE_URL . '/uploads/' . rawurlencode($news_post['img']);
    }
    $ld['@graph'][] = $art;
}

echo '<script type="application/ld+json">'
   . json_encode($ld, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES)
   . "</script>\n";
?>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link href="https://fonts.googleapis.com/css2?family=Archivo:wght@700;800;900&family=Inter:wght@400;600;700&display=swap" rel="stylesheet">
<link rel="stylesheet" href="style.css?v=<?=filemtime(__DIR__."/style.css")?>">
<?php if ($show_c3d || $page === 'brief'): ?>
<style>
.c3d-band{border-top:1px solid rgba(37,207,219,.28);border-bottom:1px solid rgba(37,207,219,.28);
  background:linear-gradient(180deg,rgba(37,207,219,.055),rgba(37,207,219,0))}
.c3d-in{display:flex;flex-wrap:wrap;align-items:center;gap:24px 32px;
  padding-top:38px;padding-bottom:38px}   /* не скорочення padding: .wrap дає бічні відступи */
.c3d-txt{flex:1 1 420px;min-width:0}
.c3d-txt h2{margin:6px 0 0}
.c3d-txt p{margin-top:12px;max-width:62ch}
.c3d-act{display:flex;flex-wrap:wrap;gap:12px;flex:0 1 auto;min-width:0;max-width:100%}
.c3d-act .btn{max-width:100%}
.c3d-note{flex:1 1 100%;margin:0;font-size:.8rem;line-height:1.5;color:var(--alu);max-width:88ch;
  border-left:2px solid rgba(37,207,219,.45);padding-left:12px}
@media (max-width:760px){.c3d-in{padding-top:28px;padding-bottom:28px}
  .c3d-act{flex:1 1 100%;width:100%}
  .c3d-act .btn{flex:1 1 100%;width:100%;text-align:center;padding:14px 16px}}
.c3d-embed{border:1px solid rgba(37,207,219,.28);padding:22px;margin-bottom:34px}
/* згорнутий конфігуратор: використовуємо наявний патерн details/summary зі style.css */
details.c3d-embed{padding:0}
.c3d-sum{align-items:center;line-height:1.35}
.c3d-sum .eyebrow{flex:none;margin:0}
.c3d-sum-t{flex:1;min-width:0}
.c3d-sum:hover .c3d-sum-t{color:var(--acc)}
.c3d-body{padding:0 22px 22px}
.c3d-embed-head{display:flex;flex-wrap:wrap;gap:16px 24px;align-items:flex-end;
  justify-content:space-between;margin-bottom:18px}
.c3d-embed-head h2{margin:6px 0 0;font-size:1.5rem}
.c3d-embed-head p{margin-top:10px;max-width:62ch}
.c3d-frame{position:relative;height:620px;border:1px solid rgba(255,255,255,.08);background:#070b0d}
.c3d-frame iframe{position:absolute;inset:0;width:100%;height:100%;border:0;display:block}
.bf-cfg textarea{font-size:.82rem;line-height:1.45;opacity:.92;resize:none}
.bf-files input[type=file]{display:block;width:100%;box-sizing:border-box;margin-top:8px;
  padding:12px;background:var(--bg-3);border:1px dashed var(--line);border-radius:var(--radius);
  color:var(--alu);font:inherit;cursor:pointer}
.bf-files input[type=file]:hover{border-color:var(--acc)}
.bf-files .bf-hint{display:block;margin-top:8px;font-size:.8rem;line-height:1.5;color:var(--alu)}
.bf-hl{outline:2px solid rgba(37,207,219,.85);outline-offset:1px;
  transition:outline-color .4s ease}
@media (max-width:860px){.c3d-frame{height:520px}}
@media (max-width:560px){.c3d-frame{height:clamp(430px,74vh,540px)}.c3d-embed{padding:14px 12px}
  details.c3d-embed{padding:0}.c3d-sum{padding:14px 12px;gap:10px}.c3d-body{padding:0 12px 14px}
  .c3d-sum .eyebrow{display:none}
  .c3d-embed-head{margin-bottom:14px}.c3d-embed-head .btn{width:100%;text-align:center}}
</style>
<?php endif; ?>
</head>
<body>
<canvas id="bgfx" aria-hidden="true"></canvas>
<div id="bgveil" aria-hidden="true"></div>
<div id="cursorRing" aria-hidden="true"></div>
<div id="cursorDot" aria-hidden="true"></div>
<header><div class="wrap nav">
  <a class="logo" href="<?=url('index',$lang)?>"><?=logo_svg('mark')?><span>EZE<b>KEN</b></span></a>
  <?php
    $SOL = array('hangars','stage-roofs','ryshtuvannya','covex','trybuny','truss','gis','stages','pakuvannya');
    $IND = array('aviation','industrial','construction','live-events','expo');
    $sol_active = in_array($page, $SOL, true);
    $ind_active = in_array($page, $IND, true);
  ?>
  <nav class="menu">
    <a href="<?=url('index',$lang)?>"<?=($page==='index'?' class="active"':'')?>><?=e($t['nav']['index'])?></a>
    <div class="dd<?=$sol_active?' active-grp':''?>">
      <button type="button" class="dd-btn<?=$sol_active?' active':''?>"><?=e($t['grp_solutions'])?> <span class="dd-ar">▾</span></button>
      <div class="dd-menu">
        <?php foreach ($SOL as $p): ?>
        <a href="<?=url($p,$lang)?>"<?=($p===$page?' class="active"':'')?>><?=e(isset($t['nav'][$p]) ? $t['nav'][$p] : $p)?></a>
        <?php endforeach; ?>
      </div>
    </div>
    <div class="dd<?=$ind_active?' active-grp':''?>">
      <button type="button" class="dd-btn<?=$ind_active?' active':''?>"><?=e($t['grp_industries'])?> <span class="dd-ar">▾</span></button>
      <div class="dd-menu">
        <?php foreach ($IND as $p): ?>
        <a href="<?=url($p,$lang)?>"<?=($p===$page?' class="active"':'')?>><?=e(isset($t['nav'][$p]) ? $t['nav'][$p] : $p)?></a>
        <?php endforeach; ?>
      </div>
    </div>
    <a href="<?=url('projects',$lang)?>"<?=($page==='projects'?' class="active"':'')?>><?=e($t['nav']['projects'])?></a>
    <a href="<?=url('engineering',$lang)?>"<?=($page==='engineering'?' class="active"':'')?>><?=e($t['nav']['engineering'])?></a>
    <a href="<?=url('news',$lang)?>"<?=($page==='news'?' class="active"':'')?>><?=e($t['nav']['news'])?></a>
    <a class="shop-btn" href="https://stagemart.eu" target="_blank" rel="noopener">Stagemart ↗</a>
    <a class="cta" href="<?=url('brief',$lang)?>"><?=e($t['cta_discuss'])?></a>
    <span class="langs"><?php foreach ($LANGS as $lc=>$ln): ?><a href="index.php?p=<?=e($page)?>&amp;lang=<?=$lc?>"<?=($lc===$lang?' class="active"':'')?>><?=$ln?></a><?php endforeach; ?></span>
  </nav>
  <button class="burger" aria-label="Menu">☰</button>
</div></header>

<?php if ($page === 'index'): ?>
<div class="hero">
 <div class="hero-bg"></div>
 <?php if (!empty($settings['hero_video']) && file_exists(UPLOADS.'/'.$settings['hero_video'])): ?>
 <video autoplay muted loop playsinline><source src="uploads/<?=e($settings['hero_video'])?>" type="video/mp4"></video>
 <?php endif; ?>
 <div class="wrap">
  <span class="eyebrow"><?=e($pg['hero']['eyebrow'])?></span>
  <h1><?=e($pg['hero']['h1'])?></h1>
  <p class="lead"><?=e($pg['hero']['lead'])?></p>
  <div class="btns"><a class="btn primary" href="<?=url('brief',$lang)?>"><?=e($t['cta_discuss'])?></a><a class="btn ghost" href="<?=url('hangars',$lang)?>"><?=e($t['cta_explore'])?></a></div>
 </div>
</div>
<div class="poly-line"></div>
<?php else: ?>
<div class="page-hero"><div class="wrap">
  <div class="crumbs"><a href="<?=url('index',$lang)?>"><?=e($t['nav']['index'])?></a> / <?=e($pg['hero']['eyebrow'])?></div>
  <h1><?=e($pg['hero']['h1'])?></h1><p><?=e($pg['hero']['lead'])?></p>
</div></div>
<div class="poly-line"></div>
<?php endif; ?>
<?php if ($show_c3d && $page === 'covex') echo c3d_band($t, $c3d_url, $lang); ?>

<?php if ($page === 'news'): ?>
<?php if ($news_post): $nb = isset($news_post['body'][$lang]) ? $news_post['body'][$lang] : ''; ?>
<section><div class="wrap legal">
  <div class="crumbs" style="margin-bottom:18px"><a href="<?=url('news',$lang)?>"><?=e($t['news_back'])?></a></div>
  <?php if (!empty($news_post['img']) && file_exists(UPLOADS.'/'.$news_post['img'])): ?>
  <img src="uploads/<?=e($news_post['img'])?>" alt="<?=e($news_post['title'][$lang] ?? '')?>" style="width:100%;max-height:420px;object-fit:cover;border-radius:10px;margin-bottom:24px">
  <?php endif; ?>
  <div class="hint" style="color:var(--alu);font-size:.85rem;margin-bottom:8px"><?=e($news_post['date'] ?? '')?></div>
  <h1 style="margin-bottom:18px"><?=e($news_post['title'][$lang] ?? '')?></h1>
  <?php foreach (preg_split('/\n{2,}/', $nb) as $par): if (trim($par)==='') continue; ?>
  <p><?=nl2br(e(trim($par)))?></p>
  <?php endforeach; ?>
</div></section>
<?php else: ?>
<section><div class="wrap">
  <?php if (empty($posts)): ?>
  <p style="color:var(--alu)"><?=e($t['news_empty'])?></p>
  <?php else: ?>
  <div class="grid g3">
  <?php foreach (array_reverse($posts) as $ps):
        $ptitle = isset($ps['title'][$lang]) ? $ps['title'][$lang] : '';
        $pbody  = isset($ps['body'][$lang]) ? $ps['body'][$lang] : '';
        $clean = trim(preg_replace('/\s+/', ' ', $pbody));
        preg_match('/^.{0,140}/us', $clean, $m_exc);
        $exc = isset($m_exc[0]) ? $m_exc[0] : $clean;
        if ($exc !== $clean) $exc .= '…';
        $bg = (!empty($ps['img']) && file_exists(UPLOADS.'/'.$ps['img'])) ? ' style="background-image:url(\'uploads/'.e($ps['img']).'\');background-size:cover;background-position:center"' : '';
  ?>
  <a class="proj rv" href="<?=url('news',$lang)?>&amp;id=<?=e($ps['id'])?>"<?=$bg?>><div class="info">
    <span><?=e($ps['date'] ?? '')?></span><b><?=e($ptitle)?></b>
    <p style="font-size:.85rem;margin-top:6px"><?=e($exc)?></p>
  </div></a>
  <?php endforeach; ?>
  </div>
  <?php endif; ?>
</div></section>
<?php endif; ?>
<?php endif; ?>

<?php if ($page === 'brief' && !empty($t['c3d_brief_h'])): ?>
<section><div class="wrap" style="max-width:1180px">
  <details class="c3d-embed rv"<?= (bfv('bwidth') !== '' ? ' open' : '') ?>>
    <summary class="c3d-sum">
      <span class="eyebrow"><?=e($t['c3d_eyebrow'])?></span>
      <span class="c3d-sum-t"><?=e(isset($t['c3d_brief_toggle']) ? $t['c3d_brief_toggle'] : $t['c3d_brief_h'])?></span>
    </summary>
    <div class="c3d-body">
    <div class="c3d-embed-head">
      <div>
        <h2><?=e($t['c3d_brief_h'])?></h2>
        <p><?=e($t['c3d_brief_p'])?></p>
      </div>
      <a class="btn ghost" href="covex-3d.php?lang=<?=e($lang)?>" target="_blank" rel="noopener"><?=e($t['c3d_full'])?> &#8599;</a>
    </div>
    <div class="c3d-frame">
      <iframe src="covex-3d.php?lang=<?=e($lang)?>&amp;embed=1" title="<?=e($t['c3d_brief_h'])?>" loading="lazy"></iframe>
    </div>
    <p class="c3d-note"><?=e($t['c3d_note'])?></p>
    </div>
  </details>
</div></section>
<?php endif; ?>

<?php if ($page === 'brief'): ?>
<section><div class="wrap" style="max-width:860px">
<?php if ($brief_sent): ?>
  <div class="brief-ok rv in">✓ <?=e($t['bf_ok'])?></div>
<?php else: ?>
  <?php if ($brief_error): ?><div class="brief-err"><?=e($brief_error)?></div><?php endif; ?>
  <form method="post" class="brief-form" id="brief-form" enctype="multipart/form-data" novalidate>
    <input type="hidden" name="form_ts" value="<?=time()?>">
    <input type="text" name="website" value="" class="hp-field" tabindex="-1" autocomplete="off" aria-hidden="true">

    <h3 class="bf-h"><?=e($t['bf_sec_project'])?></h3>
    <div class="bf-grid">
      <label><?=e($t['bf_type'])?> *
        <select name="btype" required>
          <option value=""></option>
          <?php foreach (explode('|', $t['bf_type_opts']) as $opt): ?>
          <option value="<?=e($opt)?>"<?=(isset($_POST['btype'])&&$_POST['btype']===$opt)?' selected':''?>><?=e($opt)?></option>
          <?php endforeach; ?>
        </select>
      </label>
      <label><?=e($t['bf_duration'])?>
        <select name="bduration">
          <option value=""></option>
          <?php foreach (explode('|', $t['bf_duration_opts']) as $opt): ?>
          <option value="<?=e($opt)?>"<?=(isset($_POST['bduration'])&&$_POST['bduration']===$opt)?' selected':''?>><?=e($opt)?></option>
          <?php endforeach; ?>
        </select>
      </label>
      <label><?=e($t['bf_country'])?><input name="bcountry" value="<?=e($_POST['bcountry'] ?? '')?>"></label>
      <label><?=e($t['bf_city'])?><input name="bcity" value="<?=e($_POST['bcity'] ?? '')?>"></label>
      <label><?=e($t['bf_date'])?><input name="bdate" value="<?=e($_POST['bdate'] ?? '')?>" placeholder="2026-10-01"></label>
    </div>

    <div class="bf-sec" id="bf-dims">
    <h3 class="bf-h"><?=e($t['bf_sec_dims'])?></h3>
    <div class="bf-grid bf-3">
      <label><?=e($t['bf_width'])?><input name="bwidth" id="bwidth" value="<?=e(bfv('bwidth'))?>" inputmode="decimal"></label>
      <label><?=e($t['bf_length'])?><input name="blength" id="blength" value="<?=e(bfv('blength'))?>" inputmode="decimal"></label>
      <label><?=e($t['bf_height'])?><input name="bheight" id="bheight" value="<?=e(bfv('bheight'))?>" inputmode="decimal"></label>
    </div>
    <?php if (!empty($t['bf_config'])): ?>
    <label class="bf-full bf-cfg"><?=e($t['bf_config'])?>
      <textarea name="bconfig" id="bconfig" rows="2" readonly placeholder="<?=e(isset($t['c3d_ph'])?$t['c3d_ph']:'')?>"><?=e(bfv('bconfig'))?></textarea>
    </label>
    <?php endif; ?>

    </div><!-- /bf-dims -->

    <div class="bf-sec" id="bf-loads">
    <h3 class="bf-h"><?=e($t['bf_sec_loads'])?></h3>
    <div class="bf-grid">
      <label><?=e($t['bf_wind'])?><input name="bwind" value="<?=e($_POST['bwind'] ?? '')?>"></label>
      <label><?=e($t['bf_snow'])?><input name="bsnow" value="<?=e($_POST['bsnow'] ?? '')?>"></label>
    </div>
    <label class="bf-full"><?=e($t['bf_other'])?><textarea name="bother" rows="2"><?=e($_POST['bother'] ?? '')?></textarea></label>

    </div><!-- /bf-loads -->

    <div class="bf-sec" id="bf-access">
    <h3 class="bf-h"><?=e($t['bf_sec_access'])?></h3>
    <div class="bf-grid">
      <label><?=e($t['bf_door'])?><input name="bdoor" value="<?=e($_POST['bdoor'] ?? '')?>" placeholder="20 × 6"></label>
      <label><?=e($t['bf_vehicle'])?><input name="bvehicle" value="<?=e($_POST['bvehicle'] ?? '')?>"></label>
      <label class="bf-full"><?=e($t['bf_aircraft'])?><input name="baircraft" value="<?=e($_POST['baircraft'] ?? '')?>"></label>
    </div>

    </div><!-- /bf-access -->

    <?php if (!empty($t['bf_files'])): ?>
    <h3 class="bf-h"><?=e($t['bf_files'])?></h3>
    <label class="bf-full bf-files">
      <input type="file" name="bfiles[]" multiple
             accept=".pdf,.jpg,.jpeg,.png,.zip,.docx,.xlsx,.dxf">
      <?php if (!empty($t['bf_files_hint'])): ?>
      <span class="bf-hint"><?=e($t['bf_files_hint'])?></span>
      <?php endif; ?>
    </label>
    <?php endif; ?>

    <h3 class="bf-h"><?=e($t['bf_sec_contact'])?></h3>
    <div class="bf-grid">
      <label><?=e($t['bf_name'])?> *<input name="bname" value="<?=e($_POST['bname'] ?? '')?>" required></label>
      <label><?=e($t['bf_company'])?><input name="bcompany" value="<?=e($_POST['bcompany'] ?? '')?>"></label>
      <label><?=e($t['bf_email'])?> *<input name="bemail" type="email" value="<?=e($_POST['bemail'] ?? '')?>" required></label>
      <label><?=e($t['bf_phone'])?><input name="bphone" value="<?=e($_POST['bphone'] ?? '')?>"></label>
    </div>

    <p class="bf-docs"><?=e($t['bf_docs'])?></p>
    <?php if (!empty($t['bf_gdpr'])): ?>
    <p class="bf-gdpr"><?=e($t['bf_gdpr'])?> <a href="privacy.php?lang=<?=$lang?>" target="_blank"><?=e($t['privacy'])?> →</a></p>
    <?php endif; ?>
    <div style="margin-top:22px"><button class="btn primary" name="send_brief" value="1" type="submit"><?=e($t['bf_send'])?></button></div>
  </form>
<?php endif; ?>
</div></section>
<?php endif; ?>
<?php $i=0; foreach ($pg['sections'] as $s) { echo render_section($s, $lang, $t, $projects, $faq, $partners, $i); $i++; } ?>
<?php if ($show_c3d && $page !== 'covex') echo c3d_band($t, $c3d_url, $lang); ?>

<section class="cta-band"><div class="wrap rv">
  <h2><?=e($t['cta_h'])?></h2><p><?=e($t['cta_p'])?></p>
  <div class="btns" style="justify-content:center"><a class="btn primary" href="<?=url('brief',$lang)?>"><?=e($t['cta_brief'])?></a><a class="btn ghost" href="mailto:<?=e($settings['email'])?>"><?=e($t['cta_write'])?></a><a class="btn ghost" href="tel:<?=e(str_replace(' ','',$settings['phone']))?>"><?=e($settings['phone'])?></a></div>
</div></section>

<footer><div class="wrap">
 <div class="foot-grid">
  <div>
   <a class="logo" href="<?=url('index',$lang)?>" style="margin-bottom:16px"><?=logo_svg('mark')?><span>EZE<b>KEN</b> GROUP</span></a>
   <p><?=e($t['foot_about'])?></p>
  </div>
  <div><h4><?=e($t['foot_solutions'])?></h4><ul>
   <li><a href="<?=url('hangars',$lang)?>"><?=e($t['nav']['hangars'])?></a></li>
   <li><a href="<?=url('stage-roofs',$lang)?>"><?=e($t['nav']['stage-roofs'])?></a></li>
   <li><a href="<?=url('ryshtuvannya',$lang)?>"><?=e($t['nav']['ryshtuvannya'])?></a></li>
   <li><a href="<?=url('covex',$lang)?>"><?=e($t['nav']['covex'])?></a></li>
   <li><a href="<?=url('trybuny',$lang)?>"><?=e($t['nav']['trybuny'])?></a></li>
   <li><a href="<?=url('pakuvannya',$lang)?>"><?=e(isset($t['nav']['pakuvannya'])?$t['nav']['pakuvannya']:'Packaging')?></a></li>
  </ul></div>
  <div><h4><?=e($t['foot_company'])?></h4><ul>
   <li><a href="<?=url('engineering',$lang)?>"><?=e($t['nav']['engineering'])?></a></li>
   <li><a href="<?=url('aviation',$lang)?>"><?=e($t['nav']['aviation'])?></a></li>
   <li><a href="<?=url('projects',$lang)?>"><?=e($t['nav']['projects'])?></a></li>
   <li><a href="<?=url('news',$lang)?>"><?=e($t['nav']['news'])?></a></li>
   <li><a href="<?=url('brief',$lang)?>"><?=e($t['nav']['brief'])?></a></li>
  </ul></div>
  <div><h4><?=e($t['foot_contacts'])?></h4><ul>
   <li><a href="tel:<?=e(str_replace(' ','',$settings['phone']))?>"><?=e($settings['phone'])?></a></li>
   <li><a href="mailto:<?=e($settings['email'])?>"><?=e($settings['email'])?></a></li>
   <li><?=e($settings['address'])?></li>
   <li><a href="https://stagemart.eu" target="_blank" rel="noopener" style="color:var(--acc)">Stagemart - online shop ↗</a></li>
  </ul></div>
 </div>
 <?php $imprint = array(); if(!empty($settings['nip'])) $imprint[]='NIP: '.$settings['nip']; if(!empty($settings['krs'])) $imprint[]='KRS: '.$settings['krs']; if(!empty($settings['regon'])) $imprint[]='REGON: '.$settings['regon']; if(!empty($settings['court'])) $imprint[]=$settings['court']; if(!empty($settings['capital'])) $imprint[]='Kapitał zakładowy: '.$settings['capital']; ?>
 <?php if ($imprint): ?><div class="copy" style="border-top:0;padding-top:0;margin-top:-6px"><span style="font-size:.78rem;color:var(--alu)">EZEKEN GROUP Sp. z o.o. · <?=e(implode(' · ', $imprint))?> · <?=e($settings['address'])?></span></div><?php endif; ?>
 <div class="copy"><span>© <?=date('Y')?> EZEKEN Group Sp. z o.o. <?=e($t['rights'])?> · <a href="privacy.php?lang=<?=$lang?>"><?=e($t['privacy'])?></a></span>
 <span><a href="<?=e($settings['linkedin'])?>" rel="noopener">LinkedIn</a> · <a href="<?=e($settings['facebook'])?>" rel="noopener">Facebook</a> · <a href="<?=e($settings['instagram'])?>" rel="noopener">Instagram</a></span></div>
</div></footer>
<?php if (empty($_COOKIE['cookie_consent'])): ?>
<div id="cookiebar">
  <p><?=e($t['cookie_text'])?> <a href="privacy.php?lang=<?=$lang?>"><?=e($t['privacy'])?></a>.</p>
  <button type="button"><?=e($t['cookie_btn'])?></button>
</div>
<?php endif; ?>
<div id="pmodal" class="pmodal" aria-hidden="true">
  <div class="pm-bg"></div>
  <div class="pm-box" role="dialog" aria-modal="true">
    <button type="button" class="pm-close" aria-label="Close">✕</button>
    <img class="pm-img" src="" alt="" style="display:none">
    <div class="pm-body">
      <span class="pm-tag"></span><span class="st-badge pm-st"></span>
      <h3 class="pm-title"></h3>
      <p class="pm-desc"></p>
    </div>
  </div>
</div>
<script>
(function(){
  var m=document.getElementById('pmodal'); if(!m) return;
  var img=m.querySelector('.pm-img'), tag=m.querySelector('.pm-tag'),
      st=m.querySelector('.pm-st'), h=m.querySelector('.pm-title'), d=m.querySelector('.pm-desc');
  function open(c){
    tag.textContent=c.dataset.tag||'';
    h.textContent=c.dataset.title||'';
    d.textContent=c.dataset.desc||'';
    if(c.dataset.stlabel){ st.textContent=c.dataset.stlabel; st.className='st-badge pm-st st-'+c.dataset.st; st.style.display='inline-block'; }
    else st.style.display='none';
    if(c.dataset.img){ img.src='uploads/'+c.dataset.img; img.style.display='block'; }
    else { img.style.display='none'; img.src=''; }
    m.classList.add('open'); m.setAttribute('aria-hidden','false');
    document.body.style.overflow='hidden';
  }
  function close(){ m.classList.remove('open'); m.setAttribute('aria-hidden','true'); document.body.style.overflow=''; }
  document.querySelectorAll('.proj[data-title]').forEach(function(c){
    c.addEventListener('click',function(){open(c);});
    c.addEventListener('keydown',function(ev){ if(ev.key==='Enter'||ev.key===' '){ ev.preventDefault(); open(c); } });
  });
  m.querySelector('.pm-bg').addEventListener('click',close);
  m.querySelector('.pm-close').addEventListener('click',close);
  document.addEventListener('keydown',function(ev){ if(ev.key==='Escape') close(); });
})();
</script>
<?php if ($page === 'brief'): ?>
<script>
/* Для запитів на кейси і на ферми габарити ангара, навантаження і доступ
   не мають сенсу. Ховаємо їх, значення полів при цьому не втрачаються:
   якщо користувач передумає і обере інший тип, усе повернеться як було. */
(function(){
  var sel = document.querySelector('select[name=btype]');
  if (!sel) return;
  var hide = /truss|ферм|кейс|skrzyn|pakowanie|cases|packaging/i;
  var secs = ['bf-dims','bf-loads','bf-access'].map(function(id){
    return document.getElementById(id);
  }).filter(Boolean);
  function apply(){
    var off = hide.test(sel.value || '');
    secs.forEach(function(el){ el.style.display = off ? 'none' : ''; });
  }
  sel.addEventListener('change', apply);
  apply();
})();
</script>
<script>
(function(){
  function set(id,v){ var el=document.getElementById(id); if(el && v!==undefined && v!==''){ el.value=v;
    el.classList.add('bf-hl'); setTimeout(function(){ el.classList.remove('bf-hl'); }, 1800); } }
  window.addEventListener('message', function(ev){
    if (ev.origin !== window.location.origin) return;
    var d = ev.data; if (!d || d.source !== 'covex3d' || d.type !== 'fill') return;
    set('bwidth', d.data.bwidth); set('blength', d.data.blength);
    set('bheight', d.data.bheight); set('bconfig', d.data.bconfig);
    var f = document.getElementById('brief-form');
    if (f) f.scrollIntoView({ behavior: 'smooth', block: 'start' });
  }, false);
})();
</script>
<?php endif; ?>
<script src="script.js?v=<?=filemtime(__DIR__."/script.js")?>"></script>
</body>
</html>
