Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d95675fe76 |
@@ -1,69 +0,0 @@
|
|||||||
document.addEventListener("DOMContentLoaded", function() {
|
|
||||||
// Menu Toggle
|
|
||||||
const toggleBtn = document.getElementById("mobile-menu-toggle");
|
|
||||||
const navMenu = document.getElementById("site-navigation");
|
|
||||||
if (toggleBtn && navMenu) {
|
|
||||||
toggleBtn.addEventListener("click", function() {
|
|
||||||
toggleBtn.classList.toggle("active");
|
|
||||||
navMenu.classList.toggle("active");
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
// Back to Top
|
|
||||||
const bttBtn = document.getElementById("back-to-top");
|
|
||||||
if (bttBtn) {
|
|
||||||
window.addEventListener("scroll", function() {
|
|
||||||
if (window.scrollY > 350) { bttBtn.classList.add("show"); } else { bttBtn.classList.remove("show"); }
|
|
||||||
});
|
|
||||||
bttBtn.addEventListener("click", function() {
|
|
||||||
window.scrollTo({ top: 0, behavior: "smooth" });
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
// Accessibility Panel
|
|
||||||
const a11yTrigger = document.getElementById("a11y-trigger");
|
|
||||||
const a11yPanel = document.getElementById("a11y-panel");
|
|
||||||
const a11yClose = document.getElementById("a11y-close");
|
|
||||||
if (a11yTrigger && a11yPanel) {
|
|
||||||
a11yTrigger.addEventListener("click", function() { a11yPanel.classList.toggle("active"); });
|
|
||||||
if (a11yClose) { a11yClose.addEventListener("click", function() { a11yPanel.classList.remove("active"); }); }
|
|
||||||
|
|
||||||
const fontLevels = ['', 'a11y-font-lg', 'a11y-font-xl'];
|
|
||||||
let currentFontIdx = parseInt(localStorage.getItem('edukarsa_a11y_font') || '0', 10);
|
|
||||||
function applyA11y() {
|
|
||||||
fontLevels.forEach(function(c) { if (c) document.body.classList.remove(c); });
|
|
||||||
if (fontLevels[currentFontIdx]) { document.body.classList.add(fontLevels[currentFontIdx]); }
|
|
||||||
if (localStorage.getItem('edukarsa_a11y_contrast') === '1') { document.body.classList.add('a11y-high-contrast'); } else { document.body.classList.remove('a11y-high-contrast'); }
|
|
||||||
if (localStorage.getItem('edukarsa_a11y_grayscale') === '1') { document.body.classList.add('a11y-grayscale'); } else { document.body.classList.remove('a11y-grayscale'); }
|
|
||||||
if (localStorage.getItem('edukarsa_a11y_links') === '1') { document.body.classList.add('a11y-underline-links'); } else { document.body.classList.remove('a11y-underline-links'); }
|
|
||||||
}
|
|
||||||
applyA11y();
|
|
||||||
|
|
||||||
document.getElementById("a11y-font-inc")?.addEventListener("click", function() { if (currentFontIdx < fontLevels.length - 1) currentFontIdx++; localStorage.setItem('edukarsa_a11y_font', currentFontIdx); applyA11y(); });
|
|
||||||
document.getElementById("a11y-font-dec")?.addEventListener("click", function() { if (currentFontIdx > 0) currentFontIdx--; localStorage.setItem('edukarsa_a11y_font', currentFontIdx); applyA11y(); });
|
|
||||||
document.getElementById("a11y-font-reset")?.addEventListener("click", function() { currentFontIdx = 0; localStorage.setItem('edukarsa_a11y_font', currentFontIdx); applyA11y(); });
|
|
||||||
document.getElementById("a11y-contrast")?.addEventListener("click", function() { const active = localStorage.getItem('edukarsa_a11y_contrast') === '1'; localStorage.setItem('edukarsa_a11y_contrast', active ? '0' : '1'); applyA11y(); });
|
|
||||||
document.getElementById("a11y-grayscale")?.addEventListener("click", function() { const active = localStorage.getItem('edukarsa_a11y_grayscale') === '1'; localStorage.setItem('edukarsa_a11y_grayscale', active ? '0' : '1'); applyA11y(); });
|
|
||||||
document.getElementById("a11y-links")?.addEventListener("click", function() { const active = localStorage.getItem('edukarsa_a11y_links') === '1'; localStorage.setItem('edukarsa_a11y_links', active ? '0' : '1'); applyA11y(); });
|
|
||||||
document.getElementById("a11y-reset-all")?.addEventListener("click", function() {
|
|
||||||
currentFontIdx = 0;
|
|
||||||
localStorage.removeItem('edukarsa_a11y_font');
|
|
||||||
localStorage.removeItem('edukarsa_a11y_contrast');
|
|
||||||
localStorage.removeItem('edukarsa_a11y_grayscale');
|
|
||||||
localStorage.removeItem('edukarsa_a11y_links');
|
|
||||||
applyA11y();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
// Homepage Hero Slider Scroll
|
|
||||||
const slider = document.getElementById('hero-slider-wrapper');
|
|
||||||
if (slider && slider.children.length > 1) {
|
|
||||||
setInterval(function() {
|
|
||||||
if (slider.scrollLeft + slider.clientWidth >= slider.scrollWidth - 10) {
|
|
||||||
slider.scrollTo({ left: 0, behavior: 'smooth' });
|
|
||||||
} else {
|
|
||||||
slider.scrollBy({ left: slider.clientWidth, behavior: 'smooth' });
|
|
||||||
}
|
|
||||||
}, 4000);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
@@ -1,41 +0,0 @@
|
|||||||
<?php
|
|
||||||
defined( 'ABSPATH' ) || exit;
|
|
||||||
|
|
||||||
if ( post_password_required() ) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
?>
|
|
||||||
<div id="comments" class="comments-area card-style" style="padding: 30px; margin-top: 30px;">
|
|
||||||
<?php if ( have_comments() ) : ?>
|
|
||||||
<h3 class="comments-title" style="margin-bottom: 20px;">
|
|
||||||
<?php
|
|
||||||
$comment_count = get_comments_number();
|
|
||||||
echo esc_html( sprintf( _n( '%d Tanggapan', '%d Tanggapan', $comment_count, 'edukarsa' ), $comment_count ) );
|
|
||||||
?>
|
|
||||||
</h3>
|
|
||||||
|
|
||||||
<ol class="comment-list">
|
|
||||||
<?php
|
|
||||||
wp_list_comments( array(
|
|
||||||
'avatar_size' => 48,
|
|
||||||
'style' => 'ol',
|
|
||||||
'short_ping' => true,
|
|
||||||
) );
|
|
||||||
?>
|
|
||||||
</ol>
|
|
||||||
|
|
||||||
<?php the_comments_pagination( array(
|
|
||||||
'prev_text' => '« ' . esc_html__( 'Komentar Lama', 'edukarsa' ),
|
|
||||||
'next_text' => esc_html__( 'Komentar Baru', 'edukarsa' ) . ' »',
|
|
||||||
) ); ?>
|
|
||||||
|
|
||||||
<?php endif; ?>
|
|
||||||
|
|
||||||
<?php
|
|
||||||
if ( ! comments_open() && get_comments_number() && post_type_supports( get_post_type(), 'comments' ) ) :
|
|
||||||
?>
|
|
||||||
<p class="no-comments"><?php esc_html_e( 'Kolom komentar dinonaktifkan.', 'edukarsa' ); ?></p>
|
|
||||||
<?php endif; ?>
|
|
||||||
|
|
||||||
<?php comment_form(); ?>
|
|
||||||
</div>
|
|
||||||
@@ -1,6 +1,8 @@
|
|||||||
|
<?php defined( 'ABSPATH' ) || exit; ?>
|
||||||
<?php
|
<?php
|
||||||
defined( 'ABSPATH' ) || exit;
|
/**
|
||||||
|
* Template Footer EduKarsa Modern 4-Kolom
|
||||||
|
*/
|
||||||
$footer_logo = get_option( 'edukarsa_footer_logo' );
|
$footer_logo = get_option( 'edukarsa_footer_logo' );
|
||||||
if ( empty( $footer_logo ) ) {
|
if ( empty( $footer_logo ) ) {
|
||||||
$footer_logo = get_option( 'edukarsa_header_logo' );
|
$footer_logo = get_option( 'edukarsa_header_logo' );
|
||||||
@@ -10,12 +12,16 @@ $wa_clean = preg_replace( '/[^0-9]/', '', $raw_telp );
|
|||||||
if ( substr( $wa_clean, 0, 1 ) === '0' ) {
|
if ( substr( $wa_clean, 0, 1 ) === '0' ) {
|
||||||
$wa_clean = '62' . substr( $wa_clean, 1 );
|
$wa_clean = '62' . substr( $wa_clean, 1 );
|
||||||
}
|
}
|
||||||
|
|
||||||
$wa_btn_label = get_option( 'edukarsa_wa_btn_text', 'Tanya PMB' );
|
$wa_btn_label = get_option( 'edukarsa_wa_btn_text', 'Tanya PMB' );
|
||||||
$wa_def_msg = get_option( 'edukarsa_wa_default_msg', 'Halo Admin EduKarsa, saya ingin bertanya informasi lebih lanjut.' );
|
$wa_def_msg = get_option( 'edukarsa_wa_default_msg', 'Halo Admin EduKarsa, saya ingin bertanya informasi lebih lanjut.' );
|
||||||
?>
|
?>
|
||||||
|
|
||||||
|
<!-- MAIN FOOTER -->
|
||||||
<footer class="site-footer">
|
<footer class="site-footer">
|
||||||
<div class="container footer-grid-wrapper">
|
<div class="container footer-grid-wrapper">
|
||||||
|
|
||||||
|
<!-- Kolom 1: Brand & Profil -->
|
||||||
<div class="footer-col footer-col-brand">
|
<div class="footer-col footer-col-brand">
|
||||||
<div class="footer-brand-logo">
|
<div class="footer-brand-logo">
|
||||||
<?php if ( ! empty( $footer_logo ) ) : ?>
|
<?php if ( ! empty( $footer_logo ) ) : ?>
|
||||||
@@ -32,30 +38,31 @@ $wa_def_msg = get_option( 'edukarsa_wa_default_msg', 'Halo Admin EduKarsa, say
|
|||||||
if ( ! empty( $jam ) ) :
|
if ( ! empty( $jam ) ) :
|
||||||
?>
|
?>
|
||||||
<div class="footer-hours-box">
|
<div class="footer-hours-box">
|
||||||
<span class="hours-icon">🕘</span>
|
<span class="hours-icon">🕒</span>
|
||||||
<div>
|
<div>
|
||||||
<div style="font-size: 11px; text-transform: uppercase; letter-spacing: 0.8px; opacity: 0.8;"><?php esc_html_e( 'Jam Layanan', 'edukarsa' ); ?></div>
|
<div style="font-size: 11px; text-transform: uppercase; letter-spacing: 0.8px; opacity: 0.8;">Jam Layanan</div>
|
||||||
<div style="font-weight: 600; font-size: 13px; color: #fff; line-height: 1.6;"><?php echo nl2br( esc_html( $jam ) ); ?></div>
|
<div style="font-weight: 600; font-size: 13px; color: #fff; line-height: 1.6;"><?php echo nl2br( esc_html( $jam ) ); ?></div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<?php endif; ?>
|
<?php endif; ?>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<!-- Kolom 2: Kontak Resmi -->
|
||||||
<div class="footer-col">
|
<div class="footer-col">
|
||||||
<h4 class="footer-col-title"><?php esc_html_e( 'Hubungi Kami', 'edukarsa' ); ?></h4>
|
<h4 class="footer-col-title">Hubungi Kami</h4>
|
||||||
<ul class="footer-contact-list">
|
<ul class="footer-contact-list">
|
||||||
<li>
|
<li>
|
||||||
<span class="f-icon">📍</span>
|
<span class="f-icon">📍</span>
|
||||||
<span><?php echo nl2br( esc_html( get_option( 'edukarsa_footer_alamat', 'Alamat belum diatur di dashboard' ) ) ); ?></span>
|
<span><?php echo nl2br( esc_html( get_option( 'edukarsa_footer_alamat', 'Alamat belum diatur di dashboard' ) ) ); ?></span>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<span class="f-icon">📞</span>
|
<span class="f-icon">📞</span>
|
||||||
<a href="tel:<?php echo esc_attr( $wa_clean ); ?>">
|
<a href="tel:<?php echo esc_attr( $wa_clean ); ?>">
|
||||||
<?php echo esc_html( get_option( 'edukarsa_footer_telp', '(021) 000-0000' ) ); ?>
|
<?php echo esc_html( get_option( 'edukarsa_footer_telp', '(021) 000-0000' ) ); ?>
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<span class="f-icon">✉</span>
|
<span class="f-icon">✉️</span>
|
||||||
<a href="mailto:<?php echo esc_attr( get_option( 'edukarsa_footer_email', '[email protected]' ) ); ?>">
|
<a href="mailto:<?php echo esc_attr( get_option( 'edukarsa_footer_email', '[email protected]' ) ); ?>">
|
||||||
<?php echo esc_html( get_option( 'edukarsa_footer_email', '[email protected]' ) ); ?>
|
<?php echo esc_html( get_option( 'edukarsa_footer_email', '[email protected]' ) ); ?>
|
||||||
</a>
|
</a>
|
||||||
@@ -63,9 +70,10 @@ $wa_def_msg = get_option( 'edukarsa_wa_default_msg', 'Halo Admin EduKarsa, say
|
|||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<!-- Kolom 3: Tautan Penting -->
|
||||||
<div class="footer-col">
|
<div class="footer-col">
|
||||||
<h4 class="footer-col-title"><?php esc_html_e( 'Tautan Penting', 'edukarsa' ); ?></h4>
|
<h4 class="footer-col-title">Tautan Penting</h4>
|
||||||
<nav class="footer-nav-clean" aria-label="<?php esc_attr_e( 'Menu Footer', 'edukarsa' ); ?>">
|
<nav class="footer-nav-clean">
|
||||||
<?php
|
<?php
|
||||||
wp_nav_menu( array(
|
wp_nav_menu( array(
|
||||||
'theme_location' => 'menu-footer',
|
'theme_location' => 'menu-footer',
|
||||||
@@ -78,10 +86,11 @@ $wa_def_msg = get_option( 'edukarsa_wa_default_msg', 'Halo Admin EduKarsa, say
|
|||||||
</nav>
|
</nav>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<!-- Kolom 4: Media Sosial Institusi -->
|
||||||
<div class="footer-col">
|
<div class="footer-col">
|
||||||
<h4 class="footer-col-title"><?php esc_html_e( 'Media Sosial', 'edukarsa' ); ?></h4>
|
<h4 class="footer-col-title">Media Sosial</h4>
|
||||||
<p style="font-size: 13px; opacity: 0.85; margin-bottom: 18px; line-height: 1.5;">
|
<p style="font-size: 13px; opacity: 0.85; margin-bottom: 18px; line-height: 1.5;">
|
||||||
<?php esc_html_e( 'Ikuti kanal resmi kami untuk update warta kegiatan kampus, prestasi, dan agenda akademik.', 'edukarsa' ); ?>
|
Ikuti kanal resmi kami untuk update warta kegiatan kampus, prestasi, dan agenda akademik.
|
||||||
</p>
|
</p>
|
||||||
<div class="footer-social-icons">
|
<div class="footer-social-icons">
|
||||||
<?php if ( get_option( 'edukarsa_tampil_fb', 1 ) == 1 && get_option( 'edukarsa_footer_fb' ) ) : ?>
|
<?php if ( get_option( 'edukarsa_tampil_fb', 1 ) == 1 && get_option( 'edukarsa_footer_fb' ) ) : ?>
|
||||||
@@ -89,80 +98,93 @@ $wa_def_msg = get_option( 'edukarsa_wa_default_msg', 'Halo Admin EduKarsa, say
|
|||||||
<svg width="18" height="18" viewBox="0 0 24 24" fill="currentColor"><path d="M22 12c0-5.52-4.48-10-10-10S2 6.48 2 12c0 4.84 3.44 8.87 8 9.8V15H8v-3h2V9.5C10 7.57 11.57 6 13.5 6H16v3h-2c-.55 0-1 .45-1 1v2h3v3h-3v6.95c5.05-.5 9-4.76 9-9.95z"/></svg>
|
<svg width="18" height="18" viewBox="0 0 24 24" fill="currentColor"><path d="M22 12c0-5.52-4.48-10-10-10S2 6.48 2 12c0 4.84 3.44 8.87 8 9.8V15H8v-3h2V9.5C10 7.57 11.57 6 13.5 6H16v3h-2c-.55 0-1 .45-1 1v2h3v3h-3v6.95c5.05-.5 9-4.76 9-9.95z"/></svg>
|
||||||
</a>
|
</a>
|
||||||
<?php endif; ?>
|
<?php endif; ?>
|
||||||
|
|
||||||
<?php if ( get_option( 'edukarsa_tampil_ig', 1 ) == 1 && get_option( 'edukarsa_footer_ig' ) ) : ?>
|
<?php if ( get_option( 'edukarsa_tampil_ig', 1 ) == 1 && get_option( 'edukarsa_footer_ig' ) ) : ?>
|
||||||
<a href="<?php echo esc_url( get_option( 'edukarsa_footer_ig' ) ); ?>" target="_blank" rel="noopener" class="social-btn" title="Instagram">
|
<a href="<?php echo esc_url( get_option( 'edukarsa_footer_ig' ) ); ?>" target="_blank" rel="noopener" class="social-btn" title="Instagram">
|
||||||
<svg width="18" height="18" viewBox="0 0 24 24" fill="currentColor"><path d="M12 2.163c3.204 0 3.584.012 4.85.07 3.252.148 4.771 1.691 4.919 4.919.058 1.265.069 1.645.069 4.849 0 3.205-.012 3.584-.069 4.849-.149 3.225-1.664 4.771-4.919 4.919-1.266.058-1.644.07-4.85.07-3.204 0-3.584-.012-4.849-.07-3.26-.149-4.771-1.699-4.919-4.92-.058-1.265-.07-1.644-.07-4.849 0-3.204.013-3.583.07-4.849.149-3.227 1.664-4.771 4.919-4.919 1.266-.057 1.645-.069 4.849-.069zm0-2.163c-3.259 0-3.667.014-4.947.072-4.358.2-6.78 2.618-6.98 6.98-.059 1.281-.073 1.689-.073 4.948 0 3.259.014 3.668.072 4.948.2 4.358 2.618 6.78 6.98 6.98 1.281.058 1.689.072 4.948.072 3.259 0 3.668-.014 4.948-.072 4.354-.2 6.782-2.618 6.979-6.98.059-1.28.073-1.689-.073-4.948 0-3.259-.014-3.667-.072-4.947-.196-4.354-2.617-6.78-6.979-6.98-1.281-.059-1.69-.073-4.949-.073zm0 5.838c-3.403 0-6.162 2.759-6.162 6.162s2.759 6.163 6.162 6.163 6.162-2.759 6.162-6.163c0-3.403-2.759-6.162-6.162-6.162zm0 10.162c-2.209 0-4-1.79-4-4 0-2.209 1.791-4 4-4s4 1.791 4 4c0 2.21-1.791 4-4 4zm6.406-11.845c-.796 0-1.441.645-1.441 1.44s.645 1.44 1.441 1.44c.795 0 1.439-.645 1.439-1.44s-.644-1.44-1.439-1.44z"/></svg>
|
<svg width="18" height="18" viewBox="0 0 24 24" fill="currentColor"><path d="M12 2.163c3.204 0 3.584.012 4.85.07 3.252.148 4.771 1.691 4.919 4.919.058 1.265.069 1.645.069 4.849 0 3.205-.012 3.584-.069 4.849-.149 3.225-1.664 4.771-4.919 4.919-1.266.058-1.644.07-4.85.07-3.204 0-3.584-.012-4.849-.07-3.26-.149-4.771-1.699-4.919-4.92-.058-1.265-.07-1.644-.07-4.849 0-3.204.013-3.583.07-4.849.149-3.227 1.664-4.771 4.919-4.919 1.266-.057 1.645-.069 4.849-.069zm0-2.163c-3.259 0-3.667.014-4.947.072-4.358.2-6.78 2.618-6.98 6.98-.059 1.281-.073 1.689-.073 4.948 0 3.259.014 3.668.072 4.948.2 4.358 2.618 6.78 6.98 6.98 1.281.058 1.689.072 4.948.072 3.259 0 3.668-.014 4.948-.072 4.354-.2 6.782-2.618 6.979-6.98.059-1.28.073-1.689-.073-4.948 0-3.259-.014-3.667-.072-4.947-.196-4.354-2.617-6.78-6.979-6.98-1.281-.059-1.69-.073-4.949-.073zm0 5.838c-3.403 0-6.162 2.759-6.162 6.162s2.759 6.163 6.162 6.163 6.162-2.759 6.162-6.163c0-3.403-2.759-6.162-6.162-6.162zm0 10.162c-2.209 0-4-1.79-4-4 0-2.209 1.791-4 4-4s4 1.791 4 4c0 2.21-1.791 4-4 4zm6.406-11.845c-.796 0-1.441.645-1.441 1.44s.645 1.44 1.441 1.44c.795 0 1.439-.645 1.439-1.44s-.644-1.44-1.439-1.44z"/></svg>
|
||||||
</a>
|
</a>
|
||||||
<?php endif; ?>
|
<?php endif; ?>
|
||||||
|
|
||||||
<?php if ( get_option( 'edukarsa_tampil_yt', 1 ) == 1 && get_option( 'edukarsa_footer_yt' ) ) : ?>
|
<?php if ( get_option( 'edukarsa_tampil_yt', 1 ) == 1 && get_option( 'edukarsa_footer_yt' ) ) : ?>
|
||||||
<a href="<?php echo esc_url( get_option( 'edukarsa_footer_yt' ) ); ?>" target="_blank" rel="noopener" class="social-btn" title="YouTube">
|
<a href="<?php echo esc_url( get_option( 'edukarsa_footer_yt' ) ); ?>" target="_blank" rel="noopener" class="social-btn" title="YouTube">
|
||||||
<svg width="18" height="18" viewBox="0 0 24 24" fill="currentColor"><path d="M23.498 6.186a3.016 3.016 0 0 0-2.122-2.136C19.505 3.545 12 3.545 12 3.545s-7.505 0-9.377.505A3.017 3.017 0 0 0 .502 6.186C0 8.07 0 12 0 12s0 3.93.502 5.814a3.016 3.016 0 0 0 2.122 2.136c1.871.505 9.376.505 9.376.505s7.505 0 9.377-.505a3.015 3.015 0 0 0 2.122-2.136C24 15.93 24 12 24 12s0-3.93-.502-5.814zM9.545 15.568V8.432L15.818 12l-6.273 3.568z"/></svg>
|
<svg width="18" height="18" viewBox="0 0 24 24" fill="currentColor"><path d="M23.498 6.186a3.016 3.016 0 0 0-2.122-2.136C19.505 3.545 12 3.545 12 3.545s-7.505 0-9.377.505A3.017 3.017 0 0 0 .502 6.186C0 8.07 0 12 0 12s0 3.93.502 5.814a3.016 3.016 0 0 0 2.122 2.136c1.871.505 9.376.505 9.376.505s7.505 0 9.377-.505a3.015 3.015 0 0 0 2.122-2.136C24 15.93 24 12 24 12s0-3.93-.502-5.814zM9.545 15.568V8.432L15.818 12l-6.273 3.568z"/></svg>
|
||||||
</a>
|
</a>
|
||||||
<?php endif; ?>
|
<?php endif; ?>
|
||||||
<?php if ( get_option( 'edukarsa_tampil_tiktok', 1 ) == 1 && get_option( 'edukarsa_footer_tiktok' ) ) : ?>
|
|
||||||
|
<?php if ( get_option( 'edukarsa_tampil_tiktok', 0 ) == 1 && get_option( 'edukarsa_footer_tiktok' ) ) : ?>
|
||||||
<a href="<?php echo esc_url( get_option( 'edukarsa_footer_tiktok' ) ); ?>" target="_blank" rel="noopener" class="social-btn" title="TikTok">
|
<a href="<?php echo esc_url( get_option( 'edukarsa_footer_tiktok' ) ); ?>" target="_blank" rel="noopener" class="social-btn" title="TikTok">
|
||||||
<svg width="18" height="18" viewBox="0 0 24 24" fill="currentColor"><path d="M12.525.02c1.31-.02 2.61-.01 3.91-.02.08 1.53.63 3.09 1.75 4.17 1.12 1.11 2.7 1.62 4.24 1.79v4.03c-1.44-.05-2.89-.35-4.2-.97-.57-.26-1.1-.59-1.62-1.01-.01 2.92.01 5.84-.02 8.75-.08 1.4-.54 2.79-1.35 3.94-1.31 1.92-3.58 3.17-5.91 3.21-1.43.08-2.86-.31-4.08-1.03-2.02-1.19-3.44-3.37-3.65-5.71-.02-.5-.03-1-.01-1.49.18-1.9 1.12-3.72 2.58-4.96 1.66-1.44 3.98-2.13 6.15-1.72.02 1.48-.04 2.96-.04 4.44-.99-.32-2.15-.23-3.02.37-.63.41-1.11 1.04-1.36 1.75-.21.51-.24 1.07-.14 1.61.24 1.64 1.82 2.89 3.5 2.77 1.81-.05 3.29-1.52 3.36-3.33.04-3.78.02-7.57.02-11.35z"/></svg>
|
<svg width="18" height="18" viewBox="0 0 24 24" fill="currentColor"><path d="M12.525.02c1.31-.02 2.61-.01 3.91-.02.08 1.53.63 3.09 1.75 4.17 1.12 1.11 2.7 1.62 4.24 1.79v4.03c-1.44-.05-2.89-.35-4.2-.97-.57-.26-1.1-.59-1.62-1.01-.01 2.92.01 5.84-.02 8.75-.08 1.4-.54 2.79-1.35 3.94-1.31 1.92-3.58 3.17-5.91 3.21-1.43.08-2.86-.31-4.08-1.03-2.02-1.19-3.44-3.37-3.65-5.71-.02-.5-.03-1-.01-1.49.18-1.9 1.12-3.72 2.58-4.96 1.66-1.44 3.98-2.13 6.15-1.72.02 1.48-.04 2.96-.04 4.44-.99-.32-2.15-.23-3.02.37-.63.41-1.11 1.04-1.36 1.75-.21.51-.24 1.07-.14 1.61.24 1.64 1.82 2.89 3.5 2.77 1.81-.05 3.29-1.52 3.36-3.33.04-3.78.02-7.57.02-11.35z"/></svg>
|
||||||
</a>
|
</a>
|
||||||
<?php endif; ?>
|
<?php endif; ?>
|
||||||
<?php if ( get_option( 'edukarsa_tampil_x', 1 ) == 1 && get_option( 'edukarsa_footer_x' ) ) : ?>
|
|
||||||
|
<?php if ( get_option( 'edukarsa_tampil_x', 0 ) == 1 && get_option( 'edukarsa_footer_x' ) ) : ?>
|
||||||
<a href="<?php echo esc_url( get_option( 'edukarsa_footer_x' ) ); ?>" target="_blank" rel="noopener" class="social-btn" title="X (Twitter)">
|
<a href="<?php echo esc_url( get_option( 'edukarsa_footer_x' ) ); ?>" target="_blank" rel="noopener" class="social-btn" title="X (Twitter)">
|
||||||
<svg width="18" height="18" viewBox="0 0 24 24" fill="currentColor"><path d="M18.244 2.25h3.308l-7.227 8.26 8.502 11.24H16.17l-5.214-6.817L4.99 21.75H1.68l7.73-8.835L1.254 2.25H8.08l4.713 6.231zm-1.161 17.52h1.833L7.084 4.126H5.117z"/></svg>
|
<svg width="18" height="18" viewBox="0 0 24 24" fill="currentColor"><path d="M18.244 2.25h3.308l-7.227 8.26 8.502 11.24H16.17l-5.214-6.817L4.99 21.75H1.68l7.73-8.835L1.254 2.25H8.08l4.713 6.231zm-1.161 17.52h1.833L7.084 4.126H5.117z"/></svg>
|
||||||
</a>
|
</a>
|
||||||
<?php endif; ?>
|
<?php endif; ?>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<!-- COPYRIGHT BAR DENGAN WATERMARK KREATOR -->
|
||||||
<div class="footer-bottom-bar">
|
<div class="footer-bottom-bar">
|
||||||
<div class="container footer-bottom-inner">
|
<div class="container footer-bottom-inner">
|
||||||
<p class="copyright-text">
|
<p class="copyright-text">
|
||||||
© <?php echo esc_html( date( 'Y' ) ); ?> <?php echo esc_html( get_option( 'edukarsa_footer_copyright', 'EduKarsa. All Rights Reserved.' ) ); ?>
|
© <?php echo date( 'Y' ); ?> <?php echo esc_html( get_option( 'edukarsa_footer_copyright', 'EduKarsa University. All Rights Reserved.' ) ); ?>
|
||||||
|
<span style="opacity: 0.5; margin: 0 6px;">•</span>
|
||||||
|
<span>Tema <a href="https://apps.masbudi.my.id/edukarsa" target="_blank" rel="noopener" style="color: #f39c12; font-weight: 700; text-decoration: none;">EduKarsa</a> oleh <a href="https://masbudi.my.id" target="_blank" rel="noopener" style="color: #ffffff; text-decoration: underline;">masbudi.my.id</a></span>
|
||||||
</p>
|
</p>
|
||||||
<div class="footer-bottom-badge">
|
<div class="footer-bottom-badge">
|
||||||
<span><?php esc_html_e( 'Terakreditasi BAN-PT • Kampus Merdeka', 'edukarsa' ); ?></span>
|
<span>Terakreditasi BAN-PT • Kampus Merdeka</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</footer>
|
</footer>
|
||||||
|
|
||||||
|
<!-- WIDGET AKSESIBILITAS DISABILITAS & PEMBACA SUARA (WCAG TOOLBAR) -->
|
||||||
<?php if ( get_option( 'edukarsa_tampil_accessibility', 1 ) == 1 ) : ?>
|
<?php if ( get_option( 'edukarsa_tampil_accessibility', 1 ) == 1 ) : ?>
|
||||||
<div class="edukarsa-a11y-wrapper" id="a11y-wrapper">
|
<div class="edukarsa-a11y-wrapper" id="a11y-wrapper">
|
||||||
<button type="button" class="edukarsa-a11y-trigger" id="a11y-trigger" aria-label="<?php esc_attr_e( 'Buka Menu Aksesibilitas', 'edukarsa' ); ?>" title="<?php esc_attr_e( 'Aksesibilitas Disabilitas', 'edukarsa' ); ?>">
|
<button type="button" class="edukarsa-a11y-trigger" id="a11y-trigger" aria-label="Buka Menu Aksesibilitas" title="Aksesibilitas Disabilitas">
|
||||||
<svg width="24" height="24" viewBox="0 0 24 24" fill="currentColor"><path d="M12 2c1.1 0 2 .9 2 2s-.9 2-2 2-2-.9-2-2 .9-2 2-2zm9 7h-6v13h-2v-6h-2v6H9V9H3V7h18v2z"/></svg>
|
<svg width="24" height="24" viewBox="0 0 24 24" fill="currentColor"><path d="M12 2c1.1 0 2 .9 2 2s-.9 2-2 2-2-.9-2-2 .9-2 2-2zm9 7h-6v13h-2v-6h-2v6H9V9H3V7h18v2z"/></svg>
|
||||||
</button>
|
</button>
|
||||||
|
|
||||||
<div class="edukarsa-a11y-panel" id="a11y-panel">
|
<div class="edukarsa-a11y-panel" id="a11y-panel">
|
||||||
<div class="a11y-panel-header">
|
<div class="a11y-panel-header">
|
||||||
<h4><?php esc_html_e( 'Aksesibilitas', 'edukarsa' ); ?></h4>
|
<h4>♿ Aksesibilitas</h4>
|
||||||
<button type="button" class="a11y-close-btn" id="a11y-close">×</button>
|
<button type="button" class="a11y-close-btn" id="a11y-close">×</button>
|
||||||
</div>
|
</div>
|
||||||
<div class="a11y-panel-body">
|
<div class="a11y-panel-body">
|
||||||
<div class="a11y-group">
|
<div class="a11y-group">
|
||||||
<span class="a11y-label"><?php esc_html_e( 'Pembaca Suara (Audio)', 'edukarsa' ); ?></span>
|
<span class="a11y-label">Pembaca Suara (Audio)</span>
|
||||||
<div class="a11y-btn-grid">
|
<div class="a11y-btn-grid">
|
||||||
<button type="button" class="a11y-btn" id="a11y-speak-play"><?php esc_html_e( 'Baca', 'edukarsa' ); ?></button>
|
<button type="button" class="a11y-btn" id="a11y-speak-play">🔊 Baca</button>
|
||||||
<button type="button" class="a11y-btn" id="a11y-speak-stop"><?php esc_html_e( 'Berhenti', 'edukarsa' ); ?></button>
|
<button type="button" class="a11y-btn" id="a11y-speak-stop">⏹ Berhenti</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="a11y-group">
|
<div class="a11y-group">
|
||||||
<span class="a11y-label"><?php esc_html_e( 'Ukuran Teks', 'edukarsa' ); ?></span>
|
<span class="a11y-label">Ukuran Teks</span>
|
||||||
<div class="a11y-btn-grid">
|
<div class="a11y-btn-grid">
|
||||||
<button type="button" class="a11y-btn" id="a11y-font-dec">A-</button>
|
<button type="button" class="a11y-btn" id="a11y-font-dec">A-</button>
|
||||||
<button type="button" class="a11y-btn" id="a11y-font-reset"><?php esc_html_e( 'Normal', 'edukarsa' ); ?></button>
|
<button type="button" class="a11y-btn" id="a11y-font-reset">Normal</button>
|
||||||
<button type="button" class="a11y-btn" id="a11y-font-inc">A+</button>
|
<button type="button" class="a11y-btn" id="a11y-font-inc">A+</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="a11y-group">
|
<div class="a11y-group">
|
||||||
<span class="a11y-label"><?php esc_html_e( 'Tampilan Visual', 'edukarsa' ); ?></span>
|
<span class="a11y-label">Tampilan Visual</span>
|
||||||
<div class="a11y-btn-grid">
|
<div class="a11y-btn-grid">
|
||||||
<button type="button" class="a11y-btn" id="a11y-contrast"><?php esc_html_e( 'Kontras', 'edukarsa' ); ?></button>
|
<button type="button" class="a11y-btn" id="a11y-contrast">Kontras</button>
|
||||||
<button type="button" class="a11y-btn" id="a11y-grayscale"><?php esc_html_e( 'Monokrom', 'edukarsa' ); ?></button>
|
<button type="button" class="a11y-btn" id="a11y-grayscale">Monokrom</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="a11y-group">
|
<div class="a11y-group">
|
||||||
<span class="a11y-label"><?php esc_html_e( 'Navigasi', 'edukarsa' ); ?></span>
|
<span class="a11y-label">Navigasi</span>
|
||||||
<div class="a11y-btn-grid">
|
<div class="a11y-btn-grid">
|
||||||
<button type="button" class="a11y-btn" id="a11y-links"><?php esc_html_e( 'Garis Tautan', 'edukarsa' ); ?></button>
|
<button type="button" class="a11y-btn" id="a11y-links">Garis Tautan</button>
|
||||||
<button type="button" class="a11y-btn a11y-btn-danger" id="a11y-reset-all"><?php esc_html_e( 'Reset', 'edukarsa' ); ?></button>
|
<button type="button" class="a11y-btn a11y-btn-danger" id="a11y-reset-all">Reset</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -170,6 +192,7 @@ $wa_def_msg = get_option( 'edukarsa_wa_default_msg', 'Halo Admin EduKarsa, say
|
|||||||
</div>
|
</div>
|
||||||
<?php endif; ?>
|
<?php endif; ?>
|
||||||
|
|
||||||
|
<!-- FLOATING WHATSAPP (LABEL & PESAN DINAMIS) -->
|
||||||
<?php if ( ! empty( $wa_clean ) ) : ?>
|
<?php if ( ! empty( $wa_clean ) ) : ?>
|
||||||
<a href="https://wa.me/<?php echo esc_attr( $wa_clean ); ?>?text=<?php echo rawurlencode( $wa_def_msg ); ?>" target="_blank" rel="noopener" class="edukarsa-wa-float" title="<?php echo esc_attr( $wa_btn_label ); ?>">
|
<a href="https://wa.me/<?php echo esc_attr( $wa_clean ); ?>?text=<?php echo rawurlencode( $wa_def_msg ); ?>" target="_blank" rel="noopener" class="edukarsa-wa-float" title="<?php echo esc_attr( $wa_btn_label ); ?>">
|
||||||
<svg width="24" height="24" viewBox="0 0 24 24" fill="#ffffff"><path d="M12.031 6.172c-3.181 0-5.767 2.586-5.768 5.766-.001 1.298.38 2.27 1.019 3.287l-.711 2.598 2.664-.699c.971.53 1.777.82 2.796.82h.005c3.18 0 5.767-2.586 5.768-5.766 0-3.18-2.587-5.806-5.773-5.806zm3.376 8.214c-.149.42-.767.781-1.072.829-.304.048-.687.069-2.203-.559-1.933-.801-3.178-2.775-3.275-2.905-.095-.129-.778-1.036-.778-1.975 0-.94.492-1.401.667-1.593.175-.192.383-.24.512-.24.129 0 .258.006.371.012.12.006.279-.045.436.334.164.397.558 1.365.607 1.465.049.099.082.217.017.348-.065.131-.098.212-.195.328-.098.115-.205.258-.293.346-.098.098-.201.205-.087.401.115.196.512.846 1.099 1.368.756.673 1.393.882 1.59.98.196.098.312.082.426-.049.115-.131.492-.573.623-.77.131-.196.262-.164.442-.098.18.065 1.147.541 1.344.639.196.098.328.147.377.229.049.082.049.475-.1.895z"/></svg>
|
<svg width="24" height="24" viewBox="0 0 24 24" fill="#ffffff"><path d="M12.031 6.172c-3.181 0-5.767 2.586-5.768 5.766-.001 1.298.38 2.27 1.019 3.287l-.711 2.598 2.664-.699c.971.53 1.777.82 2.796.82h.005c3.18 0 5.767-2.586 5.768-5.766 0-3.18-2.587-5.806-5.773-5.806zm3.376 8.214c-.149.42-.767.781-1.072.829-.304.048-.687.069-2.203-.559-1.933-.801-3.178-2.775-3.275-2.905-.095-.129-.778-1.036-.778-1.975 0-.94.492-1.401.667-1.593.175-.192.383-.24.512-.24.129 0 .258.006.371.012.12.006.279-.045.436.334.164.397.558 1.365.607 1.465.049.099.082.217.017.348-.065.131-.098.212-.195.328-.098.115-.205.258-.293.346-.098.098-.201.205-.087.401.115.196.512.846 1.099 1.368.756.673 1.393.882 1.59.98.196.098.312.082.426-.049.115-.131.492-.573.623-.77.131-.196.262-.164.442-.098.18.065 1.147.541 1.344.639.196.098.328.147.377.229.049.082.049.475-.1.895z"/></svg>
|
||||||
@@ -177,7 +200,183 @@ $wa_def_msg = get_option( 'edukarsa_wa_default_msg', 'Halo Admin EduKarsa, say
|
|||||||
</a>
|
</a>
|
||||||
<?php endif; ?>
|
<?php endif; ?>
|
||||||
|
|
||||||
<button id="back-to-top" class="back-to-top-btn" aria-label="<?php esc_attr_e( 'Kembali ke atas', 'edukarsa' ); ?>">⇧</button>
|
<!-- BACK TO TOP -->
|
||||||
|
<button id="back-to-top" class="back-to-top-btn" aria-label="Kembali ke atas">▲</button>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
document.addEventListener("DOMContentLoaded", function() {
|
||||||
|
const toggleBtn = document.getElementById("mobile-menu-toggle");
|
||||||
|
const navMenu = document.getElementById("site-navigation");
|
||||||
|
if (toggleBtn && navMenu) {
|
||||||
|
toggleBtn.addEventListener("click", function() {
|
||||||
|
toggleBtn.classList.toggle("active");
|
||||||
|
navMenu.classList.toggle("active");
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
const bttBtn = document.getElementById("back-to-top");
|
||||||
|
if (bttBtn) {
|
||||||
|
window.addEventListener("scroll", function() {
|
||||||
|
if (window.scrollY > 350) { bttBtn.classList.add("show"); } else { bttBtn.classList.remove("show"); }
|
||||||
|
});
|
||||||
|
bttBtn.addEventListener("click", function() {
|
||||||
|
window.scrollTo({ top: 0, behavior: "smooth" });
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
const a11yTrigger = document.getElementById("a11y-trigger");
|
||||||
|
const a11yPanel = document.getElementById("a11y-panel");
|
||||||
|
const a11yClose = document.getElementById("a11y-close");
|
||||||
|
|
||||||
|
if (a11yTrigger && a11yPanel) {
|
||||||
|
a11yTrigger.addEventListener("click", function() {
|
||||||
|
a11yPanel.classList.toggle("active");
|
||||||
|
});
|
||||||
|
if (a11yClose) {
|
||||||
|
a11yClose.addEventListener("click", function() {
|
||||||
|
a11yPanel.classList.remove("active");
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
const fontLevels = ['', 'a11y-font-lg', 'a11y-font-xl'];
|
||||||
|
let currentFontIdx = parseInt(localStorage.getItem('edukarsa_a11y_font') || '0', 10);
|
||||||
|
|
||||||
|
function applyA11y() {
|
||||||
|
fontLevels.forEach(function(c) {
|
||||||
|
if (c) document.body.classList.remove(c);
|
||||||
|
});
|
||||||
|
if (fontLevels[currentFontIdx]) {
|
||||||
|
document.body.classList.add(fontLevels[currentFontIdx]);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (localStorage.getItem('edukarsa_a11y_contrast') === '1') {
|
||||||
|
document.body.classList.add('a11y-high-contrast');
|
||||||
|
} else {
|
||||||
|
document.body.classList.remove('a11y-high-contrast');
|
||||||
|
}
|
||||||
|
|
||||||
|
if (localStorage.getItem('edukarsa_a11y_grayscale') === '1') {
|
||||||
|
document.body.classList.add('a11y-grayscale');
|
||||||
|
} else {
|
||||||
|
document.body.classList.remove('a11y-grayscale');
|
||||||
|
}
|
||||||
|
|
||||||
|
if (localStorage.getItem('edukarsa_a11y_links') === '1') {
|
||||||
|
document.body.classList.add('a11y-underline-links');
|
||||||
|
} else {
|
||||||
|
document.body.classList.remove('a11y-underline-links');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
applyA11y();
|
||||||
|
|
||||||
|
document.getElementById("a11y-font-inc")?.addEventListener("click", function() {
|
||||||
|
if (currentFontIdx < fontLevels.length - 1) currentFontIdx++;
|
||||||
|
localStorage.setItem('edukarsa_a11y_font', currentFontIdx);
|
||||||
|
applyA11y();
|
||||||
|
});
|
||||||
|
|
||||||
|
document.getElementById("a11y-font-dec")?.addEventListener("click", function() {
|
||||||
|
if (currentFontIdx > 0) currentFontIdx--;
|
||||||
|
localStorage.setItem('edukarsa_a11y_font', currentFontIdx);
|
||||||
|
applyA11y();
|
||||||
|
});
|
||||||
|
|
||||||
|
document.getElementById("a11y-font-reset")?.addEventListener("click", function() {
|
||||||
|
currentFontIdx = 0;
|
||||||
|
localStorage.setItem('edukarsa_a11y_font', currentFontIdx);
|
||||||
|
applyA11y();
|
||||||
|
});
|
||||||
|
|
||||||
|
document.getElementById("a11y-contrast")?.addEventListener("click", function() {
|
||||||
|
const active = localStorage.getItem('edukarsa_a11y_contrast') === '1';
|
||||||
|
localStorage.setItem('edukarsa_a11y_contrast', active ? '0' : '1');
|
||||||
|
applyA11y();
|
||||||
|
});
|
||||||
|
|
||||||
|
document.getElementById("a11y-grayscale")?.addEventListener("click", function() {
|
||||||
|
const active = localStorage.getItem('edukarsa_a11y_grayscale') === '1';
|
||||||
|
localStorage.setItem('edukarsa_a11y_grayscale', active ? '0' : '1');
|
||||||
|
applyA11y();
|
||||||
|
});
|
||||||
|
|
||||||
|
document.getElementById("a11y-links")?.addEventListener("click", function() {
|
||||||
|
const active = localStorage.getItem('edukarsa_a11y_links') === '1';
|
||||||
|
localStorage.setItem('edukarsa_a11y_links', active ? '0' : '1');
|
||||||
|
applyA11y();
|
||||||
|
});
|
||||||
|
|
||||||
|
document.getElementById("a11y-reset-all")?.addEventListener("click", function() {
|
||||||
|
currentFontIdx = 0;
|
||||||
|
localStorage.removeItem('edukarsa_a11y_font');
|
||||||
|
localStorage.removeItem('edukarsa_a11y_contrast');
|
||||||
|
localStorage.removeItem('edukarsa_a11y_grayscale');
|
||||||
|
localStorage.removeItem('edukarsa_a11y_links');
|
||||||
|
applyA11y();
|
||||||
|
if ('speechSynthesis' in window) {
|
||||||
|
window.speechSynthesis.cancel();
|
||||||
|
const pBtn = document.getElementById("a11y-speak-play");
|
||||||
|
if (pBtn) { pBtn.classList.remove('speaking'); pBtn.innerText = "🔊 Baca"; }
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
const speakPlayBtn = document.getElementById("a11y-speak-play");
|
||||||
|
const speakStopBtn = document.getElementById("a11y-speak-stop");
|
||||||
|
|
||||||
|
if ('speechSynthesis' in window && speakPlayBtn) {
|
||||||
|
const synth = window.speechSynthesis;
|
||||||
|
|
||||||
|
speakPlayBtn.addEventListener("click", function() {
|
||||||
|
if (synth.speaking) {
|
||||||
|
synth.cancel();
|
||||||
|
}
|
||||||
|
|
||||||
|
const contentEl = document.querySelector("article .entry-content") || document.getElementById("primary") || document.body;
|
||||||
|
const textToRead = contentEl.innerText.replace(/\s+/g, ' ').trim();
|
||||||
|
if (!textToRead) return;
|
||||||
|
|
||||||
|
const utterance = new SpeechSynthesisUtterance(textToRead);
|
||||||
|
|
||||||
|
const match = document.cookie.match(/googtrans=\/id\/([a-zA-Z\-]+)/i);
|
||||||
|
const activeLang = match ? match[1].toLowerCase() : 'id';
|
||||||
|
|
||||||
|
if (activeLang === 'en') {
|
||||||
|
utterance.lang = 'en-US';
|
||||||
|
} else if (activeLang === 'ar') {
|
||||||
|
utterance.lang = 'ar-SA';
|
||||||
|
} else {
|
||||||
|
utterance.lang = 'id-ID';
|
||||||
|
}
|
||||||
|
|
||||||
|
utterance.rate = 0.95;
|
||||||
|
|
||||||
|
utterance.onstart = function() {
|
||||||
|
speakPlayBtn.classList.add('speaking');
|
||||||
|
speakPlayBtn.innerText = "🔊 Membaca...";
|
||||||
|
};
|
||||||
|
|
||||||
|
utterance.onend = utterance.onerror = function() {
|
||||||
|
speakPlayBtn.classList.remove('speaking');
|
||||||
|
speakPlayBtn.innerText = "🔊 Baca";
|
||||||
|
};
|
||||||
|
|
||||||
|
synth.speak(utterance);
|
||||||
|
});
|
||||||
|
|
||||||
|
speakStopBtn?.addEventListener("click", function() {
|
||||||
|
if (synth.speaking) {
|
||||||
|
synth.cancel();
|
||||||
|
speakPlayBtn.classList.remove('speaking');
|
||||||
|
speakPlayBtn.innerText = "🔊 Baca";
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} else if (speakPlayBtn) {
|
||||||
|
speakPlayBtn.style.display = 'none';
|
||||||
|
if (speakStopBtn) speakStopBtn.style.display = 'none';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
<?php wp_footer(); ?>
|
<?php wp_footer(); ?>
|
||||||
</body>
|
</body>
|
||||||
|
|||||||
@@ -1,28 +1,18 @@
|
|||||||
<?php
|
<?php
|
||||||
/**
|
/**
|
||||||
* File Loader / Router Tema EduKarsa
|
* File ini berfungsi sebagai 'Router/Loader'.
|
||||||
* Seluruh logika modular ditempatkan di folder inc/
|
* Seluruh fungsionalitas diisolasi ke dalam sub-berkas direktori inc/.
|
||||||
*/
|
*/
|
||||||
|
defined('ABSPATH') || exit; // Hardened Security Native
|
||||||
|
|
||||||
defined( 'ABSPATH' ) || exit;
|
// Auto-load secara dinamis seluruh file PHP di dalam folder inc/
|
||||||
|
// Ini akan secara otomatis memulihkan modul i18n, security, popup, dan gallery Anda.
|
||||||
// 1. Memuat Modul Keamanan & Hardening Native
|
$inc_dir = get_template_directory() . '/inc/';
|
||||||
require_once get_template_directory() . '/inc/security.php';
|
if ( is_dir( $inc_dir ) ) {
|
||||||
|
$inc_files = glob( $inc_dir . '*.php' );
|
||||||
// 2. Memuat Modul Kamus Dinamis Dashboard (i18n)
|
if ( $inc_files ) {
|
||||||
require_once get_template_directory() . '/inc/i18n.php';
|
foreach ( $inc_files as $file ) {
|
||||||
|
require_once $file;
|
||||||
// 3. Memuat Pengaturan Dasar Tema & Aset
|
}
|
||||||
require_once get_template_directory() . '/inc/setup.php';
|
}
|
||||||
|
}
|
||||||
// 4. Memuat Custom Post Type Native
|
|
||||||
require_once get_template_directory() . '/inc/cpt-slider.php';
|
|
||||||
|
|
||||||
// 5. Memuat Panel Menu EduKarsa & Settings API
|
|
||||||
require_once get_template_directory() . '/inc/admin-menu.php';
|
|
||||||
|
|
||||||
// 6. Memuat Native SEO & Structured Data (JSON-LD)
|
|
||||||
require_once get_template_directory() . '/inc/seo.php';
|
|
||||||
|
|
||||||
// 7. Memuat Modul Pop-up Flyer & Pengumuman Modal
|
|
||||||
require_once get_template_directory() . '/inc/popup.php';
|
|
||||||
|
|||||||
@@ -1,6 +1,4 @@
|
|||||||
<?php
|
<?php defined( 'ABSPATH' ) || exit; ?>
|
||||||
defined( 'ABSPATH' ) || exit;
|
|
||||||
?>
|
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html <?php language_attributes(); ?>>
|
<html <?php language_attributes(); ?>>
|
||||||
<head>
|
<head>
|
||||||
@@ -9,13 +7,6 @@ defined( 'ABSPATH' ) || exit;
|
|||||||
<?php wp_head(); ?>
|
<?php wp_head(); ?>
|
||||||
</head>
|
</head>
|
||||||
<body <?php body_class(); ?>>
|
<body <?php body_class(); ?>>
|
||||||
<?php
|
|
||||||
if ( function_exists( 'wp_body_open' ) ) {
|
|
||||||
wp_body_open();
|
|
||||||
} else {
|
|
||||||
do_action( 'wp_body_open' );
|
|
||||||
}
|
|
||||||
?>
|
|
||||||
|
|
||||||
<header class="site-header">
|
<header class="site-header">
|
||||||
<div class="container header-container">
|
<div class="container header-container">
|
||||||
@@ -31,8 +22,10 @@ if ( function_exists( 'wp_body_open' ) ) {
|
|||||||
<?php endif; ?>
|
<?php endif; ?>
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<!-- Area Navigasi & Bahasa -->
|
||||||
<div class="header-nav-wrap">
|
<div class="header-nav-wrap">
|
||||||
<nav class="main-navigation" id="site-navigation" aria-label="<?php esc_attr_e( 'Menu Utama', 'edukarsa' ); ?>">
|
<nav class="main-navigation" id="site-navigation">
|
||||||
<?php
|
<?php
|
||||||
wp_nav_menu( array(
|
wp_nav_menu( array(
|
||||||
'theme_location' => 'menu-utama',
|
'theme_location' => 'menu-utama',
|
||||||
@@ -43,6 +36,8 @@ if ( function_exists( 'wp_body_open' ) ) {
|
|||||||
) );
|
) );
|
||||||
?>
|
?>
|
||||||
</nav>
|
</nav>
|
||||||
|
|
||||||
|
<!-- MULTI-LANGUAGE SWITCHER DINAMIS -->
|
||||||
<?php
|
<?php
|
||||||
if ( get_option( 'edukarsa_tampil_bilingual', 1 ) == 1 ) :
|
if ( get_option( 'edukarsa_tampil_bilingual', 1 ) == 1 ) :
|
||||||
$available_langs = array( 'id' => 'ID' );
|
$available_langs = array( 'id' => 'ID' );
|
||||||
@@ -50,6 +45,8 @@ if ( function_exists( 'wp_body_open' ) ) {
|
|||||||
if ( get_option( 'edukarsa_lang_ar', 0 ) == 1 ) $available_langs['ar'] = 'AR';
|
if ( get_option( 'edukarsa_lang_ar', 0 ) == 1 ) $available_langs['ar'] = 'AR';
|
||||||
if ( get_option( 'edukarsa_lang_zh', 0 ) == 1 ) $available_langs['zh-CN'] = 'ZH';
|
if ( get_option( 'edukarsa_lang_zh', 0 ) == 1 ) $available_langs['zh-CN'] = 'ZH';
|
||||||
if ( get_option( 'edukarsa_lang_ja', 0 ) == 1 ) $available_langs['ja'] = 'JA';
|
if ( get_option( 'edukarsa_lang_ja', 0 ) == 1 ) $available_langs['ja'] = 'JA';
|
||||||
|
|
||||||
|
$incl_codes = implode( ',', array_keys( $available_langs ) );
|
||||||
?>
|
?>
|
||||||
<div class="edukarsa-lang-switcher" id="lang-switcher">
|
<div class="edukarsa-lang-switcher" id="lang-switcher">
|
||||||
<?php
|
<?php
|
||||||
@@ -64,11 +61,74 @@ if ( function_exists( 'wp_body_open' ) ) {
|
|||||||
</div>
|
</div>
|
||||||
<div id="google_translate_element" style="display:none;"></div>
|
<div id="google_translate_element" style="display:none;"></div>
|
||||||
<?php endif; ?>
|
<?php endif; ?>
|
||||||
<button class="menu-toggle" id="mobile-menu-toggle" aria-label="<?php esc_attr_e( 'Buka Menu Navigasi', 'edukarsa' ); ?>">
|
|
||||||
|
<!-- Tombol Hamburger Mobile -->
|
||||||
|
<button class="menu-toggle" id="mobile-menu-toggle" aria-label="Buka Menu Navigasi">
|
||||||
<span></span>
|
<span></span>
|
||||||
<span></span>
|
<span></span>
|
||||||
<span></span>
|
<span></span>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</header>
|
</header>
|
||||||
|
|
||||||
|
<?php if ( get_option( 'edukarsa_tampil_bilingual', 1 ) == 1 ) : ?>
|
||||||
|
<!-- SKRIP TRANSLASI NATIVE & PEMBERSIH TOOLBAR GOOGLE -->
|
||||||
|
<script type="text/javascript">
|
||||||
|
function googleTranslateElementInit() {
|
||||||
|
new google.translate.TranslateElement({
|
||||||
|
pageLanguage: 'id',
|
||||||
|
includedLanguages: '<?php echo esc_js( $incl_codes ); ?>',
|
||||||
|
autoDisplay: false
|
||||||
|
}, 'google_translate_element');
|
||||||
|
}
|
||||||
|
|
||||||
|
function changeLanguage(lang) {
|
||||||
|
var host = window.location.hostname;
|
||||||
|
if (lang === 'id') {
|
||||||
|
document.cookie = "googtrans=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;";
|
||||||
|
document.cookie = "googtrans=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/; domain=" + host;
|
||||||
|
document.cookie = "googtrans=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/; domain=." + host;
|
||||||
|
} else {
|
||||||
|
var cookieVal = '/id/' + lang;
|
||||||
|
document.cookie = "googtrans=" + cookieVal + "; path=/;";
|
||||||
|
document.cookie = "googtrans=" + cookieVal + "; path=/; domain=" + host;
|
||||||
|
document.cookie = "googtrans=" + cookieVal + "; path=/; domain=." + host;
|
||||||
|
}
|
||||||
|
window.location.reload();
|
||||||
|
}
|
||||||
|
|
||||||
|
document.addEventListener("DOMContentLoaded", function() {
|
||||||
|
// Cek status bahasa aktif
|
||||||
|
var match = document.cookie.match(/googtrans=\/id\/([a-zA-Z\-]+)/i);
|
||||||
|
var activeLang = match ? match[1] : 'id';
|
||||||
|
|
||||||
|
var buttons = document.querySelectorAll('.lang-btn');
|
||||||
|
buttons.forEach(function(btn) {
|
||||||
|
if (btn.getAttribute('data-lang').toLowerCase() === activeLang.toLowerCase()) {
|
||||||
|
btn.classList.add('active');
|
||||||
|
} else {
|
||||||
|
btn.classList.remove('active');
|
||||||
|
}
|
||||||
|
btn.addEventListener('click', function() {
|
||||||
|
var selected = this.getAttribute('data-lang');
|
||||||
|
changeLanguage(selected);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
// Hapus pergeseran paksa body dari Google Translate
|
||||||
|
var killTranslateBar = function() {
|
||||||
|
if (document.body.style.top && document.body.style.top !== '0px') {
|
||||||
|
document.body.style.top = '0px';
|
||||||
|
}
|
||||||
|
var banner = document.querySelector('.goog-te-banner-frame, iframe.goog-te-banner-frame, .VIpgJd-ZVi9od-ORHb-OEVmcd');
|
||||||
|
if (banner) {
|
||||||
|
banner.style.display = 'none';
|
||||||
|
}
|
||||||
|
};
|
||||||
|
setInterval(killTranslateBar, 150);
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
<script type="text/javascript" src="//translate.google.com/translate_a/element.js?cb=googleTranslateElementInit"></script>
|
||||||
|
<?php endif; ?>
|
||||||
|
|||||||
@@ -1,7 +1,86 @@
|
|||||||
|
<?php defined( 'ABSPATH' ) || exit; ?>
|
||||||
<?php
|
<?php
|
||||||
/**
|
/**
|
||||||
* Kompatibilitas Fitur EduKarsa
|
* Registrasi Seluruh Custom Post Type (CPT) Native EduKarsa
|
||||||
* Sesuai pedoman Theme Review WordPress.org, Custom Post Types (slider, program, galeri, dll.)
|
|
||||||
* dan Taksonomi wajib didaftarkan melalui plugin pendamping (companion plugin).
|
|
||||||
*/
|
*/
|
||||||
defined( 'ABSPATH' ) || exit;
|
function edukarsa_register_all_cpt() {
|
||||||
|
register_post_type( 'slider', array(
|
||||||
|
'labels' => array('name' => 'Semua Slider', 'singular_name' => 'Slider', 'add_new_item' => 'Tambah Slider'),
|
||||||
|
'supports' => array('title', 'thumbnail'), 'public' => false, 'show_ui' => true, 'show_in_menu' => false
|
||||||
|
));
|
||||||
|
register_post_type( 'program', array(
|
||||||
|
'labels' => array('name' => 'Semua Program', 'singular_name' => 'Program', 'add_new_item' => 'Tambah Program'),
|
||||||
|
'supports' => array('title', 'editor', 'thumbnail', 'excerpt'), 'public' => true, 'show_ui' => true, 'show_in_menu' => false
|
||||||
|
));
|
||||||
|
register_post_type( 'milestone', array(
|
||||||
|
'labels' => array('name' => 'Semua Milestone', 'singular_name' => 'Milestone', 'add_new_item' => 'Tambah Milestone'),
|
||||||
|
'supports' => array('title', 'excerpt'), 'public' => false, 'show_ui' => true, 'show_in_menu' => false
|
||||||
|
));
|
||||||
|
register_post_type( 'keunggulan', array(
|
||||||
|
'labels' => array('name' => 'Semua Keunggulan', 'singular_name' => 'Keunggulan', 'add_new_item' => 'Tambah Keunggulan'),
|
||||||
|
'supports' => array('title', 'editor'), 'public' => false, 'show_ui' => true, 'show_in_menu' => false
|
||||||
|
));
|
||||||
|
register_post_type( 'faq', array(
|
||||||
|
'labels' => array('name' => 'Semua FAQ', 'singular_name' => 'FAQ', 'add_new_item' => 'Tambah FAQ Baru', 'all_items' => 'Semua FAQ'),
|
||||||
|
'supports' => array('title', 'editor'), 'public' => false, 'show_ui' => true, 'show_in_menu' => false
|
||||||
|
));
|
||||||
|
}
|
||||||
|
add_action( 'init', 'edukarsa_register_all_cpt', 0 );
|
||||||
|
|
||||||
|
// METABOX UNTUK LINK SLIDER
|
||||||
|
function edukarsa_slider_meta_box() {
|
||||||
|
add_meta_box( 'slider_link_meta', 'Tautan (URL) Slider', 'edukarsa_slider_meta_callback', 'slider', 'normal', 'high' );
|
||||||
|
}
|
||||||
|
add_action( 'add_meta_boxes', 'edukarsa_slider_meta_box' );
|
||||||
|
|
||||||
|
function edukarsa_slider_meta_callback( $post ) {
|
||||||
|
wp_nonce_field( 'edukarsa_slider_save', 'edukarsa_slider_meta_nonce' );
|
||||||
|
$value = get_post_meta( $post->ID, '_slider_link', true );
|
||||||
|
echo '<p>Masukkan URL tujuan jika pengunjung mengklik gambar slider ini (opsional).</p>';
|
||||||
|
echo '<input type="url" id="slider_link" name="slider_link" value="' . esc_attr( $value ) . '" style="width:100%; padding:8px;" placeholder="https://..." />';
|
||||||
|
}
|
||||||
|
|
||||||
|
function edukarsa_slider_save_meta( $post_id ) {
|
||||||
|
if ( ! isset( $_POST['edukarsa_slider_meta_nonce'] ) || ! wp_verify_nonce( $_POST['edukarsa_slider_meta_nonce'], 'edukarsa_slider_save' ) ) return;
|
||||||
|
if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) return;
|
||||||
|
if ( isset( $_POST['slider_link'] ) ) { update_post_meta( $post_id, '_slider_link', sanitize_text_field( $_POST['slider_link'] ) ); }
|
||||||
|
}
|
||||||
|
add_action( 'save_post', 'edukarsa_slider_save_meta' );
|
||||||
|
|
||||||
|
// --- REGISTRASI CPT GALERI & TAXONOMY ---
|
||||||
|
function edukarsa_register_galeri_cpt() {
|
||||||
|
register_post_type( 'galeri', array(
|
||||||
|
'labels' => 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 );
|
||||||
|
|
||||||
|
// --- NOTIFIKASI PANDUAN RESOLUSI SLIDER ---
|
||||||
|
function edukarsa_slider_admin_notice() {
|
||||||
|
$screen = get_current_screen();
|
||||||
|
if ( isset($screen->post_type) && $screen->post_type === 'slider' ) {
|
||||||
|
echo '<div class="notice notice-info is-dismissible" style="border-left-color: #0b4a8e;">
|
||||||
|
<p><strong>💡 Panduan Resolusi Gambar:</strong> Untuk tampilan terbaik tanpa pecah, gunakan gambar beresolusi <strong>1920x1080 piksel (16:9)</strong> pada kotak <em>Gambar Unggulan (Featured Image)</em> di sisi kanan bawah.</p>
|
||||||
|
</div>';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
add_action('admin_notices', 'edukarsa_slider_admin_notice');
|
||||||
|
|||||||
@@ -1,11 +1,13 @@
|
|||||||
<?php
|
<?php
|
||||||
/**
|
/**
|
||||||
* Hardened Security Native untuk Tema EduKarsa
|
* Modul Pengamanan Native Tema EduKarsa
|
||||||
* Menangani HTTP Headers aman dan pencegahan enumerasi pengguna
|
* Mencegah XSS, SQLi, Clickjacking, User Harvesting, dan Information Leakage
|
||||||
*/
|
*/
|
||||||
|
|
||||||
defined( 'ABSPATH' ) || exit;
|
defined( 'ABSPATH' ) || exit;
|
||||||
|
|
||||||
function edukarsa_send_security_headers() {
|
// 1. INJEKSI NATIVE HTTP SECURITY HEADERS
|
||||||
|
function edukarsa_security_headers() {
|
||||||
if ( ! is_admin() ) {
|
if ( ! is_admin() ) {
|
||||||
header( 'X-Content-Type-Options: nosniff' );
|
header( 'X-Content-Type-Options: nosniff' );
|
||||||
header( 'X-Frame-Options: SAMEORIGIN' );
|
header( 'X-Frame-Options: SAMEORIGIN' );
|
||||||
@@ -13,12 +15,59 @@ function edukarsa_send_security_headers() {
|
|||||||
header( 'Referrer-Policy: strict-origin-when-cross-origin' );
|
header( 'Referrer-Policy: strict-origin-when-cross-origin' );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
add_action( 'send_headers', 'edukarsa_send_security_headers' );
|
add_action( 'send_headers', 'edukarsa_security_headers' );
|
||||||
|
|
||||||
|
// 2. INFORMATION DISCLOSURE CLOAKING (SEMBUNYIKAN GENERATOR VERSI CMS)
|
||||||
|
function edukarsa_clean_header_fingerprints() {
|
||||||
|
remove_action( 'wp_head', 'wp_generator' );
|
||||||
|
remove_action( 'wp_head', 'wlwmanifest_link' );
|
||||||
|
remove_action( 'wp_head', 'rsd_link' );
|
||||||
|
remove_action( 'wp_head', 'wp_shortlink_wp_head' );
|
||||||
|
remove_action( 'wp_head', 'adjacent_posts_rel_link_wp_head', 10 );
|
||||||
|
}
|
||||||
|
add_action( 'init', 'edukarsa_clean_header_fingerprints' );
|
||||||
|
|
||||||
|
// Hapus query string versi WordPress dari aset agar tidak terbaca bot scanner
|
||||||
|
function edukarsa_hide_wp_version_from_assets( $src ) {
|
||||||
|
global $wp_version;
|
||||||
|
parse_str( (string) wp_parse_url( $src, PHP_URL_QUERY ), $query );
|
||||||
|
if ( ! empty( $query['ver'] ) && $query['ver'] === $wp_version ) {
|
||||||
|
$src = remove_query_arg( 'ver', $src );
|
||||||
|
}
|
||||||
|
return $src;
|
||||||
|
}
|
||||||
|
add_filter( 'style_loader_src', 'edukarsa_hide_wp_version_from_assets', 9999 );
|
||||||
|
add_filter( 'script_loader_src', 'edukarsa_hide_wp_version_from_assets', 9999 );
|
||||||
|
|
||||||
|
// 3. BLOKIR PROBING USERNAME / ENUMERASI AUTHOR (?author=N)
|
||||||
function edukarsa_block_author_enumeration() {
|
function edukarsa_block_author_enumeration() {
|
||||||
if ( ! is_admin() && isset( $_REQUEST['author'] ) && ! empty( $_REQUEST['author'] ) ) {
|
if ( ! is_admin() && isset( $_REQUEST['author'] ) ) {
|
||||||
wp_safe_redirect( home_url(), 301 );
|
wp_safe_redirect( home_url( '/' ), 301 );
|
||||||
exit;
|
exit;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
add_action( 'template_redirect', 'edukarsa_block_author_enumeration' );
|
add_action( 'template_redirect', 'edukarsa_block_author_enumeration' );
|
||||||
|
|
||||||
|
// 4. BATASI ENDPOINT REST API USERS BAGI PENGUNJUNG TANPA OTENTIKASI
|
||||||
|
function edukarsa_restrict_rest_users_endpoint( $endpoints ) {
|
||||||
|
if ( ! is_user_logged_in() ) {
|
||||||
|
if ( isset( $endpoints['/wp/v2/users'] ) ) {
|
||||||
|
unset( $endpoints['/wp/v2/users'] );
|
||||||
|
}
|
||||||
|
if ( isset( $endpoints['/wp/v2/users/(?P<id>[\d]+)'] ) ) {
|
||||||
|
unset( $endpoints['/wp/v2/users/(?P<id>[\d]+)'] );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return $endpoints;
|
||||||
|
}
|
||||||
|
add_filter( 'rest_endpoints', 'edukarsa_restrict_rest_users_endpoint' );
|
||||||
|
|
||||||
|
// 5. SANITASI INPUT PENCARIAN (ANTI-REFLECTED XSS)
|
||||||
|
function edukarsa_sanitize_search_query( $query ) {
|
||||||
|
if ( ! is_admin() && $query->is_main_query() && $query->is_search() ) {
|
||||||
|
$s = $query->get( 's' );
|
||||||
|
$query->set( 's', sanitize_text_field( $s ) );
|
||||||
|
}
|
||||||
|
return $query;
|
||||||
|
}
|
||||||
|
add_action( 'pre_get_posts', 'edukarsa_sanitize_search_query' );
|
||||||
|
|||||||
@@ -1,90 +1,55 @@
|
|||||||
<?php
|
<?php
|
||||||
|
/**
|
||||||
|
* File ini menangani dukungan tema (Theme Support) dan antrean aset (CSS/JS).
|
||||||
|
*/
|
||||||
defined('ABSPATH') || exit;
|
defined('ABSPATH') || exit;
|
||||||
|
|
||||||
if ( ! function_exists( 'edukarsa_theme_setup' ) ) {
|
// 1. PENGATURAN DASAR
|
||||||
function edukarsa_theme_setup() {
|
function edukarsa_setup() {
|
||||||
load_theme_textdomain( 'edukarsa', get_template_directory() . '/languages' );
|
|
||||||
|
|
||||||
add_theme_support( 'automatic-feed-links' );
|
|
||||||
add_theme_support( 'title-tag' );
|
add_theme_support( 'title-tag' );
|
||||||
add_theme_support( 'post-thumbnails' );
|
add_theme_support( 'post-thumbnails' );
|
||||||
add_theme_support( 'align-wide' );
|
|
||||||
add_theme_support( 'wp-block-styles' );
|
|
||||||
add_theme_support( 'responsive-embeds' );
|
|
||||||
add_theme_support( 'editor-styles' );
|
|
||||||
add_editor_style( 'style.css' );
|
|
||||||
add_theme_support( 'html5', array( 'search-form', 'comment-form', 'comment-list', 'gallery', 'caption', 'style', 'script' ) );
|
|
||||||
|
|
||||||
add_theme_support( 'custom-logo', array(
|
// Pastikan tema mendukung excerpt (kutipan) untuk CPT
|
||||||
'height' => 110,
|
add_post_type_support( 'page', 'excerpt' );
|
||||||
'width' => 400,
|
|
||||||
'flex-height' => true,
|
|
||||||
'flex-width' => true,
|
|
||||||
) );
|
|
||||||
|
|
||||||
add_theme_support( 'custom-header', array(
|
|
||||||
'default-image' => '',
|
|
||||||
'width' => 1920,
|
|
||||||
'height' => 800,
|
|
||||||
'flex-height' => true,
|
|
||||||
) );
|
|
||||||
|
|
||||||
add_theme_support( 'custom-background', array(
|
|
||||||
'default-color' => 'ffffff',
|
|
||||||
) );
|
|
||||||
|
|
||||||
register_nav_menus( array(
|
register_nav_menus( array(
|
||||||
'menu-utama' => esc_html__( 'Menu Navigasi Utama', 'edukarsa' ),
|
'menu-utama' => __( 'Menu Utama', 'edukarsa' ),
|
||||||
'menu-footer' => esc_html__( 'Menu Tautan Footer', 'edukarsa' ),
|
'menu-footer' => __( 'Menu Footer', 'edukarsa' ),
|
||||||
) );
|
) );
|
||||||
}
|
}
|
||||||
}
|
add_action( 'after_setup_theme', 'edukarsa_setup' );
|
||||||
add_action( 'after_setup_theme', 'edukarsa_theme_setup' );
|
|
||||||
|
|
||||||
function edukarsa_register_block_components() {
|
// 2. MENGHUBUNGKAN ASET (CSS & JS FRONTEND)
|
||||||
if ( function_exists( 'register_block_style' ) ) {
|
function edukarsa_scripts() {
|
||||||
register_block_style( 'core/quote', array(
|
// Memaksa path absolut langsung ke folder tema dengan Cache Busting time()
|
||||||
'name' => 'edukarsa-quote',
|
wp_enqueue_style(
|
||||||
'label' => esc_html__( 'EduKarsa Quote', 'edukarsa' ),
|
'edukarsa-style',
|
||||||
) );
|
get_template_directory_uri() . '/style.css',
|
||||||
}
|
array(),
|
||||||
|
time(),
|
||||||
if ( function_exists( 'register_block_pattern' ) ) {
|
'all'
|
||||||
register_block_pattern(
|
|
||||||
'edukarsa/cta-banner',
|
|
||||||
array(
|
|
||||||
'title' => esc_html__( 'EduKarsa CTA Banner', 'edukarsa' ),
|
|
||||||
'description' => esc_html__( 'Banner ajakan pendaftaran PMB EduKarsa', 'edukarsa' ),
|
|
||||||
'content' => '<!-- wp:group {"className":"edukarsa-cta-block"} --><div class="wp-block-group edukarsa-cta-block"><p>' . esc_html__( 'Pendaftaran Mahasiswa / Siswa Baru Telah Dibuka!', 'edukarsa' ) . '</p></div><!-- /wp:group -->',
|
|
||||||
'categories' => array( 'featured' ),
|
|
||||||
)
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
add_action( 'wp_enqueue_scripts', 'edukarsa_scripts' );
|
||||||
add_action( 'init', 'edukarsa_register_block_components' );
|
|
||||||
|
|
||||||
function edukarsa_register_sidebars() {
|
// 3. MEMUAT JAVASCRIPT UNTUK MEDIA UPLOADER (DASHBOARD)
|
||||||
register_sidebar( array(
|
function edukarsa_admin_scripts( $hook ) {
|
||||||
'name' => esc_html__( 'Sidebar Utama', 'edukarsa' ),
|
// Memastikan skrip uploader dipanggil di halaman pengaturan Edukarsa
|
||||||
'id' => 'sidebar-utama',
|
if ( strpos( $hook, 'edukarsa' ) !== false ) {
|
||||||
'description' => esc_html__( 'Area widget untuk bilah samping postingan dan halaman.', 'edukarsa' ),
|
wp_enqueue_media();
|
||||||
'before_widget' => '<div id="%1$s" class="card-style sidebar-widget %2$s">',
|
|
||||||
'after_widget' => '</div>',
|
|
||||||
'before_title' => '<h3 class="sidebar-widget-title">',
|
|
||||||
'after_title' => '</h3>',
|
|
||||||
) );
|
|
||||||
}
|
}
|
||||||
add_action( 'widgets_init', 'edukarsa_register_sidebars' );
|
}
|
||||||
|
add_action( 'admin_enqueue_scripts', 'edukarsa_admin_scripts' );
|
||||||
|
|
||||||
function edukarsa_enqueue_scripts() {
|
// 4. REDIRECT SETELAH AKTIVASI TEMA
|
||||||
wp_enqueue_style( 'edukarsa-style', get_stylesheet_uri(), array(), time() );
|
|
||||||
|
|
||||||
if ( is_singular() && comments_open() && get_option( 'thread_comments' ) ) {
|
// 4. REDIRECT AMAN SETELAH AKTIVASI TEMA
|
||||||
wp_enqueue_script( 'comment-reply' );
|
function edukarsa_activation_redirect() {
|
||||||
}
|
global $pagenow;
|
||||||
|
if ( 'themes.php' === $pagenow && isset( $_GET['activated'] ) ) {
|
||||||
if ( file_exists( get_template_directory() . '/assets/edukarsa.js' ) ) {
|
// Redirect yang aman, dipanggil setelah seluruh menu dan hak akses WordPress siap
|
||||||
wp_enqueue_script( 'edukarsa-global-js', get_template_directory_uri() . '/assets/edukarsa.js', array(), time(), true );
|
wp_safe_redirect( admin_url( 'admin.php?page=edukarsa_settings' ) );
|
||||||
|
exit;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
add_action( 'wp_enqueue_scripts', 'edukarsa_enqueue_scripts' );
|
add_action( 'admin_init', 'edukarsa_activation_redirect' );
|
||||||
|
|||||||
@@ -1,21 +1,34 @@
|
|||||||
|
<?php defined( 'ABSPATH' ) || exit; ?>
|
||||||
<?php
|
<?php
|
||||||
defined( 'ABSPATH' ) || exit;
|
/**
|
||||||
|
* Template Halaman Statis (Page) EduKarsa
|
||||||
|
* Menampilkan konten halaman penuh dan sidebar kustom yang sinkron dengan single.php
|
||||||
|
*/
|
||||||
get_header();
|
get_header();
|
||||||
?>
|
?>
|
||||||
|
|
||||||
<main id="primary" class="site-main" style="padding: 45px 0 70px; background-color: #f8fafc; min-height: 75vh;">
|
<main id="primary" class="site-main" style="padding: 45px 0 70px; background-color: #f8fafc; min-height: 75vh;">
|
||||||
<div class="container single-layout-wrapper">
|
<div class="container single-layout-wrapper">
|
||||||
|
|
||||||
|
<!-- KOLOM KONTEN HALAMAN -->
|
||||||
<div class="single-content-column">
|
<div class="single-content-column">
|
||||||
<?php while ( have_posts() ) : the_post(); ?>
|
<?php while ( have_posts() ) : the_post(); ?>
|
||||||
<nav class="edukarsa-breadcrumbs" aria-label="<?php esc_attr_e( 'Breadcrumb', 'edukarsa' ); ?>">
|
|
||||||
<a href="<?php echo esc_url( home_url( '/' ) ); ?>"><?php esc_html_e( 'Beranda', 'edukarsa' ); ?></a>
|
<!-- Breadcrumbs -->
|
||||||
|
<nav class="edukarsa-breadcrumbs" aria-label="Breadcrumb">
|
||||||
|
<a href="<?php echo esc_url( home_url( '/' ) ); ?>">Beranda</a>
|
||||||
<span class="bc-sep">/</span>
|
<span class="bc-sep">/</span>
|
||||||
<span class="bc-current"><?php the_title(); ?></span>
|
<span class="bc-current"><?php the_title(); ?></span>
|
||||||
</nav>
|
</nav>
|
||||||
|
|
||||||
<article id="post-<?php the_ID(); ?>" <?php post_class( 'card-style single-article-card' ); ?>>
|
<article id="post-<?php the_ID(); ?>" <?php post_class( 'card-style single-article-card' ); ?>>
|
||||||
|
|
||||||
<header class="entry-header" style="margin-bottom: 25px; border-bottom: 1px solid #f1f5f9; padding-bottom: 15px;">
|
<header class="entry-header" style="margin-bottom: 25px; border-bottom: 1px solid #f1f5f9; padding-bottom: 15px;">
|
||||||
<h1 class="single-article-title" style="margin: 0;"><?php the_title(); ?></h1>
|
<h1 class="single-article-title" style="margin: 0;">
|
||||||
|
<?php the_title(); ?>
|
||||||
|
</h1>
|
||||||
</header>
|
</header>
|
||||||
|
|
||||||
<?php if ( has_post_thumbnail() ) : ?>
|
<?php if ( has_post_thumbnail() ) : ?>
|
||||||
<div class="single-featured-image">
|
<div class="single-featured-image">
|
||||||
<?php the_post_thumbnail( 'full' ); ?>
|
<?php the_post_thumbnail( 'full' ); ?>
|
||||||
@@ -24,30 +37,34 @@ get_header();
|
|||||||
<?php endif; ?>
|
<?php endif; ?>
|
||||||
</div>
|
</div>
|
||||||
<?php endif; ?>
|
<?php endif; ?>
|
||||||
|
|
||||||
<div class="entry-content">
|
<div class="entry-content">
|
||||||
<?php
|
<?php
|
||||||
the_content();
|
the_content();
|
||||||
|
|
||||||
|
// Paginasi internal halaman jika konten dipecah dengan <!--nextpage-->
|
||||||
wp_link_pages( array(
|
wp_link_pages( array(
|
||||||
'before' => '<div class="intra-post-pagination"><span class="page-links-title">' . esc_html__( 'Halaman:', 'edukarsa' ) . '</span>',
|
'before' => '<div class="intra-post-pagination"><span class="page-links-title">' . __( 'Halaman:', 'edukarsa' ) . '</span>',
|
||||||
'after' => '</div>',
|
'after' => '</div>',
|
||||||
'link_before' => '<span class="page-number-box">',
|
'link_before' => '<span class="page-number-box">',
|
||||||
'link_after' => '</span>',
|
'link_after' => '</span>',
|
||||||
) );
|
) );
|
||||||
?>
|
?>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</article>
|
</article>
|
||||||
|
|
||||||
<?php
|
|
||||||
if ( comments_open() || get_comments_number() ) :
|
|
||||||
comments_template();
|
|
||||||
endif;
|
|
||||||
?>
|
|
||||||
<?php endwhile; ?>
|
<?php endwhile; ?>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<!-- KOLOM SIDEBAR DINAMIS -->
|
||||||
<div class="single-sidebar-column">
|
<div class="single-sidebar-column">
|
||||||
<?php get_sidebar(); ?>
|
<?php get_sidebar(); ?>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</main>
|
</main>
|
||||||
|
|
||||||
<?php
|
<?php
|
||||||
get_footer();
|
get_footer();
|
||||||
|
?>
|
||||||
|
|||||||
@@ -1,35 +0,0 @@
|
|||||||
=== EduKarsa ===
|
|
||||||
Contributors: masbudikusuma
|
|
||||||
Requires at least: 6.0
|
|
||||||
Tested up to: 6.7
|
|
||||||
Requires PHP: 7.4
|
|
||||||
Stable tag: 1.1.6
|
|
||||||
License: GPLv2 or later
|
|
||||||
License URI: https://www.gnu.org/licenses/gpl-2.0.html
|
|
||||||
|
|
||||||
EduKarsa is a native, modern institutional WordPress theme tailored for schools, Islamic boarding institutions, colleges, and higher education portals.
|
|
||||||
|
|
||||||
== Description ==
|
|
||||||
EduKarsa is developed with a strict "100% Native & Zero Plugin" architecture, delivering maximum speed, stability, and security without relying on bulky third-party builders like Elementor or ACF.
|
|
||||||
|
|
||||||
= Key Highlights =
|
|
||||||
* **Zero Plugin Dependency**: Native hero sliders, program grids, facility lightbox, and announcement modals running solely on core WordPress APIs.
|
|
||||||
* **WCAG 2.1 Accessibility Suite**: Native floating toolbar equipped with Web Speech API audio reader (Text-to-Speech), high-contrast toggle, monochrome view, and text resizer.
|
|
||||||
* **Instant Multi-Language Switcher**: Built-in instant translation integration supporting Indonesian, English, Arabic, Chinese, and Japanese.
|
|
||||||
* **Modern Educational Card Layout**: Contemporary clean design featuring navy blue branding (#0b4a8e), pill buttons, responsive grids, and floating KPI stats cards.
|
|
||||||
* **Native Section Layout Builder**: Reorder homepage sections via WordPress core drag-and-drop admin panel.
|
|
||||||
* **Hardened Core Security**: Built-in HTTP security headers and user enumeration prevention.
|
|
||||||
|
|
||||||
== Installation ==
|
|
||||||
1. Navigate to your WordPress Dashboard > Appearance > Themes > Add New.
|
|
||||||
2. Upload the edukarsa.zip file and click Install Now.
|
|
||||||
3. Activate the theme.
|
|
||||||
4. Go to the "EduKarsa" menu on the sidebar to configure institutional profile, branding, contacts, and homepage sections.
|
|
||||||
|
|
||||||
== Frequently Asked Questions ==
|
|
||||||
= Does this theme require page builder plugins? =
|
|
||||||
No. EduKarsa runs natively on core WordPress Settings API and templates.
|
|
||||||
|
|
||||||
== Copyright ==
|
|
||||||
EduKarsa WordPress Theme, Copyright 2026 Mas Budi Kusuma.
|
|
||||||
EduKarsa is distributed under the terms of the GNU General Public License v2 or later.
|
|
||||||
|
Before Width: | Height: | Size: 318 KiB After Width: | Height: | Size: 1.1 MiB |
|
After Width: | Height: | Size: 92 KiB |
|
Before Width: | Height: | Size: 145 KiB After Width: | Height: | Size: 262 KiB |
|
Before Width: | Height: | Size: 117 KiB After Width: | Height: | Size: 927 KiB |
|
Before Width: | Height: | Size: 119 KiB After Width: | Height: | Size: 901 KiB |
|
Before Width: | Height: | Size: 123 KiB After Width: | Height: | Size: 973 KiB |
@@ -1,15 +0,0 @@
|
|||||||
<?php
|
|
||||||
defined( 'ABSPATH' ) || exit;
|
|
||||||
?>
|
|
||||||
<form role="search" method="get" class="search-form edukarsa-search-form" action="<?php echo esc_url( home_url( '/' ) ); ?>">
|
|
||||||
<label class="search-form-label">
|
|
||||||
<span class="screen-reader-text"><?php echo esc_html_x( 'Cari untuk:', 'label', 'edukarsa' ); ?></span>
|
|
||||||
<input type="search" class="search-field" placeholder="<?php echo esc_attr_x( 'Cari informasi / warta...', 'placeholder', 'edukarsa' ); ?>" value="<?php echo get_search_query(); ?>" name="s" required />
|
|
||||||
</label>
|
|
||||||
<button type="submit" class="search-submit" aria-label="<?php echo esc_attr_x( 'Kirim Pencarian', 'submit button', 'edukarsa' ); ?>">
|
|
||||||
<svg width="17" height="17" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
|
|
||||||
<circle cx="11" cy="11" r="8"></circle>
|
|
||||||
<line x1="21" y1="21" x2="16.65" y2="16.65"></line>
|
|
||||||
</svg>
|
|
||||||
</button>
|
|
||||||
</form>
|
|
||||||
@@ -1,19 +1,25 @@
|
|||||||
|
<?php defined( 'ABSPATH' ) || exit; ?>
|
||||||
<?php
|
<?php
|
||||||
defined( 'ABSPATH' ) || exit;
|
/**
|
||||||
|
* Template Sidebar Native EduKarsa
|
||||||
|
* Dikelola 100% dari Dashboard EduKarsa (Bebas Menu Widget WP)
|
||||||
|
*/
|
||||||
?>
|
?>
|
||||||
<aside id="secondary" class="edukarsa-custom-sidebar" aria-label="<?php esc_attr_e( 'Sidebar Utama', 'edukarsa' ); ?>">
|
<aside id="secondary" class="edukarsa-custom-sidebar">
|
||||||
<?php if ( is_active_sidebar( 'sidebar-utama' ) ) : ?>
|
|
||||||
<div class="sidebar-dynamic-widgets">
|
|
||||||
<?php dynamic_sidebar( 'sidebar-utama' ); ?>
|
|
||||||
</div>
|
|
||||||
<?php endif; ?>
|
|
||||||
|
|
||||||
|
<!-- 1. Pencarian Cepat Native -->
|
||||||
<?php if ( get_option( 'edukarsa_sidebar_tampil_search', 1 ) == 1 ) : ?>
|
<?php if ( get_option( 'edukarsa_sidebar_tampil_search', 1 ) == 1 ) : ?>
|
||||||
<div class="card-style sidebar-widget">
|
<div class="card-style sidebar-widget">
|
||||||
<?php get_search_form(); ?>
|
<form role="search" method="get" class="sidebar-search-form" action="<?php echo esc_url( home_url( '/' ) ); ?>">
|
||||||
|
<div class="sidebar-search-wrapper">
|
||||||
|
<input type="search" class="sidebar-search-input" placeholder="Cari warta / informasi..." value="<?php echo get_search_query(); ?>" name="s" required>
|
||||||
|
<button type="submit" class="sidebar-search-btn" aria-label="Cari">🔍</button>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
</div>
|
</div>
|
||||||
<?php endif; ?>
|
<?php endif; ?>
|
||||||
|
|
||||||
|
<!-- 2. Mini Banner CTA Pendaftaran / PMB -->
|
||||||
<?php if ( get_option( 'edukarsa_sidebar_tampil_cta', 1 ) == 1 ) : ?>
|
<?php if ( get_option( 'edukarsa_sidebar_tampil_cta', 1 ) == 1 ) : ?>
|
||||||
<div class="card-style sidebar-widget sidebar-cta-box text-center">
|
<div class="card-style sidebar-widget sidebar-cta-box text-center">
|
||||||
<span class="sidebar-cta-badge"><?php echo esc_html( get_option( 'edukarsa_sidebar_cta_badge', 'Penerimaan Siswa/Mhs' ) ); ?></span>
|
<span class="sidebar-cta-badge"><?php echo esc_html( get_option( 'edukarsa_sidebar_cta_badge', 'Penerimaan Siswa/Mhs' ) ); ?></span>
|
||||||
@@ -27,6 +33,7 @@ defined( 'ABSPATH' ) || exit;
|
|||||||
</div>
|
</div>
|
||||||
<?php endif; ?>
|
<?php endif; ?>
|
||||||
|
|
||||||
|
<!-- 3. BOX HTML KUSTOM NATIVE (Maps, Widget Luar, Teks Tambahan) -->
|
||||||
<?php
|
<?php
|
||||||
if ( get_option( 'edukarsa_sidebar_tampil_html', 0 ) == 1 ) :
|
if ( get_option( 'edukarsa_sidebar_tampil_html', 0 ) == 1 ) :
|
||||||
$html_content = get_option( 'edukarsa_sidebar_html_content' );
|
$html_content = get_option( 'edukarsa_sidebar_html_content' );
|
||||||
@@ -46,6 +53,7 @@ defined( 'ABSPATH' ) || exit;
|
|||||||
endif;
|
endif;
|
||||||
?>
|
?>
|
||||||
|
|
||||||
|
<!-- 4. Berita Terkini Dinamis -->
|
||||||
<?php if ( get_option( 'edukarsa_sidebar_tampil_recent', 1 ) == 1 ) : ?>
|
<?php if ( get_option( 'edukarsa_sidebar_tampil_recent', 1 ) == 1 ) : ?>
|
||||||
<div class="card-style sidebar-widget">
|
<div class="card-style sidebar-widget">
|
||||||
<h3 class="sidebar-widget-title"><?php echo esc_html( get_option( 'edukarsa_sidebar_recent_title', 'Warta Terkini' ) ); ?></h3>
|
<h3 class="sidebar-widget-title"><?php echo esc_html( get_option( 'edukarsa_sidebar_recent_title', 'Warta Terkini' ) ); ?></h3>
|
||||||
@@ -57,6 +65,7 @@ defined( 'ABSPATH' ) || exit;
|
|||||||
'posts_per_page' => $count,
|
'posts_per_page' => $count,
|
||||||
'post__not_in' => array( get_the_ID() )
|
'post__not_in' => array( get_the_ID() )
|
||||||
) );
|
) );
|
||||||
|
|
||||||
if ( $recent_query->have_posts() ) :
|
if ( $recent_query->have_posts() ) :
|
||||||
while ( $recent_query->have_posts() ) : $recent_query->the_post();
|
while ( $recent_query->have_posts() ) : $recent_query->the_post();
|
||||||
?>
|
?>
|
||||||
@@ -67,7 +76,7 @@ defined( 'ABSPATH' ) || exit;
|
|||||||
</a>
|
</a>
|
||||||
<?php endif; ?>
|
<?php endif; ?>
|
||||||
<div class="sidebar-recent-info">
|
<div class="sidebar-recent-info">
|
||||||
<span class="sidebar-recent-date">📅 <?php echo get_the_date( 'd M Y' ); ?></span>
|
<span class="sidebar-recent-date">📅 <?php echo get_the_date( 'd M Y' ); ?></span>
|
||||||
<h4 class="sidebar-recent-title">
|
<h4 class="sidebar-recent-title">
|
||||||
<a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
|
<a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
|
||||||
</h4>
|
</h4>
|
||||||
@@ -77,29 +86,20 @@ defined( 'ABSPATH' ) || exit;
|
|||||||
endwhile;
|
endwhile;
|
||||||
wp_reset_postdata();
|
wp_reset_postdata();
|
||||||
else :
|
else :
|
||||||
echo '<p style="font-size:13px; color:var(--text-muted); margin:0;">' . esc_html__( 'Belum ada artikel lainnya.', 'edukarsa' ) . '</p>';
|
echo '<p style="font-size:13px; color:var(--text-muted); margin:0;">Belum ada artikel lainnya.</p>';
|
||||||
endif;
|
endif;
|
||||||
?>
|
?>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<?php endif; ?>
|
<?php endif; ?>
|
||||||
|
|
||||||
|
<!-- 5. Daftar Kategori Pilihan -->
|
||||||
<?php if ( get_option( 'edukarsa_sidebar_tampil_cats', 1 ) == 1 ) : ?>
|
<?php if ( get_option( 'edukarsa_sidebar_tampil_cats', 1 ) == 1 ) : ?>
|
||||||
<div class="card-style sidebar-widget">
|
<div class="card-style sidebar-widget">
|
||||||
<h3 class="sidebar-widget-title"><?php echo esc_html( get_option( 'edukarsa_sidebar_cats_title', 'Kategori Pilihan' ) ); ?></h3>
|
<h3 class="sidebar-widget-title"><?php echo esc_html( get_option( 'edukarsa_sidebar_cats_title', 'Kategori Pilihan' ) ); ?></h3>
|
||||||
<ul class="sidebar-category-list">
|
<ul class="sidebar-category-list">
|
||||||
<?php
|
<?php
|
||||||
$cat_limit = intval( get_option( 'edukarsa_sidebar_cats_count', 10 ) );
|
$categories = get_categories( array( 'hide_empty' => true ) );
|
||||||
$cat_args = array(
|
|
||||||
'hide_empty' => true,
|
|
||||||
'orderby' => 'count',
|
|
||||||
'order' => 'DESC',
|
|
||||||
);
|
|
||||||
if ( $cat_limit > 0 ) {
|
|
||||||
$cat_args['number'] = $cat_limit;
|
|
||||||
}
|
|
||||||
$categories = get_categories( $cat_args );
|
|
||||||
if ( ! empty( $categories ) ) :
|
|
||||||
foreach ( $categories as $category ) :
|
foreach ( $categories as $category ) :
|
||||||
?>
|
?>
|
||||||
<li>
|
<li>
|
||||||
@@ -108,16 +108,12 @@ defined( 'ABSPATH' ) || exit;
|
|||||||
<span class="sidebar-cat-count"><?php echo esc_html( $category->count ); ?></span>
|
<span class="sidebar-cat-count"><?php echo esc_html( $category->count ); ?></span>
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
<?php
|
<?php endforeach; ?>
|
||||||
endforeach;
|
|
||||||
else :
|
|
||||||
echo '<li style="font-size:13px; color:var(--text-muted);">' . esc_html__( 'Belum ada kategori.', 'edukarsa' ) . '</li>';
|
|
||||||
endif;
|
|
||||||
?>
|
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
<?php endif; ?>
|
<?php endif; ?>
|
||||||
|
|
||||||
|
<!-- 6. Banner Poster Sidebar -->
|
||||||
<?php
|
<?php
|
||||||
$banner_img = get_option( 'edukarsa_sidebar_banner_img' );
|
$banner_img = get_option( 'edukarsa_sidebar_banner_img' );
|
||||||
if ( ! empty( $banner_img ) ) :
|
if ( ! empty( $banner_img ) ) :
|
||||||
@@ -125,8 +121,9 @@ defined( 'ABSPATH' ) || exit;
|
|||||||
?>
|
?>
|
||||||
<div class="card-style sidebar-widget sidebar-banner-box" style="padding: 10px; overflow: hidden;">
|
<div class="card-style sidebar-widget sidebar-banner-box" style="padding: 10px; overflow: hidden;">
|
||||||
<a href="<?php echo esc_url( $banner_url ); ?>" target="_blank" rel="noopener">
|
<a href="<?php echo esc_url( $banner_url ); ?>" target="_blank" rel="noopener">
|
||||||
<img src="<?php echo esc_url( $banner_img ); ?>" alt="<?php esc_attr_e( 'Banner Pengumuman', 'edukarsa' ); ?>" style="width: 100%; height: auto; border-radius: 8px; display: block;">
|
<img src="<?php echo esc_url( $banner_img ); ?>" alt="Banner Pengumuman" style="width: 100%; height: auto; border-radius: 8px; display: block;">
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
<?php endif; ?>
|
<?php endif; ?>
|
||||||
|
|
||||||
</aside>
|
</aside>
|
||||||
|
|||||||
@@ -1,13 +1,23 @@
|
|||||||
|
<?php defined( 'ABSPATH' ) || exit; ?>
|
||||||
<?php
|
<?php
|
||||||
defined( 'ABSPATH' ) || exit;
|
/**
|
||||||
|
* Template Baca Artikel Penuh (Single Post) EduKarsa
|
||||||
|
* Dilengkapi Breadcrumbs, Intra-post Paging, Inter-post Paging, dan Native Social Share
|
||||||
|
*/
|
||||||
get_header();
|
get_header();
|
||||||
?>
|
?>
|
||||||
|
|
||||||
<main id="primary" class="site-main" style="padding: 45px 0 70px; background-color: #f8fafc; min-height: 75vh;">
|
<main id="primary" class="site-main" style="padding: 45px 0 70px; background-color: #f8fafc; min-height: 75vh;">
|
||||||
<div class="container single-layout-wrapper">
|
<div class="container single-layout-wrapper">
|
||||||
|
|
||||||
|
<!-- KOLOM KONTEN UTAMA -->
|
||||||
<div class="single-content-column">
|
<div class="single-content-column">
|
||||||
|
|
||||||
<?php while ( have_posts() ) : the_post(); ?>
|
<?php while ( have_posts() ) : the_post(); ?>
|
||||||
<nav class="edukarsa-breadcrumbs" aria-label="<?php esc_attr_e( 'Breadcrumb', 'edukarsa' ); ?>">
|
|
||||||
<a href="<?php echo esc_url( home_url( '/' ) ); ?>"><?php esc_html_e( 'Beranda', 'edukarsa' ); ?></a>
|
<!-- BREADCRUMBS NATIVE -->
|
||||||
|
<nav class="edukarsa-breadcrumbs" aria-label="Breadcrumb">
|
||||||
|
<a href="<?php echo esc_url( home_url( '/' ) ); ?>">Beranda</a>
|
||||||
<span class="bc-sep">/</span>
|
<span class="bc-sep">/</span>
|
||||||
<?php
|
<?php
|
||||||
$categories = get_the_category();
|
$categories = get_the_category();
|
||||||
@@ -18,18 +28,27 @@ get_header();
|
|||||||
?>
|
?>
|
||||||
<span class="bc-current"><?php the_title(); ?></span>
|
<span class="bc-current"><?php the_title(); ?></span>
|
||||||
</nav>
|
</nav>
|
||||||
|
|
||||||
<article id="post-<?php the_ID(); ?>" <?php post_class( 'card-style single-article-card' ); ?>>
|
<article id="post-<?php the_ID(); ?>" <?php post_class( 'card-style single-article-card' ); ?>>
|
||||||
|
|
||||||
|
<!-- HEADER ARTIKEL -->
|
||||||
<header class="entry-header">
|
<header class="entry-header">
|
||||||
<?php if ( ! empty( $categories ) ) : ?>
|
<?php if ( ! empty( $categories ) ) : ?>
|
||||||
<span class="badge-title"><?php echo esc_html( $categories[0]->name ); ?></span>
|
<span class="badge-title"><?php echo esc_html( $categories[0]->name ); ?></span>
|
||||||
<?php endif; ?>
|
<?php endif; ?>
|
||||||
<h1 class="single-article-title"><?php the_title(); ?></h1>
|
|
||||||
|
<h1 class="single-article-title">
|
||||||
|
<?php the_title(); ?>
|
||||||
|
</h1>
|
||||||
|
|
||||||
<div class="single-meta-bar">
|
<div class="single-meta-bar">
|
||||||
<span>📅 <?php echo get_the_date( 'l, d F Y' ); ?></span>
|
<span>📅 <?php echo get_the_date( 'l, d F Y' ); ?></span>
|
||||||
<span>👤 <?php the_author(); ?></span>
|
<span>👤 <?php the_author(); ?></span>
|
||||||
<span>⏱ <?php echo ceil( str_word_count( strip_tags( get_the_content() ) ) / 200 ); ?> Menit Baca</span>
|
<span>⏱️ <?php echo ceil( str_word_count( strip_tags( get_the_content() ) ) / 200 ); ?> Menit Baca</span>
|
||||||
</div>
|
</div>
|
||||||
</header>
|
</header>
|
||||||
|
|
||||||
|
<!-- GAMBAR UTAMA DENGAN CAPTION -->
|
||||||
<?php if ( has_post_thumbnail() ) : ?>
|
<?php if ( has_post_thumbnail() ) : ?>
|
||||||
<div class="single-featured-image">
|
<div class="single-featured-image">
|
||||||
<?php the_post_thumbnail( 'full' ); ?>
|
<?php the_post_thumbnail( 'full' ); ?>
|
||||||
@@ -38,9 +57,13 @@ get_header();
|
|||||||
<?php endif; ?>
|
<?php endif; ?>
|
||||||
</div>
|
</div>
|
||||||
<?php endif; ?>
|
<?php endif; ?>
|
||||||
|
|
||||||
|
<!-- ISI ARTIKEL UTAMA -->
|
||||||
<div class="entry-content">
|
<div class="entry-content">
|
||||||
<?php
|
<?php
|
||||||
the_content();
|
the_content();
|
||||||
|
|
||||||
|
// 1. INTRA-POST PAGINATION (Jika artikel dipecah dengan tag <!--nextpage-->)
|
||||||
wp_link_pages( array(
|
wp_link_pages( array(
|
||||||
'before' => '<div class="intra-post-pagination"><span class="page-links-title">' . __( 'Halaman Artikel:', 'edukarsa' ) . '</span>',
|
'before' => '<div class="intra-post-pagination"><span class="page-links-title">' . __( 'Halaman Artikel:', 'edukarsa' ) . '</span>',
|
||||||
'after' => '</div>',
|
'after' => '</div>',
|
||||||
@@ -49,56 +72,75 @@ get_header();
|
|||||||
) );
|
) );
|
||||||
?>
|
?>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<!-- TAGS & BAGIKAN ARTIKEL -->
|
||||||
<div class="single-article-footer">
|
<div class="single-article-footer">
|
||||||
<div class="single-tags-list">
|
<div class="single-tags-list">
|
||||||
<?php the_tags( '<span class="tag-label">' . esc_html__( 'Topik Terkait:', 'edukarsa' ) . '</span> ', ' ', '' ); ?>
|
<?php the_tags( '<span class="tag-label">Topik Terkait:</span> ', ' ', '' ); ?>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Native Share Buttons (No Plugin) -->
|
||||||
|
<div class="single-share-bar">
|
||||||
|
<span class="share-label">Bagikan:</span>
|
||||||
|
<?php
|
||||||
|
$share_url = rawurlencode( get_permalink() );
|
||||||
|
$share_title = rawurlencode( get_the_title() );
|
||||||
|
?>
|
||||||
|
<a href="https://wa.me/?text=<?php echo $share_title . '%20' . $share_url; ?>" target="_blank" rel="noopener" class="share-btn share-wa" title="Bagikan ke WhatsApp">WhatsApp</a>
|
||||||
|
<a href="https://www.facebook.com/sharer/sharer.php?u=<?php echo $share_url; ?>" target="_blank" rel="noopener" class="share-btn share-fb" title="Bagikan ke Facebook">Facebook</a>
|
||||||
|
<a href="https://twitter.com/intent/tweet?text=<?php echo $share_title; ?>&url=<?php echo $share_url; ?>" target="_blank" rel="noopener" class="share-btn share-tw" title="Bagikan ke X">X / Twitter</a>
|
||||||
|
<button type="button" class="share-btn share-copy" onclick="navigator.clipboard.writeText('<?php echo esc_js( get_permalink() ); ?>'); alert('Tautan artikel berhasil disalin!');">Salin Tautan</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</article>
|
</article>
|
||||||
|
|
||||||
|
<!-- 2. INTER-POST PAGINATION (Navigasi Berita Sebelumnya & Selanjutnya) -->
|
||||||
<nav class="inter-post-nav">
|
<nav class="inter-post-nav">
|
||||||
<?php
|
<?php
|
||||||
$prev_post = get_previous_post();
|
$prev_post = get_previous_post();
|
||||||
$next_post = get_next_post();
|
$next_post = get_next_post();
|
||||||
?>
|
?>
|
||||||
|
|
||||||
<div class="nav-box nav-box-prev card-style <?php echo empty($prev_post) ? 'disabled' : ''; ?>">
|
<div class="nav-box nav-box-prev card-style <?php echo empty($prev_post) ? 'disabled' : ''; ?>">
|
||||||
<?php if ( ! empty( $prev_post ) ) : ?>
|
<?php if ( ! empty( $prev_post ) ) : ?>
|
||||||
<a href="<?php echo esc_url( get_permalink( $prev_post->ID ) ); ?>" class="nav-box-link">
|
<a href="<?php echo esc_url( get_permalink( $prev_post->ID ) ); ?>" class="nav-box-link">
|
||||||
<span class="nav-direction">« <?php esc_html_e( 'Artikel Sebelumnya', 'edukarsa' ); ?></span>
|
<span class="nav-direction">« Artikel Sebelumnya</span>
|
||||||
<h4 class="nav-post-title"><?php echo esc_html( wp_trim_words( $prev_post->post_title, 9, '...' ) ); ?></h4>
|
<h4 class="nav-post-title"><?php echo esc_html( wp_trim_words( $prev_post->post_title, 9, '...' ) ); ?></h4>
|
||||||
</a>
|
</a>
|
||||||
<?php else : ?>
|
<?php else : ?>
|
||||||
<span class="nav-direction">« <?php esc_html_e( 'Paling Awal', 'edukarsa' ); ?></span>
|
<span class="nav-direction">« Paling Awal</span>
|
||||||
<h4 class="nav-post-title" style="color:#94a3b8;"><?php esc_html_e( 'Tidak ada artikel sebelumnya', 'edukarsa' ); ?></h4>
|
<h4 class="nav-post-title" style="color:#94a3b8;">Tidak ada artikel sebelumnya</h4>
|
||||||
<?php endif; ?>
|
<?php endif; ?>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="nav-box nav-box-next card-style <?php echo empty($next_post) ? 'disabled' : ''; ?>">
|
<div class="nav-box nav-box-next card-style <?php echo empty($next_post) ? 'disabled' : ''; ?>">
|
||||||
<?php if ( ! empty( $next_post ) ) : ?>
|
<?php if ( ! empty( $next_post ) ) : ?>
|
||||||
<a href="<?php echo esc_url( get_permalink( $next_post->ID ) ); ?>" class="nav-box-link text-right">
|
<a href="<?php echo esc_url( get_permalink( $next_post->ID ) ); ?>" class="nav-box-link text-right">
|
||||||
<span class="nav-direction"><?php esc_html_e( 'Artikel Selanjutnya', 'edukarsa' ); ?> »</span>
|
<span class="nav-direction">Artikel Selanjutnya »</span>
|
||||||
<h4 class="nav-post-title"><?php echo esc_html( wp_trim_words( $next_post->post_title, 9, '...' ) ); ?></h4>
|
<h4 class="nav-post-title"><?php echo esc_html( wp_trim_words( $next_post->post_title, 9, '...' ) ); ?></h4>
|
||||||
</a>
|
</a>
|
||||||
<?php else : ?>
|
<?php else : ?>
|
||||||
<div class="text-right">
|
<div class="text-right">
|
||||||
<span class="nav-direction"><?php esc_html_e( 'Paling Akhir', 'edukarsa' ); ?> »</span>
|
<span class="nav-direction">Paling Akhir »</span>
|
||||||
<h4 class="nav-post-title" style="color:#94a3b8;"><?php esc_html_e( 'Tidak ada artikel selanjutnya', 'edukarsa' ); ?></h4>
|
<h4 class="nav-post-title" style="color:#94a3b8;">Tidak ada artikel selanjutnya</h4>
|
||||||
</div>
|
</div>
|
||||||
<?php endif; ?>
|
<?php endif; ?>
|
||||||
</div>
|
</div>
|
||||||
</nav>
|
</nav>
|
||||||
|
|
||||||
<?php
|
|
||||||
if ( comments_open() || get_comments_number() ) :
|
|
||||||
comments_template();
|
|
||||||
endif;
|
|
||||||
?>
|
|
||||||
|
|
||||||
<?php endwhile; ?>
|
<?php endwhile; ?>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<!-- KOLOM SIDEBAR DINAMIS -->
|
||||||
<div class="single-sidebar-column">
|
<div class="single-sidebar-column">
|
||||||
<?php get_sidebar(); ?>
|
<?php get_sidebar(); ?>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</main>
|
</main>
|
||||||
|
|
||||||
<?php
|
<?php
|
||||||
get_footer();
|
get_footer();
|
||||||
|
?>
|
||||||
|
|||||||
@@ -3,15 +3,9 @@ Theme Name: EduKarsa
|
|||||||
Theme URI: https://edukarsa.masbudi.my.id
|
Theme URI: https://edukarsa.masbudi.my.id
|
||||||
Author: masbudikusuma
|
Author: masbudikusuma
|
||||||
Author URI: https://masbudi.my.id
|
Author URI: https://masbudi.my.id
|
||||||
Description: EduKarsa is a modern, responsive, and lightweight WordPress theme engineered for schools, universities, Islamic colleges, and academic institutions. Built with a 100% native zero-plugin architecture, it features a contemporary floating card layout, built-in WCAG 2.1 AAA accessibility tools (Text-to-Speech audio reader, high contrast, font scaler), an instant 5-language frontend switcher (Indonesian, English, Arabic, Chinese, Japanese), SEO structured data schema, and a native drag-and-drop homepage section builder.
|
Description: Tema WordPress profesional untuk sekolah dan kampus (Gaya Modern Card Layout).<br><br><strong>Fitur Unggulan Tema:</strong><ul><li><strong>Zero Plugin Dependency:</strong> Berjalan optimal tanpa ketergantungan plugin pihak ketiga (tanpa ACF, Elementor, atau plugin galeri).</li><li><strong>Modular Architecture:</strong> Berkas functions.php berfungsi murni sebagai pemanggil (router), seluruh fungsionalitas diisolasi di folder inc/.</li><li><strong>Hardened Security Native:</strong> Pengecekan eksekusi langsung, HTTP security headers, penonaktifan author enumeration, dan proteksi REST API.</li><li><strong>WCAG 2.1 Accessibility:</strong> Widget aksesibilitas bawaan dengan Web Speech API (suara baca audio) dan kontras tinggi.</li><li><strong>Multilingual Terpadu:</strong> Penerjemah instan sisi depan (ID, EN, AR, ZH, JA) serta panel admin dwibahasa.</li><li><strong>SEO & Structured Data:</strong> Skema data terstruktur JSON-LD native untuk visibilitas mesin pencari.</li></ul>
|
||||||
Version: 1.1.6
|
Version: 1.1.5
|
||||||
Tested up to: 6.7
|
Tags: pendidikan, sekolah, universitas, custom-menu, custom-logo, modern-layout, responsive-layout, translation-ready, accessibility-ready, seo-friendly
|
||||||
Requires at least: 6.0
|
|
||||||
Requires PHP: 7.4
|
|
||||||
License: GNU General Public License v2 or later
|
|
||||||
License URI: https://www.gnu.org/licenses/gpl-2.0.html
|
|
||||||
Text Domain: edukarsa
|
|
||||||
Tags: education, grid-layout, custom-menu, custom-logo, featured-images, translation-ready, wide-blocks, block-styles, full-width-template, theme-options
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
:root {
|
:root {
|
||||||
@@ -42,55 +36,7 @@ body {
|
|||||||
}
|
}
|
||||||
img { max-width: 100%; height: auto; display: block; }
|
img { max-width: 100%; height: auto; display: block; }
|
||||||
a { text-decoration: none; color: var(--primary-color); transition: 0.3s; }
|
a { text-decoration: none; color: var(--primary-color); transition: 0.3s; }
|
||||||
h1, h2, h3, h4, h5, h6 {
|
h1, h2, h3, h4, h5, h6 { color: var(--heading-color); font-weight: 800; line-height: 1.3; }
|
||||||
color: var(--heading-color);
|
|
||||||
font-weight: 800;
|
|
||||||
line-height: 1.3;
|
|
||||||
overflow-wrap: break-word;
|
|
||||||
word-break: break-word;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Standar Kelas Wajib WordPress Theme Check */
|
|
||||||
.screen-reader-text {
|
|
||||||
border: 0;
|
|
||||||
clip: rect(1px, 1px, 1px, 1px);
|
|
||||||
clip-path: inset(50%);
|
|
||||||
height: 1px;
|
|
||||||
margin: -1px;
|
|
||||||
overflow: hidden;
|
|
||||||
padding: 0;
|
|
||||||
position: absolute !important;
|
|
||||||
width: 1px;
|
|
||||||
word-wrap: normal !important;
|
|
||||||
}
|
|
||||||
.screen-reader-text:focus {
|
|
||||||
background-color: #f1f5f9;
|
|
||||||
border-radius: 4px;
|
|
||||||
box-shadow: 0 0 4px 2px rgba(0, 0, 0, 0.2);
|
|
||||||
clip: auto !important;
|
|
||||||
clip-path: none;
|
|
||||||
color: var(--primary-color);
|
|
||||||
display: block;
|
|
||||||
font-size: 14px;
|
|
||||||
font-weight: 700;
|
|
||||||
height: auto;
|
|
||||||
left: 8px;
|
|
||||||
line-height: normal;
|
|
||||||
padding: 12px 20px;
|
|
||||||
text-decoration: none;
|
|
||||||
top: 8px;
|
|
||||||
width: auto;
|
|
||||||
z-index: 100000;
|
|
||||||
}
|
|
||||||
.alignleft { float: left; margin: 0.5em 1.5em 1.5em 0; }
|
|
||||||
.alignright { float: right; margin: 0.5em 0 1.5em 1.5em; }
|
|
||||||
.aligncenter { display: block; margin-left: auto; margin-right: auto; clear: both; }
|
|
||||||
.wp-caption { margin-bottom: 1.5em; max-width: 100%; text-align: center; }
|
|
||||||
.wp-caption img[class*="wp-image-"] { display: block; margin-left: auto; margin-right: auto; }
|
|
||||||
.wp-caption-text { font-size: 13px; color: var(--text-muted); margin-top: 6px; font-style: italic; }
|
|
||||||
.sticky { border-left: 4px solid var(--secondary-color); padding-left: 10px; }
|
|
||||||
.gallery-caption { font-size: 12px; color: var(--text-muted); text-align: center; }
|
|
||||||
.bypostauthor { font-weight: inherit; }
|
|
||||||
|
|
||||||
/* 2. LAYOUT UTAMA */
|
/* 2. LAYOUT UTAMA */
|
||||||
.container { max-width: 1200px; margin: 0 auto; padding: 0 20px; }
|
.container { max-width: 1200px; margin: 0 auto; padding: 0 20px; }
|
||||||
@@ -99,62 +45,37 @@ h1, h2, h3, h4, h5, h6 {
|
|||||||
.edukarsa-section { padding: 50px 0; }
|
.edukarsa-section { padding: 50px 0; }
|
||||||
.section-title { font-size: 30px; color: var(--heading-color); margin-bottom: 12px; font-weight: 800; letter-spacing: -0.5px; }
|
.section-title { font-size: 30px; color: var(--heading-color); margin-bottom: 12px; font-weight: 800; letter-spacing: -0.5px; }
|
||||||
|
|
||||||
/* 3. HEADER & RESPONSIVE NAV */
|
/* 3. HEADER & NAV */
|
||||||
.site-header { position: sticky; top: 0; z-index: 999; box-shadow: 0 4px 15px rgba(0,0,0,0.12); padding: 12px 0; background-color: var(--primary-color); }
|
.site-header { position: sticky; top: 0; z-index: 999; box-shadow: 0 4px 15px rgba(0,0,0,0.12); padding: 15px 0; background-color: var(--primary-color); }
|
||||||
.header-container { display: flex; justify-content: space-between; align-items: center; gap: 15px; }
|
.header-container { display: flex; justify-content: space-between; align-items: center; }
|
||||||
.site-branding { flex-shrink: 0; }
|
|
||||||
.logo-link { display: flex; align-items: center; gap: 15px; color: #fff; }
|
.logo-link { display: flex; align-items: center; gap: 15px; color: #fff; }
|
||||||
.site-title { margin: 0; font-size: 20px; font-weight: 800; color: #fff; letter-spacing: -0.5px; white-space: nowrap; }
|
.site-title { margin: 0; font-size: 22px; font-weight: 800; color: #fff; letter-spacing: -0.5px; }
|
||||||
.header-nav-wrap { display: flex; align-items: center; gap: 14px; justify-content: flex-end; flex: 1; min-width: 0; }
|
.header-nav-wrap { display: flex; align-items: center; gap: 20px; }
|
||||||
.main-navigation { min-width: 0; }
|
.nav-menu-custom { list-style: none; display: flex; gap: 25px; margin: 0; padding: 0; }
|
||||||
.nav-menu-custom {
|
.nav-menu-custom li a { display: block; color: #ffffff; font-weight: 600; font-size: 14px; text-transform: uppercase; letter-spacing: 0.8px; padding: 10px 0; }
|
||||||
list-style: none;
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
gap: 16px;
|
|
||||||
margin: 0;
|
|
||||||
padding: 0;
|
|
||||||
flex-wrap: wrap;
|
|
||||||
}
|
|
||||||
.nav-menu-custom li { position: relative; }
|
|
||||||
.nav-menu-custom li a {
|
|
||||||
display: block;
|
|
||||||
color: #ffffff;
|
|
||||||
font-weight: 700;
|
|
||||||
font-size: 13px;
|
|
||||||
text-transform: uppercase;
|
|
||||||
letter-spacing: 0.4px;
|
|
||||||
padding: 6px 0;
|
|
||||||
white-space: nowrap;
|
|
||||||
}
|
|
||||||
.nav-menu-custom li a:hover { color: #f39c12; }
|
.nav-menu-custom li a:hover { color: #f39c12; }
|
||||||
|
|
||||||
/* DROPDOWN MENU */
|
/* DROPDOWN */
|
||||||
|
.nav-menu-custom li { position: relative; }
|
||||||
.nav-menu-custom .sub-menu {
|
.nav-menu-custom .sub-menu {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: 100%;
|
top: 100%;
|
||||||
left: 0;
|
left: 0;
|
||||||
background-color: var(--primary-color);
|
background-color: var(--primary-color);
|
||||||
min-width: 220px;
|
min-width: 220px;
|
||||||
padding: 8px 0;
|
padding: 10px 0;
|
||||||
border-radius: 0 0 8px 8px;
|
border-radius: 0 0 8px 8px;
|
||||||
box-shadow: 0 10px 25px rgba(0,0,0,0.25);
|
box-shadow: 0 10px 25px rgba(0,0,0,0.2);
|
||||||
opacity: 0;
|
opacity: 0;
|
||||||
visibility: hidden;
|
visibility: hidden;
|
||||||
transform: translateY(12px);
|
transform: translateY(15px);
|
||||||
transition: all 0.25s ease;
|
transition: all 0.3s ease;
|
||||||
z-index: 1000;
|
z-index: 1000;
|
||||||
}
|
}
|
||||||
.nav-menu-custom li:hover > .sub-menu { opacity: 1; visibility: visible; transform: translateY(0); }
|
.nav-menu-custom li:hover > .sub-menu { opacity: 1; visibility: visible; transform: translateY(0); }
|
||||||
.nav-menu-custom .sub-menu li a {
|
.nav-menu-custom .sub-menu li a { padding: 10px 20px; font-size: 14px; text-transform: none; border-bottom: 1px solid rgba(255,255,255,0.05); }
|
||||||
padding: 8px 18px;
|
|
||||||
font-size: 13px;
|
|
||||||
text-transform: none;
|
|
||||||
border-bottom: 1px solid rgba(255,255,255,0.06);
|
|
||||||
white-space: nowrap;
|
|
||||||
}
|
|
||||||
.nav-menu-custom .sub-menu li:last-child a { border-bottom: none; }
|
.nav-menu-custom .sub-menu li:last-child a { border-bottom: none; }
|
||||||
.nav-menu-custom .sub-menu .sub-menu { top: 0; left: 100%; transform: translateX(12px); }
|
.nav-menu-custom .sub-menu .sub-menu { top: 0; left: 100%; transform: translateX(15px); }
|
||||||
.nav-menu-custom .sub-menu li:hover > .sub-menu { transform: translateX(0); }
|
.nav-menu-custom .sub-menu li:hover > .sub-menu { transform: translateX(0); }
|
||||||
|
|
||||||
/* 4. SLIDER */
|
/* 4. SLIDER */
|
||||||
@@ -190,9 +111,11 @@ h1, h2, h3, h4, h5, h6 {
|
|||||||
.stat-card-modern .stat-number { font-size: 40px; font-weight: 800; color: var(--primary-color); margin-bottom: 4px; line-height: 1; }
|
.stat-card-modern .stat-number { font-size: 40px; font-weight: 800; color: var(--primary-color); margin-bottom: 4px; line-height: 1; }
|
||||||
.stat-card-modern .stat-title { font-size: 17px; font-weight: 800; color: var(--heading-color); margin-bottom: 6px; }
|
.stat-card-modern .stat-title { font-size: 17px; font-weight: 800; color: var(--heading-color); margin-bottom: 6px; }
|
||||||
.stat-card-modern .stat-desc { font-size: 14px; color: var(--text-muted); line-height: 1.6; margin: 0; }
|
.stat-card-modern .stat-desc { font-size: 14px; color: var(--text-muted); line-height: 1.6; margin: 0; }
|
||||||
|
|
||||||
.edukarsa-sambutan { padding: 45px 0 50px; }
|
.edukarsa-sambutan { padding: 45px 0 50px; }
|
||||||
.sambutan-grid { display: grid; grid-template-columns: 360px 1fr; gap: 50px; align-items: start; }
|
.sambutan-grid { display: grid; grid-template-columns: 360px 1fr; gap: 50px; align-items: start; }
|
||||||
.sambutan-text { color: #475569; font-size: 15px; line-height: 1.8; margin-bottom: 25px; }
|
.sambutan-text { color: #475569; font-size: 15px; line-height: 1.8; margin-bottom: 25px; }
|
||||||
|
|
||||||
.milestone-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 20px; }
|
.milestone-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 20px; }
|
||||||
.program-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 25px; }
|
.program-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 25px; }
|
||||||
.program-card { padding: 30px 22px; }
|
.program-card { padding: 30px 22px; }
|
||||||
@@ -263,20 +186,24 @@ h1, h2, h3, h4, h5, h6 {
|
|||||||
.footer-brand-desc { font-size: 14px; color: rgba(255,255,255,0.8); line-height: 1.7; margin-bottom: 20px; }
|
.footer-brand-desc { font-size: 14px; color: rgba(255,255,255,0.8); line-height: 1.7; margin-bottom: 20px; }
|
||||||
.footer-hours-box { display: flex; align-items: center; gap: 12px; background: rgba(255,255,255,0.06); padding: 12px 16px; border-radius: 10px; border: 1px solid rgba(255,255,255,0.1); }
|
.footer-hours-box { display: flex; align-items: center; gap: 12px; background: rgba(255,255,255,0.06); padding: 12px 16px; border-radius: 10px; border: 1px solid rgba(255,255,255,0.1); }
|
||||||
.hours-icon { font-size: 22px; }
|
.hours-icon { font-size: 22px; }
|
||||||
|
|
||||||
.footer-contact-list { list-style: none; padding: 0; margin: 0; }
|
.footer-contact-list { list-style: none; padding: 0; margin: 0; }
|
||||||
.footer-contact-list li { display: flex; align-items: flex-start; gap: 12px; margin-bottom: 15px; font-size: 14px; color: rgba(255,255,255,0.85); line-height: 1.6; }
|
.footer-contact-list li { display: flex; align-items: flex-start; gap: 12px; margin-bottom: 15px; font-size: 14px; color: rgba(255,255,255,0.85); line-height: 1.6; }
|
||||||
.footer-contact-list li a { color: rgba(255,255,255,0.9); }
|
.footer-contact-list li a { color: rgba(255,255,255,0.9); }
|
||||||
.footer-contact-list li a:hover { color: #f39c12; }
|
.footer-contact-list li a:hover { color: #f39c12; }
|
||||||
.f-icon { font-size: 16px; flex-shrink: 0; margin-top: 2px; }
|
.f-icon { font-size: 16px; flex-shrink: 0; margin-top: 2px; }
|
||||||
|
|
||||||
.footer-links-custom { list-style: none; padding: 0; margin: 0; }
|
.footer-links-custom { list-style: none; padding: 0; margin: 0; }
|
||||||
.footer-links-custom li { margin-bottom: 12px; }
|
.footer-links-custom li { margin-bottom: 12px; }
|
||||||
.footer-links-custom li a { color: rgba(255,255,255,0.82); font-size: 14px; transition: all 0.25s ease; display: inline-flex; align-items: center; gap: 8px; }
|
.footer-links-custom li a { color: rgba(255,255,255,0.82); font-size: 14px; transition: all 0.25s ease; display: inline-flex; align-items: center; gap: 8px; }
|
||||||
.footer-links-custom li a::before { content: ' '; font-size: 16px; color: var(--secondary-color); font-weight: bold; transition: transform 0.2s; }
|
.footer-links-custom li a::before { content: '›'; font-size: 16px; color: var(--secondary-color); font-weight: bold; transition: transform 0.2s; }
|
||||||
.footer-links-custom li a:hover { color: #ffffff; padding-left: 5px; }
|
.footer-links-custom li a:hover { color: #ffffff; padding-left: 5px; }
|
||||||
.footer-links-custom li a:hover::before { transform: translateX(3px); color: #f39c12; }
|
.footer-links-custom li a:hover::before { transform: translateX(3px); color: #f39c12; }
|
||||||
|
|
||||||
.footer-social-icons { display: flex; gap: 10px; flex-wrap: wrap; }
|
.footer-social-icons { display: flex; gap: 10px; flex-wrap: wrap; }
|
||||||
.social-btn { display: inline-flex; align-items: center; justify-content: center; width: 40px; height: 40px; border-radius: 10px; background: rgba(255,255,255,0.08); color: #ffffff !important; border: 1px solid rgba(255,255,255,0.15); transition: all 0.25s ease; }
|
.social-btn { display: inline-flex; align-items: center; justify-content: center; width: 40px; height: 40px; border-radius: 10px; background: rgba(255,255,255,0.08); color: #ffffff !important; border: 1px solid rgba(255,255,255,0.15); transition: all 0.25s ease; }
|
||||||
.social-btn:hover { background: var(--secondary-color); transform: translateY(-3px); box-shadow: 0 8px 18px rgba(0,0,0,0.25); border-color: transparent; }
|
.social-btn:hover { background: var(--secondary-color); transform: translateY(-3px); box-shadow: 0 8px 18px rgba(0,0,0,0.25); border-color: transparent; }
|
||||||
|
|
||||||
.footer-bottom-bar { border-top: 1px solid rgba(255,255,255,0.08); padding: 22px 0; background: rgba(0,0,0,0.15); }
|
.footer-bottom-bar { border-top: 1px solid rgba(255,255,255,0.08); padding: 22px 0; background: rgba(0,0,0,0.15); }
|
||||||
.footer-bottom-inner { display: flex; justify-content: space-between; align-items: center; flex-wrap: wrap; gap: 15px; }
|
.footer-bottom-inner { display: flex; justify-content: space-between; align-items: center; flex-wrap: wrap; gap: 15px; }
|
||||||
.copyright-text { margin: 0; font-size: 13px; color: rgba(255,255,255,0.65); }
|
.copyright-text { margin: 0; font-size: 13px; color: rgba(255,255,255,0.65); }
|
||||||
@@ -287,8 +214,8 @@ h1, h2, h3, h4, h5, h6 {
|
|||||||
.sidebar-widget { padding: 25px; margin-bottom: 25px; }
|
.sidebar-widget { padding: 25px; margin-bottom: 25px; }
|
||||||
.sidebar-widget-title { font-size: 18px; font-weight: 800; color: var(--heading-color); margin-bottom: 18px; border-bottom: 2px solid var(--primary-color); padding-bottom: 8px; }
|
.sidebar-widget-title { font-size: 18px; font-weight: 800; color: var(--heading-color); margin-bottom: 18px; border-bottom: 2px solid var(--primary-color); padding-bottom: 8px; }
|
||||||
|
|
||||||
/* 10. TYPOGRAPHY KONTEN & COMMENTS */
|
/* 10. TYPOGRAPHY KONTEN */
|
||||||
.entry-content { font-size: 16px; color: #334155; line-height: 1.85; overflow-wrap: break-word; word-break: break-word; }
|
.entry-content { font-size: 16px; color: #334155; line-height: 1.85; }
|
||||||
.entry-content p { margin-bottom: 22px; }
|
.entry-content p { margin-bottom: 22px; }
|
||||||
.entry-content h2 { font-size: 26px; margin: 35px 0 15px; color: var(--heading-color); }
|
.entry-content h2 { font-size: 26px; margin: 35px 0 15px; color: var(--heading-color); }
|
||||||
.entry-content h3 { font-size: 21px; margin: 28px 0 12px; color: var(--heading-color); }
|
.entry-content h3 { font-size: 21px; margin: 28px 0 12px; color: var(--heading-color); }
|
||||||
@@ -296,12 +223,6 @@ h1, h2, h3, h4, h5, h6 {
|
|||||||
.entry-content li { margin-bottom: 8px; }
|
.entry-content li { margin-bottom: 8px; }
|
||||||
.entry-content blockquote { margin: 30px 0; padding: 20px 25px; background: #f8fafc; border-left: 4px solid var(--primary-color); font-style: italic; color: #475569; border-radius: 0 8px 8px 0; }
|
.entry-content blockquote { margin: 30px 0; padding: 20px 25px; background: #f8fafc; border-left: 4px solid var(--primary-color); font-style: italic; color: #475569; border-radius: 0 8px 8px 0; }
|
||||||
|
|
||||||
.comments-area { margin-top: 40px; padding-top: 30px; border-top: 1px solid #e2e8f0; }
|
|
||||||
.comment-list { list-style: none; padding: 0; margin: 0 0 30px; }
|
|
||||||
.comment-list .comment { margin-bottom: 20px; padding: 18px; background: #f8fafc; border-radius: 10px; border: 1px solid #e2e8f0; }
|
|
||||||
.comment-author { display: flex; align-items: center; gap: 10px; margin-bottom: 8px; }
|
|
||||||
.comment-author img.avatar { border-radius: 50%; }
|
|
||||||
|
|
||||||
/* 11. PAGINATION */
|
/* 11. PAGINATION */
|
||||||
.pagination { margin-top: 45px; text-align: center; }
|
.pagination { margin-top: 45px; text-align: center; }
|
||||||
.pagination .nav-links { display: inline-flex; gap: 8px; align-items: center; }
|
.pagination .nav-links { display: inline-flex; gap: 8px; align-items: center; }
|
||||||
@@ -309,9 +230,7 @@ h1, h2, h3, h4, h5, h6 {
|
|||||||
.pagination .page-numbers.current, .pagination .page-numbers:hover { background: var(--primary-color); color: #fff; border-color: var(--primary-color); }
|
.pagination .page-numbers.current, .pagination .page-numbers:hover { background: var(--primary-color); color: #fff; border-color: var(--primary-color); }
|
||||||
|
|
||||||
/* 12. RESPONSIVE MEDIA QUERIES */
|
/* 12. RESPONSIVE MEDIA QUERIES */
|
||||||
@media (max-width: 1024px) {
|
@media (max-width: 1024px) { .footer-grid-wrapper { grid-template-columns: repeat(2, 1fr); gap: 35px; } }
|
||||||
.footer-grid-wrapper { grid-template-columns: repeat(2, 1fr); gap: 35px; }
|
|
||||||
}
|
|
||||||
@media (max-width: 992px) {
|
@media (max-width: 992px) {
|
||||||
.single-layout-wrapper { grid-template-columns: 1fr; }
|
.single-layout-wrapper { grid-template-columns: 1fr; }
|
||||||
.program-grid, .milestone-grid, .news-grid { grid-template-columns: repeat(2, 1fr); }
|
.program-grid, .milestone-grid, .news-grid { grid-template-columns: repeat(2, 1fr); }
|
||||||
@@ -321,6 +240,7 @@ h1, h2, h3, h4, h5, h6 {
|
|||||||
}
|
}
|
||||||
@media (max-width: 768px) {
|
@media (max-width: 768px) {
|
||||||
.header-container { flex-direction: row; }
|
.header-container { flex-direction: row; }
|
||||||
|
.nav-menu-custom { flex-wrap: wrap; justify-content: center; }
|
||||||
.footer-grid-wrapper { grid-template-columns: 1fr; gap: 30px; }
|
.footer-grid-wrapper { grid-template-columns: 1fr; gap: 30px; }
|
||||||
.footer-bottom-inner { flex-direction: column; text-align: center; }
|
.footer-bottom-inner { flex-direction: column; text-align: center; }
|
||||||
.program-grid, .milestone-grid, .news-grid { grid-template-columns: 1fr; }
|
.program-grid, .milestone-grid, .news-grid { grid-template-columns: 1fr; }
|
||||||
@@ -331,19 +251,20 @@ h1, h2, h3, h4, h5, h6 {
|
|||||||
.cta-floating-title { font-size: 20px; }
|
.cta-floating-title { font-size: 20px; }
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 13. MOBILE MENU TOGGLE & DRAWER (SWITCH AT 992px) */
|
/* 13. MOBILE MENU TOGGLE & DRAWER */
|
||||||
.menu-toggle { display: none; background: transparent; border: none; cursor: pointer; padding: 8px; flex-direction: column; gap: 5px; z-index: 1001; }
|
.menu-toggle { display: none; background: transparent; border: none; cursor: pointer; padding: 10px; flex-direction: column; gap: 5px; z-index: 1001; }
|
||||||
.menu-toggle span { display: block; width: 24px; height: 3px; background-color: #ffffff; border-radius: 3px; transition: all 0.3s ease; }
|
.menu-toggle span { display: block; width: 26px; height: 3px; background-color: #ffffff; border-radius: 3px; transition: all 0.3s ease; }
|
||||||
.menu-toggle.active span:nth-child(1) { transform: translateY(8px) rotate(45deg); }
|
.menu-toggle.active span:nth-child(1) { transform: translateY(8px) rotate(45deg); }
|
||||||
.menu-toggle.active span:nth-child(2) { opacity: 0; }
|
.menu-toggle.active span:nth-child(2) { opacity: 0; }
|
||||||
.menu-toggle.active span:nth-child(3) { transform: translateY(-8px) rotate(-45deg); }
|
.menu-toggle.active span:nth-child(3) { transform: translateY(-8px) rotate(-45deg); }
|
||||||
@media (max-width: 992px) {
|
|
||||||
|
@media (max-width: 768px) {
|
||||||
.menu-toggle { display: flex; }
|
.menu-toggle { display: flex; }
|
||||||
.main-navigation {
|
.main-navigation {
|
||||||
position: fixed;
|
position: fixed;
|
||||||
top: 0;
|
top: 0;
|
||||||
right: -100%;
|
right: -100%;
|
||||||
width: 300px;
|
width: 280px;
|
||||||
height: 100vh;
|
height: 100vh;
|
||||||
background: var(--primary-color);
|
background: var(--primary-color);
|
||||||
box-shadow: -5px 0 25px rgba(0,0,0,0.3);
|
box-shadow: -5px 0 25px rgba(0,0,0,0.3);
|
||||||
@@ -416,7 +337,6 @@ h1, h2, h3, h4, h5, h6 {
|
|||||||
padding: 3px 8px;
|
padding: 3px 8px;
|
||||||
border-radius: 20px;
|
border-radius: 20px;
|
||||||
backdrop-filter: blur(4px);
|
backdrop-filter: blur(4px);
|
||||||
flex-shrink: 0;
|
|
||||||
}
|
}
|
||||||
.lang-btn {
|
.lang-btn {
|
||||||
background: transparent;
|
background: transparent;
|
||||||
@@ -444,13 +364,22 @@ h1, h2, h3, h4, h5, h6 {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* 17. BULLETPROOF GOOGLE TRANSLATE BANNER SUPPRESSION */
|
/* 17. BULLETPROOF GOOGLE TRANSLATE BANNER SUPPRESSION */
|
||||||
.goog-te-banner-frame, .goog-te-banner-frame.skiptranslate, iframe.goog-te-banner-frame, .VIpgJd-ZVi9od-ORHb-OEVmcd, #goog-gt-tt, .goog-te-balloon-frame {
|
.goog-te-banner-frame,
|
||||||
|
.goog-te-banner-frame.skiptranslate,
|
||||||
|
iframe.goog-te-banner-frame,
|
||||||
|
.VIpgJd-ZVi9od-ORHb-OEVmcd,
|
||||||
|
#goog-gt-tt,
|
||||||
|
.goog-te-balloon-frame {
|
||||||
display: none !important;
|
display: none !important;
|
||||||
visibility: hidden !important;
|
visibility: hidden !important;
|
||||||
height: 0 !important;
|
height: 0 !important;
|
||||||
width: 0 !important;
|
width: 0 !important;
|
||||||
opacity: 0 !important;
|
opacity: 0 !important;
|
||||||
}
|
}
|
||||||
|
body {
|
||||||
|
top: 0px !important;
|
||||||
|
position: static !important;
|
||||||
|
}
|
||||||
.goog-tooltip, .goog-tooltip:hover { display: none !important; }
|
.goog-tooltip, .goog-tooltip:hover { display: none !important; }
|
||||||
.goog-text-highlight { background-color: transparent !important; box-shadow: none !important; }
|
.goog-text-highlight { background-color: transparent !important; box-shadow: none !important; }
|
||||||
font { background-color: transparent !important; box-shadow: none !important; }
|
font { background-color: transparent !important; box-shadow: none !important; }
|
||||||
@@ -495,6 +424,7 @@ font { background-color: transparent !important; box-shadow: none !important; }
|
|||||||
.a11y-btn-danger { background: #fee2e2; border-color: #fca5a5; color: #991b1b; }
|
.a11y-btn-danger { background: #fee2e2; border-color: #fca5a5; color: #991b1b; }
|
||||||
.a11y-btn-danger:hover { background: #fecaca; color: #7f1d1d; }
|
.a11y-btn-danger:hover { background: #fecaca; color: #7f1d1d; }
|
||||||
|
|
||||||
|
/* KELAS STATUS AKSESIBILITAS YANG DITERAPKAN KE BODY */
|
||||||
body.a11y-font-lg { font-size: 18px !important; }
|
body.a11y-font-lg { font-size: 18px !important; }
|
||||||
body.a11y-font-lg h1 { font-size: 34px !important; }
|
body.a11y-font-lg h1 { font-size: 34px !important; }
|
||||||
body.a11y-font-lg h2 { font-size: 28px !important; }
|
body.a11y-font-lg h2 { font-size: 28px !important; }
|
||||||
@@ -503,11 +433,13 @@ body.a11y-font-xl { font-size: 20px !important; }
|
|||||||
body.a11y-font-xl h1 { font-size: 38px !important; }
|
body.a11y-font-xl h1 { font-size: 38px !important; }
|
||||||
body.a11y-font-xl h2 { font-size: 32px !important; }
|
body.a11y-font-xl h2 { font-size: 32px !important; }
|
||||||
body.a11y-font-xl h3 { font-size: 25px !important; }
|
body.a11y-font-xl h3 { font-size: 25px !important; }
|
||||||
|
|
||||||
body.a11y-high-contrast { filter: contrast(160%) !important; }
|
body.a11y-high-contrast { filter: contrast(160%) !important; }
|
||||||
body.a11y-grayscale { filter: grayscale(100%) !important; }
|
body.a11y-grayscale { filter: grayscale(100%) !important; }
|
||||||
body.a11y-high-contrast.a11y-grayscale { filter: grayscale(100%) contrast(160%) !important; }
|
body.a11y-high-contrast.a11y-grayscale { filter: grayscale(100%) contrast(160%) !important; }
|
||||||
body.a11y-underline-links a { text-decoration: underline !important; text-underline-offset: 3px !important; }
|
body.a11y-underline-links a { text-decoration: underline !important; text-underline-offset: 3px !important; }
|
||||||
|
|
||||||
|
/* STATE BUTTON AKSESIBILITAS SUARA AKTIF */
|
||||||
.a11y-btn.speaking {
|
.a11y-btn.speaking {
|
||||||
background: #10b981 !important;
|
background: #10b981 !important;
|
||||||
border-color: #059669 !important;
|
border-color: #059669 !important;
|
||||||
@@ -534,6 +466,7 @@ body.a11y-underline-links a { text-decoration: underline !important; text-underl
|
|||||||
.edukarsa-breadcrumbs a:hover { text-decoration: underline; }
|
.edukarsa-breadcrumbs a:hover { text-decoration: underline; }
|
||||||
.bc-sep { color: #cbd5e1; font-weight: bold; }
|
.bc-sep { color: #cbd5e1; font-weight: bold; }
|
||||||
.bc-current { color: var(--heading-color); font-weight: 600; }
|
.bc-current { color: var(--heading-color); font-weight: 600; }
|
||||||
|
|
||||||
.single-article-card { padding: 40px; margin-bottom: 30px; }
|
.single-article-card { padding: 40px; margin-bottom: 30px; }
|
||||||
.single-article-title {
|
.single-article-title {
|
||||||
font-size: 32px;
|
font-size: 32px;
|
||||||
@@ -568,6 +501,7 @@ body.a11y-underline-links a { text-decoration: underline !important; text-underl
|
|||||||
font-style: italic;
|
font-style: italic;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* INTRA-POST PAGINATION (<!--nextpage-->) */
|
||||||
.intra-post-pagination {
|
.intra-post-pagination {
|
||||||
margin-top: 35px;
|
margin-top: 35px;
|
||||||
padding-top: 20px;
|
padding-top: 20px;
|
||||||
@@ -609,6 +543,7 @@ body.a11y-underline-links a { text-decoration: underline !important; text-underl
|
|||||||
color: #ffffff;
|
color: #ffffff;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* FOOTER ARTIKEL & SHARE BAR */
|
||||||
.single-article-footer {
|
.single-article-footer {
|
||||||
margin-top: 35px;
|
margin-top: 35px;
|
||||||
padding-top: 25px;
|
padding-top: 25px;
|
||||||
@@ -631,6 +566,7 @@ body.a11y-underline-links a { text-decoration: underline !important; text-underl
|
|||||||
font-weight: 600;
|
font-weight: 600;
|
||||||
}
|
}
|
||||||
.single-tags-list a:hover { background: var(--primary-color); color: #ffffff; }
|
.single-tags-list a:hover { background: var(--primary-color); color: #ffffff; }
|
||||||
|
|
||||||
.single-share-bar { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
|
.single-share-bar { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
|
||||||
.share-label { font-size: 13px; font-weight: 700; color: var(--heading-color); margin-right: 4px; }
|
.share-label { font-size: 13px; font-weight: 700; color: var(--heading-color); margin-right: 4px; }
|
||||||
.share-btn {
|
.share-btn {
|
||||||
@@ -653,6 +589,7 @@ body.a11y-underline-links a { text-decoration: underline !important; text-underl
|
|||||||
.share-copy { background: #475569; color: #ffffff; }
|
.share-copy { background: #475569; color: #ffffff; }
|
||||||
.share-copy:hover { background: #334155; }
|
.share-copy:hover { background: #334155; }
|
||||||
|
|
||||||
|
/* INTER-POST NAVIGATION (SEBELUMNYA & SELANJUTNYA) */
|
||||||
.inter-post-nav {
|
.inter-post-nav {
|
||||||
display: grid;
|
display: grid;
|
||||||
grid-template-columns: 1fr 1fr;
|
grid-template-columns: 1fr 1fr;
|
||||||
@@ -682,64 +619,7 @@ body.a11y-underline-links a { text-decoration: underline !important; text-underl
|
|||||||
.nav-box:hover .nav-post-title { color: var(--primary-color); }
|
.nav-box:hover .nav-post-title { color: var(--primary-color); }
|
||||||
.text-right { text-align: right; }
|
.text-right { text-align: right; }
|
||||||
|
|
||||||
/* 20. SIDEBAR KATEGORI DENGAN LIMIT & SCROLLABLE CONTAINER */
|
/* 20. KOMPONEN SIDEBAR NATIVE TERINTEGRASI */
|
||||||
.sidebar-category-list {
|
|
||||||
list-style: none;
|
|
||||||
padding: 0;
|
|
||||||
margin: 0;
|
|
||||||
max-height: 380px;
|
|
||||||
overflow-y: auto;
|
|
||||||
padding-right: 6px;
|
|
||||||
}
|
|
||||||
.sidebar-category-list::-webkit-scrollbar {
|
|
||||||
width: 5px;
|
|
||||||
}
|
|
||||||
.sidebar-category-list::-webkit-scrollbar-track {
|
|
||||||
background: #f1f5f9;
|
|
||||||
border-radius: 4px;
|
|
||||||
}
|
|
||||||
.sidebar-category-list::-webkit-scrollbar-thumb {
|
|
||||||
background: #cbd5e1;
|
|
||||||
border-radius: 4px;
|
|
||||||
}
|
|
||||||
.sidebar-category-list::-webkit-scrollbar-thumb:hover {
|
|
||||||
background: #94a3b8;
|
|
||||||
}
|
|
||||||
.sidebar-category-list li { margin-bottom: 8px; }
|
|
||||||
.sidebar-cat-link {
|
|
||||||
display: flex;
|
|
||||||
justify-content: space-between;
|
|
||||||
align-items: center;
|
|
||||||
padding: 9px 14px;
|
|
||||||
background: #f8fafc;
|
|
||||||
border: 1px solid #f1f5f9;
|
|
||||||
border-radius: 6px;
|
|
||||||
font-size: 13px;
|
|
||||||
font-weight: 600;
|
|
||||||
color: var(--text-color);
|
|
||||||
transition: all 0.2s ease;
|
|
||||||
word-break: break-word;
|
|
||||||
}
|
|
||||||
.sidebar-cat-link:hover {
|
|
||||||
background: var(--primary-color);
|
|
||||||
color: #ffffff;
|
|
||||||
border-color: var(--primary-color);
|
|
||||||
}
|
|
||||||
.sidebar-cat-count {
|
|
||||||
padding: 2px 8px;
|
|
||||||
background: rgba(0,0,0,0.06);
|
|
||||||
border-radius: 12px;
|
|
||||||
font-size: 11px;
|
|
||||||
font-weight: 800;
|
|
||||||
flex-shrink: 0;
|
|
||||||
margin-left: 8px;
|
|
||||||
}
|
|
||||||
.sidebar-cat-link:hover .sidebar-cat-count {
|
|
||||||
background: rgba(255,255,255,0.25);
|
|
||||||
color: #ffffff;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* 21. SIDEBAR SEARCH & HTML BOX */
|
|
||||||
.sidebar-search-form { position: relative; }
|
.sidebar-search-form { position: relative; }
|
||||||
.sidebar-search-wrapper { display: flex; position: relative; }
|
.sidebar-search-wrapper { display: flex; position: relative; }
|
||||||
.sidebar-search-input {
|
.sidebar-search-input {
|
||||||
@@ -764,6 +644,7 @@ body.a11y-underline-links a { text-decoration: underline !important; text-underl
|
|||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
padding: 6px;
|
padding: 6px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.sidebar-cta-box {
|
.sidebar-cta-box {
|
||||||
background: linear-gradient(135deg, var(--primary-color), var(--heading-color));
|
background: linear-gradient(135deg, var(--primary-color), var(--heading-color));
|
||||||
color: #ffffff;
|
color: #ffffff;
|
||||||
@@ -783,6 +664,7 @@ body.a11y-underline-links a { text-decoration: underline !important; text-underl
|
|||||||
.sidebar-cta-title { font-size: 19px; font-weight: 800; color: #ffffff; margin-bottom: 10px; line-height: 1.35; }
|
.sidebar-cta-title { font-size: 19px; font-weight: 800; color: #ffffff; margin-bottom: 10px; line-height: 1.35; }
|
||||||
.sidebar-cta-desc { font-size: 13px; opacity: 0.9; margin-bottom: 20px; line-height: 1.6; }
|
.sidebar-cta-desc { font-size: 13px; opacity: 0.9; margin-bottom: 20px; line-height: 1.6; }
|
||||||
.sidebar-cta-btn { display: inline-block; padding: 10px 26px; font-size: 14px; font-weight: 800; }
|
.sidebar-cta-btn { display: inline-block; padding: 10px 26px; font-size: 14px; font-weight: 800; }
|
||||||
|
|
||||||
.sidebar-recent-list { display: flex; flex-direction: column; gap: 16px; }
|
.sidebar-recent-list { display: flex; flex-direction: column; gap: 16px; }
|
||||||
.sidebar-recent-item { display: flex; gap: 14px; align-items: center; }
|
.sidebar-recent-item { display: flex; gap: 14px; align-items: center; }
|
||||||
.sidebar-recent-thumb { width: 68px; height: 68px; border-radius: 8px; overflow: hidden; flex-shrink: 0; }
|
.sidebar-recent-thumb { width: 68px; height: 68px; border-radius: 8px; overflow: hidden; flex-shrink: 0; }
|
||||||
@@ -792,12 +674,54 @@ body.a11y-underline-links a { text-decoration: underline !important; text-underl
|
|||||||
.sidebar-recent-title a { color: var(--heading-color); }
|
.sidebar-recent-title a { color: var(--heading-color); }
|
||||||
.sidebar-recent-title a:hover { color: var(--primary-color); }
|
.sidebar-recent-title a:hover { color: var(--primary-color); }
|
||||||
|
|
||||||
|
.sidebar-category-list { list-style: none; padding: 0; margin: 0; }
|
||||||
|
.sidebar-category-list li { margin-bottom: 8px; }
|
||||||
|
.sidebar-cat-link {
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
|
padding: 9px 14px;
|
||||||
|
background: #f8fafc;
|
||||||
|
border: 1px solid #f1f5f9;
|
||||||
|
border-radius: 6px;
|
||||||
|
font-size: 13px;
|
||||||
|
font-weight: 600;
|
||||||
|
color: var(--text-color);
|
||||||
|
transition: all 0.2s ease;
|
||||||
|
}
|
||||||
|
.sidebar-cat-link:hover {
|
||||||
|
background: var(--primary-color);
|
||||||
|
color: #ffffff;
|
||||||
|
border-color: var(--primary-color);
|
||||||
|
}
|
||||||
|
.sidebar-cat-count {
|
||||||
|
padding: 2px 8px;
|
||||||
|
background: rgba(0,0,0,0.06);
|
||||||
|
border-radius: 12px;
|
||||||
|
font-size: 11px;
|
||||||
|
font-weight: 800;
|
||||||
|
}
|
||||||
|
.sidebar-cat-link:hover .sidebar-cat-count {
|
||||||
|
background: rgba(255,255,255,0.25);
|
||||||
|
color: #ffffff;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (max-width: 768px) {
|
||||||
|
.inter-post-nav { grid-template-columns: 1fr; }
|
||||||
|
.text-right { text-align: left; }
|
||||||
|
.single-article-card { padding: 25px 20px; }
|
||||||
|
.single-article-title { font-size: 24px; }
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 21. SIDEBAR CUSTOM HTML BOX */
|
||||||
.sidebar-custom-html-box { padding: 25px; }
|
.sidebar-custom-html-box { padding: 25px; }
|
||||||
.sidebar-html-rendered-content { font-size: 14px; line-height: 1.7; color: var(--text-color); }
|
.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 iframe { width: 100% !important; border-radius: 8px; border: none; }
|
||||||
.sidebar-html-rendered-content img { border-radius: 8px; margin: 10px 0; }
|
.sidebar-html-rendered-content img { border-radius: 8px; margin: 10px 0; }
|
||||||
|
|
||||||
/* MODUL GALERI & FASILITAS */
|
/* ---------------------------------------------------------
|
||||||
|
MODUL GALERI & FASILITAS (GRID + LIGHTBOX)
|
||||||
|
--------------------------------------------------------- */
|
||||||
.gallery-filters { display: flex; flex-wrap: wrap; justify-content: center; gap: 10px; }
|
.gallery-filters { display: flex; flex-wrap: wrap; justify-content: center; gap: 10px; }
|
||||||
.gallery-filter-btn {
|
.gallery-filter-btn {
|
||||||
background: #ffffff;
|
background: #ffffff;
|
||||||
@@ -816,7 +740,13 @@ body.a11y-underline-links a { text-decoration: underline !important; text-underl
|
|||||||
color: #ffffff;
|
color: #ffffff;
|
||||||
box-shadow: 0 4px 12px rgba(11, 74, 142, 0.2);
|
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-grid {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
|
||||||
|
gap: 25px;
|
||||||
|
}
|
||||||
|
|
||||||
.gallery-item-card {
|
.gallery-item-card {
|
||||||
background: #ffffff;
|
background: #ffffff;
|
||||||
border-radius: 14px;
|
border-radius: 14px;
|
||||||
@@ -826,10 +756,28 @@ body.a11y-underline-links a { text-decoration: underline !important; text-underl
|
|||||||
transition: all 0.3s ease;
|
transition: all 0.3s ease;
|
||||||
border: 1px solid #f1f5f9;
|
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-item-card:hover {
|
||||||
.gallery-img-wrapper { position: relative; aspect-ratio: 4/3; overflow: hidden; background: #f8fafc; }
|
transform: translateY(-6px);
|
||||||
.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); }
|
box-shadow: 0 15px 35px rgba(11, 74, 142, 0.12);
|
||||||
.gallery-item-card:hover .gallery-img-wrapper img { transform: scale(1.08); }
|
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 {
|
.gallery-overlay {
|
||||||
position: absolute; top: 0; left: 0; right: 0; bottom: 0;
|
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%);
|
background: linear-gradient(to bottom, rgba(11,74,142,0.2) 0%, rgba(11,74,142,0.8) 100%);
|
||||||
@@ -837,8 +785,15 @@ body.a11y-underline-links a { text-decoration: underline !important; text-underl
|
|||||||
opacity: 0; transition: opacity 0.3s ease;
|
opacity: 0; transition: opacity 0.3s ease;
|
||||||
}
|
}
|
||||||
.gallery-item-card:hover .gallery-overlay { opacity: 1; }
|
.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-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-card:hover .gallery-zoom-icon { transform: translateY(0); }
|
||||||
|
|
||||||
.gallery-item-info { padding: 22px 20px; }
|
.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-item-info h4 { margin: 0 0 10px; font-size: 17px; font-weight: 800; color: var(--heading-color); line-height: 1.4; }
|
||||||
.gallery-cat-badge {
|
.gallery-cat-badge {
|
||||||
@@ -850,7 +805,7 @@ body.a11y-underline-links a { text-decoration: underline !important; text-underl
|
|||||||
background: #e0f2fe; padding: 4px 12px; border-radius: 20px;
|
background: #e0f2fe; padding: 4px 12px; border-radius: 20px;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* NATIVE LIGHTBOX */
|
/* NATIVE LIGHTBOX (ZOOM EFEK) */
|
||||||
.ek-lightbox {
|
.ek-lightbox {
|
||||||
position: fixed; top: 0; left: 0; width: 100%; height: 100%;
|
position: fixed; top: 0; left: 0; width: 100%; height: 100%;
|
||||||
background: rgba(15, 23, 42, 0.96); z-index: 9999;
|
background: rgba(15, 23, 42, 0.96); z-index: 9999;
|
||||||
@@ -859,12 +814,14 @@ body.a11y-underline-links a { text-decoration: underline !important; text-underl
|
|||||||
backdrop-filter: blur(8px);
|
backdrop-filter: blur(8px);
|
||||||
}
|
}
|
||||||
.ek-lightbox.show { opacity: 1; visibility: visible; }
|
.ek-lightbox.show { opacity: 1; visibility: visible; }
|
||||||
|
|
||||||
.ek-lb-close {
|
.ek-lb-close {
|
||||||
position: absolute; top: 25px; right: 35px; font-size: 45px;
|
position: absolute; top: 25px; right: 35px; font-size: 45px;
|
||||||
color: rgba(255,255,255,0.6); cursor: pointer; line-height: 1;
|
color: rgba(255,255,255,0.6); cursor: pointer; line-height: 1;
|
||||||
transition: color 0.2s, transform 0.2s; z-index: 10;
|
transition: color 0.2s, transform 0.2s; z-index: 10;
|
||||||
}
|
}
|
||||||
.ek-lb-close:hover { color: #f59e0b; transform: scale(1.1); }
|
.ek-lb-close:hover { color: #f59e0b; transform: scale(1.1); }
|
||||||
|
|
||||||
.ek-lb-content {
|
.ek-lb-content {
|
||||||
max-width: 900px; width: 92%; max-height: 90vh;
|
max-width: 900px; width: 92%; max-height: 90vh;
|
||||||
display: flex; flex-direction: column;
|
display: flex; flex-direction: column;
|
||||||
@@ -873,12 +830,25 @@ body.a11y-underline-links a { text-decoration: underline !important; text-underl
|
|||||||
box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.5);
|
box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.5);
|
||||||
}
|
}
|
||||||
.ek-lightbox.show .ek-lb-content { transform: scale(1); }
|
.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-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-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-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 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; }
|
.ek-lb-caption p { margin: 0; font-size: 15px; color: var(--text-color); line-height: 1.7; }
|
||||||
|
|
||||||
|
/* Tombol Navigasi Lightbox */
|
||||||
.ek-lb-nav {
|
.ek-lb-nav {
|
||||||
position: absolute; top: 50%; transform: translateY(-50%);
|
position: absolute; top: 50%; transform: translateY(-50%);
|
||||||
background: rgba(255,255,255,0.1); border: 1px solid rgba(255,255,255,0.2);
|
background: rgba(255,255,255,0.1); border: 1px solid rgba(255,255,255,0.2);
|
||||||
@@ -890,7 +860,18 @@ body.a11y-underline-links a { text-decoration: underline !important; text-underl
|
|||||||
.ek-lb-prev { left: 40px; }
|
.ek-lb-prev { left: 40px; }
|
||||||
.ek-lb-next { right: 40px; }
|
.ek-lb-next { right: 40px; }
|
||||||
|
|
||||||
/* FIX SUB-MENU DROPDOWN */
|
@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; }
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 22. FIX: HILANGKAN BULLET PADA SUB-MENU DROPDOWN */
|
||||||
.nav-menu-custom .sub-menu,
|
.nav-menu-custom .sub-menu,
|
||||||
.nav-menu-custom .sub-menu li {
|
.nav-menu-custom .sub-menu li {
|
||||||
list-style: none !important;
|
list-style: none !important;
|
||||||
@@ -902,120 +883,139 @@ body.a11y-underline-links a { text-decoration: underline !important; text-underl
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* 23. NATIVE POP-UP FLYER MODAL */
|
/* 23. NATIVE POP-UP FLYER MODAL */
|
||||||
body.edukarsa-popup-open { overflow: hidden; }
|
body.edukarsa-popup-open {
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
.edukarsa-popup-overlay {
|
.edukarsa-popup-overlay {
|
||||||
position: fixed; top: 0; left: 0; width: 100%; height: 100%;
|
position: fixed;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
background-color: rgba(15, 23, 42, 0.78);
|
background-color: rgba(15, 23, 42, 0.78);
|
||||||
backdrop-filter: blur(5px);
|
backdrop-filter: blur(5px);
|
||||||
-webkit-backdrop-filter: blur(5px);
|
-webkit-backdrop-filter: blur(5px);
|
||||||
z-index: 99999;
|
z-index: 99999;
|
||||||
display: flex; align-items: center; justify-content: center;
|
display: flex;
|
||||||
padding: 20px; opacity: 0; visibility: hidden;
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
padding: 20px;
|
||||||
|
opacity: 0;
|
||||||
|
visibility: hidden;
|
||||||
transition: opacity 0.3s cubic-bezier(0.16, 1, 0.3, 1), visibility 0.3s ease;
|
transition: opacity 0.3s cubic-bezier(0.16, 1, 0.3, 1), visibility 0.3s ease;
|
||||||
}
|
}
|
||||||
.edukarsa-popup-overlay.is-visible { opacity: 1; visibility: visible; }
|
.edukarsa-popup-overlay.is-visible {
|
||||||
|
opacity: 1;
|
||||||
|
visibility: visible;
|
||||||
|
}
|
||||||
.edukarsa-popup-card {
|
.edukarsa-popup-card {
|
||||||
position: relative; background: #ffffff; border-radius: 18px;
|
position: relative;
|
||||||
max-width: 520px; width: 100%; max-height: 90vh;
|
background: #ffffff;
|
||||||
overflow-y: auto; overflow-x: hidden;
|
border-radius: 18px;
|
||||||
|
max-width: 520px;
|
||||||
|
width: 100%;
|
||||||
|
max-height: 90vh;
|
||||||
|
overflow-y: auto;
|
||||||
|
overflow-x: hidden;
|
||||||
box-shadow: 0 25px 60px -15px rgba(0, 0, 0, 0.4);
|
box-shadow: 0 25px 60px -15px rgba(0, 0, 0, 0.4);
|
||||||
transform: scale(0.92) translateY(15px);
|
transform: scale(0.92) translateY(15px);
|
||||||
transition: transform 0.35s cubic-bezier(0.16, 1, 0.3, 1);
|
transition: transform 0.35s cubic-bezier(0.16, 1, 0.3, 1);
|
||||||
}
|
}
|
||||||
.edukarsa-popup-overlay.is-visible .edukarsa-popup-card { transform: scale(1) translateY(0); }
|
.edukarsa-popup-overlay.is-visible .edukarsa-popup-card {
|
||||||
|
transform: scale(1) translateY(0);
|
||||||
|
}
|
||||||
.edukarsa-popup-close {
|
.edukarsa-popup-close {
|
||||||
position: absolute; top: 14px; right: 14px; width: 36px; height: 36px;
|
position: absolute;
|
||||||
border-radius: 50%; background: rgba(15, 23, 42, 0.75); color: #ffffff;
|
top: 14px;
|
||||||
border: 2px solid #ffffff; font-size: 24px; line-height: 1;
|
right: 14px;
|
||||||
display: flex; align-items: center; justify-content: center;
|
width: 36px;
|
||||||
cursor: pointer; z-index: 10; transition: background 0.2s, transform 0.2s;
|
height: 36px;
|
||||||
}
|
border-radius: 50%;
|
||||||
.edukarsa-popup-close:hover { background: #e11d48; transform: scale(1.1); }
|
background: rgba(15, 23, 42, 0.75);
|
||||||
.edukarsa-popup-media { width: 100%; background: #0f172a; display: block; line-height: 0; }
|
color: #ffffff;
|
||||||
.edukarsa-popup-media img { width: 100%; height: auto; max-height: 380px; object-fit: contain; display: block; margin: 0 auto; }
|
border: 2px solid #ffffff;
|
||||||
.edukarsa-popup-img-link { display: block; cursor: pointer; }
|
font-size: 24px;
|
||||||
.edukarsa-popup-details { padding: 24px 28px; text-align: center; background: #ffffff; }
|
line-height: 1;
|
||||||
.edukarsa-popup-badge {
|
|
||||||
display: inline-block; padding: 4px 14px; background: #e0f2fe;
|
|
||||||
color: var(--primary-color); font-size: 11px; font-weight: 800;
|
|
||||||
text-transform: uppercase; letter-spacing: 0.8px; border-radius: 20px;
|
|
||||||
margin-bottom: 10px;
|
|
||||||
}
|
|
||||||
.edukarsa-popup-heading { font-size: 20px; font-weight: 800; color: var(--heading-color); margin: 0 0 10px; line-height: 1.35; }
|
|
||||||
.edukarsa-popup-desc { font-size: 14px; color: var(--text-color); line-height: 1.6; margin: 0 0 20px; }
|
|
||||||
.edukarsa-popup-action { margin-top: 15px; }
|
|
||||||
.edukarsa-popup-btn {
|
|
||||||
display: inline-block; padding: 12px 32px; font-size: 15px;
|
|
||||||
font-weight: 800; border-radius: 50px;
|
|
||||||
box-shadow: 0 6px 18px rgba(11, 74, 142, 0.25);
|
|
||||||
}
|
|
||||||
.edukarsa-popup-btn:hover { transform: translateY(-2px); box-shadow: 0 10px 25px rgba(11, 74, 142, 0.35); }
|
|
||||||
|
|
||||||
/* 22. MODERN NATIVE SEARCH FORM */
|
|
||||||
.search-form.edukarsa-search-form,
|
|
||||||
.search-form {
|
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
position: relative;
|
|
||||||
width: 100%;
|
|
||||||
margin: 0;
|
|
||||||
}
|
|
||||||
.search-form .search-form-label,
|
|
||||||
.search-form label {
|
|
||||||
flex: 1;
|
|
||||||
margin: 0;
|
|
||||||
position: relative;
|
|
||||||
width: 100%;
|
|
||||||
display: block;
|
|
||||||
}
|
|
||||||
.search-form .search-field {
|
|
||||||
width: 100%;
|
|
||||||
padding: 13px 52px 13px 20px;
|
|
||||||
background-color: #f8fafc;
|
|
||||||
border: 1.5px solid #e2e8f0;
|
|
||||||
border-radius: 50px;
|
|
||||||
font-size: 14px;
|
|
||||||
font-weight: 500;
|
|
||||||
color: var(--heading-color);
|
|
||||||
outline: none;
|
|
||||||
transition: all 0.25s ease;
|
|
||||||
font-family: inherit;
|
|
||||||
box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.03);
|
|
||||||
}
|
|
||||||
.search-form .search-field::placeholder {
|
|
||||||
color: #94a3b8;
|
|
||||||
font-size: 13.5px;
|
|
||||||
}
|
|
||||||
.search-form .search-field:focus {
|
|
||||||
background-color: #ffffff;
|
|
||||||
border-color: var(--secondary-color);
|
|
||||||
box-shadow: 0 0 0 4px rgba(26, 115, 232, 0.12);
|
|
||||||
}
|
|
||||||
.search-form .search-submit {
|
|
||||||
position: absolute;
|
|
||||||
right: 5px;
|
|
||||||
top: 50%;
|
|
||||||
transform: translateY(-50%);
|
|
||||||
width: 38px;
|
|
||||||
height: 38px;
|
|
||||||
border-radius: 50%;
|
|
||||||
background: linear-gradient(135deg, var(--secondary-color), var(--primary-color));
|
|
||||||
color: #ffffff;
|
|
||||||
border: none;
|
|
||||||
cursor: pointer;
|
|
||||||
display: inline-flex;
|
|
||||||
align-items: center;
|
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
transition: all 0.25s ease;
|
cursor: pointer;
|
||||||
padding: 0;
|
z-index: 10;
|
||||||
box-shadow: 0 4px 12px rgba(11, 74, 142, 0.25);
|
transition: background 0.2s, transform 0.2s;
|
||||||
}
|
}
|
||||||
.search-form .search-submit:hover {
|
.edukarsa-popup-close:hover {
|
||||||
background: var(--primary-color);
|
background: #e11d48;
|
||||||
transform: translateY(-50%) scale(1.05);
|
transform: scale(1.1);
|
||||||
box-shadow: 0 6px 16px rgba(11, 74, 142, 0.35);
|
|
||||||
}
|
}
|
||||||
.search-form .search-submit svg {
|
.edukarsa-popup-media {
|
||||||
|
width: 100%;
|
||||||
|
background: #0f172a;
|
||||||
display: block;
|
display: block;
|
||||||
stroke: #ffffff;
|
line-height: 0;
|
||||||
|
}
|
||||||
|
.edukarsa-popup-media img {
|
||||||
|
width: 100%;
|
||||||
|
height: auto;
|
||||||
|
max-height: 380px;
|
||||||
|
object-fit: contain;
|
||||||
|
display: block;
|
||||||
|
margin: 0 auto;
|
||||||
|
}
|
||||||
|
.edukarsa-popup-img-link {
|
||||||
|
display: block;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
.edukarsa-popup-details {
|
||||||
|
padding: 24px 28px;
|
||||||
|
text-align: center;
|
||||||
|
background: #ffffff;
|
||||||
|
}
|
||||||
|
.edukarsa-popup-badge {
|
||||||
|
display: inline-block;
|
||||||
|
padding: 4px 14px;
|
||||||
|
background: #e0f2fe;
|
||||||
|
color: var(--primary-color);
|
||||||
|
font-size: 11px;
|
||||||
|
font-weight: 800;
|
||||||
|
text-transform: uppercase;
|
||||||
|
letter-spacing: 0.8px;
|
||||||
|
border-radius: 20px;
|
||||||
|
margin-bottom: 10px;
|
||||||
|
}
|
||||||
|
.edukarsa-popup-heading {
|
||||||
|
font-size: 20px;
|
||||||
|
font-weight: 800;
|
||||||
|
color: var(--heading-color);
|
||||||
|
margin: 0 0 10px;
|
||||||
|
line-height: 1.35;
|
||||||
|
}
|
||||||
|
.edukarsa-popup-desc {
|
||||||
|
font-size: 14px;
|
||||||
|
color: var(--text-color);
|
||||||
|
line-height: 1.6;
|
||||||
|
margin: 0 0 20px;
|
||||||
|
}
|
||||||
|
.edukarsa-popup-action {
|
||||||
|
margin-top: 15px;
|
||||||
|
}
|
||||||
|
.edukarsa-popup-btn {
|
||||||
|
display: inline-block;
|
||||||
|
padding: 12px 32px;
|
||||||
|
font-size: 15px;
|
||||||
|
font-weight: 800;
|
||||||
|
border-radius: 50px;
|
||||||
|
box-shadow: 0 6px 18px rgba(11, 74, 142, 0.25);
|
||||||
|
}
|
||||||
|
.edukarsa-popup-btn:hover {
|
||||||
|
transform: translateY(-2px);
|
||||||
|
box-shadow: 0 10px 25px rgba(11, 74, 142, 0.35);
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (max-width: 600px) {
|
||||||
|
.edukarsa-popup-card { max-width: 95%; border-radius: 14px; }
|
||||||
|
.edukarsa-popup-details { padding: 18px 16px; }
|
||||||
|
.edukarsa-popup-heading { font-size: 18px; }
|
||||||
|
.edukarsa-popup-desc { font-size: 13px; }
|
||||||
|
.edukarsa-popup-btn { padding: 10px 24px; font-size: 14px; }
|
||||||
|
.edukarsa-popup-close { top: 10px; right: 10px; width: 32px; height: 32px; font-size: 20px; }
|
||||||
}
|
}
|
||||||
|
|||||||