.bos-loader-overlay{
  position:fixed;
  inset:0;
  z-index:10000;
  display:grid;
  place-items:center;
  background:color-mix(in srgb,var(--bg) 70%,transparent);
  backdrop-filter:blur(3px);
  -webkit-backdrop-filter:blur(3px);
  opacity:0;
  visibility:hidden;
  pointer-events:none;
  transition:opacity .14s ease,visibility .14s ease;
}
.bos-loader-overlay.is-active{
  opacity:1;
  visibility:visible;
  pointer-events:all;
}
.bos-loader-card{
  min-width:0;
  display:flex;
  align-items:center;
  justify-content:center;
  padding:18px;
  border:1px solid var(--border);
  border-radius:16px;
  background:var(--surface);
  color:var(--text);
  box-shadow:0 18px 55px rgba(0,0,0,.18);
}
.bos-loader-mark{
  position:relative;
  width:58px;
  height:58px;
  display:grid;
  place-items:center;
  border-radius:17px;
  background:linear-gradient(145deg,var(--bos-blue-dark),var(--bos-blue));
  box-shadow:0 8px 22px color-mix(in srgb,var(--bos-blue) 28%,transparent);
}
.bos-loader-mark::after{
  content:"";
  position:absolute;
  inset:-7px;
  border:3px solid color-mix(in srgb,var(--bos-blue) 18%,var(--border));
  border-top-color:var(--bos-blue);
  border-right-color:var(--bos-blue);
  border-radius:22px;
  animation:bos-loader-spin .8s linear infinite;
}
.bos-loader-mark img{
  width:34px;
  height:34px;
  object-fit:contain;
}
.bos-loader-text{
  display:none!important;
}
@keyframes bos-loader-spin{to{transform:rotate(360deg)}}

/* Shared BOS feedback treatment. */
.admin-message.error,
.alert-error,
.validation-summary-errors,
.bos-feedback-error{
  position:relative;
  color:var(--danger)!important;
  background:color-mix(in srgb,var(--danger) 9%,var(--surface))!important;
  border:1px solid color-mix(in srgb,var(--danger) 38%,var(--border))!important;
  border-left:4px solid var(--danger)!important;
  border-radius:9px!important;
  padding:11px 13px 11px 36px!important;
  font-size:12px;
  line-height:1.45;
}
.admin-message.error::before,
.alert-error::before,
.bos-feedback-error::before{
  content:"!";
  position:absolute;
  left:12px;
  top:11px;
  width:16px;
  height:16px;
  display:grid;
  place-items:center;
  border-radius:50%;
  background:var(--danger);
  color:#fff;
  font-size:10px;
  font-weight:900;
  line-height:1;
}
.admin-message.success,
.bos-feedback-success{
  position:relative;
  color:var(--success)!important;
  background:color-mix(in srgb,var(--success) 9%,var(--surface))!important;
  border:1px solid color-mix(in srgb,var(--success) 34%,var(--border))!important;
  border-left:4px solid var(--success)!important;
  border-radius:9px!important;
  padding:11px 13px 11px 36px!important;
  font-size:12px;
  font-weight:700;
  line-height:1.45;
}
.admin-message.success::before,
.bos-feedback-success::before{
  content:"✓";
  position:absolute;
  left:11px;
  top:10px;
  width:18px;
  height:18px;
  display:grid;
  place-items:center;
  border-radius:50%;
  background:var(--success);
  color:#fff;
  font-size:11px;
  font-weight:900;
}
.bos-validation-alert strong{display:block;margin-bottom:5px;color:inherit}
.bos-validation-alert ul,
.validation-summary-errors ul{
  margin:5px 0 0;
  padding-left:19px;
}
.bos-validation-alert li,
.validation-summary-errors li{margin:3px 0}
.bos-validation-alert li::marker,
.validation-summary-errors li::marker{color:var(--danger);font-size:1.15em}

.bos-field-invalid,
.input-validation-error{
  border-color:var(--danger)!important;
  background:color-mix(in srgb,var(--danger) 5%,var(--surface))!important;
  box-shadow:0 0 0 2px color-mix(in srgb,var(--danger) 12%,transparent)!important;
}
.bos-field-has-error > span:first-child{
  color:var(--danger)!important;
  font-weight:850!important;
}
.bos-cell-has-error{background:color-mix(in srgb,var(--danger) 4%,transparent)}
.field-validation-error{color:var(--danger);font-size:11px;font-weight:700}

@media(max-width:520px){
  .bos-loader-card{padding:16px}
  .bos-loader-mark{width:52px;height:52px}
  .bos-loader-mark img{width:30px;height:30px}
}

/* Shared Save/Update/Delete confirmation popup (window.BOSSavePopup). */
.bos-save-popup-backdrop{
  position:fixed;inset:0;z-index:10500;
  background:rgba(15,23,29,.44);backdrop-filter:blur(1.5px);-webkit-backdrop-filter:blur(1.5px);
  display:flex;align-items:center;justify-content:center;padding:20px;
  opacity:0;pointer-events:none;transition:opacity .16s ease;
}
.bos-save-popup-backdrop.is-open{opacity:1;pointer-events:auto}
.bos-save-popup-card{
  width:min(400px,100%);background:var(--surface);border:1px solid var(--border);
  border-radius:14px;box-shadow:0 20px 50px rgba(10,20,28,.28),var(--shadow);
  padding:24px 22px 20px;position:relative;
  transform:translateY(8px) scale(.98);opacity:0;transition:transform .18s ease,opacity .18s ease;
}
.bos-save-popup-backdrop.is-open .bos-save-popup-card{transform:translateY(0) scale(1);opacity:1}
@media(prefers-reduced-motion:reduce){
  .bos-save-popup-backdrop,.bos-save-popup-card{transition:none}
}
.bos-save-popup-close{
  position:absolute;top:12px;right:12px;width:28px;height:28px;border-radius:7px;
  border:0;background:transparent;color:var(--muted);cursor:pointer;font-size:16px;line-height:1;
  display:grid;place-items:center;
}
.bos-save-popup-close:hover{background:var(--surface-2);color:var(--text)}
.bos-save-popup-icon{
  width:46px;height:46px;border-radius:50%;display:grid;place-items:center;margin-bottom:14px;
  background:color-mix(in srgb,var(--success) 14%,var(--surface));color:var(--success);
}
.bos-save-popup-icon svg{width:24px;height:24px}
.bos-save-popup-card[data-kind="delete"] .bos-save-popup-icon{background:var(--surface-2);color:var(--muted)}
.bos-save-popup-title{margin:0 0 6px;font-size:17px;font-weight:800}
.bos-save-popup-message{margin:0;font-size:13.5px;line-height:1.55;color:var(--text);white-space:pre-line}
.bos-save-popup-actions{display:flex;justify-content:flex-end;gap:8px;margin-top:18px}
.bos-save-popup-actions .btn{min-width:84px}

/* Shared row drag-to-reorder handle (window: bos-grid-drag-reorder.js). Any grid opts in
   by adding a leading .bos-drag-col header cell and a .bos-drag-cell body cell containing
   a [data-bos-drag-handle] element. */
.bos-drag-col,.bos-drag-cell{width:34px;min-width:34px}
.bos-drag-cell{padding:0!important}
[data-bos-drag-handle]{display:grid;place-items:center;width:34px;height:37px;cursor:grab;color:var(--muted);font-size:15px;line-height:1;user-select:none;border-radius:6px}
[data-bos-drag-handle]:hover{color:var(--bos-blue);background:color-mix(in srgb,var(--bos-blue) 8%,transparent)}
[data-bos-drag-handle]:active{cursor:grabbing}
[data-bos-drag-handle]:focus-visible{outline:2px solid var(--bos-blue);outline-offset:-2px}
.bos-row-dragging{opacity:.45}
.bos-row-drag-over-top{box-shadow:inset 0 2px 0 var(--bos-blue)}
.bos-row-drag-over-bottom{box-shadow:inset 0 -2px 0 var(--bos-blue)}
