maverick-wave 5.33.0 → 5.34.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.
@@ -0,0 +1,963 @@
1
+ @use '../abstracts' as *;
2
+
3
+ // The content of a slide. Loaded by _deck.scss; every block sizes itself in the
4
+ // deck's type scale and paints with the tone tokens of the slide it sits on.
5
+
6
+ @layer mw.components {
7
+ .mw-deck-kicker {
8
+ display: flex;
9
+ flex-wrap: wrap;
10
+ align-items: baseline;
11
+ gap: 0.35em 1em;
12
+ color: var(--mw-deck-muted);
13
+ font-size: var(--mw-deck-text-sm);
14
+ font-weight: 600;
15
+ letter-spacing: 0.16em;
16
+ text-transform: uppercase;
17
+
18
+ b {
19
+ color: var(--mw-deck-mark);
20
+ font-weight: 700;
21
+ }
22
+ }
23
+
24
+ .mw-deck-title {
25
+ margin-top: 0.45em;
26
+ font-family: var(--mw-font-family-heading);
27
+ font-size: var(--mw-deck-text-lg);
28
+ font-weight: var(--mw-deck-title-weight);
29
+ line-height: var(--mw-deck-title-leading);
30
+ letter-spacing: var(--mw-deck-title-tracking);
31
+ text-transform: var(--mw-deck-title-case);
32
+ text-wrap: balance;
33
+
34
+ // Both, because content marks a phrase with **...** and that arrives as strong
35
+ :is(em, strong) {
36
+ color: var(--mw-deck-mark);
37
+ font-style: normal;
38
+ font-weight: inherit;
39
+ }
40
+ }
41
+
42
+ .mw-deck-title-xl {
43
+ font-size: var(--mw-deck-text-xl);
44
+ }
45
+
46
+ // A unit inside an uppercase title keeps its spelling: kWp, not KWP
47
+ .mw-deck-unit {
48
+ text-transform: none;
49
+ }
50
+
51
+ .mw-deck-lead {
52
+ max-width: 34ch;
53
+ margin-top: 0.9em;
54
+ font-size: var(--mw-deck-text-md);
55
+ line-height: 1.3;
56
+ text-wrap: pretty;
57
+ }
58
+
59
+ .mw-deck-text {
60
+ max-width: 46ch;
61
+ margin-top: 1.1em;
62
+ color: var(--mw-deck-muted);
63
+ font-size: var(--mw-deck-text);
64
+ line-height: 1.55;
65
+ text-wrap: pretty;
66
+ }
67
+
68
+ .mw-deck-media {
69
+ display: grid;
70
+ // Without a fixed row an SVG takes its height from its width and runs down
71
+ // into the text
72
+ grid-template: minmax(0, 1fr) / minmax(0, 1fr);
73
+ place-items: center;
74
+ min-height: 0;
75
+
76
+ > svg,
77
+ > .mw-deck-image {
78
+ width: 100%;
79
+ height: 100%;
80
+ }
81
+ }
82
+
83
+ // Orientation is the window's, so it only speaks for a deck that fills it -
84
+ // a portrait deck on a desktop stands in a landscape window
85
+ .mw-deck-landscape .mw-deck-media {
86
+ height: 100%;
87
+ max-height: 68vh;
88
+
89
+ @media (orientation: portrait) {
90
+ max-height: 46vh;
91
+ }
92
+ }
93
+
94
+ .mw-deck-portrait .mw-deck-media {
95
+ flex: 1 1 auto;
96
+ }
97
+
98
+ // Label over value, in two columns - three with .mw-deck-facts-3 in landscape
99
+ .mw-deck-facts {
100
+ display: grid;
101
+ grid-template-columns: repeat(2, minmax(0, 1fr));
102
+ gap: 1.1em 2em;
103
+ margin-top: 2em;
104
+
105
+ > div {
106
+ padding-top: 0.7em;
107
+ border-top: 1px solid var(--mw-deck-line);
108
+ }
109
+
110
+ dt {
111
+ color: var(--mw-deck-muted);
112
+ font-size: var(--mw-deck-text-sm);
113
+ letter-spacing: 0.08em;
114
+ text-transform: uppercase;
115
+ }
116
+
117
+ dd {
118
+ margin-top: 0.2em;
119
+ font-weight: 600;
120
+ font-variant-numeric: tabular-nums;
121
+ }
122
+ }
123
+
124
+ .mw-deck-landscape .mw-deck-facts-3 {
125
+ @media (orientation: landscape) {
126
+ grid-template-columns: repeat(3, minmax(0, 1fr));
127
+ }
128
+ }
129
+
130
+ // Big numbers with a line under them. The value comes second in the markup,
131
+ // where a screen reader wants it, and is turned to the top.
132
+ .mw-deck-figures {
133
+ display: grid;
134
+ grid-template-columns: repeat(auto-fit, minmax(min(100%, 11rem), 1fr));
135
+ align-self: end;
136
+ gap: 4vmin;
137
+
138
+ > div {
139
+ display: flex;
140
+ flex-direction: column-reverse;
141
+ justify-content: flex-end;
142
+ padding-top: 1em;
143
+ border-top: 1px solid var(--mw-deck-line);
144
+ }
145
+
146
+ dd {
147
+ font-family: var(--mw-font-family-heading);
148
+ font-size: var(--mw-deck-text-xl);
149
+ font-weight: var(--mw-deck-title-weight);
150
+ font-variant-numeric: tabular-nums;
151
+ line-height: 1;
152
+ letter-spacing: var(--mw-deck-title-tracking);
153
+ }
154
+
155
+ dt {
156
+ max-width: 18ch;
157
+ margin-top: 0.6em;
158
+ color: var(--mw-deck-muted);
159
+ font-size: var(--mw-deck-text-sm);
160
+ line-height: 1.4;
161
+ }
162
+ }
163
+
164
+ // A chart and its numbers: side by side on a landscape screen, one above
165
+ // the other otherwise
166
+ .mw-deck-columns {
167
+ display: grid;
168
+ align-items: end;
169
+ gap: 6vmin;
170
+ min-height: 0;
171
+
172
+ .mw-deck-figures {
173
+ grid-template-columns: minmax(0, 1fr);
174
+ gap: 2.6vmin;
175
+ }
176
+
177
+ .mw-deck-figures dd {
178
+ font-size: var(--mw-deck-text-lg);
179
+ }
180
+ }
181
+
182
+ .mw-deck-landscape .mw-deck-columns {
183
+ @media (orientation: landscape) {
184
+ grid-template-columns: minmax(0, 2.1fr) minmax(0, 1fr);
185
+ }
186
+ }
187
+
188
+ .mw-deck-list {
189
+ margin-top: 1.6em;
190
+
191
+ li {
192
+ display: flex;
193
+ align-items: baseline;
194
+ justify-content: space-between;
195
+ gap: 1em;
196
+ padding: 0.7em 0;
197
+ border-top: 1px solid var(--mw-deck-line);
198
+ }
199
+
200
+ li > :last-child {
201
+ color: var(--mw-deck-muted);
202
+ text-align: end;
203
+ }
204
+ }
205
+
206
+ .mw-deck-chips {
207
+ display: flex;
208
+ flex-wrap: wrap;
209
+ gap: 0.45em;
210
+ margin-top: 1.2em;
211
+
212
+ > span {
213
+ padding: 0.35em 0.85em;
214
+ border: 1px solid var(--mw-deck-line);
215
+ border-radius: radius('full');
216
+ font-size: var(--mw-deck-text-sm);
217
+ }
218
+ }
219
+
220
+ // mw-btn in the deck's type scale, so a button grows with the slide. The
221
+ // colours are not overridden but the brand tokens retuned to the slide:
222
+ // hover, active and every button variant of the site follow on their own.
223
+ .mw-deck-actions {
224
+ --mw-primary-text-color: var(--mw-deck-mark);
225
+
226
+ display: flex;
227
+ flex-wrap: wrap;
228
+ gap: 0.6em;
229
+ margin-top: 1.8em;
230
+ font-size: var(--mw-deck-text-sm);
231
+
232
+ .mw-btn {
233
+ min-height: 2.9em;
234
+ padding: 0.85em 1.4em;
235
+ }
236
+ }
237
+
238
+ // The brand is the surface here, so the solid button turns around
239
+ .mw-slide-primary .mw-deck-actions {
240
+ --mw-primary-color: var(--mw-deck-fill);
241
+ --mw-primary-color-hover: color-mix(
242
+ in srgb,
243
+ var(--mw-deck-fill) 86%,
244
+ var(--mw-deck-fill-ink)
245
+ );
246
+ --mw-primary-accent-text-color: var(--mw-deck-fill-ink);
247
+ }
248
+
249
+ // Buttons that jump to a slide, drawn as a row of tiles
250
+ .mw-deck-jumps {
251
+ display: grid;
252
+ grid-auto-columns: minmax(0, 1fr);
253
+ grid-auto-flow: column;
254
+ align-self: end;
255
+ gap: 3vmin;
256
+
257
+ button {
258
+ @include surface;
259
+ display: flex;
260
+ flex-direction: column;
261
+ gap: 0.9em;
262
+ width: 100%;
263
+ height: 100%;
264
+ padding: 1.4em;
265
+ border: 1px solid var(--mw-deck-line);
266
+ background: none;
267
+ text-align: start;
268
+ cursor: pointer;
269
+ transition: var(--mw-transition);
270
+ @include tappable;
271
+ @include focus-ring(3px, var(--mw-deck-mark));
272
+
273
+ &:hover {
274
+ border-color: var(--mw-deck-mark);
275
+ }
276
+
277
+ &:active {
278
+ transform: scale(0.98);
279
+ transition-duration: var(--mw-duration-instant);
280
+ }
281
+
282
+ @include hover-move {
283
+ transform: translateY(-2px);
284
+ }
285
+ }
286
+
287
+ strong {
288
+ font-family: var(--mw-font-family-heading);
289
+ font-size: var(--mw-deck-text-md);
290
+ font-weight: var(--mw-deck-title-weight);
291
+ line-height: 1.15;
292
+ letter-spacing: var(--mw-deck-title-tracking);
293
+ }
294
+ }
295
+
296
+ .mw-deck-jump-hint {
297
+ margin-top: auto;
298
+ color: var(--mw-deck-mark);
299
+ font-size: var(--mw-deck-text-sm);
300
+ font-weight: 700;
301
+ letter-spacing: 0.04em;
302
+ }
303
+
304
+ // A column of tiles on a phone
305
+ .mw-deck-portrait .mw-deck-jumps {
306
+ grid-auto-flow: row;
307
+ }
308
+
309
+ .mw-deck-image {
310
+ position: relative;
311
+ overflow: hidden;
312
+ border-radius: var(--mw-deck-radius);
313
+ background-color: color-mix(in srgb, currentColor 8%, transparent);
314
+
315
+ img {
316
+ width: 100%;
317
+ height: 100%;
318
+ object-fit: cover;
319
+ }
320
+ }
321
+
322
+ .mw-deck-image-right img {
323
+ object-position: 72% 50%;
324
+ }
325
+
326
+ // Portrait: bleeds to the edges under the chrome
327
+ .mw-deck-image-top {
328
+ margin: -5.2rem calc(-1 * var(--mw-deck-gutter)) 0;
329
+ aspect-ratio: 4 / 3.3;
330
+ border-radius: 0;
331
+ }
332
+
333
+ .mw-deck-image-top-tall {
334
+ aspect-ratio: 4 / 4.4;
335
+ }
336
+
337
+ .mw-slide-cover {
338
+ > .mw-deck-image {
339
+ position: absolute;
340
+ inset: 0;
341
+ z-index: 0;
342
+ border-radius: 0;
343
+
344
+ &::after {
345
+ content: '';
346
+ position: absolute;
347
+ inset: 0;
348
+ background: linear-gradient(
349
+ to top,
350
+ rgb(0 0 0 / 70%) 8%,
351
+ transparent 58%
352
+ );
353
+ }
354
+ }
355
+
356
+ > :not(.mw-deck-image) {
357
+ position: relative;
358
+ z-index: 1;
359
+ }
360
+ }
361
+
362
+ // One wide picture over two, captions on the pictures
363
+ .mw-deck-images {
364
+ display: grid;
365
+ flex: 1;
366
+ grid-template-columns: repeat(2, minmax(0, 1fr));
367
+ grid-auto-rows: minmax(0, 1fr);
368
+ gap: spacing('3');
369
+ min-height: 0;
370
+
371
+ .mw-deck-image:first-child {
372
+ grid-column: 1 / -1;
373
+ }
374
+
375
+ .mw-deck-image::after {
376
+ content: '';
377
+ position: absolute;
378
+ inset: 0;
379
+ background: linear-gradient(to top, rgb(0 0 0 / 55%), transparent 38%);
380
+ }
381
+
382
+ figcaption {
383
+ position: absolute;
384
+ right: 0.6rem;
385
+ bottom: 0.5rem;
386
+ left: 0.6rem;
387
+ z-index: 1;
388
+ color: $fixed-surface-text;
389
+ font-size: var(--mw-deck-text-sm);
390
+ }
391
+ }
392
+
393
+ .mw-deck-price {
394
+ font-family: var(--mw-font-family-heading);
395
+ font-size: var(--mw-deck-text-lg);
396
+ font-weight: var(--mw-deck-title-weight);
397
+ font-variant-numeric: tabular-nums;
398
+ line-height: 1;
399
+
400
+ small {
401
+ margin-inline-start: 0.35em;
402
+ color: var(--mw-deck-muted);
403
+ font-family: var(--mw-font-family-base);
404
+ font-size: var(--mw-deck-text-sm);
405
+ font-weight: 400;
406
+ }
407
+ }
408
+
409
+ // The base blockquote is a tinted box with Georgia marks in its corners. Here
410
+ // one big mark stands on a line of its own - inline marks would pick up the
411
+ // whitespace a formatter puts around the text.
412
+ .mw-deck-quote {
413
+ padding: 0;
414
+ border: 0;
415
+ border-radius: 0;
416
+ background: none;
417
+ color: inherit;
418
+ font-family: var(--mw-font-family-heading);
419
+ font-size: var(--mw-deck-text-md);
420
+ font-style: normal;
421
+ font-weight: var(--mw-deck-title-weight);
422
+ line-height: 1.3;
423
+ text-wrap: pretty;
424
+
425
+ &::before {
426
+ content: open-quote;
427
+ position: static;
428
+ display: block;
429
+ height: 0.62em;
430
+ color: var(--mw-deck-mark);
431
+ font-size: 2.6em;
432
+ line-height: 1;
433
+ opacity: 1;
434
+ }
435
+
436
+ &::after {
437
+ content: no-close-quote;
438
+ }
439
+ }
440
+
441
+ .mw-deck-source {
442
+ margin-top: 1em;
443
+ color: var(--mw-deck-muted);
444
+ font-size: var(--mw-deck-text-sm);
445
+ letter-spacing: 0.06em;
446
+ }
447
+
448
+ // Steps: side by side on a line, one above the other upright
449
+ .mw-deck-steps {
450
+ display: grid;
451
+ grid-auto-columns: minmax(0, 1fr);
452
+ grid-auto-flow: column;
453
+ align-self: end;
454
+ gap: 3vmin;
455
+ counter-reset: mw-deck-step;
456
+
457
+ li {
458
+ position: relative;
459
+ padding-top: 2.2em;
460
+ counter-increment: mw-deck-step;
461
+
462
+ &::before {
463
+ content: '';
464
+ position: absolute;
465
+ top: 0.45em;
466
+ right: -3vmin;
467
+ left: 0;
468
+ height: 1px;
469
+ background-color: var(--mw-deck-line);
470
+ }
471
+
472
+ // The number cuts the line with the slide's own ground behind it
473
+ &::after {
474
+ content: counter(mw-deck-step, decimal-leading-zero);
475
+ position: absolute;
476
+ top: 0;
477
+ left: 0;
478
+ padding-inline-end: 0.6em;
479
+ background-color: var(--mw-deck-ground);
480
+ color: var(--mw-deck-mark);
481
+ font-size: var(--mw-deck-text-sm);
482
+ font-weight: 700;
483
+ letter-spacing: 0.1em;
484
+ }
485
+
486
+ &:last-child::before {
487
+ right: 0;
488
+ }
489
+ }
490
+
491
+ h3 {
492
+ font-family: inherit;
493
+ font-size: var(--mw-deck-text);
494
+ font-weight: 700;
495
+ line-height: 1.3;
496
+ letter-spacing: 0;
497
+ }
498
+
499
+ p {
500
+ margin-top: 0.4em;
501
+ color: var(--mw-deck-muted);
502
+ font-size: var(--mw-deck-text-sm);
503
+ line-height: 1.5;
504
+ }
505
+ }
506
+
507
+ .mw-deck-landscape .mw-deck-steps {
508
+ @media (orientation: portrait) {
509
+ grid-template-columns: repeat(2, minmax(0, 1fr));
510
+ grid-auto-flow: row;
511
+ row-gap: 4vmin;
512
+ }
513
+ }
514
+
515
+ .mw-deck-portrait .mw-deck-steps {
516
+ grid-auto-flow: row;
517
+ align-self: stretch;
518
+ gap: 0;
519
+
520
+ li {
521
+ padding: 0 0 1.1em 2.6em;
522
+
523
+ &::before {
524
+ top: 1.5em;
525
+ right: auto;
526
+ bottom: 0;
527
+ left: 0.7em;
528
+ width: 1px;
529
+ height: auto;
530
+ }
531
+
532
+ &::after {
533
+ padding: 0;
534
+ }
535
+
536
+ &:last-child::before {
537
+ display: none;
538
+ }
539
+ }
540
+ }
541
+
542
+ // Prices and positions: the last column is the amount
543
+ .mw-deck-table {
544
+ width: 100%;
545
+ font-variant-numeric: tabular-nums;
546
+
547
+ tbody tr:nth-child(even) {
548
+ background: none;
549
+ }
550
+
551
+ th,
552
+ td {
553
+ padding: 0.65em 0;
554
+ border: 0;
555
+ border-top: 1px solid var(--mw-deck-line);
556
+ text-align: start;
557
+ vertical-align: baseline;
558
+ }
559
+
560
+ :is(td, th):last-child {
561
+ padding-inline-start: 1.5em;
562
+ text-align: end;
563
+ white-space: nowrap;
564
+ }
565
+
566
+ th {
567
+ background: none;
568
+ color: var(--mw-deck-muted);
569
+ font-size: var(--mw-deck-text-sm);
570
+ font-weight: 600;
571
+ letter-spacing: 0.08em;
572
+ text-transform: uppercase;
573
+ }
574
+
575
+ small {
576
+ display: block;
577
+ color: var(--mw-deck-muted);
578
+ font-size: var(--mw-deck-text-sm);
579
+ }
580
+ }
581
+
582
+ .mw-deck-table-total td {
583
+ padding-top: 0.9em;
584
+ border-top: 3px double var(--mw-deck-line);
585
+ font-family: var(--mw-font-family-heading);
586
+ font-size: var(--mw-deck-text-md);
587
+ font-weight: var(--mw-deck-title-weight);
588
+ }
589
+
590
+ // Numbered notes, the numbers matching markers in a drawing next to them
591
+ .mw-deck-notes {
592
+ display: grid;
593
+ gap: 1em;
594
+ margin-top: 1.8em;
595
+ counter-reset: mw-deck-note;
596
+
597
+ li {
598
+ display: grid;
599
+ grid-template-columns: 1.9em minmax(0, 1fr);
600
+ align-items: baseline;
601
+ gap: 0.8em;
602
+ font-size: var(--mw-deck-text-sm);
603
+ line-height: 1.5;
604
+ counter-increment: mw-deck-note;
605
+
606
+ &::before {
607
+ content: counter(mw-deck-note);
608
+ display: grid;
609
+ place-items: center;
610
+ width: 1.9em;
611
+ height: 1.9em;
612
+ border-radius: radius('full');
613
+ background-color: var(--mw-deck-fill);
614
+ color: var(--mw-deck-fill-ink);
615
+ font-weight: 700;
616
+ }
617
+ }
618
+
619
+ strong {
620
+ display: block;
621
+ font-size: var(--mw-deck-text);
622
+ }
623
+ }
624
+
625
+ // Drawings: every stroke with pathLength="1" draws itself when its slide
626
+ // comes up - as long as the SVG also carries .mw-deck-draw
627
+ .mw-deck-drawing {
628
+ overflow: visible;
629
+ fill: none;
630
+ stroke: currentColor;
631
+ stroke-linecap: round;
632
+ stroke-linejoin: round;
633
+
634
+ text {
635
+ fill: var(--mw-deck-muted);
636
+ stroke: none;
637
+ font-family: var(--mw-font-family-base);
638
+ font-size: 13px;
639
+ letter-spacing: 0.08em;
640
+ }
641
+ }
642
+
643
+ .mw-deck-stroke,
644
+ .mw-deck-stroke-bold,
645
+ .mw-deck-stroke-fine {
646
+ stroke-dasharray: 1;
647
+ }
648
+
649
+ .mw-deck-stroke {
650
+ stroke-width: 1.5;
651
+ }
652
+
653
+ .mw-deck-stroke-bold {
654
+ stroke-width: 4;
655
+ }
656
+
657
+ .mw-deck-stroke-fine {
658
+ stroke-width: 0.8;
659
+ opacity: 0.55;
660
+ }
661
+
662
+ // After the stroke classes: a dash pattern of its own, and it never animates
663
+ .mw-deck-dashed {
664
+ stroke-dasharray: 5 5;
665
+ }
666
+
667
+ .mw-deck-area {
668
+ fill: var(--mw-deck-mark);
669
+ stroke: none;
670
+ }
671
+
672
+ .mw-deck-area-muted {
673
+ fill: var(--mw-deck-line);
674
+ stroke: none;
675
+ }
676
+
677
+ .mw-deck-area-light {
678
+ fill-opacity: 0.28;
679
+ }
680
+
681
+ .mw-deck-marker {
682
+ circle {
683
+ fill: var(--mw-deck-fill);
684
+ stroke: none;
685
+ }
686
+
687
+ text {
688
+ fill: var(--mw-deck-fill-ink);
689
+ font-size: 13px;
690
+ font-weight: 700;
691
+ letter-spacing: 0;
692
+ text-anchor: middle;
693
+ dominant-baseline: central;
694
+ }
695
+ }
696
+
697
+ // A finished illustration keeps its own colours; only these parts move
698
+ .mw-deck-illustration {
699
+ overflow: visible;
700
+ }
701
+
702
+ .mw-deck-flow {
703
+ fill: none;
704
+ stroke: var(--mw-deck-mark);
705
+ stroke-width: 2.5;
706
+ stroke-linecap: round;
707
+ stroke-dasharray: 3 9;
708
+ animation: mw-deck-flow motion(1.1s) linear infinite;
709
+ }
710
+
711
+ @keyframes mw-deck-flow {
712
+ to {
713
+ stroke-dashoffset: -12;
714
+ }
715
+ }
716
+
717
+ // Bars and a line over a grid - the bars in the brand ink (the fill stands at
718
+ // 1.5:1 on a dark slide), the line in the secondary colour, as in the legend
719
+ .mw-deck-chart {
720
+ width: 100%;
721
+ overflow: visible;
722
+
723
+ text {
724
+ fill: var(--mw-deck-muted);
725
+ font-family: var(--mw-font-family-base);
726
+ font-size: 12px;
727
+ }
728
+ }
729
+
730
+ .mw-deck-chart-grid line {
731
+ stroke: var(--mw-deck-line);
732
+ stroke-width: 1;
733
+ }
734
+
735
+ .mw-deck-chart-bar {
736
+ fill: var(--mw-deck-mark);
737
+ transition: opacity var(--mw-duration-fast) var(--mw-ease-out);
738
+ }
739
+
740
+ // A column the height of the chart, so the pointer hits the month and not
741
+ // only its bar
742
+ .mw-deck-chart-hit {
743
+ fill: transparent;
744
+ }
745
+
746
+ g:hover > .mw-deck-chart-bar {
747
+ opacity: 0.75;
748
+ }
749
+
750
+ .mw-deck-chart-line {
751
+ fill: none;
752
+ stroke: var(--mw-secondary-color);
753
+ stroke-width: 2;
754
+ stroke-linejoin: round;
755
+ }
756
+
757
+ .mw-deck-chart-point {
758
+ fill: var(--mw-secondary-color);
759
+ stroke: var(--mw-deck-ground);
760
+ stroke-width: 2;
761
+ }
762
+
763
+ .mw-deck-chart .mw-deck-chart-value {
764
+ fill: var(--mw-deck-ink);
765
+ font-weight: 700;
766
+ }
767
+
768
+ .mw-deck-legend {
769
+ display: flex;
770
+ flex-wrap: wrap;
771
+ gap: 0.5em 1.6em;
772
+ margin-top: 1.2em;
773
+ color: var(--mw-deck-muted);
774
+ font-size: var(--mw-deck-text-sm);
775
+
776
+ > span {
777
+ display: inline-flex;
778
+ align-items: center;
779
+ gap: 0.55em;
780
+ }
781
+
782
+ i {
783
+ display: inline-block;
784
+ width: 0.9em;
785
+ height: 0.9em;
786
+ border-radius: radius('xs');
787
+ background-color: currentColor;
788
+ }
789
+ }
790
+
791
+ .mw-deck-legend-bar i {
792
+ background-color: var(--mw-deck-mark);
793
+ }
794
+
795
+ .mw-deck-legend-line i {
796
+ background-color: var(--mw-secondary-color);
797
+ }
798
+
799
+ // Offers and packages: name and price on one line, the details below
800
+ .mw-deck-package {
801
+ display: grid;
802
+ grid-template-columns: minmax(0, 1fr) auto;
803
+ align-items: baseline;
804
+ gap: 0.2em 1em;
805
+ padding: 0.95em 0;
806
+ border-top: 1px solid var(--mw-deck-line);
807
+
808
+ h3 {
809
+ font-family: inherit;
810
+ font-size: var(--mw-deck-text);
811
+ font-weight: 700;
812
+ line-height: 1.3;
813
+ letter-spacing: 0;
814
+ }
815
+
816
+ p {
817
+ grid-column: 1 / -1;
818
+ color: var(--mw-deck-muted);
819
+ font-size: var(--mw-deck-text-sm);
820
+ line-height: 1.5;
821
+ }
822
+
823
+ b {
824
+ font-family: var(--mw-font-family-heading);
825
+ font-size: var(--mw-deck-text-md);
826
+ font-weight: var(--mw-deck-title-weight);
827
+ font-variant-numeric: tabular-nums;
828
+ white-space: nowrap;
829
+ }
830
+ }
831
+
832
+ .mw-deck-package-highlight {
833
+ margin-inline: -0.9rem;
834
+ padding-inline: 0.9rem;
835
+ border: 1px solid var(--mw-deck-mark);
836
+ border-radius: var(--mw-deck-radius);
837
+
838
+ + .mw-deck-package {
839
+ border-top-color: transparent;
840
+ }
841
+ }
842
+
843
+ // Pushed to the lower edge of a portrait slide
844
+ .mw-deck-bottom {
845
+ margin-top: auto;
846
+ }
847
+
848
+ .mw-deck-swipe {
849
+ display: flex;
850
+ flex-direction: column;
851
+ align-items: center;
852
+ gap: spacing('1');
853
+ margin-top: spacing('6');
854
+ font-size: var(--mw-deck-text-sm);
855
+ letter-spacing: 0.12em;
856
+ text-transform: uppercase;
857
+ opacity: 0.85;
858
+
859
+ svg {
860
+ width: 1.3rem;
861
+ fill: none;
862
+ stroke: currentColor;
863
+ stroke-width: 2;
864
+ stroke-linecap: round;
865
+ stroke-linejoin: round;
866
+ animation: mw-deck-swipe motion(1.8s) var(--mw-ease-in-out) infinite;
867
+ }
868
+ }
869
+
870
+ @keyframes mw-deck-swipe {
871
+ 0%,
872
+ 100% {
873
+ transform: translateY(0.25rem);
874
+ opacity: 0.4;
875
+ }
876
+
877
+ 50% {
878
+ transform: translateY(-0.25rem);
879
+ opacity: 1;
880
+ }
881
+ }
882
+
883
+ // What moves when a slide comes up - only once the script runs
884
+
885
+ .mw-deck-ready .mw-deck-draw {
886
+ :is(.mw-deck-stroke, .mw-deck-stroke-bold, .mw-deck-stroke-fine) {
887
+ stroke-dashoffset: 1;
888
+ transition: stroke-dashoffset calc(var(--mw-duration-slower) * 2)
889
+ var(--mw-ease-out);
890
+ }
891
+
892
+ :is(.mw-deck-area, .mw-deck-area-muted, .mw-deck-marker, text) {
893
+ opacity: 0;
894
+ transition: opacity var(--mw-duration-slower) var(--mw-ease-out)
895
+ var(--mw-duration-slower);
896
+ }
897
+ }
898
+
899
+ .mw-deck-ready .mw-slide.mw-active .mw-deck-draw {
900
+ :is(.mw-deck-stroke, .mw-deck-stroke-bold, .mw-deck-stroke-fine) {
901
+ stroke-dashoffset: 0;
902
+ }
903
+
904
+ :is(.mw-deck-area, .mw-deck-area-muted, .mw-deck-marker, text) {
905
+ opacity: 1;
906
+ }
907
+
908
+ @for $i from 2 through 16 {
909
+ > :nth-child(#{$i}) {
910
+ transition-delay: motion(($i - 1) * 55ms);
911
+ }
912
+ }
913
+ }
914
+
915
+ .mw-deck-ready .mw-deck-chart-bar {
916
+ transform: scaleY(0);
917
+ transform-box: fill-box;
918
+ transform-origin: bottom;
919
+ transition: transform var(--mw-duration-slower) var(--mw-ease-out);
920
+ }
921
+
922
+ .mw-deck-ready .mw-slide.mw-active .mw-deck-chart-bar {
923
+ transform: none;
924
+ }
925
+
926
+ @for $i from 2 through 12 {
927
+ .mw-deck-ready
928
+ .mw-slide.mw-active
929
+ .mw-deck-chart-bars
930
+ > :nth-child(#{$i})
931
+ .mw-deck-chart-bar {
932
+ transition-delay: motion(($i - 1) * 45ms);
933
+ }
934
+ }
935
+
936
+ // Parts of an illustration that appear one after the other - solar panels,
937
+ // seats, rows of a plan
938
+ .mw-deck-ready .mw-deck-cascade > * {
939
+ opacity: 0;
940
+ transition: opacity var(--mw-duration-slow) var(--mw-ease-out);
941
+ }
942
+
943
+ .mw-deck-ready .mw-slide.mw-active .mw-deck-cascade > * {
944
+ opacity: 1;
945
+ }
946
+
947
+ @for $i from 1 through 24 {
948
+ .mw-deck-ready .mw-slide.mw-active .mw-deck-cascade > :nth-child(#{$i}) {
949
+ transition-delay: motion(300ms + $i * 35ms);
950
+ }
951
+ }
952
+
953
+ // A slow push-in on the picture while its slide is up
954
+ .mw-deck-ready .mw-deck-image-zoom img {
955
+ transform: scale(1.08);
956
+ transition: transform calc(var(--mw-duration-slower) * 10)
957
+ var(--mw-ease-out);
958
+ }
959
+
960
+ .mw-deck-ready .mw-slide.mw-active .mw-deck-image-zoom img {
961
+ transform: scale(1);
962
+ }
963
+ }