// ------- // Please see `app/assets/stylesheets/page_bundles/ide_themes/README.md` for a guide on contributing new themes // ------- .ide { $bs-input-focus-border: #80bdff; $bs-input-focus-box-shadow: rgba(0, 123, 255, 0.25); a:not(.btn), .gl-button.btn-link, .gl-button.btn-link:hover, .gl-button.btn-link:focus, .gl-button.btn-link:active { color: var(--ide-link-color, $blue-600); } h1, h2, h3, h4, h5, h6, code, .md table:not(.code), .md, .md p, .context-header > a, input, textarea, .dropdown-menu li button, .dropdown-menu-selectable li a.is-active, .dropdown-menu-inner-title, .bs-callout, .ide-pipeline .top-bar, .ide-pipeline .top-bar .controllers .controllers-buttons, .controllers-buttons svg, .nav-links li a.active, .gl-tabs-nav li a.gl-tab-nav-item-active, .md-area.is-focused { color: var(--ide-text-color, $gl-text-color); } .badge.badge-pill { color: var(--ide-text-color, $gray-700); background-color: var(--ide-background, $badge-bg); } .nav-links li:not(.md-header-toolbar) a, .gl-tabs-nav li a, .dropdown-menu-inner-content, .file-row .file-row-icon svg, .file-row:hover .file-row-icon svg { color: var(--ide-text-color-secondary, $gl-text-color-secondary); } .nav-links li:not(.md-header-toolbar), .gl-tabs-nav li { &:hover a, &.active a, a:hover, a.active { &, .badge.badge-pill { color: var(--ide-text-color, $black); border-color: var(--ide-input-border, $gray-darkest); } } } .drag-handle:hover { background-color: var(--ide-dropdown-hover-background, $white-normal); } .card-header { background-color: var(--ide-background, $white); .badge.badge-pill { background-color: var(--ide-dropdown-hover-background, $badge-bg); } } .text-secondary { color: var(--ide-text-color-secondary, $gl-text-color-secondary) !important; } input[type='search']::placeholder, input[type='text']::placeholder, textarea::placeholder { color: var(--ide-input-border, $gl-text-color-tertiary); } .dropdown-input .dropdown-input-clear { color: var(--ide-input-border, $gray-500); } .ide-nav-form .input-icon { color: var(--ide-input-border, $gray-500); } code { background-color: var(--ide-background, $gray-100); } .bs-callout, .ide-pipeline .top-bar, .ide-terminal .top-bar { background-color: var(--ide-background, $gray-light); } .bs-callout { border-color: var(--ide-dropdown-background, $border-color); code { background-color: var(--ide-dropdown-background, $gray-100); } } .common-note-form .md-area { border-color: var(--ide-input-border, $border-color); } .md table:not(.code) tr th { background-color: var(--ide-highlight-background, $gray-100); } &, .card, .common-note-form .md-area { background-color: var(--ide-highlight-background, $white); } .card, .card-header, .ide-terminal .top-bar, .ide-pipeline .top-bar { border-color: var(--ide-border-color, $border-color); } hr { border-color: var(--ide-border-color, darken($gray-normal, 8%)); } .md h1, .md h2, .md blockquote, .md table:not(.code) tbody td, .md table:not(.code) tr th, .nav-links, .gl-tabs-nav, .common-note-form .md-area.is-focused .nav-links { border-color: var(--ide-border-color-alt, $white-dark); } pre { border-color: var(--ide-border-color-alt, $gray-100); code { background-color: var(--ide-empty-state-background, inherit); } } // highlight accents (based on navigation theme) should only apply // in the default white theme and "none" theme. &:not(.theme-white):not(.theme-none) { .ide-sidebar-link.active { color: var(--ide-highlight-accent, $gl-text-color); box-shadow: inset 3px 0 var(--ide-highlight-accent, $gl-text-color); &.is-right { box-shadow: inset -3px 0 var(--ide-highlight-accent, $gl-text-color); } } .nav-links li.active a, .nav-links li a.active { border-color: var(--ide-highlight-accent, $gl-text-color); } .dropdown-menu .nav-links li a.active { border-color: var(--ide-highlight-accent, $gl-text-color); } .gl-tabs-nav li a.gl-tab-nav-item-active { box-shadow: inset 0 -2px 0 0 var(--ide-highlight-accent, $gl-text-color); } // for other themes, suppress different avatar default colors for simplicity .avatar-container { &, .avatar { color: var(--ide-text-color, $gl-text-color); background-color: var(--ide-highlight-background, $white); border-color: var(--ide-highlight-background, rgba($black, $gl-avatar-border-opacity)); } } } input[type='text'], input[type='search'], .filtered-search-box { border-color: var(--ide-input-border, $border-color); background: var(--ide-input-background, $white) !important; } input[type='text']:not([disabled]):not([readonly]):focus, .md-area.is-focused { border-color: var(--ide-input-border, $bs-input-focus-border); box-shadow: 0 0 0 3px var(--ide-dropdown-background, $bs-input-focus-box-shadow); } input[type='text'], input[type='search'], .filtered-search-box, textarea { color: var(--ide-input-color, $gl-text-color) !important; } .filtered-search-box input[type='search'] { border-color: transparent !important; box-shadow: none !important; } .filtered-search-token .value-container, .filtered-search-term .value-container { background-color: var(--ide-dropdown-hover-background, $white-normal); color: var(--ide-text-color, $gl-text-color); &:hover { background-color: var(--ide-input-border, $gray-100); } } @function calc-btn-hover-padding($original-padding, $original-border: 1px) { @return calc(#{$original-padding + $original-border} - var(--ide-btn-hover-border-width, #{$original-border})); } .btn:not(.gl-button):not(.btn-link):not([disabled]):hover { border-width: var(--ide-btn-hover-border-width, 1px); padding: calc-btn-hover-padding(6px) calc-btn-hover-padding(10px); } .btn:not(.gl-button):not([disabled]).btn-sm:hover { padding: calc-btn-hover-padding(4px) calc-btn-hover-padding(10px); } .btn:not(.gl-button):not([disabled]).btn-block:hover { padding: calc-btn-hover-padding(6px) 0; } .btn-default:not(.gl-button), .dropdown, .dropdown-menu-toggle { color: var(--ide-input-color, $gl-text-color) !important; border-color: var(--ide-btn-default-border, $border-color); } .dropdown-menu-toggle { border-color: var(--ide-btn-default-border, $gray-darkest); background-color: var(--ide-input-background, transparent); &:hover, &:focus { background-color: var(--ide-dropdown-btn-hover-background, $gray-darker) !important; border-color: var(--ide-dropdown-btn-hover-border, $gray-darkest) !important; } } // In IDE, the only inverted buttons are `.btn-remove` .btn-inverted.btn-remove:not(.gl-button) { color: var(--ide-input-color, $red-500) !important; background-color: var(--ide-input-background, $white) !important; border-color: var(--ide-btn-default-border, $red-500); &:hover, &:focus { color: var(--ide-input-color, $red-700) !important; background-color: var(--ide-input-background, $red-100) !important; border-color: var(--ide-btn-default-hover-border, $red-500) !important; } &:active { color: var(--ide-input-color, $red-800) !important; background-color: var(--ide-input-background, $red-200) !important; border-color: var(--ide-btn-default-hover-border, $red-600) !important; } } // todo: remove this block after all default buttons have been migrated to gl-button .btn-default:not(.gl-button) { background-color: var(--ide-btn-default-background, $white) !important; border-color: var(--ide-btn-default-border, $border-color); &:hover, &:focus { border-color: var(--ide-btn-default-hover-border, $border-white-normal) !important; background-color: var(--ide-btn-default-background, $white-normal) !important; } &:active, .active { border-color: var(--ide-btn-default-hover-border, $border-white-normal) !important; background-color: var(--ide-btn-default-background, $white-dark) !important; } } .dropdown-menu { color: var(--ide-text-color, $gl-text-color); border-color: var(--ide-background, $border-color); background-color: var(--ide-dropdown-background, $white); .nav-links { background-color: var(--ide-dropdown-hover-background, $white); border-color: var(--ide-dropdown-hover-background, $border-color); } .gl-tabs-nav { background-color: var(--ide-dropdown-hover-background, $white); box-shadow: inset 0 -2px 0 0 var(--ide-dropdown-hover-background, $border-color); } .divider { background-color: var(--ide-dropdown-hover-background, $gray-100); border-color: var(--ide-dropdown-hover-background, $gray-100); } li > a:not(.disable-hover):hover, li > a:not(.disable-hover):focus, li button:not(.disable-hover):hover, li button:not(.disable-hover):focus, li button.is-focused { background-color: var(--ide-dropdown-hover-background, $gray-darker); color: var(--ide-text-color, $gl-text-color); } } .dropdown-title, .dropdown-input { border-color: var(--ide-dropdown-hover-background, $gray-100) !important; } // todo: remove this block after all primary/info buttons have been migrated to gl-button .btn-primary:not(.gl-button), .btn-info:not(.gl-button) { background-color: var(--ide-btn-primary-background, $blue-500); border-color: var(--ide-btn-primary-border, $blue-600) !important; &:hover, &:focus { background-color: var(--ide-btn-primary-background, $blue-600); border-color: var(--ide-btn-primary-hover-border, $blue-700) !important; } &:active, &.active { background-color: var(--ide-btn-primary-background, $blue-700); border-color: var(--ide-btn-primary-hover-border, $blue-800) !important; } } // todo: remove this block after all success buttons have been migrated to gl-button .btn-success:not(.gl-button) { background-color: var(--ide-btn-success-background, $green-500); border-color: var(--ide-btn-success-border, $green-600) !important; &:hover, &:focus { background-color: var(--ide-btn-success-background, $green-600); border-color: var(--ide-btn-success-hover-border, $green-700) !important; } &:active, &.active { background-color: var(--ide-btn-success-background, $green-700); border-color: var(--ide-btn-success-hover-border, $green-800) !important; } } // todo: remove this block after all disabled buttons have been migrated to gl-button .btn[disabled]:not(.gl-button) { background-color: var(--ide-btn-default-background, $gray-light) !important; border: 1px solid var(--ide-btn-disabled-border, $gray-100) !important; color: var(--ide-btn-disabled-color, $gl-text-color-disabled) !important; } @function ide-btn-var($btn-type, $var-type, $value) { @return var(--ide-btn-#{$btn-type}-#{$var-type}, $value); } @mixin ide-gl-button($btn-type, $bg-normal, $bg-hover, $bg-active, $border-normal, $border-hover, $border-focus, $border-active, $border-width-hover: 2px, $box-shadow-hover: $t-gray-a-08, $box-shadow-focus: 0 0 0 4px rgba($blue-500, 0.25)) { background-color: ide-btn-var($btn-type, background, $bg-normal); box-shadow: inset 0 0 0 1px ide-btn-var($btn-type, border, $border-normal); &:hover, &:focus { background-color: ide-btn-var($btn-type, background, $bg-hover); } &:hover { box-shadow: inset 0 0 0 ide-btn-var($btn-type, hover-border-width, $border-width-hover) ide-btn-var($btn-type, hover-border, $border-hover), 0 2px 2px 0 $box-shadow-hover; } &:focus { box-shadow: inset 0 0 0 ide-btn-var($btn-type, hover-border-width, $border-width-hover) ide-btn-var($btn-type, hover-border, $border-focus), ide-btn-var($btn-type, focus-box-shadow, $box-shadow-focus); } &:active:focus { background-color: ide-btn-var($btn-type, background, $bg-active); box-shadow: inset 0 0 0 ide-btn-var($btn-type, hover-border-width, $border-width-hover) ide-btn-var($btn-type, hover-border, $border-active), ide-btn-var($btn-type, focus-box-shadow, $box-shadow-focus); } } .btn-default.gl-button.gl-button { color: var(--ide-input-color, $gl-text-color); @include ide-gl-button(default, $white, $gray-50, $gray-100, $gray-200, $gray-300, $gray-300, $gray-400); } .btn-success.gl-button.gl-button { @include ide-gl-button(success, $green-500, $green-600, $green-800, $green-600, $green-800, $green-800, $green-900); } .btn-info.gl-button.gl-button, .btn-primary.gl-button.gl-button { @include ide-gl-button(primary, $blue-500, $blue-600, $blue-800, $blue-600, $blue-800, $blue-800, $blue-900); } .btn-danger.btn-danger-secondary.gl-button.gl-button { color: var(--ide-input-color, $red-500); @include ide-gl-button(danger-secondary, $white, $red-50, $red-100, $red-500, $red-600, $red-600, $red-700); } .btn[disabled].gl-button.gl-button { color: var(--ide-btn-disabled-color, $gl-text-color-disabled); @include ide-gl-button(disabled, $gray-10, $gray-10, $gray-10, $gray-100, $gray-100, $gray-100, $gray-100, 1px, transparent, transparent); } .md table:not(.code) tbody { background-color: var(--ide-empty-state-background, $white); } .animation-container { [class^='skeleton-line-'] { background-color: var(--ide-animation-gradient-1, $gray-100); &::after { background-image: linear-gradient(to right, var(--ide-animation-gradient-1, $gray-100) 0%, var(--ide-animation-gradient-2, $gray-10) 20%, var(--ide-animation-gradient-1, $gray-100) 40%, var(--ide-animation-gradient-1, $gray-100) 100%); } } } .idiff.addition { background-color: var(--ide-diff-insert, $line-added-dark); } .idiff.deletion { background-color: var(--ide-diff-remove, $line-removed-dark); } ~ .popover { box-shadow: none; } } .navbar:not(.theme-white):not(.theme-none) { border-bottom-color: transparent; }