.nt-notification-region{position:fixed;z-index:700;inset:0;display:none;place-items:center;padding:max(20px,env(safe-area-inset-top)) max(20px,env(safe-area-inset-right)) max(20px,env(safe-area-inset-bottom)) max(20px,env(safe-area-inset-left));background:rgba(14,27,42,.28);pointer-events:none}.nt-notification-region.is-visible{display:grid;pointer-events:auto}.nt-notification{--nt-tone:#3f7655;--nt-soft:#edf7ef;position:relative;display:grid;grid-template-columns:56px minmax(0,1fr);gap:16px;width:min(560px,100%);max-height:calc(100dvh - 40px);padding:28px 30px 24px;border:1px solid #cbd9d0;border-top:5px solid var(--nt-tone);border-radius:20px;background:#fffcf6;color:#17324f;box-shadow:0 24px 70px rgba(8,18,30,.28);overflow:auto;overscroll-behavior:contain;overflow-wrap:anywhere;opacity:0;transform:translateY(10px) scale(.985);transition:opacity .18s ease,transform .18s ease}.nt-notification.is-ready{opacity:1;transform:none}.nt-notification--error{--nt-tone:#a63f39;--nt-soft:#faecea;border-color:#e3c4c0;border-top-color:var(--nt-tone)}.nt-notification--warning{--nt-tone:#92671e;--nt-soft:#fbf2dc;border-color:#e5d2a5;border-top-color:var(--nt-tone)}.nt-notification--info{--nt-tone:#2d659b;--nt-soft:#eaf3fb;border-color:#c6d9ea;border-top-color:var(--nt-tone)}.nt-notification__icon{display:grid;width:54px;height:54px;place-items:center;border:2px solid color-mix(in srgb,var(--nt-tone) 42%,white);border-radius:50%;background:var(--nt-soft);color:var(--nt-tone);font-size:1.3rem;font-weight:900}.nt-notification__content{min-width:0;padding-top:2px}.nt-notification__title{margin:0 0 7px;color:#17324f;font-size:clamp(1.25rem,1.1rem + .45vw,1.55rem);font-weight:750;line-height:1.25}.nt-notification__message{margin:0;color:#506176;font-size:1rem;line-height:1.55}.nt-notification--prominent .nt-notification__icon{grid-column:1/-1;justify-self:center}.nt-notification--prominent .nt-notification__content{grid-column:1/-1;padding-top:0;text-align:center}.nt-notification--prominent .nt-notification__title{text-align:center}.nt-notification--prominent .nt-notification__message{color:#17324f;font-size:24px;font-weight:750;line-height:1.35;text-align:center}.nt-notification__actions{grid-column:1/-1;display:flex;justify-content:flex-end;margin-top:8px}.nt-notification__action{min-width:128px;min-height:46px;padding:10px 24px;border:1px solid var(--nt-tone);border-radius:11px;background:var(--nt-tone);color:#fff;font:inherit;font-weight:700;line-height:1.2;cursor:pointer}.nt-notification__action:hover{filter:brightness(.92)}.nt-notification__action:active{filter:brightness(.84)}.nt-notification__action:focus-visible{outline:3px solid #1769d2;outline-offset:3px}.nt-notification__timer{position:relative;grid-column:1/-1;display:flex;min-height:24px;align-items:flex-end;margin:0 -30px -24px;padding:0 30px 10px;color:#596a7d;font-size:.82rem;font-weight:600}.nt-notification__timer[hidden]{display:none}.nt-notification__progress{position:absolute;right:0;bottom:0;left:0;height:5px;background:linear-gradient(90deg,var(--nt-tone) calc(var(--nt-progress)*100%),color-mix(in srgb,var(--nt-tone) 16%,white) 0)}.nt-notification.is-leaving{opacity:0;transform:translateY(6px) scale(.99)}@media(max-width:600px){.nt-notification-region{padding:12px}.nt-notification{grid-template-columns:48px minmax(0,1fr);gap:13px;width:min(100%,520px);max-height:calc(100dvh - 24px);padding:22px 20px 20px;border-radius:17px}.nt-notification__icon{width:46px;height:46px}.nt-notification--prominent .nt-notification__message{font-size:21px}.nt-notification__actions{justify-content:stretch}.nt-notification__action{width:100%}.nt-notification__timer{margin:0 -20px -20px;padding-right:20px;padding-left:20px}}@media(max-height:520px){.nt-notification-region{padding:8px}.nt-notification{max-height:calc(100dvh - 16px);padding-top:18px;padding-bottom:18px}.nt-notification__icon{width:44px;height:44px}.nt-notification__timer{margin-bottom:-18px}}@media(prefers-reduced-motion:reduce){.nt-notification{opacity:1;transform:none;transition:none}.nt-notification.is-leaving{opacity:1;transform:none}.nt-notification__progress{display:none}.nt-notification__countdown{font-variant-numeric:tabular-nums}}
/* Opt-in structured notices (options.lines): one normal-weight line per paragraph. */
.nt-notification__lines p{margin:0 0 .45rem;font-weight:400}.nt-notification__lines p:last-child{margin-bottom:0}

/* Errors, warnings and validation messages (owner's rule): centred (the region above) and large. */
.nt-notification--emphasis{width:min(620px,100%)}
.nt-notification--emphasis .nt-notification__title{font-size:clamp(1.45rem,1.22rem + .8vw,1.9rem);line-height:1.25}
.nt-notification--emphasis .nt-notification__message,.nt-notification--emphasis .nt-notification__lines p{color:#2b3f55;font-size:clamp(1.12rem,1.04rem + .35vw,1.3rem);line-height:1.5}
.nt-notification--emphasis .nt-notification__lines{display:grid;gap:.45rem}
.nt-notification--emphasis .nt-notification__lines p{position:relative;margin:0;padding-inline-start:1.15em}
.nt-notification--emphasis .nt-notification__lines p::before{content:"";position:absolute;inset-inline-start:.2em;top:.62em;width:.42em;height:.42em;border-radius:50%;background:var(--nt-tone)}
.nt-notification--emphasis .nt-notification__action{min-height:50px;font-size:1.08rem}
.nt-notification[dir="rtl"]{text-align:right}
@media(max-width:600px){.nt-notification--emphasis .nt-notification__title{font-size:1.38rem}.nt-notification--emphasis .nt-notification__message,.nt-notification--emphasis .nt-notification__lines p{font-size:1.1rem}}

/* The field to fix, after the notice is dismissed (marked by netthub-notify.js; pages with their own marks keep them). */
.nt-field--invalid{border-color:#a63f39!important;box-shadow:0 0 0 3px rgba(166,63,57,.22)!important}
.nt-field-error{margin:.35rem 0 0;color:#8f2f2a;font-size:.98rem;font-weight:600;line-height:1.4}

/* SweetAlert dialogs share the same calm, large style. */
body .swal2-popup{width:min(620px,calc(100% - 32px));padding:28px 30px 24px;border:1px solid #cbd9d0;border-radius:20px;background:#fffcf6;color:#17324f;box-shadow:0 24px 70px rgba(8,18,30,.28)}
body .swal2-title{color:#17324f;font-size:clamp(1.45rem,1.22rem + .8vw,1.9rem);font-weight:750;line-height:1.25}
body .swal2-html-container{color:#2b3f55;font-size:clamp(1.12rem,1.04rem + .35vw,1.3rem);line-height:1.5}
body .swal2-actions .swal2-styled{min-width:128px;min-height:50px;padding:10px 24px;border-radius:11px;font-size:1.08rem;font-weight:700}
body .swal2-actions .swal2-styled:focus-visible{outline:3px solid #1769d2;outline-offset:3px;box-shadow:none}
.nt-notification__items{display:grid;gap:.5rem;margin:.25rem 0 0;padding:0;list-style:none}
.nt-notification__items li{color:#2b3f55;font-size:clamp(1.12rem,1.04rem + .35vw,1.3rem);line-height:1.45}
.nt-notification__item{display:block;width:100%;padding:.55rem .8rem;border:1px solid #e3c4c0;border-radius:11px;background:#fff;color:#7d2b26;font:inherit;font-weight:600;text-align:start;text-decoration:underline;text-underline-offset:3px;cursor:pointer}
.nt-notification__item:hover{background:#faecea}
.nt-notification__item:focus-visible{outline:3px solid #1769d2;outline-offset:2px}
/* Warning items (a warning notice, or a warning part of another notice): amber and not underlined, so they never read as errors or links. */
.nt-notification--warning .nt-notification__item,.nt-notification__group--warning .nt-notification__item{border-color:#e5d2a5;color:#5c430f;text-decoration:none}
.nt-notification--warning .nt-notification__item:hover,.nt-notification__group--warning .nt-notification__item:hover{background:#fbf2dc}
/* options.itemsTitle: the items as their own clearly separated part (its own heading, tone and rule above it). */
.nt-notification__group{margin-top:1.1rem;padding:1rem 1.1rem 1.05rem;border:1px solid #c6d9ea;border-inline-start:5px solid #2d659b;border-radius:14px;background:#f6f9fc}
.nt-notification__group--warning{border-color:#e5d2a5;border-inline-start-color:#92671e;background:#fdf7e8}
.nt-notification__group--error{border-color:#e3c4c0;border-inline-start-color:#a63f39;background:#fdf3f2}
.nt-notification__group-title{margin:0 0 .35rem;color:#17324f;font-size:clamp(1.2rem,1.08rem + .45vw,1.45rem);font-weight:750;line-height:1.3}
.nt-notification__group--warning .nt-notification__group-title{color:#5c430f}
.nt-notification__group-intro{margin:0 0 .6rem;color:#2b3f55;font-size:clamp(1.05rem,1rem + .3vw,1.2rem);line-height:1.5}
/* Confirmations: Cancel is neutral; the button that deletes, revokes, disables or blocks is red. For those, focus starts on
   Cancel, so Enter pressed out of habit never performs the action (netthub-notify.js, for notices and SweetAlert). */
.nt-notification__actions{flex-wrap:wrap;gap:10px}
.nt-notification__cancel{min-width:128px;min-height:46px;padding:10px 24px;border:1px solid #9aa8b6;border-radius:11px;background:#fff;color:#17324f;font:inherit;font-weight:700;line-height:1.2;cursor:pointer}
.nt-notification--emphasis .nt-notification__cancel{min-height:50px;font-size:1.08rem}
.nt-notification__cancel:hover{background:#eef2f6}
.nt-notification__cancel:focus-visible{outline:3px solid #1769d2;outline-offset:3px}
.nt-notification__action--danger{border-color:#b42318;background:#b42318}
@media(max-width:600px){.nt-notification__cancel{flex:1 1 0;width:100%}.nt-notification__actions .nt-notification__action{flex:1 1 0}}
body .swal2-actions .swal2-styled.nt-swal-cancel{border:1px solid #9aa8b6;background:#fff;color:#17324f}
body .swal2-actions .swal2-styled.nt-swal-cancel:hover{background:#eef2f6;background-image:none}
body .swal2-actions .swal2-styled.nt-swal-danger{border:1px solid #b42318;background:#b42318;color:#fff}

/* Opt-in sign-off line (options.signoff): plain, no bullet, after the message. */
.nt-notification__signoff{margin:.9rem 0 0;color:#2b3f55;font-size:1.05rem;font-weight:600;line-height:1.5}
.nt-notification--emphasis .nt-notification__signoff{font-size:clamp(1.05rem,1rem + .25vw,1.2rem)}

/* Confirm waiting state (options.onConfirm): both buttons disabled, a spinner on the action until the answer arrives. */
.nt-notification.is-busy .nt-notification__action,.nt-notification.is-busy .nt-notification__cancel{cursor:progress}
.nt-notification__action:disabled,.nt-notification__cancel:disabled{opacity:.72;filter:none}
.nt-notification__action:disabled{display:inline-flex;align-items:center;justify-content:center;gap:.6em}
.nt-notification__spinner{flex:none;width:1.05em;height:1.05em;border:.16em solid rgba(255,255,255,.45);border-top-color:#fff;border-radius:50%;animation:nt-notification-spin .8s linear infinite}
@keyframes nt-notification-spin{to{transform:rotate(360deg)}}
@media(prefers-reduced-motion:reduce){.nt-notification__spinner{animation-duration:2.4s}}
