pixelfed/pixelfed

View on GitHub
resources/assets/sass/landing.scss

Summary

Maintainability
Test Coverage
// Landing Page bundle

@import "fonts";
@import "lib/fontawesome";
@import "lib/inter";
@import "lib/manrope";
@import 'variables';
@import '~bootstrap/scss/bootstrap';
@import 'custom';

body {
    background: #080e2b;
    font-family: 'Manrope', sans-serif;
    color: #fff;
}

.bg-black {
    background-color: #080e2b;
    transition: background-color 0.3s ease;
}

.navbar {
    padding-top: 20px;
    padding-bottom: 20px;

    &-brand {
        display: flex;
        align-items: center;
        gap: 10px;

        span {
            font-weight: bold;
            font-size: 14px;
            display: none;

            @include media-breakpoint-up(sm) {
                display: block;
                font-size: 18px;
            }
        }
    }

    .nav-link {
        &.active {
            font-weight: bold;
        }
    }

    @include media-breakpoint-up(lg) {
        .nav-link {
            margin-right: 1rem !important;
        }
    }
}

.bg-bluegray {
    &-700 {
        background-color: #334155;
    }

    &-800 {
        background-color: #1e293b;
    }

    &-900 {
        background-color: #0f172a;
    }
}

.text-bluegray {
    &-400 {
        color: #94a3b8;
    }
    &-500 {
        color: #64748b;
    }
    &-600 {
        color: #475569;
    }
}

.page-wrapper {
    position: relative;
    padding-top: 3rem;
    padding-bottom: 3rem;
    min-height: 100vh !important;
    background-color: #212529 !important;
    background-image: url("/_landing/bg.jpg");
    background-size: cover !important;
    background-repeat: no-repeat !important;
    background-position: center !important;
}

.container-compact {
    max-width: 600px;
    margin-top: 3rem;
    padding-top: 3rem;
    padding-left: 0.25rem;
    padding-right: 0.25rem;

    @media (min-width: 768px) {
        padding-top: 0 !important;
    }
}

.overflow-hidden {
    overflow: hidden !important;
}

.bg-glass {
    background: rgba(255, 255, 255, 0.05);
    border-radius: 16px;
    box-shadow: 0 4px 30px rgba(0, 0, 0, 0.1);
    backdrop-filter: blur(5px);
    -webkit-backdrop-filter: blur(5px);
    border: 1px solid rgba(255, 255, 255, 0.05);
    margin-bottom: -1px;
}

.text-gradient-primary {
  background: linear-gradient(to right, #6366f1, #8B5CF6, #D946EF);
  -webkit-background-clip: text;
  -webkit-text-fill-color: transparent;
}

.gap-3 {
    gap: 3rem;
}

.btn-primary-alt {
  border: none;
  outline: none;
  color: white;
  position: relative;
  z-index: 1;
  cursor: pointer;
  background: none;
  text-shadow: 3px 3px 10px rgba(0,0,0,.45);
  &:before, &:after {
    position: absolute;
    top: 50%;
    left: 50%;
    border-radius: 10em;
    transform: translateX(-50%) translateY(-50%);
    width: 105%;
    height: 105%;
    content: '';
    z-index: -2;
    background-size: 400% 400%;
    background: linear-gradient(60deg, #f79533, #f37055, #ef4e7b, #a166ab, #5073b8, #1098ad, #07b39b, #6fba82);
  }
  &:before {
    filter: blur(7px);
    transition: all .25s ease;
    animation: pulse 10s infinite ease;
  }
  &:after {
    filter: blur(0.3px);
  }
  &:hover {
    &:before {
      width: 115%;
      height: 115%;
    }
  }
}

.opacity-50 {
    opacity: 50%;
}

.opacity-30 {
    opacity: 30%;
}

.nav-menu {
    border-bottom: 1px solid #334155;
    .nav-link {
        color: #94a3b8;
        position: relative;
        font-size: 12px;

        @media(min-width: 768px) {
            font-size: 16px;
        }

        &.active {
            color: #ffffff;
            font-weight: 600;
        }

        &.active:before,
        &.active:after,
        &.nav-item:hover:before,
        &.nav-item:hover:after {
            content: ' ';
            position: absolute;
            border: solid 10px transparent;
            border-bottom: solid 0px transparent;
            border-width: 10px;
            bottom: -12px;
            left: 50%;
            margin-left: -10px;
            border-color: transparent transparent #334155;
        }

        &.active:after,
        &.nav-item:hover:after {
            bottom: -14px;
            border-color: transparent transparent #0f172a;
        }
    }
}

.footer-component {
    padding: 3rem 1rem 1rem 1rem;

    &-links {
        display: flex;
        flex-direction: column;
        gap: 1rem;
        align-items: center;
        margin-bottom: 3rem;
        font-size: 15px;

        a {
            color: #94a3b8;
            font-weight: 700;
            text-transform: uppercase;
        }

        .spacer {
            display: none;

            @include media-breakpoint-up(md) {
                color: #64748b;
                display: block !important;
            }
        }
    }

    &-attribution {
        display: flex;
        flex-direction: column;
        gap: 0.5rem;
        align-items: center;
        color: #64748b;
        font-size: 13px;

        a {
            color: #64748b;
            font-weight: 700;
        }

        .spacer {
            display: none;

            @include media-breakpoint-up(md) {
                color: #64748b;
                display: block !important;
            }
        }
    }

    @include media-breakpoint-up(md) {
        padding: 3rem 0;

        &-links {
            margin-bottom: 1rem;
            flex-direction: row;
            justify-content: center;
            font-size: 13px;
        }

        &-attribution {
            flex-direction: row;
            justify-content: center;
            font-size: 11.5px;
        }
    }

}

.landing-index-component {
    width: 100%;
    overflow: hidden;

    .logo {
        margin-right: 10px;
    }

    h1 {
        color: var(--light);
        font-size: 4em;
        font-weight: bold;
        margin-bottom: 0;
    }

    p {
        color: var(--light);
    }

    .server-header {
        margin: 0 0 30px 0;

        &-domain {
            text-align: center;
            font-size: 25px;
            font-weight: 700;
        }

        &-attribution {
            font-size: 16px;
            text-align: center;
            color: #94a3b8;
            letter-spacing: 0.6px;

            a {
                color: #ffffff;
                font-weight: 800;
            }
        }
    }

    .server-stats {
        margin: 30px 0;

        .list-group {
            flex-direction: column;
            border-color: #1e293b;

            @media (min-width: 768px) {
                flex-direction: row;

                &-item {
                    border-color: #1e293b;
                    flex-grow: 1;
                    border-top-width: 1px;
                    border-left-width: 0;

                    &:first-child {
                        border-left-width: 1px;
                    }

                    &:last-child {
                        border-top-right-radius: 0.25rem;
                        border-bottom-left-radius: 0;
                    }
                }
            }

            &-item {
                border-color: #1e293b;
            }
        }

        .stat-value {
            font-size: 20px;
            font-weight: 700;
            color: #ffffff;
            margin-bottom: 0;
        }

        .stat-label {
            font-size: 12px;
            font-weight: 700;
            color: #94a3b8;
            margin-bottom: 0;
            text-transform: uppercase;
            letter-spacing: 0.8px;
        }
    }

    .server-admin {
        margin: 30px 0;

        .list-group {
            flex-direction: column;
            border-color: #1e293b;

            @media (min-width: 768px) {
                flex-direction: row;

                &-item {
                    border-color: #1e293b;
                    flex-grow: 1;
                    border-top-width: 1px;
                    border-left-width: 0;

                    &:first-child {
                        border-left-width: 1px;
                    }

                    &:last-child {
                        border-top-right-radius: 0.25rem;
                        border-bottom-left-radius: 0;
                    }
                }
            }

            &-item {
                border-color: #1e293b;
            }
        }

        .item-label {
            color: #94a3b8;
            text-transform: uppercase;
            font-weight: 500;
            letter-spacing: 1px;
        }

        .admin-card {
            text-decoration: none;

            .d-flex {
                gap: 10px;
            }

            .avatar {
                border-radius: 6px;
            }

            .user-info {
                .display-name {
                    color: #94a3b8;
                }

                .username {
                    font-weight: 700;
                }

                .display-name,
                .username {
                    margin-bottom: 0;
                }
            }
        }

        .admin-email {
            color: #ffffff;
            font-size: 15px;
            font-weight: 700;
            text-decoration: none;
        }
    }

    .accordion {
        .btn-block {
            display: flex;
            justify-content: space-between;
            align-items: center;
            text-decoration: none;

            .h5 {
                margin-bottom: 0;
            }

            &:focus {
                box-shadow: none;
            }

            .far {
                color: #cbd5e1;
            }

            .text-white {
                .far {
                    color: #94a3b8;
                }
            }
        }

        .about-text {
            padding: 40px 24px;

            p {
                font-size: 17px;
            }

            p:last-child {
                margin-bottom: 0;
            }
        }

        .list-group-rules {
            .list-group-item {
                display: flex;
                gap: 10px;
                align-items: center;
                border-color: #475569;

                .rule-id {
                    color: #475569;
                    font-size: 20px;
                }

                .rule-text {
                    color: #fff;
                }
            }
        }

        .card-features {
            &-cloud {
                display: flex;
                flex-wrap: wrap;
                justify-content: center;
                gap: 10px;
                padding: 10px 5px;
                margin-bottom: 20px;

                .badge {
                    font-size: 13px;
                    font-weight: 400;
                    padding: 5px 10px;

                    &-success {
                        background: #86efac30;
                    }

                    .far {
                        margin-right: 5px;
                        color: #22c55e;
                    }
                }
            }

            .list-group-features {
                .list-group-item {
                    display: flex;
                    justify-content: space-between;
                    align-items: center;
                    border-color: #475569;

                    .feature-label {
                        font-size: 15px;
                    }

                    .fa-times-circle {
                        color: #f43f5e;
                    }

                    .fa-check-circle {
                        color: #22c55e;
                    }
                }
            }
        }
    }
}

.landing-directory-component {
    .feed-list {
        display: flex;
        flex-direction: column;
        gap: 20px;
    }

    .landing-user-card {
        .display-name {
            a {
                @extend .text-bluegray-400;
                font-size: 12px;
                font-weight: 500;
                text-decoration: none;
            }
        }

        .username {
            margin-bottom: 2px;

            a {
                color: #fff;
                font-size: 18px;
                font-weight: 800;
                text-decoration: none;
            }
        }

        .user-stats {
            display: flex;
            justify-content: space-between;

            &-item {
                @extend .text-bluegray-500;
                font-size: 13px;
                font-weight: 600;
            }
        }

        .user-bio {
            @extend .bg-bluegray-700;
            margin-top: 1rem;
            padding: 15px;
            border-radius: 10px;
        }
    }
}

.landing-explore-component {
    .feed-list {
        display: flex;
        flex-direction: column;
        gap: 20px;

        .landing-post-card {
            a.text-bluegray-400 {
                &:hover {
                    color: #cbd5e1;
                    text-decoration: none;
                }
            }

            a.text-bluegray-500 {
                &:hover {
                    color: #94a3b8;
                    text-decoration: none;
                }
            }

            .read-more-component {
                color: #64748b;
                a {
                    color: #94a3b8;
                    font-weight: 600;
                }
            }
        }

    }
}