김예미

update menu1 - design

Showing 140 changed files with 4833 additions and 0 deletions
This diff could not be displayed because it is too large.
This diff could not be displayed because it is too large.
This diff is collapsed. Click to expand it.
This diff could not be displayed because it is too large.
This diff could not be displayed because it is too large.
This diff could not be displayed because it is too large.
This diff is collapsed. Click to expand it.
This diff could not be displayed because it is too large.
1 +//
2 +// Base styles
3 +//
4 +
5 +.alert {
6 + position: relative;
7 + padding: $alert-padding-y $alert-padding-x;
8 + margin-bottom: $alert-margin-bottom;
9 + border: $alert-border-width solid transparent;
10 + @include border-radius($alert-border-radius);
11 +}
12 +
13 +// Headings for larger alerts
14 +.alert-heading {
15 + // Specified to prevent conflicts of changing $headings-color
16 + color: inherit;
17 +}
18 +
19 +// Provide class for links that match alerts
20 +.alert-link {
21 + font-weight: $alert-link-font-weight;
22 +}
23 +
24 +
25 +// Dismissible alerts
26 +//
27 +// Expand the right padding and account for the close button's positioning.
28 +
29 +.alert-dismissible {
30 + padding-right: $close-font-size + $alert-padding-x * 2;
31 +
32 + // Adjust close link position
33 + .close {
34 + position: absolute;
35 + top: 0;
36 + right: 0;
37 + padding: $alert-padding-y $alert-padding-x;
38 + color: inherit;
39 + }
40 +}
41 +
42 +
43 +// Alternate styles
44 +//
45 +// Generate contextual modifier classes for colorizing the alert.
46 +
47 +@each $color, $value in $theme-colors {
48 + .alert-#{$color} {
49 + @include alert-variant(theme-color-level($color, $alert-bg-level), theme-color-level($color, $alert-border-level), theme-color-level($color, $alert-color-level));
50 + }
51 +}
1 +// Base class
2 +//
3 +// Requires one of the contextual, color modifier classes for `color` and
4 +// `background-color`.
5 +
6 +.badge {
7 + display: inline-block;
8 + padding: $badge-padding-y $badge-padding-x;
9 + @include font-size($badge-font-size);
10 + font-weight: $badge-font-weight;
11 + line-height: 1;
12 + text-align: center;
13 + white-space: nowrap;
14 + vertical-align: baseline;
15 + @include border-radius($badge-border-radius);
16 + @include transition($badge-transition);
17 +
18 + @at-root a#{&} {
19 + @include hover-focus {
20 + text-decoration: none;
21 + }
22 + }
23 +
24 + // Empty badges collapse automatically
25 + &:empty {
26 + display: none;
27 + }
28 +}
29 +
30 +// Quick fix for badges in buttons
31 +.btn .badge {
32 + position: relative;
33 + top: -1px;
34 +}
35 +
36 +// Pill badges
37 +//
38 +// Make them extra rounded with a modifier to replace v3's badges.
39 +
40 +.badge-pill {
41 + padding-right: $badge-pill-padding-x;
42 + padding-left: $badge-pill-padding-x;
43 + @include border-radius($badge-pill-border-radius);
44 +}
45 +
46 +// Colors
47 +//
48 +// Contextual variations (linked badges get darker on :hover).
49 +
50 +@each $color, $value in $theme-colors {
51 + .badge-#{$color} {
52 + @include badge-variant($value);
53 + }
54 +}
1 +.breadcrumb {
2 + display: flex;
3 + flex-wrap: wrap;
4 + padding: $breadcrumb-padding-y $breadcrumb-padding-x;
5 + margin-bottom: $breadcrumb-margin-bottom;
6 + list-style: none;
7 + background-color: $breadcrumb-bg;
8 + @include border-radius($breadcrumb-border-radius);
9 +}
10 +
11 +.breadcrumb-item {
12 + // The separator between breadcrumbs (by default, a forward-slash: "/")
13 + + .breadcrumb-item {
14 + padding-left: $breadcrumb-item-padding;
15 +
16 + &::before {
17 + display: inline-block; // Suppress underlining of the separator in modern browsers
18 + padding-right: $breadcrumb-item-padding;
19 + color: $breadcrumb-divider-color;
20 + content: $breadcrumb-divider;
21 + }
22 + }
23 +
24 + // IE9-11 hack to properly handle hyperlink underlines for breadcrumbs built
25 + // without `<ul>`s. The `::before` pseudo-element generates an element
26 + // *within* the .breadcrumb-item and thereby inherits the `text-decoration`.
27 + //
28 + // To trick IE into suppressing the underline, we give the pseudo-element an
29 + // underline and then immediately remove it.
30 + + .breadcrumb-item:hover::before {
31 + text-decoration: underline;
32 + }
33 + // stylelint-disable-next-line no-duplicate-selectors
34 + + .breadcrumb-item:hover::before {
35 + text-decoration: none;
36 + }
37 +
38 + &.active {
39 + color: $breadcrumb-active-color;
40 + }
41 +}
1 +// stylelint-disable selector-no-qualifying-type
2 +
3 +// Make the div behave like a button
4 +.btn-group,
5 +.btn-group-vertical {
6 + position: relative;
7 + display: inline-flex;
8 + vertical-align: middle; // match .btn alignment given font-size hack above
9 +
10 + > .btn {
11 + position: relative;
12 + flex: 1 1 auto;
13 +
14 + // Bring the hover, focused, and "active" buttons to the front to overlay
15 + // the borders properly
16 + @include hover {
17 + z-index: 1;
18 + }
19 + &:focus,
20 + &:active,
21 + &.active {
22 + z-index: 1;
23 + }
24 + }
25 +}
26 +
27 +// Optional: Group multiple button groups together for a toolbar
28 +.btn-toolbar {
29 + display: flex;
30 + flex-wrap: wrap;
31 + justify-content: flex-start;
32 +
33 + .input-group {
34 + width: auto;
35 + }
36 +}
37 +
38 +.btn-group {
39 + // Prevent double borders when buttons are next to each other
40 + > .btn:not(:first-child),
41 + > .btn-group:not(:first-child) {
42 + margin-left: -$btn-border-width;
43 + }
44 +
45 + // Reset rounded corners
46 + > .btn:not(:last-child):not(.dropdown-toggle),
47 + > .btn-group:not(:last-child) > .btn {
48 + @include border-right-radius(0);
49 + }
50 +
51 + > .btn:not(:first-child),
52 + > .btn-group:not(:first-child) > .btn {
53 + @include border-left-radius(0);
54 + }
55 +}
56 +
57 +// Sizing
58 +//
59 +// Remix the default button sizing classes into new ones for easier manipulation.
60 +
61 +.btn-group-sm > .btn { @extend .btn-sm; }
62 +.btn-group-lg > .btn { @extend .btn-lg; }
63 +
64 +
65 +//
66 +// Split button dropdowns
67 +//
68 +
69 +.dropdown-toggle-split {
70 + padding-right: $btn-padding-x * .75;
71 + padding-left: $btn-padding-x * .75;
72 +
73 + &::after,
74 + .dropup &::after,
75 + .dropright &::after {
76 + margin-left: 0;
77 + }
78 +
79 + .dropleft &::before {
80 + margin-right: 0;
81 + }
82 +}
83 +
84 +.btn-sm + .dropdown-toggle-split {
85 + padding-right: $btn-padding-x-sm * .75;
86 + padding-left: $btn-padding-x-sm * .75;
87 +}
88 +
89 +.btn-lg + .dropdown-toggle-split {
90 + padding-right: $btn-padding-x-lg * .75;
91 + padding-left: $btn-padding-x-lg * .75;
92 +}
93 +
94 +
95 +// The clickable button for toggling the menu
96 +// Set the same inset shadow as the :active state
97 +.btn-group.show .dropdown-toggle {
98 + @include box-shadow($btn-active-box-shadow);
99 +
100 + // Show no shadow for `.btn-link` since it has no other button styles.
101 + &.btn-link {
102 + @include box-shadow(none);
103 + }
104 +}
105 +
106 +
107 +//
108 +// Vertical button groups
109 +//
110 +
111 +.btn-group-vertical {
112 + flex-direction: column;
113 + align-items: flex-start;
114 + justify-content: center;
115 +
116 + > .btn,
117 + > .btn-group {
118 + width: 100%;
119 + }
120 +
121 + > .btn:not(:first-child),
122 + > .btn-group:not(:first-child) {
123 + margin-top: -$btn-border-width;
124 + }
125 +
126 + // Reset rounded corners
127 + > .btn:not(:last-child):not(.dropdown-toggle),
128 + > .btn-group:not(:last-child) > .btn {
129 + @include border-bottom-radius(0);
130 + }
131 +
132 + > .btn:not(:first-child),
133 + > .btn-group:not(:first-child) > .btn {
134 + @include border-top-radius(0);
135 + }
136 +}
137 +
138 +
139 +// Checkbox and radio options
140 +//
141 +// In order to support the browser's form validation feedback, powered by the
142 +// `required` attribute, we have to "hide" the inputs via `clip`. We cannot use
143 +// `display: none;` or `visibility: hidden;` as that also hides the popover.
144 +// Simply visually hiding the inputs via `opacity` would leave them clickable in
145 +// certain cases which is prevented by using `clip` and `pointer-events`.
146 +// This way, we ensure a DOM element is visible to position the popover from.
147 +//
148 +// See https://github.com/twbs/bootstrap/pull/12794 and
149 +// https://github.com/twbs/bootstrap/pull/14559 for more information.
150 +
151 +.btn-group-toggle {
152 + > .btn,
153 + > .btn-group > .btn {
154 + margin-bottom: 0; // Override default `<label>` value
155 +
156 + input[type="radio"],
157 + input[type="checkbox"] {
158 + position: absolute;
159 + clip: rect(0, 0, 0, 0);
160 + pointer-events: none;
161 + }
162 + }
163 +}
1 +// stylelint-disable selector-no-qualifying-type
2 +
3 +//
4 +// Base styles
5 +//
6 +
7 +.btn {
8 + display: inline-block;
9 + font-family: $btn-font-family;
10 + font-weight: $btn-font-weight;
11 + color: $body-color;
12 + text-align: center;
13 + vertical-align: middle;
14 + user-select: none;
15 + background-color: transparent;
16 + border: $btn-border-width solid transparent;
17 + @include button-size($btn-padding-y, $btn-padding-x, $btn-font-size, $btn-line-height, $btn-border-radius);
18 + @include transition($btn-transition);
19 +
20 + @include hover {
21 + color: $body-color;
22 + text-decoration: none;
23 + }
24 +
25 + &:focus,
26 + &.focus {
27 + outline: 0;
28 + box-shadow: $btn-focus-box-shadow;
29 + }
30 +
31 + // Disabled comes first so active can properly restyle
32 + &.disabled,
33 + &:disabled {
34 + opacity: $btn-disabled-opacity;
35 + @include box-shadow(none);
36 + }
37 +
38 + &:not(:disabled):not(.disabled):active,
39 + &:not(:disabled):not(.disabled).active {
40 + @include box-shadow($btn-active-box-shadow);
41 +
42 + &:focus {
43 + @include box-shadow($btn-focus-box-shadow, $btn-active-box-shadow);
44 + }
45 + }
46 +}
47 +
48 +// Future-proof disabling of clicks on `<a>` elements
49 +a.btn.disabled,
50 +fieldset:disabled a.btn {
51 + pointer-events: none;
52 +}
53 +
54 +
55 +//
56 +// Alternate buttons
57 +//
58 +
59 +@each $color, $value in $theme-colors {
60 + .btn-#{$color} {
61 + @include button-variant($value, $value);
62 + }
63 +}
64 +
65 +@each $color, $value in $theme-colors {
66 + .btn-outline-#{$color} {
67 + @include button-outline-variant($value);
68 + }
69 +}
70 +
71 +
72 +//
73 +// Link buttons
74 +//
75 +
76 +// Make a button look and behave like a link
77 +.btn-link {
78 + font-weight: $font-weight-normal;
79 + color: $link-color;
80 + text-decoration: $link-decoration;
81 +
82 + @include hover {
83 + color: $link-hover-color;
84 + text-decoration: $link-hover-decoration;
85 + }
86 +
87 + &:focus,
88 + &.focus {
89 + text-decoration: $link-hover-decoration;
90 + box-shadow: none;
91 + }
92 +
93 + &:disabled,
94 + &.disabled {
95 + color: $btn-link-disabled-color;
96 + pointer-events: none;
97 + }
98 +
99 + // No need for an active state here
100 +}
101 +
102 +
103 +//
104 +// Button Sizes
105 +//
106 +
107 +.btn-lg {
108 + @include button-size($btn-padding-y-lg, $btn-padding-x-lg, $btn-font-size-lg, $btn-line-height-lg, $btn-border-radius-lg);
109 +}
110 +
111 +.btn-sm {
112 + @include button-size($btn-padding-y-sm, $btn-padding-x-sm, $btn-font-size-sm, $btn-line-height-sm, $btn-border-radius-sm);
113 +}
114 +
115 +
116 +//
117 +// Block button
118 +//
119 +
120 +.btn-block {
121 + display: block;
122 + width: 100%;
123 +
124 + // Vertically space out multiple block buttons
125 + + .btn-block {
126 + margin-top: $btn-block-spacing-y;
127 + }
128 +}
129 +
130 +// Specificity overrides
131 +input[type="submit"],
132 +input[type="reset"],
133 +input[type="button"] {
134 + &.btn-block {
135 + width: 100%;
136 + }
137 +}
1 +//
2 +// Base styles
3 +//
4 +
5 +.card {
6 + position: relative;
7 + display: flex;
8 + flex-direction: column;
9 + min-width: 0; // See https://github.com/twbs/bootstrap/pull/22740#issuecomment-305868106
10 + word-wrap: break-word;
11 + background-color: $card-bg;
12 + background-clip: border-box;
13 + border: $card-border-width solid $card-border-color;
14 + @include border-radius($card-border-radius);
15 +
16 + > hr {
17 + margin-right: 0;
18 + margin-left: 0;
19 + }
20 +
21 + > .list-group:first-child {
22 + .list-group-item:first-child {
23 + @include border-top-radius($card-border-radius);
24 + }
25 + }
26 +
27 + > .list-group:last-child {
28 + .list-group-item:last-child {
29 + @include border-bottom-radius($card-border-radius);
30 + }
31 + }
32 +}
33 +
34 +.card-body {
35 + // Enable `flex-grow: 1` for decks and groups so that card blocks take up
36 + // as much space as possible, ensuring footers are aligned to the bottom.
37 + flex: 1 1 auto;
38 + padding: $card-spacer-x;
39 + color: $card-color;
40 +}
41 +
42 +.card-title {
43 + margin-bottom: $card-spacer-y;
44 +}
45 +
46 +.card-subtitle {
47 + margin-top: -$card-spacer-y / 2;
48 + margin-bottom: 0;
49 +}
50 +
51 +.card-text:last-child {
52 + margin-bottom: 0;
53 +}
54 +
55 +.card-link {
56 + @include hover {
57 + text-decoration: none;
58 + }
59 +
60 + + .card-link {
61 + margin-left: $card-spacer-x;
62 + }
63 +}
64 +
65 +//
66 +// Optional textual caps
67 +//
68 +
69 +.card-header {
70 + padding: $card-spacer-y $card-spacer-x;
71 + margin-bottom: 0; // Removes the default margin-bottom of <hN>
72 + color: $card-cap-color;
73 + background-color: $card-cap-bg;
74 + border-bottom: $card-border-width solid $card-border-color;
75 +
76 + &:first-child {
77 + @include border-radius($card-inner-border-radius $card-inner-border-radius 0 0);
78 + }
79 +
80 + + .list-group {
81 + .list-group-item:first-child {
82 + border-top: 0;
83 + }
84 + }
85 +}
86 +
87 +.card-footer {
88 + padding: $card-spacer-y $card-spacer-x;
89 + background-color: $card-cap-bg;
90 + border-top: $card-border-width solid $card-border-color;
91 +
92 + &:last-child {
93 + @include border-radius(0 0 $card-inner-border-radius $card-inner-border-radius);
94 + }
95 +}
96 +
97 +
98 +//
99 +// Header navs
100 +//
101 +
102 +.card-header-tabs {
103 + margin-right: -$card-spacer-x / 2;
104 + margin-bottom: -$card-spacer-y;
105 + margin-left: -$card-spacer-x / 2;
106 + border-bottom: 0;
107 +}
108 +
109 +.card-header-pills {
110 + margin-right: -$card-spacer-x / 2;
111 + margin-left: -$card-spacer-x / 2;
112 +}
113 +
114 +// Card image
115 +.card-img-overlay {
116 + position: absolute;
117 + top: 0;
118 + right: 0;
119 + bottom: 0;
120 + left: 0;
121 + padding: $card-img-overlay-padding;
122 +}
123 +
124 +.card-img {
125 + width: 100%; // Required because we use flexbox and this inherently applies align-self: stretch
126 + @include border-radius($card-inner-border-radius);
127 +}
128 +
129 +// Card image caps
130 +.card-img-top {
131 + width: 100%; // Required because we use flexbox and this inherently applies align-self: stretch
132 + @include border-top-radius($card-inner-border-radius);
133 +}
134 +
135 +.card-img-bottom {
136 + width: 100%; // Required because we use flexbox and this inherently applies align-self: stretch
137 + @include border-bottom-radius($card-inner-border-radius);
138 +}
139 +
140 +
141 +// Card deck
142 +
143 +.card-deck {
144 + display: flex;
145 + flex-direction: column;
146 +
147 + .card {
148 + margin-bottom: $card-deck-margin;
149 + }
150 +
151 + @include media-breakpoint-up(sm) {
152 + flex-flow: row wrap;
153 + margin-right: -$card-deck-margin;
154 + margin-left: -$card-deck-margin;
155 +
156 + .card {
157 + display: flex;
158 + // Flexbugs #4: https://github.com/philipwalton/flexbugs#flexbug-4
159 + flex: 1 0 0%;
160 + flex-direction: column;
161 + margin-right: $card-deck-margin;
162 + margin-bottom: 0; // Override the default
163 + margin-left: $card-deck-margin;
164 + }
165 + }
166 +}
167 +
168 +
169 +//
170 +// Card groups
171 +//
172 +
173 +.card-group {
174 + display: flex;
175 + flex-direction: column;
176 +
177 + // The child selector allows nested `.card` within `.card-group`
178 + // to display properly.
179 + > .card {
180 + margin-bottom: $card-group-margin;
181 + }
182 +
183 + @include media-breakpoint-up(sm) {
184 + flex-flow: row wrap;
185 + // The child selector allows nested `.card` within `.card-group`
186 + // to display properly.
187 + > .card {
188 + // Flexbugs #4: https://github.com/philipwalton/flexbugs#flexbug-4
189 + flex: 1 0 0%;
190 + margin-bottom: 0;
191 +
192 + + .card {
193 + margin-left: 0;
194 + border-left: 0;
195 + }
196 +
197 + // Handle rounded corners
198 + @if $enable-rounded {
199 + &:not(:last-child) {
200 + @include border-right-radius(0);
201 +
202 + .card-img-top,
203 + .card-header {
204 + // stylelint-disable-next-line property-blacklist
205 + border-top-right-radius: 0;
206 + }
207 + .card-img-bottom,
208 + .card-footer {
209 + // stylelint-disable-next-line property-blacklist
210 + border-bottom-right-radius: 0;
211 + }
212 + }
213 +
214 + &:not(:first-child) {
215 + @include border-left-radius(0);
216 +
217 + .card-img-top,
218 + .card-header {
219 + // stylelint-disable-next-line property-blacklist
220 + border-top-left-radius: 0;
221 + }
222 + .card-img-bottom,
223 + .card-footer {
224 + // stylelint-disable-next-line property-blacklist
225 + border-bottom-left-radius: 0;
226 + }
227 + }
228 + }
229 + }
230 + }
231 +}
232 +
233 +
234 +//
235 +// Columns
236 +//
237 +
238 +.card-columns {
239 + .card {
240 + margin-bottom: $card-columns-margin;
241 + }
242 +
243 + @include media-breakpoint-up(sm) {
244 + column-count: $card-columns-count;
245 + column-gap: $card-columns-gap;
246 + orphans: 1;
247 + widows: 1;
248 +
249 + .card {
250 + display: inline-block; // Don't let them vertically span multiple columns
251 + width: 100%; // Don't let their width change
252 + }
253 + }
254 +}
255 +
256 +
257 +//
258 +// Accordion
259 +//
260 +
261 +.accordion {
262 + > .card {
263 + overflow: hidden;
264 +
265 + &:not(:first-of-type) {
266 + .card-header:first-child {
267 + @include border-radius(0);
268 + }
269 +
270 + &:not(:last-of-type) {
271 + border-bottom: 0;
272 + @include border-radius(0);
273 + }
274 + }
275 +
276 + &:first-of-type {
277 + border-bottom: 0;
278 + @include border-bottom-radius(0);
279 + }
280 +
281 + &:last-of-type {
282 + @include border-top-radius(0);
283 + }
284 +
285 + .card-header {
286 + margin-bottom: -$card-border-width;
287 + }
288 + }
289 +}
1 +// Notes on the classes:
2 +//
3 +// 1. .carousel.pointer-event should ideally be pan-y (to allow for users to scroll vertically)
4 +// even when their scroll action started on a carousel, but for compatibility (with Firefox)
5 +// we're preventing all actions instead
6 +// 2. The .carousel-item-left and .carousel-item-right is used to indicate where
7 +// the active slide is heading.
8 +// 3. .active.carousel-item is the current slide.
9 +// 4. .active.carousel-item-left and .active.carousel-item-right is the current
10 +// slide in its in-transition state. Only one of these occurs at a time.
11 +// 5. .carousel-item-next.carousel-item-left and .carousel-item-prev.carousel-item-right
12 +// is the upcoming slide in transition.
13 +
14 +.carousel {
15 + position: relative;
16 +}
17 +
18 +.carousel.pointer-event {
19 + touch-action: pan-y;
20 +}
21 +
22 +.carousel-inner {
23 + position: relative;
24 + width: 100%;
25 + overflow: hidden;
26 + @include clearfix();
27 +}
28 +
29 +.carousel-item {
30 + position: relative;
31 + display: none;
32 + float: left;
33 + width: 100%;
34 + margin-right: -100%;
35 + backface-visibility: hidden;
36 + @include transition($carousel-transition);
37 +}
38 +
39 +.carousel-item.active,
40 +.carousel-item-next,
41 +.carousel-item-prev {
42 + display: block;
43 +}
44 +
45 +.carousel-item-next:not(.carousel-item-left),
46 +.active.carousel-item-right {
47 + transform: translateX(100%);
48 +}
49 +
50 +.carousel-item-prev:not(.carousel-item-right),
51 +.active.carousel-item-left {
52 + transform: translateX(-100%);
53 +}
54 +
55 +
56 +//
57 +// Alternate transitions
58 +//
59 +
60 +.carousel-fade {
61 + .carousel-item {
62 + opacity: 0;
63 + transition-property: opacity;
64 + transform: none;
65 + }
66 +
67 + .carousel-item.active,
68 + .carousel-item-next.carousel-item-left,
69 + .carousel-item-prev.carousel-item-right {
70 + z-index: 1;
71 + opacity: 1;
72 + }
73 +
74 + .active.carousel-item-left,
75 + .active.carousel-item-right {
76 + z-index: 0;
77 + opacity: 0;
78 + @include transition(0s $carousel-transition-duration opacity);
79 + }
80 +}
81 +
82 +
83 +//
84 +// Left/right controls for nav
85 +//
86 +
87 +.carousel-control-prev,
88 +.carousel-control-next {
89 + position: absolute;
90 + top: 0;
91 + bottom: 0;
92 + z-index: 1;
93 + // Use flex for alignment (1-3)
94 + display: flex; // 1. allow flex styles
95 + align-items: center; // 2. vertically center contents
96 + justify-content: center; // 3. horizontally center contents
97 + width: $carousel-control-width;
98 + color: $carousel-control-color;
99 + text-align: center;
100 + opacity: $carousel-control-opacity;
101 + @include transition($carousel-control-transition);
102 +
103 + // Hover/focus state
104 + @include hover-focus {
105 + color: $carousel-control-color;
106 + text-decoration: none;
107 + outline: 0;
108 + opacity: $carousel-control-hover-opacity;
109 + }
110 +}
111 +.carousel-control-prev {
112 + left: 0;
113 + @if $enable-gradients {
114 + background: linear-gradient(90deg, rgba($black, .25), rgba($black, .001));
115 + }
116 +}
117 +.carousel-control-next {
118 + right: 0;
119 + @if $enable-gradients {
120 + background: linear-gradient(270deg, rgba($black, .25), rgba($black, .001));
121 + }
122 +}
123 +
124 +// Icons for within
125 +.carousel-control-prev-icon,
126 +.carousel-control-next-icon {
127 + display: inline-block;
128 + width: $carousel-control-icon-width;
129 + height: $carousel-control-icon-width;
130 + background: no-repeat 50% / 100% 100%;
131 +}
132 +.carousel-control-prev-icon {
133 + background-image: $carousel-control-prev-icon-bg;
134 +}
135 +.carousel-control-next-icon {
136 + background-image: $carousel-control-next-icon-bg;
137 +}
138 +
139 +
140 +// Optional indicator pips
141 +//
142 +// Add an ordered list with the following class and add a list item for each
143 +// slide your carousel holds.
144 +
145 +.carousel-indicators {
146 + position: absolute;
147 + right: 0;
148 + bottom: 0;
149 + left: 0;
150 + z-index: 15;
151 + display: flex;
152 + justify-content: center;
153 + padding-left: 0; // override <ol> default
154 + // Use the .carousel-control's width as margin so we don't overlay those
155 + margin-right: $carousel-control-width;
156 + margin-left: $carousel-control-width;
157 + list-style: none;
158 +
159 + li {
160 + box-sizing: content-box;
161 + flex: 0 1 auto;
162 + width: $carousel-indicator-width;
163 + height: $carousel-indicator-height;
164 + margin-right: $carousel-indicator-spacer;
165 + margin-left: $carousel-indicator-spacer;
166 + text-indent: -999px;
167 + cursor: pointer;
168 + background-color: $carousel-indicator-active-bg;
169 + background-clip: padding-box;
170 + // Use transparent borders to increase the hit area by 10px on top and bottom.
171 + border-top: $carousel-indicator-hit-area-height solid transparent;
172 + border-bottom: $carousel-indicator-hit-area-height solid transparent;
173 + opacity: .5;
174 + @include transition($carousel-indicator-transition);
175 + }
176 +
177 + .active {
178 + opacity: 1;
179 + }
180 +}
181 +
182 +
183 +// Optional captions
184 +//
185 +//
186 +
187 +.carousel-caption {
188 + position: absolute;
189 + right: (100% - $carousel-caption-width) / 2;
190 + bottom: 20px;
191 + left: (100% - $carousel-caption-width) / 2;
192 + z-index: 10;
193 + padding-top: 20px;
194 + padding-bottom: 20px;
195 + color: $carousel-caption-color;
196 + text-align: center;
197 +}
1 +.close {
2 + float: right;
3 + @include font-size($close-font-size);
4 + font-weight: $close-font-weight;
5 + line-height: 1;
6 + color: $close-color;
7 + text-shadow: $close-text-shadow;
8 + opacity: .5;
9 +
10 + // Override <a>'s hover style
11 + @include hover {
12 + color: $close-color;
13 + text-decoration: none;
14 + }
15 +
16 + &:not(:disabled):not(.disabled) {
17 + @include hover-focus {
18 + opacity: .75;
19 + }
20 + }
21 +}
22 +
23 +// Additional properties for button version
24 +// iOS requires the button element instead of an anchor tag.
25 +// If you want the anchor version, it requires `href="#"`.
26 +// See https://developer.mozilla.org/en-US/docs/Web/Events/click#Safari_Mobile
27 +
28 +// stylelint-disable-next-line selector-no-qualifying-type
29 +button.close {
30 + padding: 0;
31 + background-color: transparent;
32 + border: 0;
33 + appearance: none;
34 +}
35 +
36 +// Future-proof disabling of clicks on `<a>` elements
37 +
38 +// stylelint-disable-next-line selector-no-qualifying-type
39 +a.close.disabled {
40 + pointer-events: none;
41 +}
1 +// Inline code
2 +code {
3 + @include font-size($code-font-size);
4 + color: $code-color;
5 + word-break: break-word;
6 +
7 + // Streamline the style when inside anchors to avoid broken underline and more
8 + a > & {
9 + color: inherit;
10 + }
11 +}
12 +
13 +// User input typically entered via keyboard
14 +kbd {
15 + padding: $kbd-padding-y $kbd-padding-x;
16 + @include font-size($kbd-font-size);
17 + color: $kbd-color;
18 + background-color: $kbd-bg;
19 + @include border-radius($border-radius-sm);
20 + @include box-shadow($kbd-box-shadow);
21 +
22 + kbd {
23 + padding: 0;
24 + @include font-size(100%);
25 + font-weight: $nested-kbd-font-weight;
26 + @include box-shadow(none);
27 + }
28 +}
29 +
30 +// Blocks of code
31 +pre {
32 + display: block;
33 + @include font-size($code-font-size);
34 + color: $pre-color;
35 +
36 + // Account for some code outputs that place code tags in pre tags
37 + code {
38 + @include font-size(inherit);
39 + color: inherit;
40 + word-break: normal;
41 + }
42 +}
43 +
44 +// Enable scrollable blocks of code
45 +.pre-scrollable {
46 + max-height: $pre-scrollable-max-height;
47 + overflow-y: scroll;
48 +}
This diff is collapsed. Click to expand it.
1 +// The dropdown wrapper (`<div>`)
2 +.dropup,
3 +.dropright,
4 +.dropdown,
5 +.dropleft {
6 + position: relative;
7 +}
8 +
9 +.dropdown-toggle {
10 + white-space: nowrap;
11 +
12 + // Generate the caret automatically
13 + @include caret;
14 +}
15 +
16 +// The dropdown menu
17 +.dropdown-menu {
18 + position: absolute;
19 + top: 100%;
20 + left: 0;
21 + z-index: $zindex-dropdown;
22 + display: none; // none by default, but block on "open" of the menu
23 + float: left;
24 + min-width: $dropdown-min-width;
25 + padding: $dropdown-padding-y 0;
26 + margin: $dropdown-spacer 0 0; // override default ul
27 + @include font-size($dropdown-font-size);
28 + color: $dropdown-color;
29 + text-align: left; // Ensures proper alignment if parent has it changed (e.g., modal footer)
30 + list-style: none;
31 + background-color: $dropdown-bg;
32 + background-clip: padding-box;
33 + border: $dropdown-border-width solid $dropdown-border-color;
34 + @include border-radius($dropdown-border-radius);
35 + @include box-shadow($dropdown-box-shadow);
36 +}
37 +
38 +@each $breakpoint in map-keys($grid-breakpoints) {
39 + @include media-breakpoint-up($breakpoint) {
40 + $infix: breakpoint-infix($breakpoint, $grid-breakpoints);
41 +
42 + .dropdown-menu#{$infix}-left {
43 + right: auto;
44 + left: 0;
45 + }
46 +
47 + .dropdown-menu#{$infix}-right {
48 + right: 0;
49 + left: auto;
50 + }
51 + }
52 +}
53 +
54 +// Allow for dropdowns to go bottom up (aka, dropup-menu)
55 +// Just add .dropup after the standard .dropdown class and you're set.
56 +.dropup {
57 + .dropdown-menu {
58 + top: auto;
59 + bottom: 100%;
60 + margin-top: 0;
61 + margin-bottom: $dropdown-spacer;
62 + }
63 +
64 + .dropdown-toggle {
65 + @include caret(up);
66 + }
67 +}
68 +
69 +.dropright {
70 + .dropdown-menu {
71 + top: 0;
72 + right: auto;
73 + left: 100%;
74 + margin-top: 0;
75 + margin-left: $dropdown-spacer;
76 + }
77 +
78 + .dropdown-toggle {
79 + @include caret(right);
80 + &::after {
81 + vertical-align: 0;
82 + }
83 + }
84 +}
85 +
86 +.dropleft {
87 + .dropdown-menu {
88 + top: 0;
89 + right: 100%;
90 + left: auto;
91 + margin-top: 0;
92 + margin-right: $dropdown-spacer;
93 + }
94 +
95 + .dropdown-toggle {
96 + @include caret(left);
97 + &::before {
98 + vertical-align: 0;
99 + }
100 + }
101 +}
102 +
103 +// When enabled Popper.js, reset basic dropdown position
104 +// stylelint-disable-next-line no-duplicate-selectors
105 +.dropdown-menu {
106 + &[x-placement^="top"],
107 + &[x-placement^="right"],
108 + &[x-placement^="bottom"],
109 + &[x-placement^="left"] {
110 + right: auto;
111 + bottom: auto;
112 + }
113 +}
114 +
115 +// Dividers (basically an `<hr>`) within the dropdown
116 +.dropdown-divider {
117 + @include nav-divider($dropdown-divider-bg, $dropdown-divider-margin-y);
118 +}
119 +
120 +// Links, buttons, and more within the dropdown menu
121 +//
122 +// `<button>`-specific styles are denoted with `// For <button>s`
123 +.dropdown-item {
124 + display: block;
125 + width: 100%; // For `<button>`s
126 + padding: $dropdown-item-padding-y $dropdown-item-padding-x;
127 + clear: both;
128 + font-weight: $font-weight-normal;
129 + color: $dropdown-link-color;
130 + text-align: inherit; // For `<button>`s
131 + white-space: nowrap; // prevent links from randomly breaking onto new lines
132 + background-color: transparent; // For `<button>`s
133 + border: 0; // For `<button>`s
134 +
135 + // Prevent dropdown overflow if there's no padding
136 + // See https://github.com/twbs/bootstrap/pull/27703
137 + @if $dropdown-padding-y == 0 {
138 + &:first-child {
139 + @include border-top-radius($dropdown-inner-border-radius);
140 + }
141 +
142 + &:last-child {
143 + @include border-bottom-radius($dropdown-inner-border-radius);
144 + }
145 + }
146 +
147 + @include hover-focus {
148 + color: $dropdown-link-hover-color;
149 + text-decoration: none;
150 + @include gradient-bg($dropdown-link-hover-bg);
151 + }
152 +
153 + &.active,
154 + &:active {
155 + color: $dropdown-link-active-color;
156 + text-decoration: none;
157 + @include gradient-bg($dropdown-link-active-bg);
158 + }
159 +
160 + &.disabled,
161 + &:disabled {
162 + color: $dropdown-link-disabled-color;
163 + pointer-events: none;
164 + background-color: transparent;
165 + // Remove CSS gradients if they're enabled
166 + @if $enable-gradients {
167 + background-image: none;
168 + }
169 + }
170 +}
171 +
172 +.dropdown-menu.show {
173 + display: block;
174 +}
175 +
176 +// Dropdown section headers
177 +.dropdown-header {
178 + display: block;
179 + padding: $dropdown-padding-y $dropdown-item-padding-x;
180 + margin-bottom: 0; // for use with heading elements
181 + @include font-size($font-size-sm);
182 + color: $dropdown-header-color;
183 + white-space: nowrap; // as with > li > a
184 +}
185 +
186 +// Dropdown text
187 +.dropdown-item-text {
188 + display: block;
189 + padding: $dropdown-item-padding-y $dropdown-item-padding-x;
190 + color: $dropdown-link-color;
191 +}
1 +// stylelint-disable selector-no-qualifying-type
2 +
3 +//
4 +// Textual form controls
5 +//
6 +
7 +.form-control {
8 + display: block;
9 + width: 100%;
10 + height: $input-height;
11 + padding: $input-padding-y $input-padding-x;
12 + font-family: $input-font-family;
13 + @include font-size($input-font-size);
14 + font-weight: $input-font-weight;
15 + line-height: $input-line-height;
16 + color: $input-color;
17 + background-color: $input-bg;
18 + background-clip: padding-box;
19 + border: $input-border-width solid $input-border-color;
20 +
21 + // Note: This has no effect on <select>s in some browsers, due to the limited stylability of `<select>`s in CSS.
22 + @include border-radius($input-border-radius, 0);
23 +
24 + @include box-shadow($input-box-shadow);
25 + @include transition($input-transition);
26 +
27 + // Unstyle the caret on `<select>`s in IE10+.
28 + &::-ms-expand {
29 + background-color: transparent;
30 + border: 0;
31 + }
32 +
33 + // Customize the `:focus` state to imitate native WebKit styles.
34 + @include form-control-focus();
35 +
36 + // Placeholder
37 + &::placeholder {
38 + color: $input-placeholder-color;
39 + // Override Firefox's unusual default opacity; see https://github.com/twbs/bootstrap/pull/11526.
40 + opacity: 1;
41 + }
42 +
43 + // Disabled and read-only inputs
44 + //
45 + // HTML5 says that controls under a fieldset > legend:first-child won't be
46 + // disabled if the fieldset is disabled. Due to implementation difficulty, we
47 + // don't honor that edge case; we style them as disabled anyway.
48 + &:disabled,
49 + &[readonly] {
50 + background-color: $input-disabled-bg;
51 + // iOS fix for unreadable disabled content; see https://github.com/twbs/bootstrap/issues/11655.
52 + opacity: 1;
53 + }
54 +}
55 +
56 +select.form-control {
57 + &:focus::-ms-value {
58 + // Suppress the nested default white text on blue background highlight given to
59 + // the selected option text when the (still closed) <select> receives focus
60 + // in IE and (under certain conditions) Edge, as it looks bad and cannot be made to
61 + // match the appearance of the native widget.
62 + // See https://github.com/twbs/bootstrap/issues/19398.
63 + color: $input-color;
64 + background-color: $input-bg;
65 + }
66 +}
67 +
68 +// Make file inputs better match text inputs by forcing them to new lines.
69 +.form-control-file,
70 +.form-control-range {
71 + display: block;
72 + width: 100%;
73 +}
74 +
75 +
76 +//
77 +// Labels
78 +//
79 +
80 +// For use with horizontal and inline forms, when you need the label (or legend)
81 +// text to align with the form controls.
82 +.col-form-label {
83 + padding-top: calc(#{$input-padding-y} + #{$input-border-width});
84 + padding-bottom: calc(#{$input-padding-y} + #{$input-border-width});
85 + margin-bottom: 0; // Override the `<label>/<legend>` default
86 + @include font-size(inherit); // Override the `<legend>` default
87 + line-height: $input-line-height;
88 +}
89 +
90 +.col-form-label-lg {
91 + padding-top: calc(#{$input-padding-y-lg} + #{$input-border-width});
92 + padding-bottom: calc(#{$input-padding-y-lg} + #{$input-border-width});
93 + @include font-size($input-font-size-lg);
94 + line-height: $input-line-height-lg;
95 +}
96 +
97 +.col-form-label-sm {
98 + padding-top: calc(#{$input-padding-y-sm} + #{$input-border-width});
99 + padding-bottom: calc(#{$input-padding-y-sm} + #{$input-border-width});
100 + @include font-size($input-font-size-sm);
101 + line-height: $input-line-height-sm;
102 +}
103 +
104 +
105 +// Readonly controls as plain text
106 +//
107 +// Apply class to a readonly input to make it appear like regular plain
108 +// text (without any border, background color, focus indicator)
109 +
110 +.form-control-plaintext {
111 + display: block;
112 + width: 100%;
113 + padding-top: $input-padding-y;
114 + padding-bottom: $input-padding-y;
115 + margin-bottom: 0; // match inputs if this class comes on inputs with default margins
116 + line-height: $input-line-height;
117 + color: $input-plaintext-color;
118 + background-color: transparent;
119 + border: solid transparent;
120 + border-width: $input-border-width 0;
121 +
122 + &.form-control-sm,
123 + &.form-control-lg {
124 + padding-right: 0;
125 + padding-left: 0;
126 + }
127 +}
128 +
129 +
130 +// Form control sizing
131 +//
132 +// Build on `.form-control` with modifier classes to decrease or increase the
133 +// height and font-size of form controls.
134 +//
135 +// Repeated in `_input_group.scss` to avoid Sass extend issues.
136 +
137 +.form-control-sm {
138 + height: $input-height-sm;
139 + padding: $input-padding-y-sm $input-padding-x-sm;
140 + @include font-size($input-font-size-sm);
141 + line-height: $input-line-height-sm;
142 + @include border-radius($input-border-radius-sm);
143 +}
144 +
145 +.form-control-lg {
146 + height: $input-height-lg;
147 + padding: $input-padding-y-lg $input-padding-x-lg;
148 + @include font-size($input-font-size-lg);
149 + line-height: $input-line-height-lg;
150 + @include border-radius($input-border-radius-lg);
151 +}
152 +
153 +// stylelint-disable-next-line no-duplicate-selectors
154 +select.form-control {
155 + &[size],
156 + &[multiple] {
157 + height: auto;
158 + }
159 +}
160 +
161 +textarea.form-control {
162 + height: auto;
163 +}
164 +
165 +// Form groups
166 +//
167 +// Designed to help with the organization and spacing of vertical forms. For
168 +// horizontal forms, use the predefined grid classes.
169 +
170 +.form-group {
171 + margin-bottom: $form-group-margin-bottom;
172 +}
173 +
174 +.form-text {
175 + display: block;
176 + margin-top: $form-text-margin-top;
177 +}
178 +
179 +
180 +// Form grid
181 +//
182 +// Special replacement for our grid system's `.row` for tighter form layouts.
183 +
184 +.form-row {
185 + display: flex;
186 + flex-wrap: wrap;
187 + margin-right: -$form-grid-gutter-width / 2;
188 + margin-left: -$form-grid-gutter-width / 2;
189 +
190 + > .col,
191 + > [class*="col-"] {
192 + padding-right: $form-grid-gutter-width / 2;
193 + padding-left: $form-grid-gutter-width / 2;
194 + }
195 +}
196 +
197 +
198 +// Checkboxes and radios
199 +//
200 +// Indent the labels to position radios/checkboxes as hanging controls.
201 +
202 +.form-check {
203 + position: relative;
204 + display: block;
205 + padding-left: $form-check-input-gutter;
206 +}
207 +
208 +.form-check-input {
209 + position: absolute;
210 + margin-top: $form-check-input-margin-y;
211 + margin-left: -$form-check-input-gutter;
212 +
213 + &:disabled ~ .form-check-label {
214 + color: $text-muted;
215 + }
216 +}
217 +
218 +.form-check-label {
219 + margin-bottom: 0; // Override default `<label>` bottom margin
220 +}
221 +
222 +.form-check-inline {
223 + display: inline-flex;
224 + align-items: center;
225 + padding-left: 0; // Override base .form-check
226 + margin-right: $form-check-inline-margin-x;
227 +
228 + // Undo .form-check-input defaults and add some `margin-right`.
229 + .form-check-input {
230 + position: static;
231 + margin-top: 0;
232 + margin-right: $form-check-inline-input-margin-x;
233 + margin-left: 0;
234 + }
235 +}
236 +
237 +
238 +// Form validation
239 +//
240 +// Provide feedback to users when form field values are valid or invalid. Works
241 +// primarily for client-side validation via scoped `:invalid` and `:valid`
242 +// pseudo-classes but also includes `.is-invalid` and `.is-valid` classes for
243 +// server side validation.
244 +
245 +@each $state, $data in $form-validation-states {
246 + @include form-validation-state($state, map-get($data, color), map-get($data, icon));
247 +}
248 +
249 +// Inline forms
250 +//
251 +// Make forms appear inline(-block) by adding the `.form-inline` class. Inline
252 +// forms begin stacked on extra small (mobile) devices and then go inline when
253 +// viewports reach <768px.
254 +//
255 +// Requires wrapping inputs and labels with `.form-group` for proper display of
256 +// default HTML form controls and our custom form controls (e.g., input groups).
257 +
258 +.form-inline {
259 + display: flex;
260 + flex-flow: row wrap;
261 + align-items: center; // Prevent shorter elements from growing to same height as others (e.g., small buttons growing to normal sized button height)
262 +
263 + // Because we use flex, the initial sizing of checkboxes is collapsed and
264 + // doesn't occupy the full-width (which is what we want for xs grid tier),
265 + // so we force that here.
266 + .form-check {
267 + width: 100%;
268 + }
269 +
270 + // Kick in the inline
271 + @include media-breakpoint-up(sm) {
272 + label {
273 + display: flex;
274 + align-items: center;
275 + justify-content: center;
276 + margin-bottom: 0;
277 + }
278 +
279 + // Inline-block all the things for "inline"
280 + .form-group {
281 + display: flex;
282 + flex: 0 0 auto;
283 + flex-flow: row wrap;
284 + align-items: center;
285 + margin-bottom: 0;
286 + }
287 +
288 + // Allow folks to *not* use `.form-group`
289 + .form-control {
290 + display: inline-block;
291 + width: auto; // Prevent labels from stacking above inputs in `.form-group`
292 + vertical-align: middle;
293 + }
294 +
295 + // Make static controls behave like regular ones
296 + .form-control-plaintext {
297 + display: inline-block;
298 + }
299 +
300 + .input-group,
301 + .custom-select {
302 + width: auto;
303 + }
304 +
305 + // Remove default margin on radios/checkboxes that were used for stacking, and
306 + // then undo the floating of radios and checkboxes to match.
307 + .form-check {
308 + display: flex;
309 + align-items: center;
310 + justify-content: center;
311 + width: auto;
312 + padding-left: 0;
313 + }
314 + .form-check-input {
315 + position: relative;
316 + flex-shrink: 0;
317 + margin-top: 0;
318 + margin-right: $form-check-input-margin-x;
319 + margin-left: 0;
320 + }
321 +
322 + .custom-control {
323 + align-items: center;
324 + justify-content: center;
325 + }
326 + .custom-control-label {
327 + margin-bottom: 0;
328 + }
329 + }
330 +}
1 +// Bootstrap functions
2 +//
3 +// Utility mixins and functions for evaluating source code across our variables, maps, and mixins.
4 +
5 +// Ascending
6 +// Used to evaluate Sass maps like our grid breakpoints.
7 +@mixin _assert-ascending($map, $map-name) {
8 + $prev-key: null;
9 + $prev-num: null;
10 + @each $key, $num in $map {
11 + @if $prev-num == null or unit($num) == "%" {
12 + // Do nothing
13 + } @else if not comparable($prev-num, $num) {
14 + @warn "Potentially invalid value for #{$map-name}: This map must be in ascending order, but key '#{$key}' has value #{$num} whose unit makes it incomparable to #{$prev-num}, the value of the previous key '#{$prev-key}' !";
15 + } @else if $prev-num >= $num {
16 + @warn "Invalid value for #{$map-name}: This map must be in ascending order, but key '#{$key}' has value #{$num} which isn't greater than #{$prev-num}, the value of the previous key '#{$prev-key}' !";
17 + }
18 + $prev-key: $key;
19 + $prev-num: $num;
20 + }
21 +}
22 +
23 +// Starts at zero
24 +// Used to ensure the min-width of the lowest breakpoint starts at 0.
25 +@mixin _assert-starts-at-zero($map, $map-name: "$grid-breakpoints") {
26 + $values: map-values($map);
27 + $first-value: nth($values, 1);
28 + @if $first-value != 0 {
29 + @warn "First breakpoint in #{$map-name} must start at 0, but starts at #{$first-value}.";
30 + }
31 +}
32 +
33 +// Replace `$search` with `$replace` in `$string`
34 +// Used on our SVG icon backgrounds for custom forms.
35 +//
36 +// @author Hugo Giraudel
37 +// @param {String} $string - Initial string
38 +// @param {String} $search - Substring to replace
39 +// @param {String} $replace ('') - New value
40 +// @return {String} - Updated string
41 +@function str-replace($string, $search, $replace: "") {
42 + $index: str-index($string, $search);
43 +
44 + @if $index {
45 + @return str-slice($string, 1, $index - 1) + $replace + str-replace(str-slice($string, $index + str-length($search)), $search, $replace);
46 + }
47 +
48 + @return $string;
49 +}
50 +
51 +// Color contrast
52 +@function color-yiq($color, $dark: $yiq-text-dark, $light: $yiq-text-light) {
53 + $r: red($color);
54 + $g: green($color);
55 + $b: blue($color);
56 +
57 + $yiq: (($r * 299) + ($g * 587) + ($b * 114)) / 1000;
58 +
59 + @if ($yiq >= $yiq-contrasted-threshold) {
60 + @return $dark;
61 + } @else {
62 + @return $light;
63 + }
64 +}
65 +
66 +// Retrieve color Sass maps
67 +@function color($key: "blue") {
68 + @return map-get($colors, $key);
69 +}
70 +
71 +@function theme-color($key: "primary") {
72 + @return map-get($theme-colors, $key);
73 +}
74 +
75 +@function gray($key: "100") {
76 + @return map-get($grays, $key);
77 +}
78 +
79 +// Request a theme color level
80 +@function theme-color-level($color-name: "primary", $level: 0) {
81 + $color: theme-color($color-name);
82 + $color-base: if($level > 0, $black, $white);
83 + $level: abs($level);
84 +
85 + @return mix($color-base, $color, $level * $theme-color-interval);
86 +}
1 +// Container widths
2 +//
3 +// Set the container width, and override it for fixed navbars in media queries.
4 +
5 +@if $enable-grid-classes {
6 + .container {
7 + @include make-container();
8 + @include make-container-max-widths();
9 + }
10 +}
11 +
12 +// Fluid container
13 +//
14 +// Utilizes the mixin meant for fixed width containers, but with 100% width for
15 +// fluid, full width layouts.
16 +
17 +@if $enable-grid-classes {
18 + .container-fluid {
19 + @include make-container();
20 + }
21 +}
22 +
23 +// Row
24 +//
25 +// Rows contain and clear the floats of your columns.
26 +
27 +@if $enable-grid-classes {
28 + .row {
29 + @include make-row();
30 + }
31 +
32 + // Remove the negative margin from default .row, then the horizontal padding
33 + // from all immediate children columns (to prevent runaway style inheritance).
34 + .no-gutters {
35 + margin-right: 0;
36 + margin-left: 0;
37 +
38 + > .col,
39 + > [class*="col-"] {
40 + padding-right: 0;
41 + padding-left: 0;
42 + }
43 + }
44 +}
45 +
46 +// Columns
47 +//
48 +// Common styles for small and large grid columns
49 +
50 +@if $enable-grid-classes {
51 + @include make-grid-columns();
52 +}
1 +// Responsive images (ensure images don't scale beyond their parents)
2 +//
3 +// This is purposefully opt-in via an explicit class rather than being the default for all `<img>`s.
4 +// We previously tried the "images are responsive by default" approach in Bootstrap v2,
5 +// and abandoned it in Bootstrap v3 because it breaks lots of third-party widgets (including Google Maps)
6 +// which weren't expecting the images within themselves to be involuntarily resized.
7 +// See also https://github.com/twbs/bootstrap/issues/18178
8 +.img-fluid {
9 + @include img-fluid;
10 +}
11 +
12 +
13 +// Image thumbnails
14 +.img-thumbnail {
15 + padding: $thumbnail-padding;
16 + background-color: $thumbnail-bg;
17 + border: $thumbnail-border-width solid $thumbnail-border-color;
18 + @include border-radius($thumbnail-border-radius);
19 + @include box-shadow($thumbnail-box-shadow);
20 +
21 + // Keep them at most 100% wide
22 + @include img-fluid;
23 +}
24 +
25 +//
26 +// Figures
27 +//
28 +
29 +.figure {
30 + // Ensures the caption's text aligns with the image.
31 + display: inline-block;
32 +}
33 +
34 +.figure-img {
35 + margin-bottom: $spacer / 2;
36 + line-height: 1;
37 +}
38 +
39 +.figure-caption {
40 + @include font-size($figure-caption-font-size);
41 + color: $figure-caption-color;
42 +}
1 +// stylelint-disable selector-no-qualifying-type
2 +
3 +//
4 +// Base styles
5 +//
6 +
7 +.input-group {
8 + position: relative;
9 + display: flex;
10 + flex-wrap: wrap; // For form validation feedback
11 + align-items: stretch;
12 + width: 100%;
13 +
14 + > .form-control,
15 + > .form-control-plaintext,
16 + > .custom-select,
17 + > .custom-file {
18 + position: relative; // For focus state's z-index
19 + flex: 1 1 auto;
20 + // Add width 1% and flex-basis auto to ensure that button will not wrap out
21 + // the column. Applies to IE Edge+ and Firefox. Chrome does not require this.
22 + width: 1%;
23 + margin-bottom: 0;
24 +
25 + + .form-control,
26 + + .custom-select,
27 + + .custom-file {
28 + margin-left: -$input-border-width;
29 + }
30 + }
31 +
32 + // Bring the "active" form control to the top of surrounding elements
33 + > .form-control:focus,
34 + > .custom-select:focus,
35 + > .custom-file .custom-file-input:focus ~ .custom-file-label {
36 + z-index: 3;
37 + }
38 +
39 + // Bring the custom file input above the label
40 + > .custom-file .custom-file-input:focus {
41 + z-index: 4;
42 + }
43 +
44 + > .form-control,
45 + > .custom-select {
46 + &:not(:last-child) { @include border-right-radius(0); }
47 + &:not(:first-child) { @include border-left-radius(0); }
48 + }
49 +
50 + // Custom file inputs have more complex markup, thus requiring different
51 + // border-radius overrides.
52 + > .custom-file {
53 + display: flex;
54 + align-items: center;
55 +
56 + &:not(:last-child) .custom-file-label,
57 + &:not(:last-child) .custom-file-label::after { @include border-right-radius(0); }
58 + &:not(:first-child) .custom-file-label { @include border-left-radius(0); }
59 + }
60 +}
61 +
62 +
63 +// Prepend and append
64 +//
65 +// While it requires one extra layer of HTML for each, dedicated prepend and
66 +// append elements allow us to 1) be less clever, 2) simplify our selectors, and
67 +// 3) support HTML5 form validation.
68 +
69 +.input-group-prepend,
70 +.input-group-append {
71 + display: flex;
72 +
73 + // Ensure buttons are always above inputs for more visually pleasing borders.
74 + // This isn't needed for `.input-group-text` since it shares the same border-color
75 + // as our inputs.
76 + .btn {
77 + position: relative;
78 + z-index: 2;
79 +
80 + &:focus {
81 + z-index: 3;
82 + }
83 + }
84 +
85 + .btn + .btn,
86 + .btn + .input-group-text,
87 + .input-group-text + .input-group-text,
88 + .input-group-text + .btn {
89 + margin-left: -$input-border-width;
90 + }
91 +}
92 +
93 +.input-group-prepend { margin-right: -$input-border-width; }
94 +.input-group-append { margin-left: -$input-border-width; }
95 +
96 +
97 +// Textual addons
98 +//
99 +// Serves as a catch-all element for any text or radio/checkbox input you wish
100 +// to prepend or append to an input.
101 +
102 +.input-group-text {
103 + display: flex;
104 + align-items: center;
105 + padding: $input-padding-y $input-padding-x;
106 + margin-bottom: 0; // Allow use of <label> elements by overriding our default margin-bottom
107 + @include font-size($input-font-size); // Match inputs
108 + font-weight: $font-weight-normal;
109 + line-height: $input-line-height;
110 + color: $input-group-addon-color;
111 + text-align: center;
112 + white-space: nowrap;
113 + background-color: $input-group-addon-bg;
114 + border: $input-border-width solid $input-group-addon-border-color;
115 + @include border-radius($input-border-radius);
116 +
117 + // Nuke default margins from checkboxes and radios to vertically center within.
118 + input[type="radio"],
119 + input[type="checkbox"] {
120 + margin-top: 0;
121 + }
122 +}
123 +
124 +
125 +// Sizing
126 +//
127 +// Remix the default form control sizing classes into new ones for easier
128 +// manipulation.
129 +
130 +.input-group-lg > .form-control:not(textarea),
131 +.input-group-lg > .custom-select {
132 + height: $input-height-lg;
133 +}
134 +
135 +.input-group-lg > .form-control,
136 +.input-group-lg > .custom-select,
137 +.input-group-lg > .input-group-prepend > .input-group-text,
138 +.input-group-lg > .input-group-append > .input-group-text,
139 +.input-group-lg > .input-group-prepend > .btn,
140 +.input-group-lg > .input-group-append > .btn {
141 + padding: $input-padding-y-lg $input-padding-x-lg;
142 + @include font-size($input-font-size-lg);
143 + line-height: $input-line-height-lg;
144 + @include border-radius($input-border-radius-lg);
145 +}
146 +
147 +.input-group-sm > .form-control:not(textarea),
148 +.input-group-sm > .custom-select {
149 + height: $input-height-sm;
150 +}
151 +
152 +.input-group-sm > .form-control,
153 +.input-group-sm > .custom-select,
154 +.input-group-sm > .input-group-prepend > .input-group-text,
155 +.input-group-sm > .input-group-append > .input-group-text,
156 +.input-group-sm > .input-group-prepend > .btn,
157 +.input-group-sm > .input-group-append > .btn {
158 + padding: $input-padding-y-sm $input-padding-x-sm;
159 + @include font-size($input-font-size-sm);
160 + line-height: $input-line-height-sm;
161 + @include border-radius($input-border-radius-sm);
162 +}
163 +
164 +.input-group-lg > .custom-select,
165 +.input-group-sm > .custom-select {
166 + padding-right: $custom-select-padding-x + $custom-select-indicator-padding;
167 +}
168 +
169 +
170 +// Prepend and append rounded corners
171 +//
172 +// These rulesets must come after the sizing ones to properly override sm and lg
173 +// border-radius values when extending. They're more specific than we'd like
174 +// with the `.input-group >` part, but without it, we cannot override the sizing.
175 +
176 +
177 +.input-group > .input-group-prepend > .btn,
178 +.input-group > .input-group-prepend > .input-group-text,
179 +.input-group > .input-group-append:not(:last-child) > .btn,
180 +.input-group > .input-group-append:not(:last-child) > .input-group-text,
181 +.input-group > .input-group-append:last-child > .btn:not(:last-child):not(.dropdown-toggle),
182 +.input-group > .input-group-append:last-child > .input-group-text:not(:last-child) {
183 + @include border-right-radius(0);
184 +}
185 +
186 +.input-group > .input-group-append > .btn,
187 +.input-group > .input-group-append > .input-group-text,
188 +.input-group > .input-group-prepend:not(:first-child) > .btn,
189 +.input-group > .input-group-prepend:not(:first-child) > .input-group-text,
190 +.input-group > .input-group-prepend:first-child > .btn:not(:first-child),
191 +.input-group > .input-group-prepend:first-child > .input-group-text:not(:first-child) {
192 + @include border-left-radius(0);
193 +}
1 +.jumbotron {
2 + padding: $jumbotron-padding ($jumbotron-padding / 2);
3 + margin-bottom: $jumbotron-padding;
4 + color: $jumbotron-color;
5 + background-color: $jumbotron-bg;
6 + @include border-radius($border-radius-lg);
7 +
8 + @include media-breakpoint-up(sm) {
9 + padding: ($jumbotron-padding * 2) $jumbotron-padding;
10 + }
11 +}
12 +
13 +.jumbotron-fluid {
14 + padding-right: 0;
15 + padding-left: 0;
16 + @include border-radius(0);
17 +}
1 +// Base class
2 +//
3 +// Easily usable on <ul>, <ol>, or <div>.
4 +
5 +.list-group {
6 + display: flex;
7 + flex-direction: column;
8 +
9 + // No need to set list-style: none; since .list-group-item is block level
10 + padding-left: 0; // reset padding because ul and ol
11 + margin-bottom: 0;
12 +}
13 +
14 +
15 +// Interactive list items
16 +//
17 +// Use anchor or button elements instead of `li`s or `div`s to create interactive
18 +// list items. Includes an extra `.active` modifier class for selected items.
19 +
20 +.list-group-item-action {
21 + width: 100%; // For `<button>`s (anchors become 100% by default though)
22 + color: $list-group-action-color;
23 + text-align: inherit; // For `<button>`s (anchors inherit)
24 +
25 + // Hover state
26 + @include hover-focus {
27 + z-index: 1; // Place hover/focus items above their siblings for proper border styling
28 + color: $list-group-action-hover-color;
29 + text-decoration: none;
30 + background-color: $list-group-hover-bg;
31 + }
32 +
33 + &:active {
34 + color: $list-group-action-active-color;
35 + background-color: $list-group-action-active-bg;
36 + }
37 +}
38 +
39 +
40 +// Individual list items
41 +//
42 +// Use on `li`s or `div`s within the `.list-group` parent.
43 +
44 +.list-group-item {
45 + position: relative;
46 + display: block;
47 + padding: $list-group-item-padding-y $list-group-item-padding-x;
48 + // Place the border on the list items and negative margin up for better styling
49 + margin-bottom: -$list-group-border-width;
50 + color: $list-group-color;
51 + background-color: $list-group-bg;
52 + border: $list-group-border-width solid $list-group-border-color;
53 +
54 + &:first-child {
55 + @include border-top-radius($list-group-border-radius);
56 + }
57 +
58 + &:last-child {
59 + margin-bottom: 0;
60 + @include border-bottom-radius($list-group-border-radius);
61 + }
62 +
63 + &.disabled,
64 + &:disabled {
65 + color: $list-group-disabled-color;
66 + pointer-events: none;
67 + background-color: $list-group-disabled-bg;
68 + }
69 +
70 + // Include both here for `<a>`s and `<button>`s
71 + &.active {
72 + z-index: 2; // Place active items above their siblings for proper border styling
73 + color: $list-group-active-color;
74 + background-color: $list-group-active-bg;
75 + border-color: $list-group-active-border-color;
76 + }
77 +}
78 +
79 +
80 +// Horizontal
81 +//
82 +// Change the layout of list group items from vertical (default) to horizontal.
83 +
84 +@each $breakpoint in map-keys($grid-breakpoints) {
85 + @include media-breakpoint-up($breakpoint) {
86 + $infix: breakpoint-infix($breakpoint, $grid-breakpoints);
87 +
88 + .list-group-horizontal#{$infix} {
89 + flex-direction: row;
90 +
91 + .list-group-item {
92 + margin-right: -$list-group-border-width;
93 + margin-bottom: 0;
94 +
95 + &:first-child {
96 + @include border-left-radius($list-group-border-radius);
97 + @include border-top-right-radius(0);
98 + }
99 +
100 + &:last-child {
101 + margin-right: 0;
102 + @include border-right-radius($list-group-border-radius);
103 + @include border-bottom-left-radius(0);
104 + }
105 + }
106 + }
107 + }
108 +}
109 +
110 +
111 +// Flush list items
112 +//
113 +// Remove borders and border-radius to keep list group items edge-to-edge. Most
114 +// useful within other components (e.g., cards).
115 +
116 +.list-group-flush {
117 + .list-group-item {
118 + border-right: 0;
119 + border-left: 0;
120 + @include border-radius(0);
121 +
122 + &:last-child {
123 + margin-bottom: -$list-group-border-width;
124 + }
125 + }
126 +
127 + &:first-child {
128 + .list-group-item:first-child {
129 + border-top: 0;
130 + }
131 + }
132 +
133 + &:last-child {
134 + .list-group-item:last-child {
135 + margin-bottom: 0;
136 + border-bottom: 0;
137 + }
138 + }
139 +}
140 +
141 +
142 +// Contextual variants
143 +//
144 +// Add modifier classes to change text and background color on individual items.
145 +// Organizationally, this must come after the `:hover` states.
146 +
147 +@each $color, $value in $theme-colors {
148 + @include list-group-item-variant($color, theme-color-level($color, -9), theme-color-level($color, 6));
149 +}
1 +.media {
2 + display: flex;
3 + align-items: flex-start;
4 +}
5 +
6 +.media-body {
7 + flex: 1;
8 +}
1 +// Toggles
2 +//
3 +// Used in conjunction with global variables to enable certain theme features.
4 +
5 +// Vendor
6 +@import "vendor/rfs";
7 +
8 +// Deprecate
9 +@import "mixins/deprecate";
10 +
11 +// Utilities
12 +@import "mixins/breakpoints";
13 +@import "mixins/hover";
14 +@import "mixins/image";
15 +@import "mixins/badge";
16 +@import "mixins/resize";
17 +@import "mixins/screen-reader";
18 +@import "mixins/size";
19 +@import "mixins/reset-text";
20 +@import "mixins/text-emphasis";
21 +@import "mixins/text-hide";
22 +@import "mixins/text-truncate";
23 +@import "mixins/visibility";
24 +
25 +// // Components
26 +@import "mixins/alert";
27 +@import "mixins/buttons";
28 +@import "mixins/caret";
29 +@import "mixins/pagination";
30 +@import "mixins/lists";
31 +@import "mixins/list-group";
32 +@import "mixins/nav-divider";
33 +@import "mixins/forms";
34 +@import "mixins/table-row";
35 +
36 +// // Skins
37 +@import "mixins/background-variant";
38 +@import "mixins/border-radius";
39 +@import "mixins/box-shadow";
40 +@import "mixins/gradients";
41 +@import "mixins/transition";
42 +
43 +// // Layout
44 +@import "mixins/clearfix";
45 +@import "mixins/grid-framework";
46 +@import "mixins/grid";
47 +@import "mixins/float";
1 +// .modal-open - body class for killing the scroll
2 +// .modal - container to scroll within
3 +// .modal-dialog - positioning shell for the actual modal
4 +// .modal-content - actual modal w/ bg and corners and stuff
5 +
6 +
7 +.modal-open {
8 + // Kill the scroll on the body
9 + overflow: hidden;
10 +
11 + .modal {
12 + overflow-x: hidden;
13 + overflow-y: auto;
14 + }
15 +}
16 +
17 +// Container that the modal scrolls within
18 +.modal {
19 + position: fixed;
20 + top: 0;
21 + left: 0;
22 + z-index: $zindex-modal;
23 + display: none;
24 + width: 100%;
25 + height: 100%;
26 + overflow: hidden;
27 + // Prevent Chrome on Windows from adding a focus outline. For details, see
28 + // https://github.com/twbs/bootstrap/pull/10951.
29 + outline: 0;
30 + // We deliberately don't use `-webkit-overflow-scrolling: touch;` due to a
31 + // gnarly iOS Safari bug: https://bugs.webkit.org/show_bug.cgi?id=158342
32 + // See also https://github.com/twbs/bootstrap/issues/17695
33 +}
34 +
35 +// Shell div to position the modal with bottom padding
36 +.modal-dialog {
37 + position: relative;
38 + width: auto;
39 + margin: $modal-dialog-margin;
40 + // allow clicks to pass through for custom click handling to close modal
41 + pointer-events: none;
42 +
43 + // When fading in the modal, animate it to slide down
44 + .modal.fade & {
45 + @include transition($modal-transition);
46 + transform: $modal-fade-transform;
47 + }
48 + .modal.show & {
49 + transform: $modal-show-transform;
50 + }
51 +}
52 +
53 +.modal-dialog-scrollable {
54 + display: flex; // IE10/11
55 + max-height: calc(100% - #{$modal-dialog-margin * 2});
56 +
57 + .modal-content {
58 + max-height: calc(100vh - #{$modal-dialog-margin * 2}); // IE10/11
59 + overflow: hidden;
60 + }
61 +
62 + .modal-header,
63 + .modal-footer {
64 + flex-shrink: 0;
65 + }
66 +
67 + .modal-body {
68 + overflow-y: auto;
69 + }
70 +}
71 +
72 +.modal-dialog-centered {
73 + display: flex;
74 + align-items: center;
75 + min-height: calc(100% - #{$modal-dialog-margin * 2});
76 +
77 + // Ensure `modal-dialog-centered` extends the full height of the view (IE10/11)
78 + &::before {
79 + display: block; // IE10
80 + height: calc(100vh - #{$modal-dialog-margin * 2});
81 + content: "";
82 + }
83 +
84 + // Ensure `.modal-body` shows scrollbar (IE10/11)
85 + &.modal-dialog-scrollable {
86 + flex-direction: column;
87 + justify-content: center;
88 + height: 100%;
89 +
90 + .modal-content {
91 + max-height: none;
92 + }
93 +
94 + &::before {
95 + content: none;
96 + }
97 + }
98 +}
99 +
100 +// Actual modal
101 +.modal-content {
102 + position: relative;
103 + display: flex;
104 + flex-direction: column;
105 + width: 100%; // Ensure `.modal-content` extends the full width of the parent `.modal-dialog`
106 + // counteract the pointer-events: none; in the .modal-dialog
107 + color: $modal-content-color;
108 + pointer-events: auto;
109 + background-color: $modal-content-bg;
110 + background-clip: padding-box;
111 + border: $modal-content-border-width solid $modal-content-border-color;
112 + @include border-radius($modal-content-border-radius);
113 + @include box-shadow($modal-content-box-shadow-xs);
114 + // Remove focus outline from opened modal
115 + outline: 0;
116 +}
117 +
118 +// Modal background
119 +.modal-backdrop {
120 + position: fixed;
121 + top: 0;
122 + left: 0;
123 + z-index: $zindex-modal-backdrop;
124 + width: 100vw;
125 + height: 100vh;
126 + background-color: $modal-backdrop-bg;
127 +
128 + // Fade for backdrop
129 + &.fade { opacity: 0; }
130 + &.show { opacity: $modal-backdrop-opacity; }
131 +}
132 +
133 +// Modal header
134 +// Top section of the modal w/ title and dismiss
135 +.modal-header {
136 + display: flex;
137 + align-items: flex-start; // so the close btn always stays on the upper right corner
138 + justify-content: space-between; // Put modal header elements (title and dismiss) on opposite ends
139 + padding: $modal-header-padding;
140 + border-bottom: $modal-header-border-width solid $modal-header-border-color;
141 + @include border-top-radius($modal-content-border-radius);
142 +
143 + .close {
144 + padding: $modal-header-padding;
145 + // auto on the left force icon to the right even when there is no .modal-title
146 + margin: (-$modal-header-padding-y) (-$modal-header-padding-x) (-$modal-header-padding-y) auto;
147 + }
148 +}
149 +
150 +// Title text within header
151 +.modal-title {
152 + margin-bottom: 0;
153 + line-height: $modal-title-line-height;
154 +}
155 +
156 +// Modal body
157 +// Where all modal content resides (sibling of .modal-header and .modal-footer)
158 +.modal-body {
159 + position: relative;
160 + // Enable `flex-grow: 1` so that the body take up as much space as possible
161 + // when should there be a fixed height on `.modal-dialog`.
162 + flex: 1 1 auto;
163 + padding: $modal-inner-padding;
164 +}
165 +
166 +// Footer (for actions)
167 +.modal-footer {
168 + display: flex;
169 + align-items: center; // vertically center
170 + justify-content: flex-end; // Right align buttons with flex property because text-align doesn't work on flex items
171 + padding: $modal-inner-padding;
172 + border-top: $modal-footer-border-width solid $modal-footer-border-color;
173 + @include border-bottom-radius($modal-content-border-radius);
174 +
175 + // Easily place margin between footer elements
176 + > :not(:first-child) { margin-left: .25rem; }
177 + > :not(:last-child) { margin-right: .25rem; }
178 +}
179 +
180 +// Measure scrollbar width for padding body during modal show/hide
181 +.modal-scrollbar-measure {
182 + position: absolute;
183 + top: -9999px;
184 + width: 50px;
185 + height: 50px;
186 + overflow: scroll;
187 +}
188 +
189 +// Scale up the modal
190 +@include media-breakpoint-up(sm) {
191 + // Automatically set modal's width for larger viewports
192 + .modal-dialog {
193 + max-width: $modal-md;
194 + margin: $modal-dialog-margin-y-sm-up auto;
195 + }
196 +
197 + .modal-dialog-scrollable {
198 + max-height: calc(100% - #{$modal-dialog-margin-y-sm-up * 2});
199 +
200 + .modal-content {
201 + max-height: calc(100vh - #{$modal-dialog-margin-y-sm-up * 2});
202 + }
203 + }
204 +
205 + .modal-dialog-centered {
206 + min-height: calc(100% - #{$modal-dialog-margin-y-sm-up * 2});
207 +
208 + &::before {
209 + height: calc(100vh - #{$modal-dialog-margin-y-sm-up * 2});
210 + }
211 + }
212 +
213 + .modal-content {
214 + @include box-shadow($modal-content-box-shadow-sm-up);
215 + }
216 +
217 + .modal-sm { max-width: $modal-sm; }
218 +}
219 +
220 +@include media-breakpoint-up(lg) {
221 + .modal-lg,
222 + .modal-xl {
223 + max-width: $modal-lg;
224 + }
225 +}
226 +
227 +@include media-breakpoint-up(xl) {
228 + .modal-xl { max-width: $modal-xl; }
229 +}
1 +// Base class
2 +//
3 +// Kickstart any navigation component with a set of style resets. Works with
4 +// `<nav>`s or `<ul>`s.
5 +
6 +.nav {
7 + display: flex;
8 + flex-wrap: wrap;
9 + padding-left: 0;
10 + margin-bottom: 0;
11 + list-style: none;
12 +}
13 +
14 +.nav-link {
15 + display: block;
16 + padding: $nav-link-padding-y $nav-link-padding-x;
17 +
18 + @include hover-focus {
19 + text-decoration: none;
20 + }
21 +
22 + // Disabled state lightens text
23 + &.disabled {
24 + color: $nav-link-disabled-color;
25 + pointer-events: none;
26 + cursor: default;
27 + }
28 +}
29 +
30 +//
31 +// Tabs
32 +//
33 +
34 +.nav-tabs {
35 + border-bottom: $nav-tabs-border-width solid $nav-tabs-border-color;
36 +
37 + .nav-item {
38 + margin-bottom: -$nav-tabs-border-width;
39 + }
40 +
41 + .nav-link {
42 + border: $nav-tabs-border-width solid transparent;
43 + @include border-top-radius($nav-tabs-border-radius);
44 +
45 + @include hover-focus {
46 + border-color: $nav-tabs-link-hover-border-color;
47 + }
48 +
49 + &.disabled {
50 + color: $nav-link-disabled-color;
51 + background-color: transparent;
52 + border-color: transparent;
53 + }
54 + }
55 +
56 + .nav-link.active,
57 + .nav-item.show .nav-link {
58 + color: $nav-tabs-link-active-color;
59 + background-color: $nav-tabs-link-active-bg;
60 + border-color: $nav-tabs-link-active-border-color;
61 + }
62 +
63 + .dropdown-menu {
64 + // Make dropdown border overlap tab border
65 + margin-top: -$nav-tabs-border-width;
66 + // Remove the top rounded corners here since there is a hard edge above the menu
67 + @include border-top-radius(0);
68 + }
69 +}
70 +
71 +
72 +//
73 +// Pills
74 +//
75 +
76 +.nav-pills {
77 + .nav-link {
78 + @include border-radius($nav-pills-border-radius);
79 + }
80 +
81 + .nav-link.active,
82 + .show > .nav-link {
83 + color: $nav-pills-link-active-color;
84 + background-color: $nav-pills-link-active-bg;
85 + }
86 +}
87 +
88 +
89 +//
90 +// Justified variants
91 +//
92 +
93 +.nav-fill {
94 + .nav-item {
95 + flex: 1 1 auto;
96 + text-align: center;
97 + }
98 +}
99 +
100 +.nav-justified {
101 + .nav-item {
102 + flex-basis: 0;
103 + flex-grow: 1;
104 + text-align: center;
105 + }
106 +}
107 +
108 +
109 +// Tabbable tabs
110 +//
111 +// Hide tabbable panes to start, show them when `.active`
112 +
113 +.tab-content {
114 + > .tab-pane {
115 + display: none;
116 + }
117 + > .active {
118 + display: block;
119 + }
120 +}
1 +// Contents
2 +//
3 +// Navbar
4 +// Navbar brand
5 +// Navbar nav
6 +// Navbar text
7 +// Navbar divider
8 +// Responsive navbar
9 +// Navbar position
10 +// Navbar themes
11 +
12 +
13 +// Navbar
14 +//
15 +// Provide a static navbar from which we expand to create full-width, fixed, and
16 +// other navbar variations.
17 +
18 +.navbar {
19 + position: relative;
20 + display: flex;
21 + flex-wrap: wrap; // allow us to do the line break for collapsing content
22 + align-items: center;
23 + justify-content: space-between; // space out brand from logo
24 + padding: $navbar-padding-y $navbar-padding-x;
25 +
26 + // Because flex properties aren't inherited, we need to redeclare these first
27 + // few properties so that content nested within behave properly.
28 + > .container,
29 + > .container-fluid {
30 + display: flex;
31 + flex-wrap: wrap;
32 + align-items: center;
33 + justify-content: space-between;
34 + }
35 +}
36 +
37 +
38 +// Navbar brand
39 +//
40 +// Used for brand, project, or site names.
41 +
42 +.navbar-brand {
43 + display: inline-block;
44 + padding-top: $navbar-brand-padding-y;
45 + padding-bottom: $navbar-brand-padding-y;
46 + margin-right: $navbar-padding-x;
47 + @include font-size($navbar-brand-font-size);
48 + line-height: inherit;
49 + white-space: nowrap;
50 +
51 + @include hover-focus {
52 + text-decoration: none;
53 + }
54 +}
55 +
56 +
57 +// Navbar nav
58 +//
59 +// Custom navbar navigation (doesn't require `.nav`, but does make use of `.nav-link`).
60 +
61 +.navbar-nav {
62 + display: flex;
63 + flex-direction: column; // cannot use `inherit` to get the `.navbar`s value
64 + padding-left: 0;
65 + margin-bottom: 0;
66 + list-style: none;
67 +
68 + .nav-link {
69 + padding-right: 0;
70 + padding-left: 0;
71 + }
72 +
73 + .dropdown-menu {
74 + position: static;
75 + float: none;
76 + }
77 +}
78 +
79 +
80 +// Navbar text
81 +//
82 +//
83 +
84 +.navbar-text {
85 + display: inline-block;
86 + padding-top: $nav-link-padding-y;
87 + padding-bottom: $nav-link-padding-y;
88 +}
89 +
90 +
91 +// Responsive navbar
92 +//
93 +// Custom styles for responsive collapsing and toggling of navbar contents.
94 +// Powered by the collapse Bootstrap JavaScript plugin.
95 +
96 +// When collapsed, prevent the toggleable navbar contents from appearing in
97 +// the default flexbox row orientation. Requires the use of `flex-wrap: wrap`
98 +// on the `.navbar` parent.
99 +.navbar-collapse {
100 + flex-basis: 100%;
101 + flex-grow: 1;
102 + // For always expanded or extra full navbars, ensure content aligns itself
103 + // properly vertically. Can be easily overridden with flex utilities.
104 + align-items: center;
105 +}
106 +
107 +// Button for toggling the navbar when in its collapsed state
108 +.navbar-toggler {
109 + padding: $navbar-toggler-padding-y $navbar-toggler-padding-x;
110 + @include font-size($navbar-toggler-font-size);
111 + line-height: 1;
112 + background-color: transparent; // remove default button style
113 + border: $border-width solid transparent; // remove default button style
114 + @include border-radius($navbar-toggler-border-radius);
115 +
116 + @include hover-focus {
117 + text-decoration: none;
118 + }
119 +}
120 +
121 +// Keep as a separate element so folks can easily override it with another icon
122 +// or image file as needed.
123 +.navbar-toggler-icon {
124 + display: inline-block;
125 + width: 1.5em;
126 + height: 1.5em;
127 + vertical-align: middle;
128 + content: "";
129 + background: no-repeat center center;
130 + background-size: 100% 100%;
131 +}
132 +
133 +// Generate series of `.navbar-expand-*` responsive classes for configuring
134 +// where your navbar collapses.
135 +.navbar-expand {
136 + @each $breakpoint in map-keys($grid-breakpoints) {
137 + $next: breakpoint-next($breakpoint, $grid-breakpoints);
138 + $infix: breakpoint-infix($next, $grid-breakpoints);
139 +
140 + &#{$infix} {
141 + @include media-breakpoint-down($breakpoint) {
142 + > .container,
143 + > .container-fluid {
144 + padding-right: 0;
145 + padding-left: 0;
146 + }
147 + }
148 +
149 + @include media-breakpoint-up($next) {
150 + flex-flow: row nowrap;
151 + justify-content: flex-start;
152 +
153 + .navbar-nav {
154 + flex-direction: row;
155 +
156 + .dropdown-menu {
157 + position: absolute;
158 + }
159 +
160 + .nav-link {
161 + padding-right: $navbar-nav-link-padding-x;
162 + padding-left: $navbar-nav-link-padding-x;
163 + }
164 + }
165 +
166 + // For nesting containers, have to redeclare for alignment purposes
167 + > .container,
168 + > .container-fluid {
169 + flex-wrap: nowrap;
170 + }
171 +
172 + .navbar-collapse {
173 + display: flex !important; // stylelint-disable-line declaration-no-important
174 +
175 + // Changes flex-bases to auto because of an IE10 bug
176 + flex-basis: auto;
177 + }
178 +
179 + .navbar-toggler {
180 + display: none;
181 + }
182 + }
183 + }
184 + }
185 +}
186 +
187 +
188 +// Navbar themes
189 +//
190 +// Styles for switching between navbars with light or dark background.
191 +
192 +// Dark links against a light background
193 +.navbar-light {
194 + .navbar-brand {
195 + color: $navbar-light-brand-color;
196 +
197 + @include hover-focus {
198 + color: $navbar-light-brand-hover-color;
199 + }
200 + }
201 +
202 + .navbar-nav {
203 + .nav-link {
204 + color: $navbar-light-color;
205 +
206 + @include hover-focus {
207 + color: $navbar-light-hover-color;
208 + }
209 +
210 + &.disabled {
211 + color: $navbar-light-disabled-color;
212 + }
213 + }
214 +
215 + .show > .nav-link,
216 + .active > .nav-link,
217 + .nav-link.show,
218 + .nav-link.active {
219 + color: $navbar-light-active-color;
220 + }
221 + }
222 +
223 + .navbar-toggler {
224 + color: $navbar-light-color;
225 + border-color: $navbar-light-toggler-border-color;
226 + }
227 +
228 + .navbar-toggler-icon {
229 + background-image: $navbar-light-toggler-icon-bg;
230 + }
231 +
232 + .navbar-text {
233 + color: $navbar-light-color;
234 + a {
235 + color: $navbar-light-active-color;
236 +
237 + @include hover-focus {
238 + color: $navbar-light-active-color;
239 + }
240 + }
241 + }
242 +}
243 +
244 +// White links against a dark background
245 +.navbar-dark {
246 + .navbar-brand {
247 + color: $navbar-dark-brand-color;
248 +
249 + @include hover-focus {
250 + color: $navbar-dark-brand-hover-color;
251 + }
252 + }
253 +
254 + .navbar-nav {
255 + .nav-link {
256 + color: $navbar-dark-color;
257 +
258 + @include hover-focus {
259 + color: $navbar-dark-hover-color;
260 + }
261 +
262 + &.disabled {
263 + color: $navbar-dark-disabled-color;
264 + }
265 + }
266 +
267 + .show > .nav-link,
268 + .active > .nav-link,
269 + .nav-link.show,
270 + .nav-link.active {
271 + color: $navbar-dark-active-color;
272 + }
273 + }
274 +
275 + .navbar-toggler {
276 + color: $navbar-dark-color;
277 + border-color: $navbar-dark-toggler-border-color;
278 + }
279 +
280 + .navbar-toggler-icon {
281 + background-image: $navbar-dark-toggler-icon-bg;
282 + }
283 +
284 + .navbar-text {
285 + color: $navbar-dark-color;
286 + a {
287 + color: $navbar-dark-active-color;
288 +
289 + @include hover-focus {
290 + color: $navbar-dark-active-color;
291 + }
292 + }
293 + }
294 +}
1 +.pagination {
2 + display: flex;
3 + @include list-unstyled();
4 + @include border-radius();
5 +}
6 +
7 +.page-link {
8 + position: relative;
9 + display: block;
10 + padding: $pagination-padding-y $pagination-padding-x;
11 + margin-left: -$pagination-border-width;
12 + line-height: $pagination-line-height;
13 + color: $pagination-color;
14 + background-color: $pagination-bg;
15 + border: $pagination-border-width solid $pagination-border-color;
16 +
17 + &:hover {
18 + z-index: 2;
19 + color: $pagination-hover-color;
20 + text-decoration: none;
21 + background-color: $pagination-hover-bg;
22 + border-color: $pagination-hover-border-color;
23 + }
24 +
25 + &:focus {
26 + z-index: 2;
27 + outline: $pagination-focus-outline;
28 + box-shadow: $pagination-focus-box-shadow;
29 + }
30 +}
31 +
32 +.page-item {
33 + &:first-child {
34 + .page-link {
35 + margin-left: 0;
36 + @include border-left-radius($border-radius);
37 + }
38 + }
39 + &:last-child {
40 + .page-link {
41 + @include border-right-radius($border-radius);
42 + }
43 + }
44 +
45 + &.active .page-link {
46 + z-index: 1;
47 + color: $pagination-active-color;
48 + background-color: $pagination-active-bg;
49 + border-color: $pagination-active-border-color;
50 + }
51 +
52 + &.disabled .page-link {
53 + color: $pagination-disabled-color;
54 + pointer-events: none;
55 + // Opinionated: remove the "hand" cursor set previously for .page-link
56 + cursor: auto;
57 + background-color: $pagination-disabled-bg;
58 + border-color: $pagination-disabled-border-color;
59 + }
60 +}
61 +
62 +
63 +//
64 +// Sizing
65 +//
66 +
67 +.pagination-lg {
68 + @include pagination-size($pagination-padding-y-lg, $pagination-padding-x-lg, $font-size-lg, $line-height-lg, $border-radius-lg);
69 +}
70 +
71 +.pagination-sm {
72 + @include pagination-size($pagination-padding-y-sm, $pagination-padding-x-sm, $font-size-sm, $line-height-sm, $border-radius-sm);
73 +}
1 +.popover {
2 + position: absolute;
3 + top: 0;
4 + left: 0;
5 + z-index: $zindex-popover;
6 + display: block;
7 + max-width: $popover-max-width;
8 + // Our parent element can be arbitrary since tooltips are by default inserted as a sibling of their target element.
9 + // So reset our font and text properties to avoid inheriting weird values.
10 + @include reset-text();
11 + @include font-size($popover-font-size);
12 + // Allow breaking very long words so they don't overflow the popover's bounds
13 + word-wrap: break-word;
14 + background-color: $popover-bg;
15 + background-clip: padding-box;
16 + border: $popover-border-width solid $popover-border-color;
17 + @include border-radius($popover-border-radius);
18 + @include box-shadow($popover-box-shadow);
19 +
20 + .arrow {
21 + position: absolute;
22 + display: block;
23 + width: $popover-arrow-width;
24 + height: $popover-arrow-height;
25 + margin: 0 $border-radius-lg;
26 +
27 + &::before,
28 + &::after {
29 + position: absolute;
30 + display: block;
31 + content: "";
32 + border-color: transparent;
33 + border-style: solid;
34 + }
35 + }
36 +}
37 +
38 +.bs-popover-top {
39 + margin-bottom: $popover-arrow-height;
40 +
41 + > .arrow {
42 + bottom: calc((#{$popover-arrow-height} + #{$popover-border-width}) * -1);
43 +
44 + &::before {
45 + bottom: 0;
46 + border-width: $popover-arrow-height ($popover-arrow-width / 2) 0;
47 + border-top-color: $popover-arrow-outer-color;
48 + }
49 +
50 + &::after {
51 + bottom: $popover-border-width;
52 + border-width: $popover-arrow-height ($popover-arrow-width / 2) 0;
53 + border-top-color: $popover-arrow-color;
54 + }
55 + }
56 +}
57 +
58 +.bs-popover-right {
59 + margin-left: $popover-arrow-height;
60 +
61 + > .arrow {
62 + left: calc((#{$popover-arrow-height} + #{$popover-border-width}) * -1);
63 + width: $popover-arrow-height;
64 + height: $popover-arrow-width;
65 + margin: $border-radius-lg 0; // make sure the arrow does not touch the popover's rounded corners
66 +
67 + &::before {
68 + left: 0;
69 + border-width: ($popover-arrow-width / 2) $popover-arrow-height ($popover-arrow-width / 2) 0;
70 + border-right-color: $popover-arrow-outer-color;
71 + }
72 +
73 + &::after {
74 + left: $popover-border-width;
75 + border-width: ($popover-arrow-width / 2) $popover-arrow-height ($popover-arrow-width / 2) 0;
76 + border-right-color: $popover-arrow-color;
77 + }
78 + }
79 +}
80 +
81 +.bs-popover-bottom {
82 + margin-top: $popover-arrow-height;
83 +
84 + > .arrow {
85 + top: calc((#{$popover-arrow-height} + #{$popover-border-width}) * -1);
86 +
87 + &::before {
88 + top: 0;
89 + border-width: 0 ($popover-arrow-width / 2) $popover-arrow-height ($popover-arrow-width / 2);
90 + border-bottom-color: $popover-arrow-outer-color;
91 + }
92 +
93 + &::after {
94 + top: $popover-border-width;
95 + border-width: 0 ($popover-arrow-width / 2) $popover-arrow-height ($popover-arrow-width / 2);
96 + border-bottom-color: $popover-arrow-color;
97 + }
98 + }
99 +
100 + // This will remove the popover-header's border just below the arrow
101 + .popover-header::before {
102 + position: absolute;
103 + top: 0;
104 + left: 50%;
105 + display: block;
106 + width: $popover-arrow-width;
107 + margin-left: -$popover-arrow-width / 2;
108 + content: "";
109 + border-bottom: $popover-border-width solid $popover-header-bg;
110 + }
111 +}
112 +
113 +.bs-popover-left {
114 + margin-right: $popover-arrow-height;
115 +
116 + > .arrow {
117 + right: calc((#{$popover-arrow-height} + #{$popover-border-width}) * -1);
118 + width: $popover-arrow-height;
119 + height: $popover-arrow-width;
120 + margin: $border-radius-lg 0; // make sure the arrow does not touch the popover's rounded corners
121 +
122 + &::before {
123 + right: 0;
124 + border-width: ($popover-arrow-width / 2) 0 ($popover-arrow-width / 2) $popover-arrow-height;
125 + border-left-color: $popover-arrow-outer-color;
126 + }
127 +
128 + &::after {
129 + right: $popover-border-width;
130 + border-width: ($popover-arrow-width / 2) 0 ($popover-arrow-width / 2) $popover-arrow-height;
131 + border-left-color: $popover-arrow-color;
132 + }
133 + }
134 +}
135 +
136 +.bs-popover-auto {
137 + &[x-placement^="top"] {
138 + @extend .bs-popover-top;
139 + }
140 + &[x-placement^="right"] {
141 + @extend .bs-popover-right;
142 + }
143 + &[x-placement^="bottom"] {
144 + @extend .bs-popover-bottom;
145 + }
146 + &[x-placement^="left"] {
147 + @extend .bs-popover-left;
148 + }
149 +}
150 +
151 +
152 +// Offset the popover to account for the popover arrow
153 +.popover-header {
154 + padding: $popover-header-padding-y $popover-header-padding-x;
155 + margin-bottom: 0; // Reset the default from Reboot
156 + @include font-size($font-size-base);
157 + color: $popover-header-color;
158 + background-color: $popover-header-bg;
159 + border-bottom: $popover-border-width solid darken($popover-header-bg, 5%);
160 + $offset-border-width: calc(#{$border-radius-lg} - #{$popover-border-width});
161 + @include border-top-radius($offset-border-width);
162 +
163 + &:empty {
164 + display: none;
165 + }
166 +}
167 +
168 +.popover-body {
169 + padding: $popover-body-padding-y $popover-body-padding-x;
170 + color: $popover-body-color;
171 +}
1 +// stylelint-disable declaration-no-important, selector-no-qualifying-type
2 +
3 +// Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css
4 +
5 +// ==========================================================================
6 +// Print styles.
7 +// Inlined to avoid the additional HTTP request:
8 +// https://www.phpied.com/delay-loading-your-print-css/
9 +// ==========================================================================
10 +
11 +@if $enable-print-styles {
12 + @media print {
13 + *,
14 + *::before,
15 + *::after {
16 + // Bootstrap specific; comment out `color` and `background`
17 + //color: $black !important; // Black prints faster
18 + text-shadow: none !important;
19 + //background: transparent !important;
20 + box-shadow: none !important;
21 + }
22 +
23 + a {
24 + &:not(.btn) {
25 + text-decoration: underline;
26 + }
27 + }
28 +
29 + // Bootstrap specific; comment the following selector out
30 + //a[href]::after {
31 + // content: " (" attr(href) ")";
32 + //}
33 +
34 + abbr[title]::after {
35 + content: " (" attr(title) ")";
36 + }
37 +
38 + // Bootstrap specific; comment the following selector out
39 + //
40 + // Don't show links that are fragment identifiers,
41 + // or use the `javascript:` pseudo protocol
42 + //
43 +
44 + //a[href^="#"]::after,
45 + //a[href^="javascript:"]::after {
46 + // content: "";
47 + //}
48 +
49 + pre {
50 + white-space: pre-wrap !important;
51 + }
52 + pre,
53 + blockquote {
54 + border: $border-width solid $gray-500; // Bootstrap custom code; using `$border-width` instead of 1px
55 + page-break-inside: avoid;
56 + }
57 +
58 + //
59 + // Printing Tables:
60 + // http://css-discuss.incutio.com/wiki/Printing_Tables
61 + //
62 +
63 + thead {
64 + display: table-header-group;
65 + }
66 +
67 + tr,
68 + img {
69 + page-break-inside: avoid;
70 + }
71 +
72 + p,
73 + h2,
74 + h3 {
75 + orphans: 3;
76 + widows: 3;
77 + }
78 +
79 + h2,
80 + h3 {
81 + page-break-after: avoid;
82 + }
83 +
84 + // Bootstrap specific changes start
85 +
86 + // Specify a size and min-width to make printing closer across browsers.
87 + // We don't set margin here because it breaks `size` in Chrome. We also
88 + // don't use `!important` on `size` as it breaks in Chrome.
89 + @page {
90 + size: $print-page-size;
91 + }
92 + body {
93 + min-width: $print-body-min-width !important;
94 + }
95 + .container {
96 + min-width: $print-body-min-width !important;
97 + }
98 +
99 + // Bootstrap components
100 + .navbar {
101 + display: none;
102 + }
103 + .badge {
104 + border: $border-width solid $black;
105 + }
106 +
107 + .table {
108 + border-collapse: collapse !important;
109 +
110 + td,
111 + th {
112 + background-color: $white !important;
113 + }
114 + }
115 +
116 + .table-bordered {
117 + th,
118 + td {
119 + border: 1px solid $gray-300 !important;
120 + }
121 + }
122 +
123 + .table-dark {
124 + color: inherit;
125 +
126 + th,
127 + td,
128 + thead th,
129 + tbody + tbody {
130 + border-color: $table-border-color;
131 + }
132 + }
133 +
134 + .table .thead-dark th {
135 + color: inherit;
136 + border-color: $table-border-color;
137 + }
138 +
139 + // Bootstrap specific changes end
140 + }
141 +}
1 +// Disable animation if transitions are disabled
2 +@if $enable-transitions {
3 + @keyframes progress-bar-stripes {
4 + from { background-position: $progress-height 0; }
5 + to { background-position: 0 0; }
6 + }
7 +}
8 +
9 +.progress {
10 + display: flex;
11 + height: $progress-height;
12 + overflow: hidden; // force rounded corners by cropping it
13 + @include font-size($progress-font-size);
14 + background-color: $progress-bg;
15 + @include border-radius($progress-border-radius);
16 + @include box-shadow($progress-box-shadow);
17 +}
18 +
19 +.progress-bar {
20 + display: flex;
21 + flex-direction: column;
22 + justify-content: center;
23 + color: $progress-bar-color;
24 + text-align: center;
25 + white-space: nowrap;
26 + background-color: $progress-bar-bg;
27 + @include transition($progress-bar-transition);
28 +}
29 +
30 +.progress-bar-striped {
31 + @include gradient-striped();
32 + background-size: $progress-height $progress-height;
33 +}
34 +
35 +@if $enable-transitions {
36 + .progress-bar-animated {
37 + animation: progress-bar-stripes $progress-bar-animation-timing;
38 +
39 + @media (prefers-reduced-motion: reduce) {
40 + animation: none;
41 + }
42 + }
43 +}
This diff is collapsed. Click to expand it.
1 +:root {
2 + // Custom variable values only support SassScript inside `#{}`.
3 + @each $color, $value in $colors {
4 + --#{$color}: #{$value};
5 + }
6 +
7 + @each $color, $value in $theme-colors {
8 + --#{$color}: #{$value};
9 + }
10 +
11 + @each $bp, $value in $grid-breakpoints {
12 + --breakpoint-#{$bp}: #{$value};
13 + }
14 +
15 + // Use `inspect` for lists so that quoted items keep the quotes.
16 + // See https://github.com/sass/sass/issues/2383#issuecomment-336349172
17 + --font-family-sans-serif: #{inspect($font-family-sans-serif)};
18 + --font-family-monospace: #{inspect($font-family-monospace)};
19 +}
1 +//
2 +// Rotating border
3 +//
4 +
5 +@keyframes spinner-border {
6 + to { transform: rotate(360deg); }
7 +}
8 +
9 +.spinner-border {
10 + display: inline-block;
11 + width: $spinner-width;
12 + height: $spinner-height;
13 + vertical-align: text-bottom;
14 + border: $spinner-border-width solid currentColor;
15 + border-right-color: transparent;
16 + // stylelint-disable-next-line property-blacklist
17 + border-radius: 50%;
18 + animation: spinner-border .75s linear infinite;
19 +}
20 +
21 +.spinner-border-sm {
22 + width: $spinner-width-sm;
23 + height: $spinner-height-sm;
24 + border-width: $spinner-border-width-sm;
25 +}
26 +
27 +//
28 +// Growing circle
29 +//
30 +
31 +@keyframes spinner-grow {
32 + 0% {
33 + transform: scale(0);
34 + }
35 + 50% {
36 + opacity: 1;
37 + }
38 +}
39 +
40 +.spinner-grow {
41 + display: inline-block;
42 + width: $spinner-width;
43 + height: $spinner-height;
44 + vertical-align: text-bottom;
45 + background-color: currentColor;
46 + // stylelint-disable-next-line property-blacklist
47 + border-radius: 50%;
48 + opacity: 0;
49 + animation: spinner-grow .75s linear infinite;
50 +}
51 +
52 +.spinner-grow-sm {
53 + width: $spinner-width-sm;
54 + height: $spinner-height-sm;
55 +}
1 +//
2 +// Basic Bootstrap table
3 +//
4 +
5 +.table {
6 + width: 100%;
7 + margin-bottom: $spacer;
8 + color: $table-color;
9 + background-color: $table-bg; // Reset for nesting within parents with `background-color`.
10 +
11 + th,
12 + td {
13 + padding: $table-cell-padding;
14 + vertical-align: top;
15 + border-top: $table-border-width solid $table-border-color;
16 + }
17 +
18 + thead th {
19 + vertical-align: bottom;
20 + border-bottom: (2 * $table-border-width) solid $table-border-color;
21 + }
22 +
23 + tbody + tbody {
24 + border-top: (2 * $table-border-width) solid $table-border-color;
25 + }
26 +}
27 +
28 +
29 +//
30 +// Condensed table w/ half padding
31 +//
32 +
33 +.table-sm {
34 + th,
35 + td {
36 + padding: $table-cell-padding-sm;
37 + }
38 +}
39 +
40 +
41 +// Border versions
42 +//
43 +// Add or remove borders all around the table and between all the columns.
44 +
45 +.table-bordered {
46 + border: $table-border-width solid $table-border-color;
47 +
48 + th,
49 + td {
50 + border: $table-border-width solid $table-border-color;
51 + }
52 +
53 + thead {
54 + th,
55 + td {
56 + border-bottom-width: 2 * $table-border-width;
57 + }
58 + }
59 +}
60 +
61 +.table-borderless {
62 + th,
63 + td,
64 + thead th,
65 + tbody + tbody {
66 + border: 0;
67 + }
68 +}
69 +
70 +// Zebra-striping
71 +//
72 +// Default zebra-stripe styles (alternating gray and transparent backgrounds)
73 +
74 +.table-striped {
75 + tbody tr:nth-of-type(#{$table-striped-order}) {
76 + background-color: $table-accent-bg;
77 + }
78 +}
79 +
80 +
81 +// Hover effect
82 +//
83 +// Placed here since it has to come after the potential zebra striping
84 +
85 +.table-hover {
86 + tbody tr {
87 + @include hover {
88 + color: $table-hover-color;
89 + background-color: $table-hover-bg;
90 + }
91 + }
92 +}
93 +
94 +
95 +// Table backgrounds
96 +//
97 +// Exact selectors below required to override `.table-striped` and prevent
98 +// inheritance to nested tables.
99 +
100 +@each $color, $value in $theme-colors {
101 + @include table-row-variant($color, theme-color-level($color, $table-bg-level), theme-color-level($color, $table-border-level));
102 +}
103 +
104 +@include table-row-variant(active, $table-active-bg);
105 +
106 +
107 +// Dark styles
108 +//
109 +// Same table markup, but inverted color scheme: dark background and light text.
110 +
111 +// stylelint-disable-next-line no-duplicate-selectors
112 +.table {
113 + .thead-dark {
114 + th {
115 + color: $table-dark-color;
116 + background-color: $table-dark-bg;
117 + border-color: $table-dark-border-color;
118 + }
119 + }
120 +
121 + .thead-light {
122 + th {
123 + color: $table-head-color;
124 + background-color: $table-head-bg;
125 + border-color: $table-border-color;
126 + }
127 + }
128 +}
129 +
130 +.table-dark {
131 + color: $table-dark-color;
132 + background-color: $table-dark-bg;
133 +
134 + th,
135 + td,
136 + thead th {
137 + border-color: $table-dark-border-color;
138 + }
139 +
140 + &.table-bordered {
141 + border: 0;
142 + }
143 +
144 + &.table-striped {
145 + tbody tr:nth-of-type(odd) {
146 + background-color: $table-dark-accent-bg;
147 + }
148 + }
149 +
150 + &.table-hover {
151 + tbody tr {
152 + @include hover {
153 + color: $table-dark-hover-color;
154 + background-color: $table-dark-hover-bg;
155 + }
156 + }
157 + }
158 +}
159 +
160 +
161 +// Responsive tables
162 +//
163 +// Generate series of `.table-responsive-*` classes for configuring the screen
164 +// size of where your table will overflow.
165 +
166 +.table-responsive {
167 + @each $breakpoint in map-keys($grid-breakpoints) {
168 + $next: breakpoint-next($breakpoint, $grid-breakpoints);
169 + $infix: breakpoint-infix($next, $grid-breakpoints);
170 +
171 + &#{$infix} {
172 + @include media-breakpoint-down($breakpoint) {
173 + display: block;
174 + width: 100%;
175 + overflow-x: auto;
176 + -webkit-overflow-scrolling: touch;
177 +
178 + // Prevent double border on horizontal scroll due to use of `display: block;`
179 + > .table-bordered {
180 + border: 0;
181 + }
182 + }
183 + }
184 + }
185 +}
1 +.toast {
2 + max-width: $toast-max-width;
3 + overflow: hidden; // cheap rounded corners on nested items
4 + @include font-size($toast-font-size);
5 + color: $toast-color;
6 + background-color: $toast-background-color;
7 + background-clip: padding-box;
8 + border: $toast-border-width solid $toast-border-color;
9 + box-shadow: $toast-box-shadow;
10 + backdrop-filter: blur(10px);
11 + opacity: 0;
12 + @include border-radius($toast-border-radius);
13 +
14 + &:not(:last-child) {
15 + margin-bottom: $toast-padding-x;
16 + }
17 +
18 + &.showing {
19 + opacity: 1;
20 + }
21 +
22 + &.show {
23 + display: block;
24 + opacity: 1;
25 + }
26 +
27 + &.hide {
28 + display: none;
29 + }
30 +}
31 +
32 +.toast-header {
33 + display: flex;
34 + align-items: center;
35 + padding: $toast-padding-y $toast-padding-x;
36 + color: $toast-header-color;
37 + background-color: $toast-header-background-color;
38 + background-clip: padding-box;
39 + border-bottom: $toast-border-width solid $toast-header-border-color;
40 +}
41 +
42 +.toast-body {
43 + padding: $toast-padding-x; // apply to both vertical and horizontal
44 +}
1 +// Base class
2 +.tooltip {
3 + position: absolute;
4 + z-index: $zindex-tooltip;
5 + display: block;
6 + margin: $tooltip-margin;
7 + // Our parent element can be arbitrary since tooltips are by default inserted as a sibling of their target element.
8 + // So reset our font and text properties to avoid inheriting weird values.
9 + @include reset-text();
10 + @include font-size($tooltip-font-size);
11 + // Allow breaking very long words so they don't overflow the tooltip's bounds
12 + word-wrap: break-word;
13 + opacity: 0;
14 +
15 + &.show { opacity: $tooltip-opacity; }
16 +
17 + .arrow {
18 + position: absolute;
19 + display: block;
20 + width: $tooltip-arrow-width;
21 + height: $tooltip-arrow-height;
22 +
23 + &::before {
24 + position: absolute;
25 + content: "";
26 + border-color: transparent;
27 + border-style: solid;
28 + }
29 + }
30 +}
31 +
32 +.bs-tooltip-top {
33 + padding: $tooltip-arrow-height 0;
34 +
35 + .arrow {
36 + bottom: 0;
37 +
38 + &::before {
39 + top: 0;
40 + border-width: $tooltip-arrow-height ($tooltip-arrow-width / 2) 0;
41 + border-top-color: $tooltip-arrow-color;
42 + }
43 + }
44 +}
45 +
46 +.bs-tooltip-right {
47 + padding: 0 $tooltip-arrow-height;
48 +
49 + .arrow {
50 + left: 0;
51 + width: $tooltip-arrow-height;
52 + height: $tooltip-arrow-width;
53 +
54 + &::before {
55 + right: 0;
56 + border-width: ($tooltip-arrow-width / 2) $tooltip-arrow-height ($tooltip-arrow-width / 2) 0;
57 + border-right-color: $tooltip-arrow-color;
58 + }
59 + }
60 +}
61 +
62 +.bs-tooltip-bottom {
63 + padding: $tooltip-arrow-height 0;
64 +
65 + .arrow {
66 + top: 0;
67 +
68 + &::before {
69 + bottom: 0;
70 + border-width: 0 ($tooltip-arrow-width / 2) $tooltip-arrow-height;
71 + border-bottom-color: $tooltip-arrow-color;
72 + }
73 + }
74 +}
75 +
76 +.bs-tooltip-left {
77 + padding: 0 $tooltip-arrow-height;
78 +
79 + .arrow {
80 + right: 0;
81 + width: $tooltip-arrow-height;
82 + height: $tooltip-arrow-width;
83 +
84 + &::before {
85 + left: 0;
86 + border-width: ($tooltip-arrow-width / 2) 0 ($tooltip-arrow-width / 2) $tooltip-arrow-height;
87 + border-left-color: $tooltip-arrow-color;
88 + }
89 + }
90 +}
91 +
92 +.bs-tooltip-auto {
93 + &[x-placement^="top"] {
94 + @extend .bs-tooltip-top;
95 + }
96 + &[x-placement^="right"] {
97 + @extend .bs-tooltip-right;
98 + }
99 + &[x-placement^="bottom"] {
100 + @extend .bs-tooltip-bottom;
101 + }
102 + &[x-placement^="left"] {
103 + @extend .bs-tooltip-left;
104 + }
105 +}
106 +
107 +// Wrapper for the tooltip content
108 +.tooltip-inner {
109 + max-width: $tooltip-max-width;
110 + padding: $tooltip-padding-y $tooltip-padding-x;
111 + color: $tooltip-color;
112 + text-align: center;
113 + background-color: $tooltip-bg;
114 + @include border-radius($tooltip-border-radius);
115 +}
1 +.fade {
2 + @include transition($transition-fade);
3 +
4 + &:not(.show) {
5 + opacity: 0;
6 + }
7 +}
8 +
9 +.collapse {
10 + &:not(.show) {
11 + display: none;
12 + }
13 +}
14 +
15 +.collapsing {
16 + position: relative;
17 + height: 0;
18 + overflow: hidden;
19 + @include transition($transition-collapse);
20 +}
1 +// stylelint-disable declaration-no-important, selector-list-comma-newline-after
2 +
3 +//
4 +// Headings
5 +//
6 +
7 +h1, h2, h3, h4, h5, h6,
8 +.h1, .h2, .h3, .h4, .h5, .h6 {
9 + margin-bottom: $headings-margin-bottom;
10 + font-family: $headings-font-family;
11 + font-weight: $headings-font-weight;
12 + line-height: $headings-line-height;
13 + color: $headings-color;
14 +}
15 +
16 +h1, .h1 { @include font-size($h1-font-size); }
17 +h2, .h2 { @include font-size($h2-font-size); }
18 +h3, .h3 { @include font-size($h3-font-size); }
19 +h4, .h4 { @include font-size($h4-font-size); }
20 +h5, .h5 { @include font-size($h5-font-size); }
21 +h6, .h6 { @include font-size($h6-font-size); }
22 +
23 +.lead {
24 + @include font-size($lead-font-size);
25 + font-weight: $lead-font-weight;
26 +}
27 +
28 +// Type display classes
29 +.display-1 {
30 + @include font-size($display1-size);
31 + font-weight: $display1-weight;
32 + line-height: $display-line-height;
33 +}
34 +.display-2 {
35 + @include font-size($display2-size);
36 + font-weight: $display2-weight;
37 + line-height: $display-line-height;
38 +}
39 +.display-3 {
40 + @include font-size($display3-size);
41 + font-weight: $display3-weight;
42 + line-height: $display-line-height;
43 +}
44 +.display-4 {
45 + @include font-size($display4-size);
46 + font-weight: $display4-weight;
47 + line-height: $display-line-height;
48 +}
49 +
50 +
51 +//
52 +// Horizontal rules
53 +//
54 +
55 +hr {
56 + margin-top: $hr-margin-y;
57 + margin-bottom: $hr-margin-y;
58 + border: 0;
59 + border-top: $hr-border-width solid $hr-border-color;
60 +}
61 +
62 +
63 +//
64 +// Emphasis
65 +//
66 +
67 +small,
68 +.small {
69 + @include font-size($small-font-size);
70 + font-weight: $font-weight-normal;
71 +}
72 +
73 +mark,
74 +.mark {
75 + padding: $mark-padding;
76 + background-color: $mark-bg;
77 +}
78 +
79 +
80 +//
81 +// Lists
82 +//
83 +
84 +.list-unstyled {
85 + @include list-unstyled;
86 +}
87 +
88 +// Inline turns list items into inline-block
89 +.list-inline {
90 + @include list-unstyled;
91 +}
92 +.list-inline-item {
93 + display: inline-block;
94 +
95 + &:not(:last-child) {
96 + margin-right: $list-inline-padding;
97 + }
98 +}
99 +
100 +
101 +//
102 +// Misc
103 +//
104 +
105 +// Builds on `abbr`
106 +.initialism {
107 + @include font-size(90%);
108 + text-transform: uppercase;
109 +}
110 +
111 +// Blockquotes
112 +.blockquote {
113 + margin-bottom: $spacer;
114 + @include font-size($blockquote-font-size);
115 +}
116 +
117 +.blockquote-footer {
118 + display: block;
119 + @include font-size($blockquote-small-font-size);
120 + color: $blockquote-small-color;
121 +
122 + &::before {
123 + content: "\2014\00A0"; // em dash, nbsp
124 + }
125 +}
1 +@import "utilities/align";
2 +@import "utilities/background";
3 +@import "utilities/borders";
4 +@import "utilities/clearfix";
5 +@import "utilities/display";
6 +@import "utilities/embed";
7 +@import "utilities/flex";
8 +@import "utilities/float";
9 +@import "utilities/overflow";
10 +@import "utilities/position";
11 +@import "utilities/screenreaders";
12 +@import "utilities/shadows";
13 +@import "utilities/sizing";
14 +@import "utilities/stretched-link";
15 +@import "utilities/spacing";
16 +@import "utilities/text";
17 +@import "utilities/visibility";
This diff is collapsed. Click to expand it.
1 +/*!
2 + * Bootstrap Grid v4.3.1 (https://getbootstrap.com/)
3 + * Copyright 2011-2019 The Bootstrap Authors
4 + * Copyright 2011-2019 Twitter, Inc.
5 + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
6 + */
7 +
8 +html {
9 + box-sizing: border-box;
10 + -ms-overflow-style: scrollbar;
11 +}
12 +
13 +*,
14 +*::before,
15 +*::after {
16 + box-sizing: inherit;
17 +}
18 +
19 +@import "functions";
20 +@import "variables";
21 +
22 +@import "mixins/breakpoints";
23 +@import "mixins/grid-framework";
24 +@import "mixins/grid";
25 +
26 +@import "grid";
27 +@import "utilities/display";
28 +@import "utilities/flex";
29 +@import "utilities/spacing";
1 +/*!
2 + * Bootstrap Reboot v4.3.1 (https://getbootstrap.com/)
3 + * Copyright 2011-2019 The Bootstrap Authors
4 + * Copyright 2011-2019 Twitter, Inc.
5 + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
6 + * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md)
7 + */
8 +
9 +@import "functions";
10 +@import "variables";
11 +@import "mixins";
12 +@import "reboot";
1 +/*!
2 + * Bootstrap v4.3.1 (https://getbootstrap.com/)
3 + * Copyright 2011-2019 The Bootstrap Authors
4 + * Copyright 2011-2019 Twitter, Inc.
5 + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
6 + */
7 +
8 +@import "functions";
9 +@import "variables";
10 +@import "mixins";
11 +@import "root";
12 +@import "reboot";
13 +@import "type";
14 +@import "images";
15 +@import "code";
16 +@import "grid";
17 +@import "tables";
18 +@import "forms";
19 +@import "buttons";
20 +@import "transitions";
21 +@import "dropdown";
22 +@import "button-group";
23 +@import "input-group";
24 +@import "custom-forms";
25 +@import "nav";
26 +@import "navbar";
27 +@import "card";
28 +@import "breadcrumb";
29 +@import "pagination";
30 +@import "badge";
31 +@import "jumbotron";
32 +@import "alert";
33 +@import "progress";
34 +@import "media";
35 +@import "list-group";
36 +@import "close";
37 +@import "toasts";
38 +@import "modal";
39 +@import "tooltip";
40 +@import "popover";
41 +@import "carousel";
42 +@import "spinners";
43 +@import "utilities";
44 +@import "print";
1 +@mixin alert-variant($background, $border, $color) {
2 + color: $color;
3 + @include gradient-bg($background);
4 + border-color: $border;
5 +
6 + hr {
7 + border-top-color: darken($border, 5%);
8 + }
9 +
10 + .alert-link {
11 + color: darken($color, 10%);
12 + }
13 +}
1 +// stylelint-disable declaration-no-important
2 +
3 +// Contextual backgrounds
4 +
5 +@mixin bg-variant($parent, $color) {
6 + #{$parent} {
7 + background-color: $color !important;
8 + }
9 + a#{$parent},
10 + button#{$parent} {
11 + @include hover-focus {
12 + background-color: darken($color, 10%) !important;
13 + }
14 + }
15 +}
16 +
17 +@mixin bg-gradient-variant($parent, $color) {
18 + #{$parent} {
19 + background: $color linear-gradient(180deg, mix($body-bg, $color, 15%), $color) repeat-x !important;
20 + }
21 +}
1 +@mixin badge-variant($bg) {
2 + color: color-yiq($bg);
3 + background-color: $bg;
4 +
5 + @at-root a#{&} {
6 + @include hover-focus {
7 + color: color-yiq($bg);
8 + background-color: darken($bg, 10%);
9 + }
10 +
11 + &:focus,
12 + &.focus {
13 + outline: 0;
14 + box-shadow: 0 0 0 $badge-focus-width rgba($bg, .5);
15 + }
16 + }
17 +}
1 +// stylelint-disable property-blacklist
2 +// Single side border-radius
3 +
4 +@mixin border-radius($radius: $border-radius, $fallback-border-radius: false) {
5 + @if $enable-rounded {
6 + border-radius: $radius;
7 + }
8 + @else if $fallback-border-radius != false {
9 + border-radius: $fallback-border-radius;
10 + }
11 +}
12 +
13 +@mixin border-top-radius($radius) {
14 + @if $enable-rounded {
15 + border-top-left-radius: $radius;
16 + border-top-right-radius: $radius;
17 + }
18 +}
19 +
20 +@mixin border-right-radius($radius) {
21 + @if $enable-rounded {
22 + border-top-right-radius: $radius;
23 + border-bottom-right-radius: $radius;
24 + }
25 +}
26 +
27 +@mixin border-bottom-radius($radius) {
28 + @if $enable-rounded {
29 + border-bottom-right-radius: $radius;
30 + border-bottom-left-radius: $radius;
31 + }
32 +}
33 +
34 +@mixin border-left-radius($radius) {
35 + @if $enable-rounded {
36 + border-top-left-radius: $radius;
37 + border-bottom-left-radius: $radius;
38 + }
39 +}
40 +
41 +@mixin border-top-left-radius($radius) {
42 + @if $enable-rounded {
43 + border-top-left-radius: $radius;
44 + }
45 +}
46 +
47 +@mixin border-top-right-radius($radius) {
48 + @if $enable-rounded {
49 + border-top-right-radius: $radius;
50 + }
51 +}
52 +
53 +@mixin border-bottom-right-radius($radius) {
54 + @if $enable-rounded {
55 + border-bottom-right-radius: $radius;
56 + }
57 +}
58 +
59 +@mixin border-bottom-left-radius($radius) {
60 + @if $enable-rounded {
61 + border-bottom-left-radius: $radius;
62 + }
63 +}
1 +@mixin box-shadow($shadow...) {
2 + @if $enable-shadows {
3 + $result: ();
4 +
5 + @if (length($shadow) == 1) {
6 + // We can pass `@include box-shadow(none);`
7 + $result: $shadow;
8 + } @else {
9 + // Filter to avoid invalid properties for example `box-shadow: none, 1px 1px black;`
10 + @for $i from 1 through length($shadow) {
11 + @if nth($shadow, $i) != "none" {
12 + $result: append($result, nth($shadow, $i), "comma");
13 + }
14 + }
15 + }
16 + @if (length($result) > 0) {
17 + box-shadow: $result;
18 + }
19 + }
20 +}
1 +// Breakpoint viewport sizes and media queries.
2 +//
3 +// Breakpoints are defined as a map of (name: minimum width), order from small to large:
4 +//
5 +// (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px)
6 +//
7 +// The map defined in the `$grid-breakpoints` global variable is used as the `$breakpoints` argument by default.
8 +
9 +// Name of the next breakpoint, or null for the last breakpoint.
10 +//
11 +// >> breakpoint-next(sm)
12 +// md
13 +// >> breakpoint-next(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))
14 +// md
15 +// >> breakpoint-next(sm, $breakpoint-names: (xs sm md lg xl))
16 +// md
17 +@function breakpoint-next($name, $breakpoints: $grid-breakpoints, $breakpoint-names: map-keys($breakpoints)) {
18 + $n: index($breakpoint-names, $name);
19 + @return if($n != null and $n < length($breakpoint-names), nth($breakpoint-names, $n + 1), null);
20 +}
21 +
22 +// Minimum breakpoint width. Null for the smallest (first) breakpoint.
23 +//
24 +// >> breakpoint-min(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))
25 +// 576px
26 +@function breakpoint-min($name, $breakpoints: $grid-breakpoints) {
27 + $min: map-get($breakpoints, $name);
28 + @return if($min != 0, $min, null);
29 +}
30 +
31 +// Maximum breakpoint width. Null for the largest (last) breakpoint.
32 +// The maximum value is calculated as the minimum of the next one less 0.02px
33 +// to work around the limitations of `min-` and `max-` prefixes and viewports with fractional widths.
34 +// See https://www.w3.org/TR/mediaqueries-4/#mq-min-max
35 +// Uses 0.02px rather than 0.01px to work around a current rounding bug in Safari.
36 +// See https://bugs.webkit.org/show_bug.cgi?id=178261
37 +//
38 +// >> breakpoint-max(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))
39 +// 767.98px
40 +@function breakpoint-max($name, $breakpoints: $grid-breakpoints) {
41 + $next: breakpoint-next($name, $breakpoints);
42 + @return if($next, breakpoint-min($next, $breakpoints) - .02, null);
43 +}
44 +
45 +// Returns a blank string if smallest breakpoint, otherwise returns the name with a dash in front.
46 +// Useful for making responsive utilities.
47 +//
48 +// >> breakpoint-infix(xs, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))
49 +// "" (Returns a blank string)
50 +// >> breakpoint-infix(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))
51 +// "-sm"
52 +@function breakpoint-infix($name, $breakpoints: $grid-breakpoints) {
53 + @return if(breakpoint-min($name, $breakpoints) == null, "", "-#{$name}");
54 +}
55 +
56 +// Media of at least the minimum breakpoint width. No query for the smallest breakpoint.
57 +// Makes the @content apply to the given breakpoint and wider.
58 +@mixin media-breakpoint-up($name, $breakpoints: $grid-breakpoints) {
59 + $min: breakpoint-min($name, $breakpoints);
60 + @if $min {
61 + @media (min-width: $min) {
62 + @content;
63 + }
64 + } @else {
65 + @content;
66 + }
67 +}
68 +
69 +// Media of at most the maximum breakpoint width. No query for the largest breakpoint.
70 +// Makes the @content apply to the given breakpoint and narrower.
71 +@mixin media-breakpoint-down($name, $breakpoints: $grid-breakpoints) {
72 + $max: breakpoint-max($name, $breakpoints);
73 + @if $max {
74 + @media (max-width: $max) {
75 + @content;
76 + }
77 + } @else {
78 + @content;
79 + }
80 +}
81 +
82 +// Media that spans multiple breakpoint widths.
83 +// Makes the @content apply between the min and max breakpoints
84 +@mixin media-breakpoint-between($lower, $upper, $breakpoints: $grid-breakpoints) {
85 + $min: breakpoint-min($lower, $breakpoints);
86 + $max: breakpoint-max($upper, $breakpoints);
87 +
88 + @if $min != null and $max != null {
89 + @media (min-width: $min) and (max-width: $max) {
90 + @content;
91 + }
92 + } @else if $max == null {
93 + @include media-breakpoint-up($lower, $breakpoints) {
94 + @content;
95 + }
96 + } @else if $min == null {
97 + @include media-breakpoint-down($upper, $breakpoints) {
98 + @content;
99 + }
100 + }
101 +}
102 +
103 +// Media between the breakpoint's minimum and maximum widths.
104 +// No minimum for the smallest breakpoint, and no maximum for the largest one.
105 +// Makes the @content apply only to the given breakpoint, not viewports any wider or narrower.
106 +@mixin media-breakpoint-only($name, $breakpoints: $grid-breakpoints) {
107 + $min: breakpoint-min($name, $breakpoints);
108 + $max: breakpoint-max($name, $breakpoints);
109 +
110 + @if $min != null and $max != null {
111 + @media (min-width: $min) and (max-width: $max) {
112 + @content;
113 + }
114 + } @else if $max == null {
115 + @include media-breakpoint-up($name, $breakpoints) {
116 + @content;
117 + }
118 + } @else if $min == null {
119 + @include media-breakpoint-down($name, $breakpoints) {
120 + @content;
121 + }
122 + }
123 +}
1 +// Button variants
2 +//
3 +// Easily pump out default styles, as well as :hover, :focus, :active,
4 +// and disabled options for all buttons
5 +
6 +@mixin button-variant($background, $border, $hover-background: darken($background, 7.5%), $hover-border: darken($border, 10%), $active-background: darken($background, 10%), $active-border: darken($border, 12.5%)) {
7 + color: color-yiq($background);
8 + @include gradient-bg($background);
9 + border-color: $border;
10 + @include box-shadow($btn-box-shadow);
11 +
12 + @include hover {
13 + color: color-yiq($hover-background);
14 + @include gradient-bg($hover-background);
15 + border-color: $hover-border;
16 + }
17 +
18 + &:focus,
19 + &.focus {
20 + // Avoid using mixin so we can pass custom focus shadow properly
21 + @if $enable-shadows {
22 + box-shadow: $btn-box-shadow, 0 0 0 $btn-focus-width rgba(mix(color-yiq($background), $border, 15%), .5);
23 + } @else {
24 + box-shadow: 0 0 0 $btn-focus-width rgba(mix(color-yiq($background), $border, 15%), .5);
25 + }
26 + }
27 +
28 + // Disabled comes first so active can properly restyle
29 + &.disabled,
30 + &:disabled {
31 + color: color-yiq($background);
32 + background-color: $background;
33 + border-color: $border;
34 + // Remove CSS gradients if they're enabled
35 + @if $enable-gradients {
36 + background-image: none;
37 + }
38 + }
39 +
40 + &:not(:disabled):not(.disabled):active,
41 + &:not(:disabled):not(.disabled).active,
42 + .show > &.dropdown-toggle {
43 + color: color-yiq($active-background);
44 + background-color: $active-background;
45 + @if $enable-gradients {
46 + background-image: none; // Remove the gradient for the pressed/active state
47 + }
48 + border-color: $active-border;
49 +
50 + &:focus {
51 + // Avoid using mixin so we can pass custom focus shadow properly
52 + @if $enable-shadows and $btn-active-box-shadow != none {
53 + box-shadow: $btn-active-box-shadow, 0 0 0 $btn-focus-width rgba(mix(color-yiq($background), $border, 15%), .5);
54 + } @else {
55 + box-shadow: 0 0 0 $btn-focus-width rgba(mix(color-yiq($background), $border, 15%), .5);
56 + }
57 + }
58 + }
59 +}
60 +
61 +@mixin button-outline-variant($color, $color-hover: color-yiq($color), $active-background: $color, $active-border: $color) {
62 + color: $color;
63 + border-color: $color;
64 +
65 + @include hover {
66 + color: $color-hover;
67 + background-color: $active-background;
68 + border-color: $active-border;
69 + }
70 +
71 + &:focus,
72 + &.focus {
73 + box-shadow: 0 0 0 $btn-focus-width rgba($color, .5);
74 + }
75 +
76 + &.disabled,
77 + &:disabled {
78 + color: $color;
79 + background-color: transparent;
80 + }
81 +
82 + &:not(:disabled):not(.disabled):active,
83 + &:not(:disabled):not(.disabled).active,
84 + .show > &.dropdown-toggle {
85 + color: color-yiq($active-background);
86 + background-color: $active-background;
87 + border-color: $active-border;
88 +
89 + &:focus {
90 + // Avoid using mixin so we can pass custom focus shadow properly
91 + @if $enable-shadows and $btn-active-box-shadow != none {
92 + box-shadow: $btn-active-box-shadow, 0 0 0 $btn-focus-width rgba($color, .5);
93 + } @else {
94 + box-shadow: 0 0 0 $btn-focus-width rgba($color, .5);
95 + }
96 + }
97 + }
98 +}
99 +
100 +// Button sizes
101 +@mixin button-size($padding-y, $padding-x, $font-size, $line-height, $border-radius) {
102 + padding: $padding-y $padding-x;
103 + @include font-size($font-size);
104 + line-height: $line-height;
105 + // Manually declare to provide an override to the browser default
106 + @include border-radius($border-radius, 0);
107 +}
1 +@mixin caret-down {
2 + border-top: $caret-width solid;
3 + border-right: $caret-width solid transparent;
4 + border-bottom: 0;
5 + border-left: $caret-width solid transparent;
6 +}
7 +
8 +@mixin caret-up {
9 + border-top: 0;
10 + border-right: $caret-width solid transparent;
11 + border-bottom: $caret-width solid;
12 + border-left: $caret-width solid transparent;
13 +}
14 +
15 +@mixin caret-right {
16 + border-top: $caret-width solid transparent;
17 + border-right: 0;
18 + border-bottom: $caret-width solid transparent;
19 + border-left: $caret-width solid;
20 +}
21 +
22 +@mixin caret-left {
23 + border-top: $caret-width solid transparent;
24 + border-right: $caret-width solid;
25 + border-bottom: $caret-width solid transparent;
26 +}
27 +
28 +@mixin caret($direction: down) {
29 + @if $enable-caret {
30 + &::after {
31 + display: inline-block;
32 + margin-left: $caret-spacing;
33 + vertical-align: $caret-vertical-align;
34 + content: "";
35 + @if $direction == down {
36 + @include caret-down;
37 + } @else if $direction == up {
38 + @include caret-up;
39 + } @else if $direction == right {
40 + @include caret-right;
41 + }
42 + }
43 +
44 + @if $direction == left {
45 + &::after {
46 + display: none;
47 + }
48 +
49 + &::before {
50 + display: inline-block;
51 + margin-right: $caret-spacing;
52 + vertical-align: $caret-vertical-align;
53 + content: "";
54 + @include caret-left;
55 + }
56 + }
57 +
58 + &:empty::after {
59 + margin-left: 0;
60 + }
61 + }
62 +}
1 +@mixin clearfix() {
2 + &::after {
3 + display: block;
4 + clear: both;
5 + content: "";
6 + }
7 +}
1 +// Deprecate mixin
2 +//
3 +// This mixin can be used to deprecate mixins or functions.
4 +// `$enable-deprecation-messages` is a global variable, `$ignore-warning` is a variable that can be passed to
5 +// some deprecated mixins to suppress the warning (for example if the mixin is still be used in the current version of Bootstrap)
6 +@mixin deprecate($name, $deprecate-version, $remove-version, $ignore-warning: false) {
7 + @if ($enable-deprecation-messages != false and $ignore-warning != true) {
8 + @warn "#{$name} has been deprecated as of #{$deprecate-version}. It will be removed entirely in #{$remove-version}.";
9 + }
10 +}
1 +// stylelint-disable declaration-no-important
2 +
3 +@mixin float-left {
4 + float: left !important;
5 + @include deprecate("The `float-left` mixin", "v4.3.0", "v5");
6 +}
7 +@mixin float-right {
8 + float: right !important;
9 + @include deprecate("The `float-right` mixin", "v4.3.0", "v5");
10 +}
11 +@mixin float-none {
12 + float: none !important;
13 + @include deprecate("The `float-none` mixin", "v4.3.0", "v5");
14 +}
1 +// Form control focus state
2 +//
3 +// Generate a customized focus state and for any input with the specified color,
4 +// which defaults to the `$input-focus-border-color` variable.
5 +//
6 +// We highly encourage you to not customize the default value, but instead use
7 +// this to tweak colors on an as-needed basis. This aesthetic change is based on
8 +// WebKit's default styles, but applicable to a wider range of browsers. Its
9 +// usability and accessibility should be taken into account with any change.
10 +//
11 +// Example usage: change the default blue border and shadow to white for better
12 +// contrast against a dark gray background.
13 +@mixin form-control-focus() {
14 + &:focus {
15 + color: $input-focus-color;
16 + background-color: $input-focus-bg;
17 + border-color: $input-focus-border-color;
18 + outline: 0;
19 + // Avoid using mixin so we can pass custom focus shadow properly
20 + @if $enable-shadows {
21 + box-shadow: $input-box-shadow, $input-focus-box-shadow;
22 + } @else {
23 + box-shadow: $input-focus-box-shadow;
24 + }
25 + }
26 +}
27 +
28 +
29 +@mixin form-validation-state($state, $color, $icon) {
30 + .#{$state}-feedback {
31 + display: none;
32 + width: 100%;
33 + margin-top: $form-feedback-margin-top;
34 + @include font-size($form-feedback-font-size);
35 + color: $color;
36 + }
37 +
38 + .#{$state}-tooltip {
39 + position: absolute;
40 + top: 100%;
41 + z-index: 5;
42 + display: none;
43 + max-width: 100%; // Contain to parent when possible
44 + padding: $form-feedback-tooltip-padding-y $form-feedback-tooltip-padding-x;
45 + margin-top: .1rem;
46 + @include font-size($form-feedback-tooltip-font-size);
47 + line-height: $form-feedback-tooltip-line-height;
48 + color: color-yiq($color);
49 + background-color: rgba($color, $form-feedback-tooltip-opacity);
50 + @include border-radius($form-feedback-tooltip-border-radius);
51 + }
52 +
53 + .form-control {
54 + .was-validated &:#{$state},
55 + &.is-#{$state} {
56 + border-color: $color;
57 +
58 + @if $enable-validation-icons {
59 + padding-right: $input-height-inner;
60 + background-image: $icon;
61 + background-repeat: no-repeat;
62 + background-position: center right $input-height-inner-quarter;
63 + background-size: $input-height-inner-half $input-height-inner-half;
64 + }
65 +
66 + &:focus {
67 + border-color: $color;
68 + box-shadow: 0 0 0 $input-focus-width rgba($color, .25);
69 + }
70 +
71 + ~ .#{$state}-feedback,
72 + ~ .#{$state}-tooltip {
73 + display: block;
74 + }
75 + }
76 + }
77 +
78 + // stylelint-disable-next-line selector-no-qualifying-type
79 + textarea.form-control {
80 + .was-validated &:#{$state},
81 + &.is-#{$state} {
82 + @if $enable-validation-icons {
83 + padding-right: $input-height-inner;
84 + background-position: top $input-height-inner-quarter right $input-height-inner-quarter;
85 + }
86 + }
87 + }
88 +
89 + .custom-select {
90 + .was-validated &:#{$state},
91 + &.is-#{$state} {
92 + border-color: $color;
93 +
94 + @if $enable-validation-icons {
95 + padding-right: $custom-select-feedback-icon-padding-right;
96 + background: $custom-select-background, $icon $custom-select-bg no-repeat $custom-select-feedback-icon-position / $custom-select-feedback-icon-size;
97 + }
98 +
99 + &:focus {
100 + border-color: $color;
101 + box-shadow: 0 0 0 $input-focus-width rgba($color, .25);
102 + }
103 +
104 + ~ .#{$state}-feedback,
105 + ~ .#{$state}-tooltip {
106 + display: block;
107 + }
108 + }
109 + }
110 +
111 +
112 + .form-control-file {
113 + .was-validated &:#{$state},
114 + &.is-#{$state} {
115 + ~ .#{$state}-feedback,
116 + ~ .#{$state}-tooltip {
117 + display: block;
118 + }
119 + }
120 + }
121 +
122 + .form-check-input {
123 + .was-validated &:#{$state},
124 + &.is-#{$state} {
125 + ~ .form-check-label {
126 + color: $color;
127 + }
128 +
129 + ~ .#{$state}-feedback,
130 + ~ .#{$state}-tooltip {
131 + display: block;
132 + }
133 + }
134 + }
135 +
136 + .custom-control-input {
137 + .was-validated &:#{$state},
138 + &.is-#{$state} {
139 + ~ .custom-control-label {
140 + color: $color;
141 +
142 + &::before {
143 + border-color: $color;
144 + }
145 + }
146 +
147 + ~ .#{$state}-feedback,
148 + ~ .#{$state}-tooltip {
149 + display: block;
150 + }
151 +
152 + &:checked {
153 + ~ .custom-control-label::before {
154 + border-color: lighten($color, 10%);
155 + @include gradient-bg(lighten($color, 10%));
156 + }
157 + }
158 +
159 + &:focus {
160 + ~ .custom-control-label::before {
161 + box-shadow: 0 0 0 $input-focus-width rgba($color, .25);
162 + }
163 +
164 + &:not(:checked) ~ .custom-control-label::before {
165 + border-color: $color;
166 + }
167 + }
168 + }
169 + }
170 +
171 + // custom file
172 + .custom-file-input {
173 + .was-validated &:#{$state},
174 + &.is-#{$state} {
175 + ~ .custom-file-label {
176 + border-color: $color;
177 + }
178 +
179 + ~ .#{$state}-feedback,
180 + ~ .#{$state}-tooltip {
181 + display: block;
182 + }
183 +
184 + &:focus {
185 + ~ .custom-file-label {
186 + border-color: $color;
187 + box-shadow: 0 0 0 $input-focus-width rgba($color, .25);
188 + }
189 + }
190 + }
191 + }
192 +}
1 +// Gradients
2 +
3 +@mixin gradient-bg($color) {
4 + @if $enable-gradients {
5 + background: $color linear-gradient(180deg, mix($body-bg, $color, 15%), $color) repeat-x;
6 + } @else {
7 + background-color: $color;
8 + }
9 +}
10 +
11 +// Horizontal gradient, from left to right
12 +//
13 +// Creates two color stops, start and end, by specifying a color and position for each color stop.
14 +@mixin gradient-x($start-color: $gray-700, $end-color: $gray-800, $start-percent: 0%, $end-percent: 100%) {
15 + background-image: linear-gradient(to right, $start-color $start-percent, $end-color $end-percent);
16 + background-repeat: repeat-x;
17 +}
18 +
19 +// Vertical gradient, from top to bottom
20 +//
21 +// Creates two color stops, start and end, by specifying a color and position for each color stop.
22 +@mixin gradient-y($start-color: $gray-700, $end-color: $gray-800, $start-percent: 0%, $end-percent: 100%) {
23 + background-image: linear-gradient(to bottom, $start-color $start-percent, $end-color $end-percent);
24 + background-repeat: repeat-x;
25 +}
26 +
27 +@mixin gradient-directional($start-color: $gray-700, $end-color: $gray-800, $deg: 45deg) {
28 + background-image: linear-gradient($deg, $start-color, $end-color);
29 + background-repeat: repeat-x;
30 +}
31 +@mixin gradient-x-three-colors($start-color: $blue, $mid-color: $purple, $color-stop: 50%, $end-color: $red) {
32 + background-image: linear-gradient(to right, $start-color, $mid-color $color-stop, $end-color);
33 + background-repeat: no-repeat;
34 +}
35 +@mixin gradient-y-three-colors($start-color: $blue, $mid-color: $purple, $color-stop: 50%, $end-color: $red) {
36 + background-image: linear-gradient($start-color, $mid-color $color-stop, $end-color);
37 + background-repeat: no-repeat;
38 +}
39 +@mixin gradient-radial($inner-color: $gray-700, $outer-color: $gray-800) {
40 + background-image: radial-gradient(circle, $inner-color, $outer-color);
41 + background-repeat: no-repeat;
42 +}
43 +@mixin gradient-striped($color: rgba($white, .15), $angle: 45deg) {
44 + background-image: linear-gradient($angle, $color 25%, transparent 25%, transparent 50%, $color 50%, $color 75%, transparent 75%, transparent);
45 +}
1 +// Framework grid generation
2 +//
3 +// Used only by Bootstrap to generate the correct number of grid classes given
4 +// any value of `$grid-columns`.
5 +
6 +@mixin make-grid-columns($columns: $grid-columns, $gutter: $grid-gutter-width, $breakpoints: $grid-breakpoints) {
7 + // Common properties for all breakpoints
8 + %grid-column {
9 + position: relative;
10 + width: 100%;
11 + padding-right: $gutter / 2;
12 + padding-left: $gutter / 2;
13 + }
14 +
15 + @each $breakpoint in map-keys($breakpoints) {
16 + $infix: breakpoint-infix($breakpoint, $breakpoints);
17 +
18 + // Allow columns to stretch full width below their breakpoints
19 + @for $i from 1 through $columns {
20 + .col#{$infix}-#{$i} {
21 + @extend %grid-column;
22 + }
23 + }
24 + .col#{$infix},
25 + .col#{$infix}-auto {
26 + @extend %grid-column;
27 + }
28 +
29 + @include media-breakpoint-up($breakpoint, $breakpoints) {
30 + // Provide basic `.col-{bp}` classes for equal-width flexbox columns
31 + .col#{$infix} {
32 + flex-basis: 0;
33 + flex-grow: 1;
34 + max-width: 100%;
35 + }
36 + .col#{$infix}-auto {
37 + flex: 0 0 auto;
38 + width: auto;
39 + max-width: 100%; // Reset earlier grid tiers
40 + }
41 +
42 + @for $i from 1 through $columns {
43 + .col#{$infix}-#{$i} {
44 + @include make-col($i, $columns);
45 + }
46 + }
47 +
48 + .order#{$infix}-first { order: -1; }
49 +
50 + .order#{$infix}-last { order: $columns + 1; }
51 +
52 + @for $i from 0 through $columns {
53 + .order#{$infix}-#{$i} { order: $i; }
54 + }
55 +
56 + // `$columns - 1` because offsetting by the width of an entire row isn't possible
57 + @for $i from 0 through ($columns - 1) {
58 + @if not ($infix == "" and $i == 0) { // Avoid emitting useless .offset-0
59 + .offset#{$infix}-#{$i} {
60 + @include make-col-offset($i, $columns);
61 + }
62 + }
63 + }
64 + }
65 + }
66 +}
1 +/// Grid system
2 +//
3 +// Generate semantic grid columns with these mixins.
4 +
5 +@mixin make-container($gutter: $grid-gutter-width) {
6 + width: 100%;
7 + padding-right: $gutter / 2;
8 + padding-left: $gutter / 2;
9 + margin-right: auto;
10 + margin-left: auto;
11 +}
12 +
13 +
14 +// For each breakpoint, define the maximum width of the container in a media query
15 +@mixin make-container-max-widths($max-widths: $container-max-widths, $breakpoints: $grid-breakpoints) {
16 + @each $breakpoint, $container-max-width in $max-widths {
17 + @include media-breakpoint-up($breakpoint, $breakpoints) {
18 + max-width: $container-max-width;
19 + }
20 + }
21 +}
22 +
23 +@mixin make-row($gutter: $grid-gutter-width) {
24 + display: flex;
25 + flex-wrap: wrap;
26 + margin-right: -$gutter / 2;
27 + margin-left: -$gutter / 2;
28 +}
29 +
30 +@mixin make-col-ready($gutter: $grid-gutter-width) {
31 + position: relative;
32 + // Prevent columns from becoming too narrow when at smaller grid tiers by
33 + // always setting `width: 100%;`. This works because we use `flex` values
34 + // later on to override this initial width.
35 + width: 100%;
36 + padding-right: $gutter / 2;
37 + padding-left: $gutter / 2;
38 +}
39 +
40 +@mixin make-col($size, $columns: $grid-columns) {
41 + flex: 0 0 percentage($size / $columns);
42 + // Add a `max-width` to ensure content within each column does not blow out
43 + // the width of the column. Applies to IE10+ and Firefox. Chrome and Safari
44 + // do not appear to require this.
45 + max-width: percentage($size / $columns);
46 +}
47 +
48 +@mixin make-col-offset($size, $columns: $grid-columns) {
49 + $num: $size / $columns;
50 + margin-left: if($num == 0, 0, percentage($num));
51 +}
1 +// Hover mixin and `$enable-hover-media-query` are deprecated.
2 +//
3 +// Originally added during our alphas and maintained during betas, this mixin was
4 +// designed to prevent `:hover` stickiness on iOS-an issue where hover styles
5 +// would persist after initial touch.
6 +//
7 +// For backward compatibility, we've kept these mixins and updated them to
8 +// always return their regular pseudo-classes instead of a shimmed media query.
9 +//
10 +// Issue: https://github.com/twbs/bootstrap/issues/25195
11 +
12 +@mixin hover {
13 + &:hover { @content; }
14 +}
15 +
16 +@mixin hover-focus {
17 + &:hover,
18 + &:focus {
19 + @content;
20 + }
21 +}
22 +
23 +@mixin plain-hover-focus {
24 + &,
25 + &:hover,
26 + &:focus {
27 + @content;
28 + }
29 +}
30 +
31 +@mixin hover-focus-active {
32 + &:hover,
33 + &:focus,
34 + &:active {
35 + @content;
36 + }
37 +}
1 +// Image Mixins
2 +// - Responsive image
3 +// - Retina image
4 +
5 +
6 +// Responsive image
7 +//
8 +// Keep images from scaling beyond the width of their parents.
9 +
10 +@mixin img-fluid {
11 + // Part 1: Set a maximum relative to the parent
12 + max-width: 100%;
13 + // Part 2: Override the height to auto, otherwise images will be stretched
14 + // when setting a width and height attribute on the img element.
15 + height: auto;
16 +}
17 +
18 +
19 +// Retina image
20 +//
21 +// Short retina mixin for setting background-image and -size.
22 +
23 +@mixin img-retina($file-1x, $file-2x, $width-1x, $height-1x) {
24 + background-image: url($file-1x);
25 +
26 + // Autoprefixer takes care of adding -webkit-min-device-pixel-ratio and -o-min-device-pixel-ratio,
27 + // but doesn't convert dppx=>dpi.
28 + // There's no such thing as unprefixed min-device-pixel-ratio since it's nonstandard.
29 + // Compatibility info: https://caniuse.com/#feat=css-media-resolution
30 + @media only screen and (min-resolution: 192dpi), // IE9-11 don't support dppx
31 + only screen and (min-resolution: 2dppx) { // Standardized
32 + background-image: url($file-2x);
33 + background-size: $width-1x $height-1x;
34 + }
35 + @include deprecate("`img-retina()`", "v4.3.0", "v5");
36 +}
1 +// List Groups
2 +
3 +@mixin list-group-item-variant($state, $background, $color) {
4 + .list-group-item-#{$state} {
5 + color: $color;
6 + background-color: $background;
7 +
8 + &.list-group-item-action {
9 + @include hover-focus {
10 + color: $color;
11 + background-color: darken($background, 5%);
12 + }
13 +
14 + &.active {
15 + color: $white;
16 + background-color: $color;
17 + border-color: $color;
18 + }
19 + }
20 + }
21 +}
1 +// Lists
2 +
3 +// Unstyled keeps list items block level, just removes default browser padding and list-style
4 +@mixin list-unstyled {
5 + padding-left: 0;
6 + list-style: none;
7 +}
1 +// Horizontal dividers
2 +//
3 +// Dividers (basically an hr) within dropdowns and nav lists
4 +
5 +@mixin nav-divider($color: $nav-divider-color, $margin-y: $nav-divider-margin-y) {
6 + height: 0;
7 + margin: $margin-y 0;
8 + overflow: hidden;
9 + border-top: 1px solid $color;
10 +}
1 +// Pagination
2 +
3 +@mixin pagination-size($padding-y, $padding-x, $font-size, $line-height, $border-radius) {
4 + .page-link {
5 + padding: $padding-y $padding-x;
6 + @include font-size($font-size);
7 + line-height: $line-height;
8 + }
9 +
10 + .page-item {
11 + &:first-child {
12 + .page-link {
13 + @include border-left-radius($border-radius);
14 + }
15 + }
16 + &:last-child {
17 + .page-link {
18 + @include border-right-radius($border-radius);
19 + }
20 + }
21 + }
22 +}
1 +@mixin reset-text {
2 + font-family: $font-family-base;
3 + // We deliberately do NOT reset font-size or word-wrap.
4 + font-style: normal;
5 + font-weight: $font-weight-normal;
6 + line-height: $line-height-base;
7 + text-align: left; // Fallback for where `start` is not supported
8 + text-align: start;
9 + text-decoration: none;
10 + text-shadow: none;
11 + text-transform: none;
12 + letter-spacing: normal;
13 + word-break: normal;
14 + word-spacing: normal;
15 + white-space: normal;
16 + line-break: auto;
17 +}
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff could not be displayed because it is too large.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff could not be displayed because it is too large.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff could not be displayed because it is too large.
This diff is collapsed. Click to expand it.
This diff could not be displayed because it is too large.
This diff could not be displayed because it is too large.
This diff is collapsed. Click to expand it.
This diff could not be displayed because it is too large.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.