/* A page's outline while its data loads (boot/skeleton.js), as SwiftUI's redacted placeholder draws one: soft grey
   rounded bars where the words and numbers go, in the page's own layout. No spinner; the page fades in over it. */
.skeleton {
  flex: 1;
  min-height: 0;
  overflow: hidden;
  pointer-events: none;
}

.skeleton-bar {
  display: block;
  flex: none;
  max-width: 100%;
  height: 10px;
  border-radius: 5px;
  background: var(--color-fill);
}

.skeleton-bar.is-faint { height: 8px; opacity: .6; }
.skeleton-bar.is-title { height: 16px; border-radius: 6px; }
.skeleton-bar.is-chip { height: 22px; border-radius: var(--radius-control); opacity: .7; }
.skeleton-icon { flex: none; width: 16px; height: 16px; border-radius: 4px; background: var(--color-fill); }

/* the bars breathe slowly, as a redacted view waiting on its data; still for Reduce Motion */
.skeleton:not([hidden]), .skeleton-nav, .toolbar-title > .skeleton-bar { animation: skeleton-breathe 1.6s ease-in-out infinite alternate; }
@keyframes skeleton-breathe { from { opacity: 1; } to { opacity: .55; } }

/* the sidebar's rows and the toolbar's title, until they are named */
.skeleton-nav { display: flex; flex-direction: column; padding-top: 4px; }
.skeleton-nav .is-heading { margin: 18px 8px 8px; }
.skeleton-item { display: flex; align-items: center; gap: 8px; height: var(--control-height); padding: 0 8px; }
.toolbar-title > .skeleton-bar { margin: 2px 0; }

/* a platform grid (and the Quality grid): a section's head, then a header row and its rows */
.skeleton-section { border-bottom: .5px solid var(--color-separator); }
.skeleton-head { display: flex; align-items: center; gap: 8px; height: 40px; padding: 0 14px; border-bottom: .5px solid var(--color-separator); }
.skeleton-grid, .skeleton-table { display: flex; flex-direction: column; }
.skeleton-row { display: grid; grid-template-columns: 160px repeat(6, minmax(0, 1fr)); align-items: center; height: 32px; padding: 0 16px; border-bottom: .5px solid var(--color-separator-light); }
.skeleton-row.is-header { height: 54px; border-bottom-color: var(--color-separator); }
.skeleton-row > span { display: flex; align-items: center; gap: 8px; padding: 0 8px; }
.skeleton-row > span.is-center { flex-direction: column; justify-content: center; gap: 6px; }
.skeleton-row > span.is-end { justify-content: flex-end; }
.skeleton-table .skeleton-row { grid-template-columns: repeat(7, minmax(0, 1fr)); }
.skeleton-filters { display: flex; align-items: center; gap: 8px; height: 40px; padding: 0 var(--edge); border-bottom: .5px solid var(--color-separator); }

/* Overview: its section list at the left, a heading, and four chart cards */
.skeleton-board { display: flex; gap: 24px; max-width: 1050px; margin: 0 auto; padding: 56px 24px; }
.skeleton-rail { display: flex; flex: none; flex-direction: column; gap: 14px; width: 160px; padding-top: 6px; }
.skeleton-main { display: flex; flex: 1; flex-direction: column; gap: 10px; min-width: 0; }
.skeleton-cards { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 24px; margin-top: 16px; }
.skeleton-card { display: flex; flex-direction: column; gap: 8px; height: 266px; padding: 16px; border: .5px solid var(--color-separator); border-radius: 12px; }
.skeleton-columns { display: flex; flex: 1; align-items: flex-end; gap: 14px; padding: 24px 24px 18px; }
.skeleton-column { flex: 1; border-radius: 4px; background: var(--color-fill); }

/* a page of prose */
.skeleton-text { display: flex; flex-direction: column; gap: 10px; max-width: 720px; margin: 0 auto; padding: 48px 24px; }
.skeleton-text p { display: flex; flex-direction: column; gap: 9px; margin: 14px 0 0; }

/* a chart waiting on its tags (the release history) */
.skeleton-block { display: flex; flex-direction: column; justify-content: center; gap: 12px; min-height: 160px; }
.skeleton-block .skeleton-bar { width: 100%; }
.skeleton-block .skeleton-bar.is-short { width: 60%; }

/* the page drawn in place of its outline fades in */
.content.is-revealing > :not(.skeleton) { animation: skeleton-reveal .32s ease-out both; }  /* every page, whichever it is */
@keyframes skeleton-reveal { from { opacity: 0; } to { opacity: 1; } }

@media (prefers-reduced-motion: reduce) {
  .skeleton:not([hidden]), .skeleton-nav, .toolbar-title > .skeleton-bar, .skeleton-block { animation: none; }
  .content.is-revealing > * { animation: none; }
}

@media (max-width: 899px) {
  .skeleton-rail { display: none; }
  .skeleton-cards { grid-template-columns: minmax(0, 1fr); }
  .skeleton-row { grid-template-columns: 110px repeat(3, minmax(0, 1fr)); }
  .skeleton-row > span:nth-child(n + 5) { display: none; }
}
