Modal

Neumorphic dialogs with backdrop blur, animations, and focus trap.

Default Modal

<div class="sui-modal-backdrop" id="myModal">
  <div class="sui-modal">
    <div class="sui-modal-header">
      <h3>Modal Title</h3>
      <button class="sui-modal-close" aria-label="Close"></button>
    </div>
    <div class="sui-modal-body">
      <p>Content here.</p>
    </div>
    <div class="sui-modal-footer">
      <button class="sui-btn sui-btn-sm">Cancel</button>
      <button class="sui-btn sui-btn-primary sui-btn-sm">Confirm</button>
    </div>
  </div>
</div>

SoftUI.modal('#myModal').open();
SoftUI.modal('#myModal').close();

Small Modal

<div class="sui-modal-backdrop" id="mySmallModal">
  <div class="sui-modal sui-modal-sm">
    <div class="sui-modal-header">
      <h3>Session Timeout</h3>
      <button class="sui-modal-close" aria-label="Close"></button>
    </div>
    <div class="sui-modal-body">
      <p>Your session will expire in 5 minutes. Would you like to stay signed in?</p>
    </div>
    <div class="sui-modal-footer">
      <button class="sui-btn sui-btn-sm">Sign Out</button>
      <button class="sui-btn sui-btn-primary sui-btn-sm">Stay Signed In</button>
    </div>
  </div>
</div>

Large Modal with Form

<div class="sui-modal-backdrop" id="myLargeModal">
  <div class="sui-modal sui-modal-lg">
    <div class="sui-modal-header">
      <h3>Large Modal</h3>
      <button class="sui-modal-close" aria-label="Close"></button>
    </div>
    <div class="sui-modal-body">
      <form>
        <label class="sui-label">Name</label>
        <input class="sui-input" type="text" placeholder="Enter name">
        <label class="sui-label">Email</label>
        <input class="sui-input" type="email" placeholder="Enter email">
      </form>
    </div>
    <div class="sui-modal-footer">
      <button class="sui-btn sui-btn-sm">Cancel</button>
      <button class="sui-btn sui-btn-primary sui-btn-sm">Submit</button>
    </div>
  </div>
</div>

Fullscreen Modal

<div class="sui-modal-backdrop" id="myFullscreenModal">
  <div class="sui-modal sui-modal-fullscreen">
    <div class="sui-modal-header">
      <h3>Fullscreen Modal</h3>
      <button class="sui-modal-close" aria-label="Close"></button>
    </div>
    <div class="sui-modal-body">
      <!-- Full viewport content -->
      <p>This modal spans the entire screen.</p>
    </div>
    <div class="sui-modal-footer">
      <button class="sui-btn sui-btn-sm">Close</button>
    </div>
  </div>
</div>

Scrollable Modal

<div class="sui-modal-backdrop" id="myScrollableModal">
  <div class="sui-modal sui-modal-scrollable">
    <div class="sui-modal-header">
      <h3>Scrollable Modal</h3>
      <button class="sui-modal-close" aria-label="Close"></button>
    </div>
    <div class="sui-modal-body">
      <!-- Long content that scrolls within the modal body -->
      <p>When content exceeds the modal height, the body becomes scrollable.</p>
    </div>
    <div class="sui-modal-footer">
      <button class="sui-btn sui-btn-sm">Close</button>
    </div>
  </div>
</div>

Static Backdrop

<div class="sui-modal-backdrop sui-modal-static" id="myStaticModal">
  <div class="sui-modal">
    <div class="sui-modal-header">
      <h3>Static Backdrop</h3>
      <button class="sui-modal-close" aria-label="Close"></button>
    </div>
    <div class="sui-modal-body">
      <p>Clicking outside won't close this modal. It shakes instead.</p>
    </div>
    <div class="sui-modal-footer">
      <button class="sui-btn sui-btn-sm">Cancel</button>
      <button class="sui-btn sui-btn-primary sui-btn-sm">Understood</button>
    </div>
  </div>
</div>

Alert Dialog

A confirmation dialog that requires explicit user action. Combines sui-modal-sm + sui-modal-static with no close button and role="alertdialog". Clicking outside shakes the dialog instead of dismissing it — the user must choose an action.

<!-- Alert Dialog = sui-modal-sm + sui-modal-static + no close button -->
<div class="sui-modal-backdrop sui-modal-static" id="alertDialog"
     role="alertdialog" aria-modal="true"
     aria-labelledby="alertTitle" aria-describedby="alertDesc">
  <div class="sui-modal sui-modal-sm">
    <div class="sui-modal-header">
      <h3 id="alertTitle">Delete this item?</h3>
    </div>
    <div class="sui-modal-body">
      <p id="alertDesc">This action cannot be undone. This will permanently
      delete the item and remove all associated data.</p>
    </div>
    <div class="sui-modal-footer">
      <button class="sui-btn sui-btn-sm"
        onclick="SoftUI.modal('#alertDialog').close()">Cancel</button>
      <button class="sui-btn sui-btn-danger sui-btn-sm">Delete</button>
    </div>
  </div>
</div>

Delete this item?

This action cannot be undone. This will permanently delete the item and remove all associated data.