/**
 * ============================================
 *  BLOB REVEAL MODULE - CSS
 * ============================================
 * 
 * REQUIRED DOM STRUCTURE:
 * 
 * <div class="reveal-root">
 *   <img src="me.png" class="layer-base" alt="Base">
 *   <img src="ironman.png" class="layer-reveal" alt="Reveal">
 *   <div class="ui-overlay">
 *     <h1 data-invert>Your Text</h1>
 *     <button data-invert>Click Me</button>
 *   </div>
 * </div>
 * 
 * ============================================
 */

/* === Container === */
.reveal-root {
    position: relative;
    overflow: hidden;
    /* User defines width/height */
}

/* === Image Layers (Pixel-Perfect Alignment) === */
.reveal-root .layer-base,
.reveal-root .layer-reveal {
    position: absolute;
    inset: 0;
    width: 100%;
    height: 100%;
    object-fit: cover;
    object-position: center;
    pointer-events: none;
    user-select: none;
}

.reveal-root .layer-base {
    z-index: 1;
}

.reveal-root .layer-reveal {
    z-index: 2;
    /* Mask will be applied dynamically via JS */
    -webkit-mask-image: none;
    mask-image: none;
    -webkit-mask-repeat: no-repeat;
    mask-repeat: no-repeat;
    /* Fallback: hidden until JS activates */
    opacity: 0;
    transition: opacity 0.3s ease;
}

.reveal-root .layer-reveal.blob-active {
    opacity: 1;
}

/* === UI Overlay (Clickable, Above Masks) === */
.reveal-root .ui-overlay {
    position: absolute;
    inset: 0;
    z-index: 10;
    pointer-events: none;
    /* Allow clicks to pass through wrapper */
}

.reveal-root .ui-overlay>* {
    pointer-events: auto;
    /* Re-enable for actual elements */
}

/* === Inversion Effect === */
[data-invert] {
    transition: color 0.3s ease, background-color 0.3s ease, filter 0.3s ease;
}

[data-invert].is-inverted {
    color: #ffffff !important;
    filter: drop-shadow(0 0 8px rgba(0, 0, 0, 0.5));
}

/* === Fallback for browsers without mask support === */
@supports not (mask-image: radial-gradient(black, transparent)) {
    .reveal-root .layer-reveal {
        clip-path: circle(80px at var(--blob-x, 50%) var(--blob-y, 50%));
        opacity: 1;
    }
}