{
    "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                                             SATU rekod bagi setiap bahagian/unit:\r\n                                               article_category    = SEKTOR\r\n                                               article_code        = <KOD BAHAGIAN>\r\n                                                                     (cth BIO_FORESTRY —\r\n                                                                      dari ref NRES_DEPARTMENT)\r\n                                               article_subcategory = kosong\r\n                                               article_image       = gambar banner\r\n                                             article_translation_content = SATU dokumen\r\n                                             Summernote (BM/EN) mengandungi semua seksyen.\r\n                                             Ia dipecah kepada pane halaman oleh tajuk:\r\n                                               (sebelum <h3>Program</h3>)     → Pengenalan\r\n                                                 (termasuk <h3>Objektif</h3> &\r\n                                                  <h3>Fungsi Utama</h3>)\r\n                                               <h3>Program</h3> / <h3>Programme</h3>\r\n                                                 <h4>nama</h4> + <p>huraian</p> → Program\r\n                                               <h3>Halatuju & Sasaran</h3> /\r\n                                               <h3>Direction & Targets</h3>   → Halatuju\r\n                                             Setiap bahagian dirender TERUS (gaya dari CSS\r\n                                             .sec__rich) — tiada transformasi kad/senarai.\r\n                                             Borang menyediakan butang \"+ Insert standard\r\n                                             structure\" untuk menjana struktur ini (lihat\r\n                                             partial _sector-editor.blade.php).\r\n                                             (Model lama masih dibaca sebagai fallback:\r\n                                              article_subcategory = <KOD UNIT> · article_code\r\n                                              = <KOD UNIT>-<SEKSYEN> · baris <KOD>-INTRO dsb.)\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       · ref (cat = NRES_SECTOR)           → kumpulan sektor (SSA/SKA/SP/KSU)\r\n       · ref (cat = NRES_UNIT_PUB)         → unit → kategori penerbitan (kat)\r\n       · ref (cat = NRES_UNIT_AGENCY)      → unit → kod agensi (parent = kod unit)\r\n       · ref (cat = NRES_SECTOR_UI)        → teks/label antara muka halaman sektor\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: SEMUA teks (Pengenalan / Program / Halatuju) datang dari\r\n     content_article (kategori SEKTOR) — TIADA array fallback dalam kod. Unit yang\r\n     belum diisi akan papar nota \"sedang dikemaskini\". Rekod disimpan ACTIVE tetapi\r\n     kategori SEKTOR dikecualikan daripada senarai awam.\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    /* -------------------------------------- teks UI dari ref NRES_SECTOR_UI --- */\r\n    // Semua label/teks antara muka boleh diubah dari DB tanpa deploy:\r\n    //   code = kunci · descr = BM · descr_en = EN\r\n    $secUi = [];\r\n\r\n    foreach (DB::table('ref')->where('cat', 'NRES_SECTOR_UI')->whereNull('deleted_at')->get() as $secUiRow) {\r\n        $secUiKey = strtoupper(trim((string) $secUiRow->code));\r\n\r\n        if ($secUiKey === '') {\r\n            continue;\r\n        }\r\n\r\n        $secUi[$secUiKey] = [\r\n            'ms' => trim((string) $secUiRow->descr),\r\n            'en' => trim((string) ($secUiRow->descr_en ?: $secUiRow->descr)),\r\n        ];\r\n    }\r\n\r\n    // Pulangkan ['ms' => …, 'en' => …] — DB diutamakan; fallback kod = jaring keselamatan.\r\n    $secUiText = function (string $secUiKey, string $secUiMs, string $secUiEn) use ($secUi) {\r\n        $secUiRow = $secUi[strtoupper($secUiKey)] ?? null;\r\n\r\n        return [\r\n            'ms' => ($secUiRow['ms'] ?? '') !== '' ? $secUiRow['ms'] : $secUiMs,\r\n            'en' => ($secUiRow['en'] ?? '') !== '' ? $secUiRow['en'] : $secUiEn,\r\n        ];\r\n    };\r\n\r\n    // Teks ikut bahasa semasa.\r\n    $secTx = fn (string $secUiKey, string $secUiMs, string $secUiEn) => $secUiText($secUiKey, $secUiMs, $secUiEn)[$secLang];\r\n\r\n    /* --------------------------------------------------------------- sektor --- */\r\n    // Kumpulan sektor dari ref NRES_SECTOR (code + nama BM/EN + sort).\r\n    $secGroups = [];\r\n\r\n    foreach (DB::table('ref')->where('cat', 'NRES_SECTOR')->whereNull('deleted_at')\r\n        ->orderBy('sort')->orderBy('id')->get() as $secGrpRow) {\r\n        $secGrpCode = strtoupper(trim((string) $secGrpRow->code));\r\n\r\n        if ($secGrpCode === '') {\r\n            continue;\r\n        }\r\n\r\n        $secGroups[$secGrpCode] = [\r\n            'ms' => trim((string) $secGrpRow->descr),\r\n            'en' => trim((string) ($secGrpRow->descr_en ?: $secGrpRow->descr)),\r\n        ];\r\n    }\r\n\r\n    /* ------------------------------------------ peta unit → sektor/kat/agensi --- */\r\n    // Semua pemetaan dari DB (TIADA array hardcoded lagi):\r\n    //   sektor   → ref NRES_DEPARTMENT.parent (kod NRES_SECTOR, cth SSA)\r\n    //   kategori → ref NRES_UNIT_PUB          (code = kod unit → descr = BP/TUG/…)\r\n    //   agensi   → ref NRES_UNIT_AGENCY       (parent = kod unit → code = kod agensi)\r\n    $secPubCats = DB::table('ref')->where('cat', 'NRES_UNIT_PUB')->whereNull('deleted_at')\r\n        ->pluck('descr', 'code')\r\n        ->mapWithKeys(fn ($secCat, $secUnitK) => [strtoupper(trim((string) $secUnitK)) => strtoupper(trim((string) $secCat))])\r\n        ->all();\r\n\r\n    $secUnitAgns = [];\r\n\r\n    foreach (DB::table('ref')->where('cat', 'NRES_UNIT_AGENCY')->whereNull('deleted_at')\r\n        ->orderBy('sort')->orderBy('id')->get(['parent', 'code']) as $secAgnMapRow) {\r\n        $secAgnUnitK = strtoupper(trim((string) $secAgnMapRow->parent));\r\n        $secAgnCodeK = strtoupper(trim((string) $secAgnMapRow->code));\r\n\r\n        if ($secAgnUnitK !== '' && $secAgnCodeK !== '') {\r\n            $secUnitAgns[$secAgnUnitK][] = $secAgnCodeK;\r\n        }\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 unit (ref NRES_*) --- */\r\n    // Unit = baris ref NRES_DEPARTMENT yang mempunyai `parent` = kod NRES_SECTOR.\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 = strtoupper(trim((string) $secRef->code));\r\n        $secGrpCode = strtoupper(trim((string) $secRef->parent));\r\n\r\n        // Cth EXHIBITION (parent NULL) dikecualikan — bukan bahagian/unit sektor.\r\n        if ($secCode === '' || ! isset($secGroups[$secGrpCode])) {\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' => $secGrpCode,\r\n            'kat' => $secPubCats[$secCode] ?? '',\r\n            'agn' => $secUnitAgns[$secCode] ?? [],\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    // Tajuk seksyen — boleh diubah dari ref NRES_SECTOR_UI (SEC_*).\r\n    $secSectionTitles = [\r\n        'pengenalan' => $secUiText('SEC_PENGENALAN', 'Pengenalan', 'Introduction'),\r\n        'dasar' => $secUiText('SEC_DASAR', 'Dasar & Perundangan', 'Policy & Legislation'),\r\n        'program' => $secUiText('SEC_PROGRAM', 'Program', 'Programme'),\r\n        'halatuju' => $secUiText('SEC_HALATUJU', 'Halatuju & Sasaran', 'Direction & Targets'),\r\n        'agensi' => $secUiText('SEC_AGENSI', 'Jabatan & Agensi', '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 → pane papar nota \"sedang dikemaskini\"\r\n    // (lihat $secNoData di bawah).\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 A (semasa) : SATU rekod gabungan bagi setiap bahagian/unit →\r\n                //                    article_code = <KOD UNIT> (cth BIO_FORESTRY) ·\r\n                //                    article_subcategory biasanya kosong\r\n                // Model B (lama)   : article_subcategory = <KOD UNIT>\r\n                // Model C          : article_code = <KOD UNIT>-<SEKSYEN> (3 rekod)\r\n                $secQ->where('article_code', $secUnit['code'])\r\n                    ->orWhere('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\r\n            // ---- kandungan MENTAH ikut pane (dirender terus — tiada transformasi) ----\r\n            // Pengenalan pane = segala-galanya sebelum tajuk Program/Halatuju\r\n            // (termasuk <h3>Objektif</h3> & <h3>Fungsi Utama</h3> yang ditaip staf).\r\n            $secPaneBoundary = ['progs' => null, 'targets' => null];\r\n\r\n            foreach ($secHeads as $secHead) {\r\n                if ($secHead['kind'] !== null && $secHead['level'] <= $secLevel\r\n                    && array_key_exists($secHead['kind'], $secPaneBoundary)\r\n                    && $secPaneBoundary[$secHead['kind']] === null) {\r\n                    $secPaneBoundary[$secHead['kind']] = $secHead;\r\n                }\r\n            }\r\n\r\n            $secPaneProg = $secPaneBoundary['progs'];\r\n            $secPaneTgt = $secPaneBoundary['targets'];\r\n            $secPaneStarts = array_values(array_filter(\r\n                [$secPaneProg['start'] ?? null, $secPaneTgt['start'] ?? null],\r\n                fn ($secPaneV) => $secPaneV !== null\r\n            ));\r\n\r\n            $secIntroPaneDb = trim(substr($secDoc, 0, $secPaneStarts ? min($secPaneStarts) : strlen($secDoc)));\r\n\r\n            if ($secPaneProg !== null && ($secPaneTgt === null || $secPaneProg['start'] < $secPaneTgt['start'])) {\r\n                $secProgStop = $secPaneTgt !== null ? $secPaneTgt['start'] : strlen($secDoc);\r\n\r\n                if ($secProgStop > $secPaneProg['end']) {\r\n                    $secProgPaneDb = trim(substr($secDoc, $secPaneProg['end'], $secProgStop - $secPaneProg['end']));\r\n                }\r\n            }\r\n\r\n            if ($secPaneTgt !== null) {\r\n                $secTargetPaneDb = trim(substr($secDoc, $secPaneTgt['end']));\r\n            }\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    /* -------------------------------------------------- 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    $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    // Nota fallback — boleh diubah dari ref NRES_SECTOR_UI (NO_DATA).\r\n    $secNoData = $secTx(\r\n        'NO_DATA',\r\n        'Maklumat bagi bahagian ini sedang dikemaskini. Sila rujuk penerbitan atau hubungi kami untuk maklumat lanjut.',\r\n        'Information for this division is being updated. Please refer to the publications or contact us for details.'\r\n    );\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__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 }}\">{{ $secTx('CRUMB_HOME', 'Utama', 'Home') }}</a>\r\n            <span>/</span>\r\n            @if ($secUnit !== null)\r\n                <a href=\"{{ $secBase }}\">{{ $secTx('CRUMB_SECTOR', 'Sektor', 'Sector') }}</a>\r\n                <span>/</span>\r\n                <span>{{ $secLabel($secUnit) }}</span>\r\n            @else\r\n                <span>{{ $secTx('CRUMB_SECTOR', 'Sektor', 'Sector') }}</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\">{{ $secTx('HUB_EYEBROW', 'Struktur Kementerian', 'Ministry Structure') }}</span>\r\n                <h1>{{ $secTx('HUB_TITLE', 'Sektor', 'Sector') }}</h1>\r\n                <p class=\"sec__lead\">\r\n                    {{ $secTx(\r\n                        'HUB_LEAD',\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                        '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                    ) }}\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 }}\">{{ $secTx('BTN_PUBLICATIONS', 'Penerbitan', 'Publications') }}</a>\r\n                    <a class=\"sec__btn sec__btn--ghost\" href=\"{{ $secEserv }}\">{{ $secTx('BTN_ESERVICES', 'e-Perkhidmatan', 'e-Services') }}</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] ?? $secTx('GROUP_FALLBACK', 'Bahagian / Unit', 'Division / Unit');\r\n                // Semua teks dari DB (content_article) sahaja — tiada array fallback hardcoded.\r\n                $secIntroText = $secIntroDb;\r\n                $secIntroIsHtml = $secIntroDb !== '';\r\n                $secIntroList = $secIntroListDb;\r\n                $secIntroObjList = $secIntroObjDb;\r\n                $secProgList = $secProgListDb;\r\n                $secTargetList = $secTargetListDb;\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                    @elseif ($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                </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                </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                    @elseif ($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\">{{ $secTx('BTN_MORE_INFO', 'Maklumat lanjut', 'More info') }}</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                    @elseif ($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                </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\">{{ $secTx('AGENCY_NOTE', 'Pautan agensi bagi bahagian ini sedang dikemaskini.', 'Agency links for this division are being updated.') }}</p>\r\n                    @endif\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 04:27:13"
    },
    "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 04:27:13"
        },
        {
            "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 04:27:13"
        },
        {
            "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 04:27:13"
        },
        {
            "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 04:27:13"
        },
        {
            "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 04:27:13"
        },
        {
            "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 04:27:13"
        },
        {
            "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 04:27:13"
        },
        {
            "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 04:27:13"
        },
        {
            "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 04:27:13"
        },
        {
            "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 04:27:13"
        },
        {
            "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 04:27:13"
        },
        {
            "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 04:27:13"
        },
        {
            "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 04:27:13"
        },
        {
            "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 04:27:13"
        },
        {
            "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 04:27:13"
        },
        {
            "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 04:27:13"
        },
        {
            "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 04:27:13"
        }
    ]
}