/* Shared contextual actions for the private Files catalogue and public /s/ catalogue. */
.meta-context-menu {
  position: fixed;
  z-index: 100000;
  width: 232px;
  min-width: 220px;
  max-width: min(260px, calc(100vw - 16px));
  max-height: min(70vh, calc(100vh - 16px));
  padding: 6px;
  overflow-x: hidden;
  overflow-y: auto;
  border: 1px solid var(--meta-context-border);
  border-radius: 10px;
  color: var(--meta-context-text);
  background: var(--meta-context-surface);
  box-shadow: 0 12px 30px rgba(15, 23, 42, .16), 0 2px 8px rgba(15, 23, 42, .08);
  box-sizing: border-box;
  opacity: 0;
  transform: translateY(-3px) scale(.985);
  transform-origin: top right;
  transition: opacity 100ms ease, transform 100ms ease;
  overscroll-behavior: contain;
}

.meta-context-menu.is-open { opacity: 1; transform: translateY(0) scale(1); }
.meta-context-menu::-webkit-scrollbar { width: 6px; }
.meta-context-menu::-webkit-scrollbar-thumb { border-radius: 999px; background: #aab2bd; }
.meta-context-menu { scrollbar-width: thin; scrollbar-color: #aab2bd transparent; }
.meta-context-menu--private {
  --meta-context-surface: var(--meta-bg, #fff);
  --meta-context-border: var(--meta-border, #d8dee7);
  --meta-context-divider: var(--meta-border, #e2e8f0);
  --meta-context-text: #374151;
  --meta-context-hover-bg: #f1f5f9;
  --meta-context-hover-text: #1e293b;
  --meta-context-focus: #3b82f6;
  --meta-context-disabled: #8a94a3;
}

.meta-context-menu--public {
  --meta-context-surface: var(--surface, #fff);
  --meta-context-border: var(--line-strong, #cfd5dc);
  --meta-context-divider: var(--line, #dfe3e8);
  --meta-context-text: #30343a;
  --meta-context-hover-bg: #f1f6ff;
  --meta-context-hover-text: #1765d7;
  --meta-context-focus: #2878f0;
  --meta-context-disabled: #7a8492;
}

.meta-context-menu__group { display: flex; flex-direction: column; gap: 0; }
.meta-context-menu__separator {
  height: 1px;
  margin: 4px 4px;
  border: 0;
  background: var(--meta-context-divider);
}

.meta-context-action,
.meta-context-action:focus {
  appearance: none;
  width: 100%;
  height: 34px;
  min-height: 34px;
  margin: 0;
  padding: 0 10px;
  display: flex;
  align-items: center;
  gap: 10px;
  border: 0;
  border-radius: 4px;
  outline: 0;
  color: inherit;
  background: transparent;
  box-shadow: none;
  font: 500 14px/20px -apple-system, BlinkMacSystemFont, "SF Pro Text", "Segoe UI", sans-serif;
  text-align: left;
  white-space: nowrap;
  cursor: pointer;
}

.meta-context-action:hover,
.meta-context-action:focus-visible {
  color: var(--meta-context-hover-text);
  background: var(--meta-context-hover-bg);
}

.meta-context-action:focus-visible { box-shadow: inset 0 0 0 1px var(--meta-context-focus); }
.meta-context-action[aria-disabled="true"] {
  color: var(--meta-context-disabled);
  background: transparent;
  cursor: default;
}

.meta-context-action[aria-disabled="true"]:focus-visible {
  box-shadow: inset 0 0 0 1px var(--meta-context-focus);
}

/*
 * Busy is an interaction guard, not a visual replacement state.
 * Preserve the original action icon while the asynchronous operation runs;
 * aria-busy continues to prevent duplicate dispatches and expose state to AT.
 */
.meta-context-action[aria-busy="true"] { pointer-events: none; }

.meta-context-action[data-action="move-to-trash"] { color: #dc2626; }
.meta-context-action[data-action="move-to-trash"]:hover,
.meta-context-action[data-action="move-to-trash"]:focus-visible { color: #b91c1c; background: #fff1f2; }
.meta-context-action[data-action="move-to-trash"][aria-disabled="true"] { color: var(--meta-context-disabled); background: transparent; }

.meta-context-action__icon,
.meta-context-quick__icon {
  display: block;
  flex: 0 0 auto;
}

.meta-context-action__icon {
  background-color: currentColor;
  -webkit-mask: var(--meta-context-icon) center / contain no-repeat;
  mask: var(--meta-context-icon) center / contain no-repeat;
}

.meta-context-action__icon { width: 18px; height: 18px; }
.meta-context-action__label { min-width: 0; overflow: hidden; text-overflow: ellipsis; }

[data-action="open"] { --meta-context-icon: url('../svg/open.svg'); }
[data-action="download"] { --meta-context-icon: url('../svg/download.svg'); }
[data-action="download-zip"] { --meta-context-icon: url('../svg/zip.svg'); }
[data-action="copy-link"] { --meta-context-icon: url('../svg/link.svg'); }
[data-action="share"] { --meta-context-icon: url('../svg/share.svg'); }
[data-action="short-link"] { --meta-context-icon: url('../svg/short-link.svg'); }
[data-action="info"] { --meta-context-icon: url('../svg/info.svg'); }
[data-action="rename"] { --meta-context-icon: url('../svg/rename.svg'); }
[data-action="move-to"] { --meta-context-icon: url('../svg/move.svg'); }
[data-action="copy-to"] { --meta-context-icon: url('../svg/copy.svg'); }
[data-action="move-to-trash"] { --meta-context-icon: url('../svg/delete.svg'); }
[data-action="located-in"] { --meta-context-icon: url('../svg/go-to-folder.svg'); }
[data-action="actions"] { --meta-context-icon: url('../svg/options.svg'); }

/* Public quick controls mirror the private Files action strip. */
.item-actions.meta-context-quick-actions {
  height: 28px;
  min-height: 28px;
  margin: 0 auto var(--meta-dl-grid-edge-gap, 9px);
  gap: 0;
}

.meta-context-quick,
.meta-context-quick:focus {
  appearance: none;
  width: 28px;
  min-width: 28px;
  height: 28px;
  min-height: 28px;
  margin: 0;
  padding: 0;
  display: inline-grid;
  place-items: center;
  border: 0;
  border-radius: 0;
  outline: 0;
  color: #2e2f30;
  background: transparent;
  box-shadow: none;
  text-decoration: none;
  cursor: pointer;
}

.meta-context-quick__icon {
  width: 20px;
  height: 20px;
  background: var(--meta-context-icon) center / contain no-repeat;
  opacity: 1;
  filter: none;
  pointer-events: none;
}
.meta-context-quick:hover { background: transparent; }
.meta-context-quick:focus-visible { box-shadow: inset 0 0 0 1px #2878f0; border-radius: 4px; }
.meta-context-quick[aria-disabled="true"] { cursor: default; }
.meta-context-quick[aria-busy="true"],
.meta-dl-btn[aria-busy="true"] { pointer-events: none; }
.items.is-list .meta-context-quick.download-button,
.items.is-list .meta-context-quick.copy-download-link {
  width: 28px;
  min-width: 28px;
  flex: 0 0 28px;
  padding: 0;
  font-size: 0;
  border-radius: 0;
  background: transparent;
}
.meta-context-quick.download-button:hover { background: transparent; }

/* One non-modal Info renderer for both authorized catalogues. */
.meta-context-info {
  position: fixed;
  z-index: 100020;
  top: 50%;
  left: 50%;
  width: min(420px, calc(100vw - 24px));
  max-height: calc(100vh - 24px);
  display: flex;
  flex-direction: column;
  overflow: hidden;
  transform: translate(-50%, -50%);
  border: 1px solid var(--meta-border, var(--line-strong, #aeb8c5));
  border-radius: 11px;
  color: var(--meta-text, var(--text, #1d2735));
  background: var(--meta-bg, var(--surface, #fff));
  box-shadow: 0 18px 48px rgba(24, 35, 52, .16), 0 2px 8px rgba(24, 35, 52, .07);
  box-sizing: border-box;
  isolation: isolate;
  font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
}

.meta-context-info.is-positioned { transform: none; }
.meta-context-info__header {
  height: 34px;
  min-height: 34px;
  padding: 0 6px 0 14px;
  display: flex;
  flex: 0 0 34px;
  align-items: center;
  justify-content: space-between;
  border-bottom: 1px solid var(--meta-border, var(--line, #e2e8f0));
  background: var(--meta-surface, var(--surface-soft, #f7f8fa));
  box-sizing: border-box;
  cursor: grab;
  touch-action: none;
  user-select: none;
}
.meta-context-info__header.is-dragging { cursor: grabbing; }
.meta-context-info__title {
  min-width: 0;
  overflow: hidden;
  color: var(--meta-text, var(--text, #17202c));
  font-size: 14px;
  font-weight: 600;
  line-height: 1.2;
  letter-spacing: -.01em;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.meta-context-info__close,
.meta-context-info__close:focus {
  position: relative;
  width: 24px;
  min-width: 24px;
  height: 24px;
  min-height: 24px;
  padding: 0;
  display: grid;
  place-items: center;
  border: 1px solid var(--meta-border, var(--line, #d5dae1));
  border-radius: 50%;
  color: var(--meta-muted, var(--muted, #657080));
  background: var(--meta-bg, var(--surface, #fff));
  box-shadow: none;
  cursor: pointer;
}
.meta-context-info__close::before,
.meta-context-info__close::after {
  content: "";
  position: absolute;
  top: 50%;
  left: 50%;
  width: 13px;
  height: 1.4px;
  border-radius: 1px;
  background: currentColor;
}
.meta-context-info__close::before { transform: translate(-50%, -50%) rotate(45deg); }
.meta-context-info__close::after { transform: translate(-50%, -50%) rotate(-45deg); }
.meta-context-info__close:hover { color: var(--meta-text, var(--text, #252f3c)); background: var(--meta-surface, var(--surface-soft, #f1f3f5)); }
.meta-context-info__close:focus-visible { outline: 0; box-shadow: inset 0 0 0 1px #3478f6; }
.meta-context-info__body { min-height: 0; padding: 16px 18px 12px; overflow: auto; box-sizing: border-box; }
.meta-context-info__list { display: flex; flex-direction: column; }
.meta-context-info__row {
  min-height: 34px;
  padding: 6px 0;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 18px;
  border-bottom: 1px solid var(--meta-border, var(--line, #edf0f3));
  box-sizing: border-box;
}
.meta-context-info__row:last-child { border-bottom: 0; }
.meta-context-info__label { flex: 0 0 auto; color: var(--meta-muted, var(--muted, #697587)); font-size: 11px; font-weight: 600; }
.meta-context-info__value { min-width: 0; max-width: 68%; color: var(--meta-text, var(--text, #273342)); font-size: 12px; text-align: right; overflow-wrap: anywhere; }
.meta-context-info__value.is-code { padding: 2px 6px; border-radius: 5px; background: var(--meta-surface, var(--surface-soft, #f3f5f7)); font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace; font-size: 11px; }
.meta-context-info__actions { margin-top: 12px; display: flex; align-items: center; justify-content: flex-end; gap: 8px; }
.meta-context-info__button,
.meta-context-info__button:focus { height: 28px; min-height: 28px; padding: 0 13px; border: 1px solid #3478f6; border-radius: 7px; color: #fff; background: #3478f6; font: 600 12px/26px -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif; box-shadow: none; cursor: pointer; }
.meta-context-info__button:hover { border-color: #276be0; background: #276be0; }
.meta-context-info__button:focus-visible { outline: 0; box-shadow: inset 0 0 0 1px rgba(255, 255, 255, .5), 0 0 0 1px #3478f6; }

@media (pointer: coarse) {
  .meta-context-action { height: 38px; min-height: 38px; }
}

@media (max-width: 235px) {
  .meta-context-menu {
    width: calc(100vw - 16px);
    min-width: 0;
    max-width: calc(100vw - 16px);
  }
}

@media (prefers-reduced-motion: reduce) {
  .meta-context-menu { transition: none; }
}
