From 2dae435dff6008045fff19a13f266123ab6b5e57 Mon Sep 17 00:00:00 2001 From: Mas Budi Kusuma Date: Wed, 16 Sep 2026 07:52:18 +0700 Subject: [PATCH] feat(gallery): tambah CPT Galeri, template page-galeri, filter interaktif, dan native lightbox zoom --- inc/admin-menu.php | 8 ++ inc/cpt-slider.php | 27 ++++++ page-galeri.php | 234 +++++++++++++++++++++++++++++++++++++++++++++ style.css | 152 +++++++++++++++++++++++++++++ 4 files changed, 421 insertions(+) create mode 100644 page-galeri.php diff --git a/inc/admin-menu.php b/inc/admin-menu.php index 41d37d5..085226f 100644 --- a/inc/admin-menu.php +++ b/inc/admin-menu.php @@ -904,3 +904,11 @@ function edukarsa_about_page_html() { array( + 'name' => 'Galeri Fasilitas', + 'singular_name' => 'Galeri', + 'add_new_item' => 'Tambah Foto Galeri', + 'all_items' => 'Semua Foto Galeri' + ), + 'supports' => array('title', 'editor', 'thumbnail', 'excerpt'), + 'public' => true, + 'show_ui' => true, + 'show_in_menu' => false, + 'menu_icon' => 'dashicons-format-gallery' + )); + + register_taxonomy( 'kategori_galeri', 'galeri', array( + 'labels' => array('name' => 'Kategori Galeri', 'singular_name' => 'Kategori', 'add_new_item' => 'Tambah Kategori'), + 'hierarchical' => true, + 'public' => true, + 'show_ui' => true, + 'show_admin_column' => true, + 'show_in_menu' => false + )); +} +add_action( 'init', 'edukarsa_register_galeri_cpt', 0 ); diff --git a/page-galeri.php b/page-galeri.php new file mode 100644 index 0000000..d0fe6b0 --- /dev/null +++ b/page-galeri.php @@ -0,0 +1,234 @@ + + +
+
+ + +
+ FASILITAS & DOKUMENTASI KAMI +

Galeri Kampus

+
+

+ Jelajahi berbagai fasilitas pendukung belajar, laboratorium, sarana olahraga, dan lingkungan inspiratif di institusi kami. +

+
+ + + + + + '; + endif; + ?> +
+ +
+ + +
+ × +
+
+ +
+
+ +

+

+
+
+ + +
+ + + + + diff --git a/style.css b/style.css index 05da548..d65c04e 100644 --- a/style.css +++ b/style.css @@ -717,3 +717,155 @@ body.a11y-underline-links a { text-decoration: underline !important; text-underl .sidebar-html-rendered-content { font-size: 14px; line-height: 1.7; color: var(--text-color); } .sidebar-html-rendered-content iframe { width: 100% !important; border-radius: 8px; border: none; } .sidebar-html-rendered-content img { border-radius: 8px; margin: 10px 0; } + +/* --------------------------------------------------------- + MODUL GALERI & FASILITAS (GRID + LIGHTBOX) +--------------------------------------------------------- */ +.gallery-filters { display: flex; flex-wrap: wrap; justify-content: center; gap: 10px; } +.gallery-filter-btn { + background: #ffffff; + border: 2px solid #e2e8f0; + color: var(--text-muted); + padding: 8px 22px; + border-radius: 50px; + font-weight: 700; + font-size: 14px; + cursor: pointer; + transition: all 0.3s ease; +} +.gallery-filter-btn:hover, .gallery-filter-btn.active { + background: var(--primary-color); + border-color: var(--primary-color); + color: #ffffff; + box-shadow: 0 4px 12px rgba(11, 74, 142, 0.2); +} + +.gallery-grid { + display: grid; + grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); + gap: 25px; +} + +.gallery-item-card { + background: #ffffff; + border-radius: 14px; + overflow: hidden; + box-shadow: 0 4px 15px rgba(0, 0, 0, 0.04); + cursor: pointer; + transition: all 0.3s ease; + border: 1px solid #f1f5f9; +} +.gallery-item-card:hover { + transform: translateY(-6px); + box-shadow: 0 15px 35px rgba(11, 74, 142, 0.12); + border-color: var(--secondary-color); +} + +.gallery-img-wrapper { + position: relative; + aspect-ratio: 4/3; + overflow: hidden; + background: #f8fafc; +} +.gallery-img-wrapper img { + width: 100%; + height: 100%; + object-fit: cover; + transition: transform 0.6s cubic-bezier(0.25, 0.46, 0.45, 0.94); +} +.gallery-item-card:hover .gallery-img-wrapper img { + transform: scale(1.08); +} + +.gallery-overlay { + position: absolute; top: 0; left: 0; right: 0; bottom: 0; + background: linear-gradient(to bottom, rgba(11,74,142,0.2) 0%, rgba(11,74,142,0.8) 100%); + display: flex; align-items: center; justify-content: center; + opacity: 0; transition: opacity 0.3s ease; +} +.gallery-item-card:hover .gallery-overlay { opacity: 1; } + +.gallery-zoom-icon { + font-size: 32px; color: #fff; + transform: translateY(20px); + transition: transform 0.3s ease; + filter: drop-shadow(0 4px 6px rgba(0,0,0,0.3)); +} +.gallery-item-card:hover .gallery-zoom-icon { transform: translateY(0); } + +.gallery-item-info { padding: 22px 20px; } +.gallery-item-info h4 { margin: 0 0 10px; font-size: 17px; font-weight: 800; color: var(--heading-color); line-height: 1.4; } +.gallery-cat-badge { + display: inline-block; + font-size: 11px; font-weight: 800; + color: var(--secondary-color); + text-transform: uppercase; + letter-spacing: 0.5px; + background: #e0f2fe; padding: 4px 12px; border-radius: 20px; +} + +/* NATIVE LIGHTBOX (ZOOM EFEK) */ +.ek-lightbox { + position: fixed; top: 0; left: 0; width: 100%; height: 100%; + background: rgba(15, 23, 42, 0.96); z-index: 9999; + display: flex; align-items: center; justify-content: center; + opacity: 0; visibility: hidden; transition: all 0.3s ease; + backdrop-filter: blur(8px); +} +.ek-lightbox.show { opacity: 1; visibility: visible; } + +.ek-lb-close { + position: absolute; top: 25px; right: 35px; font-size: 45px; + color: rgba(255,255,255,0.6); cursor: pointer; line-height: 1; + transition: color 0.2s, transform 0.2s; z-index: 10; +} +.ek-lb-close:hover { color: #f59e0b; transform: scale(1.1); } + +.ek-lb-content { + max-width: 900px; width: 92%; max-height: 90vh; + display: flex; flex-direction: column; + background: #ffffff; border-radius: 16px; overflow: hidden; + transform: scale(0.95); transition: transform 0.35s cubic-bezier(0.175, 0.885, 0.32, 1.275); + box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.5); +} +.ek-lightbox.show .ek-lb-content { transform: scale(1); } + +.ek-lb-img-container { + width: 100%; height: 60vh; background: #000; + display: flex; align-items: center; justify-content: center; +} +.ek-lb-img-container img { + width: 100%; height: 100%; object-fit: contain; +} + +.ek-lb-caption { padding: 25px 35px; text-align: center; } +.ek-lb-cat { + font-size: 12px; font-weight: 800; color: var(--secondary-color); + text-transform: uppercase; letter-spacing: 1px; display: inline-block; + margin-bottom: 8px; background: #f1f5f9; padding: 4px 14px; border-radius: 20px; +} +.ek-lb-caption h3 { margin: 0 0 12px; font-size: 24px; font-weight: 800; color: var(--heading-color); } +.ek-lb-caption p { margin: 0; font-size: 15px; color: var(--text-color); line-height: 1.7; } + +/* Tombol Navigasi Lightbox */ +.ek-lb-nav { + position: absolute; top: 50%; transform: translateY(-50%); + background: rgba(255,255,255,0.1); border: 1px solid rgba(255,255,255,0.2); + color: #ffffff; width: 56px; height: 56px; border-radius: 50%; + font-size: 20px; cursor: pointer; transition: all 0.2s ease; + display: flex; align-items: center; justify-content: center; +} +.ek-lb-nav:hover { background: var(--primary-color); border-color: var(--primary-color); transform: translateY(-50%) scale(1.1); } +.ek-lb-prev { left: 40px; } +.ek-lb-next { right: 40px; } + +@media (max-width: 768px) { + .ek-lb-nav { width: 44px; height: 44px; font-size: 16px; } + .ek-lb-prev { left: 15px; } + .ek-lb-next { right: 15px; } + .ek-lb-close { top: 15px; right: 20px; font-size: 35px; } + .ek-lb-img-container { height: 45vh; } + .ek-lb-caption { padding: 20px; } + .ek-lb-caption h3 { font-size: 20px; } + .gallery-grid { grid-template-columns: 1fr; } +}