@livx.cc/bare-v3 0.1.0-alpha.63 → 0.1.0-alpha.64
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/dist/bare.css +247 -3
- package/dist/bare.min.css +1 -1
- package/dist/manifest.json +24 -12
- package/dist/references/button.md +1 -1
- package/dist/references/conversation.md +2 -2
- package/dist/references/feedback.md +2 -2
- package/dist/references/foundation.md +1 -1
- package/dist/references/row.md +1 -1
- package/dist/references/surface.md +1 -1
- package/dist/references/type.md +2 -2
- package/package.json +1 -1
package/dist/bare.css
CHANGED
|
@@ -37,7 +37,7 @@
|
|
|
37
37
|
}
|
|
38
38
|
}
|
|
39
39
|
|
|
40
|
-
:where(.b3-root) :where(img, svg) {
|
|
40
|
+
:where(.b3-root) :where(img, svg:not([width])) {
|
|
41
41
|
max-inline-size: 100%;
|
|
42
42
|
}
|
|
43
43
|
|
|
@@ -65,7 +65,7 @@
|
|
|
65
65
|
}
|
|
66
66
|
|
|
67
67
|
@layer bare.tokens {
|
|
68
|
-
.b3-root {
|
|
68
|
+
.b3-root:where(:not(.b3-root .b3-root)), .b3-root[data-b3-theme="light"] {
|
|
69
69
|
--b3-color-canvas: #f6f5f0;
|
|
70
70
|
--b3-color-surface: #fff;
|
|
71
71
|
--b3-color-text: #202923;
|
|
@@ -95,7 +95,7 @@
|
|
|
95
95
|
--b3-color-focus: #9ac4ff;
|
|
96
96
|
}
|
|
97
97
|
|
|
98
|
-
.b3-root {
|
|
98
|
+
.b3-root:where(:not(.b3-root .b3-root)), .b3-root[data-b3-theme="light"] {
|
|
99
99
|
--b3-space-1: .25rem;
|
|
100
100
|
--b3-space-2: .5rem;
|
|
101
101
|
--b3-space-3: .75rem;
|
|
@@ -120,6 +120,36 @@
|
|
|
120
120
|
--b3-color-warning: #f2c76c;
|
|
121
121
|
--b3-color-info: #a2cfff;
|
|
122
122
|
}
|
|
123
|
+
|
|
124
|
+
.b3-root[data-b3-density="compact"] {
|
|
125
|
+
--b3-d-control: 2.25rem;
|
|
126
|
+
--b3-d-control-small: 1.875rem;
|
|
127
|
+
--b3-d-pad-block: .4375rem;
|
|
128
|
+
--b3-d-pad-inline: .875rem;
|
|
129
|
+
--b3-d-label: .875rem;
|
|
130
|
+
--b3-d-heading: 1.0625rem;
|
|
131
|
+
--b3-d-avatar: 2.25rem;
|
|
132
|
+
--b3-d-message-pad: .625rem .875rem;
|
|
133
|
+
--b3-d-meta: .75rem;
|
|
134
|
+
--b3-d-gap: 1rem;
|
|
135
|
+
--b3-d-surface-pad: 1rem;
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
@media (pointer: fine) and (width >= 48rem) {
|
|
139
|
+
.b3-root[data-b3-density="auto"] {
|
|
140
|
+
--b3-d-control: 2.25rem;
|
|
141
|
+
--b3-d-control-small: 1.875rem;
|
|
142
|
+
--b3-d-pad-block: .4375rem;
|
|
143
|
+
--b3-d-pad-inline: .875rem;
|
|
144
|
+
--b3-d-label: .875rem;
|
|
145
|
+
--b3-d-heading: 1.0625rem;
|
|
146
|
+
--b3-d-avatar: 2.25rem;
|
|
147
|
+
--b3-d-message-pad: .625rem .875rem;
|
|
148
|
+
--b3-d-meta: .75rem;
|
|
149
|
+
--b3-d-gap: 1rem;
|
|
150
|
+
--b3-d-surface-pad: 1rem;
|
|
151
|
+
}
|
|
152
|
+
}
|
|
123
153
|
}
|
|
124
154
|
|
|
125
155
|
@layer bare.layout {
|
|
@@ -325,6 +355,7 @@
|
|
|
325
355
|
letter-spacing: -.02em;
|
|
326
356
|
overflow-wrap: anywhere;
|
|
327
357
|
font-size: 1.375rem;
|
|
358
|
+
font-weight: 650;
|
|
328
359
|
line-height: 1.25;
|
|
329
360
|
}
|
|
330
361
|
|
|
@@ -444,6 +475,37 @@
|
|
|
444
475
|
gap: var(--b3-space);
|
|
445
476
|
}
|
|
446
477
|
|
|
478
|
+
:is(a, button, [role="button"]).b3-row {
|
|
479
|
+
padding-inline: var(--b3-space-4);
|
|
480
|
+
color: inherit;
|
|
481
|
+
text-align: start;
|
|
482
|
+
cursor: pointer;
|
|
483
|
+
transition: background-color var(--b3-duration);
|
|
484
|
+
text-decoration: none;
|
|
485
|
+
}
|
|
486
|
+
|
|
487
|
+
@media (hover: hover) {
|
|
488
|
+
:is(a, button, [role="button"]).b3-row:hover {
|
|
489
|
+
background: color-mix(in srgb, var(--b3-color-text) 4%, transparent);
|
|
490
|
+
}
|
|
491
|
+
}
|
|
492
|
+
|
|
493
|
+
:is(a, button, [role="button"]).b3-row:focus-visible {
|
|
494
|
+
background: color-mix(in srgb, var(--b3-color-text) 4%, transparent);
|
|
495
|
+
}
|
|
496
|
+
|
|
497
|
+
:is(a, button, [role="button"]).b3-row:active {
|
|
498
|
+
background: color-mix(in srgb, var(--b3-color-text) 8%, transparent);
|
|
499
|
+
}
|
|
500
|
+
|
|
501
|
+
.b3-clamp {
|
|
502
|
+
-webkit-line-clamp: var(--b3-clamp, 2);
|
|
503
|
+
line-clamp: var(--b3-clamp, 2);
|
|
504
|
+
-webkit-box-orient: vertical;
|
|
505
|
+
display: -webkit-box;
|
|
506
|
+
overflow: hidden;
|
|
507
|
+
}
|
|
508
|
+
|
|
447
509
|
.b3-badge {
|
|
448
510
|
overflow-wrap: anywhere;
|
|
449
511
|
border: 1px solid var(--b3-color-border);
|
|
@@ -1905,6 +1967,40 @@
|
|
|
1905
1967
|
justify-content: end;
|
|
1906
1968
|
}
|
|
1907
1969
|
|
|
1970
|
+
.b3-conversation {
|
|
1971
|
+
align-content: start;
|
|
1972
|
+
}
|
|
1973
|
+
|
|
1974
|
+
.b3-message-body:has( > :is(div, p, ul, ol, table, pre, blockquote, b3-markdown-stream)) {
|
|
1975
|
+
white-space: normal;
|
|
1976
|
+
}
|
|
1977
|
+
|
|
1978
|
+
.b3-composer {
|
|
1979
|
+
align-items: end;
|
|
1980
|
+
gap: var(--b3-space-2);
|
|
1981
|
+
padding: var(--b3-space-3);
|
|
1982
|
+
border-block-start: 1px solid var(--b3-color-border);
|
|
1983
|
+
background: var(--b3-color-canvas);
|
|
1984
|
+
grid-template-columns: minmax(0, 1fr) auto;
|
|
1985
|
+
display: grid;
|
|
1986
|
+
}
|
|
1987
|
+
|
|
1988
|
+
.b3-composer > .b3-input, .b3-composer > .b3-button {
|
|
1989
|
+
border-radius: var(--b3-radius);
|
|
1990
|
+
min-block-size: var(--b3-d-control, 2.75rem);
|
|
1991
|
+
}
|
|
1992
|
+
|
|
1993
|
+
.b3-composer > .b3-input {
|
|
1994
|
+
resize: none;
|
|
1995
|
+
padding-block: calc((var(--b3-d-control, 2.75rem) - 1.5em - 2px) / 2);
|
|
1996
|
+
line-height: 1.5;
|
|
1997
|
+
}
|
|
1998
|
+
|
|
1999
|
+
.b3-composer > .b3-button {
|
|
2000
|
+
block-size: var(--b3-d-control, 2.75rem);
|
|
2001
|
+
min-inline-size: var(--b3-d-control, 2.75rem);
|
|
2002
|
+
}
|
|
2003
|
+
|
|
1908
2004
|
.b3-mobile-app {
|
|
1909
2005
|
--b3-touch: 44px;
|
|
1910
2006
|
min-block-size: 100svh;
|
|
@@ -2167,6 +2263,154 @@
|
|
|
2167
2263
|
padding-block-end: max(.5rem, env(safe-area-inset-bottom, 0px));
|
|
2168
2264
|
position: static;
|
|
2169
2265
|
}
|
|
2266
|
+
|
|
2267
|
+
:where(.b3-root[data-b3-density]) .b3-button {
|
|
2268
|
+
min-block-size: var(--b3-d-control, 2.75rem);
|
|
2269
|
+
padding: var(--b3-d-pad-block, .625rem) var(--b3-d-pad-inline, 1rem);
|
|
2270
|
+
font-size: var(--b3-d-label, inherit);
|
|
2271
|
+
}
|
|
2272
|
+
|
|
2273
|
+
:where(.b3-root[data-b3-density]) .b3-button[data-b3-size="small"] {
|
|
2274
|
+
min-block-size: var(--b3-d-control-small, auto);
|
|
2275
|
+
padding: calc(var(--b3-d-pad-block, .5rem) - .125rem) calc(var(--b3-d-pad-inline, .75rem) - .25rem);
|
|
2276
|
+
}
|
|
2277
|
+
|
|
2278
|
+
:where(.b3-root[data-b3-density]) .b3-input {
|
|
2279
|
+
min-block-size: var(--b3-d-control, 2.75rem);
|
|
2280
|
+
padding: calc((var(--b3-d-control, 2.75rem) - 1.5em - 2px) / 2) .75rem;
|
|
2281
|
+
line-height: 1.5;
|
|
2282
|
+
}
|
|
2283
|
+
|
|
2284
|
+
:where(.b3-root[data-b3-density]) .b3-nav-link {
|
|
2285
|
+
min-block-size: var(--b3-d-control, 2.75rem);
|
|
2286
|
+
padding: var(--b3-d-pad-block, .625rem) var(--b3-d-pad-inline, .875rem);
|
|
2287
|
+
font-size: var(--b3-d-label, inherit);
|
|
2288
|
+
}
|
|
2289
|
+
|
|
2290
|
+
:where(.b3-root[data-b3-density]) .b3-heading {
|
|
2291
|
+
font-size: var(--b3-d-heading, 1.375rem);
|
|
2292
|
+
}
|
|
2293
|
+
|
|
2294
|
+
:where(.b3-root[data-b3-density]) .b3-avatar {
|
|
2295
|
+
block-size: var(--b3-d-avatar, 2.5rem);
|
|
2296
|
+
inline-size: var(--b3-d-avatar, 2.5rem);
|
|
2297
|
+
}
|
|
2298
|
+
|
|
2299
|
+
:where(.b3-root[data-b3-density]) .b3-conversation {
|
|
2300
|
+
gap: var(--b3-d-gap, 1.5rem);
|
|
2301
|
+
}
|
|
2302
|
+
|
|
2303
|
+
:where(.b3-root[data-b3-density]) .b3-message-body {
|
|
2304
|
+
padding: var(--b3-d-message-pad, .875rem min(1rem, 5%));
|
|
2305
|
+
}
|
|
2306
|
+
|
|
2307
|
+
:where(.b3-root[data-b3-density]) .b3-message-meta {
|
|
2308
|
+
font-size: var(--b3-d-meta, .8125rem);
|
|
2309
|
+
}
|
|
2310
|
+
|
|
2311
|
+
.b3-button[data-b3-emphasis="ghost"] {
|
|
2312
|
+
color: var(--b3-color-muted);
|
|
2313
|
+
background: none;
|
|
2314
|
+
border-color: #0000;
|
|
2315
|
+
}
|
|
2316
|
+
|
|
2317
|
+
.b3-button[data-b3-emphasis="ghost"]:not(:disabled):hover {
|
|
2318
|
+
color: var(--b3-color-text);
|
|
2319
|
+
}
|
|
2320
|
+
|
|
2321
|
+
.b3-button[data-b3-emphasis="ghost"][aria-pressed="true"] {
|
|
2322
|
+
color: var(--b3-color-accent);
|
|
2323
|
+
}
|
|
2324
|
+
|
|
2325
|
+
.b3-button[data-b3-icon] {
|
|
2326
|
+
min-inline-size: var(--b3-d-control, 2.75rem);
|
|
2327
|
+
padding-inline: 0;
|
|
2328
|
+
}
|
|
2329
|
+
|
|
2330
|
+
:where(.b3-root[data-b3-density]) .b3-button[data-b3-icon][data-b3-size="small"] {
|
|
2331
|
+
min-inline-size: var(--b3-d-control-small, 2.25rem);
|
|
2332
|
+
}
|
|
2333
|
+
|
|
2334
|
+
.b3-button:disabled {
|
|
2335
|
+
opacity: 1;
|
|
2336
|
+
background: color-mix(in srgb, var(--b3-color-muted) 14%, var(--b3-color-surface));
|
|
2337
|
+
color: var(--b3-color-muted);
|
|
2338
|
+
border-color: #0000;
|
|
2339
|
+
}
|
|
2340
|
+
|
|
2341
|
+
.b3-button[data-b3-emphasis="ghost"]:disabled {
|
|
2342
|
+
background: none;
|
|
2343
|
+
}
|
|
2344
|
+
|
|
2345
|
+
.b3-truncate {
|
|
2346
|
+
white-space: nowrap;
|
|
2347
|
+
text-overflow: ellipsis;
|
|
2348
|
+
min-inline-size: 0;
|
|
2349
|
+
overflow: hidden;
|
|
2350
|
+
}
|
|
2351
|
+
|
|
2352
|
+
.b3-strong {
|
|
2353
|
+
font-size: inherit;
|
|
2354
|
+
font-weight: 650;
|
|
2355
|
+
}
|
|
2356
|
+
|
|
2357
|
+
.b3-caption {
|
|
2358
|
+
color: var(--b3-color-muted);
|
|
2359
|
+
font-size: .8125rem;
|
|
2360
|
+
line-height: 1.4;
|
|
2361
|
+
}
|
|
2362
|
+
|
|
2363
|
+
.b3-heading[data-b3-size="small"] {
|
|
2364
|
+
font-size: 1.0625rem;
|
|
2365
|
+
line-height: 1.3;
|
|
2366
|
+
}
|
|
2367
|
+
|
|
2368
|
+
:is(a, button).b3-caption {
|
|
2369
|
+
color: var(--b3-color-accent);
|
|
2370
|
+
cursor: pointer;
|
|
2371
|
+
text-underline-offset: .15em;
|
|
2372
|
+
background: none;
|
|
2373
|
+
border: 0;
|
|
2374
|
+
padding: 0;
|
|
2375
|
+
}
|
|
2376
|
+
|
|
2377
|
+
:is(a, button).b3-caption:is(:hover, :focus-visible) {
|
|
2378
|
+
text-decoration: underline;
|
|
2379
|
+
}
|
|
2380
|
+
|
|
2381
|
+
:where(.b3-root[data-b3-density]) .b3-caption {
|
|
2382
|
+
font-size: var(--b3-d-meta, .8125rem);
|
|
2383
|
+
}
|
|
2384
|
+
|
|
2385
|
+
.b3-badge {
|
|
2386
|
+
gap: .25rem;
|
|
2387
|
+
}
|
|
2388
|
+
|
|
2389
|
+
:where(.b3-root[data-b3-density]) .b3-surface {
|
|
2390
|
+
padding: var(--b3-d-surface-pad, clamp(1rem, 3vw, 2rem));
|
|
2391
|
+
}
|
|
2392
|
+
|
|
2393
|
+
.b3-input-group, .b3-input-group > .b3-input-affix, .b3-input-group > .b3-input {
|
|
2394
|
+
background: var(--b3-color-surface);
|
|
2395
|
+
}
|
|
2396
|
+
|
|
2397
|
+
.b3-root[data-b3-theme="dark"] .b3-message[data-b3-side="self"] > .b3-message-body {
|
|
2398
|
+
background: color-mix(in srgb, var(--b3-color-accent) 22%, var(--b3-color-surface));
|
|
2399
|
+
color: var(--b3-color-text);
|
|
2400
|
+
}
|
|
2401
|
+
|
|
2402
|
+
.b3-empty {
|
|
2403
|
+
justify-items: center;
|
|
2404
|
+
gap: var(--b3-space-2);
|
|
2405
|
+
padding: var(--b3-space-12) var(--b3-space-4);
|
|
2406
|
+
text-align: center;
|
|
2407
|
+
color: var(--b3-color-muted);
|
|
2408
|
+
display: grid;
|
|
2409
|
+
}
|
|
2410
|
+
|
|
2411
|
+
.b3-empty > svg {
|
|
2412
|
+
color: var(--b3-color-muted);
|
|
2413
|
+
}
|
|
2170
2414
|
}
|
|
2171
2415
|
|
|
2172
2416
|
@property --b3-reel-fade {
|
package/dist/bare.min.css
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
@layer bare.reset{:where(.b3-root),:where(.b3-root *){box-sizing:border-box}:where(.b3-root){font-family:var(--b3-font-body);background:var(--b3-color-canvas);color:var(--b3-color-text);color-scheme:light;margin:0;font-size:1rem;line-height:1.5}:where(.b3-root>body){margin:0}:where(.b3-root) :where(button,input,select,textarea){font:inherit}:where(.b3-root) :where(h1,h2,h3,h4,h5,h6,p){margin:0}:where(.b3-root) :where(button,a,input,select,textarea,summary,[tabindex]):focus-visible{outline:none;box-shadow:inset 0 0 0 2px}@media (forced-colors:active){:where(.b3-root) :where(button,a,input,select,textarea,summary,[tabindex]):focus-visible{outline-offset:-2px;outline:1px solid highlight}}:where(.b3-root) :where(img,svg){max-inline-size:100%}@media (prefers-reduced-motion:reduce){:where(.b3-root *),:where(.b3-root *):before,:where(.b3-root *):after{transition:none!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}[data-b3-motion=reduce] *,[data-b3-motion=reduce] :before,[data-b3-motion=reduce] :after,[data-b3-motion=reduce] ::backdrop{scroll-behavior:auto!important;transition:none!important;animation:none!important}:where(.b3-root [hidden]):not([hidden=until-found]){display:none!important}:where(.b3-root) :where(input[type=checkbox],input[type=radio],input[type=range]){accent-color:var(--b3-color-accent)}}@layer bare.tokens{.b3-root{--b3-color-canvas:#f6f5f0;--b3-color-surface:#fff;--b3-color-text:#202923;--b3-color-muted:#59655d;--b3-color-border:#d5dbd3;--b3-color-accent:#245c42;--b3-color-on-accent:#fff;--b3-color-danger:#a62c35;--b3-color-focus:#276bdd;--b3-font-body:ui-sans-serif, system-ui, sans-serif;--b3-font-display:var(--b3-font-body);--b3-radius:.75rem;--b3-space:1rem;--b3-content:68rem}.b3-root[data-b3-theme=dark]{color-scheme:dark;--b3-color-canvas:#141c19;--b3-color-surface:#202c26;--b3-color-text:#edf3ec;--b3-color-muted:#a8b9ad;--b3-color-border:#415348;--b3-color-accent:#aadbb8;--b3-color-on-accent:#132b1b;--b3-color-danger:#ffadb1;--b3-color-focus:#9ac4ff}.b3-root{--b3-space-1:.25rem;--b3-space-2:.5rem;--b3-space-3:.75rem;--b3-space-4:1rem;--b3-space-6:1.5rem;--b3-space-8:2rem;--b3-space-12:3rem;--b3-radius-small:.375rem;--b3-radius-large:1.25rem;--b3-shadow:0 8px 32px #14231b14;--b3-shadow-raised:0 16px 56px #14231b24;--b3-color-success:#256443;--b3-color-warning:#805100;--b3-color-info:#275f99;--b3-duration:.16s}.b3-root[data-b3-theme=dark]{--b3-shadow:0 8px 32px #0004;--b3-shadow-raised:0 16px 56px #0007;--b3-color-success:#99d9ab;--b3-color-warning:#f2c76c;--b3-color-info:#a2cfff}}@layer bare.layout{.b3-shell{inline-size:min(100%, var(--b3-content));margin-inline:auto;padding:clamp(1rem,4vw,3rem)}.b3-stack{gap:var(--b3-space);flex-direction:column;min-inline-size:0;display:flex}.b3-stack:where(dialog:not([open])){display:none}.b3-scroll{overscroll-behavior:contain;scrollbar-gutter:stable;flex:auto;min-block-size:0;min-inline-size:0;overflow:auto}dialog.b3-stack>.b3-scroll{min-block-size:min(6rem,30dvh)}.b3-stack:has(>.b3-scroll)>:not(.b3-scroll){flex-shrink:0}.b3-cluster{align-items:center;gap:var(--b3-space);flex-wrap:wrap;min-inline-size:0;display:flex}.b3-cluster>*,.b3-split>*{min-inline-size:0}.b3-inline{vertical-align:middle;align-items:center;gap:.5em;min-inline-size:0;max-inline-size:100%;display:inline-flex}.b3-inline>*{min-inline-size:0}.b3-inline:has(>.b3-badge){flex-wrap:wrap}.b3-inline>.b3-badge{flex-shrink:0}.b3-inline:has(>.b3-badge)>:not(.b3-badge,.b3-icon,svg){flex:1 1 min-content}.b3-grid{grid-template-columns:repeat(auto-fit, minmax(min(100%, var(--b3-grid-min,17rem)), 1fr));gap:var(--b3-space);display:grid}.b3-split{justify-content:space-between;align-items:center;gap:var(--b3-space);flex-wrap:wrap;display:flex}.b3-page{flex-direction:column;min-block-size:100svh;display:flex}.b3-page-body{flex:1;min-inline-size:0}.b3-app-layout{grid-template-columns:minmax(12rem,16rem) minmax(0,1fr);min-block-size:100svh;display:grid}.b3-sidebar{padding:var(--b3-space-6);border-inline-end:1px solid var(--b3-color-border);background:var(--b3-color-surface);min-inline-size:0}.b3-center{padding:var(--b3-space-6);place-items:center;display:grid}.b3-cover{min-block-size:min(42rem,85svh);padding-block:var(--b3-space-12);flex-direction:column;justify-content:center;display:flex}.b3-reel{gap:var(--b3-space);scroll-snap-type:x proximity;padding-block-end:var(--b3-space-2);display:flex;overflow-x:auto}.b3-reel>*{scroll-snap-align:start;flex:0 0 min(85%,20rem)}@media (width<=48rem){.b3-app-layout{grid-template-columns:minmax(0,1fr)}.b3-sidebar{border-inline-end:0;border-block-end:1px solid var(--b3-color-border)}}.b3-reel:has(>.b3-badge){scrollbar-width:none;align-items:center;gap:.5rem;padding-block:.625rem}.b3-reel:has(>.b3-badge)::-webkit-scrollbar{display:none}.b3-reel>.b3-badge{flex:none}.b3-stack>.b3-reel{flex-shrink:0}@supports (animation-timeline:scroll(self inline)){.b3-reel:has(>.b3-badge){mask-image:linear-gradient(to right, #000 calc(100% - var(--b3-reel-fade)), #0000);animation:linear both b3-reel-fade scroll(self inline)}.b3-reel:has(>.b3-badge):dir(rtl){mask-image:linear-gradient(to left, #000 calc(100% - var(--b3-reel-fade)), #0000)}@keyframes b3-reel-fade{90%{--b3-reel-fade:2.5rem}to{--b3-reel-fade:0rem}}}}@layer bare.components{.b3-title{font-family:var(--b3-font-display);letter-spacing:-.04em;overflow-wrap:anywhere;font-size:clamp(2rem,7vw,4rem);line-height:1.05}.b3-heading{font-family:var(--b3-font-display);letter-spacing:-.02em;overflow-wrap:anywhere;font-size:1.375rem;line-height:1.25}.b3-muted{color:var(--b3-color-muted)}.b3-label{letter-spacing:.06em;text-transform:uppercase;font-size:.8125rem;font-weight:650}.b3-surface{background:var(--b3-color-surface);color:var(--b3-color-text);border:1px solid var(--b3-color-border);border-radius:var(--b3-radius);padding:clamp(1rem,3vw,2rem)}.b3-button{border-radius:var(--b3-radius);background:var(--b3-color-accent);min-block-size:2.75rem;color:var(--b3-color-on-accent);cursor:pointer;border:1px solid #0000;justify-content:center;align-items:center;gap:.5rem;padding:.625rem 1rem;font-weight:650;text-decoration:none;display:inline-flex}.b3-button :where(svg){flex-shrink:0;display:block}.b3-button>:where([aria-hidden=true]):has(>svg){flex-shrink:0}.b3-button[data-b3-emphasis=quiet]{color:var(--b3-color-text);border-color:var(--b3-color-border);background:0 0}.b3-button:disabled{opacity:.5;cursor:not-allowed}.b3-field{align-content:start;gap:.375rem;min-inline-size:0;display:grid}.b3-input{border:1px solid var(--b3-color-border);border-radius:var(--b3-radius);background:var(--b3-color-surface);min-block-size:2.75rem;inline-size:100%;min-inline-size:0;color:var(--b3-color-text);padding:.625rem .75rem}.b3-error{color:var(--b3-color-danger);font-size:.875rem}select.b3-input:not([multiple]):not([size]),select.b3-input[size="1"]:not([multiple]){appearance:none;background-image:linear-gradient(45deg,#0000 50%,currentColor 50%),linear-gradient(135deg,currentColor 50%,#0000 50%);background-position:right calc(1rem + 5px) center,right 1rem center;background-repeat:no-repeat;background-size:5px 5px;padding-inline-end:2.5rem}select.b3-input:not([multiple]):not([size]):dir(rtl),select.b3-input[size="1"]:not([multiple]):dir(rtl){background-position:1rem,calc(1rem + 5px)}@media (forced-colors:active){select.b3-input:not([multiple]):not([size]),select.b3-input[size="1"]:not([multiple]){appearance:auto;background-image:none}}:where(ul,ol):has(>.b3-row){margin:0;padding-inline-start:0}.b3-row{border-block-end:1px solid var(--b3-color-border);align-items:center;gap:.75rem;padding-block:1rem;display:flex}.b3-row:where(.b3-stack){align-items:stretch;gap:var(--b3-space)}.b3-badge{overflow-wrap:anywhere;border:1px solid var(--b3-color-border);border-radius:100vmax;align-items:center;inline-size:fit-content;max-inline-size:100%;padding:.125rem .5rem;font-size:.75rem;font-weight:650;display:inline-flex}.b3-progress{block-size:.5rem;inline-size:100%;accent-color:var(--b3-color-accent)}.b3-button{transition:box-shadow var(--b3-duration), border-color var(--b3-duration)}@media (hover:hover){.b3-button:not(:disabled):hover{box-shadow:inset 0 0 0 100vmax #00000012}}.b3-button:not(:disabled):active{box-shadow:inset 0 0 0 100vmax #00000024}.b3-button[data-b3-emphasis=outline]{color:var(--b3-color-accent);background:0 0;border-color:currentColor}.b3-button[data-b3-emphasis=danger]{background:var(--b3-color-danger);color:var(--b3-color-canvas)}.b3-button[data-b3-size=small]{padding:.5rem .75rem;font-size:.875rem}.b3-button[data-b3-size=large]{min-block-size:3.25rem;padding:.875rem 1.5rem}.b3-button[aria-busy=true]{cursor:progress}.b3-icon{vertical-align:-.2em;flex:none;block-size:1.25em;inline-size:1.25em;display:inline-block}[data-b3-confirm][data-b3-armed]{outline:2px solid var(--b3-color-danger)!important;outline-offset:2px!important}.b3-button[data-b3-armed]{background:var(--b3-color-danger);color:var(--b3-color-canvas);border-color:var(--b3-color-danger)}.b3-input:disabled{opacity:.6;cursor:not-allowed}.b3-input[readonly]{background:var(--b3-color-canvas)}.b3-input::placeholder{color:var(--b3-color-muted);opacity:.8}.b3-input-group{border:1px solid var(--b3-color-border);border-radius:var(--b3-radius);background:var(--b3-color-canvas);flex-wrap:wrap;align-items:stretch;min-inline-size:0;display:flex;overflow:clip}.b3-input-group>.b3-input{border:0;border-radius:0;flex:12ch}.b3-input-group:has(>.b3-button){justify-content:end}.b3-input-group:focus-within{outline:none;box-shadow:inset 0 0 0 2px}.b3-input-affix{overflow-wrap:anywhere;min-inline-size:0;max-inline-size:100%;color:var(--b3-color-muted);background:var(--b3-color-canvas);align-items:center;padding-inline:.75rem;display:flex}.b3-choice{cursor:pointer;flex-wrap:wrap;align-items:start;gap:.75rem;padding-block:.5rem;display:flex}.b3-choice>:not(input){overflow-wrap:anywhere;flex:12ch;min-inline-size:0}.b3-choice input{--b3-choice-control:1.125rem;inline-size:var(--b3-choice-control);block-size:var(--b3-choice-control);flex:none;margin:0;margin-block-start:max(0px, calc((1lh - var(--b3-choice-control)) / 2))}.b3-choice>.b3-switch{--b3-choice-control:1.625rem}.b3-switch{appearance:none;background:var(--b3-color-muted);border:2px solid var(--b3-color-muted);cursor:pointer;border-radius:2rem;position:relative;block-size:1.625rem!important;inline-size:2.75rem!important}.b3-switch:before{content:"";background:var(--b3-color-surface);border-radius:50%;block-size:1.125rem;inline-size:1.125rem;position:absolute;inset-block-start:.125rem;inset-inline-start:.125rem}.b3-switch:checked{background:var(--b3-color-accent);border-color:var(--b3-color-accent)}.b3-switch:checked:before{background:var(--b3-color-on-accent);inset-inline-start:calc(100% - 1.25rem)}.b3-switch:disabled{opacity:.5;cursor:not-allowed}.b3-input[type=number]{appearance:textfield}.b3-input[type=number]::-webkit-inner-spin-button,.b3-input[type=number]::-webkit-outer-spin-button{appearance:none;margin:0}.b3-input::-webkit-datetime-edit,.b3-input::-webkit-datetime-edit-fields-wrapper{padding-block:0}.b3-input:is([type=date],[type=time],[type=datetime-local],[type=month],[type=week]){appearance:none;max-inline-size:100%;display:block}.b3-input::-webkit-date-and-time-value{text-align:start;min-block-size:1lh}.b3-input-affix{white-space:nowrap}.b3-card-header,.b3-card-footer{justify-content:space-between;align-items:center;gap:var(--b3-space);flex-wrap:wrap;display:flex}.b3-card-header{margin-block-end:var(--b3-space-4)}.b3-card-footer{border-block-start:1px solid var(--b3-color-border);margin-block-start:var(--b3-space-4);padding-block-start:var(--b3-space-4)}.b3-surface[data-b3-elevation=raised]{box-shadow:var(--b3-shadow)}.b3-divider{border:0;border-block-start:1px solid var(--b3-color-border);inline-size:100%;margin-inline:0;margin-block:var(--b3-space)}.b3-stack>.b3-divider{margin-block:0}.b3-alert,.b3-toast{overflow-wrap:anywhere;min-inline-size:0}.b3-alert>*,.b3-toast>*{min-inline-size:0}.b3-alert pre{max-inline-size:100%;overflow-x:auto}.b3-alert{--b3-status-color:var(--b3-color-info);border:1px solid var(--b3-status-color);border-radius:var(--b3-radius-small);color:var(--b3-color-text);background:color-mix(in srgb, var(--b3-status-color) 8%, var(--b3-color-surface));border-inline-start-width:4px;align-items:start;gap:.75rem;padding:1rem;display:flex}.b3-alert[data-b3-tone=success],.b3-badge[data-b3-tone=success]{--b3-status-color:var(--b3-color-success)}.b3-alert[data-b3-tone=warning],.b3-badge[data-b3-tone=warning]{--b3-status-color:var(--b3-color-warning)}.b3-alert[data-b3-tone=danger],.b3-badge[data-b3-tone=danger]{--b3-status-color:var(--b3-color-danger)}.b3-badge[data-b3-tone]{color:var(--b3-status-color,var(--b3-color-info));background:color-mix(in srgb, currentColor 7%, transparent);border-color:currentColor}.b3-toast-region{z-index:100;pointer-events:none;gap:.75rem;inline-size:min(24rem,100% - 2rem);display:grid;position:fixed;inset-block-end:1rem;inset-inline-end:1rem}.b3-toast{border:1px solid var(--b3-color-border);border-radius:var(--b3-radius);background:var(--b3-color-surface);color:var(--b3-color-text);box-shadow:var(--b3-shadow-raised);pointer-events:auto;flex-wrap:wrap;align-items:start;gap:1rem;padding:1rem;display:flex}.b3-toast>:not(button,.b3-button){flex:12rem}.b3-toast>:is(button,.b3-button){flex:none;max-inline-size:100%}.b3-spinner{vertical-align:-.125em;border:2px solid;border-inline-end-color:#0000;border-radius:50%;flex:none;block-size:1.125em;inline-size:1.125em;animation:.8s linear infinite b3-spin;display:inline-block}@keyframes b3-spin{to{transform:rotate(360deg)}}.b3-skeleton{background:var(--b3-color-border);border-radius:var(--b3-radius-small);min-block-size:1rem;animation:1.8s ease-in-out infinite b3-pulse}@keyframes b3-pulse{50%{opacity:.45}}:is(button,a).b3-badge{min-block-size:auto;color:var(--b3-color-text);cursor:pointer;background:0 0;gap:.25rem;text-decoration:none;position:relative}:is(button,a).b3-badge:after{content:"";position:absolute;inset:-10px 0}:is(button,a).b3-badge[data-b3-tone]{color:var(--b3-status-color,var(--b3-color-info))}:is(button,a).b3-badge:is([aria-pressed=true],[aria-current]:not([aria-current=false])){color:var(--b3-color-on-accent);background:var(--b3-color-accent);border-color:var(--b3-color-accent)}.b3-avatar{background:var(--b3-color-accent);block-size:2.5rem;inline-size:2.5rem;color:var(--b3-color-on-accent);border-radius:50%;flex:none;place-items:center;font-size:.875rem;font-weight:650;display:inline-grid;overflow:hidden}.b3-avatar>img{object-fit:cover;block-size:100%;inline-size:100%}.b3-avatar-stack{padding-inline-start:.5rem;display:flex}.b3-avatar-stack>.b3-avatar{border:2px solid var(--b3-color-surface);margin-inline-start:-.5rem}.b3-kbd{border:1px solid var(--b3-color-border);background:var(--b3-color-surface);color:var(--b3-color-muted);border-block-end-width:2px;border-radius:.25rem;padding:.15rem .35rem;font:.75rem ui-monospace,monospace}.b3-table-wrap{border:1px solid var(--b3-color-border);border-radius:var(--b3-radius);position:relative;overflow-x:auto}.b3-table{border-collapse:collapse;text-align:start;font-variant-numeric:tabular-nums;inline-size:100%}.b3-table th{color:var(--b3-color-muted);background:var(--b3-color-canvas);font-size:.75rem;font-weight:650}.b3-table :is(th,td){border-block-end:1px solid var(--b3-color-border);text-align:start;vertical-align:middle;padding:.875rem 1rem}.b3-table tbody tr:last-child td{border-block-end:0}.b3-table[data-b3-density=compact] :is(th,td){padding:.5rem .75rem}.b3-table tbody tr[aria-selected=true]{background:color-mix(in srgb, var(--b3-color-accent) 10%, var(--b3-color-surface))}.b3-definition{grid-template-columns:minmax(0,1fr) minmax(0,2fr);gap:.75rem 1.5rem;margin:0;display:grid;container:b3-definition/inline-size}.b3-definition dt{overflow-wrap:anywhere;min-inline-size:0;color:var(--b3-color-muted)}.b3-definition dd{overflow-wrap:anywhere;margin:0}@container b3-definition (width<=26rem){.b3-definition>:is(dt,dd){grid-column:1/-1}.b3-definition>dt:not(:first-child){margin-block-start:.75rem}}.b3-stat{grid-template-columns:minmax(0,1fr);gap:.5rem;display:grid}.b3-stat-value{overflow-wrap:anywhere;letter-spacing:-.045em;font-variant-numeric:tabular-nums;font-size:clamp(1.5rem,5vw,3rem);font-weight:650;line-height:1.1}.b3-nav{border-block-end:1px solid var(--b3-color-border);flex-wrap:wrap;align-items:center;gap:.5rem;padding:.75rem;display:flex}.b3-nav[data-b3-orientation=vertical]{border-block-end:0;flex-direction:column;align-items:stretch}.b3-nav-link{border-radius:var(--b3-radius-small);min-block-size:2.75rem;color:var(--b3-color-muted);align-items:center;gap:.5rem;padding:.625rem .875rem;text-decoration:none;display:flex}.b3-nav-link[aria-current=page]{background:color-mix(in srgb, var(--b3-color-accent) 10%, var(--b3-color-surface));color:var(--b3-color-accent);font-weight:650}.b3-nav-link:hover{background:var(--b3-color-surface);color:var(--b3-color-text)}.b3-breadcrumbs{color:var(--b3-color-muted);flex-wrap:wrap;align-items:center;gap:.5rem;margin:0;padding:0;font-size:.875rem;list-style:none;display:flex}.b3-breadcrumbs li+li:before{content:"/";color:var(--b3-color-border);margin-inline-end:.5rem}.b3-tablist{border-block-end:1px solid var(--b3-color-border);gap:.25rem;display:flex;overflow-x:auto}.b3-tab{appearance:none;color:var(--b3-color-muted);font:inherit;white-space:normal;overflow-wrap:anywhere;cursor:pointer;background:0 0;border:0;border-block-end:2px solid #0000;flex-shrink:0;min-block-size:2.75rem;max-inline-size:100%;padding:.75rem min(1rem,4vi)}.b3-tab[aria-selected=true]{color:var(--b3-color-accent);border-block-end-color:currentColor;font-weight:650}.b3-tab:disabled{opacity:.5;cursor:not-allowed}.b3-tabpanel{padding-block:var(--b3-space-4)}.b3-segmented{border-radius:var(--b3-radius);background:color-mix(in srgb, var(--b3-color-text) 7%, var(--b3-color-canvas));border:0;flex-wrap:wrap;gap:.25rem;min-inline-size:0;margin:0;padding:.25rem;display:flex}.b3-segmented>label{border-radius:calc(var(--b3-radius) - .25rem);min-block-size:2.75rem;max-inline-size:100%;color:var(--b3-color-muted);text-align:center;cursor:pointer;flex:1 0 auto;justify-content:center;align-items:center;gap:.375rem;padding-inline:.875rem;font-weight:600;display:inline-flex;position:relative}.b3-segmented>label>input{opacity:0;block-size:100%;inline-size:100%;cursor:inherit;margin:0;position:absolute;inset:0}.b3-segmented>label:has(input:checked){background:var(--b3-color-surface);color:var(--b3-color-text);box-shadow:0 1px 2px #0000001f, 0 0 0 1px var(--b3-color-border)}.b3-segmented>label:has(input:focus-visible){box-shadow:inset 0 0 0 2px}@media (forced-colors:active){.b3-segmented>label{border:2px solid canvas}.b3-segmented>label:has(input:checked){border-color:canvastext}.b3-segmented>label:has(input:focus-visible){outline-offset:1px;outline:2px solid highlight}}.b3-segmented>label:has(input:disabled){opacity:.5;cursor:not-allowed}.b3-accordion{border-block-end:1px solid var(--b3-color-border)}.b3-accordion>summary{cursor:pointer;padding:1rem .25rem;font-weight:650}.b3-accordion>:not(summary){padding:0 .25rem 1rem}.b3-dropdown{display:inline-block;position:relative}.b3-dropdown>summary{list-style:none}.b3-dropdown>summary::-webkit-details-marker{display:none}.b3-dropdown-panel{z-index:20;border:1px solid var(--b3-color-border);border-radius:var(--b3-radius);background:var(--b3-color-surface);max-block-size:70svh;inline-size:max-content;min-inline-size:min(12rem,85vw);max-inline-size:min(22rem,85vw);color:var(--b3-color-text);box-shadow:var(--b3-shadow-raised);padding:.5rem;position:absolute;inset-block-start:calc(100% + .5rem);inset-inline-start:0;overflow-y:auto}.b3-dialog{overscroll-behavior:contain;border:1px solid var(--b3-color-border);border-radius:var(--b3-radius-large);background:var(--b3-color-surface);max-block-size:calc(100svh - 2rem);inline-size:min(32rem,100% - 2rem);color:var(--b3-color-text);box-shadow:var(--b3-shadow-raised);padding:min(1.5rem,5vi);overflow:auto}.b3-dialog::backdrop{background:#101b17a6}.b3-dialog[data-b3-placement=end]{border-radius:0;block-size:100svh;max-block-size:100svh;inline-size:min(28rem,100%);max-inline-size:100%;margin:0;margin-inline-start:auto}@media (prefers-reduced-motion:no-preference){.b3-dialog[open]{animation:.28s cubic-bezier(.16,1,.3,1) b3-dialog-enter}.b3-dialog[open][data-b3-placement=end]{animation-name:b3-drawer-enter}.b3-dialog::backdrop,.b3-sheet::backdrop{transition:opacity .16s ease-out}.b3-dialog[data-b3-closing]::backdrop,.b3-sheet[data-b3-closing]::backdrop{opacity:0}@keyframes b3-dialog-enter{0%{opacity:0;transform:translateY(8px)scale(.96)}}@keyframes b3-drawer-enter{0%{opacity:0;translate:var(--b3-drawer-offset,1rem)}}.b3-dialog[dir=rtl][data-b3-placement=end],[dir=rtl] .b3-dialog[data-b3-placement=end]{--b3-drawer-offset:-1rem}}.b3-dialog>form{gap:var(--b3-space);flex-direction:column;margin:0;display:flex}.b3-dialog>form>header:has(>button:last-child){grid-template-columns:minmax(0,1fr) auto;align-items:center;column-gap:.75rem;display:grid}.b3-dialog>form>header:has(>button:last-child)>:not(:last-child){grid-column:1;min-inline-size:0}.b3-dialog>form>header>button:last-child:not(:first-child){grid-area:1/2}.b3-dialog>form>footer{flex-wrap:wrap;justify-content:flex-end;align-items:center;gap:.75rem;display:flex}.b3-dialog>form>footer>[data-b3-emphasis=quiet]:first-child:not(:last-child){margin-inline-end:auto}.b3-tree,.b3-tree ul{overflow-wrap:anywhere;border-inline-start:1px solid var(--b3-color-border);padding-inline-start:min(1rem,5%);list-style:none}.b3-tree summary{cursor:pointer;padding-block:.5rem}.b3-prose{overflow-wrap:anywhere;max-inline-size:65ch;line-height:1.75}.b3-prose :is(p,ul,ol,blockquote,pre){margin-block:1rem}.b3-prose :is(h1,h2,h3,h4,h5,h6){margin-block:1.75rem .75rem;line-height:1.25}.b3-prose :is(h5,h6){font-size:1em}.b3-prose>:first-child{margin-block-start:0}.b3-prose img{block-size:auto}.b3-prose blockquote{border-inline-start:3px solid var(--b3-color-accent);color:var(--b3-color-muted);margin-inline:0;padding-inline-start:1rem}.b3-prose pre{background:var(--b3-color-surface);border:1px solid var(--b3-color-border);border-radius:var(--b3-radius-small);padding:1rem;overflow-x:auto}.b3-visually-hidden{clip-path:inset(50%);white-space:nowrap;block-size:1px;inline-size:1px;position:absolute;overflow:hidden}.b3-skip-link{z-index:1000;border-radius:var(--b3-radius-small);background:var(--b3-color-accent);max-inline-size:calc(100% - 1.5rem);color:var(--b3-color-on-accent);padding:.75rem 1rem;font-weight:650;position:fixed;inset-block-start:max(.75rem, env(safe-area-inset-top,0px));inset-inline-start:.75rem}.b3-skip-link:not(:focus){clip-path:inset(50%);white-space:nowrap;block-size:1px;inline-size:1px;padding:0;overflow:hidden}.b3-hero{grid-template-columns:repeat(2,minmax(0,1fr));align-items:center;gap:clamp(2rem,6vw,6rem);padding-block:clamp(3rem,8vw,7rem);display:grid}.b3-hero[data-b3-align=center]{text-align:center;grid-template-columns:minmax(0,1fr);justify-items:center}.b3-hero-copy{gap:1.5rem;max-inline-size:40rem;display:grid}.b3-feature{grid-template-columns:minmax(0,1fr) minmax(0,1fr);align-items:center;gap:clamp(1.5rem,5vw,5rem);padding-block:clamp(2rem,6vw,5rem);display:grid}.b3-feature[data-b3-reverse=true]>:first-child{order:2}.b3-feature-icon{border-radius:var(--b3-radius);background:var(--b3-color-accent);block-size:3rem;inline-size:3rem;color:var(--b3-color-on-accent);place-items:center;display:inline-grid}.b3-pricing{border:1px solid var(--b3-color-border);border-radius:var(--b3-radius-large);background:var(--b3-color-surface);color:var(--b3-color-text);flex-direction:column;gap:1.25rem;padding:clamp(1.25rem,3vw,2rem);display:flex}.b3-pricing[data-b3-featured=true]{border:2px solid var(--b3-color-accent);box-shadow:var(--b3-shadow)}.b3-pricing>.b3-button:last-child{margin-block-start:auto}.b3-price{font-variant-numeric:tabular-nums;flex-wrap:wrap;align-items:baseline;gap:.375rem;display:flex}.b3-price>strong{letter-spacing:-.05em;font-size:3.25rem;line-height:1.1}.b3-checklist{gap:.75rem;margin:0;padding:0;list-style:none;display:grid}.b3-checklist>li{align-items:start;gap:.625rem;display:flex}.b3-checklist>li:before{content:"✓";color:var(--b3-color-accent);font-weight:700}.b3-quote{border-inline-start:3px solid var(--b3-color-accent);margin:0;padding:1.5rem}.b3-quote blockquote{margin:0 0 1rem;font-size:1.25rem;line-height:1.5}.b3-art{isolation:isolate;border-radius:var(--b3-radius-large);background:var(--b3-color-surface);position:relative;overflow:hidden}.b3-art:before{content:"";z-index:-1;pointer-events:none;position:absolute;inset:0}.b3-art[data-b3-art=dots]:before{background-image:radial-gradient(var(--b3-color-border) 1px,transparent 1px);background-size:16px 16px}.b3-art[data-b3-art=glow]:before{background:radial-gradient(ellipse at 20% 20%,color-mix(in srgb,var(--b3-color-accent) 20%,transparent),transparent 65%)}.b3-art[data-b3-art=wash]:before{background:linear-gradient(135deg,color-mix(in srgb,var(--b3-color-accent) 14%,transparent),transparent 70%)}@media (width<=48rem){.b3-hero,.b3-feature{grid-template-columns:minmax(0,1fr)}.b3-feature[data-b3-reverse=true]>:first-child{order:initial}}.b3-reading{grid-template-columns:minmax(0,1fr) minmax(12rem,16rem);grid-template-areas:"content outline";align-items:start;gap:clamp(2rem,5vw,5rem);display:grid}.b3-reading>:not(.b3-toc){grid-area:content;min-inline-size:0}.b3-toc{max-block-size:calc(100svh - var(--b3-outline-top,1rem) - 1rem);border-inline-start:1px solid var(--b3-color-border);grid-area:outline;padding-inline-start:min(1rem,5%);font-size:.875rem;position:sticky;inset-block-start:var(--b3-outline-top,1rem);overflow-y:auto}.b3-toc ol{gap:.25rem;margin:.75rem 0 0;padding:0;list-style:none;display:grid}.b3-toc ol ol{margin:.25rem 0;padding-inline-start:min(1rem,5%)}.b3-toc-link{border-radius:var(--b3-radius-small);color:var(--b3-color-muted);overflow-wrap:anywhere;padding:.625rem min(.75rem,5%);text-decoration:none;display:block}.b3-toc-link:hover{color:var(--b3-color-text);background:var(--b3-color-surface)}.b3-toc-link[aria-current=location]{color:var(--b3-color-accent);background:color-mix(in srgb, var(--b3-color-accent) 10%, var(--b3-color-surface));font-weight:650}@media (width<=48rem){.b3-reading{grid-template-columns:minmax(0,1fr);grid-template-areas:"outline""content";gap:2rem}.b3-toc{max-block-size:none;position:static}}.b3-command{inline-size:min(38rem,100% - 2rem);padding:0}.b3-command[open]:has(>.b3-scroll){grid-template-rows:auto minmax(0,1fr);display:grid}.b3-command>.b3-scroll>.b3-command-list{max-block-size:none;overflow:visible}.b3-command-search{border-block-end:1px solid var(--b3-color-border);flex-wrap:wrap;justify-content:end;align-items:center;gap:.75rem;padding:min(1rem,4vw);display:flex}.b3-command-search>input{flex:12ch;min-inline-size:0}.b3-command-list{overscroll-behavior:contain;max-block-size:50svh;padding:.5rem;overflow-y:auto}.b3-command-group+.b3-command-group{border-block-start:1px solid var(--b3-color-border);margin-block-start:.5rem;padding-block-start:.5rem}.b3-command-group>:first-child:not([role=option]){color:var(--b3-color-muted);padding:.5rem .75rem;font-size:.75rem;display:block}.b3-command-item{border-radius:var(--b3-radius-small);cursor:pointer;justify-content:space-between;align-items:center;gap:min(1rem,2vw);min-block-size:2.75rem;padding:min(.875rem,2svh) min(.75rem,3vw);display:flex}.b3-command-item>:first-child{overflow-wrap:anywhere;min-inline-size:0}.b3-command-item[aria-selected=true]{background:var(--b3-color-accent);color:var(--b3-color-on-accent)}.b3-command-item[aria-selected=true] .b3-muted{color:inherit}.b3-command-item[aria-disabled=true]{opacity:.5;cursor:not-allowed}.b3-command-item:not([aria-disabled=true]):hover{outline:1px solid var(--b3-color-border);outline-offset:-1px}.b3-form-grid{grid-template-columns:repeat(auto-fit,minmax(min(100%,14rem),1fr));align-items:start;gap:1.25rem;display:grid}.b3-form-grid[data-b3-layout=inline]{flex-wrap:wrap;align-items:end;display:flex}.b3-form-grid[data-b3-layout=inline]>.b3-field{flex:12rem;min-inline-size:0}.b3-form-grid[data-b3-layout=inline]>.b3-button{overflow-wrap:anywhere;flex:0 auto;max-inline-size:100%}.b3-fieldset{border:0;min-inline-size:0;margin:0;padding:0}.b3-fieldset>legend{padding:0 0 .75rem;font-weight:650}.b3-help{color:var(--b3-color-muted);font-size:.875rem}.b3-help[data-b3-tone=success]{color:var(--b3-color-success)}.b3-help[data-b3-tone=warning]{color:var(--b3-color-warning)}.b3-input[data-b3-size=small]{padding:.5rem .75rem}.b3-input[data-b3-size=large]{min-block-size:3.25rem;padding:.875rem 1rem}.b3-input[data-b3-emphasis=subtle]{background-color:var(--b3-color-canvas);border-color:#0000}.b3-input[data-b3-emphasis=outline]{background-color:#0000;border-width:2px}.b3-input[data-b3-tone=success]{border-color:var(--b3-color-success)}.b3-input[data-b3-tone=warning]{border-color:var(--b3-color-warning)}.b3-input[aria-invalid=true]{border-color:var(--b3-color-danger)}textarea.b3-input{resize:vertical}select.b3-input[multiple]{min-block-size:8rem}.b3-input[type=file]{padding:.375rem}.b3-input::file-selector-button{font:inherit;border-radius:var(--b3-radius-small);background:var(--b3-color-accent);color:var(--b3-color-on-accent);cursor:pointer;border:0;margin-inline-end:.75rem;padding:.5rem .75rem}.b3-input[type=color]{inline-size:5rem;padding:.25rem}.b3-range{min-block-size:2.75rem;inline-size:100%;accent-color:var(--b3-color-accent);margin:0}.b3-choice-card{border:1px solid var(--b3-color-border);border-radius:var(--b3-radius);background:var(--b3-color-surface);color:var(--b3-color-text);cursor:pointer;align-items:start;gap:.75rem;padding:1rem;display:flex}.b3-choice-card>input{flex:none;block-size:1.125rem;inline-size:1.125rem;margin-block-start:.3rem}.b3-choice-card:has(input:checked){border-color:var(--b3-color-accent);background:color-mix(in srgb, var(--b3-color-accent) 7%, var(--b3-color-surface));box-shadow:inset 0 0 0 1px var(--b3-color-accent)}.b3-choice-card:has(input:focus-visible){outline:none;box-shadow:inset 0 0 0 2px}.b3-choice-card:has(input:disabled){opacity:.5;cursor:not-allowed}.b3-choice-card:has(input[aria-invalid=true]){border-color:var(--b3-color-danger)}.b3-range[aria-invalid=true]{accent-color:var(--b3-color-danger)}.b3-stepper{flex-wrap:wrap;gap:1rem 2rem;margin:0;padding:0;list-style:none;display:flex}.b3-step{color:var(--b3-color-muted);align-items:center;gap:.625rem;font-size:.875rem;display:flex}.b3-step-marker{border:1px solid var(--b3-color-border);font-variant-numeric:tabular-nums;border-radius:50%;flex:none;place-items:center;block-size:2rem;inline-size:2rem;display:grid}.b3-step[aria-current=step]{color:var(--b3-color-text);font-weight:650}.b3-step[aria-current=step] .b3-step-marker{background:var(--b3-color-accent);color:var(--b3-color-on-accent);border-color:var(--b3-color-accent)}.b3-step[data-b3-complete=true] .b3-step-marker{border-color:var(--b3-color-success);color:var(--b3-color-success)}.b3-conversation{gap:1.5rem;min-inline-size:0;margin:0;padding:0;list-style:none;display:grid}.b3-message{grid-template-columns:minmax(0,1fr);justify-self:start;gap:.375rem;min-inline-size:0;max-inline-size:min(85%,38rem);display:grid}.b3-message[data-b3-side=self]{justify-self:end}.b3-message-body{border:1px solid var(--b3-color-border);border-radius:var(--b3-radius);background:var(--b3-color-surface);color:var(--b3-color-text);white-space:pre-wrap;overflow-wrap:anywhere;padding:.875rem min(1rem,5%)}.b3-message[data-b3-side=self]>.b3-message-body{background:var(--b3-color-accent);color:var(--b3-color-on-accent);border-color:#0000}.b3-message-meta{color:var(--b3-color-muted);flex-wrap:wrap;gap:.35rem .75rem;font-size:.8125rem;display:flex}.b3-message[data-b3-side=self]>.b3-message-meta{justify-content:end}.b3-mobile-app{--b3-touch:44px;min-block-size:100svh;max-inline-size:var(--b3-app-width,70rem);margin-inline:auto;padding-block-end:calc(5.5rem + env(safe-area-inset-bottom,0px))}.b3-mobile-app[data-b3-platform=android]{--b3-touch:48px}.b3-mobile-app :where(button,.b3-button,select,input:not([type=checkbox],[type=radio])){min-block-size:var(--b3-touch)}.b3-app-bar{padding:max(.75rem, env(safe-area-inset-top,0px)) 1.25rem .75rem;align-items:center;gap:.75rem;display:flex}.b3-app-bar>:last-child:not(:first-child){margin-inline-start:auto}.b3-bottom-nav{z-index:10;max-inline-size:var(--b3-app-width,70rem);padding:.5rem clamp(.5rem, 2vw, 1rem) max(.5rem, env(safe-area-inset-bottom,0px));background:var(--b3-color-surface);color:var(--b3-color-text);border-block-start:1px solid var(--b3-color-border);flex-wrap:wrap;justify-content:space-around;gap:.5rem;margin-inline:auto;display:flex;position:fixed;inset-block-end:0;inset-inline:0}.b3-bottom-link{appearance:none;cursor:pointer;overflow-wrap:anywhere;text-align:center;min-block-size:var(--b3-touch,44px);min-inline-size:0;color:var(--b3-color-muted);background:0 0;border:0;border-radius:1rem;flex-direction:column;flex:5ch;justify-content:center;align-items:center;gap:.15rem;padding:.25rem clamp(.125rem,1vw,.5rem);font-size:.75rem;text-decoration:none;display:flex}.b3-bottom-link:disabled{opacity:.5;cursor:not-allowed}.b3-bottom-link:has(svg){justify-content:flex-start}.b3-bottom-link[aria-current=page]{color:var(--b3-color-accent);font-weight:700}[data-b3-platform=android] .b3-bottom-link[aria-current=page]{background:var(--b3-color-canvas)}.b3-mobile-list{border:1px solid var(--b3-color-border);background:var(--b3-color-surface);border-radius:1rem;margin:0;padding:0;list-style:none;overflow:hidden}.b3-mobile-list>li+li{border-block-start:1px solid var(--b3-color-border)}.b3-mobile-row{min-block-size:var(--b3-touch,44px);color:var(--b3-color-text);align-items:center;gap:1rem;padding:.875rem 1rem;text-decoration:none;display:flex}.b3-mobile-row>:last-child:not(:first-child){margin-inline-start:auto}.b3-sheet{inline-size:min(100%, var(--b3-overlay-width,32rem));max-inline-size:none;max-block-size:min(85dvh, calc(100dvh - env(safe-area-inset-top,0px) - 1rem));overscroll-behavior:contain;border:1px solid var(--b3-color-border);padding:1.5rem min(1.5rem, 5vi) max(1.5rem, env(safe-area-inset-bottom,0px));background:var(--b3-color-surface);color:var(--b3-color-text);border-radius:1.5rem 1.5rem 0 0;margin:0 auto;inset:auto 0 0;overflow-y:auto}.b3-sheet::backdrop{background:#0007}.b3-sheet [data-b3-initial-focus]:focus{box-shadow:none;outline:none}.b3-sheet-handle{min-block-size:44px;inline-size:5rem;color:var(--b3-color-muted);touch-action:none;cursor:grab;background:0 0;border:0;border-radius:1rem;flex:none;align-self:center;place-items:center;margin-block:-1rem -.5rem;padding:0;display:grid}.b3-sheet-handle:before{content:"";background:currentColor;border-radius:1rem;block-size:.25rem;inline-size:2.25rem}.b3-sheet[data-b3-dragging]{animation:none}.b3-sheet[data-b3-dragging] .b3-sheet-handle{cursor:grabbing}[data-b3-platform=android] .b3-mobile-list{border-radius:1.5rem}@media (prefers-reduced-motion:no-preference){.b3-sheet[open]{animation:.32s cubic-bezier(.16,1,.3,1) b3-sheet-enter}@keyframes b3-sheet-enter{0%{opacity:0;transform:translateY(3rem)}to{opacity:1;transform:translateY(0)}}}.b3-root:has(dialog:modal){overflow:hidden}.b3-bottom-link[aria-current=page]{background:color-mix(in srgb, var(--b3-color-accent) 12%, transparent)}.b3-bottom-link :where(svg:not([width])){flex:none;block-size:1.375rem;inline-size:1.375rem}.b3-app-frame{inline-size:100%;block-size:var(--b3-frame-height,100dvh);min-block-size:0;max-inline-size:var(--b3-app-width,70rem);padding:env(safe-area-inset-top,0px) env(safe-area-inset-right,0px) env(safe-area-inset-bottom,0px) env(safe-area-inset-left,0px);grid-template-rows:auto minmax(0,1fr) auto;margin-inline:auto;display:grid;overflow:clip}.b3-app-frame>header{grid-row:1;min-inline-size:0}.b3-app-frame>main{overscroll-behavior:contain;grid-area:2/1;min-block-size:0;min-inline-size:0;overflow:auto}.b3-app-frame>:is(nav,footer){grid-row:3;min-inline-size:0;position:relative}.b3-app-frame>.b3-toast-region{overscroll-behavior:contain;grid-area:2/1;place-self:end;min-block-size:0;max-block-size:calc(100% - 2rem);margin:1rem;position:relative;inset:auto;overflow-y:auto}.b3-app-frame>.b3-app-bar{padding-block-start:.75rem}.b3-app-frame:has(>.b3-bottom-nav,>footer .b3-bottom-nav){padding-block-end:0}.b3-app-frame .b3-bottom-nav{inline-size:100%;max-inline-size:none;padding-block-end:max(.5rem, env(safe-area-inset-bottom,0px));position:static}}@property --b3-reel-fade{syntax:"<length>";inherits:false;initial-value:2.5rem}
|
|
1
|
+
@layer bare.reset{:where(.b3-root),:where(.b3-root *){box-sizing:border-box}:where(.b3-root){font-family:var(--b3-font-body);background:var(--b3-color-canvas);color:var(--b3-color-text);color-scheme:light;margin:0;font-size:1rem;line-height:1.5}:where(.b3-root>body){margin:0}:where(.b3-root) :where(button,input,select,textarea){font:inherit}:where(.b3-root) :where(h1,h2,h3,h4,h5,h6,p){margin:0}:where(.b3-root) :where(button,a,input,select,textarea,summary,[tabindex]):focus-visible{outline:none;box-shadow:inset 0 0 0 2px}@media (forced-colors:active){:where(.b3-root) :where(button,a,input,select,textarea,summary,[tabindex]):focus-visible{outline-offset:-2px;outline:1px solid highlight}}:where(.b3-root) :where(img,svg:not([width])){max-inline-size:100%}@media (prefers-reduced-motion:reduce){:where(.b3-root *),:where(.b3-root *):before,:where(.b3-root *):after{transition:none!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}[data-b3-motion=reduce] *,[data-b3-motion=reduce] :before,[data-b3-motion=reduce] :after,[data-b3-motion=reduce] ::backdrop{scroll-behavior:auto!important;transition:none!important;animation:none!important}:where(.b3-root [hidden]):not([hidden=until-found]){display:none!important}:where(.b3-root) :where(input[type=checkbox],input[type=radio],input[type=range]){accent-color:var(--b3-color-accent)}}@layer bare.tokens{.b3-root:where(:not(.b3-root .b3-root)),.b3-root[data-b3-theme=light]{--b3-color-canvas:#f6f5f0;--b3-color-surface:#fff;--b3-color-text:#202923;--b3-color-muted:#59655d;--b3-color-border:#d5dbd3;--b3-color-accent:#245c42;--b3-color-on-accent:#fff;--b3-color-danger:#a62c35;--b3-color-focus:#276bdd;--b3-font-body:ui-sans-serif, system-ui, sans-serif;--b3-font-display:var(--b3-font-body);--b3-radius:.75rem;--b3-space:1rem;--b3-content:68rem}.b3-root[data-b3-theme=dark]{color-scheme:dark;--b3-color-canvas:#141c19;--b3-color-surface:#202c26;--b3-color-text:#edf3ec;--b3-color-muted:#a8b9ad;--b3-color-border:#415348;--b3-color-accent:#aadbb8;--b3-color-on-accent:#132b1b;--b3-color-danger:#ffadb1;--b3-color-focus:#9ac4ff}.b3-root:where(:not(.b3-root .b3-root)),.b3-root[data-b3-theme=light]{--b3-space-1:.25rem;--b3-space-2:.5rem;--b3-space-3:.75rem;--b3-space-4:1rem;--b3-space-6:1.5rem;--b3-space-8:2rem;--b3-space-12:3rem;--b3-radius-small:.375rem;--b3-radius-large:1.25rem;--b3-shadow:0 8px 32px #14231b14;--b3-shadow-raised:0 16px 56px #14231b24;--b3-color-success:#256443;--b3-color-warning:#805100;--b3-color-info:#275f99;--b3-duration:.16s}.b3-root[data-b3-theme=dark]{--b3-shadow:0 8px 32px #0004;--b3-shadow-raised:0 16px 56px #0007;--b3-color-success:#99d9ab;--b3-color-warning:#f2c76c;--b3-color-info:#a2cfff}.b3-root[data-b3-density=compact]{--b3-d-control:2.25rem;--b3-d-control-small:1.875rem;--b3-d-pad-block:.4375rem;--b3-d-pad-inline:.875rem;--b3-d-label:.875rem;--b3-d-heading:1.0625rem;--b3-d-avatar:2.25rem;--b3-d-message-pad:.625rem .875rem;--b3-d-meta:.75rem;--b3-d-gap:1rem;--b3-d-surface-pad:1rem}@media (pointer:fine) and (width>=48rem){.b3-root[data-b3-density=auto]{--b3-d-control:2.25rem;--b3-d-control-small:1.875rem;--b3-d-pad-block:.4375rem;--b3-d-pad-inline:.875rem;--b3-d-label:.875rem;--b3-d-heading:1.0625rem;--b3-d-avatar:2.25rem;--b3-d-message-pad:.625rem .875rem;--b3-d-meta:.75rem;--b3-d-gap:1rem;--b3-d-surface-pad:1rem}}}@layer bare.layout{.b3-shell{inline-size:min(100%, var(--b3-content));margin-inline:auto;padding:clamp(1rem,4vw,3rem)}.b3-stack{gap:var(--b3-space);flex-direction:column;min-inline-size:0;display:flex}.b3-stack:where(dialog:not([open])){display:none}.b3-scroll{overscroll-behavior:contain;scrollbar-gutter:stable;flex:auto;min-block-size:0;min-inline-size:0;overflow:auto}dialog.b3-stack>.b3-scroll{min-block-size:min(6rem,30dvh)}.b3-stack:has(>.b3-scroll)>:not(.b3-scroll){flex-shrink:0}.b3-cluster{align-items:center;gap:var(--b3-space);flex-wrap:wrap;min-inline-size:0;display:flex}.b3-cluster>*,.b3-split>*{min-inline-size:0}.b3-inline{vertical-align:middle;align-items:center;gap:.5em;min-inline-size:0;max-inline-size:100%;display:inline-flex}.b3-inline>*{min-inline-size:0}.b3-inline:has(>.b3-badge){flex-wrap:wrap}.b3-inline>.b3-badge{flex-shrink:0}.b3-inline:has(>.b3-badge)>:not(.b3-badge,.b3-icon,svg){flex:1 1 min-content}.b3-grid{grid-template-columns:repeat(auto-fit, minmax(min(100%, var(--b3-grid-min,17rem)), 1fr));gap:var(--b3-space);display:grid}.b3-split{justify-content:space-between;align-items:center;gap:var(--b3-space);flex-wrap:wrap;display:flex}.b3-page{flex-direction:column;min-block-size:100svh;display:flex}.b3-page-body{flex:1;min-inline-size:0}.b3-app-layout{grid-template-columns:minmax(12rem,16rem) minmax(0,1fr);min-block-size:100svh;display:grid}.b3-sidebar{padding:var(--b3-space-6);border-inline-end:1px solid var(--b3-color-border);background:var(--b3-color-surface);min-inline-size:0}.b3-center{padding:var(--b3-space-6);place-items:center;display:grid}.b3-cover{min-block-size:min(42rem,85svh);padding-block:var(--b3-space-12);flex-direction:column;justify-content:center;display:flex}.b3-reel{gap:var(--b3-space);scroll-snap-type:x proximity;padding-block-end:var(--b3-space-2);display:flex;overflow-x:auto}.b3-reel>*{scroll-snap-align:start;flex:0 0 min(85%,20rem)}@media (width<=48rem){.b3-app-layout{grid-template-columns:minmax(0,1fr)}.b3-sidebar{border-inline-end:0;border-block-end:1px solid var(--b3-color-border)}}.b3-reel:has(>.b3-badge){scrollbar-width:none;align-items:center;gap:.5rem;padding-block:.625rem}.b3-reel:has(>.b3-badge)::-webkit-scrollbar{display:none}.b3-reel>.b3-badge{flex:none}.b3-stack>.b3-reel{flex-shrink:0}@supports (animation-timeline:scroll(self inline)){.b3-reel:has(>.b3-badge){mask-image:linear-gradient(to right, #000 calc(100% - var(--b3-reel-fade)), #0000);animation:linear both b3-reel-fade scroll(self inline)}.b3-reel:has(>.b3-badge):dir(rtl){mask-image:linear-gradient(to left, #000 calc(100% - var(--b3-reel-fade)), #0000)}@keyframes b3-reel-fade{90%{--b3-reel-fade:2.5rem}to{--b3-reel-fade:0rem}}}}@layer bare.components{.b3-title{font-family:var(--b3-font-display);letter-spacing:-.04em;overflow-wrap:anywhere;font-size:clamp(2rem,7vw,4rem);line-height:1.05}.b3-heading{font-family:var(--b3-font-display);letter-spacing:-.02em;overflow-wrap:anywhere;font-size:1.375rem;font-weight:650;line-height:1.25}.b3-muted{color:var(--b3-color-muted)}.b3-label{letter-spacing:.06em;text-transform:uppercase;font-size:.8125rem;font-weight:650}.b3-surface{background:var(--b3-color-surface);color:var(--b3-color-text);border:1px solid var(--b3-color-border);border-radius:var(--b3-radius);padding:clamp(1rem,3vw,2rem)}.b3-button{border-radius:var(--b3-radius);background:var(--b3-color-accent);min-block-size:2.75rem;color:var(--b3-color-on-accent);cursor:pointer;border:1px solid #0000;justify-content:center;align-items:center;gap:.5rem;padding:.625rem 1rem;font-weight:650;text-decoration:none;display:inline-flex}.b3-button :where(svg){flex-shrink:0;display:block}.b3-button>:where([aria-hidden=true]):has(>svg){flex-shrink:0}.b3-button[data-b3-emphasis=quiet]{color:var(--b3-color-text);border-color:var(--b3-color-border);background:0 0}.b3-button:disabled{opacity:.5;cursor:not-allowed}.b3-field{align-content:start;gap:.375rem;min-inline-size:0;display:grid}.b3-input{border:1px solid var(--b3-color-border);border-radius:var(--b3-radius);background:var(--b3-color-surface);min-block-size:2.75rem;inline-size:100%;min-inline-size:0;color:var(--b3-color-text);padding:.625rem .75rem}.b3-error{color:var(--b3-color-danger);font-size:.875rem}select.b3-input:not([multiple]):not([size]),select.b3-input[size="1"]:not([multiple]){appearance:none;background-image:linear-gradient(45deg,#0000 50%,currentColor 50%),linear-gradient(135deg,currentColor 50%,#0000 50%);background-position:right calc(1rem + 5px) center,right 1rem center;background-repeat:no-repeat;background-size:5px 5px;padding-inline-end:2.5rem}select.b3-input:not([multiple]):not([size]):dir(rtl),select.b3-input[size="1"]:not([multiple]):dir(rtl){background-position:1rem,calc(1rem + 5px)}@media (forced-colors:active){select.b3-input:not([multiple]):not([size]),select.b3-input[size="1"]:not([multiple]){appearance:auto;background-image:none}}:where(ul,ol):has(>.b3-row){margin:0;padding-inline-start:0}.b3-row{border-block-end:1px solid var(--b3-color-border);align-items:center;gap:.75rem;padding-block:1rem;display:flex}.b3-row:where(.b3-stack){align-items:stretch;gap:var(--b3-space)}:is(a,button,[role=button]).b3-row{padding-inline:var(--b3-space-4);color:inherit;text-align:start;cursor:pointer;transition:background-color var(--b3-duration);text-decoration:none}@media (hover:hover){:is(a,button,[role=button]).b3-row:hover{background:color-mix(in srgb, var(--b3-color-text) 4%, transparent)}}:is(a,button,[role=button]).b3-row:focus-visible{background:color-mix(in srgb, var(--b3-color-text) 4%, transparent)}:is(a,button,[role=button]).b3-row:active{background:color-mix(in srgb, var(--b3-color-text) 8%, transparent)}.b3-clamp{-webkit-line-clamp:var(--b3-clamp,2);line-clamp:var(--b3-clamp,2);-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.b3-badge{overflow-wrap:anywhere;border:1px solid var(--b3-color-border);border-radius:100vmax;align-items:center;inline-size:fit-content;max-inline-size:100%;padding:.125rem .5rem;font-size:.75rem;font-weight:650;display:inline-flex}.b3-progress{block-size:.5rem;inline-size:100%;accent-color:var(--b3-color-accent)}.b3-button{transition:box-shadow var(--b3-duration), border-color var(--b3-duration)}@media (hover:hover){.b3-button:not(:disabled):hover{box-shadow:inset 0 0 0 100vmax #00000012}}.b3-button:not(:disabled):active{box-shadow:inset 0 0 0 100vmax #00000024}.b3-button[data-b3-emphasis=outline]{color:var(--b3-color-accent);background:0 0;border-color:currentColor}.b3-button[data-b3-emphasis=danger]{background:var(--b3-color-danger);color:var(--b3-color-canvas)}.b3-button[data-b3-size=small]{padding:.5rem .75rem;font-size:.875rem}.b3-button[data-b3-size=large]{min-block-size:3.25rem;padding:.875rem 1.5rem}.b3-button[aria-busy=true]{cursor:progress}.b3-icon{vertical-align:-.2em;flex:none;block-size:1.25em;inline-size:1.25em;display:inline-block}[data-b3-confirm][data-b3-armed]{outline:2px solid var(--b3-color-danger)!important;outline-offset:2px!important}.b3-button[data-b3-armed]{background:var(--b3-color-danger);color:var(--b3-color-canvas);border-color:var(--b3-color-danger)}.b3-input:disabled{opacity:.6;cursor:not-allowed}.b3-input[readonly]{background:var(--b3-color-canvas)}.b3-input::placeholder{color:var(--b3-color-muted);opacity:.8}.b3-input-group{border:1px solid var(--b3-color-border);border-radius:var(--b3-radius);background:var(--b3-color-canvas);flex-wrap:wrap;align-items:stretch;min-inline-size:0;display:flex;overflow:clip}.b3-input-group>.b3-input{border:0;border-radius:0;flex:12ch}.b3-input-group:has(>.b3-button){justify-content:end}.b3-input-group:focus-within{outline:none;box-shadow:inset 0 0 0 2px}.b3-input-affix{overflow-wrap:anywhere;min-inline-size:0;max-inline-size:100%;color:var(--b3-color-muted);background:var(--b3-color-canvas);align-items:center;padding-inline:.75rem;display:flex}.b3-choice{cursor:pointer;flex-wrap:wrap;align-items:start;gap:.75rem;padding-block:.5rem;display:flex}.b3-choice>:not(input){overflow-wrap:anywhere;flex:12ch;min-inline-size:0}.b3-choice input{--b3-choice-control:1.125rem;inline-size:var(--b3-choice-control);block-size:var(--b3-choice-control);flex:none;margin:0;margin-block-start:max(0px, calc((1lh - var(--b3-choice-control)) / 2))}.b3-choice>.b3-switch{--b3-choice-control:1.625rem}.b3-switch{appearance:none;background:var(--b3-color-muted);border:2px solid var(--b3-color-muted);cursor:pointer;border-radius:2rem;position:relative;block-size:1.625rem!important;inline-size:2.75rem!important}.b3-switch:before{content:"";background:var(--b3-color-surface);border-radius:50%;block-size:1.125rem;inline-size:1.125rem;position:absolute;inset-block-start:.125rem;inset-inline-start:.125rem}.b3-switch:checked{background:var(--b3-color-accent);border-color:var(--b3-color-accent)}.b3-switch:checked:before{background:var(--b3-color-on-accent);inset-inline-start:calc(100% - 1.25rem)}.b3-switch:disabled{opacity:.5;cursor:not-allowed}.b3-input[type=number]{appearance:textfield}.b3-input[type=number]::-webkit-inner-spin-button,.b3-input[type=number]::-webkit-outer-spin-button{appearance:none;margin:0}.b3-input::-webkit-datetime-edit,.b3-input::-webkit-datetime-edit-fields-wrapper{padding-block:0}.b3-input:is([type=date],[type=time],[type=datetime-local],[type=month],[type=week]){appearance:none;max-inline-size:100%;display:block}.b3-input::-webkit-date-and-time-value{text-align:start;min-block-size:1lh}.b3-input-affix{white-space:nowrap}.b3-card-header,.b3-card-footer{justify-content:space-between;align-items:center;gap:var(--b3-space);flex-wrap:wrap;display:flex}.b3-card-header{margin-block-end:var(--b3-space-4)}.b3-card-footer{border-block-start:1px solid var(--b3-color-border);margin-block-start:var(--b3-space-4);padding-block-start:var(--b3-space-4)}.b3-surface[data-b3-elevation=raised]{box-shadow:var(--b3-shadow)}.b3-divider{border:0;border-block-start:1px solid var(--b3-color-border);inline-size:100%;margin-inline:0;margin-block:var(--b3-space)}.b3-stack>.b3-divider{margin-block:0}.b3-alert,.b3-toast{overflow-wrap:anywhere;min-inline-size:0}.b3-alert>*,.b3-toast>*{min-inline-size:0}.b3-alert pre{max-inline-size:100%;overflow-x:auto}.b3-alert{--b3-status-color:var(--b3-color-info);border:1px solid var(--b3-status-color);border-radius:var(--b3-radius-small);color:var(--b3-color-text);background:color-mix(in srgb, var(--b3-status-color) 8%, var(--b3-color-surface));border-inline-start-width:4px;align-items:start;gap:.75rem;padding:1rem;display:flex}.b3-alert[data-b3-tone=success],.b3-badge[data-b3-tone=success]{--b3-status-color:var(--b3-color-success)}.b3-alert[data-b3-tone=warning],.b3-badge[data-b3-tone=warning]{--b3-status-color:var(--b3-color-warning)}.b3-alert[data-b3-tone=danger],.b3-badge[data-b3-tone=danger]{--b3-status-color:var(--b3-color-danger)}.b3-badge[data-b3-tone]{color:var(--b3-status-color,var(--b3-color-info));background:color-mix(in srgb, currentColor 7%, transparent);border-color:currentColor}.b3-toast-region{z-index:100;pointer-events:none;gap:.75rem;inline-size:min(24rem,100% - 2rem);display:grid;position:fixed;inset-block-end:1rem;inset-inline-end:1rem}.b3-toast{border:1px solid var(--b3-color-border);border-radius:var(--b3-radius);background:var(--b3-color-surface);color:var(--b3-color-text);box-shadow:var(--b3-shadow-raised);pointer-events:auto;flex-wrap:wrap;align-items:start;gap:1rem;padding:1rem;display:flex}.b3-toast>:not(button,.b3-button){flex:12rem}.b3-toast>:is(button,.b3-button){flex:none;max-inline-size:100%}.b3-spinner{vertical-align:-.125em;border:2px solid;border-inline-end-color:#0000;border-radius:50%;flex:none;block-size:1.125em;inline-size:1.125em;animation:.8s linear infinite b3-spin;display:inline-block}@keyframes b3-spin{to{transform:rotate(360deg)}}.b3-skeleton{background:var(--b3-color-border);border-radius:var(--b3-radius-small);min-block-size:1rem;animation:1.8s ease-in-out infinite b3-pulse}@keyframes b3-pulse{50%{opacity:.45}}:is(button,a).b3-badge{min-block-size:auto;color:var(--b3-color-text);cursor:pointer;background:0 0;gap:.25rem;text-decoration:none;position:relative}:is(button,a).b3-badge:after{content:"";position:absolute;inset:-10px 0}:is(button,a).b3-badge[data-b3-tone]{color:var(--b3-status-color,var(--b3-color-info))}:is(button,a).b3-badge:is([aria-pressed=true],[aria-current]:not([aria-current=false])){color:var(--b3-color-on-accent);background:var(--b3-color-accent);border-color:var(--b3-color-accent)}.b3-avatar{background:var(--b3-color-accent);block-size:2.5rem;inline-size:2.5rem;color:var(--b3-color-on-accent);border-radius:50%;flex:none;place-items:center;font-size:.875rem;font-weight:650;display:inline-grid;overflow:hidden}.b3-avatar>img{object-fit:cover;block-size:100%;inline-size:100%}.b3-avatar-stack{padding-inline-start:.5rem;display:flex}.b3-avatar-stack>.b3-avatar{border:2px solid var(--b3-color-surface);margin-inline-start:-.5rem}.b3-kbd{border:1px solid var(--b3-color-border);background:var(--b3-color-surface);color:var(--b3-color-muted);border-block-end-width:2px;border-radius:.25rem;padding:.15rem .35rem;font:.75rem ui-monospace,monospace}.b3-table-wrap{border:1px solid var(--b3-color-border);border-radius:var(--b3-radius);position:relative;overflow-x:auto}.b3-table{border-collapse:collapse;text-align:start;font-variant-numeric:tabular-nums;inline-size:100%}.b3-table th{color:var(--b3-color-muted);background:var(--b3-color-canvas);font-size:.75rem;font-weight:650}.b3-table :is(th,td){border-block-end:1px solid var(--b3-color-border);text-align:start;vertical-align:middle;padding:.875rem 1rem}.b3-table tbody tr:last-child td{border-block-end:0}.b3-table[data-b3-density=compact] :is(th,td){padding:.5rem .75rem}.b3-table tbody tr[aria-selected=true]{background:color-mix(in srgb, var(--b3-color-accent) 10%, var(--b3-color-surface))}.b3-definition{grid-template-columns:minmax(0,1fr) minmax(0,2fr);gap:.75rem 1.5rem;margin:0;display:grid;container:b3-definition/inline-size}.b3-definition dt{overflow-wrap:anywhere;min-inline-size:0;color:var(--b3-color-muted)}.b3-definition dd{overflow-wrap:anywhere;margin:0}@container b3-definition (width<=26rem){.b3-definition>:is(dt,dd){grid-column:1/-1}.b3-definition>dt:not(:first-child){margin-block-start:.75rem}}.b3-stat{grid-template-columns:minmax(0,1fr);gap:.5rem;display:grid}.b3-stat-value{overflow-wrap:anywhere;letter-spacing:-.045em;font-variant-numeric:tabular-nums;font-size:clamp(1.5rem,5vw,3rem);font-weight:650;line-height:1.1}.b3-nav{border-block-end:1px solid var(--b3-color-border);flex-wrap:wrap;align-items:center;gap:.5rem;padding:.75rem;display:flex}.b3-nav[data-b3-orientation=vertical]{border-block-end:0;flex-direction:column;align-items:stretch}.b3-nav-link{border-radius:var(--b3-radius-small);min-block-size:2.75rem;color:var(--b3-color-muted);align-items:center;gap:.5rem;padding:.625rem .875rem;text-decoration:none;display:flex}.b3-nav-link[aria-current=page]{background:color-mix(in srgb, var(--b3-color-accent) 10%, var(--b3-color-surface));color:var(--b3-color-accent);font-weight:650}.b3-nav-link:hover{background:var(--b3-color-surface);color:var(--b3-color-text)}.b3-breadcrumbs{color:var(--b3-color-muted);flex-wrap:wrap;align-items:center;gap:.5rem;margin:0;padding:0;font-size:.875rem;list-style:none;display:flex}.b3-breadcrumbs li+li:before{content:"/";color:var(--b3-color-border);margin-inline-end:.5rem}.b3-tablist{border-block-end:1px solid var(--b3-color-border);gap:.25rem;display:flex;overflow-x:auto}.b3-tab{appearance:none;color:var(--b3-color-muted);font:inherit;white-space:normal;overflow-wrap:anywhere;cursor:pointer;background:0 0;border:0;border-block-end:2px solid #0000;flex-shrink:0;min-block-size:2.75rem;max-inline-size:100%;padding:.75rem min(1rem,4vi)}.b3-tab[aria-selected=true]{color:var(--b3-color-accent);border-block-end-color:currentColor;font-weight:650}.b3-tab:disabled{opacity:.5;cursor:not-allowed}.b3-tabpanel{padding-block:var(--b3-space-4)}.b3-segmented{border-radius:var(--b3-radius);background:color-mix(in srgb, var(--b3-color-text) 7%, var(--b3-color-canvas));border:0;flex-wrap:wrap;gap:.25rem;min-inline-size:0;margin:0;padding:.25rem;display:flex}.b3-segmented>label{border-radius:calc(var(--b3-radius) - .25rem);min-block-size:2.75rem;max-inline-size:100%;color:var(--b3-color-muted);text-align:center;cursor:pointer;flex:1 0 auto;justify-content:center;align-items:center;gap:.375rem;padding-inline:.875rem;font-weight:600;display:inline-flex;position:relative}.b3-segmented>label>input{opacity:0;block-size:100%;inline-size:100%;cursor:inherit;margin:0;position:absolute;inset:0}.b3-segmented>label:has(input:checked){background:var(--b3-color-surface);color:var(--b3-color-text);box-shadow:0 1px 2px #0000001f, 0 0 0 1px var(--b3-color-border)}.b3-segmented>label:has(input:focus-visible){box-shadow:inset 0 0 0 2px}@media (forced-colors:active){.b3-segmented>label{border:2px solid canvas}.b3-segmented>label:has(input:checked){border-color:canvastext}.b3-segmented>label:has(input:focus-visible){outline-offset:1px;outline:2px solid highlight}}.b3-segmented>label:has(input:disabled){opacity:.5;cursor:not-allowed}.b3-accordion{border-block-end:1px solid var(--b3-color-border)}.b3-accordion>summary{cursor:pointer;padding:1rem .25rem;font-weight:650}.b3-accordion>:not(summary){padding:0 .25rem 1rem}.b3-dropdown{display:inline-block;position:relative}.b3-dropdown>summary{list-style:none}.b3-dropdown>summary::-webkit-details-marker{display:none}.b3-dropdown-panel{z-index:20;border:1px solid var(--b3-color-border);border-radius:var(--b3-radius);background:var(--b3-color-surface);max-block-size:70svh;inline-size:max-content;min-inline-size:min(12rem,85vw);max-inline-size:min(22rem,85vw);color:var(--b3-color-text);box-shadow:var(--b3-shadow-raised);padding:.5rem;position:absolute;inset-block-start:calc(100% + .5rem);inset-inline-start:0;overflow-y:auto}.b3-dialog{overscroll-behavior:contain;border:1px solid var(--b3-color-border);border-radius:var(--b3-radius-large);background:var(--b3-color-surface);max-block-size:calc(100svh - 2rem);inline-size:min(32rem,100% - 2rem);color:var(--b3-color-text);box-shadow:var(--b3-shadow-raised);padding:min(1.5rem,5vi);overflow:auto}.b3-dialog::backdrop{background:#101b17a6}.b3-dialog[data-b3-placement=end]{border-radius:0;block-size:100svh;max-block-size:100svh;inline-size:min(28rem,100%);max-inline-size:100%;margin:0;margin-inline-start:auto}@media (prefers-reduced-motion:no-preference){.b3-dialog[open]{animation:.28s cubic-bezier(.16,1,.3,1) b3-dialog-enter}.b3-dialog[open][data-b3-placement=end]{animation-name:b3-drawer-enter}.b3-dialog::backdrop,.b3-sheet::backdrop{transition:opacity .16s ease-out}.b3-dialog[data-b3-closing]::backdrop,.b3-sheet[data-b3-closing]::backdrop{opacity:0}@keyframes b3-dialog-enter{0%{opacity:0;transform:translateY(8px)scale(.96)}}@keyframes b3-drawer-enter{0%{opacity:0;translate:var(--b3-drawer-offset,1rem)}}.b3-dialog[dir=rtl][data-b3-placement=end],[dir=rtl] .b3-dialog[data-b3-placement=end]{--b3-drawer-offset:-1rem}}.b3-dialog>form{gap:var(--b3-space);flex-direction:column;margin:0;display:flex}.b3-dialog>form>header:has(>button:last-child){grid-template-columns:minmax(0,1fr) auto;align-items:center;column-gap:.75rem;display:grid}.b3-dialog>form>header:has(>button:last-child)>:not(:last-child){grid-column:1;min-inline-size:0}.b3-dialog>form>header>button:last-child:not(:first-child){grid-area:1/2}.b3-dialog>form>footer{flex-wrap:wrap;justify-content:flex-end;align-items:center;gap:.75rem;display:flex}.b3-dialog>form>footer>[data-b3-emphasis=quiet]:first-child:not(:last-child){margin-inline-end:auto}.b3-tree,.b3-tree ul{overflow-wrap:anywhere;border-inline-start:1px solid var(--b3-color-border);padding-inline-start:min(1rem,5%);list-style:none}.b3-tree summary{cursor:pointer;padding-block:.5rem}.b3-prose{overflow-wrap:anywhere;max-inline-size:65ch;line-height:1.75}.b3-prose :is(p,ul,ol,blockquote,pre){margin-block:1rem}.b3-prose :is(h1,h2,h3,h4,h5,h6){margin-block:1.75rem .75rem;line-height:1.25}.b3-prose :is(h5,h6){font-size:1em}.b3-prose>:first-child{margin-block-start:0}.b3-prose img{block-size:auto}.b3-prose blockquote{border-inline-start:3px solid var(--b3-color-accent);color:var(--b3-color-muted);margin-inline:0;padding-inline-start:1rem}.b3-prose pre{background:var(--b3-color-surface);border:1px solid var(--b3-color-border);border-radius:var(--b3-radius-small);padding:1rem;overflow-x:auto}.b3-visually-hidden{clip-path:inset(50%);white-space:nowrap;block-size:1px;inline-size:1px;position:absolute;overflow:hidden}.b3-skip-link{z-index:1000;border-radius:var(--b3-radius-small);background:var(--b3-color-accent);max-inline-size:calc(100% - 1.5rem);color:var(--b3-color-on-accent);padding:.75rem 1rem;font-weight:650;position:fixed;inset-block-start:max(.75rem, env(safe-area-inset-top,0px));inset-inline-start:.75rem}.b3-skip-link:not(:focus){clip-path:inset(50%);white-space:nowrap;block-size:1px;inline-size:1px;padding:0;overflow:hidden}.b3-hero{grid-template-columns:repeat(2,minmax(0,1fr));align-items:center;gap:clamp(2rem,6vw,6rem);padding-block:clamp(3rem,8vw,7rem);display:grid}.b3-hero[data-b3-align=center]{text-align:center;grid-template-columns:minmax(0,1fr);justify-items:center}.b3-hero-copy{gap:1.5rem;max-inline-size:40rem;display:grid}.b3-feature{grid-template-columns:minmax(0,1fr) minmax(0,1fr);align-items:center;gap:clamp(1.5rem,5vw,5rem);padding-block:clamp(2rem,6vw,5rem);display:grid}.b3-feature[data-b3-reverse=true]>:first-child{order:2}.b3-feature-icon{border-radius:var(--b3-radius);background:var(--b3-color-accent);block-size:3rem;inline-size:3rem;color:var(--b3-color-on-accent);place-items:center;display:inline-grid}.b3-pricing{border:1px solid var(--b3-color-border);border-radius:var(--b3-radius-large);background:var(--b3-color-surface);color:var(--b3-color-text);flex-direction:column;gap:1.25rem;padding:clamp(1.25rem,3vw,2rem);display:flex}.b3-pricing[data-b3-featured=true]{border:2px solid var(--b3-color-accent);box-shadow:var(--b3-shadow)}.b3-pricing>.b3-button:last-child{margin-block-start:auto}.b3-price{font-variant-numeric:tabular-nums;flex-wrap:wrap;align-items:baseline;gap:.375rem;display:flex}.b3-price>strong{letter-spacing:-.05em;font-size:3.25rem;line-height:1.1}.b3-checklist{gap:.75rem;margin:0;padding:0;list-style:none;display:grid}.b3-checklist>li{align-items:start;gap:.625rem;display:flex}.b3-checklist>li:before{content:"✓";color:var(--b3-color-accent);font-weight:700}.b3-quote{border-inline-start:3px solid var(--b3-color-accent);margin:0;padding:1.5rem}.b3-quote blockquote{margin:0 0 1rem;font-size:1.25rem;line-height:1.5}.b3-art{isolation:isolate;border-radius:var(--b3-radius-large);background:var(--b3-color-surface);position:relative;overflow:hidden}.b3-art:before{content:"";z-index:-1;pointer-events:none;position:absolute;inset:0}.b3-art[data-b3-art=dots]:before{background-image:radial-gradient(var(--b3-color-border) 1px,transparent 1px);background-size:16px 16px}.b3-art[data-b3-art=glow]:before{background:radial-gradient(ellipse at 20% 20%,color-mix(in srgb,var(--b3-color-accent) 20%,transparent),transparent 65%)}.b3-art[data-b3-art=wash]:before{background:linear-gradient(135deg,color-mix(in srgb,var(--b3-color-accent) 14%,transparent),transparent 70%)}@media (width<=48rem){.b3-hero,.b3-feature{grid-template-columns:minmax(0,1fr)}.b3-feature[data-b3-reverse=true]>:first-child{order:initial}}.b3-reading{grid-template-columns:minmax(0,1fr) minmax(12rem,16rem);grid-template-areas:"content outline";align-items:start;gap:clamp(2rem,5vw,5rem);display:grid}.b3-reading>:not(.b3-toc){grid-area:content;min-inline-size:0}.b3-toc{max-block-size:calc(100svh - var(--b3-outline-top,1rem) - 1rem);border-inline-start:1px solid var(--b3-color-border);grid-area:outline;padding-inline-start:min(1rem,5%);font-size:.875rem;position:sticky;inset-block-start:var(--b3-outline-top,1rem);overflow-y:auto}.b3-toc ol{gap:.25rem;margin:.75rem 0 0;padding:0;list-style:none;display:grid}.b3-toc ol ol{margin:.25rem 0;padding-inline-start:min(1rem,5%)}.b3-toc-link{border-radius:var(--b3-radius-small);color:var(--b3-color-muted);overflow-wrap:anywhere;padding:.625rem min(.75rem,5%);text-decoration:none;display:block}.b3-toc-link:hover{color:var(--b3-color-text);background:var(--b3-color-surface)}.b3-toc-link[aria-current=location]{color:var(--b3-color-accent);background:color-mix(in srgb, var(--b3-color-accent) 10%, var(--b3-color-surface));font-weight:650}@media (width<=48rem){.b3-reading{grid-template-columns:minmax(0,1fr);grid-template-areas:"outline""content";gap:2rem}.b3-toc{max-block-size:none;position:static}}.b3-command{inline-size:min(38rem,100% - 2rem);padding:0}.b3-command[open]:has(>.b3-scroll){grid-template-rows:auto minmax(0,1fr);display:grid}.b3-command>.b3-scroll>.b3-command-list{max-block-size:none;overflow:visible}.b3-command-search{border-block-end:1px solid var(--b3-color-border);flex-wrap:wrap;justify-content:end;align-items:center;gap:.75rem;padding:min(1rem,4vw);display:flex}.b3-command-search>input{flex:12ch;min-inline-size:0}.b3-command-list{overscroll-behavior:contain;max-block-size:50svh;padding:.5rem;overflow-y:auto}.b3-command-group+.b3-command-group{border-block-start:1px solid var(--b3-color-border);margin-block-start:.5rem;padding-block-start:.5rem}.b3-command-group>:first-child:not([role=option]){color:var(--b3-color-muted);padding:.5rem .75rem;font-size:.75rem;display:block}.b3-command-item{border-radius:var(--b3-radius-small);cursor:pointer;justify-content:space-between;align-items:center;gap:min(1rem,2vw);min-block-size:2.75rem;padding:min(.875rem,2svh) min(.75rem,3vw);display:flex}.b3-command-item>:first-child{overflow-wrap:anywhere;min-inline-size:0}.b3-command-item[aria-selected=true]{background:var(--b3-color-accent);color:var(--b3-color-on-accent)}.b3-command-item[aria-selected=true] .b3-muted{color:inherit}.b3-command-item[aria-disabled=true]{opacity:.5;cursor:not-allowed}.b3-command-item:not([aria-disabled=true]):hover{outline:1px solid var(--b3-color-border);outline-offset:-1px}.b3-form-grid{grid-template-columns:repeat(auto-fit,minmax(min(100%,14rem),1fr));align-items:start;gap:1.25rem;display:grid}.b3-form-grid[data-b3-layout=inline]{flex-wrap:wrap;align-items:end;display:flex}.b3-form-grid[data-b3-layout=inline]>.b3-field{flex:12rem;min-inline-size:0}.b3-form-grid[data-b3-layout=inline]>.b3-button{overflow-wrap:anywhere;flex:0 auto;max-inline-size:100%}.b3-fieldset{border:0;min-inline-size:0;margin:0;padding:0}.b3-fieldset>legend{padding:0 0 .75rem;font-weight:650}.b3-help{color:var(--b3-color-muted);font-size:.875rem}.b3-help[data-b3-tone=success]{color:var(--b3-color-success)}.b3-help[data-b3-tone=warning]{color:var(--b3-color-warning)}.b3-input[data-b3-size=small]{padding:.5rem .75rem}.b3-input[data-b3-size=large]{min-block-size:3.25rem;padding:.875rem 1rem}.b3-input[data-b3-emphasis=subtle]{background-color:var(--b3-color-canvas);border-color:#0000}.b3-input[data-b3-emphasis=outline]{background-color:#0000;border-width:2px}.b3-input[data-b3-tone=success]{border-color:var(--b3-color-success)}.b3-input[data-b3-tone=warning]{border-color:var(--b3-color-warning)}.b3-input[aria-invalid=true]{border-color:var(--b3-color-danger)}textarea.b3-input{resize:vertical}select.b3-input[multiple]{min-block-size:8rem}.b3-input[type=file]{padding:.375rem}.b3-input::file-selector-button{font:inherit;border-radius:var(--b3-radius-small);background:var(--b3-color-accent);color:var(--b3-color-on-accent);cursor:pointer;border:0;margin-inline-end:.75rem;padding:.5rem .75rem}.b3-input[type=color]{inline-size:5rem;padding:.25rem}.b3-range{min-block-size:2.75rem;inline-size:100%;accent-color:var(--b3-color-accent);margin:0}.b3-choice-card{border:1px solid var(--b3-color-border);border-radius:var(--b3-radius);background:var(--b3-color-surface);color:var(--b3-color-text);cursor:pointer;align-items:start;gap:.75rem;padding:1rem;display:flex}.b3-choice-card>input{flex:none;block-size:1.125rem;inline-size:1.125rem;margin-block-start:.3rem}.b3-choice-card:has(input:checked){border-color:var(--b3-color-accent);background:color-mix(in srgb, var(--b3-color-accent) 7%, var(--b3-color-surface));box-shadow:inset 0 0 0 1px var(--b3-color-accent)}.b3-choice-card:has(input:focus-visible){outline:none;box-shadow:inset 0 0 0 2px}.b3-choice-card:has(input:disabled){opacity:.5;cursor:not-allowed}.b3-choice-card:has(input[aria-invalid=true]){border-color:var(--b3-color-danger)}.b3-range[aria-invalid=true]{accent-color:var(--b3-color-danger)}.b3-stepper{flex-wrap:wrap;gap:1rem 2rem;margin:0;padding:0;list-style:none;display:flex}.b3-step{color:var(--b3-color-muted);align-items:center;gap:.625rem;font-size:.875rem;display:flex}.b3-step-marker{border:1px solid var(--b3-color-border);font-variant-numeric:tabular-nums;border-radius:50%;flex:none;place-items:center;block-size:2rem;inline-size:2rem;display:grid}.b3-step[aria-current=step]{color:var(--b3-color-text);font-weight:650}.b3-step[aria-current=step] .b3-step-marker{background:var(--b3-color-accent);color:var(--b3-color-on-accent);border-color:var(--b3-color-accent)}.b3-step[data-b3-complete=true] .b3-step-marker{border-color:var(--b3-color-success);color:var(--b3-color-success)}.b3-conversation{gap:1.5rem;min-inline-size:0;margin:0;padding:0;list-style:none;display:grid}.b3-message{grid-template-columns:minmax(0,1fr);justify-self:start;gap:.375rem;min-inline-size:0;max-inline-size:min(85%,38rem);display:grid}.b3-message[data-b3-side=self]{justify-self:end}.b3-message-body{border:1px solid var(--b3-color-border);border-radius:var(--b3-radius);background:var(--b3-color-surface);color:var(--b3-color-text);white-space:pre-wrap;overflow-wrap:anywhere;padding:.875rem min(1rem,5%)}.b3-message[data-b3-side=self]>.b3-message-body{background:var(--b3-color-accent);color:var(--b3-color-on-accent);border-color:#0000}.b3-message-meta{color:var(--b3-color-muted);flex-wrap:wrap;gap:.35rem .75rem;font-size:.8125rem;display:flex}.b3-message[data-b3-side=self]>.b3-message-meta{justify-content:end}.b3-conversation{align-content:start}.b3-message-body:has(>:is(div,p,ul,ol,table,pre,blockquote,b3-markdown-stream)){white-space:normal}.b3-composer{align-items:end;gap:var(--b3-space-2);padding:var(--b3-space-3);border-block-start:1px solid var(--b3-color-border);background:var(--b3-color-canvas);grid-template-columns:minmax(0,1fr) auto;display:grid}.b3-composer>.b3-input,.b3-composer>.b3-button{border-radius:var(--b3-radius);min-block-size:var(--b3-d-control,2.75rem)}.b3-composer>.b3-input{resize:none;padding-block:calc((var(--b3-d-control,2.75rem) - 1.5em - 2px) / 2);line-height:1.5}.b3-composer>.b3-button{block-size:var(--b3-d-control,2.75rem);min-inline-size:var(--b3-d-control,2.75rem)}.b3-mobile-app{--b3-touch:44px;min-block-size:100svh;max-inline-size:var(--b3-app-width,70rem);margin-inline:auto;padding-block-end:calc(5.5rem + env(safe-area-inset-bottom,0px))}.b3-mobile-app[data-b3-platform=android]{--b3-touch:48px}.b3-mobile-app :where(button,.b3-button,select,input:not([type=checkbox],[type=radio])){min-block-size:var(--b3-touch)}.b3-app-bar{padding:max(.75rem, env(safe-area-inset-top,0px)) 1.25rem .75rem;align-items:center;gap:.75rem;display:flex}.b3-app-bar>:last-child:not(:first-child){margin-inline-start:auto}.b3-bottom-nav{z-index:10;max-inline-size:var(--b3-app-width,70rem);padding:.5rem clamp(.5rem, 2vw, 1rem) max(.5rem, env(safe-area-inset-bottom,0px));background:var(--b3-color-surface);color:var(--b3-color-text);border-block-start:1px solid var(--b3-color-border);flex-wrap:wrap;justify-content:space-around;gap:.5rem;margin-inline:auto;display:flex;position:fixed;inset-block-end:0;inset-inline:0}.b3-bottom-link{appearance:none;cursor:pointer;overflow-wrap:anywhere;text-align:center;min-block-size:var(--b3-touch,44px);min-inline-size:0;color:var(--b3-color-muted);background:0 0;border:0;border-radius:1rem;flex-direction:column;flex:5ch;justify-content:center;align-items:center;gap:.15rem;padding:.25rem clamp(.125rem,1vw,.5rem);font-size:.75rem;text-decoration:none;display:flex}.b3-bottom-link:disabled{opacity:.5;cursor:not-allowed}.b3-bottom-link:has(svg){justify-content:flex-start}.b3-bottom-link[aria-current=page]{color:var(--b3-color-accent);font-weight:700}[data-b3-platform=android] .b3-bottom-link[aria-current=page]{background:var(--b3-color-canvas)}.b3-mobile-list{border:1px solid var(--b3-color-border);background:var(--b3-color-surface);border-radius:1rem;margin:0;padding:0;list-style:none;overflow:hidden}.b3-mobile-list>li+li{border-block-start:1px solid var(--b3-color-border)}.b3-mobile-row{min-block-size:var(--b3-touch,44px);color:var(--b3-color-text);align-items:center;gap:1rem;padding:.875rem 1rem;text-decoration:none;display:flex}.b3-mobile-row>:last-child:not(:first-child){margin-inline-start:auto}.b3-sheet{inline-size:min(100%, var(--b3-overlay-width,32rem));max-inline-size:none;max-block-size:min(85dvh, calc(100dvh - env(safe-area-inset-top,0px) - 1rem));overscroll-behavior:contain;border:1px solid var(--b3-color-border);padding:1.5rem min(1.5rem, 5vi) max(1.5rem, env(safe-area-inset-bottom,0px));background:var(--b3-color-surface);color:var(--b3-color-text);border-radius:1.5rem 1.5rem 0 0;margin:0 auto;inset:auto 0 0;overflow-y:auto}.b3-sheet::backdrop{background:#0007}.b3-sheet [data-b3-initial-focus]:focus{box-shadow:none;outline:none}.b3-sheet-handle{min-block-size:44px;inline-size:5rem;color:var(--b3-color-muted);touch-action:none;cursor:grab;background:0 0;border:0;border-radius:1rem;flex:none;align-self:center;place-items:center;margin-block:-1rem -.5rem;padding:0;display:grid}.b3-sheet-handle:before{content:"";background:currentColor;border-radius:1rem;block-size:.25rem;inline-size:2.25rem}.b3-sheet[data-b3-dragging]{animation:none}.b3-sheet[data-b3-dragging] .b3-sheet-handle{cursor:grabbing}[data-b3-platform=android] .b3-mobile-list{border-radius:1.5rem}@media (prefers-reduced-motion:no-preference){.b3-sheet[open]{animation:.32s cubic-bezier(.16,1,.3,1) b3-sheet-enter}@keyframes b3-sheet-enter{0%{opacity:0;transform:translateY(3rem)}to{opacity:1;transform:translateY(0)}}}.b3-root:has(dialog:modal){overflow:hidden}.b3-bottom-link[aria-current=page]{background:color-mix(in srgb, var(--b3-color-accent) 12%, transparent)}.b3-bottom-link :where(svg:not([width])){flex:none;block-size:1.375rem;inline-size:1.375rem}.b3-app-frame{inline-size:100%;block-size:var(--b3-frame-height,100dvh);min-block-size:0;max-inline-size:var(--b3-app-width,70rem);padding:env(safe-area-inset-top,0px) env(safe-area-inset-right,0px) env(safe-area-inset-bottom,0px) env(safe-area-inset-left,0px);grid-template-rows:auto minmax(0,1fr) auto;margin-inline:auto;display:grid;overflow:clip}.b3-app-frame>header{grid-row:1;min-inline-size:0}.b3-app-frame>main{overscroll-behavior:contain;grid-area:2/1;min-block-size:0;min-inline-size:0;overflow:auto}.b3-app-frame>:is(nav,footer){grid-row:3;min-inline-size:0;position:relative}.b3-app-frame>.b3-toast-region{overscroll-behavior:contain;grid-area:2/1;place-self:end;min-block-size:0;max-block-size:calc(100% - 2rem);margin:1rem;position:relative;inset:auto;overflow-y:auto}.b3-app-frame>.b3-app-bar{padding-block-start:.75rem}.b3-app-frame:has(>.b3-bottom-nav,>footer .b3-bottom-nav){padding-block-end:0}.b3-app-frame .b3-bottom-nav{inline-size:100%;max-inline-size:none;padding-block-end:max(.5rem, env(safe-area-inset-bottom,0px));position:static}:where(.b3-root[data-b3-density]) .b3-button{min-block-size:var(--b3-d-control,2.75rem);padding:var(--b3-d-pad-block,.625rem) var(--b3-d-pad-inline,1rem);font-size:var(--b3-d-label,inherit)}:where(.b3-root[data-b3-density]) .b3-button[data-b3-size=small]{min-block-size:var(--b3-d-control-small,auto);padding:calc(var(--b3-d-pad-block,.5rem) - .125rem) calc(var(--b3-d-pad-inline,.75rem) - .25rem)}:where(.b3-root[data-b3-density]) .b3-input{min-block-size:var(--b3-d-control,2.75rem);padding:calc((var(--b3-d-control,2.75rem) - 1.5em - 2px) / 2) .75rem;line-height:1.5}:where(.b3-root[data-b3-density]) .b3-nav-link{min-block-size:var(--b3-d-control,2.75rem);padding:var(--b3-d-pad-block,.625rem) var(--b3-d-pad-inline,.875rem);font-size:var(--b3-d-label,inherit)}:where(.b3-root[data-b3-density]) .b3-heading{font-size:var(--b3-d-heading,1.375rem)}:where(.b3-root[data-b3-density]) .b3-avatar{block-size:var(--b3-d-avatar,2.5rem);inline-size:var(--b3-d-avatar,2.5rem)}:where(.b3-root[data-b3-density]) .b3-conversation{gap:var(--b3-d-gap,1.5rem)}:where(.b3-root[data-b3-density]) .b3-message-body{padding:var(--b3-d-message-pad,.875rem min(1rem, 5%))}:where(.b3-root[data-b3-density]) .b3-message-meta{font-size:var(--b3-d-meta,.8125rem)}.b3-button[data-b3-emphasis=ghost]{color:var(--b3-color-muted);background:0 0;border-color:#0000}.b3-button[data-b3-emphasis=ghost]:not(:disabled):hover{color:var(--b3-color-text)}.b3-button[data-b3-emphasis=ghost][aria-pressed=true]{color:var(--b3-color-accent)}.b3-button[data-b3-icon]{min-inline-size:var(--b3-d-control,2.75rem);padding-inline:0}:where(.b3-root[data-b3-density]) .b3-button[data-b3-icon][data-b3-size=small]{min-inline-size:var(--b3-d-control-small,2.25rem)}.b3-button:disabled{opacity:1;background:color-mix(in srgb, var(--b3-color-muted) 14%, var(--b3-color-surface));color:var(--b3-color-muted);border-color:#0000}.b3-button[data-b3-emphasis=ghost]:disabled{background:0 0}.b3-truncate{white-space:nowrap;text-overflow:ellipsis;min-inline-size:0;overflow:hidden}.b3-strong{font-size:inherit;font-weight:650}.b3-caption{color:var(--b3-color-muted);font-size:.8125rem;line-height:1.4}.b3-heading[data-b3-size=small]{font-size:1.0625rem;line-height:1.3}:is(a,button).b3-caption{color:var(--b3-color-accent);cursor:pointer;text-underline-offset:.15em;background:0 0;border:0;padding:0}:is(a,button).b3-caption:is(:hover,:focus-visible){text-decoration:underline}:where(.b3-root[data-b3-density]) .b3-caption{font-size:var(--b3-d-meta,.8125rem)}.b3-badge{gap:.25rem}:where(.b3-root[data-b3-density]) .b3-surface{padding:var(--b3-d-surface-pad,clamp(1rem, 3vw, 2rem))}.b3-input-group,.b3-input-group>.b3-input-affix,.b3-input-group>.b3-input{background:var(--b3-color-surface)}.b3-root[data-b3-theme=dark] .b3-message[data-b3-side=self]>.b3-message-body{background:color-mix(in srgb, var(--b3-color-accent) 22%, var(--b3-color-surface));color:var(--b3-color-text)}.b3-empty{justify-items:center;gap:var(--b3-space-2);padding:var(--b3-space-12) var(--b3-space-4);text-align:center;color:var(--b3-color-muted);display:grid}.b3-empty>svg{color:var(--b3-color-muted)}}@property --b3-reel-fade{syntax:"<length>";inherits:false;initial-value:2.5rem}
|
package/dist/manifest.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "0.1.0-alpha.
|
|
3
|
-
"cssSha256": "
|
|
2
|
+
"version": "0.1.0-alpha.64",
|
|
3
|
+
"cssSha256": "622254b56b3644cf9ca1d81b23fff37b6c6e5a79710a737876b74d1b7d960e59",
|
|
4
4
|
"classes": [
|
|
5
5
|
"b3-accordion",
|
|
6
6
|
"b3-alert",
|
|
@@ -15,18 +15,21 @@
|
|
|
15
15
|
"b3-bottom-nav",
|
|
16
16
|
"b3-breadcrumbs",
|
|
17
17
|
"b3-button",
|
|
18
|
+
"b3-caption",
|
|
18
19
|
"b3-card-footer",
|
|
19
20
|
"b3-card-header",
|
|
20
21
|
"b3-center",
|
|
21
22
|
"b3-checklist",
|
|
22
23
|
"b3-choice",
|
|
23
24
|
"b3-choice-card",
|
|
25
|
+
"b3-clamp",
|
|
24
26
|
"b3-cluster",
|
|
25
27
|
"b3-command",
|
|
26
28
|
"b3-command-group",
|
|
27
29
|
"b3-command-item",
|
|
28
30
|
"b3-command-list",
|
|
29
31
|
"b3-command-search",
|
|
32
|
+
"b3-composer",
|
|
30
33
|
"b3-conversation",
|
|
31
34
|
"b3-cover",
|
|
32
35
|
"b3-definition",
|
|
@@ -34,6 +37,7 @@
|
|
|
34
37
|
"b3-divider",
|
|
35
38
|
"b3-dropdown",
|
|
36
39
|
"b3-dropdown-panel",
|
|
40
|
+
"b3-empty",
|
|
37
41
|
"b3-error",
|
|
38
42
|
"b3-feature",
|
|
39
43
|
"b3-feature-icon",
|
|
@@ -89,6 +93,7 @@
|
|
|
89
93
|
"b3-step",
|
|
90
94
|
"b3-step-marker",
|
|
91
95
|
"b3-stepper",
|
|
96
|
+
"b3-strong",
|
|
92
97
|
"b3-surface",
|
|
93
98
|
"b3-switch",
|
|
94
99
|
"b3-tab",
|
|
@@ -102,6 +107,7 @@
|
|
|
102
107
|
"b3-toc",
|
|
103
108
|
"b3-toc-link",
|
|
104
109
|
"b3-tree",
|
|
110
|
+
"b3-truncate",
|
|
105
111
|
"b3-visually-hidden"
|
|
106
112
|
],
|
|
107
113
|
"contracts": [
|
|
@@ -111,7 +117,7 @@
|
|
|
111
117
|
"classes": [
|
|
112
118
|
"b3-root"
|
|
113
119
|
],
|
|
114
|
-
"guidance": "Place b3-root on html to synchronize the document canvas and native controls. Set data-b3-theme=\"dark\" explicitly for dark mode.
|
|
120
|
+
"guidance": "Place b3-root on html to synchronize the document canvas and native controls. Set data-b3-theme=\"dark\" explicitly for dark mode. A nested root inherits its parent theme and tokens; set data-b3-theme on it only to force a different theme. Override complete CSS values in --b3-* properties. Consumer CSS is unlayered and wins over library defaults. Scope custom palette overrides to each theme: unlayered :root token overrides beat layered library dark defaults. Use .b3-root:not([data-b3-theme=\"dark\"]) for light-only colors and .b3-root[data-b3-theme=\"dark\"] for dark overrides. Set foreground/background pairs together. Density: data-b3-density=\"compact\" on the root tightens controls, nav, headings, avatars and messages for pointer-first apps; \"auto\" applies it only under a fine pointer on a wide viewport and keeps touch sizing on phones.",
|
|
115
121
|
"example": "<html class=\"b3-root\" data-b3-theme=\"dark\">"
|
|
116
122
|
},
|
|
117
123
|
{
|
|
@@ -136,9 +142,13 @@
|
|
|
136
142
|
"b3-title",
|
|
137
143
|
"b3-heading",
|
|
138
144
|
"b3-muted",
|
|
139
|
-
"b3-label"
|
|
145
|
+
"b3-label",
|
|
146
|
+
"b3-truncate",
|
|
147
|
+
"b3-caption",
|
|
148
|
+
"b3-strong",
|
|
149
|
+
"b3-clamp"
|
|
140
150
|
],
|
|
141
|
-
"guidance": "Use a single visual title and native heading hierarchy. Heading level describes document structure, not visual size. For prominent product sections, reuse one authored heading style; keep task panels and overlays compact. Check long words with enlarged text. Muted is secondary readable text. Label styling is optional and does not create a form label. Use b3-heading for dialog and sheet headings; b3-title is page-scale and should not be nested in a narrow overlay.",
|
|
151
|
+
"guidance": "Use a single visual title and native heading hierarchy. Heading level describes document structure, not visual size. For prominent product sections, reuse one authored heading style; keep task panels and overlays compact. Check long words with enlarged text. Muted is secondary readable text. Label styling is optional and does not create a form label. Use b3-heading for dialog and sheet headings; b3-title is page-scale and should not be nested in a narrow overlay. b3-truncate keeps one line with an ellipsis inside a flex or grid row (list previews, titles); put the full text in a title or the detail view. b3-caption is secondary small text (subtitles, timestamps, list previews); b3-muted only changes colour. Type roles: assign every text element one role and use the same class for it everywhere — title = b3-heading; body = unclassed text; body-strong = b3-strong (names, emphasised content; body size); label = the control itself (b3-button, b3-nav-link, b3-bottom-link); caption = b3-caption (timestamps, counts, subtitles, previews). The same datum (e.g. a timestamp) is always the same role. In a bar or header use b3-heading data-b3-size=\"small\" (toolbar-scale title on every density). A caption that acts (reply count, \"show more\") is a.b3-caption or button.b3-caption: accent colour, underline on hover/focus. b3-clamp cuts multi-line text to --b3-clamp lines (default 2) with an ellipsis. Caption is 13px at touch density and 12px at compact density (by design: meta shrinks with controls).",
|
|
142
152
|
"example": "<h1 class=\"b3-title\">Today, intentionally.</h1>"
|
|
143
153
|
},
|
|
144
154
|
{
|
|
@@ -147,7 +157,7 @@
|
|
|
147
157
|
"classes": [
|
|
148
158
|
"b3-surface"
|
|
149
159
|
],
|
|
150
|
-
"guidance": "Use surfaces to group meaningful content, not around every row. Use dividers or whitespace when a panel would add noise.",
|
|
160
|
+
"guidance": "Use surfaces to group meaningful content, not around every row. Use dividers or whitespace when a panel would add noise. Density tightens surface padding to 1rem.",
|
|
151
161
|
"example": "<section class=\"b3-surface\" aria-labelledby=\"heading\"><h2 id=\"heading\">History</h2></section>"
|
|
152
162
|
},
|
|
153
163
|
{
|
|
@@ -156,7 +166,7 @@
|
|
|
156
166
|
"classes": [
|
|
157
167
|
"b3-button"
|
|
158
168
|
],
|
|
159
|
-
"guidance": "Use native button for actions, anchor for navigation. data-b3-emphasis=\"quiet\" is a secondary action. Native disabled prevents activation. App owns click behavior. Icon-only actions need an accessible name. Emphasis: primary (default), quiet, outline, danger. Sizes small/default/large retain touch-height floors. aria-busy conveys loading but does not disable clicks; set disabled while duplicate submission must be prevented. SVG icons, including span-wrapped icons, are centered without baseline offsets. Mark decorative icon wrappers aria-hidden=true; direct SVG wrappers retain their width when button text wraps. Keyboard focus uses an inset current-color treatment rather than a detached blue outline; pointer/tap does not add a focus ring.",
|
|
169
|
+
"guidance": "Use native button for actions, anchor for navigation. data-b3-emphasis=\"quiet\" is a secondary action. Native disabled prevents activation. App owns click behavior. Icon-only actions need an accessible name. Emphasis: primary (default), quiet, outline, danger, ghost (borderless, for toolbars and icon-only actions). Mark an icon-only button data-b3-icon (with aria-label): it is square at the control height. Disabled buttons read as unavailable (muted fill and text) in every emphasis. Sizes small/default/large retain touch-height floors. aria-busy conveys loading but does not disable clicks; set disabled while duplicate submission must be prevented. SVG icons, including span-wrapped icons, are centered without baseline offsets. Mark decorative icon wrappers aria-hidden=true; direct SVG wrappers retain their width when button text wraps. Keyboard focus uses an inset current-color treatment rather than a detached blue outline; pointer/tap does not add a focus ring.",
|
|
160
170
|
"example": "<button class=\"b3-button\" type=\"submit\">Save entry</button>"
|
|
161
171
|
},
|
|
162
172
|
{
|
|
@@ -176,7 +186,7 @@
|
|
|
176
186
|
"classes": [
|
|
177
187
|
"b3-row"
|
|
178
188
|
],
|
|
179
|
-
"guidance": "Use li inside ul/ol. Direct b3-row children remove native list indentation; ordinary prose lists keep it. The row supplies spacing/dividers; app code owns state, ordering and persistence.\n\nComposition: for a short label plus actions, use b3-row b3-split. For supporting notes, use the stacked example below: b3-row b3-stack stretches children and honors --b3-space; a nested b3-split holds primary metadata/value/actions, and the note gets the full width below. Avoid squeezing long notes beside fixed controls. Inset content only when adding an enclosing border/surface. Keep secondary actions readable and visually subordinate.\n\nLists: show useful rows before large summaries, with a short count and truthful empty state. Never invent user history. If reviewing is primary, use one disclosed add flow (native details/summary with b3-accordion); read form-composition.md. Task queues should show compact rows and reveal editing fields only for the edited item. Use existing disclosure/dialog semantics, not new density utilities. Check populated phone/desktop layouts, long notes and internal overflow.\n\nEditing: keep focused controls and caret/selection stable. Save drafts synchronously before replacing rows. Keep an edited row present while focus remains inside it, even if it stops matching a filter; read editable-filtered-rows.md for Tab/blur and exit timing. Give controls immutable identity independent of changing labels/actions: Edit → Done → Edit must reopen correctly. Checkbox completion: update the existing input/row and counts in place; never rebuild the list on change. If filtering hides the focused row, focus the next visible checkbox or stable add/filter control. See the concrete checkbox pattern in editable-filtered-rows.md. After deletion focus a surviving action or add control. Verify activeElement and persisted values, not just page width. Playground #row resets local state on reload.",
|
|
189
|
+
"guidance": "Use li inside ul/ol. Direct b3-row children remove native list indentation; ordinary prose lists keep it. The row supplies spacing/dividers; app code owns state, ordering and persistence.\n\nComposition: for a short label plus actions, use b3-row b3-split. For supporting notes, use the stacked example below: b3-row b3-stack stretches children and honors --b3-space; a nested b3-split holds primary metadata/value/actions, and the note gets the full width below. Avoid squeezing long notes beside fixed controls. Inset content only when adding an enclosing border/surface. Keep secondary actions readable and visually subordinate.\n\nLists: show useful rows before large summaries, with a short count and truthful empty state. Never invent user history. If reviewing is primary, use one disclosed add flow (native details/summary with b3-accordion); read form-composition.md. Task queues should show compact rows and reveal editing fields only for the edited item. Use existing disclosure/dialog semantics, not new density utilities. Check populated phone/desktop layouts, long notes and internal overflow.\n\nEditing: keep focused controls and caret/selection stable. Save drafts synchronously before replacing rows. Keep an edited row present while focus remains inside it, even if it stops matching a filter; read editable-filtered-rows.md for Tab/blur and exit timing. Give controls immutable identity independent of changing labels/actions: Edit → Done → Edit must reopen correctly. Checkbox completion: update the existing input/row and counts in place; never rebuild the list on change. If filtering hides the focused row, focus the next visible checkbox or stable add/filter control. See the concrete checkbox pattern in editable-filtered-rows.md. After deletion focus a surviving action or add control. Verify activeElement and persisted values, not just page width. Playground #row resets local state on reload. A row that opens something is itself the target: a.b3-row, button.b3-row or [role=\"button\"].b3-row gets inline padding, hover and active fills. For a list of conversation threads, use one such row per thread: sender + time, the opening text in b3-clamp, and a caption line with the reply count as an interactive caption.",
|
|
180
190
|
"example": "<ul>\n <li class=\"b3-row b3-stack\" style=\"--b3-space:.5rem\">\n <div class=\"b3-split\">\n <strong>Groceries</strong>\n <div class=\"b3-cluster\">\n <strong>$12.50</strong>\n <button class=\"b3-button\" data-b3-emphasis=\"quiet\" aria-label=\"Details for groceries\">Details</button>\n </div>\n </div>\n <p class=\"b3-muted\">Weekly shop and supplies for the shared kitchen.</p>\n </li>\n</ul>"
|
|
181
191
|
},
|
|
182
192
|
{
|
|
@@ -235,9 +245,10 @@
|
|
|
235
245
|
"b3-toast-region",
|
|
236
246
|
"b3-toast",
|
|
237
247
|
"b3-spinner",
|
|
238
|
-
"b3-skeleton"
|
|
248
|
+
"b3-skeleton",
|
|
249
|
+
"b3-empty"
|
|
239
250
|
],
|
|
240
|
-
"guidance": "Alert data-b3-tone supports info, success, warning, danger. Include explanatory text; icons/color alone are insufficient. Add role=alert only for urgent dynamic messages. Toast region uses aria-live=polite and toast dismissal data-b3-dismiss with mount(). When a focused toast is dismissed, focus moves to a surviving dismiss control, then the element ID in data-b3-return-focus on the toast or region; a region with tabindex=-1 is the final fallback. Declare a surviving return target; background dismissal does not steal focus. No automatic timers are imposed. In a b3-app-frame, place b3-toast-region as a direct sibling of main and nav; it overlays the content row above navigation without reserving extra height. A tall toast stack scrolls within that content row, keeping header and navigation accessible. Outside an app frame the region remains viewport-fixed; authors must account for other fixed controls. Spinner/skeleton need a separate accessible loading description; decorative shapes use aria-hidden. Reduced motion uses root defaults. Long unbroken message text wraps within alert/toast bounds. For recovery actions, compose native buttons inside a cluster. The app owns alert dismissal, retry state and focus return; removing a focused message should move focus to a surviving meaningful control. The feedback specimen demonstrates retry, dismissal and reset without remote delivery.",
|
|
251
|
+
"guidance": "Alert data-b3-tone supports info, success, warning, danger. Include explanatory text; icons/color alone are insufficient. Add role=alert only for urgent dynamic messages. Toast region uses aria-live=polite and toast dismissal data-b3-dismiss with mount(). When a focused toast is dismissed, focus moves to a surviving dismiss control, then the element ID in data-b3-return-focus on the toast or region; a region with tabindex=-1 is the final fallback. Declare a surviving return target; background dismissal does not steal focus. No automatic timers are imposed. In a b3-app-frame, place b3-toast-region as a direct sibling of main and nav; it overlays the content row above navigation without reserving extra height. A tall toast stack scrolls within that content row, keeping header and navigation accessible. Outside an app frame the region remains viewport-fixed; authors must account for other fixed controls. Spinner/skeleton need a separate accessible loading description; decorative shapes use aria-hidden. Reduced motion uses root defaults. Long unbroken message text wraps within alert/toast bounds. For recovery actions, compose native buttons inside a cluster. The app owns alert dismissal, retry state and focus return; removing a focused message should move focus to a surviving meaningful control. The feedback specimen demonstrates retry, dismissal and reset without remote delivery. b3-empty is an empty state: a centred block with an optional icon, one line of body text and an optional action. Say what is empty and what the person can do.",
|
|
241
252
|
"example": "<div class=\"b3-alert\" data-b3-tone=\"warning\"><div><strong>Check your input</strong><p>Enter a valid email address.</p></div></div><div class=\"b3-toast-region\" aria-live=\"polite\"><div class=\"b3-toast\"><p>Changes saved.</p><button class=\"b3-button\" data-b3-dismiss>Dismiss</button></div></div>"
|
|
242
253
|
},
|
|
243
254
|
{
|
|
@@ -407,9 +418,10 @@
|
|
|
407
418
|
"b3-conversation",
|
|
408
419
|
"b3-message",
|
|
409
420
|
"b3-message-body",
|
|
410
|
-
"b3-message-meta"
|
|
421
|
+
"b3-message-meta",
|
|
422
|
+
"b3-composer"
|
|
411
423
|
],
|
|
412
|
-
"guidance": "Use an ordered list for chronological messages with authored sender labels and time elements. data-b3-side=self mirrors alignment in RTL and uses on-accent text. Message bodies preserve line breaks and wrap long content. For rich replies, keep wide tables inside b3-table-wrap so they scroll within the message rather than widening the conversation. App owns delivery state, persistence, safe text rendering, scroll position and focus. Announce newly added messages through a separate concise status region; do not mark the full restored history live. Never imply a reply was delivered remotely when only local storage succeeded. Recording, attachments, streaming and retries are not provided by these presentation classes.",
|
|
424
|
+
"guidance": "Use an ordered list for chronological messages with authored sender labels and time elements. data-b3-side=self mirrors alignment in RTL and uses on-accent text. Message bodies preserve line breaks and wrap long content. For rich replies, keep wide tables inside b3-table-wrap so they scroll within the message rather than widening the conversation. App owns delivery state, persistence, safe text rendering, scroll position and focus. Announce newly added messages through a separate concise status region; do not mark the full restored history live. Never imply a reply was delivered remotely when only local storage succeeded. Recording, attachments, streaming and retries are not provided by these presentation classes. A body whose direct children are blocks (rendered markdown) lays out as prose; text-only bodies preserve line breaks. Bodies cap at a readable measure; density tightens padding, meta and rhythm. b3-composer is the message row under a conversation: a direct textarea.b3-input plus one b3-button; they share height and radius and the action stays on the last line as the field grows. Add a safe-area inset to its block-end padding when it touches the screen edge.",
|
|
413
425
|
"example": "<ol class=\"b3-conversation\" aria-label=\"Messages\"><li class=\"b3-message\" data-b3-side=\"self\"><p class=\"b3-message-body\">Happy to help.</p><div class=\"b3-message-meta\"><span>You</span><time datetime=\"2026-09-08T09:14:00Z\">09:14 UTC</time></div></li></ol>"
|
|
414
426
|
},
|
|
415
427
|
{
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Action
|
|
2
2
|
|
|
3
|
-
Use native button for actions, anchor for navigation. data-b3-emphasis="quiet" is a secondary action. Native disabled prevents activation. App owns click behavior. Icon-only actions need an accessible name. Emphasis: primary (default), quiet, outline, danger. Sizes small/default/large retain touch-height floors. aria-busy conveys loading but does not disable clicks; set disabled while duplicate submission must be prevented. SVG icons, including span-wrapped icons, are centered without baseline offsets. Mark decorative icon wrappers aria-hidden=true; direct SVG wrappers retain their width when button text wraps. Keyboard focus uses an inset current-color treatment rather than a detached blue outline; pointer/tap does not add a focus ring.
|
|
3
|
+
Use native button for actions, anchor for navigation. data-b3-emphasis="quiet" is a secondary action. Native disabled prevents activation. App owns click behavior. Icon-only actions need an accessible name. Emphasis: primary (default), quiet, outline, danger, ghost (borderless, for toolbars and icon-only actions). Mark an icon-only button data-b3-icon (with aria-label): it is square at the control height. Disabled buttons read as unavailable (muted fill and text) in every emphasis. Sizes small/default/large retain touch-height floors. aria-busy conveys loading but does not disable clicks; set disabled while duplicate submission must be prevented. SVG icons, including span-wrapped icons, are centered without baseline offsets. Mark decorative icon wrappers aria-hidden=true; direct SVG wrappers retain their width when button text wraps. Keyboard focus uses an inset current-color treatment rather than a detached blue outline; pointer/tap does not add a focus ring.
|
|
4
4
|
|
|
5
5
|
Classes: b3-button
|
|
6
6
|
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
# Conversation messages
|
|
2
2
|
|
|
3
|
-
Use an ordered list for chronological messages with authored sender labels and time elements. data-b3-side=self mirrors alignment in RTL and uses on-accent text. Message bodies preserve line breaks and wrap long content. For rich replies, keep wide tables inside b3-table-wrap so they scroll within the message rather than widening the conversation. App owns delivery state, persistence, safe text rendering, scroll position and focus. Announce newly added messages through a separate concise status region; do not mark the full restored history live. Never imply a reply was delivered remotely when only local storage succeeded. Recording, attachments, streaming and retries are not provided by these presentation classes.
|
|
3
|
+
Use an ordered list for chronological messages with authored sender labels and time elements. data-b3-side=self mirrors alignment in RTL and uses on-accent text. Message bodies preserve line breaks and wrap long content. For rich replies, keep wide tables inside b3-table-wrap so they scroll within the message rather than widening the conversation. App owns delivery state, persistence, safe text rendering, scroll position and focus. Announce newly added messages through a separate concise status region; do not mark the full restored history live. Never imply a reply was delivered remotely when only local storage succeeded. Recording, attachments, streaming and retries are not provided by these presentation classes. A body whose direct children are blocks (rendered markdown) lays out as prose; text-only bodies preserve line breaks. Bodies cap at a readable measure; density tightens padding, meta and rhythm. b3-composer is the message row under a conversation: a direct textarea.b3-input plus one b3-button; they share height and radius and the action stays on the last line as the field grows. Add a safe-area inset to its block-end padding when it touches the screen edge.
|
|
4
4
|
|
|
5
|
-
Classes: b3-conversation, b3-message, b3-message-body, b3-message-meta
|
|
5
|
+
Classes: b3-conversation, b3-message, b3-message-body, b3-message-meta, b3-composer
|
|
6
6
|
|
|
7
7
|
```html
|
|
8
8
|
<ol class="b3-conversation" aria-label="Messages"><li class="b3-message" data-b3-side="self"><p class="b3-message-body">Happy to help.</p><div class="b3-message-meta"><span>You</span><time datetime="2026-09-08T09:14:00Z">09:14 UTC</time></div></li></ol>
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
# Alerts, toast and loading
|
|
2
2
|
|
|
3
|
-
Alert data-b3-tone supports info, success, warning, danger. Include explanatory text; icons/color alone are insufficient. Add role=alert only for urgent dynamic messages. Toast region uses aria-live=polite and toast dismissal data-b3-dismiss with mount(). When a focused toast is dismissed, focus moves to a surviving dismiss control, then the element ID in data-b3-return-focus on the toast or region; a region with tabindex=-1 is the final fallback. Declare a surviving return target; background dismissal does not steal focus. No automatic timers are imposed. In a b3-app-frame, place b3-toast-region as a direct sibling of main and nav; it overlays the content row above navigation without reserving extra height. A tall toast stack scrolls within that content row, keeping header and navigation accessible. Outside an app frame the region remains viewport-fixed; authors must account for other fixed controls. Spinner/skeleton need a separate accessible loading description; decorative shapes use aria-hidden. Reduced motion uses root defaults. Long unbroken message text wraps within alert/toast bounds. For recovery actions, compose native buttons inside a cluster. The app owns alert dismissal, retry state and focus return; removing a focused message should move focus to a surviving meaningful control. The feedback specimen demonstrates retry, dismissal and reset without remote delivery.
|
|
3
|
+
Alert data-b3-tone supports info, success, warning, danger. Include explanatory text; icons/color alone are insufficient. Add role=alert only for urgent dynamic messages. Toast region uses aria-live=polite and toast dismissal data-b3-dismiss with mount(). When a focused toast is dismissed, focus moves to a surviving dismiss control, then the element ID in data-b3-return-focus on the toast or region; a region with tabindex=-1 is the final fallback. Declare a surviving return target; background dismissal does not steal focus. No automatic timers are imposed. In a b3-app-frame, place b3-toast-region as a direct sibling of main and nav; it overlays the content row above navigation without reserving extra height. A tall toast stack scrolls within that content row, keeping header and navigation accessible. Outside an app frame the region remains viewport-fixed; authors must account for other fixed controls. Spinner/skeleton need a separate accessible loading description; decorative shapes use aria-hidden. Reduced motion uses root defaults. Long unbroken message text wraps within alert/toast bounds. For recovery actions, compose native buttons inside a cluster. The app owns alert dismissal, retry state and focus return; removing a focused message should move focus to a surviving meaningful control. The feedback specimen demonstrates retry, dismissal and reset without remote delivery. b3-empty is an empty state: a centred block with an optional icon, one line of body text and an optional action. Say what is empty and what the person can do.
|
|
4
4
|
|
|
5
|
-
Classes: b3-alert, b3-toast-region, b3-toast, b3-spinner, b3-skeleton
|
|
5
|
+
Classes: b3-alert, b3-toast-region, b3-toast, b3-spinner, b3-skeleton, b3-empty
|
|
6
6
|
|
|
7
7
|
```html
|
|
8
8
|
<div class="b3-alert" data-b3-tone="warning"><div><strong>Check your input</strong><p>Enter a valid email address.</p></div></div><div class="b3-toast-region" aria-live="polite"><div class="b3-toast"><p>Changes saved.</p><button class="b3-button" data-b3-dismiss>Dismiss</button></div></div>
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Root and theme
|
|
2
2
|
|
|
3
|
-
Place b3-root on html to synchronize the document canvas and native controls. Set data-b3-theme="dark" explicitly for dark mode.
|
|
3
|
+
Place b3-root on html to synchronize the document canvas and native controls. Set data-b3-theme="dark" explicitly for dark mode. A nested root inherits its parent theme and tokens; set data-b3-theme on it only to force a different theme. Override complete CSS values in --b3-* properties. Consumer CSS is unlayered and wins over library defaults. Scope custom palette overrides to each theme: unlayered :root token overrides beat layered library dark defaults. Use .b3-root:not([data-b3-theme="dark"]) for light-only colors and .b3-root[data-b3-theme="dark"] for dark overrides. Set foreground/background pairs together. Density: data-b3-density="compact" on the root tightens controls, nav, headings, avatars and messages for pointer-first apps; "auto" applies it only under a fine pointer on a wide viewport and keeps touch sizing on phones.
|
|
4
4
|
|
|
5
5
|
Classes: b3-root
|
|
6
6
|
|
package/dist/references/row.md
CHANGED
|
@@ -6,7 +6,7 @@ Composition: for a short label plus actions, use b3-row b3-split. For supporting
|
|
|
6
6
|
|
|
7
7
|
Lists: show useful rows before large summaries, with a short count and truthful empty state. Never invent user history. If reviewing is primary, use one disclosed add flow (native details/summary with b3-accordion); read form-composition.md. Task queues should show compact rows and reveal editing fields only for the edited item. Use existing disclosure/dialog semantics, not new density utilities. Check populated phone/desktop layouts, long notes and internal overflow.
|
|
8
8
|
|
|
9
|
-
Editing: keep focused controls and caret/selection stable. Save drafts synchronously before replacing rows. Keep an edited row present while focus remains inside it, even if it stops matching a filter; read editable-filtered-rows.md for Tab/blur and exit timing. Give controls immutable identity independent of changing labels/actions: Edit → Done → Edit must reopen correctly. Checkbox completion: update the existing input/row and counts in place; never rebuild the list on change. If filtering hides the focused row, focus the next visible checkbox or stable add/filter control. See the concrete checkbox pattern in editable-filtered-rows.md. After deletion focus a surviving action or add control. Verify activeElement and persisted values, not just page width. Playground #row resets local state on reload.
|
|
9
|
+
Editing: keep focused controls and caret/selection stable. Save drafts synchronously before replacing rows. Keep an edited row present while focus remains inside it, even if it stops matching a filter; read editable-filtered-rows.md for Tab/blur and exit timing. Give controls immutable identity independent of changing labels/actions: Edit → Done → Edit must reopen correctly. Checkbox completion: update the existing input/row and counts in place; never rebuild the list on change. If filtering hides the focused row, focus the next visible checkbox or stable add/filter control. See the concrete checkbox pattern in editable-filtered-rows.md. After deletion focus a surviving action or add control. Verify activeElement and persisted values, not just page width. Playground #row resets local state on reload. A row that opens something is itself the target: a.b3-row, button.b3-row or [role="button"].b3-row gets inline padding, hover and active fills. For a list of conversation threads, use one such row per thread: sender + time, the opening text in b3-clamp, and a caption line with the reply count as an interactive caption.
|
|
10
10
|
|
|
11
11
|
Classes: b3-row
|
|
12
12
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Surface
|
|
2
2
|
|
|
3
|
-
Use surfaces to group meaningful content, not around every row. Use dividers or whitespace when a panel would add noise.
|
|
3
|
+
Use surfaces to group meaningful content, not around every row. Use dividers or whitespace when a panel would add noise. Density tightens surface padding to 1rem.
|
|
4
4
|
|
|
5
5
|
Classes: b3-surface
|
|
6
6
|
|
package/dist/references/type.md
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
# Hierarchy
|
|
2
2
|
|
|
3
|
-
Use a single visual title and native heading hierarchy. Heading level describes document structure, not visual size. For prominent product sections, reuse one authored heading style; keep task panels and overlays compact. Check long words with enlarged text. Muted is secondary readable text. Label styling is optional and does not create a form label. Use b3-heading for dialog and sheet headings; b3-title is page-scale and should not be nested in a narrow overlay.
|
|
3
|
+
Use a single visual title and native heading hierarchy. Heading level describes document structure, not visual size. For prominent product sections, reuse one authored heading style; keep task panels and overlays compact. Check long words with enlarged text. Muted is secondary readable text. Label styling is optional and does not create a form label. Use b3-heading for dialog and sheet headings; b3-title is page-scale and should not be nested in a narrow overlay. b3-truncate keeps one line with an ellipsis inside a flex or grid row (list previews, titles); put the full text in a title or the detail view. b3-caption is secondary small text (subtitles, timestamps, list previews); b3-muted only changes colour. Type roles: assign every text element one role and use the same class for it everywhere — title = b3-heading; body = unclassed text; body-strong = b3-strong (names, emphasised content; body size); label = the control itself (b3-button, b3-nav-link, b3-bottom-link); caption = b3-caption (timestamps, counts, subtitles, previews). The same datum (e.g. a timestamp) is always the same role. In a bar or header use b3-heading data-b3-size="small" (toolbar-scale title on every density). A caption that acts (reply count, "show more") is a.b3-caption or button.b3-caption: accent colour, underline on hover/focus. b3-clamp cuts multi-line text to --b3-clamp lines (default 2) with an ellipsis. Caption is 13px at touch density and 12px at compact density (by design: meta shrinks with controls).
|
|
4
4
|
|
|
5
|
-
Classes: b3-title, b3-heading, b3-muted, b3-label
|
|
5
|
+
Classes: b3-title, b3-heading, b3-muted, b3-label, b3-truncate, b3-caption, b3-strong, b3-clamp
|
|
6
6
|
|
|
7
7
|
```html
|
|
8
8
|
<h1 class="b3-title">Today, intentionally.</h1>
|