.navbar-item img {
    max-height: 100%;
}

.disable-dbl-tap-zoom {
    touch-action: manipulation;

}

.modal {
    overflow: visible !important;
    z-index: 5 !important;
}

.aa-Panel {
    z-index: 200 !important; /* acima de .modal (100): o painel vive no body */
    border-radius:20px;
}
.aa-Form {
    border-radius:20px;
}

/* Identificador nos banners (nº de pedido, folha de obra, dossier, cliente...): igual em todas as páginas, legível em claro e escuro */
.tag.sp-tag-id, .tag.pedido-id { background: var(--bulma-scheme-main-ter); color: var(--bulma-text-strong); font-weight: 700; border: 1px solid var(--bulma-border-weak); font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; }

/* Variáveis do tema Algolia: o modo escuro usa as mesmas cores do resto da aplicação (sem faixas brancas nos gradientes do painel) */
[data-theme="dark"] .aa-Autocomplete, [data-theme="dark"] .aa-DetachedFormContainer, [data-theme="dark"] .aa-Panel, [data-theme="dark"] .aa-DetachedContainer {
    --aa-background-color-rgb: 20, 22, 26;
    --aa-text-color-rgb: 235, 236, 240;
    --aa-muted-color-rgb: 171, 177, 191;
    --aa-input-border-color-rgb: 70, 76, 90;
    --aa-primary-color-rgb: 102, 209, 255;
}
.aa-GradientTop, .aa-GradientBottom { display: none; }

/* Itens de clientes e equipamentos nas caixas de pesquisa */
.sp-ac { display: flex; align-items: center; justify-content: space-between; gap: .75rem; padding: .55rem .75rem; border-radius: 10px; cursor: pointer; }
.sp-ac__main { flex: 1; min-width: 0; }
.sp-ac__title { font-weight: 700; color: var(--bulma-text-strong); overflow-wrap: anywhere; }
.sp-ac__mono { font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; }
.sp-ac__sub { font-size: .8rem; color: var(--bulma-text-weak); margin-top: .1rem; overflow-wrap: anywhere; }
.sp-ac__id, .sp-ac__pill { font-size: .75rem; font-weight: 600; padding: .15rem .55rem; border-radius: 999px; white-space: nowrap; background: var(--bulma-scheme-main-ter); color: var(--bulma-text-strong); border: 1px solid var(--bulma-border-weak); font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; }
.sp-ac__pills { display: inline-flex; gap: .35rem; flex-shrink: 0; flex-wrap: wrap; justify-content: flex-end; }
.sp-ac__pill { font-family: inherit; border-color: transparent; }
.sp-ac__pill.is-info { background: color-mix(in srgb, var(--bulma-info) 22%, transparent); color: var(--bulma-info-on-scheme, var(--bulma-info)); }
.sp-ac__pill.is-warning { background: color-mix(in srgb, var(--bulma-warning) 22%, transparent); color: var(--bulma-warning-on-scheme, var(--bulma-warning)); }
.sp-ac__pill.is-success { background: color-mix(in srgb, var(--bulma-success) 22%, transparent); color: var(--bulma-success-on-scheme, var(--bulma-success)); }
.sp-ac__pill.is-danger { background: color-mix(in srgb, var(--bulma-danger) 22%, transparent); color: var(--bulma-danger-on-scheme, var(--bulma-danger)); }
@media (max-width: 600px) { .sp-ac { flex-wrap: wrap; } .sp-ac__pills { justify-content: flex-start; } }

/* Autocomplete (Algolia) com as cores do tema Bulma: legível em claro e escuro */
.aa-Form { background: var(--bulma-scheme-main); border: 1px solid var(--bulma-border); color: var(--bulma-text); box-shadow: none; }
.aa-Form:focus-within { border-color: var(--bulma-link); box-shadow: 0 0 0 3px color-mix(in srgb, var(--bulma-link) 25%, transparent); }
.aa-Input { color: var(--bulma-text-strong); }
.aa-Input::placeholder { color: var(--bulma-text-weak); opacity: 1; }
.aa-SubmitButton, .aa-SubmitIcon, .aa-LoadingIndicator { color: var(--bulma-link-text, var(--bulma-link)); }
.aa-ClearButton, .aa-ItemActionButton, .aa-ItemIcon { color: var(--bulma-text-weak); }
.aa-Panel { background: var(--bulma-scheme-main); color: var(--bulma-text); border: 1px solid var(--bulma-border-weak); box-shadow: 0 12px 32px rgba(0, 0, 0, .3); }
.aa-PanelLayout { background: transparent; }
.aa-Item { color: var(--bulma-text); }
.aa-Item[aria-selected='true'] { background: var(--bulma-scheme-main-bis); }
.aa-SourceHeaderTitle { color: var(--bulma-text-weak); background: var(--bulma-scheme-main); }
.aa-SourceHeaderLine { border-bottom-color: var(--bulma-border-weak); }
.aa-DetachedContainer { background: var(--bulma-scheme-main); }

.aa-DetachedSearchButton {
    border-radius:20px;
}

@media (min-width: 1024px) {
    .modal-card {
        width: 80%;
    }
}

.list-item.dragging {
    opacity: 0.5;
}

.dropzone {
    background: white;
    border-radius: 20px;
    border: 4px dashed rgb(0, 135, 247);
    font-weight: 700; font-size: 2rem; color: #222;
    border-image: none;
    max-width: 100%;
    margin-left: auto;
    margin-right: auto;
}

.progress-container:before {
    content: attr(data-text);
    position: absolute;
    left: 0;
    right: 0;
    top: 3px;
    line-height: 1em;
    font-weight: bold;
}

.progress-container {
    text-align: center;
    position: relative;
}

tr {
    border-radius: 20px;
    border: 2px solid rgb(0, 135, 247);
}

.overlay {
    position: fixed;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    background-color: rgba(255, 255, 255, 0.8); /* Cor de fundo semi-transparente */
    backdrop-filter: blur(10px); /* Efeito de desfoque */
    z-index: 9999; /* Certifique-se de que o overlay esteja acima do conteúdo */
    display: flex;
    justify-content: center;
    align-items: center;
}

.spinner {
    background-image: linear-gradient(rgb(186, 66, 255) 35%, rgb(0, 225, 255));
    width: 100px;
    height: 100px;
    animation: spinning 1.7s linear infinite;
    text-align: center;
    border-radius: 50px;
    filter: blur(1px);
    box-shadow: 0px -5px 20px 0px rgb(186, 66, 255), 0px 5px 20px 0px rgb(0, 225, 255);
    position: absolute;
    top: 50%;
    left: 50%;
    margin-left: -50px;
    margin-top: -50px;
    background-size: 100%;
    z-index: 10000;
}

.is-blurred {
    filter: blur(4px);
}

@keyframes spinning {
    to {
        transform: rotate(360deg);
    }
}

.tabs-content li {
    display: none;
    list-style: none;
}

.tabs-content li.is-active {
    display: block;
}

.signature-canvas {
    touch-action: none;
    -webkit-user-select: none;
    -webkit-touch-callout: none;
    user-select: none;
    -ms-touch-action: none;
}

/* O indicador "A processar" do DataTables foi substituído por linhas skeleton (ver spSkeletonTabela em main_v3.js) */
div.dt-processing {
     display: none !important;
 }
/* Modern Floating Island Navbar */
.navbar.modern-navbar {
    position: sticky;
    top: 15px;
    z-index: 40;
    margin: 15px auto 1.5rem auto;
    border-radius: 16px;
    width: 96%;
    max-width: 1400px;
    background-color: #ffffff !important;
    border: 1px solid rgba(200, 200, 200, 0.3);
    box-shadow: 0 10px 30px rgba(0, 0, 0, 0.08) !important;
    transition: all 0.3s ease;
}

[data-theme="dark"] .navbar.modern-navbar {
    background-color: #191919 !important;
    border: 1px solid rgba(255, 255, 255, 0.1);
    box-shadow: 0 10px 30px rgba(0, 0, 0, 0.3) !important;
}

/* Fix mobile menu inside rounded island */
@media screen and (max-width: 1023px) {
    .navbar.modern-navbar .navbar-menu {
        border-radius: 0 0 16px 16px;
        background-color: #ffffff !important;
                box-shadow: 0 8px 16px rgba(0, 0, 0, 0.1);
    }
    
    [data-theme="dark"] .navbar.modern-navbar .navbar-menu {
        background-color: #191919 !important;
    }
}

/* Keep dev red theme if active but make it glass */
.navbar.modern-navbar.is-danger {
    background-color: #f14668 !important;
    border-color: rgba(255, 255, 255, 0.3);
}

/* Adjust dropdowns for modern feel */
.navbar-dropdown {
    border-radius: 12px;
    box-shadow: 0 8px 24px rgba(0, 0, 0, 0.1) !important;
    border: 1px solid rgba(200, 200, 200, 0.2);
}

[data-theme="dark"] .navbar-dropdown {
    background-color: #1f1f1f;
    border: 1px solid rgba(255, 255, 255, 0.1);
}

/* Permitir que navbar-start enrole caso haja muitos menus (desktop) */
@media screen and (min-width: 1024px) {
    .navbar-start {
        flex-wrap: wrap;
    }
}

/* Improve modern navbar hover states so they don't break glassmorphism */
.navbar.modern-navbar .navbar-item:hover,
.navbar.modern-navbar .navbar-item:focus,
.navbar.modern-navbar .navbar-item:focus-within,
.navbar.modern-navbar .navbar-item.is-active,
.navbar.modern-navbar .navbar-item.has-dropdown:hover .navbar-link,
.navbar.modern-navbar .navbar-item.has-dropdown.is-active .navbar-link,
.navbar.modern-navbar .navbar-link:hover,
.navbar.modern-navbar .navbar-link.is-active {
    background-color: rgba(0, 0, 0, 0.05) !important;
    color: inherit !important;
    border-radius: 8px;
}

[data-theme="dark"] .navbar.modern-navbar .navbar-item:hover,
[data-theme="dark"] .navbar.modern-navbar .navbar-item:focus,
[data-theme="dark"] .navbar.modern-navbar .navbar-item:focus-within,
[data-theme="dark"] .navbar.modern-navbar .navbar-item.is-active,
[data-theme="dark"] .navbar.modern-navbar .navbar-item.has-dropdown:hover .navbar-link,
[data-theme="dark"] .navbar.modern-navbar .navbar-item.has-dropdown.is-active .navbar-link,
[data-theme="dark"] .navbar.modern-navbar .navbar-link:hover,
[data-theme="dark"] .navbar.modern-navbar .navbar-link.is-active {
    background-color: #ffffff !important;
    color: inherit !important;
}

/* Ensure proper dropdown backgrounds mimicking glass when outside */
.navbar-dropdown {
    background-color: #ffffff !important;
}
[data-theme="dark"] .navbar-dropdown {
    background-color: #1e1e1e !important;
}


/* Ensure mobile menu item background is clear */
@media screen and (max-width: 1023px) {
    .navbar.modern-navbar .navbar-menu {
        padding: 0.5rem;
    }
    .navbar.modern-navbar .navbar-item {
        border-radius: 8px;
        margin-bottom: 2px;
    }
}


/* Theme toggle icon animation */
@keyframes theme-toggle-spin {
    0% { transform: rotate(0deg) scale(0.8); opacity: 0; }
    50% { transform: rotate(180deg) scale(1.1); opacity: 0.8; }
    100% { transform: rotate(360deg) scale(1); opacity: 1; }
}

.theme-icon-animate {
    animation: theme-toggle-spin 0.4s cubic-bezier(0.4, 0, 0.2, 1) forwards;
}

/* Glassy hover effects with subtle scale for navbar items */
.navbar.modern-navbar .navbar-item {
    transition: all 0.2s ease;
}

.navbar.modern-navbar a.navbar-item:hover,
.navbar.modern-navbar .navbar-link:hover {
    transform: translateY(-1px);
}

/* Theme icon glowing effect */
#dark-mode-icon {
    transition: all 0.3s ease;
}

#dark-mode-icon.fa-sun.has-text-warning {
    filter: drop-shadow(0 0 4px rgba(255, 221, 87, 0.6));
}

#dark-mode-icon.fa-moon.has-text-link {
    filter: drop-shadow(0 0 5px rgba(72, 95, 199, 0.6));
}

/* Multiselect amigável (main_v1.js) */
.multi-pick { border: 1px solid var(--bulma-border, #dbdbdb); border-radius: 10px; overflow: hidden; }
.multi-pick__head { display: flex; align-items: center; gap: .5rem; padding: .4rem .75rem; font-size: .8rem;
    background: var(--bulma-scheme-main-bis, #fafafa); border-bottom: 1px solid var(--bulma-border, #dbdbdb); }
.multi-pick__hint { flex: 1; color: var(--bulma-text-weak, #777); }
.multi-pick__list { max-height: 14rem; overflow-y: auto; }
.multi-pick__item { display: flex; align-items: center; gap: .6rem; padding: .45rem .75rem; cursor: pointer; user-select: none; }
.multi-pick__item:hover, .multi-pick__item:focus-visible { background: var(--bulma-scheme-main-ter, #f5f5f5); outline: none; }
.multi-pick__item.is-selected { background: color-mix(in srgb, var(--bulma-info, #3e8ed0) 12%, transparent); font-weight: 500; }
.multi-pick__box { width: 1.15rem; height: 1.15rem; border: 2px solid var(--bulma-border, #b5b5b5); border-radius: 4px;
    display: inline-flex; align-items: center; justify-content: center; font-size: .65rem; color: transparent; flex: none; }
.multi-pick__item.is-selected .multi-pick__box { background: var(--bulma-info, #3e8ed0); border-color: var(--bulma-info, #3e8ed0); color: #fff; }

/* Seletores de data/hora (flatpickr, ver sp-datepicker_v3.js) */
html input.flatpickr-input[type="hidden"] { display: none !important; }
html input.flatpickr-input[readonly] { cursor: pointer; background-color: var(--bulma-scheme-main, #fff); }
html .flatpickr-calendar { font-family: inherit; border-radius: 12px; box-shadow: 0 8px 28px rgba(0, 0, 0, .18); border: 1px solid var(--bulma-border-weak, #dbdbdb);
    background: var(--bulma-scheme-main, #fff); color: var(--bulma-text, #363636); }
html .flatpickr-calendar.inline { box-shadow: none; margin: 0 auto; }
/* Inline: nunca mais largo que o contentor (o flatpickr fixa 307.875px) */
html .flatpickr-calendar.inline { width: 100%; max-width: 307.875px; }
html .flatpickr-calendar.inline .flatpickr-innerContainer, html .flatpickr-calendar.inline .flatpickr-rContainer, html .flatpickr-calendar.inline .flatpickr-days,
html .flatpickr-calendar.inline .dayContainer, html .flatpickr-calendar.inline .flatpickr-weekdaycontainer { width: 100%; min-width: 100%; max-width: 100%; }
html .flatpickr-calendar:before, html .flatpickr-calendar:after { display: none; }
html .flatpickr-months .flatpickr-month, html .flatpickr-current-month .flatpickr-monthDropdown-months, html .flatpickr-current-month input.cur-year,
html .flatpickr-weekday, html span.flatpickr-weekday { background: transparent; color: var(--bulma-text, #363636); fill: currentColor; }
html .flatpickr-current-month .flatpickr-monthDropdown-months option { background: var(--bulma-scheme-main, #fff); }
html .flatpickr-months .flatpickr-prev-month, html .flatpickr-months .flatpickr-next-month { color: var(--bulma-text, #363636); fill: currentColor; }
html .flatpickr-months .flatpickr-prev-month svg, html .flatpickr-months .flatpickr-next-month svg { fill: currentColor; }
html .flatpickr-day { color: var(--bulma-text, #363636); border-radius: 8px; }
html .flatpickr-day.prevMonthDay, html .flatpickr-day.nextMonthDay, html .flatpickr-day.flatpickr-disabled { color: var(--bulma-text-weak, #999); opacity: .55; }
html .flatpickr-day:hover, html .flatpickr-day:focus { background: var(--bulma-scheme-main-ter, #f0f0f0); border-color: transparent; }
html .flatpickr-day.today { border-color: var(--bulma-info, #3e8ed0); }
html .flatpickr-day.selected, html .flatpickr-day.startRange, html .flatpickr-day.endRange { background: var(--bulma-info, #3e8ed0); border-color: var(--bulma-info, #3e8ed0); color: var(--bulma-info-invert, #fff); font-weight: 600; }
html .flatpickr-day.inRange { background: color-mix(in srgb, var(--bulma-info, #3e8ed0) 16%, transparent); box-shadow: -5px 0 0 color-mix(in srgb, var(--bulma-info, #3e8ed0) 16%, transparent), 5px 0 0 color-mix(in srgb, var(--bulma-info, #3e8ed0) 16%, transparent); border-color: transparent; }
html .flatpickr-weekwrapper .flatpickr-weeknumber { color: var(--bulma-text-weak, #999); }
html .flatpickr-time input, html .flatpickr-time .flatpickr-am-pm { color: var(--bulma-text, #363636); background: transparent; }
html .flatpickr-time input:hover, html .flatpickr-time input:focus { background: var(--bulma-scheme-main-ter, #f0f0f0); }
html .flatpickr-time { border-top-color: var(--bulma-border-weak, #dbdbdb); }
.sp-fp-foot { display: flex; justify-content: space-between; gap: .5rem; padding: .5rem; border-top: 1px solid var(--bulma-border-weak, #dbdbdb); }
.sp-fp-foot .button { flex: 1; border-radius: 8px; background: var(--bulma-scheme-main-ter, #f0f0f0); color: var(--bulma-text, #363636); border-color: transparent; }
.sp-fp-foot .button.is-info { background: color-mix(in srgb, var(--bulma-info, #3e8ed0) 18%, transparent); }
.sp-fp-foot:empty { display: none; }

/* Telemóvel: cartão central com fundo escurecido e alvos de toque grandes */
@media (max-width: 768px) {
    html .flatpickr-calendar:not(.inline) { position: fixed !important; top: 50% !important; left: 50% !important; right: auto !important;
        transform: translate(-50%, -50%); width: min(21rem, calc(100vw - 1.5rem)); max-width: none; animation: none !important; -webkit-animation: none !important; transition: none; }
    html .flatpickr-calendar:not(.inline).open { z-index: 100000; }
    body.sp-fp-open::after { content: ""; position: fixed; inset: 0; background: rgba(0, 0, 0, .45); z-index: 99999; }
    html .flatpickr-calendar .flatpickr-innerContainer, html .flatpickr-calendar .flatpickr-rContainer, html .flatpickr-calendar .flatpickr-days,
    html .flatpickr-calendar .dayContainer { width: 100%; min-width: 100%; max-width: 100%; }
    html .flatpickr-calendar .flatpickr-day { max-width: none; height: 2.6rem; line-height: 2.6rem; }
    html .flatpickr-calendar .flatpickr-weekdaycontainer { width: 100%; }
    html .flatpickr-calendar .flatpickr-monthDropdown-months, html .flatpickr-calendar .numInputWrapper { font-size: 1.05rem; }
    html .flatpickr-calendar .flatpickr-prev-month, html .flatpickr-calendar .flatpickr-next-month { padding: 12px; }
    html .flatpickr-calendar .flatpickr-time { height: 3rem; max-height: none; }
    html .flatpickr-calendar .flatpickr-time input { font-size: 1.2rem; height: 3rem; }
    .sp-fp-foot .button { height: 2.6rem; font-size: .95rem; }
    /* Horas: setas grandes e sempre visíveis, uma por cima e outra por baixo de cada número */
    html .flatpickr-calendar .flatpickr-time { height: 6rem; max-height: none; line-height: normal; }
    html .flatpickr-calendar .flatpickr-time .numInputWrapper { height: 6rem; flex: 1 1 40%; }
    html .flatpickr-calendar .flatpickr-time input { height: 6rem; font-size: 2rem; font-weight: 600; }
    html .flatpickr-calendar .flatpickr-time .flatpickr-time-separator { font-size: 2rem; line-height: 6rem; height: 6rem; }
    html .flatpickr-calendar .flatpickr-time .numInputWrapper span.arrowUp, html .flatpickr-calendar .flatpickr-time .numInputWrapper span.arrowDown { opacity: 1; width: 3rem; height: 50%; right: 0; border: 0;
        background: var(--bulma-scheme-main-ter, #f0f0f0); border-radius: 8px; display: flex; align-items: center; justify-content: center; }
    html .flatpickr-calendar .flatpickr-time .numInputWrapper span.arrowUp { top: 0; border-bottom: 2px solid var(--bulma-scheme-main, #fff); }
    html .flatpickr-calendar .flatpickr-time .numInputWrapper span.arrowDown { top: 50%; }
    html .flatpickr-calendar .flatpickr-time .numInputWrapper span.arrowUp::after, html .flatpickr-calendar .flatpickr-time .numInputWrapper span.arrowDown::after { position: static; border-width: 6px; margin: 0; }
    html .flatpickr-calendar .flatpickr-time .numInputWrapper span.arrowUp::after { border-bottom-color: var(--bulma-text, #363636); }
    html .flatpickr-calendar .flatpickr-time .numInputWrapper span.arrowDown::after { border-top-color: var(--bulma-text, #363636); }
    html .flatpickr-calendar .flatpickr-time .numInputWrapper input { padding-right: 3rem; }
}

/* Modais com <form> a envolver corpo e rodapé: manter o layout flex do Bulma para o rodapé nunca ficar cortado e só o corpo fazer scroll */
.modal-card > form { display: flex; flex-direction: column; flex: 1 1 auto; min-height: 0; overflow: hidden; }
.modal-card > form > .modal-card-body { flex: 1 1 auto; min-height: 0; overflow-y: auto; }
.modal-card > form > .modal-card-head, .modal-card > form > .modal-card-foot { flex: 0 0 auto; }

/* Skeleton: placeholders animados enquanto os dados carregam (substitui o antigo overlay com spinner) */
.sp-skeleton {
    display: block;
    border-radius: 6px;
    background: linear-gradient(90deg, var(--line, #dde1e8) 25%, var(--surface-2, #f5f6f9) 37%, var(--line, #dde1e8) 63%);
    background-size: 400% 100%;
    animation: sp-skeleton-shimmer 1.4s ease infinite;
}
.sp-skeleton--linha { height: 1rem; }
.sp-skeleton--titulo { height: 1.75rem; width: 30%; }
.sp-skeleton--cartao { height: 7rem; border-radius: 12px; }
.sp-skeleton--bloco { height: 22rem; border-radius: 12px; }
@keyframes sp-skeleton-shimmer {
    from { background-position: 100% 50%; }
    to { background-position: 0 50%; }
}
@media (prefers-reduced-motion: reduce) { .sp-skeleton { animation: none; } }

/* Linhas skeleton dentro de tabelas DataTables */
tr.sp-skeleton-row td { padding: .85rem .75rem; }

/* Ação que termina em mudança de página: fundo desfocado e bloqueado, com a mensagem "A processar" ao centro */
.sp-processar {
    position: fixed; inset: 0; z-index: 1050; display: flex; align-items: center; justify-content: center; padding: 1rem;
    background: color-mix(in srgb, var(--bulma-scheme-main, #fff) 45%, transparent);
    -webkit-backdrop-filter: blur(6px); backdrop-filter: blur(6px);
    animation: sp-processar-entrada .18s ease-out both;
}
.sp-processar__caixa {
    display: flex; align-items: center; gap: 1rem; padding: 1rem 1.6rem 1rem 1.3rem; max-width: 100%;
    background: var(--bulma-scheme-main, #fff); color: var(--bulma-text-strong, inherit); border: 1px solid var(--bulma-border-weak, #dde1e8);
    border-radius: 999px; box-shadow: 0 10px 40px rgba(0, 0, 0, .22);
}
.sp-processar__caixa > span:last-child { display: flex; flex-direction: column; line-height: 1.25; }
.sp-processar strong { white-space: nowrap; }
.sp-processar small { color: var(--bulma-text-weak, #6b7280); font-size: .8rem; }
.sp-processar__spinner {
    width: 1.75rem; height: 1.75rem; flex: none; border-radius: 50%;
    border: 3px solid var(--bulma-info-90, rgba(62, 142, 208, .2)); border-top-color: var(--bulma-info, #3e8ed0);
    animation: sp-nav-giro .8s linear infinite;
}
@keyframes sp-nav-giro { to { transform: rotate(360deg); } }
@keyframes sp-processar-entrada { from { opacity: 0; } to { opacity: 1; } }
@media (max-width: 768px) { .sp-processar__caixa { border-radius: 20px; padding: .9rem 1.2rem; } }
@media (prefers-reduced-motion: reduce) { .sp-processar__spinner { animation-duration: 2.4s; } .sp-processar { animation: none; } }
.sp-nav-skeleton__linhas { display: flex; flex-direction: column; gap: .75rem; }

/* Contentor à espera de dados (ex.: modal aberto antes da resposta): campos viram placeholders skeleton */
.sp-a-carregar { pointer-events: none; }
.sp-a-carregar :is(.input, .textarea, select, dd) {
    min-height: 1.25rem;
    border-radius: 6px;
    color: transparent !important;
    border-color: transparent !important;
    background: linear-gradient(90deg, var(--line, #dde1e8) 25%, var(--surface-2, #f5f6f9) 37%, var(--line, #dde1e8) 63%) 100% 50% / 400% 100% !important;
    animation: sp-skeleton-shimmer 1.4s ease infinite;
}
@media (prefers-reduced-motion: reduce) { .sp-a-carregar :is(.input, .textarea, select, dd) {
    min-height: 1.25rem;
    border-radius: 6px; animation: none; } }

/* FullCalendar à espera de eventos: a grelha pulsa e os eventos escondem-se */
.sp-cal-carregar .fc-event, .sp-cal-carregar .fc-more-link { visibility: hidden; }
.sp-cal-carregar .fc-daygrid-day-frame {
    background: linear-gradient(90deg, transparent 25%, var(--line, #dde1e8) 37%, transparent 63%) 100% 50% / 400% 100%;
    animation: sp-skeleton-shimmer 1.4s ease infinite;
}
@media (prefers-reduced-motion: reduce) { .sp-cal-carregar .fc-daygrid-day-frame { animation: none; } }

/* Toasts (notify) */
.toast-stack { position: fixed; top: 1rem; right: 1rem; z-index: 100000; display: flex; flex-direction: column; gap: .6rem; width: min(24rem, calc(100vw - 2rem)); pointer-events: none; }
.toast-item { --toast-c: var(--bulma-success); pointer-events: auto; position: relative; overflow: hidden; display: flex; align-items: flex-start; gap: .75rem; padding: .8rem .6rem .9rem .8rem;
    background: var(--bulma-scheme-main); color: var(--bulma-text); border: 1px solid var(--bulma-border-weak); border-radius: 14px;
    box-shadow: 0 10px 30px rgba(0, 0, 0, .16), 0 2px 6px rgba(0, 0, 0, .08); animation: toast-in .28s cubic-bezier(.22, 1, .36, 1); }
.toast-item.is-error { --toast-c: var(--bulma-danger); }
.toast-item.is-warning { --toast-c: var(--bulma-warning); }
.toast-item.is-info { --toast-c: var(--bulma-info); }
.toast-item.is-leaving { opacity: 0; transform: translateX(1rem); transition: opacity .2s, transform .2s; }
.toast-icon { flex: none; display: grid; place-items: center; width: 2rem; height: 2rem; border-radius: 10px; font-size: .95rem;
    background: color-mix(in srgb, var(--toast-c) 16%, transparent); color: var(--toast-c); }
.toast-body { flex: 1; min-width: 0; padding-top: .1rem; }
.toast-title { margin: 0; font-weight: 600; font-size: .92rem; line-height: 1.35; color: var(--bulma-text-strong); overflow-wrap: anywhere; }
.toast-text { margin: .15rem 0 0; font-size: .82rem; line-height: 1.4; color: var(--bulma-text-weak); overflow-wrap: anywhere; }
.toast-close { flex: none; display: grid; place-items: center; width: 2rem; height: 2rem; margin: -.1rem 0 0; border: 0; border-radius: 8px; background: transparent; color: var(--bulma-text-weak); cursor: pointer; }
.toast-close:hover { background: var(--bulma-scheme-main-ter); color: var(--bulma-text-strong); }
.toast-close:focus-visible { outline: 2px solid var(--toast-c); outline-offset: 1px; }
.toast-progress { position: absolute; left: 0; bottom: 0; height: 3px; width: 100%; background: var(--toast-c); transform-origin: left; animation: toast-progress linear forwards; opacity: .75; }
@keyframes toast-in { from { opacity: 0; transform: translateX(1.25rem) scale(.98); } to { opacity: 1; transform: none; } }
@keyframes toast-progress { to { transform: scaleX(0); } }
@media (max-width: 768px) {
    .toast-stack { top: calc(env(safe-area-inset-top, 0px) + .5rem); right: .5rem; left: .5rem; width: auto; }
    @keyframes toast-in { from { opacity: 0; transform: translateY(-1rem); } to { opacity: 1; transform: none; } }
    .toast-item.is-leaving { transform: translateY(-.75rem); }
}
@media (prefers-reduced-motion: reduce) { .toast-item { animation: none; } .toast-item.is-leaving { transition: none; } .toast-progress { animation-duration: 0s !important; } }

/* Diálogo de confirmação (mostrarSwal) */
.app-dialog { --dlg-c: var(--bulma-info); padding: 0; border: 1px solid var(--bulma-border-weak); border-radius: 20px; background: var(--bulma-scheme-main); color: var(--bulma-text);
    width: min(26rem, calc(100vw - 2rem)); max-height: calc(100dvh - 2rem); box-shadow: 0 24px 64px rgba(0, 0, 0, .3); }
.app-dialog.is-error, .app-dialog.is-warning { --dlg-c: var(--bulma-danger); }
.app-dialog.is-success { --dlg-c: var(--bulma-success); }
.app-dialog[open] { animation: dlg-in .22s cubic-bezier(.22, 1, .36, 1); }
.app-dialog::backdrop { background: rgba(10, 12, 18, .5); backdrop-filter: blur(2px); animation: dlg-fade .2s; }
html:has(dialog.app-dialog[open]) { overflow: hidden; }
.app-dialog__box { padding: 1.6rem 1.5rem 1.25rem; text-align: center; }
.app-dialog__icon { display: grid; place-items: center; width: 3.2rem; height: 3.2rem; margin: 0 auto .9rem; border-radius: 16px; font-size: 1.4rem;
    background: color-mix(in srgb, var(--dlg-c) 16%, transparent); color: var(--dlg-c); }
.app-dialog__title { margin: 0 0 .5rem; font-size: 1.2rem; font-weight: 700; line-height: 1.3; color: var(--bulma-text-strong); overflow-wrap: anywhere; }
.app-dialog__text { font-size: .95rem; line-height: 1.5; color: var(--bulma-text); overflow-wrap: anywhere; }
.app-dialog__actions { display: flex; justify-content: center; gap: .6rem; margin-top: 1.4rem; }
.app-dialog__actions .button { flex: 1 1 0; border-radius: 10px; font-weight: 600; min-height: 2.6rem; }
@keyframes dlg-in { from { opacity: 0; transform: translateY(.75rem) scale(.97); } to { opacity: 1; transform: none; } }
@keyframes dlg-fade { from { opacity: 0; } }
@media (max-width: 480px) { .app-dialog__actions { flex-direction: column-reverse; } }
@media (prefers-reduced-motion: reduce) { .app-dialog[open], .app-dialog::backdrop { animation: none; } }

/* iOS Safari faz zoom automático ao focar campos com fonte < 16px; o !important cobre .is-small/.is-medium do Bulma */
@media (max-width: 1023px) {
    input:not([type=checkbox]):not([type=radio]):not([type=range]):not([type=file]),
    select, textarea { font-size: 16px !important; touch-action: manipulation; }
}
