/* Loading skeleton: the host sets the size and the cell colour; js/core/loading-blocks.js draws. */
.loading-blocks{position:relative;display:block;overflow:hidden;pointer-events:none}
.loading-blocks > canvas{position:absolute;top:0;left:0}
/* Empty / loading / failure: one block replaces the table body and its header. */
td.empty-cell{height:auto;padding:0}
table:has(td.empty-cell) thead{display:none}
.empty{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;padding:40px 16px;text-align:center;color:var(--text2);font-size:var(--text-md)}
.empty.is-error{color:var(--rose)}
.loading-blocks{height:176px;color:color-mix(in oklab,var(--text2) 25%,transparent)}
/* Row overflow menu */
.menu{position:fixed;z-index:60;min-width:160px;padding:4px;background:var(--bg2);border:1px solid var(--border);border-radius:var(--radius-sm);box-shadow:var(--shadow-overlay);transform-origin:top right}
.menu[hidden]{display:none}
.menu-item{display:flex;align-items:center;gap:8px;width:100%;height:32px;padding:0 10px;border:0;border-radius:5px;background:none;color:var(--text);font:inherit;font-size:var(--text-base);text-align:left;cursor:pointer}
.menu-item svg{width:15px;height:15px;stroke:currentColor;fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;color:var(--text2)}
.menu-item:hover,.menu-item:focus-visible{background:var(--bg3);outline:none}
.menu-item.is-danger,.menu-item.is-danger svg{color:var(--rose)}
/* View switch: old content fades, new content fades in moving 8px along the nav order. */
.main{view-transition-name:mh-main}
::view-transition{pointer-events:none}
::view-transition-group(root),::view-transition-old(root),::view-transition-new(root){animation:none}
::view-transition-old(mh-main){animation:mh-vt-out var(--dur-quick) var(--ease-out) both}
::view-transition-new(mh-main){animation:mh-vt-in var(--dur-med) var(--ease-out) both}
@keyframes mh-vt-out{to{opacity:0}}
@keyframes mh-vt-in{from{opacity:0;transform:translateY(var(--mh-vt-offset,8px))}}
html[data-vt-dir="up"]{--mh-vt-offset:-8px}
/* The footer is the same on every view: its own snapshot, swapped in place, so it does not
   fade and slide with the content it sits under. */
.main-foot{view-transition-name:mh-foot}
::view-transition-group(mh-foot),::view-transition-new(mh-foot){animation:none}
::view-transition-old(mh-foot){animation:none;opacity:0}
@media (prefers-reduced-motion: reduce) {
  ::view-transition-group(*),::view-transition-old(*),::view-transition-new(*){animation:none !important}
  .collapse-caret{transition:none !important}
  .card-tab-ind{transition:none !important}
}
