/*=========================================================
PKB KOTA BOGOR
Frontend Framework v4.0
Global Style
=========================================================*/

/*=========================================================
GOOGLE FONT
=========================================================*/

@import url('https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700;800;900&display=swap');

/*=========================================================
ROOT VARIABLE
=========================================================*/

:root{

    --primary:#0B6B35;
    --primary-dark:#085128;
    --primary-light:#22C55E;

    --secondary:#F5C542;

    --success:#16A34A;
    --danger:#DC2626;
    --warning:#F59E0B;
    --info:#0EA5E9;

    --white:#FFFFFF;
    --black:#111827;

    --bg:#F8FAFC;
    --bg-soft:#F1F5F9;

    --text:#1E293B;
    --text-light:#64748B;

    --border:#E5E7EB;

    --radius-xs:8px;
    --radius-sm:12px;
    --radius:18px;
    --radius-lg:24px;
    --radius-xl:32px;

    --shadow-sm:
        0 4px 12px rgba(15,23,42,.05);

    --shadow:
        0 15px 45px rgba(15,23,42,.08);

    --shadow-lg:
        0 25px 70px rgba(15,23,42,.12);

    --transition:.35s ease;

}

/*=========================================================
RESET
=========================================================*/

*{

    margin:0;

    padding:0;

    box-sizing:border-box;

}

html{

    scroll-behavior:smooth;

}

body{

    font-family:'Inter',sans-serif;

    background:var(--bg);

    color:var(--text);

    font-size:16px;

    line-height:1.7;

    overflow-x:hidden;

    -webkit-font-smoothing:antialiased;

}

img{

    display:block;

    max-width:100%;

}

a{

    color:inherit;

    text-decoration:none;

    transition:var(--transition);

}

ul,
ol{

    margin:0;

    padding:0;

    list-style:none;

}

button{

    border:none;

    background:none;

    font-family:inherit;

}

input,
textarea,
select{

    font-family:inherit;

    outline:none;

}

table{

    width:100%;

    border-collapse:collapse;

}

/*=========================================================
TYPOGRAPHY
=========================================================*/

h1,
h2,
h3,
h4,
h5,
h6{

    color:var(--black);

    font-weight:800;

    line-height:1.25;

    margin-bottom:15px;

}

h1{

    font-size:60px;

}

h2{

    font-size:44px;

}

h3{

    font-size:32px;

}

h4{

    font-size:24px;

}

h5{

    font-size:20px;

}

h6{

    font-size:18px;

}

p{

    margin-bottom:18px;

    color:var(--text-light);

}

small{

    font-size:14px;

    color:var(--text-light);

}

/*=========================================================
CONTAINER
=========================================================*/

.container-custom{

    width:100%;

    max-width:1280px;

    margin:auto;

    padding-left:20px;

    padding-right:20px;

}

/*=========================================================
SECTION
=========================================================*/

.section{

    position:relative;

    padding:100px 0;

}

.section-header{

    margin-bottom:60px;

}

.section-badge{

    display:inline-flex;

    align-items:center;

    gap:10px;

    padding:10px 18px;

    background:rgba(11,107,53,.08);

    color:var(--primary);

    border-radius:999px;

    font-size:13px;

    font-weight:700;

    text-transform:uppercase;

    letter-spacing:.5px;

    margin-bottom:18px;

}

.section-title{

    font-size:44px;

    font-weight:800;

    margin-bottom:18px;

}

.section-subtitle{

    max-width:760px;

    font-size:18px;

    color:var(--text-light);

    line-height:1.8;

}

/*=========================================================
LAYOUT
=========================================================*/

.row-center{

    align-items:center;

}

.text-center{

    text-align:center;

}

.text-end{

    text-align:right;

}

.bg-white{

    background:#fff;

}

.bg-soft{

    background:var(--bg-soft);

}

.rounded{

    border-radius:var(--radius);

}

.shadow{

    box-shadow:var(--shadow);

}

.shadow-lg{

    box-shadow:var(--shadow-lg);

}

/*=========================================================
GRID
=========================================================*/

.grid-2{

    display:grid;

    grid-template-columns:repeat(2,1fr);

    gap:50px;

}

.grid-3{

    display:grid;

    grid-template-columns:repeat(3,1fr);

    gap:30px;

}

.grid-4{

    display:grid;

    grid-template-columns:repeat(4,1fr);

    gap:24px;

}

.grid-auto{

    display:grid;

    grid-template-columns:repeat(auto-fit,minmax(280px,1fr));

    gap:25px;

}
/*=========================================================
BUTTON FRAMEWORK
=========================================================*/

.btn{

    display:inline-flex;

    align-items:center;

    justify-content:center;

    gap:10px;

    padding:14px 30px;

    border:none;

    border-radius:14px;

    cursor:pointer;

    font-weight:700;

    font-size:15px;

    transition:var(--transition);

    text-decoration:none;

}

.btn i{

    font-size:14px;

}

.btn:hover{

    transform:translateY(-3px);

}

.btn-primary{

    background:var(--primary);

    color:#fff;

    box-shadow:0 15px 35px rgba(11,107,53,.22);

}

.btn-primary:hover{

    background:var(--primary-dark);

    color:#fff;

}

.btn-secondary{

    background:var(--secondary);

    color:#111827;

}

.btn-secondary:hover{

    opacity:.92;

}

.btn-success{

    background:var(--success);

    color:#fff;

}

.btn-danger{

    background:var(--danger);

    color:#fff;

}

.btn-outline{

    border:2px solid var(--primary);

    color:var(--primary);

    background:#fff;

}

.btn-outline:hover{

    background:var(--primary);

    color:#fff;

}

.btn-light{

    background:#fff;

    color:var(--primary);

}

/*=========================================================
CARD
=========================================================*/

.card-modern{

    background:#fff;

    border-radius:var(--radius);

    padding:30px;

    box-shadow:var(--shadow);

    transition:var(--transition);

    height:100%;

}

.card-modern:hover{

    transform:translateY(-8px);

    box-shadow:var(--shadow-lg);

}

.card-header{

    margin-bottom:20px;

}

.card-title{

    font-size:22px;

    font-weight:700;

    margin-bottom:10px;

}

.card-body{

    color:var(--text-light);

}

.card-footer{

    margin-top:25px;

}

/*=========================================================
BADGE
=========================================================*/

.badge-modern{

    display:inline-flex;

    align-items:center;

    gap:8px;

    padding:8px 16px;

    border-radius:999px;

    font-size:13px;

    font-weight:700;

}

.badge-primary{

    background:rgba(11,107,53,.10);

    color:var(--primary);

}

.badge-success{

    background:rgba(22,163,74,.12);

    color:var(--success);

}

.badge-warning{

    background:rgba(245,158,11,.15);

    color:#92400E;

}

.badge-danger{

    background:rgba(220,38,38,.12);

    color:var(--danger);

}

/*=========================================================
FORM
=========================================================*/

.form-control{

    width:100%;

    height:52px;

    padding:0 18px;

    border:1px solid var(--border);

    border-radius:12px;

    background:#fff;

    transition:.3s;

}

textarea.form-control{

    min-height:140px;

    padding:15px 18px;

    resize:vertical;

}

.form-control:focus{

    border-color:var(--primary);

    box-shadow:0 0 0 4px rgba(11,107,53,.08);

}

label{

    display:block;

    margin-bottom:8px;

    font-weight:600;

    color:#374151;

}

/*=========================================================
TABLE
=========================================================*/

.table-modern{

    width:100%;

    border-collapse:collapse;

    background:#fff;

}

.table-modern th{

    background:#F8FAFC;

    padding:15px;

    text-align:left;

    font-weight:700;

}

.table-modern td{

    padding:15px;

    border-top:1px solid #eee;

}

/*=========================================================
ALERT
=========================================================*/

.alert{

    padding:18px 22px;

    border-radius:14px;

    margin-bottom:20px;

}

.alert-success{

    background:#ECFDF5;

    color:#166534;

}

.alert-danger{

    background:#FEF2F2;

    color:#991B1B;

}

.alert-warning{

    background:#FFFBEB;

    color:#92400E;

}

.alert-info{

    background:#F0F9FF;

    color:#0C4A6E;

}

/*=========================================================
PAGINATION
=========================================================*/

.pagination{

    display:flex;

    gap:10px;

    justify-content:center;

    margin-top:40px;

}

.pagination a{

    width:42px;

    height:42px;

    display:flex;

    align-items:center;

    justify-content:center;

    border-radius:12px;

    background:#fff;

    box-shadow:var(--shadow-sm);

}

.pagination a.active{

    background:var(--primary);

    color:#fff;

}

/*=========================================================
UTILITY
=========================================================*/

.w-100{

    width:100%;

}

.h-100{

    height:100%;

}

.d-flex{

    display:flex;

}

.align-center{

    align-items:center;

}

.justify-between{

    justify-content:space-between;

}

.justify-center{

    justify-content:center;

}

.gap-10{

    gap:10px;

}

.gap-20{

    gap:20px;

}

.mt-20{

    margin-top:20px;

}

.mt-30{

    margin-top:30px;

}

.mt-50{

    margin-top:50px;

}

.mb-20{

    margin-bottom:20px;

}

.mb-40{

    margin-bottom:40px;

}

.p-20{

    padding:20px;

}

.p-30{

    padding:30px;

}

.text-primary{

    color:var(--primary);

}

.text-muted{

    color:var(--text-light);

}

.bg-primary{

    background:var(--primary);

    color:#fff;

}

.bg-white{

    background:#fff;

}
/*=========================================================
ANIMATION
=========================================================*/

.fade-in{

    animation:fadeIn .8s ease;

}

.fade-up{

    opacity:0;

    transform:translateY(40px);

    transition:.8s;

}

.fade-up.show{

    opacity:1;

    transform:none;

}

.zoom-in{

    animation:zoomIn .6s ease;

}

.slide-left{

    animation:slideLeft .7s ease;

}

.slide-right{

    animation:slideRight .7s ease;

}

.float{

    animation:float 5s ease-in-out infinite;

}

.pulse{

    animation:pulse 2s infinite;

}

.rotate{

    animation:rotate 12s linear infinite;

}

@keyframes fadeIn{

    from{

        opacity:0;

    }

    to{

        opacity:1;

    }

}

@keyframes zoomIn{

    from{

        opacity:0;

        transform:scale(.9);

    }

    to{

        opacity:1;

        transform:none;

    }

}

@keyframes slideLeft{

    from{

        opacity:0;

        transform:translateX(-40px);

    }

    to{

        opacity:1;

        transform:none;

    }

}

@keyframes slideRight{

    from{

        opacity:0;

        transform:translateX(40px);

    }

    to{

        opacity:1;

        transform:none;

    }

}

@keyframes float{

    0%{

        transform:translateY(0);

    }

    50%{

        transform:translateY(-12px);

    }

    100%{

        transform:translateY(0);

    }

}

@keyframes pulse{

    0%{

        transform:scale(1);

    }

    50%{

        transform:scale(1.05);

    }

    100%{

        transform:scale(1);

    }

}

@keyframes rotate{

    from{

        transform:rotate(0deg);

    }

    to{

        transform:rotate(360deg);

    }

}

/*=========================================================
GLASS
=========================================================*/

.glass{

    background:rgba(255,255,255,.12);

    backdrop-filter:blur(18px);

    -webkit-backdrop-filter:blur(18px);

    border:1px solid rgba(255,255,255,.18);

    border-radius:var(--radius);

}

/*=========================================================
IMAGE
=========================================================*/

.img-cover{

    width:100%;

    height:100%;

    object-fit:cover;

}

.img-rounded{

    border-radius:var(--radius);

}

.img-circle{

    border-radius:50%;

}

/*=========================================================
LOADER
=========================================================*/

.page-loader{

    position:fixed;

    inset:0;

    background:#fff;

    display:flex;

    align-items:center;

    justify-content:center;

    z-index:99999;

}

.loader-spinner{

    width:52px;

    height:52px;

    border:5px solid #E5E7EB;

    border-top-color:var(--primary);

    border-radius:50%;

    animation:rotate 1s linear infinite;

}

/*=========================================================
BACK TO TOP
=========================================================*/

.back-to-top{

    position:fixed;

    right:25px;

    bottom:25px;

    width:50px;

    height:50px;

    border-radius:50%;

    background:var(--primary);

    color:#fff;

    display:flex;

    align-items:center;

    justify-content:center;

    box-shadow:var(--shadow);

    opacity:0;

    visibility:hidden;

    transition:.3s;

    z-index:999;

}

.back-to-top.show{

    opacity:1;

    visibility:visible;

}

.back-to-top:hover{

    transform:translateY(-5px);

}

/*=========================================================
GALLERY MODULE
=========================================================*/

/* Gallery Card */

.gallery-card{

    background:#fff;

    border-radius:var(--radius);

    overflow:hidden;

    box-shadow:var(--shadow-sm);

    transition:var(--transition);

    height:100%;

}

.gallery-card:hover{

    transform:translateY(-8px);

    box-shadow:var(--shadow-lg);

}

/* Thumbnail */

.gallery-thumb{

    position:relative;

    overflow:hidden;

}

.gallery-thumb img{

    width:100%;

    aspect-ratio:4/3;

    object-fit:cover;

    transition:.45s;

}

.gallery-card:hover .gallery-thumb img{

    transform:scale(1.08);

}

/* Badge */

.gallery-badge{

    position:absolute;

    top:15px;

    right:15px;

    z-index:10;

}

/* Body */

.gallery-body{

    padding:22px;

}

.gallery-title{

    font-size:20px;

    font-weight:700;

    margin-bottom:12px;

    line-height:1.5;

}

.gallery-title a{

    color:var(--black);

}

.gallery-title a:hover{

    color:var(--primary);

}

/* Meta */

.gallery-meta{

    display:flex;

    flex-wrap:wrap;

    gap:14px;

    margin-bottom:15px;

    color:var(--text-light);

    font-size:14px;

}

.gallery-meta i{

    color:var(--primary);

}

/* Footer */

.gallery-footer{

    padding:20px;

    border-top:1px solid var(--border);

}

/*=========================================================
SCROLLBAR
=========================================================*/

::-webkit-scrollbar{

    width:10px;

}

::-webkit-scrollbar-track{

    background:#F3F4F6;

}

::-webkit-scrollbar-thumb{

    background:var(--primary);

    border-radius:30px;

}

::-webkit-scrollbar-thumb:hover{

    background:var(--primary-dark);

}

/*=========================================================
SELECTION
=========================================================*/

::selection{

    background:var(--primary);

    color:#fff;

}

/*=========================================================
RESPONSIVE UTILITIES
=========================================================*/

@media (max-width:1200px){

.grid-4{

    grid-template-columns:repeat(2,1fr);

}

h1{

    font-size:52px;

}

}

@media (max-width:992px){

.grid-2,

.grid-3,

.grid-4{

    grid-template-columns:1fr;

}

.section{

    padding:80px 0;

}

.section-title{

    font-size:36px;

}

.container-custom{

    padding-left:18px;

    padding-right:18px;

}

}

@media (max-width:768px){

body{

    font-size:15px;

}

.section{

    padding:70px 0;

}

.section-title{

    font-size:30px;

}

.section-subtitle{

    font-size:16px;

}

.btn{

    width:100%;

}

.card-modern{

    padding:24px;

}

}

@media (max-width:576px){

.container-custom{

    padding-left:15px;

    padding-right:15px;

}

.section-title{

    font-size:26px;

}

h1{

    font-size:34px;

}

h2{

    font-size:28px;

}

h3{

    font-size:24px;

}

}

/*=========================================================
PRINT
=========================================================*/

@media print{

body{

    background:#fff;

    color:#000;

}

.btn,

.topbar,

.navbar-main,

.back-to-top,

.page-loader{

    display:none!important;

}

}
.page-loader{

position:fixed;

inset:0;

background:#fff;

display:flex;

align-items:center;

justify-content:center;

z-index:999999;

transition:.4s;

}

.page-loader.loaded{

opacity:0;

visibility:hidden;

}

.loader-spinner{

width:55px;

height:55px;

border-radius:50%;

border:4px solid #eee;

border-top-color:var(--primary);

animation:spin .8s linear infinite;

}

@keyframes spin{

100%{

transform:rotate(360deg);

}

}
/* Gallery Hero */

.gallery-hero{

    padding:70px 0;

    background:#fff;

    border-radius:var(--radius-lg);

    margin-bottom:40px;

}

.gallery-filter{

    background:#fff;

    padding:25px;

    border-radius:var(--radius);

    box-shadow:var(--shadow-sm);

    margin-bottom:35px;

}