/* * Keep in sync with https://github.com/cockpit-project/cockpit/tree/master/src/base1/patternfly-overrides.scss */ // Global Cockpit overrides for PatternFly variables // Fonts $font-family-base: "RedHatText", "Open Sans", Helvetica, Arial, sans-serif; $font-family-mono: SFMono-Regular, menlo, monaco, consolas, "Liberation Mono", Courier New, monospace; // Resize headings h1, h2, h3, h4, h5, h6 { line-height: var(--pf-global--LineHeight--sm); font-family: var(--pf-global--FontFamily--redhatfont--heading--sans-serif); .breadcrumb + & { // Vertically align contents of headings directly following breadcrumbs display: flex; align-items: baseline; } } h1 { font-size: var(--pf-global--FontSize--4xl); } h2 { font-size: var(--pf-global--FontSize--3xl); } h3 { font-size: var(--pf-global--FontSize--2xl); } h4 { font-size: var(--pf-global--FontSize--xl); } h4 { font-size: var(--pf-global--FontSize--lg); } // Restyle inputs & dropdowns .input-group-addon, .bootstrap-select.btn-group .btn, .content-header-extra .dropdown-toggle, .dropdown-toggle, .form-control:not(.ct-select):not(.rbt-input):not(select) { background-image: none !important; } .input-group-addon, .bootstrap-select.btn-group .btn, .content-header-extra .dropdown-toggle, .dropdown-toggle, .form-control:not(.ct-select) { border-radius: 3px; border-color: var(--pf-global--BorderColor--300); border-bottom-color: var(--pf-global--Color--200); color: var(--pf-global--Color--100); box-shadow: none !important; min-height: 2.25rem; &:not(.bootstrap-select):not(.dropdown-form-control) { padding: 1px 0.5rem; } .fa-caret-down { align-self: center; &::before { content: "\f0d7"; } } &::placeholder { color: var(--pf-global--Color--dark-200); font-style: normal; } &:active, &:focus, &:hover { border-color: var(--pf-global--BorderColor--300); border-bottom-color: var(--pf-global--primary-color--100); color: var(--pf-global--Color--100); } &:focus { // Take 1px from the padding and add it to the border padding-bottom: 0; border-bottom-width: 2px; } &[aria-disabled=true], &:disabled { background-color: var(--pf-global--disabled-color--300); border-color: var(--pf-global--disabled-color--300); color: var(--pf-global--disabled-color--100); cursor: not-allowed; } .has-error &, &.has-error { position: relative; &, &:hover, &:focus { border-color: var(--pf-global--BorderColor--300); border-bottom: 2px solid var(--pf-global--danger-color--100); } } } // Truncate text in Cockpit/PF3 dropdowns (when necessary) .dropdown-toggle > span { overflow: hidden; text-overflow: ellipsis; } // Fix split dropdowns .input-group:not(.combobox-with-reset){ display: inline-flex; .combobox-container & { width: 100%; } > .form-control { display: flex; flex: auto; } > .input-group-addon, > .dropdown, > .dropdown-toggle { display: flex; width: auto; align-items: stretch; } > .input-group-btn { width: auto; > .btn { min-width: 2.5rem; } } } // Select dropdowns in Composer & typeahead find .rbt-input.form-control, select.form-control { --dropdown-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='46' height='8'%3E%3Cpath fill='%23151515' d='M18.804 1h8.392c.58 0 .87.701.46 1.112L23.46 6.31a.653.653 0 0 1-.922 0l-4.194-4.197A.651.651 0 0 1 18.805 1z'/%3E%3C/svg%3E"); --dropdown-background: var(--pf-global--BackgroundColor--100); -webkit-appearance: none; -moz-appearance: none; appearance: none; background: var(--dropdown-image) no-repeat 100% 50%, var(--dropdown-background) !important; padding-right: 2.5em !important; } // Adjust typeahead find style .rbt { &-input { // Support typehead hints &-hint { // Stretch the hint and its input child 100% tall &, > input { height: 100%; } // Shave off the border and padding, as these misalign the elemnt // (as this widget uses inline styles (ugh!), we _have to_ use !important) > input { border-width: 0 1px !important; padding-top: 0 !important; padding-bottom: 0 !important; } } } // Adjust spinner position &-aux { right: 2rem !important; } } // Adjust dropdown menus .dropdown-menu { > li { padding: 0; > a { padding: 0.5rem 1rem; } &:not(.disabled) > a { color: var(--pf-global--Color--100); &:active, &:focus, &:hover { background-color: var(--pf-global--BackgroundColor--light-300); border-color: var(--pf-global--BackgroundColor--light-300); } } &.active > a, > a:active { // PF3 reverts the active color with an !important // so we also use an !important here to override it color: var(--pf-global--Color--100) !important; } &.active > a { // PF3 also modifies these colors with an !important &, &:active, &:focus, &:hover { color: var(--pf-global--Color--100) !important; background-color: var(--pf-global--BackgroundColor--light-300) !important; border-color: var(--pf-global--BackgroundColor--light-300) !important; } } &.selected > a { color: var(--pf-global--Color--100); background-color: var(--pf-global--BackgroundColor--light-300); border-color: var(--pf-global--BackgroundColor--light-300); } } // Stretch dropdown menus to at least the width of the dropdown .dropdown > & { min-width: 100%; } } // Restyle buttons .pagination a[role=button], .btn { padding: 0.375rem 1rem; transition: background 0.3s, border 0.3s, color 0.3s; &:not(.dropdown-toggle):not(.dropdown):not(.bootstrap-select):not(.ct-select) { background-image: none !important; border-radius: 3px; &:not(:active):not(:focus):not(:hover) { box-shadow: none !important; } &:not(:disabled):not([aria-disabled=true]):not(.btn-link) { &:not(.btn-primary):not(.btn-success):not(.btn-info):not(.btn-warning):not(.btn-danger) { &:active, &:focus, &:hover { border-color: var(--pf-global--primary-color--100); box-shadow: inset 0 0 0 1px var(--pf-global--primary-color--100); } } } &.btn-primary { &:active, &:focus, &:hover { background-color: var(--pf-global--primary-color--200); border-color: var(--pf-global--primary-color--200); } } &.btn-success { &:active, &:focus, &:hover { background-color: var(--pf-global--success-color--200); border-color: var(--pf-global--success-color--200); } } &.btn-info { &:active, &:focus, &:hover { background-color: var(--pf-global--info-color--200); border-color: var(--pf-global--info-color--200); } } &.btn-warning { &:active, &:focus, &:hover { background-color: var(--pf-global--warning-color--200); border-color: var(--pf-global--warning-color--200); } } &.btn-danger { &:active, &:focus, &:hover { background-color: var(--pf-global--danger-color--200); border-color: var(--pf-global--danger-color--200); } } &[aria-disabled=true], &.disabled, &:disabled { &:not(.btn-link):not(a) { &, &:hover { background-color: var(--pf-global--disabled-color--200) !important; border-color: var(--pf-global--disabled-color--200) !important; color: var(--pf-global--disabled-color--100) !important; cursor: default; // Backgrounds are a bit too visually weighty in button groups .btn-group > & { background-color: var(--pf-global--disabled-color--300) !important; } } } } } @at-root .btn { &-primary, &-success, &-info, &-warning, &-danger { &:active, &:focus, &:hover { box-shadow: none !important; } } } // Shrink embedded buttons .ct-form &, .content-filter &, .listing-ct-head &, .listing-ct-body &, .listing-ct-item &, .action &, .panel-heading &, .panel tr & { padding: 0.125rem 0.5rem; } // Restyle button dropdowns to have button borders .btn-group > & + .dropdown-toggle { border-color: var(--pf-global--primary-color--100); &:hover, &:focus { border-width: 1px; } } // Center-align icon buttons &.pficon, &.fa { display: inline-flex; align-items: center; justify-content: center; } // Fix up panel action buttons .panel-actions & { display: inline-flex; align-items: center; min-height: 2rem; } } // Unround touching corners in button and input groups .btn-group, .input-group { > :not(:first-of-type) { border-top-left-radius: 0 !important; border-bottom-left-radius: 0 !important; } > :not(:last-of-type) { border-top-right-radius: 0 !important; border-bottom-right-radius: 0 !important; } } // Adjust height of inline edit buttons .form-control-pf-editable > button { max-height: 100%; } // Pagination buttons .pagination { ul, li { margin: 0; padding: 0; } li { display: flex; } a[role=button] { display: flex; height: 2.25rem; align-items: center; &[aria-disabled=true], &:disabled { // Backgrounds are a bit too visually weighty in pagination background-color: var(--pf-global--disabled-color--300) !important; } } } // Kebab menu buttons should get special treatment .dropdown-kebab-pf > button { border: none; padding: 0.5rem 1rem !important; } // Restyle modals .modal { &-header { background: var(--pf-global--BackgroundColor--100); padding: 0 0 1.5rem; } &-title { font-size: 1.5rem; font-weight: var(--pf-global--FontWeight--normal); line-height: 1.3; } &-content { padding: 2rem; } &-footer { > .pf-c-button:not(:last-child) { --pf-c-modal-box__footer--c-button--MarginRight: var(--pf-global--spacer--md); margin-right: calc(var(--pf-c-modal-box__footer--c-button--MarginRight) / 2); } --pf-c-modal-box__footer--MarginTop: var(--pf-global--spacer--xl); margin-top: var(--pf-c-modal-box__footer--MarginTop); text-align: unset; padding: 0; > .pf-c-button:first-of-type { --pf-c-modal-box__footer__c-button--first-of-type--MarginLeft: 0; margin-left: var(--pf-c-modal-box__footer__c-button--first-of-type--MarginLeft); } } &-body { padding: 0; } } // Adjust list group font sizes .list-group { font-size: var(--pf-global--FontSize--sm); &-item { .dialog-list-ct > &.active { background-color: var(--pf-global--active-color--100); color: var(--pf-global--Color--light-100); } > p { font-size: var(--pf-global--FontSize--md); } } // Navigation should be standard size nav > & { font-size: var(--pf-global--FontSize--md); } } // Adjust list views .list-view-pf { .list-group-item-heading { font-size: var(--pf-global--FontSize--md); font-weight: 600; } } // Standardize small font size to PF4 small font small { font-size: var(--pf-global--FontSize--sm); } @media screen and (min-width: 768px) { // Add PF4 padding to desktop mode .content, .page-ct, .container, .container-fluid { padding: 2rem 3rem; .breadcrumb, .breadcrumb + & { padding-top: 0; } .cards-pf + & { padding-top: 1rem; } } // Rely on page-ct padding; don't duplicate .page-ct .container, .page-ct .container-fluid { padding: 0; } // Remove excess padding from dialogs .modal-dialog .content { padding: 0; } } // Change label size & weight to match PF4 label { font-weight: normal; } .help-block, .label, .list-group-item-heading, .control-label, .info-table-ct > tbody > tr > td:first-child, th > label { font-weight: normal; font-size: var(--font-size-s); } // Adjust labels in tables // (used in accounts & containers) .info-table-ct > tbody > tr > td:first-child, td > label, th > label { vertical-align: baseline; // Fake spacing (not quite right, but close) padding: 0.125rem 0.25rem 0 0.5rem; } // Adjust nav tab sizes .nav-tabs { font-size: var(--font-size-s); > li { > a { padding: 0.75rem 1rem; position: relative; } &.active > a { &::before { position: absolute; height: 2px; top: -1px; left: -1px; right: -1px; content: ""; background: var(--pf-global--active-color--100); pointer-events: none; } // listing-ct uses tertitiary nav, which has a bottom line .listing-ct-panel &::before { top: auto; bottom: 0; } } } } // Add a PF4 shadow to panels .panel { box-shadow: var(--pf-global--BoxShadow--sm); } // Change breadcrumb font size .breadcrumb { padding: 1rem 0; font-size: var(--pf-global--FontSize--sm); } // Adjust modal dialog sizes .modal { &-dialog { width: auto; max-width: 45rem; } &-sm { max-width: 35rem; } &-lg { max-width: 60rem; } } // Bump down graph text size .server-graph { font-size: var(--pf-global--FontSize--xs); } // Restyle nav tabs (in content header only, for services) // in Cockpit, nav-tabs are also used in lists // and Cockpit's lists use underlines, not overlines .content-header-extra > .nav-tabs > li { position: relative; &.active::after { position: absolute; background: var(--pf-global--primary-color--100); content: ""; height: 2px; left: 0; top: 0; width: 100%; z-index: 1; } } // Flatten the progress bar trough .progress { box-shadow: none; } // Adjust spacing of expand/collapse divider .expand-collapse-pf .expand-collapse-pf-separator.bordered { margin-top: 1rem; } // Restyle slider to look more modern (PF4-like) .slider { &-selection { background: var(--pf-global--active-color--100); } &-track { border: none; background: var(--pf-global--BorderColor--100); } &.slider-horizontal .slider-track { height: 0.25rem; margin-top: -0.125rem; } &-handle { background: var(--pf-global--primary-color--100); border: none; width: 0.75rem; height: 0.75rem; margin: 0.125rem 0 0 0.125rem; position: relative; &.slider-horizontal { /* Move right by half the width */ margin-left: -0.375rem; } /* Replace native outline with a stylized one */ &:focus { --focus-offset: -3px; outline: none; &::after { content: ''; position: absolute; top: var(--focus-offset); left: var(--focus-offset); right: var(--focus-offset); bottom: var(--focus-offset); border: 2px solid var(--pf-global--primary-color--100); border-radius: 50%; opacity: 0.5; } } &:focus, &:active { background: var(--pf-global--primary-color--200); } } &-pf { margin: 0 1rem 0 0; min-height: 2.25rem; position: relative; > * { margin: 0; } /* Slider labels */ > b { color: var(--pf-global--Color--300); font: inherit; font-size: var(--pf-global--FontSize--xs); position: absolute; top: 1.5rem; &:first-child { left: 0; } &:last-child { right: 0; } } /* Readjust the tooltip for our needs */ .tooltip { margin: -2.75rem 0 0 -2px !important; /* Center horizontally based on its own width */ transform: translateX(-50%); /* Don't trap mouse hovering */ pointer-events: none; } } } /* Round off badges, similar to PF4 */ .badge { border-radius: 30em; } /* Fix PF3 carets */ .caret { /* PF3 oddly uses borders and a dropdown triangle */ border: none; &::before { /* Use a solid triangle, like PF4, not the lined "v" icon */ content: "\f0d7"; } } // Fix small icon size (for Composer) .pf-icon-small::before { // PF3 uses (1.7em * 12px = 20.4px); PF4 1.25rem = 20px font-size: 1.25rem; } // Fix small list icon size (for Composer) .list-pf-icon-small::before { // PF3 uses (1.4em * 12px = 16.8px); PF4 1rem = 16px font-size: 1rem; } :root { font-size: $font-size-base; }