html:not(.hy-reset) {
    font-size: var(--hy-font-size);
}

body:not(.hy-reset) {
    background-color: var(--hy-body-bg-color);
    padding: 0;
    margin: 0;
    font-family: var(--hy-font-family);
    font-size: var(--hy-font-size);
    color: var(--hy-font-color-contrast);
    -webkit-font-smoothing: antialiased;
    -moz-osx-font-smoothing: grayscale;
}

* {
    box-sizing: border-box;
    outline: none;
    -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
}

a:not(.hy-reset) {
    align-content: center;
    color: var(--hy-accent-color);
    cursor: pointer;
    font-weight: bold;
    text-decoration: none;

    &:hover {
        text-decoration: underline;
    }
}

h1:not(.hy-reset),
h2:not(.hy-reset),
h3:not(.hy-reset),
h4:not(.hy-reset) {
    margin: var(--hy-element-margin);
    margin-top: 50px;
    font-weight: bold;
}

p:not(.hy-reset),
span:not(.hy-reset) {
    margin: var(--hy-element-margin);
    padding: 0;
    font-size: var(--hy-font-size);
}

hr:not(.hy-reset) {
    border: none;
    border-top: var(--hy-section-divider);
    height: 0;
    border-radius: 20px;
}

.hy-fade-transition-enter-active,
.hy-fade-transition-leave-active {
    transition: var(--hy-element-transition);
    transition-property: opacity;
}

.hy-fade-transition-enter-from,
.hy-fade-transition-leave-to {
    opacity: 0;
}

// ##########################
// Utility classes

.hy-extend-full {
    flex: 100 !important;
}

.hy-no-min-width {
    min-width: 0 !important;
}

.hy-min-width {
    min-width: min-content !important;
}

.hy-remove-leading-trailing-margins {
    & > :first-child {
        margin-top: 0 !important;
    }

    & > :last-child {
        margin-bottom: 0 !important;
    }
}

.hy-remove-leading-margins {
    & > :first-child {
        margin-top: 0 !important;
    }
}

.hy-remove-trailing-margins {
    & > :last-child {
        margin-bottom: 0 !important;
    }
}

.hy-no-margin {
    margin: 0 !important;

    &p,
    &span,
    &h1,
    &h2,
    &h3,
    &h4 {
        padding: 0 !important;
    }
}

.hy-element-shadow {
    box-shadow: var(--hy-element-shadow);
}

.hy-section-shadow {
    box-shadow: var(--hy-section-shadow);
}

p.hy-label {
    margin-bottom: 0;
    margin-top: 25px;
    font-weight: bold;

    & + * {
        margin-top: 3px;
    }
}

.hy-hide-scrollbars {
    -ms-overflow-style: none;
    scrollbar-width: none;

    &::-webkit-scrollbar {
        display: none;
    }
}

.hy-floating-badge {
    position: relative;

    &::before {
        content: attr(data-badge-text);
        position: absolute;
        top: 0;
        right: 0;
        transform: translate(40%, -40%);
        padding: 5px;
        border-radius: var(--hy-element-border-radius);
        min-width: 8px;
        min-height: 8px;
        font-size: 15px;
        text-align: center;
        border: 1px solid white;
        background-color: var(--hy-color-pink);
        color: white;
        box-shadow: var(--hy-element-shadow);
        z-index: 10;
    }
}

// Text-color
.hy-text-gray-1 {
    &,
    * {
        color: var(--hy-color-gray-1) !important;
    }
}

.hy-text-gray-2 {
    &,
    * {
        color: var(--hy-color-gray-2) !important;
    }
}

.hy-text-gray-3 {
    &,
    * {
        color: var(--hy-color-gray-3) !important;
    }
}

.hy-text-gray {
    &,
    * {
        color: var(--hy-font-color-gray) !important;
    }
}

// Text align
.hy-text-left {
    text-align: left !important;
}

.hy-text-center {
    text-align: center !important;
}

.hy-text-right {
    text-align: right !important;
}

.hy-text-justify {
    text-align: justify !important;
}

// Text font weight
.hy-font-weight-bold {
    &,
    * {
        font-weight: bold !important;
    }
}

.hy-font-weight-normal {
    &,
    * {
        font-weight: normal !important;
    }
}

// Border accent
.hy-border-accent {
    &,
    & > *:not(.hy-loader) {
        border-color: var(--hy-accent-color) !important;
    }
}

// Background color
.hy-bg-gray-1 {
    background-color: var(--hy-color-gray-1);
}

.hy-bg-gray-2 {
    background-color: var(--hy-color-gray-2);
}

.hy-bg-gray-3 {
    background-color: var(--hy-color-gray-3);
}

// Hide mobile/desktop
@media only screen and (max-width: 799px) {
    .hy-hide-mobile {
        display: none;
    }
}

@media only screen and (min-width: 800px) {
    .hy-hide-desktop {
        display: none;
    }
}

// ##########################
// General Variables (e.g spacing)

:root {
    --hy-font-size: 20px;
    --hy-font-size-small: calc(var(--hy-font-size) * 0.75);
    --hy-font-family: Helvetica, sans-serif;

    --hy-flex-gap: 10px;
    --hy-section-padding: 1rem;
    --hy-section-border-radius: calc(2 * var(--hy-element-border-radius));
    --hy-section-shadow: 0 0 32px 5px var(--hy-section-shadow-color);
    --hy-section-divider: 1px solid var(--hy-section-divider-color);

    --hy-element-border-secondary: 2px solid var(--hy-element-border-secondary-color);
    --hy-element-border-accent: 2px solid var(--hy-accent-color);
    --hy-element-border-error: 2px solid var(--hy-invalid-font-color);

    --hy-element-margin-value: 0.9rem;
    --hy-element-margin: var(--hy-element-margin-value) 0;
    --hy-element-padding: 0.75rem;
    --hy-element-padding-md: 0.5rem;
    --hy-element-padding-sm: 0.25rem;

    --hy-element-transition: none 0.2s ease-in-out;
    --hy-tabbar-transition: none 0.3s cubic-bezier(0.19, 1, 0.22, 1);
    --hy-element-shadow: 0px 4px 8px -2px var(--hy-element-shadow-color);
    --hy-element-border-radius: 0.5rem;

    --hy-popover-shadow: 0 0 32px 15px var(--hy-popover-shadow-color);
    --hy-dropdown-top-shadow: 0px 0px 8px 2px var(--hy-element-shadow-color); // If dropdown expands to the top, the dividing shadow must also spread to the top
    --hy-dropdown-bottom-shadow: var(--hy-element-shadow);

    // Navigation
    --hy-tabbar-shadow: 0 0 25px 5px var(--hy-tabbar-shadow-color);
    --hy-sidebar-shadow: 0 0 25px 5px var(--hy-sidebar-shadow-color);
    --hy-header-shadow-cover: 0px 0px 18px 15px var(--hy-body-bg-color);
}

// ##########################
// General Variables on Mobile

@media only screen and (max-width: 600px) {
    :root {
        --hy-font-size: 18px;
        --hy-element-padding: 0.72rem;
        --hy-section-padding: 1rem;
    }
}
