{
    "page_content": "{{-- ============================================================================\r\n     PAGE CONTENT — Kalendar Aktiviti (NRES)\r\n     Site  : nres  ·  Page slug: calender  ·  Page ID: 29\r\n     Sumber: modul content-calendar\r\n             · content_calendar             → tarikh, masa, kategori, status, jenis\r\n             · content_calendar_translation → tajuk, lokasi, agenda (ikut bahasa)\r\n     Konsep: https:\/\/www.kpwkm.gov.my\/portal-main\/calendar\r\n             (grid bulan + senarai aktiviti bulan ini + navigasi bulan)\r\n\r\n     Parameter URL:\r\n       bulan     YYYY-MM   bulan yang dipaparkan (lalai: bulan semasa)\r\n       tarikh    YYYY-MM-DD  hari terpilih → panel butiran hari itu\r\n       kategori  kod CALENDAR_CATEGORY (EVENT\/MEETING\/WORKSHOP\/SEMINAR\/OTHER)\r\n\r\n     Nota:\r\n     · SEMUA logik + markup + CSS ada dalam fail ini — tiada komponen, tiada partial.\r\n     · Hanya acara calendar_status = ACTIVE dan calendar_type = PUBLIC dipaparkan.\r\n     · Acara berbilang hari (calendar_date_end) ditanda pada SETIAP hari dalam julat.\r\n     · Tajuk\/lokasi\/agenda ikut bahasa semasa ($lang) → fallback ke terjemahan \"main\".\r\n     · Warna guna CSS variable tema (--teal\/--green\/--fade\/--line\/--ink) → dark mode.\r\n     ============================================================================ --}}\r\n\r\n@php\r\n    \/* --------------------------------------------------------------------\r\n     | 1. Parameter URL + bulan yang dipaparkan\r\n     -------------------------------------------------------------------- *\/\r\n    $calBase   = url()->current();                                   \/\/ URL halaman (tanpa query)\r\n    $calQuery  = request()->query();\r\n    $calLang   = ($lang ?? session('locale', 'ms')) === 'en' ? 'en' : 'ms';\r\n\r\n    $calBulan  = (string) ($calQuery['bulan'] ?? '');\r\n    $calTarikh = (string) ($calQuery['tarikh'] ?? '');\r\n    $calKat    = (string) ($calQuery['kategori'] ?? '');\r\n\r\n    if (! preg_match('\/^\\d{4}-\\d{2}$\/', $calBulan)) {\r\n        $calBulan = now()->format('Y-m');\r\n    }\r\n\r\n    try {\r\n        $calStart = \\Carbon\\Carbon::createFromFormat('Y-m-d', $calBulan.'-01')->startOfMonth();\r\n    } catch (\\Throwable $e) {\r\n        $calBulan = now()->format('Y-m');\r\n        $calStart = now()->startOfMonth();\r\n    }\r\n\r\n    $calEnd   = $calStart->copy()->endOfMonth();\r\n    $calToday = now()->startOfDay();\r\n\r\n    \/* --------------------------------------------------------------------\r\n     | 2. Nama bulan & hari (BM) — dipaparkan ikut bahasa halaman\r\n     -------------------------------------------------------------------- *\/\r\n    $calMonthNames = [\r\n        1 => 'Januari', 2 => 'Februari', 3 => 'Mac', 4 => 'April', 5 => 'Mei', 6 => 'Jun',\r\n        7 => 'Julai', 8 => 'Ogos', 9 => 'September', 10 => 'Oktober', 11 => 'November', 12 => 'Disember',\r\n    ];\r\n    $calMonthNamesEn = [\r\n        1 => 'January', 2 => 'February', 3 => 'March', 4 => 'April', 5 => 'May', 6 => 'June',\r\n        7 => 'July', 8 => 'August', 9 => 'September', 10 => 'October', 11 => 'November', 12 => 'December',\r\n    ];\r\n    $calDayNames = $calLang === 'en'\r\n        ? ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']\r\n        : ['Ahad', 'Isnin', 'Selasa', 'Rabu', 'Khamis', 'Jumaat', 'Sabtu'];\r\n\r\n    $calAllLabel = $calLang === 'en' ? 'All' : 'Semua';\r\n\r\n    $calMonthLabel = ($calLang === 'en' ? $calMonthNamesEn : $calMonthNames)[(int) $calStart->month].' '.$calStart->year;\r\n\r\n    \/* --------------------------------------------------------------------\r\n     | 3. Rujukan kategori (warna + label ikut bahasa)\r\n     -------------------------------------------------------------------- *\/\r\n    $calCatRefs  = DB::table('ref')->where('cat', 'CALENDAR_CATEGORY')->orderBy('sort')->get();\r\n    $calCatLabel = [];\r\n\r\n    foreach ($calCatRefs as $calRef) {\r\n        $calCatLabel[(string) $calRef->code] = $calLang === 'en'\r\n            ? ((string) ($calRef->descr_en ?: $calRef->descr))\r\n            : ((string) ($calRef->descr ?: $calRef->descr_en));\r\n    }\r\n\r\n    $calCatColor = [\r\n        'EVENT'    => '#11808f',\r\n        'MEETING'  => '#165c4a',\r\n        'WORKSHOP' => '#b45309',\r\n        'SEMINAR'  => '#6d28d9',\r\n        'OTHER'    => '#64748b',\r\n    ];\r\n\r\n    if ($calKat !== '' && ! isset($calCatLabel[$calKat])) {\r\n        $calKat = '';\r\n    }\r\n\r\n    $calCatName  = fn ($code) => $calCatLabel[(string) $code] ?? (string) $code;\r\n    $calCatTint  = fn ($code) => $calCatColor[(string) $code] ?? '#64748b';\r\n\r\n    \/\/ Masa: format seperti admin (h:i A) bila boleh di-parse; jika teks bebas, kekal asal\r\n    $calTime = function ($value) {\r\n        $value = trim((string) $value);\r\n\r\n        if ($value === '') {\r\n            return '';\r\n        }\r\n\r\n        try {\r\n            return \\Carbon\\Carbon::parse($value)->format('h:i A');\r\n        } catch (\\Throwable $e) {\r\n            return $value;\r\n        }\r\n    };\r\n\r\n    \/* --------------------------------------------------------------------\r\n     | 4. Pembina URL (kekalkan bulan, buang parameter yang dikosongkan)\r\n     -------------------------------------------------------------------- *\/\r\n    $calUrl = function (array $params = []) use ($calBase, $calBulan, $calKat, $calTarikh) {\r\n        $query = array_filter([\r\n            'bulan'    => array_key_exists('bulan', $params) ? $params['bulan'] : $calBulan,\r\n            'kategori' => array_key_exists('kategori', $params) ? $params['kategori'] : $calKat,\r\n            'tarikh'   => array_key_exists('tarikh', $params) ? $params['tarikh'] : $calTarikh,\r\n        ], fn ($v) => $v !== null && $v !== '');\r\n\r\n        return $query ? $calBase.'?'.http_build_query($query) : $calBase;\r\n    };\r\n\r\n    \/* --------------------------------------------------------------------\r\n     | 5. Ambil acara yang bersinggungan dengan bulan ini\r\n     |    (status ACTIVE + jenis PUBLIC sahaja)\r\n     -------------------------------------------------------------------- *\/\r\n    $calRows = DB::table('content_calendar as c')\r\n        ->where('c.calendar_status', 'ACTIVE')\r\n        ->where('c.calendar_type', 'PUBLIC')\r\n        ->whereNotNull('c.calendar_date_start')\r\n        ->whereDate('c.calendar_date_start', '<=', $calEnd->toDateString())\r\n        ->whereRaw('COALESCE(c.calendar_date_end, c.calendar_date_start) >= ?', [$calStart->toDateString()])\r\n        ->orderBy('c.calendar_date_start')\r\n        ->orderBy('c.calendar_time_start')\r\n        ->get();\r\n\r\n    $calRowIds = $calRows->pluck('calendar_id')->all();\r\n\r\n    $calTranslations = $calRowIds\r\n        ? DB::table('content_calendar_translation')\r\n            ->whereIn('calendar_translation_parent_id', $calRowIds)\r\n            ->get()\r\n            ->groupBy('calendar_translation_parent_id')\r\n        : collect();\r\n\r\n    \/* --------------------------------------------------------------------\r\n     | 6. Bina senarai acara (view model)\r\n     -------------------------------------------------------------------- *\/\r\n    $calItems = [];\r\n\r\n    foreach ($calRows as $calRow) {\r\n        $calTr = $calTranslations[$calRow->calendar_id] ?? collect();\r\n\r\n        \/\/ Keutamaan: bahasa semasa → terjemahan \"main\" → terjemahan pertama\r\n        $calTr = $calTr->firstWhere('calendar_translation_language', $calLang)\r\n            ?? $calTr->firstWhere('calendar_translation_main', 1)\r\n            ?? $calTr->first();\r\n\r\n        if (! $calTr || blank($calTr->calendar_translation_title)) {\r\n            continue;   \/\/ acara tanpa tajuk — langkau\r\n        }\r\n\r\n        $calFrom = \\Carbon\\Carbon::parse($calRow->calendar_date_start)->startOfDay();\r\n        $calTo   = $calRow->calendar_date_end\r\n            ? \\Carbon\\Carbon::parse($calRow->calendar_date_end)->startOfDay()\r\n            : $calFrom->copy();\r\n\r\n        if ($calTo->lt($calFrom)) {\r\n            $calTo = $calFrom->copy();\r\n        }\r\n\r\n        $calItems[] = [\r\n            'id'          => (int) $calRow->calendar_id,\r\n            'title'       => (string) $calTr->calendar_translation_title,\r\n            'location'    => (string) ($calTr->calendar_translation_location ?? ''),\r\n            'agenda'      => (string) ($calTr->calendar_translation_content ?? ''),\r\n            'from'        => $calFrom,\r\n            'to'          => $calTo,\r\n            'time_start'  => (string) ($calRow->calendar_time_start ?? ''),\r\n            'time_end'    => (string) ($calRow->calendar_time_end ?? ''),\r\n            'category'    => (string) ($calRow->calendar_category ?? ''),\r\n            'participant' => $calRow->total_participant !== null ? (int) $calRow->total_participant : null,\r\n            'days'        => $calFrom->diffInDays($calTo) + 1,\r\n        ];\r\n    }\r\n\r\n    \/\/ Tapisan kategori (pilihan)\r\n    if ($calKat !== '') {\r\n        $calItems = array_values(array_filter($calItems, fn ($calItem) => $calItem['category'] === $calKat));\r\n    }\r\n\r\n    \/* --------------------------------------------------------------------\r\n     | 7. Peta hari → acara (acara berbilang hari diulang pada setiap hari)\r\n     -------------------------------------------------------------------- *\/\r\n    $calByDay = [];\r\n\r\n    foreach ($calItems as $calItem) {\r\n        $calCursor = $calItem['from']->copy();\r\n\r\n        while ($calCursor->lte($calItem['to'])) {\r\n            $calByDay[$calCursor->format('Y-m-d')][] = $calItem;\r\n            $calCursor->addDay();\r\n        }\r\n    }\r\n\r\n    \/* --------------------------------------------------------------------\r\n     | 8. Grid bulan (Ahad → Sabtu, termasuk hari sebelum\/selepas bulan)\r\n     -------------------------------------------------------------------- *\/\r\n    $calGridStart = $calStart->copy()->startOfWeek(\\Carbon\\Carbon::SUNDAY);\r\n    $calGridEnd   = $calEnd->copy()->endOfWeek(\\Carbon\\Carbon::SATURDAY);\r\n\r\n    $calWeeks  = [];\r\n    $calCursor = $calGridStart->copy();\r\n\r\n    while ($calCursor->lte($calGridEnd)) {\r\n        $calWeek = [];\r\n\r\n        for ($calDay = 0; $calDay < 7; $calDay++) {\r\n            $calWeek[] = $calCursor->copy();\r\n            $calCursor->addDay();\r\n        }\r\n\r\n        $calWeeks[] = $calWeek;\r\n    }\r\n\r\n    \/* --------------------------------------------------------------------\r\n     | 9. Hari terpilih (panel butiran) + statistik\r\n     -------------------------------------------------------------------- *\/\r\n    $calSelected    = null;\r\n    $calSelectedKey = '';\r\n\r\n    if (preg_match('\/^\\d{4}-\\d{2}-\\d{2}$\/', $calTarikh)) {\r\n        try {\r\n            $calTry = \\Carbon\\Carbon::createFromFormat('Y-m-d', $calTarikh)->startOfDay();\r\n\r\n            if ($calTry->format('Y-m') === $calBulan) {\r\n                $calSelected    = $calTry;\r\n                $calSelectedKey = $calTry->format('Y-m-d');\r\n            }\r\n        } catch (\\Throwable $e) {\r\n            $calSelected = null;\r\n        }\r\n    }\r\n\r\n    $calTotal    = count($calItems);\r\n    $calDayCount = count($calByDay);\r\n@endphp\r\n\r\n<style>\r\n\/* ==========================================================================\r\n   KALENDAR AKTIVITI — gaya skop .calendar (warna ikut tema, sokong dark mode)\r\n   ========================================================================== *\/\r\n.calendar{padding:34px 0 64px;color:var(--ink);font-family:\"Inter\",\"Segoe UI\",system-ui,-apple-system,Roboto,Arial,sans-serif}\r\n.calendar *,.calendar *::before,.calendar *::after{box-sizing:border-box}\r\n.calendar__container{width:min(100% - 32px,1120px);margin:0 auto}\r\n\r\n\/* --- breadcrumb & tajuk -------------------------------------------------- *\/\r\n.calendar__breadcrumb{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin-bottom:14px;color:var(--bs-secondary-color);font-size:.85rem}\r\n.calendar__breadcrumb a{color:var(--teal);font-weight:600;text-decoration:none}\r\n.calendar__breadcrumb a:hover{text-decoration:underline}\r\n.calendar__header{margin-bottom:20px}\r\n.calendar__eyebrow{display:inline-block;margin-bottom:8px;padding:4px 12px;border-radius:999px;background:var(--fade);color:var(--teal);font-size:.72rem;font-weight:700;letter-spacing:.06em;text-transform:uppercase}\r\n.calendar__header h1{margin:0 0 8px;color:var(--green);font-size:clamp(1.45rem,3vw,2.05rem);font-weight:800;line-height:1.2}\r\n.calendar__header p{margin:0;max-width:74ch;color:var(--bs-secondary-color);font-size:.95rem;line-height:1.65}\r\n\r\n\/* --- bar alat: navigasi bulan + tapisan kategori ------------------------- *\/\r\n.calendar__toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:12px;margin-bottom:16px;padding:12px 16px;border:1px solid var(--line);border-radius:16px;background:var(--bs-body-bg);box-shadow:0 6px 22px rgba(17,128,143,.07)}\r\n.calendar__nav{display:flex;align-items:center;gap:8px}\r\n.calendar__navbtn{display:inline-flex;align-items:center;justify-content:center;width:36px;height:36px;border:1px solid var(--line);border-radius:10px;background:var(--bs-body-bg);color:var(--teal);text-decoration:none;transition:.15s}\r\n.calendar__navbtn:hover{border-color:var(--teal);background:var(--fade)}\r\n.calendar__navbtn svg{width:16px;height:16px}\r\n.calendar__month{margin:0;min-width:180px;text-align:center;color:var(--green);font-size:1.02rem;font-weight:800}\r\n.calendar__today{margin-left:4px;padding:8px 14px;border:1px solid var(--line);border-radius:10px;background:var(--bs-body-bg);color:var(--teal);font-size:.8rem;font-weight:700;text-decoration:none;white-space:nowrap}\r\n.calendar__today:hover{border-color:var(--teal);background:var(--fade)}\r\n.calendar__cats{display:flex;flex-wrap:wrap;gap:6px;margin-left:auto}\r\n.calendar__cat{display:inline-flex;align-items:center;gap:6px;padding:6px 12px;border:1px solid var(--line);border-radius:999px;background:var(--bs-body-bg);color:var(--ink);font-size:.75rem;font-weight:600;text-decoration:none;transition:.15s}\r\n.calendar__cat:hover{border-color:var(--teal);color:var(--teal)}\r\n.calendar__cat.is-active{border-color:var(--teal);background:var(--teal);color:#fff}\r\n.calendar__dot{width:8px;height:8px;border-radius:50%;background:var(--cat-color,#64748b);flex:none}\r\n.calendar__cat.is-active .calendar__dot{background:#fff}\r\n\r\n\/* --- grid bulan ---------------------------------------------------------- *\/\r\n.calendar__hint{display:none;margin:0 0 8px;color:var(--bs-secondary-color);font-size:.74rem;font-weight:600}\r\n.calendar__scroll{overflow-x:auto;border:1px solid var(--line);border-radius:16px;background:var(--bs-body-bg)}\r\n.calendar__grid{width:100%;min-width:760px;border-collapse:collapse;table-layout:fixed}\r\n.calendar__grid th{padding:10px 8px;background:var(--fade);color:var(--teal);border-bottom:1px solid var(--line);font-size:.71rem;font-weight:800;letter-spacing:.05em;text-transform:uppercase}\r\n.calendar__cell{padding:6px;border-top:1px solid var(--line);border-left:1px solid var(--line);height:108px;vertical-align:top}\r\n.calendar__cell:first-child{border-left:0}\r\n.calendar__cell--weekend{background:rgba(17,128,143,.045)}\r\n.calendar__cell--out{opacity:.45}\r\n.calendar__cell--today{background:var(--fade)}\r\n.calendar__cell--selected{box-shadow:inset 0 0 0 2px var(--teal)}\r\n.calendar__daynum{display:inline-flex;align-items:center;justify-content:center;min-width:26px;height:24px;padding:0 4px;border-radius:8px;color:var(--ink);font-size:.78rem;font-weight:700;text-decoration:none}\r\n.calendar__daynum:hover{background:var(--fade);color:var(--teal)}\r\n.calendar__cell--today .calendar__daynum{background:var(--teal);color:#fff}\r\n.calendar__cell--today .calendar__daynum:hover{color:#fff}\r\n.calendar__events{display:flex;flex-direction:column;gap:3px;margin-top:5px}\r\n.calendar__event{display:block;padding:3px 6px;border-left:3px solid var(--cat-color,#64748b);border-radius:6px;background:rgba(17,128,143,.09);color:var(--ink);font-size:.7rem;line-height:1.35;text-decoration:none;overflow:hidden}\r\n.calendar__event:hover{background:rgba(17,128,143,.18)}\r\n.calendar__event b{display:block;font-weight:700;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}\r\n.calendar__event span{display:block;color:var(--bs-secondary-color);font-size:.66rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}\r\n.calendar__more{display:inline-block;margin-top:4px;padding-left:3px;color:var(--teal);font-size:.66rem;font-weight:700;text-decoration:none}\r\n.calendar__more:hover{text-decoration:underline}\r\n\r\n\/* --- panel hari terpilih ------------------------------------------------- *\/\r\n.calendar__panel{margin-top:18px;padding:16px 18px;border:1px solid var(--line);border-left:4px solid var(--teal);border-radius:14px;background:var(--bs-body-bg)}\r\n.calendar__panel-head{display:flex;flex-wrap:wrap;align-items:center;gap:8px 12px;margin-bottom:12px}\r\n.calendar__panel-head h2{margin:0;color:var(--green);font-size:1rem;font-weight:800}\r\n.calendar__chip{display:inline-flex;align-items:center;gap:6px;padding:3px 10px;border-radius:999px;background:var(--fade);color:var(--teal);font-size:.73rem;font-weight:700}\r\n.calendar__chip--link{text-decoration:none}\r\n.calendar__chip--link:hover{background:var(--teal);color:#fff}\r\n.calendar__clear{margin-left:auto;color:var(--teal);font-size:.78rem;font-weight:700;text-decoration:none}\r\n.calendar__clear:hover{text-decoration:underline}\r\n\r\n\/* --- kad acara ----------------------------------------------------------- *\/\r\n.calendar__ev{margin-bottom:12px;padding:12px 14px;border:1px solid var(--line);border-radius:12px;background:var(--bs-body-bg)}\r\n.calendar__ev:last-child{margin-bottom:0}\r\n.calendar__ev-head{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin-bottom:6px}\r\n.calendar__badge{display:inline-block;padding:2px 9px;border-radius:999px;background:var(--cat-color,#64748b);color:#fff;font-size:.66rem;font-weight:800;letter-spacing:.03em;text-transform:uppercase}\r\n.calendar__badge--soft{background:var(--fade);color:var(--teal)}\r\n.calendar__ev-title{margin:0 0 6px;color:var(--ink);font-size:.93rem;font-weight:700;line-height:1.35}\r\n.calendar__ev-meta{display:flex;flex-wrap:wrap;gap:6px 16px;margin:0 0 8px;padding:0;list-style:none;color:var(--bs-secondary-color);font-size:.78rem}\r\n.calendar__ev-meta li{display:inline-flex;align-items:flex-start;gap:5px;min-width:0}\r\n.calendar__ev-meta svg{flex:none;width:13px;height:13px;margin-top:2px;color:var(--teal)}\r\n.calendar__ev-body{margin:0;color:var(--bs-secondary-color);font-size:.8rem;line-height:1.65}\r\n\r\n\/* --- senarai aktiviti bulan --------------------------------------------- *\/\r\n.calendar__list{margin-top:26px}\r\n.calendar__list-head{display:flex;flex-wrap:wrap;align-items:center;gap:8px 12px;margin-bottom:10px;padding-bottom:10px;border-bottom:2px solid var(--line)}\r\n.calendar__list-head h2{margin:0;color:var(--green);font-size:1.02rem;font-weight:800}\r\n.calendar__list-head .calendar__chip{margin-left:auto}\r\n.calendar__item{display:flex;gap:14px;padding:14px 0;border-top:1px solid var(--line)}\r\n.calendar__item:first-child{border-top:0;padding-top:4px}\r\n.calendar__date{flex:0 0 64px;height:fit-content;padding:7px 4px;border:1px solid var(--line);border-radius:12px;background:var(--fade);text-align:center}\r\n.calendar__date b{display:block;color:var(--teal);font-size:1.15rem;font-weight:800;line-height:1}\r\n.calendar__date span{display:block;margin-top:3px;color:var(--bs-secondary-color);font-size:.64rem;font-weight:700;letter-spacing:.05em;text-transform:uppercase}\r\n.calendar__item-body{flex:1;min-width:0}\r\n.calendar__item-title{margin:0 0 5px;color:var(--ink);font-size:.93rem;font-weight:700;line-height:1.35}\r\n.calendar__item-title a{color:inherit;text-decoration:none}\r\n.calendar__item-title a:hover{color:var(--teal);text-decoration:underline}\r\n.calendar__item-meta{display:flex;flex-wrap:wrap;gap:5px 16px;margin:0;padding:0;list-style:none;color:var(--bs-secondary-color);font-size:.77rem}\r\n.calendar__item-meta li{display:inline-flex;align-items:flex-start;gap:5px;min-width:0}\r\n.calendar__item-meta svg{flex:none;width:13px;height:13px;margin-top:2px;color:var(--teal)}\r\n\r\n\/* --- legenda & nota ------------------------------------------------------ *\/\r\n.calendar__meta{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin:0 0 12px;color:var(--bs-secondary-color);font-size:.84rem}\r\n.calendar__meta strong{color:var(--ink)}\r\n.calendar__legend{display:flex;flex-wrap:wrap;gap:8px 16px;margin-top:18px;padding:12px 16px;border:1px solid var(--line);border-radius:12px;background:var(--bs-body-bg)}\r\n.calendar__legend span{display:inline-flex;align-items:center;gap:7px;color:var(--bs-secondary-color);font-size:.78rem;font-weight:600}\r\n.calendar__note{margin-top:18px;padding:16px 20px;border:1px solid var(--line);border-left:4px solid var(--teal);border-radius:12px;background:var(--bs-body-bg)}\r\n.calendar__note h2{margin:0 0 8px;color:var(--green);font-size:.8rem;font-weight:800;letter-spacing:.04em;text-transform:uppercase}\r\n.calendar__note ul{margin:0;padding-left:20px;color:var(--bs-secondary-color);font-size:.79rem;line-height:1.7}\r\n.calendar__note li{margin-bottom:4px}\r\n.calendar__note li:last-child{margin-bottom:0}\r\n.calendar__note a{color:var(--teal);font-weight:700;text-decoration:none}\r\n.calendar__note a:hover{text-decoration:underline}\r\n\r\n\/* --- keadaan kosong ------------------------------------------------------ *\/\r\n.calendar__empty{padding:30px 22px;border:1px dashed var(--line);border-radius:16px;background:var(--bs-body-bg);text-align:center}\r\n.calendar__empty svg{width:32px;height:32px;margin-bottom:10px;color:var(--teal);opacity:.75}\r\n.calendar__empty h3{margin:0 0 6px;color:var(--green);font-size:.96rem;font-weight:800}\r\n.calendar__empty p{max-width:54ch;margin:0 auto;color:var(--bs-secondary-color);font-size:.84rem;line-height:1.6}\r\n.calendar__empty a{color:var(--teal);font-weight:700;text-decoration:none}\r\n.calendar__empty a:hover{text-decoration:underline}\r\n\r\n\/* --- responsif ----------------------------------------------------------- *\/\r\n@media (max-width:820px){\r\n    .calendar__cats{margin-left:0}\r\n    .calendar__month{min-width:0;flex:1}\r\n    .calendar__hint{display:block}\r\n}\r\n@media (max-width:640px){\r\n    .calendar{padding:24px 0 46px}\r\n    .calendar__toolbar{padding:12px}\r\n    .calendar__item{gap:11px}\r\n    .calendar__date{flex:0 0 56px}\r\n}\r\n<\/style>\r\n\r\n<section class=\"calendar\" aria-labelledby=\"calendar-title\">\r\n    <div class=\"calendar__container\">\r\n\r\n        {{-- ---------- BREADCRUMB ---------- --}}\r\n        <nav class=\"calendar__breadcrumb\" aria-label=\"Breadcrumb\">\r\n            <a href=\"{{ url($siteSlug.'\/home') }}\">Utama<\/a>\r\n            <span aria-hidden=\"true\">\/<\/span>\r\n            <span>Kalendar<\/span>\r\n        <\/nav>\r\n\r\n        {{-- ---------- TAJUK ---------- --}}\r\n        <header class=\"calendar__header\">\r\n            <span class=\"calendar__eyebrow\">Pusat Media<\/span>\r\n            <h1 id=\"calendar-title\">Kalendar Aktiviti<\/h1>\r\n            <p>Senarai aktiviti, majlis dan program Kementerian Sumber Asli dan Kelestarian Alam. Gunakan anak panah\r\n                untuk menukar bulan, atau klik pada tarikh dalam kalendar untuk melihat butiran aktiviti hari itu.<\/p>\r\n        <\/header>\r\n\r\n        {{-- ---------- BAR ALAT ---------- --}}\r\n        <div class=\"calendar__toolbar\">\r\n            <div class=\"calendar__nav\">\r\n                <a class=\"calendar__navbtn\" aria-label=\"Bulan sebelumnya\"\r\n                    href=\"{{ $calUrl(['bulan' => $calStart->copy()->subMonth()->format('Y-m'), 'tarikh' => null]) }}\">\r\n                    <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\"\r\n                        stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\r\n                        <path d=\"M15 6l-6 6 6 6\" \/>\r\n                    <\/svg>\r\n                <\/a>\r\n\r\n                <p class=\"calendar__month\">{{ $calMonthLabel }}<\/p>\r\n\r\n                <a class=\"calendar__navbtn\" aria-label=\"Bulan seterusnya\"\r\n                    href=\"{{ $calUrl(['bulan' => $calStart->copy()->addMonth()->format('Y-m'), 'tarikh' => null]) }}\">\r\n                    <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\"\r\n                        stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\r\n                        <path d=\"M9 6l6 6-6 6\" \/>\r\n                    <\/svg>\r\n                <\/a>\r\n            <\/div>\r\n\r\n            <a class=\"calendar__today\"\r\n                href=\"{{ $calUrl(['bulan' => $calToday->format('Y-m'), 'tarikh' => $calToday->format('Y-m-d')]) }}\">Hari Ini<\/a>\r\n\r\n            <div class=\"calendar__cats\" role=\"group\" aria-label=\"Tapisan kategori aktiviti\">\r\n                <a class=\"calendar__cat {{ $calKat === '' ? 'is-active' : '' }}\"\r\n                    href=\"{{ $calUrl(['kategori' => null, 'tarikh' => null]) }}\">{{ $calAllLabel }}<\/a>\r\n\r\n                @foreach ($calCatLabel as $calCode => $calLabel)\r\n                    <a class=\"calendar__cat {{ $calKat === $calCode ? 'is-active' : '' }}\"\r\n                        style=\"--cat-color:{{ $calCatTint($calCode) }}\"\r\n                        href=\"{{ $calUrl(['kategori' => $calCode, 'tarikh' => null]) }}\">\r\n                        <span class=\"calendar__dot\"><\/span>{{ $calLabel }}\r\n                    <\/a>\r\n                @endforeach\r\n            <\/div>\r\n        <\/div>\r\n\r\n        {{-- ---------- RINGKASAN ---------- --}}\r\n        <p class=\"calendar__meta\">\r\n            <strong>{{ $calTotal }}<\/strong> aktiviti pada bulan ini\r\n            @if ($calDayCount > 0)\r\n                <span class=\"calendar__chip\">{{ $calDayCount }} hari ada aktiviti<\/span>\r\n            @endif\r\n            @if ($calKat !== '')\r\n                <span class=\"calendar__chip\">kategori: {{ $calCatName($calKat) }}<\/span>\r\n            @endif\r\n            @if ($calSelected)\r\n                <span class=\"calendar__chip\">tarikh: {{ $calSelected->format('d\/m\/Y') }}<\/span>\r\n            @endif\r\n        <\/p>\r\n\r\n        {{-- ---------- GRID BULAN ---------- --}}\r\n        <p class=\"calendar__hint\">Leret jadual ke kiri atau kanan untuk melihat hari lain.<\/p>\r\n        <div class=\"calendar__scroll\">\r\n            <table class=\"calendar__grid\">\r\n                <thead>\r\n                    <tr>\r\n                        @foreach ($calDayNames as $calDayName)\r\n                            <th scope=\"col\">{{ $calDayName }}<\/th>\r\n                        @endforeach\r\n                    <\/tr>\r\n                <\/thead>\r\n                <tbody>\r\n                    @foreach ($calWeeks as $calWeek)\r\n                        <tr>\r\n                            @foreach ($calWeek as $calDate)\r\n                                @php\r\n                                    $calKey      = $calDate->format('Y-m-d');\r\n                                    $calDayItems = $calByDay[$calKey] ?? [];\r\n                                    $calInMonth  = $calDate->format('Y-m') === $calBulan;\r\n                                    $calIsToday  = $calDate->isSameDay($calToday);\r\n                                    $calIsSel    = $calSelectedKey === $calKey;\r\n                                    $calWeekend  = in_array((int) $calDate->dayOfWeek, [0, 6], true);\r\n                                @endphp\r\n\r\n                                <td class=\"calendar__cell{{ $calWeekend ? ' calendar__cell--weekend' : '' }}{{ $calInMonth ? '' : ' calendar__cell--out' }}{{ $calIsToday ? ' calendar__cell--today' : '' }}{{ $calIsSel ? ' calendar__cell--selected' : '' }}\">\r\n                                    <a class=\"calendar__daynum\"\r\n                                        href=\"{{ $calUrl(['tarikh' => $calKey]) }}\">{{ $calDate->day }}<\/a>\r\n\r\n                                    @if (count($calDayItems))\r\n                                        <div class=\"calendar__events\">\r\n                                            @foreach (array_slice($calDayItems, 0, 3) as $calCellEv)\r\n                                                <a class=\"calendar__event\"\r\n                                                    style=\"--cat-color:{{ $calCatTint($calCellEv['category']) }}\"\r\n                                                    href=\"{{ $calUrl(['tarikh' => $calKey]) }}\"\r\n                                                    title=\"{{ $calCellEv['title'] }}\">\r\n                                                    <b>{{ $calCellEv['title'] }}<\/b>\r\n                                                    @if ($calCellEv['time_start'] !== '')\r\n                                                        <span>{{ $calTime($calCellEv['time_start']) }}<\/span>\r\n                                                    @endif\r\n                                                <\/a>\r\n                                            @endforeach\r\n                                        <\/div>\r\n\r\n                                        @if (count($calDayItems) > 3)\r\n                                            <a class=\"calendar__more\"\r\n                                                href=\"{{ $calUrl(['tarikh' => $calKey]) }}\">+{{ count($calDayItems) - 3 }} lagi<\/a>\r\n                                        @endif\r\n                                    @endif\r\n                                <\/td>\r\n                            @endforeach\r\n                        <\/tr>\r\n                    @endforeach\r\n                <\/tbody>\r\n            <\/table>\r\n        <\/div>\r\n\r\n        {{-- ---------- PANEL HARI TERPILIH ---------- --}}\r\n        @if ($calSelected)\r\n            @php $calSelItems = $calByDay[$calSelectedKey] ?? []; @endphp\r\n\r\n            <div class=\"calendar__panel\">\r\n                <div class=\"calendar__panel-head\">\r\n                    <h2>{{ $calSelected->day }}\r\n                        {{ ($calLang === 'en' ? $calMonthNamesEn : $calMonthNames)[(int) $calSelected->month] }}\r\n                        {{ $calSelected->year }}<\/h2>\r\n                    <span class=\"calendar__chip\">{{ $calDayNames[(int) $calSelected->dayOfWeek] }}<\/span>\r\n                    <span class=\"calendar__chip\">{{ count($calSelItems) }} aktiviti<\/span>\r\n                    <a class=\"calendar__clear\" href=\"{{ $calUrl(['tarikh' => null]) }}\">Tutup<\/a>\r\n                <\/div>\r\n\r\n                @if (count($calSelItems))\r\n                    @foreach ($calSelItems as $calSelEv)\r\n                        <article class=\"calendar__ev\">\r\n                            <div class=\"calendar__ev-head\">\r\n                                <span class=\"calendar__badge\"\r\n                                    style=\"--cat-color:{{ $calCatTint($calSelEv['category']) }}\">{{ $calCatName($calSelEv['category']) }}<\/span>\r\n\r\n                                @if ($calSelEv['days'] > 1)\r\n                                    <span class=\"calendar__badge calendar__badge--soft\">{{ $calSelEv['days'] }} hari<\/span>\r\n                                @endif\r\n                            <\/div>\r\n\r\n                            <h3 class=\"calendar__ev-title\">{{ $calSelEv['title'] }}<\/h3>\r\n\r\n                            <ul class=\"calendar__ev-meta\">\r\n                                @if ($calSelEv['time_start'] !== '')\r\n                                    <li>\r\n                                        <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\r\n                                            stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\r\n                                            <circle cx=\"12\" cy=\"12\" r=\"9\" \/>\r\n                                            <path d=\"M12 7v5l3 2\" \/>\r\n                                        <\/svg>\r\n                                        <span>{{ $calTime($calSelEv['time_start']) }}{{ $calSelEv['time_end'] !== '' ? ' – '.$calTime($calSelEv['time_end']) : '' }}<\/span>\r\n                                    <\/li>\r\n                                @endif\r\n\r\n                                @if ($calSelEv['days'] > 1)\r\n                                    <li>\r\n                                        <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\r\n                                            stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\r\n                                            <rect x=\"3\" y=\"5\" width=\"18\" height=\"16\" rx=\"2\" \/>\r\n                                            <path d=\"M8 3v4M16 3v4M3 11h18\" \/>\r\n                                        <\/svg>\r\n                                        <span>{{ $calSelEv['from']->format('d\/m\/Y') }} – {{ $calSelEv['to']->format('d\/m\/Y') }}<\/span>\r\n                                    <\/li>\r\n                                @endif\r\n\r\n                                @if ($calSelEv['location'] !== '')\r\n                                    <li>\r\n                                        <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\r\n                                            stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\r\n                                            <path d=\"M12 21s7-6 7-11a7 7 0 1 0-14 0c0 5 7 11 7 11z\" \/>\r\n                                            <circle cx=\"12\" cy=\"10\" r=\"2.5\" \/>\r\n                                        <\/svg>\r\n                                        <span>{{ $calSelEv['location'] }}<\/span>\r\n                                    <\/li>\r\n                                @endif\r\n\r\n                                @if ($calSelEv['participant'])\r\n                                    <li>\r\n                                        <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\r\n                                            stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\r\n                                            <path d=\"M16 19v-1a4 4 0 0 0-4-4H7a4 4 0 0 0-4 4v1\" \/>\r\n                                            <circle cx=\"9.5\" cy=\"7\" r=\"3\" \/>\r\n                                            <path d=\"M21 19v-1a4 4 0 0 0-3-3.9M15.5 4.1a3 3 0 0 1 0 5.8\" \/>\r\n                                        <\/svg>\r\n                                        <span>{{ $calSelEv['participant'] }} peserta<\/span>\r\n                                    <\/li>\r\n                                @endif\r\n                            <\/ul>\r\n\r\n                            @if ($calSelEv['agenda'] !== '')\r\n                                <p class=\"calendar__ev-body\">{!! nl2br(e($calSelEv['agenda'])) !!}<\/p>\r\n                            @endif\r\n                        <\/article>\r\n                    @endforeach\r\n                @else\r\n                    <p class=\"calendar__ev-body\">Tiada aktiviti pada tarikh ini.<\/p>\r\n                @endif\r\n            <\/div>\r\n        @endif\r\n\r\n        {{-- ---------- SENARAI AKTIVITI BULAN INI ---------- --}}\r\n        <section class=\"calendar__list\">\r\n            <div class=\"calendar__list-head\">\r\n                <h2>Senarai Aktiviti Bulan Ini<\/h2>\r\n                <span class=\"calendar__chip\">{{ $calMonthLabel }}<\/span>\r\n                <span class=\"calendar__chip\">{{ $calTotal }} aktiviti<\/span>\r\n            <\/div>\r\n\r\n            @if (count($calItems))\r\n                @foreach ($calItems as $calListEv)\r\n                    <article class=\"calendar__item\">\r\n                        <div class=\"calendar__date\">\r\n                            <b>{{ $calListEv['from']->day }}<\/b>\r\n                            <span>{{ mb_substr(($calLang === 'en' ? $calMonthNamesEn : $calMonthNames)[(int) $calListEv['from']->month], 0, 3) }}<\/span>\r\n                        <\/div>\r\n\r\n                        <div class=\"calendar__item-body\">\r\n                            <h3 class=\"calendar__item-title\">\r\n                                <a\r\n                                    href=\"{{ $calUrl(['tarikh' => $calListEv['from']->format('Y-m-d')]) }}\">{{ $calListEv['title'] }}<\/a>\r\n                            <\/h3>\r\n\r\n                            <ul class=\"calendar__item-meta\">\r\n                                <li>\r\n                                    <span class=\"calendar__badge\"\r\n                                        style=\"--cat-color:{{ $calCatTint($calListEv['category']) }}\">{{ $calCatName($calListEv['category']) }}<\/span>\r\n                                <\/li>\r\n\r\n                                @if ($calListEv['time_start'] !== '')\r\n                                    <li>\r\n                                        <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\r\n                                            stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\r\n                                            <circle cx=\"12\" cy=\"12\" r=\"9\" \/>\r\n                                            <path d=\"M12 7v5l3 2\" \/>\r\n                                        <\/svg>\r\n                                        <span>{{ $calTime($calListEv['time_start']) }}{{ $calListEv['time_end'] !== '' ? ' – '.$calTime($calListEv['time_end']) : '' }}<\/span>\r\n                                    <\/li>\r\n                                @endif\r\n\r\n                                @if ($calListEv['days'] > 1)\r\n                                    <li>\r\n                                        <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\r\n                                            stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\r\n                                            <rect x=\"3\" y=\"5\" width=\"18\" height=\"16\" rx=\"2\" \/>\r\n                                            <path d=\"M8 3v4M16 3v4M3 11h18\" \/>\r\n                                        <\/svg>\r\n                                        <span>{{ $calListEv['from']->format('d\/m\/Y') }} – {{ $calListEv['to']->format('d\/m\/Y') }}<\/span>\r\n                                    <\/li>\r\n                                @endif\r\n\r\n                                @if ($calListEv['location'] !== '')\r\n                                    <li>\r\n                                        <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\r\n                                            stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\r\n                                            <path d=\"M12 21s7-6 7-11a7 7 0 1 0-14 0c0 5 7 11 7 11z\" \/>\r\n                                            <circle cx=\"12\" cy=\"10\" r=\"2.5\" \/>\r\n                                        <\/svg>\r\n                                        <span>{{ $calListEv['location'] }}<\/span>\r\n                                    <\/li>\r\n                                @endif\r\n                            <\/ul>\r\n                        <\/div>\r\n                    <\/article>\r\n                @endforeach\r\n            @else\r\n                <div class=\"calendar__empty\">\r\n                    <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\"\r\n                        stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\r\n                        <rect x=\"3\" y=\"5\" width=\"18\" height=\"16\" rx=\"2\" \/>\r\n                        <path d=\"M8 3v4M16 3v4M3 11h18\" \/>\r\n                    <\/svg>\r\n\r\n                    @if ($calKat !== '')\r\n                        <h3>Tiada aktiviti bagi kategori ini<\/h3>\r\n                        <p>Tiada aktiviti berkategori <strong>{{ $calCatName($calKat) }}<\/strong> pada\r\n                            {{ $calMonthLabel }}. <a href=\"{{ $calUrl(['kategori' => null, 'tarikh' => null]) }}\">Tampilkan\r\n                                semua kategori<\/a>.<\/p>\r\n                    @else\r\n                        <h3>Tiada aktiviti pada bulan ini<\/h3>\r\n                        <p>Belum ada aktiviti didaftarkan bagi {{ $calMonthLabel }}.\r\n                            <a href=\"{{ $calUrl(['bulan' => $calToday->format('Y-m'), 'tarikh' => null]) }}\">Lihat bulan\r\n                                semasa<\/a>.<\/p>\r\n                    @endif\r\n                <\/div>\r\n            @endif\r\n        <\/section>\r\n\r\n        {{-- ---------- LEGENDA ---------- --}}\r\n        <div class=\"calendar__legend\">\r\n            <span><strong>Kategori:<\/strong><\/span>\r\n            @foreach ($calCatLabel as $calCode => $calLabel)\r\n                <span>\r\n                    <span class=\"calendar__dot\" style=\"--cat-color:{{ $calCatTint($calCode) }}\"><\/span>{{ $calLabel }}\r\n                <\/span>\r\n            @endforeach\r\n        <\/div>\r\n\r\n        {{-- ---------- NOTA ---------- --}}\r\n        <aside class=\"calendar__note\">\r\n            <h2>Nota<\/h2>\r\n            <ul>\r\n                <li>Klik pada tarikh atau tajuk aktiviti untuk melihat butiran penuh (masa, lokasi dan agenda).<\/li>\r\n                <li>Aktiviti berbilang hari dipaparkan pada setiap hari dalam julat tarikhnya.<\/li>\r\n                <li>Kalendar ini memaparkan aktiviti <strong>awam<\/strong> sahaja. Sebarang pertanyaan atau pembetulan\r\n                    boleh dikemukakan melalui <a href=\"{{ url($siteSlug.'\/complaints-feedback') }}\">Aduan &amp; Maklum\r\n                        Balas<\/a>.<\/li>\r\n            <\/ul>\r\n        <\/aside>\r\n    <\/div>\r\n<\/section>\r\n"
}