@skagerakenergi/design 0.5.1 → 0.6.1

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/INSTRUCTIONS.md CHANGED
@@ -122,7 +122,10 @@ Interactive states use native HTML attributes and ARIA:
122
122
  **Variants:** `--filled`, `--tonal`, `--elevated`, `--outlined`, `--text`
123
123
  **M3 Expressive sizes:** `--xs` (32px), default (40px), `--md` (56px), `--lg` (96px), `--xl` (136px)
124
124
  **Shape:** `--square` (rounded rectangle instead of pill)
125
- **Toggle:** Add `aria-pressed="true"` or `aria-pressed="false"`
125
+ **Toggle:** Add `aria-pressed="true"` or `aria-pressed="false"` — adds `se-button--selected` state automatically
126
+ **Usage:** variant by emphasis — Filled (high) → Tonal (medium) → Outlined/Text (low). Labels 1–3 words, sentence case; never truncate or wrap. Max 3 buttons in one arrangement.
127
+ **Placement:** primary action (filled) at trailing edge; secondary (outlined/text) at leading edge. Used in dialogs, forms, cards, toolbars.
128
+ **Touch target:** 48 × 48 CSS px minimum; ensure container–background contrast ≥ 3:1.
126
129
 
127
130
  ```html
128
131
  <!-- Filled button -->
@@ -137,7 +140,13 @@ Interactive states use native HTML attributes and ARIA:
137
140
  <!-- Large square tonal button -->
138
141
  <button class="se-button se-button--tonal se-button--lg se-button--square">Large</button>
139
142
 
140
- <!-- Toggle button -->
143
+ <!-- Toggle button (selected) -->
144
+ <button class="se-button se-button--filled se-button--selected" aria-pressed="true">
145
+ <span class="se-button__icon material-symbols-outlined" aria-hidden="true">favorite</span>
146
+ Favorite
147
+ </button>
148
+
149
+ <!-- Toggle button (unselected) -->
141
150
  <button class="se-button se-button--filled" aria-pressed="false">
142
151
  <span class="se-button__icon material-symbols-outlined" aria-hidden="true">favorite</span>
143
152
  Favorite
@@ -158,6 +167,9 @@ Interactive states use native HTML attributes and ARIA:
158
167
  **Shape:** `--square`
159
168
  **Width:** `--narrow`, default, `--wide`
160
169
  **Toggle:** `aria-pressed="true"` / `"false"`
170
+ **Usage:** default for openers (menus, search); toggle for binary actions (favorite, bookmark). Group related icon buttons in toolbars.
171
+ **Toggle behavior:** outlined = unselected, filled = selected. Two visual cues required (not just color) — e.g. fill + weight.
172
+ **Touch target:** 48 × 48 CSS px minimum even when nested inside smaller containers. Tooltip on hover required on web.
161
173
 
162
174
  ```html
163
175
  <!-- Standard icon button -->
@@ -185,6 +197,9 @@ Interactive states use native HTML attributes and ARIA:
185
197
  **Sizes:** default (56px), `--medium` (80px), `--large` (96px)
186
198
  **Container colors:** `--secondary`, `--tertiary` (default is primary container)
187
199
  **Tone colors:** `--primary-tone`, `--secondary-tone`, `--tertiary-tone`
200
+ **Usage:** most important action on screen; one FAB per screen. Constructive actions only: create, favorite, share, start. Hide if unavailable — never disable.
201
+ **Placement:** compact/medium: lower-right corner. Expanded: upper-left (within navigation rail). Scale size with viewport. Tooltip on focus required on web.
202
+ **Contrast:** icon must have ≥ 3:1 contrast against container. Prioritize in focus order.
188
203
 
189
204
  ```html
190
205
  <button class="se-fab" aria-label="Add">
@@ -211,6 +226,9 @@ Interactive states use native HTML attributes and ARIA:
211
226
  **Sizes:** default (56px), `--medium` (80px), `--large` (96px)
212
227
  **Container colors:** `--secondary`, `--tertiary` (default is primary container)
213
228
  **Tone colors:** `--primary-tone`, `--secondary-tone`, `--tertiary-tone`
229
+ **Usage:** use on long, scrolling views needing persistent access to a primary action. Label 1–2 words; icon optional but label required. One per screen.
230
+ **Placement:** compact/medium: bottom of screen, center or trailing edge. Expanded: bottom-right or within navigation rail. Don't place in cards, dialogs, or upper half of mobile screens.
231
+ **Behavior:** collapses to FAB on scroll down; re-expands on scroll up.
214
232
 
215
233
  ```html
216
234
  <button class="se-extended-fab">
@@ -259,8 +277,10 @@ Interactive states use native HTML attributes and ARIA:
259
277
 
260
278
  **Variants:** `--filled`, `--tonal`, `--elevated`, `--outlined`
261
279
  **M3 Expressive sizes:** `--xs`, default, `--md`, `--lg`, `--xl`
280
+ **Optional:** `se-split-button__icon` (leading icon in action button)
262
281
 
263
282
  ```html
283
+ <!-- Split button without icon -->
264
284
  <div class="se-split-button se-split-button--filled">
265
285
  <button class="se-split-button__action">
266
286
  <span class="se-split-button__label">Save</span>
@@ -269,6 +289,17 @@ Interactive states use native HTML attributes and ARIA:
269
289
  <span class="se-split-button__menu-icon" aria-hidden="true"><span class="material-symbols-outlined">arrow_drop_down</span></span>
270
290
  </button>
271
291
  </div>
292
+
293
+ <!-- Split button with leading icon -->
294
+ <div class="se-split-button se-split-button--tonal">
295
+ <button class="se-split-button__action">
296
+ <span class="se-split-button__icon material-symbols-outlined" aria-hidden="true">save</span>
297
+ <span class="se-split-button__label">Save</span>
298
+ </button>
299
+ <button class="se-split-button__trigger" aria-label="More save options" aria-haspopup="true" aria-expanded="false">
300
+ <span class="se-split-button__menu-icon" aria-hidden="true"><span class="material-symbols-outlined">arrow_drop_down</span></span>
301
+ </button>
302
+ </div>
272
303
  ```
273
304
 
274
305
  ### Card
@@ -279,6 +310,10 @@ Interactive states use native HTML attributes and ARIA:
279
310
 
280
311
  **Variants:** `--elevated`, `--filled`, `--outlined`
281
312
  **Interactive:** Add `--interactive` + `tabindex="0"` + `role="button"`
313
+ **Drag state:** `--dragged` (applied during drag operations on interactive cards)
314
+ **Usage:** display content and actions on a single topic; cards are scan-friendly entry points. Don't force content into cards when dividers or spacing suffice.
315
+ **Actionability:** non-actionable (holds buttons/links) or directly actionable (whole card clickable) — never both. Directly actionable cards use `role="button"` or `<a>`.
316
+ **Adaptive:** compact — consider swapping cards for lists. Expanded — use multi-column grids. Drag interactions require a single-pointer alternative.
282
317
 
283
318
  ```html
284
319
  <!-- Elevated card -->
@@ -299,6 +334,10 @@ Interactive states use native HTML attributes and ARIA:
299
334
  @import '@skagerakenergi/design/checkbox.css';
300
335
  ```
301
336
 
337
+ **Usage:** select one or more options from a list. Use checkboxes for grouped options; radio for single-select; switches for standalone toggles. Parent checkbox is indeterminate when some children are checked.
338
+ **Placement:** click the icon **or** the text label to toggle.
339
+ **Touch target:** 48 × 48 CSS px minimum; don't apply density by default.
340
+
302
341
  ```html
303
342
  <label class="se-checkbox">
304
343
  <input class="se-checkbox__input" type="checkbox">
@@ -320,7 +359,13 @@ Interactive states use native HTML attributes and ARIA:
320
359
  @import '@skagerakenergi/design/switch.css';
321
360
  ```
322
361
 
362
+ **Icons:** Add `--icons` modifier + `se-switch__icon` inside the handle
363
+ **Usage:** binary on/off settings with immediate effect. Don't use for opposing options (use connected button group) or grouped save-and-submit options (use checkboxes). Icons optional.
364
+ **Labels:** short and direct; describe what happens when ON. Never embed label text in the switch.
365
+ **Touch target:** 48 × 48 CSS px minimum; don't apply density by default.
366
+
323
367
  ```html
368
+ <!-- Basic switch -->
324
369
  <label class="se-switch">
325
370
  <input class="se-switch__input" type="checkbox" role="switch">
326
371
  <span class="se-switch__track" aria-hidden="true">
@@ -328,6 +373,17 @@ Interactive states use native HTML attributes and ARIA:
328
373
  </span>
329
374
  <span class="se-switch__label">Dark mode</span>
330
375
  </label>
376
+
377
+ <!-- Switch with icons -->
378
+ <label class="se-switch se-switch--icons">
379
+ <input class="se-switch__input" type="checkbox" role="switch">
380
+ <span class="se-switch__track" aria-hidden="true">
381
+ <span class="se-switch__handle">
382
+ <span class="se-switch__icon" aria-hidden="true"><span class="material-symbols-outlined">close</span></span>
383
+ </span>
384
+ </span>
385
+ <span class="se-switch__label">Notifications</span>
386
+ </label>
331
387
  ```
332
388
 
333
389
  ### Radio
@@ -336,20 +392,24 @@ Interactive states use native HTML attributes and ARIA:
336
392
  @import '@skagerakenergi/design/radio.css';
337
393
  ```
338
394
 
395
+ **Usage:** single-select from ≤ 5 options; one must always be pre-selected. Use dropdown for more options. Click icon or label to select. Provide “Not applicable” if deselection needed.
396
+ **Placement:** stack vertically; avoid horizontal lists.
397
+ **Touch target:** 48 × 48 CSS px minimum. Arrow keys navigate and select within the group.
398
+
339
399
  ```html
340
- <fieldset>
341
- <legend>Choose option</legend>
400
+ <div class="se-radio-group" role="radiogroup" aria-labelledby="options-label">
401
+ <span id="options-label" class="se-radio-group__label">Choose option</span>
342
402
  <label class="se-radio">
343
403
  <input class="se-radio__input" type="radio" name="option" value="a" checked>
344
- <span class="se-radio__indicator" aria-hidden="true"></span>
404
+ <span class="se-radio__indicator"></span>
345
405
  <span class="se-radio__label">Option A</span>
346
406
  </label>
347
407
  <label class="se-radio">
348
408
  <input class="se-radio__input" type="radio" name="option" value="b">
349
- <span class="se-radio__indicator" aria-hidden="true"></span>
409
+ <span class="se-radio__indicator"></span>
350
410
  <span class="se-radio__label">Option B</span>
351
411
  </label>
352
- </fieldset>
412
+ </div>
353
413
  ```
354
414
 
355
415
  ### Chips
@@ -359,6 +419,9 @@ Interactive states use native HTML attributes and ARIA:
359
419
  ```
360
420
 
361
421
  **Types:** `--assist`, `--filter`, `--input`, `--suggestion`
422
+ **Usage:** enter information, make selections, filter content, or trigger actions. Always display as a group — never a single chip. Labels ≤ 20 characters, skip articles. Variant choice: Assist (verbs) | Filter (nouns) | Input (user data) | Suggestion (dynamic phrases).
423
+ **Placement:** inline as a row; 8 dp spacing between chips. Wrap to a new row; use horizontal scroll if ≥ 3 rows. Filter chip trailing icon: medium/expanded windows only.
424
+ **Touch target:** 48 × 48 CSS px minimum. Label contrast ≥ 3:1 against background.
362
425
 
363
426
  ```html
364
427
  <!-- Filter chip set -->
@@ -387,6 +450,12 @@ Interactive states use native HTML attributes and ARIA:
387
450
  ```
388
451
 
389
452
  **Variants:** `--filled` (default), `--outlined`
453
+ **States:** `--populated` (when input has a value), `--error`, `--disabled`
454
+ **Optional elements:** `se-text-field__leading` (leading icon), `se-text-field__trailing` (trailing action button)
455
+ **Filled only:** `se-text-field__indicator` (active indicator line)
456
+ **Usage:** for text input (contact info, search, etc.). Don't intermix filled and outlined in the same region. Error icon strongly recommended; asterisk (*) for required fields.
457
+ **Adaptive:** compact — full width. Medium/expanded — bound by margins; avoid edge-to-edge stretching.
458
+ **Touch target:** 48 × 48 CSS px minimum. Outlined fields need ≥ 3:1 outline–background contrast.
390
459
 
391
460
  ```html
392
461
  <!-- Filled text field -->
@@ -398,6 +467,17 @@ Interactive states use native HTML attributes and ARIA:
398
467
  </div>
399
468
  </div>
400
469
 
470
+ <!-- Filled text field with leading and trailing icons -->
471
+ <div class="se-text-field se-text-field--filled se-text-field--populated">
472
+ <div class="se-text-field__container">
473
+ <span class="se-text-field__leading" aria-hidden="true"><span class="material-symbols-outlined">search</span></span>
474
+ <label class="se-text-field__label" for="search">Search</label>
475
+ <input class="se-text-field__input" id="search" type="text" value="query">
476
+ <button class="se-text-field__trailing" type="button" aria-label="Clear"><span class="material-symbols-outlined">close</span></button>
477
+ <span class="se-text-field__indicator" aria-hidden="true"></span>
478
+ </div>
479
+ </div>
480
+
401
481
  <!-- Outlined text field with supporting text -->
402
482
  <div class="se-text-field se-text-field--outlined">
403
483
  <div class="se-text-field__container">
@@ -412,6 +492,7 @@ Interactive states use native HTML attributes and ARIA:
412
492
  <div class="se-text-field__container">
413
493
  <label class="se-text-field__label" for="username">Username</label>
414
494
  <input class="se-text-field__input" id="username" type="text" aria-invalid="true" aria-describedby="username-error">
495
+ <button class="se-text-field__trailing" type="button" aria-label="Error"><span class="material-symbols-outlined">error</span></button>
415
496
  </div>
416
497
  <div class="se-text-field__supporting" id="username-error" role="alert">Username is already taken</div>
417
498
  </div>
@@ -424,8 +505,13 @@ Interactive states use native HTML attributes and ARIA:
424
505
  ```
425
506
 
426
507
  **Variants:** `--primary`, `--secondary`
508
+ **Optional:** `se-tabs__icon` (icon above label, primary variant only; auto-fills on active)
509
+ **Usage:** group related content at the same hierarchy level — not sequential content. Primary tabs under app bar; secondary below primary. Icons should be globally recognized. Max 4 fixed tabs; use scrollable for more.
510
+ **Placement:** full-width container. Scrollable tabs offset 52 dp from leading edge. Don't scroll tabs behind an app bar.
511
+ **Touch target:** 48 × 48 CSS px minimum. Arrow keys navigate between tabs; Space/Enter activates.
427
512
 
428
513
  ```html
514
+ <!-- Primary tabs (text only) -->
429
515
  <div class="se-tabs se-tabs--primary" role="tablist" aria-label="Content sections">
430
516
  <button class="se-tabs__tab se-tabs__tab--active" role="tab" aria-selected="true">
431
517
  <span class="se-tabs__label">Tab 1</span>
@@ -441,6 +527,21 @@ Interactive states use native HTML attributes and ARIA:
441
527
  </button>
442
528
  <span class="se-tabs__divider" aria-hidden="true"></span>
443
529
  </div>
530
+
531
+ <!-- Primary tabs with icons -->
532
+ <div class="se-tabs se-tabs--primary" role="tablist" aria-label="Travel">
533
+ <button class="se-tabs__tab se-tabs__tab--active" role="tab" aria-selected="true">
534
+ <span class="se-tabs__icon material-symbols-outlined" aria-hidden="true">flight</span>
535
+ <span class="se-tabs__label">Flights</span>
536
+ <span class="se-tabs__indicator" aria-hidden="true"></span>
537
+ </button>
538
+ <button class="se-tabs__tab" role="tab" aria-selected="false" tabindex="-1">
539
+ <span class="se-tabs__icon material-symbols-outlined" aria-hidden="true">explore</span>
540
+ <span class="se-tabs__label">Explore</span>
541
+ <span class="se-tabs__indicator" aria-hidden="true"></span>
542
+ </button>
543
+ <span class="se-tabs__divider" aria-hidden="true"></span>
544
+ </div>
444
545
  ```
445
546
 
446
547
  ### App Bar
@@ -495,8 +596,10 @@ Interactive states use native HTML attributes and ARIA:
495
596
  ```
496
597
 
497
598
  **Variants:** default (collapsed), `--expanded` (replaces former Navigation Drawer), `--modal`
599
+ **Optional slots:** `se-nav-rail__menu` (icon button), `se-nav-rail__fab` (FAB container), `se-nav-rail__section` + `se-nav-rail__section-header` (grouped items in expanded mode)
498
600
 
499
601
  ```html
602
+ <!-- Collapsed navigation rail -->
500
603
  <nav class="se-nav-rail" aria-label="Main navigation">
501
604
  <div class="se-nav-rail__items">
502
605
  <a class="se-nav-rail__item se-nav-rail__item--active" href="#home" aria-current="page">
@@ -511,6 +614,34 @@ Interactive states use native HTML attributes and ARIA:
511
614
  </a>
512
615
  </div>
513
616
  </nav>
617
+
618
+ <!-- Expanded navigation rail with menu, FAB, and sections -->
619
+ <nav class="se-nav-rail se-nav-rail--expanded" aria-label="Main navigation">
620
+ <button class="se-icon-button se-nav-rail__menu" aria-label="Close menu" aria-expanded="true">
621
+ <span class="se-icon-button__icon material-symbols-outlined" aria-hidden="true">menu</span>
622
+ </button>
623
+ <div class="se-nav-rail__fab">
624
+ <button class="se-extended-fab" aria-label="Compose">
625
+ <span class="se-extended-fab__icon material-symbols-outlined" aria-hidden="true">edit</span>
626
+ <span class="se-extended-fab__label">Compose</span>
627
+ </button>
628
+ </div>
629
+ <div class="se-nav-rail__items">
630
+ <a class="se-nav-rail__item se-nav-rail__item--active" href="#home" aria-current="page">
631
+ <span class="se-nav-rail__indicator" aria-hidden="true"></span>
632
+ <span class="se-nav-rail__icon material-symbols-outlined" aria-hidden="true">home</span>
633
+ <span class="se-nav-rail__label">Home</span>
634
+ </a>
635
+ <div class="se-nav-rail__section">
636
+ <span class="se-nav-rail__section-header">Settings</span>
637
+ <a class="se-nav-rail__item" href="#preferences">
638
+ <span class="se-nav-rail__indicator" aria-hidden="true"></span>
639
+ <span class="se-nav-rail__icon material-symbols-outlined" aria-hidden="true">tune</span>
640
+ <span class="se-nav-rail__label">Preferences</span>
641
+ </a>
642
+ </div>
643
+ </div>
644
+ </nav>
514
645
  ```
515
646
 
516
647
  ### Toolbar
@@ -521,8 +652,10 @@ Interactive states use native HTML attributes and ARIA:
521
652
 
522
653
  **Variants:** `--docked` (replaces former Bottom App Bar), `--floating`, `--floating-vertical`
523
654
  **Style:** `--vibrant` (primary-container background)
655
+ **Optional slot:** `se-toolbar__fab` (FAB container, used in docked variant)
524
656
 
525
657
  ```html
658
+ <!-- Docked toolbar with FAB -->
526
659
  <footer class="se-toolbar se-toolbar--docked" role="toolbar" aria-label="Actions">
527
660
  <div class="se-toolbar__actions">
528
661
  <button class="se-icon-button" aria-label="Edit">
@@ -532,6 +665,11 @@ Interactive states use native HTML attributes and ARIA:
532
665
  <span class="se-icon-button__icon material-symbols-outlined" aria-hidden="true">share</span>
533
666
  </button>
534
667
  </div>
668
+ <div class="se-toolbar__fab">
669
+ <button class="se-fab" aria-label="Add">
670
+ <span class="se-fab__icon material-symbols-outlined" aria-hidden="true">add</span>
671
+ </button>
672
+ </div>
535
673
  </footer>
536
674
  ```
537
675
 
@@ -541,6 +679,10 @@ Interactive states use native HTML attributes and ARIA:
541
679
  @import '@skagerakenergi/design/badge.css';
542
680
  ```
543
681
 
682
+ **Usage:** indicate notifications, counts, or status on navigation destinations. Small = unread dot; large = text (max 4 chars). Hide once the destination is viewed.
683
+ **Placement:** anchored inside icon bounding box. Adjust for RTL. Use small in tight spaces (app bars); large when space allows (navigation rail).
684
+ **Contrast:** badge container and label ≥ 3:1 contrast. Small badges use `aria-hidden="true"`; large badges use `aria-label`.
685
+
544
686
  ```html
545
687
  <!-- Small dot badge (no count) -->
546
688
  <span style="position: relative; display: inline-flex;">
@@ -565,7 +707,13 @@ Interactive states use native HTML attributes and ARIA:
565
707
  @import '@skagerakenergi/design/snackbar.css';
566
708
  ```
567
709
 
710
+ **Variants:** `--two-line` (top-aligned items), `--action-below` (action moves below text)
711
+ **Usage:** minimally interruptive messages not requiring user action. One at a time; max one action. Auto-dismiss 4–10 s; but auto-dismiss is inaccessible on web — add inline feedback near the trigger.
712
+ **Placement:** bottom of UI, above FABs. Don't cover navigation or frequently used targets. Don't stack snackbars.
713
+ **Accessibility:** `role="status"` + `aria-live="polite"`. Don't move focus to snackbar automatically. Focus returns to trigger on dismiss.
714
+
568
715
  ```html
716
+ <!-- Single-line snackbar -->
569
717
  <div class="se-snackbar" role="status" aria-live="polite">
570
718
  <span class="se-snackbar__text">Item saved</span>
571
719
  <button class="se-snackbar__action">Undo</button>
@@ -573,6 +721,15 @@ Interactive states use native HTML attributes and ARIA:
573
721
  <span class="material-symbols-outlined">close</span>
574
722
  </button>
575
723
  </div>
724
+
725
+ <!-- Two-line snackbar -->
726
+ <div class="se-snackbar se-snackbar--two-line" role="status" aria-live="polite">
727
+ <span class="se-snackbar__text">This item has been moved to the trash. You can restore it from the trash folder.</span>
728
+ <button class="se-snackbar__action">Undo</button>
729
+ <button class="se-snackbar__close" aria-label="Dismiss">
730
+ <span class="material-symbols-outlined">close</span>
731
+ </button>
732
+ </div>
576
733
  ```
577
734
 
578
735
  ### Progress Indicator
@@ -581,16 +738,20 @@ Interactive states use native HTML attributes and ARIA:
581
738
  @import '@skagerakenergi/design/progress-indicator.css';
582
739
  ```
583
740
 
584
- ```html
585
741
  **Variants:** `--linear`, `--circular`
586
742
  **States:** `--indeterminate`
587
743
  **M3 Expressive:** `--wavy` (linear only)
744
+ **Custom height:** Set `--se-progress-height` (default: `4px`)
745
+ **Usage:** show status of ongoing processes. Choose by wait time: instant (< 200 ms) = none; short (200 ms–5 s) = loading indicator; long (> 5 s) = progress indicator. Linear for edge-of-container; circular for centered-in-element.
746
+ **Placement:** linear along container edge; circular centered on loading area. In buttons: circular with flat shape, no track, indicator matches button label color.
747
+ **Contrast:** active indicator ≥ 3:1 against background. Stop indicator required when track contrast < 3:1.
588
748
 
589
749
  ```html
590
- <!-- Linear determinate -->
750
+ <!-- Linear determinate (with stop indicator) -->
591
751
  <div class="se-progress se-progress--linear" role="progressbar" aria-label="Loading" aria-valuenow="60" aria-valuemin="0" aria-valuemax="100">
592
752
  <div class="se-progress__track">
593
753
  <div class="se-progress__indicator" style="width: 60%"></div>
754
+ <div class="se-progress__stop" aria-hidden="true" style="left: 60%"></div>
594
755
  </div>
595
756
  </div>
596
757
 
@@ -601,6 +762,21 @@ Interactive states use native HTML attributes and ARIA:
601
762
  </div>
602
763
  </div>
603
764
 
765
+ <!-- Wavy linear (no stop element) -->
766
+ <div class="se-progress se-progress--linear se-progress--wavy" role="progressbar" aria-label="Loading" aria-valuenow="40" aria-valuemin="0" aria-valuemax="100">
767
+ <div class="se-progress__track">
768
+ <div class="se-progress__indicator" style="width: 40%"></div>
769
+ </div>
770
+ </div>
771
+
772
+ <!-- Custom height -->
773
+ <div class="se-progress se-progress--linear" role="progressbar" aria-label="Loading" aria-valuenow="60" aria-valuemin="0" aria-valuemax="100" style="--se-progress-height: 8px">
774
+ <div class="se-progress__track">
775
+ <div class="se-progress__indicator" style="width: 60%"></div>
776
+ <div class="se-progress__stop" aria-hidden="true" style="left: 60%"></div>
777
+ </div>
778
+ </div>
779
+
604
780
  <!-- Circular determinate -->
605
781
  <div class="se-progress se-progress--circular" role="progressbar" aria-valuenow="60" aria-valuemin="0" aria-valuemax="100" aria-label="60% complete">
606
782
  <svg class="se-progress__track" viewBox="0 0 48 48">
@@ -616,11 +792,44 @@ Interactive states use native HTML attributes and ARIA:
616
792
  @import '@skagerakenergi/design/loading-indicator.css';
617
793
  ```
618
794
 
795
+ **Variants:** default (no background), `--contained` (with primary-container background)
796
+ **Responsive sizing:** `--se-loading-indicator-size` custom property (default: 48px, range: 24px–240px). Container-to-indicator ratio (79.2%) preserved at all sizes.
797
+ **Usage scope:** short indeterminate waits (200ms–5s). Replaces indeterminate circular progress indicator for short processes. Never transition from loading indicator to progress indicator.
798
+ **Container guidance:** use `--contained` when placed over other content (extra contrast); omit when on a plain surface; always use with pull-to-refresh.
799
+ **Placement:** center in page/container when loading; center in empty space for loading more items; can embed inside other components (e.g. buttons).
800
+
801
+ The loading indicator requires an inner SVG that performs shape morphing between 7 M3 MaterialShapes (SoftBurst → Cookie9Sided → Pentagon → Pill → Sunny → Cookie4Sided → Oval) with continuous rotation. The MaterialShapes library has no official web implementation — this package ships the pre-baked SVG as an importable asset.
802
+
803
+ **Import the shapes SVG** (avoids inlining the large path data):
804
+
805
+ ```js
806
+ // Vite / Vite-based frameworks (React, Vue, Svelte, etc.)
807
+ import shapesSvg from '@skagerakenergi/design/loading-indicator-shapes.svg?raw'
808
+
809
+ // Non-Vite (Webpack, plain HTML, SSR, etc.)
810
+ import { loadingIndicatorShapesSvg } from '@skagerakenergi/design/loading-indicator-shapes.js'
811
+ ```
812
+
813
+ Then inject the imported string as `innerHTML` of the container element:
814
+
619
815
  ```html
620
816
  <div class="se-loading-indicator" role="status" aria-label="Loading">
817
+ <!-- inject shapesSvg / loadingIndicatorShapesSvg here -->
818
+ </div>
819
+
820
+ <!-- Contained variant (with background — use over other content) -->
821
+ <div class="se-loading-indicator se-loading-indicator--contained" role="status" aria-label="Loading">
822
+ <!-- inject shapesSvg / loadingIndicatorShapesSvg here -->
823
+ </div>
824
+
825
+ <!-- Responsive sizing (120px) -->
826
+ <div class="se-loading-indicator" style="--se-loading-indicator-size: 120px" role="status" aria-label="Loading">
827
+ <!-- inject shapesSvg / loadingIndicatorShapesSvg here -->
621
828
  </div>
622
829
  ```
623
830
 
831
+ **Accessibility:** `role="status"` + descriptive `aria-label` explaining what is loading (e.g. "Loading news article"). Active indicator must have ≥3:1 contrast against background. When embedded in another component, ≥3:1 contrast against that component's background.
832
+
624
833
  ### Divider
625
834
 
626
835
  ```css
@@ -628,6 +837,8 @@ Interactive states use native HTML attributes and ARIA:
628
837
  ```
629
838
 
630
839
  **Variants:** `--inset`, `--middle-inset`, `--vertical`
840
+ **Usage:** full-width for unrelated content sections; inset for related content. Use sparingly — too many clutters the interface. Vertical dividers for large-screen side-by-side layouts.
841
+ **Contrast:** decorative elements with no contrast minimums.
631
842
 
632
843
  ```html
633
844
  <hr class="se-divider">
@@ -641,15 +852,64 @@ Interactive states use native HTML attributes and ARIA:
641
852
  @import '@skagerakenergi/design/list.css';
642
853
  ```
643
854
 
855
+ **Line variants:** default (one line), `--two-line`, `--three-line`
856
+ **States:** `--interactive` (with `tabindex="0"`), `--selected`
857
+ **Leading variants:** default (icon), `--avatar` (initials circle), `--image` (image background), `--video` (video thumbnail)
858
+ **Trailing:** `se-list__trailing` (icon), `se-list__trailing-text` (text)
859
+ **Optional element:** `se-list__overline` (overline text above the label)
860
+ **List variant:** `--segmented` (dividers between items)
861
+ **Usage:** vertical groups of text, icons, images. Keep labels brief; supporting text 1–3 lines. Use consistent placement for visuals across items. Gaps for contained lists; dividers for uncontained.
862
+ **Adaptive:** compact — edge-to-edge, full-screen detail on select. Medium/expanded — list-detail side-by-side. Consider swapping for cards on large screens. Ideal line length 40–60 characters.
863
+ **Touch target:** all interactive elements ≥ 48 × 48 CSS px.
864
+
644
865
  ```html
866
+ <!-- Two-line list with icon leading and trailing text -->
645
867
  <ul class="se-list">
646
868
  <li class="se-list__item se-list__item--two-line">
647
869
  <span class="se-list__leading" aria-hidden="true">
648
870
  <span class="material-symbols-outlined">person</span>
649
871
  </span>
650
872
  <span class="se-list__content">
651
- <span class="se-list__label">Item title</span>
652
- <span class="se-list__supporting">Supporting text</span>
873
+ <span class="se-list__label">John Doe</span>
874
+ <span class="se-list__supporting">john@example.com</span>
875
+ </span>
876
+ <span class="se-list__trailing-text">3m ago</span>
877
+ </li>
878
+ </ul>
879
+
880
+ <!-- Interactive list with avatars -->
881
+ <ul class="se-list">
882
+ <li class="se-list__item se-list__item--two-line se-list__item--interactive se-list__item--selected" tabindex="0">
883
+ <span class="se-list__leading se-list__leading--avatar">JD</span>
884
+ <span class="se-list__content">
885
+ <span class="se-list__label">John Doe</span>
886
+ <span class="se-list__supporting">john@example.com</span>
887
+ </span>
888
+ <span class="se-list__trailing" aria-hidden="true">
889
+ <span class="material-symbols-outlined">chevron_right</span>
890
+ </span>
891
+ </li>
892
+ </ul>
893
+
894
+ <!-- Three-line list with image leading -->
895
+ <ul class="se-list">
896
+ <li class="se-list__item se-list__item--three-line">
897
+ <div class="se-list__leading se-list__leading--image"></div>
898
+ <span class="se-list__content">
899
+ <span class="se-list__label">Project files</span>
900
+ <span class="se-list__supporting">Updated design files for the new dashboard layout.</span>
901
+ </span>
902
+ </li>
903
+ </ul>
904
+
905
+ <!-- List item with video thumbnail leading -->
906
+ <ul class="se-list">
907
+ <li class="se-list__item se-list__item--three-line">
908
+ <div class="se-list__leading se-list__leading--video"></div>
909
+ <span class="se-list__content">
910
+ <span class="se-list__overline">Category</span>
911
+ <span class="se-list__label">Video title</span>
912
+ <span class="se-list__supporting">Description text</span>
653
913
  </span>
654
914
  </li>
655
915
  </ul>
@@ -704,7 +964,7 @@ This library implements M3 Expressive, which adds to baseline M3:
704
964
  | Button Group | — | `se-button-group` (standard + `--connected`) |
705
965
  | Split Button | — | `se-split-button` |
706
966
  | Toolbar | — | `se-toolbar` (`--docked` + `--floating` + `--floating-vertical`) |
707
- | Loading Indicator | — | `se-loading-indicator` |
967
+ | Loading Indicator | — | `se-loading-indicator` (default/`--contained`; `--se-loading-indicator-size`: 24–240px) |
708
968
  | Flexible App Bar | App Bar | `--medium-flexible`, `--large-flexible` |
709
969
  | Search App Bar | App Bar | `--search` |
710
970
 
package/README.md CHANGED
@@ -288,6 +288,10 @@ Component files:
288
288
  - `split-button.css`, `switch.css`, `tabs.css`, `text-field.css`, `toolbar.css`
289
289
  - `layout.css`
290
290
 
291
+ Loading indicator shape asset (avoids inlining the large SVG path data):
292
+ - `loading-indicator-shapes.svg` — import with `?raw` in Vite-based projects
293
+ - `loading-indicator-shapes.js` — ESM export (`loadingIndicatorShapesSvg: string`) for non-Vite environments
294
+
291
295
  ## Figma Code Connect
292
296
 
293
297
  This project uses [Figma Code Connect](https://github.com/figma/code-connect) to link Figma component instances to the corresponding HTML/CSS snippets so designers see real code in the Figma Dev Mode inspector.
@@ -0,0 +1 @@
1
+ export declare const loadingIndicatorShapesSvg: string;
@@ -0,0 +1 @@
1
+ export const loadingIndicatorShapesSvg = '<svg class="se-loading-indicator__shapes" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="4 4 40 40" aria-hidden="true"><path fill="currentColor"><animate attributeName="d" calcMode="spline" dur="5s" keySplines="0.5 0.2 0 0.8; 0.5 0.2 0 0.8; 0.5 0.2 0 0.8; 0.5 0.2 0 0.8; 0.5 0.2 0 0.8; 0.5 0.2 0 0.8; 0.5 0.2 0 0.8" keyTimes="0; 0.14; 0.29; 0.43; 0.57; 0.71; 0.86; 1" repeatCount="indefinite" values="m37.4 24.7 0.5 0.7 0.8 0.9 0.8 1.0 0.6 1.0 -0.1 0.8 -0.0 0.1 -0.6 0.7 -1.1 0.5 -1.3 0.3 -1.0 0.2 -0.9 0.4 -0.7 1.1 0.1 1.0 0.1 1.1 0.0 1.2 -0.2 1.1 -0.4 0.5 -0.3 0.2 -0.8 0.2 -1.2 -0.4 -1.2 -0.4 -1.0 -0.5 -0.8 -0.1 -1.3 0.5 -0.5 0.8 -0.6 0.9 -0.6 1.0 -0.8 0.8 -0.8 0.2 -0.1 -0.0 -0.9 -0.3 -0.8 -1.0 -0.6 -1.0 -0.6 -0.9 -0.5 -0.7 -1.3 -0.3 -0.9 0.2 -0.9 0.4 -1.2 0.5 -1.2 0.3 -0.8 -0.3 -0.0 -0.1 -0.6 -0.6 -0.1 -1.2 0.1 -1.2 0.0 -1.1 0.0 -0.9 -0.7 -1.1 -0.9 -0.3 -1.1 -0.3 -1.2 -0.3 -1.1 -0.4 -0.5 -0.8 -0.0 0.0 -0.1 -0.9 0.6 -1.0 0.8 -0.9 0.8 -0.9 0.5 -0.7 -0.0 -1.4 -0.5 -0.7 -0.8 -0.9 -0.8 -0.9 -0.6 -1.0 0.1 -0.9 0.0 -0.0 0.5 -0.8 1.1 -0.4 1.2 -0.3 1.1 -0.3 0.9 -0.3 0.7 -1.1 0.0 -0.9 -0.0 -1.1 -0.1 -1.2 0.1 -1.2 0.6 -0.6 0.0 -0.1 0.8 -0.3 1.2 0.3 1.2 0.5 0.9 0.4 0.9 0.2 1.3 -0.3 0.5 -0.7 0.6 -0.9 0.6 -1.0 0.8 -1.0 0.9 -0.3 0.1 0.0 0.8 0.2 0.8 0.8 0.6 1.0 0.6 0.9 0.5 0.8 1.3 0.5 0.8 -0.1 1.0 -0.5 1.2 -0.4 1.2 -0.4 0.8 0.2 0.3 0.2 0.4 0.5 0.2 1.1 -0.0 1.2 -0.1 1.1 -0.1 1.0 0.7 1.1 0.9 0.4 1.0 0.2 1.3 0.3 1.1 0.5 0.6 0.7 0.0 0.1 0.1 0.8 -0.5 1.0 -0.9 1.0 -0.8 0.9 -0.5 0.7 z; m39.9 24.0 -0.3 0.8 -0.4 0.8 -0.3 0.8 -0.2 1.5 0.1 0.9 0.1 0.9 -0.1 0.9 -0.2 0.8 -0.3 0.8 -0.2 0.4 -0.3 0.4 -0.5 0.7 -0.7 0.5 -0.8 0.4 -0.8 0.4 -0.8 0.4 -1.2 1.0 -0.5 0.7 -0.5 0.8 -0.6 0.6 -0.6 0.6 -0.8 0.4 -0.4 0.2 -0.5 0.1 -0.9 0.2 -0.8 -0.0 -0.9 -0.2 -0.9 -0.3 -0.8 -0.1 -1.6 -0.1 -0.8 0.2 -0.9 0.3 -0.9 0.2 -0.8 -0.0 -0.9 -0.2 -0.5 -0.1 -0.4 -0.2 -0.8 -0.4 -0.6 -0.5 -0.6 -0.7 -0.5 -0.8 -0.5 -0.7 -1.2 -1.0 -0.7 -0.4 -0.9 -0.4 -0.8 -0.4 -0.6 -0.5 -0.6 -0.7 -0.3 -0.4 -0.2 -0.4 -0.3 -0.8 -0.2 -0.8 -0.1 -0.9 0.1 -0.9 0.1 -0.9 -0.2 -1.5 -0.3 -0.8 -0.4 -0.8 -0.3 -0.8 -0.2 -0.8 -0.1 -0.9 0.1 -0.7 -0.0 -0.2 0.2 -0.8 0.4 -0.8 0.5 -0.7 0.6 -0.6 0.7 -0.7 0.5 -0.6 0.6 -1.3 0.3 -0.9 0.2 -0.8 0.3 -0.8 0.5 -0.7 0.5 -0.6 0.2 -0.2 0.5 -0.4 0.8 -0.4 0.8 -0.3 0.8 -0.2 0.9 -0.0 0.8 -0.1 1.4 -0.5 0.7 -0.4 0.7 -0.5 0.7 -0.5 0.8 -0.3 0.8 -0.2 0.9 -0.1 0.0 -0.0 0.8 0.1 0.9 0.2 0.8 0.3 0.7 0.5 0.7 0.5 0.7 0.4 1.4 0.5 0.8 0.1 0.9 0.0 0.9 0.2 0.8 0.3 0.7 0.4 0.5 0.4 0.2 0.1 0.5 0.7 0.5 0.7 0.3 0.8 0.2 0.8 0.3 0.9 0.6 1.3 0.5 0.6 0.7 0.7 0.6 0.6 0.5 0.7 0.4 0.8 0.2 0.8 0.0 0.2 0.1 0.7 -0.1 0.9 z; m38.9 24.2 -0.2 0.8 -0.2 0.7 -0.3 0.8 -0.2 0.8 -0.3 0.7 -0.2 0.8 -0.3 0.8 -0.2 0.7 -0.3 0.8 -0.2 0.8 -0.3 0.7 -0.2 0.8 -0.4 1.0 -0.4 0.8 -0.4 0.8 -0.6 0.6 -0.7 0.5 0.0 0.1 -0.7 0.4 -0.8 0.3 -0.8 0.3 -0.9 0.1 -1.1 -0.0 -0.8 -0.0 -0.8 -0.0 -0.8 -0.0 -0.8 -0.0 -0.8 -0.0 -0.8 -0.0 -0.8 -0.0 -0.8 -0.0 -0.8 -0.0 -0.8 -0.0 -0.8 -0.0 -0.8 -0.0 -0.8 -0.0 -1.1 -0.0 -0.9 -0.1 -0.8 -0.3 -0.8 -0.3 -0.7 -0.5 -0.1 0.0 -0.6 -0.5 -0.6 -0.7 -0.4 -0.7 -0.4 -0.8 -0.4 -1.0 -0.2 -0.8 -0.3 -0.7 -0.2 -0.8 -0.3 -0.8 -0.2 -0.7 -0.3 -0.8 -0.2 -0.8 -0.3 -0.7 -0.2 -0.8 -0.3 -0.7 -0.2 -0.8 -0.3 -0.8 -0.2 -0.7 -0.3 -1.1 -0.2 -0.9 -0.0 -0.8 0.0 -0.9 0.2 -0.8 0.1 -0.1 0.3 -0.7 0.4 -0.8 0.6 -0.6 0.6 -0.6 0.9 -0.7 0.6 -0.5 0.7 -0.4 0.6 -0.5 0.7 -0.5 0.6 -0.4 0.7 -0.5 0.6 -0.5 0.7 -0.5 0.6 -0.4 0.7 -0.5 0.6 -0.5 0.7 -0.4 0.6 -0.5 0.9 -0.7 0.8 -0.4 0.8 -0.3 0.8 -0.2 0.8 -0.0 0.1 -0.0 0.9 0.0 0.8 0.2 0.8 0.3 0.8 0.4 0.9 0.7 0.6 0.5 0.7 0.4 0.6 0.5 0.7 0.5 0.6 0.4 0.7 0.5 0.6 0.5 0.7 0.5 0.6 0.4 0.7 0.5 0.6 0.5 0.7 0.4 0.6 0.5 0.9 0.7 0.6 0.6 0.6 0.7 0.4 0.7 0.3 0.7 0.0 0.1 0.2 0.8 0.1 0.9 -0.0 0.9 -0.2 0.8 -0.3 1.1 z; m39.6 24.0 -0.1 0.8 -0.3 0.8 -0.2 0.8 -0.3 0.7 -0.3 0.8 -0.4 0.7 -0.4 0.7 -0.5 0.6 -0.4 0.6 -0.6 0.6 -0.6 0.6 -0.4 0.4 -0.6 0.6 -0.4 0.5 -0.9 0.8 -0.5 0.5 -0.6 0.6 -0.4 0.4 -0.7 0.7 -0.5 0.5 -0.6 0.4 -0.7 0.5 -0.6 0.4 -0.7 0.4 -0.7 0.3 -0.8 0.3 -0.8 0.3 -0.8 0.2 -0.8 0.1 -0.8 0.1 -0.8 0.1 -0.9 0.0 -0.8 -0.0 -0.9 -0.1 -0.8 -0.2 -0.8 -0.2 -0.9 -0.2 -0.8 -0.3 -0.8 -0.4 -0.8 -0.4 -0.7 -0.5 -0.7 -0.5 -0.7 -0.5 -0.6 -0.6 -0.1 -0.1 -0.5 -0.6 -0.6 -0.7 -0.5 -0.7 -0.5 -0.8 -0.4 -0.7 -0.4 -0.8 -0.3 -0.8 -0.2 -0.8 -0.2 -0.9 -0.2 -0.8 -0.1 -0.9 0.0 -0.8 0.0 -0.9 0.1 -0.8 0.1 -0.8 0.1 -0.8 0.3 -0.8 0.2 -0.8 0.3 -0.7 0.4 -0.8 0.3 -0.7 0.5 -0.6 0.4 -0.7 0.4 -0.5 0.6 -0.6 0.6 -0.7 0.4 -0.4 0.6 -0.6 0.5 -0.4 0.8 -0.9 0.5 -0.5 0.6 -0.6 0.4 -0.4 0.7 -0.7 0.5 -0.5 0.6 -0.4 0.7 -0.5 0.6 -0.4 0.7 -0.4 0.7 -0.3 0.8 -0.3 0.8 -0.3 0.8 -0.2 0.8 -0.1 0.8 -0.1 0.8 -0.1 0.9 -0.0 0.8 0.0 0.9 0.1 0.8 0.2 0.8 0.2 0.9 0.2 0.8 0.4 0.8 0.3 0.8 0.4 0.7 0.5 0.7 0.5 0.7 0.5 0.6 0.7 0.1 -0.0 0.5 0.6 0.6 0.7 0.5 0.7 0.5 0.8 0.4 0.7 0.3 0.8 0.4 0.8 0.2 0.8 0.2 0.9 0.2 0.8 0.1 0.9 0.0 0.8 -0.0 0.8 -0.1 0.9 z; m40.0 24.0 -0.1 0.8 -0.5 0.8 -0.6 0.8 -0.6 0.6 -0.6 0.7 -0.5 0.6 -0.7 1.2 -0.1 0.7 -0.1 0.8 -0.0 0.9 -0.1 0.9 -0.1 0.9 -0.2 0.9 -0.5 0.7 -0.0 0.0 -0.7 0.5 -0.9 0.2 -0.9 0.1 -0.9 0.1 -0.8 0.0 -0.8 0.1 -0.8 0.1 -1.2 0.7 -0.6 0.5 -0.7 0.6 -0.6 0.6 -0.8 0.6 -0.8 0.5 -0.8 0.1 -0.0 0.0 -0.8 -0.1 -0.8 -0.5 -0.8 -0.6 -0.6 -0.6 -0.7 -0.6 -0.6 -0.5 -1.2 -0.7 -0.7 -0.1 -0.8 -0.1 -0.9 -0.0 -0.9 -0.1 -0.9 -0.1 -0.9 -0.2 -0.7 -0.5 -0.0 0.0 -0.5 -0.7 -0.2 -0.9 -0.1 -0.9 -0.1 -0.9 -0.0 -0.8 -0.1 -0.8 -0.1 -0.8 -0.7 -1.2 -0.5 -0.6 -0.6 -0.7 -0.6 -0.6 -0.6 -0.8 -0.5 -0.8 -0.1 -0.8 -0.0 -0.0 0.1 -0.8 0.5 -0.8 0.6 -0.8 0.6 -0.6 0.6 -0.7 0.5 -0.6 0.7 -1.2 0.1 -0.7 0.1 -0.8 0.0 -0.9 0.1 -0.9 0.1 -0.9 0.2 -0.9 0.5 -0.7 -0.0 -0.0 0.7 -0.5 0.9 -0.2 0.9 -0.1 0.9 -0.1 0.8 -0.0 0.8 -0.1 0.8 -0.1 1.2 -0.7 0.6 -0.5 0.7 -0.6 0.6 -0.6 0.8 -0.6 0.8 -0.5 0.8 -0.1 0.0 -0.0 0.8 0.1 0.8 0.5 0.8 0.6 0.6 0.6 0.7 0.6 0.6 0.5 1.2 0.7 0.7 0.1 0.8 0.1 0.9 0.0 0.9 0.1 0.9 0.1 0.9 0.2 0.7 0.5 0.0 -0.0 0.5 0.7 0.2 0.9 0.1 0.9 0.1 0.9 0.0 0.8 0.1 0.8 0.1 0.8 0.7 1.2 0.5 0.6 0.6 0.7 0.6 0.6 0.6 0.8 0.5 0.8 0.1 0.8 z; m36.9 24.6 0.1 0.7 0.2 0.8 0.2 0.7 0.4 0.9 0.4 0.9 0.2 0.9 0.1 1.0 0.1 0.9 -0.1 0.9 -0.3 0.9 -0.3 0.9 -0.4 0.8 -0.5 0.8 -0.6 0.6 -0.1 0.1 -0.6 0.6 -0.8 0.5 -0.8 0.4 -0.9 0.3 -0.9 0.3 -0.9 0.1 -0.9 -0.1 -1.0 -0.1 -0.9 -0.2 -0.9 -0.4 -0.9 -0.4 -0.7 -0.2 -0.8 -0.2 -0.7 -0.1 -1.2 0.0 -0.7 0.1 -0.8 0.2 -0.7 0.2 -0.9 0.4 -0.9 0.4 -0.9 0.2 -1.0 0.1 -0.9 0.1 -0.9 -0.1 -0.9 -0.3 -0.9 -0.3 -0.8 -0.4 -0.8 -0.5 -0.6 -0.6 -0.1 -0.1 -0.6 -0.6 -0.5 -0.8 -0.4 -0.8 -0.3 -0.9 -0.3 -0.9 -0.1 -0.9 0.1 -0.9 0.1 -1.0 0.2 -0.9 0.4 -0.9 0.4 -0.9 0.2 -0.7 0.2 -0.8 0.1 -0.7 -0.0 -1.2 -0.1 -0.7 -0.2 -0.8 -0.2 -0.7 -0.4 -0.9 -0.4 -0.9 -0.2 -0.9 -0.1 -1.0 -0.1 -0.9 0.1 -0.9 0.3 -0.9 0.3 -0.9 0.4 -0.8 0.5 -0.8 0.6 -0.6 0.1 -0.1 0.6 -0.6 0.8 -0.5 0.8 -0.4 0.9 -0.3 0.9 -0.3 0.9 -0.1 0.9 0.1 1.0 0.1 0.9 0.2 0.9 0.4 0.9 0.4 0.7 0.2 0.8 0.2 0.7 0.1 1.2 -0.0 0.7 -0.1 0.8 -0.2 0.7 -0.2 0.9 -0.4 0.9 -0.4 0.9 -0.2 1.0 -0.1 0.9 -0.1 0.9 0.1 0.9 0.3 0.9 0.3 0.8 0.4 0.8 0.5 0.6 0.6 0.1 0.1 0.6 0.6 0.5 0.8 0.4 0.8 0.3 0.9 0.3 0.9 0.1 0.9 -0.1 0.9 -0.1 1.0 -0.2 0.9 -0.4 0.9 -0.4 0.9 -0.2 0.7 -0.2 0.8 -0.1 0.7 z; m37.7 24.0 -0.3 0.7 -0.4 0.7 -0.3 0.6 -0.3 0.7 -0.4 0.6 -0.3 0.5 -0.4 0.6 -0.4 0.5 -0.4 0.5 -0.4 0.5 -0.4 0.5 -0.4 0.5 -0.3 0.4 -0.5 0.4 -0.8 0.8 -0.4 0.5 -0.4 0.3 -0.5 0.4 -0.5 0.4 -0.5 0.4 -0.5 0.4 -0.5 0.4 -0.6 0.4 -0.5 0.3 -0.6 0.4 -0.7 0.3 -0.6 0.3 -0.7 0.4 -0.7 0.3 -0.7 0.2 -0.7 0.3 -0.9 0.3 -0.8 0.2 -0.8 0.1 -0.9 0.1 -1.0 0.1 -0.9 -0.0 -0.9 -0.1 -0.9 -0.1 -0.9 -0.3 -0.9 -0.3 -0.8 -0.4 -0.8 -0.6 -0.7 -0.6 -0.0 0.0 -0.6 -0.7 -0.6 -0.8 -0.4 -0.8 -0.3 -0.9 -0.3 -0.9 -0.1 -0.9 -0.1 -0.9 0.0 -0.9 0.1 -1.0 0.1 -0.9 0.1 -0.8 0.2 -0.8 0.3 -0.9 0.3 -0.7 0.2 -0.7 0.3 -0.7 0.4 -0.7 0.3 -0.6 0.3 -0.7 0.4 -0.6 0.3 -0.5 0.4 -0.6 0.4 -0.5 0.4 -0.5 0.4 -0.5 0.4 -0.5 0.4 -0.5 0.3 -0.4 0.5 -0.4 0.8 -0.8 0.4 -0.5 0.4 -0.3 0.5 -0.4 0.5 -0.4 0.5 -0.4 0.5 -0.4 0.5 -0.4 0.6 -0.4 0.5 -0.3 0.6 -0.4 0.7 -0.3 0.6 -0.3 0.7 -0.4 0.7 -0.3 0.7 -0.2 0.7 -0.3 0.9 -0.3 0.8 -0.2 0.8 -0.1 0.9 -0.1 1.0 -0.1 0.9 0.0 0.9 0.1 0.9 0.1 0.9 0.3 0.9 0.3 0.8 0.4 0.8 0.6 0.7 0.6 -0.0 0.0 0.6 0.7 0.6 0.8 0.4 0.8 0.3 0.9 0.3 0.9 0.1 0.9 0.1 0.9 -0.0 0.9 -0.1 1.0 -0.1 0.9 -0.1 0.8 -0.2 0.8 -0.3 0.9 -0.3 0.7 z; m37.4 24.7 0.5 0.7 0.8 0.9 0.8 1.0 0.6 1.0 -0.1 0.8 -0.0 0.1 -0.6 0.7 -1.1 0.5 -1.3 0.3 -1.0 0.2 -0.9 0.4 -0.7 1.1 0.1 1.0 0.1 1.1 0.0 1.2 -0.2 1.1 -0.4 0.5 -0.3 0.2 -0.8 0.2 -1.2 -0.4 -1.2 -0.4 -1.0 -0.5 -0.8 -0.1 -1.3 0.5 -0.5 0.8 -0.6 0.9 -0.6 1.0 -0.8 0.8 -0.8 0.2 -0.1 -0.0 -0.9 -0.3 -0.8 -1.0 -0.6 -1.0 -0.6 -0.9 -0.5 -0.7 -1.3 -0.3 -0.9 0.2 -0.9 0.4 -1.2 0.5 -1.2 0.3 -0.8 -0.3 -0.0 -0.1 -0.6 -0.6 -0.1 -1.2 0.1 -1.2 0.0 -1.1 0.0 -0.9 -0.7 -1.1 -0.9 -0.3 -1.1 -0.3 -1.2 -0.3 -1.1 -0.4 -0.5 -0.8 -0.0 0.0 -0.1 -0.9 0.6 -1.0 0.8 -0.9 0.8 -0.9 0.5 -0.7 -0.0 -1.4 -0.5 -0.7 -0.8 -0.9 -0.8 -0.9 -0.6 -1.0 0.1 -0.9 0.0 -0.0 0.5 -0.8 1.1 -0.4 1.2 -0.3 1.1 -0.3 0.9 -0.3 0.7 -1.1 0.0 -0.9 -0.0 -1.1 -0.1 -1.2 0.1 -1.2 0.6 -0.6 0.0 -0.1 0.8 -0.3 1.2 0.3 1.2 0.5 0.9 0.4 0.9 0.2 1.3 -0.3 0.5 -0.7 0.6 -0.9 0.6 -1.0 0.8 -1.0 0.9 -0.3 0.1 0.0 0.8 0.2 0.8 0.8 0.6 1.0 0.6 0.9 0.5 0.8 1.3 0.5 0.8 -0.1 1.0 -0.5 1.2 -0.4 1.2 -0.4 0.8 0.2 0.3 0.2 0.4 0.5 0.2 1.1 -0.0 1.2 -0.1 1.1 -0.1 1.0 0.7 1.1 0.9 0.4 1.0 0.2 1.3 0.3 1.1 0.5 0.6 0.7 0.0 0.1 0.1 0.8 -0.5 1.0 -0.9 1.0 -0.8 0.9 -0.5 0.7 z"/><animateTransform attributeName="transform" attributeType="XML" calcMode="spline" dur="5s" keySplines="0.5 0.2 0 0.8; 0.5 0.2 0 0.8; 0.5 0.2 0 0.8; 0.5 0.2 0 0.8; 0.5 0.2 0 0.8; 0.5 0.2 0 0.8; 0.5 0.2 0 0.8" keyTimes="0; 0.14; 0.29; 0.43; 0.57; 0.71; 0.86; 1" repeatCount="indefinite" type="rotate" values="0 24 24; 154 24 24; 309 24 24; 463 24 24; 617 24 24; 771 24 24; 926 24 24; 1080 24 24"/></path></svg>';
@@ -0,0 +1 @@
1
+ <svg class="se-loading-indicator__shapes" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="4 4 40 40" aria-hidden="true"><path fill="currentColor"><animate attributeName="d" calcMode="spline" dur="5s" keySplines="0.5 0.2 0 0.8; 0.5 0.2 0 0.8; 0.5 0.2 0 0.8; 0.5 0.2 0 0.8; 0.5 0.2 0 0.8; 0.5 0.2 0 0.8; 0.5 0.2 0 0.8" keyTimes="0; 0.14; 0.29; 0.43; 0.57; 0.71; 0.86; 1" repeatCount="indefinite" values="m37.4 24.7 0.5 0.7 0.8 0.9 0.8 1.0 0.6 1.0 -0.1 0.8 -0.0 0.1 -0.6 0.7 -1.1 0.5 -1.3 0.3 -1.0 0.2 -0.9 0.4 -0.7 1.1 0.1 1.0 0.1 1.1 0.0 1.2 -0.2 1.1 -0.4 0.5 -0.3 0.2 -0.8 0.2 -1.2 -0.4 -1.2 -0.4 -1.0 -0.5 -0.8 -0.1 -1.3 0.5 -0.5 0.8 -0.6 0.9 -0.6 1.0 -0.8 0.8 -0.8 0.2 -0.1 -0.0 -0.9 -0.3 -0.8 -1.0 -0.6 -1.0 -0.6 -0.9 -0.5 -0.7 -1.3 -0.3 -0.9 0.2 -0.9 0.4 -1.2 0.5 -1.2 0.3 -0.8 -0.3 -0.0 -0.1 -0.6 -0.6 -0.1 -1.2 0.1 -1.2 0.0 -1.1 0.0 -0.9 -0.7 -1.1 -0.9 -0.3 -1.1 -0.3 -1.2 -0.3 -1.1 -0.4 -0.5 -0.8 -0.0 0.0 -0.1 -0.9 0.6 -1.0 0.8 -0.9 0.8 -0.9 0.5 -0.7 -0.0 -1.4 -0.5 -0.7 -0.8 -0.9 -0.8 -0.9 -0.6 -1.0 0.1 -0.9 0.0 -0.0 0.5 -0.8 1.1 -0.4 1.2 -0.3 1.1 -0.3 0.9 -0.3 0.7 -1.1 0.0 -0.9 -0.0 -1.1 -0.1 -1.2 0.1 -1.2 0.6 -0.6 0.0 -0.1 0.8 -0.3 1.2 0.3 1.2 0.5 0.9 0.4 0.9 0.2 1.3 -0.3 0.5 -0.7 0.6 -0.9 0.6 -1.0 0.8 -1.0 0.9 -0.3 0.1 0.0 0.8 0.2 0.8 0.8 0.6 1.0 0.6 0.9 0.5 0.8 1.3 0.5 0.8 -0.1 1.0 -0.5 1.2 -0.4 1.2 -0.4 0.8 0.2 0.3 0.2 0.4 0.5 0.2 1.1 -0.0 1.2 -0.1 1.1 -0.1 1.0 0.7 1.1 0.9 0.4 1.0 0.2 1.3 0.3 1.1 0.5 0.6 0.7 0.0 0.1 0.1 0.8 -0.5 1.0 -0.9 1.0 -0.8 0.9 -0.5 0.7 z; m39.9 24.0 -0.3 0.8 -0.4 0.8 -0.3 0.8 -0.2 1.5 0.1 0.9 0.1 0.9 -0.1 0.9 -0.2 0.8 -0.3 0.8 -0.2 0.4 -0.3 0.4 -0.5 0.7 -0.7 0.5 -0.8 0.4 -0.8 0.4 -0.8 0.4 -1.2 1.0 -0.5 0.7 -0.5 0.8 -0.6 0.6 -0.6 0.6 -0.8 0.4 -0.4 0.2 -0.5 0.1 -0.9 0.2 -0.8 -0.0 -0.9 -0.2 -0.9 -0.3 -0.8 -0.1 -1.6 -0.1 -0.8 0.2 -0.9 0.3 -0.9 0.2 -0.8 -0.0 -0.9 -0.2 -0.5 -0.1 -0.4 -0.2 -0.8 -0.4 -0.6 -0.5 -0.6 -0.7 -0.5 -0.8 -0.5 -0.7 -1.2 -1.0 -0.7 -0.4 -0.9 -0.4 -0.8 -0.4 -0.6 -0.5 -0.6 -0.7 -0.3 -0.4 -0.2 -0.4 -0.3 -0.8 -0.2 -0.8 -0.1 -0.9 0.1 -0.9 0.1 -0.9 -0.2 -1.5 -0.3 -0.8 -0.4 -0.8 -0.3 -0.8 -0.2 -0.8 -0.1 -0.9 0.1 -0.7 -0.0 -0.2 0.2 -0.8 0.4 -0.8 0.5 -0.7 0.6 -0.6 0.7 -0.7 0.5 -0.6 0.6 -1.3 0.3 -0.9 0.2 -0.8 0.3 -0.8 0.5 -0.7 0.5 -0.6 0.2 -0.2 0.5 -0.4 0.8 -0.4 0.8 -0.3 0.8 -0.2 0.9 -0.0 0.8 -0.1 1.4 -0.5 0.7 -0.4 0.7 -0.5 0.7 -0.5 0.8 -0.3 0.8 -0.2 0.9 -0.1 0.0 -0.0 0.8 0.1 0.9 0.2 0.8 0.3 0.7 0.5 0.7 0.5 0.7 0.4 1.4 0.5 0.8 0.1 0.9 0.0 0.9 0.2 0.8 0.3 0.7 0.4 0.5 0.4 0.2 0.1 0.5 0.7 0.5 0.7 0.3 0.8 0.2 0.8 0.3 0.9 0.6 1.3 0.5 0.6 0.7 0.7 0.6 0.6 0.5 0.7 0.4 0.8 0.2 0.8 0.0 0.2 0.1 0.7 -0.1 0.9 z; m38.9 24.2 -0.2 0.8 -0.2 0.7 -0.3 0.8 -0.2 0.8 -0.3 0.7 -0.2 0.8 -0.3 0.8 -0.2 0.7 -0.3 0.8 -0.2 0.8 -0.3 0.7 -0.2 0.8 -0.4 1.0 -0.4 0.8 -0.4 0.8 -0.6 0.6 -0.7 0.5 0.0 0.1 -0.7 0.4 -0.8 0.3 -0.8 0.3 -0.9 0.1 -1.1 -0.0 -0.8 -0.0 -0.8 -0.0 -0.8 -0.0 -0.8 -0.0 -0.8 -0.0 -0.8 -0.0 -0.8 -0.0 -0.8 -0.0 -0.8 -0.0 -0.8 -0.0 -0.8 -0.0 -0.8 -0.0 -0.8 -0.0 -1.1 -0.0 -0.9 -0.1 -0.8 -0.3 -0.8 -0.3 -0.7 -0.5 -0.1 0.0 -0.6 -0.5 -0.6 -0.7 -0.4 -0.7 -0.4 -0.8 -0.4 -1.0 -0.2 -0.8 -0.3 -0.7 -0.2 -0.8 -0.3 -0.8 -0.2 -0.7 -0.3 -0.8 -0.2 -0.8 -0.3 -0.7 -0.2 -0.8 -0.3 -0.7 -0.2 -0.8 -0.3 -0.8 -0.2 -0.7 -0.3 -1.1 -0.2 -0.9 -0.0 -0.8 0.0 -0.9 0.2 -0.8 0.1 -0.1 0.3 -0.7 0.4 -0.8 0.6 -0.6 0.6 -0.6 0.9 -0.7 0.6 -0.5 0.7 -0.4 0.6 -0.5 0.7 -0.5 0.6 -0.4 0.7 -0.5 0.6 -0.5 0.7 -0.5 0.6 -0.4 0.7 -0.5 0.6 -0.5 0.7 -0.4 0.6 -0.5 0.9 -0.7 0.8 -0.4 0.8 -0.3 0.8 -0.2 0.8 -0.0 0.1 -0.0 0.9 0.0 0.8 0.2 0.8 0.3 0.8 0.4 0.9 0.7 0.6 0.5 0.7 0.4 0.6 0.5 0.7 0.5 0.6 0.4 0.7 0.5 0.6 0.5 0.7 0.5 0.6 0.4 0.7 0.5 0.6 0.5 0.7 0.4 0.6 0.5 0.9 0.7 0.6 0.6 0.6 0.7 0.4 0.7 0.3 0.7 0.0 0.1 0.2 0.8 0.1 0.9 -0.0 0.9 -0.2 0.8 -0.3 1.1 z; m39.6 24.0 -0.1 0.8 -0.3 0.8 -0.2 0.8 -0.3 0.7 -0.3 0.8 -0.4 0.7 -0.4 0.7 -0.5 0.6 -0.4 0.6 -0.6 0.6 -0.6 0.6 -0.4 0.4 -0.6 0.6 -0.4 0.5 -0.9 0.8 -0.5 0.5 -0.6 0.6 -0.4 0.4 -0.7 0.7 -0.5 0.5 -0.6 0.4 -0.7 0.5 -0.6 0.4 -0.7 0.4 -0.7 0.3 -0.8 0.3 -0.8 0.3 -0.8 0.2 -0.8 0.1 -0.8 0.1 -0.8 0.1 -0.9 0.0 -0.8 -0.0 -0.9 -0.1 -0.8 -0.2 -0.8 -0.2 -0.9 -0.2 -0.8 -0.3 -0.8 -0.4 -0.8 -0.4 -0.7 -0.5 -0.7 -0.5 -0.7 -0.5 -0.6 -0.6 -0.1 -0.1 -0.5 -0.6 -0.6 -0.7 -0.5 -0.7 -0.5 -0.8 -0.4 -0.7 -0.4 -0.8 -0.3 -0.8 -0.2 -0.8 -0.2 -0.9 -0.2 -0.8 -0.1 -0.9 0.0 -0.8 0.0 -0.9 0.1 -0.8 0.1 -0.8 0.1 -0.8 0.3 -0.8 0.2 -0.8 0.3 -0.7 0.4 -0.8 0.3 -0.7 0.5 -0.6 0.4 -0.7 0.4 -0.5 0.6 -0.6 0.6 -0.7 0.4 -0.4 0.6 -0.6 0.5 -0.4 0.8 -0.9 0.5 -0.5 0.6 -0.6 0.4 -0.4 0.7 -0.7 0.5 -0.5 0.6 -0.4 0.7 -0.5 0.6 -0.4 0.7 -0.4 0.7 -0.3 0.8 -0.3 0.8 -0.3 0.8 -0.2 0.8 -0.1 0.8 -0.1 0.8 -0.1 0.9 -0.0 0.8 0.0 0.9 0.1 0.8 0.2 0.8 0.2 0.9 0.2 0.8 0.4 0.8 0.3 0.8 0.4 0.7 0.5 0.7 0.5 0.7 0.5 0.6 0.7 0.1 -0.0 0.5 0.6 0.6 0.7 0.5 0.7 0.5 0.8 0.4 0.7 0.3 0.8 0.4 0.8 0.2 0.8 0.2 0.9 0.2 0.8 0.1 0.9 0.0 0.8 -0.0 0.8 -0.1 0.9 z; m40.0 24.0 -0.1 0.8 -0.5 0.8 -0.6 0.8 -0.6 0.6 -0.6 0.7 -0.5 0.6 -0.7 1.2 -0.1 0.7 -0.1 0.8 -0.0 0.9 -0.1 0.9 -0.1 0.9 -0.2 0.9 -0.5 0.7 -0.0 0.0 -0.7 0.5 -0.9 0.2 -0.9 0.1 -0.9 0.1 -0.8 0.0 -0.8 0.1 -0.8 0.1 -1.2 0.7 -0.6 0.5 -0.7 0.6 -0.6 0.6 -0.8 0.6 -0.8 0.5 -0.8 0.1 -0.0 0.0 -0.8 -0.1 -0.8 -0.5 -0.8 -0.6 -0.6 -0.6 -0.7 -0.6 -0.6 -0.5 -1.2 -0.7 -0.7 -0.1 -0.8 -0.1 -0.9 -0.0 -0.9 -0.1 -0.9 -0.1 -0.9 -0.2 -0.7 -0.5 -0.0 0.0 -0.5 -0.7 -0.2 -0.9 -0.1 -0.9 -0.1 -0.9 -0.0 -0.8 -0.1 -0.8 -0.1 -0.8 -0.7 -1.2 -0.5 -0.6 -0.6 -0.7 -0.6 -0.6 -0.6 -0.8 -0.5 -0.8 -0.1 -0.8 -0.0 -0.0 0.1 -0.8 0.5 -0.8 0.6 -0.8 0.6 -0.6 0.6 -0.7 0.5 -0.6 0.7 -1.2 0.1 -0.7 0.1 -0.8 0.0 -0.9 0.1 -0.9 0.1 -0.9 0.2 -0.9 0.5 -0.7 -0.0 -0.0 0.7 -0.5 0.9 -0.2 0.9 -0.1 0.9 -0.1 0.8 -0.0 0.8 -0.1 0.8 -0.1 1.2 -0.7 0.6 -0.5 0.7 -0.6 0.6 -0.6 0.8 -0.6 0.8 -0.5 0.8 -0.1 0.0 -0.0 0.8 0.1 0.8 0.5 0.8 0.6 0.6 0.6 0.7 0.6 0.6 0.5 1.2 0.7 0.7 0.1 0.8 0.1 0.9 0.0 0.9 0.1 0.9 0.1 0.9 0.2 0.7 0.5 0.0 -0.0 0.5 0.7 0.2 0.9 0.1 0.9 0.1 0.9 0.0 0.8 0.1 0.8 0.1 0.8 0.7 1.2 0.5 0.6 0.6 0.7 0.6 0.6 0.6 0.8 0.5 0.8 0.1 0.8 z; m36.9 24.6 0.1 0.7 0.2 0.8 0.2 0.7 0.4 0.9 0.4 0.9 0.2 0.9 0.1 1.0 0.1 0.9 -0.1 0.9 -0.3 0.9 -0.3 0.9 -0.4 0.8 -0.5 0.8 -0.6 0.6 -0.1 0.1 -0.6 0.6 -0.8 0.5 -0.8 0.4 -0.9 0.3 -0.9 0.3 -0.9 0.1 -0.9 -0.1 -1.0 -0.1 -0.9 -0.2 -0.9 -0.4 -0.9 -0.4 -0.7 -0.2 -0.8 -0.2 -0.7 -0.1 -1.2 0.0 -0.7 0.1 -0.8 0.2 -0.7 0.2 -0.9 0.4 -0.9 0.4 -0.9 0.2 -1.0 0.1 -0.9 0.1 -0.9 -0.1 -0.9 -0.3 -0.9 -0.3 -0.8 -0.4 -0.8 -0.5 -0.6 -0.6 -0.1 -0.1 -0.6 -0.6 -0.5 -0.8 -0.4 -0.8 -0.3 -0.9 -0.3 -0.9 -0.1 -0.9 0.1 -0.9 0.1 -1.0 0.2 -0.9 0.4 -0.9 0.4 -0.9 0.2 -0.7 0.2 -0.8 0.1 -0.7 -0.0 -1.2 -0.1 -0.7 -0.2 -0.8 -0.2 -0.7 -0.4 -0.9 -0.4 -0.9 -0.2 -0.9 -0.1 -1.0 -0.1 -0.9 0.1 -0.9 0.3 -0.9 0.3 -0.9 0.4 -0.8 0.5 -0.8 0.6 -0.6 0.1 -0.1 0.6 -0.6 0.8 -0.5 0.8 -0.4 0.9 -0.3 0.9 -0.3 0.9 -0.1 0.9 0.1 1.0 0.1 0.9 0.2 0.9 0.4 0.9 0.4 0.7 0.2 0.8 0.2 0.7 0.1 1.2 -0.0 0.7 -0.1 0.8 -0.2 0.7 -0.2 0.9 -0.4 0.9 -0.4 0.9 -0.2 1.0 -0.1 0.9 -0.1 0.9 0.1 0.9 0.3 0.9 0.3 0.8 0.4 0.8 0.5 0.6 0.6 0.1 0.1 0.6 0.6 0.5 0.8 0.4 0.8 0.3 0.9 0.3 0.9 0.1 0.9 -0.1 0.9 -0.1 1.0 -0.2 0.9 -0.4 0.9 -0.4 0.9 -0.2 0.7 -0.2 0.8 -0.1 0.7 z; m37.7 24.0 -0.3 0.7 -0.4 0.7 -0.3 0.6 -0.3 0.7 -0.4 0.6 -0.3 0.5 -0.4 0.6 -0.4 0.5 -0.4 0.5 -0.4 0.5 -0.4 0.5 -0.4 0.5 -0.3 0.4 -0.5 0.4 -0.8 0.8 -0.4 0.5 -0.4 0.3 -0.5 0.4 -0.5 0.4 -0.5 0.4 -0.5 0.4 -0.5 0.4 -0.6 0.4 -0.5 0.3 -0.6 0.4 -0.7 0.3 -0.6 0.3 -0.7 0.4 -0.7 0.3 -0.7 0.2 -0.7 0.3 -0.9 0.3 -0.8 0.2 -0.8 0.1 -0.9 0.1 -1.0 0.1 -0.9 -0.0 -0.9 -0.1 -0.9 -0.1 -0.9 -0.3 -0.9 -0.3 -0.8 -0.4 -0.8 -0.6 -0.7 -0.6 -0.0 0.0 -0.6 -0.7 -0.6 -0.8 -0.4 -0.8 -0.3 -0.9 -0.3 -0.9 -0.1 -0.9 -0.1 -0.9 0.0 -0.9 0.1 -1.0 0.1 -0.9 0.1 -0.8 0.2 -0.8 0.3 -0.9 0.3 -0.7 0.2 -0.7 0.3 -0.7 0.4 -0.7 0.3 -0.6 0.3 -0.7 0.4 -0.6 0.3 -0.5 0.4 -0.6 0.4 -0.5 0.4 -0.5 0.4 -0.5 0.4 -0.5 0.4 -0.5 0.3 -0.4 0.5 -0.4 0.8 -0.8 0.4 -0.5 0.4 -0.3 0.5 -0.4 0.5 -0.4 0.5 -0.4 0.5 -0.4 0.5 -0.4 0.6 -0.4 0.5 -0.3 0.6 -0.4 0.7 -0.3 0.6 -0.3 0.7 -0.4 0.7 -0.3 0.7 -0.2 0.7 -0.3 0.9 -0.3 0.8 -0.2 0.8 -0.1 0.9 -0.1 1.0 -0.1 0.9 0.0 0.9 0.1 0.9 0.1 0.9 0.3 0.9 0.3 0.8 0.4 0.8 0.6 0.7 0.6 -0.0 0.0 0.6 0.7 0.6 0.8 0.4 0.8 0.3 0.9 0.3 0.9 0.1 0.9 0.1 0.9 -0.0 0.9 -0.1 1.0 -0.1 0.9 -0.1 0.8 -0.2 0.8 -0.3 0.9 -0.3 0.7 z; m37.4 24.7 0.5 0.7 0.8 0.9 0.8 1.0 0.6 1.0 -0.1 0.8 -0.0 0.1 -0.6 0.7 -1.1 0.5 -1.3 0.3 -1.0 0.2 -0.9 0.4 -0.7 1.1 0.1 1.0 0.1 1.1 0.0 1.2 -0.2 1.1 -0.4 0.5 -0.3 0.2 -0.8 0.2 -1.2 -0.4 -1.2 -0.4 -1.0 -0.5 -0.8 -0.1 -1.3 0.5 -0.5 0.8 -0.6 0.9 -0.6 1.0 -0.8 0.8 -0.8 0.2 -0.1 -0.0 -0.9 -0.3 -0.8 -1.0 -0.6 -1.0 -0.6 -0.9 -0.5 -0.7 -1.3 -0.3 -0.9 0.2 -0.9 0.4 -1.2 0.5 -1.2 0.3 -0.8 -0.3 -0.0 -0.1 -0.6 -0.6 -0.1 -1.2 0.1 -1.2 0.0 -1.1 0.0 -0.9 -0.7 -1.1 -0.9 -0.3 -1.1 -0.3 -1.2 -0.3 -1.1 -0.4 -0.5 -0.8 -0.0 0.0 -0.1 -0.9 0.6 -1.0 0.8 -0.9 0.8 -0.9 0.5 -0.7 -0.0 -1.4 -0.5 -0.7 -0.8 -0.9 -0.8 -0.9 -0.6 -1.0 0.1 -0.9 0.0 -0.0 0.5 -0.8 1.1 -0.4 1.2 -0.3 1.1 -0.3 0.9 -0.3 0.7 -1.1 0.0 -0.9 -0.0 -1.1 -0.1 -1.2 0.1 -1.2 0.6 -0.6 0.0 -0.1 0.8 -0.3 1.2 0.3 1.2 0.5 0.9 0.4 0.9 0.2 1.3 -0.3 0.5 -0.7 0.6 -0.9 0.6 -1.0 0.8 -1.0 0.9 -0.3 0.1 0.0 0.8 0.2 0.8 0.8 0.6 1.0 0.6 0.9 0.5 0.8 1.3 0.5 0.8 -0.1 1.0 -0.5 1.2 -0.4 1.2 -0.4 0.8 0.2 0.3 0.2 0.4 0.5 0.2 1.1 -0.0 1.2 -0.1 1.1 -0.1 1.0 0.7 1.1 0.9 0.4 1.0 0.2 1.3 0.3 1.1 0.5 0.6 0.7 0.0 0.1 0.1 0.8 -0.5 1.0 -0.9 1.0 -0.8 0.9 -0.5 0.7 z"/><animateTransform attributeName="transform" attributeType="XML" calcMode="spline" dur="5s" keySplines="0.5 0.2 0 0.8; 0.5 0.2 0 0.8; 0.5 0.2 0 0.8; 0.5 0.2 0 0.8; 0.5 0.2 0 0.8; 0.5 0.2 0 0.8; 0.5 0.2 0 0.8" keyTimes="0; 0.14; 0.29; 0.43; 0.57; 0.71; 0.86; 1" repeatCount="indefinite" type="rotate" values="0 24 24; 154 24 24; 309 24 24; 463 24 24; 617 24 24; 771 24 24; 926 24 24; 1080 24 24"/></path></svg>
@@ -1,26 +1,31 @@
1
1
  /* Loading Indicator — M3 Expressive */
2
2
  /* Uses SVG shape morphing between 7 MaterialShapes with continuous rotation.
3
- Shapes: SoftBurst → Cookie9Sided → Pentagon → Pill → Sunny → Cookie4Sided → Oval */
3
+ Shapes: SoftBurst → Cookie9Sided → Pentagon → Pill → Sunny → Cookie4Sided → Oval
4
+ Usage: short indeterminate waits (200ms–5s). Not for long processes — use progress indicator.
5
+ Responsive sizing: 24px–240px via --se-loading-indicator-size. Container-to-indicator ratio is 79.2%. */
4
6
 
5
7
  /* ── Base (default, no container) ── */
6
8
  .se-loading-indicator {
9
+ --se-loading-indicator-size: 48px;
7
10
  display: inline-flex;
8
11
  align-items: center;
9
12
  justify-content: center;
10
- width: 48px;
11
- height: 48px;
13
+ width: var(--se-loading-indicator-size);
14
+ height: var(--se-loading-indicator-size);
12
15
  position: relative;
13
16
  color: var(--md-sys-color-primary);
14
17
  }
15
18
 
16
- /* SVG shape morph element */
19
+ /* SVG shape morph element — 79.2% of container (38/48 ratio) */
17
20
  .se-loading-indicator__shapes {
18
21
  display: block;
19
- width: 38px;
20
- height: 38px;
22
+ width: calc(var(--se-loading-indicator-size) * 0.792);
23
+ height: calc(var(--se-loading-indicator-size) * 0.792);
21
24
  }
22
25
 
23
26
  /* ── Contained variant ── */
27
+ /* Use when placed over other content for extra contrast.
28
+ Not needed on a plain surface. Always use with pull-to-refresh. */
24
29
  .se-loading-indicator--contained {
25
30
  background-color: var(--md-sys-color-primary-container);
26
31
  border-radius: 50%;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@skagerakenergi/design",
3
- "version": "0.5.1",
3
+ "version": "0.6.1",
4
4
  "author": "Chris Aurora Neumann Ruud <chrisauroraneumann.ruud@skagerakenergi.no>",
5
5
  "description": "Skagerak Energi design system — M3 component library (CSS only)",
6
6
  "type": "module",
@@ -41,6 +41,8 @@
41
41
  "./text-field.css": "./dist/text-field.css",
42
42
  "./list.css": "./dist/list.css",
43
43
  "./loading-indicator.css": "./dist/loading-indicator.css",
44
+ "./loading-indicator-shapes.svg": "./dist/loading-indicator-shapes.svg",
45
+ "./loading-indicator-shapes.js": "./dist/loading-indicator-shapes.js",
44
46
  "./layout.css": "./dist/layout.css",
45
47
  "./index.css": "./dist/index.css"
46
48
  },
@@ -85,6 +87,7 @@
85
87
  "test:spec": "playwright test --config tests/playwright.config.ts",
86
88
  "test:storybook": "vitest --run",
87
89
  "test": "pnpm test:spec && pnpm test:storybook",
90
+ "audit:docs": "node --import tsx scripts/audit-docs.ts",
88
91
  "figma:publish": "figma connect publish",
89
92
  "figma:unpublish": "figma connect unpublish"
90
93
  }