#playground {
    position: absolute;
    inset: 0;
    z-index: 5;
    overflow: hidden;
    pointer-events: none;
}

.bubble {
    position: absolute;
    border-radius: 50%;

    /* --- BASE STYLE --- */
    background-repeat: no-repeat;
    background-position: center;
    background-size: 150%;
    border: none;

    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    z-index: 10;
    pointer-events: auto;
    cursor: grab;
    touch-action: none;
    user-select: none;
    transition:
        box-shadow 0.3s ease,
        transform 0.2s cubic-bezier(0.175, 0.885, 0.32, 1.275),
        filter 0.3s ease;
    outline: none;
}

/* --- VARIANT: Transparent (Default) --- */
.bubble-transparent {
    background-color: transparent;
    filter: drop-shadow(0 0 15px rgba(255, 255, 255, 0.25));
}

/* --- VARIANT: Solid Color (If bg_color is set) --- */
.bubble-solid {
    box-shadow: 0 10px 25px rgba(0, 0, 0, 0.3);
}

/* --- INTERACTIONS --- */
.bubble:hover,
.bubble:focus {
    z-index: 50;
    transform: scale(1.1);
}

.bubble-transparent:hover {
    filter: drop-shadow(0 0 25px rgba(255, 255, 255, 0.6));
}

.bubble-solid:hover {
    box-shadow: 0 0 25px rgba(255, 255, 255, 0.4);
}

/* Dragging State */
.bubble.is-dragging {
    cursor: grabbing;
    z-index: 100;
    transform: scale(1.15);
}

.bubble-transparent.is-dragging {
    filter: drop-shadow(0 0 30px rgba(59, 130, 246, 0.6));
}

.bubble-solid.is-dragging {
    box-shadow: 0 0 30px rgba(59, 130, 246, 0.6);
}

.bubble-content {
    position: relative;
    z-index: 1;
    padding: 0;
    pointer-events: none;
}
