/* ========================================
   MEDIA GRID (shared: images + clips pages)
   ========================================
   Grid layout + YouTube-Manager style cards
   for Image/Clip gallery pages.
   ======================================== */

/* ========================================
   0. UPLOAD MODAL OVERRIDES
   ======================================== */

/* Align icons group vertically inside modal-form-row */
#uploadMediaModal .modal-form-row {
    align-items: flex-end;
}

/* NOTE: icon-toggle-group styles moved to /static/css/components/icon_toggle.css */

/* ========================================
   1. TABS (channel-* classes from YouTube-Manager)
   ======================================== */

/* Filter icons spacing in topbar */
.filter-bar-icons {
    margin-left: 0.7rem;
}

.channel-content-container {
    margin-bottom: 0;
}

.channel-tabs-and-sort {
    display: flex;
    justify-content: space-between;
    align-items: center;
    border-bottom: 1px solid var(--color-border);
    gap: 2rem;
    margin-bottom: 0;
}

.channel-content-tabs {
    display: flex;
    border-bottom: 2px solid var(--color-border);
    margin-bottom: -2px;
}

/* Tab button (used in img-vid) */
.media-tab-btn {
    background: none;
    border: none;
    color: var(--color-text-secondary);
    padding: 1rem 1.25rem;
    font-size: 1rem;
    cursor: pointer;
    position: relative;
    transition: color var(--transition-fast);
    text-decoration: none;
    white-space: nowrap;
}

.media-tab-btn:hover {
    color: var(--color-text-primary);
    text-decoration: none;
}

.media-tab-btn.active {
    color: var(--color-text-primary);
    font-weight: 500;
}

.media-tab-btn:after {
    content: '';
    position: absolute;
    bottom: -2px;
    left: 0;
    right: 0;
    height: 3px;
    background: var(--color-brand-primary);
    transform: scaleX(0);
    transition: transform var(--transition-normal);
}

.media-tab-btn:hover:after,
.media-tab-btn.active:after {
    transform: scaleX(1);
}

/* Tab content with top spacing */
.media-tab-content-spaced {
    margin-top: 1.5rem;
}

/* ========================================
   2. MEDIA GRID
   ======================================== */

.media-grid {
    display: grid;
    grid-template-columns: repeat(4, 1fr);
    gap: 0.625rem;
}

/* ========================================
   3. MEDIA CARD (YouTube-Manager style)
   ======================================== */

.media-card {
    background: var(--color-bg-card);
    border-radius: var(--radius-lg);
    overflow: hidden;
    transition: all var(--transition-normal);
    display: flex;
    flex-direction: column;
    position: relative;
}

.media-card:hover {
    box-shadow: 0 10px 24px color-mix(in srgb, var(--color-bg-inverse) 35%, transparent);
    border-color: var(--color-brand-primary);
}

/* Thumbnail container — 16/9 */
.media-thumbnail-container {
    position: relative;
    overflow: hidden;
    aspect-ratio: 16 / 9;
    flex-shrink: 0;
    background: var(--color-bg-input);
    cursor: pointer;
}

.media-thumbnail {
    width: 100%;
    height: 100%;
    display: block;
    object-fit: cover;
    transition: transform var(--transition-normal);
    -webkit-user-drag: none;
    user-select: none;
}

.media-thumbnail.is-hidden {
    display: none;
}

.media-card:hover .media-thumbnail {
    /* Scale effect removed - causes selection box issues */
}

/* Hide active icons when hovering (menu is visible) - but NOT for selected cards */
.media-card:hover:not(.selected) .media-icons-overlay {
    display: none;
}

/* Hide menu for selected cards */
.media-card.selected .media-icon-menu-container,
.media-card.selected .media-overlay {
    display: none !important;
}

/* Thumbnail placeholder */
.media-thumb-placeholder {
    width: 100%;
    height: 100%;
    display: flex;
    align-items: center;
    justify-content: center;
    color: var(--color-text-tertiary);
}

.media-thumb-placeholder svg {
    width: 40px;
    height: 40px;
    opacity: 0.3;
}

.media-thumb-placeholder.is-hidden {
    display: none;
}

/* Video play overlay (for clips) */
.media-play-badge {
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
    width: 44px;
    height: 44px;
    background: color-mix(in srgb, var(--color-bg-inverse) 60%, transparent);
    border-radius: 50%;
    display: flex;
    align-items: center;
    justify-content: center;
    color: white;
    pointer-events: none;
    transition: opacity var(--transition-fast);
}

.media-card:hover .media-play-badge {
    opacity: 0;
}

.media-play-badge svg {
    width: 20px;
    height: 20px;
    margin-left: 3px; /* optical center for play icon */
}

/* Duration badge (clips) */
.media-duration {
    position: absolute;
    bottom: 0.375rem;
    right: 0.375rem;
    background: color-mix(in srgb, var(--color-bg-inverse) 75%, transparent);
    color: var(--color-text-primary);
    font-size: 0.7rem;
    padding: 0.125rem 0.4rem;
    border-radius: var(--radius-sm);
    font-weight: 500;
    pointer-events: none;
}

/* ========================================
   4. ICONS OVERLAY (active flags, top-right)
   ======================================== */

.media-icons-overlay {
    position: absolute;
    top: 0.5rem;
    right: 0.5rem;
    display: flex;
    gap: 0.25rem;
    z-index: 5;
    pointer-events: none;
}

.media-gallery-index-badge {
    position: absolute;
    top: 0.5rem;
    left: 0.5rem;
    min-width: 18px;
    height: 18px;
    padding: 0 5px;
    border-radius: 999px;
    background: color-mix(in srgb, var(--color-bg-inverse) 78%, transparent);
    border: 1px solid color-mix(in srgb, white 14%, transparent);
    color: var(--color-text-on-inverse-strong);
    display: inline-flex;
    align-items: center;
    justify-content: center;
    font-size: 0.62rem;
    font-weight: 800;
    letter-spacing: 0.03em;
    z-index: 6;
    pointer-events: none;
}

.media-icon {
    width: 28px;
    height: 28px;
    padding: 5px;
    border-radius: 6px;
    background: color-mix(in srgb, var(--color-bg-inverse) 35%, transparent);
    backdrop-filter: blur(8px);
    border: 1px solid color-mix(in srgb, white 15%, transparent);
    color: color-mix(in srgb, white 95%, transparent);
    display: flex;
    align-items: center;
    justify-content: center;
    box-shadow: 0 2px 4px color-mix(in srgb, var(--color-bg-inverse) 20%, transparent);
}

.media-icon svg {
    width: 100%;
    height: 100%;
    filter: drop-shadow(0 1px 2px color-mix(in srgb, var(--color-bg-inverse) 30%, transparent));
}

/* All icons are white */
.media-icon-heart,
.media-icon-star,
.media-icon-ref {
    color: color-mix(in srgb, white 95%, transparent);
}

.media-icon-trash {
    color: var(--color-error);
    background: color-mix(in srgb, var(--color-error) 28%, transparent);
    border-color: color-mix(in srgb, var(--color-error) 60%, transparent);
}

/* ========================================
   5. HOVER OVERLAY (dark overlay with info)
   ======================================== */

.media-overlay {
    position: absolute;
    inset: 0;
    background: color-mix(in srgb, var(--color-bg-inverse) 72%, transparent);
    color: white;
    display: flex;
    flex-direction: column;
    justify-content: flex-end;
    padding: 1rem;
    opacity: 0;
    transition: opacity var(--transition-normal);
}

.media-card:hover .media-overlay {
    opacity: 1;
}

/* Trash view: no dark hover overlay/menu, keep only static status icons. */
body.images-page.is-trash-view .media-card:hover .media-overlay,
body.images-page.is-trash-view .media-card:hover .media-icon-menu-container,
body.images-page.is-trash-view .media-card:hover .media-meta-strip {
    opacity: 0;
    visibility: hidden;
    transform: none;
}

body.images-page.is-trash-view .media-icon-menu-container {
    display: none;
}

/* In trash, allow click only on static trash icon. */
body.images-page.is-trash-view .media-icons-overlay {
    pointer-events: auto;
}

body.images-page.is-trash-view .media-card:hover:not(.selected) .media-icons-overlay {
    display: flex;
}

body.images-page.is-trash-view .media-icons-overlay .media-icon {
    pointer-events: none;
}

body.images-page.is-trash-view .media-icons-overlay .media-icon-trash {
    pointer-events: auto;
    cursor: pointer;
    transition: border-color var(--transition-fast), background var(--transition-fast), box-shadow var(--transition-fast), color var(--transition-fast);
}

body.images-page.is-trash-view .media-icons-overlay .media-icon-trash:hover {
    color: var(--color-error);
    background: color-mix(in srgb, var(--color-error) 20%, transparent);
    border-color: var(--color-error);
    box-shadow: 0 0 12px color-mix(in srgb, var(--color-error) 35%, transparent);
}

.media-overlay-content {
    /* Text block */
    display: none;
}

.media-stats {
    font-size: 0.875rem;
    color: var(--color-text-on-inverse);
    line-height: 1.5;
    margin-bottom: 0.25rem;
    word-break: break-word;
}

.media-meta-gradient {
    position: absolute;
    left: 0;
    right: 0;
    bottom: 0;
    height: 20%;
    z-index: 7;
    pointer-events: none;
    background: linear-gradient(
        to top,
        color-mix(in srgb, var(--color-bg-inverse) 58%, transparent) 0%,
        color-mix(in srgb, var(--color-bg-inverse) 34%, transparent) 45%,
        transparent 100%
    );
}

.media-meta-strip {
    position: absolute;
    left: 0.5rem;
    right: 0.5rem;
    bottom: 0.5rem;
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 0.5rem;
    z-index: 8;
    pointer-events: none;
    padding: 0;
}

.media-meta-model,
.media-meta-resolution {
    color: color-mix(in srgb, white 98%, transparent);
    font-size: 0.72rem;
    line-height: 1.2;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    text-shadow: 0 1px 2px color-mix(in srgb, var(--color-bg-inverse) 70%, transparent);
}

.media-meta-model {
    max-width: 68%;
}

.media-meta-resolution {
    color: color-mix(in srgb, white 90%, transparent);
    text-align: right;
    flex-shrink: 0;
}

.media-card:hover .media-meta-strip {
    opacity: 0;
    transition: opacity var(--transition-fast);
}

.media-stats:first-child {
    font-size: 1rem;
    font-weight: 500;
    color: white;
}

.media-stats:last-child {
    font-size: 0.8rem;
    color: var(--color-text-on-inverse-muted);
    margin-bottom: 0;
}

.media-category-breadcrumbs {
    font-size: 0.8rem;
    color: var(--color-text-on-inverse-muted);
    font-style: italic;
}

.media-link-id {
    color: var(--color-success);
    text-decoration: none;
    font-weight: 600;
    padding: 1px 4px;
    border-radius: var(--radius-sm);
    transition: all var(--transition-fast);
}

.media-link-id:hover {
    color: white;
    background: var(--color-success-15);
    text-decoration: underline;
}

/* ========================================
   6. ICON MENU (action bar, appears on hover)
   ======================================== */

.media-icon-menu-container {
    position: absolute;
    top: 0.5rem;
    left: 0.5rem;
    right: 0.5rem;
    height: 38px;
    display: flex;
    align-items: center;
    justify-content: space-around;
    background: color-mix(in srgb, var(--color-bg-inverse) 72%, transparent);
    border-radius: var(--radius-lg);
    padding: 0 0.375rem;
    opacity: 0;
    visibility: hidden;
    transform: translateY(-8px);
    transition: all var(--transition-fast);
    z-index: 10;
    backdrop-filter: blur(4px);
}

.media-card:hover .media-icon-menu-container {
    opacity: 1;
    visibility: visible;
    transform: translateY(0);
}

.media-icon-menu-btn {
    width: 36px;
    height: 36px;
    background: transparent;
    border: none;
    color: color-mix(in srgb, white 65%, transparent);
    cursor: pointer;
    display: flex;
    align-items: center;
    justify-content: center;
    border-radius: var(--radius-md);
    transition: all var(--transition-fast);
}

.media-icon-menu-btn svg {
    width: 20px;
    height: 20px;
    transition: color var(--transition-fast);
}

.media-icon-menu-btn:hover {
    color: white;
    background: color-mix(in srgb, white 12%, transparent);
}

/* Active states by icon type */
.media-icon-menu-btn[data-icon="heart"].active {
    color: var(--color-error);
}

.media-icon-menu-btn[data-icon="star"].active {
    color: var(--color-warning);
}

.media-icon-menu-btn[data-icon="makeref"].active {
    color: var(--color-info);
}

.media-icon-menu-btn[data-icon="remove"] {
    color: color-mix(in srgb, white 40%, transparent);
}

.media-icon-menu-btn[data-icon="remove"].active {
    color: var(--color-error);
    background: var(--color-error-15);
}

.media-icon-menu-btn[data-icon="remove"]:hover {
    color: var(--color-error);
    background: var(--color-error-15);
}

/* ========================================
   7. EMPTY STATE
   ======================================== */

.empty-state {
    text-align: center;
    padding: 4rem 2rem;
    margin-top: 1.5rem;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
}

.empty-state-icon {
    width: 80px;
    height: 80px;
    margin: 0 auto 1.5rem;
    display: flex;
    align-items: center;
    justify-content: center;
    background: var(--color-brand-primary-15);
    border-radius: 50%;
    color: var(--color-brand-primary);
}

.empty-state-icon svg {
    width: 40px;
    height: 40px;
}

.empty-state h3 {
    font-size: 1.25rem;
    font-weight: 600;
    color: var(--color-text-primary);
    margin: 0 0 0.5rem;
}

.empty-state p {
    color: var(--color-text-secondary);
    margin: 0 0 1.5rem;
}

.empty-state-actions {
    display: flex;
    gap: 0.75rem;
    justify-content: center;
    align-items: center;
    flex-wrap: wrap;
}

/* ========================================
   8. PAGINATION WRAPPER
   ======================================== */

.pagination-wrapper {
    display: flex;
    justify-content: center;
    margin-top: 2rem;
    margin-bottom: 2rem;
}

/* ========================================
   9. SELECTION & DRAG-AND-DROP
   ======================================== */

/* Selection box (lasso) */
.selection-box {
    position: absolute;
    border: 2px solid var(--color-info);
    background: var(--color-info-10);
    pointer-events: none;
    z-index: 9999;
}

.selection-box.hidden {
    display: none;
}

/* Hide overlay and menu during selection */
body.is-selecting .media-overlay,
body.is-selecting .media-icon-menu-container {
    display: none !important;
}

/* Hide hover actions while selection modifier is held, so Cmd/Ctrl/Alt multi-select
   does not fight with card action overlays. */
body.is-selection-modifier-active .media-overlay,
body.is-selection-modifier-active .media-icon-menu-container {
    display: none !important;
}

/* Prevent text selection during lasso selection */
body.is-selecting {
    user-select: none;
    -webkit-user-select: none;
    -moz-user-select: none;
    -ms-user-select: none;
}

/* Drop target highlight for categories */
.tree-node-content.drop-target {
    background: linear-gradient(90deg, var(--color-info-15) 0%, color-mix(in srgb, var(--color-info) 5%, transparent) 100%);
    border-left: none;
    transform: none;
    box-shadow:
        inset 4px 0 0 var(--color-info),
        inset 0 0 0 2px color-mix(in srgb, var(--color-info) 20%, transparent);
}

/* Selected card - blue overlay only, no white outline */
.media-card.selected {
    position: relative;
}

.media-card.selected::after {
    content: '';
    position: absolute;
    inset: 0;
    background: var(--color-info-40);
    pointer-events: none;
    border-radius: var(--radius-lg);
    z-index: 5;
    border: 2px solid var(--color-info);
}

/* Dragging state */
.media-card.selected.dragging {
    opacity: 0.4;
}

/* Drag ghost (preview) */
.drag-ghost {
    position: absolute;
    top: -1000px;
    left: -1000px;
    pointer-events: none;
    opacity: 0.95;
    filter: drop-shadow(0 20px 25px color-mix(in srgb, var(--color-bg-inverse) 25%, transparent));
}

.drag-ghost-stack {
    position: relative;
    width: 120px;
    height: 68px;
}

.drag-ghost-card {
    position: absolute;
    top: 0;
    left: 0;
    width: 120px;
    height: 68px;
    background: white;
    border-radius: 8px;
    overflow: hidden;
    box-shadow: 0 4px 12px color-mix(in srgb, var(--color-bg-inverse) 15%, transparent);
    border: 2px solid white;
    transition: transform 0.2s ease;
}

.drag-ghost-card img {
    width: 100%;
    height: 100%;
    object-fit: cover;
}

.drag-ghost-badge {
    position: absolute;
    top: -8px;
    right: -8px;
    min-width: 32px;
    height: 32px;
    background: linear-gradient(135deg, var(--color-info) 0%, color-mix(in srgb, var(--color-info) 80%, black) 100%);
    color: white;
    border-radius: 9999px;
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 14px;
    font-weight: 700;
    padding: 0 8px;
    box-shadow: 0 4px 12px var(--color-info-40),
                inset 0 1px 0 color-mix(in srgb, white 20%, transparent);
    border: 3px solid white;
    z-index: 10;
}

/* ========================================
   10. RESPONSIVE
   ======================================== */

@media (max-width: 1400px) {
    .media-grid {
        grid-template-columns: repeat(3, 1fr);
    }
}
