/* Sagsstyring — drag-and-drop visual states (Phase 1).
   Only the chips/zones in the week calendar use these. Loaded globally;
   selectors are scoped enough that they're no-op on other pages. */

.b3b-event-card[draggable="true"] .b3b-event-btn,
.b3b-task-chip[draggable="true"] .b3b-task-chip-btn,
.b3b-loose-row[draggable="true"]   { cursor: grab; }

.b3b-event-card.is-dragging,
.b3b-task-chip.is-dragging,
.b3b-loose-row.is-dragging         { opacity: 0.4; }

.b3b-task-chip[data-locked="1"] .b3b-task-chip-btn { cursor: not-allowed; }
.b3b-task-chip[data-locked="1"] .b3b-task-chip-title::after { content: " 🔒"; font-size: 10px; }

.b3b-day-zone.is-drop-hover {
    outline: 2px dashed #198754;
    outline-offset: -2px;
    background: rgba(25, 135, 84, 0.06);
    border-radius: 4px;
    min-height: 32px;
}

/* Floating zones are always rendered now (so they're drop targets). Strip
   the dashed divider and spacing when they hold no chips — :has(*) is true
   only when there's an element child (whitespace text nodes don't count). */
.b3b-day-zone-floating-open:not(:has(*)),
.b3b-day-zone-floating-done:not(:has(*)) {
    padding: 0; margin: 0; border: none;
}

/* During an active drag, surface the empty zones so they're targetable. */
.b3b-sag-grid.is-dragging-active .b3b-day-zone:not(:has(*)) { min-height: 28px; }
.b3b-sag-grid.is-dragging-active .b3b-day-zone-floating-open:not(:has(*)),
.b3b-sag-grid.is-dragging-active .b3b-day-zone-floating-done:not(:has(*)) {
    border: 1px dashed #d0d0d0;
    border-radius: 4px;
}

body.b3b-dnd-busy                  { cursor: progress; }
body.b3b-dnd-busy .b3b-sag-grid *  { pointer-events: none; }
