/* Utility CSS Classes
 * Common utility classes to replace inline styles across views
 */

/* Display Utilities */
.d-none {
    display: none !important;
}

.d-block {
    display: block !important;
}

.d-inline {
    display: inline !important;
}

.d-inline-block {
    display: inline-block !important;
}

.d-flex {
    display: flex !important;
}

.d-grid {
    display: grid !important;
}

/* Visibility Utilities */
.visible {
    visibility: visible !important;
}

.invisible {
    visibility: hidden !important;
}

/* Transform Utilities */
.rotate-0 {
    transform: rotate(0deg) !important;
}

.rotate-90 {
    transform: rotate(90deg) !important;
}

.rotate-180 {
    transform: rotate(180deg) !important;
}

.rotate-270 {
    transform: rotate(-90deg) !important;
}

/* Conditional Display Classes */
.show-on-search {
    display: none;
}

.show-on-search.active {
    display: block;
}

.hide-when-empty {
    display: block;
}

.hide-when-empty.empty {
    display: none;
}

/* Interactive States */
.expandable-content {
    display: none;
    transition: all 0.3s ease;
}

.expandable-content.expanded {
    display: block;
}

.collapsible-section {
    max-height: 0;
    overflow: hidden;
    transition: max-height 0.3s ease;
}

.collapsible-section.expanded {
    max-height: 500px;
}

/* Advanced Filters */
.advanced-filters {
    display: none;
    transition: all 0.3s ease;
}

.advanced-filters.visible {
    display: flex;
}

/* Location Details */
.location-details-content {
    display: none;
    animation: slideDown 0.3s ease;
}

.location-details-content.visible {
    display: block;
}

@keyframes slideDown {
    from {
        opacity: 0;
        transform: translateY(-10px);
    }
    to {
        opacity: 1;
        transform: translateY(0);
    }
}

/* Bulk Actions */
.bulk-actions-container {
    display: none;
    position: sticky;
    top: 0;
    z-index: 100;
    background: var(--surface-primary);
    border-bottom: 1px solid var(--border-color);
    padding: 1rem;
    margin: -1rem -1rem 1rem -1rem;
}

.bulk-actions-container.active {
    display: block;
}

/* Status Indicators */
.status-hidden {
    opacity: 0;
    pointer-events: none;
    transition: opacity 0.2s ease;
}

.status-visible {
    opacity: 1;
    pointer-events: auto;
    transition: opacity 0.2s ease;
}

/* Responsive Utilities */
@media (max-width: 768px) {
    .d-md-none {
        display: none !important;
    }

    .d-md-block {
        display: block !important;
    }

    .d-md-flex {
        display: flex !important;
    }
}

@media (max-width: 576px) {
    .d-sm-none {
        display: none !important;
    }

    .d-sm-block {
        display: block !important;
    }

    .d-sm-flex {
        display: flex !important;
    }
}

/* Loading States */
.loading-overlay {
    position: absolute;
    top: 0;
    left: 0;
    right: 0;
    bottom: 0;
    background: rgba(255, 255, 255, 0.8);
    display: none;
    align-items: center;
    justify-content: center;
    z-index: 1000;
}

.loading-overlay.active {
    display: flex;
}

.loading-spinner {
    width: 40px;
    height: 40px;
    border: 3px solid var(--border-color);
    border-top: 3px solid var(--accent-primary);
    border-radius: 50%;
    animation: spin 1s linear infinite;
}

@keyframes spin {
    0% { transform: rotate(0deg); }
    100% { transform: rotate(360deg); }
}

/* Search Result Conditional */
.search-result-dependent {
    display: none;
}

.search-active .search-result-dependent {
    display: block;
}

.search-active .search-result-dependent.inline {
    display: inline;
}

.search-active .search-result-dependent.flex {
    display: flex;
}

/* Clear Button Visibility */
.clear-button {
    display: none;
    transition: opacity 0.2s ease;
}

.has-filters .clear-button {
    display: inline-block;
}

.has-search .clear-button {
    display: inline-block;
}