/* UI typeface: IBM Plex Sans (variable, Latin) + IBM Plex Sans Arabic, self-hosted.
   Swapping the UI family is a one-line change to --font-ui below. */
@font-face {
    font-display: swap;
    font-family: "IBM Plex Sans";
    font-style: normal;
    font-weight: 100 700;
    src: url("../font/pax/IBMPlexSans-latin.woff2") format("woff2");
    unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}

@font-face {
    font-display: swap;
    font-family: "IBM Plex Sans";
    font-style: normal;
    font-weight: 100 700;
    src: url("../font/pax/IBMPlexSans-latin-ext.woff2") format("woff2");
    unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}

@font-face {
    font-display: swap;
    font-family: "IBM Plex Sans Arabic";
    font-style: normal;
    font-weight: 400;
    src: url("../font/pax/IBMPlexSansArabic-Regular-arabic.woff2") format("woff2");
    unicode-range: U+0600-06FF, U+0750-077F, U+0870-088E, U+0890-0891, U+0897-08E1, U+08E3-08FF, U+200C-200E, U+2010-2011, U+204F, U+2E41, U+FB50-FDFF, U+FE70-FE74, U+FE76-FEFC;
}

@font-face {
    font-display: swap;
    font-family: "IBM Plex Sans Arabic";
    font-style: normal;
    font-weight: 500;
    src: url("../font/pax/IBMPlexSansArabic-Medium-arabic.woff2") format("woff2");
    unicode-range: U+0600-06FF, U+0750-077F, U+0870-088E, U+0890-0891, U+0897-08E1, U+08E3-08FF, U+200C-200E, U+2010-2011, U+204F, U+2E41, U+FB50-FDFF, U+FE70-FE74, U+FE76-FEFC;
}

/* Design tokens. Colors are exported at runtime by applyThemeCssVars()
   (config.js) as --color-*, so they follow the active Vuetify theme. */
:root {
    --font-ui: "IBM Plex Sans", "IBM Plex Sans Arabic", sans-serif;
    --font-mono: "IBM Plex Mono", Menlo, Consolas, monospace;
    --radius-control: 6px;
    --radius-card: 8px;
    --shadow-overlay: 0 8px 30px rgba(16, 32, 30, 0.08);
    --motion-fast: 150ms ease-out;
    --motion-dialog: 200ms ease-out;
}

/* Inria Sans - brand wordmark / headline font */
@font-face {
    font-display: swap;
    font-family: "Inria Sans";
    font-style: normal;
    font-weight: 300;
    src: url("../font/pax/InriaSans-Light.woff2") format("woff2");
}

@font-face {
    font-display: swap;
    font-family: "Inria Sans";
    font-style: normal;
    font-weight: 400;
    src: url("../font/pax/InriaSans-Regular.woff2") format("woff2");
}

@font-face {
    font-display: swap;
    font-family: "Inria Sans";
    font-style: normal;
    font-weight: 700;
    src: url("../font/pax/InriaSans-Bold.woff2") format("woff2");
}

/* IBM Plex Mono - nav / label font */
@font-face {
    font-display: swap;
    font-family: "IBM Plex Mono";
    font-style: normal;
    font-weight: 400;
    src: url("../font/pax/IBMPlexMono-Regular.woff2") format("woff2");
}

.pm-brand-font {
    font-family: "Inria Sans", sans-serif;
}

.pm-nav-font {
    font-family: "IBM Plex Mono", Menlo, Consolas, monospace;
    text-transform: uppercase;
    letter-spacing: .12em;
}

.v-application {
    font-family: var(--font-ui);
}

.theme--dark .jsondiffpatch-delta {
    color: #000;
    filter: invert(1);
}

.description {
    color: #323232;
    font-family: var(--font-ui);
    font-weight: 500;
}

.v-toolbar {
    background-color: white;
}

.v-theme--dark .v-toolbar {
    background-color: #212121;
}

button.swh {
    transform: scale(0.9);
}

.rich-description,
.actor-description {
    font-family: var(--font-ui);
    font-size: 14px;
}

.rich-description img {
    max-width: 100%;
    margin: 2px;
    height: auto !important;
}

#feeds-dt tr, #export-dt tr, #log-dt tr, #users-dt tr {
    cursor: pointer;
}


.event-card {
    display: flex;
    flex-direction: column;
}

[v-cloak] {
    display: none;
}

.filepond--root {
    cursor: pointer;
}

.filepond--drop-label:hover {
    background: #ececec;
}

.filepond--drop-label {
    font-size: 14px;
}

.fp-wrap .filepond--root .filepond--drop-label {
    min-height: 120px;
}

/* draggable dialogs */
.v-dialog.v-dialog--active .card-header {
    /* cursor: grab; */
    z-index: 10;
}

.v-dialog.v-dialog--active .card-header:active {
    /* cursor: grabbing; */
}

/* resolve map overlap conflict */
.v-dialog.v-dialog--active .card-header {
    z-index: 1200;
}

/* media images */
.media-img,
.media-vid {
    cursor: pointer;
}

.media-img:hover,
.media-vid:hover {
    filter: saturate(1.2) brightness(110%);
}

#vid-wrap {
    width: 440px;
    height: 330px;
}

.plyr {
    margin: auto;
    width: 100%;
    height: auto;
    max-height: 440px;
}

#player {
    object-fit: contain;
}

/* screenshots */

.sc-wrap {
    text-align: center;
    border: 2px dashed #d8d8d8;
    padding: 10px;
    margin: 8px;
    flex-direction: column;
    width: 200px;
    height: auto;
    transition: all 0.2s ease-in-out;
}

.sc-wrap canvas {
    width: 100%;
    max-height: 120px;
    object-fit: contain;
}

.crop {
    text-align: center;
}

#cropImg {
    max-width: 100%;
}

#screenshots {
    display: flex;
    overflow-x: scroll;
    flex-wrap: wrap;
}

.simple-video {
    width: 191px;
    height: 140px;
    object-fit: cover;
}

.ajax-spinner {
    width: 50px;
    height: 50px;
    margin: auto;
    background: url(data:image/gif;base64,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) no-repeat center;
}

#iplayer video {
    max-width: 100%;
    /*height: 360px;*/
    object-fit: contain;
}

/* query builder reset styles */

.vue-query-builder {
    padding: 5px;
}

.vue-query-builder label {
    margin: 5px;
}

.vue-query-builder .form-group {
    margin: 2px 0;
}

.vue-query-builder select {
    height: 32px;
    padding: 6px 10px;
    /* The 6px vertically centers text on FF, ignored by Webkit */
    background-color: #fff;
    border: 1px solid #d1d1d1;
    border-radius: 4px;
    box-shadow: none;
    box-sizing: border-box;
    -webkit-appearance: menulist;
    margin: 5px;
    display: inline-block;
}

.vue-query-builder button[type="button"] {
    display: inline-block;
    height: 32px;
    padding: 0 20px;
    color: #555;
    text-align: center;
    font-size: 11px;
    font-weight: 600;
    line-height: 32px;
    letter-spacing: 0.1rem;
    text-transform: uppercase;
    text-decoration: none;
    white-space: nowrap;
    background-color: transparent;
    border-radius: 4px;
    border: 1px solid #bbb;
    cursor: pointer;
    box-sizing: border-box;
    margin: 2px;
}

.vue-query-builder button[type="button"]:hover {
    color: #333;
    border-color: #888;
    outline: 0;
}


.vue-query-builder input[type=text] {
    height: 38px;
    padding: 6px 10px;
    /* The 6px vertically centers text on FF, ignored by Webkit */
    background-color: #fff;
    border: 1px solid #D1D1D1;
    border-radius: 4px;
    box-shadow: none;
    box-sizing: border-box;
}

.vue-query-builder button.pull-right {
    font-size: 18px;
}

.vue-query-builder .children {
    padding: 20px;
}

.vue-query-builder button.pull-right {
    float: right;
}

[dir="rtl"] .vue-query-builder button.pull-right {
    float: left;
}


.smaller {
    transform: scale(0.9);
}


/* Remove default calendar icon from input type="date" */
input[type="date"]::-webkit-inner-spin-button,
input[type="date"]::-webkit-calendar-picker-indicator {
    display: none;
    -webkit-appearance: none;
}

input[type="date"]::-webkit-input-placeholder {
    visibility: hidden !important;
}


/* fix conflict between tinymce and Vuetify */


.tox-dialog__disable-scroll .v-dialog__content {
    z-index: 203 !important;
}


/* tfa fixes */

#help_setup li {
    list-style: none;
}

.theme--dark .Password__field {
    filter: invert(1) hue-rotate(180deg);

}

#app .Password__badge {
    text-align: center;
    height: 19px;
}

.search-toolbar {
    position: sticky;

    bottom: 0;
    z-index: 100;
}

.search-card {
    margin-bottom: 140px;
}


.circle-marker {
    opacity: 0.8;
}

.leaflet-popup-content .chipwrap {
    white-space: normal;
    height: auto;
}

.leaflet-container {
    min-height: 300px;
    /* Adjust as needed */
}


/* quick initial dark mode support for leaflet map */

.theme--dark .map-legend .caption i {
    filter: brightness(0.6) invert(1) contrast(3) hue-rotate(200deg) saturate(0.3) brightness(0.7);
}


/* csv import */

.drag-area {
    display: block;
    padding: 2px;
    min-width: 75px;


}

.ghost,
.sortable-ghost {
    opacity: 0.3;
    background: #c8ebfb;
}

.flip-list-move {
    transition: transform 0.5s;
}

.no-move {
    transition: transform 0s;
}


.list-group {
    min-height: 26px;
}

.list-group-item {
    cursor: move;
}

.list-group-item i {
    cursor: pointer;
}

.drop {
    min-width: 40px;
    min-height: 28px;
    display: grid;
    place-content: center;
    background: #fcfce9;
    box-shadow: inset 3px 2px 13px -8px #00000096;
    border: 1px solid #ddd;
    border-radius: 9px;
    margin: 0 5px;

}

.drop .v-chip.ma-1 {
    margin: 0 !important;
}

.d-caption {
    padding: 2px;
    font-weight: bold;
}


.csv-panel {
    overflow-y: scroll;
    height: calc(100vh - 260px);

}

.d-sep {
    border: 1px solid #000;
    border-radius: 4px;
    margin: auto;
    height: 26px;
    min-width: 48px;
    padding: 2px;
    text-align: start;
}


.media-card .etag {
    text-overflow: ellipsis;
    white-space: nowrap;
    overflow: hidden;


}


.media-grid {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
    gap: 10px;
}


/* sticky related items headers */

.header-sticky {
    position: sticky;
    top: 90px;
    z-index: 10000;
    background: rgba(250, 250, 250, 1);
}

.theme--dark .header-sticky {
    background: rgba(51, 51, 51, 1);
}

.v-sheet.header-fixed {
    position: sticky;
    top: 0;
    z-index: 100000;
    border-bottom: 3px solid #dddddd75;

    background: rgba(255, 255, 255, 1);

}

.universal .v-card .v-sheet.header-fixed {
    top: 66px
}

.system-admin nav.v-navigation-drawer.v-navigation-drawer--clipped {
    z-index: 1000000;

}

.v-card a {
    text-decoration: none;
}


#graph-layout {
    display: grid;
    grid-template-rows: auto 1fr auto;
    overflow: hidden;
    height: 100%;
    background: #fff;
}

.graph-footer {
    position: absolute;
    bottom: 1px;
    inset-inline-start: 1px;
    backdrop-filter: blur(10px);
    background: rgba(255, 255, 255, 0.23);
    padding: 10px;
}


#graph-layout .force-graph-container {


    overflow: hidden;
}

#graph {
    height: 100%;

}

#graph canvas {
    height: 100% !important;
}

.graph-node {
    max-width: 80px;
    padding: 1px 2px;
    text-overflow: ellipsis;
    overflow: hidden;
    background-color: rgba(0, 0, 0, 0.28);
    white-space: nowrap;
    border-radius: 3px;
    font-size: 9px;
    text-align: center;
    color: rgba(255, 255, 255, 0.7);


}

.graph-node:hover {
    color: #fff;
    white-space: break-spaces;

}


.graph-legend .caption {
    display: flex;
    align-items: center;
}

/* better dark mode style for media thumbs */

.theme--dark .media-vid i {
    background: #111;
}

/* better styles for inline tables (rich text) in preview cards */

.rich-description table td,
.rich-description table th {
    padding: 4px;
}

/* map feed ids */
span.map-bid {
    background: #f0f0f0;
    border: 1px rgba(109, 109, 109, 0.84);
    padding: 3px;
    border-radius: 5px;
}

span.map-bid:empty {
    display: none;
}


/* access roles styles */
.restricted {
    opacity: 0.5;
    filter: blur(1px);
    font-style: italic;
}


.log-dialog {
    background-color: lightblue;
    max-width: 770px;
    overflow: auto;
}


.Password__field--disabled {
    opacity: 0.6
}


/* system dashboard */
.fixed-card {
    height: calc(100vh - 140px);
    overflow: scroll;
    z-index: 100;
}

/* config diff */

.system-admin div.jsondiffpatch-child-node-type-object:before,
.system-admin div.jsondiffpatch-child-node-type-object:after {
    content: '';

}

.system-admin div.jsondiffpatch-child-node-type-array:before,
div.jsondiffpatch-child-node-type-array:after {
    content: '';
}

.system-admin .jsondiffpatch-delta {
    font-family: var(--font-ui);
}

.system-admin .jsondiffpatch-delta ul {
    padding: 0;
    font-size: 16px;
    display: flex;
    flex-wrap: wrap;
}

.system-admin .jsondiffpatch-delta ul ul {
    display: flex;
    flex-wrap: wrap;
}

.system-admin .jsondiffpatch-property-name {
    color: #000;
    font-weight: bold;
}

.system-admin .jsondiffpatch-left-value pre {
    padding: 4px;
    opacity: 0.3;
    text-decoration: none;
}

.system-admin .jsondiffpatch-deleted {
    opacity: 0.3
}

.system-admin .jsondiffpatch-deleted pre {
    text-decoration: none;
}

.system-admin .jsondiffpatch-right-value pre {
    color: #000;
    /*background: rgba(238, 238, 238, 0.45);*/
    padding: 4px;
    font-weight: bold;
}

.system-admin .jsondiffpatch-node li {
    display: flex;
    align-items: center;
    /*padding: 8px;*/
    /*box-shadow: rgba(0, 0, 0, 0.05) 0px 6px 24px 0px, rgba(0, 0, 0, 0.08) 0px 0px 0px 1px;*/
    margin: 8px 5px;
}

.system-admin .jsondiffpatch-node li:hover {
    /*box-shadow: rgba(0, 0, 0, 0.05) 0px 6px 24px 0px, rgba(0, 0, 0, 0.55) 0px 0px 0px 1px;*/
}

.system-admin .jsondiffpatch-node-type-array .jsondiffpatch-property-name {
    display: none;
}

.system-admin .jsondiffpatch-node-type-array pre:after {
    display: none;
}

.system-admin .jsondiffpatch-textdiff-deleted pre {
    text-decoration: none;
    font-style: italic;
}

.system-admin .jsondiffpatch-delta pre {
    padding: 4px;
    border-radius: 3px;
}

.system-admin .jsondiffpatch-value pre:after {
    display: none;
}

.system-admin .change-item {
    transition: all 0.22s ease-in-out;
    box-shadow: rgba(0, 0, 0, 0.1) 0px 1px 3px 0px, rgba(0, 0, 0, 0.06) 0px 1px 2px 0px;
}

.system-admin .change-item:hover {
    scale: 1.01;
}


.hardware-device {
    transition: all 0.25s ease-in-out;
}

.hardware-device:hover {
    scale: 1.01;
    cursor: pointer;
}

.sticky-tabs {
    position: sticky;
    top: 64px;
    z-index: 5;
    background-color: white;
    box-shadow: rgba(33, 35, 38, 0.1) 0px 10px 10px -10px;
}

.system-admin #geomap {
    z-index: 0;
}


.pswp img {
    max-width: none;
    object-fit: contain;
}

.tox-tinymce-aux {
    z-index: 10000 !important;
}

/* A Feed, Actor or Incident opened from its list, in the middle of the screen
   (partials/feed_drawer.html, actor_drawer.html, incident_drawer.html). */
.entity-dialog .entity-dialog__body {
    max-height: calc(100vh - 48px);
    overflow-y: auto;
}

.v-dialog--fullscreen .entity-dialog__body {
    max-height: 100vh;
    border-radius: 0 !important;
}

/* Main menu: section headings above each group of items (nav-drawer.html). */
.app-nav .app-nav__section {
    font-size: 0.72rem;
    font-weight: 600;
    letter-spacing: 0.04em;
    text-transform: uppercase;
    min-height: 32px;
    padding-inline-start: 16px;
}

.scrollable-nav {
    overflow-y: auto !important;
    max-height: calc(100vh - 80px - 0.75rem);
}


/* steppers enhancements */
.v-stepper > .v-window {
    margin: 0;
}

/* darkmode leaflet hack */
.v-theme--dark .leaflet-container {
    filter: invert(90%) brightness(1.2) contrast(1.2)
}


/* sticky bottom bars */

.sticky-bottom-bar {
    position: sticky;
    bottom: 0;
    z-index: 100;
    background: rgba(255, 255, 255, 0.9);
    box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
}

/* Advanced search redesign */
.search-box-redesign {
    padding: 8px 0;
}

.search-box-redesign .search-panels .v-expansion-panel-title {
    min-height: 48px;
    padding: 12px 16px;
}

.search-box-redesign .search-panels .v-expansion-panel-text__wrapper {
    padding: 12px 16px 16px;
}

.search-box-redesign .search-panels .v-expansion-panel {
    margin-bottom: 2px;
}

.search-box-redesign .search-panels .v-expansion-panel--active > .v-expansion-panel-title {
    border-bottom: 1px solid rgba(0, 0, 0, 0.08);
}

/* improved flask security styles */
.security form ul {
    list-style: none;
    margin: 12px 0;
    line-height: 2.1;
}


.security form *:has(input[type="radio"]) {
    display: flex;
    align-items: center;
    gap: 10px;
    font-size: 16px

}

.security form ul *:has(input[type="radio"]) input {
    scale: 1.3;
}

.custom-play-icon.dark-play-icon {
    color: black !important;
}

.custom-play-icon.light-play-icon {
    color: white !important;
}

.v-card--reveal {
    align-items: center;
    top: 0;
    justify-content: center;
    opacity: .9;
    position: absolute;
    width: 100%;
}

.video-js:has(audio) {
    background-color: #00000000 !important;
}

.drop-indicator {
    position: absolute;
    width: 2px;  /* Changed from height to width */
    height: 100%; /* Full height of container */
    background-color: rgba(var(--v-theme-primary), 0.5);
    transition: all 0.2s ease;
    opacity: 0;
    pointer-events: none;
    z-index: 100;
}

.drop-indicator.active {
    opacity: 1;
}

/* CSS Helpers */
.overflow-unset { overflow: var(--v-overflow-unset); }
.z-1 { z-index: var(--v-z-1); }
.z-100 { z-index: var(--v-z-100); }
.inset-inline-start-0 { inset-inline-start: 0 !important; }
.inset-inline-end-0 { inset-inline-end: 0 !important; }
.h-fit { height: var(--v-h-fit); }
.pointer-events-none { pointer-events: var(--v-pointer-events-none) !important; }
.pointer-events-auto { pointer-events: var(--v-pointer-events-auto) !important; }
.rounded-16 { border-radius: var(--v-rounded-16) !important; }
.rounded-12 { border-radius: var(--v-rounded-12) !important; }
.rounded-10 { border-radius: var(--v-rounded-10) !important; }

/* wrap chips */
.flex-chips {
    display: flex;
    gap: 8px;
    flex-wrap: wrap;
}
.flex-chip {
    height: auto !important;
    padding-top: 4px !important;
    padding-bottom: 4px !important;
    white-space: normal !important;
}
.flex-chip .v-chip__content {
    overflow-wrap: anywhere;
    white-space: normal;
}

/* Lightgallery.js place above all dialogs */
.lg-backdrop,
.lg-outer {
    z-index: 3001 !important;
}
.lg-toolbar {
    backdrop-filter: blur(10px) saturate(180%);
    background-color: rgba(0, 0, 0, 0.8) !important;
    border-bottom: 1px solid rgba(255, 255, 255, 0.1);
}

/* Form builder drag-n-drop */
.drop-line {
    position: relative;
}

.drop-line-above::before,
.drop-line-below::before {
    content: "";
    position: absolute;
    left: 0;
    right: 0;
    height: 2px;
    background: dodgerblue;
}

.drop-line-above::before {
    top: 0;
}

.drop-line-below::before {
    bottom: 0;
}

.drop-line-left::before,
.drop-line-right::before {
    content: "";
    position: absolute;
    top: 0;
    bottom: 0;
    width: 2px;
    background: dodgerblue;
}

.drop-line-left::before {
    left: 0;
}

.drop-line-right::before {
    right: 0;
}

/* Line clamp */
.no-clamp {
    -webkit-line-clamp: unset !important;
}
.line-clamp-1 {
    display: -webkit-box;
    -webkit-line-clamp: 1;
    -webkit-box-orient: vertical;
    overflow: hidden;
}

/* Diff dialog */
.diff-dialog-content .jsondiffpatch-delta pre {
    white-space: normal;
    word-break: break-word;
}

.form-grid {
  display: grid;
  grid-template-columns: repeat(2, 1fr); /* 2 cols */
  grid-auto-rows: minmax(60px, auto);
}

.grid-col-span-1 {
  grid-column: span 1;
}
.grid-col-span-2 {
  grid-column: span 2;
}
.grid-col-2 {
  grid-column: 2;
}

.grid-row-span-1 {
  grid-row: span 1;
}
.grid-row-span-2 {
  grid-row: span 2;
}

.v-theme--light .v-treeview .v-list-item.v-treeview-item {
  border-bottom: 1px solid rgba(0, 0, 0, 0.08);
}

.v-theme--dark .v-treeview .v-list-item.v-treeview-item {
  border-bottom: 1px solid rgba(255, 255, 255, 0.12);
}

.map-visualization-dialog .v-overlay__content {
    overflow: hidden;
}

.docx-preview {
    background-color: rgb(var(--v-theme-surface));
    box-shadow: 0 3px 1px -2px var(--v-shadow-key-umbra-opacity,#0003), 0 2px 2px 0 var(--v-shadow-key-penumbra-opacity,#00000024), 0 1px 5px 0 var(--v-shadow-key-ambient-opacity,#0000001f) !important;
    border-radius: var(--v-border-radius, 4px);
    margin-left: auto;
    margin-right: auto;
    padding: calc(var(--v-spacing, 4px) * 16);
}
.docx-preview p {
    margin-top: 1em;
    margin-bottom: 1em;
}

/* Shared temporary-attention tint: the dynamic form builder uses it via
   Vue's reactive :class binding when a field is just added; other pages
   (e.g. system-administration's settings search) toggle it imperatively
   with classList.add/remove. One definition so both look identical. */
.temporary-highlight {
    position: relative;
}

.temporary-highlight::after {
    animation: temporary-highlight-tint 2s ease-out 400ms both;
    background-color: rgba(33, 150, 243, 0.14);
    content: "";
    inset: 0;
    pointer-events: none;
    position: absolute;
}

@keyframes temporary-highlight-tint {
    0%, 70% {
        opacity: 1;
    }
    100% {
        opacity: 0;
    }
}

/* Secondary-trauma protection: media desaturated by default, revealed by user action */
.media-grayscale img,
.media-grayscale video {
    filter: grayscale(100%);
}

.media-grayscale-thumb {
    filter: grayscale(100%);
}

/* The media stage in a Feed or Actor (InlineMediaRenderer fit-media). A video keeps its
   own proportions, centred, up to the stage's maximum height (the renderer sets its
   aspect-ratio and width); other files get that height, and a sound file a short bar.
   A tall phone video is still given the width the player's control bar needs, with the
   hovered volume slider, and is shown with narrow bands at its sides. */
.media-stage {
    --media-stage-max-height: min(60vh, 540px);
}

.media-stage--video {
    margin-inline: auto;
    min-width: min(100%, 360px);
    max-height: var(--media-stage-max-height);
    background: #000;
}

.media-stage--file {
    height: var(--media-stage-max-height);
}

.media-stage--audio {
    height: 180px;
}

/* A video that cannot play says so over the whole stage. One whose picture the browser
   cannot show says so in a banner along the top, which leaves the player's play button,
   control bar and menus free, since its sound can still play. */
.media-stage__notice {
    position: absolute;
    inset: 0;
    z-index: 2;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: 12px;
    padding: 16px;
    text-align: center;
    background: rgb(var(--v-theme-surface-alt));
    color: rgb(var(--v-theme-on-surface));
}

.media-stage__notice--banner {
    inset: 0 0 auto 0;
    flex-direction: row;
    flex-wrap: wrap;
    gap: 8px 12px;
    padding: 8px 12px;
}

/* The item open in the window or panel, marked in its list (feeds.html, incidents.html rowClass). */
.entity-row-current > td {
    background: rgb(var(--v-theme-surface-alt));
}

.entity-row-current > td:first-child {
    box-shadow: inset 3px 0 0 rgb(var(--v-theme-primary));
}

.v-locale--is-rtl .entity-row-current > td:first-child {
    box-shadow: inset -3px 0 0 rgb(var(--v-theme-primary));
}

/* An incident's header stays in view while its window or panel scrolls (IncidentCard). The card
   clips its corners without becoming the scroll container, which would keep the header still. */
.v-card.incident-card {
    overflow: clip;
}

.incident-card__header {
    position: sticky;
    top: 0;
    z-index: 2;
}

.incident-card__title:focus-visible {
    outline: 2px solid rgb(var(--v-theme-primary));
    outline-offset: 2px;
}

/* A list row reached with the keyboard (incidents.html rowClass); drawn inside the
   row, because a table clips an outline around a whole row. */
.v-data-table tbody > tr[tabindex]:focus-visible {
    outline: 2px solid rgb(var(--v-theme-primary));
    outline-offset: -2px;
}

/* The open file in the strip of files under the stage (MediaCard active). */
.media-card--active {
    outline: 2px solid rgb(var(--v-theme-primary));
    outline-offset: -2px;
}

/* Time-coded annotations under a video: one mark per annotated stretch */
.media-annotations__timeline {
    position: relative;
    height: 10px;
    border-radius: var(--radius-control);
    background: rgb(var(--v-theme-surface-alt));
    border: 1px solid rgb(var(--v-theme-border));
    overflow: hidden;
}

.media-annotations__mark {
    position: absolute;
    top: 0;
    bottom: 0;
    min-width: 3px;
    opacity: 0.85;
    cursor: pointer;
}

.media-annotations__mark:hover {
    opacity: 1;
}

/* Quick search palette (Cmd/Ctrl+K) */
.quick-search-dialog {
    align-self: flex-start;
    margin-top: 12vh;
}

.quick-search__body {
    max-height: min(60vh, 480px);
    overflow-y: auto;
}

.quick-search__dot {
    display: inline-block;
    width: 10px;
    height: 10px;
    border-radius: 50%;
    margin-inline-end: 12px;
}

.quick-search__kbd {
    font-family: var(--font-mono);
    font-size: 11px;
    line-height: 1;
    padding: 2px 5px;
    border: 1px solid var(--color-border);
    border-bottom-width: 2px;
    border-radius: 4px;
    background: var(--color-surface-alt);
}

/* Dashboard (dashboard.html). Tiles, panels and lists sit on the page
   background and use the theme tokens exported by applyThemeCssVars(). */
.dash__title {
    font-size: 24px;
    font-weight: 500;
    line-height: 1.2;
    color: var(--color-ink);
    margin: 0;
}

.dash__subtitle,
.dash__section-hint {
    font-size: 13px;
    color: var(--color-muted);
}

.dash__section-title {
    font-size: 15px;
    font-weight: 500;
    color: var(--color-ink);
}

.dash__wizard,
.dash-tile,
.dash-panel {
    border: 1px solid var(--color-border);
    border-radius: var(--radius-card);
    background: var(--color-surface);
}

.dash-tile {
    height: 100%;
    transition: border-color var(--motion-fast), transform var(--motion-fast);
}

.dash-tile:hover {
    border-color: var(--color-secondary);
    transform: translateY(-1px);
}

.dash-tile__label {
    display: flex;
    align-items: center;
    font-size: 12px;
    font-weight: 500;
    letter-spacing: .02em;
    color: var(--color-muted);
}

.dash-tile__dot {
    display: inline-block;
    width: 8px;
    height: 8px;
    border-radius: 50%;
    margin-inline-end: 8px;
    flex: 0 0 auto;
}

.dash-tile__value {
    font-size: 30px;
    font-weight: 500;
    line-height: 1.1;
    color: var(--color-ink);
    margin-top: 6px;
    font-variant-numeric: tabular-nums;
}

.dash-tile__delta {
    font-size: 12px;
    color: var(--color-muted);
    margin-top: 4px;
}

.dash-tile__delta--active {
    color: var(--color-success);
}

.dash-list .dash-list__item {
    border-top: 1px solid var(--color-border);
}

.dash-activity__user {
    font-weight: 500;
    color: var(--color-ink);
}

.dash-activity__action {
    font-family: var(--font-mono);
    letter-spacing: .04em;
}

.dash-activity__subject {
    color: var(--color-text);
}

.dash-empty {
    display: flex;
    flex-direction: column;
    align-items: center;
    padding: 32px 16px;
    font-size: 13px;
    color: var(--color-muted);
}

.dash__footer {
    color: var(--color-muted);
}

.dash__footer a {
    color: inherit;
}

/* Entity list toolbars (Feeds / Actors / Incidents): tabs, search, filters, primary action. */
.entity-toolbar .entity-search {
    flex: 1 1 260px;
    max-width: 420px;
}

.entity-toolbar .entity-tabs,
.entity-toolbar .entity-view-switch,
.entity-toolbar .entity-filters-btn {
    flex: none;
}

/* Upload dropzone (Feeds/Actors media, imagery, etc.): Dropzone.js auto-generates its empty-state
   button with `color: inherit`, which lands as white-on-white here and renders as blank, clickable
   space -- override with real colours and add an icon so it reads as a button. dropzone.min.css is
   vendored and not edited directly; !important wins over its same-specificity .dz-button rule
   regardless of <link> order. */
.dropzone {
    border-style: dashed !important;
    transition: border-color 0.15s, background-color 0.15s;
}

.dropzone.dz-clickable:hover {
    border-color: rgb(var(--v-theme-primary)) !important;
    background: rgba(var(--v-theme-primary), 0.04) !important;
}

.dropzone .dz-message .dz-button {
    display: inline-flex !important;
    align-items: center;
    gap: 0.5em;
    color: rgb(var(--v-theme-primary)) !important;
    font-size: 1rem;
    font-weight: 500;
}

.dropzone .dz-message .dz-button::before {
    font: normal normal normal 22px/1 "Material Design Icons";
    content: "\F011D"; /* mdi-tray-arrow-up */
}

/* Sites: the list, the site page and the shared new / edit dialog */
.sites-search { flex: 1 1 240px; }
.sites-filter { flex: 0 1 170px; }
.sites-size { max-width: 150px; }
.sites-date { min-width: 200px; max-width: 220px; }
.sites-location { flex: 1 1 220px; }
.sites-pair { display: flex; width: 72px; height: 36px; border-radius: 4px; overflow: hidden; background: rgb(var(--v-theme-surface-variant)); flex: none; }
.sites-pair img { width: 50%; height: 100%; object-fit: cover; }
.sites-pair img + img { border-left: 1px solid rgb(var(--v-theme-surface)); }
.sites-pair-lg { width: 120px; height: 60px; }
.sites-item { color: inherit; border: 1px solid rgb(var(--v-theme-border, 226, 222, 215)); border-radius: 8px; padding: 6px 8px; }
a.sites-item:hover { background: rgb(var(--v-theme-surface-variant)); }
.sites-map { height: 320px; width: 100%; border-radius: 4px; }
.sites-form-map { height: 460px; width: 100%; border-radius: 4px; }
.sites-form-map.drawing { cursor: crosshair; }
.sites-candidate { border-bottom: 1px solid rgb(var(--v-theme-border, 226, 222, 215)); }
.sites-candidate-thumb { width: 72px; height: 48px; object-fit: cover; border-radius: 4px; background: #000; flex: none; }
.sites-radio { flex: none; }
.sites-record-thumb { width: 120px; height: 60px; object-fit: cover; border-radius: 4px; background: #000; flex: none; }
.sites-step { display: inline-flex; align-items: center; justify-content: center; width: 24px; height: 24px; border-radius: 50%;
    background: rgb(var(--v-theme-primary)); color: rgb(var(--v-theme-on-primary)); font-size: 13px; font-weight: 600; margin-right: 8px; flex: none; }
.sites-facts div { line-height: 1.7; }
.sites-media-thumb { width: 72px; height: 48px; border-radius: 4px; background: #303030; flex: none; overflow: hidden; }
.sites-media-thumb img { width: 100%; height: 100%; object-fit: cover; }
