Caixa de diálogo sobre a página, com foco preso, animações e fechamento por ESC, clique fora ou botão.
Mostra conteúdo numa caixa flutuante centralizada ou em formato drawer, escurecendo o restante da página com backdrop-blur. Ideal para confirmações críticas, formulários modais, fluxos de checkout e telas de detalhes sem sair do contexto atual.
O gatilho (sw-modal-open="#id" ou sw-modal="#id") aponta para o ID do modal. Ao abrir, a classe is-active é injetada no .sw-modal e o scroll do <body> é travado automaticamente. Fecha com [sw-modal-close], tecla ESC, clique no fundo escuro ou via API JavaScript SW.Modal.hide().
Estilizado com o token --color-primary.
Estilizado com o token --color-secondary.
Estilizado com o token --color-success.
Estilizado com o token --color-warning.
Estilizado com o token --color-error.
Estilizado com o token --color-info.
Estilizado com superfícies noturnas profundas.
Estilizado com superfícies iluminadas.
<div class="demo-row" style="flex-wrap:wrap; gap:0.5rem;">
<button sw-btn class="sw-btn-pri" sw-modal-open="#modalPri">Primary</button>
<button sw-btn class="sw-btn-sec" sw-modal-open="#modalSec">Secondary</button>
<button sw-btn class="sw-btn-suc" sw-modal-open="#modalSuc">Success</button>
<button sw-btn class="sw-btn-war" sw-modal-open="#modalWar">Warning</button>
<button sw-btn class="sw-btn-err" sw-modal-open="#modalErr">Error</button>
<button sw-btn class="sw-btn-inf" sw-modal-open="#modalInf">Info</button>
<button sw-btn class="sw-btn-nit" sw-modal-open="#modalNit">Night</button>
<button sw-btn class="sw-btn-lit" sw-modal-open="#modalLit">Light</button>
</div>
<!-- Modais nas cores -->
<div class="sw-modal" id="modalPri"><div class="sw-modal-box"><button class="sw-modal-close" sw-modal-close aria-label="Fechar">×</button><span sw-chip class="sw-chip-pri">PRIMARY</span><h3 style="margin-top:0.5rem; color:#38bdf8;">Modal Primary</h3><p>Estilizado com o token <code>--color-primary</code>.</p><div style="display:flex; justify-content:flex-end; gap:0.5rem; margin-top:1rem;"><button sw-btn class="sw-btn-pri" sw-modal-close>Confirmar</button></div></div></div>
<div class="sw-modal" id="modalSec"><div class="sw-modal-box"><button class="sw-modal-close" sw-modal-close aria-label="Fechar">×</button><span sw-chip class="sw-chip-sec">SECONDARY</span><h3 style="margin-top:0.5rem; color:#818cf8;">Modal Secondary</h3><p>Estilizado com o token <code>--color-secondary</code>.</p><div style="display:flex; justify-content:flex-end; gap:0.5rem; margin-top:1rem;"><button sw-btn class="sw-btn-sec" sw-modal-close>Confirmar</button></div></div></div>
<div class="sw-modal" id="modalSuc"><div class="sw-modal-box"><button class="sw-modal-close" sw-modal-close aria-label="Fechar">×</button><span sw-chip class="sw-chip-suc">SUCCESS</span><h3 style="margin-top:0.5rem; color:#22c55e;">Modal Success</h3><p>Estilizado com o token <code>--color-success</code>.</p><div style="display:flex; justify-content:flex-end; gap:0.5rem; margin-top:1rem;"><button sw-btn class="sw-btn-suc" sw-modal-close>Concluir</button></div></div></div>
<div class="sw-modal" id="modalWar"><div class="sw-modal-box"><button class="sw-modal-close" sw-modal-close aria-label="Fechar">×</button><span sw-chip class="sw-chip-war">WARNING</span><h3 style="margin-top:0.5rem; color:#f59e0b;">Modal Warning</h3><p>Estilizado com o token <code>--color-warning</code>.</p><div style="display:flex; justify-content:flex-end; gap:0.5rem; margin-top:1rem;"><button sw-btn class="sw-btn-war" sw-modal-close>Atenção</button></div></div></div>
<div class="sw-modal" id="modalErr"><div class="sw-modal-box"><button class="sw-modal-close" sw-modal-close aria-label="Fechar">×</button><span sw-chip class="sw-chip-err">ERROR</span><h3 style="margin-top:0.5rem; color:#ef4444;">Modal Error</h3><p>Estilizado com o token <code>--color-error</code>.</p><div style="display:flex; justify-content:flex-end; gap:0.5rem; margin-top:1rem;"><button sw-btn class="sw-btn-err" sw-modal-close>Entendido</button></div></div></div>
<div class="sw-modal" id="modalInf"><div class="sw-modal-box"><button class="sw-modal-close" sw-modal-close aria-label="Fechar">×</button><span sw-chip class="sw-chip-inf">INFO</span><h3 style="margin-top:0.5rem; color:#0ea5e9;">Modal Info</h3><p>Estilizado com o token <code>--color-info</code>.</p><div style="display:flex; justify-content:flex-end; gap:0.5rem; margin-top:1rem;"><button sw-btn class="sw-btn-inf" sw-modal-close>Fechar</button></div></div></div>
<div class="sw-modal" id="modalNit"><div class="sw-modal-box"><button class="sw-modal-close" sw-modal-close aria-label="Fechar">×</button><span sw-chip class="sw-chip-nit">NIGHT</span><h3 style="margin-top:0.5rem; color:#f8fafc;">Modal Night</h3><p>Estilizado com superfícies noturnas profundas.</p><div style="display:flex; justify-content:flex-end; gap:0.5rem; margin-top:1rem;"><button sw-btn class="sw-btn-nit" sw-modal-close>Fechar</button></div></div></div>
<div class="sw-modal" id="modalLit"><div class="sw-modal-box"><button class="sw-modal-close" sw-modal-close aria-label="Fechar">×</button><span sw-chip class="sw-chip-lit">LIGHT</span><h3 style="margin-top:0.5rem; color:#0f172a;">Modal Light</h3><p>Estilizado com superfícies iluminadas.</p><div style="display:flex; justify-content:flex-end; gap:0.5rem; margin-top:1rem;"><button sw-btn class="sw-btn-lit" sw-modal-close>Fechar</button></div></div></div>
Modal extra pequeno de 320px de largura para alertas mínimos.
Modal pequeno de 384px ideal para confirmações rápidas.
Modal médio adaptável de até 576px para formulários e diálogos.
Largura de até 896px para formulários de 2 colunas e visualizações detalhadas.
Largura ampla de 1152px / 96vw ajustando proporcionalmente à tela para dashboards, tabelas e editores.
Preenche toda a tela (100vw / 100vh) com rolagem interna suave e sem bordas arredondadas.
Ocupa 100% da altura da tela e desliza a partir da borda direita.
<div class="demo-row" style="flex-wrap:wrap; gap:0.5rem;">
<button sw-btn class="sw-btn-sm sw-btn-out" sw-modal-open="#modalPp">PP (320px)</button>
<button sw-btn class="sw-btn-sm sw-btn-sec" sw-modal-open="#modalP">P (384px)</button>
<button sw-btn class="sw-btn-sm sw-btn-pri" sw-modal-open="#modalM">M (576px)</button>
<button sw-btn class="sw-btn-sm sw-btn-inf" sw-modal-open="#modalG">G (896px)</button>
<button sw-btn class="sw-btn-sm sw-btn-war" sw-modal-open="#modalGg">GG (1152px)</button>
<button sw-btn class="sw-btn-sm sw-btn-nit" sw-modal-open="#modalCheio">CHEIO (100%)</button>
<button sw-btn class="sw-btn-sm sw-btn-suc" sw-modal-open="#modalDrw">Drawer Lateral</button>
</div>
<div class="sw-modal is-pp" id="modalPp"><div class="sw-modal-box"><button class="sw-modal-close" sw-modal-close aria-label="Fechar">×</button><h3>Tamanho PP (.is-pp)</h3><p>Modal extra pequeno de 320px de largura para alertas mínimos.</p><button sw-btn class="sw-btn-pri sw-btn-sm" style="margin-top:1rem; width:100%;" sw-modal-close>Fechar</button></div></div>
<div class="sw-modal is-p" id="modalP"><div class="sw-modal-box"><button class="sw-modal-close" sw-modal-close aria-label="Fechar">×</button><h3>Tamanho P (.is-p)</h3><p>Modal pequeno de 384px ideal para confirmações rápidas.</p><button sw-btn class="sw-btn-sec sw-btn-sm" style="margin-top:1rem; width:100%;" sw-modal-close>Entendido</button></div></div>
<div class="sw-modal is-m" id="modalM"><div class="sw-modal-box"><button class="sw-modal-close" sw-modal-close aria-label="Fechar">×</button><h3>Tamanho M (.is-m / padrão)</h3><p>Modal médio adaptável de até 576px para formulários e diálogos.</p><button sw-btn class="sw-btn-pri sw-btn-sm" style="margin-top:1rem;" sw-modal-close>Fechar</button></div></div>
<div class="sw-modal is-g" id="modalG"><div class="sw-modal-box"><button class="sw-modal-close" sw-modal-close aria-label="Fechar">×</button><h3>Tamanho G (.is-g)</h3><p>Largura de até 896px para formulários de 2 colunas e visualizações detalhadas.</p><button sw-btn class="sw-btn-inf sw-btn-sm" style="margin-top:1rem;" sw-modal-close>Concluir</button></div></div>
<div class="sw-modal is-gg" id="modalGg"><div class="sw-modal-box"><button class="sw-modal-close" sw-modal-close aria-label="Fechar">×</button><h3>Tamanho GG (.is-gg)</h3><p>Largura ampla de 1152px / 96vw ajustando proporcionalmente à tela para dashboards, tabelas e editores.</p><button sw-btn class="sw-btn-war sw-btn-sm" style="margin-top:1rem;" sw-modal-close>Salvar</button></div></div>
<div class="sw-modal is-cheio" id="modalCheio"><div class="sw-modal-box" style="padding:2.5rem;"><button class="sw-modal-close" sw-modal-close aria-label="Fechar">×</button><h2>Modal CHEIO (.is-cheio)</h2><p>Preenche toda a tela (100vw / 100vh) com rolagem interna suave e sem bordas arredondadas.</p><button sw-btn class="sw-btn-pri" style="margin-top:1.5rem;" sw-modal-close>Fechar Tela Cheia</button></div></div>
<div class="sw-modal is-drw" id="modalDrw"><div class="sw-modal-box"><button class="sw-modal-close" sw-modal-close aria-label="Fechar">×</button><h3>Drawer Lateral (.is-drw)</h3><p>Ocupa 100% da altura da tela e desliza a partir da borda direita.</p><button sw-btn class="sw-btn-suc" style="margin-top:1.5rem; width:100%;" sw-modal-close>Fechar Drawer</button></div></div>
Fundo translúcido com reflexo de luz e backdrop-blur de alta fidelidade.
Entra escalando a partir de 50% até 100%.
Entra deslizando de cima para o centro.
Entra deslizando de baixo para cima.
Entra rotacionando em perspectiva 3D.
Passa do tamanho final e assenta com curva elástica.
Entra com desfoque de lente e clareia progressivamente.
Entra com leve rotação angular.
<div class="demo-row" style="flex-wrap:wrap; gap:0.5rem;">
<button sw-btn class="sw-btn-gls sw-btn-sm" sw-modal-open="#modalGls">Glass HUD (is-gls)</button>
<button sw-btn class="sw-btn-soft sw-btn-pri sw-btn-sm" sw-modal-open="#modalZoo">Zoom (is-zoo)</button>
<button sw-btn class="sw-btn-soft sw-btn-sec sw-btn-sm" sw-modal-open="#modalSld">Slide de Cima (is-sld)</button>
<button sw-btn class="sw-btn-soft sw-btn-suc sw-btn-sm" sw-modal-open="#modalSup">Slide de Baixo (is-sup)</button>
<button sw-btn class="sw-btn-soft sw-btn-war sw-btn-sm" sw-modal-open="#modalFlip">Flip 3D (is-flip)</button>
<button sw-btn class="sw-btn-soft sw-btn-err sw-btn-sm" sw-modal-open="#modalBnc">Quique (is-bnc)</button>
<button sw-btn class="sw-btn-soft sw-btn-inf sw-btn-sm" sw-modal-open="#modalBlr">Desfoque (is-blr)</button>
<button sw-btn class="sw-btn-out sw-btn-sm" sw-modal-open="#modalRot">Giro (is-rot)</button>
</div>
<div class="sw-modal is-gls" id="modalGls"><div class="sw-modal-box"><button class="sw-modal-close" sw-modal-close aria-label="Fechar">×</button><h3>Glassmorphism HUD</h3><p>Fundo translúcido com reflexo de luz e backdrop-blur de alta fidelidade.</p><button sw-btn class="sw-btn-gls sw-btn-sm" style="margin-top:1rem;" sw-modal-close>Fechar</button></div></div>
<div class="sw-modal is-zoo" id="modalZoo"><div class="sw-modal-box"><button class="sw-modal-close" sw-modal-close aria-label="Fechar">×</button><h3>Zoom (is-zoo)</h3><p>Entra escalando a partir de 50% até 100%.</p><button sw-btn class="sw-btn-pri sw-btn-sm" style="margin-top:1rem;" sw-modal-close>Fechar</button></div></div>
<div class="sw-modal is-sld" id="modalSld"><div class="sw-modal-box"><button class="sw-modal-close" sw-modal-close aria-label="Fechar">×</button><h3>Slide (is-sld)</h3><p>Entra deslizando de cima para o centro.</p><button sw-btn class="sw-btn-sec sw-btn-sm" style="margin-top:1rem;" sw-modal-close>Fechar</button></div></div>
<div class="sw-modal is-sup" id="modalSup"><div class="sw-modal-box"><button class="sw-modal-close" sw-modal-close aria-label="Fechar">×</button><h3>Slide Up (is-sup)</h3><p>Entra deslizando de baixo para cima.</p><button sw-btn class="sw-btn-suc sw-btn-sm" style="margin-top:1rem;" sw-modal-close>Fechar</button></div></div>
<div class="sw-modal is-flip" id="modalFlip"><div class="sw-modal-box"><button class="sw-modal-close" sw-modal-close aria-label="Fechar">×</button><h3>Flip 3D (is-flip)</h3><p>Entra rotacionando em perspectiva 3D.</p><button sw-btn class="sw-btn-war sw-btn-sm" style="margin-top:1rem;" sw-modal-close>Fechar</button></div></div>
<div class="sw-modal is-bnc" id="modalBnc"><div class="sw-modal-box"><button class="sw-modal-close" sw-modal-close aria-label="Fechar">×</button><h3>Quique (is-bnc)</h3><p>Passa do tamanho final e assenta com curva elástica.</p><button sw-btn class="sw-btn-err sw-btn-sm" style="margin-top:1rem;" sw-modal-close>Fechar</button></div></div>
<div class="sw-modal is-blr" id="modalBlr"><div class="sw-modal-box"><button class="sw-modal-close" sw-modal-close aria-label="Fechar">×</button><h3>Desfoque (is-blr)</h3><p>Entra com desfoque de lente e clareia progressivamente.</p><button sw-btn class="sw-btn-inf sw-btn-sm" style="margin-top:1rem;" sw-modal-close>Fechar</button></div></div>
<div class="sw-modal is-rot" id="modalRot"><div class="sw-modal-box"><button class="sw-modal-close" sw-modal-close aria-label="Fechar">×</button><h3>Giro (is-rot)</h3><p>Entra com leve rotação angular.</p><button sw-btn class="sw-btn-out sw-btn-sm" style="margin-top:1rem;" sw-modal-close>Fechar</button></div></div>
Aberto via SW.Modal.show('#modalJs'). Fechando automaticamente em 3 segundos via SW.Modal.hide()...
<div class="demo-row">
<button type="button" class="sw-btn sw-btn-out sw-btn-pri" id="modalJsBtn">
<i class="swi-terminal" style="margin-right:0.4rem;"></i> Abrir via JavaScript (Auto-fecha em 3s)
</button>
</div>
<div class="sw-modal" id="modalJs">
<div class="sw-modal-box" style="text-align:center;">
<button class="sw-modal-close" sw-modal-close aria-label="Fechar">×</button>
<div style="font-size:2rem; margin-bottom:0.5rem;">⏱️</div>
<h3>Controle Programático</h3>
<p>Aberto via <code>SW.Modal.show('#modalJs')</code>. Fechando automaticamente em 3 segundos via <code>SW.Modal.hide()</code>...</p>
<div style="margin-top:1rem;">
<span sw-chip class="sw-chip-pri">TIMER ATIVO: 3 SEGUNDOS</span>
</div>
</div>
</div>
<script>
document.getElementById('modalJsBtn')?.addEventListener('click', () => {
SW.Modal.show('#modalJs');
setTimeout(() => SW.Modal.hide('#modalJs'), 3000);
});
</script>
sw-modal-open="#id"sw-modal="#id")sw-modal-closesw-size="VALOR" / sw-w="VALOR".sw-modal ou na .sw-modal-box — define uma largura personalizada exata (ex: sw-size="640px", sw-size="820px", sw-size="70vw" ou número direto sw-size="600")is-pp (ou is-xs)is-p (ou is-sm)is-m (ou is-md / padrão)is-g (ou is-lg)is-gg (ou is-xl)is-cheio (ou is-fl / is-full)is-drwis-glsis-zoois-sldis-supis-l / is-ris-flipis-bncis-blris-rotsw:modal:opensw:modal:closeSW.Modal.show(target, trigger?)SW.Modal.hide(target)sw-modal-open="#id" precisa apontar para um elemento com classe .sw-modal presente no DOM.