/* Shared action contract. Deliberately excludes inputs, Select2 and editor toolbars. */
:root{--ui-line:#dce2eb;--ui-ink:#243248;--ui-muted:#58677e;--ui-paper:#fff;--ui-soft:#f5f7fb;--ui-accent:#6550c9;--ui-on-accent:#fff;--ui-danger:#b91c1c;--ui-danger-soft:#fef2f2}
.dark{--ui-line:#334155;--ui-ink:#e5edf8;--ui-muted:#a7b5c9;--ui-paper:#152131;--ui-soft:#1e293b;--ui-accent:#b0a0ff;--ui-on-accent:#211640;--ui-danger:#fca5a5;--ui-danger-soft:#451a22}
body .ui-button{box-sizing:border-box;display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:42px;max-width:100%;padding:9px 16px;border:1px solid var(--ui-line);border-radius:7px;background:var(--ui-paper);color:var(--ui-ink);font:inherit;font-size:.875rem;font-weight:600;line-height:1.4;text-align:center;text-decoration:none;cursor:pointer;white-space:normal;overflow-wrap:anywhere;vertical-align:middle}
body .ui-button:hover{background:var(--ui-soft);border-color:var(--ui-muted);text-decoration:none}
body .ui-button:active{filter:brightness(.94)}
body .ui-button:focus-visible{outline:3px solid var(--ui-accent);outline-offset:3px}
body .ui-button.ui-button--primary{background:var(--ui-accent);border-color:var(--ui-accent);color:var(--ui-on-accent)!important}
body .ui-button.ui-button--primary:hover{filter:brightness(.94)}
body .ui-button.ui-button--danger{background:var(--ui-danger-soft);color:var(--ui-danger);border-color:var(--ui-danger)}
body .ui-button.ui-button--quiet{background:transparent;border-color:transparent;color:var(--ui-accent)}
body .ui-button.ui-button--icon{min-width:42px;width:42px;padding:9px;flex-shrink:0}
body .ui-button .material-symbols-outlined{font-size:20px;flex-shrink:0}
body .ui-button:disabled,body .ui-button[aria-disabled=true]{opacity:.5;cursor:not-allowed;filter:none}
body .ui-button[aria-busy=true]{cursor:progress}
.ui-actions{display:flex;align-items:center;flex-wrap:wrap;gap:10px}
.ui-actions--end{justify-content:flex-end}
body .ui-button[hidden]{display:none!important}
@media(forced-colors:active){body .ui-button{border-color:ButtonText}body .ui-button:focus-visible{outline-color:Highlight}}
.ui-value-preview{white-space:normal;min-width:0}
.ui-value-preview summary{cursor:pointer;color:var(--ui-accent);font-weight:600;padding:5px 0;min-height:28px}
.ui-value-preview summary:focus-visible{outline:2px solid var(--ui-accent);outline-offset:2px}
.ui-value-preview pre{font:inherit;white-space:pre-wrap;overflow-wrap:anywhere;overflow:auto;max-height:20rem;padding:12px;border:1px solid var(--ui-line);border-radius:6px;background:var(--ui-soft);margin:8px 0 0}

/* Site-wide interaction policy; Unfold owns control geometry, colors and widgets. */
:where(button, input[type="button"], input[type="submit"], input[type="reset"], a[href], summary, [role="button"], [role="tab"]) {
  cursor: pointer;
}
:where(button, input[type="button"], input[type="submit"], input[type="reset"], a, summary, [role="button"], [role="tab"]):focus-visible {
  outline: 2px solid var(--color-primary-500, #6366f1);
  outline-offset: 3px;
}
:where(button, input[type="button"], input[type="submit"], input[type="reset"]):disabled,
:where(a, button, summary, [role="button"], [role="tab"])[aria-disabled="true"] {
  /* A module's enabled-button rule must not override an unavailable state. */
  cursor: not-allowed !important;
}
body :where(button, input[type="button"], input[type="submit"], input[type="reset"], a, [role="button"])[aria-busy="true"],
body :where(form, dialog)[aria-busy="true"] :where(button, input[type="button"], input[type="submit"]):disabled,
body :where(form, dialog)[aria-busy="true"] :where(button, input[type="button"], input[type="submit"])[aria-disabled="true"] {
  cursor: progress !important;
}
/* Give the shared action component explicit disabled feedback without dimming fields. */
[data-admin-button]:disabled { opacity: .5; }
[data-admin-button] { min-height: 42px; max-width: 100%; white-space: normal; overflow-wrap: anywhere; }
[data-admin-button][data-admin-icon] { width: 42px; min-width: 42px; padding: 8px; flex-shrink: 0; }
/* Wizard/async controllers can enable a server-rendered disabled Unfold button.
   Its initial utility classes must not leave a stale disabled appearance. */
body [data-admin-button]:not(:disabled):not([aria-disabled="true"]):not([aria-busy="true"]) { cursor: pointer; opacity: 1; }
body [data-admin-button]:disabled { cursor: not-allowed; }
body [data-admin-button][aria-busy="true"] { cursor: progress; }
@media (hover: hover) {
  [data-admin-button]:not(:disabled):not([aria-disabled="true"]):not([aria-busy="true"]):hover { filter: brightness(.96); }
}
[data-admin-button]:disabled:hover { filter: none; }
[data-admin-button][hidden] { display: none !important; }
.admin-actions { display: flex; align-items: center; flex-wrap: wrap; gap: 10px; }
@media (forced-colors: active) {
  [data-admin-button]:focus-visible { outline-color: Highlight; }
}

[data-admin-button][aria-busy="true"]::before { content:""; width:1em; height:1em; flex-shrink:0; border:2px solid currentColor; border-right-color:transparent; border-radius:50%; animation:admin-action-spin .8s linear infinite; }
@keyframes admin-action-spin { to { transform:rotate(360deg); } }
@media(prefers-reduced-motion:reduce) { [data-admin-button][aria-busy="true"]::before { animation:none; } }
[data-admin-button][data-admin-icon][aria-busy="true"] > .material-symbols-outlined { display:none; }
/* Both persistent helpers use one launcher shape; Unfold owns its palette. */
body [data-admin-button].portal-helper-launcher { min-height:52px; gap:10px; border-radius:28px; box-shadow:0 8px 24px #0003; font-weight:600; white-space:nowrap; }
