/* The staff overview (design v9, board AdminOverview): the page head with
   the read time and an icon refresh, then white cards 16 apart on the page
   grey: today's figures with the five task states, the alerts, today's
   failed tasks beside funding intake (one column below 1440px), and the
   channel health. The landing section is the transparent stack that holds
   them; each card carries its own parts, with dividers and no inner boxes.
   The alert rows are the staff shell's (shared/base.css), as in the bell. */
body.admin-console main.admin-stack > #landing { display: flex; flex-direction: column; gap: 16px; padding: 0; background: none; border: 0; border-radius: 0; box-shadow: none; }
#landing > .page-head { position: relative; align-items: center; margin: 0 0 8px; }
#landing .page-desc:empty::before { content: "\00a0"; }
.ov-head-end { display: flex; align-items: center; gap: 12px; }
#ov-updated { min-width: 0; white-space: normal; }
#ov-refresh[aria-busy="true"] > .glyph { opacity: .5; }
#ov-mfa { margin: 0; }
#ov-mfa > .glyph { width: 16px; height: 16px; margin: 0; }
#ov-mfa > a { flex: none; color: var(--warning-fg); font-weight: 500; }
.ov-card { min-width: 0; margin: 0; overflow: hidden; border: 1px solid var(--line); border-radius: var(--r-12); background: var(--gray-0); box-shadow: var(--e1); }
.ov-card-head { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 12px 16px; padding: 20px 20px 12px; }
.ov-title-row { display: flex; align-items: center; gap: 8px; min-width: 0; }
.ov-card-title { margin: 0; color: var(--text-1); font: 600 16px/24px var(--font-sans); }
.ov-card-desc { margin: 4px 0 0; color: var(--text-2); font-size: 13px; line-height: 20px; }
.ov-card-status { margin: 0; padding: 0 20px 16px; color: var(--text-2); font-size: 13px; line-height: 20px; }
.ov-card-status:empty { display: none; }
.ov-card-status > .glyph, .ov-meta > .glyph { position: relative; top: 1px; margin-right: 6px; color: var(--danger-fg); }
.ov-card-foot { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; min-height: 44px; margin-top: auto; padding: 8px 20px; border-top: 1px solid var(--line-soft); }
.ov-more { flex: none; font-size: 13px; line-height: 20px; }
.ov-retry.btn.btn-link { gap: 4px; font-size: 13px; line-height: 20px; vertical-align: top; }
.ov-retry > .glyph { width: 16px; height: 16px; transform: scale(.875); }
.ov-card .badge { display: inline-flex; align-items: center; gap: 6px; height: 22px; min-height: 22px; padding: 0 8px; border-radius: var(--r-6); font: 500 12px/16px var(--font-sans); white-space: nowrap; }
.ov-card .badge > .glyph { flex: none; }
.ov-card .dot { flex: none; width: 6px; height: 6px; border-radius: 50%; background: currentColor; }
.ov-card .badge-neutral .dot { background: var(--neutral-dot); }
.ov-card .badge-success .dot { background: var(--success-dot); }
.ov-card .badge-warning .dot { background: var(--warning-dot); }
.ov-card .badge-danger .dot { background: var(--danger-solid); }
.ov-card .badge-info .dot { background: var(--info-dot); }
.ov-card .badge-info { box-shadow: inset 0 0 0 1px var(--violet-100); }
.ov-card .count { min-width: 20px; }

/* A card that could not be read (board AdminOverview, 读不到数据): the
   empty state, centred, naming the block and the request ID, with 重试. */
.ov-fail-box > .ov-fail { max-width: 440px; padding: 32px 20px 40px; }
.ov-fail .empty-icon > .glyph { color: var(--gray-700); }
.ov-fail .empty-text { text-wrap: pretty; }
.ov-fail .btn > .glyph { width: 16px; height: 16px; }

/* Today: four figures in one card (two by two on phones); under them the
   five task states, each a link into today's tasks of that state. */
.ov-cells { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); }
.ov-cell { display: flex; flex-direction: column; gap: 4px; min-width: 0; padding: 20px; }
.ov-cell + .ov-cell { border-left: 1px solid var(--line-soft); }
.ov-cell > p { margin: 0; }
.ov-label { margin: 0; color: var(--text-2); font-size: 13px; line-height: 20px; }
.ov-val { color: var(--text-1); font: 600 24px/32px var(--font-sans); font-variant-numeric: tabular-nums; letter-spacing: -.01em; }
.ov-val.ov-state { color: var(--text-3); font: 400 14px/32px var(--font-sans); letter-spacing: 0; }
.ov-meta { margin: 0; overflow: hidden; color: var(--text-3); font-size: 13px; line-height: 20px; text-overflow: ellipsis; white-space: nowrap; }
.ov-meta:empty::before { content: "\00a0"; }
.ov-status { display: flex; flex-wrap: wrap; align-items: center; gap: 4px 12px; padding: 8px 20px 8px 16px; border-top: 1px solid var(--line-soft); }
.ov-status:empty { display: none; }
.ov-st { position: relative; display: inline-flex; align-items: center; gap: 8px; height: 32px; padding: 0 8px 0 4px; border-radius: var(--r-6); color: var(--text-1); text-decoration: none; transition: background-color var(--t-hover) var(--ease); }
.ov-st:hover { background: var(--gray-50); color: var(--text-1); text-decoration: none; }
.ov-st-n { font: 500 14px/20px var(--font-sans); font-variant-numeric: tabular-nums; }
.ov-note { margin: 0; padding: 12px 20px; border-top: 1px solid var(--line-soft); color: var(--text-2); font-size: 13px; line-height: 20px; }

/* Alerts: the shell's alert rows under the card head, the sources that
   could not be read under them, and the bell's rule at the foot. */
.ov-alerts { display: flex; flex-direction: column; }
.ov-alerts > .ov-card-status { padding-top: 12px; border-top: 1px solid var(--line-soft); }
.ov-alert-list:empty + .ov-card-status { border-top: 0; padding-top: 0; }
.ov-bell-note { margin: 0; color: var(--text-3); font-size: 13px; line-height: 20px; }

/* Today's failed tasks beside funding intake, which keeps its own height in
   the side column; one column below 1440px. */
.ov-grid { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 320px); gap: 16px; align-items: stretch; }
.ov-side { display: flex; flex-direction: column; gap: 16px; min-width: 0; }
.ov-fails, .ov-fund-card { display: flex; flex-direction: column; }
.ov-fund-card > .ov-card-foot { margin-top: 0; }
.ov-fail-t { table-layout: fixed; }
.ov-fail-t .c-time { width: 72px; }
.ov-fail-t .c-team { width: 104px; }
.ov-fail-t .c-id { width: 144px; }
.ov-fail-t .c-ch { width: 112px; }
.ov-fail-t .c-err { width: 164px; }
.ov-fail-t td { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.ov-fail-t td.c-time { font-size: 13px; font-variant-numeric: tabular-nums; }
.ov-task { color: var(--text-2); font: 400 13px/20px var(--font-mono); text-decoration: none; }
.ov-fail-t tbody tr:hover .ov-task, .ov-task:focus-visible { color: var(--violet-700); text-decoration: underline; text-underline-offset: 3px; }
.ov-fail-t tbody tr { cursor: pointer; }
.ov-model { color: var(--text-2); font: 400 13px/20px var(--font-sans); }
.ov-err { color: var(--text-2); font: 400 12px/16px var(--font-mono); }
.ov-fail-wrap:has(tbody:empty) { display: none; }
.ov-fails > .ov-card-status { padding-top: 12px; }
.ov-sm2 { display: none; }

/* Funding intake: its three facts, then the arrivals waiting for review. */
.ov-facts { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 12px; margin: 0; padding: 4px 20px 16px; }
.ov-facts > div { min-width: 0; }
.ov-facts dt { color: var(--text-3); font-size: 12px; line-height: 16px; }
.ov-facts dd { margin: 4px 0 0; color: var(--text-1); font-size: 14px; line-height: 20px; }
.ov-facts dd.is-off { display: inline-flex; padding: 0 6px; border-radius: var(--r-4); background: var(--danger-tint); color: var(--danger-fg); }
.ov-fund { display: flex; flex-direction: column; gap: 2px; padding: 16px 20px; border-top: 1px solid var(--line-soft); }
.ov-fund > p { margin: 0; }
.ov-fund > .ov-meta:has(> .ov-retry) { overflow: visible; white-space: normal; }
.ov-fund-val { color: var(--text-1); font: 600 16px/24px var(--font-sans); font-variant-numeric: tabular-nums; }
.ov-fund-card > .ov-card-status { padding: 0 20px 12px; }

/* Channel health: accounts down, models across by name; under 768px one
   block per account, the models that are not normal first. */
.ov-health { min-width: 640px; table-layout: fixed; }
.ov-health th:first-child { width: 200px; }
.ov-health td { height: 56px; }
.ov-model-head { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.ov-acct { display: block; overflow: hidden; color: var(--text-1); font: 500 14px/20px var(--font-sans); text-overflow: ellipsis; white-space: nowrap; }
.ov-sub { display: block; overflow: hidden; color: var(--text-3); font: 400 12px/16px var(--font-mono); text-overflow: ellipsis; white-space: nowrap; }
.ov-sub.ov-key { font: 400 13px/20px var(--font-sans); }
.ov-hc { display: flex; flex-wrap: wrap; align-items: center; gap: 4px 8px; }
.ov-hc-n { color: var(--text-2); font-size: 13px; line-height: 20px; font-variant-numeric: tabular-nums; white-space: nowrap; }
.ov-hc-n.is-off { color: var(--text-3); }
.ov-hm { display: none; }
.ov-health-wrap:has(thead tr:empty) { display: none; }

/* The sheet of one task (BRIEF 3.8 Sheet; FE9-SEL-A2b): a failed task's
   row opens it at the right, 8 from the edges under the staff bar, beside
   the page, which stays usable; 640 wide, 560 under 1280px and the whole
   screen under 768px. Its head holds the title, the task ID with its copy
   button, the link to the task page and the close button (on phones the
   title gives its room to the ID and the link shows its arrow alone, as on
   the board's phone sheet); its body the status and error, the facts as a
   description list, the attempts and the pages that handle it. */
.ov-sheet { position: fixed; top: calc(var(--topbar-height) + 8px); right: 8px; bottom: 8px; z-index: 24; display: flex; flex-direction: column; width: 640px; max-width: calc(100% - 16px); margin: 0; overflow: hidden; border-radius: var(--r-12); background: var(--gray-0); box-shadow: var(--e3); }
.ov-sheet[hidden] { display: none; }
.ov-sheet-head { display: flex; flex: none; align-items: center; gap: 12px; min-height: 56px; padding: 8px 12px 8px 20px; border-bottom: 1px solid var(--line-soft); }
.ov-sheet-title { flex: none; margin: 0; color: var(--text-1); font: 600 16px/24px var(--font-sans); }
.ov-sheet-id { flex: 0 1 auto; min-width: 0; overflow: hidden; color: var(--text-2); font: 400 13px/20px var(--font-mono); text-overflow: ellipsis; white-space: nowrap; }
.ov-sheet-copy { flex: none; margin-left: -8px; }
.ov-sheet-copy > .glyph { color: var(--gray-700); }
.ov-sheet-actions { display: flex; flex: none; align-items: center; gap: 8px; margin-left: auto; }
.ov-sheet-actions > .btn > .glyph { color: var(--gray-700); }
.ov-sheet-body { display: flex; flex: 1 1 auto; flex-direction: column; gap: 20px; min-height: 0; padding: 16px 20px 32px; overflow-y: auto; }
.ov-sheet-status { display: flex; flex-wrap: wrap; align-items: center; gap: 8px 12px; }
.ov-sheet-what { color: var(--text-1); font: 500 14px/20px var(--font-sans); }
.ov-sheet-error { display: flex; flex-direction: column; gap: 4px; padding: 12px 16px; border: 1px solid var(--danger-border); border-radius: var(--r-8); background: var(--danger-tint); color: var(--danger-fg); }
.ov-sheet-error > p { margin: 0; font-size: 13px; line-height: 20px; overflow-wrap: anywhere; }
.ov-sheet-code { font: 500 13px/20px var(--font-mono); }
.ov-sheet-part { display: flex; flex-direction: column; gap: 8px; min-width: 0; }
.ov-sheet-h { margin: 0; color: var(--text-1); font: 500 14px/20px var(--font-sans); }
.ov-sheet-facts { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 16px 24px; margin: 0; padding: 16px 0 0; border-top: 1px solid var(--line-soft); }
.ov-sheet-facts > div { min-width: 0; }
.ov-sheet-facts dt { color: var(--text-3); font-size: 12px; line-height: 16px; }
.ov-sheet-facts dd { min-width: 0; margin: 4px 0 0; color: var(--text-1); font-size: 14px; line-height: 20px; overflow-wrap: anywhere; }
.ov-sheet-mono { color: var(--text-2); font: 400 12px/20px var(--font-mono); overflow-wrap: anywhere; }
.ov-sheet-released { color: var(--text-3); }
.ov-sheet-attempts { display: flex; flex-direction: column; margin: 0; padding: 0; list-style: none; }
.ov-sheet-attempt { display: flex; flex-direction: column; gap: 2px; padding: 10px 0; border-top: 1px solid var(--line-soft); }
.ov-sheet-attempt > p { margin: 0; }
.ov-sheet-attempt-head { display: flex; flex-wrap: wrap; align-items: baseline; gap: 4px 12px; color: var(--text-1); font-size: 14px; line-height: 20px; }
.ov-sheet-attempt-head > strong { font-weight: 500; }
.ov-sheet-attempt-sub { display: flex; flex-wrap: wrap; align-items: baseline; gap: 4px 8px; color: var(--text-3); font-size: 13px; line-height: 20px; }
.ov-sheet-note { margin: 0; color: var(--text-2); font-size: 13px; line-height: 20px; }
.ov-sheet-links { display: flex; flex-wrap: wrap; gap: 8px; }

@media (min-width: 1280px) and (max-width: 1439px) {
  .ov-cell { padding: 20px 16px; }
}
@media (max-width: 1439px) {
  .ov-grid { grid-template-columns: minmax(0, 1fr); }
  .ov-side { display: block; }
}
@media (max-width: 1279px) {
  .ov-hc { flex-direction: column; align-items: flex-start; gap: 2px; }
  .ov-sheet { width: 560px; }
}
@media (max-width: 767px) {
  #landing > .page-head { flex-direction: column; align-items: flex-start; gap: 4px; }
  .ov-cells { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .ov-cell { padding: 16px; }
  .ov-cell + .ov-cell { border-left: 0; }
  .ov-cell:nth-child(n + 3) { border-top: 1px solid var(--line-soft); }
  .ov-cell:nth-child(even) { border-left: 1px solid var(--line-soft); }
  .ov-card-head { padding: 16px 16px 12px; }
  .ov-card-status { padding: 0 16px 16px; }
  .ov-card-foot { padding: 8px 16px; }
  .ov-status { gap: 4px 8px; padding: 8px 12px; }
  .ov-st::before { content: ""; position: absolute; inset: -6px 0; }
  .ov-fail-t, .ov-fail-t tbody { display: block; width: 100%; }
  .ov-fail-t thead { position: absolute; width: 1px; height: 1px; overflow: hidden; clip-path: inset(50%); }
  .ov-fail-t tbody tr { display: grid; grid-template-columns: auto minmax(0, 1fr) auto; grid-template-areas: "time team err" "id id id"; gap: 2px 8px; padding: 10px 16px; border-bottom: 1px solid var(--line-soft); }
  .ov-fail-t tbody tr:last-child { border-bottom: 0; }
  .table.ov-fail-t tbody td { display: block; width: auto; height: auto; padding: 0; border: 0; }
  .ov-fail-t .c-time { grid-area: time; }
  .ov-fail-t .c-team { grid-area: team; }
  .ov-fail-t .c-err { grid-area: err; text-align: right; }
  .table.ov-fail-t tbody td.c-id { grid-area: id; display: flex; flex-wrap: wrap; gap: 0 6px; min-width: 0; white-space: normal; }
  .ov-sm2 { display: inline; overflow: hidden; color: var(--text-3); font-size: 13px; line-height: 20px; text-overflow: ellipsis; }
  .table.ov-fail-t tbody .c-model, .table.ov-fail-t tbody .c-ch { display: none; }
  .ov-facts { padding: 4px 16px 16px; }
  .ov-fund { padding: 16px; }
  .ov-health-wrap { display: none; }
  .ov-hm { display: block; border-top: 1px solid var(--line-soft); }
  .ov-hm:empty { display: none; }
  .ov-hm-acct + .ov-hm-acct { border-top: 1px solid var(--line-soft); }
  .ov-hm-head { padding: 12px 16px 8px; }
  .ov-hm-row { display: flex; flex-wrap: wrap; align-items: center; gap: 4px 8px; min-height: 44px; padding: 8px 16px; border-top: 1px solid var(--line-soft); }
  .ov-hm-m { flex: 1 1 100%; color: var(--text-1); font: 400 13px/20px var(--font-sans); }
  .ov-hm-row > .ov-hc { flex-direction: row; align-items: center; }
  .ov-fail-box > .ov-fail { padding: 24px 16px 32px; }
  .ov-sheet { top: var(--topbar-height); right: 0; bottom: 0; left: 0; width: 100%; max-width: none; border-radius: 0; }
  .ov-sheet-head { gap: 8px; padding: 6px 8px 6px 16px; }
  .ov-sheet-title { display: none; }
  .ov-sheet-copy { margin-left: -4px; }
  .ov-sheet-open > .ov-sheet-open-text { display: none; }
  .ov-sheet-actions > .ov-sheet-open { width: 32px; padding: 0; }
  .ov-sheet-body { padding: 16px 16px 32px; }
  .ov-sheet-facts { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 12px 16px; }
  .ov-sheet-actions > .btn { position: relative; }
  .ov-sheet-actions > .btn::before { content: ""; position: absolute; inset: -6px; }
}
