html { position: relative; min-height: 100%; } body { overflow-x: hidden; } // Sticky Footer .outer-wrapper { display: flex; margin: 0; } .inner-wrapper { flex: 1 1 auto; flex-flow: column nowrap; display: flex; min-height: 100vh; flex-direction: column; width: 100%; position: relative; } #main-content { z-index: var(--ds-main-z-index); flex: 1 1 100%; margin-top: 30px; } .alert.hide { padding: 0; margin: 0; } .sticky-top { z-index: 0; } .klaro .cookie-notice { .cn-buttons { .cm-btn.cm-btn-success { color: var(--button-text-color-cookie); background-color: var(--green1); font-weight: 600; } } } .klaro .cookie-modal .cm-btn.cm-btn-success.cm-btn-accept-all { color: var(--button-text-color-cookie); background-color: var(--green1); font-weight: 600; } .klaro .cookie-modal a, .klaro .context-notice a, .klaro .cookie-notice a { color: var(--green1); text-decoration: underline !important; } .klaro .cookie-modal .cm-modal .cm-body span, .klaro .cookie-modal .cm-modal .cm-body ul.cm-purposes li.cm-purpose span.cm-required, p.purposes, .klaro .cookie-modal .cm-modal .cm-footer .cm-powered-by a { color: var(--bs-light) !important; } .klaro .cookie-modal .cm-btn.cm-btn-info { background-color: var(--very-dark-cyan) !important; } .media-viewer .change-gallery .ngx-gallery ngx-gallery-preview.ngx-gallery-active { right: 0; left: auto; width: calc(100% - 53px); } .ds-submission-reorder-dragging { .ds-hint, button { display: none; } } ngb-modal-backdrop { // ng-bootsrap animates opacity, causing the fully opaque background to flash briefly before the transition starts // animating background-color between transparent & a RGBA color instead looks smoother &.fade { opacity: 1 !important; background-color: transparent; transition: background-color 0.15s linear; &.show { background-color: rgba(0, 0, 0, 0.5); } } } .dont-break-out { /* These are technically the same, but use both */ overflow-wrap: break-word; word-wrap: break-word; -ms-word-break: break-all; /* This is the dangerous one in WebKit, as it breaks things wherever */ word-break: break-all; /* Instead use this non-standard one: */ word-break: break-word; /* Adds a hyphen where the word breaks, if supported (No Blink) */ -ms-hyphens: auto; -moz-hyphens: auto; -webkit-hyphens: auto; hyphens: auto; } .researcher-profile-switch button:focus { outline: none !important; } .researcher-profile-switch .switch.checked { color: #fff; } /* Replicate default spacing look ~ preserveWhitespace=true To be used e.g. on a div containing buttons that should have a bit of spacing in between */ .space-children-mr > :not(:last-child) { margin-right: var(--ds-gap); } /* Complement .space-children-mr when spaced elements are not on the same level */ .mr-gap { margin-right: var(--ds-gap); } .ml-gap { margin-left: var(--ds-gap); } .custom-accordion .card-header button { -webkit-box-shadow: none !important; box-shadow: none !important; width: 100%; } .custom-accordion .card:first-of-type { border-bottom: var(--bs-card-border-width) solid var(--bs-card-border-color) !important; border-bottom-left-radius: var(--bs-card-border-radius) !important; border-bottom-right-radius: var(--bs-card-border-radius) !important; } ds-dynamic-form-control-container.d-none { /* Ensures that form-control containers hidden and disabled by type binding collapse and let other fields in the same row expand accordingly */ visibility: collapse; } /* Used for dso administrative functionality */ .btn-dark { background-color: var(--ds-admin-sidebar-bg); } .preserve-line-breaks { white-space: pre-line; } /* Thumbnail styles */ .hide-placeholder-text { .thumbnail-placeholder { color: transparent !important; } } /* Used to hide the thumbnail column in modals. */ .hide-modal-thumbnail-column { .modal-body ds-listable-object-component-loader div.row > div:first-child { display: none; } .modal-body ds-listable-object-component-loader div.row > div:nth-child(2) { flex: 0 0 100%; max-width: 100%; } } /* The font sizes used in "no thumbnail" placeholder */ .thumb-font-0 { .thumbnail-placeholder { @media screen and (max-width: map-get($grid-breakpoints, lg)) { font-size: 0.7rem; padding: 0.2rem; } @media screen and (max-width: map-get($grid-breakpoints, sm)) { font-size: 0.6rem; padding: 0.1rem; } font-size: 0.4rem; padding: 0.1rem; } } .thumb-font-1 { .thumbnail-placeholder { @media screen and (max-width: map-get($grid-breakpoints, sm)) { font-size: 0.9rem; padding: 0.1rem; } @media screen and (max-width: 950px) { font-size: 0.4rem; padding: 0.1rem; } font-size: 0.5rem; padding: 0.125rem; } } .thumb-font-2 { .thumbnail-placeholder { font-size: 0.9rem; padding: 0.125rem; } } .thumb-font-3 { .thumbnail-placeholder { font-size: 1.25rem; padding: 0.5rem; } } .btn.btn-link.btn-link-inline { display: inline; padding: 0; &:not(:disabled){ &:hover, &:focus { box-shadow: none; } } } .badge-validation { background-color: #{map-get($theme-colors, warning)}; } .badge-waiting-controller { background-color: #{map-get($theme-colors, info)}; } .badge-workspace { background-color: #{map-get($theme-colors, primary)}; } .badge-archived { background-color: darken($green, 25); } .badge-workflow { background-color: #{map-get($theme-colors, info)}; } .badge-item-type { background-color: #{map-get($theme-colors, info)}; } .visually-hidden { position: absolute !important; width: 1px !important; height: 1px !important; padding: 0 !important; margin: -1px !important; overflow: hidden !important; clip: rect(0, 0, 0, 0) !important; white-space: nowrap !important; border: 0 !important; } ul.dso-edit-menu-dropdown>li .nav-item.nav-link { // ensure that links in DSO edit menu dropdowns are unstyled (li elements are styled instead to support icons) padding: 0; display: inline; } .table th, .table td { vertical-align: middle; } /* Flexbox gap */ .gap-0 { gap: 0; } .gap-1 { gap: calc(#{$spacer} * .25); } .gap-2 { gap: calc(#{$spacer} * .5); } .gap-3 { gap: #{$spacer}; } .gap-4 { gap: calc(#{$spacer} * 1.5); } .gap-5 { gap: calc(#{$spacer} * 3); } .gapx-0 { column-gap: 0; } .gapx-1 { column-gap: calc(#{$spacer} * .25); } .gapx-2 { column-gap: calc(#{$spacer} * .5); } .gapx-3 { column-gap: #{$spacer}; } .gapx-4 { column-gap: calc(#{$spacer} * 1.5); } .gapx-5 { column-gap: calc(#{$spacer} * 3); } .gapy-0 { row-gap: 0; } .gapy-1 { row-gap: calc(#{$spacer} * .25); } .gapy-2 { row-gap: calc(#{$spacer} * .5); } .gapy-3 { row-gap: #{$spacer}; } .gapy-4 { row-gap: calc(#{$spacer} * 1.5); } .gapy-5 { row-gap: calc(#{$spacer} * 3); } .pt-0\.5 { padding-top: 0.125rem !important; } .pr-0\.5 { padding-right: 0.125rem !important; } .pb-0\.5 { padding-bottom: 0.125rem !important; } .pl-0\.5 { padding-left: 0.125rem !important; } .px-0\.5 { padding-left: 0.125rem !important; padding-right: 0.125rem !important; } .py-0\.5 { padding-top: 0.125rem !important; padding-bottom: 0.125rem !important; } .btn { &:focus { outline-offset: 2px !important; outline-style: solid !important; outline-width: 2px !important; box-shadow: none !important; } &:disabled { opacity: 0.7; } &.btn-success { background-color: darken($success, 20%); border-color: darken($success, 20%); &:hover { background-color: darken($success, 30%); border-color: darken($success, 30%); } &:focus { outline-color: darken($success, 20%); } } &.btn-outline-success { border-color: darken($success, 20%); color: darken($success, 20%); &:hover { background-color: darken($success, 30%); color: $white; } &:focus { outline-color: darken($success, 20%); } } &.btn-warning { background-color: darken($warning, 20%); &:hover { background-color: darken($warning, 30%); } &:disabled { background-color: transparent; } &:focus { outline-color: darken($warning, 22%); } } &.btn-outline-warning { border-color: darken($warning, 20%); color: darken($warning, 20%); &:hover { background-color: darken($warning, 30%); color: $white; } &:disabled { background-color: transparent; &:hover { color: darken($warning, 20%); } } :focus { outline-color: darken($warning, 22%); } &:not(:disabled):hover { background-color: darken($warning, 22%); } } &.btn-secondary { &:focus { outline-color: darken($secondary, 20%); } } &.btn-danger:focus, &.btn-outline-danger:focus { outline-color: darken($danger, 20%); } &.btn-primary:focus, &.btn-outline-primary:focus { outline-color: darken($primary, 5%); } } dynamic-ng-bootstrap-checkbox .custom-control-input:focus ~ .custom-control-label::before { outline: 2px solid $gray-700 !important; box-shadow: none !important; outline-offset: 2px !important; } dynamic-ng-bootstrap-checkbox .custom-control-label::before { border-color: $gray-700; } .text-warning { color: darken($warning, 10%) !important; } .text-success { color: darken($success, 11%) !important; } ngb-accordion { a.close { opacity: 0.75; } a.close:not(:disabled):not(.disabled):hover { opacity: 0.9; } } .form-control, .page-link { &:disabled::placeholder { color: lighten($gray-700, 10%); } &:focus { box-shadow: none; outline: 2px solid lighten($gray-700, 10%); outline-offset: 2px !important; } } .alert-success { color: darken($success, 22%); } .alert-danger { color: darken($danger, 22%); } // An element that is disabled should not have focus styles to avoid confusion // It however is still focusable for screen readers and keyboard navigation .disabled { pointer-events: none; } .disabled:focus { outline: none; box-shadow: none; } // Margin utility classes based on DSpace content spacing .mt-cs { margin-top: var(--ds-content-spacing); } .mb-cs { margin-bottom: var(--ds-content-spacing); } .my-cs { margin-top: var(--ds-content-spacing); margin-bottom: var(--ds-content-spacing); } .mt-ncs { margin-top: calc(var(--ds-content-spacing) * -1); } .mb-ncs { margin-bottom: calc(var(--ds-content-spacing) * -1); } .my-ncs { margin-top: calc(var(--ds-content-spacing) * -1); margin-bottom: calc(var(--ds-content-spacing) * -1); } .link-contrast { // Rules for accessibility to meet minimum contrast and have an identifiable link between other texts color: darken($link-color, 5%); // We use underline to discern link from text as we can't make color lighter on a white bg text-decoration: underline; }