.vl-gifts {
    --vl-accent: #df94ff;
    --vl-accent-dark: #c76be8;
    --vl-success: #2e9d5b;
    --vl-border: #ececf1;
    --vl-muted: #8a8a99;
    position: relative;
    margin: 0 0 2rem;
    transition: opacity .2s ease;
}
.vl-gifts:empty { display: none; }
.vl-gifts.is-loading { opacity: .55; pointer-events: none; }
.vl-gifts.is-loading::after {
    content: "";
    position: absolute;
    top: 50%;
    left: 50%;
    width: 32px;
    height: 32px;
    margin: -16px 0 0 -16px;
    border: 3px solid var(--vl-border);
    border-top-color: var(--vl-accent);
    border-radius: 50%;
    animation: vl-spin .7s linear infinite;
}
@keyframes vl-spin { to { transform: rotate(360deg); } }

.vl-gifts__inner {
    padding: 1.5rem;
    background: #fff;
    border: 1px solid var(--vl-border);
    border-radius: 16px;
    box-shadow: 0 6px 24px rgba(20, 20, 43, .05);
}
.vl-gifts__title { margin: 0 0 .75rem; font-size: 1.35rem; }
.vl-gifts__rule + .vl-gifts__rule { margin-top: 1.5rem; padding-top: 1.5rem; border-top: 1px dashed var(--vl-border); }

.vl-gifts__status,
.vl-gifts__error {
    margin: 0 0 1rem;
    padding: .75rem 1rem;
    border-radius: 10px;
    font-size: .95rem;
    line-height: 1.45;
}
.vl-gifts__status.is-ready { background: #f7ecff; color: #6b2c8a; }
.vl-gifts__status.is-done { background: #eaf7ef; color: var(--vl-success); }
.vl-gifts__status.is-locked { background: #f6f6f9; color: #444; }
.vl-gifts__error { background: #fdecec; color: #b3261e; }

.vl-gifts__progress {
    height: 6px;
    margin-top: .6rem;
    background: #e6e6ee;
    border-radius: 99px;
    overflow: hidden;
}
.vl-gifts__progress span {
    display: block;
    height: 100%;
    background: linear-gradient(90deg, var(--vl-accent), var(--vl-accent-dark));
    border-radius: inherit;
    transition: width .4s ease;
}

.vl-gifts__scroller { position: relative; }

.vl-gifts__grid {
    --vl-gap: 1rem;
    display: flex;
    gap: var(--vl-gap);
    overflow-x: auto;
    scroll-snap-type: x proximity;
    scroll-behavior: smooth;
    -webkit-overflow-scrolling: touch;
    padding: .25rem .25rem .75rem;
    scrollbar-width: thin;
}
.vl-gifts__grid::-webkit-scrollbar { height: 6px; }
.vl-gifts__grid::-webkit-scrollbar-track { background: var(--vl-border); border-radius: 99px; }
.vl-gifts__grid::-webkit-scrollbar-thumb { background: var(--vl-accent); border-radius: 99px; }

.vl-gifts__nav {
    position: absolute;
    top: 50%;
    z-index: 2;
    transform: translateY(-50%);
    width: 36px;
    height: 36px;
    display: flex;
    align-items: center;
    justify-content: center;
    color: #333;
    background: #fff;
    border: 1px solid var(--vl-border);
    border-radius: 50%;
    box-shadow: 0 4px 12px rgba(20, 20, 43, .12);
    cursor: pointer;
    transition: opacity .2s ease;
}
.vl-gifts__nav--prev { left: -10px; }
.vl-gifts__nav--next { right: -10px; }
.vl-gifts__nav[disabled] { opacity: .35; cursor: default; }
.vl-gifts__scroller.no-overflow .vl-gifts__nav { display: none; }

.vl-gift {
    flex: 0 0 calc((100% - (var(--vl-cols, 3) - 1) * var(--vl-gap)) / var(--vl-cols, 3));
    scroll-snap-align: start;
    position: relative;
    display: flex;
    flex-direction: column;
    background: #fff;
    border: 2px solid var(--vl-border);
    border-radius: 14px;
    overflow: hidden;
    transition: border-color .2s ease, box-shadow .2s ease, transform .2s ease;
}
.vl-gift:hover { border-color: var(--vl-accent); box-shadow: 0 6px 18px rgba(199, 107, 232, .15); transform: translateY(-2px); }
.vl-gift.is-selected { border-color: var(--vl-success); box-shadow: 0 6px 18px rgba(46, 157, 91, .15); }
.vl-gift.is-selected::before {
    content: "\2713";
    position: absolute;
    top: 10px;
    right: 10px;
    z-index: 1;
    width: 28px;
    height: 28px;
    line-height: 28px;
    text-align: center;
    color: #fff;
    background: var(--vl-success);
    border-radius: 50%;
    font-weight: 700;
}
.vl-gift.is-locked { opacity: .6; }
.vl-gift.is-locked:hover { transform: none; box-shadow: none; border-color: var(--vl-border); }

.vl-gift__image { aspect-ratio: 1 / 1; background: #fafafa; }
.vl-gift__image img { display: block; width: 100%; height: 100%; object-fit: contain; }
.vl-gift__body { display: flex; flex: 1; flex-direction: column; gap: .5rem; padding: .85rem; }
.vl-gift__name { font-size: .9rem; font-weight: 600; line-height: 1.3; }
.vl-gift__price { font-size: .9rem; }
.vl-gift__price del { margin-right: .35rem; color: var(--vl-muted); }
.vl-gift__price ins { color: var(--vl-success); font-weight: 700; text-decoration: none; }
.vl-gift__variant { width: 100%; font-size: .85rem; }

.vl-gift__btn {
    margin-top: auto;
    width: 100%;
    padding: .65rem .75rem;
    font-size: .9rem;
    font-weight: 600;
    line-height: 1.2;
    color: #fff;
    background: var(--vl-accent);
    border: 0;
    border-radius: 8px;
    cursor: pointer;
    transition: background .2s ease;
}
.vl-gift__btn:hover { background: var(--vl-accent-dark); }
.vl-gift__btn[disabled] { background: #d5d5de; cursor: not-allowed; }
.vl-gift__btn.is-selected { background: var(--vl-success); }
.vl-gift__btn .vl-gift__label-hover { display: none; }
.vl-gift__btn.is-selected:hover { background: #b3261e; }
.vl-gift__btn.is-selected:hover .vl-gift__label { display: none; }
.vl-gift__btn.is-selected:hover .vl-gift__label-hover { display: inline; }

.vl-gift-qty { display: inline-block; min-width: 2em; text-align: center; font-weight: 600; }

@media (max-width: 900px) {
    .vl-gifts__grid .vl-gift { flex-basis: calc((100% - 1.5 * var(--vl-gap)) / 2.5); }
}
@media (max-width: 600px) {
    .vl-gifts__inner { padding: 1rem; }
    .vl-gifts__grid { --vl-gap: .75rem; }
    .vl-gifts__grid .vl-gift { flex-basis: calc((100% - .5 * var(--vl-gap)) / 1.5); }
}
