css

/* =================================== GOOGLE FONT & RESET =================================== */
* {
    margin: 0;
    padding: 0;
    box-sizing: border-box;
    font-family: 'Poppins', sans-serif;
}

html {
    scroll-behavior: smooth;
}

body {
    background: #050505;
    color: #fff;
    overflow-x: hidden;
    min-height: 100vh;
}

/* =================================== LOADER =================================== */
#loader {
    position: fixed;
    inset: 0;
    background: #050505;
    display: flex;
    justify-content: center;
    align-items: center;
    z-index: 99999;
}

.spinner {
    width: 70px;
    height: 70px;
    border-radius: 50%;
    border: 6px solid rgba(255, 255, 255, .08);
    border-top: 6px solid #00eaff;
    border-right: 6px solid #c026ff;
    animation: spin 1s linear infinite;
}

@keyframes spin {
    to {
        transform: rotate(360deg);
    }
}

/* =================================== BACKGROUND =================================== */
.bg1,
.bg2 {
    position: fixed;
    border-radius: 50%;
    filter: blur(140px);
    opacity: .25;
    z-index: -1;
}

.bg1 {
    width: 500px;
    height: 500px;
    background: #8b5cf6;
    top: -120px;
    left: -120px;
}

.bg2 {
    width: 450px;
    height: 450px;
    background: #00eaff;
    right: -120px;
    bottom: -120px;
}

/* =================================== HEADER =================================== */
header {
    padding: 70px 20px 40px;
    text-align: center;
}

header h1 {
    font-size: 4rem;
    font-weight: 800;
    letter-spacing: 8px;
    background: linear-gradient(90deg, #00eaff, #9d4edd, #ff2d95);
    -webkit-background-clip: text;
    color: transparent;
    text-shadow: 0 0 15px rgba(0, 234, 255, .35);
}

header p {
    margin-top: 18px;
    color: #cfcfcf;
    font-size: 18px;
}

/* =================================== SEARCH =================================== */
.search-section {
    display: flex;
    justify-content: center;
    padding: 20px;
}

.search-box {
    width: 700px;
    max-width: 92%;
    display: flex;
    align-items: center;
    gap: 15px;
    padding: 18px 24px;
    border-radius: 60px;
    background: rgba(255, 255, 255, .06);
    border: 1px solid rgba(255, 255, 255, .08);
    backdrop-filter: blur(18px);
    transition: .35s;
}

.search-box:hover {
    border-color: #00eaff;
    box-shadow: 0 0 25px rgba(0, 234, 255, .35);
}

.search-box i {
    color: #00eaff;
    font-size: 18px;
}

.search-box input {
    flex: 1;
    background: none;
    border: none;
    outline: none;
    color: white;
    font-size: 16px;
}

.search-box input::placeholder {
    color: #9f9f9f;
}

/* =================================== CATEGORY BUTTONS =================================== */
.categories {
    width: 90%;
    margin: 35px auto;
    display: flex;
    justify-content: center;
    flex-wrap: wrap;
    gap: 15px;
}

.categories button {
    padding: 12px 24px;
    border: none;
    border-radius: 40px;
    background: rgba(255, 255, 255, .06);
    color: white;
    cursor: pointer;
    transition: .35s;
    border: 1px solid rgba(255, 255, 255, .08);
}

.categories button:hover {
    transform: translateY(-4px);
    border-color: #00eaff;
    box-shadow: 0 0 18px rgba(0, 234, 255, .35);
}

.categories button.active {
    background: linear-gradient(90deg, #00eaff, #9d4edd);
    color: white;
}
/* ===================================
   GALLERY
=================================== */

#gallery{

    width:92%;

    max-width:1600px;

    margin:40px auto;

    display:grid;

    grid-template-columns:
    repeat(auto-fill,minmax(280px,1fr));

    gap:25px;

    align-items:start;

}

/* ===================================
   IMAGE CARD
=================================== */

.card{

    position:relative;

    overflow:hidden;

    border-radius:24px;

    cursor:pointer;

    background:rgba(255,255,255,.05);

    backdrop-filter:blur(18px);

    border:1px solid rgba(255,255,255,.08);

    transition:.45s;

    animation:fadeUp .8s ease;

}

.card:hover{

    transform:
    translateY(-10px)
    scale(1.02);

    border-color:#00eaff;

    box-shadow:

    0 0 18px rgba(0,234,255,.25),

    0 0 40px rgba(157,78,221,.20);

}

/* ===================================
   IMAGE
=================================== */

.card img{

    width:100%;

    height:420px;

    object-fit:cover;

    display:block;

    transition:.6s;

}

.card:hover img{

    transform:scale(1.08);

}

/* ===================================
   OVERLAY
=================================== */

.card::before{

    content:"";

    position:absolute;

    inset:0;

    background:

    linear-gradient(

    to top,

    rgba(0,0,0,.85),

    transparent 60%);

    opacity:0;

    transition:.4s;

}

.card:hover::before{

    opacity:1;

}

/* ===================================
   IMAGE INFO
=================================== */

.card-info{

    position:absolute;

    left:20px;

    right:20px;

    bottom:20px;

    display:flex;

    justify-content:space-between;

    align-items:center;

    opacity:0;

    transform:translateY(20px);

    transition:.35s;

}

.card:hover .card-info{

    opacity:1;

    transform:translateY(0);

}

.card-info h3{

    font-size:20px;

    font-weight:600;

    color:white;

}

.card-info span{

    padding:6px 14px;

    border-radius:30px;

    font-size:13px;

    background:

    rgba(255,255,255,.12);

    backdrop-filter:blur(12px);

    border:

    1px solid rgba(255,255,255,.15);

}

/* ===================================
   NEON BORDER
=================================== */

.card::after{

    content:"";

    position:absolute;

    inset:0;

    border-radius:24px;

    padding:1px;

    background:

    linear-gradient(

    135deg,

    #00eaff,

    transparent,

    #9d4edd);

    -webkit-mask:

    linear-gradient(#fff 0 0)

    content-box,

    linear-gradient(#fff 0 0);

    -webkit-mask-composite:xor;

    opacity:0;

    transition:.4s;

}

.card:hover::after{

    opacity:1;

}

/* ===================================
   LOAD MORE
=================================== */

#loadingMore{

    width:100%;

    text-align:center;

    padding:40px;

    color:#cfcfcf;

    font-size:18px;

    letter-spacing:2px;

    display:none;

}

/* ===================================
   FADE ANIMATION
=================================== */

@keyframes fadeUp{

    from{

        opacity:0;

        transform:

        translateY(40px);

    }

    to{

        opacity:1;

        transform:

        translateY(0);

    }

}
/* ===================================
   LIGHTBOX
=================================== */

#lightbox{

    position:fixed;

    inset:0;

    background:rgba(0,0,0,.95);

    backdrop-filter:blur(18px);

    display:flex;

    justify-content:center;

    align-items:center;

    opacity:0;

    visibility:hidden;

    transition:.4s;

    z-index:9999;

}

#lightbox.active{

    opacity:1;

    visibility:visible;

}

/* ===================================
   LIGHTBOX IMAGE
=================================== */

#lightboxImage{

    width:85%;

    max-width:1200px;

    max-height:82vh;

    object-fit:contain;

    border-radius:22px;

    border:2px solid rgba(255,255,255,.08);

    box-shadow:

    0 0 35px rgba(0,234,255,.25),

    0 0 70px rgba(157,78,221,.18);

    animation:zoomImage .4s ease;

}

@keyframes zoomImage{

    from{

        opacity:0;

        transform:scale(.85);

    }

    to{

        opacity:1;

        transform:scale(1);

    }

}

/* ===================================
   CLOSE BUTTON
=================================== */

#close{

    position:absolute;

    top:25px;

    right:40px;

    font-size:50px;

    color:white;

    cursor:pointer;

    transition:.35s;

    user-select:none;

}

#close:hover{

    color:#00eaff;

    transform:rotate(180deg);

}

/* ===================================
   PREVIOUS / NEXT BUTTONS
=================================== */

#prev,
#next{

    position:absolute;

    top:50%;

    transform:translateY(-50%);

    width:70px;

    height:70px;

    border-radius:50%;

    border:none;

    cursor:pointer;

    background:rgba(255,255,255,.08);

    backdrop-filter:blur(18px);

    color:white;

    font-size:22px;

    transition:.35s;

}

#prev{

    left:35px;

}

#next{

    right:35px;

}

#prev:hover,
#next:hover{

    background:#00eaff;

    color:black;

    transform:

    translateY(-50%)

    scale(1.1);

    box-shadow:

    0 0 25px rgba(0,234,255,.5);

}

/* ===================================
   IMAGE COUNTER
=================================== */

#counter{

    position:absolute;

    bottom:30px;

    left:50%;

    transform:translateX(-50%);

    padding:10px 24px;

    border-radius:40px;

    background:rgba(255,255,255,.08);

    border:1px solid rgba(255,255,255,.1);

    backdrop-filter:blur(18px);

    color:white;

    font-size:15px;

    letter-spacing:1px;

}

/* ===================================
   FOOTER
=================================== */

footer{

    margin-top:70px;

    padding:30px;

    text-align:center;

    color:#a9a9a9;

    border-top:1px solid rgba(255,255,255,.08);

}

footer p{

    letter-spacing:1px;

}

/* ===================================
   CUSTOM SCROLLBAR
=================================== */

::-webkit-scrollbar{

    width:10px;

}

::-webkit-scrollbar-track{

    background:#050505;

}

::-webkit-scrollbar-thumb{

    background:

    linear-gradient(

    #00eaff,

    #9d4edd);

    border-radius:30px;

}

::-webkit-scrollbar-thumb:hover{

    background:

    linear-gradient(

    #00ffff,

    #ff00ff);

}

/* ===================================
   RESPONSIVE
=================================== */

@media(max-width:1200px){

    #gallery{

        grid-template-columns:

        repeat(auto-fill,minmax(260px,1fr));

    }

}

@media(max-width:768px){

    header h1{

        font-size:2.8rem;

        letter-spacing:4px;

    }

    header p{

        font-size:15px;

    }

    #gallery{

        grid-template-columns:repeat(2,1fr);

        gap:18px;

    }

    .card img{

        height:300px;

    }

    #prev,
    #next{

        width:55px;

        height:55px;

    }

}

@media(max-width:500px){

    #gallery{

        grid-template-columns:1fr;

    }

    .search-box{

        padding:15px 20px;

    }

    .categories{

        gap:10px;

    }

    .categories button{

        font-size:13px;

        padding:10px 16px;

    }

    #lightboxImage{

        width:95%;

    }

    #prev{

        left:10px;

    }

    #next{

        right:10px;

    }

    #close{

        right:20px;

        top:20px;

    }

}