/**
 * @file authentik base UI theme.
 */

/* Defined to better identify the base theme when debugging constructed stylesheets. */
.__AK_UI_BASE__ {
    --__AK_UI_BASE__: 1;
}

/* #region Global */

:root {
    --ak-accent: #fd4b2d;

    --ak-dark-foreground: #fafafa;
    --ak-dark-foreground-darker: #bebebe;
    --ak-dark-foreground-link: #5a5cb9;
    --ak-dark-background: #18191a;
    --ak-dark-background-darker: #000000;
    --ak-dark-background-light: #1c1e21;
    --ak-dark-background-light-ish: #212427;
    --ak-dark-background-lighter: #2b2e33;

    --ak-flow-background-color-contrast: var(--pf-global--Color--100);
    --ak-flow-footer-color: var(--pf-global--Color--light-100);

    /* PatternFly likes to override global variables for some reason */
    --ak-global--Color--100: var(--pf-global--Color--100);

    /* Minimum width after which the sidebar becomes automatic */
    --ak-sidebar--minimum-auto-width: 80rem;

    /**
     * The height of the navbar and branded sidebar.
     * @todo This shouldn't be necessary. The sidebar can instead use a grid layout
     * ensuring they share the same height.
     */
    --ak-navbar--height: 7rem;

    --pf-global--disabled-color--100: GrayText;
    --pf-global--disabled-color--200: color-mix(in srgb, GrayText 100%, CanvasText 75%);
    --pf-global--disabled-color--300: color-mix(in srgb, GrayText 100%, CanvasText 100%);
}

/* #endregion */

/* #region Scrollbars */

/**
 * Scrollbar colors derived from default user agent styles.
 *
 * @remarks
 *
 * Scrollbar colors may be ignored by the browser depending on a few factors:
 *
 * - A preference for increased contrast
 * - A preference for scrollbar visibility
 * - The pointer precision available
 * - Operating system differences
 */
:root {
    --ak-scrollbar-background-color: hsl(0 0% 98%);
    --ak-scrollbar-thumb-background-color: hsl(0 0% 76%);
}

/* Applicable to browsers with a WebKit lineage (Chrome, Edge, Safari) */
::-webkit-scrollbar {
    background: var(--ak-scrollbar-background-color);

    /* Emulate thin scrollbar sizing. */
    @media (pointer: fine) {
        max-height: 12px;
        max-width: 12px;
    }
}

/* Necessary to avoid background color mismatch. */
::-webkit-scrollbar-track {
    background: var(--ak-scrollbar-background-color);
}

::-webkit-scrollbar-thumb {
    background: var(--ak-scrollbar-thumb-background-color);
    /* Applies consistent shape across browsers and platforms */
    border: 3px solid transparent;
    border-radius: 8px;
    background-clip: content-box;

    /* Emulate thin scrollbar sizing. */
    @media (pointer: fine) {
        border: 3px solid transparent;
        border-radius: 8px;
    }
}

/**
 * Hides arrow buttons on the scrollbar.
 * Not applicable to Edge when scrollbars are set to always visible.
 */
::-webkit-scrollbar-button {
    display: none;
    height: 0;
    width: 0;
}

@supports (scrollbar-color: auto) {
    :root {
        /**
         * Applies consistent colors across browsers and platforms.
         * Not applicable when thin scrollbars are preferred.
         */
        scrollbar-color: var(--ak-scrollbar-thumb-background-color)
            var(--ak-scrollbar-background-color);
    }
}

@supports (scrollbar-width: thin) {
    .pf-c-page__main,
    .pf-c-nav__list,
    .pf-c-card__body {
        scrollbar-width: thin;

        @media (pointer: coarse) {
            /**
             * Avoids issues on touch devices where thin scrollbars
             * are difficult to interact with.
             */
            scrollbar-width: auto;
        }
    }
}

/* #endregion */

.pf-c-form__group {
    column-gap: var(--pf-global--spacer--md);
}

.pf-c-form__group-label {
    display: flex;
    user-select: none;
    padding-top: var(--pf-c-form--m-horizontal__group-label--md--PaddingTop);

    /* Increase the pressable area of the label. */
    .pf-c-form__label {
        display: block;
        flex: 1 1 auto;
    }
}

.pf-c-form__label[aria-required="true"] .pf-c-form__label-text::after {
    content: "*" / "";
    user-select: none;
    margin-left: var(--pf-c-form__label-required--MarginLeft);
    font-size: var(--pf-c-form__label-required--FontSize);
    color: var(--pf-c-form__label-required--Color);
}

html {
    --pf-c-nav__link--PaddingTop: 0.5rem;
    --pf-c-nav__link--PaddingRight: 0.5rem;
    --pf-c-nav__link--PaddingBottom: 0.5rem;
    --pf-c-nav__link--PaddingLeft: 0.5rem;
}

html > form > input {
    position: absolute;
    top: -2000px;
    left: -2000px;
}

/* #endregion */

/* #region Screen readers */

.sr-only {
    position: absolute;
    left: -10000px;
    top: auto;
    width: 1px;
    height: 1px;
    overflow: hidden;
}

@media not (prefers-contrast: more) {
    .less-contrast-sr-only {
        position: absolute;
        left: -10000px;
        top: auto;
        width: 1px;
        height: 1px;
        overflow: hidden;
    }
}

/* #endregion */

/* #region Icons */

.pf-icon {
    display: inline-block;
    font-style: normal;
    font-variant: normal;
    text-rendering: auto;
    line-height: 1;
    vertical-align: middle;

    &:has(+ span) {
        margin-inline-end: 0.5em;
    }
}

/* #endregion */

/* #region Page */

.pf-c-page {
    --pf-c-page__header--BackgroundColor: transparent;
}

/**
 * We reverse the page header colors because PatternFly assumes a dark header
 * on light themes. The opposite must be done for dark themes.
 */
.pf-c-page__header {
    --pf-global--Color--100: var(--pf-global--Color--dark-100);
    --pf-global--Color--200: var(--pf-global--Color--dark-200);
    --pf-global--BorderColor--100: var(--pf-global--BorderColor--dark-100);
    --pf-global--primary-color--100: var(--pf-global--primary-color--dark-100);
    --pf-global--link--Color: var(--pf-global--link--Color--dark);
    --pf-global--link--Color--hover: var(--pf-global--link--Color--dark);
    --pf-global--BackgroundColor--100: transparent;
}

/* #endregion */

/* #region Form controls */

.pf-c-form-control {
    --pf-c-form-control--readonly--BackgroundColor: var(--pf-global--BackgroundColor--200);
    --pf-c-form-control--disabled--BackgroundColor: var(--pf-global--BackgroundColor--200);

    /* #region Caps Lock */

    --pf-c-form-control--m-caps-lock--BackgroundUrl: url("data:image/svg+xml;charset=utf8,%3Csvg fill='%23aaabac' viewBox='0 0 56 56' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M 20.7812 37.6211 L 35.2421 37.6211 C 38.5233 37.6211 40.2577 35.6992 40.2577 32.6055 L 40.2577 28.4570 L 49.1404 28.4570 C 51.0859 28.4570 52.6329 27.3086 52.6329 25.5039 C 52.6329 24.4024 52.0703 23.5351 51.0158 22.6211 L 30.9062 4.8789 C 29.9452 4.0351 29.0546 3.4727 27.9999 3.4727 C 26.9687 3.4727 26.0780 4.0351 25.1171 4.8789 L 4.9843 22.6445 C 3.8828 23.6055 3.3671 24.4024 3.3671 25.5039 C 3.3671 27.3086 4.9140 28.4570 6.8828 28.4570 L 15.7421 28.4570 L 15.7421 32.6055 C 15.7421 35.6992 17.4999 37.6211 20.7812 37.6211 Z M 21.1562 34.0820 C 20.2655 34.0820 19.6562 33.4961 19.6562 32.6055 L 19.6562 25.7149 C 19.6562 25.1524 19.4452 24.9180 18.8828 24.9180 L 8.6640 24.9180 C 8.4999 24.9180 8.4296 24.8476 8.4296 24.7305 C 8.4296 24.6367 8.4530 24.5430 8.5702 24.4492 L 27.5077 7.9961 C 27.7187 7.8086 27.8359 7.7383 27.9999 7.7383 C 28.1640 7.7383 28.3046 7.8086 28.4921 7.9961 L 47.4532 24.4492 C 47.5703 24.5430 47.5939 24.6367 47.5939 24.7305 C 47.5939 24.8476 47.4998 24.9180 47.3356 24.9180 L 37.1406 24.9180 C 36.5780 24.9180 36.3671 25.1524 36.3671 25.7149 L 36.3671 32.6055 C 36.3671 33.4727 35.7109 34.0820 34.8671 34.0820 Z M 19.7733 52.5273 L 36.0624 52.5273 C 38.7577 52.5273 40.3046 51.0273 40.3046 48.3086 L 40.3046 44.9336 C 40.3046 42.2148 38.7577 40.6680 36.0624 40.6680 L 19.7733 40.6680 C 17.0546 40.6680 15.5077 42.2383 15.5077 44.9336 L 15.5077 48.3086 C 15.5077 51.0039 17.0546 52.5273 19.7733 52.5273 Z M 20.3124 49.2227 C 19.4921 49.2227 19.0468 48.8008 19.0468 47.9805 L 19.0468 45.2617 C 19.0468 44.4414 19.4921 43.9727 20.3124 43.9727 L 35.5233 43.9727 C 36.3202 43.9727 36.7655 44.4414 36.7655 45.2617 L 36.7655 47.9805 C 36.7655 48.8008 36.3202 49.2227 35.5233 49.2227 Z'/%3E%3C/svg%3E");

    &.pf-m-icon.pf-m-caps-lock {
        --pf-c-form-control--m-icon--BackgroundUrl: var(
            --pf-c-form-control--m-caps-lock--BackgroundUrl
        );
    }

    /* #endregion */
}

/* #region Buttons */

.pf-c-button {
    --pf-c-button--disabled--BackgroundColor: var(--pf-global--Color--light-200);
}

/* #endregion */

/* #region Dropdown */

.pf-c-dropdown__menu-item[role="contentinfo"] {
    &,
    &:hover,
    &:focus {
        --pf-c-dropdown__menu-item--hover--Color: initial;
        --pf-c-dropdown__menu-item--hover--BackgroundColor: initial;
    }
}

/* #endregion */

/* #region Tabs */

.pf-c-tabs {
    --pf-c-tabs--inset: var(--pf-global--spacer--lg);
    --pf-c-tabs--m-vertical--m-box--inset: var(--pf-global--spacer--lg);

    margin-block-start: var(--pf-global--spacer--xs);
    background-color: transparent;

    &.pf-m-box.pf-m-vertical {
        .pf-c-tabs__list::before {
            border-color: transparent;
        }
    }

    &.pf-m-box .pf-c-tabs__item.pf-m-current:first-child .pf-c-tabs__link::before {
        border-color: transparent;
    }

    &.pf-m-vertical {
        .pf-c-tabs__link {
            background-color: transparent;
        }
    }

    &:not(.pf-m-vertical) .pf-c-tabs__item {
        &.pf-m-current {
            --pf-c-tabs__link--after--BorderColor: var(--ak-accent);
        }
    }
}

ak-tabs[vertical] {
    [role="tabpanel"] {
        padding-inline-start: 0 !important;
    }

    .pf-c-card__body > *::part(table-container) {
        overflow-x: auto;
    }
}

.pf-c-tabs__link {
    --pf-c-tabs__link--Color: var(--pf-global--Color--100);

    &::before {
        border-color: transparent;
    }
}

/* #endregion */

/* #region Tables */

.pf-c-table {
    --pf-c-table__sort__button__text--Color: var(--pf-global--Color--100);
    --pf-c-table__button--hover--Color: var(--pf-global--link--Color--hover);
}

.pf-c-table__sort.pf-m-selected {
    text-decoration: underline;

    .pf-c-table__button .pf-c-table__text {
        --pf-c-table__sort__button__text--Color: var(--pf-global--Color--100);

        --pf-c-table__button--hover--Color: var(--pf-global--link--Color--hover);
    }
}

/* #endregion */

/* #region Login adjustments */

/* Ensure card is displayed on small screens */
.pf-c-login__main {
    display: block;
    position: relative;
    width: 100%;
    flex: 1 1 auto;
    place-content: center;
}

@media (max-width: 1199px) {
    .pf-c-login__container {
        display: flex;
        flex-direction: column;
    }
}

.ak-login-container {
    max-width: 35rem;
    width: 100%;
    display: flex;
    flex-direction: column;
    height: calc(100vh - var(--pf-global--spacer--lg) - var(--pf-global--spacer--lg));
}

.pf-c-login__footer {
    color: var(--ak-flow-footer-color);
    flex: 250 0 auto;
    display: flex;
    justify-content: end;
    flex-direction: column;
}

@media (max-width: 768px) {
    :root {
        --ak-flow-footer-color: var(--ak-flow-background-color-contrast);
    }
}

.pf-c-login__footer ul.pf-c-list.pf-m-inline {
    justify-content: center;
    padding: 2rem 0;
}

/* #endregion */

.pf-c-content h1 {
    display: flex;
    align-items: flex-start;
}

.pf-c-content h1 i {
    font-style: normal;
}

.pf-c-content h1 :first-child {
    margin-right: var(--pf-global--spacer--sm);
}

/* ensure background on non-flow pages match */
.pf-c-background-image::before {
    background-image: var(--ak-flow-background);
    background-position: center;
}

.pf-m-success {
    color: var(--pf-global--success-color--100) !important;
}

.pf-m-warning {
    color: var(--pf-global--warning-color--100);
}

.pf-m-danger {
    color: var(--pf-global--danger-color--100);
}

/* #region Fields */

fieldset {
    --ak-fieldset-border-width: thin;
    --ak-fieldset-border-color: var(--pf-global--BackgroundColor--light-100);
    --ak-legend-margin-inline-base: var(--pf-global--spacer--sm);
    --ak-legend-padding-inline-base: var(--pf-global--spacer--sm);

    border-color: var(--ak-fieldset-border-color);
    border-width: var(--ak-fieldset-border-width);

    padding: var(--ak-legend-padding-inline-base) !important;

    @media (prefers-contrast: more) {
        --ak-fieldset-border-color: var(--pf-global--BorderColor--200);
    }

    @media (prefers-contrast: less) {
        --ak-fieldset-border-color: transparent;
    }

    & > legend {
        line-height: 1;
        padding: var(--ak-legend-padding-inline-base) !important;
        margin-inline-start: var(
            --ak-legend-margin-inline-start,
            var(--ak-legend-margin-inline-base)
        ) !important;
        margin-inline-end: var(
            --ak-legend-margin-inline-end,
            var(--ak-legend-margin-inline-base)
        ) !important;
    }

    &:has(legend.sr-only) {
        border-width: 0;
    }

    &.pf-c-form__group {
        border-radius: var(--pf-global--BorderRadius--sm);
    }

    &.pf-c-form__group {
        display: flex;
        flex-wrap: wrap;

        &.pf-m-action {
            gap: var(--pf-global--spacer--md) var(--pf-global--spacer--sm);
            margin-block-start: 0;
        }
    }

    &.pf-c-modal-box__footer {
        --ak-legend-padding-inline-base: var(--pf-global--spacer--md);
        padding-block: calc(var(--ak-legend-padding-inline-base) / 2);
        border-inline: none;
        border-block-end: none;

        --pf-c-modal-box__footer--c-button--sm--MarginRight: var(
            --pf-c-modal-box__footer--c-button--MarginRight
        );

        & > ak-spinner-button:not(:last-child) {
            margin-right: var(--pf-c-modal-box__footer--c-button--MarginRight);
        }
    }
}

.pf-c-card > fieldset {
    margin-inline: var(--pf-global--spacer--md);
    margin-block-end: var(--pf-global--spacer--md);

    @media not (prefers-contrast: more) {
        --ak-legend-margin-inline-start: calc(
            var(--pf-c-card--child--PaddingLeft) - var(--ak-legend-padding-inline-base)
        );
        --ak-legend-margin-inline-end: calc(
            var(--pf-c-card--child--PaddingRight) - var(--ak-legend-padding-inline-base)
        );

        border-width: 0;
        padding: 0 !important;
        margin: 0 !important;

        legend {
            padding-block-start: var(--pf-c-card--first-child--PaddingTop) !important;
            padding-block-end: var(--pf-c-card__title--not--last-child--PaddingBottom) !important;
            line-height: var(--pf-global--LineHeight--md);
        }
    }
}

/* #endregion */

/* #region Notifications */

.pf-c-notification-drawer {
    --pf-c-notification-drawer--BackgroundColor: var(--pf-global--BackgroundColor--150);
}

/* #endregion */

/* #region Switch  */
.pf-c-switch {
    --pf-c-switch__input--focus__toggle--OutlineWidth: 0;

    &:hover {
        --pf-c-switch__toggle--before--BackgroundColor: var(--pf-global--BackgroundColor--200);
    }
}

.pf-c-switch__label {
    --pf-c-switch__input--not-checked__label--Color: var(--pf-global--Color--100);
    user-select: none;
}

.pf-c-form__helper-text {
    text-wrap: balance;
    text-wrap: pretty; /* Supporting browsers. */
}

::placeholder {
    font-style: italic;
}

/* #endregion */

/* #region Fonts */

.pf-m-monospace {
    font-family: var(--pf-global--FontFamily--monospace);

    &::placeholder {
        font-family: var(--pf-global--FontFamily--sans-serif);
    }
}

/* #endregion */

.pf-c-description-list__description .pf-c-button {
    margin-right: 6px;
    margin-bottom: 6px;
}

.pf-m-pressable {
    cursor: pointer;
    user-select: none;
}

.pf-m-link {
    color: var(--pf-global--link--Color);
    text-decoration: none;

    &:hover,
    &:focus {
        color: var(--pf-global--link--Color--hover);
        text-decoration: underline;
    }
}

/* Flow-card adjustments for static pages */
.pf-c-brand {
    padding-top: calc(
        var(--pf-c-login__main-footer-links--PaddingTop) +
            var(--pf-c-login__main-footer-links--PaddingBottom) +
            var(--pf-c-login__main-body--PaddingBottom)
    );
    max-height: 9rem;
}

.ak-brand {
    display: flex;
    justify-content: center;
    width: 100%;
}

.ak-brand img {
    padding: 0 2rem;
    max-height: inherit;
}

@media (min-height: 60rem) {
    .pf-c-login[data-layout="stacked"] .pf-c-login__main {
        margin-top: 13rem;
    }
}

.pf-c-login[data-layout="sidebar_left"],
.pf-c-login[data-layout="sidebar_right"] {
    --ak-flow-footer-color: var(--ak-flow-background-color-contrast);
}

.pf-c-data-list {
    padding-inline-start: 0;
}

/* #region Code blocks */

pre:has(.hljs) {
    padding: var(--pf-global--spacer--md);
}

/* #endregion */
