@moodlehq/design-system 4.1.0 → 5.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +9 -0
- package/dist/components/_index.legacy.scss +1893 -0
- package/dist/components/activity-icon/ActivityIcon.d.ts +3 -3
- package/dist/components/activity-icon/ActivityIcon.js +5 -5
- package/dist/components/activity-icon/ActivityIcon.js.map +1 -1
- package/dist/components/activity-icon/index.css +99 -0
- package/dist/components/badge/Badge.d.ts +1 -1
- package/dist/components/badge/index.css +115 -0
- package/dist/components/button/index.css +295 -0
- package/dist/components/checkbox/index.css +181 -0
- package/dist/components/choicebox/Choicebox.d.ts +21 -0
- package/dist/components/choicebox/Choicebox.js +55 -0
- package/dist/components/choicebox/Choicebox.js.map +1 -0
- package/dist/components/choicebox/index.css +364 -0
- package/dist/components/choicebox/index.d.ts +1 -0
- package/dist/components/choicebox/index.js +2 -0
- package/dist/components/close-button/CloseButton.d.ts +1 -1
- package/dist/components/close-button/index.css +47 -0
- package/dist/components/favourite-button/FavouriteButton.d.ts +15 -0
- package/dist/components/favourite-button/FavouriteButton.js +25 -0
- package/dist/components/favourite-button/FavouriteButton.js.map +1 -0
- package/dist/components/favourite-button/index.css +86 -0
- package/dist/components/favourite-button/index.d.ts +2 -0
- package/dist/components/favourite-button/index.js +2 -0
- package/dist/components/index.css +12 -0
- package/dist/components/index.d.ts +12 -0
- package/dist/components/link/Link.d.ts +11 -0
- package/dist/components/link/Link.js +65 -0
- package/dist/components/link/Link.js.map +1 -0
- package/dist/components/link/index.css +122 -0
- package/dist/components/link/index.d.ts +1 -0
- package/dist/components/link/index.js +2 -0
- package/dist/components/nav-pill/NavPill.d.ts +21 -0
- package/dist/components/nav-pill/NavPill.js +54 -0
- package/dist/components/nav-pill/NavPill.js.map +1 -0
- package/dist/components/nav-pill/index.css +96 -0
- package/dist/components/nav-pill/index.d.ts +1 -0
- package/dist/components/nav-pill/index.js +2 -0
- package/dist/components/pagination/Pagination.d.ts +32 -0
- package/dist/components/pagination/Pagination.js +100 -0
- package/dist/components/pagination/Pagination.js.map +1 -0
- package/dist/components/pagination/index.css +139 -0
- package/dist/components/pagination/index.d.ts +1 -0
- package/dist/components/pagination/index.js +2 -0
- package/dist/components/pagination/pagination.helpers.d.ts +26 -0
- package/dist/components/pagination/pagination.helpers.js +136 -0
- package/dist/components/pagination/pagination.helpers.js.map +1 -0
- package/dist/components/progress-bar/ProgressBar.d.ts +35 -0
- package/dist/components/progress-bar/ProgressBar.js +86 -0
- package/dist/components/progress-bar/ProgressBar.js.map +1 -0
- package/dist/components/progress-bar/index.css +193 -0
- package/dist/components/progress-bar/index.d.ts +1 -0
- package/dist/components/progress-bar/index.js +2 -0
- package/dist/components/radio/index.css +133 -0
- package/dist/index.css +1066 -0
- package/dist/index.js +7 -1
- package/{tokens → dist/tokens}/css/colors.css +3 -0
- package/{tokens → dist/tokens}/scss/_colors.scss +3 -0
- package/{tokens → dist/tokens}/scss/_index_css_vars.scss +3 -0
- package/package.json +15 -7
- /package/{tokens → dist/tokens}/css/borders.css +0 -0
- /package/{tokens → dist/tokens}/css/breakpoints.css +0 -0
- /package/{tokens → dist/tokens}/css/index.css +0 -0
- /package/{tokens → dist/tokens}/css/primitives.css +0 -0
- /package/{tokens → dist/tokens}/css/shadows.css +0 -0
- /package/{tokens → dist/tokens}/css/sizes.css +0 -0
- /package/{tokens → dist/tokens}/css/spacing.css +0 -0
- /package/{tokens → dist/tokens}/css/typography.css +0 -0
- /package/{tokens → dist/tokens}/scss/_borders.scss +0 -0
- /package/{tokens → dist/tokens}/scss/_breakpoints.scss +0 -0
- /package/{tokens → dist/tokens}/scss/_index.legacy.scss +0 -0
- /package/{tokens → dist/tokens}/scss/_index.scss +0 -0
- /package/{tokens → dist/tokens}/scss/_primitives.scss +0 -0
- /package/{tokens → dist/tokens}/scss/_shadows.scss +0 -0
- /package/{tokens → dist/tokens}/scss/_sizes.scss +0 -0
- /package/{tokens → dist/tokens}/scss/_spacing.scss +0 -0
- /package/{tokens → dist/tokens}/scss/_typography.scss +0 -0
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
/* Wrapper layout */
|
|
2
|
+
.mds-progress-bar {
|
|
3
|
+
display: flex;
|
|
4
|
+
flex-direction: column;
|
|
5
|
+
gap: var(--mds-spacing-xs);
|
|
6
|
+
/* 120px is intentionally has no token by design just as in Figma. */
|
|
7
|
+
min-width: 120px;
|
|
8
|
+
width: 100%;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
/* Inline variant: bar on the left, count on the right in one row. */
|
|
12
|
+
.mds-progress-bar.mds-progress-bar--label-inline {
|
|
13
|
+
flex-direction: row;
|
|
14
|
+
align-items: center;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
/* Track (outer container) */
|
|
18
|
+
.mds-progress-bar-track.progress {
|
|
19
|
+
/* Re-state Bootstrap progress primitives here so host .progress overrides cannot drift MDS visuals. */
|
|
20
|
+
/* 0.375rem = 6px from Figma; intentionally has no token by design for consumer flexibility. */
|
|
21
|
+
display: flex;
|
|
22
|
+
height: 0.375rem;
|
|
23
|
+
overflow: hidden;
|
|
24
|
+
border-radius: var(--mds-border-radius-pill);
|
|
25
|
+
background-color: var(--mds-bg-feedback-secondary-default);
|
|
26
|
+
box-shadow: none;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/* In-progress and loading use the primary-subtle track. */
|
|
30
|
+
.mds-progress-bar--in-progress .mds-progress-bar-track,
|
|
31
|
+
.mds-progress-bar--loading .mds-progress-bar-track {
|
|
32
|
+
background-color: var(--mds-bg-feedback-primary-subtle);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/* Error track. */
|
|
36
|
+
.mds-progress-bar--error .mds-progress-bar-track {
|
|
37
|
+
background-color: var(--mds-bg-feedback-danger-subtle);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/* Warning track. */
|
|
41
|
+
.mds-progress-bar--warning .mds-progress-bar-track {
|
|
42
|
+
background-color: var(--mds-bg-feedback-warning-subtle);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/* Completed and empty keep the default secondary track. */
|
|
46
|
+
.mds-progress-bar--completed .mds-progress-bar-track,
|
|
47
|
+
.mds-progress-bar--empty .mds-progress-bar-track {
|
|
48
|
+
background-color: var(--mds-bg-feedback-secondary-default);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/* Inline variant: track should fill available row space. */
|
|
52
|
+
.mds-progress-bar--label-inline .mds-progress-bar-track {
|
|
53
|
+
flex: 1 1 0;
|
|
54
|
+
min-inline-size: var(--mds-spacing-xxl);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/* Fill (inner progress indicator) */
|
|
58
|
+
.mds-progress-bar-fill.progress-bar {
|
|
59
|
+
/* Keep core progress-bar behavior local so host --bs-progress-* token changes do not leak in. */
|
|
60
|
+
display: flex;
|
|
61
|
+
overflow: hidden;
|
|
62
|
+
background-color: var(--mds-bg-interactive-primary-default);
|
|
63
|
+
transition: width 0.3s ease;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/* Explicit striped styles avoid dependence on host Bootstrap variables. */
|
|
67
|
+
.mds-progress-bar-fill.progress-bar-striped {
|
|
68
|
+
background-image: linear-gradient(
|
|
69
|
+
45deg,
|
|
70
|
+
rgba(255, 255, 255, 0.15) 25%,
|
|
71
|
+
transparent 25%,
|
|
72
|
+
transparent 50%,
|
|
73
|
+
rgba(255, 255, 255, 0.15) 50%,
|
|
74
|
+
rgba(255, 255, 255, 0.15) 75%,
|
|
75
|
+
transparent 75%,
|
|
76
|
+
transparent
|
|
77
|
+
);
|
|
78
|
+
/* Figma loading pattern uses a larger tile than the 6px bar height. */
|
|
79
|
+
background-size: var(--mds-spacing-md) var(--mds-spacing-md);
|
|
80
|
+
background-repeat: repeat;
|
|
81
|
+
background-position-x: 0;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
[dir='rtl'] .mds-progress-bar-fill.progress-bar-striped {
|
|
85
|
+
background-image: linear-gradient(
|
|
86
|
+
-45deg,
|
|
87
|
+
rgba(255, 255, 255, 0.15) 25%,
|
|
88
|
+
transparent 25%,
|
|
89
|
+
transparent 50%,
|
|
90
|
+
rgba(255, 255, 255, 0.15) 50%,
|
|
91
|
+
rgba(255, 255, 255, 0.15) 75%,
|
|
92
|
+
transparent 75%,
|
|
93
|
+
transparent
|
|
94
|
+
);
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
.mds-progress-bar-fill.progress-bar-animated {
|
|
98
|
+
animation: mds-progress-bar-stripes 0.8s linear infinite;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
[dir='rtl'] .mds-progress-bar-fill.progress-bar-animated {
|
|
102
|
+
animation-name: mds-progress-bar-stripes-rtl;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
@keyframes mds-progress-bar-stripes {
|
|
106
|
+
0% {
|
|
107
|
+
background-position-x: var(--mds-spacing-md);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
@keyframes mds-progress-bar-stripes-rtl {
|
|
112
|
+
0% {
|
|
113
|
+
background-position-x: calc(var(--mds-spacing-md) * -1);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
/* Error fill. */
|
|
118
|
+
.mds-progress-bar--error .mds-progress-bar-fill {
|
|
119
|
+
background-color: var(--mds-bg-feedback-danger-default);
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
/* Warning fill. */
|
|
123
|
+
.mds-progress-bar--warning .mds-progress-bar-fill {
|
|
124
|
+
background-color: var(--mds-bg-feedback-warning-default);
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
/* Completed fill. */
|
|
128
|
+
.mds-progress-bar--completed .mds-progress-bar-fill {
|
|
129
|
+
background-color: var(--mds-bg-feedback-success-default);
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
/* Empty fill blends with the track. */
|
|
133
|
+
.mds-progress-bar--empty .mds-progress-bar-fill {
|
|
134
|
+
background-color: var(--mds-bg-feedback-secondary-default);
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
/* Label container */
|
|
138
|
+
.mds-progress-bar-label {
|
|
139
|
+
display: flex;
|
|
140
|
+
justify-content: space-between;
|
|
141
|
+
align-items: center;
|
|
142
|
+
gap: var(--mds-spacing-xs);
|
|
143
|
+
width: 100%;
|
|
144
|
+
|
|
145
|
+
/* UI text/small */
|
|
146
|
+
font-family: var(--mds-font-family-base);
|
|
147
|
+
font-size: var(--mds-font-size-paragraph-small);
|
|
148
|
+
line-height: var(--mds-line-height-paragraph-small);
|
|
149
|
+
letter-spacing: var(--mds-letter-spacing-default);
|
|
150
|
+
color: var(--mds-text-subtle);
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
/* Title text */
|
|
154
|
+
.mds-progress-bar-title {
|
|
155
|
+
font-weight: var(--mds-font-weight-medium);
|
|
156
|
+
line-height: var(--mds-line-height-paragraph-small);
|
|
157
|
+
word-break: break-word;
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
/* In title-and-count layout, title and count share one row and must both be able to shrink. */
|
|
161
|
+
.mds-progress-bar--label-title-and-count .mds-progress-bar-title {
|
|
162
|
+
flex: 1 1 auto;
|
|
163
|
+
min-inline-size: 0;
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
/* Count / percentage text */
|
|
167
|
+
.mds-progress-bar-count {
|
|
168
|
+
font-weight: var(--mds-font-weight-regular);
|
|
169
|
+
|
|
170
|
+
/* Inline count sits outside .mds-progress-bar-label, so it needs explicit text styles. */
|
|
171
|
+
font-family: var(--mds-font-family-base);
|
|
172
|
+
font-size: var(--mds-font-size-paragraph-small);
|
|
173
|
+
line-height: var(--mds-line-height-paragraph-small);
|
|
174
|
+
letter-spacing: var(--mds-letter-spacing-default);
|
|
175
|
+
color: var(--mds-text-subtle);
|
|
176
|
+
white-space: normal;
|
|
177
|
+
overflow-wrap: anywhere;
|
|
178
|
+
min-inline-size: 0;
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
/* In title-and-count layout, count is bounded to prevent hogging the row. */
|
|
182
|
+
.mds-progress-bar--label-title-and-count .mds-progress-bar-count {
|
|
183
|
+
flex: 0 1 50%;
|
|
184
|
+
max-inline-size: 50%;
|
|
185
|
+
text-align: end;
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
/* In inline layout, count takes only what it needs, leaving space for the track. */
|
|
189
|
+
.mds-progress-bar--label-inline .mds-progress-bar-count {
|
|
190
|
+
flex: 0 1 auto;
|
|
191
|
+
max-inline-size: 40%;
|
|
192
|
+
text-align: start;
|
|
193
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './ProgressBar';
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
/* Parent element */
|
|
2
|
+
.mds-form-check {
|
|
3
|
+
/* Grid layout: column 1 = input, column 2 = label. The feedback is then placed
|
|
4
|
+
explicitly into column 2 via grid-column so it aligns with the label without
|
|
5
|
+
requiring any offset calculation. Grid formatting context also suppresses
|
|
6
|
+
Bootstrap's float on the input child. */
|
|
7
|
+
display: inline-grid;
|
|
8
|
+
grid-template-columns: auto auto;
|
|
9
|
+
align-items: start;
|
|
10
|
+
/* Prevent flex containers from stretching this element across the cross axis,
|
|
11
|
+
which would widen the grid and split the two auto columns equally, pushing
|
|
12
|
+
the label away from the input. start preserves content-sized behaviour. */
|
|
13
|
+
align-self: start;
|
|
14
|
+
/* min-height matches the icon-lg token (24px) so the wrapper never collapses
|
|
15
|
+
below the height of the radio indicator, regardless of label content. */
|
|
16
|
+
min-height: var(--mds-icons-lg, 1.5rem);
|
|
17
|
+
/* Reset Bootstrap's padding-inline-start — it exists to indent label text past a
|
|
18
|
+
floated input, which our grid layout does not use. column-gap handles the spacing. */
|
|
19
|
+
padding: var(--mds-spacing-none, 0);
|
|
20
|
+
/* column-gap keeps input and label spaced; row-gap gives breathing room above feedback */
|
|
21
|
+
column-gap: var(--mds-spacing-xs, 0.5rem);
|
|
22
|
+
row-gap: var(--mds-spacing-xxs, 0.25rem);
|
|
23
|
+
|
|
24
|
+
/* UI text/UI default */
|
|
25
|
+
font-family: var(--mds-font-family-base, Arial, sans-serif);
|
|
26
|
+
font-size: var(--mds-font-size-body, 1rem);
|
|
27
|
+
font-weight: var(--mds-font-weight-regular, 400);
|
|
28
|
+
line-height: var(--mds-line-height-paragraph-xs, 0.75rem);
|
|
29
|
+
letter-spacing: var(--mds-letter-spacing, 0);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/* Input element styles */
|
|
33
|
+
.mds-form-check-input {
|
|
34
|
+
border-radius: var(--mds-border-radius-pill, 50rem);
|
|
35
|
+
border: var(--mds-stroke-weight-sm, 1px) solid
|
|
36
|
+
var(--mds-border-interactive-secondary-default, #6a737b);
|
|
37
|
+
/* Use background-color, not the background shorthand — the shorthand resets
|
|
38
|
+
background-image to none, which wipes out Bootstrap's --bs-form-check-bg-image
|
|
39
|
+
(the inner dot SVG) on the checked state. */
|
|
40
|
+
}
|
|
41
|
+
/* Bootstrap's .form-check .form-check-input rule (specificity 0,2,0) sets float: left
|
|
42
|
+
and a negative margin-inline-start that causes overlap. Match its specificity to
|
|
43
|
+
ensure our flex-friendly reset wins regardless of load order. */
|
|
44
|
+
.mds-form-check .mds-form-check-input {
|
|
45
|
+
margin: 0;
|
|
46
|
+
float: none;
|
|
47
|
+
background-color: var(--mds-bg-surface-default, #fff);
|
|
48
|
+
}
|
|
49
|
+
.mds-form-check-input:checked {
|
|
50
|
+
background-color: var(--mds-bg-interactive-primary-default);
|
|
51
|
+
border-color: transparent;
|
|
52
|
+
}
|
|
53
|
+
.mds-form-check-input:disabled {
|
|
54
|
+
border-color: var(--mds-border-interactive-secondary-disabled);
|
|
55
|
+
}
|
|
56
|
+
.mds-form-check-input:disabled:checked {
|
|
57
|
+
background-color: var(--mds-bg-interactive-primary-disabled);
|
|
58
|
+
border-color: transparent;
|
|
59
|
+
}
|
|
60
|
+
.mds-form-check-input.is-invalid {
|
|
61
|
+
border-color: var(--mds-border-interactive-danger-default);
|
|
62
|
+
}
|
|
63
|
+
.mds-form-check-input.is-invalid:checked {
|
|
64
|
+
background-color: var(--mds-bg-interactive-danger-default);
|
|
65
|
+
border-color: transparent;
|
|
66
|
+
}
|
|
67
|
+
/* Explicit rule for invalid + disabled to avoid relying on specificity cascade order.
|
|
68
|
+
Disabled takes visual precedence: use the disabled background/border, not the danger ones. */
|
|
69
|
+
.mds-form-check-input.is-invalid:disabled {
|
|
70
|
+
background-color: var(--mds-bg-interactive-secondary-disabled);
|
|
71
|
+
border-color: var(--mds-border-interactive-secondary-disabled);
|
|
72
|
+
}
|
|
73
|
+
.mds-form-check-input.is-invalid:disabled:checked {
|
|
74
|
+
background-color: var(--mds-bg-interactive-primary-disabled);
|
|
75
|
+
border-color: transparent;
|
|
76
|
+
}
|
|
77
|
+
/* is-valid (Bootstrap) and neutral feedback states are intentionally not supported.
|
|
78
|
+
Radio buttons surface a binary valid/invalid result; positive confirmation
|
|
79
|
+
is conveyed by form-level success messaging rather than per-input valid styling. */
|
|
80
|
+
/* Hover styles are intentionally omitted. The radio input relies on the OS/browser
|
|
81
|
+
default appearance for hover; no design token exists for a radio hover state. */
|
|
82
|
+
|
|
83
|
+
/* Focus ring: Only outline + outline-offset allowed (no box-shadow or border).
|
|
84
|
+
See .github/instructions/components.instructions.md for full rules and rationale. */
|
|
85
|
+
.mds-form-check-input:focus,
|
|
86
|
+
.mds-form-check-input.is-invalid:focus {
|
|
87
|
+
/* Reset Bootstrap's :focus box-shadow; our ring is applied on :focus-visible only */
|
|
88
|
+
box-shadow: none;
|
|
89
|
+
outline: none;
|
|
90
|
+
}
|
|
91
|
+
.mds-form-check-input:focus-visible {
|
|
92
|
+
outline: var(--mds-stroke-weight-md) solid var(--mds-focus-default);
|
|
93
|
+
outline-offset: var(--mds-spacing-offset);
|
|
94
|
+
box-shadow: none;
|
|
95
|
+
}
|
|
96
|
+
.mds-form-check-input.is-invalid:focus-visible {
|
|
97
|
+
outline: var(--mds-stroke-weight-md) solid var(--mds-border-feedback-danger);
|
|
98
|
+
outline-offset: var(--mds-spacing-offset);
|
|
99
|
+
box-shadow: none;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
/* Label element styles */
|
|
103
|
+
.mds-form-check .form-check-label,
|
|
104
|
+
.mds-form-check .mds-form-check-label {
|
|
105
|
+
color: var(--mds-text-default, #1d2125);
|
|
106
|
+
}
|
|
107
|
+
/* Use sibling selector so the label reflects the input's disabled/invalid state */
|
|
108
|
+
.mds-form-check .mds-form-check-input:disabled ~ .form-check-label,
|
|
109
|
+
.mds-form-check .mds-form-check-input:disabled ~ .mds-form-check-label {
|
|
110
|
+
color: var(--mds-text-muted);
|
|
111
|
+
}
|
|
112
|
+
.mds-form-check .mds-form-check-input.is-invalid ~ .form-check-label,
|
|
113
|
+
.mds-form-check .mds-form-check-input.is-invalid ~ .mds-form-check-label {
|
|
114
|
+
color: var(--mds-text-danger);
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
/* Feedback element styles — UI text/UI small */
|
|
118
|
+
.mds-form-check .invalid-feedback,
|
|
119
|
+
.mds-form-check .mds-form-check-feedback {
|
|
120
|
+
/* Place feedback in column 2 (the label column) so it aligns with the label
|
|
121
|
+
regardless of input size or font-size differences. Row placement is automatic. */
|
|
122
|
+
grid-column: 2;
|
|
123
|
+
font-size: var(--mds-font-size-paragraph-small, 0.875rem);
|
|
124
|
+
font-weight: var(--mds-font-weight-medium, 500);
|
|
125
|
+
line-height: var(--mds-line-height-paragraph-xs, 0.75rem);
|
|
126
|
+
color: var(--mds-text-danger);
|
|
127
|
+
}
|
|
128
|
+
/* Dim the feedback when the input is disabled to match the reduced visual weight of
|
|
129
|
+
the label and input; keeps the feedback legible without implying it is actionable. */
|
|
130
|
+
.mds-form-check:has(.mds-form-check-input:disabled) .invalid-feedback,
|
|
131
|
+
.mds-form-check:has(.mds-form-check-input:disabled) .mds-form-check-feedback {
|
|
132
|
+
opacity: 0.5;
|
|
133
|
+
}
|