{
    "component": {
        "id": 28,
        "name": "Sector NRES",
        "code": "sector_nres",
        "content": "{{-- ============================================================================\r\n     COMPONENT: Sector NRES — Teras Sektor / Bahagian & Unit\r\n     Kod    : sector_nres  ·  Komponen #baru (type=PHP, category=Section)\r\n     URL    : /nres/sector               → hub (4 sektor + 16 bahagian/unit)\r\n              /nres/sector?unit=<KOD>    → paparan bahagian/unit: 5 seksyen bertindan\r\n                                           (tiada tab — gaya scroll halaman MCEE)\r\n              /nres/sector?sektor=<GRP>  → hub ditapis ikut sektor\r\n\r\n     Page   : #42 \"Sector\" (site 2 · nres) → page_content = {!! $sector_nres !!}\r\n\r\n     Sumber data (modul sedia ada — TIADA jadual baru):\r\n       · ref (cat = NRES_DEPARTMENT)       → 16 bahagian/unit: code, descr (BM),\r\n                                             descr_en (EN), sort\r\n       · content_article (+ _translation)  → teks boleh sunting staf (kategori SEKTOR)\r\n                                             TIGA rekod bagi setiap bahagian/unit —\r\n                                             satu rekod = satu seksyen:\r\n                                               article_subcategory = PENGENALAN · PROGRAM ·\r\n                                                                     HALATUJU\r\n                                               article_code        = <KOD UNIT>-<SEKSYEN>\r\n                                                                     (cth BIO_FORESTRY-PROGRAM)\r\n                                               article_image       = gambar banner\r\n                                                                     (rekod PENGENALAN)\r\n                                             Setiap rekod mengandungi HTML Summernote dan\r\n                                             dirender TERUS ke dalam pane berkenaan\r\n                                             (gaya dalaman dari CSS .sec__rich) — templat\r\n                                             TIDAK lagi mengurai <h3>/<h4>/<li> menjadi\r\n                                             kad atau senarai. Konvensyen kandungan:\r\n                                               PENGENALAN = teks pembuka + <h3>Objektif</h3>\r\n                                                            + <h3>Fungsi Utama</h3>\r\n                                               PROGRAM    = <h4>nama</h4> + <p>huraian</p>\r\n                                               HALATUJU   = senarai <ul><li>\r\n                                             (Model lama: satu rekod <KOD UNIT> atau baris\r\n                                              <KOD>-INTRO/-POINT-n/-PROG-n/-TARGET-n masih\r\n                                              dibaca sebagai fallback.)\r\n       · content_downloads                 → dasar & perundangan ikut\r\n                                             download_category (BP/TUG/MG/PI/AS/URUS)\r\n       · content_applications              → jabatan & agensi (AGENCY_LINKS)\r\n       · content_application_translations  → nama penuh agensi (ms/en)\r\n       · $secDocsOfficial / $secServices   → senarai rasmi disalin daripada halaman\r\n                                             nres.gov.my/ms-my/teras/perhutanan\r\n                                             (panel DASAR & PERUNDANGAN + HALATUJU):\r\n                                             item rasmi dipaparkan dahulu, dokumen DB\r\n                                             ditambah selepasnya (tajuk bertindih dibuang)\r\n\r\n     Corak: sama macam PAGE_CONTENT/nres/publication.blade.php — SEMUA logik,\r\n     markup dan CSS dalam SATU fail (kelas .sec__*), BM/EN guna array (bukan t()).\r\n\r\n     Nota kandungan: teks PENGENALAN / PROGRAM / HALATUJU bagi bahagian yang belum\r\n     ada bahan rasmi akan papar nota \"sedang dikemaskini\" — tiada teks direka.\r\n     Bagi unit yang ADA rekod content_article (cth BIO_FORESTRY), teks + banner\r\n     diambil dari DB. Rekod disimpan ACTIVE tetapi kategori SEKTOR dikecualikan\r\n     daripada senarai awam; array di bawah jadi fallback bagi unit yang belum diisi.\r\n     Guna pada page lain: assign komponen ini + letak {!! $sector_nres !!}.\r\n     ============================================================================ --}}\r\n\r\n@php\r\n    $secLang = ($lang ?? session('locale', 'ms')) === 'en' ? 'en' : 'ms';\r\n    $secIsEn = $secLang === 'en';\r\n    $secSite = trim((string) ($siteSlug ?? ''), '/');\r\n    $secBase = url(($secSite !== '' ? $secSite.'/' : '').'sector');\r\n    $secHome = url($secSite !== '' ? $secSite.'/home' : '/');\r\n    $secPub = url(($secSite !== '' ? $secSite.'/' : '').'publication');\r\n    $secEserv = url(($secSite !== '' ? $secSite.'/' : '').'e-services');\r\n    $secToday = now()->toDateString();\r\n\r\n    /* --------------------------------------------------------------- sektor --- */\r\n    $secGroups = [\r\n        'SSA' => ['ms' => 'Sektor Sumber Asli', 'en' => 'Natural Resources Sector'],\r\n        'SKA' => ['ms' => 'Sektor Kelestarian Alam', 'en' => 'Nature Sustainability Sector'],\r\n        'SP' => ['ms' => 'Sektor Pengurusan', 'en' => 'Management Sector'],\r\n        'KSU' => ['ms' => 'Bahagian/Unit di Bawah KSU', 'en' => 'Divisions / Units Under KSU'],\r\n    ];\r\n\r\n    /* ------------------------------------------ peta unit → sektor/kat/agensi --- */\r\n    //  kod NRES_DEPARTMENT       sektor   kategori penerbitan   agensi berkaitan\r\n    $secMap = [\r\n        'BIO_FORESTRY' => ['grp' => 'SSA', 'kat' => 'BP', 'agn' => ['JPSM', 'PERHILITAN', 'FRIM']],\r\n        'LAND_GEOSPATIAL' => ['grp' => 'SSA', 'kat' => 'TUG', 'agn' => ['JUPEM', 'JKPTG', 'INSTUN', 'LJT']],\r\n        'MINERAL_GEOSCIENCE' => ['grp' => 'SSA', 'kat' => 'MG', 'agn' => ['JMG', 'BOG', 'TIMAH']],\r\n        'ENVIRONMENT' => ['grp' => 'SKA', 'kat' => 'AS', 'agn' => ['JAS', 'JBK']],\r\n        'CLIMATE' => ['grp' => 'SKA', 'kat' => 'PI', 'agn' => ['MET', 'MGTC']],\r\n        'ADMIN_SERVICE' => ['grp' => 'SP', 'kat' => 'URUS', 'agn' => []],\r\n        'HR' => ['grp' => 'SP', 'kat' => 'URUS', 'agn' => []],\r\n        'FINANCE_PROCUREMENT' => ['grp' => 'SP', 'kat' => 'URUS', 'agn' => []],\r\n        'INFO_MGMT' => ['grp' => 'SP', 'kat' => 'URUS', 'agn' => []],\r\n        'DEVELOPMENT' => ['grp' => 'SP', 'kat' => 'URUS', 'agn' => []],\r\n        'ACCOUNT' => ['grp' => 'SP', 'kat' => 'URUS', 'agn' => []],\r\n        'STRATEGIC' => ['grp' => 'KSU', 'kat' => 'URUS', 'agn' => ['YPASM', 'MFF', 'HIJAU']],\r\n        'INTERNAL_AUDIT' => ['grp' => 'KSU', 'kat' => 'URUS', 'agn' => []],\r\n        'LEGAL' => ['grp' => 'KSU', 'kat' => 'URUS', 'agn' => []],\r\n        'CORPORATE_COMMS' => ['grp' => 'KSU', 'kat' => 'URUS', 'agn' => []],\r\n        'INTEGRITY' => ['grp' => 'KSU', 'kat' => 'URUS', 'agn' => []],\r\n    ];\r\n\r\n    /* ----------------------- bersihkan nama: buang sisa \"(Agensi: …)\" --- */\r\n    // ref.descr / descr_en dipakai juga oleh borang lain (ContentFormExport),\r\n    // jadi di sini kita papar nama bersih SAHAJA. Hanya kurungan yang SEMUA\r\n    // tokennya kod agensi sah dibuang — cth \"(CDO)\" dikekalkan.\r\n    $secAgnCodes = DB::table('content_applications')\r\n        ->where('application_cat', 'AGENCY_LINKS')\r\n        ->pluck('application_code')\r\n        ->map(fn ($c) => strtoupper(trim((string) $c)))\r\n        ->filter()\r\n        ->values()\r\n        ->all();\r\n\r\n    $secClean = function ($name) use ($secAgnCodes) {\r\n        $name = trim((string) $name);\r\n\r\n        if (! preg_match('/^(.*?)\\s*\\(([^()]*)\\)\\s*$/u', $name, $secMatch)) {\r\n            return $name;\r\n        }\r\n\r\n        $secInner = preg_replace('/^\\s*(agensi|agency)\\s*:\\s*/iu', '', $secMatch[2]);\r\n        $secParts = array_values(array_filter(array_map(fn ($p) => strtoupper(trim($p)), explode(',', (string) $secInner))));\r\n\r\n        return ($secParts && ! array_diff($secParts, $secAgnCodes)) ? trim($secMatch[1]) : $name;\r\n    };\r\n\r\n    /* ------------------------------------------------------- senarai 16 unit --- */\r\n    $secUnits = [];\r\n\r\n    foreach (DB::table('ref')->where('cat', 'NRES_DEPARTMENT')->whereNull('deleted_at')\r\n        ->orderBy('sort')->orderBy('id')->get() as $secRef) {\r\n        $secCode = trim((string) $secRef->code);\r\n\r\n        if ($secCode === '' || ! isset($secMap[$secCode])) {\r\n            continue;\r\n        }\r\n\r\n        $secUnits[] = [\r\n            'code' => $secCode,\r\n            'name' => $secClean($secRef->descr),\r\n            'name_en' => $secClean($secRef->descr_en) ?: $secClean($secRef->descr),\r\n            'grp' => $secMap[$secCode]['grp'],\r\n            'kat' => $secMap[$secCode]['kat'],\r\n            'agn' => $secMap[$secCode]['agn'],\r\n        ];\r\n    }\r\n\r\n    $secLabel = fn (array $u) => $secIsEn ? $u['name_en'] : $u['name'];\r\n\r\n    $secGroupUnits = [];\r\n\r\n    foreach ($secUnits as $secU) {\r\n        $secGroupUnits[$secU['grp']][] = $secU;\r\n    }\r\n\r\n    /* ------------------------------------------------------- unit terpilih --- */\r\n    $secUnitCode = strtoupper(trim((string) request()->query('unit', '')));\r\n    $secUnit = null;\r\n\r\n    foreach ($secUnits as $secU) {\r\n        if ($secU['code'] === $secUnitCode) {\r\n            $secUnit = $secU;\r\n            break;\r\n        }\r\n    }\r\n\r\n    if ($secUnit === null) {\r\n        $secUnitCode = '';\r\n    }\r\n\r\n    $secGroupKey = strtoupper(trim((string) request()->query('sektor', '')));\r\n    $secGroupKey = isset($secGroups[$secGroupKey]) ? $secGroupKey : '';\r\n\r\n    /* ---------------- 5 seksyen bertindan (TIADA tab — gaya halaman MCEE) --- */\r\n    // Setiap seksyen dipaparkan berturutan (scroll panjang). id 'sec-pane-<id>'\r\n    // dan 'sec-tab-<id>' dikekalkan supaya pautan dalam (#sec-pane-program) dan\r\n    // jangkar tajuk masih berfungsi.\r\n    $secSectionTitles = [\r\n        'pengenalan' => ['ms' => 'Pengenalan', 'en' => 'Introduction'],\r\n        'dasar' => ['ms' => 'Dasar & Perundangan', 'en' => 'Policy & Legislation'],\r\n        'program' => ['ms' => 'Program', 'en' => 'Programme'],\r\n        'halatuju' => ['ms' => 'Halatuju & Sasaran', 'en' => 'Direction & Targets'],\r\n        'agensi' => ['ms' => 'Jabatan & Agensi', 'en' => 'Departments & Agencies'],\r\n    ];\r\n\r\n    /* -------------------------------- TEKS SEKTOR DARI DB (content_article) --- */\r\n    // Teks boleh disunting staf melalui Admin → Artikel (kategori SEKTOR).\r\n    //\r\n    // MODEL SEMASA — SATU rekod bagi setiap bahagian/unit:\r\n    //   article_code = <KOD UNIT> (cth BIO_FORESTRY) · article_subcategory = kod\r\n    //   unit · article_image = gambar banner · SELURUH teks dalam SATU dokumen\r\n    //   Summernote (article_translation_content) ikut konvensyen tajuk:\r\n    //\r\n    //     perenggan sebelum tajuk pertama         → Pengenalan (HTML)\r\n    //     <h3>Objektif</h3> + <ul><li>…           → senarai objektif\r\n    //     <h3>Fungsi Utama</h3> + <ul><li>…       → senarai fungsi utama\r\n    //     <h3>Program</h3> + <h4>Nama</h4> + <p>… → kad program (h4 = nama kad;\r\n    //                                               <a href> dalam h4 = pautan)\r\n    //     <h3>Halatuju & Sasaran</h3> + <ul>…     → senarai halatuju & sasaran\r\n    //\r\n    //   Tajuk BM & EN dikenali (Objektif/Objectives · Fungsi Utama/Main Functions ·\r\n    //   Program/Programme · Halatuju & Sasaran/Direction & Targets). Dokumen tanpa\r\n    //   tajuk dikenali →\r\n    //   semuanya dianggap Pengenalan (degradasi selamat).\r\n    //\r\n    // MODEL LAMA (keserasian) — baris blok berasingan <KOD>-INTRO · -POINT-n ·\r\n    //   -PROG-n · -TARGET-n masih dibaca jika rekod gabungan tiada.\r\n    //\r\n    // Jika tiada baris dalam DB → array lalai di bawah (fallback penuh, jadi\r\n    // tiada regresi bagi bahagian/unit yang belum diisi).\r\n    $secIntroDb = '';\r\n    $secIntroListDb = [];\r\n    $secIntroObjDb = [];\r\n    $secProgListDb = [];\r\n    $secTargetListDb = [];\r\n    $secBanner = '';\r\n    // Kandungan MENTAH setiap seksyen — dirender terus ke pane (gaya dari CSS .sec__rich)\r\n    $secIntroPaneDb = '';\r\n    $secProgPaneDb = '';\r\n    $secTargetPaneDb = '';\r\n\r\n    if ($secUnit !== null) {\r\n        $secPrefix = $secUnit['code'].'-';\r\n        $secUnitCode = strtoupper(trim((string) $secUnit['code']));\r\n        $secPlain = fn ($html) => trim((string) preg_replace('/\\s+/u', ' ', strip_tags((string) $html)));\r\n        $secPlainDec = fn ($html) => html_entity_decode($secPlain($html), ENT_QUOTES, 'UTF-8');\r\n\r\n        $secRows = DB::table('content_article')\r\n            ->where('article_category', 'SEKTOR')\r\n            ->where(function ($secQ) use ($secUnit, $secPrefix) {\r\n                // Model lama  : article_subcategory = <KOD UNIT> (satu rekod gabungan)\r\n                // Model baharu: article_code = <KOD UNIT>-<SEKSYEN> · subcategory = seksyen\r\n                $secQ->where('article_subcategory', $secUnit['code'])\r\n                    ->orWhere('article_code', 'like', $secPrefix.'%');\r\n            })\r\n            ->orderBy('article_sorting')\r\n            ->orderBy('article_id')\r\n            ->get();\r\n\r\n        $secIds = $secRows->pluck('article_id')->all();\r\n\r\n        $secTrs = $secIds\r\n            ? DB::table('content_article_translation')\r\n                ->whereIn('article_translation_parent_id', $secIds)\r\n                ->get()\r\n                ->groupBy('article_translation_parent_id')\r\n            : collect();\r\n\r\n        $secDocRow = $secRows->first(fn ($secRow) => strtoupper(trim((string) $secRow->article_code)) === $secUnitCode);\r\n\r\n        // ---- MODEL BAHARU: 3 rekod seksyen berasingan bagi setiap bahagian/unit ---\r\n        //   article_category    = SEKTOR\r\n        //   article_subcategory = PENGENALAN · PROGRAM · HALATUJU\r\n        //   article_code        = <KOD UNIT>-<SEKSYEN>  (cth BIO_FORESTRY-PROGRAM)\r\n        //\r\n        // Rekod-rekod ini dijahit jadi SATU dokumen (tajuk <h3> dijana automatik\r\n        // untuk PROGRAM & HALATUJU) supaya parser di bawah — yang sama seperti model\r\n        // gabungan — terus berfungsi. Tiada logik render bertindih.\r\n        // Objektif & Fungsi Utama kekal di dalam rekod PENGENALAN.\r\n        if ($secDocRow === null) {\r\n            $secSecKeys = ['PENGENALAN' => null, 'PROGRAM' => 'Program', 'HALATUJU' => 'Halatuju &amp; Sasaran'];\r\n            $secSecStrip = [\r\n                'PENGENALAN' => 'pengenalan|introduction',\r\n                'PROGRAM' => 'program',\r\n                'HALATUJU' => 'halatuju|sasaran|direction|target',\r\n            ];\r\n            $secSecRows = [];\r\n\r\n            foreach ($secRows as $secArt) {\r\n                $secArtCode = strtoupper(trim((string) $secArt->article_code));\r\n\r\n                if (! str_starts_with($secArtCode, $secPrefix)) {\r\n                    continue;\r\n                }\r\n\r\n                $secArtKey = substr($secArtCode, strlen($secPrefix));\r\n\r\n                if (array_key_exists($secArtKey, $secSecKeys)) {\r\n                    $secSecRows[$secArtKey] = $secArt;\r\n                }\r\n            }\r\n\r\n            if ($secSecRows) {\r\n                $secDocParts = [];\r\n                $secSecPanes = [];\r\n                $secBannerRaw = '';\r\n\r\n                foreach ($secSecKeys as $secSecKey => $secSecHeading) {\r\n                    if (! isset($secSecRows[$secSecKey])) {\r\n                        continue;\r\n                    }\r\n\r\n                    $secSecTrSet = $secTrs[$secSecRows[$secSecKey]->article_id] ?? collect();\r\n                    $secSecTr = $secSecTrSet->firstWhere('article_translation_language', $secLang) ?? $secSecTrSet->first();\r\n                    $secSecRaw = trim((string) ($secSecTr->article_translation_content ?? ''));\r\n\r\n                    if ($secBannerRaw === '') {\r\n                        $secBannerRaw = trim((string) $secSecRows[$secSecKey]->article_image);\r\n                    }\r\n\r\n                    if ($secSecRaw === '') {\r\n                        continue;\r\n                    }\r\n\r\n                    // Buang tajuk seksyen sendiri di awal kandungan (staf kadang\r\n                    // salin <h3>Program</h3> dsb) supaya tiada tajuk bertindih.\r\n                    // Hanya aras <= 3 — nama program (Heading 4) tidak disentuh.\r\n                    $secSecRaw = preg_replace_callback(\r\n                        '/^\\s*<h([1-6])\\b[^>]*>(.*?)<\\/h\\1>\\s*/is',\r\n                        function ($secSecHead) use ($secSecStrip, $secSecKey, $secPlain) {\r\n                            return (int) $secSecHead[1] <= 3 && preg_match('/('.$secSecStrip[$secSecKey].')/iu', $secPlain($secSecHead[2]))\r\n                                ? ''\r\n                                : $secSecHead[0];\r\n                        },\r\n                        $secSecRaw,\r\n                        1\r\n                    );\r\n                    $secSecRaw = trim((string) $secSecRaw);\r\n\r\n                    if ($secSecRaw === '') {\r\n                        continue;\r\n                    }\r\n\r\n                    $secSecPanes[$secSecKey] = $secSecRaw;\r\n                    $secDocParts[] = ($secSecHeading !== null ? '<h3>'.$secSecHeading.'</h3>'.\"\\n\" : '').$secSecRaw;\r\n                }\r\n\r\n                if ($secDocParts) {\r\n                    $secIntroPaneDb = $secSecPanes['PENGENALAN'] ?? '';\r\n                    $secProgPaneDb = $secSecPanes['PROGRAM'] ?? '';\r\n                    $secTargetPaneDb = $secSecPanes['HALATUJU'] ?? '';\r\n                    $secSyntheticId = -1;\r\n                    $secTrs[$secSyntheticId] = collect([(object) [\r\n                        'article_translation_language' => $secLang,\r\n                        'article_translation_content' => implode(\"\\n\\n\", $secDocParts),\r\n                    ]]);\r\n                    $secDocRow = (object) [\r\n                        'article_id' => $secSyntheticId,\r\n                        'article_code' => $secUnitCode,\r\n                        'article_image' => $secBannerRaw,\r\n                    ];\r\n                }\r\n            }\r\n        }\r\n\r\n        if ($secDocRow !== null) {\r\n            $secSet = $secTrs[$secDocRow->article_id] ?? collect();\r\n            $secTr = $secSet->firstWhere('article_translation_language', $secLang) ?? $secSet->first();\r\n            $secImg = trim((string) $secDocRow->article_image);\r\n\r\n            if ($secImg !== '') {\r\n                $secBanner = image_url($secImg);\r\n            }\r\n\r\n            $secDoc = (string) ($secTr->article_translation_content ?? '');\r\n            $secHeads = [];\r\n\r\n            if (preg_match_all('/<h([1-6])\\b[^>]*>(.*?)<\\/h\\1>/is', $secDoc, $secHeadHit, PREG_OFFSET_CAPTURE)) {\r\n                foreach ($secHeadHit[0] as $secHi => $secHit) {\r\n                    $secHeadText = mb_strtolower($secPlain($secHeadHit[2][$secHi][0]));\r\n                    $secKind = null;\r\n\r\n                    if (str_contains($secHeadText, 'objektif') || str_contains($secHeadText, 'objective')) {\r\n                        $secKind = 'objs';\r\n                    } elseif (str_contains($secHeadText, 'fungsi') || str_contains($secHeadText, 'function')) {\r\n                        $secKind = 'points';\r\n                    } elseif (str_contains($secHeadText, 'program')) {\r\n                        $secKind = 'progs';\r\n                    } elseif (str_contains($secHeadText, 'halatuju') || str_contains($secHeadText, 'sasaran') || str_contains($secHeadText, 'direction') || str_contains($secHeadText, 'target')) {\r\n                        $secKind = 'targets';\r\n                    }\r\n\r\n                    $secHeads[] = [\r\n                        'kind' => $secKind,\r\n                        'level' => (int) $secHeadHit[1][$secHi][0],\r\n                        'start' => $secHit[1],\r\n                        'end' => $secHit[1] + strlen($secHit[0]),\r\n                    ];\r\n                }\r\n            }\r\n\r\n            // Aras tajuk seksyen = aras terkecil antara tajuk yang diiktiraf. Tajuk\r\n            // yang lebih dalam (cth nama program <h4> di bawah <h3>Program</h3>)\r\n            // BUKAN sempadan seksyen — jadi \"Program Manusia dan Biosfera (MAB)\"\r\n            // tidak memotong seksyen Program.\r\n            $secLevel = null;\r\n\r\n            foreach ($secHeads as $secHead) {\r\n                if ($secHead['kind'] !== null) {\r\n                    $secLevel = $secLevel === null ? $secHead['level'] : min($secLevel, $secHead['level']);\r\n                }\r\n            }\r\n\r\n            $secLevel = $secLevel ?? 3;\r\n            $secSections = [];\r\n            $secStart = strlen($secDoc);\r\n\r\n            foreach ($secHeads as $secHi => $secHead) {\r\n                if ($secHead['kind'] === null || $secHead['level'] > $secLevel) {\r\n                    continue;\r\n                }\r\n\r\n                $secStart = min($secStart, $secHead['start']);\r\n                $secStop = strlen($secDoc);\r\n\r\n                foreach (array_slice($secHeads, $secHi + 1) as $secAfter) {\r\n                    if ($secAfter['kind'] !== null && $secAfter['level'] <= $secLevel) {\r\n                        $secStop = $secAfter['start'];\r\n                        break;\r\n                    }\r\n                }\r\n\r\n                $secSections[$secHead['kind']] = substr($secDoc, $secHead['end'], $secStop - $secHead['end']);\r\n            }\r\n\r\n            // Pengenalan = kandungan sebelum tajuk seksyen pertama.\r\n            $secIntroRaw = trim(substr($secDoc, 0, $secStart));\r\n\r\n            if ($secIntroRaw !== '') {\r\n                $secIntroDb = $secIntroRaw;\r\n            }\r\n\r\n            // objektif · fungsi utama & halatuju: senarai <li> (fallback perenggan <p>)\r\n            foreach (['objs' => 'obj', 'points' => 'intro', 'targets' => 'target'] as $secKind => $secTarget) {\r\n                if (! isset($secSections[$secKind])) {\r\n                    continue;\r\n                }\r\n\r\n                $secItems = [];\r\n\r\n                if (preg_match_all('/<li\\b[^>]*>(.*?)<\\/li>/is', $secSections[$secKind], $secLiHit)) {\r\n                    $secItems = $secLiHit[1];\r\n                } elseif (preg_match_all('/<p\\b[^>]*>(.*?)<\\/p>/is', $secSections[$secKind], $secPHit)) {\r\n                    $secItems = $secPHit[1];\r\n                }\r\n\r\n                foreach ($secItems as $secItem) {\r\n                    $secText = $secPlainDec($secItem);\r\n\r\n                    if ($secText === '') {\r\n                        continue;\r\n                    }\r\n\r\n                    if ($secTarget === 'intro') {\r\n                        $secIntroListDb[] = $secText;\r\n                    } elseif ($secTarget === 'obj') {\r\n                        $secIntroObjDb[] = $secText;\r\n                    } else {\r\n                        $secTargetListDb[] = $secText;\r\n                    }\r\n                }\r\n            }\r\n\r\n            // program: kad dari tajuk <h4..h6> (+ <a href> = pautan \"Maklumat lanjut\")\r\n            if (isset($secSections['progs'])) {\r\n                $secProgHtml = $secSections['progs'];\r\n                $secSubs = [];\r\n\r\n                if (preg_match_all('/<h([1-6])\\b[^>]*>(.*?)<\\/h\\1>/is', $secProgHtml, $secSubHit, PREG_OFFSET_CAPTURE)) {\r\n                    foreach ($secSubHit[0] as $secSi => $secSub) {\r\n                        if ((int) $secSubHit[1][$secSi][0] <= $secLevel) {\r\n                            continue;\r\n                        }\r\n\r\n                        $secSubs[] = [\r\n                            'start' => $secSub[1],\r\n                            'end' => $secSub[1] + strlen($secSub[0]),\r\n                            'inner' => $secSubHit[2][$secSi][0],\r\n                        ];\r\n                    }\r\n                }\r\n\r\n                // Fallback: jika staf guna senarai <li> (tiada tajuk kecil), setiap\r\n                // item jadi kad tanpa huraian.\r\n                if (! $secSubs && preg_match_all('/<li\\b[^>]*>(.*?)<\\/li>/is', $secProgHtml, $secLiProgHit)) {\r\n                    foreach ($secLiProgHit[1] as $secProgItem) {\r\n                        $secName = $secPlainDec($secProgItem);\r\n\r\n                        if ($secName === '') {\r\n                            continue;\r\n                        }\r\n\r\n                        $secProgListDb[] = [\r\n                            'name' => $secName,\r\n                            'body' => '',\r\n                            'url' => preg_match('/<a\\b[^>]*href\\s*=\\s*\"([^\"]+)\"/i', $secProgItem, $secProgHref) ? trim($secProgHref[1]) : '',\r\n                        ];\r\n                    }\r\n                }\r\n\r\n                foreach ($secSubs as $secSi => $secSub) {\r\n                    $secName = $secPlainDec($secSub['inner']);\r\n\r\n                    if ($secName === '') {\r\n                        continue;\r\n                    }\r\n\r\n                    $secHref = '';\r\n\r\n                    if (preg_match('/<a\\b[^>]*href\\s*=\\s*\"([^\"]+)\"/i', $secSub['inner'], $secHrefHit)\r\n                        || preg_match(\"/<a\\b[^>]*href\\s*=\\s*'([^']+)'/i\", $secSub['inner'], $secHrefHit)) {\r\n                        $secHref = trim($secHrefHit[1]);\r\n                    }\r\n\r\n                    $secNext = $secSubs[$secSi + 1]['start'] ?? strlen($secProgHtml);\r\n\r\n                    $secProgListDb[] = [\r\n                        'name' => $secName,\r\n                        'body' => $secPlainDec(substr($secProgHtml, $secSub['end'], $secNext - $secSub['end'])),\r\n                        'url' => $secHref,\r\n                    ];\r\n                }\r\n            }\r\n        }\r\n\r\n        /* -------- (b) model lama: baris blok <KOD>-INTRO/-POINT/-PROG/-TARGET -------- */\r\n        if ($secDocRow === null) {\r\n\r\n        foreach ($secRows as $secArt) {\r\n            $secArtCode = strtoupper(trim((string) $secArt->article_code));\r\n\r\n            if (! str_starts_with($secArtCode, $secPrefix)) {\r\n                continue;\r\n            }\r\n\r\n            $secKey = substr($secArtCode, strlen($secPrefix));\r\n            $secLegacyTr = $secTrs[$secArt->article_id] ?? collect();\r\n            $secTr = $secLegacyTr->firstWhere('article_translation_language', $secLang) ?? $secLegacyTr->first();\r\n\r\n            $secRaw = trim((string) ($secTr->article_translation_content ?? ''));\r\n            $secTitle = trim((string) ($secTr->article_translation_title ?? ''));\r\n            $secImg = trim((string) $secArt->article_image);\r\n\r\n            if ($secKey === 'INTRO') {\r\n                if ($secRaw !== '') {\r\n                    $secIntroDb = $secRaw;   // HTML (Summernote) → dirender {!! !!}\r\n                }\r\n\r\n                if ($secImg !== '') {\r\n                    $secBanner = image_url($secImg);\r\n                }\r\n            } elseif (preg_match('/^POINT-(\\d+)$/', $secKey, $secKeyMatch)) {\r\n                $secIntroListDb[(int) $secKeyMatch[1]] = $secPlain($secRaw);\r\n            } elseif (preg_match('/^PROG-(\\d+)$/', $secKey, $secKeyMatch)) {\r\n                $secProgListDb[(int) $secKeyMatch[1]] = [\r\n                    'name' => $secTitle !== '' ? $secTitle : $secArtCode,\r\n                    'body' => $secPlain($secRaw),\r\n                    'url' => trim((string) $secArt->article_url),\r\n                ];\r\n            } elseif (preg_match('/^TARGET-(\\d+)$/', $secKey, $secKeyMatch)) {\r\n                $secTargetListDb[(int) $secKeyMatch[1]] = $secPlain($secRaw);\r\n            }\r\n        }\r\n\r\n            ksort($secIntroListDb);\r\n            ksort($secProgListDb);\r\n            ksort($secTargetListDb);\r\n\r\n            $secIntroListDb = array_values(array_filter($secIntroListDb, fn ($secItem) => $secItem !== ''));\r\n            $secProgListDb = array_values(array_filter($secProgListDb, fn ($secItem) => $secItem['body'] !== ''));\r\n            $secTargetListDb = array_values(array_filter($secTargetListDb, fn ($secItem) => $secItem !== ''));\r\n        }\r\n    }\r\n\r\n    /* --------------------------------------------------- teks PENGENALAN --- */\r\n    // Nota: hanya bahagian yang sudah ada bahan rasmi diisi di sini; yang lain\r\n    // akan papar nota \"sedang dikemaskini\" (tiada teks direka).\r\n    $secIntro = [\r\n        'BIO_FORESTRY' => [\r\n            'ms' => 'Bahagian Pengurusan Biodiversiti dan Perhutanan menerajui pengurusan biodiversiti, perhutanan dan hidupan liar negara — merangkumi perancangan dasar, perundangan, pemuliharaan kawasan perlindungan, pengurusan hasil hutan serta penyelarasan jabatan dan agensi di bawahnya.',\r\n            'en' => 'The Biodiversity and Forestry Management Division leads the management of the nation\\'s biodiversity, forestry and wildlife — covering policy and legislative planning, conservation of protected areas, forest produce management and coordination of its departments and agencies.',\r\n        ],\r\n    ];\r\n\r\n    /* ------------------- teks OBJEKTIF (sumber: halaman rasmi NRES Perhutanan) --- */\r\n    // Imej rasmi BPBP-OBJ (tab PENGENALAN) — 3 objektif Bahagian Pengurusan\r\n    // Biodiversiti dan Perhutanan.\r\n    $secObjectives = [\r\n        'BIO_FORESTRY' => [\r\n            'ms' => [\r\n                'Mengekalkan 50% litupan kawasan berhutan negara.',\r\n                'Mengarusperdana pengurusan biodiversiti dan usaha konservasi hidupan liar.',\r\n                'Meluaskan Amalan Pengurusan Hutan Secara Berkekalan (PHSB).',\r\n            ],\r\n            'en' => [\r\n                'Maintaining 50% forested area cover of the country.',\r\n                'Mainstreaming biodiversity management and wildlife conservation efforts.',\r\n                'Expanding the practice of Sustainable Forest Management (SFM).',\r\n            ],\r\n        ],\r\n    ];\r\n\r\n    /* ------------- teks FUNGSI UTAMA (sumber: halaman rasmi NRES Perhutanan) --- */\r\n    // Imej rasmi BPBP-FUNGSI (tab PENGENALAN) — 3 fungsi utama.\r\n    $secIntroPoints = [\r\n        'BIO_FORESTRY' => [\r\n            'ms' => [\r\n                'Memantau, menyelaras dan menilai pelaksanaan dasar dan berkaitan pengurusan biodiversiti dan perhutanan.',\r\n                'Menggubal dasar, perundangan dan garis panduan berkaitan pengurusan biodiversiti dan perhutanan.',\r\n                'Merancang pelaksanaan aktiviti CEPA berkaitan pengurusan biodiversiti dan perhutanan.',\r\n            ],\r\n            'en' => [\r\n                'Monitoring, coordinating and evaluating the implementation of policies related to biodiversity and forestry management.',\r\n                'Formulating policies, legislation and guidelines related to biodiversity and forestry management.',\r\n                'Planning the implementation of CEPA activities related to biodiversity and forestry management.',\r\n            ],\r\n        ],\r\n    ];\r\n\r\n    /* ------------------------------------------------------ teks PROGRAM --- */\r\n    $secPrograms = [\r\n        'BIO_FORESTRY' => [\r\n            [\r\n                'name' => 'Tabung Amanah Konservasi Sumber Asli Nasional (NCTF)',\r\n                'name_en' => 'National Conservation Trust Fund (NCTF)',\r\n                'ms' => 'Tabung amanah bagi pembiayaan inisiatif pemuliharaan sumber asli dan biodiversiti negara.',\r\n                'en' => 'Trust fund financing national natural resource and biodiversity conservation initiatives.',\r\n                'url' => 'https://myforestfund.com.my/',\r\n            ],\r\n            [\r\n                'name' => 'Program Manusia dan Biosfera (MAB)',\r\n                'name_en' => 'Man and the Biosphere Programme (MAB)',\r\n                'ms' => 'Program UNESCO yang mengimbangi pemuliharaan biodiversiti dengan pembangunan sosioekonomi masyarakat setempat.',\r\n                'en' => 'A UNESCO programme balancing biodiversity conservation with the socio-economic development of local communities.',\r\n                'url' => 'https://www.unesco.org/en/mab',\r\n            ],\r\n            [\r\n                'name' => 'Insentif Kewangan Bagi Konservasi Biodiversiti Dan Hutan (EFT)',\r\n                'name_en' => 'Ecological Fiscal Transfer for Biodiversity Conservation (EFT)',\r\n                'ms' => 'Insentif kewangan kepada negeri bagi mengekalkan kawasan hutan dan biodiversiti.',\r\n                'en' => 'Financial incentives to states for maintaining forest areas and biodiversity.',\r\n                'url' => '',\r\n            ],\r\n        ],\r\n    ];\r\n\r\n    /* ------------------------------------------------ teks HALATUJU & SASARAN --- */\r\n    $secTargets = [\r\n        'BIO_FORESTRY' => [\r\n            'ms' => [\r\n                'Mengekalkan kawasan hutan selari dengan komitmen negara pada Sidang Kemuncak Bumi di Rio de Janeiro, Brazil pada tahun 1992 iaitu 50% kawasan hutan.',\r\n                'Melaksanakan peranan Malaysia sebagai negara parti kepada Convention on Biological Diversity melalui keupayaan kebangsaan dan penjagaan kepada kepentingan negara.',\r\n            ],\r\n            'en' => [\r\n                'Maintaining forest cover in line with the national commitment made at the Earth Summit in Rio de Janeiro, Brazil in 1992 — 50% forested area.',\r\n                'Fulfilling Malaysia\\'s role as a party to the Convention on Biological Diversity through national capability and safeguarding of national interests.',\r\n            ],\r\n        ],\r\n    ];\r\n\r\n    /* -------------- PERKHIDMATAN ikut jabatan/agensi (panel HALATUJU) --- */\r\n    // Sumber: halaman rasmi NRES Perhutanan — senarai perkhidmatan yang ditawarkan\r\n    // oleh jabatan/agensi di bawah bahagian ini (web part di bawah imej\r\n    // BPBP-HALATUJU). Kumpulan yang masih kosong di halaman rasmi (cth FRIM dengan\r\n    // placeholder \"________\") tidak dipaparkan.\r\n    $secServices = [\r\n        'BIO_FORESTRY' => [\r\n            [\r\n                'name' => 'Jabatan PERHILITAN',\r\n                'name_en' => 'Department of Wildlife and National Parks (PERHILITAN)',\r\n                'items' => [\r\n                    'Perlesenan',\r\n                    'Sewaan',\r\n                    'Khidmat Veterinar',\r\n                    'Pembiakan Komersial',\r\n                    'Kemudahan Rekreasi',\r\n                ],\r\n            ],\r\n            [\r\n                'name' => 'JPSM',\r\n                'name_en' => 'Forestry Department of Peninsular Malaysia (JPSM)',\r\n                'items' => [\r\n                    'Perlesenan (Pengeluaran Hasil)',\r\n                    'Perlesenan (Industri Kayu)',\r\n                    'Harga Kayu Balak',\r\n                    'Hari Bersama Pelanggan',\r\n                ],\r\n            ],\r\n        ],\r\n    ];\r\n\r\n    /* ---------- DASAR & PERUNDANGAN — senarai rasmi (panel DASAR) --- */\r\n    // Panel DASAR & PERUNDANGAN halaman rasmi nres.gov.my/ms-my/teras/perhutanan\r\n    // menyenaraikan dasar & perundangan sektor yang SEBAHAGIAN besarnya TIADA dalam\r\n    // content_downloads (kategori BP = penerbitan/jurnal). Senarai di bawah disalin\r\n    // daripada halaman rasmi (tajuk + kumpulan Dasar/Perundangan).\r\n    // Kumpulan mengikut panel rasmi: Dasar (6 item) · Perundangan (9 item).\r\n    //   url      → hanya jika fail rasmi wujud (disemak HTTP 200); '' → kad berpaut\r\n    //              ke senarai penerbitan kategori sektor (kelakuan sedia ada)\r\n    //   year     → tahun dokumen (dipaparkan sebagai meta kad)\r\n    //   title_en → hanya jika tajuk rasmi itu sendiri dwibahasa (BM / EN)\r\n    //   alias    → tajuk DB (content_downloads) yang digantikan item ini supaya\r\n    //              tiada kad bertindih (cth \"Dasar Perhutanan Malaysia (V2.0) BM\")\r\n    // Item rasmi dipaparkan DAHULU dalam setiap kumpulan, diikuti dokumen DB lain.\r\n    $secDocsOfficial = [\r\n        'BIO_FORESTRY' => [\r\n            ['kind' => 'pol', 'title' => 'Dasar Kepelbagaian Biologi Kebangsaan (DKBK) 2022-2030', 'title_en' => 'National Policy on Biological Diversity (NPBD 2022-2030)', 'year' => '2023', 'url' => '/ms-my/pustakamedia/Penerbitan/Dasar Kepelbagaian Biologi Kebangsaan (DKBK) 2022-2030.pdf', 'alias' => ['NPBD 2022-2030 (Spread View)']],\r\n            ['kind' => 'pol', 'title' => 'Dasar Kepelbagaian Biologi Kebangsaan 2016-2025', 'title_en' => 'National Policy on Biological Diversity (NPBD 2016 - 2025)', 'year' => '2016', 'url' => '/ms-my/pustakamedia/Penerbitan/National Policy on Biological Diversity 2016-2025.pdf'],\r\n            ['kind' => 'pol', 'title' => 'Dasar Kepelbagaian Biologi Kebangsaan 1998', 'title_en' => 'National Policy on Biological Diversity (NPBD 1998)', 'year' => '1998', 'url' => '/ms-my/pustakamedia/Penerbitan/Dasar Kepelbagaian Biologi Kebangsaan.pdf'],\r\n            ['kind' => 'pol', 'title' => 'Dasar Perhutanan Malaysia (Cetakan Ke-2)', 'year' => '2022', 'url' => '/ms-my/pustakamedia/Penerbitan/Dasar Perhutanan Malaysia (V2.0) BM.pdf', 'alias' => ['Dasar Perhutanan Malaysia (V2.0) BM']],\r\n            ['kind' => 'pol', 'title' => 'Dasar Perhutanan Malaysia', 'year' => '2021', 'url' => '/ms-my/pustakamedia/Penerbitan/Dasar Perhutanan Malaysia.pdf'],\r\n            ['kind' => 'pol', 'title' => 'Dasar Perhutanan Negara 1978 (Pindaan 1992)', 'year' => '1992', 'url' => '/ms-my/pustakamedia/Penerbitan/Dasar Perhutanan Negara.pdf'],\r\n            ['kind' => 'leg', 'title' => 'Akta Akses kepada Sumber Biologi dan Perkongsian Faedah 2017 [Akta 795]', 'year' => '2017', 'url' => ''],\r\n            ['kind' => 'leg', 'title' => 'Peraturan-Peraturan Akses kepada Sumber Biologi dan Perkongsian Faedah 2020', 'year' => '2020', 'url' => ''],\r\n            ['kind' => 'leg', 'title' => 'Akta Pemuliharaan Hidupan Liar 2010 (Akta 716)', 'year' => '2010', 'url' => ''],\r\n            ['kind' => 'leg', 'title' => 'Akta Taman Negara 1980', 'year' => '1980', 'url' => ''],\r\n            // (kumpulan \"JPSM\" dalam panel Perundangan rasmi)\r\n            ['kind' => 'leg', 'title' => 'Dasar Undang-Undang', 'year' => '', 'url' => ''],\r\n            ['kind' => 'leg', 'title' => 'Dasar Pemahaman Akta', 'year' => '', 'url' => ''],\r\n            ['kind' => 'leg', 'title' => 'Akta Perhutanan Negara 1984 (Pindaan 1993)', 'year' => '1984', 'url' => ''],\r\n            ['kind' => 'leg', 'title' => 'Akta Lembaga Penyelidikan Pembangunan Hutan Malaysia (MFRDB) 1985', 'year' => '1985', 'url' => ''],\r\n            ['kind' => 'leg', 'title' => 'Akta Perdagangan Antarabangsa Mengenai Spesies Terancam 2008', 'year' => '2008', 'url' => '/ms-my/pustakamedia/Penerbitan/Akta Perdagangan Antarabangsa Mengenai Spesies Terancam 2008.pdf'],\r\n        ],\r\n    ];\r\n\r\n    /* -------------------------------------------------- URL fail dokumen --- */\r\n    // Laluan relatif (cth /ms-my/pustakamedia/…/x.pdf) → URL penuh nres.gov.my\r\n    $secFileUrl = function ($file) {\r\n        $file = trim((string) $file);\r\n\r\n        if ($file === '') {\r\n            return '';\r\n        }\r\n\r\n        if (preg_match('#^https?://#i', $file)) {\r\n            return $file;\r\n        }\r\n\r\n        $parts = parse_url('https://www.nres.gov.my/'.ltrim($file, '/'));\r\n        $segments = array_map('rawurlencode', explode('/', (string) $parts['path']));\r\n\r\n        return $parts['scheme'].'://'.$parts['host'].implode('/', $segments);\r\n    };\r\n\r\n    $secWindowOk = function ($start, $end) use ($secToday) {\r\n        $ok = true;\r\n\r\n        if ($start !== null && $start !== '' && preg_match('/^\\d{4}-\\d{2}-\\d{2}/', (string) $start)) {\r\n            $ok = $ok && substr((string) $start, 0, 10) <= $secToday;\r\n        }\r\n\r\n        if ($end !== null && $end !== '' && preg_match('/^\\d{4}-\\d{2}-\\d{2}/', (string) $end)) {\r\n            $ok = $ok && substr((string) $end, 0, 10) >= $secToday;\r\n        }\r\n\r\n        return $ok;\r\n    };\r\n\r\n    /* ------------------------------- DASAR & PERUNDANGAN (content_downloads) --- */\r\n    $secDocs = ['pol' => [], 'leg' => [], 'oth' => []];\r\n\r\n    if ($secUnit !== null) {\r\n        foreach (DB::table('content_downloads')\r\n            ->where('download_category', $secUnit['kat'])\r\n            ->where('download_status', 'ACTIVE')\r\n            ->orderBy('download_sorting')\r\n            ->orderBy('download_id')\r\n            ->get() as $secDoc) {\r\n            $secTitle = trim((string) $secDoc->download_title);\r\n\r\n            if ($secTitle === '' || ! $secWindowOk($secDoc->download_start_date ?? null, $secDoc->download_end_date ?? null)) {\r\n                continue;\r\n            }\r\n\r\n            $secKind = preg_match('/\\b(akta|peraturan|undang-undang|sop)\\b/iu', $secTitle) ? 'leg'\r\n                : (preg_match('/\\b(dasar|policy|npbd|dkbk|pelan strategik|guidance)\\b/iu', $secTitle) ? 'pol' : 'oth');\r\n\r\n            $secDocs[$secKind][] = [\r\n                'title' => $secTitle,\r\n                'url' => $secFileUrl($secDoc->download_file),\r\n                'year' => preg_match('/^(\\d{4})/', trim((string) $secDoc->download_date), $secYm) ? $secYm[1] : '',\r\n            ];\r\n        }\r\n    }\r\n\r\n    /* ------------- gabung senarai rasmi (lihat $secDocsOfficial di atas) --- */\r\n    // Item rasmi di hadapan, dokumen DB yang bertindih (tajuk sama / 'alias')\r\n    // dibuang supaya tiada kad berulang. Jika unit tiada senarai rasmi → tiada\r\n    // perubahan pada senarai DB.\r\n    if ($secUnit !== null && ! empty($secDocsOfficial[$secUnit['code']])) {\r\n        $secOffRows = $secDocsOfficial[$secUnit['code']];\r\n        $secOffNorm = fn ($secOffText) => preg_replace('/[^a-z0-9]+/', '', mb_strtolower((string) $secOffText));\r\n\r\n        $secOffTitles = [];\r\n        $secOffAlias = [];\r\n\r\n        foreach ($secOffRows as $secOffRow) {\r\n            $secOffTitles[$secOffNorm($secOffRow['title'])] = true;\r\n\r\n            foreach ($secOffRow['alias'] ?? [] as $secOffAl) {\r\n                $secOffAlias[$secOffNorm($secOffAl)] = true;\r\n            }\r\n        }\r\n\r\n        $secOffDocs = ['pol' => [], 'leg' => [], 'oth' => []];\r\n\r\n        foreach ($secOffRows as $secOffRow) {\r\n            $secOffDocs[$secOffRow['kind']][] = [\r\n                'title' => $secIsEn ? ($secOffRow['title_en'] ?? $secOffRow['title']) : $secOffRow['title'],\r\n                'url' => $secFileUrl($secOffRow['url'] ?? ''),\r\n                'year' => (string) ($secOffRow['year'] ?? ''),\r\n            ];\r\n        }\r\n\r\n        foreach ($secDocs as $secKindKey => $secKindRows) {\r\n            foreach ($secKindRows as $secKindRow) {\r\n                $secKindNorm = $secOffNorm($secKindRow['title']);\r\n\r\n                if (isset($secOffTitles[$secKindNorm]) || isset($secOffAlias[$secKindNorm])) {\r\n                    continue;\r\n                }\r\n\r\n                $secOffDocs[$secKindKey][] = $secKindRow;\r\n            }\r\n        }\r\n\r\n        $secDocs = $secOffDocs;\r\n    }\r\n\r\n    $secDocTotal = count($secDocs['pol']) + count($secDocs['leg']) + count($secDocs['oth']);\r\n\r\n    /* -------------------------------- JABATAN & AGENSI (content_applications) --- */\r\n    $secAgnItems = [];\r\n\r\n    if ($secUnit !== null && $secUnit['agn']) {\r\n        $secAgnRows = DB::table('content_applications')\r\n            ->where('application_cat', 'AGENCY_LINKS')\r\n            ->where('application_status', 'ACTIVE')\r\n            ->whereIn('application_code', $secUnit['agn'])\r\n            ->orderBy('application_sort')\r\n            ->orderBy('application_id')\r\n            ->get();\r\n\r\n        $secAgnIds = $secAgnRows->pluck('application_id')->all();\r\n\r\n        $secAgnTr = $secAgnIds\r\n            ? DB::table('content_application_translations')\r\n                ->whereIn('application_translation_parent_id', $secAgnIds)\r\n                ->get()\r\n                ->groupBy('application_translation_parent_id')\r\n            : collect();\r\n\r\n        foreach ($secAgnRows as $secAgnRow) {\r\n            $secAgnT = $secAgnTr[$secAgnRow->application_id] ?? collect();\r\n\r\n            $secAgnName = trim((string) ($secAgnT->firstWhere('application_translation_language', $secLang)?->application_translation_title ?? ''))\r\n                ?: trim((string) ($secAgnT->first()?->application_translation_title ?? ''))\r\n                ?: trim((string) $secAgnRow->application_code);\r\n\r\n            $secAgnImg = trim((string) $secAgnRow->application_img);\r\n\r\n            $secAgnItems[] = [\r\n                'code' => trim((string) $secAgnRow->application_code),\r\n                'name' => $secAgnName,\r\n                'img' => $secAgnImg === ''\r\n                    ? ''\r\n                    : (preg_match('#^(https?:)?//#i', $secAgnImg) ? $secAgnImg : asset('storage/'.ltrim($secAgnImg, '/'))),\r\n                'url' => trim((string) $secAgnRow->application_url),\r\n            ];\r\n        }\r\n    }\r\n\r\n    $secNoData = $secIsEn\r\n        ? 'Information for this division is being updated. Please refer to the publications or contact us for details.'\r\n        : 'Maklumat bagi bahagian ini sedang dikemaskini. Sila rujuk penerbitan atau hubungi kami untuk maklumat lanjut.';\r\n@endphp\r\n\r\n<style>\r\n.sec__container{padding:26px 16px 40px}\r\n.sec__breadcrumb{display:flex;flex-wrap:wrap;align-items:center;gap:6px;margin:0 auto 14px;max-width:1080px;color:var(--bs-secondary-color);font-size:.8rem}\r\n.sec__breadcrumb a{color:var(--teal);font-weight:600;text-decoration:none}\r\n.sec__breadcrumb a:hover{text-decoration:underline}\r\n.sec__header{margin:0 auto 22px;max-width:1080px;text-align:center}\r\n.sec__header h1{margin:0 0 10px;color:var(--green);font-size:clamp(1.4rem,2.9vw,2rem);font-weight:800;line-height:1.25}\r\n.sec__lead{margin:0 auto;max-width:780px;color:var(--bs-secondary-color);font-size:.9rem;line-height:1.8}\r\n.sec__eyebrow{display:inline-block;margin-bottom:8px;padding:4px 12px;border-radius:999px;background:color-mix(in srgb,var(--teal) 14%,transparent);color:var(--teal);font-size:.7rem;font-weight:800;letter-spacing:.06em;text-transform:uppercase}\r\n/* ---- BANNER bahagian/unit: gambar dari content_article.article_image (artikel <KOD>-INTRO) ---- */\r\n.sec__hero{position:relative;display:flex;flex-direction:column;justify-content:space-between;gap:14px;min-height:clamp(200px,26vw,320px);padding:18px 22px 20px;margin:0 auto 22px;max-width:1080px;border-radius:18px;overflow:hidden;background-color:var(--green);background-position:center;background-size:cover;background-repeat:no-repeat;box-shadow:0 16px 34px color-mix(in srgb,var(--green) 22%,transparent)}\r\n.sec__hero::after{content:\"\";position:absolute;inset:0;background:linear-gradient(180deg,rgba(3,28,22,.12) 0%,rgba(3,28,22,.55) 58%,rgba(3,28,22,.86) 100%)}\r\n.sec__hero>*{position:relative;z-index:1}\r\n.sec__hero-kicker{align-self:flex-start;padding:5px 13px;border:1px solid rgba(255,255,255,.45);border-radius:999px;background:rgba(255,255,255,.16);color:#fff;font-size:.7rem;font-weight:800;letter-spacing:.06em;text-transform:uppercase}\r\n.sec__hero h1{align-self:flex-start;margin:0;max-width:780px;color:#fff;font-size:clamp(1.25rem,2.7vw,1.85rem);font-weight:800;line-height:1.3;text-shadow:0 2px 12px rgba(0,0,0,.45)}\r\n/* ---- teks kaya (HTML Summernote) dalam tab Pengenalan ---- */\r\n.sec__rich p{margin:0 0 12px}\r\n.sec__rich ul,.sec__rich ol{margin:0 0 12px;padding-left:20px}\r\n.sec__rich li{margin-bottom:6px}\r\n.sec__rich a{color:var(--teal);font-weight:600}\r\n.sec__rich img{max-width:100%;height:auto;border-radius:10px}\r\n.sec__rich>:first-child{margin-top:0}\r\n.sec__rich>:last-child{margin-bottom:0}\r\n/* ---- kandungan mentah Summernote (rekod artikel) — gaya meniru reka bentuk pane ---- */\r\n.sec__rich h1,.sec__rich h2,.sec__rich h3{margin:18px 0 8px;color:var(--green);font-size:.86rem;font-weight:800;letter-spacing:.03em;text-transform:uppercase}\r\n.sec__rich h4,.sec__rich h5,.sec__rich h6{margin:18px 0 0;padding:11px 14px;border:1px solid var(--line);border-bottom:0;border-radius:12px 12px 0 0;background:color-mix(in srgb,var(--fade) 55%,transparent);color:var(--ink);font-size:.88rem;font-weight:800;letter-spacing:0;text-transform:none}\r\n.sec__rich h4+p,.sec__rich h5+p,.sec__rich h6+p{margin:0 0 14px;padding:12px 14px;border:1px solid var(--line);border-radius:0 0 12px 12px;color:var(--bs-secondary-color)}\r\n.sec__rich h4 a,.sec__rich h5 a,.sec__rich h6 a{display:inline-block;margin-top:8px;padding:7px 14px;border:1px solid var(--teal);border-radius:10px;color:var(--teal);font-size:.78rem;font-weight:700;text-decoration:none}\r\n.sec__rich ul{list-style:none;margin:0 0 12px;padding-left:22px}\r\n.sec__rich ul>li{position:relative;margin-bottom:9px;padding-left:0;color:var(--bs-secondary-color);font-size:.85rem;line-height:1.75}\r\n.sec__rich ul>li::before{content:\"\";position:absolute;left:-16px;top:.62em;width:6px;height:6px;border-radius:50%;background:var(--teal)}\r\n.sec__rich ol{margin:0 0 12px;padding-left:24px}\r\n.sec__rich ol>li{margin-bottom:9px;color:var(--bs-secondary-color);font-size:.85rem;line-height:1.75}\r\n.sec__rich blockquote{margin:0 0 12px;padding-left:12px;border-left:4px solid var(--teal);color:var(--bs-secondary-color)}\r\n.sec__rich hr{margin:16px 0;border:0;border-top:1px solid var(--line)}\r\n.sec__rich table{width:100%;margin:0 0 12px;border-collapse:collapse;font-size:.82rem}\r\n.sec__rich th,.sec__rich td{padding:8px 10px;border:1px solid var(--line);text-align:left;color:var(--bs-secondary-color)}\r\n.sec__rich strong{color:var(--ink)}\r\n.sec__group{max-width:1080px;margin:0 auto 26px}\r\n.sec__group-title{display:flex;align-items:center;gap:9px;margin:0 0 12px;color:var(--green);font-size:.95rem;font-weight:800;letter-spacing:.02em;text-transform:uppercase}\r\n.sec__group-title::before{content:\"\";width:4px;height:18px;border-radius:2px;background:var(--teal)}\r\n.sec__grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(268px,1fr));gap:12px}\r\n.sec__card{display:flex;flex-direction:column;gap:6px;padding:14px 16px;border:1px solid var(--line);border-radius:14px;background:var(--bs-body-bg);color:var(--ink);text-decoration:none;transition:.18s}\r\n.sec__card:hover{border-color:var(--teal);box-shadow:0 6px 18px color-mix(in srgb,var(--teal) 14%,transparent);transform:translateY(-2px)}\r\n.sec__card-name{color:var(--ink);font-size:.86rem;font-weight:700;line-height:1.5}\r\n.sec__card:hover .sec__card-name{color:var(--teal)}\r\n.sec__card-meta{color:var(--bs-secondary-color);font-size:.72rem;font-weight:600}\r\n/* ---- seksyen bertindan (tiada tab) ---- */\r\n.sec__sections{max-width:1080px;margin:0 auto}\r\n.sec__section{scroll-margin-top:92px;padding:20px 22px;border:1px solid var(--line);border-radius:16px;background:var(--bs-body-bg)}\r\n.sec__section+.sec__section{margin-top:14px}\r\n.sec__section-title{display:flex;align-items:center;gap:9px;margin:0 0 14px;padding:0 0 10px;border-bottom:1px solid var(--line);color:var(--green);font-size:1rem;font-weight:800;line-height:1.4}\r\n.sec__section-title::before{content:\"\";flex:0 0 4px;width:4px;height:18px;border-radius:2px;background:var(--teal)}\r\n.sec__h2{margin:0 0 12px;color:var(--green);font-size:1rem;font-weight:800}\r\n.sec__h3{margin:16px 0 8px;color:var(--ink);font-size:.86rem;font-weight:800;letter-spacing:.03em;text-transform:uppercase}\r\n.sec__text{margin:0 0 12px;color:var(--bs-secondary-color);font-size:.87rem;line-height:1.85}\r\n.sec__points{margin:0;padding:0;list-style:none}\r\n.sec__points li{position:relative;margin-bottom:9px;padding-left:22px;color:var(--bs-secondary-color);font-size:.85rem;line-height:1.75}\r\n.sec__points li::before{content:\"\";position:absolute;left:6px;top:.62em;width:6px;height:6px;border-radius:50%;background:var(--teal)}\r\n.sec__docs{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:10px;margin:0 0 6px}\r\n.sec__doc{display:flex;gap:11px;padding:12px 14px;border:1px solid var(--line);border-radius:12px;background:var(--bs-body-bg);color:var(--ink);text-decoration:none;transition:.18s}\r\n.sec__doc:hover{border-color:var(--teal);background:color-mix(in srgb,var(--fade) 45%,transparent)}\r\n.sec__doc-ic{flex:0 0 30px;height:30px;border-radius:8px;background:color-mix(in srgb,var(--teal) 14%,transparent);color:var(--teal);display:inline-flex;align-items:center;justify-content:center;font-size:.66rem;font-weight:800}\r\n.sec__doc-name{color:var(--ink);font-size:.82rem;font-weight:600;line-height:1.55}\r\n.sec__doc:hover .sec__doc-name{color:var(--teal)}\r\n.sec__doc-meta{color:var(--bs-secondary-color);font-size:.7rem;font-weight:600}\r\n.sec__progs{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:12px}\r\n.sec__prog{padding:15px 17px;border:1px solid var(--line);border-left:4px solid var(--teal);border-radius:14px;background:var(--bs-body-bg)}\r\n.sec__prog-name{margin:0 0 7px;color:var(--ink);font-size:.86rem;font-weight:800;line-height:1.5}\r\n.sec__svcs{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:12px}\r\n.sec__svc{padding:14px 16px;border:1px solid var(--line);border-radius:14px;background:var(--bs-body-bg)}\r\n.sec__svc-name{margin:0 0 9px;color:var(--ink);font-size:.85rem;font-weight:800}\r\n.sec__svc .sec__points li{margin-bottom:6px;font-size:.82rem}\r\n.sec__svc .sec__points li:last-child{margin-bottom:0}\r\n.sec__agn-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(210px,1fr));gap:12px}\r\n.sec__agn{display:flex;align-items:center;gap:12px;padding:13px 15px;border:1px solid var(--line);border-radius:14px;background:var(--bs-body-bg);color:var(--ink);text-decoration:none;transition:.18s}\r\n.sec__agn:hover{border-color:var(--teal);transform:translateY(-2px)}\r\n.sec__agn-logo{flex:0 0 52px;height:52px;display:flex;align-items:center;justify-content:center;padding:5px;border-radius:10px;background:#fff;border:1px solid var(--line)}\r\n.sec__agn-logo img{max-width:100%;max-height:100%;object-fit:contain}\r\n.sec__agn-name{color:var(--ink);font-size:.8rem;font-weight:700;line-height:1.5}\r\n.sec__agn:hover .sec__agn-name{color:var(--teal)}\r\n.sec__actions{display:flex;flex-wrap:wrap;gap:9px;margin-top:14px}\r\n.sec__btn{display:inline-flex;align-items:center;gap:7px;padding:8px 16px;border:1px solid var(--teal);border-radius:999px;background:var(--teal);color:#fff;font-size:.78rem;font-weight:700;text-decoration:none;transition:.18s}\r\n.sec__btn:hover{background:var(--green);border-color:var(--green);color:#fff}\r\n.sec__btn--ghost{background:transparent;color:var(--teal)}\r\n.sec__btn--ghost:hover{background:color-mix(in srgb,var(--teal) 12%,transparent);color:var(--teal)}\r\n.sec__note{margin:0;padding:13px 15px;border:1px dashed var(--line);border-left:4px solid var(--teal);border-radius:12px;color:var(--bs-secondary-color);font-size:.83rem;line-height:1.8}\r\n.sec__back{display:inline-flex;align-items:center;gap:6px;margin:0 auto 12px;color:var(--teal);font-size:.78rem;font-weight:700;text-decoration:none}\r\n.sec__back:hover{text-decoration:underline}\r\n.sec__center{text-align:center}\r\n@media (max-width:600px){\r\n  .sec__container{padding:18px 12px 30px}\r\n  .sec__section{padding:16px 15px}\r\n  .sec__section-title{font-size:.92rem}\r\n}\r\n</style>\r\n\r\n<section class=\"sec\">\r\n    <div class=\"sec__container\">\r\n\r\n        {{-- ============================ BREADCRUMB ============================ --}}\r\n        <nav class=\"sec__breadcrumb\" aria-label=\"breadcrumb\">\r\n            <a href=\"{{ $secHome }}\">{{ $secIsEn ? 'Home' : 'Utama' }}</a>\r\n            <span>/</span>\r\n            @if ($secUnit !== null)\r\n                <a href=\"{{ $secBase }}\">{{ $secIsEn ? 'Sector' : 'Sektor' }}</a>\r\n                <span>/</span>\r\n                <span>{{ $secLabel($secUnit) }}</span>\r\n            @else\r\n                <span>{{ $secIsEn ? 'Sector' : 'Sektor' }}</span>\r\n            @endif\r\n        </nav>\r\n\r\n        @if ($secUnit === null)\r\n            {{-- ============================== HUB ============================== --}}\r\n            <header class=\"sec__header\">\r\n                <span class=\"sec__eyebrow\">{{ $secIsEn ? 'Ministry Structure' : 'Struktur Kementerian' }}</span>\r\n                <h1>{{ $secIsEn ? 'Sector' : 'Sektor' }}</h1>\r\n                <p class=\"sec__lead\">\r\n                    {{ $secIsEn\r\n                        ? 'Sectors, divisions and units of the Ministry of Natural Resources and Environmental Sustainability — each entry leads to its introduction, policies and legislation, programmes, direction and targets as well as its departments and agencies.'\r\n                        : 'Sektor, bahagian dan unit di bawah Kementerian Sumber Asli dan Kelestarian Alam — setiap satu memuatkan pengenalan, dasar & perundangan, program, halatuju & sasaran serta jabatan dan agensi berkaitan.' }}\r\n                </p>\r\n            </header>\r\n\r\n            @foreach ($secGroups as $secGrpCode => $secGrpLabels)\r\n                @php $secGrpUnits = $secGroupUnits[$secGrpCode] ?? []; @endphp\r\n\r\n                @if (! $secGrpUnits || ($secGroupKey !== '' && $secGroupKey !== $secGrpCode))\r\n                    @continue\r\n                @endif\r\n\r\n                <div class=\"sec__group\">\r\n                    <h2 class=\"sec__group-title\">{{ $secGrpLabels[$secLang] }}</h2>\r\n\r\n                    <div class=\"sec__grid\">\r\n                        @foreach ($secGrpUnits as $secCard)\r\n                            <a class=\"sec__card\" href=\"{{ $secBase.'?unit='.$secCard['code'] }}\">\r\n                                <span class=\"sec__card-name\">{{ $secLabel($secCard) }}</span>\r\n                                <span class=\"sec__card-meta\">{{ $secGrpLabels[$secLang] }}</span>\r\n                            </a>\r\n                        @endforeach\r\n                    </div>\r\n                </div>\r\n            @endforeach\r\n\r\n            <div class=\"sec__group sec__center\">\r\n                <div class=\"sec__actions\" style=\"justify-content:center\">\r\n                    <a class=\"sec__btn sec__btn--ghost\" href=\"{{ $secPub }}\">{{ $secIsEn ? 'Publications' : 'Penerbitan' }}</a>\r\n                    <a class=\"sec__btn sec__btn--ghost\" href=\"{{ $secEserv }}\">{{ $secIsEn ? 'e-Services' : 'e-Perkhidmatan' }}</a>\r\n                </div>\r\n            </div>\r\n        @else\r\n            {{-- ======================== BAHAGIAN / UNIT ======================== --}}\r\n            @php\r\n                $secGrpLabels = $secGroups[$secUnit['grp']] ?? null;\r\n                $secGrpLabel = $secGrpLabels[$secLang] ?? ($secIsEn ? 'Division / Unit' : 'Bahagian / Unit');\r\n                $secIntroText = $secIntroDb !== '' ? $secIntroDb : ($secIntro[$secUnit['code']][$secLang] ?? '');\r\n                $secIntroIsHtml = $secIntroDb !== '';   // DB = HTML Summernote · fallback = teks biasa (escape)\r\n                $secIntroList = $secIntroListDb ?: ($secIntroPoints[$secUnit['code']][$secLang] ?? []);\r\n                $secIntroObjList = $secIntroObjDb ?: ($secObjectives[$secUnit['code']][$secLang] ?? []);\r\n                $secProgList = $secProgListDb ?: array_map(fn ($secProgItem) => [\r\n                    'name' => $secIsEn ? ($secProgItem['name_en'] ?? $secProgItem['name']) : $secProgItem['name'],\r\n                    'body' => $secProgItem[$secLang] ?? '',\r\n                    'url' => $secProgItem['url'] ?? '',\r\n                ], $secPrograms[$secUnit['code']] ?? []);\r\n                $secTargetList = $secTargetListDb ?: ($secTargets[$secUnit['code']][$secLang] ?? []);\r\n                $secSvcList = array_values(array_filter(array_map(fn ($secSvcItem) => [\r\n                    'name' => $secIsEn ? ($secSvcItem['name_en'] ?? $secSvcItem['name']) : $secSvcItem['name'],\r\n                    'items' => $secSvcItem['items'] ?? [],\r\n                ], $secServices[$secUnit['code']] ?? []), fn ($secSvcItem) => $secSvcItem['items'] !== []));\r\n                $secPubKat = $secPub.'?kat='.$secUnit['kat'];\r\n            @endphp\r\n\r\n            {{-- ============ BANNER: gambar dari content_article.article_image ============ --}}\r\n            {{-- (artikel <KOD>-INTRO · jika tiada gambar → header lalai di bawah) --}}\r\n            @if ($secBanner !== '')\r\n                <div class=\"sec__hero\" style=\"background-image:url('{{ $secBanner }}')\">\r\n                    <span class=\"sec__hero-kicker\">{{ $secGrpLabel }}</span>\r\n                    <h1>{{ $secLabel($secUnit) }}</h1>\r\n                </div>\r\n            @else\r\n                <header class=\"sec__header\">\r\n                    <span class=\"sec__eyebrow\">{{ $secGrpLabel }}</span>\r\n                    <h1>{{ $secLabel($secUnit) }}</h1>\r\n                    @if ($secGrpLabels)\r\n                        <p class=\"sec__lead\">{{ $secGrpLabels[$secLang] }}</p>\r\n                    @endif\r\n                </header>\r\n            @endif\r\n\r\n            {{-- ========= 5 SEKSYEN BERTINDAN — TIADA TAB (gaya halaman MCEE) ========= --}}\r\n            {{-- Semua seksyen dipaparkan berturutan; id sec-pane-* / sec-tab-* dikekalkan --}}\r\n            {{-- supaya pautan jangkar lama (#sec-pane-program) masih melompat dengan betul. --}}\r\n            <div class=\"sec__sections\">\r\n\r\n                {{-- ========================== PENGENALAN ========================== --}}\r\n                <section class=\"sec__section\" id=\"sec-pane-pengenalan\" aria-labelledby=\"sec-tab-pengenalan\">\r\n                    <h2 class=\"sec__section-title\" id=\"sec-tab-pengenalan\">{{ $secSectionTitles['pengenalan'][$secLang] }}</h2>\r\n                    @if ($secIntroPaneDb !== '')\r\n                        {{-- Kandungan mentah Summernote (rekod PENGENALAN) — tajuk Objektif/Fungsi ikut apa yang ditaip --}}\r\n                        <div class=\"sec__rich\">{!! $secIntroPaneDb !!}</div>\r\n                    @endif\r\n                    @if ($secIntroPaneDb === '' && $secIntroText !== '')\r\n                        @if ($secIntroIsHtml)\r\n                            <div class=\"sec__text sec__rich\">{!! $secIntroText !!}</div>\r\n                        @else\r\n                            <p class=\"sec__text\">{{ $secIntroText }}</p>\r\n                        @endif\r\n                    @else\r\n                        <p class=\"sec__note\">{{ $secNoData }}</p>\r\n                    @endif\r\n\r\n                    @if ($secIntroPaneDb === '' && $secIntroObjList)\r\n                        <h3 class=\"sec__h3\">{{ $secIsEn ? 'Objectives' : 'Objektif' }}</h3>\r\n                        <ul class=\"sec__points\">\r\n                            @foreach ($secIntroObjList as $secObj)\r\n                                <li>{{ $secObj }}</li>\r\n                            @endforeach\r\n                        </ul>\r\n                    @endif\r\n\r\n                    @if ($secIntroPaneDb === '' && $secIntroList)\r\n                        <h3 class=\"sec__h3\">{{ $secIsEn ? 'Main functions' : 'Fungsi utama' }}</h3>\r\n                        <ul class=\"sec__points\">\r\n                            @foreach ($secIntroList as $secPt)\r\n                                <li>{{ $secPt }}</li>\r\n                            @endforeach\r\n                        </ul>\r\n                    @endif\r\n\r\n                    <div class=\"sec__actions\">\r\n                        <a class=\"sec__btn sec__btn--ghost\" href=\"{{ $secBase }}\">← {{ $secIsEn ? 'All sectors' : 'Semua sektor' }}</a>\r\n                    </div>\r\n                </section>\r\n\r\n                {{-- ====================== DASAR & PERUNDANGAN ====================== --}}\r\n                <section class=\"sec__section\" id=\"sec-pane-dasar\" aria-labelledby=\"sec-tab-dasar\">\r\n                    <h2 class=\"sec__section-title\" id=\"sec-tab-dasar\">{{ $secSectionTitles['dasar'][$secLang] }}</h2>\r\n                    @if ($secDocTotal > 0)\r\n                        @foreach (['pol' => ($secIsEn ? 'Policy' : 'Dasar'), 'leg' => ($secIsEn ? 'Legislation' : 'Perundangan'), 'oth' => ($secIsEn ? 'Guidelines & Other Documents' : 'Garis Panduan & Dokumen Lain')] as $secKindKey => $secKindLabel)\r\n                            @if (! empty($secDocs[$secKindKey]))\r\n                                <h3 class=\"sec__h3\">{{ $secKindLabel }} <span style=\"color:var(--bs-secondary-color)\">({{ count($secDocs[$secKindKey]) }})</span></h3>\r\n                                <div class=\"sec__docs\">\r\n                                    @foreach ($secDocs[$secKindKey] as $secDoc)\r\n                                        <a class=\"sec__doc\" href=\"{{ $secDoc['url'] !== '' ? $secDoc['url'] : $secPubKat }}\"\r\n                                           @if ($secDoc['url'] !== '') target=\"_blank\" rel=\"noopener\" @endif>\r\n                                            <span class=\"sec__doc-ic\">PDF</span>\r\n                                            <span>\r\n                                                <span class=\"sec__doc-name\">{{ $secDoc['title'] }}</span>\r\n                                                <span class=\"sec__doc-meta\">{{ $secDoc['year'] !== '' ? $secDoc['year'] : ($secIsEn ? 'Document' : 'Dokumen') }}</span>\r\n                                            </span>\r\n                                        </a>\r\n                                    @endforeach\r\n                                </div>\r\n                            @endif\r\n                        @endforeach\r\n                    @else\r\n                        <p class=\"sec__note\">{{ $secNoData }}</p>\r\n                    @endif\r\n\r\n                    <div class=\"sec__actions\">\r\n                        <a class=\"sec__btn\" href=\"{{ $secPubKat }}\">{{ $secIsEn ? 'All publications for this sector' : 'Semua penerbitan sektor ini' }}</a>\r\n                    </div>\r\n                </section>\r\n\r\n                {{-- ============================= PROGRAM ============================= --}}\r\n                <section class=\"sec__section\" id=\"sec-pane-program\" aria-labelledby=\"sec-tab-program\">\r\n                    <h2 class=\"sec__section-title\" id=\"sec-tab-program\">{{ $secSectionTitles['program'][$secLang] }}</h2>\r\n                    @if ($secProgPaneDb !== '')\r\n                        {{-- Kandungan mentah Summernote (rekod PROGRAM) --}}\r\n                        <div class=\"sec__rich\">{!! $secProgPaneDb !!}</div>\r\n                    @endif\r\n                    @if ($secProgPaneDb === '' && $secProgList)\r\n                        <div class=\"sec__progs\">\r\n                            @foreach ($secProgList as $secProg)\r\n                                <div class=\"sec__prog\">\r\n                                    <p class=\"sec__prog-name\">{{ $secProg['name'] }}</p>\r\n                                    <p class=\"sec__text\" style=\"margin-bottom:0\">{{ $secProg['body'] }}</p>\r\n                                    @if (($secProg['url'] ?? '') !== '')\r\n                                        <div class=\"sec__actions\">\r\n                                            <a class=\"sec__btn sec__btn--ghost\" href=\"{{ $secProg['url'] }}\" target=\"_blank\" rel=\"noopener\">{{ $secIsEn ? 'More info' : 'Maklumat lanjut' }}</a>\r\n                                        </div>\r\n                                    @endif\r\n                                </div>\r\n                            @endforeach\r\n                        </div>\r\n                    @else\r\n                        <p class=\"sec__note\">{{ $secNoData }}</p>\r\n                    @endif\r\n                </section>\r\n\r\n                {{-- ======================== HALATUJU & SASARAN ======================== --}}\r\n                <section class=\"sec__section\" id=\"sec-pane-halatuju\" aria-labelledby=\"sec-tab-halatuju\">\r\n                    <h2 class=\"sec__section-title\" id=\"sec-tab-halatuju\">{{ $secSectionTitles['halatuju'][$secLang] }}</h2>\r\n                    @if ($secTargetPaneDb !== '')\r\n                        {{-- Kandungan mentah Summernote (rekod HALATUJU) --}}\r\n                        <div class=\"sec__rich\">{!! $secTargetPaneDb !!}</div>\r\n                    @endif\r\n                    @if ($secTargetPaneDb === '' && $secTargetList)\r\n                        <ul class=\"sec__points\">\r\n                            @foreach ($secTargetList as $secTarget)\r\n                                <li>{{ $secTarget }}</li>\r\n                            @endforeach\r\n                        </ul>\r\n                    @else\r\n                        <p class=\"sec__note\">{{ $secNoData }}</p>\r\n                    @endif\r\n\r\n                    @if ($secSvcList)\r\n                        <h3 class=\"sec__h3\">{{ $secIsEn ? 'Services' : 'Perkhidmatan' }}</h3>\r\n                        <div class=\"sec__svcs\">\r\n                            @foreach ($secSvcList as $secSvc)\r\n                                <div class=\"sec__svc\">\r\n                                    <p class=\"sec__svc-name\">{{ $secSvc['name'] }}</p>\r\n                                    <ul class=\"sec__points\">\r\n                                        @foreach ($secSvc['items'] as $secSvcItem)\r\n                                            <li>{{ $secSvcItem }}</li>\r\n                                        @endforeach\r\n                                    </ul>\r\n                                </div>\r\n                            @endforeach\r\n                        </div>\r\n                    @endif\r\n                </section>\r\n\r\n                {{-- ======================== JABATAN & AGENSI ======================== --}}\r\n                <section class=\"sec__section\" id=\"sec-pane-agensi\" aria-labelledby=\"sec-tab-agensi\">\r\n                    <h2 class=\"sec__section-title\" id=\"sec-tab-agensi\">{{ $secSectionTitles['agensi'][$secLang] }}</h2>\r\n                    @if ($secAgnItems)\r\n                        <div class=\"sec__agn-grid\">\r\n                            @foreach ($secAgnItems as $secAgn)\r\n                                <a class=\"sec__agn\" href=\"{{ $secAgn['url'] !== '' ? $secAgn['url'] : $secEserv }}\"\r\n                                   @if ($secAgn['url'] !== '') target=\"_blank\" rel=\"noopener\" @endif>\r\n                                    <span class=\"sec__agn-logo\">\r\n                                        @if ($secAgn['img'] !== '')\r\n                                            <img src=\"{{ $secAgn['img'] }}\" alt=\"{{ $secAgn['name'] }}\" loading=\"lazy\">\r\n                                        @else\r\n                                            <span style=\"color:var(--teal);font-size:.68rem;font-weight:800\">{{ $secAgn['code'] }}</span>\r\n                                        @endif\r\n                                    </span>\r\n                                    <span class=\"sec__agn-name\">{{ $secAgn['name'] }}</span>\r\n                                </a>\r\n                            @endforeach\r\n                        </div>\r\n                    @else\r\n                        <p class=\"sec__note\">{{ $secIsEn ? 'Agency links for this division are being updated.' : 'Pautan agensi bagi bahagian ini sedang dikemaskini.' }}</p>\r\n                    @endif\r\n\r\n                    <div class=\"sec__actions\">\r\n                        <a class=\"sec__btn sec__btn--ghost\" href=\"{{ $secEserv }}\">{{ $secIsEn ? 'e-Services' : 'e-Perkhidmatan' }}</a>\r\n                    </div>\r\n                </section>\r\n\r\n            </div>{{-- /sec__sections --}}\r\n\r\n            <script>\r\n            (function () {\r\n              var hash = (window.location.hash || '').replace(/^#/, '');\r\n              if (!hash) { return; }\r\n              var el = document.getElementById(hash) || document.getElementById('sec-pane-' + hash);\r\n              if (!el) { return; }\r\n              el.scrollIntoView({ block: 'start', behavior: 'smooth' });\r\n            })();\r\n            </script>\r\n        @endif\r\n    </div>\r\n</section>\r\n",
        "type": "PHP",
        "category": "Section",
        "status": 1,
        "created_at": "2026-10-31 22:51:50",
        "updated_at": "2026-11-01 03:09:42"
    },
    "page": {
        "id": 42,
        "name": "Sector",
        "slug": "sector",
        "page_content": "{{-- Page: Sektor — hub + ?unit=<kod>. Logik penuh dalam komponen sector_nres. --}}\r\n{!! $sector_nres !!}\r\n"
    },
    "menu": [
        {
            "menu_id": 29,
            "menu_name": "Sektor",
            "menu_status": 1,
            "menu_class": null,
            "menu_field_id": null,
            "menu_link": "/nres/sector",
            "menu_icon": null,
            "menu_descr": null,
            "menu_img": null,
            "menu_parent_id": 0,
            "created_at": "2026-10-23 16:19:38",
            "updated_at": "2026-11-01 03:09:42"
        },
        {
            "menu_id": 31,
            "menu_name": "Bahagian Pengurusan Biodiversiti dan Perhutanan",
            "menu_status": 1,
            "menu_class": null,
            "menu_field_id": null,
            "menu_link": "/nres/sector?unit=BIO_FORESTRY",
            "menu_icon": null,
            "menu_descr": null,
            "menu_img": null,
            "menu_parent_id": 30,
            "created_at": "2026-10-23 16:19:38",
            "updated_at": "2026-11-01 03:09:42"
        },
        {
            "menu_id": 32,
            "menu_name": "Bahagian Tanah, Ukur dan Geospatial",
            "menu_status": 1,
            "menu_class": null,
            "menu_field_id": null,
            "menu_link": "/nres/sector?unit=LAND_GEOSPATIAL",
            "menu_icon": null,
            "menu_descr": null,
            "menu_img": null,
            "menu_parent_id": 30,
            "created_at": "2026-10-23 16:19:38",
            "updated_at": "2026-11-01 03:09:42"
        },
        {
            "menu_id": 33,
            "menu_name": "Bahagian Mineral dan Geosains",
            "menu_status": 1,
            "menu_class": null,
            "menu_field_id": null,
            "menu_link": "/nres/sector?unit=MINERAL_GEOSCIENCE",
            "menu_icon": null,
            "menu_descr": null,
            "menu_img": null,
            "menu_parent_id": 30,
            "created_at": "2026-10-23 16:19:38",
            "updated_at": "2026-11-01 03:09:42"
        },
        {
            "menu_id": 35,
            "menu_name": "Bahagian Pengurusan Alam Sekitar",
            "menu_status": 1,
            "menu_class": null,
            "menu_field_id": null,
            "menu_link": "/nres/sector?unit=ENVIRONMENT",
            "menu_icon": null,
            "menu_descr": null,
            "menu_img": null,
            "menu_parent_id": 34,
            "created_at": "2026-10-23 16:19:38",
            "updated_at": "2026-11-01 03:09:42"
        },
        {
            "menu_id": 36,
            "menu_name": "Bahagian Perubahan Iklim",
            "menu_status": 1,
            "menu_class": null,
            "menu_field_id": null,
            "menu_link": "/nres/sector?unit=CLIMATE",
            "menu_icon": null,
            "menu_descr": null,
            "menu_img": null,
            "menu_parent_id": 34,
            "created_at": "2026-10-23 16:19:38",
            "updated_at": "2026-11-01 03:09:43"
        },
        {
            "menu_id": 60,
            "menu_name": "Bahagian Khidmat Pengurusan",
            "menu_status": 1,
            "menu_class": null,
            "menu_field_id": null,
            "menu_link": "/nres/sector?unit=ADMIN_SERVICE",
            "menu_icon": null,
            "menu_descr": null,
            "menu_img": null,
            "menu_parent_id": 37,
            "created_at": "2026-10-24 17:58:12",
            "updated_at": "2026-11-01 03:09:43"
        },
        {
            "menu_id": 61,
            "menu_name": "Bahagian Pengurusan Sumber Manusia",
            "menu_status": 1,
            "menu_class": null,
            "menu_field_id": null,
            "menu_link": "/nres/sector?unit=HR",
            "menu_icon": null,
            "menu_descr": null,
            "menu_img": null,
            "menu_parent_id": 37,
            "created_at": "2026-10-24 17:58:40",
            "updated_at": "2026-11-01 03:09:43"
        },
        {
            "menu_id": 62,
            "menu_name": "Bahagian Kewangan dan Perolehan",
            "menu_status": 1,
            "menu_class": null,
            "menu_field_id": null,
            "menu_link": "/nres/sector?unit=FINANCE_PROCUREMENT",
            "menu_icon": null,
            "menu_descr": null,
            "menu_img": null,
            "menu_parent_id": 37,
            "created_at": "2026-10-24 17:58:40",
            "updated_at": "2026-11-01 03:09:43"
        },
        {
            "menu_id": 63,
            "menu_name": "Bahagian Pengurusan Maklumat",
            "menu_status": 1,
            "menu_class": null,
            "menu_field_id": null,
            "menu_link": "/nres/sector?unit=INFO_MGMT",
            "menu_icon": null,
            "menu_descr": null,
            "menu_img": null,
            "menu_parent_id": 37,
            "created_at": "2026-10-24 17:58:40",
            "updated_at": "2026-11-01 03:09:43"
        },
        {
            "menu_id": 64,
            "menu_name": "Bahagian Pembangunan",
            "menu_status": 1,
            "menu_class": null,
            "menu_field_id": null,
            "menu_link": "/nres/sector?unit=DEVELOPMENT",
            "menu_icon": null,
            "menu_descr": null,
            "menu_img": null,
            "menu_parent_id": 37,
            "created_at": "2026-10-24 17:58:40",
            "updated_at": "2026-11-01 03:09:43"
        },
        {
            "menu_id": 65,
            "menu_name": "Bahagian Akaun",
            "menu_status": 1,
            "menu_class": null,
            "menu_field_id": null,
            "menu_link": "/nres/sector?unit=ACCOUNT",
            "menu_icon": null,
            "menu_descr": null,
            "menu_img": null,
            "menu_parent_id": 37,
            "created_at": "2026-10-24 17:58:40",
            "updated_at": "2026-11-01 03:09:43"
        },
        {
            "menu_id": 66,
            "menu_name": "Bahagian Perancangan Strategik dan Hubungan Antarabangsa",
            "menu_status": 1,
            "menu_class": null,
            "menu_field_id": null,
            "menu_link": "/nres/sector?unit=STRATEGIC",
            "menu_icon": null,
            "menu_descr": null,
            "menu_img": null,
            "menu_parent_id": 38,
            "created_at": "2026-10-24 17:58:40",
            "updated_at": "2026-11-01 03:09:43"
        },
        {
            "menu_id": 67,
            "menu_name": "Unit Audit Dalam",
            "menu_status": 1,
            "menu_class": null,
            "menu_field_id": null,
            "menu_link": "/nres/sector?unit=INTERNAL_AUDIT",
            "menu_icon": null,
            "menu_descr": null,
            "menu_img": null,
            "menu_parent_id": 38,
            "created_at": "2026-10-24 17:58:40",
            "updated_at": "2026-11-01 03:09:43"
        },
        {
            "menu_id": 68,
            "menu_name": "Pejabat Penasihat Undang-Undang",
            "menu_status": 1,
            "menu_class": null,
            "menu_field_id": null,
            "menu_link": "/nres/sector?unit=LEGAL",
            "menu_icon": null,
            "menu_descr": null,
            "menu_img": null,
            "menu_parent_id": 38,
            "created_at": "2026-10-24 17:58:40",
            "updated_at": "2026-11-01 03:09:43"
        },
        {
            "menu_id": 69,
            "menu_name": "Unit Komunikasi Korporat",
            "menu_status": 1,
            "menu_class": null,
            "menu_field_id": null,
            "menu_link": "/nres/sector?unit=CORPORATE_COMMS",
            "menu_icon": null,
            "menu_descr": null,
            "menu_img": null,
            "menu_parent_id": 38,
            "created_at": "2026-10-24 17:58:40",
            "updated_at": "2026-11-01 03:09:43"
        },
        {
            "menu_id": 70,
            "menu_name": "Unit Integriti",
            "menu_status": 1,
            "menu_class": null,
            "menu_field_id": null,
            "menu_link": "/nres/sector?unit=INTEGRITY",
            "menu_icon": null,
            "menu_descr": null,
            "menu_img": null,
            "menu_parent_id": 38,
            "created_at": "2026-10-24 17:58:40",
            "updated_at": "2026-11-01 03:09:43"
        }
    ]
}