digitalfabrik/integreat-cms

View on GitHub
integreat_cms/static/src/css/style.scss

Summary

Maintainability
Test Coverage
@use "sass:color";

// Country flags - define these before tailwind to make it possible to override
$fp-prepend: true;
$fp-enable-1x1: false;
$fp-4x3-path: "flagpack-dart-sass/flags/4x3/";
@import "flagpack-dart-sass/src/flagpack.scss";

@import "tailwindcss/base";
@import "tailwindcss/components";
@import "tailwindcss/utilities";

@layer utilities {
    // Tailwind class: "font-default"
    @import "../fonts/raleway/raleway.css";
    // Tailwind class: "font-content"
    @import "../fonts/open-sans/open-sans.css";
    // Tailwind class: "font-content-rtl"
    @import "../fonts/lateef/lateef.css";
    // Tailwind class: "font-content-sc"
    @import "../fonts/noto-sans-sc/noto-sans-sc.css";
    // Tailwind class: "font-content-sc"
    @import "../fonts/noto-sans-ethiopic/noto-sans-ethiopic.css";
    // Tailwind class: "font-content-ka"
    @import "../fonts/noto-sans-georgian/noto-sans-georgian.css";
}

@import "./upload_form.css";

$list-bg-color: white;
$list-border-color: lightgray;
$hover-bg-color: color.adjust($list-border-color, $lightness: -20%);
$active-bg-color: color.adjust($list-border-color, $lightness: -10%);

body,
html {
    @apply h-full;
}

a:hover {
    cursor: pointer;
}

header {
    #region-selector:hover {
        #region-list {
            @apply block;
        }
    }
    #user-info:hover {
        #user-menu {
            @apply block;
        }
    }
    svg {
        @apply pr-1;
    }
}

nav#primary-navigation {
    &.testing {
        @apply top-6;
        height: calc(100% - 24px);
        #menu {
            max-height: calc(100vh - 78px);
        }
    }
    &.h-full {
        #menu {
            max-height: calc(100vh - 56px);
        }
    }
    #menu {
        a {
            @apply relative block p-3 pl-6;
        }
        svg {
            @apply pr-1;
        }
        &.integreat-branding {
            a {
                @apply hover:text-gray-600 hover:bg-[#fbda16];
            }
            a.active,
            .active > a {
                @apply text-gray-600 bg-[#fbda16];
            }
        }
        &.malte-branding {
            a {
                @apply hover:text-white hover:bg-[#f73429];
            }
            a.active,
            .active > a {
                @apply text-white bg-[#f73429];
            }
        }
        &.aschaffenburg-branding {
            a {
                @apply hover:text-white hover:bg-[#4d7679];
            }
            a.active,
            .active > a {
                @apply text-white bg-[#4d7679];
            }
        }
        &.netzwerk-obdach-branding {
            a {
                @apply hover:text-white hover:bg-[#e55129];
            }
            a.active,
            .active > a {
                @apply text-white bg-[#e55129];
            }
        }
    }
}

i[icon-name] {
    width: 24px;
    height: 24px;
    display: inline-block;
    vertical-align: middle;
}

h1.heading {
    @apply text-3xl mb-2;
}

/***********
 * BUTTONS *
 ***********/

button,
a,
input[type="submit"] {
    // Normal buttons
    &.btn {
        @apply font-bold rounded inline-block bg-blue-500 text-white py-3 px-4;
        svg {
            @apply pr-1;
        }
        &.btn-ghost {
            @apply bg-blue-100 text-blue-500;
            &:hover {
                @apply bg-blue-200;
            }
        }
        &.btn-outline {
            @apply border-2 border-blue-500 text-blue-700 bg-white;
            &:hover {
                @apply bg-blue-100;
            }
        }
        // Pseudo-classes
        &:hover {
            @apply bg-blue-600;
        }
        &:focus {
            @apply outline-none;
        }
        &:disabled,
        &[disabled] {
            @apply bg-gray-400 cursor-not-allowed;
        }
        // Different types of buttons
        &.btn-small {
            @apply py-2 px-3;
        }
        &.btn-red {
            @apply bg-red-500;
            &:hover {
                @apply bg-red-600;
            }
        }
        // Override base styles
        &.hidden {
            display: none;
        }
    }
    // Icon buttons
    &.btn-icon {
        @apply text-gray-800;
        // Pseudo-classes
        &:hover {
            @apply text-blue-500;
        }
        &:disabled,
        &[disabled] {
            @apply text-gray-400 cursor-not-allowed;
        }
    }
}

/*********
 * FORMS *
 *********/

[type="text"],
[type="email"],
[type="url"],
[type="password"],
[type="number"],
[type="date"],
[type="datetime-local"],
[type="month"],
[type="search"],
[type="tel"],
[type="time"],
[type="week"],
[multiple],
textarea,
select,
.slug-field {
    @apply w-full rounded text-xl text-gray-800 bg-gray-200 border-gray-200 border-2;
    &:focus {
        @apply bg-white border-blue-500 ring-blue-500 #{!important};
    }
    &.border-red-500 {
        border-color: rgb(239, 68, 68);
    }
    &.rounded-r-none {
        border-top-right-radius: 0;
        border-bottom-right-radius: 0;
    }
    &:disabled {
        @apply text-gray-500 pointer-events-none cursor-not-allowed;
    }
}

// All of the above except "select" and "multiple" which are read-only even when they can be edited
[type="text"],
[type="email"],
[type="url"],
[type="password"],
[type="number"],
[type="date"],
[type="datetime-local"],
[type="month"],
[type="search"],
[type="tel"],
[type="time"],
[type="week"],
textarea {
    &:read-only {
        @apply text-gray-500 pointer-events-none cursor-not-allowed;
    }
}

.slug-field {
    @apply flex px-3 py-2 whitespace-nowrap;
    overflow: auto;
    &:focus-within {
        @apply bg-white border-blue-500 ring-1 ring-blue-500 outline-none;
    }
    > [type="text"] {
        @apply flex-grow p-0 border-none;
        width: fit-content;
        &:focus {
            box-shadow: none;
        }
    }
    > label {
        @apply font-normal cursor-auto m-0;
        opacity: 0.66;
    }
    &.hidden {
        display: none;
    }
}

[type="checkbox"],
[type="radio"] {
    @apply rounded text-blue-500 mr-2 align-text-top;

    &:disabled,
    &.fake-disable {
        @apply bg-gray-200 border-gray-200 pointer-events-none;
        &:checked {
            @apply bg-gray-400 border-gray-400;
        }
    }
}

label {
    @apply block my-2 text-lg font-bold text-gray-800 cursor-pointer;
}

label.secondary,
li > label {
    @apply text-base;
}

label.my-0 {
    margin-top: 0;
    margin-bottom: 0;
}

label:not([for]) {
    @apply cursor-auto;
}

[type="checkbox"] + label,
[type="radio"] + label {
    @apply inline-block;
}

.help-text {
    @apply mb-2 text-gray-600;
}

::-ms-clear {
    display: none;
}

::-webkit-search-decoration,
::-webkit-search-cancel-button,
::-webkit-search-results-button,
::-webkit-search-results-decoration {
    display: none;
}

.table-listing {
    overflow-x: auto;

    svg {
        width: 18px;
        height: 18px;
    }

    td.rating {
        svg {
            width: 24px;
            height: 24px;
        }
    }

    table {
        tr {
            &.level-2 {
                > td.hierarchy {
                    padding-left: 22px;
                }
            }

            &.level-3 {
                > td.hierarchy {
                    padding-left: 44px;
                }
            }

            &.level-4 {
                > td.hierarchy {
                    padding-left: 66px;
                }
            }

            &.level-5 {
                > td.hierarchy {
                    padding-left: 88px;
                }
            }

            &.level-6 {
                > td.hierarchy {
                    padding-left: 110px;
                }
            }

            td.min,
            th.min {
                width: 1%;
                white-space: nowrap;
            }
        }
    }
}

.show-n-rows tbody tr:nth-child(n + 11) {
    display: none;
}

#page_order_table .table-listing {
    table {
        tr {
            &:not(.drop-between) td {
                height: 38px;
            }
            td.hierarchy {
                > span {
                    svg {
                        left: 0.5rem;
                    }
                }
            }
        }
    }
}

#language-switcher:hover {
    #language-switcher-list {
        @apply block;
    }
    #language-switcher-current {
        @apply rounded-b-none;
    }
    #language-switcher-chevron {
        @apply hidden;
    }
}

#language-switcher-current li a {
    @apply px-3 py-[calc(0.75rem+2px)] bg-water-500 rounded-t hover:bg-white hover:text-blue-50;
}

#language-switcher-list {
    .language-name {
        @apply px-2;
    }

    li {
        @apply mr-0;
        a {
            @apply px-3 py-2 flex bg-white whitespace-nowrap hover:bg-water-500 rounded-none;
        }
    }
}

.password_toggle {
    .eye-icon {
        width: 42px;
        height: 42px;
        top: 2px;
        right: 5px;
        padding: 10px;
        cursor: pointer;
        svg {
            color: #4c5e70;
            width: 22px;
            height: 22px;
        }
    }
}

.lang-grid {
    > a {
        text-align: center;
        width: 18.67px;
        display: inline-block;
        margin-right: 3.5px;
    }
}

.pagination a:hover {
    background-color: #fbda16;
}

.password_reset_errors ul {
    padding: 0;
    list-style: none;
    li {
        margin-bottom: 8px;
        &:last-child {
            margin-bottom: 0;
        }
    }
}

.checkbox-error + label {
    @apply text-red-500;
}

.entity-lang-list {
    table {
        tr {
            td {
                &:last-child {
                    width: 30px;
                    svg {
                        position: absolute;
                        top: 50%;
                        right: 0.5rem;
                        width: 16px;
                        height: 16px;
                        margin-top: -8px;
                    }
                }
            }
            &:nth-child(odd) {
                background-color: #f8fafc;
            }
            &:hover {
                background-color: #f1f5f8;
                a {
                    color: #3d4852;
                }
            }
        }
    }
}

#popup-overlay {
    z-index: 3090;
}

#confirmation-dialog {
    margin: 0 auto;
    z-index: 3100;
}

#chat-history a {
    color: #4299e1;
    &:hover {
        color: #2b6cb0;
    }
}

datalist {
    margin-top: -23px;
}

datalist option {
    background-color: #e2e8f0;
    border-radius: 50%;
    padding: 3px 8px;
    font-weight: bolder;
}

.timeline-item {
    cursor: pointer;
    background: #e2e8f0;
}

.timeline-item.active {
    background: #4299e1 !important;
    color: white !important;
}

.revision-tooltip {
    background: #4299e1;
}

.version-history-control.enabled {
    cursor: pointer !important;
}

.version-history-control.disabled {
    color: #b8b6b6;
    cursor: default !important;
}

.timeline-item {
    position: relative;
    z-index: 10;
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 0 16px;
}

.timeline-item::before {
    content: "";
    position: absolute;
    left: 100%;
    top: 50%;
    height: 4px;
    background: #e2e8f0;
    transform: translateX(0%) translateY(-50%);
    z-index: -1;
}

.timeline-item:last-child::before {
    width: 0 !important;
}

.timeline-item::before {
    width: calc(100% + 32px);
}

#version-history {
    overflow-x: scroll; /* Allow scrolling */
    -ms-overflow-style: none; /* Hide scrollbar for Internet Explorer and Edge */
    scrollbar-width: none; /* Hide scrollbar for Firefox */
}

#version-history::-webkit-scrollbar {
    display: none; /* Hide scrollbar for Chrome, Safari, and Opera */
}

/* Page revision slider info box */
#revision-info {
    background: #4299e1;
    color: white;
    padding: 4px 12px;
    position: absolute;
    top: 35px;
    border-radius: 4px;
    left: 50%;
    transform: translateX(-50%);
}

/* Page Diff */
.revision-diff,
.xliff-diff-preview-rendered {
    h1 {
        @apply font-bold mb-2 text-2xl;
    }
    h2 {
        @apply text-xl;
    }
    h3 {
        @apply text-lg;
    }
    ins {
        @apply bg-green-300 no-underline;
    }
    del {
        @apply bg-red-300;
    }
}

/* classes for tree view drag and drop divs */
.drop-on {
    border-width: 2px !important;
    &.drop-allow {
        border-color: #3490dc;
    }
    &.drop-disallow {
        border-color: #cc3333;
    }
}
.drop-between {
    div {
        height: 2px;
        width: calc(100% - 5px);
        margin-left: 5px;
    }
    &.drop-allow div {
        background-color: #3490dc;
    }
    &.drop-disallow div {
        background-color: #cc3333;
    }
    span {
        position: relative;
        top: -3px;
        height: 8px;
        width: 8px;
        border-radius: 50%;
        display: block;
    }
    &.drop-allow span {
        background-color: #3490dc;
    }
    &.drop-disallow span {
        background-color: #cc3333;
    }
}

/* styling for pagination links */
.pagination {
    display: flex;
    margin-top: 0.5rem;
    align-items: center;
    justify-content: space-between;
    .step-links {
        display: flex;
        a {
            display: inline-block;
            width: 40px;
            text-align: center;
            line-height: 25px;
            border: 1px solid $list-border-color;
            border-radius: 10%;
            box-shadow: 1px 1px $list-border-color;
            padding: 0.25rem;
            margin: 0.125rem;
            background-color: $list-bg-color;
            &.active {
                background-color: $active-bg-color;
            }
            &:hover {
                background-color: $hover-bg-color;
            }
        }
    }
}

/* Special class for truncated table cells that can be expanded */
.table-cell-truncate {
    @apply flex flex-nowrap items-center;

    span {
        @apply overflow-hidden overflow-ellipsis whitespace-nowrap;
    }

    .toggle-table-cell {
        @apply hover:scale-125 cursor-pointer inline-flex;
    }

    .less {
        @apply hidden;
    }

    .more {
        @apply inline-flex;
    }

    &.active {
        span {
            @apply break-all whitespace-pre-line overflow-visible;
        }

        .less {
            @apply inline-flex;
        }

        .more {
            @apply hidden;
        }
    }
}

#hix-bar {
    @apply h-full bg-gray-200 rounded;
    width: 100%;
    box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.2);
}

#hix-bar-fill {
    @apply rounded;
    display: block;
    transition: width 500ms ease-in-out;
}

#hix-value {
    @apply p-3 text-lg font-bold text-gray-800;
    text-align: left;
    white-space: nowrap;
}