@mixin light-notification { --notification-bg-info: var(--bg-info-03); --notification-bg-success: var(--bg-accent-03); --notification-bg-warning: var(--bg-warning-03); --notification-bg-error: var(--bg-danger-03); --notification-bg-offer: var(--bg-light-primary); --notification-border-info: var(--blue-20); --notification-border-success: var(--green-20); --notification-border-warning: var(--yellow-20); --notification-border-error: var(--red-20); --notification-border-offer: var(--neutral-20); --notification-icon-info: var(--blue-50); --notification-icon-success: var(--green-50); --notification-icon-warning: var(--yellow-40); --notification-icon-error: var(--red-50); --notification-icon-offer: var(--neutral-50); --notification-content-primary: var(--content-primary); --notification-content-secondary: var(--content-secondary); --notification-bg-primary: var(--neutral-90); --notification-reconfirmation-bg: var(--bg-light-secondary); --notification-disclaimer-color: var(--neutral-60); --notification-close-btn-bg: rgb(27 34 44 / 8%); } @mixin dark-notification { --notification-bg-info: var(--blue-70); --notification-bg-success: var(--green-70); --notification-bg-warning: var(--yellow-70); --notification-bg-error: var(--red-70); --notification-bg-offer: var(--neutral-70); --notification-border-info: var(--blue-60); --notification-border-success: var(--green-60); --notification-border-warning: var(--yellow-60); --notification-border-error: var(--red-60); --notification-border-offer: var(--neutral-60); --notification-icon-info: var(--blue-30); --notification-icon-success: var(--green-30); --notification-icon-warning: var(--yellow-20); --notification-icon-error: var(--red-20); --notification-icon-offer: var(--neutral-20); --notification-content-primary: var(--content-primary-dark); --notification-content-secondary: var(--content-secondary-dark); --notification-bg-primary: var(--neutral-10); --notification-reconfirmation-bg: var(--bg-dark-secondary); --notification-disclaimer-color: var(--neutral-40); --notification-close-btn-bg: rgb(255 255 255 / 8%); } :root { --notification-ai-paywall-background: var(--bg-info-03); --notification-ai-paywall-color: var(--content-primary); --notification-ai-paywall-border-color: var(--blue-60); @include light-notification; // Until we roll out dark mode notifications, make sure we show buttons in // light mode even when the rest of the page is in dark mode .ide-redesign-main .notification .btn { @include light-buttons; } @include theme('default') { --notification-ai-paywall-background: var(--bg-dark-secondary); --notification-ai-paywall-color: var(--content-primary-dark); --notification-ai-paywall-border-color: var(--blue-30); .project-ds-nav-page { .notification { @include dark-notification; @include dark-bg; .btn { @include dark-buttons; } } } } } .notification-body { // will be deprecated once notifications moved to use .notification (see below) flex-grow: 1; width: 90%; @include media-breakpoint-up(md) { width: auto; } } .notification-action { $line-height-computed: $font-size-base * $line-height-base; // 24px // will be deprecated once notifications moved to use .notification (see below) margin-top: calc($line-height-computed / 2); // match paragraph padding order: 1; @include media-breakpoint-up(md) { margin-top: 0; order: 0; padding-left: $spacing-05; } } .notification-close { // will be deprecated once notifications moved to use .notification (see below) padding-left: $spacing-05; text-align: right; width: 10%; button { aspect-ratio: 1; border-radius: 50%; display: flex; float: right; padding: 5.5px; cursor: pointer; background: transparent; border: 0; &:hover, &:focus { background-color: var(--notification-close-btn-bg); color: var(--notification-content-secondary); } } @include media-breakpoint-up(md) { width: auto; } } .notification { border-radius: $border-radius-base; color: var(--notification-content-primary); display: flex; padding: 0 $spacing-06; // vertical padding added by elements within notification width: 100%; a:not(.btn) { text-decoration: underline; } p { margin-bottom: $spacing-02; } .notification-icon { flex-grow: 0; padding: 18px $spacing-06 0 0; } .notification-icon.notification-icon-center { padding-top: 0; display: flex; align-items: center; } .notification-content-and-cta { // shared container to align cta with text on smaller screens display: flex; flex-grow: 1; flex-wrap: wrap; p:last-child { margin-bottom: 0; } } .notification-content { flex-grow: 1; padding: $spacing-06 0; text-align: left; width: 100%; } &.text-center .notification-content { text-align: center; } .notification-cta { padding-bottom: $spacing-06; a { font-weight: 700; } a, button { white-space: nowrap; } } .notification-disclaimer { color: var(--notification-disclaimer-color); font-size: $font-size-sm; padding-bottom: $spacing-06; } .notification-close-btn { height: $spacing-12; align-items: center; display: flex; padding: 0 0 0 $spacing-06; button { aspect-ratio: 1; border-radius: 50%; display: flex; float: right; padding: 5.5px; cursor: pointer; background: transparent; border: 0; color: var(--notification-content-primary); &:hover, &:focus { background-color: var(--notification-close-btn-bg); color: var(--notification-content-secondary); } } } &.notification-type-info { background-color: var(--notification-bg-info); border: 1px solid var(--notification-border-info); .notification-icon { color: var(--notification-icon-info); } } &.notification-type-success { background-color: var(--notification-bg-success); border: 1px solid var(--notification-border-success); .notification-icon { color: var(--notification-icon-success); } } &.notification-type-warning { background-color: var(--notification-bg-warning); border: 1px solid var(--notification-border-warning); .notification-icon { color: var(--notification-icon-warning); } } &.notification-type-error { background-color: var(--notification-bg-error); border: 1px solid var(--notification-border-error); .notification-icon { color: var(--notification-icon-error); } } &.notification-type-offer { background-color: var(--notification-bg-offer); border: 1px solid var(--notification-border-offer); .notification-icon { color: var(--notification-icon-offer); } } @include media-breakpoint-up(md) { &:not(.notification-cta-below-content) { .notification-content-and-cta { flex-wrap: nowrap; } .notification-content { width: auto; } .notification-cta { height: $spacing-12; padding-left: $spacing-06; padding-bottom: 0; align-items: center; display: flex; } } } } .notification-with-scroll-margin { scroll-margin: $spacing-06; } .notification-list { .notification { margin-bottom: $spacing-07; } } // Reconfirmation notification .reconfirm-notification { display: flex; width: 100%; .btn-reconfirm { float: right; margin-left: $spacing-05; text-transform: capitalize; } } .group-invitation-cancel-subscription-notification-buttons { display: flex; align-items: center; } // Settings page .affiliations-table { .reconfirm-notification { margin: 0 auto $spacing-05 !important; padding: $spacing-07; } .reconfirm-row { td { border: 0; .alert { border: 0; padding: 0; } :not(.alert) { .reconfirm-notification { background-color: var(--notification-reconfirmation-bg); border-radius: $border-radius-base; } } } } } // Only apply bottom margin to form messages when it is non-empty .form-messages-bottom-margin > :last-child { margin-bottom: var(--spacing-06); } .ai-paywall-notification { // Override notification styles. !important is needed so that it binds // stronger than the notification variant styles. border: 2px solid var(--notification-ai-paywall-border-color) !important; background-color: var(--notification-ai-paywall-background) !important; color: var(--notification-ai-paywall-color) !important; }