/* ==========================================================================
   Northwire Ops — dashboard layout
   --------------------------------------------------------------------------
   Layout only. A data-dense view is where a design system is tested hardest:
   there are more things on screen than anywhere else, so any inconsistency in
   spacing or weight shows up immediately. Nothing here restates the language —
   even the chart draws itself in semantic colors.
   ========================================================================== */

html, body { block-size: 100%; }

.app {
  display: grid;
  grid-template-columns: 15rem 1fr;
  min-block-size: 100svh;
}

@media (max-width: 62rem) {
  .app { grid-template-columns: 1fr; }
  .app__sidebar { display: none; }
}

.app__main {
  min-inline-size: 0;
  display: flex;
  flex-direction: column;
}

.app__content {
  flex: 1;
  padding: var(--nv-space-6) var(--nv-layout-gutter) var(--nv-space-12);
  display: flex;
  flex-direction: column;
  gap: var(--nv-space-6);
  max-inline-size: 80rem;
  inline-size: 100%;
  margin-inline: auto;
}

.page-head {
  display: flex;
  flex-wrap: wrap;
  align-items: flex-end;
  justify-content: space-between;
  gap: var(--nv-space-4);
}

/* --- Stat tiles -------------------------------------------------------------- */

.stats {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(min(13rem, 100%), 1fr));
  gap: var(--nv-space-4);
}

.stat__value {
  display: block;
  margin-block: var(--nv-space-2) var(--nv-space-1);
  font-size: var(--nv-font-size-3xl);
  font-weight: var(--nv-font-weight-semibold);
  letter-spacing: var(--nv-letter-spacing-tighter);
  color: var(--nv-color-text-primary);
  font-variant-numeric: tabular-nums;
}

/* --- Chart --------------------------------------------------------------------
   Drawn in semantic colors, so it follows the brand and both appearances with
   no second palette to maintain. */

.chart {
  inline-size: 100%;
  block-size: 14rem;
  display: block;
  overflow: visible;
}

.chart__grid {
  stroke: var(--nv-color-border-subtle);
  stroke-width: 1;
}

.chart__line {
  fill: none;
  stroke: var(--nv-color-accent);
  stroke-width: 2;
  stroke-linecap: round;
  stroke-linejoin: round;
  vector-effect: non-scaling-stroke;
}

.chart__line--compare {
  stroke: var(--nv-color-border-strong);
  stroke-dasharray: 4 4;
}

.chart__area {
  fill: url(#chart-fill);
}

.chart__labels {
  display: flex;
  justify-content: space-between;
  margin-block-start: var(--nv-space-2);
}

/* --- Layout of the lower half --------------------------------------------------- */

.split {
  display: grid;
  gap: var(--nv-space-6);
  align-items: start;
}

@media (min-width: 70rem) {
  .split { grid-template-columns: 1.6fr 1fr; }
}

.activity {
  list-style: none;
  margin: 0;
  padding: 0;
  display: flex;
  flex-direction: column;
}

.activity li {
  display: flex;
  gap: var(--nv-space-3);
  padding-block: var(--nv-space-3);
  border-block-end: var(--nv-border-width) solid var(--nv-color-border-subtle);
}

.activity li:last-child { border-block-end: 0; }

.activity__mark {
  inline-size: var(--nv-space-2);
  block-size: var(--nv-space-2);
  border-radius: var(--nv-radius-full);
  margin-block-start: 0.45em;
  flex: none;
  background-color: var(--nv-color-border-strong);
}

.activity__mark--danger { background-color: var(--nv-color-danger); }
.activity__mark--success { background-color: var(--nv-color-success); }
.activity__mark--accent { background-color: var(--nv-color-accent); }
.activity__mark--warning { background-color: var(--nv-color-warning); }

.service-name {
  display: flex;
  align-items: center;
  gap: var(--nv-space-2-5);
}
