maverick-wave 4.13.0 → 4.15.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/.claude/skills/maverick-wave/SKILL.md +13 -1
- package/.claude/skills/maverick-wave/references/components.md +158 -0
- package/.claude/skills/maverick-wave/references/layout.md +10 -0
- package/.claude/skills/maverick-wave/references/theming.md +44 -43
- package/CHANGELOG.md +12 -0
- package/README.md +1 -1
- package/index.html +68 -0
- package/maverick-wave.min.css +3 -3
- package/package.json +2 -2
- package/src/partials/grid-container.html +68 -48
- package/src/partials/pricing-container.html +521 -0
- package/src/partials/utilities-container.html +45 -26
- package/src/scss/abstracts/_mixins.scss +70 -0
- package/src/scss/abstracts/_variables.scss +7 -0
- package/src/scss/base/_reset.scss +9 -0
- package/src/scss/components/_accordions.scss +1 -1
- package/src/scss/components/_calendar.scss +1 -1
- package/src/scss/components/_cards.scss +1 -2
- package/src/scss/components/_index.scss +1 -0
- package/src/scss/components/_kanban.scss +1 -1
- package/src/scss/components/_modals.scss +1 -1
- package/src/scss/components/_pagination.scss +1 -1
- package/src/scss/components/_panels.scss +10 -1
- package/src/scss/components/_pricing.scss +222 -0
- package/src/scss/components/_segmented.scss +12 -0
- package/src/scss/components/_tiles.scss +1 -2
- package/src/scss/form-elements/_login.scss +1 -2
- package/src/scss/utilities/_corner.scss +8 -0
- package/src/scss/utilities/_index.scss +1 -0
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
@use 'sass:map';
|
|
2
2
|
@use 'variables' as v;
|
|
3
|
+
@use 'functions' as *;
|
|
3
4
|
|
|
4
5
|
// Media query mixins
|
|
5
6
|
@mixin media-up($breakpoint) {
|
|
@@ -270,3 +271,72 @@
|
|
|
270
271
|
text-decoration: underline;
|
|
271
272
|
}
|
|
272
273
|
}
|
|
274
|
+
|
|
275
|
+
// ---------------------------------------------------------------------------
|
|
276
|
+
// Surface
|
|
277
|
+
//
|
|
278
|
+
// The MaverickWave silhouette: sharp corners on the top-left/bottom-right
|
|
279
|
+
// diagonal, round ones on the other. Nine components repeated those four radii
|
|
280
|
+
// by hand - this is the only place the shape is defined now.
|
|
281
|
+
//
|
|
282
|
+
// On top of the radii, an accent arc on the two round corners. The asymmetry
|
|
283
|
+
// alone reads as an accident; a coloured bow sitting exactly on it does not.
|
|
284
|
+
// Point-symmetric like the radii themselves, so it holds up on a tall card, a
|
|
285
|
+
// wide panel and a square tile alike.
|
|
286
|
+
//
|
|
287
|
+
// The ring is drawn inside the padding box rather than on the border, because
|
|
288
|
+
// four of the callers clip with `overflow: hidden` and would swallow a ring
|
|
289
|
+
// sitting on the border edge. Hence $border-width: `inset: 0` already lands on
|
|
290
|
+
// the padding box, but the corner radius there is the outer one minus the
|
|
291
|
+
// border, and a ring drawn at the outer radius would visibly miss the curve.
|
|
292
|
+
//
|
|
293
|
+
// $corners drops the top arc for a surface whose top-right corner is already
|
|
294
|
+
// taken by a fill of its own - see the coloured panel headers.
|
|
295
|
+
// ---------------------------------------------------------------------------
|
|
296
|
+
@mixin surface($border-width: 1px, $corners: 'both') {
|
|
297
|
+
position: relative;
|
|
298
|
+
border-radius: radius('sm') radius('xl') radius('sm') radius('xl');
|
|
299
|
+
|
|
300
|
+
&::after {
|
|
301
|
+
@include corner-accent($border-width, $corners);
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
// The arc on its own, for a variant that has to redraw it without restating the
|
|
306
|
+
// shape - it is already on the element by then.
|
|
307
|
+
@mixin corner-accent($border-width: 1px, $corners: 'both') {
|
|
308
|
+
$sharp: radius('sm') - $border-width;
|
|
309
|
+
$round: radius('xl') - $border-width;
|
|
310
|
+
// Opaque out to where the curve ends, fading from there - so the arc runs a
|
|
311
|
+
// little way into the straight edge instead of being cut off at the tangent.
|
|
312
|
+
//
|
|
313
|
+
// The 1.8 is the one number worth retuning here, and it is bounded by the
|
|
314
|
+
// shortest surface rather than by the nicest-looking card: the fade reaches
|
|
315
|
+
// from a corner, so on a 50px-high box - `mw-card-simple` with one line in it
|
|
316
|
+
// - anything past about 2 lets the two arcs meet in the middle and the pair
|
|
317
|
+
// stops reading as two corners and starts reading as a frame. Higher is
|
|
318
|
+
// softer on a tall card, lower is more defined on a short one.
|
|
319
|
+
$reach: $round * 1.8;
|
|
320
|
+
$top: radial-gradient(circle $reach at 100% 0, #000 $round, transparent 100%);
|
|
321
|
+
$bottom: radial-gradient(
|
|
322
|
+
circle $reach at 0 100%,
|
|
323
|
+
#000 $round,
|
|
324
|
+
transparent 100%
|
|
325
|
+
);
|
|
326
|
+
|
|
327
|
+
content: '';
|
|
328
|
+
position: absolute;
|
|
329
|
+
inset: 0;
|
|
330
|
+
pointer-events: none;
|
|
331
|
+
// 2px rather than 1px: in the dark theme --mw-border sits at OKLch lightness
|
|
332
|
+
// 0.32 and the arc tone at 0.41, so a hairline is separated from the plain
|
|
333
|
+
// border by little more than its saturation and vanishes at reading distance.
|
|
334
|
+
border: 2px solid var(--mw-corner-accent);
|
|
335
|
+
border-radius: $sharp $round $sharp $round;
|
|
336
|
+
|
|
337
|
+
@if $corners == 'bottom' {
|
|
338
|
+
mask-image: $bottom;
|
|
339
|
+
} @else {
|
|
340
|
+
mask-image: $top, $bottom;
|
|
341
|
+
}
|
|
342
|
+
}
|
|
@@ -505,6 +505,9 @@ $dark-theme-colors: (
|
|
|
505
505
|
// Translucent accent line used for dividers, rules and outlines. Built from
|
|
506
506
|
// the ink tone, not the fill tone, or the line disappears into the page.
|
|
507
507
|
'border-accent': fade('dark-primary-text-color', 70%),
|
|
508
|
+
// The accent arc on the two round corners of every mw-surface. Full strength
|
|
509
|
+
// here: against a dark card the ink tone is the faintest it gets.
|
|
510
|
+
'corner-accent': token('dark-primary-text-color'),
|
|
508
511
|
);
|
|
509
512
|
|
|
510
513
|
// Light theme colors. Emitted as --mw-light-<key>.
|
|
@@ -537,6 +540,10 @@ $light-theme-colors: (
|
|
|
537
540
|
'danger-text-color': ink-on-light('danger-color'),
|
|
538
541
|
'info-text-color': ink-on-light('info-color'),
|
|
539
542
|
'border-accent': fade('light-primary-text-color', 70%),
|
|
543
|
+
// Held back a little against the dark theme: the same blue on a near-white
|
|
544
|
+
// card carries far more contrast than it does on a dark one, and at full
|
|
545
|
+
// strength the arc stops being a detail and starts being a frame.
|
|
546
|
+
'corner-accent': fade('light-primary-text-color', 80%),
|
|
540
547
|
);
|
|
541
548
|
|
|
542
549
|
// Header/navbar colors. The bar is dark in both themes, so every tone here is
|
|
@@ -29,6 +29,15 @@ body {
|
|
|
29
29
|
}
|
|
30
30
|
}
|
|
31
31
|
|
|
32
|
+
// The UA rule behind the `hidden` attribute is `[hidden] { display: none }`, and
|
|
33
|
+
// every component in here that sets its own `display` beats it on specificity -
|
|
34
|
+
// a hidden `mw-tag` or `mw-btn` stays on screen. `!important` is the only thing
|
|
35
|
+
// that wins against a class, and it is also what Angular's `[hidden]` binding
|
|
36
|
+
// and every `el.hidden = true` in an application expect to happen.
|
|
37
|
+
[hidden] {
|
|
38
|
+
display: none !important;
|
|
39
|
+
}
|
|
40
|
+
|
|
32
41
|
// A selection in the browser default blue on a deep blue page is the one bit of
|
|
33
42
|
// chrome that gives away that nobody looked. Brand tint, kept translucent so it
|
|
34
43
|
// works over a card, a code block and an image caption alike.
|
|
@@ -24,7 +24,7 @@ $_mw-calendar-dot-tones: (
|
|
|
24
24
|
padding: spacing('5');
|
|
25
25
|
background: var(--mw-card-background);
|
|
26
26
|
border: 1px solid var(--mw-border);
|
|
27
|
-
|
|
27
|
+
@include surface;
|
|
28
28
|
box-shadow: var(--mw-elevation-2);
|
|
29
29
|
}
|
|
30
30
|
|
|
@@ -47,11 +47,10 @@ $_mw-card-addon-colors: (
|
|
|
47
47
|
display: flex;
|
|
48
48
|
flex-direction: column;
|
|
49
49
|
background: var(--mw-card-background);
|
|
50
|
-
|
|
50
|
+
@include surface;
|
|
51
51
|
box-shadow: var(--mw-elevation-2);
|
|
52
52
|
border: 1px solid var(--mw-border);
|
|
53
53
|
transition: var(--mw-transition);
|
|
54
|
-
position: relative;
|
|
55
54
|
// deliberately not `overflow: hidden` - that would also cut off anything a
|
|
56
55
|
// child wants to show outside the card, a tooltip above a button being the
|
|
57
56
|
// common case. Images round their own corners below, and only the ribbon
|
|
@@ -288,7 +288,7 @@ $_mw-kanban-ribbon-clearance-compact: 58px;
|
|
|
288
288
|
background: var(--mw-card-background);
|
|
289
289
|
border: 1px dashed var(--mw-primary-text-color);
|
|
290
290
|
// Same silhouette as a ticket, so it reads as one being written
|
|
291
|
-
|
|
291
|
+
@include surface;
|
|
292
292
|
|
|
293
293
|
&.mw-active {
|
|
294
294
|
display: flex;
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
.mw-panel {
|
|
4
4
|
background: var(--mw-card-background);
|
|
5
|
-
|
|
5
|
+
@include surface(2px);
|
|
6
6
|
border: 2px solid var(--mw-border);
|
|
7
7
|
overflow: hidden;
|
|
8
8
|
display: flex;
|
|
@@ -62,6 +62,15 @@
|
|
|
62
62
|
}
|
|
63
63
|
}
|
|
64
64
|
|
|
65
|
+
// The coloured header already owns the top-right corner. An arc drawn over it
|
|
66
|
+
// either disappears into the primary fill or fights the secondary one - a
|
|
67
|
+
// blue bow on an orange header reads as a rendering fault, not as a mark. The
|
|
68
|
+
// bottom corner carries it alone on these two.
|
|
69
|
+
&-primary::after,
|
|
70
|
+
&-secondary::after {
|
|
71
|
+
@include corner-accent(2px, 'bottom');
|
|
72
|
+
}
|
|
73
|
+
|
|
65
74
|
// Scrollable variant for fixed height
|
|
66
75
|
&-scrollable {
|
|
67
76
|
max-height: 500px;
|
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
@use '../abstracts' as *;
|
|
2
|
+
|
|
3
|
+
// The word variant is set down from the price size and then has to climb back
|
|
4
|
+
// to its line box - the two numbers only work as a pair, so they are named.
|
|
5
|
+
$_mw-price-line-height: 1.1;
|
|
6
|
+
$_mw-price-word-scale: 0.68;
|
|
7
|
+
|
|
8
|
+
// ---------------------------------------------------------------------------
|
|
9
|
+
// Price
|
|
10
|
+
//
|
|
11
|
+
// The figure, not the card around it: one baseline row holding the price that
|
|
12
|
+
// was, the price that is, the unit and a discount tag.
|
|
13
|
+
//
|
|
14
|
+
// Every part is sized in `em` off a single token, so the size variants only
|
|
15
|
+
// have to retune `--mw-price-size` and the whole row moves together - cents,
|
|
16
|
+
// currency and struck-through original included.
|
|
17
|
+
// ---------------------------------------------------------------------------
|
|
18
|
+
|
|
19
|
+
.mw-price {
|
|
20
|
+
--mw-price-size: #{font-size('3xl')};
|
|
21
|
+
|
|
22
|
+
display: flex;
|
|
23
|
+
flex-wrap: wrap;
|
|
24
|
+
// Baseline, not centre: figure and words are read as one line of text, and
|
|
25
|
+
// centring a 0.45em word against a 2.2rem number floats it in the middle of
|
|
26
|
+
// the digits instead of sitting it on them.
|
|
27
|
+
align-items: baseline;
|
|
28
|
+
gap: spacing('2') spacing('3');
|
|
29
|
+
margin: spacing('0');
|
|
30
|
+
font-size: var(--mw-price-size);
|
|
31
|
+
line-height: $_mw-price-line-height;
|
|
32
|
+
color: var(--mw-primary-text-color);
|
|
33
|
+
|
|
34
|
+
// A pill is a box, not a word - on the baseline it hangs off the bottom of
|
|
35
|
+
// the digits. Centre is where the eye looks for it.
|
|
36
|
+
> .mw-tag,
|
|
37
|
+
> .mw-badge {
|
|
38
|
+
align-self: center;
|
|
39
|
+
flex-shrink: 0;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
&-amount {
|
|
43
|
+
font-weight: font-weight('bold');
|
|
44
|
+
// Two prices under each other line up, and a figure swapped by a billing
|
|
45
|
+
// toggle does not jump sideways on the way
|
|
46
|
+
font-variant-numeric: tabular-nums lining-nums;
|
|
47
|
+
font-feature-settings: 'tnum', 'lnum';
|
|
48
|
+
white-space: nowrap;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
// Cents, written inside the amount. One step down and left on the baseline -
|
|
52
|
+
// cents raised to the cap height are a discounter's idiom, and a service
|
|
53
|
+
// price that borrows it reads cheaper than it is.
|
|
54
|
+
&-fraction {
|
|
55
|
+
font-size: 0.62em;
|
|
56
|
+
font-weight: font-weight('medium');
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
// "Euro", "CHF", "€" - the unit, not the number, so it does not carry the
|
|
60
|
+
// weight either.
|
|
61
|
+
//
|
|
62
|
+
// The floor is where the `em` chain stops being useful: 0.45 of an
|
|
63
|
+
// `mw-price-sm` is 11px, and that is the size most offer cards run at.
|
|
64
|
+
&-currency {
|
|
65
|
+
font-size: max(0.45em, #{font-size('xs')});
|
|
66
|
+
font-weight: font-weight('normal');
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
// What it cost before the discount. Muted *and* struck: muted alone reads as
|
|
70
|
+
// a footnote, the line is what says "this is no longer the price".
|
|
71
|
+
//
|
|
72
|
+
// The rule is drawn explicitly, because the browser default is a hairline
|
|
73
|
+
// that vanishes at this size against a muted tone.
|
|
74
|
+
&-original {
|
|
75
|
+
// Floored higher than the unit - this one is a figure, and a reader has to
|
|
76
|
+
// be able to compare it with the one next to it
|
|
77
|
+
font-size: max(0.5em, #{font-size('sm')});
|
|
78
|
+
font-weight: font-weight('normal');
|
|
79
|
+
color: var(--mw-text-muted-color);
|
|
80
|
+
text-decoration: line-through;
|
|
81
|
+
text-decoration-thickness: 0.09em;
|
|
82
|
+
white-space: nowrap;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
// "/ month", "per session" - what the price is per
|
|
86
|
+
&-period {
|
|
87
|
+
font-size: max(0.42em, #{font-size('xs')});
|
|
88
|
+
font-weight: font-weight('normal');
|
|
89
|
+
color: var(--mw-text-muted-color);
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
// "On request", "free" - not a figure, so not set like one. Still bold, so it
|
|
93
|
+
// holds the same slot in a row of cards as a real price would.
|
|
94
|
+
//
|
|
95
|
+
// The line height is scaled back up to the one a full-size amount has: a row
|
|
96
|
+
// of offers puts "On request" next to "129", and a shorter line box would sit
|
|
97
|
+
// that card's price a few pixels out of line with its neighbours.
|
|
98
|
+
&-word {
|
|
99
|
+
font-size: $_mw-price-word-scale * 1em;
|
|
100
|
+
line-height: calc(#{$_mw-price-line-height}em / #{$_mw-price-word-scale});
|
|
101
|
+
font-weight: font-weight('bold');
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
// The line under a price - what it includes, what it saves. A *sibling* of
|
|
105
|
+
// the row, not a child: inside it, it would inherit the price size and be a
|
|
106
|
+
// flex item on the same baseline.
|
|
107
|
+
&-note {
|
|
108
|
+
margin: spacing('2') spacing('0') spacing('0');
|
|
109
|
+
font-size: font-size('sm');
|
|
110
|
+
color: var(--mw-text-muted-color);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
// Size. Only the token moves - see the `em` above.
|
|
115
|
+
.mw-price-sm {
|
|
116
|
+
--mw-price-size: #{font-size('xl')};
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
.mw-price-lg {
|
|
120
|
+
--mw-price-size: #{font-size('5xl')};
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
// The old price on its own line above the new one - for a narrow card where the
|
|
124
|
+
// row would otherwise wrap at whatever point it runs out of width. The
|
|
125
|
+
// `flex-basis` is the line break: a wrapper element around the rest would do
|
|
126
|
+
// the same job and cost an element in every price on the page.
|
|
127
|
+
.mw-price-stacked .mw-price-original {
|
|
128
|
+
flex-basis: 100%;
|
|
129
|
+
margin-bottom: spacing('-1');
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
.mw-price-center {
|
|
133
|
+
justify-content: center;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
// Body colour instead of the brand - for a table row or a list where a coloured
|
|
137
|
+
// price would be the loudest thing on screen for no reason.
|
|
138
|
+
.mw-price-plain {
|
|
139
|
+
color: var(--mw-text-color);
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
// ---------------------------------------------------------------------------
|
|
143
|
+
// Offer card
|
|
144
|
+
//
|
|
145
|
+
// The card a price is sold from: what you get, what it costs, the button that
|
|
146
|
+
// asks for it. Deliberately thin - shell, body and footer are `mw-card`'s, this
|
|
147
|
+
// adds only what selling something needs.
|
|
148
|
+
// ---------------------------------------------------------------------------
|
|
149
|
+
|
|
150
|
+
.mw-offer {
|
|
151
|
+
// Prices in a row of offers have to sit on one line, and the feature lists
|
|
152
|
+
// are never the same length. Pushed down rather than positioned: the grid
|
|
153
|
+
// already stretches the cards to equal height, so "as far down as it goes"
|
|
154
|
+
// resolves to the same line in every card of the row.
|
|
155
|
+
> .mw-card-body > .mw-price {
|
|
156
|
+
margin-top: auto;
|
|
157
|
+
padding-top: spacing('5');
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
// The card body already pushes its footer down the same way. Two `auto`
|
|
161
|
+
// margins in one column *share* the free space instead of collecting it above
|
|
162
|
+
// the first, which leaves the price floating somewhere in the middle and at a
|
|
163
|
+
// different height in every card - so the footer gives its own up as soon as
|
|
164
|
+
// a price stands in front of it.
|
|
165
|
+
//
|
|
166
|
+
// Bottom-aligned, note included: a card that carries a `mw-price-note` and
|
|
167
|
+
// one that does not will not have their prices on the same line. Give every
|
|
168
|
+
// card in a row a note, or none of them.
|
|
169
|
+
> .mw-card-body > .mw-price ~ .mw-card-footer {
|
|
170
|
+
margin-top: spacing('0');
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
// A solid band across the top carrying the name and the price - the layout
|
|
174
|
+
// for when the price is the thing being compared and the feature list is
|
|
175
|
+
// only its justification. Colour comes from `mw-card-addon-*` on the card,
|
|
176
|
+
// the same set the card badge and the ribbon read.
|
|
177
|
+
&-head {
|
|
178
|
+
display: flex;
|
|
179
|
+
flex-direction: column;
|
|
180
|
+
align-items: center;
|
|
181
|
+
gap: spacing('2');
|
|
182
|
+
padding: spacing('6') spacing('5');
|
|
183
|
+
// The card's own radius minus its border - the band sits inside it
|
|
184
|
+
border-radius: (radius('sm') - 1px) (radius('xl') - 1px) 0 0;
|
|
185
|
+
background: var(--mw-card-addon-color, var(--mw-primary-color));
|
|
186
|
+
color: var(--mw-card-addon-text-color, var(--mw-primary-accent-text-color));
|
|
187
|
+
text-align: center;
|
|
188
|
+
|
|
189
|
+
// On a solid fill the price cannot keep the brand colour, and the muted
|
|
190
|
+
// parts cannot keep a grey that was mixed against the page background
|
|
191
|
+
.mw-price,
|
|
192
|
+
.mw-price-original,
|
|
193
|
+
.mw-price-period {
|
|
194
|
+
color: inherit;
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
.mw-price-original,
|
|
198
|
+
.mw-price-period {
|
|
199
|
+
opacity: 0.7;
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
&-name {
|
|
204
|
+
margin: spacing('0');
|
|
205
|
+
font-size: font-size('md');
|
|
206
|
+
font-weight: font-weight('bold');
|
|
207
|
+
letter-spacing: 0.06em;
|
|
208
|
+
text-transform: uppercase;
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
// With a band above it the body no longer opens the card, so it does not need
|
|
212
|
+
// the air a card top usually gets
|
|
213
|
+
&-head + .mw-card-body {
|
|
214
|
+
padding-top: spacing('6');
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
// The band owns the top-right corner. An arc drawn over it either disappears
|
|
219
|
+
// into the fill or fights it - the same call the coloured panel header makes.
|
|
220
|
+
.mw-offer:has(> .mw-offer-head)::after {
|
|
221
|
+
@include corner-accent(1px, 'bottom');
|
|
222
|
+
}
|
|
@@ -65,6 +65,18 @@
|
|
|
65
65
|
background: var(--mw-primary-color);
|
|
66
66
|
border-color: var(--mw-primary-text-color);
|
|
67
67
|
color: var(--mw-primary-accent-text-color);
|
|
68
|
+
|
|
69
|
+
// A tag inside an item - the saving on a billing cycle, a count on a
|
|
70
|
+
// filter. Its colour variants mix their background from the *page*, so on
|
|
71
|
+
// the active item's fill they come out muddy: an orange pill on blue turns
|
|
72
|
+
// purple. On that one the tag borrows the item's own ink; on the others it
|
|
73
|
+
// keeps its colour, which is what makes a visitor click it in the first
|
|
74
|
+
// place.
|
|
75
|
+
.mw-tag {
|
|
76
|
+
background: transparent;
|
|
77
|
+
border-color: currentColor;
|
|
78
|
+
color: inherit;
|
|
79
|
+
}
|
|
68
80
|
}
|
|
69
81
|
}
|
|
70
82
|
|
|
@@ -62,12 +62,11 @@
|
|
|
62
62
|
// Base tile
|
|
63
63
|
.mw-tile {
|
|
64
64
|
background: var(--mw-card-background);
|
|
65
|
-
|
|
65
|
+
@include surface;
|
|
66
66
|
padding: spacing('5');
|
|
67
67
|
box-shadow: var(--mw-elevation-2);
|
|
68
68
|
transition: var(--mw-transition);
|
|
69
69
|
border: 1px solid var(--mw-border);
|
|
70
|
-
position: relative;
|
|
71
70
|
overflow: hidden;
|
|
72
71
|
display: flex;
|
|
73
72
|
flex-direction: column;
|
|
@@ -2,11 +2,10 @@
|
|
|
2
2
|
|
|
3
3
|
.mw-login {
|
|
4
4
|
background: var(--mw-card-background);
|
|
5
|
-
|
|
5
|
+
@include surface;
|
|
6
6
|
box-shadow: var(--mw-elevation-2);
|
|
7
7
|
transition: var(--mw-transition);
|
|
8
8
|
border: 1px solid var(--mw-border);
|
|
9
|
-
position: relative;
|
|
10
9
|
overflow: hidden;
|
|
11
10
|
width: min(340px, 85%);
|
|
12
11
|
margin: spacing('2') auto;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
@use '../abstracts' as *;
|
|
2
|
+
|
|
3
|
+
// Opt-out from the corner accent - the arc on the two round corners that every
|
|
4
|
+
// surface in the framework carries, see the surface() mixin. Everything else
|
|
5
|
+
// stays: the radii, the border, the shadow, the hover.
|
|
6
|
+
.mw-corner-plain::after {
|
|
7
|
+
content: none;
|
|
8
|
+
}
|