ModalState carries title/message/action as RwSignals; the action is read at click time so a late confirm wins. Overlay click and Cancel close; the confirm button runs the stored action. Edition-2024 note: method calls on non-Copy captures move by value inside nested move closures, so handlers touch state.open/state.action fields directly.
54 lines
1.0 KiB
SCSS
54 lines
1.0 KiB
SCSS
// Modal dialog: dark overlay, centered card, crimson confirm button.
|
|
|
|
@use 'mixins';
|
|
|
|
.modal-overlay {
|
|
position: fixed;
|
|
inset: 0;
|
|
z-index: 100;
|
|
display: flex;
|
|
justify-content: center;
|
|
align-items: center;
|
|
background: rgba(0, 0, 0, 0.75);
|
|
}
|
|
|
|
.modal {
|
|
max-width: 480px;
|
|
padding: 24px 32px;
|
|
background: #1a1a1a;
|
|
border: 1px solid rgba(255, 255, 255, 0.15);
|
|
box-shadow: 0 8px 40px rgba(0, 0, 0, 0.8);
|
|
|
|
h3 {
|
|
margin: 0 0 12px;
|
|
@include mixins.heading;
|
|
font-weight: 900;
|
|
}
|
|
|
|
p {
|
|
margin: 0 0 20px;
|
|
color: rgba(255, 255, 255, 0.75);
|
|
}
|
|
}
|
|
|
|
.modal-actions {
|
|
display: flex;
|
|
justify-content: flex-end;
|
|
gap: 12px;
|
|
}
|
|
|
|
button.modal-cancel {
|
|
@include mixins.button;
|
|
background: transparent;
|
|
border: 1px solid rgba(255, 255, 255, 0.4);
|
|
color: rgba(255, 255, 255, 0.8);
|
|
padding: 6px 18px;
|
|
cursor: pointer;
|
|
}
|
|
|
|
button.modal-confirm {
|
|
@include mixins.button;
|
|
padding: 6px 18px;
|
|
cursor: pointer;
|
|
}
|