/* [REMOVAL-1980] D5 sweep: rules extracted from template <style> blocks.
   Each section header names its source template. */

/* ---- extracted from apps/templates/modals/annotation_modal.html ---- */
/* Legacy BS4 modal positioning hack removed — see [REMOVAL-1980] in
   modals/cancel_modal.html for the canonical rationale. */
/* [REMOVAL-1222] DS migration: raw z-index -> --z-* ladder tokens. */
#annotation_modalErrorLabel {
        text-align: center;
    }
    .campo-vacio {
        border: 2px solid red !important;
    }
    .error-text-label {
        color: red !important;
        font-weight: bold;
    }

/* ---- extracted from apps/templates/modals/batch_responsability_type_rule_modal.html ---- */
/* Legacy BS4 modal positioning hack removed — see [REMOVAL-1980] in
   modals/cancel_modal.html for the canonical rationale. */
/* [REMOVAL-1223] DS migration: raw z-index -> --z-* ladder tokens. */
/* [REMOVAL-1190] DS migration: hex literals replaced with design-system tokens. */
/* [REMOVAL-1190] DS migration: file-private tokens for feature-specific hues with no matching global design-system token (rule design-system.mdc S1). */
:root{ --c-0d6efd:#0d6efd; }

.batch-rule-step { display: none; }
    .batch-rule-step.active { display: block; }
    .batch-rule-checklist {
      max-height: 220px;
      overflow-y: auto;
      border: 1px solid var(--border-subtle);
      border-radius: 4px;
      padding: 8px 12px;
      background: var(--surface-1);
    }
    .batch-rule-checklist .form-check {
      padding: 3px 0 3px 1.5rem;
    }
    .batch-rule-checklist .form-check.child-area {
      padding-left: 2.8rem;
    }
    .batch-rule-checklist .form-check-label {
      font-size: 0.9rem;
      cursor: pointer;
    }
    .batch-rule-checklist .select-all-divider {
      border-bottom: 1px solid var(--border-subtle);
      margin-bottom: 6px;
      padding-bottom: 6px;
    }
    .batch-rule-preview {
      font-size: 0.95rem;
      padding: 8px 12px;
      background: var(--info-50);
      border-radius: 4px;
      text-align: center;
      margin-top: 8px;
    }
    .batch-rule-preview strong { color: var(--c-0d6efd); }
    .batch-review-table {
      max-height: 320px;
      overflow-y: auto;
    }
    .batch-review-table table { font-size: 0.88rem; }
    .batch-rule-duplicate {
      background: var(--risk-medium-bg) !important;
      text-decoration: line-through;
      opacity: 0.7;
    }
    .batch-step-indicator {
      display: flex;
      justify-content: center;
      gap: 8px;
      margin-bottom: 12px;
    }
    .batch-step-dot {
      width: 10px;
      height: 10px;
      border-radius: 50%;
      background: var(--border-subtle);
      transition: background 0.2s;
    }
    .batch-step-dot.active { background: var(--c-0d6efd); }
    .batch-duplicate-warning {
      padding: 8px 12px;
      background: var(--risk-medium-bg);
      border: 1px solid var(--warning-500);
      border-radius: 4px;
      font-size: 0.88rem;
      margin-top: 8px;
    }

/* ---- extracted from apps/templates/modals/cancel_modal.html ---- */
/* [REMOVAL-1980] Legacy BS4 modal positioning hack (position:fixed + top/left 50%% +
   translate + fake backdrop background + z-index override) removed — the canonical
   recipe (modal-dialog-centered + modal-dialog-scrollable + Bootstrap backdrop)
   now owns placement and stacking. Same removal applied across all WS4-owned modal
   templates carrying this pattern (22 files; cross-referenced where budget ran out). */
/* [REMOVAL-1224] DS migration: raw z-index -> --z-* ladder tokens. */

/* ---- extracted from apps/templates/modals/consolidated_detections_modal.html ---- */
/* [REMOVAL-1191] DS migration: hex literals replaced with design-system tokens. */

    .consolidated-det-card {
        border: 1px solid var(--border-subtle);
        border-radius: 8px;
        overflow: hidden;
        transition: box-shadow 0.2s;
        height: 100%;
    }
    .consolidated-det-card:hover {
        box-shadow: 0 4px 12px rgba(0,0,0,0.15);
    }
    .consolidated-det-card.representative {
        border-color: var(--warning-500);
        border-width: 2px;
    }
    .consolidated-det-card .card-img-top {
        height: 160px;
        object-fit: cover;
        background: var(--surface-1);
    }
    .consolidated-det-card .card-body {
        padding: 0.75rem;
    }
    .consolidated-det-card .card-body h6 {
        font-size: 0.85rem;
        margin-bottom: 0.25rem;
    }
    .consolidated-det-card .card-body small {
        font-size: 0.75rem;
        color: var(--neutral-500);
    }
    .consolidated-det-card .badge-representative {
        position: absolute;
        top: 8px;
        right: 8px;
        background: var(--warning-500);
        color: var(--text-primary);
        font-size: 0.7rem;
        padding: 3px 6px;
        border-radius: 4px;
        z-index: 1;
    }
    .consolidated-det-card .badge-confidence {
        position: absolute;
        top: 8px;
        left: 8px;
        font-size: 0.7rem;
        padding: 3px 6px;
        border-radius: 4px;
        z-index: 1;
    }

/* ---- extracted from apps/templates/modals/erase_flights_modal.html ---- */
/* Legacy BS4 modal positioning hack removed — see [REMOVAL-1980] in
   modals/cancel_modal.html for the canonical rationale. */
/* [REMOVAL-1225] DS migration: raw z-index -> --z-* ladder tokens. */

/* ---- extracted from apps/templates/modals/feedback_modal.html ---- */
/* [REMOVAL-1192] DS migration: hex literals replaced with design-system tokens. */

    #feedbackModal .modal-content {
        border-radius: 8px;
    }
    #feedbackModal .modal-header {
        border-bottom: 1px solid var(--border-subtle);
    }
    #feedbackModal .word-counter {
        font-size: 0.8rem;
        text-align: right;
        margin-top: 4px;
    }
    #feedbackModal .word-counter.over-limit {
        color: var(--danger-500);
        font-weight: 600;
    }
    #feedbackModal .screenshot-preview {
        max-width: 100%;
        max-height: 120px;
        margin-top: 8px;
        border-radius: 4px;
        display: none;
    }

/* ---- extracted from apps/templates/modals/llm_adhoc_review_modal.html ---- */
.llm-adhoc-card {
        border: 1px solid var(--border-subtle);
        border-radius: 8px;
        overflow: hidden;
        transition: box-shadow 0.2s;
        height: 100%;
    }
    .llm-adhoc-card:hover { box-shadow: 0 4px 12px rgba(0,0,0,0.15); }
    .llm-adhoc-card.selected { border-color: var(--primary-500); border-width: 2px; }
    .llm-adhoc-card .card-img-top {
        height: 160px;
        object-fit: cover;
        background: var(--surface-1);
        cursor: pointer;
    }
    .llm-adhoc-card .card-body { padding: 0.75rem; }
    .llm-adhoc-card .card-body h6 { font-size: 0.85rem; margin-bottom: 0.25rem; }
    .llm-adhoc-card .card-body small { font-size: 0.75rem; color: var(--neutral-500); }
    .llm-adhoc-card .llm-adhoc-desc {
        font-size: 0.72rem;
        color: var(--neutral-500);
        max-height: 3.2em;
        overflow: hidden;
        margin-top: 0.35rem;
    }
    .llm-adhoc-card .badge-pick {
        position: absolute;
        top: 8px;
        left: 8px;
        z-index: 2;
        background: var(--surface-1);
        border-radius: 4px;
        padding: 2px 5px;
    }
    .llm-adhoc-card .badge-confidence {
        position: absolute;
        top: 8px;
        right: 8px;
        font-size: 0.7rem;
        padding: 3px 6px;
        border-radius: 4px;
        z-index: 1;
    }
    .llm-adhoc-card .badge-evented {
        position: absolute;
        bottom: 8px;
        right: 8px;
        font-size: 0.65rem;
        padding: 3px 6px;
        border-radius: 4px;
        z-index: 1;
    }

/* ---- extracted from apps/templates/modals/map_areas_modal.html ---- */
/* Legacy BS4 modal positioning hack removed — see [REMOVAL-1980] in
   modals/cancel_modal.html for the canonical rationale. */
/* [REMOVAL-1228] DS migration: raw z-index -> --z-* ladder tokens. */
#mapAreasModalErrorLabel {
      text-align: center;
    }
    .campo-vacio {
      border: 2px solid red !important;
    }

/* ---- extracted from apps/templates/modals/map_areas_users_management.html ---- */
/* Legacy BS4 modal positioning hack removed — see [REMOVAL-1980] in
   modals/cancel_modal.html for the canonical rationale. */
/* [REMOVAL-1229] DS migration: raw z-index -> --z-* ladder tokens. */

/* ---- extracted from apps/templates/modals/multitemporal_modal.html ---- */
/* Legacy BS4 modal positioning hack removed — see [REMOVAL-1980] in
   modals/cancel_modal.html for the canonical rationale. */
/* [REMOVAL-1231] DS migration: raw z-index -> --z-* ladder tokens. */

/* ---- extracted from apps/templates/modals/multitemporal_modal_02.html ---- */
/* Legacy BS4 modal positioning hack removed — see [REMOVAL-1980] in
   modals/cancel_modal.html for the canonical rationale. */
/* [REMOVAL-1232] DS migration: raw z-index -> --z-* ladder tokens. */
/* [REMOVAL-1195] DS migration: hex literals replaced with design-system tokens. */

/* ---- extracted from apps/templates/modals/multitemporal_modal_02.html ---- */
.row-image-grid {
    display: -ms-flexbox; /* IE 10 */
    display: flex;
    -ms-flex-wrap: wrap; /* IE 10 */
    flex-wrap: wrap;
    padding: 0 4px;
  }
  
  /* Create two equal columns that sits next to each other */
  .column-image-grid {
    -ms-flex: 25%; /* IE 10 */
    flex: 25%;
    padding: 0 4px;
  }
  
  .column-image-grid img {
    margin-top: 8px;
    vertical-align: middle;
  }
  
  /* Style the buttons */
  .btn-image-grid {
    border: none;
    outline: none;
    padding: 10px 16px;
    background-color: var(--surface-2);
    cursor: pointer;
    font-size: 18px;
  }
  
  .btn-image-grid:hover {
    background-color: var(--risk-low-bg);
  }
  
  .btn-image-grid.active {
    background-color: var(--neutral-600);
    color: white;
  }

/* ---- extracted from apps/templates/modals/multitemporal_modal_03.html ---- */
/* Legacy BS4 modal positioning hack removed — see [REMOVAL-1980] in
   modals/cancel_modal.html for the canonical rationale. */
/* [REMOVAL-1233] DS migration: raw z-index -> --z-* ladder tokens. */

/* ---- extracted from apps/templates/modals/new_project.html ---- */
#addProjectModal .prj-dropzone {
    display: flex; flex-direction: column; align-items: center; justify-content: center;
    gap: 6px; text-align: center;
    padding: var(--space-5, 24px) var(--space-4, 16px);
    border: 1px dashed var(--border-default);
    border-radius: var(--radius-md, 8px);
    background: var(--surface-1);
    color: var(--text-muted);
    cursor: pointer;
    transition: border-color var(--dur-fast, 120ms) var(--ease-standard, ease),
                background var(--dur-fast, 120ms) var(--ease-standard, ease);
  }
  #addProjectModal .prj-dropzone:hover,
  #addProjectModal .prj-dropzone.is-dragover {
    border-color: var(--brand-500);
    background: var(--brand-50);
    color: var(--brand-700, var(--text-link));
  }
  #addProjectModal .prj-dropzone i.feather { font-size: 1.6rem; }
  #addProjectModal .prj-dropzone .prj-dropzone-hint { font-size: 0.8rem; }
  #addProjectModal .prj-dropzone .prj-dropzone-files {
    font-size: 0.8rem; color: var(--text-secondary); font-weight: 600;
    word-break: break-word;
  }
  #addProjectModal .prj-dropzone input[type="file"] { display: none; }
  #addProjectModal #projectsErrorLabel { text-align: center; }

/* ---- extracted from apps/templates/modals/permission_entities_management_modal.html ---- */
/* Legacy BS4 modal positioning hack removed — see [REMOVAL-1980] in
   modals/cancel_modal.html for the canonical rationale. */
/* [REMOVAL-1234] DS migration: raw z-index -> --z-* ladder tokens. */

/* ---- extracted from apps/templates/modals/profile_permissions_modal.html ---- */
/* Legacy BS4 modal positioning hack removed — see [REMOVAL-1980] in
   modals/cancel_modal.html for the canonical rationale. */
/* [REMOVAL-1235] DS migration: raw z-index -> --z-* ladder tokens. */
#profilePermissionsErrorLabel {
      text-align: center;
    }
    .campo-vacio {
      border: 2px solid red !important;
    }
    .error-text-label {
      color: red !important;
      font-weight: bold;
    }

/* ---- extracted from apps/templates/modals/project_modal_update.html ---- */
/* Analysis_22_05_2026.pdf #32: dropped the custom absolute
       positioning that pushed the modal to viewport center via CSS
       transform — Bootstrap 5 already centers modals correctly, and
       the legacy override broke z-index stacking when this modal was
       opened on top of another (#39). */
    #projectModalUpdateErrorLabel {
      text-align: center;
    }
    /* [REMOVAL-1007] Red hex literals migrated to design-system danger tokens
       (DESIGN-SYSTEM.md §2.2). */
    .campo-vacio {
      border: 2px solid var(--danger-500) !important;
    }
    .error-text-label {
      color: var(--danger-600) !important;
      font-weight: bold;
    }

/* ---- extracted from apps/templates/modals/responsability_type_rule_modal.html ---- */
/* Legacy BS4 modal positioning hack removed — see [REMOVAL-1980] in
   modals/cancel_modal.html for the canonical rationale. */
/* [REMOVAL-1236] DS migration: raw z-index -> --z-* ladder tokens. */
#responsabilityTypeRuleModalErrorLabel {
      text-align: center;
    }
    .campo-vacio {
      border: 2px solid red !important;
    }
    .error-text-label {
      color: red !important;
      font-weight: bold;
    }

/* ---- extracted from apps/templates/modals/responsability_type_rule_modal_update.html ---- */
/* Legacy BS4 modal positioning hack removed — see [REMOVAL-1980] in
   modals/cancel_modal.html for the canonical rationale. */
/* [REMOVAL-1237] DS migration: raw z-index -> --z-* ladder tokens. */
#responsabilityTypeRuleModalUpdateErrorLabel {
      text-align: center;
    }
    .campo-vacio {
      border: 2px solid red !important;
    }
    .error-text-label {
      color: red !important;
      font-weight: bold;
    }

/* ---- extracted from apps/templates/modals/save_modal.html ---- */
/* Legacy BS4 modal positioning hack removed — see [REMOVAL-1980] in
   modals/cancel_modal.html for the canonical rationale. */
/* [REMOVAL-1238] DS migration: raw z-index -> --z-* ladder tokens. */

/* ---- extracted from apps/templates/modals/search_flights_modal.html ---- */
/* Legacy BS4 modal positioning hack removed — see [REMOVAL-1980] in
   modals/cancel_modal.html for the canonical rationale. */
/* [REMOVAL-1239] DS migration: raw z-index -> --z-* ladder tokens. */

/* ---- extracted from apps/templates/modals/upload_images_fligth_modal.html ---- */
/* Legacy BS4 modal positioning hack removed — see [REMOVAL-1980] in
   modals/cancel_modal.html for the canonical rationale. */
/* [REMOVAL-1240] DS migration: raw z-index -> --z-* ladder tokens. */
/* [REMOVAL-1197] DS migration: hex literals replaced with design-system tokens. */
/* [REMOVAL-1197] DS migration: file-private tokens for feature-specific hues with no matching global design-system token (rule design-system.mdc S1). */
:root{ --c-007bff:#007bff; }

.floating-button-modal {
        width: 50px;
        height: 50px;
        border-radius: 50%;
        background-color: var(--c-007bff);
        color: white;
        font-size: 24px;
        border: none;
        box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
    }

/* ---- extracted from apps/templates/modals/user_profiles_management_modal.html ---- */
/* Legacy BS4 modal positioning hack removed — see [REMOVAL-1980] in
   modals/cancel_modal.html for the canonical rationale. */
/* [REMOVAL-1241] DS migration: raw z-index -> --z-* ladder tokens. */

/* ---- extracted from apps/templates/modals/user_profiles_modal.html ---- */
/* Legacy BS4 modal positioning hack removed — see [REMOVAL-1980] in
   modals/cancel_modal.html for the canonical rationale. */
/* [REMOVAL-1242] DS migration: raw z-index -> --z-* ladder tokens. */
#userProfilesErrorLabel {
      text-align: center;
    }
    .campo-vacio {
      border: 2px solid red !important;
    }
    .error-text-label {
      color: red !important;
      font-weight: bold;
    }

/* ---- extracted from apps/templates/modals/user_rule_modal.html ---- */
/* Legacy BS4 modal positioning hack removed — see [REMOVAL-1980] in
   modals/cancel_modal.html for the canonical rationale. */
/* [REMOVAL-1244] DS migration: raw z-index -> --z-* ladder tokens. */
#userRuleModalErrorLabel {
      text-align: center;
    }
    .campo-vacio {
      border: 2px solid red !important;
    }
    .error-text-label {
      color: red !important;
      font-weight: bold;
    }

/* ---- extracted from apps/templates/modals/user_rule_modal_update.html ---- */
/* Legacy BS4 modal positioning hack removed — see [REMOVAL-1980] in
   modals/cancel_modal.html for the canonical rationale. */
/* [REMOVAL-1245] DS migration: raw z-index -> --z-* ladder tokens. */
#userRuleModalUpdateErrorLabel {
      text-align: center;
    }
    .campo-vacio {
      border: 2px solid red !important;
    }
    .error-text-label {
      color: red !important;
      font-weight: bold;
    }

/* ---- extracted from apps/templates/modals/users_modal.html ---- */
/* Legacy BS4 modal positioning hack removed — see [REMOVAL-1980] in
   modals/cancel_modal.html for the canonical rationale. */
/* [REMOVAL-1246] DS migration: raw z-index -> --z-* ladder tokens. */
#usersModalErrorLabel {
      text-align: center;
    }
    /* [REMOVAL-1421] DS migration: raw `red` literals replaced with the
       --danger-600 token (design-system.mdc: no hex/named colour literals). */
    .campo-vacio {
      border: 2px solid var(--danger-600) !important;
    }
    .error-text-label {
      color: var(--danger-600) !important;
      font-weight: bold;
    }

/* ---- extracted from apps/templates/modals/users_modal_update.html ---- */
/* Legacy BS4 modal positioning hack removed — see [REMOVAL-1980] in
   modals/cancel_modal.html for the canonical rationale. */
/* [REMOVAL-1247] DS migration: raw z-index -> --z-* ladder tokens. */
#usersModalUpdateErrorLabel {
      text-align: center;
    }
    .campo-vacio {
      border: 2px solid red !important;
    }
    .error-text-label {
      color: red !important;
      font-weight: bold;
    }
