/* Shared waiting states. Reuse cabinet colors and the selected shadcn/Lucide Spinner. */
/* Center in the viewport without relying on auto margins affected by page layout. */
.ui-wait-dialog{box-sizing:border-box;position:fixed;inset:50% auto auto 50%;transform:translate(-50%,-50%);margin:0;width:400px;max-width:calc(100vw - 32px);max-height:calc(100dvh - 32px);overflow:auto;padding:36px 28px;border:1px solid var(--ui-border,#d5def5);border-radius:14px;background:var(--ui-surface,#fff);color:var(--ui-text,#102433);box-shadow:0 20px 60px #0003}
.ui-wait-dialog::backdrop{background:rgb(16 24 40 / .42)}
.ui-wait-status{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:16px;text-align:center}
.ui-wait-status h2{width:100%;font-size:18px;font-weight:500;line-height:1.4;margin:0;text-align:center;color:inherit}
.ui-wait-dialog .ui-wait-close{position:absolute;right:8px;top:8px;display:grid;place-items:center;width:32px;height:32px;padding:0;background:transparent;color:var(--ui-meta,#64748b);border:0;border-radius:7px;cursor:pointer}
.ui-wait-close svg{width:18px;height:18px}
.ui-wait-close:hover{background:var(--ui-raised,#f4f6fc);color:var(--ui-text,#102433)}
.ui-wait-close:focus-visible{outline:2px solid var(--ui-link,#2450ed);outline-offset:1px}
/* Specificity protects dimensions from shared cabinet SVG defaults. */
svg.ui-spinner{flex-shrink:0;animation:ui-wait-spin 1s linear infinite;transform-origin:center;pointer-events:none;fill:none!important}
.ui-wait-status svg.ui-spinner--modal{width:24px;height:24px;color:var(--ui-link,#2450ed)}
button svg.ui-spinner--button,a svg.ui-spinner--button{width:16px;height:16px;color:currentColor}
[data-ui-waiting]{cursor:progress;pointer-events:none}
.ui-wait-button-content{display:inline-flex;align-items:center;justify-content:center;gap:8px}
.ui-action-content{display:inline-grid;align-items:center;justify-items:center}
.ui-action-idle,.ui-action-pending{grid-area:1/1;display:inline-flex;align-items:center;justify-content:center;gap:8px}
.ui-action-pending{visibility:hidden}
[data-ui-pending="true"] .ui-action-idle{visibility:hidden}
[data-ui-pending="true"] .ui-action-pending{visibility:visible}
[data-ui-pending="true"]{cursor:progress}
/* Busy is readable feedback, distinct from an unavailable action. */
[data-cabinet-button]:is([data-ui-pending="true"],[data-ui-waiting]){opacity:1!important;cursor:progress!important}
@keyframes ui-wait-spin{to{transform:rotate(360deg)}}
@media(max-width:450px){.ui-wait-dialog{padding-inline:24px}.ui-wait-status h2{font-size:17px}}
@media(prefers-reduced-motion:reduce){svg.ui-spinner{animation:none}}

/* Keep the shared two-state slot intact inside legacy button rules. */
.infonevod-ui button > .ui-action-content{display:inline-grid!important}
.infonevod-ui button .ui-action-idle,.infonevod-ui button .ui-action-pending{display:inline-flex!important}
.infonevod-ui button svg.ui-spinner--button{width:16px!important;height:16px!important;display:block!important}
.infonevod-ui button[data-ui-pending] svg.ui-spinner--button{animation:ui-wait-spin 1s linear infinite}
@media(prefers-reduced-motion:reduce){.infonevod-ui button[data-ui-pending] svg.ui-spinner--button{animation:none}}
@media(max-width:700px){.infonevod-ui .search-submit .search-button-label{display:none!important}}
@media(max-width:600px){.infonevod-ui .account-nav .logout-button .ui-action-idle>span,.infonevod-ui .account-nav .logout-button .ui-action-label{display:none!important}}
