.app-notice{--notice-bg:#f4f1ff;--notice-color:#51458d;--notice-accent:#7965e9;--notice-border:#e5dfff;color:var(--notice-color);background:var(--notice-bg);border:1px solid var(--notice-border);border-radius:1.15rem;align-items:flex-start;gap:.75rem;padding:1rem;font-size:.9rem;line-height:1.9;display:flex}.app-notice--success{--notice-bg:#effaf5;--notice-color:#27684e;--notice-accent:#31a276;--notice-border:#cfeede}.app-notice--warning{--notice-bg:#fff8e8;--notice-color:#815c1f;--notice-accent:#bd8a27;--notice-border:#f5e3b8}.app-notice--danger{--notice-bg:#fff0f4;--notice-color:#963e5a;--notice-accent:#dc6487;--notice-border:#f7d7e2}.app-notice-icon{block-size:2.5rem;color:var(--notice-accent);background:#ffffffb3;border-radius:50%;flex:0 0 2.5rem;justify-content:center;align-items:center;display:inline-flex}.app-notice-content{overflow-wrap:anywhere;flex:1;min-inline-size:0}.app-notice-title{color:inherit;margin-block-end:.15rem;font-weight:700}.app-notice-message>:last-child{margin-block-end:0}.app-notice-action{margin-block-start:.65rem}.app-notice .app-notice-close{box-sizing:border-box;flex:0 0 1.75rem;block-size:1.75rem;inline-size:1.75rem;margin-block-start:.1rem;padding:0}.app-notice .app-notice-close:before{font-size:1rem}.app-alert:focus-visible{outline-offset:3px;outline:3px solid #ad9fff}.app-notice.app-alert--compact{gap:.5rem;padding:.65rem .75rem;font-size:.8125rem}.app-alert--compact .app-notice-icon{flex-basis:1.75rem;block-size:1.75rem}.app-toast-region{z-index:1090;inline-size:min(25rem,100vw - 2rem);max-block-size:calc(100dvh - 120px - env(safe-area-inset-bottom,0px));pointer-events:none;flex-direction:column;gap:.75rem;display:flex;position:fixed;inset-block-end:calc(90px + env(safe-area-inset-bottom,0px));inset-inline-end:max(1rem, env(safe-area-inset-right,0px));overflow-y:auto}.app-toast.toast{pointer-events:auto;opacity:1;flex-shrink:0;inline-size:100%;max-inline-size:100%;animation:.18s ease-out app-toast-enter;display:flex;box-shadow:0 8px 24px #5542941a}.app-toast .toast-body{padding:0}.app-confirm .modal-content{border:1px solid #e9e3fb;border-radius:1.5rem;box-shadow:0 16px 48px #44317e26}.app-confirm .modal-header{border:0;align-items:flex-start;gap:.75rem;padding:1.25rem 1.25rem .5rem}.app-confirm .modal-header .btn-close{flex-shrink:0;margin:0}.app-confirm-title{color:#34295d;font-size:1.1rem;font-weight:700;line-height:1.8}.app-confirm .modal-body{padding:.5rem 1.25rem 1rem}.app-confirm-icon{color:#7965e9;background:linear-gradient(-145deg,#f6f2ff,#eae3ff);border-radius:1.25rem;justify-content:center;align-items:center;block-size:4rem;inline-size:4rem;margin:.25rem auto 1rem;display:flex}.app-confirm--danger .app-confirm-icon{color:#d35d80;background:linear-gradient(-145deg,#fff4f7,#ffe1eb)}.app-confirm-message{color:#68617e;line-height:1.9}.app-confirm-message>:last-child{margin-block-end:0}.app-confirm .modal-footer{border:0;gap:.65rem;padding:0 1.25rem 1.25rem}.app-confirm .modal-footer>.btn{border-radius:.9rem;flex:1;min-block-size:44px;margin:0;font-weight:500}.app-confirm .app-confirm-cancel{color:#73668e;--bs-btn-color:#73668e;--bs-btn-bg:#f5f2fb;--bs-btn-border-color:#f5f2fb}.app-confirm .app-confirm-submit--primary{color:#fff;--bs-btn-color:#fff;--bs-btn-hover-color:#fff;--bs-btn-active-color:#fff;--bs-btn-border-color:transparent;--bs-btn-hover-border-color:transparent;--bs-btn-active-border-color:transparent;--bs-btn-disabled-color:#fff;--bs-btn-disabled-border-color:transparent;background:linear-gradient(-145deg,#a294ff,#8472ff 50%,#6954f5)}.app-confirm .app-confirm-submit--danger{color:#290e20;--bs-btn-color:#290e20;--bs-btn-hover-color:#290e20;--bs-btn-active-color:#290e20;--bs-btn-border-color:transparent;--bs-btn-hover-border-color:transparent;--bs-btn-active-border-color:transparent;--bs-btn-disabled-color:#290e20;--bs-btn-disabled-border-color:transparent;background:linear-gradient(-145deg,#f3a0b7,#e5799b 50%,#cf5a80)}.app-confirm-submit:is(:hover,:focus-visible){filter:brightness(1.04)}@keyframes app-toast-enter{0%{opacity:0;transform:translateY(.5rem)}to{opacity:1;transform:translateY(0)}}@media (prefers-reduced-motion:reduce){.app-toast.toast{animation:none}.app-confirm.fade,.app-confirm.fade .modal-dialog,.app-confirm+.modal-backdrop{transition:none}}
