/* Generated from products/design-system/shared/zero-state.css by Navorina/scripts/sync-ds-zero-state.mjs. Do not edit. */
/* Zero state: the one empty state of an island (.nv-zero; DS tables also use .nv-o-table__empty).
   One calm block: the section icon (the sidebar glyph), a title, one line, one action.
   - no plate inside the island and no background on hover: the state is not clickable as a whole;
   - the island title is hidden while the island is empty: the state's title says it;
   - the same min height as the loading skeleton, so nothing jumps between loading, empty and error.
   A section sets its icon with --nv-zero-icon (tokens below); .nv-zero--plain drops the icon.
   Single source: products/design-system/shared/zero-state.css, synced into the product by
   Navorina/scripts/sync-ds-zero-state.mjs. */
:root {
  --nv-zero-icon-dashboard: url("data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 24 24%27 fill=%27none%27 stroke=%27black%27 stroke-width=%271.75%27 stroke-linecap=%27round%27 stroke-linejoin=%27round%27%3E%3Crect width=%277%27 height=%279%27 x=%273%27 y=%273%27 rx=%271%27/%3E%3Crect width=%277%27 height=%275%27 x=%2714%27 y=%273%27 rx=%271%27/%3E%3Crect width=%277%27 height=%279%27 x=%2714%27 y=%2712%27 rx=%271%27/%3E%3Crect width=%277%27 height=%275%27 x=%273%27 y=%2716%27 rx=%271%27/%3E%3C/svg%3E");
  --nv-zero-icon-workspace: url("data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 24 24%27 fill=%27none%27 stroke=%27black%27 stroke-width=%271.75%27 stroke-linecap=%27round%27 stroke-linejoin=%27round%27%3E%3Cpath d=%27M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z%27/%3E%3Cpath d=%27M12 6.5 13 9l2.5 1-2.5 1-1 2.5-1-2.5-2.5-1L11 9z%27/%3E%3C/svg%3E");
  --nv-zero-icon-transactions: url("data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 24 24%27 fill=%27none%27 stroke=%27black%27 stroke-width=%271.75%27 stroke-linecap=%27round%27 stroke-linejoin=%27round%27%3E%3Cpath d=%27m16 3 4 4-4 4%27/%3E%3Cpath d=%27M20 7H4%27/%3E%3Cpath d=%27m8 21-4-4 4-4%27/%3E%3Cpath d=%27M4 17h16%27/%3E%3C/svg%3E");
  --nv-zero-icon-payments: url("data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 24 24%27 fill=%27none%27 stroke=%27black%27 stroke-width=%271.75%27 stroke-linecap=%27round%27 stroke-linejoin=%27round%27%3E%3Crect width=%2720%27 height=%2714%27 x=%272%27 y=%275%27 rx=%272%27/%3E%3Cline x1=%272%27 x2=%2722%27 y1=%2710%27 y2=%2710%27/%3E%3C/svg%3E");
  --nv-zero-icon-invoicing: url("data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 24 24%27 fill=%27none%27 stroke=%27black%27 stroke-width=%271.75%27 stroke-linecap=%27round%27 stroke-linejoin=%27round%27%3E%3Cpath d=%27M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z%27/%3E%3Cpath d=%27M14 2v4a2 2 0 0 0 2 2h4%27/%3E%3Cpath d=%27M10 9H8%27/%3E%3Cpath d=%27M16 13H8%27/%3E%3Cpath d=%27M16 17H8%27/%3E%3C/svg%3E");
  --nv-zero-icon-accounts: url("data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 24 24%27 fill=%27none%27 stroke=%27black%27 stroke-width=%271.75%27 stroke-linecap=%27round%27 stroke-linejoin=%27round%27%3E%3Cline x1=%273%27 x2=%2721%27 y1=%2722%27 y2=%2722%27/%3E%3Cline x1=%276%27 x2=%276%27 y1=%2718%27 y2=%2711%27/%3E%3Cline x1=%2710%27 x2=%2710%27 y1=%2718%27 y2=%2711%27/%3E%3Cline x1=%2714%27 x2=%2714%27 y1=%2718%27 y2=%2711%27/%3E%3Cline x1=%2718%27 x2=%2718%27 y1=%2718%27 y2=%2711%27/%3E%3Cpolygon points=%2712 2 20 7 4 7%27/%3E%3C/svg%3E");
  --nv-zero-icon-operations: url("data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 24 24%27 fill=%27none%27 stroke=%27black%27 stroke-width=%271.75%27 stroke-linecap=%27round%27 stroke-linejoin=%27round%27%3E%3Crect width=%277%27 height=%277%27 x=%273%27 y=%273%27 rx=%271.5%27/%3E%3Crect width=%277%27 height=%277%27 x=%2714%27 y=%2714%27 rx=%271.5%27/%3E%3Cpath d=%27M6.5 10v3.5A3.5 3.5 0 0 0 10 17h4%27/%3E%3Cpath d=%27M10 6.5h3.5A3.5 3.5 0 0 1 17 10v4%27/%3E%3C/svg%3E");
  --nv-zero-icon-budget: url("data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 24 24%27 fill=%27none%27 stroke=%27black%27 stroke-width=%271.75%27 stroke-linecap=%27round%27 stroke-linejoin=%27round%27%3E%3Cpath d=%27M21.21 15.89A10 10 0 1 1 8 2.83%27/%3E%3Cpath d=%27M22 12A10 10 0 0 0 12 2v10z%27/%3E%3C/svg%3E");
  --nv-zero-icon-income: url("data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 24 24%27 fill=%27none%27 stroke=%27black%27 stroke-width=%271.75%27 stroke-linecap=%27round%27 stroke-linejoin=%27round%27%3E%3Cpath d=%27M12 2v20%27/%3E%3Cpath d=%27M17 5H9.5a3.5 3.5 0 0 0 0 7h5a3.5 3.5 0 0 1 0 7H6%27/%3E%3C/svg%3E");
  --nv-zero-icon-taxes: url("data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 24 24%27 fill=%27none%27 stroke=%27black%27 stroke-width=%271.75%27 stroke-linecap=%27round%27 stroke-linejoin=%27round%27%3E%3Cpath d=%27M4 2v20l2-1 2 1 2-1 2 1 2-1 2 1 2-1 2 1V2l-2 1-2-1-2 1-2-1-2 1-2-1-2 1Z%27/%3E%3Cpath d=%27M14 8H8%27/%3E%3Cpath d=%27M16 12H8%27/%3E%3Cpath d=%27M13 16H8%27/%3E%3C/svg%3E");
  --nv-zero-icon-accounting: url("data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 24 24%27 fill=%27none%27 stroke=%27black%27 stroke-width=%271.75%27 stroke-linecap=%27round%27 stroke-linejoin=%27round%27%3E%3Cpath d=%27M12 7v14%27/%3E%3Cpath d=%27M3 18a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h5a4 4 0 0 1 4 4 4 4 0 0 1 4-4h5a1 1 0 0 1 1 1v13a1 1 0 0 1-1 1h-6a3 3 0 0 0-3 3 3 3 0 0 0-3-3z%27/%3E%3C/svg%3E");
  --nv-zero-icon-insights: url("data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 24 24%27 fill=%27none%27 stroke=%27black%27 stroke-width=%271.75%27 stroke-linecap=%27round%27 stroke-linejoin=%27round%27%3E%3Cpolyline points=%2722 7 13.5 15.5 8.5 10.5 2 17%27/%3E%3Cpolyline points=%2716 7 22 7 22 13%27/%3E%3C/svg%3E");
  --nv-zero-icon-reports: url("data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 24 24%27 fill=%27none%27 stroke=%27black%27 stroke-width=%271.75%27 stroke-linecap=%27round%27 stroke-linejoin=%27round%27%3E%3Cpath d=%27M4 19V9%27/%3E%3Cpath d=%27M10 19V5%27/%3E%3Cpath d=%27M16 19v-7%27/%3E%3Cpath d=%27M22 19V3%27/%3E%3C/svg%3E");
  --nv-zero-icon-notifications: url("data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 24 24%27 fill=%27none%27 stroke=%27black%27 stroke-width=%271.75%27 stroke-linecap=%27round%27 stroke-linejoin=%27round%27%3E%3Cpath d=%27M6 8a6 6 0 0 1 12 0c0 7 3 9 3 9H3s3-2 3-9%27/%3E%3Cpath d=%27M10.3 21a1.94 1.94 0 0 0 3.4 0%27/%3E%3C/svg%3E");
  --nv-zero-icon-help: url("data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 24 24%27 fill=%27none%27 stroke=%27black%27 stroke-width=%271.75%27 stroke-linecap=%27round%27 stroke-linejoin=%27round%27%3E%3Ccircle cx=%2712%27 cy=%2712%27 r=%2710%27/%3E%3Cpath d=%27M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3%27/%3E%3Cpath d=%27M12 17h.01%27/%3E%3C/svg%3E");
  --nv-zero-icon-settings: url("data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 24 24%27 fill=%27none%27 stroke=%27black%27 stroke-width=%271.75%27 stroke-linecap=%27round%27 stroke-linejoin=%27round%27%3E%3Cpath d=%27M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.39a2 2 0 0 0-.73-2.73l-.15-.08a2 2 0 0 1-1-1.74v-.5a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z%27/%3E%3Ccircle cx=%2712%27 cy=%2712%27 r=%273%27/%3E%3C/svg%3E");
  /* Composition = the dashboard first-value island (.nv-product-empty): big air, display title, one line,
     one 44px pill. Rhythm: figure → 20 → title → 10 → copy → 22 → action. */
  --nv-zero-padding-block: clamp(56px, 8vw, 80px);
  --nv-zero-icon-size: 24px;
  --nv-zero-gap-icon: 12px;
  --nv-zero-gap-art: 20px;
  --nv-zero-gap-copy: 10px;
  --nv-zero-gap-action: 22px;
  --nv-zero-title-size: clamp(var(--nv-type-title-1-size, 24px), 3vw, var(--nv-type-display-size, 32px));
  --nv-zero-title-line: 1.12;
  --nv-zero-title-weight: var(--nv-type-weight-semibold, 600);
  --nv-zero-title-tracking: -.04em;
  --nv-zero-copy-size: var(--nv-type-body-size, 14px);
  --nv-zero-copy-line: 20px;
  --nv-zero-action-height: 44px;
  /* One height for every empty island and its loading skeleton: the composition with a one-line copy. */
  --nv-zero-min-height: calc(2 * var(--nv-zero-padding-block) + 96px + 20px + 36px + 10px + 20px + 22px + 44px);
  /* Optical centre: the icon box has an empty field above the glyph and the action is a solid plate,
     so the block sits this much above the geometric centre to read as equal air top and bottom. */
  --nv-zero-optical-lift: 1px;
  /* Skeleton rows: the empty island's height split into table rows. */
  --nv-skeleton-rows: 6;
  --nv-skeleton-row: calc(var(--nv-zero-min-height) / var(--nv-skeleton-rows));
  --nv-skeleton-delay: 400ms;
}

.nv-zero,
.nv-o-table__empty {
  display: grid;
  justify-items: center;
  align-content: center;
  /* !important: older section rules (html body.dash-page …) reset these; the canon wins. */
  gap: 0 !important;
  box-sizing: border-box;
  min-height: var(--nv-zero-min-height) !important;
  margin: 0;
  padding:
    calc(var(--nv-zero-padding-block) - var(--nv-zero-optical-lift))
    var(--nv-island-padding, 24px)
    calc(var(--nv-zero-padding-block) + var(--nv-zero-optical-lift)) !important;
  border: 0 !important;
  border-radius: 0;
  background: transparent !important;
  box-shadow: none !important;
  text-align: center;
}

.nv-zero[hidden],
.nv-o-table__empty[hidden] { display: none; }

.nv-zero::before,
.nv-o-table__empty::before {
  content: "";
  width: var(--nv-zero-icon-size);
  height: var(--nv-zero-icon-size);
  margin-block-end: var(--nv-zero-gap-icon);
  background: currentColor;
  color: var(--nv-zero-icon-color, var(--nv-table-head, var(--dash-text-muted, currentColor)));
  opacity: .72;
  -webkit-mask: var(--nv-zero-icon, var(--nv-zero-icon-dashboard)) center / contain no-repeat;
  mask: var(--nv-zero-icon, var(--nv-zero-icon-dashboard)) center / contain no-repeat;
}

.nv-zero--plain::before { display: none; }

/* Zero art (shared/zero-art.js): a line illustration of the section in place of the icon. One size
   (144 × 96 at 1:1, so the 1px line stays a hairline), one colour, the island colour hides back lines.
   Motion: the figure fades in once as the state appears (.6s); on hover of the island one detail lifts.
   No loops; with reduced motion the figure is static. */
:is(.nv-zero, .nv-o-table__empty):has(> .nv-zart)::before { display: none; }
/* Line tone: quiet at rest, a touch quieter on light; the hover accent stays full text colour. */
:root { --nv-zero-art-tone: 78%; }
:root:is([data-appearance="light"], .light, .light-theme), body.light-theme { --nv-zero-art-tone: 58%; }
:is(.nv-zero, .nv-o-table__empty, .nv-product-empty__icon, .nv-m-gate__mark) > .nv-zart {
  display: block;
  flex: none;
  width: var(--nv-zart-width, 144px) !important;
  height: var(--nv-zart-height, 96px) !important;
  inline-size: var(--nv-zart-width, 144px) !important;
  block-size: var(--nv-zart-height, 96px) !important;
  margin-block-end: var(--nv-zero-gap-art) !important;
  overflow: visible;
  color: var(--nv-zero-art-color, color-mix(in srgb, var(--nv-table-head, var(--dash-text-muted, currentColor)) var(--nv-zero-art-tone), transparent));
  fill: none;
  stroke: currentColor;
  stroke-width: 1;
  stroke-linecap: round;
  stroke-linejoin: round;
}
:is(.nv-zero, .nv-o-table__empty) > .nv-zart + * { margin-block-start: 0 !important; }
/* The product empty block (.nv-product-empty, first-value and settings islands) and the plan gate: the figure takes the
   place of the old icon plate, with no plate of its own. */
:is(.nv-product-empty__icon, .nv-m-gate__mark):has(> .nv-zart) {
  inline-size: auto !important;
  block-size: auto !important;
  padding: 0 !important;
  border: 0 !important;
  border-radius: 0 !important;
  background: none !important;
  box-shadow: none !important;
}
:is(.nv-product-empty__icon, .nv-m-gate__mark):has(> .nv-zart) > :not(.nv-zart) { display: none !important; }
:is(.nv-product-empty__icon, .nv-m-gate__mark) > .nv-zart { margin-block-end: 0 !important; }
/* "No matches" sits under the island's head and filters, often in a fixed-height island: it keeps the
   compact height and draws the same figure at two thirds (still a 1px line). */
.nv-zero--match {
  --nv-zero-min-height: 15rem; --nv-zero-padding-block: 32px; --nv-zart-width: 96px; --nv-zart-height: 64px;
  --nv-zero-gap-art: 12px; --nv-zero-gap-copy: 4px; --nv-zero-gap-action: 16px;
  --nv-zero-title-size: var(--nv-type-headline-size, 1rem); --nv-zero-title-line: var(--nv-type-headline-line, 1.4); --nv-zero-title-tracking: normal;
  --nv-zero-copy-size: var(--nv-type-callout-size, .875rem); --nv-zero-copy-line: var(--nv-type-callout-line, 1.45);
}
.nv-zero--match > .nv-zart { stroke-width: 1.5; }
.nv-zart .nv-zart__faint { stroke-dasharray: 1.5 2.5; opacity: .6; }
.nv-zart path { transition: transform .26s cubic-bezier(.5, 0, .1, 1), color .26s cubic-bezier(.5, 0, .1, 1); }
.nv-zart .nv-zart__lift { color: var(--nv-zero-art-accent, currentColor); }
:is(.nv-o-table, .nv-o-card, .nv-o-list, [data-nv-island], .nv-zero, .nv-o-table__empty, .nv-product-empty, .nv-m-gate):hover .nv-zart__lift {
  transform: translateY(-3px);
  color: var(--nv-zero-art-hover, var(--nv-table-text, var(--dash-text, currentColor)));
}
/* Appear, once: the figure rises 4px out of nothing, then its detail settles onto it from above.
   One product curve, 0.9s in all; nothing moves the layout (transforms only). --nv-zart-age lets a
   re-rendered figure pick up where the first one was (shared/zero-art.js). */
.nv-zart {
  --nv-zart-ease: cubic-bezier(.2, 0, 0, 1);
  animation:
    nv-zart-fade .5s var(--nv-zart-ease) calc(0ms - var(--nv-zart-age, 0ms)) backwards,
    nv-zart-rise .7s var(--nv-zart-ease) calc(0ms - var(--nv-zart-age, 0ms)) backwards;
}
.nv-zart .nv-zart__lift:not(.nv-zart__m) {
  animation:
    nv-zart-fade .45s var(--nv-zart-ease) calc(150ms - var(--nv-zart-age, 0ms)) backwards,
    nv-zart-settle .75s var(--nv-zart-ease) calc(150ms - var(--nv-zart-age, 0ms)) backwards;
}
.nv-zart .nv-zart__lift.nv-zart__m { animation: nv-zart-settle .75s var(--nv-zart-ease) calc(150ms - var(--nv-zart-age, 0ms)) backwards; }
:is(.nv-zart.nv-zart--rest, [data-nv-motion="reduce"] .nv-zart, [data-nv-motion="still"] .nv-zart),
:is(.nv-zart.nv-zart--rest, [data-nv-motion="reduce"] .nv-zart, [data-nv-motion="still"] .nv-zart) .nv-zart__lift { animation: none; }
[data-nv-motion="reduce"] .nv-zart path { transition: none; }
[data-nv-motion="reduce"] :hover .nv-zart__lift { transform: none !important; }
@keyframes nv-zart-fade { from { opacity: 0; } }
@keyframes nv-zart-rise { from { transform: translateY(4px); } }
@keyframes nv-zart-settle { from { transform: translateY(-6px); } }
@media (prefers-reduced-motion: reduce) {
  .nv-zart path { transition: none; }
  .nv-zart, .nv-zart .nv-zart__lift { animation: none !important; }
  :is(.nv-o-table, .nv-o-card, .nv-o-list, [data-nv-island], .nv-zero, .nv-o-table__empty, .nv-product-empty, .nv-m-gate):hover .nv-zart__lift { transform: none; }
}

/* The rhythm is the canon's: section rules do not add their own margins between the parts. */
:is(.nv-zero, .nv-o-table__empty) > * { margin: 0 !important; }
:is(.nv-zero, .nv-o-table__empty) > * + * { margin-block-start: var(--nv-zero-gap-copy) !important; }

/* Title and copy read the same in every section, whatever tag or class the section uses. */
:is(.nv-zero, .nv-o-table__empty) > :is(p, strong, span, h2, h3, h4):nth-child(1 of :not(.nv-zart)) {
  color: var(--nv-table-text, var(--dash-text, currentColor)) !important;
  font-size: var(--nv-zero-title-size) !important;
  line-height: var(--nv-zero-title-line) !important;
  font-weight: var(--nv-zero-title-weight) !important;
  letter-spacing: var(--nv-zero-title-tracking) !important;
  text-wrap: balance;
}

:is(.nv-zero, .nv-o-table__empty) > :is(p, span):nth-child(2 of :not(.nv-zart)) {
  max-width: 480px;
  color: var(--nv-table-head, var(--dash-text-muted, currentColor)) !important;
  font-size: var(--nv-zero-copy-size) !important;
  line-height: var(--nv-zero-copy-line) !important;
  text-wrap: pretty;
  font-weight: var(--nv-type-callout-weight, 400) !important;
}
:is(.nv-zero, .nv-o-table__empty) > :is(button, a, .nv-button, [class*="action"]):not(:nth-child(1 of :not(.nv-zart))) {
  margin-block-start: var(--nv-zero-gap-action) !important;
}
/* The one action is the dashboard pill: 44px, light on dark, whatever class the section gave it. */
:is(.nv-zero, .nv-o-table__empty):not(.nv-zero--match) > :is(button, a, .nv-button, [class*="action"]):not(:nth-child(1 of :not(.nv-zart))) {
  /* No display here: sections hide their retry button with their own rules. 12 + 20 + 12 = 44. */
  box-sizing: border-box !important;
  min-height: var(--nv-zero-action-height) !important;
  height: auto !important;
  padding: 12px 18px !important;
  border: 0 !important;
  border-radius: 999px !important;
  background: var(--nv-table-text, var(--dash-text, currentColor)) !important;
  color: var(--nv-shell-bg, var(--dash-bg, #0a0a0a)) !important;
  box-shadow: none !important;
  font-size: var(--nv-type-callout-size, 13px) !important;
  line-height: 20px !important;
  font-weight: var(--nv-type-weight-semibold, 600) !important;
  text-decoration: none !important;
  transition: opacity 140ms ease, transform 140ms ease;
}
:is(.nv-zero, .nv-o-table__empty):not(.nv-zero--match) > :is(button, a, .nv-button, [class*="action"]):not(:nth-child(1 of :not(.nv-zart))):hover { opacity: .88; }
:is(.nv-zero, .nv-o-table__empty):not(.nv-zero--match) > :is(button, a, .nv-button, [class*="action"]):not(:nth-child(1 of :not(.nv-zart))):active { transform: scale(.96); }

/* An island that shows a zero state is the zero state: no padding of its own, no wrapper padding,
   no pagination strip under it. So every empty island is the same height and the air above the
   icon equals the air under the action. */
:is(.nv-o-table, .nv-o-card, .nv-o-list, [data-nv-island]):has(
  tbody > tr:not([hidden]) > td > :is(.nv-zero, .nv-o-table__empty, .nv-zero-skeleton):not(.nv-zero--match, [hidden]),
  > :is(.nv-zero, .nv-o-table__empty, .nv-zero-skeleton):not(.nv-zero--match, [hidden]),
  :not(td, [hidden]) > :is(.nv-zero, .nv-o-table__empty, .nv-zero-skeleton):not(.nv-zero--match, [hidden])
):not(html[data-nv-page-shape="ready"] :has(.nv-zero-skeleton:not([hidden]))) {
  padding-block: 0 !important;
  gap: 0 !important;
}

:is(.nv-o-table, .nv-o-card, .nv-o-list, [data-nv-island]):has(
  tbody > tr:not([hidden]) > td > :is(.nv-zero, .nv-o-table__empty, .nv-zero-skeleton):not(.nv-zero--match, [hidden]),
  > :is(.nv-zero, .nv-o-table__empty, .nv-zero-skeleton):not(.nv-zero--match, [hidden]),
  :not(td, [hidden]) > :is(.nv-zero, .nv-o-table__empty, .nv-zero-skeleton):not(.nv-zero--match, [hidden])
) :has(:is(.nv-zero, .nv-o-table__empty, .nv-zero-skeleton):not(.nv-zero--match, [hidden])) {
  padding-block: 0 !important;
  margin-block: 0 !important;
}

:is(.nv-o-table, .nv-o-card, .nv-o-list, [data-nv-island]):has(
  tbody > tr:not([hidden]) > td > :is(.nv-zero, .nv-o-table__empty, .nv-zero-skeleton):not(.nv-zero--match, [hidden]),
  > :is(.nv-zero, .nv-o-table__empty, .nv-zero-skeleton):not(.nv-zero--match, [hidden]),
  :not(td, [hidden]) > :is(.nv-zero, .nv-o-table__empty, .nv-zero-skeleton):not(.nv-zero--match, [hidden])
) > :is(footer, [class*="pagination"]) {
  display: none !important;
}

/* A state that sits in a table row is not a row: no hover, no pointer, no zebra or plate. */
tr:has(> td > :is(.nv-zero, .nv-o-table__empty)),
tr:has(> td > :is(.nv-zero, .nv-o-table__empty)):hover,
tr:has(> td > :is(.nv-zero, .nv-o-table__empty)) > td,
tr:has(> td > :is(.nv-zero, .nv-o-table__empty)):hover > td {
  background: transparent !important;
  box-shadow: none !important;
  cursor: default;
}

tr:has(> td > :is(.nv-zero, .nv-o-table__empty, .nv-zero-skeleton)) > td {
  padding: 0 !important;
  border: 0 !important;
}

/* An empty island shows no title of its own and no column heads. Filter "no matches" rows keep
   both (they carry .nv-zero--match): the filters live in the head. An island outside the DS
   organisms marks itself with [data-nv-island] and its head with [data-nv-island-head]. */
:is(.nv-o-table, .nv-o-card, .nv-o-list, [data-nv-island]):has(
  tbody > tr:not([hidden]) > td > :is(.nv-zero, .nv-o-table__empty):not(.nv-zero--match, [hidden]),
  > :is(.nv-zero, .nv-o-table__empty):not(.nv-zero--match, [hidden]),
  :not(td, [hidden]) > :is(.nv-zero, .nv-o-table__empty):not(.nv-zero--match, [hidden]),
  > .nv-zero-skeleton
) > :is(header, .nv-o-table__head, .nv-o-card__head, .nv-o-card__header, .nv-o-list__head, [data-nv-island-head]) {
  display: none !important;
}

:is(.nv-o-table, .nv-o-card, .nv-o-list, [data-nv-island]):has(
  tbody > tr:not([hidden]) > td > :is(.nv-zero, .nv-o-table__empty):not(.nv-zero--match, [hidden])
) thead {
  display: none !important;
}

/* Loading: one skeleton for every section (.nv-zero-skeleton), drawn as the island's table rows.
   - Same height as the zero state (--nv-skeleton-rows rows of --nv-skeleton-row), so loading → empty
     does not move anything; a section that had data last time (html[data-nv-page-shape="ready"]) keeps
     its head and column titles, so loading → data only adds rows below.
   - Still, no shimmer: the bars fade in after --nv-skeleton-delay, so a fast answer never blinks. */
.nv-zero-skeleton {
  display: grid;
  grid-auto-rows: var(--nv-skeleton-row);
  align-content: start;
  box-sizing: border-box;
  gap: 0 !important;
  min-height: var(--nv-zero-min-height);
  margin: 0 !important;
  padding: 0 !important;
  overflow: hidden;
}

.nv-zero-skeleton > span {
  --nv-skeleton-bar: var(--nv-table-well, var(--dash-surface-hover, rgba(127, 127, 127, .14)));
  position: static !important;
  display: block !important;
  width: auto !important;
  height: auto !important;
  margin: 0 !important;
  padding: 0 var(--nv-island-padding, 24px) !important;
  border: 0 !important;
  border-radius: 0 !important;
  background:
    linear-gradient(var(--nv-skeleton-bar) 0 0) 0 50% / 26% 10px no-repeat content-box,
    linear-gradient(var(--nv-skeleton-bar) 0 0) 46% 50% / 14% 10px no-repeat content-box,
    linear-gradient(var(--nv-skeleton-bar) 0 0) 100% 50% / 12% 10px no-repeat content-box !important;
  box-shadow: none !important;
  animation: nv-skeleton-in .2s ease-out var(--nv-skeleton-delay) both !important;
}

.nv-zero-skeleton[hidden] { display: none !important; }
.nv-zero-skeleton > span + span {
  border-block-start: 1px solid var(--nv-table-line, var(--dash-border, rgba(127, 127, 127, .14))) !important;
}
.nv-zero-skeleton > span:nth-child(n + 5) { display: none !important; }
.nv-zero-skeleton > span::before,
.nv-zero-skeleton > span::after { content: none !important; animation: none !important; }

@keyframes nv-skeleton-in { from { opacity: 0; } to { opacity: 1; } }

@media (prefers-reduced-motion: reduce) {
  .nv-zero-skeleton > span { animation-duration: 0s !important; }
}

/* A section that had data draws its last table: the same row height and count, up to five
   (html[data-nv-page-row|rows], kept by the product shell). */
html[data-nv-page-shape="ready"] .nv-zero-skeleton {
  --nv-skeleton-row: var(--nv-page-row, calc(var(--nv-zero-min-height) / 4));
  min-height: 0;
}
html[data-nv-page-shape="ready"][data-nv-page-rows="1"] .nv-zero-skeleton > span:nth-child(n + 2),
html[data-nv-page-shape="ready"][data-nv-page-rows="2"] .nv-zero-skeleton > span:nth-child(n + 3),
html[data-nv-page-shape="ready"][data-nv-page-rows="3"] .nv-zero-skeleton > span:nth-child(n + 4),
html[data-nv-page-shape="ready"][data-nv-page-rows="4"] .nv-zero-skeleton > span:nth-child(n + 5) {
  display: none !important;
}
html[data-nv-page-shape="ready"][data-nv-page-rows="5"] .nv-zero-skeleton > span:nth-child(5) {
  display: block !important;
}

/* The loading island keeps the shape it had last time: a section that was empty loads as the bare
   island (no title, no column titles, no tip), one that had data keeps them. */
:is(.nv-o-table, .nv-o-card, .nv-o-list, [data-nv-island]):has(.nv-zero-skeleton:not([hidden], [hidden] *)):not(html[data-nv-page-shape="ready"] *) thead,
:is(.nv-o-table, .nv-o-card, .nv-o-list, [data-nv-island]):has(.nv-zero-skeleton:not([hidden], [hidden] *)):not(html[data-nv-page-shape="ready"] *) > :is(header, .nv-o-table__head, .nv-o-card__head, .nv-o-card__header, .nv-o-list__head, [data-nv-island-head]) {
  display: none !important;
}

html:not([data-nv-page-shape="ready"]) body:has(.nv-zero-skeleton:not([hidden], [hidden] *)) :is(.nv-m-tip, .nv-tip-slot:has(> .nv-m-tip)) {
  display: none !important;
}

/* Parts for markup built on the canon (DS cards); product sections keep their own title/copy
   classes, styled to the same tokens. */
.nv-zero__title {
  margin: 0;
  color: var(--nv-table-text, var(--dash-text, currentColor));
  font-size: var(--nv-type-headline-size, 1rem);
  line-height: var(--nv-type-headline-line, 1.4);
  font-weight: var(--nv-type-headline-weight, 600);
  letter-spacing: var(--nv-type-headline-tracking, 0);
}

.nv-zero__copy {
  max-width: 42ch;
  margin: 0;
  color: var(--nv-table-head, var(--dash-text-muted, currentColor));
  font-size: var(--nv-type-callout-size, .875rem);
  line-height: var(--nv-type-callout-line, 1.45);
  font-weight: var(--nv-type-callout-weight, 400);
  letter-spacing: var(--nv-type-callout-tracking, 0);
}

/* Section icons. */
.nv-home, body[class="dash-page"] { --nv-zero-icon: var(--nv-zero-icon-dashboard); }
.nv-tx, .tx-page, .mbx-page { --nv-zero-icon: var(--nv-zero-icon-transactions); }
.nv-pay, .pay-page { --nv-zero-icon: var(--nv-zero-icon-payments); }
.nv-inv, .inv-page { --nv-zero-icon: var(--nv-zero-icon-invoicing); }
.nv-acc, .acc-page { --nv-zero-icon: var(--nv-zero-icon-accounts); }
.nv-ops, .ops-page { --nv-zero-icon: var(--nv-zero-icon-operations); }
.nv-bud, .bud-page { --nv-zero-icon: var(--nv-zero-icon-budget); }
.nv-inc, .inc-page { --nv-zero-icon: var(--nv-zero-icon-income); }
.nv-tax, .tax-page { --nv-zero-icon: var(--nv-zero-icon-taxes); }
.nv-acct, .acct-page { --nv-zero-icon: var(--nv-zero-icon-accounting); }
.nv-ins, .ins-page { --nv-zero-icon: var(--nv-zero-icon-insights); }
.nv-rpt, .rpt-page:not(.mbx-page) { --nv-zero-icon: var(--nv-zero-icon-reports); }
.nv-ntf, .ntc-page { --nv-zero-icon: var(--nv-zero-icon-notifications); }
.nv-hlp, .hlp-page { --nv-zero-icon: var(--nv-zero-icon-help); }
.nv-set, .set-page { --nv-zero-icon: var(--nv-zero-icon-settings); }
.nv-ws, .nla-page { --nv-zero-icon: var(--nv-zero-icon-workspace); }

/* Section figures (shared/zero-art.js). A section without its own figure keeps the icon. */
.nv-home, body[class="dash-page"] { --nv-zero-art: dashboard; }
.nv-tx, .tx-page { --nv-zero-art: transactions; }
.mbx-page, .nv-mbx { --nv-zero-art: receipts; }
.nv-pay, .pay-page { --nv-zero-art: payments; }
.nv-inv, .inv-page { --nv-zero-art: invoicing; }
.nv-acc, .acc-page { --nv-zero-art: accounts; }
.nv-ops, .ops-page { --nv-zero-art: operations; }
.nv-bud, .bud-page { --nv-zero-art: budget; }
.nv-inc, .inc-page { --nv-zero-art: income; }
.nv-tax, .tax-page { --nv-zero-art: taxes; }
.nv-acct, .acct-page { --nv-zero-art: accounting; }
.nv-ins, .ins-page { --nv-zero-art: insights; }
.nv-rpt, .rpt-page:not(.mbx-page) { --nv-zero-art: reports; }
.nv-ntf, .ntc-page { --nv-zero-art: notifications; }
.nv-ws, .nla-page { --nv-zero-art: workspace; }
.nv-int, .int-page, .api-page { --nv-zero-art: integrations; }

/* A loading row is not a row either. */
tr:has(> td > [class*="skeleton"]),
tr:has(> td > [class*="skeleton"]):hover > td {
  background: transparent !important;
  cursor: default;
}

/* The section tip above the islands says what the zero state already says: while the section is
   empty the zero state speaks alone. The tip comes back with the first data. Its slot goes too, or the
   empty slot would still take a row and a gap above the island. */
body:is([data-nv-page-data="empty"], [data-mbx-state="empty"], :has(
  tbody > tr:not([hidden]) > td > .nv-zero:not(.nv-zero--match, [hidden]),
  :not(td, [hidden]) > .nv-zero:not(.nv-zero--match, [hidden])
)) :is(.nv-m-tip, .nv-tip-slot:has(> .nv-m-tip)) {
  display: none !important;
}

/* DS catalog: the figures side by side. */
.nv-zart-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(min(100%, 280px), 1fr)); gap: 16px; }
