@weasel-js/labkit 1.0.0 → 1.0.2
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/_dts/{DrawCommand-BwRCZYuo.d.ts → DrawCommand-CitWPxMY.d.ts} +8 -1
- package/dist/{chunk-HNXVLKBG.js → chunk-2ZRE7WGQ.js} +3 -3
- package/dist/{chunk-HNXVLKBG.js.map → chunk-2ZRE7WGQ.js.map} +1 -1
- package/dist/{chunk-XVBXYKFJ.js → chunk-3P56ZCCJ.js} +2268 -1950
- package/dist/chunk-3P56ZCCJ.js.map +1 -0
- package/dist/chunk-R4TACNW7.js +5921 -0
- package/dist/chunk-R4TACNW7.js.map +1 -0
- package/dist/index.js +22 -22
- package/dist/index.js.map +1 -1
- package/dist/passthrough/weasel-canvas.d.ts +29 -6
- package/dist/passthrough/weasel-canvas.js +1 -1
- package/dist/passthrough/weasel-ui.d.ts +142 -39
- package/dist/passthrough/weasel-ui.js +2 -2
- package/dist/styles.css +147 -0
- package/dist/ui/layers/index.js +3 -3
- package/package.json +2 -2
- package/src/lab/Lab.tsx +2 -2
- package/src/lab/LabShell.tsx +1 -1
- package/src/passthrough/weasel-ui.ts +4 -0
- package/src/theme/Interstellar.stories.tsx +1 -1
- package/src/theme/interstellar.test.ts +1 -1
- package/src/ui/properties/PropertyPanel.stories.tsx +0 -1
- package/dist/chunk-FP5LYDVX.js +0 -6039
- package/dist/chunk-FP5LYDVX.js.map +0 -1
- package/dist/chunk-XVBXYKFJ.js.map +0 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
2
|
import { Ref } from 'react';
|
|
3
|
-
import { N as Node, V as View, D as DrawCommand, S as Scene, B as Bounds, a as ViewportDims, P as PathDrawCommand } from '../_dts/DrawCommand-
|
|
3
|
+
import { N as Node, V as View, D as DrawCommand, S as Scene, B as Bounds, a as ViewportDims, P as PathDrawCommand } from '../_dts/DrawCommand-CitWPxMY.js';
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
6
|
* `renderSceneToCanvas` — substrate for detached, read-only scene views
|
|
@@ -55,6 +55,10 @@ interface RenderSceneToCanvasArgs<TData, TLayer extends string, TPose> {
|
|
|
55
55
|
* minimap's visible-window indicator. Wrapped in the same view transform
|
|
56
56
|
* as scene commands. */
|
|
57
57
|
extraCommands?: DrawCommand[];
|
|
58
|
+
/** Optional per-id alpha multiplier, mirroring `<SceneCanvas>`'s scene-slot
|
|
59
|
+
* `alphaFor`. Pass the same function the main canvas uses to keep a
|
|
60
|
+
* scoping-dim treatment consistent across both. Defaults to `() => 1`. */
|
|
61
|
+
alphaFor?: (id: string) => number;
|
|
58
62
|
/** Optional device-pixel ratio. Defaults to `window.devicePixelRatio || 1`
|
|
59
63
|
* when available, otherwise 1. Tests typically pin this to 1 or 2. */
|
|
60
64
|
dpr?: number;
|
|
@@ -62,16 +66,27 @@ interface RenderSceneToCanvasArgs<TData, TLayer extends string, TPose> {
|
|
|
62
66
|
/**
|
|
63
67
|
* Build the DrawCommand list that `renderSceneToCanvas` would dispatch.
|
|
64
68
|
*
|
|
65
|
-
* Pure — no GL, no DOM, no side effects.
|
|
66
|
-
*
|
|
67
|
-
*
|
|
68
|
-
* so the output is in screen
|
|
69
|
+
* Pure — no GL, no DOM, no side effects. Walks the scene through
|
|
70
|
+
* `buildSceneTree` — the same walk `<SceneCanvas>`'s `buildSceneLayer` uses —
|
|
71
|
+
* appends any `extraCommands`, and wraps the result in a single
|
|
72
|
+
* `{ kind: 'group', transform: viewToMat3(view) }` so the output is in screen
|
|
73
|
+
* space. Sharing the walk is what keeps hidden layers unpainted and container
|
|
74
|
+
* clips applied here; a hand-rolled `renderOrder()` loop silently dropped both.
|
|
75
|
+
*
|
|
76
|
+
* Each node's commands additionally go through `wrapNodeOutput` — pose
|
|
77
|
+
* rotation, then the `alphaFor` multiplier — exactly as `buildSceneLayer`
|
|
78
|
+
* does, so a `drawOne` shared between the two paints the same thing in both.
|
|
79
|
+
* A `drawOne` that rotates its own output will therefore rotate twice here;
|
|
80
|
+
* emit unrotated geometry and let the pose drive it.
|
|
81
|
+
*
|
|
82
|
+
* Output shape follows `buildSceneTree`: one group per **visible** layer, in
|
|
83
|
+
* scene-layer order, each holding one group per node on that layer.
|
|
69
84
|
*
|
|
70
85
|
* Exported for tests and for callers that want to render into something
|
|
71
86
|
* other than a real `<canvas>` (e.g. an offscreen renderer or a
|
|
72
87
|
* snapshot fixture).
|
|
73
88
|
*/
|
|
74
|
-
declare function buildSceneViewCommands<TData, TLayer extends string, TPose>(scene: Scene<TData, TLayer, TPose>, view: View, drawOne: SceneViewDrawOne<TData, TLayer, TPose>, extraCommands?: ReadonlyArray<DrawCommand
|
|
89
|
+
declare function buildSceneViewCommands<TData, TLayer extends string, TPose>(scene: Scene<TData, TLayer, TPose>, view: View, drawOne: SceneViewDrawOne<TData, TLayer, TPose>, extraCommands?: ReadonlyArray<DrawCommand>, alphaFor?: (id: string) => number): DrawCommand[];
|
|
75
90
|
/**
|
|
76
91
|
* Render one frame of `scene` at `view` into `canvas`. See module docstring
|
|
77
92
|
* for the design context.
|
|
@@ -110,6 +125,10 @@ interface SceneViewCanvasProps<TData, TLayer extends string, TPose> {
|
|
|
110
125
|
* indicator; available to other consumers that want to overlay a
|
|
111
126
|
* world-space annotation. */
|
|
112
127
|
extraCommands?: ReadonlyArray<DrawCommand>;
|
|
128
|
+
/** Optional per-id alpha multiplier, mirroring `<SceneCanvas>`'s scene-slot
|
|
129
|
+
* `alphaFor`. Pass the same function the main canvas uses to keep a
|
|
130
|
+
* scoping-dim treatment consistent across both. Defaults to `() => 1`. */
|
|
131
|
+
alphaFor?: (id: string) => number;
|
|
113
132
|
/** Optional CSS class for sizing / positioning the `<canvas>`. The kit
|
|
114
133
|
* does not emit inline styles for layout — use a class. */
|
|
115
134
|
className?: string;
|
|
@@ -236,6 +255,10 @@ interface MinimapCanvasProps<TData, TLayer extends string, TPose> {
|
|
|
236
255
|
/** Pose → AABB. Defaults to identity (`pose as Bounds`), matching
|
|
237
256
|
* `sceneAdapter` / `useSelectTool`. */
|
|
238
257
|
poseBounds?: (pose: TPose) => Bounds;
|
|
258
|
+
/** Optional per-id alpha multiplier, mirroring `<SceneCanvas>`'s scene-slot
|
|
259
|
+
* `alphaFor`. Pass the same function the main canvas uses so a
|
|
260
|
+
* scoping-dim treatment shows up in the minimap too. */
|
|
261
|
+
alphaFor?: (id: string) => number;
|
|
239
262
|
/** Visual tuning of the indicator stroke. */
|
|
240
263
|
indicatorStyle?: IndicatorStyle;
|
|
241
264
|
/** CSS class for sizing / positioning the canvas. */
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export { FALLBACK_FIT_VIEW, MinimapCanvas, SceneViewCanvas, buildSceneViewCommands, computeFitView2 as computeFitView, computeIndicatorCommand, renderSceneToCanvas } from '../chunk-
|
|
1
|
+
export { FALLBACK_FIT_VIEW, MinimapCanvas, SceneViewCanvas, buildSceneViewCommands, computeFitView2 as computeFitView, computeIndicatorCommand, renderSceneToCanvas } from '../chunk-3P56ZCCJ.js';
|
|
2
2
|
//# sourceMappingURL=weasel-canvas.js.map
|
|
3
3
|
//# sourceMappingURL=weasel-canvas.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
2
|
import * as react from 'react';
|
|
3
|
-
import { ReactNode, CSSProperties, ButtonHTMLAttributes, ReactElement, MutableRefObject, PointerEvent as PointerEvent$1,
|
|
4
|
-
import { V as View, D as DrawCommand, O as Op, b as NodeId, c as Path, S as Scene, H as History, B as Bounds } from '../_dts/DrawCommand-
|
|
3
|
+
import { ReactNode, CSSProperties, ButtonHTMLAttributes, ReactElement, MutableRefObject, KeyboardEvent, PointerEvent as PointerEvent$1, RefCallback, RefObject } from 'react';
|
|
4
|
+
import { V as View, D as DrawCommand, O as Op, b as NodeId, c as Path, S as Scene, H as History, B as Bounds } from '../_dts/DrawCommand-CitWPxMY.js';
|
|
5
5
|
import { TextFieldProps, ValidationResult, CheckboxProps as CheckboxProps$1, SwitchProps as SwitchProps$1, TabProps as TabProps$1, TabListProps as TabListProps$1, TabPanelProps as TabPanelProps$1, TabsProps as TabsProps$1, RadioProps as RadioProps$1, RadioGroupProps as RadioGroupProps$1, NumberFieldProps as NumberFieldProps$1, SelectProps as SelectProps$1, ListBoxItemProps, ComboBoxProps as ComboBoxProps$1, SliderProps as SliderProps$1, ModalOverlayProps, DialogProps as DialogProps$1 } from 'react-aria-components';
|
|
6
6
|
|
|
7
7
|
/**
|
|
@@ -1365,6 +1365,12 @@ interface LayoutStrategy<TPose> {
|
|
|
1365
1365
|
x: number;
|
|
1366
1366
|
y: number;
|
|
1367
1367
|
}): boolean;
|
|
1368
|
+
/** Optional: reject a drag before any drop-target work happens. A type-aware
|
|
1369
|
+
* container (a palette that only takes swatches, say) returns `false` and
|
|
1370
|
+
* the drag falls through to whatever container is under it next. When
|
|
1371
|
+
* absent, every drag is considered — rejection is still possible later, by
|
|
1372
|
+
* `snap.pickTarget` returning null. */
|
|
1373
|
+
acceptsDrop?(container: LayoutContainer, dragged: LayoutDragged<TPose>): boolean;
|
|
1368
1374
|
}
|
|
1369
1375
|
|
|
1370
1376
|
/**
|
|
@@ -1406,6 +1412,12 @@ interface MoveAdapter<TNode extends {
|
|
|
1406
1412
|
* targeting (`getLayout` present), nested-hit collapse
|
|
1407
1413
|
* (`pickTopMostHit`), and group-pose composition. Flat scenes may omit. */
|
|
1408
1414
|
getParent?(id: string): string | null;
|
|
1415
|
+
/** Optional paint depth, read by `pickTopMostHit` to resolve two *siblings*
|
|
1416
|
+
* whose bodies both cover the pointer. Without it the hit list's own order
|
|
1417
|
+
* decides, which is right for a back-to-front walk and wrong for anything
|
|
1418
|
+
* else. See `PickTopMostHitAdapter` for the `compareZ` alternative. */
|
|
1419
|
+
getZIndex?(id: string): number | null | undefined;
|
|
1420
|
+
compareZ?(a: string, b: string): number;
|
|
1409
1421
|
setPose(id: string, pose: TPose): void;
|
|
1410
1422
|
/** Optional. Used only by reparent ops (e.g. drag-into-container drops via
|
|
1411
1423
|
* layout strategies). Flat scenes that never reparent may omit. */
|
|
@@ -1854,17 +1866,28 @@ type ModSpec = Partial<{
|
|
|
1854
1866
|
mod: boolean | 'optional';
|
|
1855
1867
|
shift: boolean | 'optional';
|
|
1856
1868
|
}>;
|
|
1869
|
+
/** The predicate form of {@link TargetSpec}. `hit` is the raw target
|
|
1870
|
+
* (affordance for drag, `e.target` otherwise); `bodyTarget` is the optional
|
|
1871
|
+
* body-class string ('empty' | 'selected-body' | 'unselected-body') when
|
|
1872
|
+
* `classifyTarget` is wired. Predicates that only need one of the two can
|
|
1873
|
+
* ignore the other. */
|
|
1874
|
+
interface TargetPredicate {
|
|
1875
|
+
(hit: unknown, bodyTarget?: string): boolean;
|
|
1876
|
+
/** `false` declares that the predicate reads `bodyTarget` only. An
|
|
1877
|
+
* exclusive affordance claim bars bindings whose target doesn't consult
|
|
1878
|
+
* the hit; a body predicate that declares nothing looks like it does. */
|
|
1879
|
+
readsAffordance?: boolean;
|
|
1880
|
+
}
|
|
1857
1881
|
/** Target selector for click and drag gesture specs. String forms are sugar
|
|
1858
1882
|
* for the kit-owned object-kind registry (TODO.md Tier 1 follow-up); until
|
|
1859
1883
|
* that ships, consumers can pass `{ kindOf: predicate }` to classify hits
|
|
1860
|
-
* themselves.
|
|
1884
|
+
* themselves.
|
|
1885
|
+
*
|
|
1886
|
+
* Adding a form here is a compile error in `parseTargetSpec` until
|
|
1887
|
+
* `TargetSpecForm` grows a matching variant — which is in turn a compile
|
|
1888
|
+
* error at every site that switches on one. */
|
|
1861
1889
|
type TargetSpec = 'empty' | 'selected-body' | 'unselected-body' | `kind:${string}` | `kind:${string}:selected` | `affordance:${string}` | {
|
|
1862
|
-
|
|
1863
|
-
* `e.target` otherwise); `bodyTarget` is the optional body-class
|
|
1864
|
-
* string ('empty' | 'selected-body' | 'unselected-body') when
|
|
1865
|
-
* `classifyTarget` is wired. Predicates that only need one of the
|
|
1866
|
-
* two can ignore the other. */
|
|
1867
|
-
kindOf: (hit: unknown, bodyTarget?: string) => boolean;
|
|
1890
|
+
kindOf: TargetPredicate;
|
|
1868
1891
|
};
|
|
1869
1892
|
/** Phase qualifier on a gesture spec. Restricts when the spec matches based
|
|
1870
1893
|
* on per-tool gesture-lifecycle state.
|
|
@@ -2261,7 +2284,7 @@ type OngoingOverlay = {
|
|
|
2261
2284
|
* renderer narrows on `shape` and casts the field shape it expects.
|
|
2262
2285
|
*/
|
|
2263
2286
|
kind: 'insertPreview';
|
|
2264
|
-
shape: 'rect' | 'ellipse' | 'line' | 'polygon' | 'star' | 'pencil';
|
|
2287
|
+
shape: 'rect' | 'ellipse' | 'line' | 'polygon' | 'star' | 'pencil' | 'image';
|
|
2265
2288
|
bounds: {
|
|
2266
2289
|
x: number;
|
|
2267
2290
|
y: number;
|
|
@@ -2325,6 +2348,14 @@ interface OngoingHandle {
|
|
|
2325
2348
|
*/
|
|
2326
2349
|
previewIds?(): Iterable<string> | null;
|
|
2327
2350
|
previewPose?(id: string): unknown | null;
|
|
2351
|
+
/**
|
|
2352
|
+
* Subset of `previewIds()` the ghost layer paints at full opacity. The
|
|
2353
|
+
* ghost alpha says "this is in flight under the pointer"; a node the
|
|
2354
|
+
* gesture merely displaces — a layout sibling reflowing into its
|
|
2355
|
+
* destination slot — is not, and reads better settled. Honored at
|
|
2356
|
+
* subtree-root granularity.
|
|
2357
|
+
*/
|
|
2358
|
+
previewOpaqueIds?(): Iterable<string> | null;
|
|
2328
2359
|
/**
|
|
2329
2360
|
* When `false`, the preview-ghost layer paints the ghost AND the
|
|
2330
2361
|
* source node stays visible at its committed pose. Defaults to
|
|
@@ -3091,6 +3122,13 @@ type InsertExtras = {
|
|
|
3091
3122
|
} | {
|
|
3092
3123
|
kind: 'text';
|
|
3093
3124
|
text?: string;
|
|
3125
|
+
} | {
|
|
3126
|
+
kind: 'image';
|
|
3127
|
+
src?: string;
|
|
3128
|
+
opacity?: number;
|
|
3129
|
+
/** Chrome-only: what the in-flight drag paints. Read by the overlay
|
|
3130
|
+
* layer, ignored by the insert dep. */
|
|
3131
|
+
preview?: 'bitmap' | 'outline';
|
|
3094
3132
|
} | {
|
|
3095
3133
|
kind: string;
|
|
3096
3134
|
[extra: string]: unknown;
|
|
@@ -3420,6 +3458,14 @@ interface Eligibility {
|
|
|
3420
3458
|
/** Modality filter, applied wherever it would otherwise be live. */
|
|
3421
3459
|
capabilities?: CapabilityTag[];
|
|
3422
3460
|
}
|
|
3461
|
+
/**
|
|
3462
|
+
* Where an entry's overlay sits in the layer stack, relative to the
|
|
3463
|
+
* selection chrome. `'top'` is the default and renders above everything;
|
|
3464
|
+
* the other two exist for chrome that belongs under the selection handles
|
|
3465
|
+
* (a snap-target highlight, say). With no selection overlay in the stack,
|
|
3466
|
+
* all three collapse to `'top'`.
|
|
3467
|
+
*/
|
|
3468
|
+
type OverlayPosition = 'top' | 'before-selection' | 'after-selection';
|
|
3423
3469
|
/**
|
|
3424
3470
|
* A registry entry: what it contributes, and when it is eligible. Every role
|
|
3425
3471
|
* is optional and independent — an entry that only routes input declares only
|
|
@@ -3430,12 +3476,37 @@ interface Contribution {
|
|
|
3430
3476
|
eligibility: Eligibility;
|
|
3431
3477
|
bindings?: GestureBinding[];
|
|
3432
3478
|
actions?: Action[];
|
|
3433
|
-
|
|
3479
|
+
/** One layer, or several composed in the given order. */
|
|
3480
|
+
overlay?: RenderLayer<unknown> | RenderLayer<unknown>[];
|
|
3481
|
+
/** Defaults to `'top'`. Applies to every layer in `overlay`. */
|
|
3482
|
+
overlayPosition?: OverlayPosition;
|
|
3434
3483
|
presentation?: ToolPresentation;
|
|
3435
3484
|
/** Reflection escape hatch — the authored form, when there was one. */
|
|
3436
3485
|
def?: unknown;
|
|
3437
3486
|
}
|
|
3438
3487
|
|
|
3488
|
+
/**
|
|
3489
|
+
* Configurable activation-key descriptor for tools that expose their
|
|
3490
|
+
* keybinding to the host (currently Lasso and Eyedropper). Captures
|
|
3491
|
+
* only the fields meaningful to a caller-supplied tool-select key —
|
|
3492
|
+
* dispatcher-internal fields (`skipInEditable`, `enabled`,
|
|
3493
|
+
* `preventDefault`) live on `KeyBinding` in keyHelpers.ts and are
|
|
3494
|
+
* not part of the configurable surface.
|
|
3495
|
+
*/
|
|
3496
|
+
interface ToolKeybinding {
|
|
3497
|
+
/** Key or list of keys to match (case-insensitive against `event.key`). */
|
|
3498
|
+
key: string | readonly string[];
|
|
3499
|
+
/** Require Cmd (mac) / Ctrl (others). Default `false`. */
|
|
3500
|
+
mod?: boolean;
|
|
3501
|
+
/** Require Alt. Default `false`. */
|
|
3502
|
+
alt?: boolean;
|
|
3503
|
+
/**
|
|
3504
|
+
* Shift policy. `undefined`/`false` forbids shift, `true` requires
|
|
3505
|
+
* shift, `'optional'` allows either.
|
|
3506
|
+
*/
|
|
3507
|
+
shift?: boolean | 'optional';
|
|
3508
|
+
}
|
|
3509
|
+
|
|
3439
3510
|
/** Modifier-key snapshot at event dispatch time. `space` is included
|
|
3440
3511
|
* because tools commonly use space as a hotkey-slot trigger and may
|
|
3441
3512
|
* also want to read it as a flag mid-gesture. */
|
|
@@ -3707,28 +3778,6 @@ declare const ActionDisabledReason: {
|
|
|
3707
3778
|
};
|
|
3708
3779
|
type ActionDisabledReason = (typeof ActionDisabledReason)[keyof typeof ActionDisabledReason];
|
|
3709
3780
|
|
|
3710
|
-
/**
|
|
3711
|
-
* Configurable activation-key descriptor for tools that expose their
|
|
3712
|
-
* keybinding to the host (currently Lasso and Eyedropper). Captures
|
|
3713
|
-
* only the fields meaningful to a caller-supplied tool-select key —
|
|
3714
|
-
* dispatcher-internal fields (`skipInEditable`, `enabled`,
|
|
3715
|
-
* `preventDefault`) live on `KeyBinding` in keyHelpers.ts and are
|
|
3716
|
-
* not part of the configurable surface.
|
|
3717
|
-
*/
|
|
3718
|
-
interface ToolKeybinding {
|
|
3719
|
-
/** Key or list of keys to match (case-insensitive against `event.key`). */
|
|
3720
|
-
key: string | readonly string[];
|
|
3721
|
-
/** Require Cmd (mac) / Ctrl (others). Default `false`. */
|
|
3722
|
-
mod?: boolean;
|
|
3723
|
-
/** Require Alt. Default `false`. */
|
|
3724
|
-
alt?: boolean;
|
|
3725
|
-
/**
|
|
3726
|
-
* Shift policy. `undefined`/`false` forbids shift, `true` requires
|
|
3727
|
-
* shift, `'optional'` allows either.
|
|
3728
|
-
*/
|
|
3729
|
-
shift?: boolean | 'optional';
|
|
3730
|
-
}
|
|
3731
|
-
|
|
3732
3781
|
interface ToolsApi {
|
|
3733
3782
|
/** Current active-slot tool id. */
|
|
3734
3783
|
active: string;
|
|
@@ -3749,10 +3798,10 @@ interface ToolsApi {
|
|
|
3749
3798
|
/** Returns true if a tool with the given id is in the registry or ambient list. */
|
|
3750
3799
|
has(id: string): boolean;
|
|
3751
3800
|
/** All overlay layers from currently-engaged tools (active slot, hotkey
|
|
3752
|
-
* slot if engaged, all ambient slot tools)
|
|
3753
|
-
* `overlay` field. Order: active, then hotkey
|
|
3754
|
-
* ambient (registration order). */
|
|
3755
|
-
getActiveOverlays(): RenderLayer<unknown>[];
|
|
3801
|
+
* slot if engaged, all ambient slot tools) that declare `position`.
|
|
3802
|
+
* Filters out tools with no `overlay` field. Order: active, then hotkey
|
|
3803
|
+
* (if engaged), then ambient (registration order). */
|
|
3804
|
+
getActiveOverlays(position?: OverlayPosition): RenderLayer<unknown>[];
|
|
3756
3805
|
}
|
|
3757
3806
|
|
|
3758
3807
|
interface SidebarProps {
|
|
@@ -3845,6 +3894,9 @@ interface ToolButtonProps {
|
|
|
3845
3894
|
tabbable?: boolean;
|
|
3846
3895
|
/** Click handler. */
|
|
3847
3896
|
onClick(): void;
|
|
3897
|
+
/** Key handler for the underlying button — a toolbar's roving-tabindex
|
|
3898
|
+
* navigation attaches here. */
|
|
3899
|
+
onKeyDown?(e: KeyboardEvent<HTMLElement>): void;
|
|
3848
3900
|
/**
|
|
3849
3901
|
* Tooltip content. Defaults to `label` (plus `shortcut` if provided).
|
|
3850
3902
|
*/
|
|
@@ -4428,6 +4480,57 @@ interface ReorderDragHandlers {
|
|
|
4428
4480
|
}
|
|
4429
4481
|
declare function useReorderDragList(opts: UseReorderDragListOptions): ReorderDragHandlers;
|
|
4430
4482
|
|
|
4483
|
+
/** The only thing the hook needs to know about a bar's items: which are
|
|
4484
|
+
* skipped by arrow navigation. */
|
|
4485
|
+
type RovingItem = {
|
|
4486
|
+
disabled?: boolean;
|
|
4487
|
+
};
|
|
4488
|
+
type UseRovingTabIndexOptions = {
|
|
4489
|
+
/** In the same order as the elements carrying `itemClassName`. */
|
|
4490
|
+
items: readonly RovingItem[];
|
|
4491
|
+
/** Class on the focusable element of each item, inside the container the
|
|
4492
|
+
* returned `rootRef` is attached to. Their DOM order must match `items`. */
|
|
4493
|
+
itemClassName: string;
|
|
4494
|
+
/** Index that carries `tabIndex=0`. Defaults to the first enabled item; a
|
|
4495
|
+
* radiogroup-style bar passes its selected index so Tab lands on the
|
|
4496
|
+
* current value. */
|
|
4497
|
+
tabStopIndex?: number;
|
|
4498
|
+
/** Called with the new index as arrow/Home/End focus moves, before focus
|
|
4499
|
+
* moves. This is where a selection-follows-focus bar commits the value. */
|
|
4500
|
+
onNavigate?: (index: number) => void;
|
|
4501
|
+
/** Space/Enter on the item at `index`. When omitted the keypress is left
|
|
4502
|
+
* alone, which on a native `<button>` produces an ordinary click. */
|
|
4503
|
+
onActivate?: (index: number) => void;
|
|
4504
|
+
};
|
|
4505
|
+
type RovingTabIndex<T extends HTMLElement = HTMLDivElement> = {
|
|
4506
|
+
/** Attach to the container element that holds the items. */
|
|
4507
|
+
rootRef: RefObject<T | null>;
|
|
4508
|
+
/** `tabIndex` value for the item at `index`. */
|
|
4509
|
+
tabIndexFor: (index: number) => 0 | -1;
|
|
4510
|
+
/** `onKeyDown` for the item at `index`. */
|
|
4511
|
+
onKeyDown: (index: number) => (e: KeyboardEvent<HTMLElement>) => void;
|
|
4512
|
+
};
|
|
4513
|
+
/**
|
|
4514
|
+
* Roving tabindex for a bar of items: one item is in the tab order, and the
|
|
4515
|
+
* arrow keys move focus among the rest, skipping disabled ones and wrapping
|
|
4516
|
+
* at both ends. Home and End go to the first and last enabled item. Both axes
|
|
4517
|
+
* navigate, so the same bar works laid out either way.
|
|
4518
|
+
*
|
|
4519
|
+
* Backs `ActionsBar`, `OptionsBar`, and `ToggleBar`.
|
|
4520
|
+
*
|
|
4521
|
+
* **When a bar should not use this.** Only when the bar owns its items. A
|
|
4522
|
+
* container of arbitrary compound controls — a number field, a select, a
|
|
4523
|
+
* color field — must leave the arrow keys alone, because those controls edit
|
|
4524
|
+
* their own value with them; taking the arrows over would break the control
|
|
4525
|
+
* to navigate between controls. `ToolOptionsBar` is that case and keeps plain
|
|
4526
|
+
* DOM tab order. A bar whose items are all simple buttons is the case this
|
|
4527
|
+
* hook is for.
|
|
4528
|
+
*
|
|
4529
|
+
* With every item disabled there is no tab stop and the bar drops out of the
|
|
4530
|
+
* tab order entirely.
|
|
4531
|
+
*/
|
|
4532
|
+
declare function useRovingTabIndex<T extends HTMLElement = HTMLDivElement>(options: UseRovingTabIndexOptions): RovingTabIndex<T>;
|
|
4533
|
+
|
|
4431
4534
|
/**
|
|
4432
4535
|
* Display-formatter for numbers. Use this anywhere a number is shown to
|
|
4433
4536
|
* a user. The whole point: negative values get prefixed with the real
|
|
@@ -4441,5 +4544,5 @@ declare function useReorderDragList(opts: UseReorderDragListOptions): ReorderDra
|
|
|
4441
4544
|
declare const MINUS_SIGN = "\u2212";
|
|
4442
4545
|
declare function formatNumber(value: number, options?: Intl.NumberFormatOptions): string;
|
|
4443
4546
|
|
|
4444
|
-
export { ActionBar, ActionsBar, Badge, Button, Checkbox, ComboBox, ComboBoxItem, CurveEditor, DataGrid, Dialog, EDGE_PROFILES, Field, Input, KeyCap, KeySequence, MINUS_SIGN, NumberField, OptionsBar, Plot2D, PointPlotter, Powerline, Radio, RadioGroup, RangeSlider, Select, SelectItem, Sidebar, SidebarPanel, Slider, Switch, Tab, TabList, TabPanel, Tabs, ToggleBar, ToolButton, ToolGroup, ToolPalette, chromaAt, detectPlatform, dlog, fieldClasses, formatNumber, formatShortcut, formatShortcutParts, inferKeycapKind, isDebugEnabled, keyGlyph, keySpecFromKey, keySpecsFromMods, oklchToHex, paintGradientTrack, useReorderDragList };
|
|
4445
|
-
export type { ActionBarProps, ActionsBarItem, ActionsBarProps, ActionsBarSize, ActionsBarVariant, AddPointMode, AnchorRenderProps, AxesSettings, BadgeProps, BadgeShape, BadgeSize, BadgeTone, BadgeVariant, BoundsCtx, BuiltInEdgeName, ButtonProps, ButtonSize, ButtonVariant, CheckboxProps, ChromaCurve, ChromaCurvePoint, ComboBoxItemProps, ComboBoxOption, ComboBoxProps, ControlPoint, CurveDomain, CurveEditorProps, DataGridColumn, DataGridProps, DialogProps, EdgeCap, EdgeProfile, EndpointMode, FieldOrientation, FieldProps, FillSettings, GradientTrackOpts, GridSettings, InputProps, InterpolationMode, KeyCapProps, KeyCapVariant, KeySequenceProps, KeySpec$1 as KeySpec, KeycapKind, LayerListItem, LogicalMod, LogicalModSpec, NumberFieldProps, OptionsBarItem, OptionsBarProps, OptionsBarSize, OptionsBarVariant, Platform, Plot2DCoords, Plot2DHandle, Plot2DProps, PointPlotterProps, PowerlineProps, PowerlineSegment, RadioGroupProps, RadioProps, RangeSliderProps, ReorderDragHandlers, ReorderDragState, SelectItemProps, SelectOption, SelectProps, SidebarPanelProps, SidebarProps, SliderProps, SwitchProps, TabListProps, TabPanelProps, TabProps, TabsProps, Thumb, ThumbRenderCtx, ThumbShape, ToggleBarItem, ToggleBarProps, ToggleBarSize, ToggleBarVariant, ToolButtonProps, ToolGroupProps, ToolPaletteProps, TrackCtx, UseReorderDragListOptions };
|
|
4547
|
+
export { ActionBar, ActionsBar, Badge, Button, Checkbox, ComboBox, ComboBoxItem, CurveEditor, DataGrid, Dialog, EDGE_PROFILES, Field, Input, KeyCap, KeySequence, MINUS_SIGN, NumberField, OptionsBar, Plot2D, PointPlotter, Powerline, Radio, RadioGroup, RangeSlider, Select, SelectItem, Sidebar, SidebarPanel, Slider, Switch, Tab, TabList, TabPanel, Tabs, ToggleBar, ToolButton, ToolGroup, ToolPalette, chromaAt, detectPlatform, dlog, fieldClasses, formatNumber, formatShortcut, formatShortcutParts, inferKeycapKind, isDebugEnabled, keyGlyph, keySpecFromKey, keySpecsFromMods, oklchToHex, paintGradientTrack, useReorderDragList, useRovingTabIndex };
|
|
4548
|
+
export type { ActionBarProps, ActionsBarItem, ActionsBarProps, ActionsBarSize, ActionsBarVariant, AddPointMode, AnchorRenderProps, AxesSettings, BadgeProps, BadgeShape, BadgeSize, BadgeTone, BadgeVariant, BoundsCtx, BuiltInEdgeName, ButtonProps, ButtonSize, ButtonVariant, CheckboxProps, ChromaCurve, ChromaCurvePoint, ComboBoxItemProps, ComboBoxOption, ComboBoxProps, ControlPoint, CurveDomain, CurveEditorProps, DataGridColumn, DataGridProps, DialogProps, EdgeCap, EdgeProfile, EndpointMode, FieldOrientation, FieldProps, FillSettings, GradientTrackOpts, GridSettings, InputProps, InterpolationMode, KeyCapProps, KeyCapVariant, KeySequenceProps, KeySpec$1 as KeySpec, KeycapKind, LayerListItem, LogicalMod, LogicalModSpec, NumberFieldProps, OptionsBarItem, OptionsBarProps, OptionsBarSize, OptionsBarVariant, Platform, Plot2DCoords, Plot2DHandle, Plot2DProps, PointPlotterProps, PowerlineProps, PowerlineSegment, RadioGroupProps, RadioProps, RangeSliderProps, ReorderDragHandlers, ReorderDragState, RovingItem, RovingTabIndex, SelectItemProps, SelectOption, SelectProps, SidebarPanelProps, SidebarProps, SliderProps, SwitchProps, TabListProps, TabPanelProps, TabProps, TabsProps, Thumb, ThumbRenderCtx, ThumbShape, ToggleBarItem, ToggleBarProps, ToggleBarSize, ToggleBarVariant, ToolButtonProps, ToolGroupProps, ToolPaletteProps, TrackCtx, UseReorderDragListOptions, UseRovingTabIndexOptions };
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { m as ActionBar,
|
|
2
|
-
import '../chunk-
|
|
1
|
+
export { m as ActionBar, r3 as ActionsBar, Ft as Badge, a as Button, o3 as Checkbox, p4 as ComboBox, m2 as ComboBoxItem, F as CurveEditor, l as DataGrid, c2 as Dialog, qe as EDGE_PROFILES, n as Field, u2 as Input, s2 as KeyCap, c as KeySequence, a2 as MINUS_SIGN, f3 as NumberField, r2 as OptionsBar, _ as Plot2D, n4 as PointPlotter, r4 as Powerline, u3 as Radio, l2 as RadioGroup, l3 as RangeSlider, p3 as Select, h as SelectItem, n2 as Sidebar, o4 as SidebarPanel, f2 as Slider, a4 as Switch, c3 as Tab, s3 as TabList, l4 as TabPanel, o6 as Tabs, r as ToggleBar, o5 as ToolButton, n3 as ToolGroup, _2 as ToolPalette, ze as chromaAt, u as detectPlatform, p as dlog, r5 as fieldClasses, o2 as formatNumber, d2 as formatShortcut, u4 as formatShortcutParts, o as inferKeycapKind, f as isDebugEnabled, e as keyGlyph, p2 as keySpecFromKey, d as keySpecsFromMods, Re as oklchToHex, p5 as paintGradientTrack, s as useReorderDragList, a3 as useRovingTabIndex } from '../chunk-R4TACNW7.js';
|
|
2
|
+
import '../chunk-3P56ZCCJ.js';
|
|
3
3
|
//# sourceMappingURL=weasel-ui.js.map
|
|
4
4
|
//# sourceMappingURL=weasel-ui.js.map
|
package/dist/styles.css
CHANGED
|
@@ -1,3 +1,150 @@
|
|
|
1
|
+
/* GENERATED by packages/theme/scripts/build-tokens.ts — do not edit.
|
|
2
|
+
* Source: packages/theme/tokens/<theme>/
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
:root {
|
|
6
|
+
--wzl-gray-50: #f5f5f6;
|
|
7
|
+
--wzl-gray-100: #e6e7e9;
|
|
8
|
+
--wzl-gray-200: #c9cbcf;
|
|
9
|
+
--wzl-gray-300: #9ea1a8;
|
|
10
|
+
--wzl-gray-400: #6f737b;
|
|
11
|
+
--wzl-gray-500: #4d5058;
|
|
12
|
+
--wzl-gray-600: #383b42;
|
|
13
|
+
--wzl-gray-700: #25272c;
|
|
14
|
+
--wzl-gray-800: #181a1e;
|
|
15
|
+
--wzl-gray-900: #0e0f12;
|
|
16
|
+
--wzl-accent-soft: #1d1454;
|
|
17
|
+
/* Midnight blue-violet. Deep and saturated; anchors primary actions on light and dark surfaces alike. */
|
|
18
|
+
--wzl-accent-base: #2e1f7a;
|
|
19
|
+
--wzl-accent-strong: #5841b8;
|
|
20
|
+
--wzl-danger-base: #d94a3f;
|
|
21
|
+
--wzl-warning-base: #d99a3f;
|
|
22
|
+
--wzl-success-base: #2ec27e;
|
|
23
|
+
--wzl-fg-on-accent: var(--wzl-gray-50);
|
|
24
|
+
/* Barely-there separators (table rows). */
|
|
25
|
+
--wzl-line-subtle: color-mix(in srgb, var(--wzl-fg) 10%, transparent);
|
|
26
|
+
/* Primary gridlines on sunken surfaces. */
|
|
27
|
+
--wzl-line: color-mix(in srgb, var(--wzl-fg) 20%, transparent);
|
|
28
|
+
/* Axes and emphasized dividers. */
|
|
29
|
+
--wzl-line-strong: color-mix(in srgb, var(--wzl-fg) 40%, transparent);
|
|
30
|
+
/* Drawn data curves. Routes through the bright accent because accent-base is too dim on sunken surfaces. */
|
|
31
|
+
--wzl-curve-color: var(--wzl-accent-strong);
|
|
32
|
+
--wzl-accent: var(--wzl-accent-base);
|
|
33
|
+
--wzl-accent-hover: var(--wzl-accent-strong);
|
|
34
|
+
--wzl-danger: var(--wzl-danger-base);
|
|
35
|
+
--wzl-warning: var(--wzl-warning-base);
|
|
36
|
+
--wzl-success: var(--wzl-success-base);
|
|
37
|
+
--wzl-focus-ring: var(--wzl-accent-strong);
|
|
38
|
+
/* Frosted-glass tint. Components compose it as color-mix(in srgb, var(--wzl-glass-tint) 78%, transparent) with backdrop-filter: blur(3px). */
|
|
39
|
+
--wzl-glass-tint: var(--wzl-accent);
|
|
40
|
+
/* Hover wash over a raised surface. Same formula as line-subtle, different job — do not collapse them. */
|
|
41
|
+
--wzl-surface-hover: color-mix(in srgb, var(--wzl-fg) 10%, transparent);
|
|
42
|
+
/* Pressed wash over a raised surface. */
|
|
43
|
+
--wzl-surface-pressed: color-mix(in srgb, var(--wzl-fg) 18%, transparent);
|
|
44
|
+
/* First of ten categorical spot colors for plotting, status and data viz. Ordered — take them in sequence. Mode-invariant on purpose: a series keeps its color when the mode flips. */
|
|
45
|
+
--wzl-swatch-green: #2fdd18;
|
|
46
|
+
--wzl-swatch-pink: #ff5885;
|
|
47
|
+
--wzl-swatch-cyan: #00dfff;
|
|
48
|
+
--wzl-swatch-gold: #dcb700;
|
|
49
|
+
--wzl-swatch-amber: #ff8c00;
|
|
50
|
+
--wzl-swatch-violet: #a497ff;
|
|
51
|
+
--wzl-swatch-mint: #00e7af;
|
|
52
|
+
--wzl-swatch-sky: #00b8ff;
|
|
53
|
+
--wzl-swatch-orange: #ff6b00;
|
|
54
|
+
--wzl-swatch-magenta: #ff6eff;
|
|
55
|
+
--wzl-radius-sm: 3px;
|
|
56
|
+
--wzl-radius-md: 5px;
|
|
57
|
+
--wzl-border-w: 1px;
|
|
58
|
+
/* Structural lines — gridlines, dividers, axes. */
|
|
59
|
+
--wzl-line-width: 2px;
|
|
60
|
+
/* Drawn data curves. Heavier than structural lines so data reads as primary content. */
|
|
61
|
+
--wzl-curve-width: 3px;
|
|
62
|
+
/* Height of a horizontal toolbar strip (ActionsBar, OptionsBar, ToggleBar, ToolOptionsBar). */
|
|
63
|
+
--wzl-tb-height: 28px;
|
|
64
|
+
--wzl-radius-lg: 14px;
|
|
65
|
+
/* Height of an interactive control — button, input, select. Distinct from tb-height, which sizes the strip a row of them sits in. */
|
|
66
|
+
--wzl-control-h: 28px;
|
|
67
|
+
/* Backdrop blur radius for frosted surfaces. Pairs with glass-tint. */
|
|
68
|
+
--wzl-glass-blur: 3px;
|
|
69
|
+
--wzl-font-size: 13px;
|
|
70
|
+
--wzl-font-size-sm: 11px;
|
|
71
|
+
--wzl-space-xs: 4px;
|
|
72
|
+
--wzl-space-sm: 8px;
|
|
73
|
+
--wzl-space-md: 12px;
|
|
74
|
+
--wzl-space-lg: 16px;
|
|
75
|
+
--wzl-z-toolbar: 10;
|
|
76
|
+
--wzl-z-overlay: 20;
|
|
77
|
+
--wzl-z-modal: 30;
|
|
78
|
+
/* Layered backdrop fill for a page or lab root. `none` here; a theme with a signature background sets it. */
|
|
79
|
+
--wzl-backdrop: none;
|
|
80
|
+
/* Micro-interactions — hover, focus, pressed. */
|
|
81
|
+
--wzl-motion-fast: 120ms;
|
|
82
|
+
/* Entrances and exits — toasts, popovers, panels. */
|
|
83
|
+
--wzl-motion-medium: 240ms;
|
|
84
|
+
--wzl-ease-in-cubic: cubic-bezier(0.32, 0, 0.67, 0);
|
|
85
|
+
--wzl-ease-out-cubic: cubic-bezier(0.33, 1, 0.68, 1);
|
|
86
|
+
--wzl-ease-in-out-cubic: cubic-bezier(0.65, 0, 0.35, 1);
|
|
87
|
+
--wzl-ease-out-back: cubic-bezier(0.34, 1.56, 0.64, 1);
|
|
88
|
+
/* Condensed UI/display face. The heavier cuts get blocky at any size, so the weight tokens stay in the 200-400 range. */
|
|
89
|
+
--wzl-font-ui: Oswald, 'Helvetica Neue Condensed', 'Arial Narrow', system-ui, sans-serif;
|
|
90
|
+
--wzl-font-display: Oswald, 'Helvetica Neue Condensed', 'Arial Narrow', system-ui, sans-serif;
|
|
91
|
+
--wzl-font-body: Inter, system-ui, -apple-system, 'Segoe UI', sans-serif;
|
|
92
|
+
--wzl-font-mono: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
|
|
93
|
+
--wzl-font-weight-light: 200;
|
|
94
|
+
--wzl-font-weight-normal: 300;
|
|
95
|
+
--wzl-font-weight-medium: 350;
|
|
96
|
+
--wzl-font-weight-bold: 400;
|
|
97
|
+
--wzl-surface: var(--wzl-gray-800);
|
|
98
|
+
--wzl-surface-raised: var(--wzl-gray-700);
|
|
99
|
+
--wzl-surface-sunken: var(--wzl-gray-900);
|
|
100
|
+
--wzl-fg: var(--wzl-gray-100);
|
|
101
|
+
--wzl-fg-muted: var(--wzl-gray-300);
|
|
102
|
+
--wzl-fg-subtle: var(--wzl-gray-400);
|
|
103
|
+
--wzl-border: var(--wzl-gray-700);
|
|
104
|
+
--wzl-border-strong: var(--wzl-gray-600);
|
|
105
|
+
/* Accent for foreground use — text, icons, selected labels drawn on a surface. accent is a fill; the midnight base is too dim to read as text on dark surfaces. */
|
|
106
|
+
--wzl-accent-fg: var(--wzl-accent-strong);
|
|
107
|
+
/* Text drawn on a filled foreground-colored element (e.g. a slider thumb). Flips with the mode, so it is a semantic, not an alias to a primitive. */
|
|
108
|
+
--wzl-fg-inverse: var(--wzl-gray-900);
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
:root {
|
|
112
|
+
font-family: var(--wzl-font-ui);
|
|
113
|
+
font-weight: var(--wzl-font-weight-normal);
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
[data-wzl-theme='weasel'][data-wzl-mode='dark'],
|
|
117
|
+
[data-wzl-mode='dark'] {
|
|
118
|
+
color-scheme: dark;
|
|
119
|
+
--wzl-surface: var(--wzl-gray-800);
|
|
120
|
+
--wzl-surface-raised: var(--wzl-gray-700);
|
|
121
|
+
--wzl-surface-sunken: var(--wzl-gray-900);
|
|
122
|
+
--wzl-fg: var(--wzl-gray-100);
|
|
123
|
+
--wzl-fg-muted: var(--wzl-gray-300);
|
|
124
|
+
--wzl-fg-subtle: var(--wzl-gray-400);
|
|
125
|
+
--wzl-border: var(--wzl-gray-700);
|
|
126
|
+
--wzl-border-strong: var(--wzl-gray-600);
|
|
127
|
+
--wzl-accent-fg: var(--wzl-accent-strong);
|
|
128
|
+
--wzl-fg-inverse: var(--wzl-gray-900);
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
[data-wzl-theme='weasel'][data-wzl-mode='light'],
|
|
132
|
+
[data-wzl-mode='light'] {
|
|
133
|
+
color-scheme: light;
|
|
134
|
+
--wzl-surface: var(--wzl-gray-50);
|
|
135
|
+
--wzl-surface-raised: var(--wzl-gray-100);
|
|
136
|
+
--wzl-surface-sunken: var(--wzl-gray-200);
|
|
137
|
+
--wzl-fg: var(--wzl-gray-900);
|
|
138
|
+
--wzl-fg-muted: var(--wzl-gray-600);
|
|
139
|
+
--wzl-fg-subtle: var(--wzl-gray-500);
|
|
140
|
+
--wzl-border: var(--wzl-gray-200);
|
|
141
|
+
--wzl-border-strong: var(--wzl-gray-300);
|
|
142
|
+
--wzl-accent-fg: var(--wzl-accent-base);
|
|
143
|
+
--wzl-fg-inverse: var(--wzl-gray-50);
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
._tooltip_1km1f_1{z-index:1200;background:var(--wzl-surface);border:1px solid var(--wzl-border);border-radius:var(--wzl-radius-sm);color:var(--wzl-fg);font-family:var(--wzl-font-ui);max-width:260px;transition:opacity var(--wzl-motion-fast);padding:4px 8px;font-size:12px;line-height:1.3;box-shadow:0 4px 16px #00000059}._tooltip_1km1f_1[data-entering],._tooltip_1km1f_1[data-exiting]{opacity:0}._arrow_1km1f_22 svg{fill:var(--wzl-surface);stroke:var(--wzl-border);stroke-width:1px;display:block}._arrow_1km1f_22[data-placement=bottom] svg{transform:rotate(180deg)}._arrow_1km1f_22[data-placement=left] svg{transform:rotate(-90deg)}._arrow_1km1f_22[data-placement=right] svg{transform:rotate(90deg)}._bar_147qb_7{background:var(--wzl-surface);border:1px solid var(--wzl-border);-webkit-user-select:none;user-select:none;border-radius:4px;flex-direction:row;gap:1px;padding:2px;display:flex}._bar_147qb_7._vertical_147qb_18{flex-direction:column}._button_147qb_22{width:28px;height:28px;color:var(--wzl-fg);cursor:default;background:0 0;border:0;border-radius:2px;justify-content:center;align-items:center;padding:0;display:inline-flex}._button_147qb_22:hover:not([disabled]){background:var(--wzl-border)}._button_147qb_22:active:not([disabled]){background:color-mix(in srgb, var(--wzl-border) 70%, transparent)}._button_147qb_22[disabled]{opacity:.4;cursor:default}._button_147qb_22>svg{display:block}._root_1hmjs_10{height:var(--wzl-tb-height,28px);-webkit-user-select:none;user-select:none;touch-action:none;background:linear-gradient(#0000002e 0%,#0000000d 100%);border-radius:999px;padding:2px;display:inline-flex;overflow:hidden;box-shadow:inset 0 1px 2px #0006,0 1px #ffffff0f}._segment_1hmjs_32{min-width:0;font-family:var(--wzl-font-ui);font-weight:300;font-size:var(--btn-fontsize,14px);color:var(--wzl-fg-muted);cursor:pointer;isolation:isolate;transition:color var(--wzl-motion-fast);background:0 0;border:none;border-radius:0;flex:1 1 0;justify-content:center;align-items:center;margin:0;padding:0 12px;line-height:1;display:inline-flex;position:relative;overflow:hidden}._segment_1hmjs_32:first-child{border-radius:999px 0 0 999px}._segment_1hmjs_32:last-child{border-radius:0 999px 999px 0}._segment_1hmjs_32:only-child{border-radius:999px}._segment_1hmjs_32:focus-visible{outline:2px solid var(--wzl-accent);outline-offset:-2px}._segment_1hmjs_32:disabled{opacity:.5;cursor:not-allowed}._segment_1hmjs_32:hover:not(:disabled):not(._segmentSelected_1hmjs_79){color:var(--wzl-fg)}._segmentSelected_1hmjs_79{background:linear-gradient(180deg, color-mix(in srgb, var(--wzl-accent) var(--btn-top-alpha,45%), transparent) 0%, color-mix(in srgb, var(--wzl-accent) var(--btn-upper-alpha,70%), transparent) calc(var(--btn-equator,52%) - var(--btn-equator-spread,12%)), color-mix(in srgb, var(--wzl-accent) var(--btn-equator-tint,95%), white) var(--btn-equator,52%), var(--wzl-accent) calc(var(--btn-equator,52%) + var(--btn-equator-spread,12%) * 1.6), color-mix(in srgb, var(--wzl-accent) var(--btn-base-tint,70%), black) 100%);-webkit-backdrop-filter:blur(var(--btn-blur,6px)) saturate(var(--btn-saturate,1.3));color:var(--wzl-fg-on-accent);text-shadow:0 1px 0 rgba(0, 0, 0, var(--btn-text-shadow,.35)), var(--btn-text-inset-x,0px) var(--btn-text-inset-y,1px) 0 rgba(0, 0, 0, var(--btn-text-inset,.55)), 0 0 6px rgba(0, 0, 0, calc(var(--btn-text-shadow,.35) * .5));box-shadow:inset 0 1px 0 rgba(255, 255, 255, var(--btn-inset-hi,.42)), inset 0 -1px 2px rgba(0, 0, 0, var(--btn-inset-lo,.3)), 0 0 0 1px rgba(0, 0, 0, var(--btn-rim,.22)), 0 1px 2px rgba(0, 0, 0, var(--btn-drop-near,.3)), 0 2px 4px rgba(0, 0, 0, calc(var(--btn-drop-far,.18) * .8))}._segmentSelected_1hmjs_79:before{content:"";inset:1px 1px var(--btn-gloss-bottom,50%) 1px;border-radius:inherit;background:linear-gradient(180deg, rgba(255, 255, 255, var(--btn-gloss-top,.42)) 0%, rgba(255, 255, 255, var(--btn-gloss-mid,.12)) 60%, #fff0 100%);pointer-events:none;z-index:1;border-bottom-right-radius:0;border-bottom-left-radius:0;position:absolute}._segmentSelected_1hmjs_79>*{z-index:2;position:relative}._size_sm_1hmjs_137{height:17px;padding:1px}._size_sm_1hmjs_137 ._segment_1hmjs_32{padding:0 8px;font-size:11px}._variant_minimal_1hmjs_150{height:auto;box-shadow:none;background:0 0;border-radius:0;gap:2px;padding:0}._variant_minimal_1hmjs_150 ._segment_1hmjs_32{color:var(--wzl-fg-muted);border-radius:2px;padding:0 4px;font-size:11px;font-weight:400;line-height:1.4;transition:none}._variant_minimal_1hmjs_150 ._segment_1hmjs_32:first-child,._variant_minimal_1hmjs_150 ._segment_1hmjs_32:last-child,._variant_minimal_1hmjs_150 ._segment_1hmjs_32:only-child{border-radius:2px}._variant_minimal_1hmjs_150 ._segment_1hmjs_32:hover:not(:disabled):not(._segmentSelected_1hmjs_79){color:var(--wzl-fg);background:#ffffff0f}._variant_minimal_1hmjs_150 ._segmentSelected_1hmjs_79{-webkit-backdrop-filter:none;color:var(--wzl-accent-fg,var(--wzl-accent));text-shadow:none;box-shadow:none;background:0 0;font-weight:500}._variant_minimal_1hmjs_150 ._segmentSelected_1hmjs_79:before{content:none}._badge_16w4d_1{vertical-align:baseline;align-items:baseline;gap:var(--badge-gap,4px);font-size:var(--badge-font-size,10px);text-transform:uppercase;letter-spacing:.04em;color:var(--badge-fg,var(--wzl-fg-muted));--badge-edge:var(--wzl-border);--badge-fill:var(--wzl-surface);--badge-fg:var(--badge-edge);font:inherit;background:0 0;border:0;font-family:inherit;text-decoration:none;display:inline-flex;position:relative}._badge_16w4d_1 *{text-decoration:none}._badge_16w4d_1[data-size=md]{--badge-gap:6px;--badge-pad-x:10px;--badge-pad-y:3px;--badge-font-size:12px}._deco_16w4d_33{pointer-events:none;width:100%;height:100%;position:absolute;inset:0;overflow:visible}._deco_16w4d_33 .badge-fill{fill:var(--badge-fill);stroke:none}._deco_16w4d_33 .badge-stroke{fill:none;stroke:var(--badge-edge);stroke-width:var(--badge-stroke-width,1px);vector-effect:non-scaling-stroke}._deco_16w4d_33 .badge-focus{fill:none;stroke:var(--badge-edge);stroke-width:calc(var(--badge-stroke-width,1px) + 1px);vector-effect:non-scaling-stroke;opacity:.6}._deco_16w4d_33 .badge-bevel-light{fill:#ffffff38;stroke:none}._deco_16w4d_33 .badge-bevel-medium-light{fill:#ffffff1a;stroke:none}._deco_16w4d_33 .badge-bevel-medium-dark{fill:#00000029;stroke:none}._deco_16w4d_33 .badge-bevel-dark{fill:#00000052;stroke:none}._content_16w4d_49{align-items:baseline;gap:inherit;z-index:1;display:inline-flex;position:relative}._badge_16w4d_1[data-tone=accent]{--badge-edge:var(--wzl-accent-fg,var(--wzl-accent,#7fb069))}._badge_16w4d_1[data-tone=info]{--badge-edge:#7ab8d4}._badge_16w4d_1[data-tone=warn]{--badge-edge:#d4a574}._badge_16w4d_1[data-tone=danger]{--badge-edge:#c43c3c}._badge_16w4d_1[data-tone=muted]{--badge-edge:var(--wzl-fg-muted)}._badge_16w4d_1[data-tone=neutral]{--badge-edge:var(--wzl-border);--badge-fg:var(--wzl-fg-muted)}._badge_16w4d_1[data-variant=outline]{--badge-fill:var(--wzl-surface);--badge-fg:var(--badge-edge)}._badge_16w4d_1[data-variant=solid]{--badge-fill:var(--badge-edge);--badge-fg:#fff;font-weight:600}._badge_16w4d_1[data-variant=subtle]{--badge-fill:color-mix(in oklab, var(--badge-edge) 14%, transparent);--badge-fg:var(--badge-edge)}._badge_16w4d_1[data-tone=neutral]:not([data-variant=solid]){--badge-fg:var(--wzl-fg-muted)}._badge_16w4d_1{padding:calc(var(--badge-pad-y,1px) + var(--badge-inset-top,0px)) calc(var(--badge-pad-x,6px) + var(--badge-inset-right,0px)) calc(var(--badge-pad-y,1px) + var(--badge-inset-bottom,0px)) calc(var(--badge-pad-x,6px) + var(--badge-inset-left,0px))}._badge_16w4d_1[data-shape=pill]{box-sizing:border-box;-webkit-box-decoration-break:slice;box-decoration-break:slice;border-radius:9999px;display:inline}._badge_16w4d_1[data-shape=pill] ._content_16w4d_49,._badge_16w4d_1[data-shape=plain] ._content_16w4d_49{display:inline}._badge_16w4d_1[data-shape=pill][data-variant=solid],._badge_16w4d_1[data-shape=pill][data-variant=subtle]{background:var(--badge-fill)}._badge_16w4d_1[data-shape=pill]{border:var(--badge-stroke-width,1px) solid transparent}._badge_16w4d_1[data-shape=pill][data-variant=outline],._badge_16w4d_1[data-shape=pill][data-variant=solid]{border-color:var(--badge-edge)}._badge_16w4d_1[data-shape=pill][data-focused=true]{outline:2px solid color-mix(in oklab, var(--badge-edge) 60%, transparent);outline-offset:2px}._badge_16w4d_1[data-shape=plain]{letter-spacing:.04em;text-transform:none;color:var(--badge-fg);-webkit-box-decoration-break:slice;box-decoration-break:slice;background:0 0;padding:0;display:inline}._badge_16w4d_1[data-shape=plain][data-focused=true]{outline:2px solid color-mix(in oklab, var(--badge-edge) 60%, transparent);outline-offset:3px;border-radius:2px}._badge_16w4d_1[data-shape=plaque] ._content_16w4d_49{text-shadow:0 1px #ffffff24,0 -.5px #00000080}button._badge_16w4d_1,a._badge_16w4d_1{cursor:pointer;border:0 solid #0000;outline:0}button._badge_16w4d_1:hover,a._badge_16w4d_1:hover{--badge-edge:color-mix(in oklab, var(--badge-edge) 88%, white)}@media (prefers-reduced-motion:reduce){button._badge_16w4d_1:hover,a._badge_16w4d_1:hover{--badge-edge:var(--badge-edge)}}._remove_16w4d_161{width:14px;height:14px;color:var(--badge-fg);cursor:pointer;font:inherit;vertical-align:middle;background:0 0;border:0;border-radius:50%;justify-content:center;align-items:center;margin-left:2px;padding:0;font-size:14px;line-height:1;display:inline-flex}._remove_16w4d_161:hover{background:color-mix(in oklab, var(--badge-fg) 20%, transparent)}._remove_16w4d_161>svg{display:block}._badge_16w4d_1[data-size=md] ._remove_16w4d_161{width:16px;height:16px;font-size:16px}._badge_16w4d_1[data-size=md] ._remove_16w4d_161>svg{width:12px;height:12px}._button_yji6d_3{--btn-radius:calc(var(--btn-height) * .1);--btn-fontweight:400;--btn-fontsize:14px;--btn-height:24px;--btn-padx:12px;--btn-top-alpha:45%;--btn-upper-alpha:70%;--btn-equator:52%;--btn-equator-spread:12%;--btn-equator-tint:95%;--btn-base-tint:70%;--btn-blur:6px;--btn-saturate:1.3;--btn-gloss-top:.42;--btn-gloss-mid:.12;--btn-gloss-bottom:50%;--btn-rim:.22;--btn-drop-near:.3;--btn-drop-far:.18;--btn-inset-hi:.42;--btn-inset-lo:.3;--btn-text-shadow:.35;--btn-text-inset:.55;--btn-text-inset-x:0px;--btn-text-inset-y:1px;border-radius:var(--btn-radius);font-family:var(--wzl-font-ui);font-weight:var(--btn-fontweight);font-style:normal;font-size:var(--btn-fontsize);height:var(--btn-height);padding:0 var(--btn-padx);cursor:pointer;-webkit-user-select:none;user-select:none;isolation:isolate;transition:filter var(--wzl-motion-fast), box-shadow var(--wzl-motion-fast), transform 80ms;border:none;justify-content:center;align-items:center;gap:6px;line-height:1;display:inline-flex;position:relative;overflow:hidden}._button_yji6d_3:before{content:"";inset:1px 1px var(--btn-gloss-bottom) 1px;border-top-left-radius:var(--btn-radius);border-top-right-radius:var(--btn-radius);background:linear-gradient(180deg, rgba(255, 255, 255, var(--btn-gloss-top)) 0%, rgba(255, 255, 255, var(--btn-gloss-mid)) 60%, #fff0 100%);pointer-events:none;z-index:1;transition:opacity var(--wzl-motion-fast);border-bottom-right-radius:0;border-bottom-left-radius:0;position:absolute}._button_yji6d_3>*{z-index:2;position:relative}._button_yji6d_3:focus-visible{outline:2px solid var(--wzl-focus-ring);outline-offset:1px}._button_yji6d_3:disabled{opacity:.5;cursor:not-allowed}._size_sm_yji6d_110{--btn-height:20px;--btn-padx:8px;--btn-fontsize:13px}._size_md_yji6d_111{--btn-height:24px;--btn-padx:12px;--btn-fontsize:14px}._iconOnly_yji6d_113._size_sm_yji6d_110{--btn-padx:0;width:20px}._iconOnly_yji6d_113._size_md_yji6d_111{--btn-padx:0;width:24px}._variant_primary_yji6d_121{background:linear-gradient(180deg, color-mix(in srgb, var(--wzl-accent) var(--btn-top-alpha), transparent) 0%, color-mix(in srgb, var(--wzl-accent) var(--btn-upper-alpha), transparent) calc(var(--btn-equator) - var(--btn-equator-spread)), color-mix(in srgb, var(--wzl-accent) var(--btn-equator-tint), white) var(--btn-equator), var(--wzl-accent) calc(var(--btn-equator) + var(--btn-equator-spread) * 1.6), color-mix(in srgb, var(--wzl-accent) var(--btn-base-tint), black) 100%);-webkit-backdrop-filter:blur(var(--btn-blur)) saturate(var(--btn-saturate));color:var(--wzl-fg-on-accent);text-shadow:0 1px 0 rgba(0, 0, 0, var(--btn-text-shadow)), var(--btn-text-inset-x) var(--btn-text-inset-y) 0 rgba(0, 0, 0, var(--btn-text-inset)), 0 0 6px rgba(0, 0, 0, calc(var(--btn-text-shadow) * .5));box-shadow:inset 0 1px 0 rgba(255, 255, 255, var(--btn-inset-hi)), inset 0 -1px 2px rgba(0, 0, 0, var(--btn-inset-lo)), 0 0 0 1px rgba(0, 0, 0, var(--btn-rim)), 0 1px 2px rgba(0, 0, 0, var(--btn-drop-near)), 0 3px 6px rgba(0, 0, 0, var(--btn-drop-far))}._variant_primary_yji6d_121:hover:not(:disabled){filter:brightness(1.08)saturate(1.06)}._variant_primary_yji6d_121:active:not(:disabled){background:linear-gradient(180deg, color-mix(in srgb, var(--wzl-accent) 80%, black) 0%, color-mix(in srgb, var(--wzl-accent) 95%, black) 50%, color-mix(in srgb, var(--wzl-accent) 60%, white) 100%);box-shadow:inset 0 2px 4px #00000059, inset 0 -1px 0 #ffffff40, 0 0 0 1px rgba(0, 0, 0, calc(var(--btn-rim) + .06));transform:translateY(.5px)}._variant_primary_yji6d_121:active:before{opacity:.3}._variant_secondary_yji6d_168{background:linear-gradient(180deg, color-mix(in srgb, var(--wzl-fg) 25%, transparent) 0%, color-mix(in srgb, var(--wzl-fg) 10%, transparent) calc(var(--btn-equator) - var(--btn-equator-spread)), color-mix(in srgb, var(--wzl-surface-raised) 90%, white) var(--btn-equator), var(--wzl-surface-raised) calc(var(--btn-equator) + var(--btn-equator-spread) * 1.6), color-mix(in srgb, var(--wzl-surface-sunken) 80%, black) 100%);-webkit-backdrop-filter:blur(var(--btn-blur)) saturate(var(--btn-saturate));color:var(--wzl-fg);text-shadow:0 1px 0 rgba(0, 0, 0, calc(var(--btn-text-shadow) * .7)), var(--btn-text-inset-x) var(--btn-text-inset-y) 0 rgba(0, 0, 0, calc(var(--btn-text-inset) * .7));box-shadow:inset 0 1px 0 rgba(255, 255, 255, calc(var(--btn-inset-hi) * .5)), inset 0 -1px 2px rgba(0, 0, 0, calc(var(--btn-inset-lo) * .83)), 0 0 0 1px rgba(0, 0, 0, calc(var(--btn-rim) + .03)), 0 1px 2px rgba(0, 0, 0, calc(var(--btn-drop-near) * .93)), 0 3px 6px rgba(0, 0, 0, calc(var(--btn-drop-far) * .89))}._variant_secondary_yji6d_168:hover:not(:disabled){filter:brightness(1.1)}._variant_secondary_yji6d_168:active:not(:disabled){background:linear-gradient(180deg, var(--wzl-surface-sunken) 0%, var(--wzl-surface-raised) 100%);transform:translateY(.5px);box-shadow:inset 0 2px 4px #0006,0 0 0 1px #0000004d}._variant_secondary_yji6d_168:active:before{opacity:.2}._variant_ghost_yji6d_203{color:var(--wzl-fg);box-shadow:none;background:0 0}._variant_ghost_yji6d_203:before{display:none}._variant_ghost_yji6d_203:hover:not(:disabled){background:color-mix(in srgb, var(--wzl-fg) 10%, transparent)}._variant_ghost_yji6d_203:active:not(:disabled){background:color-mix(in srgb, var(--wzl-fg) 18%, transparent)}._fullWidth_yji6d_220{width:100%}._loading_yji6d_221 ._label_yji6d_221{opacity:.7}._iconSlot_yji6d_225{flex:none;justify-content:center;align-items:center;display:inline-flex}._size_sm_yji6d_110 ._iconSlot_yji6d_225>svg{width:12px;height:12px}._size_md_yji6d_111 ._iconSlot_yji6d_225>svg{width:14px;height:14px}._label_yji6d_221{display:inline-block}._spinner_yji6d_239{justify-content:center;align-items:center;animation:.7s linear infinite _wzl-btn-spin_yji6d_1;display:inline-flex}@keyframes _wzl-btn-spin_yji6d_1{to{transform:rotate(360deg)}}._anchor_18o4b_1{pointer-events:none;position:fixed}._popover_18o4b_6{z-index:1200;--callout-accent:var(--wzl-accent-strong);background:var(--wzl-surface);border:1px solid var(--callout-accent);border-radius:var(--wzl-radius-md);color:var(--wzl-fg);font-family:var(--wzl-font-ui);max-width:320px;transition:opacity var(--wzl-motion-fast);box-shadow:0 12px 40px #0006}._popover_18o4b_6[data-entering],._popover_18o4b_6[data-exiting]{opacity:0}._toneWarning_18o4b_25{--callout-accent:var(--wzl-warning,#d99a3f)}._toneDanger_18o4b_29{--callout-accent:var(--wzl-danger,#d94a3f)}._arrow_18o4b_33 svg{fill:var(--wzl-surface);stroke:var(--callout-accent);stroke-width:1px;display:block}._arrow_18o4b_33[data-placement=bottom] svg{transform:rotate(180deg)}._arrow_18o4b_33[data-placement=left] svg{transform:rotate(-90deg)}._arrow_18o4b_33[data-placement=right] svg{transform:rotate(90deg)}._dialog_18o4b_52{max-height:inherit;outline:none;flex-direction:column;display:flex}._header_18o4b_59{align-items:center;gap:8px;padding:10px 12px 0;display:flex}._title_18o4b_66{flex:1;margin:0;font-size:13px;font-weight:600}._close_18o4b_73{color:var(--wzl-fg-muted);cursor:pointer;border-radius:var(--wzl-radius-sm);background:0 0;border:none;flex:none;padding:2px 4px;font-size:16px;line-height:1}._close_18o4b_73:hover{color:var(--wzl-fg)}._body_18o4b_89{padding:8px 12px 10px;font-size:13px;line-height:1.4;overflow-y:auto}._footer_18o4b_96{justify-content:flex-end;gap:8px;padding:0 12px 10px;display:flex}._checkbox_18mi9_1{cursor:pointer;font-family:var(--wzl-font-ui);color:var(--wzl-fg);-webkit-user-select:none;user-select:none;align-items:center;gap:8px;font-size:13px;display:inline-flex}._checkbox_18mi9_1[data-disabled]{opacity:.5;cursor:not-allowed}._box_18mi9_18{background:var(--wzl-surface-sunken);border:1px solid var(--wzl-border-strong);border-radius:var(--wzl-radius-sm);width:14px;height:14px;transition:background-color var(--wzl-motion-fast), border-color var(--wzl-motion-fast), box-shadow var(--wzl-motion-fast);flex:none;position:relative}._checkbox_18mi9_1[data-focus-visible] ._box_18mi9_18{box-shadow:0 0 0 2px var(--wzl-focus-ring)}._checkbox_18mi9_1[data-hovered]:not([data-disabled]) ._box_18mi9_18{border-color:var(--wzl-fg-muted)}._checkbox_18mi9_1[data-selected] ._box_18mi9_18,._checkbox_18mi9_1[data-indeterminate] ._box_18mi9_18{background:var(--wzl-accent-strong);border-color:var(--wzl-accent-strong)}._checkbox_18mi9_1[data-invalid] ._box_18mi9_18{border-color:var(--wzl-danger,#ff5b5b)}._checkmark_18mi9_47{color:var(--wzl-fg-on-accent);opacity:0;pointer-events:none;position:absolute;inset:0}._checkbox_18mi9_1[data-selected] ._checkmark_18mi9_47,._checkbox_18mi9_1[data-indeterminate] ._checkmark_18mi9_47{opacity:1}._label_18mi9_60{line-height:1.2}._root_r50jb_1{align-items:center;gap:6px;display:inline-flex}._chip_r50jb_7{border-radius:4px;display:inline-flex;position:relative;overflow:hidden}._color_r50jb_14{border:1px solid var(--wzl-border,#444);cursor:pointer;background:0 0;border-radius:4px;block-size:20px;inline-size:28px;padding:0}._root_r50jb_1[data-mixed] ._chip_r50jb_7:after{content:"";pointer-events:none;background:repeating-conic-gradient(var(--wzl-border,#666) 0% 25%, var(--wzl-surface,#2e2f36) 0% 50%) 50% / 8px 8px;border-radius:3px;position:absolute;inset:1px}._alphaRange_r50jb_39{min-inline-size:48px;accent-color:var(--wzl-accent,#7ab8d4);flex:1}._alphaRange_r50jb_39:disabled{opacity:.45}._alphaReadout_r50jb_49{text-align:end;opacity:.7;min-inline-size:3ch;font-size:11px}._field_aqiak_1{font-family:var(--wzl-font-ui);color:var(--wzl-fg);flex-direction:column;gap:4px;display:flex}._label_aqiak_9{color:var(--wzl-fg);cursor:default;font-size:12px;font-weight:500}._hint_aqiak_16{color:var(--wzl-fg-subtle);font-size:11px;line-height:1.4}._error_aqiak_22{color:var(--wzl-danger,#ff5b5b);font-size:11px;line-height:1.4}._row_aqiak_28{flex-direction:row;align-items:center;gap:8px}._row_aqiak_28 ._label_aqiak_9{flex:1;min-width:0}._field_7wlzm_1{flex-direction:column;gap:4px;width:100%;min-width:0;display:flex}._frame_7wlzm_9{background:var(--wzl-surface-sunken);border:1px solid var(--wzl-border);border-radius:var(--wzl-radius-sm);height:24px;color:var(--wzl-fg);font-family:var(--wzl-font-ui);transition:border-color var(--wzl-motion-fast), box-shadow var(--wzl-motion-fast);align-items:stretch;font-size:13px;line-height:1;display:flex;overflow:hidden}._frame_7wlzm_9:focus-within{border-color:var(--wzl-focus-ring);box-shadow:0 0 0 1px var(--wzl-focus-ring)}._field_7wlzm_1[data-invalid] ._frame_7wlzm_9{border-color:var(--wzl-danger,#ff5b5b)}._field_7wlzm_1[data-disabled] ._frame_7wlzm_9{opacity:.5;cursor:not-allowed}._frame_7wlzm_9 input{min-width:0;color:inherit;font:inherit;background:0 0;border:none;outline:none;flex:1;padding:0 8px}._frame_7wlzm_9 input::placeholder{color:var(--wzl-fg-subtle)}._openButton_7wlzm_53{border:none;border-left:1px solid var(--wzl-border);width:22px;color:var(--wzl-fg-muted);cursor:pointer;background:0 0;justify-content:center;align-items:center;padding:0;display:inline-flex}._openButton_7wlzm_53[data-hovered]:not([data-disabled]){color:var(--wzl-fg)}._openButton_7wlzm_53 svg{width:10px;height:10px}._popover_7wlzm_75{min-width:var(--trigger-width);outline:none}._listbox_7wlzm_80{background:var(--wzl-surface-raised);border:1px solid var(--wzl-border);border-radius:var(--wzl-radius-md);max-height:280px;font-family:var(--wzl-font-ui);outline:none;padding:4px;font-size:13px;overflow:auto;box-shadow:0 8px 24px #0000004d}._option_7wlzm_93{cursor:pointer;color:var(--wzl-fg);border-radius:3px;outline:none;align-items:center;padding:4px 8px;display:flex}._option_7wlzm_93[data-focused]{background:color-mix(in srgb, var(--wzl-fg) 10%, transparent)}._option_7wlzm_93[data-selected]{font-weight:500}._option_7wlzm_93[data-disabled]{opacity:.4;cursor:not-allowed}._empty_7wlzm_116{color:var(--wzl-fg-subtle);padding:6px 8px;font-size:12px}._root_1djm7_1{--plot-bg:var(--wzl-surface-sunken);--plot-grid:var(--wzl-line);--plot-axis:var(--wzl-fg);background:var(--plot-bg);-webkit-user-select:none;user-select:none;touch-action:none;outline:none;display:block;overflow:visible}._root_1djm7_1:focus-visible{outline:2px solid var(--wzl-focus-ring);outline-offset:2px}._grid_1djm7_28{stroke:var(--plot-grid);stroke-width:1px;fill:none}._axis_1djm7_34{stroke:var(--plot-axis);stroke-width:var(--wzl-line-width);fill:none}._root_ybpym_1{--curve-line:var(--wzl-curve-color);--curve-line-width:var(--wzl-curve-width);--curve-fill:color-mix(in srgb, var(--curve-line) 30%, transparent);--curve-anchor-fill:var(--wzl-surface);--curve-anchor-stroke:var(--curve-line);--curve-anchor-radius:4;--curve-anchor-active-fill:var(--curve-line);--curve-pinned-fill:var(--wzl-fg-subtle)}._fill_ybpym_19{fill:var(--curve-fill);stroke:none;pointer-events:none}._curve_ybpym_25{stroke:var(--curve-line);stroke-width:var(--curve-line-width);fill:none;pointer-events:stroke}._anchor_ybpym_32{fill:var(--curve-anchor-fill);stroke:var(--curve-anchor-stroke);stroke-width:1.5px;cursor:grab}._anchor_ybpym_32:hover{fill:var(--curve-anchor-active-fill)}._anchor_ybpym_32._active_ybpym_43{fill:var(--curve-anchor-active-fill);cursor:grabbing}._anchor_ybpym_32._pinned_ybpym_48{fill:var(--curve-pinned-fill);cursor:default}._anchor_ybpym_32._locked_ybpym_55{cursor:not-allowed}._hidden_ybpym_71{display:none}._grid_wvlvv_1{width:100%;position:relative}._table_wvlvv_6{border-collapse:collapse;width:100%;font-size:11px}._table_wvlvv_6 th,._table_wvlvv_6 td{text-align:left;vertical-align:middle;padding:3px 6px}._table_wvlvv_6 tbody tr{border-bottom:1px solid #ffffff0a}._table_wvlvv_6 th{color:var(--wzl-fg-muted);background:var(--wzl-surface,#2a2018);z-index:1;border-bottom:1px solid var(--wzl-border);font-weight:600;position:sticky;top:0}._sortable_wvlvv_34{cursor:pointer;-webkit-user-select:none;user-select:none}._sortable_wvlvv_34:hover,._sortActive_wvlvv_39{color:var(--wzl-fg,#e6e7e9)}._empty_wvlvv_41{color:var(--wzl-fg-muted);text-align:center;padding:8px 0;font-style:italic}._handleCol_wvlvv_49{width:14px}._handleCell_wvlvv_50{cursor:grab;width:14px;color:var(--wzl-fg-muted);-webkit-user-select:none;user-select:none;text-align:center}._handleCell_wvlvv_50:active{cursor:grabbing}._dragging_wvlvv_59{opacity:.4}._dropIndicator_wvlvv_61{background:var(--wzl-accent,#7fb069);pointer-events:none;height:2px;position:absolute;left:0;right:0}._overlay_13xy9_1{z-index:1000;opacity:0;transition:opacity var(--wzl-motion-fast);background:#0006;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}._overlay_13xy9_1[data-entering]{opacity:0}._overlay_13xy9_1[data-entering][data-rac]{opacity:1}._overlay_13xy9_1[data-exiting]{opacity:0}._overlay_13xy9_1[data-rac]:not([data-entering]):not([data-exiting]){opacity:1}._modal_13xy9_29{background:var(--wzl-surface);border:1px solid var(--wzl-border);border-radius:var(--wzl-radius-md);color:var(--wzl-fg);font-family:var(--wzl-font-ui);outline:none;flex-direction:column;max-width:min(900px,100vw - 32px);max-height:calc(100vh - 32px);display:flex;box-shadow:0 24px 64px #00000073}._dialog_13xy9_43{outline:none;flex-direction:column;flex:1;min-height:0;display:flex}._header_13xy9_51{border-bottom:1px solid var(--wzl-border);flex:none;align-items:center;gap:12px;padding:14px 16px;display:flex}._title_13xy9_60{color:var(--wzl-fg);flex:1;margin:0;font-size:14px;font-weight:600}._close_13xy9_68{border-radius:var(--wzl-radius-sm);width:22px;height:22px;color:var(--wzl-fg-muted);cursor:pointer;background:0 0;border:1px solid #0000;flex:none;justify-content:center;align-items:center;padding:0;font-size:16px;line-height:1;display:inline-flex}._close_13xy9_68:hover{background:color-mix(in srgb, var(--wzl-fg) 10%, transparent);color:var(--wzl-fg)}._body_13xy9_90{flex:1;min-height:0;padding:16px;overflow:auto}._footer_13xy9_97{border-top:1px solid var(--wzl-border);flex:none;justify-content:flex-end;align-items:center;gap:8px;padding:12px 16px;display:flex}._root_q2asl_1{-webkit-user-select:none;user-select:none;touch-action:none;position:relative}._row_q2asl_8{align-items:center;gap:8px;display:flex}._track_q2asl_14{min-width:0;height:var(--rp-track-height,24px);background:var(--wzl-surface-sunken);border:1px solid var(--wzl-border);cursor:crosshair;border-radius:3px;flex:1;position:relative}._trackInner_q2asl_25{border-radius:3px;position:absolute;inset:0;overflow:hidden}._thumb_q2asl_35{background:color-mix(in srgb, var(--wzl-fg-muted) 70%, transparent);border:1px solid var(--wzl-border-strong);cursor:ew-resize;-webkit-backdrop-filter:blur(3px);font-variant-numeric:tabular-nums;width:14px;color:var(--wzl-fg-inverse);text-shadow:0 0 2px #ffffffb3;border-radius:3px;justify-content:center;align-items:center;margin-left:-7px;font:500 .65rem/1 ui-sans-serif,system-ui,sans-serif;display:flex;position:absolute;top:-2px;bottom:-2px;box-shadow:0 1px 2px #0003}._thumb_q2asl_35:focus-visible{outline:2px solid var(--wzl-accent);outline-offset:1px}._thumbActive_q2asl_74{z-index:1}._readoutsBelow_q2asl_79{height:14px;margin-top:4px;position:relative}._readoutBelow_q2asl_85{color:var(--wzl-fg-muted);white-space:nowrap;font:500 .65rem/1 ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;position:absolute;transform:translate(-50%)}._readoutInline_q2asl_93{color:var(--wzl-fg-muted);vertical-align:middle;margin-left:8px;font:500 .7rem/1 ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;display:inline-block}._notched_q2asl_101{background:var(--thumb-svg,none);-webkit-backdrop-filter:none;box-shadow:none;filter:drop-shadow(0 1px 1px #00000040);--thumb-svg:url("data:image/svg+xml;utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 14 30' preserveAspectRatio='none'%3E%3Cpolygon points='0,0 2.52,0 7,10.3 11.48,0 14,0 14,30 0,30' fill='rgba(255,255,255,0.62)' stroke='rgba(0,0,0,0.55)' stroke-width='0.75' stroke-linejoin='miter'/%3E%3C/svg%3E");background-color:#0000;background-repeat:no-repeat;background-size:100% 100%;border:none}._root_1pyfg_6{height:var(--wzl-tb-height,28px);-webkit-user-select:none;user-select:none;touch-action:none;background:linear-gradient(#0000002e 0%,#0000000d 100%);border-radius:999px;padding:2px;display:inline-flex;overflow:hidden;box-shadow:inset 0 1px 2px #0006,0 1px #ffffff0f}._segment_1pyfg_28{min-width:0;font-family:var(--wzl-font-ui);font-weight:300;font-size:var(--btn-fontsize,14px);color:var(--wzl-fg-muted);cursor:pointer;isolation:isolate;transition:color var(--wzl-motion-fast);background:0 0;border:none;border-radius:0;flex:1 1 0;justify-content:center;align-items:center;margin:0;padding:0 12px;line-height:1;display:inline-flex;position:relative;overflow:hidden}._segment_1pyfg_28:first-child{border-radius:999px 0 0 999px}._segment_1pyfg_28:last-child{border-radius:0 999px 999px 0}._segment_1pyfg_28:only-child{border-radius:999px}._segment_1pyfg_28:focus-visible{outline:2px solid var(--wzl-accent);outline-offset:-2px}._segment_1pyfg_28:disabled{opacity:.5;cursor:not-allowed}._segment_1pyfg_28:hover:not(:disabled):not(._segmentSelected_1pyfg_75){color:var(--wzl-fg)}._segmentSelected_1pyfg_75{background:linear-gradient(180deg, color-mix(in srgb, var(--wzl-accent) var(--btn-top-alpha,45%), transparent) 0%, color-mix(in srgb, var(--wzl-accent) var(--btn-upper-alpha,70%), transparent) calc(var(--btn-equator,52%) - var(--btn-equator-spread,12%)), color-mix(in srgb, var(--wzl-accent) var(--btn-equator-tint,95%), white) var(--btn-equator,52%), var(--wzl-accent) calc(var(--btn-equator,52%) + var(--btn-equator-spread,12%) * 1.6), color-mix(in srgb, var(--wzl-accent) var(--btn-base-tint,70%), black) 100%);-webkit-backdrop-filter:blur(var(--btn-blur,6px)) saturate(var(--btn-saturate,1.3));color:var(--wzl-fg-on-accent);text-shadow:0 1px 0 rgba(0, 0, 0, var(--btn-text-shadow,.35)), var(--btn-text-inset-x,0px) var(--btn-text-inset-y,1px) 0 rgba(0, 0, 0, var(--btn-text-inset,.55)), 0 0 6px rgba(0, 0, 0, calc(var(--btn-text-shadow,.35) * .5));box-shadow:inset 0 1px 0 rgba(255, 255, 255, var(--btn-inset-hi,.42)), inset 0 -1px 2px rgba(0, 0, 0, var(--btn-inset-lo,.3)), 0 0 0 1px rgba(0, 0, 0, var(--btn-rim,.22)), 0 1px 2px rgba(0, 0, 0, var(--btn-drop-near,.3)), 0 2px 4px rgba(0, 0, 0, calc(var(--btn-drop-far,.18) * .8))}._segmentSelected_1pyfg_75:before{content:"";inset:1px 1px var(--btn-gloss-bottom,50%) 1px;border-radius:inherit;background:linear-gradient(180deg, rgba(255, 255, 255, var(--btn-gloss-top,.42)) 0%, rgba(255, 255, 255, var(--btn-gloss-mid,.12)) 60%, #fff0 100%);pointer-events:none;z-index:1;border-bottom-right-radius:0;border-bottom-left-radius:0;position:absolute}._segmentSelected_1pyfg_75>*{z-index:2;position:relative}._segmentMixed_1pyfg_134{background:color-mix(in srgb, var(--wzl-accent) 22%, transparent);color:var(--wzl-fg);box-shadow:inset 0 0 0 1px color-mix(in srgb, var(--wzl-accent) 45%, transparent)}._segmentMixed_1pyfg_134:hover:not(:disabled){background:color-mix(in srgb, var(--wzl-accent) 32%, transparent)}._variant_minimal_1pyfg_144 ._segmentMixed_1pyfg_134{background:color-mix(in srgb, var(--wzl-accent) 18%, transparent);box-shadow:none;color:var(--wzl-fg)}._size_sm_1pyfg_153{height:17px;padding:1px}._size_sm_1pyfg_153 ._segment_1pyfg_28{padding:0 8px;font-size:11px}._variant_minimal_1pyfg_144{border:1px solid var(--wzl-border,#ffffff2e);height:auto;box-shadow:none;background:0 0;border-radius:3px;gap:0;padding:0}._variant_minimal_1pyfg_144 ._segment_1pyfg_28{color:var(--wzl-fg-muted);border-radius:0;padding:0 6px;font-size:11px;font-weight:400;line-height:1.4;transition:none}._variant_minimal_1pyfg_144 ._segment_1pyfg_28+._segment_1pyfg_28{border-left:1px solid var(--wzl-border,#ffffff2e)}._variant_minimal_1pyfg_144 ._segment_1pyfg_28:first-child,._variant_minimal_1pyfg_144 ._segment_1pyfg_28:last-child,._variant_minimal_1pyfg_144 ._segment_1pyfg_28:only-child{border-radius:0}._variant_minimal_1pyfg_144 ._segment_1pyfg_28:hover:not(:disabled):not(._segmentSelected_1pyfg_75){color:var(--wzl-fg);background:#ffffff0f}._variant_minimal_1pyfg_144 ._segmentSelected_1pyfg_75{-webkit-backdrop-filter:none;color:var(--wzl-accent-fg,var(--wzl-accent));text-shadow:none;box-shadow:none;background:0 0;font-weight:500}._variant_minimal_1pyfg_144 ._segmentSelected_1pyfg_75:before{content:none}._root_15yko_1{flex-direction:column;gap:8px;min-inline-size:0;display:flex}._swatches_15yko_8{flex-wrap:wrap;gap:6px;display:flex}._swatch_15yko_8{flex:0 auto;min-inline-size:0}._overlay_6yu3h_3{pointer-events:none;position:absolute;inset:0}._guide_6yu3h_13{fill:none;stroke:#fff;stroke-opacity:.7;stroke-dasharray:4 4;paint-order:stroke}._handle_6yu3h_21{fill:#fff;stroke:#222;stroke-width:2px;cursor:grab;pointer-events:auto}._handle_6yu3h_21:active{cursor:grabbing}._handle_6yu3h_21:focus-visible{outline:2px solid var(--wzl-accent,#4a9eff);outline-offset:2px}._field_cahom_1{flex-direction:column;gap:4px;width:100%;min-width:0;display:flex}._frame_cahom_9{background:var(--wzl-surface-sunken);border:1px solid var(--wzl-border);border-radius:var(--wzl-radius-sm);height:24px;color:var(--wzl-fg);font-family:var(--wzl-font-ui);transition:border-color var(--wzl-motion-fast), box-shadow var(--wzl-motion-fast);align-items:center;gap:6px;padding:0 8px;font-size:13px;line-height:1;display:flex}._frame_cahom_9:focus-within{border-color:var(--wzl-focus-ring);box-shadow:0 0 0 1px var(--wzl-focus-ring)}._field_cahom_1[data-invalid] ._frame_cahom_9{border-color:var(--wzl-danger,#ff5b5b)}._field_cahom_1[data-disabled] ._frame_cahom_9{opacity:.5;cursor:not-allowed}._frame_cahom_9 input{min-width:0;color:inherit;font:inherit;background:0 0;border:none;outline:none;flex:1;padding:0}._frame_cahom_9 input::placeholder{color:var(--wzl-fg-subtle)}._adornment_cahom_54{color:var(--wzl-fg-subtle);pointer-events:none;align-items:center;font-size:12px;display:inline-flex}._keys_n4bkk_2{vertical-align:bottom;flex-wrap:wrap;align-items:flex-end;gap:3px;display:inline-flex}._keysEmpty_n4bkk_16{color:var(--wzl-fg-muted)}._sep_n4bkk_20{color:var(--wzl-fg-muted);font-size:11px;line-height:1}._key_n4bkk_2{box-sizing:border-box;background:var(--wzl-fg,#e6e7e9);height:18px;color:var(--wzl-surface);border:1px solid #25272c;border-bottom-width:2px;border-radius:3px;justify-content:center;align-items:center;padding:0 4px;font-family:ui-sans-serif,system-ui,sans-serif;font-size:11px;font-weight:700;line-height:1;display:inline-flex}._key_n4bkk_2[data-kind=square]{width:18px;padding:0}._key_n4bkk_2[data-kind=modifier]{min-width:26px;padding:0 6px}._key_n4bkk_2[data-kind=wide]{min-width:32px;padding:0 8px}._key_n4bkk_2[data-inverted]{background:var(--wzl-surface);color:color-mix(in srgb, var(--wzl-fg,#e6e7e9) 60%, transparent);border-style:dotted;border-color:color-mix(in srgb, var(--wzl-fg,#e6e7e9) 40%, transparent);border-width:1.5px}._key_n4bkk_2[data-variant=minimal]{color:currentColor;background:0 0;border-color:currentColor}._key_n4bkk_2[data-variant=minimal][data-inverted]{color:currentColor;border:1.5px dotted}._field_e75yx_1{flex-direction:column;gap:4px;width:100%;min-width:0;display:flex}._frame_e75yx_9{background:var(--wzl-surface-sunken);border:1px solid var(--wzl-border);border-radius:var(--wzl-radius-sm);height:24px;color:var(--wzl-fg);font-family:var(--wzl-font-ui);transition:border-color var(--wzl-motion-fast), box-shadow var(--wzl-motion-fast);align-items:stretch;font-size:13px;line-height:1;display:flex;overflow:hidden}._frame_e75yx_9:focus-within{border-color:var(--wzl-focus-ring);box-shadow:0 0 0 1px var(--wzl-focus-ring)}._field_e75yx_1[data-invalid] ._frame_e75yx_9{border-color:var(--wzl-danger,#ff5b5b)}._field_e75yx_1[data-disabled] ._frame_e75yx_9{opacity:.5;cursor:not-allowed}._frame_e75yx_9 input{min-width:0;color:inherit;font:inherit;text-align:right;-moz-appearance:textfield;background:0 0;border:none;outline:none;flex:1;padding:0 8px}._frame_e75yx_9 input::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}._frame_e75yx_9 input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}._steppers_e75yx_57{border-left:1px solid var(--wzl-border);flex-direction:column;display:flex}._stepper_e75yx_57{width:18px;color:var(--wzl-fg-muted);cursor:pointer;background:0 0;border:none;flex:1;justify-content:center;align-items:center;padding:0;font-size:9px;line-height:1;display:inline-flex}._stepper_e75yx_57:not(:last-child){border-bottom:1px solid var(--wzl-border)}._stepper_e75yx_57[data-hovered]:not([data-disabled]){background:color-mix(in srgb, var(--wzl-fg) 10%, transparent);color:var(--wzl-fg)}._stepper_e75yx_57[data-pressed]:not([data-disabled]){background:color-mix(in srgb, var(--wzl-fg) 18%, transparent)}._stepper_e75yx_57[data-disabled]{opacity:.4;cursor:not-allowed}._row_q3wun_1{align-items:stretch;gap:var(--powerline-gap,.2em);display:inline-flex}._matrix_q3wun_7{gap:12px;display:grid}._segment_q3wun_15{font-size:inherit;text-transform:none;letter-spacing:normal}._group_kaubu_1{font-family:var(--wzl-font-ui);color:var(--wzl-fg);flex-direction:column;gap:6px;display:flex}._group_kaubu_1[data-orientation=horizontal]{flex-direction:row;gap:16px}._legend_kaubu_14{color:var(--wzl-fg);font-size:12px;font-weight:500}._radio_kaubu_20{cursor:pointer;color:var(--wzl-fg);-webkit-user-select:none;user-select:none;align-items:center;gap:8px;font-size:13px;display:inline-flex}._radio_kaubu_20[data-disabled]{opacity:.5;cursor:not-allowed}._dot_kaubu_36{background:var(--wzl-surface-sunken);border:1px solid var(--wzl-border-strong);width:14px;height:14px;transition:border-color var(--wzl-motion-fast), box-shadow var(--wzl-motion-fast);border-radius:50%;flex:none;position:relative}._radio_kaubu_20[data-focus-visible] ._dot_kaubu_36{box-shadow:0 0 0 2px var(--wzl-focus-ring)}._radio_kaubu_20[data-hovered]:not([data-disabled]) ._dot_kaubu_36{border-color:var(--wzl-fg-muted)}._radio_kaubu_20[data-selected] ._dot_kaubu_36{border-color:var(--wzl-accent-strong)}._dot_kaubu_36:after{content:"";background:var(--wzl-accent-strong);transition:transform var(--wzl-motion-fast);border-radius:50%;position:absolute;inset:3px;transform:scale(0)}._radio_kaubu_20[data-selected] ._dot_kaubu_36:after{transform:scale(1)}._slider_1644w_1{width:100%;font-family:var(--wzl-font-ui);color:var(--wzl-fg);flex-direction:column;gap:4px;display:flex}._slider_1644w_1[data-orientation=vertical]{flex-direction:row;align-items:stretch;width:28px;height:160px}._head_1644w_17{justify-content:space-between;align-items:baseline;gap:8px;display:flex}._label_1644w_24{color:var(--wzl-fg);font-size:12px;font-weight:500}._output_1644w_30{color:var(--wzl-fg-subtle);font-variant-numeric:tabular-nums;font-size:12px}._track_1644w_36{background:var(--wzl-surface-sunken);border:1px solid var(--wzl-border);border-radius:3px;min-width:80px;height:6px;position:relative}._slider_1644w_1[data-orientation=vertical] ._track_1644w_36{width:6px;height:100%}._fill_1644w_50{background:var(--wzl-accent-strong);border-radius:3px;position:absolute;top:0;bottom:0;left:0}._thumb_1644w_59{background:var(--wzl-fg-muted);border:1px solid var(--wzl-border-strong);cursor:ew-resize;width:14px;height:14px;transition:box-shadow var(--wzl-motion-fast);border-radius:50%;outline:none}._slider_1644w_1[data-orientation=vertical] ._thumb_1644w_59{cursor:ns-resize}._thumb_1644w_59[data-focus-visible]{box-shadow:0 0 0 2px var(--wzl-focus-ring)}._thumb_1644w_59[data-dragging]{background:var(--wzl-accent-strong)}._slider_1644w_1[data-disabled]{opacity:.5;cursor:not-allowed}._field_nq1le_1{flex-direction:column;gap:4px;width:100%;min-width:0;display:flex}._trigger_nq1le_9{background:var(--wzl-surface-sunken);border:1px solid var(--wzl-border);border-radius:var(--wzl-radius-sm);width:100%;height:24px;color:var(--wzl-fg);font-family:var(--wzl-font-ui);cursor:pointer;transition:border-color var(--wzl-motion-fast), box-shadow var(--wzl-motion-fast);align-items:center;gap:6px;padding:0 6px 0 10px;font-size:13px;line-height:1;display:flex}._trigger_nq1le_9[data-focus-visible]{border-color:var(--wzl-focus-ring);box-shadow:0 0 0 1px var(--wzl-focus-ring)}._field_nq1le_1[data-invalid] ._trigger_nq1le_9{border-color:var(--wzl-danger,#ff5b5b)}._trigger_nq1le_9[data-disabled]{opacity:.5;cursor:not-allowed}._value_nq1le_41{text-align:left;text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}._value_nq1le_41[data-placeholder]{color:var(--wzl-fg-subtle)}._chevron_nq1le_54{width:10px;height:10px;color:var(--wzl-fg-muted);flex:none}._popover_nq1le_61{min-width:var(--trigger-width);max-height:inherit;outline:none}._listbox_nq1le_67{background:var(--wzl-surface-raised);border:1px solid var(--wzl-border);border-radius:var(--wzl-radius-md);max-height:280px;font-family:var(--wzl-font-ui);outline:none;padding:4px;font-size:13px;overflow:auto;box-shadow:0 8px 24px #0000004d}._option_nq1le_80{cursor:pointer;color:var(--wzl-fg);border-radius:3px;outline:none;align-items:center;gap:8px;padding:4px 8px;display:flex}._option_nq1le_80[data-focused]{background:color-mix(in srgb, var(--wzl-fg) 10%, transparent)}._option_nq1le_80[data-selected]{color:var(--wzl-fg);font-weight:500}._option_nq1le_80[data-disabled]{opacity:.4;cursor:not-allowed}._check_nq1le_105{opacity:0;flex:none;width:10px;height:10px}._option_nq1le_80[data-selected] ._check_nq1le_105{opacity:1}._switch_qsj3o_1{cursor:pointer;font-family:var(--wzl-font-ui);color:var(--wzl-fg);-webkit-user-select:none;user-select:none;align-items:center;gap:8px;font-size:13px;display:inline-flex}._switch_qsj3o_1[data-disabled]{opacity:.5;cursor:not-allowed}._track_qsj3o_18{background:var(--wzl-surface-sunken);border:1px solid var(--wzl-border-strong);width:28px;height:16px;transition:background-color var(--wzl-motion-fast), border-color var(--wzl-motion-fast), box-shadow var(--wzl-motion-fast);border-radius:8px;flex:none;position:relative}._switch_qsj3o_1[data-focus-visible] ._track_qsj3o_18{box-shadow:0 0 0 2px var(--wzl-focus-ring)}._switch_qsj3o_1[data-selected] ._track_qsj3o_18{background:var(--wzl-accent-strong);border-color:var(--wzl-accent-strong)}._thumb_qsj3o_38{background:var(--wzl-fg);width:12px;height:12px;transition:transform var(--wzl-motion-fast);border-radius:50%;position:absolute;top:1px;left:1px}._switch_qsj3o_1[data-selected] ._thumb_qsj3o_38{background:var(--wzl-fg-on-accent);transform:translate(12px)}._label_qsj3o_54{line-height:1.2}._columns_y5ks5_5{flex-flow:wrap;align-items:flex-start;gap:12px;padding-right:4px;display:flex;overflow-y:auto}._column_y5ks5_5{flex:0 0 var(--wzl-prefs-column-width,300px);width:var(--wzl-prefs-column-width,300px);flex-direction:column;gap:8px;display:flex}._panel_y5ks5_23{background:var(--wzl-surface-sunken);border:1px solid var(--wzl-border);border-radius:var(--wzl-radius-sm);flex-direction:column;gap:8px;padding:10px;display:flex}._subpanel_y5ks5_33{background:var(--wzl-surface-sunken);border-left:2px solid var(--wzl-border);border-radius:2px;flex-direction:column;gap:6px;margin-top:6px;padding:8px 8px 8px 10px;display:flex}._groupHeader_y5ks5_44{border-bottom:1px solid var(--wzl-border);flex-direction:column;gap:2px;padding-bottom:4px;display:flex}._subpanel_y5ks5_33 ._groupHeader_y5ks5_44{border-bottom:none;padding-bottom:2px}._groupTitle_y5ks5_57{color:var(--wzl-fg);letter-spacing:.04em;text-transform:uppercase;margin:0;font-size:12px;font-weight:600}._subpanel_y5ks5_33 ._groupTitle_y5ks5_57{text-transform:none;letter-spacing:0;font-size:11px}._groupDesc_y5ks5_72{color:var(--wzl-fg-subtle);margin:0;font-size:11px;line-height:1.35}._rows_y5ks5_79{flex-direction:column;gap:6px;display:flex}._row_y5ks5_79{color:var(--wzl-fg);cursor:default;justify-content:space-between;align-items:center;gap:8px;font-size:12px;display:flex}._rowLabel_y5ks5_95{flex:auto;align-items:center;gap:4px;min-width:0;display:inline-flex}._help_y5ks5_104{color:var(--wzl-fg-subtle);cursor:help;border-radius:var(--wzl-radius-sm);background:0 0;border:none;flex:none;padding:0;font-size:11px;line-height:1}._help_y5ks5_104:hover{color:var(--wzl-fg)}._help_y5ks5_104:focus-visible{outline:2px solid var(--wzl-focus-ring);outline-offset:1px;color:var(--wzl-fg)}._rowControl_y5ks5_128{flex:0 0 110px;align-items:center;min-width:0;display:flex}._textarea_y5ks5_135{background:var(--wzl-surface-sunken);width:100%;color:var(--wzl-fg);border:1px solid var(--wzl-border);border-radius:var(--wzl-radius-sm);font:inherit;resize:vertical;padding:4px 8px;font-size:12px}._unrenderable_y5ks5_147{font-family:var(--wzl-font-mono);color:var(--wzl-fg-subtle);font-size:11px}._titleRow_y5ks5_154{flex:1;align-items:center;gap:12px;min-width:0;display:flex}._titleRow_y5ks5_154>span:first-child{flex:1;min-width:0}._handle_c4v7n_1{cursor:ew-resize;border-left:1px solid var(--wzl-border);touch-action:none;background:0 0;flex-shrink:0;align-self:stretch;width:4px}._handle_c4v7n_1._horizontal_c4v7n_14{cursor:ns-resize;border-left:none;border-top:1px solid var(--wzl-border);align-self:auto;width:auto;height:4px}._handle_c4v7n_1:hover{background:var(--wzl-border)}._handle_c4v7n_1:focus-visible{outline:2px solid var(--wzl-focus-ring,var(--wzl-accent));outline-offset:-1px}._root_zqa5p_1{color:var(--wzl-fg);flex-direction:column;font-size:12px;display:flex}._header_zqa5p_8{border-block-end:1px solid var(--wzl-border);align-items:baseline;gap:8px;padding:8px 10px;display:flex}._kind_zqa5p_16{font-size:13px;font-weight:600}._breakdown_zqa5p_21{opacity:.6;font-size:11px}._section_zqa5p_26{border-block-end:1px solid var(--wzl-border);padding:6px 10px 8px}._section_zqa5p_26:last-child{border-block-end:none}._sectionTitle_zqa5p_35{text-transform:uppercase;letter-spacing:.06em;opacity:.55;margin:0 0 6px;font-size:10px;font-weight:600}._row_zqa5p_44{grid-template-columns:64px 1fr;align-items:center;gap:6px;margin-block-end:5px;display:grid}._rowLabel_zqa5p_52{opacity:.75}._rowControls_zqa5p_56{align-items:center;gap:6px;min-inline-size:0;display:flex}._rowControls_zqa5p_56>*{flex:1;min-inline-size:0}._number_zqa5p_68 input,._select_zqa5p_69{font-size:11px}._unitSuffix_zqa5p_73{opacity:.6;flex:none;font-size:11px}._mixedSwitch_zqa5p_79{opacity:.55}._unrenderable_zqa5p_83{opacity:.5;font-size:11px;font-style:italic}._sidebar_toyo8_1{background:var(--wzl-surface);color:var(--wzl-fg);flex-direction:column;gap:4px;display:flex}._sidebar_toyo8_1._left_toyo8_9{border-right:1px solid var(--wzl-border)}._sidebar_toyo8_1._right_toyo8_12{border-left:1px solid var(--wzl-border)}._panel_1u064_1{background:var(--wzl-surface);color:var(--wzl-fg);padding:8px}._title_1u064_7{text-transform:uppercase;letter-spacing:.05em;color:var(--wzl-fg-muted);font-size:11px;font-weight:600}._titleRow_1u064_15{justify-content:space-between;align-items:center;margin-bottom:4px;padding:0;display:flex}._titleButton_1u064_23{cursor:pointer;color:inherit;font:inherit;text-align:left;background:0 0;border:0;flex:auto;align-items:center;gap:4px;padding:4px 8px;display:inline-flex}._titleButton_1u064_23:hover{color:var(--wzl-fg)}._chevron_1u064_40{color:var(--wzl-fg-muted);transition:transform var(--wzl-motion-fast) ease;font-size:10px;line-height:1;display:inline-block}._chevronCollapsed_1u064_47{transform:rotate(-90deg)}._hideButton_1u064_51{color:var(--wzl-fg-muted);cursor:pointer;background:0 0;border:0;padding:0 6px;font-size:14px;line-height:1}._hideButton_1u064_51:hover{color:var(--wzl-fg)}._panel_1u064_1._collapsed_1u064_64{padding-bottom:4px}._body_1u064_68{padding:0 4px}._bar_38xae_1{font-family:var(--wzl-font-mono,ui-monospace, SFMono-Regular, Menlo, monospace);color:var(--wzl-fg-muted);background:var(--wzl-surface);border-top:1px solid var(--wzl-border);flex-shrink:0;align-items:center;gap:16px;padding:4px 12px;font-size:11px;display:flex}._item_38xae_14{white-space:nowrap}._muted_38xae_18{opacity:.6;font-variant-numeric:tabular-nums}._hasTitle_38xae_23{cursor:help}._spacer_38xae_27{margin-left:auto}._tabs_ce73l_1{font-family:var(--wzl-font-ui);color:var(--wzl-fg);flex-direction:column;gap:0;display:flex}._tabs_ce73l_1[data-orientation=horizontal]{flex-direction:column}._tabs_ce73l_1[data-orientation=vertical]{flex-direction:row;gap:12px}._list_ce73l_18{border-bottom:1px solid var(--wzl-border);gap:2px;display:flex}._tabs_ce73l_1[data-orientation=vertical] ._list_ce73l_18{border-bottom:none;border-right:1px solid var(--wzl-border);flex-direction:column;padding-right:8px}._tab_ce73l_1{color:var(--wzl-fg-muted);font:inherit;cursor:pointer;transition:color var(--wzl-motion-fast);background:0 0;border:none;outline:none;padding:6px 10px;font-size:12px;position:relative}._tab_ce73l_1[data-hovered]:not([data-disabled]),._tab_ce73l_1[data-selected]{color:var(--wzl-fg)}._tab_ce73l_1[data-selected]:after{content:"";background:var(--wzl-accent-strong);height:2px;position:absolute;bottom:-1px;left:0;right:0}._tabs_ce73l_1[data-orientation=vertical] ._tab_ce73l_1[data-selected]:after{width:2px;height:auto;inset:0 -9px 0 auto}._tab_ce73l_1[data-focus-visible]{box-shadow:inset 0 0 0 2px var(--wzl-focus-ring);border-radius:var(--wzl-radius-sm)}._tab_ce73l_1[data-disabled]{opacity:.5;cursor:not-allowed}._panel_ce73l_81{outline:none;padding:12px 0}._panel_ce73l_81[data-focus-visible]{box-shadow:inset 0 0 0 2px var(--wzl-focus-ring);border-radius:var(--wzl-radius-sm)}._region_18i9b_1{z-index:1100;outline:none;flex-direction:column-reverse;gap:8px;max-width:360px;display:flex;position:fixed}._bottomRight_18i9b_17{bottom:16px;right:16px}._bottomLeft_18i9b_18{bottom:16px;left:16px}._topRight_18i9b_19{flex-direction:column;top:16px;right:16px}._topLeft_18i9b_20{flex-direction:column;top:16px;left:16px}._toast_18i9b_22{--toast-accent:var(--wzl-accent-strong);view-transition-class:wzl-toast;background:var(--wzl-surface);border:1px solid var(--wzl-border);border-left:3px solid var(--toast-accent);border-radius:var(--wzl-radius-md);color:var(--wzl-fg);font-family:var(--wzl-font-ui);outline:none;align-items:flex-start;gap:8px;padding:10px 12px;display:flex;box-shadow:0 8px 24px #00000059}._region_18i9b_1[data-focus-visible],._toast_18i9b_22[data-focus-visible]{outline:2px solid var(--wzl-focus-ring);outline-offset:1px}._toneSuccess_18i9b_49{--toast-accent:var(--wzl-success,#2ec27e)}._toneWarning_18i9b_50{--toast-accent:var(--wzl-warning,#d99a3f)}._toneError_18i9b_51{--toast-accent:var(--wzl-danger,#d94a3f)}._content_18i9b_53{flex:1;min-width:0}._title_18i9b_58{font-size:13px;font-weight:600;display:block}._description_18i9b_64{color:var(--wzl-fg-muted);margin-top:2px;font-size:12px;display:block}._close_18i9b_71{color:var(--wzl-fg-muted);cursor:pointer;border-radius:var(--wzl-radius-sm);background:0 0;border:none;flex:none;padding:2px 4px;font-size:16px;line-height:1}._close_18i9b_71:hover{color:var(--wzl-fg)}:root.wzl-toast-vt{view-transition-name:none}:root.wzl-toast-vt::view-transition{pointer-events:none}:root.wzl-toast-vt::view-transition-new(.wzl-toast):only-child{animation:wzl-toast-enter var(--wzl-motion-medium,.24s) var(--wzl-ease-out-cubic,ease-out) both}:root.wzl-toast-vt::view-transition-old(.wzl-toast):only-child{animation:wzl-toast-exit var(--wzl-motion-fast,.12s) var(--wzl-ease-in-cubic,ease-in) both}@keyframes wzl-toast-enter{0%{opacity:0;translate:0 16px}}@keyframes wzl-toast-exit{to{opacity:0;scale:.92}}._button_1jvxe_1{min-width:44px;color:var(--wzl-fg);cursor:default;background:0 0;border:1px solid #0000;border-radius:3px;flex-direction:column;justify-content:center;align-items:center;gap:2px;padding:6px 4px;font-family:inherit;font-size:10px;line-height:1.1;display:inline-flex}._button_1jvxe_1:hover:not([disabled]){background:var(--wzl-surface-hover);color:var(--wzl-fg)}._button_1jvxe_1:focus-visible{outline:2px solid var(--wzl-accent);outline-offset:-2px}._button_1jvxe_1._active_1jvxe_26{background:var(--wzl-surface-pressed);border-color:var(--wzl-accent);color:var(--wzl-fg)}._button_1jvxe_1[disabled]{opacity:.4}._icon_1jvxe_35,._icon_1jvxe_35>svg{display:block}._label_1jvxe_37{font-size:10px}._shortcut_1jvxe_38{color:var(--wzl-fg-muted);font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:9px}._group_o2pho_1{flex-direction:column;gap:2px;display:flex}._group_o2pho_1._horizontal_o2pho_6{flex-direction:row}._root_ps46a_13{height:var(--wzl-tb-height,28px);background:var(--wzl-surface);border-bottom:1px solid var(--wzl-border);color:var(--wzl-fg);align-items:center;gap:8px;padding:0 8px;display:flex;overflow:hidden}._label_ps46a_25{text-transform:uppercase;letter-spacing:.05em;color:var(--wzl-fg-muted);white-space:nowrap;flex:none;font-size:11px;font-weight:600}._controls_ps46a_6{scrollbar-width:thin;flex:auto;align-items:center;gap:6px;min-width:0;height:100%;display:flex;overflow:auto hidden}._controls_ps46a_6::-webkit-scrollbar{height:4px}._controls_ps46a_6::-webkit-scrollbar-track{background:0 0}._controls_ps46a_6::-webkit-scrollbar-thumb{background:var(--wzl-border);border-radius:2px}._palette_1mz1c_1{background:var(--wzl-surface);border:1px solid var(--wzl-border);-webkit-user-select:none;user-select:none;border-radius:4px;flex-direction:column;gap:4px;padding:4px;display:flex}._palette_1mz1c_1._horizontal_1mz1c_11{flex-direction:row}._ineligibleBtn_1mz1c_20{opacity:.35;cursor:not-allowed}._separator_1mz1c_25{background:var(--wzl-border)}._palette_1mz1c_1:not(._horizontal_1mz1c_11) ._separator_1mz1c_25{height:1px;margin:2px 0}._palette_1mz1c_1._horizontal_1mz1c_11 ._separator_1mz1c_25{width:1px;margin:0 2px}
|
|
147
|
+
/*$vite$:1*/
|
|
1
148
|
@font-face {
|
|
2
149
|
font-family: 'Oswald';
|
|
3
150
|
font-style: normal;
|