UNPKG

@buun_group/brutalist-ui

Version:
227 lines (196 loc) 4.03 kB
.container { position: fixed; z-index: calc(var(--brutal-z-popover) + 100); display: flex; flex-direction: column; gap: var(--brutal-space-3); padding: var(--brutal-space-4); pointer-events: none; } /* Position variants */ .top-left { top: 0; left: 0; } .top-center { top: 0; left: 50%; transform: translateX(-50%); } .top-right { top: 0; right: 0; } .bottom-left { bottom: 0; left: 0; } .bottom-center { bottom: 0; left: 50%; transform: translateX(-50%); } .bottom-right { bottom: 0; right: 0; } /* Toast item */ .toast { display: flex; align-items: flex-start; gap: var(--brutal-space-3); min-width: 300px; max-width: 500px; padding: var(--brutal-space-4); background-color: var(--brutal-white); border: 3px solid var(--brutal-black); box-shadow: 4px 4px 0px var(--brutal-black); pointer-events: auto; animation: toastEnter 0.3s ease-out; font-family: var(--brutal-font-sans); } .toast.exiting { animation: toastExit 0.3s ease-in forwards; } /* Type variants */ .toast.info { border-color: var(--brutal-info); } .toast.info .icon { background-color: var(--brutal-info); } .toast.success { border-color: var(--brutal-success); } .toast.success .icon { background-color: var(--brutal-success); } .toast.warning { border-color: var(--brutal-warning); } .toast.warning .icon { background-color: var(--brutal-warning); } .toast.error { border-color: var(--brutal-error); } .toast.error .icon { background-color: var(--brutal-error); } /* Icon */ .icon { flex-shrink: 0; width: 24px; height: 24px; display: flex; align-items: center; justify-content: center; background-color: var(--brutal-black); color: var(--brutal-white); font-weight: var(--brutal-font-black); font-size: var(--brutal-text-sm); border: 2px solid var(--brutal-black); } /* Content */ .content { flex: 1; min-width: 0; } .title { font-weight: var(--brutal-font-black); font-size: var(--brutal-text-base); margin-bottom: var(--brutal-space-1); text-transform: uppercase; } .message { font-size: var(--brutal-text-sm); color: var(--brutal-gray-700); line-height: 1.5; } /* Action button */ .action { margin-top: var(--brutal-space-2); padding: var(--brutal-space-1) var(--brutal-space-3); background-color: var(--brutal-black); color: var(--brutal-white); border: 2px solid var(--brutal-black); font-family: var(--brutal-font-mono); font-size: var(--brutal-text-xs); font-weight: var(--brutal-font-bold); text-transform: uppercase; cursor: pointer; transition: var(--brutal-transition-fast); } .action:hover { transform: translate(-2px, -2px); box-shadow: 2px 2px 0px var(--brutal-black); } .action:active { transform: translate(0, 0); box-shadow: none; } /* Dismiss button */ .dismiss { flex-shrink: 0; width: 24px; height: 24px; display: flex; align-items: center; justify-content: center; background-color: transparent; border: 2px solid var(--brutal-black); cursor: pointer; font-weight: var(--brutal-font-black); transition: var(--brutal-transition-fast); } .dismiss:hover { background-color: var(--brutal-black); color: var(--brutal-white); } /* Animations */ @keyframes toastEnter { from { opacity: 0; transform: translateY(100%); } to { opacity: 1; transform: translateY(0); } } @keyframes toastExit { from { opacity: 1; transform: translateX(0); } to { opacity: 0; transform: translateX(100%); } } /* Top positions need different enter animation */ .top-left .toast, .top-center .toast, .top-right .toast { animation: toastEnterTop 0.3s ease-out; } @keyframes toastEnterTop { from { opacity: 0; transform: translateY(-100%); } to { opacity: 1; transform: translateY(0); } } /* Mobile responsive */ @media (max-width: 768px) { .container { padding: var(--brutal-space-2); } .toast { min-width: 250px; max-width: calc(100vw - var(--brutal-space-4)); } }