@rolemodel/optics 2.4.0 → 2.5.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.
@@ -13,6 +13,7 @@
13
13
  *::after {
14
14
  box-sizing: border-box;
15
15
  }
16
+
16
17
  /* Remove default margin */
17
18
  body,
18
19
  h1,
@@ -26,31 +27,37 @@ dl,
26
27
  dd {
27
28
  margin: 0;
28
29
  }
30
+
29
31
  /* Remove list styles on ul, ol elements with a list role, which suggests default styling will be removed */
30
32
  ul[role="list"],
31
33
  ol[role="list"] {
32
34
  list-style: none;
33
35
  }
36
+
34
37
  /* Set core root defaults */
35
38
  html:focus-within {
36
39
  scroll-behavior: smooth;
37
40
  }
41
+
38
42
  /* Set core body defaults */
39
43
  body {
40
44
  min-height: 100vh;
41
45
  text-rendering: optimizeSpeed;
42
46
  line-height: 1.5;
43
47
  }
48
+
44
49
  /* A elements that don't have a class get default styles */
45
50
  a:not([class]) {
46
51
  text-decoration-skip-ink: auto;
47
52
  }
53
+
48
54
  /* Make images easier to work with */
49
55
  img,
50
56
  picture {
51
57
  max-width: 100%;
52
58
  display: block;
53
59
  }
60
+
54
61
  /* Inherit fonts for inputs and buttons */
55
62
  input,
56
63
  button,
@@ -58,6 +65,7 @@ textarea,
58
65
  select {
59
66
  font: inherit;
60
67
  }
68
+
61
69
  /* Remove all animations and transitions for people that prefer not to see them */
62
70
  @media (prefers-reduced-motion: reduce) {
63
71
  html:focus-within {
@@ -72,6 +80,7 @@ select {
72
80
  scroll-behavior: auto !important;
73
81
  }
74
82
  }
83
+
75
84
  /* Fonts */
76
85
  /*
77
86
  Noto Sans supports:
@@ -79,19 +88,23 @@ Noto Sans supports:
79
88
  font-stretch: {anything between 62.5% and 100%}
80
89
  font-style: {normal or italic}
81
90
  */
91
+
82
92
  /*
83
93
  Noto Serif supports:
84
94
  font-weight: {anything between 100 and 900}
85
95
  font-stretch: {anything between 62.5% and 100%}
86
96
  font-style: {normal or italic}
87
97
  */
98
+
88
99
  /* Noto Sans and Noto Serif */
89
100
  /*
90
101
  See all icons at: https://phosphoricons.com/
91
102
  See Changelog at: https://github.com/phosphor-icons/web/releases
92
103
  Current version: 2.1.2
93
104
  */
105
+
94
106
  /* Note: the important tag is how Phosphor sets up the fonts which is why we replicate them here */
107
+
95
108
  /* Phosphor Icons */
96
109
  .ph {
97
110
  font-weight: unset;
@@ -118,9 +131,11 @@ Noto Sans supports:
118
131
  font-family: 'Phosphor-Bold' !important;
119
132
  }
120
133
  }
134
+
121
135
  .ph-duotone {
122
136
  font-weight: unset;
123
137
  }
138
+
124
139
  /* Tokens */
125
140
  :root {
126
141
  /* Color HSLs
@@ -441,6 +456,7 @@ Noto Sans supports:
441
456
  var(--op-input-inner-focus) var(--op-color-alerts-notice-plus-two),
442
457
  var(--op-input-outer-focus) var(--op-color-alerts-notice-plus-five);
443
458
  }
459
+
444
460
  /* Animations */
445
461
  @keyframes rm-slide-in-out-flash {
446
462
  /*
@@ -1920,10 +1936,12 @@ Noto Sans supports:
1920
1936
  --op-color-on-background: var(--op-color-neutral-on-plus-eight);
1921
1937
  --op-color-on-background-alt: var(--op-color-neutral-on-plus-eight-alt);
1922
1938
  }
1939
+
1923
1940
  /* Force Light Mode */
1924
1941
  :root[data-theme-mode='light'] {
1925
1942
  color-scheme: only light;
1926
1943
  }
1944
+
1927
1945
  /* Force Dark Mode */
1928
1946
  :root[data-theme-mode='dark'] {
1929
1947
  color-scheme: only dark;
@@ -1943,6 +1961,7 @@ Noto Sans supports:
1943
1961
  */
1944
1962
  --op-encoded-images-dropdown-arrow: url('data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iOSIgdmlld0JveD0iMCAwIDEyIDkiIGZpbGw9IiNmZmYiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxwYXRoIGQ9Ik02IDguMzc1MDFMMCAyLjM3NTAxTDEuNCAwLjk3NTAwNkw2IDUuNTc1MDFMMTAuNiAwLjk3NTAwNkwxMiAyLjM3NTAxTDYgOC4zNzUwMVoiIGZpbGw9IiNmZmYiLz4KPC9zdmc+Cg==');
1945
1963
  }
1964
+
1946
1965
  @media (prefers-color-scheme: dark) {
1947
1966
  :root:not([data-theme-mode='light']) {
1948
1967
  /**
@@ -1961,13 +1980,16 @@ Noto Sans supports:
1961
1980
  --op-encoded-images-dropdown-arrow: url('data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iOSIgdmlld0JveD0iMCAwIDEyIDkiIGZpbGw9IiNmZmYiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxwYXRoIGQ9Ik02IDguMzc1MDFMMCAyLjM3NTAxTDEuNCAwLjk3NTAwNkw2IDUuNTc1MDFMMTAuNiAwLjk3NTAwNkwxMiAyLjM3NTAxTDYgOC4zNzUwMVoiIGZpbGw9IiNmZmYiLz4KPC9zdmc+Cg==');
1962
1981
  }
1963
1982
  }
1983
+
1964
1984
  /* Base styles and utilities */
1965
1985
  /* After a reset, introduce base element styles specific to this system */
1986
+
1966
1987
  html {
1967
1988
  overflow: hidden; /* Needed to prevent flash messages and panels from causing overflow */
1968
1989
  font-family: var(--op-font-family);
1969
1990
  font-size: 62.5%; /* 1rem = 10px */
1970
1991
  }
1992
+
1971
1993
  body {
1972
1994
  overflow: auto;
1973
1995
  background: var(--op-color-background);
@@ -1975,14 +1997,17 @@ body {
1975
1997
  color: var(--op-color-on-background);
1976
1998
  font-size: var(--op-font-medium);
1977
1999
  }
2000
+
1978
2001
  button {
1979
2002
  background: none;
1980
2003
  cursor: pointer;
1981
2004
  }
2005
+
1982
2006
  button,
1983
2007
  input[type='submit'] {
1984
2008
  border: 0;
1985
2009
  }
2010
+
1986
2011
  label {
1987
2012
  display: inline-block;
1988
2013
 
@@ -1990,9 +2015,11 @@ label {
1990
2015
  cursor: pointer;
1991
2016
  }
1992
2017
  }
2018
+
1993
2019
  a {
1994
2020
  color: var(--op-color-primary-original);
1995
2021
  }
2022
+
1996
2023
  blockquote,
1997
2024
  dl,
1998
2025
  dd,
@@ -2006,6 +2033,7 @@ figure,
2006
2033
  pre {
2007
2034
  margin: 0;
2008
2035
  }
2036
+
2009
2037
  h1,
2010
2038
  h2,
2011
2039
  h3,
@@ -2015,28 +2043,36 @@ h6 {
2015
2043
  font-weight: var(--op-font-weight-normal);
2016
2044
  margin-block: 0 var(--op-space-small);
2017
2045
  }
2046
+
2018
2047
  h1 {
2019
2048
  font-size: var(--op-font-3x-large);
2020
2049
  }
2050
+
2021
2051
  h2 {
2022
2052
  font-size: var(--op-font-2x-large);
2023
2053
  }
2054
+
2024
2055
  h3 {
2025
2056
  font-size: var(--op-font-large);
2026
2057
  }
2058
+
2027
2059
  h4 {
2028
2060
  font-size: var(--op-font-medium);
2029
2061
  }
2062
+
2030
2063
  h5 {
2031
2064
  font-size: var(--op-font-small);
2032
2065
  }
2066
+
2033
2067
  h6 {
2034
2068
  font-size: var(--op-font-x-small);
2035
2069
  }
2070
+
2036
2071
  p {
2037
2072
  font-size: var(--op-font-medium);
2038
2073
  margin-block-end: var(--op-space-small);
2039
2074
  }
2075
+
2040
2076
  small {
2041
2077
  font-size: var(--op-font-small);
2042
2078
  }
@@ -2046,11 +2082,13 @@ small {
2046
2082
  grid-template-columns: auto 1fr auto;
2047
2083
  inline-size: 100%;
2048
2084
  }
2085
+
2049
2086
  .app-body {
2050
2087
  display: flex;
2051
2088
  overflow: auto;
2052
2089
  flex-direction: column;
2053
2090
  }
2091
+
2054
2092
  .app__header {
2055
2093
  position: sticky;
2056
2094
  z-index: var(--op-z-index-header);
@@ -2058,6 +2096,7 @@ small {
2058
2096
  flex-shrink: 0;
2059
2097
  inset-block-start: 0;
2060
2098
  }
2099
+
2061
2100
  .app__content {
2062
2101
  flex-grow: 1;
2063
2102
  padding: 0 var(--op-space-large);
@@ -2065,12 +2104,14 @@ small {
2065
2104
  inline-size: 100%;
2066
2105
  max-inline-size: var(--op-breakpoint-medium);
2067
2106
  }
2107
+
2068
2108
  .app__content-no-margin {
2069
2109
  flex-grow: 1;
2070
2110
  padding: 0 var(--op-space-large);
2071
2111
  inline-size: 100%;
2072
2112
  overflow-y: auto;
2073
2113
  }
2114
+
2074
2115
  .app__footer {
2075
2116
  position: sticky;
2076
2117
  z-index: var(--op-z-index-footer);
@@ -2078,6 +2119,7 @@ small {
2078
2119
  flex-shrink: 0;
2079
2120
  inset-block-end: 0;
2080
2121
  }
2122
+
2081
2123
  /*
2082
2124
  <html lang='en'>
2083
2125
  <head>...</head>
@@ -2092,6 +2134,7 @@ small {
2092
2134
  </body>
2093
2135
  </html>
2094
2136
  */
2137
+
2095
2138
  :root:has(.op-page) {
2096
2139
  /* Reset existing Optics layout */
2097
2140
  overflow: unset;
@@ -2109,6 +2152,7 @@ small {
2109
2152
  min-block-size: 100%;
2110
2153
  }
2111
2154
  }
2155
+
2112
2156
  .op-page {
2113
2157
  display: grid;
2114
2158
  grid-template-areas: 'sidebar-left main sidebar-right';
@@ -2183,6 +2227,7 @@ small {
2183
2227
  }
2184
2228
  }
2185
2229
  /* Container Properties */
2230
+
2186
2231
  .container {
2187
2232
  inline-size: 100%;
2188
2233
  margin-block: 0;
@@ -2191,304 +2236,408 @@ small {
2191
2236
  padding-block: 0;
2192
2237
  padding-inline: var(--op-space-large);
2193
2238
  }
2239
+
2194
2240
  .container--sm {
2195
2241
  max-inline-size: var(--op-breakpoint-small);
2196
2242
  }
2243
+
2197
2244
  .container--md-padding {
2198
2245
  padding: 0 var(--op-space-medium);
2199
2246
  }
2247
+
2200
2248
  .container--sm-padding {
2201
2249
  padding: 0 var(--op-space-small);
2202
2250
  }
2251
+
2203
2252
  .container--xs {
2204
2253
  max-inline-size: var(--op-breakpoint-x-small);
2205
2254
  }
2255
+
2206
2256
  /* Width Properties */
2257
+
2207
2258
  .full-width {
2208
2259
  inline-size: 100%;
2209
2260
  }
2261
+
2210
2262
  .half-width {
2211
2263
  inline-size: 50%;
2212
2264
  }
2265
+
2213
2266
  .four-fifths-width {
2214
2267
  inline-size: calc(100% * 4 / 5);
2215
2268
  }
2269
+
2216
2270
  .three-fifths-width {
2217
2271
  inline-size: calc(100% * 3 / 5);
2218
2272
  }
2273
+
2219
2274
  .two-fifths-width {
2220
2275
  inline-size: calc(100% * 2 / 5);
2221
2276
  }
2277
+
2222
2278
  .one-fifth-width {
2223
2279
  inline-size: calc(100% * 1 / 5);
2224
2280
  }
2281
+
2225
2282
  .three-quarters-width {
2226
2283
  inline-size: calc(100% * 3 / 4);
2227
2284
  }
2285
+
2228
2286
  .one-quarter-width {
2229
2287
  inline-size: calc(100% * 1 / 4);
2230
2288
  }
2289
+
2231
2290
  .two-thirds-width {
2232
2291
  inline-size: calc(100% * 2 / 3);
2233
2292
  }
2293
+
2234
2294
  .one-third-width {
2235
2295
  inline-size: calc(100% * 1 / 3);
2236
2296
  }
2297
+
2237
2298
  /* Flex Properties */
2299
+
2238
2300
  .flex {
2239
2301
  display: flex;
2240
2302
  }
2303
+
2241
2304
  .flex-col {
2242
2305
  flex-direction: column;
2243
2306
  }
2307
+
2244
2308
  .flex-row {
2245
2309
  flex-direction: row;
2246
2310
  }
2311
+
2247
2312
  .flex-wrap {
2248
2313
  flex-wrap: wrap;
2249
2314
  }
2315
+
2250
2316
  .flex-no-wrap {
2251
2317
  flex-wrap: nowrap;
2252
2318
  }
2319
+
2253
2320
  .flex-grow-1 {
2254
2321
  flex-grow: 1;
2255
2322
  }
2323
+
2256
2324
  /* Gap Properties */
2257
2325
  .gap-none {
2258
2326
  gap: 0;
2259
2327
 
2260
2328
  --op-gap: 0;
2261
2329
  }
2330
+
2262
2331
  .gap-xxs {
2263
2332
  gap: var(--op-space-2x-small);
2264
2333
 
2265
2334
  --op-gap: var(--op-space-2x-small);
2266
2335
  }
2336
+
2267
2337
  .gap-xs {
2268
2338
  gap: var(--op-space-x-small);
2269
2339
 
2270
2340
  --op-gap: var(--op-space-x-small);
2271
2341
  }
2342
+
2272
2343
  .gap-sm {
2273
2344
  gap: var(--op-space-small);
2274
2345
 
2275
2346
  --op-gap: var(--op-space-small);
2276
2347
  }
2348
+
2277
2349
  .gap-md {
2278
2350
  gap: var(--op-space-medium);
2279
2351
 
2280
2352
  --op-gap: var(--op-space-medium);
2281
2353
  }
2354
+
2282
2355
  .gap-lg {
2283
2356
  gap: var(--op-space-large);
2284
2357
 
2285
2358
  --op-gap: var(--op-space-large);
2286
2359
  }
2360
+
2287
2361
  .gap-xl {
2288
2362
  gap: var(--op-space-x-large);
2289
2363
 
2290
2364
  --op-gap: var(--op-space-x-large);
2291
2365
  }
2366
+
2292
2367
  /* Justify Content */
2368
+
2293
2369
  .justify-start {
2294
2370
  justify-content: flex-start;
2295
2371
  }
2372
+
2296
2373
  .justify-center {
2297
2374
  justify-content: center;
2298
2375
  }
2376
+
2299
2377
  .justify-end {
2300
2378
  justify-content: flex-end;
2301
2379
  }
2380
+
2302
2381
  .justify-between {
2303
2382
  justify-content: space-between;
2304
2383
  }
2384
+
2305
2385
  .justify-around {
2306
2386
  justify-content: space-around;
2307
2387
  }
2388
+
2308
2389
  /* Align Items */
2390
+
2309
2391
  .items-stretch {
2310
2392
  align-items: stretch;
2311
2393
  }
2394
+
2312
2395
  .items-start {
2313
2396
  align-items: flex-start;
2314
2397
  }
2398
+
2315
2399
  .items-center {
2316
2400
  align-items: center;
2317
2401
  }
2402
+
2318
2403
  .items-end {
2319
2404
  align-items: flex-end;
2320
2405
  }
2406
+
2321
2407
  .items-baseline {
2322
2408
  align-items: baseline;
2323
2409
  }
2410
+
2324
2411
  /* Align Self */
2412
+
2325
2413
  .self-auto {
2326
2414
  align-self: auto;
2327
2415
  }
2416
+
2328
2417
  .self-start {
2329
2418
  align-self: flex-start;
2330
2419
  }
2420
+
2331
2421
  .self-center {
2332
2422
  align-self: center;
2333
2423
  }
2424
+
2334
2425
  .self-end {
2335
2426
  align-self: flex-end;
2336
2427
  }
2428
+
2337
2429
  .self-stretch {
2338
2430
  align-self: stretch;
2339
2431
  }
2432
+
2340
2433
  .self-baseline {
2341
2434
  align-self: baseline;
2342
2435
  }
2436
+
2343
2437
  /* Text Alignment */
2438
+
2344
2439
  .text-left {
2345
2440
  text-align: start;
2346
2441
  }
2442
+
2347
2443
  .text-center {
2348
2444
  text-align: center;
2349
2445
  }
2446
+
2350
2447
  .text-right {
2351
2448
  text-align: end;
2352
2449
  }
2450
+
2353
2451
  .text-justify {
2354
2452
  text-align: justify;
2355
2453
  }
2454
+
2356
2455
  /* Box Margin */
2456
+
2357
2457
  .margin-xl {
2358
2458
  margin: var(--op-space-x-large);
2359
2459
  }
2460
+
2360
2461
  .margin-lg {
2361
2462
  margin: var(--op-space-large);
2362
2463
  }
2464
+
2363
2465
  .margin-md {
2364
2466
  margin: var(--op-space-medium);
2365
2467
  }
2468
+
2366
2469
  .margin-sm {
2367
2470
  margin: var(--op-space-small);
2368
2471
  }
2472
+
2369
2473
  .margin-xs {
2370
2474
  margin: var(--op-space-x-small);
2371
2475
  }
2476
+
2372
2477
  .margin-none {
2373
2478
  margin: 0;
2374
2479
  }
2480
+
2375
2481
  .margin-auto {
2376
2482
  margin: auto;
2377
2483
  }
2484
+
2378
2485
  /* Vertical Margin */
2486
+
2379
2487
  .margin-y-xl {
2380
2488
  margin-block: var(--op-space-x-large);
2381
2489
  }
2490
+
2382
2491
  .margin-y-lg {
2383
2492
  margin-block: var(--op-space-large);
2384
2493
  }
2494
+
2385
2495
  .margin-y-md {
2386
2496
  margin-block: var(--op-space-medium);
2387
2497
  }
2498
+
2388
2499
  .margin-y-sm {
2389
2500
  margin-block: var(--op-space-small);
2390
2501
  }
2502
+
2391
2503
  .margin-y-xs {
2392
2504
  margin-block: var(--op-space-x-small);
2393
2505
  }
2506
+
2394
2507
  .margin-y-none {
2395
2508
  margin-block: 0;
2396
2509
  }
2510
+
2397
2511
  /* Horizontal Margin */
2512
+
2398
2513
  .margin-x-xl {
2399
2514
  margin-inline: var(--op-space-x-large);
2400
2515
  }
2516
+
2401
2517
  .margin-x-lg {
2402
2518
  margin-inline: var(--op-space-large);
2403
2519
  }
2520
+
2404
2521
  .margin-x-md {
2405
2522
  margin-inline: var(--op-space-medium);
2406
2523
  }
2524
+
2407
2525
  .margin-x-sm {
2408
2526
  margin-inline: var(--op-space-small);
2409
2527
  }
2528
+
2410
2529
  .margin-x-xs {
2411
2530
  margin-inline: var(--op-space-x-small);
2412
2531
  }
2532
+
2413
2533
  .margin-x-none {
2414
2534
  margin-inline: 0;
2415
2535
  }
2536
+
2416
2537
  /* Top Margin */
2538
+
2417
2539
  .margin-top-xl {
2418
2540
  margin-block-start: var(--op-space-x-large);
2419
2541
  }
2542
+
2420
2543
  .margin-top-lg {
2421
2544
  margin-block-start: var(--op-space-large);
2422
2545
  }
2546
+
2423
2547
  .margin-top-md {
2424
2548
  margin-block-start: var(--op-space-medium);
2425
2549
  }
2550
+
2426
2551
  .margin-top-sm {
2427
2552
  margin-block-start: var(--op-space-small);
2428
2553
  }
2554
+
2429
2555
  .margin-top-xs {
2430
2556
  margin-block-start: var(--op-space-x-small);
2431
2557
  }
2558
+
2432
2559
  .margin-top-none {
2433
2560
  margin-block-start: 0;
2434
2561
  }
2562
+
2435
2563
  /* Bottom Margin */
2564
+
2436
2565
  .margin-bottom-xl {
2437
2566
  margin-block-end: var(--op-space-x-large);
2438
2567
  }
2568
+
2439
2569
  .margin-bottom-lg {
2440
2570
  margin-block-end: var(--op-space-large);
2441
2571
  }
2572
+
2442
2573
  .margin-bottom-md {
2443
2574
  margin-block-end: var(--op-space-medium);
2444
2575
  }
2576
+
2445
2577
  .margin-bottom-sm {
2446
2578
  margin-block-end: var(--op-space-small);
2447
2579
  }
2580
+
2448
2581
  .margin-bottom-xs {
2449
2582
  margin-block-end: var(--op-space-x-small);
2450
2583
  }
2584
+
2451
2585
  .margin-bottom-none {
2452
2586
  margin-block-end: 0;
2453
2587
  }
2588
+
2454
2589
  /* Right Margin */
2590
+
2455
2591
  .margin-right-xl {
2456
2592
  margin-inline-end: var(--op-space-x-large);
2457
2593
  }
2594
+
2458
2595
  .margin-right-lg {
2459
2596
  margin-inline-end: var(--op-space-large);
2460
2597
  }
2598
+
2461
2599
  .margin-right-md {
2462
2600
  margin-inline-end: var(--op-space-medium);
2463
2601
  }
2602
+
2464
2603
  .margin-right-sm {
2465
2604
  margin-inline-end: var(--op-space-small);
2466
2605
  }
2606
+
2467
2607
  .margin-right-xs {
2468
2608
  margin-inline-end: var(--op-space-x-small);
2469
2609
  }
2610
+
2470
2611
  .margin-right-none {
2471
2612
  margin-inline-start: 0;
2472
2613
  }
2614
+
2473
2615
  /* Left Margin */
2616
+
2474
2617
  .margin-left-xl {
2475
2618
  margin-inline-start: var(--op-space-x-large);
2476
2619
  }
2620
+
2477
2621
  .margin-left-lg {
2478
2622
  margin-inline-start: var(--op-space-large);
2479
2623
  }
2624
+
2480
2625
  .margin-left-md {
2481
2626
  margin-inline-start: var(--op-space-medium);
2482
2627
  }
2628
+
2483
2629
  .margin-left-sm {
2484
2630
  margin-inline-start: var(--op-space-small);
2485
2631
  }
2632
+
2486
2633
  .margin-left-xs {
2487
2634
  margin-inline-start: var(--op-space-x-small);
2488
2635
  }
2636
+
2489
2637
  .margin-left-none {
2490
2638
  margin-inline-start: 0;
2491
2639
  }
2640
+
2492
2641
  /*
2493
2642
  Accessibility
2494
2643
  Use the following class to hide accessibility text that is needed for screen readers but needs to be hidden from regular users.
@@ -2502,7 +2651,9 @@ small {
2502
2651
  clip: rect(1px, 1px, 1px, 1px);
2503
2652
  inline-size: 1px;
2504
2653
  }
2654
+
2505
2655
  /* Advanced Layout Utilities */
2656
+
2506
2657
  /* Equivalent to .flex.flex-col.gap-md */
2507
2658
  .op-stack {
2508
2659
  display: flex;
@@ -2515,6 +2666,7 @@ small {
2515
2666
  gap: var(--op-space-medium);
2516
2667
  }
2517
2668
  }
2669
+
2518
2670
  /* Equivalent to .flex.flex-wrap.items-center.gap-md */
2519
2671
  .op-cluster {
2520
2672
  display: flex;
@@ -2528,6 +2680,7 @@ small {
2528
2680
  gap: var(--op-space-medium);
2529
2681
  }
2530
2682
  }
2683
+
2531
2684
  /* Equivalent to .flex.flex-wrap.items-center.justify-between.gap-md */
2532
2685
  .op-split {
2533
2686
  display: flex;
@@ -2542,6 +2695,7 @@ small {
2542
2695
  gap: var(--op-space-medium);
2543
2696
  }
2544
2697
  }
2698
+
2545
2699
  /*
2546
2700
  side by side layout with a small area and a large area
2547
2701
  similar to .flex with a .flex-grow-1 within it, but with a more semantic name and wrap handling.
@@ -2575,6 +2729,7 @@ small {
2575
2729
  flex-grow: 999;
2576
2730
  }
2577
2731
  }
2732
+
2578
2733
  /* Grid Layout */
2579
2734
  .op-grid {
2580
2735
  --_op-grid-min-column-size: var(--op-space-4x-large);
@@ -2613,12 +2768,14 @@ small {
2613
2768
  --_op-grid-max-column-size: calc(100% / 7);
2614
2769
  }
2615
2770
  }
2771
+
2616
2772
  /* Frame */
2617
2773
  @property --_op-frame-inline-size {
2618
2774
  inherits: true;
2619
2775
  initial-value: 100%;
2620
2776
  syntax: '<length> | <percentage>';
2621
2777
  }
2778
+
2622
2779
  .op-frame {
2623
2780
  display: flex;
2624
2781
  overflow: hidden;
@@ -2670,6 +2827,7 @@ small {
2670
2827
  aspect-ratio: 2 / 3;
2671
2828
  }
2672
2829
  }
2830
+
2673
2831
  /* Components */
2674
2832
  .accordion {
2675
2833
  /* Public API (customizable component options) */
@@ -3428,6 +3586,7 @@ small {
3428
3586
  }
3429
3587
  }
3430
3588
  }
3589
+
3431
3590
  .btn-group-toolbar {
3432
3591
  display: flex;
3433
3592
  flex-wrap: wrap;
@@ -3541,6 +3700,7 @@ small {
3541
3700
  }
3542
3701
  }
3543
3702
  }
3703
+
3544
3704
  /* stylelint-disable no-descending-specificity */
3545
3705
  .confirm-dialog {
3546
3706
  /* Public API (customizable component options) */
@@ -3728,6 +3888,7 @@ small {
3728
3888
  /* stylelint-enable selector-no-vendor-prefix */
3729
3889
  }
3730
3890
  }
3891
+
3731
3892
  /* Radio or Checkbox Form Control */
3732
3893
  .form-control:is([type='radio'], [type='checkbox']) {
3733
3894
  /* Public API (customizable component options) */
@@ -3746,6 +3907,7 @@ small {
3746
3907
  align-self: center;
3747
3908
  }
3748
3909
  }
3910
+
3749
3911
  /* Any Form Control that is not a radio or checkbox */
3750
3912
  .form-control:not([type='radio'], [type='checkbox']) {
3751
3913
  /* Public API (customizable component options) */
@@ -3808,6 +3970,7 @@ small {
3808
3970
  }
3809
3971
  }
3810
3972
  }
3973
+
3811
3974
  /* Color Form Control */
3812
3975
  .form-control[type='color'] {
3813
3976
  padding: var(--op-space-2x-small);
@@ -3822,6 +3985,7 @@ small {
3822
3985
  border-radius: var(--op-radius-medium);
3823
3986
  }
3824
3987
  }
3988
+
3825
3989
  /* File Form Control */
3826
3990
  .form-control[type='file'] {
3827
3991
  padding-block: 0;
@@ -3857,6 +4021,7 @@ small {
3857
4021
  --__op-btn-height: calc(var(--__op-btn-base-height) - var(--op-space-x-small));
3858
4022
  }
3859
4023
  }
4024
+
3860
4025
  select.form-control:not([multiple], [type='radio'], [type='checkbox']) {
3861
4026
  appearance: none;
3862
4027
  background-image: var(--op-encoded-images-dropdown-arrow);
@@ -3868,14 +4033,17 @@ select.form-control:not([multiple], [type='radio'], [type='checkbox']) {
3868
4033
  cursor: pointer;
3869
4034
  padding-inline-end: var(--op-space-3x-large);
3870
4035
  }
4036
+
3871
4037
  select.form-control[multiple] {
3872
4038
  min-block-size: calc(2 * var(--__op-form-control-height));
3873
4039
  }
4040
+
3874
4041
  textarea.form-control:not([type='radio'], [type='checkbox']) {
3875
4042
  block-size: calc(2 * var(--__op-form-control-height));
3876
4043
  max-inline-size: 100%;
3877
4044
  min-block-size: var(--__op-form-control-height);
3878
4045
  }
4046
+
3879
4047
  .form-label {
3880
4048
  color: var(--op-color-on-background);
3881
4049
  font-size: var(--op-font-x-small);
@@ -3883,16 +4051,19 @@ textarea.form-control:not([type='radio'], [type='checkbox']) {
3883
4051
  letter-spacing: var(--op-letter-spacing-label);
3884
4052
  line-height: var(--op-line-height-base);
3885
4053
  }
4054
+
3886
4055
  .form-error {
3887
4056
  color: var(--op-color-alerts-danger-base);
3888
4057
  font-size: var(--op-font-x-small);
3889
4058
  inline-size: fit-content;
3890
4059
  }
4060
+
3891
4061
  .form-hint {
3892
4062
  display: block;
3893
4063
  font-size: var(--op-font-small);
3894
4064
  font-style: italic;
3895
4065
  }
4066
+
3896
4067
  .form-error-summary {
3897
4068
  padding: var(--op-space-large);
3898
4069
  border-radius: var(--op-radius-large);
@@ -3909,6 +4080,7 @@ textarea.form-control:not([type='radio'], [type='checkbox']) {
3909
4080
  margin-block-end: 0;
3910
4081
  }
3911
4082
  }
4083
+
3912
4084
  .form-group {
3913
4085
  display: grid;
3914
4086
  align-content: baseline;
@@ -3939,6 +4111,7 @@ textarea.form-control:not([type='radio'], [type='checkbox']) {
3939
4111
  }
3940
4112
  }
3941
4113
  }
4114
+
3942
4115
  .form-group--inline {
3943
4116
  align-items: center;
3944
4117
 
@@ -3960,6 +4133,7 @@ textarea.form-control:not([type='radio'], [type='checkbox']) {
3960
4133
  }
3961
4134
  /* stylelint-enable no-descending-specificity */
3962
4135
  }
4136
+
3963
4137
  .form-group--error {
3964
4138
  /* stylelint-disable no-descending-specificity */
3965
4139
  .form-control {
@@ -4049,6 +4223,13 @@ textarea.form-control:not([type='radio'], [type='checkbox']) {
4049
4223
  --_op-icon-optical-size-large: 40;
4050
4224
  --_op-icon-optical-size-x-large: 48;
4051
4225
 
4226
+ /* SVG (.icon--svg) */
4227
+ --_op-icon-stroke-width-light: 1;
4228
+ --_op-icon-stroke-width-normal: 1.5;
4229
+ --_op-icon-stroke-width-semi-bold: 2;
4230
+ --_op-icon-stroke-width-bold: 2.5;
4231
+ --_op-icon-svg-opacity-low-emphasis: 0.6;
4232
+
4052
4233
  /* Private API (component option defaults) */
4053
4234
  --__op-icon-weight: var(--_op-icon-weight-normal);
4054
4235
  --__op-icon-fill: var(--_op-icon-fill-outlined);
@@ -4076,18 +4257,22 @@ textarea.form-control:not([type='radio'], [type='checkbox']) {
4076
4257
  /* Weight Modifiers */
4077
4258
  &.icon--weight-light {
4078
4259
  --__op-icon-weight: var(--_op-icon-weight-light);
4260
+ --__op-icon-stroke-width: var(--_op-icon-stroke-width-light);
4079
4261
  }
4080
4262
 
4081
4263
  &.icon--weight-normal {
4082
4264
  --__op-icon-weight: var(--_op-icon-weight-normal);
4265
+ --__op-icon-stroke-width: var(--_op-icon-stroke-width-normal);
4083
4266
  }
4084
4267
 
4085
4268
  &.icon--weight-semi-bold {
4086
4269
  --__op-icon-weight: var(--_op-icon-weight-semi-bold);
4270
+ --__op-icon-stroke-width: var(--_op-icon-stroke-width-semi-bold);
4087
4271
  }
4088
4272
 
4089
4273
  &.icon--weight-bold {
4090
4274
  --__op-icon-weight: var(--_op-icon-weight-bold);
4275
+ --__op-icon-stroke-width: var(--_op-icon-stroke-width-bold);
4091
4276
  }
4092
4277
 
4093
4278
  /* Emphasis */
@@ -4123,7 +4308,27 @@ textarea.form-control:not([type='radio'], [type='checkbox']) {
4123
4308
  --__op-icon-font-size: var(--_op-icon-font-size-x-large);
4124
4309
  --__op-icon-optical-size: var(--_op-icon-optical-size-x-large);
4125
4310
  }
4311
+
4312
+ /* SVG Modifier: an inline SVG instead of a font glyph, e.g. `icon icon--svg icon--large` */
4313
+ &.icon--svg {
4314
+ svg {
4315
+ display: block;
4316
+ block-size: 100%;
4317
+ inline-size: 100%;
4318
+ }
4319
+
4320
+ /* A rule on the <svg> root cannot beat a stroke-width attribute on a child, so target the attribute.
4321
+ With no weight modifier the set keeps the widths it was drawn with. */
4322
+ &:is(.icon--weight-light, .icon--weight-normal, .icon--weight-semi-bold, .icon--weight-bold) svg [stroke-width] {
4323
+ stroke-width: var(--__op-icon-stroke-width);
4324
+ }
4325
+
4326
+ &.icon--low-emphasis {
4327
+ opacity: var(--_op-icon-svg-opacity-low-emphasis);
4328
+ }
4329
+ }
4126
4330
  }
4331
+
4127
4332
  /* Material Icons class provided by the Google Fonts CDN */
4128
4333
  .material-symbols-outlined {
4129
4334
  font-variation-settings:
@@ -4133,6 +4338,7 @@ textarea.form-control:not([type='radio'], [type='checkbox']) {
4133
4338
  'opsz' var(--__op-icon-optical-size);
4134
4339
  font-weight: unset;
4135
4340
  }
4341
+
4136
4342
  /* Custom SVG Icons app specific */
4137
4343
  .custom-icons {
4138
4344
  svg {
@@ -4182,6 +4388,7 @@ textarea.form-control:not([type='radio'], [type='checkbox']) {
4182
4388
  }
4183
4389
  }
4184
4390
  }
4391
+
4185
4392
  .modal {
4186
4393
  /* Public API (customizable component options) */
4187
4394
  --_op-modal-width: calc(141 * var(--op-size-unit)); /* 564px */
@@ -4227,6 +4434,7 @@ textarea.form-control:not([type='radio'], [type='checkbox']) {
4227
4434
  gap: var(--op-space-small);
4228
4435
  }
4229
4436
  }
4437
+
4230
4438
  dialog.modal {
4231
4439
  padding: 0;
4232
4440
  border: none;
@@ -4259,6 +4467,7 @@ dialog.modal {
4259
4467
  }
4260
4468
  }
4261
4469
  }
4470
+
4262
4471
  @starting-style {
4263
4472
  dialog.modal[open] {
4264
4473
  transform: scale(0.7);
@@ -4766,6 +4975,7 @@ dialog.modal {
4766
4975
  --__op-spinner-track-width: var(--_op-spinner-track-width-large);
4767
4976
  }
4768
4977
  }
4978
+
4769
4979
  @keyframes spinner {
4770
4980
  to {
4771
4981
  transform: rotate(360deg);
@@ -4882,6 +5092,7 @@ dialog.modal {
4882
5092
  display: flex;
4883
5093
  align-items: center;
4884
5094
  }
5095
+
4885
5096
  .tab {
4886
5097
  /* Public API */
4887
5098
  --_op-tab-font-small: var(--op-font-x-small);
@@ -5314,6 +5525,7 @@ dialog.modal {
5314
5525
  }
5315
5526
  }
5316
5527
  /* Inspired by https://blog.logrocket.com/creating-beautiful-tooltips-with-only-css/ */
5528
+
5317
5529
  [data-tooltip-text] {
5318
5530
  /* Public API (customizable component options) */
5319
5531
  --_op-tooltip-max-width: calc(50 * var(--op-size-unit)); /* 200px */