@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.
@@ -8,6 +8,7 @@
8
8
  *::after {
9
9
  box-sizing: border-box;
10
10
  }
11
+
11
12
  /* Remove default margin */
12
13
  body,
13
14
  h1,
@@ -21,31 +22,37 @@ dl,
21
22
  dd {
22
23
  margin: 0;
23
24
  }
25
+
24
26
  /* Remove list styles on ul, ol elements with a list role, which suggests default styling will be removed */
25
27
  ul[role="list"],
26
28
  ol[role="list"] {
27
29
  list-style: none;
28
30
  }
31
+
29
32
  /* Set core root defaults */
30
33
  html:focus-within {
31
34
  scroll-behavior: smooth;
32
35
  }
36
+
33
37
  /* Set core body defaults */
34
38
  body {
35
39
  min-height: 100vh;
36
40
  text-rendering: optimizeSpeed;
37
41
  line-height: 1.5;
38
42
  }
43
+
39
44
  /* A elements that don't have a class get default styles */
40
45
  a:not([class]) {
41
46
  text-decoration-skip-ink: auto;
42
47
  }
48
+
43
49
  /* Make images easier to work with */
44
50
  img,
45
51
  picture {
46
52
  max-width: 100%;
47
53
  display: block;
48
54
  }
55
+
49
56
  /* Inherit fonts for inputs and buttons */
50
57
  input,
51
58
  button,
@@ -53,6 +60,7 @@ textarea,
53
60
  select {
54
61
  font: inherit;
55
62
  }
63
+
56
64
  /* Remove all animations and transitions for people that prefer not to see them */
57
65
  @media (prefers-reduced-motion: reduce) {
58
66
  html:focus-within {
@@ -67,6 +75,7 @@ select {
67
75
  scroll-behavior: auto !important;
68
76
  }
69
77
  }
78
+
70
79
  /* Fonts */
71
80
  /*
72
81
  Noto Sans supports:
@@ -74,22 +83,26 @@ Noto Sans supports:
74
83
  font-stretch: {anything between 62.5% and 100%}
75
84
  font-style: {normal or italic}
76
85
  */
86
+
77
87
  /*
78
88
  Noto Serif supports:
79
89
  font-weight: {anything between 100 and 900}
80
90
  font-stretch: {anything between 62.5% and 100%}
81
91
  font-style: {normal or italic}
82
92
  */
93
+
83
94
  /* Noto Sans and Noto Serif */
84
95
  /*
85
96
  See all icons at: https://tabler.io/icons
86
97
  See Changelog at: https://tabler.io/changelog
87
98
  Current version: 3.44.0
88
99
  */
100
+
89
101
  /* Tabler Icons */
90
102
  .ti {
91
103
  font-weight: unset;
92
104
  }
105
+
93
106
  /* Tokens */
94
107
  :root {
95
108
  /* Color HSLs
@@ -410,6 +423,7 @@ Noto Sans supports:
410
423
  var(--op-input-inner-focus) var(--op-color-alerts-notice-plus-two),
411
424
  var(--op-input-outer-focus) var(--op-color-alerts-notice-plus-five);
412
425
  }
426
+
413
427
  /* Animations */
414
428
  @keyframes rm-slide-in-out-flash {
415
429
  /*
@@ -1889,10 +1903,12 @@ Noto Sans supports:
1889
1903
  --op-color-on-background: var(--op-color-neutral-on-plus-eight);
1890
1904
  --op-color-on-background-alt: var(--op-color-neutral-on-plus-eight-alt);
1891
1905
  }
1906
+
1892
1907
  /* Force Light Mode */
1893
1908
  :root[data-theme-mode='light'] {
1894
1909
  color-scheme: only light;
1895
1910
  }
1911
+
1896
1912
  /* Force Dark Mode */
1897
1913
  :root[data-theme-mode='dark'] {
1898
1914
  color-scheme: only dark;
@@ -1912,6 +1928,7 @@ Noto Sans supports:
1912
1928
  */
1913
1929
  --op-encoded-images-dropdown-arrow: url('data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iOSIgdmlld0JveD0iMCAwIDEyIDkiIGZpbGw9IiNmZmYiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxwYXRoIGQ9Ik02IDguMzc1MDFMMCAyLjM3NTAxTDEuNCAwLjk3NTAwNkw2IDUuNTc1MDFMMTAuNiAwLjk3NTAwNkwxMiAyLjM3NTAxTDYgOC4zNzUwMVoiIGZpbGw9IiNmZmYiLz4KPC9zdmc+Cg==');
1914
1930
  }
1931
+
1915
1932
  @media (prefers-color-scheme: dark) {
1916
1933
  :root:not([data-theme-mode='light']) {
1917
1934
  /**
@@ -1930,13 +1947,16 @@ Noto Sans supports:
1930
1947
  --op-encoded-images-dropdown-arrow: url('data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iOSIgdmlld0JveD0iMCAwIDEyIDkiIGZpbGw9IiNmZmYiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxwYXRoIGQ9Ik02IDguMzc1MDFMMCAyLjM3NTAxTDEuNCAwLjk3NTAwNkw2IDUuNTc1MDFMMTAuNiAwLjk3NTAwNkwxMiAyLjM3NTAxTDYgOC4zNzUwMVoiIGZpbGw9IiNmZmYiLz4KPC9zdmc+Cg==');
1931
1948
  }
1932
1949
  }
1950
+
1933
1951
  /* Base styles and utilities */
1934
1952
  /* After a reset, introduce base element styles specific to this system */
1953
+
1935
1954
  html {
1936
1955
  overflow: hidden; /* Needed to prevent flash messages and panels from causing overflow */
1937
1956
  font-family: var(--op-font-family);
1938
1957
  font-size: 62.5%; /* 1rem = 10px */
1939
1958
  }
1959
+
1940
1960
  body {
1941
1961
  overflow: auto;
1942
1962
  background: var(--op-color-background);
@@ -1944,14 +1964,17 @@ body {
1944
1964
  color: var(--op-color-on-background);
1945
1965
  font-size: var(--op-font-medium);
1946
1966
  }
1967
+
1947
1968
  button {
1948
1969
  background: none;
1949
1970
  cursor: pointer;
1950
1971
  }
1972
+
1951
1973
  button,
1952
1974
  input[type='submit'] {
1953
1975
  border: 0;
1954
1976
  }
1977
+
1955
1978
  label {
1956
1979
  display: inline-block;
1957
1980
 
@@ -1959,9 +1982,11 @@ label {
1959
1982
  cursor: pointer;
1960
1983
  }
1961
1984
  }
1985
+
1962
1986
  a {
1963
1987
  color: var(--op-color-primary-original);
1964
1988
  }
1989
+
1965
1990
  blockquote,
1966
1991
  dl,
1967
1992
  dd,
@@ -1975,6 +2000,7 @@ figure,
1975
2000
  pre {
1976
2001
  margin: 0;
1977
2002
  }
2003
+
1978
2004
  h1,
1979
2005
  h2,
1980
2006
  h3,
@@ -1984,28 +2010,36 @@ h6 {
1984
2010
  font-weight: var(--op-font-weight-normal);
1985
2011
  margin-block: 0 var(--op-space-small);
1986
2012
  }
2013
+
1987
2014
  h1 {
1988
2015
  font-size: var(--op-font-3x-large);
1989
2016
  }
2017
+
1990
2018
  h2 {
1991
2019
  font-size: var(--op-font-2x-large);
1992
2020
  }
2021
+
1993
2022
  h3 {
1994
2023
  font-size: var(--op-font-large);
1995
2024
  }
2025
+
1996
2026
  h4 {
1997
2027
  font-size: var(--op-font-medium);
1998
2028
  }
2029
+
1999
2030
  h5 {
2000
2031
  font-size: var(--op-font-small);
2001
2032
  }
2033
+
2002
2034
  h6 {
2003
2035
  font-size: var(--op-font-x-small);
2004
2036
  }
2037
+
2005
2038
  p {
2006
2039
  font-size: var(--op-font-medium);
2007
2040
  margin-block-end: var(--op-space-small);
2008
2041
  }
2042
+
2009
2043
  small {
2010
2044
  font-size: var(--op-font-small);
2011
2045
  }
@@ -2015,11 +2049,13 @@ small {
2015
2049
  grid-template-columns: auto 1fr auto;
2016
2050
  inline-size: 100%;
2017
2051
  }
2052
+
2018
2053
  .app-body {
2019
2054
  display: flex;
2020
2055
  overflow: auto;
2021
2056
  flex-direction: column;
2022
2057
  }
2058
+
2023
2059
  .app__header {
2024
2060
  position: sticky;
2025
2061
  z-index: var(--op-z-index-header);
@@ -2027,6 +2063,7 @@ small {
2027
2063
  flex-shrink: 0;
2028
2064
  inset-block-start: 0;
2029
2065
  }
2066
+
2030
2067
  .app__content {
2031
2068
  flex-grow: 1;
2032
2069
  padding: 0 var(--op-space-large);
@@ -2034,12 +2071,14 @@ small {
2034
2071
  inline-size: 100%;
2035
2072
  max-inline-size: var(--op-breakpoint-medium);
2036
2073
  }
2074
+
2037
2075
  .app__content-no-margin {
2038
2076
  flex-grow: 1;
2039
2077
  padding: 0 var(--op-space-large);
2040
2078
  inline-size: 100%;
2041
2079
  overflow-y: auto;
2042
2080
  }
2081
+
2043
2082
  .app__footer {
2044
2083
  position: sticky;
2045
2084
  z-index: var(--op-z-index-footer);
@@ -2047,6 +2086,7 @@ small {
2047
2086
  flex-shrink: 0;
2048
2087
  inset-block-end: 0;
2049
2088
  }
2089
+
2050
2090
  /*
2051
2091
  <html lang='en'>
2052
2092
  <head>...</head>
@@ -2061,6 +2101,7 @@ small {
2061
2101
  </body>
2062
2102
  </html>
2063
2103
  */
2104
+
2064
2105
  :root:has(.op-page) {
2065
2106
  /* Reset existing Optics layout */
2066
2107
  overflow: unset;
@@ -2078,6 +2119,7 @@ small {
2078
2119
  min-block-size: 100%;
2079
2120
  }
2080
2121
  }
2122
+
2081
2123
  .op-page {
2082
2124
  display: grid;
2083
2125
  grid-template-areas: 'sidebar-left main sidebar-right';
@@ -2152,6 +2194,7 @@ small {
2152
2194
  }
2153
2195
  }
2154
2196
  /* Container Properties */
2197
+
2155
2198
  .container {
2156
2199
  inline-size: 100%;
2157
2200
  margin-block: 0;
@@ -2160,304 +2203,408 @@ small {
2160
2203
  padding-block: 0;
2161
2204
  padding-inline: var(--op-space-large);
2162
2205
  }
2206
+
2163
2207
  .container--sm {
2164
2208
  max-inline-size: var(--op-breakpoint-small);
2165
2209
  }
2210
+
2166
2211
  .container--md-padding {
2167
2212
  padding: 0 var(--op-space-medium);
2168
2213
  }
2214
+
2169
2215
  .container--sm-padding {
2170
2216
  padding: 0 var(--op-space-small);
2171
2217
  }
2218
+
2172
2219
  .container--xs {
2173
2220
  max-inline-size: var(--op-breakpoint-x-small);
2174
2221
  }
2222
+
2175
2223
  /* Width Properties */
2224
+
2176
2225
  .full-width {
2177
2226
  inline-size: 100%;
2178
2227
  }
2228
+
2179
2229
  .half-width {
2180
2230
  inline-size: 50%;
2181
2231
  }
2232
+
2182
2233
  .four-fifths-width {
2183
2234
  inline-size: calc(100% * 4 / 5);
2184
2235
  }
2236
+
2185
2237
  .three-fifths-width {
2186
2238
  inline-size: calc(100% * 3 / 5);
2187
2239
  }
2240
+
2188
2241
  .two-fifths-width {
2189
2242
  inline-size: calc(100% * 2 / 5);
2190
2243
  }
2244
+
2191
2245
  .one-fifth-width {
2192
2246
  inline-size: calc(100% * 1 / 5);
2193
2247
  }
2248
+
2194
2249
  .three-quarters-width {
2195
2250
  inline-size: calc(100% * 3 / 4);
2196
2251
  }
2252
+
2197
2253
  .one-quarter-width {
2198
2254
  inline-size: calc(100% * 1 / 4);
2199
2255
  }
2256
+
2200
2257
  .two-thirds-width {
2201
2258
  inline-size: calc(100% * 2 / 3);
2202
2259
  }
2260
+
2203
2261
  .one-third-width {
2204
2262
  inline-size: calc(100% * 1 / 3);
2205
2263
  }
2264
+
2206
2265
  /* Flex Properties */
2266
+
2207
2267
  .flex {
2208
2268
  display: flex;
2209
2269
  }
2270
+
2210
2271
  .flex-col {
2211
2272
  flex-direction: column;
2212
2273
  }
2274
+
2213
2275
  .flex-row {
2214
2276
  flex-direction: row;
2215
2277
  }
2278
+
2216
2279
  .flex-wrap {
2217
2280
  flex-wrap: wrap;
2218
2281
  }
2282
+
2219
2283
  .flex-no-wrap {
2220
2284
  flex-wrap: nowrap;
2221
2285
  }
2286
+
2222
2287
  .flex-grow-1 {
2223
2288
  flex-grow: 1;
2224
2289
  }
2290
+
2225
2291
  /* Gap Properties */
2226
2292
  .gap-none {
2227
2293
  gap: 0;
2228
2294
 
2229
2295
  --op-gap: 0;
2230
2296
  }
2297
+
2231
2298
  .gap-xxs {
2232
2299
  gap: var(--op-space-2x-small);
2233
2300
 
2234
2301
  --op-gap: var(--op-space-2x-small);
2235
2302
  }
2303
+
2236
2304
  .gap-xs {
2237
2305
  gap: var(--op-space-x-small);
2238
2306
 
2239
2307
  --op-gap: var(--op-space-x-small);
2240
2308
  }
2309
+
2241
2310
  .gap-sm {
2242
2311
  gap: var(--op-space-small);
2243
2312
 
2244
2313
  --op-gap: var(--op-space-small);
2245
2314
  }
2315
+
2246
2316
  .gap-md {
2247
2317
  gap: var(--op-space-medium);
2248
2318
 
2249
2319
  --op-gap: var(--op-space-medium);
2250
2320
  }
2321
+
2251
2322
  .gap-lg {
2252
2323
  gap: var(--op-space-large);
2253
2324
 
2254
2325
  --op-gap: var(--op-space-large);
2255
2326
  }
2327
+
2256
2328
  .gap-xl {
2257
2329
  gap: var(--op-space-x-large);
2258
2330
 
2259
2331
  --op-gap: var(--op-space-x-large);
2260
2332
  }
2333
+
2261
2334
  /* Justify Content */
2335
+
2262
2336
  .justify-start {
2263
2337
  justify-content: flex-start;
2264
2338
  }
2339
+
2265
2340
  .justify-center {
2266
2341
  justify-content: center;
2267
2342
  }
2343
+
2268
2344
  .justify-end {
2269
2345
  justify-content: flex-end;
2270
2346
  }
2347
+
2271
2348
  .justify-between {
2272
2349
  justify-content: space-between;
2273
2350
  }
2351
+
2274
2352
  .justify-around {
2275
2353
  justify-content: space-around;
2276
2354
  }
2355
+
2277
2356
  /* Align Items */
2357
+
2278
2358
  .items-stretch {
2279
2359
  align-items: stretch;
2280
2360
  }
2361
+
2281
2362
  .items-start {
2282
2363
  align-items: flex-start;
2283
2364
  }
2365
+
2284
2366
  .items-center {
2285
2367
  align-items: center;
2286
2368
  }
2369
+
2287
2370
  .items-end {
2288
2371
  align-items: flex-end;
2289
2372
  }
2373
+
2290
2374
  .items-baseline {
2291
2375
  align-items: baseline;
2292
2376
  }
2377
+
2293
2378
  /* Align Self */
2379
+
2294
2380
  .self-auto {
2295
2381
  align-self: auto;
2296
2382
  }
2383
+
2297
2384
  .self-start {
2298
2385
  align-self: flex-start;
2299
2386
  }
2387
+
2300
2388
  .self-center {
2301
2389
  align-self: center;
2302
2390
  }
2391
+
2303
2392
  .self-end {
2304
2393
  align-self: flex-end;
2305
2394
  }
2395
+
2306
2396
  .self-stretch {
2307
2397
  align-self: stretch;
2308
2398
  }
2399
+
2309
2400
  .self-baseline {
2310
2401
  align-self: baseline;
2311
2402
  }
2403
+
2312
2404
  /* Text Alignment */
2405
+
2313
2406
  .text-left {
2314
2407
  text-align: start;
2315
2408
  }
2409
+
2316
2410
  .text-center {
2317
2411
  text-align: center;
2318
2412
  }
2413
+
2319
2414
  .text-right {
2320
2415
  text-align: end;
2321
2416
  }
2417
+
2322
2418
  .text-justify {
2323
2419
  text-align: justify;
2324
2420
  }
2421
+
2325
2422
  /* Box Margin */
2423
+
2326
2424
  .margin-xl {
2327
2425
  margin: var(--op-space-x-large);
2328
2426
  }
2427
+
2329
2428
  .margin-lg {
2330
2429
  margin: var(--op-space-large);
2331
2430
  }
2431
+
2332
2432
  .margin-md {
2333
2433
  margin: var(--op-space-medium);
2334
2434
  }
2435
+
2335
2436
  .margin-sm {
2336
2437
  margin: var(--op-space-small);
2337
2438
  }
2439
+
2338
2440
  .margin-xs {
2339
2441
  margin: var(--op-space-x-small);
2340
2442
  }
2443
+
2341
2444
  .margin-none {
2342
2445
  margin: 0;
2343
2446
  }
2447
+
2344
2448
  .margin-auto {
2345
2449
  margin: auto;
2346
2450
  }
2451
+
2347
2452
  /* Vertical Margin */
2453
+
2348
2454
  .margin-y-xl {
2349
2455
  margin-block: var(--op-space-x-large);
2350
2456
  }
2457
+
2351
2458
  .margin-y-lg {
2352
2459
  margin-block: var(--op-space-large);
2353
2460
  }
2461
+
2354
2462
  .margin-y-md {
2355
2463
  margin-block: var(--op-space-medium);
2356
2464
  }
2465
+
2357
2466
  .margin-y-sm {
2358
2467
  margin-block: var(--op-space-small);
2359
2468
  }
2469
+
2360
2470
  .margin-y-xs {
2361
2471
  margin-block: var(--op-space-x-small);
2362
2472
  }
2473
+
2363
2474
  .margin-y-none {
2364
2475
  margin-block: 0;
2365
2476
  }
2477
+
2366
2478
  /* Horizontal Margin */
2479
+
2367
2480
  .margin-x-xl {
2368
2481
  margin-inline: var(--op-space-x-large);
2369
2482
  }
2483
+
2370
2484
  .margin-x-lg {
2371
2485
  margin-inline: var(--op-space-large);
2372
2486
  }
2487
+
2373
2488
  .margin-x-md {
2374
2489
  margin-inline: var(--op-space-medium);
2375
2490
  }
2491
+
2376
2492
  .margin-x-sm {
2377
2493
  margin-inline: var(--op-space-small);
2378
2494
  }
2495
+
2379
2496
  .margin-x-xs {
2380
2497
  margin-inline: var(--op-space-x-small);
2381
2498
  }
2499
+
2382
2500
  .margin-x-none {
2383
2501
  margin-inline: 0;
2384
2502
  }
2503
+
2385
2504
  /* Top Margin */
2505
+
2386
2506
  .margin-top-xl {
2387
2507
  margin-block-start: var(--op-space-x-large);
2388
2508
  }
2509
+
2389
2510
  .margin-top-lg {
2390
2511
  margin-block-start: var(--op-space-large);
2391
2512
  }
2513
+
2392
2514
  .margin-top-md {
2393
2515
  margin-block-start: var(--op-space-medium);
2394
2516
  }
2517
+
2395
2518
  .margin-top-sm {
2396
2519
  margin-block-start: var(--op-space-small);
2397
2520
  }
2521
+
2398
2522
  .margin-top-xs {
2399
2523
  margin-block-start: var(--op-space-x-small);
2400
2524
  }
2525
+
2401
2526
  .margin-top-none {
2402
2527
  margin-block-start: 0;
2403
2528
  }
2529
+
2404
2530
  /* Bottom Margin */
2531
+
2405
2532
  .margin-bottom-xl {
2406
2533
  margin-block-end: var(--op-space-x-large);
2407
2534
  }
2535
+
2408
2536
  .margin-bottom-lg {
2409
2537
  margin-block-end: var(--op-space-large);
2410
2538
  }
2539
+
2411
2540
  .margin-bottom-md {
2412
2541
  margin-block-end: var(--op-space-medium);
2413
2542
  }
2543
+
2414
2544
  .margin-bottom-sm {
2415
2545
  margin-block-end: var(--op-space-small);
2416
2546
  }
2547
+
2417
2548
  .margin-bottom-xs {
2418
2549
  margin-block-end: var(--op-space-x-small);
2419
2550
  }
2551
+
2420
2552
  .margin-bottom-none {
2421
2553
  margin-block-end: 0;
2422
2554
  }
2555
+
2423
2556
  /* Right Margin */
2557
+
2424
2558
  .margin-right-xl {
2425
2559
  margin-inline-end: var(--op-space-x-large);
2426
2560
  }
2561
+
2427
2562
  .margin-right-lg {
2428
2563
  margin-inline-end: var(--op-space-large);
2429
2564
  }
2565
+
2430
2566
  .margin-right-md {
2431
2567
  margin-inline-end: var(--op-space-medium);
2432
2568
  }
2569
+
2433
2570
  .margin-right-sm {
2434
2571
  margin-inline-end: var(--op-space-small);
2435
2572
  }
2573
+
2436
2574
  .margin-right-xs {
2437
2575
  margin-inline-end: var(--op-space-x-small);
2438
2576
  }
2577
+
2439
2578
  .margin-right-none {
2440
2579
  margin-inline-start: 0;
2441
2580
  }
2581
+
2442
2582
  /* Left Margin */
2583
+
2443
2584
  .margin-left-xl {
2444
2585
  margin-inline-start: var(--op-space-x-large);
2445
2586
  }
2587
+
2446
2588
  .margin-left-lg {
2447
2589
  margin-inline-start: var(--op-space-large);
2448
2590
  }
2591
+
2449
2592
  .margin-left-md {
2450
2593
  margin-inline-start: var(--op-space-medium);
2451
2594
  }
2595
+
2452
2596
  .margin-left-sm {
2453
2597
  margin-inline-start: var(--op-space-small);
2454
2598
  }
2599
+
2455
2600
  .margin-left-xs {
2456
2601
  margin-inline-start: var(--op-space-x-small);
2457
2602
  }
2603
+
2458
2604
  .margin-left-none {
2459
2605
  margin-inline-start: 0;
2460
2606
  }
2607
+
2461
2608
  /*
2462
2609
  Accessibility
2463
2610
  Use the following class to hide accessibility text that is needed for screen readers but needs to be hidden from regular users.
@@ -2471,7 +2618,9 @@ small {
2471
2618
  clip: rect(1px, 1px, 1px, 1px);
2472
2619
  inline-size: 1px;
2473
2620
  }
2621
+
2474
2622
  /* Advanced Layout Utilities */
2623
+
2475
2624
  /* Equivalent to .flex.flex-col.gap-md */
2476
2625
  .op-stack {
2477
2626
  display: flex;
@@ -2484,6 +2633,7 @@ small {
2484
2633
  gap: var(--op-space-medium);
2485
2634
  }
2486
2635
  }
2636
+
2487
2637
  /* Equivalent to .flex.flex-wrap.items-center.gap-md */
2488
2638
  .op-cluster {
2489
2639
  display: flex;
@@ -2497,6 +2647,7 @@ small {
2497
2647
  gap: var(--op-space-medium);
2498
2648
  }
2499
2649
  }
2650
+
2500
2651
  /* Equivalent to .flex.flex-wrap.items-center.justify-between.gap-md */
2501
2652
  .op-split {
2502
2653
  display: flex;
@@ -2511,6 +2662,7 @@ small {
2511
2662
  gap: var(--op-space-medium);
2512
2663
  }
2513
2664
  }
2665
+
2514
2666
  /*
2515
2667
  side by side layout with a small area and a large area
2516
2668
  similar to .flex with a .flex-grow-1 within it, but with a more semantic name and wrap handling.
@@ -2544,6 +2696,7 @@ small {
2544
2696
  flex-grow: 999;
2545
2697
  }
2546
2698
  }
2699
+
2547
2700
  /* Grid Layout */
2548
2701
  .op-grid {
2549
2702
  --_op-grid-min-column-size: var(--op-space-4x-large);
@@ -2582,12 +2735,14 @@ small {
2582
2735
  --_op-grid-max-column-size: calc(100% / 7);
2583
2736
  }
2584
2737
  }
2738
+
2585
2739
  /* Frame */
2586
2740
  @property --_op-frame-inline-size {
2587
2741
  inherits: true;
2588
2742
  initial-value: 100%;
2589
2743
  syntax: '<length> | <percentage>';
2590
2744
  }
2745
+
2591
2746
  .op-frame {
2592
2747
  display: flex;
2593
2748
  overflow: hidden;
@@ -2639,6 +2794,7 @@ small {
2639
2794
  aspect-ratio: 2 / 3;
2640
2795
  }
2641
2796
  }
2797
+
2642
2798
  /* Components */
2643
2799
  .accordion {
2644
2800
  /* Public API (customizable component options) */
@@ -3397,6 +3553,7 @@ small {
3397
3553
  }
3398
3554
  }
3399
3555
  }
3556
+
3400
3557
  .btn-group-toolbar {
3401
3558
  display: flex;
3402
3559
  flex-wrap: wrap;
@@ -3510,6 +3667,7 @@ small {
3510
3667
  }
3511
3668
  }
3512
3669
  }
3670
+
3513
3671
  /* stylelint-disable no-descending-specificity */
3514
3672
  .confirm-dialog {
3515
3673
  /* Public API (customizable component options) */
@@ -3697,6 +3855,7 @@ small {
3697
3855
  /* stylelint-enable selector-no-vendor-prefix */
3698
3856
  }
3699
3857
  }
3858
+
3700
3859
  /* Radio or Checkbox Form Control */
3701
3860
  .form-control:is([type='radio'], [type='checkbox']) {
3702
3861
  /* Public API (customizable component options) */
@@ -3715,6 +3874,7 @@ small {
3715
3874
  align-self: center;
3716
3875
  }
3717
3876
  }
3877
+
3718
3878
  /* Any Form Control that is not a radio or checkbox */
3719
3879
  .form-control:not([type='radio'], [type='checkbox']) {
3720
3880
  /* Public API (customizable component options) */
@@ -3777,6 +3937,7 @@ small {
3777
3937
  }
3778
3938
  }
3779
3939
  }
3940
+
3780
3941
  /* Color Form Control */
3781
3942
  .form-control[type='color'] {
3782
3943
  padding: var(--op-space-2x-small);
@@ -3791,6 +3952,7 @@ small {
3791
3952
  border-radius: var(--op-radius-medium);
3792
3953
  }
3793
3954
  }
3955
+
3794
3956
  /* File Form Control */
3795
3957
  .form-control[type='file'] {
3796
3958
  padding-block: 0;
@@ -3826,6 +3988,7 @@ small {
3826
3988
  --__op-btn-height: calc(var(--__op-btn-base-height) - var(--op-space-x-small));
3827
3989
  }
3828
3990
  }
3991
+
3829
3992
  select.form-control:not([multiple], [type='radio'], [type='checkbox']) {
3830
3993
  appearance: none;
3831
3994
  background-image: var(--op-encoded-images-dropdown-arrow);
@@ -3837,14 +4000,17 @@ select.form-control:not([multiple], [type='radio'], [type='checkbox']) {
3837
4000
  cursor: pointer;
3838
4001
  padding-inline-end: var(--op-space-3x-large);
3839
4002
  }
4003
+
3840
4004
  select.form-control[multiple] {
3841
4005
  min-block-size: calc(2 * var(--__op-form-control-height));
3842
4006
  }
4007
+
3843
4008
  textarea.form-control:not([type='radio'], [type='checkbox']) {
3844
4009
  block-size: calc(2 * var(--__op-form-control-height));
3845
4010
  max-inline-size: 100%;
3846
4011
  min-block-size: var(--__op-form-control-height);
3847
4012
  }
4013
+
3848
4014
  .form-label {
3849
4015
  color: var(--op-color-on-background);
3850
4016
  font-size: var(--op-font-x-small);
@@ -3852,16 +4018,19 @@ textarea.form-control:not([type='radio'], [type='checkbox']) {
3852
4018
  letter-spacing: var(--op-letter-spacing-label);
3853
4019
  line-height: var(--op-line-height-base);
3854
4020
  }
4021
+
3855
4022
  .form-error {
3856
4023
  color: var(--op-color-alerts-danger-base);
3857
4024
  font-size: var(--op-font-x-small);
3858
4025
  inline-size: fit-content;
3859
4026
  }
4027
+
3860
4028
  .form-hint {
3861
4029
  display: block;
3862
4030
  font-size: var(--op-font-small);
3863
4031
  font-style: italic;
3864
4032
  }
4033
+
3865
4034
  .form-error-summary {
3866
4035
  padding: var(--op-space-large);
3867
4036
  border-radius: var(--op-radius-large);
@@ -3878,6 +4047,7 @@ textarea.form-control:not([type='radio'], [type='checkbox']) {
3878
4047
  margin-block-end: 0;
3879
4048
  }
3880
4049
  }
4050
+
3881
4051
  .form-group {
3882
4052
  display: grid;
3883
4053
  align-content: baseline;
@@ -3908,6 +4078,7 @@ textarea.form-control:not([type='radio'], [type='checkbox']) {
3908
4078
  }
3909
4079
  }
3910
4080
  }
4081
+
3911
4082
  .form-group--inline {
3912
4083
  align-items: center;
3913
4084
 
@@ -3929,6 +4100,7 @@ textarea.form-control:not([type='radio'], [type='checkbox']) {
3929
4100
  }
3930
4101
  /* stylelint-enable no-descending-specificity */
3931
4102
  }
4103
+
3932
4104
  .form-group--error {
3933
4105
  /* stylelint-disable no-descending-specificity */
3934
4106
  .form-control {
@@ -4018,6 +4190,13 @@ textarea.form-control:not([type='radio'], [type='checkbox']) {
4018
4190
  --_op-icon-optical-size-large: 40;
4019
4191
  --_op-icon-optical-size-x-large: 48;
4020
4192
 
4193
+ /* SVG (.icon--svg) */
4194
+ --_op-icon-stroke-width-light: 1;
4195
+ --_op-icon-stroke-width-normal: 1.5;
4196
+ --_op-icon-stroke-width-semi-bold: 2;
4197
+ --_op-icon-stroke-width-bold: 2.5;
4198
+ --_op-icon-svg-opacity-low-emphasis: 0.6;
4199
+
4021
4200
  /* Private API (component option defaults) */
4022
4201
  --__op-icon-weight: var(--_op-icon-weight-normal);
4023
4202
  --__op-icon-fill: var(--_op-icon-fill-outlined);
@@ -4045,18 +4224,22 @@ textarea.form-control:not([type='radio'], [type='checkbox']) {
4045
4224
  /* Weight Modifiers */
4046
4225
  &.icon--weight-light {
4047
4226
  --__op-icon-weight: var(--_op-icon-weight-light);
4227
+ --__op-icon-stroke-width: var(--_op-icon-stroke-width-light);
4048
4228
  }
4049
4229
 
4050
4230
  &.icon--weight-normal {
4051
4231
  --__op-icon-weight: var(--_op-icon-weight-normal);
4232
+ --__op-icon-stroke-width: var(--_op-icon-stroke-width-normal);
4052
4233
  }
4053
4234
 
4054
4235
  &.icon--weight-semi-bold {
4055
4236
  --__op-icon-weight: var(--_op-icon-weight-semi-bold);
4237
+ --__op-icon-stroke-width: var(--_op-icon-stroke-width-semi-bold);
4056
4238
  }
4057
4239
 
4058
4240
  &.icon--weight-bold {
4059
4241
  --__op-icon-weight: var(--_op-icon-weight-bold);
4242
+ --__op-icon-stroke-width: var(--_op-icon-stroke-width-bold);
4060
4243
  }
4061
4244
 
4062
4245
  /* Emphasis */
@@ -4092,7 +4275,27 @@ textarea.form-control:not([type='radio'], [type='checkbox']) {
4092
4275
  --__op-icon-font-size: var(--_op-icon-font-size-x-large);
4093
4276
  --__op-icon-optical-size: var(--_op-icon-optical-size-x-large);
4094
4277
  }
4278
+
4279
+ /* SVG Modifier: an inline SVG instead of a font glyph, e.g. `icon icon--svg icon--large` */
4280
+ &.icon--svg {
4281
+ svg {
4282
+ display: block;
4283
+ block-size: 100%;
4284
+ inline-size: 100%;
4285
+ }
4286
+
4287
+ /* A rule on the <svg> root cannot beat a stroke-width attribute on a child, so target the attribute.
4288
+ With no weight modifier the set keeps the widths it was drawn with. */
4289
+ &:is(.icon--weight-light, .icon--weight-normal, .icon--weight-semi-bold, .icon--weight-bold) svg [stroke-width] {
4290
+ stroke-width: var(--__op-icon-stroke-width);
4291
+ }
4292
+
4293
+ &.icon--low-emphasis {
4294
+ opacity: var(--_op-icon-svg-opacity-low-emphasis);
4295
+ }
4296
+ }
4095
4297
  }
4298
+
4096
4299
  /* Material Icons class provided by the Google Fonts CDN */
4097
4300
  .material-symbols-outlined {
4098
4301
  font-variation-settings:
@@ -4102,6 +4305,7 @@ textarea.form-control:not([type='radio'], [type='checkbox']) {
4102
4305
  'opsz' var(--__op-icon-optical-size);
4103
4306
  font-weight: unset;
4104
4307
  }
4308
+
4105
4309
  /* Custom SVG Icons app specific */
4106
4310
  .custom-icons {
4107
4311
  svg {
@@ -4151,6 +4355,7 @@ textarea.form-control:not([type='radio'], [type='checkbox']) {
4151
4355
  }
4152
4356
  }
4153
4357
  }
4358
+
4154
4359
  .modal {
4155
4360
  /* Public API (customizable component options) */
4156
4361
  --_op-modal-width: calc(141 * var(--op-size-unit)); /* 564px */
@@ -4196,6 +4401,7 @@ textarea.form-control:not([type='radio'], [type='checkbox']) {
4196
4401
  gap: var(--op-space-small);
4197
4402
  }
4198
4403
  }
4404
+
4199
4405
  dialog.modal {
4200
4406
  padding: 0;
4201
4407
  border: none;
@@ -4228,6 +4434,7 @@ dialog.modal {
4228
4434
  }
4229
4435
  }
4230
4436
  }
4437
+
4231
4438
  @starting-style {
4232
4439
  dialog.modal[open] {
4233
4440
  transform: scale(0.7);
@@ -4735,6 +4942,7 @@ dialog.modal {
4735
4942
  --__op-spinner-track-width: var(--_op-spinner-track-width-large);
4736
4943
  }
4737
4944
  }
4945
+
4738
4946
  @keyframes spinner {
4739
4947
  to {
4740
4948
  transform: rotate(360deg);
@@ -4851,6 +5059,7 @@ dialog.modal {
4851
5059
  display: flex;
4852
5060
  align-items: center;
4853
5061
  }
5062
+
4854
5063
  .tab {
4855
5064
  /* Public API */
4856
5065
  --_op-tab-font-small: var(--op-font-x-small);
@@ -5283,6 +5492,7 @@ dialog.modal {
5283
5492
  }
5284
5493
  }
5285
5494
  /* Inspired by https://blog.logrocket.com/creating-beautiful-tooltips-with-only-css/ */
5495
+
5286
5496
  [data-tooltip-text] {
5287
5497
  /* Public API (customizable component options) */
5288
5498
  --_op-tooltip-max-width: calc(50 * var(--op-size-unit)); /* 200px */