/* ════════════════════════════════════════════════════════════════
   FEATURED PRODUCT SHOWCASE — "Album Stack"  v5
   seller/assets/css/featured-showcase.css

   v5 changes:
   • Profit shown as large overlay on image (green gradient fades upward)
   • Cost → Sell price row replaces old profit row in card body
   • Mobile fix: showcase shrinks cleanly, name never clips
   ════════════════════════════════════════════════════════════════ */

/* ── Outer host ──────────────────────────────────────────────────── */
.banner-showcase {
    width: 270px;
    height: 310px;
    position: relative;
    flex-shrink: 0;
}

/* ── Timer ring ──────────────────────────────────────────────────── */
.oc-timer-ring {
    position: absolute;
    top: 6px;
    right: 6px;
    width: 22px;
    height: 22px;
    z-index: 30;
    pointer-events: none;
}

.oc-timer-track {
    fill: none;
    stroke: rgba(0, 0, 0, 0.10);
    stroke-width: 2.2;
}

.oc-timer-fill {
    fill: none;
    stroke: #4f35e8;
    stroke-width: 2.2;
    stroke-linecap: round;
    stroke-dasharray: 56.5;
    stroke-dashoffset: 56.5;
    transform: rotate(-90deg);
    transform-origin: 50% 50%;
}

/* ── Stack container ─────────────────────────────────────────────── */
.oc-stack {
    position: absolute;
    top: 10px;
    left: 10px;
    width: 200px;
    height: 305px;
}

/* ════════════════════════════════════════════════════════════════
   GHOST CARDS
   ════════════════════════════════════════════════════════════════ */
.oc-ghost {
    position: absolute;
    inset: 0;
    border-radius: 16px;
    overflow: hidden;
    pointer-events: none;
}

.oc-ghost-1 {
    transform-origin: bottom center;
    transform: rotate(7deg) scale(0.95) translateX(6px);
    z-index: 2;
    box-shadow: 0 4px 14px rgba(0, 0, 0, 0.10);
    border: 1.5px solid rgba(220, 220, 235, 0.9);
}

.oc-ghost-2 {
    transform-origin: bottom center;
    transform: rotate(-7deg) scale(0.95) translateX(-6px);
    z-index: 2;
    box-shadow: 0 3px 10px rgba(0, 0, 0, 0.07);
    border: 1.5px solid rgba(215, 215, 235, 0.75);
    /* opacity: 0.85; */
}

/* Ghost shuffle animations */
.oc-ghost-1.oc-ghost-shuffle {
    animation: ocGhost1Shuffle 0.52s cubic-bezier(0.34, 1.56, 0.64, 1) both;
    animation-delay: 0.04s;
}

@keyframes ocGhost1Shuffle {
    0% {
        transform: rotate(7deg) scale(0.95) translateX(6px) translateY(0);
    }

    28% {
        transform: rotate(6deg) scale(0.90) translateX(6px) translateY(-10px);
    }

    65% {
        transform: rotate(7.5deg) scale(0.97) translateX(6px) translateY(3px);
    }

    100% {
        transform: rotate(7deg) scale(0.95) translateX(6px) translateY(0);
    }
}

.oc-ghost-2.oc-ghost-shuffle {
    animation: ocGhost2Shuffle 0.52s cubic-bezier(0.34, 1.56, 0.64, 1) both;
    animation-delay: 0s;
}

@keyframes ocGhost2Shuffle {
    0% {
        transform: rotate(-7deg) scale(0.95) translateX(-6px) translateY(0);
    }

    28% {
        transform: rotate(-6deg) scale(0.90) translateX(-6px) translateY(-12px);
    }

    65% {
        transform: rotate(-7.5deg) scale(0.97) translateX(-6px) translateY(3px);
    }

    100% {
        transform: rotate(-7deg) scale(0.95) translateX(-6px) translateY(0);
    }
}

.oc-ghost-img {
    width: 100%;
    height: 100%;
    object-fit: cover;
    display: block;
    filter: brightness(0.92);
}

.oc-ghost-overlay {
    position: absolute;
    inset: 0;
    background: rgba(255, 255, 255, 0.52);
    backdrop-filter: blur(2px);
    -webkit-backdrop-filter: blur(2px);
}

/* ════════════════════════════════════════════════════════════════
   FRONT CARD
   ════════════════════════════════════════════════════════════════ */
.oc-card {
    position: absolute;
    inset: 0;
    border-radius: 16px;
    background: #fff;
    border: 1px solid rgba(220, 220, 235, 0.85);
    overflow: hidden;
    display: flex;
    flex-direction: column;
    z-index: 10;
    box-shadow:
        0 8px 28px rgba(79, 53, 232, 0.12),
        0 2px 6px rgba(0, 0, 0, 0.07);
    will-change: transform, opacity;
    backface-visibility: hidden;
}

.oc-card.oc-enter {
    animation: ocPageIn 0.52s cubic-bezier(0.22, 1, 0.36, 1) both;
}

.oc-card.oc-exit {
    animation: ocPageOut 0.36s cubic-bezier(0.6, 0, 1, 0.4) forwards;
}

@keyframes ocPageIn {
    0% {
        opacity: 0;
        transform: rotateY(50deg) scale(0.94);
    }

    40% {
        opacity: 1;
    }

    100% {
        opacity: 1;
        transform: rotateY(0deg) scale(1);
    }
}

@keyframes ocPageOut {
    0% {
        opacity: 1;
        transform: rotateY(0deg) scale(1);
    }

    100% {
        opacity: 0;
        transform: rotateY(-55deg) scale(0.94);
    }
}

/* ══════════════════════════════════════════════════════════════
   IMAGE AREA — taller, profit overlay at bottom
   ══════════════════════════════════════════════════════════════ */
.oc-img-wrap {
    position: relative;
    width: 100%;
    height: 155px;
    /* taller than before — profit lives here now */
    overflow: hidden;
    flex-shrink: 0;
    background: #f3f4f6;
}

.oc-img-wrap img {
    width: 100%;
    height: 100%;
    object-fit: cover;
    display: block;
    transition: transform 5s ease;
}

.oc-card.oc-enter .oc-img-wrap img {
    transform: scale(1.04);
}

/* Status badge — top-left (moved so it doesn't clash with profit) */
.oc-status-badge {
    position: absolute;
    top: 7px;
    left: 8px;
    z-index: 4;
    font-size: 9px;
    font-weight: 800;
    padding: 3px 8px;
    border-radius: 20px;
    text-transform: uppercase;
    letter-spacing: 0.4px;
    backdrop-filter: blur(4px);
    -webkit-backdrop-filter: blur(4px);
}

.oc-status-badge.imported {
    background: rgba(255, 255, 255, 0.72);
    color: #4f46e5;
    border: 1px solid rgba(99, 102, 241, 0.3);
}

.oc-status-badge.live {
    background: rgba(255, 255, 255, 0.72);
    color: #15803d;
    border: 1px solid rgba(34, 197, 94, 0.3);
}

/* ── Profit overlay — green gradient rising from image bottom ── */
.oc-profit-overlay {
    position: absolute;
    bottom: 0;
    left: 0;
    right: 0;
    /* full-width green gradient that fades to transparent as it goes up */
    background: linear-gradient(to top,
            rgba(21, 128, 74, 0.95) 0%,
            rgba(21, 128, 74, 0.80) 28%,
            rgba(21, 128, 74, 0.40) 60%,
            transparent 100%);
    padding: 22px 12px 9px;
    display: flex;
    flex-direction: column;
    align-items: flex-start;
    z-index: 3;
    pointer-events: none;
}

/* "PROFIT / SALE" label above the number */
.oc-profit-overlay-lbl {
    font-family: 'DM Sans', system-ui, sans-serif;
    font-size: 8.5px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 0.7px;
    color: rgba(255, 255, 255, 0.72);
    line-height: 1;
    margin-bottom: 2px;
}

/* The big profit number */
.oc-profit-overlay-val {
    display: flex;
    align-items: flex-start;
    gap: 1px;
    line-height: 1;
}

.oc-profit-overlay-sym {
    font-family: 'Sora', system-ui, sans-serif;
    font-size: 13px;
    font-weight: 700;
    color: #fff;
    margin-top: 3px;
}

.oc-profit-overlay-num {
    font-family: 'Sora', system-ui, sans-serif;
    font-size: 28px;
    font-weight: 700;
    color: #fff;
    letter-spacing: -0.5px;
    text-shadow: 0 1px 8px rgba(0, 0, 0, 0.18);
}

/* ── Card body — compact, just name + price row + monthly ── */
.oc-body {
    padding: 8px 11px 0;
    display: flex;
    flex-direction: column;
    gap: 5px;
    flex: 1;
    min-height: 0;
}

/* Product name — allow up to 2 lines, never clip */
.oc-name {
    font-family: 'DM Sans', system-ui, sans-serif;
    font-size: 11.5px;
    font-weight: 700;
    color: #111827;
    line-height: 1.38;
    display: -webkit-box;
    -webkit-line-clamp: 2;
    -webkit-box-orient: vertical;
    overflow: hidden;
    /* ensure min height so layout stays stable */
    min-height: 31px;
}

/* ── Cost → Sell price row (replaces old profit row) ────────── */
.oc-price-row {
    display: flex;
    align-items: center;
    gap: 6px;
}

.oc-price-col {
    display: flex;
    flex-direction: column;
    gap: 1px;
}

.oc-price-lbl {
    font-size: 8.5px;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: 0.55px;
    color: #9ca3af;
    font-family: 'DM Sans', system-ui, sans-serif;
}

.oc-price-val {
    font-family: 'Sora', system-ui, sans-serif;
    font-size: 13px;
    font-weight: 700;
    color: #374151;
    line-height: 1;
}

.oc-price-val.sell {
    color: #4f35e8;
}

.oc-price-arrow {
    font-size: 11px;
    color: #d1d5db;
    margin-top: 10px;
    /* align with value baseline */
    flex-shrink: 0;
}

/* Stars */
.oc-stars {
    font-size: 10px;
    color: #f59e0b;
    letter-spacing: 1px;
}

/* Monthly earnings strip */
.oc-monthly {
    display: flex;
    align-items: center;
    justify-content: space-between;
    background: linear-gradient(135deg, #fef9ec, #fef3c7);
    border: 1px solid #fde68a;
    border-radius: 8px;
    padding: 5px 9px;
}

.oc-monthly-lbl {
    font-size: 8.5px;
    font-weight: 700;
    color: #92400e;
    text-transform: uppercase;
    letter-spacing: 0.4px;
    font-family: 'DM Sans', system-ui, sans-serif;
}

.oc-monthly-val {
    font-family: 'Sora', system-ui, sans-serif;
    font-size: 11px;
    font-weight: 700;
    color: #b45309;
}

/* ── Import button — full-width inside card bottom ─────────── */
.oc-import-btn {
    width: 100%;
    height: 32px;
    border: none;
    border-radius: 0 0 15px 15px;
    background: linear-gradient(135deg, #4f35e8, #6d52f5);
    color: #fff;
    font-family: 'DM Sans', system-ui, sans-serif;
    font-size: 11.5px;
    font-weight: 700;
    cursor: pointer;
    flex-shrink: 0;
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 6px;
    margin-top: auto;
    padding-top: 4px;
    /* push down a touch so it doesn't crowd monthly */
    transition: box-shadow 0.15s;
    position: relative;
    overflow: hidden;
    letter-spacing: 0.1px;
}

.oc-import-btn::before {
    content: '';
    position: absolute;
    top: 0;
    left: -80%;
    width: 55%;
    height: 100%;
    background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.2), transparent);
    transition: left 0.35s ease;
    pointer-events: none;
}

.oc-import-btn:hover::before {
    left: 130%;
}

.oc-import-btn:hover {
    box-shadow: 0 4px 16px rgba(79, 53, 232, 0.35);
}

.oc-import-btn:disabled {
    background: linear-gradient(135deg, #d1fae5, #a7f3d0);
    color: #065f46;
    cursor: default;
    box-shadow: none;
}

.oc-import-btn:disabled::before {
    display: none;
}

/* ── Dots ────────────────────────────────────────────────────────── */
.oc-dots {
    position: absolute;
    bottom: -18px;
    left: 40%;
    transform: translateX(-50%);
    display: flex;
    gap: 5px;
    z-index: 20;
}

.oc-dot {
    width: 5px;
    height: 5px;
    border-radius: 5px;
    background: rgba(0, 0, 0, 0.18);
    cursor: pointer;
    transition: width 0.3s, background 0.3s;
    flex-shrink: 0;
}

.oc-dot.oc-dot-active {
    width: 18px;
    background: #4f35e8;
}

/* ════════════════════════════════════════════════════════════════
   RESPONSIVE
   On mobile the onboard-banner stacks vertically (banner-image
   goes below banner-text). Give the showcase a comfortable size
   and make sure nothing clips.
   ════════════════════════════════════════════════════════════════ */

/* Medium — banner still side-by-side but narrower viewport */
@media (max-width: 860px) {
    .banner-showcase {
        width: 210px;
        height: 288px;
    }

    .oc-stack {
        width: 165px;
        height: 252px;
        left: 8px;
        top: 8px;
    }

    .oc-img-wrap {
        height: 130px;
    }

    .oc-profit-overlay-num {
        font-size: 23px;
    }

    .oc-import-btn {
        font-size: 11px;
        height: 29px;
    }
}

/* Small — banner stacks; showcase goes full-width-ish below text  */
@media (max-width: 640px) {

    /* Let the showcase expand to fill its container row */
    .banner-showcase {
        width: 100%;
        max-width: 300px;
        height: auto;
        /* height driven by the stack below */
        padding-bottom: 26px;
        /* space for dots */
        margin: 0 auto;
    }

    /* Stack fills almost all of the showcase width */
    .oc-stack {
        position: relative;
        /* break out of absolute so height flows */
        top: 0;
        left: 0;
        width: 80%;
        height: 0;
        /* We set a padding-bottom trick to maintain aspect ratio */
        padding-bottom: 100%;
        justify-self: center;
        /* card is ~1.28× taller than wide */
    }

    /* All absolute children inside the relative stack still work */
    .oc-ghost,
    .oc-card {
        position: absolute;
        inset: 0;
    }

    .oc-img-wrap {
        height: 46%;
    }

    /* % of card height */
    .oc-profit-overlay-num {
        font-size: 22px;
    }

    .oc-name {
        font-size: 11px;
        min-height: 28px;
    }

    .oc-import-btn {
        font-size: 11px;
        height: 30px;
    }

    .oc-monthly {
        padding: 4px 8px;
    }

    .oc-monthly-val {
        font-size: 10.5px;
    }

    .oc-dots {
        bottom: 6px;
        left: 50%;
    }
}

/* Extra small */
@media (max-width: 380px) {
    .banner-showcase {
        max-width: 260px;
    }

    .oc-profit-overlay-num {
        font-size: 20px;
    }

    .oc-name {
        font-size: 10.5px;
    }
}