.clean-block-header{display:flex;align-items:flex-start;gap:12px;margin-bottom:14px}
.clean-block-heading{min-width:0;flex:1}
.clean-block-technical-id{display:block;color:var(--muted);font-size:11px;line-height:1.2;font-family:Consolas,Menlo,monospace;word-break:break-word}
.clean-block-header h2{margin:5px 0 0;font-size:18px;line-height:1.22;font-weight:700}
.clean-block-description{margin:7px 0 0;color:var(--muted);font-size:13px;line-height:1.35}
.clean-block-admin-slot{display:flex;gap:4px;margin-left:auto}
.clean-block-admin-slot[hidden]{display:none}
.clean-block-state{min-height:100%;display:flex;flex-direction:column;justify-content:center;color:var(--muted)}
.clean-block-empty{align-items:center;text-align:center;padding:24px 14px;border:1px dashed var(--border-strong);border-radius:var(--radius-card);background:var(--surface-soft)}
.clean-block-empty-icon{width:34px;height:34px;border-radius:50%;border:1px solid var(--border);background:linear-gradient(180deg,#fff,#eef4f6);margin-bottom:10px}
.clean-block-empty strong{display:block;color:var(--text);font-size:15px}
.clean-block-empty p{max-width:360px;margin:6px 0 0;font-size:13px;line-height:1.35}
.clean-block-ready{padding:0}
.clean-block-error{align-items:flex-start;justify-content:flex-start;padding:18px;border:1px solid #e4b9b6;border-radius:var(--radius-card);background:#fff8f7;color:var(--danger)}
.clean-block-error p{margin:0 0 6px;font-weight:700;color:var(--danger)}
.clean-block-error small{display:block;margin-bottom:14px;color:var(--muted)}
.clean-error{padding:18px;border:1px solid #e4b9b6;color:var(--danger);background:#fff;border-radius:var(--radius-card)}
.clean-fatal{max-width:680px;margin:10vh auto;padding:28px;background:#fff;border:1px solid var(--border);border-radius:var(--radius-card);box-shadow:var(--shadow-card)}
.clean-fatal .clean-button{margin-right:8px}
.clean-admin-list{display:grid;gap:8px}
.clean-admin-row{display:grid;grid-template-columns:24px minmax(180px,1fr) minmax(180px,1fr);gap:10px;align-items:center}
.clean-admin-row input[type=text],.clean-admin-row input:not([type]){min-height:34px;border:1px solid var(--border);border-radius:5px;padding:0 8px}
.block-skeleton{display:grid;gap:10px;padding:4px 0;overflow:hidden}
.block-skeleton span,.block-skeleton__stat,.block-skeleton__input,.block-skeleton__map{display:block;border-radius:5px;background:linear-gradient(90deg,#e8edef 25%,#f6f8f9 50%,#e8edef 75%);background-size:200% 100%;animation:clean-skeleton 1.2s ease-in-out infinite}
.block-skeleton__line{height:12px;width:100%}
.block-skeleton__line--wide{width:92%}
.block-skeleton__line--medium{width:78%}
.block-skeleton__line--short{width:58%}
.block-skeleton__table-head{height:18px}
.block-skeleton__table-row{display:grid;grid-template-columns:1.2fr 2fr 1fr;gap:10px}
.block-skeleton__table-row span{height:12px}
.block-skeleton__list-row{display:grid;grid-template-columns:34px minmax(0,1fr);gap:10px;align-items:center}
.block-skeleton__avatar{width:34px;height:34px;border-radius:50%!important}
.block-skeleton--stats{grid-template-columns:repeat(3,minmax(0,1fr))}
.block-skeleton__stat{min-height:76px;padding:14px;display:grid;align-content:space-between}
.block-skeleton__stat span{animation:none;background:#d9e1e5}
.block-skeleton__value{width:48%;height:22px}
.block-skeleton__map{position:relative;min-height:180px;overflow:hidden}
.block-skeleton__map span{position:absolute;animation:none;background:#d7e0e4}
.block-skeleton__map-road{height:10px;width:72%;transform:rotate(-12deg)}
.block-skeleton__map-road--one{left:8%;top:38%}
.block-skeleton__map-road--two{right:-8%;top:63%;transform:rotate(17deg)}
.block-skeleton__map-point{width:22px;height:22px;border-radius:50%!important;left:58%;top:34%}
.block-skeleton--form{grid-template-columns:repeat(2,minmax(0,1fr));gap:14px}
.block-skeleton__field{display:grid;gap:6px}
.block-skeleton__label{width:46%;height:9px}
.block-skeleton__input{height:34px}
@keyframes clean-skeleton{0%{background-position:200% 0}100%{background-position:-200% 0}}
@media(prefers-reduced-motion:reduce){.block-skeleton span,.block-skeleton__stat,.block-skeleton__input,.block-skeleton__map{animation:none}}


@keyframes crm-spin {
  100% { transform: rotate(360deg); }
}

@keyframes crm-arc {
  0% { stroke-dasharray: 2 101; stroke-dashoffset: 0; }
  50% { stroke-dasharray: 88 101; stroke-dashoffset: -36; }
  100% { stroke-dasharray: 2 101; stroke-dashoffset: -101; }
}

@keyframes crm-loader-in {
  from { opacity: 0; transform: translateY(6px); }
  to { opacity: 1; transform: translateY(0); }
}

.crm-loader {
  display: inline-flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 14px;
  min-width: 0;
  animation: crm-loader-in 0.22s ease-out both;
}

.crm-loader__spin {
  display: block;
  flex: 0 0 auto;
  transform-origin: center;
  animation: crm-spin 1.4s linear infinite;
}

.crm-loader__track {
  fill: none;
  stroke: var(--color-border-secondary);
  stroke-width: 2.5;
}

.crm-loader__arc {
  fill: none;
  stroke: var(--color-text-info);
  stroke-width: 2.5;
  stroke-linecap: round;
  transform-box: fill-box;
  transform-origin: 50% 50%;
  transform: rotate(-90deg);
  animation: crm-arc 1.4s ease-in-out infinite;
}

.crm-loader__cap {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 3px;
  min-width: 0;
}

.crm-loader__label {
  color: var(--color-text-tertiary);
  font-size: 10px;
  font-weight: 600;
  letter-spacing: 0.08em;
  line-height: 1.2;
  text-transform: uppercase;
}

.crm-loader__module {
  color: var(--color-text-primary);
  font-size: 13px;
  font-weight: 600;
  line-height: 1.25;
  max-width: 260px;
  overflow: hidden;
  text-align: center;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.crm-loader--sm {
  gap: 0;
}

.crm-loader--sm .crm-loader__track,
.crm-loader--sm .crm-loader__arc {
  stroke-width: 2;
}

.crm-loader--lg .crm-loader__track,
.crm-loader--lg .crm-loader__arc {
  stroke-width: 3;
}

.clean-route-loader__main {
  margin: 6px 0 14px;
}

.clean-block-loader {
  align-items: center;
  background: var(--color-background-primary);
  border-radius: var(--radius-card);
  display: flex;
  justify-content: center;
  min-height: 112px;
  padding: 20px;
}

.clean-auth-splash--loader {
  align-items: center;
  display: flex;
  justify-content: center;
  min-height: 100vh;
}


/* dashboard loader system */
.dash-loader-root {
  display: flex;
  flex-direction: column;
  gap: 12px;
  padding: 16px;
  min-height: 100%;
  box-sizing: border-box;
  animation: clean-route-fade-in .16s ease-out;
}

.dash-loader-root--compact {
  min-height: clamp(280px, calc(100vh - 120px), 720px);
  align-items: center;
  justify-content: center;
  padding: 24px;
  background: transparent;
}

.dash-loader-compact {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 10px;
  min-width: 180px;
  color: var(--color-text-primary, var(--text));
  text-align: center;
}

.dash-loader-spinner {
  display: block;
  width: 42px;
  height: 42px;
  border: 4px solid color-mix(in srgb, currentColor 16%, transparent);
  border-top-color: var(--accent, #1f7a4d);
  border-right-color: var(--accent, #1f7a4d);
  border-radius: 50%;
  animation: dash-loader-spin .72s linear infinite;
}

.dash-loader-caption {
  font-size: 14px;
  font-weight: 700;
  line-height: 1.3;
}

.dash-loader-hint {
  color: var(--color-text-secondary, var(--muted));
  font-size: 11px;
  line-height: 1.3;
}

@keyframes dash-loader-spin {
  to { transform: rotate(360deg); }
}

@media (prefers-reduced-motion: reduce) {
  .dash-loader-spinner { animation-duration: 1.8s; }
}

.dash-loader-summary {
  display: flex;
  background: var(--color-background-primary);
  border: 0.5px solid var(--color-border-primary);
  border-radius: var(--radius-card);
  overflow: hidden;
}

.dash-loader-kpi {
  flex: 1;
  display: flex;
  align-items: center;
  gap: 10px;
  min-width: 0;
  padding: 11px 16px;
  border-right: 0.5px solid var(--color-border-secondary);
}
.dash-loader-kpi:last-child { border-right: none; }

.dash-loader-kpi-label {
  font-size: 10px;
  font-weight: 500;
  color: var(--color-text-secondary);
  line-height: 1.3;
}

.dash-loader-top-grid {
  display: grid;
  grid-template-columns: 1fr 1fr 2fr;
  gap: 12px;
  align-items: start;
}

.dash-loader-mid-grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 12px;
  align-items: start;
}

.dash-loader-card {
  background: var(--color-background-primary);
  border: 0.5px solid var(--color-border-primary);
  border-radius: var(--radius-card);
  display: flex;
  flex-direction: column;
  overflow: hidden;
  min-height: 180px;
}

.dash-loader-card-hdr {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 10px;
  padding: 9px 12px;
  border-bottom: 0.5px solid var(--color-border-secondary);
  flex-shrink: 0;
}

.dash-loader-card-title {
  font-size: 11px;
  font-weight: 700;
  color: var(--color-text-secondary);
  text-transform: uppercase;
  letter-spacing: 0.5px;
}

.dash-loader-card-body {
  padding: 10px 12px 12px;
  overflow: hidden;
  flex: 1;
}

.dash-loader-row {
  display: grid;
  grid-template-columns: 54px minmax(0, 1fr) 52px;
  gap: 8px;
  align-items: center;
  min-height: 24px;
  border-bottom: 0.5px solid var(--color-border-secondary);
}
.dash-loader-row:last-child { border-bottom: none; }

.dash-loader-map {
  display: flex;
  gap: 12px;
  min-height: 170px;
}
.dash-loader-map-side {
  width: 230px;
  flex-shrink: 0;
  display: flex;
  flex-direction: column;
  gap: 8px;
}
.dash-loader-map-canvas {
  position: relative;
  flex: 1;
  min-height: 170px;
  border-radius: var(--radius-card);
  background: var(--color-background-secondary);
  border: 0.5px solid var(--color-border-secondary);
  overflow: hidden;
}

.dash-loader-line,
.dash-loader-hdr-pill,
.dash-loader-kpi-value,
.dash-loader-badge,
.dash-loader-road,
.dash-loader-point {
  display: block;
  border-radius: 999px;
  background: linear-gradient(90deg, #e8edef 25%, #f6f8f9 50%, #e8edef 75%);
  background-size: 200% 100%;
  animation: dash-loader-shimmer 1.2s ease-in-out infinite;
}

.dash-loader-line { height: 10px; width: 78%; margin-bottom: 10px; }
.dash-loader-line--wide { width: 92%; }
.dash-loader-line--short { width: 52%; }
.dash-loader-line--bar { width: 100%; height: 12px; margin-bottom: 0; }
.dash-loader-hdr-pill { width: 58px; height: 18px; }
.dash-loader-kpi-value { width: 42px; height: 20px; flex-shrink: 0; }
.dash-loader-kpi-value--small { width: 28px; }
.dash-loader-badge { width: 44px; height: 16px; }
.dash-loader-road { position: absolute; height: 10px; width: 72%; }
.dash-loader-road--one { left: 8%; top: 38%; transform: rotate(-12deg); }
.dash-loader-road--two { right: -8%; top: 63%; transform: rotate(17deg); }
.dash-loader-point { position: absolute; width: 22px; height: 22px; left: 58%; top: 34%; }

@keyframes dash-loader-shimmer {
  0% { background-position: 200% 0; }
  100% { background-position: -200% 0; }
}

@media (max-width: 900px) {
  .dash-loader-summary { flex-wrap: wrap; }
  .dash-loader-kpi { flex-basis: 33.333%; }
  .dash-loader-top-grid,
  .dash-loader-mid-grid { grid-template-columns: 1fr; }
}
/* end dashboard loader system */
