/* ── CSS Custom Properties — override in Elementor → Custom CSS or theme ── */
:root {
    --raf-spinner-size:    24px;
    --raf-spinner-weight:  3px;
    --raf-spinner-color:   #333;
    --raf-spinner-track:   rgba(0, 0, 0, 0.15);
    --raf-loading-opacity: 0.5;
    --raf-spinner-top:     50%;
    --raf-spinner-right:   10px;
    --raf-spinner-bottom:  auto;
    --raf-spinner-left:    auto;
    --raf-spinner-offset-x: 0px;
    --raf-spinner-offset-y: -50%;

    --raf-clear-size:      16px;
    --raf-clear-gap:       10px;
    --raf-clear-color:     currentColor;
    --raf-clear-opacity:   0.45;
    --raf-clear-opacity-h: 0.9;
}

/* ── Loading state — dims the grid ────────────────────────────────── */
.raf-loading {
    opacity: var(--raf-loading-opacity);
    pointer-events: none;
}

/* ── Spinner wrapper — handles position only ───────────────────────── */
.raf-wrapper {
    position: relative;
    display: flex;
    flex-wrap: wrap;
}

.raf-spinner {
    position: absolute;
    top:       var(--raf-spinner-top);
    right:     var(--raf-spinner-right);
    bottom:    var(--raf-spinner-bottom);
    left:      var(--raf-spinner-left);
    transform: translate(var(--raf-spinner-offset-x), var(--raf-spinner-offset-y));
    width:     var(--raf-spinner-size);
    height:    var(--raf-spinner-size);
    pointer-events: none;
    z-index: 10;
}

/* ── Spinner ring — handles rotation only ──────────────────────────── */
.raf-spinner::after {
    content: '';
    display: block;
    width:  100%;
    height: 100%;
    border: var(--raf-spinner-weight) solid var(--raf-spinner-track);
    border-top-color: var(--raf-spinner-color);
    border-radius: 50%;
    animation: raf-spin 0.8s linear infinite;
}

@keyframes raf-spin { to { transform: rotate(360deg); } }
.raf-pagination { margin-top: 20px; text-align: center; }
.raf-pagination ul { display: inline-flex; list-style: none; padding: 0; gap: 5px; }
.raf-pagination li { display: inline-block; }
.raf-pagination a, .raf-pagination span {
    padding: 8px 12px;
    border: 1px solid #ddd;
    text-decoration: none;
    display: block;
}

/* ── Numbered pagination ───────────────────────────────────────────── */
.raf-pagination {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    justify-content: center;
    gap: 6px;
    margin-top: 24px;
}

.raf-page-item,
.raf-page-prev,
.raf-page-next {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-width: 36px;
    height: 36px;
    padding: 0 10px;
    border: 1px solid #ddd;
    border-radius: 4px;
    text-decoration: none;
    color: inherit;
    cursor: pointer;
    transition: background-color 0.15s, border-color 0.15s, color 0.15s;
}

.raf-page-item:hover,
.raf-page-prev:hover,
.raf-page-next:hover {
    background-color: #f0f0f0;
    border-color: #bbb;
}

.raf-page-item.is-current {
    background-color: #333;
    border-color: #333;
    color: #fff;
    cursor: default;
    pointer-events: none;
}

.raf-page-ellipsis {
    display: inline-flex;
    align-items: center;
    padding: 0 4px;
    color: #999;
}

/* ── Load More button ──────────────────────────────────────────────── */
.raf-loadmore-btn {
    display: inline-block;
    padding: 10px 24px;
    border: 1px solid #ddd;
    border-radius: 4px;
    background: transparent;
    cursor: pointer;
    transition: background-color 0.15s, border-color 0.15s;
}

.raf-loadmore-btn:hover:not(:disabled) {
    background-color: #f0f0f0;
    border-color: #bbb;
}

.raf-loadmore-btn:disabled {
    opacity: 0.6;
    cursor: not-allowed;
}

/* ── Infinite scroll sentinel ──────────────────────────────────────── */
.raf-scroll-sentinel {
    height: 1px;
    visibility: hidden;
}

/* ── Clear button ──────────────────────────────────────────────────── */
/* Absolutely positioned inside .raf-wrapper, therefore removed from the
   flex flow: it cannot alter the search/taxonomy width, gap or order.
   left/top are set from JS by measuring the search input.              */
.raf-search-clear {
    position: absolute;
    left: 0;
    top: 0;
    transform: translateY(-50%);
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width:  var(--raf-clear-size);
    height: var(--raf-clear-size);
    padding: 0;
    margin: 0;
    border: 0;
    border-radius: 50%;
    background: none;
    box-shadow: none;
    color: var(--raf-clear-color);
    opacity: var(--raf-clear-opacity);
    cursor: pointer;
    z-index: 5;
    transition: opacity 0.15s;
    -webkit-appearance: none;
    appearance: none;
}

.raf-search-clear:hover,
.raf-search-clear:focus-visible {
    opacity: var(--raf-clear-opacity-h);
    background: none;
}

/* [hidden] needs the override because the rule above sets display. */
.raf-search-clear[hidden] {
    display: none;
}

.raf-search-clear svg {
    width:  100%;
    height: 100%;
    display: block;
}
