// Name:            Visibility
// Description:     Utilities to show or hide content on breakpoints, hover or touch
//
// Component:       `uk-hidden-*`
//                  `uk-visible-*`
//                  `uk-invisible`
//                  `uk-hidden-visually`
//                  `uk-visible-toggle`
//                  `uk-hidden-hover`
//                  `uk-invisible-hover`
//                  `uk-hidden-touch`
//                  `uk-hidden-notouch`
//
// ========================================================================


/* ========================================================================
   Component: Visibility
 ========================================================================== */

/*
 * Hidden
 * `hidden` attribute also set here to make it stronger
 */

[hidden],
.uk-hidden,
.uk-hidden-empty:empty { display: none !important; }

/* Phone landscape and bigger */
@media (min-width: @breakpoint-small) {

    .uk-hidden\@s { display: none !important; }

}

/* Tablet landscape and bigger */
@media (min-width: @breakpoint-medium) {

    .uk-hidden\@m { display: none !important; }

}

/* Desktop and bigger */
@media (min-width: @breakpoint-large) {

    .uk-hidden\@l { display: none !important; }

}

/* Large screen and bigger */
@media (min-width: @breakpoint-xlarge) {

    .uk-hidden\@xl { display: none !important; }

}

/*
 * Visible
 */

/* Phone portrait and smaller */
@media (max-width: @breakpoint-xsmall-max) {

    .uk-visible\@s { display: none !important; }

}

/* Phone landscape and smaller */
@media (max-width: @breakpoint-small-max) {

    .uk-visible\@m { display: none !important; }

}

/* Tablet landscape and smaller */
@media (max-width: @breakpoint-medium-max) {

    .uk-visible\@l { display: none !important; }

}

/* Desktop and smaller */
@media (max-width: @breakpoint-large-max) {

    .uk-visible\@xl { display: none !important; }

}


/* Visibility
 ========================================================================== */

.uk-invisible { visibility: hidden !important; }


/* Based on the State of the Parent Element
 ========================================================================== */

/*
 * Mind that `display: none`, `visibility: hidden` and `opacity: 0`
 * remove the element from the accessibility tree and that
 * `display: none` and `visibility: hidden` are not focusable.
 *
 * The target stays visible if any element within receives focus through keyboard.
 */

/*
 * Remove space when hidden.
 * 1. Remove from document flow.
 * 2. Hide element and shrink its dimension. Current browsers and screen readers
 *    keep the element in the accessibility tree even with zero dimensions.
 *    Using `tabindex="-1"` will show the element on touch devices.
 *    Note: `clip-path` doesn't work with `tabindex` on touch devices.
 */

.uk-hidden-visually:not(:focus):not(:active):not(:focus-within),
.uk-visible-toggle:not(:hover):not(:focus) .uk-hidden-hover:not(:focus-visible):not(:has(:focus-visible)),
// Fallback for Safari 18.3 `:not(:has(...)) invalidation` bug. Remove when fixed.
.uk-visible-toggle:not(:hover):not(:focus) .uk-hidden-hover:not(:focus-within) {
    /* 1 */
    position: absolute !important;
    /* 2 */
    width: 0 !important;
    height: 0 !important;
    padding: 0 !important;
    border-width: 0 !important;
    margin: 0 !important;
    overflow: hidden !important;
}

/*
 * Keep space when hidden.
 * Hide element without shrinking its dimension.
 * Note: `clip-path` doesn't work with hover for elements outside of the toggle box.
 */

.uk-visible-toggle:not(:hover):not(:focus) .uk-invisible-hover:not(:focus-within) { opacity: 0 !important; }


/* Based on Hover Capability of the Pointing Device
 ========================================================================== */

/*
 * Hover
 */

/* Hide if primary pointing device doesn't support hover, e.g. touch screens. */
@media (hover: none) {
    .uk-hidden-touch { display: none !important; }
}

/* Hide if primary pointing device supports hover, e.g. mice. */
@media (hover) {
    .uk-hidden-notouch { display: none !important; }
}


// Hooks
// ========================================================================

.hook-visibility-misc();

.hook-visibility-misc() {}
