/* ── WidgetBackToTop ─────────────────────────────────────────────────── */
.owbtt-wrap {
    position: fixed;
    visibility: hidden;
    opacity: 0;
    pointer-events: none;
    transition: opacity var(--owbtt-entrance-dur, 300ms) ease,
                transform var(--owbtt-entrance-dur, 300ms) ease,
                visibility var(--owbtt-entrance-dur, 300ms) ease;
    transform: translateX(var(--owbtt-tx, 0));
    --owbtt-amt: 4px;
}
.owbtt-wrap.owbtt-always,
.owbtt-wrap.owbtt-visible {
    visibility: visible;
    opacity: 1;
    pointer-events: auto;
}

/* Entrance animations (initial state) */
.owbtt-entrance-fade     { /* uses opacity only */ }
.owbtt-entrance-slide-up { transform: translateX(var(--owbtt-tx, 0)) translateY(20px); }
.owbtt-entrance-slide-dn { transform: translateX(var(--owbtt-tx, 0)) translateY(-20px); }
.owbtt-entrance-zoom     { transform: translateX(var(--owbtt-tx, 0)) scale(0.7); }
.owbtt-entrance-bounce   { transform: translateX(var(--owbtt-tx, 0)) scale(0.5); }
.owbtt-entrance-slide-up.owbtt-visible,
.owbtt-entrance-slide-up.owbtt-always,
.owbtt-entrance-slide-dn.owbtt-visible,
.owbtt-entrance-slide-dn.owbtt-always { transform: translateX(var(--owbtt-tx, 0)) translateY(0); }
.owbtt-entrance-zoom.owbtt-visible,
.owbtt-entrance-zoom.owbtt-always     { transform: translateX(var(--owbtt-tx, 0)) scale(1); }
.owbtt-entrance-bounce.owbtt-visible,
.owbtt-entrance-bounce.owbtt-always   {
    transform: translateX(var(--owbtt-tx, 0)) scale(1);
    animation: owbtt-bounce-in .5s ease;
}
@keyframes owbtt-bounce-in {
    0%   { transform: translateX(var(--owbtt-tx, 0)) scale(0.5); }
    60%  { transform: translateX(var(--owbtt-tx, 0)) scale(1.1); }
    100% { transform: translateX(var(--owbtt-tx, 0)) scale(1); }
}

/* Button base */
.owbtt-btn {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    text-decoration: none !important;
    cursor: pointer;
    box-sizing: border-box;
    line-height: 1;
    position: relative;
    overflow: visible;
    will-change: transform, box-shadow;
}
.owbtt-btn:focus-visible {
    outline: 2px solid currentColor;
    outline-offset: 3px;
}

/* Shape presets */
.owbtt-shape-circle  .owbtt-btn { border-radius: 50%; padding: 0; }
.owbtt-shape-square  .owbtt-btn { border-radius: 6px;  padding: 0; }
.owbtt-shape-pill    .owbtt-btn { border-radius: 999px; }

/* Label layout */
.owbtt-label-below  .owbtt-btn { flex-direction: column; }
.owbtt-label-above  .owbtt-btn { flex-direction: column-reverse; }
.owbtt-label-right  .owbtt-btn { flex-direction: row; }
.owbtt-label-left   .owbtt-btn { flex-direction: row-reverse; }
.owbtt-label-below .owbtt-shape-circle .owbtt-btn,
.owbtt-label-above .owbtt-shape-circle .owbtt-btn,
.owbtt-label-below .owbtt-shape-square .owbtt-btn,
.owbtt-label-above .owbtt-shape-square .owbtt-btn { padding: 8px 6px; }

.owbtt-icon {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    line-height: 1;
    transition: transform .25s ease;
}
.owbtt-label { display: inline-block; line-height: 1.2; }

/* ── Hover animations ────────────────────────────────────────────────── */
.owbtt-h-lift     .owbtt-btn:hover { transform: translateY(calc(var(--owbtt-amt, 4px) * -1)); }
.owbtt-h-scale-up .owbtt-btn:hover { transform: scale(calc(1 + var(--owbtt-amt, 4px) / 50)); }
.owbtt-h-scale-dn .owbtt-btn:hover { transform: scale(calc(1 - var(--owbtt-amt, 4px) / 50)); }
.owbtt-h-rotate   .owbtt-btn:hover { transform: rotate(calc(var(--owbtt-amt, 4px) * 3deg)); }
.owbtt-h-pulse    .owbtt-btn:hover { animation: owbtt-pulse .6s ease; }
.owbtt-h-shake    .owbtt-btn:hover { animation: owbtt-shake .5s ease; }
.owbtt-h-glow     .owbtt-btn:hover { animation: owbtt-glow  1.2s ease-in-out infinite; }

@keyframes owbtt-pulse {
    0%, 100% { transform: scale(1); }
    50%      { transform: scale(calc(1 + var(--owbtt-amt, 4px) / 50)); }
}
@keyframes owbtt-shake {
    0%, 100% { transform: translateX(0); }
    25%      { transform: translateX(calc(var(--owbtt-amt, 4px) * -1)); }
    75%      { transform: translateX(var(--owbtt-amt, 4px)); }
}
@keyframes owbtt-glow {
    0%, 100% { box-shadow: 0 0 0 0 currentColor; }
    50%      { box-shadow: 0 0 0 calc(var(--owbtt-amt, 4px) * 1.5) currentColor; }
}

/* ── Icon hover animations ───────────────────────────────────────────── */
.owbtt-icon-h-up     .owbtt-btn:hover .owbtt-icon { transform: translateY(-3px); }
.owbtt-icon-h-spin   .owbtt-btn:hover .owbtt-icon { transform: rotate(360deg); }
.owbtt-icon-h-pulse  .owbtt-btn:hover .owbtt-icon { animation: owbtt-pulse .5s ease; }
.owbtt-icon-h-bounce .owbtt-btn:hover .owbtt-icon { animation: owbtt-bounce .5s ease; }
@keyframes owbtt-bounce {
    0%, 100% { transform: translateY(0); }
    50%      { transform: translateY(-5px); }
}

/* ── Progress Ring ──────────────────────────────────────────────────── */
.owbtt-has-ring .owbtt-btn { padding: 0; }
.owbtt-ring {
    position: absolute;
    inset: -4px;
    width: calc(100% + 8px);
    height: calc(100% + 8px);
    transform: rotate(-90deg);
    pointer-events: none;
}
.owbtt-ring-track { stroke: rgba(255,255,255,0.25); stroke-width: 3; }
.owbtt-ring-progress {
    stroke: #ffffff;
    stroke-width: 3;
    stroke-linecap: round;
    stroke-dasharray: 100.531;
    stroke-dashoffset: 100.531;
    transition: stroke-dashoffset .15s linear;
}

/* ── Touch device hover-disable ─────────────────────────────────────── */
@media (hover: none) {
    .owbtt-wrap .owbtt-btn:hover { transform: none !important; animation: none !important; }
}

/* Reduce motion accessibility */
@media (prefers-reduced-motion: reduce) {
    .owbtt-wrap,
    .owbtt-wrap .owbtt-btn,
    .owbtt-wrap .owbtt-icon { transition: none !important; animation: none !important; }
}
