@gunkin/uiify 0.0.3-alpha → 0.0.4-alpha

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.
Files changed (44) hide show
  1. package/dist/components/candle-chart/CandleChart.d.ts +10 -1
  2. package/dist/components/candle-chart/CandleChart.d.ts.map +1 -1
  3. package/dist/components/candle-chart/CandleChart.js +82 -42
  4. package/dist/components/candle-chart/CandleChart.js.map +1 -1
  5. package/dist/components/candle-chart/client/CandleChartClient.d.ts +2 -2
  6. package/dist/components/candle-chart/client/CandleChartClient.d.ts.map +1 -1
  7. package/dist/components/candle-chart/client/CandleChartClient.js +103 -14
  8. package/dist/components/candle-chart/client/CandleChartClient.js.map +1 -1
  9. package/dist/components/candle-chart/client/index.d.ts +1 -0
  10. package/dist/components/candle-chart/client/index.d.ts.map +1 -1
  11. package/dist/components/candle-chart/client/index.js.map +1 -1
  12. package/dist/components/candle-chart/types.d.ts +39 -0
  13. package/dist/components/candle-chart/types.d.ts.map +1 -1
  14. package/dist/components/internal/chart-scrollbar/use-scrollbar-reserve.d.ts +11 -0
  15. package/dist/components/internal/chart-scrollbar/use-scrollbar-reserve.d.ts.map +1 -0
  16. package/dist/components/internal/chart-scrollbar/use-scrollbar-reserve.js +21 -0
  17. package/dist/components/internal/chart-scrollbar/use-scrollbar-reserve.js.map +1 -0
  18. package/dist/components/internal/live-chart/types.d.ts +36 -0
  19. package/dist/components/internal/live-chart/types.d.ts.map +1 -0
  20. package/dist/components/internal/live-chart/types.js +1 -0
  21. package/dist/components/internal/live-chart/types.js.map +1 -0
  22. package/dist/components/internal/live-chart/use-live-chart-window.d.ts +18 -0
  23. package/dist/components/internal/live-chart/use-live-chart-window.d.ts.map +1 -0
  24. package/dist/components/internal/live-chart/use-live-chart-window.js +75 -0
  25. package/dist/components/internal/live-chart/use-live-chart-window.js.map +1 -0
  26. package/dist/components/line-chart/LineChart.d.ts +6 -1
  27. package/dist/components/line-chart/LineChart.d.ts.map +1 -1
  28. package/dist/components/line-chart/LineChart.js +82 -48
  29. package/dist/components/line-chart/LineChart.js.map +1 -1
  30. package/dist/components/line-chart/client/LineChartClient.d.ts +2 -2
  31. package/dist/components/line-chart/client/LineChartClient.d.ts.map +1 -1
  32. package/dist/components/line-chart/client/LineChartClient.js +106 -14
  33. package/dist/components/line-chart/client/LineChartClient.js.map +1 -1
  34. package/dist/components/line-chart/client/index.d.ts +1 -1
  35. package/dist/components/line-chart/client/index.d.ts.map +1 -1
  36. package/dist/components/line-chart/client/index.js.map +1 -1
  37. package/dist/components/line-chart/line-chart-geometry.d.ts +7 -0
  38. package/dist/components/line-chart/line-chart-geometry.d.ts.map +1 -1
  39. package/dist/components/line-chart/line-chart-geometry.js +14 -2
  40. package/dist/components/line-chart/line-chart-geometry.js.map +1 -1
  41. package/dist/components/line-chart/types.d.ts +42 -0
  42. package/dist/components/line-chart/types.d.ts.map +1 -1
  43. package/dist/styles/index.css +1 -1
  44. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/line-chart/client/LineChartClient.tsx"],"sourcesContent":["\"use client\";\n\nimport { useCallback, useState } from \"react\";\nimport type { CSSProperties, ElementType, ReactElement, Ref } from \"react\";\nimport { useChartViewport } from \"../../../hooks/use-chart-viewport.js\";\nimport { useMergedRefs } from \"../../../hooks/use-merged-refs.js\";\nimport { LineChart } from \"../LineChart.js\";\nimport type { LineChartPointerPosition, LineChartProps } from \"../types.js\";\n\ninterface CursorState extends LineChartPointerPosition {}\n\ninterface InteractiveLineStyle extends CSSProperties {\n \"--line-scale\": string;\n}\n\n/**\n * `[data-part=\"plot\"]`'s fixed price-axis column (4.5rem) plus its grid gap\n * (0.75rem) — see line-chart.css. `useChartViewport` measures the whole\n * `<figure>`, but points only ever get the width left over after this\n * column, so it must be subtracted before sizing `minItemWidth`.\n */\nconst Y_AXIS_COLUMN_WIDTH = 72 + 12;\n\nexport function LineChartClient<TAs extends ElementType = \"figure\">(\n props: LineChartProps<TAs>,\n): ReactElement | null {\n const {\n data,\n ref: consumerRef,\n style: consumerStyle,\n onPointClick: consumerOnPointClick,\n onPointPointerLeave: consumerOnPointPointerLeave,\n onPointPointerMove: consumerOnPointPointerMove,\n ...consumerProps\n } = props as LineChartProps<\"figure\"> & {\n ref?: Ref<HTMLElement>;\n style?: CSSProperties;\n };\n const viewport = useChartViewport({\n itemCount: data.length,\n measuredWidthOffset: Y_AXIS_COLUMN_WIDTH,\n minItemWidth: 24,\n });\n const [cursor, setCursor] = useState<CursorState | null>(null);\n const [selectedPointIndex, setSelectedPointIndex] = useState<number | undefined>();\n const chartRef = useMergedRefs<HTMLElement>(viewport.ref, consumerRef);\n const handlePointClick = useCallback(\n (index: number) => {\n setSelectedPointIndex(index);\n consumerOnPointClick?.(index);\n },\n [consumerOnPointClick],\n );\n const handlePointPointerLeave = useCallback(() => {\n setCursor(null);\n consumerOnPointPointerLeave?.();\n }, [consumerOnPointPointerLeave]);\n const handlePointPointerMove = useCallback(\n (position: LineChartPointerPosition) => {\n setCursor(position);\n consumerOnPointPointerMove?.(position);\n },\n [consumerOnPointPointerMove],\n );\n\n const style: InteractiveLineStyle = {\n ...consumerStyle,\n \"--line-scale\": String(viewport.scale),\n };\n const chartProps = {\n ...consumerProps,\n data,\n activePointIndex: cursor?.index,\n cursorY: cursor?.offsetY,\n interactive: true,\n onPointClick: handlePointClick,\n onPointPointerLeave: handlePointPointerLeave,\n onPointPointerMove: handlePointPointerMove,\n ref: chartRef,\n selectedPointIndex,\n style,\n } as LineChartProps<\"figure\">;\n\n return <LineChart {...chartProps} />;\n}\nLineChartClient.displayName = \"LineChartClient\";\n"],"mappings":";AAmFS;AAjFT,SAAS,aAAa,gBAAgB;AAEtC,SAAS,wBAAwB;AACjC,SAAS,qBAAqB;AAC9B,SAAS,iBAAiB;AAe1B,MAAM,sBAAsB,KAAK;AAE1B,SAAS,gBACd,OACqB;AACrB,QAAM;AAAA,IACJ;AAAA,IACA,KAAK;AAAA,IACL,OAAO;AAAA,IACP,cAAc;AAAA,IACd,qBAAqB;AAAA,IACrB,oBAAoB;AAAA,IACpB,GAAG;AAAA,EACL,IAAI;AAIJ,QAAM,WAAW,iBAAiB;AAAA,IAChC,WAAW,KAAK;AAAA,IAChB,qBAAqB;AAAA,IACrB,cAAc;AAAA,EAChB,CAAC;AACD,QAAM,CAAC,QAAQ,SAAS,IAAI,SAA6B,IAAI;AAC7D,QAAM,CAAC,oBAAoB,qBAAqB,IAAI,SAA6B;AACjF,QAAM,WAAW,cAA2B,SAAS,KAAK,WAAW;AACrE,QAAM,mBAAmB;AAAA,IACvB,CAAC,UAAkB;AACjB,4BAAsB,KAAK;AAC3B,6BAAuB,KAAK;AAAA,IAC9B;AAAA,IACA,CAAC,oBAAoB;AAAA,EACvB;AACA,QAAM,0BAA0B,YAAY,MAAM;AAChD,cAAU,IAAI;AACd,kCAA8B;AAAA,EAChC,GAAG,CAAC,2BAA2B,CAAC;AAChC,QAAM,yBAAyB;AAAA,IAC7B,CAAC,aAAuC;AACtC,gBAAU,QAAQ;AAClB,mCAA6B,QAAQ;AAAA,IACvC;AAAA,IACA,CAAC,0BAA0B;AAAA,EAC7B;AAEA,QAAM,QAA8B;AAAA,IAClC,GAAG;AAAA,IACH,gBAAgB,OAAO,SAAS,KAAK;AAAA,EACvC;AACA,QAAM,aAAa;AAAA,IACjB,GAAG;AAAA,IACH;AAAA,IACA,kBAAkB,QAAQ;AAAA,IAC1B,SAAS,QAAQ;AAAA,IACjB,aAAa;AAAA,IACb,cAAc;AAAA,IACd,qBAAqB;AAAA,IACrB,oBAAoB;AAAA,IACpB,KAAK;AAAA,IACL;AAAA,IACA;AAAA,EACF;AAEA,SAAO,oBAAC,aAAW,GAAG,YAAY;AACpC;AACA,gBAAgB,cAAc;","names":[]}
1
+ {"version":3,"sources":["../../../../src/components/line-chart/client/LineChartClient.tsx"],"sourcesContent":["\"use client\";\n\nimport { useCallback, useMemo, useState } from \"react\";\nimport type { CSSProperties, ElementType, ReactElement, Ref } from \"react\";\nimport { useChartViewport } from \"../../../hooks/use-chart-viewport.js\";\nimport { useMergedRefs } from \"../../../hooks/use-merged-refs.js\";\nimport { useResizeObserver } from \"../../../hooks/use-resize-observer.js\";\nimport {\n liveTimeAxis,\n useLiveChartWindow,\n} from \"../../internal/live-chart/use-live-chart-window.js\";\nimport { useScrollbarReserve } from \"../../internal/chart-scrollbar/use-scrollbar-reserve.js\";\nimport { VirtualScroll } from \"../../virtual-scroll/VirtualScroll.js\";\nimport { LineChart, LineChartPoint } from \"../LineChart.js\";\nimport { getValueBounds } from \"../line-chart-geometry.js\";\nimport type {\n LineChartClientProps,\n LineChartData,\n LineChartPointerPosition,\n LineChartProps,\n LineChartViewProps,\n} from \"../types.js\";\n\ninterface CursorState extends LineChartPointerPosition {}\n\ninterface InteractiveLineStyle extends CSSProperties {\n \"--line-scale\": string;\n \"--line-content-size\"?: string;\n \"--line-plot-height\"?: string;\n \"--line-run\"?: string;\n}\n\ninterface LivePoint {\n readonly id: string;\n readonly point: LineChartData;\n}\n\n/**\n * `[data-part=\"plot\"]`'s fixed price-axis column (4.5rem) plus its grid gap\n * (0.75rem) — see line-chart.css. `useChartViewport` measures the whole\n * `<figure>`, but points only ever get the width left over after this\n * column, so it must be subtracted before sizing `minItemWidth`.\n */\nconst Y_AXIS_COLUMN_WIDTH = 72 + 12;\n\nexport function LineChartClient<TAs extends ElementType = \"figure\">(\n props: LineChartClientProps<TAs>,\n): ReactElement | null {\n const {\n data,\n visibleCount,\n xAxis,\n ref: consumerRef,\n style: consumerStyle,\n onPointClick: consumerOnPointClick,\n onPointPointerLeave: consumerOnPointPointerLeave,\n onPointPointerMove: consumerOnPointPointerMove,\n ...consumerProps\n } = props as LineChartClientProps<\"figure\"> & {\n ref?: Ref<HTMLElement>;\n style?: CSSProperties;\n };\n const live = visibleCount !== undefined && visibleCount > 0;\n const viewport = useChartViewport(\n live\n ? {\n enabled: false,\n initialScale: 1,\n itemCount: visibleCount,\n measuredWidthOffset: Y_AXIS_COLUMN_WIDTH,\n }\n : { itemCount: data.length, measuredWidthOffset: Y_AXIS_COLUMN_WIDTH, minItemWidth: 24 },\n );\n const figureSize = useResizeObserver(viewport.ref);\n const liveWindow = useLiveChartWindow({\n count: data.length,\n visibleCount,\n itemWidth: viewport.itemWidth,\n figureHeight: figureSize?.height,\n scrollVariable: \"--line-scroll-x\",\n });\n useScrollbarReserve(liveWindow.chartRef, \"--line-scrollbar-size\");\n // Cursor and selection hold absolute indices so they survive scrolling and appends.\n const [cursor, setCursor] = useState<CursorState | null>(null);\n const [selectedPointIndex, setSelectedPointIndex] = useState<number | undefined>();\n const chartRef = useMergedRefs<HTMLElement>(viewport.ref, consumerRef, liveWindow.chartRef);\n const handlePointClick = useCallback(\n (index: number) => {\n setSelectedPointIndex(index);\n consumerOnPointClick?.(index);\n },\n [consumerOnPointClick],\n );\n const handlePointPointerLeave = useCallback(() => {\n setCursor(null);\n consumerOnPointPointerLeave?.();\n }, [consumerOnPointPointerLeave]);\n const handlePointPointerMove = useCallback(\n (position: LineChartPointerPosition) => {\n setCursor(position);\n consumerOnPointPointerMove?.(position);\n },\n [consumerOnPointPointerMove],\n );\n const liveItems = useMemo<readonly LivePoint[]>(\n () => (live ? data.map((point, index) => ({ id: String(index), point })) : []),\n [data, live],\n );\n\n const style: InteractiveLineStyle = {\n ...consumerStyle,\n \"--line-scale\": String(viewport.scale),\n };\n\n if (!live) {\n const chartProps = {\n ...consumerProps,\n ...(xAxis ? { xAxis } : {}),\n data,\n activePointIndex: cursor?.index,\n cursorY: cursor?.offsetY,\n interactive: true,\n onPointClick: handlePointClick,\n onPointPointerLeave: handlePointPointerLeave,\n onPointPointerMove: handlePointPointerMove,\n ref: chartRef,\n selectedPointIndex,\n style,\n } as LineChartProps<\"figure\">;\n return <LineChart {...chartProps} />;\n }\n\n const { sliceStart, sliceEnd, contentSize, plotHeight } = liveWindow;\n const slice = data.slice(sliceStart, sliceEnd);\n const { min, max } = getValueBounds(slice);\n const toSliceIndex = (index: number | undefined): number | undefined =>\n index !== undefined && index >= sliceStart && index < sliceEnd ? index - sliceStart : undefined;\n const pointLayer = (\n <VirtualScroll\n height={plotHeight}\n items={liveItems}\n orientation=\"horizontal\"\n overscan={2}\n rowHeight={viewport.itemWidth}\n scrollRef={liveWindow.scrollRef}\n onRangeChange={liveWindow.onRangeChange}\n renderRow={({ point }, index) => {\n // Overscan points stay inert, so focus never scrolls hidden points into view.\n const inSlice = index >= sliceStart && index < sliceEnd;\n const isActive = cursor?.index === index;\n return (\n <LineChartPoint\n as=\"div\"\n point={point}\n previousPoint={data[index - 1]}\n index={index}\n count={data.length}\n min={min}\n max={max}\n interactive={inSlice}\n isActive={isActive}\n isSelected={selectedPointIndex === index}\n cursorY={isActive ? cursor?.offsetY : undefined}\n onPointClick={handlePointClick}\n onPointPointerLeave={handlePointPointerLeave}\n onPointPointerMove={handlePointPointerMove}\n />\n );\n }}\n />\n );\n\n const liveStyle: InteractiveLineStyle = {\n ...style,\n \"--line-content-size\": `${contentSize}px`,\n \"--line-plot-height\": `${plotHeight}px`,\n // One virtual row: the viewport holds `visibleCount` of them.\n \"--line-run\": String(100 / visibleCount),\n };\n const chartProps = {\n ...consumerProps,\n data: slice,\n xAxis: xAxis ?? liveTimeAxis(data, sliceStart, sliceEnd, visibleCount),\n activePointIndex: toSliceIndex(cursor?.index),\n announceReadout: false,\n pointLayer,\n cursorY: cursor?.offsetY,\n interactive: true,\n ref: chartRef,\n selectedPointIndex: toSliceIndex(selectedPointIndex),\n slotCount: data.length,\n slotOffset: sliceStart,\n style: liveStyle,\n } as LineChartProps<\"figure\"> & LineChartViewProps;\n\n return <LineChart {...chartProps} />;\n}\nLineChartClient.displayName = \"LineChartClient\";\n"],"mappings":"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","names":["chartProps"]}
@@ -1,3 +1,3 @@
1
1
  export { LineChartClient } from "./LineChartClient.js";
2
- export type { LineChartAxisLabel, LineChartData, LineChartOwnProps, LineChartPointerPosition, LineChartProps, } from "../types.js";
2
+ export type { LineChartAxisLabel, LineChartClientOwnProps, LineChartClientProps, LineChartData, LineChartOwnProps, LineChartPointerPosition, LineChartProps, } from "../types.js";
3
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/line-chart/client/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,YAAY,EACV,kBAAkB,EAClB,aAAa,EACb,iBAAiB,EACjB,wBAAwB,EACxB,cAAc,GACf,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/line-chart/client/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,YAAY,EACV,kBAAkB,EAClB,uBAAuB,EACvB,oBAAoB,EACpB,aAAa,EACb,iBAAiB,EACjB,wBAAwB,EACxB,cAAc,GACf,MAAM,aAAa,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/line-chart/client/index.ts"],"sourcesContent":["export { LineChartClient } from \"./LineChartClient.js\";\nexport type {\n LineChartAxisLabel,\n LineChartData,\n LineChartOwnProps,\n LineChartPointerPosition,\n LineChartProps,\n} from \"../types.js\";\n"],"mappings":"AAAA,SAAS,uBAAuB;","names":[]}
1
+ {"version":3,"sources":["../../../../src/components/line-chart/client/index.ts"],"sourcesContent":["export { LineChartClient } from \"./LineChartClient.js\";\nexport type {\n LineChartAxisLabel,\n LineChartClientOwnProps,\n LineChartClientProps,\n LineChartData,\n LineChartOwnProps,\n LineChartPointerPosition,\n LineChartProps,\n} from \"../types.js\";\n"],"mappings":"AAAA,SAAS,uBAAuB;","names":[]}
@@ -3,6 +3,7 @@ import type { LineChartAxisLabel, LineChartData } from "./types.js";
3
3
  export interface PointStyle extends CSSProperties {
4
4
  "--line-prev-x"?: string;
5
5
  "--line-prev-y"?: string;
6
+ "--line-rise"?: string;
6
7
  "--line-slot": string;
7
8
  "--line-x": string;
8
9
  "--line-y": string;
@@ -10,6 +11,8 @@ export interface PointStyle extends CSSProperties {
10
11
  }
11
12
  export interface PointsStyle extends CSSProperties {
12
13
  "--line-count": string;
14
+ /** One segment's width in percentage points of the viewport width, unitless. */
15
+ "--line-run": string;
13
16
  "--line-segment-slot": string;
14
17
  }
15
18
  export interface CrosshairStyle extends CSSProperties {
@@ -27,6 +30,8 @@ type LineTrend = "down" | "flat" | "up";
27
30
  interface LinePointGeometry {
28
31
  readonly previousX: string | undefined;
29
32
  readonly previousY: string | undefined;
33
+ /** `y − previousY` in percentage points of the point box height, unitless. */
34
+ readonly rise: string | undefined;
30
35
  readonly slot: string;
31
36
  readonly trend: LineTrend;
32
37
  readonly x: string;
@@ -47,6 +52,8 @@ export declare function geometryFor(point: LineChartData, previousPoint: LineCha
47
52
  export declare function pointStyle(geometry: LinePointGeometry, cursorY: number | undefined): PointStyle;
48
53
  export declare function pointsStyle(count: number): PointsStyle;
49
54
  export declare function crosshairStyle(index: number, count: number, cursorY: number | undefined): CrosshairStyle;
55
+ /** Crosshair at the center of slot `index` of `count` equal slots (live mode). */
56
+ export declare function slotCrosshairStyle(index: number, count: number, cursorY: number | undefined): CrosshairStyle;
50
57
  export declare function cursorStyle(cursorY: number | undefined): CursorStyle;
51
58
  export declare function axisStyle(axis: "x" | "y", position: number): AxisStyle;
52
59
  export declare function axisLabelsFor(overrides: readonly LineChartAxisLabel[] | undefined, fallback: readonly AxisLabel[]): readonly AxisLabel[];
@@ -1 +1 @@
1
- {"version":3,"file":"line-chart-geometry.d.ts","sourceRoot":"","sources":["../../../src/components/line-chart/line-chart-geometry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"line-chart-geometry.d.ts","sourceRoot":"","sources":["../../../src/components/line-chart/line-chart-geometry.ts"],"names":[],"mappings":"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"}
@@ -66,19 +66,23 @@ function trendFor(value, previousValue) {
66
66
  }
67
67
  function geometryFor(point, previousPoint, index, count, min, max) {
68
68
  const range = max - min;
69
+ const y = valueToPercent(point.value, min, range);
70
+ const previousY = previousPoint === void 0 ? void 0 : valueToPercent(previousPoint.value, min, range);
69
71
  return {
70
72
  previousX: previousPoint === void 0 ? void 0 : percent(pointPosition(index - 1, count)),
71
- previousY: previousPoint === void 0 ? void 0 : percent(valueToPercent(previousPoint.value, min, range)),
73
+ previousY: previousY === void 0 ? void 0 : percent(previousY),
74
+ rise: previousY === void 0 ? void 0 : String(Math.round((y - previousY) * 1e4) / 1e4),
72
75
  slot: percent(count > 1 ? 100 / (count - 1) : 100),
73
76
  trend: trendFor(point.value, previousPoint?.value),
74
77
  x: percent(pointPosition(index, count)),
75
- y: percent(valueToPercent(point.value, min, range))
78
+ y: percent(y)
76
79
  };
77
80
  }
78
81
  function pointStyle(geometry, cursorY) {
79
82
  return {
80
83
  ...geometry.previousX === void 0 ? {} : { "--line-prev-x": geometry.previousX },
81
84
  ...geometry.previousY === void 0 ? {} : { "--line-prev-y": geometry.previousY },
85
+ ...geometry.rise === void 0 ? {} : { "--line-rise": geometry.rise },
82
86
  "--line-slot": geometry.slot,
83
87
  "--line-x": geometry.x,
84
88
  "--line-y": geometry.y,
@@ -88,6 +92,7 @@ function pointStyle(geometry, cursorY) {
88
92
  function pointsStyle(count) {
89
93
  return {
90
94
  "--line-count": String(Math.max(count, 1)),
95
+ "--line-run": String(Math.round((count > 1 ? 100 / (count - 1) : 100) * 1e4) / 1e4),
91
96
  "--line-segment-slot": percent(count > 1 ? 100 / (count - 1) : 100)
92
97
  };
93
98
  }
@@ -97,6 +102,12 @@ function crosshairStyle(index, count, cursorY) {
97
102
  ...cursorY === void 0 ? {} : { "--line-cursor-y": `${Math.max(0, cursorY)}px` }
98
103
  };
99
104
  }
105
+ function slotCrosshairStyle(index, count, cursorY) {
106
+ return {
107
+ "--line-crosshair-x": percent((index + 0.5) / Math.max(count, 1) * 100),
108
+ ...cursorY === void 0 ? {} : { "--line-cursor-y": `${Math.max(0, cursorY)}px` }
109
+ };
110
+ }
100
111
  function cursorStyle(cursorY) {
101
112
  return cursorY === void 0 ? {} : { "--line-cursor-y": `${Math.max(0, cursorY)}px` };
102
113
  }
@@ -119,6 +130,7 @@ export {
119
130
  pointPosition,
120
131
  pointStyle,
121
132
  pointsStyle,
133
+ slotCrosshairStyle,
122
134
  valueLabelsFor
123
135
  };
124
136
  //# sourceMappingURL=line-chart-geometry.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/line-chart/line-chart-geometry.ts"],"sourcesContent":["import type { CSSProperties, ReactNode } from \"react\";\nimport type { LineChartAxisLabel, LineChartData } from \"./types.js\";\n\nexport interface PointStyle extends CSSProperties {\n \"--line-prev-x\"?: string;\n \"--line-prev-y\"?: string;\n \"--line-slot\": string;\n \"--line-x\": string;\n \"--line-y\": string;\n \"--line-cursor-y\"?: string;\n}\n\nexport interface PointsStyle extends CSSProperties {\n \"--line-count\": string;\n \"--line-segment-slot\": string;\n}\n\nexport interface CrosshairStyle extends CSSProperties {\n \"--line-crosshair-x\": string;\n \"--line-cursor-y\"?: string;\n}\n\nexport interface CursorStyle extends CSSProperties {\n \"--line-cursor-y\"?: string;\n}\n\nexport interface AxisStyle extends CSSProperties {\n \"--line-axis-x\"?: string;\n \"--line-axis-y\"?: string;\n}\n\ntype LineTrend = \"down\" | \"flat\" | \"up\";\n\ninterface LinePointGeometry {\n readonly previousX: string | undefined;\n readonly previousY: string | undefined;\n readonly slot: string;\n readonly trend: LineTrend;\n readonly x: string;\n readonly y: string;\n}\n\nfunction percent(value: number): string {\n const rounded = Math.round(value * 10000) / 10000;\n return `${rounded}%`;\n}\n\nfunction valueToPercent(value: number, min: number, range: number): number {\n if (range === 0) return 50;\n return Math.min(100, Math.max(0, ((min + range - value) / range) * 100));\n}\n\nexport function getValueBounds(data: readonly LineChartData[]): { max: number; min: number } {\n let min = Number.POSITIVE_INFINITY;\n let max = Number.NEGATIVE_INFINITY;\n\n for (const point of data) {\n min = Math.min(min, point.value);\n max = Math.max(max, point.value);\n }\n\n if (data.length === 0) return { max: 1, min: 0 };\n return { max, min };\n}\n\nexport interface AxisLabel {\n readonly label: ReactNode;\n readonly position: number;\n}\n\nfunction monthKey(time: string | number): string {\n const date = new Date(time);\n if (Number.isNaN(date.getTime())) return String(time);\n return `${date.getUTCFullYear()}-${date.getUTCMonth()}`;\n}\n\nfunction monthLabel(time: string | number): string {\n const date = new Date(time);\n if (Number.isNaN(date.getTime())) return String(time);\n return new Intl.DateTimeFormat(\"en-US\", {\n month: \"short\",\n timeZone: \"UTC\",\n year: \"2-digit\",\n }).format(date);\n}\n\nexport function pointPosition(index: number, count: number): number {\n if (count <= 1) return 50;\n return (index / (count - 1)) * 100;\n}\n\nexport function monthLabelsFor(data: readonly LineChartData[]): AxisLabel[] {\n const labels: AxisLabel[] = [];\n const seen = new Set<string>();\n\n data.forEach((point, index) => {\n const key = monthKey(point.time);\n if (seen.has(key)) return;\n seen.add(key);\n labels.push({\n label: monthLabel(point.time),\n position: pointPosition(index, data.length),\n });\n });\n\n return labels;\n}\n\nexport function valueLabelsFor(min: number, max: number): AxisLabel[] {\n const tickCount = 6;\n const range = max - min;\n\n return Array.from({ length: tickCount }, (_, index) => {\n const ratio = index / (tickCount - 1);\n const value = max - range * ratio;\n return {\n label: new Intl.NumberFormat(\"en-US\", { maximumFractionDigits: 2 }).format(value),\n position: ratio * 100,\n };\n });\n}\n\nfunction trendFor(value: number, previousValue: number | undefined): LineTrend {\n if (previousValue === undefined || value === previousValue) return \"flat\";\n return value > previousValue ? \"up\" : \"down\";\n}\n\nexport function geometryFor(\n point: LineChartData,\n previousPoint: LineChartData | undefined,\n index: number,\n count: number,\n min: number,\n max: number,\n): LinePointGeometry {\n const range = max - min;\n return {\n previousX: previousPoint === undefined ? undefined : percent(pointPosition(index - 1, count)),\n previousY:\n previousPoint === undefined\n ? undefined\n : percent(valueToPercent(previousPoint.value, min, range)),\n slot: percent(count > 1 ? 100 / (count - 1) : 100),\n trend: trendFor(point.value, previousPoint?.value),\n x: percent(pointPosition(index, count)),\n y: percent(valueToPercent(point.value, min, range)),\n };\n}\n\nexport function pointStyle(geometry: LinePointGeometry, cursorY: number | undefined): PointStyle {\n return {\n ...(geometry.previousX === undefined ? {} : { \"--line-prev-x\": geometry.previousX }),\n ...(geometry.previousY === undefined ? {} : { \"--line-prev-y\": geometry.previousY }),\n \"--line-slot\": geometry.slot,\n \"--line-x\": geometry.x,\n \"--line-y\": geometry.y,\n ...(cursorY === undefined ? {} : { \"--line-cursor-y\": `${Math.max(0, cursorY)}px` }),\n };\n}\n\nexport function pointsStyle(count: number): PointsStyle {\n return {\n \"--line-count\": String(Math.max(count, 1)),\n \"--line-segment-slot\": percent(count > 1 ? 100 / (count - 1) : 100),\n };\n}\n\nexport function crosshairStyle(\n index: number,\n count: number,\n cursorY: number | undefined,\n): CrosshairStyle {\n return {\n \"--line-crosshair-x\": percent(pointPosition(index, count)),\n ...(cursorY === undefined ? {} : { \"--line-cursor-y\": `${Math.max(0, cursorY)}px` }),\n };\n}\n\nexport function cursorStyle(cursorY: number | undefined): CursorStyle {\n return cursorY === undefined ? {} : { \"--line-cursor-y\": `${Math.max(0, cursorY)}px` };\n}\n\nexport function axisStyle(axis: \"x\" | \"y\", position: number): AxisStyle {\n const value = percent(Math.min(100, Math.max(0, position)));\n if (axis === \"x\") return { \"--line-axis-x\": value };\n return { \"--line-axis-y\": value };\n}\n\nexport function axisLabelsFor(\n overrides: readonly LineChartAxisLabel[] | undefined,\n fallback: readonly AxisLabel[],\n): readonly AxisLabel[] {\n return overrides ?? fallback;\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../../src/components/line-chart/line-chart-geometry.ts"],"sourcesContent":["import type { CSSProperties, ReactNode } from \"react\";\nimport type { LineChartAxisLabel, LineChartData } from \"./types.js\";\n\nexport interface PointStyle extends CSSProperties {\n \"--line-prev-x\"?: string;\n \"--line-prev-y\"?: string;\n \"--line-rise\"?: string;\n \"--line-slot\": string;\n \"--line-x\": string;\n \"--line-y\": string;\n \"--line-cursor-y\"?: string;\n}\n\nexport interface PointsStyle extends CSSProperties {\n \"--line-count\": string;\n /** One segment's width in percentage points of the viewport width, unitless. */\n \"--line-run\": string;\n \"--line-segment-slot\": string;\n}\n\nexport interface CrosshairStyle extends CSSProperties {\n \"--line-crosshair-x\": string;\n \"--line-cursor-y\"?: string;\n}\n\nexport interface CursorStyle extends CSSProperties {\n \"--line-cursor-y\"?: string;\n}\n\nexport interface AxisStyle extends CSSProperties {\n \"--line-axis-x\"?: string;\n \"--line-axis-y\"?: string;\n}\n\ntype LineTrend = \"down\" | \"flat\" | \"up\";\n\ninterface LinePointGeometry {\n readonly previousX: string | undefined;\n readonly previousY: string | undefined;\n /** `y − previousY` in percentage points of the point box height, unitless. */\n readonly rise: string | undefined;\n readonly slot: string;\n readonly trend: LineTrend;\n readonly x: string;\n readonly y: string;\n}\n\nfunction percent(value: number): string {\n const rounded = Math.round(value * 10000) / 10000;\n return `${rounded}%`;\n}\n\nfunction valueToPercent(value: number, min: number, range: number): number {\n if (range === 0) return 50;\n return Math.min(100, Math.max(0, ((min + range - value) / range) * 100));\n}\n\nexport function getValueBounds(data: readonly LineChartData[]): { max: number; min: number } {\n let min = Number.POSITIVE_INFINITY;\n let max = Number.NEGATIVE_INFINITY;\n\n for (const point of data) {\n min = Math.min(min, point.value);\n max = Math.max(max, point.value);\n }\n\n if (data.length === 0) return { max: 1, min: 0 };\n return { max, min };\n}\n\nexport interface AxisLabel {\n readonly label: ReactNode;\n readonly position: number;\n}\n\nfunction monthKey(time: string | number): string {\n const date = new Date(time);\n if (Number.isNaN(date.getTime())) return String(time);\n return `${date.getUTCFullYear()}-${date.getUTCMonth()}`;\n}\n\nfunction monthLabel(time: string | number): string {\n const date = new Date(time);\n if (Number.isNaN(date.getTime())) return String(time);\n return new Intl.DateTimeFormat(\"en-US\", {\n month: \"short\",\n timeZone: \"UTC\",\n year: \"2-digit\",\n }).format(date);\n}\n\nexport function pointPosition(index: number, count: number): number {\n if (count <= 1) return 50;\n return (index / (count - 1)) * 100;\n}\n\nexport function monthLabelsFor(data: readonly LineChartData[]): AxisLabel[] {\n const labels: AxisLabel[] = [];\n const seen = new Set<string>();\n\n data.forEach((point, index) => {\n const key = monthKey(point.time);\n if (seen.has(key)) return;\n seen.add(key);\n labels.push({\n label: monthLabel(point.time),\n position: pointPosition(index, data.length),\n });\n });\n\n return labels;\n}\n\nexport function valueLabelsFor(min: number, max: number): AxisLabel[] {\n const tickCount = 6;\n const range = max - min;\n\n return Array.from({ length: tickCount }, (_, index) => {\n const ratio = index / (tickCount - 1);\n const value = max - range * ratio;\n return {\n label: new Intl.NumberFormat(\"en-US\", { maximumFractionDigits: 2 }).format(value),\n position: ratio * 100,\n };\n });\n}\n\nfunction trendFor(value: number, previousValue: number | undefined): LineTrend {\n if (previousValue === undefined || value === previousValue) return \"flat\";\n return value > previousValue ? \"up\" : \"down\";\n}\n\nexport function geometryFor(\n point: LineChartData,\n previousPoint: LineChartData | undefined,\n index: number,\n count: number,\n min: number,\n max: number,\n): LinePointGeometry {\n const range = max - min;\n const y = valueToPercent(point.value, min, range);\n const previousY =\n previousPoint === undefined ? undefined : valueToPercent(previousPoint.value, min, range);\n return {\n previousX: previousPoint === undefined ? undefined : percent(pointPosition(index - 1, count)),\n previousY: previousY === undefined ? undefined : percent(previousY),\n rise: previousY === undefined ? undefined : String(Math.round((y - previousY) * 10000) / 10000),\n slot: percent(count > 1 ? 100 / (count - 1) : 100),\n trend: trendFor(point.value, previousPoint?.value),\n x: percent(pointPosition(index, count)),\n y: percent(y),\n };\n}\n\nexport function pointStyle(geometry: LinePointGeometry, cursorY: number | undefined): PointStyle {\n return {\n ...(geometry.previousX === undefined ? {} : { \"--line-prev-x\": geometry.previousX }),\n ...(geometry.previousY === undefined ? {} : { \"--line-prev-y\": geometry.previousY }),\n ...(geometry.rise === undefined ? {} : { \"--line-rise\": geometry.rise }),\n \"--line-slot\": geometry.slot,\n \"--line-x\": geometry.x,\n \"--line-y\": geometry.y,\n ...(cursorY === undefined ? {} : { \"--line-cursor-y\": `${Math.max(0, cursorY)}px` }),\n };\n}\n\nexport function pointsStyle(count: number): PointsStyle {\n return {\n \"--line-count\": String(Math.max(count, 1)),\n \"--line-run\": String(Math.round((count > 1 ? 100 / (count - 1) : 100) * 10000) / 10000),\n \"--line-segment-slot\": percent(count > 1 ? 100 / (count - 1) : 100),\n };\n}\n\nexport function crosshairStyle(\n index: number,\n count: number,\n cursorY: number | undefined,\n): CrosshairStyle {\n return {\n \"--line-crosshair-x\": percent(pointPosition(index, count)),\n ...(cursorY === undefined ? {} : { \"--line-cursor-y\": `${Math.max(0, cursorY)}px` }),\n };\n}\n\n/** Crosshair at the center of slot `index` of `count` equal slots (live mode). */\nexport function slotCrosshairStyle(\n index: number,\n count: number,\n cursorY: number | undefined,\n): CrosshairStyle {\n return {\n \"--line-crosshair-x\": percent(((index + 0.5) / Math.max(count, 1)) * 100),\n ...(cursorY === undefined ? {} : { \"--line-cursor-y\": `${Math.max(0, cursorY)}px` }),\n };\n}\n\nexport function cursorStyle(cursorY: number | undefined): CursorStyle {\n return cursorY === undefined ? {} : { \"--line-cursor-y\": `${Math.max(0, cursorY)}px` };\n}\n\nexport function axisStyle(axis: \"x\" | \"y\", position: number): AxisStyle {\n const value = percent(Math.min(100, Math.max(0, position)));\n if (axis === \"x\") return { \"--line-axis-x\": value };\n return { \"--line-axis-y\": value };\n}\n\nexport function axisLabelsFor(\n overrides: readonly LineChartAxisLabel[] | undefined,\n fallback: readonly AxisLabel[],\n): readonly AxisLabel[] {\n return overrides ?? fallback;\n}\n"],"mappings":"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","names":[]}
@@ -28,4 +28,46 @@ export interface LineChartOwnProps {
28
28
  readonly yAxis?: readonly LineChartAxisLabel[];
29
29
  }
30
30
  export type LineChartProps<TAs extends ElementType = "figure"> = RenderableProps<TAs, LineChartOwnProps, Record<string, never>, HTMLElement>;
31
+ export interface LineChartClientOwnProps extends LineChartOwnProps {
32
+ /**
33
+ * Live mode: sizes point slots so `visibleCount` fill the viewport and
34
+ * virtualizes the full history with a horizontal VirtualScroll. The chart
35
+ * follows new points while the reader is at the newest one; the value scale,
36
+ * axes, readout, and data table follow the visible points. Zoom is disabled.
37
+ */
38
+ readonly visibleCount?: number;
39
+ }
40
+ export type LineChartClientProps<TAs extends ElementType = "figure"> = RenderableProps<TAs, LineChartClientOwnProps, Record<string, never>, HTMLElement>;
41
+ /** Internal props the client entry passes to `LineChart`; not part of the public API. */
42
+ export interface LineChartViewProps extends LineChartOwnProps {
43
+ /** Replaces the static point list (e.g. with a virtualized layer). */
44
+ readonly pointLayer?: ReactNode;
45
+ /** Announce readout changes; off for streaming data. Defaults to `true`. */
46
+ readonly announceReadout?: boolean;
47
+ /**
48
+ * Point slots across the content. When set, the crosshair sits at slot
49
+ * centers — `(slotOffset + index + 0.5) / slotCount` — instead of spreading
50
+ * `data` edge to edge.
51
+ */
52
+ readonly slotCount?: number;
53
+ /** Slot of `data[0]` when `data` is a slice. Defaults to `0`. */
54
+ readonly slotOffset?: number;
55
+ }
56
+ export interface LineChartPointProps {
57
+ readonly as: "div" | "li";
58
+ readonly point: LineChartData;
59
+ readonly previousPoint: LineChartData | undefined;
60
+ /** Index reported to the pointer and click callbacks, and used for x in the static list. */
61
+ readonly index: number;
62
+ readonly count: number;
63
+ readonly min: number;
64
+ readonly max: number;
65
+ readonly interactive: boolean;
66
+ readonly isActive: boolean;
67
+ readonly isSelected: boolean;
68
+ readonly cursorY?: number | undefined;
69
+ readonly onPointClick?: ((index: number) => void) | undefined;
70
+ readonly onPointPointerLeave?: (() => void) | undefined;
71
+ readonly onPointPointerMove?: ((position: LineChartPointerPosition) => void) | undefined;
72
+ }
31
73
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/components/line-chart/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACpD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAEjE,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IAC/B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC;IAC1B,0DAA0D;IAC1D,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,+DAA+D;IAC/D,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,SAAS,aAAa,EAAE,CAAC;IACxC,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC;IAC/B,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAChD,QAAQ,CAAC,mBAAmB,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1C,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC,QAAQ,EAAE,wBAAwB,KAAK,IAAI,CAAC;IAC3E,QAAQ,CAAC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,kBAAkB,EAAE,CAAC;IAC/C,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,kBAAkB,EAAE,CAAC;CAChD;AAED,MAAM,MAAM,cAAc,CAAC,GAAG,SAAS,WAAW,GAAG,QAAQ,IAAI,eAAe,CAC9E,GAAG,EACH,iBAAiB,EACjB,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,EACrB,WAAW,CACZ,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/components/line-chart/types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- @layer reset;@layer tokens{:root{--gray-0:oklch(100% 0 0);--gray-1:oklch(99% 0 0);--gray-2:oklch(97% 0 0);--gray-3:oklch(94% 0 0);--gray-4:oklch(90% 0 0);--gray-5:oklch(83% 0 0);--gray-6:oklch(70% 0 0);--gray-7:oklch(55% 0 0);--gray-8:oklch(45% 0 0);--gray-9:oklch(35% 0 0);--gray-10:oklch(27% 0 0);--gray-11:oklch(21% 0 0);--gray-12:oklch(15% 0 0);--blue-4:oklch(80% .1 255);--blue-5:oklch(68% .16 255);--blue-6:oklch(55% .2 255);--blue-7:oklch(48% .21 255);--red-5:oklch(68% .18 25);--red-6:oklch(58% .22 25);--red-7:oklch(50% .22 25);--green-6:oklch(62% .17 150);--size-1:.25rem;--size-2:.5rem;--size-3:.75rem;--size-4:1rem;--size-5:1.5rem;--size-6:2rem;--size-7:3rem;--size-8:4rem;--radius-1:7px;--radius-2:9px;--radius-3:10px;--radius-4:12px;--radius-full:9999px;--font-sans:system-ui, -apple-system, "Segoe UI", roboto, helvetica, arial, sans-serif;--font-mono:ui-monospace, "SF Mono", "Cascadia Code", "Fira Code", monospace;--text-xs:.75rem;--text-sm:.875rem;--text-base:1rem;--text-lg:1.125rem;--text-xl:1.5rem;--text-2xl:2rem;--leading-tight:1.2;--leading-normal:1.5;--weight-normal:400;--weight-medium:500;--weight-semibold:600;--shadow-1:0 1px 2px #00000014;--shadow-2:0 12px 32px #14161a24;--shadow-3:0 24px 60px #14161a33;--border-width:1px;--ring-width:3px;--ring-offset:2px;--ease-out:cubic-bezier(.16, 1, .3, 1);--ease-in-out:cubic-bezier(.65, 0, .35, 1);--duration-fast:.12s;--duration-base:.18s;color-scheme:light;--background:light-dark(oklch(96.1% .007 88.6),oklch(17.8% .006 271));--foreground:light-dark(oklch(20% .009 264.4),oklch(95.2% .004 91.4));--card:light-dark(var(--gray-0),oklch(21.7% .008 264.4));--card-foreground:var(--foreground);--popover:light-dark(var(--gray-0),oklch(21.7% .008 264.4));--popover-foreground:var(--foreground);--secondary:light-dark(oklch(98.5% .003 84.6),oklch(19.6% .006 271.1));--secondary-foreground:var(--foreground);--muted:light-dark(var(--gray-3),oklch(26.4% .01 260.7));--muted-foreground:light-dark(oklch(48.5% .012 267.3),oklch(64.863% .0101 258.447));--primary:light-dark(oklch(48.6% .272 267.3),oklch(68.1% .169 275));--primary-foreground:light-dark(var(--gray-0),oklch(17.8% .006 271));--accent:color-mix(in oklch, var(--primary) 12%, transparent);--accent-foreground:var(--primary);--border:light-dark(oklch(90.4% .013 86.8),oklch(30% .012 258.4));--input:light-dark(oklch(87.1% .013 86.8),oklch(36.6% .015 259.8));--ring:light-dark(var(--blue-7),oklch(68.1% .169 275));--destructive:light-dark(var(--red-7),var(--red-5));--destructive-foreground:light-dark(var(--gray-0),oklch(17.8% .006 271));--success:var(--green-6);--success-foreground:var(--gray-0);--warning:light-dark(oklch(72% .16 75),oklch(80% .14 85));--warning-foreground:var(--gray-12);--chart-1:var(--primary);--chart-2:var(--blue-5);--chart-3:var(--green-6);--chart-4:var(--red-5);--chart-5:var(--gray-7);--radius:var(--radius-3);--radius-sm:var(--radius-1);--radius-md:var(--radius-2);--radius-lg:var(--radius);--radius-xl:var(--radius-4);--space-xs:var(--size-1);--space-sm:var(--size-2);--space-md:var(--size-3);--space-lg:var(--size-4);--space-xl:var(--size-5);--shadow-popover:var(--shadow-2);--shadow-modal:var(--shadow-3);--transition-colors:color var(--duration-fast) var(--ease-out), background-color var(--duration-fast) var(--ease-out), border-color var(--duration-fast) var(--ease-out)}[data-theme=basic-light]{color-scheme:light}[data-theme=basic-dark]{color-scheme:dark}}@layer base{body{background-color:var(--background);color:var(--foreground);font-family:var(--font-sans);font-size:var(--text-base);line-height:var(--leading-normal)}[popover]:popover-open:not([data-positioning=native]){margin:revert}[data-positioning=native]{--uiify-anchor-offset:var(--space-sm)}:where([data-uiify-button],[data-uiify-input],[data-uiify-textarea],[data-uiify-select],[data-uiify-checkbox],[data-uiify-radio],[data-uiify-switch],[data-uiify-toggle]):focus-visible{box-shadow:0 0 0 var(--ring-width) color-mix(in oklch, var(--ring) 16%, transparent);outline:none}}@layer demo;@layer components{:where([data-uiify-button]){border:var(--border-width) solid transparent;border-radius:var(--radius-md);background-color:var(--primary);min-block-size:36px;color:var(--primary-foreground);font-size:var(--text-sm);font-weight:var(--weight-medium);cursor:pointer;transition:var(--transition-colors);background-clip:padding-box;justify-content:center;align-items:center;gap:.375rem;padding-block:0;padding-inline:.625rem;line-height:1.25rem;display:inline-flex}[data-uiify-button]:hover{background-color:color-mix(in oklch, var(--primary), transparent 20%)}[data-uiify-button]:active{background-color:color-mix(in oklch, var(--primary), var(--primary-foreground) 20%)}[data-uiify-button]:disabled,[data-uiify-button][data-disabled]{opacity:.5;cursor:not-allowed}[data-uiify-button][data-variant=ghost]{color:var(--foreground);border-color:var(--border);background-color:#0000}[data-uiify-button][data-variant=outline]{border-color:var(--input);background-color:var(--card);color:var(--foreground)}[data-uiify-button][data-variant=outline]:hover{background-color:var(--secondary)}[data-uiify-button][data-variant=solid]{background-color:var(--foreground);color:var(--background)}[data-uiify-button][data-variant=solid]:hover{background-color:var(--muted-foreground)}[data-uiify-button][data-variant=ghost]:hover{background-color:color-mix(in oklch, var(--foreground) 8%, transparent)}[data-uiify-button][data-variant=ghost]:active{background-color:color-mix(in oklch, var(--foreground) 14%, transparent)}[data-uiify-button][data-variant=danger]{background-color:var(--destructive);color:var(--destructive-foreground)}[data-uiify-button][data-variant=danger]:hover{background-color:color-mix(in oklch, var(--destructive), black 12%)}[data-uiify-button][data-variant=danger]:active{background-color:color-mix(in oklch, var(--destructive), black 20%)}[data-uiify-surface]{gap:var(--space-md);inline-size:max-content;max-inline-size:min(28rem, calc(100vw - 2 * var(--space-lg)));padding:var(--space-lg);border:var(--border-width) solid var(--border);border-radius:var(--radius-lg);background-color:var(--card);color:var(--card-foreground);box-shadow:var(--shadow-popover);display:grid}[data-uiify-surface][popover]:not(:popover-open){display:none}@media (prefers-reduced-motion:no-preference){[data-uiify-surface][popover]:popover-open{animation:uiify-overlay-in var(--duration-fast) var(--ease-out)}}:where([data-uiify-input],[data-uiify-textarea]){inline-size:100%;max-inline-size:24rem;padding-block:var(--space-sm);padding-inline:var(--space-md);border:var(--border-width) solid var(--input);border-radius:var(--radius-md);background-color:var(--card);color:var(--foreground);font-size:var(--text-sm);line-height:var(--leading-normal);transition:var(--transition-colors);display:block}:where([data-uiify-input],[data-uiify-textarea])::placeholder{color:var(--muted-foreground)}:where([data-uiify-input],[data-uiify-textarea]):focus-visible{border-color:var(--primary)}:where([data-uiify-input],[data-uiify-textarea]):disabled,:where([data-uiify-input],[data-uiify-textarea])[data-disabled]{opacity:.5;cursor:not-allowed}:is(:where([data-uiify-input],[data-uiify-textarea])[data-invalid],:where([data-uiify-input],[data-uiify-textarea]):user-invalid){border-color:var(--destructive)}:where([data-uiify-input],[data-uiify-textarea])[data-invalid]:focus-visible{outline-color:var(--destructive)}[data-uiify-textarea]{resize:vertical;min-block-size:4lh}[data-uiify-textarea][data-autosize]{field-sizing:content;resize:none}[data-uiify-field]{gap:var(--space-sm);inline-size:100%;max-inline-size:24rem;display:grid}[data-uiify-field] [data-part=label]{color:var(--foreground);font-size:var(--text-sm);font-weight:var(--weight-medium);line-height:var(--leading-normal)}[data-uiify-field] [data-part=label][data-required]:after{content:" *";color:var(--destructive)}[data-uiify-field] [data-part=description]{color:var(--muted-foreground);font-size:var(--text-xs);line-height:var(--leading-normal);margin:0}[data-uiify-field] [data-part=error]{color:var(--destructive);font-size:var(--text-xs);line-height:var(--leading-normal);margin:0}:where([data-uiify-checkbox]>input,[data-uiify-radio]){appearance:none;border:var(--border-width) solid var(--input);background-color:var(--card);cursor:pointer;block-size:1.15rem;inline-size:1.15rem;transition:var(--transition-colors);place-content:center;margin:0;display:inline-grid}[data-uiify-checkbox]{align-items:center;gap:var(--space-sm);cursor:pointer;color:var(--foreground);font-size:var(--text-sm);line-height:var(--leading-normal);display:inline-flex}[data-uiify-checkbox]>input{border-radius:var(--radius-sm)}[data-uiify-radio]{border-radius:var(--radius-full)}[data-uiify-checkbox]>input:checked,[data-uiify-checkbox]>input[data-state=checked]{border-color:var(--primary);background-color:var(--primary)}[data-uiify-radio]:checked,[data-uiify-radio][data-state=checked]{border-width:5px;border-color:var(--primary);background-color:var(--card)}[data-uiify-checkbox]>input:before{content:"";block-size:.65rem;inline-size:.65rem;transition:transform var(--duration-fast) var(--ease-out);background-color:var(--primary-foreground);clip-path:polygon(14% 44%,0 65%,38% 100%,100% 22%,84% 6%,38% 68%);transform:scale(0)}[data-uiify-checkbox]>input:checked:before,[data-uiify-checkbox]>input[data-state=checked]:before{transform:scale(1)}[data-uiify-checkbox]>input:indeterminate,[data-uiify-checkbox]>input[data-state=indeterminate]{border-color:var(--primary);background-color:var(--primary)}[data-uiify-checkbox]>input:indeterminate:before,[data-uiify-checkbox]>input[data-state=indeterminate]:before{clip-path:inset(42% 12%);transform:scale(1)}:where([data-uiify-checkbox]>input,[data-uiify-radio]):disabled,:where([data-uiify-checkbox]>input,[data-uiify-radio])[data-disabled],[data-uiify-checkbox]:has(>input:disabled){opacity:.5;cursor:not-allowed}[data-uiify-radio-group]{gap:var(--space-md);flex-direction:column;display:flex}[data-uiify-switch]{appearance:none;border-radius:var(--radius-full);background-color:var(--input);cursor:pointer;block-size:1.25rem;inline-size:2.25rem;transition:background-color var(--duration-fast) var(--ease-out);border:none;flex:none;margin:0;position:relative}[data-uiify-switch]:before{content:"";border-radius:var(--radius-full);background-color:var(--gray-0);block-size:calc(1.25rem - 4px);inline-size:calc(1.25rem - 4px);box-shadow:var(--shadow-1);transition:translate var(--duration-fast) var(--ease-out);position:absolute;inset-block-start:2px;inset-inline-start:2px}[data-uiify-switch]:checked,[data-uiify-switch][data-state=checked]{background-color:var(--primary)}[data-uiify-switch]:checked:before,[data-uiify-switch][data-state=checked]:before{translate:1rem}[data-uiify-switch]:disabled,[data-uiify-switch][data-disabled]{opacity:.5;cursor:not-allowed}:where([data-uiify-radio-group]){padding:var(--space-md);flex-direction:column;display:flex}[data-uiify-radio-group] [data-part=item]{align-items:center;gap:var(--space-sm);display:flex}[data-uiify-radio-group] [data-part=item]>input{flex:none}[data-uiify-radio-group] [data-part=item]>label{flex:auto}[data-uiify-slider]{inline-size:100%;max-inline-size:16rem;accent-color:var(--primary);cursor:pointer}[data-uiify-slider]:disabled,[data-uiify-slider][data-disabled]{opacity:.5;cursor:not-allowed}[data-uiify-toggle]>[data-part=label]{min-inline-size:2.25rem;padding-block:var(--space-sm);padding-inline:var(--space-md);border:var(--border-width) solid var(--border);border-radius:var(--radius-md);background-color:var(--card);color:var(--foreground);font-size:var(--text-sm);line-height:var(--leading-normal);font-weight:var(--weight-medium);cursor:pointer;transition:var(--transition-colors);justify-content:center;align-items:center;display:inline-flex}[data-uiify-toggle]{display:inline-flex;position:relative}[data-uiify-toggle]>[data-part=label]:hover{background-color:var(--secondary)}[data-uiify-toggle]:has(>input:checked)>[data-part=label],[data-uiify-toggle]:has(>input[data-state=on])>[data-part=label]{background-color:var(--primary);border-color:var(--primary);color:var(--primary-foreground)}[data-uiify-toggle][data-disabled]>[data-part=label],[data-uiify-toggle]:has(>input:disabled)>[data-part=label]{opacity:.5;cursor:not-allowed}[data-uiify-toggle]>input{opacity:0;cursor:pointer;block-size:100%;inline-size:100%;margin:0;position:absolute;inset:0}[data-uiify-toggle]>input:disabled{cursor:not-allowed}[data-uiify-toggle]>input:focus-visible+[data-part=label]{box-shadow:0 0 0 var(--ring-width) color-mix(in oklch, var(--ring) 16%, transparent);outline:none}[data-uiify-toggle-group]{gap:var(--space-xs);display:inline-flex}[data-uiify-toggle-group][data-orientation=vertical]{flex-direction:column}[data-uiify-toggle-group] [data-part=item]{position:relative}[data-uiify-toggle-group] [data-part=item]>input{clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap;block-size:1px;inline-size:1px;margin:-1px;position:absolute;overflow:hidden}[data-uiify-toggle-group] [data-part=item]>label{min-inline-size:2.25rem;padding-block:var(--space-sm);padding-inline:var(--space-md);border:var(--border-width) solid var(--border);border-radius:var(--radius-md);background-color:var(--card);color:var(--foreground);font-size:var(--text-sm);line-height:var(--leading-normal);font-weight:var(--weight-medium);cursor:pointer;transition:var(--transition-colors);justify-content:center;align-items:center;display:inline-flex}[data-uiify-toggle-group] [data-part=item]>label:hover{background-color:var(--secondary)}[data-uiify-toggle-group] [data-part=item]:has(>input:checked)>label{background-color:var(--primary);border-color:var(--primary);color:var(--primary-foreground)}[data-uiify-toggle-group] [data-part=item]:has(>input:disabled)>label{opacity:.5;cursor:not-allowed}[data-uiify-toggle-group] [data-part=item]>input:focus-visible+label{box-shadow:0 0 0 var(--ring-width) color-mix(in oklch, var(--ring) 16%, transparent);outline:none}:where([data-uiify-dialog][data-part=content],[data-uiify-modal][data-part=content],[data-uiify-alert-modal][data-part=content],[data-uiify-drawer][data-part=content]){inline-size:min(28rem, calc(100vw - 2 * var(--space-lg)));padding:var(--space-xl);border:var(--border-width) solid var(--border);background-color:var(--popover);color:var(--popover-foreground);box-shadow:var(--shadow-modal);border-radius:14px;margin:auto}:where([data-uiify-dialog][data-part=content],[data-uiify-modal][data-part=content],[data-uiify-alert-modal][data-part=content],[data-uiify-drawer][data-part=content])::backdrop{background-color:#00000073}:where([data-uiify-dialog],[data-uiify-modal],[data-uiify-alert-modal],[data-uiify-drawer]) [data-part=title]{font-size:var(--text-xl);font-weight:var(--weight-semibold);margin:0;line-height:1.3}:where([data-uiify-dialog],[data-uiify-modal],[data-uiify-alert-modal],[data-uiify-drawer]) [data-part=description]{margin-block:var(--space-sm) var(--space-lg);color:var(--muted-foreground);font-size:var(--text-sm);line-height:var(--leading-normal)}@media (prefers-reduced-motion:no-preference){:where([data-uiify-dialog][data-part=content],[data-uiify-modal][data-part=content],[data-uiify-alert-modal][data-part=content],[data-uiify-drawer][data-part=content])[open]{animation:uiify-dialog-in var(--duration-base) var(--ease-out)}:where([data-uiify-dialog][data-part=content],[data-uiify-modal][data-part=content],[data-uiify-alert-modal][data-part=content],[data-uiify-drawer][data-part=content])[open]::backdrop{animation:uiify-fade-in var(--duration-base) var(--ease-out)}}@keyframes uiify-dialog-in{0%{opacity:0;translate:0 .5rem;scale:.97}}@keyframes uiify-fade-in{0%{opacity:0}}:where([data-uiify-popover][data-part=surface],[data-uiify-popup][data-part=content],[data-uiify-hover-card][data-part=content]){gap:var(--space-sm);inline-size:max-content;max-inline-size:18rem;padding:var(--space-md);border:var(--border-width) solid var(--border);border-radius:var(--radius-md);background-color:var(--popover);color:var(--popover-foreground);box-shadow:var(--shadow-popover);flex-direction:column;display:flex}:where([data-uiify-popover][data-part=surface],[data-uiify-popup][data-part=content],[data-uiify-hover-card][data-part=content])[data-state=closed]{display:none}[data-uiify-tooltip]{inline-size:max-content;max-inline-size:16rem;padding-block:var(--space-xs);padding-inline:var(--space-sm);border-radius:var(--radius-md);background-color:var(--foreground);color:var(--background);font-size:var(--text-xs);line-height:var(--leading-normal);box-shadow:var(--shadow-popover);border:none;display:block}:where([data-uiify-tooltip])[data-state=closed]{display:none}@media (prefers-reduced-motion:no-preference){:where([data-uiify-tooltip])[data-state=open]{animation:uiify-overlay-in var(--duration-fast) var(--ease-out)}:where([data-uiify-popover][data-part=surface],[data-uiify-popup][data-part=content],[data-uiify-hover-card][data-part=content]):popover-open{animation:uiify-overlay-in var(--duration-fast) var(--ease-out)}}@keyframes uiify-overlay-in{0%{opacity:0;scale:.96}}[data-uiify-menu-bar]{align-items:center;gap:var(--space-xs);padding:var(--space-xs);border:var(--border-width) solid var(--border);border-radius:var(--radius-md);background-color:var(--background);display:inline-flex}:where([data-uiify-menu] :is([data-part=content],[data-part=sub-content]),[data-uiify-menu]:is([data-part=content],[data-part=sub-content])){overscroll-behavior:contain;max-block-size:min(24rem,100dvb - 2rem);min-inline-size:12rem;padding:var(--space-xs);border:var(--border-width) solid var(--border);border-radius:var(--radius-md);background-color:var(--popover);color:var(--popover-foreground);box-shadow:var(--shadow-popover);transform-origin:var(--transform-origin,top);flex-direction:column;display:flex;overflow-y:auto}:where([data-uiify-menu] :is([data-part=content],[data-part=sub-content]),[data-uiify-menu]:is([data-part=content],[data-part=sub-content]))[data-state=closed]{display:none}[data-uiify-menu] :is([data-part=item],[data-part=checkbox-item],[data-part=radio-item],[data-part=sub-trigger]){align-items:center;column-gap:var(--space-md);padding-block:var(--space-sm);padding-inline:var(--space-md);border-radius:var(--radius-sm);cursor:pointer;-webkit-user-select:none;user-select:none;inline-size:100%;color:inherit;font:inherit;line-height:var(--leading-normal);text-align:start;appearance:none;background:0 0;border:0;display:flex;font-size:var(--text-sm)!important}[data-uiify-menu] :is([data-part=item],[data-part=checkbox-item],[data-part=radio-item],[data-part=sub-trigger]):is(:hover,:focus-visible,[data-highlighted]){background-color:var(--accent);color:var(--accent-foreground);outline:none}[data-uiify-menu] [data-part=radio-item]:hover[role=menuitemradio][data-state=checked] [data-part=item-indicator],[data-uiify-menu] [data-part=radio-item]:focus-visible[role=menuitemradio][data-state=checked] [data-part=item-indicator],[data-uiify-menu] [data-part=radio-item][data-highlighted][role=menuitemradio][data-state=checked] [data-part=item-indicator]{border-color:var(--accent-foreground)}[data-uiify-menu] :is([data-part=item],[data-part=checkbox-item],[data-part=radio-item],[data-part=sub-trigger]):is([aria-disabled=true],[data-disabled]){opacity:.5;pointer-events:none}[data-uiify-menu] :is([data-part=item],[data-part=checkbox-item],[data-part=radio-item],[data-part=sub-trigger])[data-danger]{color:var(--destructive,var(--foreground))}[data-uiify-menu] :is([data-part=item],[data-part=checkbox-item],[data-part=radio-item],[data-part=sub-trigger])[data-danger]:is(:hover,:focus-visible,[data-highlighted]){background-color:var(--destructive);color:var(--destructive-foreground)}[data-uiify-menu] [data-part=item-icon],[data-uiify-menu] [data-part=item-indicator]{flex:0 0 1.15rem;place-items:center;block-size:1.15rem;inline-size:1.15rem;display:inline-grid}[data-uiify-menu] [data-part=item-indicator]{border:var(--border-width) solid var(--input);border-radius:var(--radius-sm);color:#0000}[role=menuitemcheckbox][data-state=checked] [data-part=item-indicator],[role=menuitemcheckbox][data-state=indeterminate] [data-part=item-indicator]{border-color:var(--primary);background:var(--primary);color:var(--primary-foreground)}[role=menuitemcheckbox][data-state=checked] [data-part=item-indicator]:before{clip-path:polygon(14% 44%,0 65%,38% 100%,100% 22%,84% 6%,38% 68%);content:"";background-color:currentColor;block-size:.65rem;inline-size:.65rem}[role=menuitemcheckbox][data-state=indeterminate] [data-part=item-indicator]:before{content:"";background:currentColor;block-size:.12rem;inline-size:.65rem}[role=menuitemradio] [data-part=item-indicator]{border-radius:50%}[role=menuitemradio][data-state=checked] [data-part=item-indicator]{border-width:5px;border-color:var(--primary);background:var(--card)}[role=menuitemradio][data-state=checked] [data-part=item-indicator]:before{content:none}[data-uiify-menu] [data-part=item-icon]>svg,[data-uiify-menu] [data-part=item-indicator]>svg{block-size:100%;inline-size:100%;display:block}[data-uiify-menu] [data-part=item-text]{flex:auto;min-inline-size:0;display:grid}[data-uiify-menu] [data-part=item-description]{color:var(--muted-foreground);font-size:var(--text-xs);line-height:var(--leading-normal)}[data-uiify-menu] :is([data-part=item],[data-part=checkbox-item],[data-part=radio-item],[data-part=sub-trigger]):is(:hover,:focus-visible,[data-highlighted]) [data-part=item-description]{color:inherit;opacity:.8}[data-uiify-menu] [data-part=shortcut]{color:var(--muted-foreground);font-size:var(--text-xs);font-family:inherit;font-weight:inherit;white-space:nowrap;margin-inline-start:auto;line-height:1}[data-uiify-menu] :is([data-part=item],[data-part=checkbox-item],[data-part=radio-item],[data-part=sub-trigger]):is(:hover,:focus-visible,[data-highlighted]) [data-part=shortcut]{color:inherit;opacity:.85}[data-uiify-menu] [data-part=label]{padding-block:var(--space-xs);padding-inline:var(--space-md);color:var(--muted-foreground);font-size:var(--text-xs);font-weight:var(--weight-semibold)}[data-uiify-menu] [data-part=separator]{block-size:var(--border-width);margin-block:var(--space-xs);margin-inline:calc(-1 * var(--space-xs));background-color:var(--border)}[data-uiify-menu] [data-part=sub-content]{min-inline-size:11rem}[data-uiify-menu] [data-part=sub-content][data-side=right]{--uiify-anchor-offset:0;inset-block-start:calc(anchor(start) - var(--space-xs))}@media (prefers-reduced-motion:no-preference){:where([data-uiify-menu] :is([data-part=content],[data-part=sub-content]),[data-uiify-menu]:is([data-part=content],[data-part=sub-content])):popover-open{animation:uiify-menu-in var(--duration-fast) var(--ease-out)}@starting-style{:where([data-uiify-menu] :is([data-part=content],[data-part=sub-content]),[data-uiify-menu]:is([data-part=content],[data-part=sub-content])):popover-open{opacity:0;scale:.98}}}@media (prefers-reduced-motion:reduce){[data-uiify-menu]:popover-open{transition:none;animation:none}}@keyframes uiify-menu-in{0%{opacity:0;scale:.98}}[data-uiify-select]{align-items:center;gap:var(--space-md);inline-size:100%;min-inline-size:12rem;max-inline-size:16rem;padding-block:var(--space-sm);padding-inline:var(--space-md);border:var(--border-width) solid var(--input);border-radius:var(--radius-md);background-color:var(--card);color:var(--foreground);font-size:var(--text-sm);line-height:var(--leading-normal);cursor:pointer;transition:var(--transition-colors);display:flex}[data-uiify-select]:focus-visible{border-color:var(--primary)}[data-uiify-select]:disabled,[data-uiify-select][data-disabled]{opacity:.5;cursor:not-allowed}[data-uiify-select]::picker-icon{content:"";border-inline-end:2px solid var(--muted-foreground);border-block-end:2px solid var(--muted-foreground);block-size:.3rem;inline-size:.3rem;transition:rotate var(--duration-fast) var(--ease-out);margin-block-end:.1rem;margin-inline-start:auto;display:inline-block;rotate:45deg}[data-uiify-select]:open::picker-icon{margin-block-end:-.2rem;rotate:225deg}[data-uiify-select]::picker(select){max-block-size:min(24rem,100dvb - 2rem);min-inline-size:12rem;padding:var(--space-xs);border:var(--border-width) solid var(--border);border-radius:var(--radius-md);background-color:var(--popover);color:var(--popover-foreground);box-shadow:var(--shadow-popover);overscroll-behavior:contain;opacity:0;transition:opacity var(--duration-fast) var(--ease-out) allow-discrete;inset-block-start:calc(anchor(bottom) + var(--space-sm))}[data-uiify-select]:open::picker(select){opacity:1}@starting-style{[data-uiify-select]:open::picker(select){opacity:0}}[data-uiify-select] optgroup{padding-block-start:var(--space-xs);padding-inline:var(--space-md);color:var(--muted-foreground);font-size:var(--text-xs);font-weight:var(--weight-semibold)}[data-uiify-select] optgroup option{margin-inline:calc(-1 * var(--space-md));inline-size:calc(100% + 2 * var(--space-md))}[data-uiify-select] option{align-items:center;column-gap:var(--space-md);padding-block:var(--space-sm);padding-inline:var(--space-md);border-radius:var(--radius-sm);color:var(--foreground);cursor:pointer;display:flex;font-size:var(--text-sm)!important}[data-uiify-select] option:hover,[data-uiify-select] option:focus-visible{background-color:var(--accent);color:var(--accent-foreground)}[data-uiify-select] option:disabled{opacity:.5;pointer-events:none}[data-uiify-select] option::checkmark{box-sizing:border-box;border-radius:var(--radius-sm);background:var(--primary);block-size:1.15rem;inline-size:1.15rem;color:var(--primary-foreground);font-size:.8rem;font-weight:var(--weight-semibold);content:"✓";flex:0 0 1.15rem;order:-1;place-items:center;line-height:1;display:inline-grid}[data-uiify-select] hr{margin-block:var(--space-xs);border:0;border-block-start:var(--border-width) solid var(--border)}@media (prefers-reduced-motion:reduce){[data-uiify-select]::picker-icon{transition:none}[data-uiify-select]::picker(select){transition:none}}[data-uiify-tabs] [data-part=trigger]{padding-block:var(--space-sm);padding-inline:var(--space-md);color:var(--muted-foreground);font-size:var(--text-sm);line-height:var(--leading-normal);font-weight:var(--weight-medium);cursor:pointer;border:none;transition:var(--transition-colors);background:0 0;border-block-end:2px solid #0000;margin-block-end:calc(-1 * var(--border-width))}[data-uiify-tabs] [data-part=trigger]:hover{color:var(--foreground)}[data-uiify-tabs] [data-part=trigger][data-state=active]{border-block-end-color:var(--primary);color:var(--foreground);font-weight:var(--weight-semibold)}[data-uiify-tabs] [data-part=panel]{font-size:var(--text-sm);line-height:var(--leading-normal)}[data-uiify-tabs]>[data-part=item]{display:contents}[data-uiify-tabs]{grid-template-rows:auto auto;grid-auto-columns:max-content;grid-auto-flow:column;align-items:start;gap:0;display:grid}[data-uiify-tabs]>[data-part=item]>input{clip-path:inset(50%);white-space:nowrap;block-size:1px;inline-size:1px;margin:-1px;position:absolute;overflow:hidden}[data-uiify-tabs]>[data-part=item]>label{padding-block:var(--space-sm);padding-inline:var(--space-md);color:var(--muted-foreground);font-size:var(--text-sm);line-height:var(--leading-normal);font-weight:var(--weight-medium);cursor:pointer;border-block-end:2px solid #0000;grid-row:1;display:inline-flex}[data-uiify-tabs]>[data-part=item]>label:hover{color:var(--foreground)}[data-uiify-tabs]>[data-part=item]:has(>input:checked)>label{border-block-end-color:var(--primary);color:var(--foreground);font-weight:var(--weight-semibold)}[data-uiify-tabs]>[data-part=item]>input:focus-visible+label{box-shadow:0 0 0 var(--ring-width) color-mix(in oklch, var(--ring) 16%, transparent);outline:none}[data-uiify-tabs]>[data-part=item]>[data-part=panel]{font-size:var(--text-sm);line-height:var(--leading-normal);grid-area:2/1/auto/-1}:where([data-uiify-accordion]){border:var(--border-width) solid var(--border);border-radius:var(--radius-lg);overflow:hidden}[data-uiify-accordion]>[data-part=item]{border-block-end:var(--border-width) solid var(--border)}[data-uiify-accordion]>[data-part=item]:last-child{border-block-end:none}[data-uiify-accordion] [data-part=trigger]{justify-content:space-between;align-items:center;gap:var(--space-md);padding:var(--space-lg);font-size:var(--text-sm);line-height:var(--leading-normal);font-weight:var(--weight-medium);cursor:pointer;list-style:none;display:flex}[data-uiify-accordion] [data-part=trigger]::-webkit-details-marker{display:none}[data-uiify-accordion] [data-part=trigger]:hover{background-color:var(--secondary)}[data-uiify-accordion] [data-part=trigger]:focus-visible{box-shadow:inset 0 0 0 var(--ring-width) color-mix(in oklch, var(--ring) 16%, transparent);outline:none}[data-uiify-accordion] [data-part=trigger]:after{content:"";border-inline-end:2px solid var(--muted-foreground);border-block-end:2px solid var(--muted-foreground);block-size:.5rem;inline-size:.5rem;transition:rotate var(--duration-fast) var(--ease-out);rotate:45deg}[data-uiify-accordion] [data-part=item][open]>[data-part=trigger]:after{rotate:225deg}[data-uiify-accordion] [data-part=item][open]>[data-part=trigger]{color:var(--primary)}@supports (interpolate-size:allow-keywords){:root{interpolate-size:allow-keywords}[data-uiify-accordion]>[data-part=item]::details-content{block-size:0;transition:block-size var(--duration-base) ease, content-visibility var(--duration-base) allow-discrete;overflow:clip}[data-uiify-accordion]>[data-part=item][open]::details-content{block-size:auto}}[data-uiify-accordion] [data-part=panel]{padding-block:0 var(--space-lg);padding-inline:var(--space-lg);color:var(--muted-foreground);font-size:var(--text-sm);line-height:var(--leading-normal)}[data-uiify-combobox]{inline-size:100%;max-inline-size:18rem;position:relative}[data-uiify-combobox] [data-part=control]{align-items:center;gap:var(--space-xs);min-block-size:2.5rem;inline-size:100%;padding-block:var(--space-sm);padding-inline:var(--space-md);border:var(--border-width) solid var(--input);border-radius:var(--radius-md);background-color:var(--card);color:var(--foreground);transition:var(--transition-colors);flex-wrap:wrap;display:flex}[data-uiify-combobox] [data-part=control]:focus-within{border-color:var(--primary)}[data-uiify-combobox] [data-part=control][data-disabled],[data-uiify-combobox] [data-part=control]:has([data-part=input]:disabled){opacity:.5;cursor:not-allowed}[data-uiify-combobox] [data-part=control] [data-part=tags]{align-items:center;gap:var(--space-xs);flex-wrap:wrap;display:flex}[data-uiify-combobox] [data-part=control] [data-part=tag]{align-items:center;gap:var(--space-xs);padding-block:var(--space-xs);padding-inline:var(--space-sm);border-radius:var(--radius-sm);background-color:var(--accent);color:var(--accent-foreground);font-size:var(--text-xs);font-weight:var(--weight-medium);display:inline-flex}[data-uiify-combobox] [data-part=control] [data-part=tag-remove]{border-radius:var(--radius-sm);inline-size:1rem;color:inherit;font:inherit;cursor:pointer;background:0 0;border:0;place-items:center;padding:0;line-height:1;display:inline-grid}[data-uiify-combobox] [data-part=control] [data-part=tag-remove]:hover,[data-uiify-combobox] [data-part=control] [data-part=tag-remove]:focus-visible{background-color:var(--primary);color:var(--primary-foreground)}[data-uiify-combobox] [data-part=input]{inline-size:100%;padding-block:var(--space-sm);padding-inline:var(--space-md);border:var(--border-width) solid var(--input);border-radius:var(--radius-md);background-color:var(--card);color:var(--foreground);font-size:var(--text-sm);transition:var(--transition-colors)}[data-uiify-combobox] [data-part=input]:focus-visible{border-color:var(--primary)}[data-uiify-combobox] [data-part=control] [data-part=input]{inline-size:auto;min-inline-size:5rem;padding-block:var(--space-xs);box-shadow:none;background:0 0;border:0;border-radius:0;outline:none;flex:5rem;padding-inline:0}[data-uiify-combobox] [data-part=content]{overscroll-behavior:contain;max-block-size:min(24rem,100dvb - 2rem);min-inline-size:12rem;padding:var(--space-xs);border:var(--border-width) solid var(--border);border-radius:var(--radius-md);background-color:var(--card);color:var(--foreground);box-shadow:var(--shadow-popover);transform-origin:var(--transform-origin,top);flex-direction:column;display:flex;overflow-y:auto}[data-uiify-combobox] [data-part=content][data-state=closed]{display:none}[data-uiify-combobox] [data-part=item]{inline-size:100%;padding-block:var(--space-sm);padding-inline:var(--space-md);border-radius:var(--radius-sm);color:inherit;font:inherit;font-size:var(--text-sm);line-height:var(--leading-normal);text-align:start;cursor:pointer;-webkit-user-select:none;user-select:none;background:0 0;border:0;align-items:center;display:flex}[data-uiify-combobox] [data-part=item]:hover,[data-uiify-combobox] [data-part=item]:focus-visible,[data-uiify-combobox] [data-part=item][data-highlighted],[data-uiify-combobox] [data-part=item][aria-selected=true],[data-uiify-combobox] [data-part=item][data-selected]{background-color:var(--accent);color:var(--accent-foreground);outline:none}[data-uiify-combobox] [data-part=item][aria-disabled=true],[data-uiify-combobox] [data-part=item][data-disabled]{opacity:.5;pointer-events:none}[data-uiify-combobox] [data-part=empty]{padding:var(--space-sm) var(--space-md);color:var(--muted-foreground);font-size:var(--text-sm)}@media (prefers-reduced-motion:no-preference){[data-uiify-combobox] [data-part=content]:popover-open{animation:uiify-combobox-in var(--duration-fast) var(--ease-out)}@starting-style{[data-uiify-combobox] [data-part=content]:popover-open{opacity:0;scale:.98}}}@media (prefers-reduced-motion:reduce){[data-uiify-combobox] [data-part=content]:popover-open{transition:none;animation:none}}@keyframes uiify-combobox-in{0%{opacity:0;scale:.98}}[data-uiify-toast] [data-part=viewport],[data-uiify-toast][data-part=viewport]{gap:var(--space-sm);inline-size:min(24rem, calc(100vw - 2 * var(--space-lg)));background:0 0;border:none;flex-direction:column;margin:0;padding:0;list-style:none;display:flex;position:fixed;inset:auto;inset-block-end:var(--space-lg);inset-inline-end:var(--space-lg)}[data-uiify-toast] [data-part=item],[data-uiify-toast][data-part=viewport] [data-part=item]{gap:var(--space-xs);padding:var(--space-md) var(--space-lg);border:var(--border-width) solid var(--border);border-radius:var(--radius-md);background-color:var(--popover);color:var(--popover-foreground);box-shadow:var(--shadow-popover);flex-direction:column;min-inline-size:0;margin:0;display:flex}@media (prefers-reduced-motion:no-preference){[data-uiify-toast] [data-part=item][data-state=open],[data-uiify-toast][data-part=viewport] [data-part=item][data-state=open]{animation:uiify-toast-in var(--duration-base) var(--ease-out)}}@keyframes uiify-toast-in{0%{opacity:0;translate:0 .75rem}}[data-uiify-spinner]{block-size:2.125rem;inline-size:2.125rem;color:var(--primary);display:inline-block;position:relative}[data-uiify-spinner]:before{content:"";background:conic-gradient(from calc(-90deg + var(--uiify-spinner-tail)), currentcolor 0 var(--uiify-spinner-length), transparent 0);border-radius:50%;animation:2s linear infinite uiify-spinner-rotate,1.5s ease-in-out infinite uiify-spinner-orbit;display:block;position:absolute;inset:0;mask:radial-gradient(farthest-side,#0000 calc(100% - 4px),#000 calc(100% - 3px))}[data-uiify-spinner][data-state=delayed]:before{animation:none}[data-uiify-spinner][data-size=small]{block-size:1.25rem;inline-size:1.25rem}[data-uiify-spinner][data-size=small]:before{mask:radial-gradient(farthest-side,#0000 calc(100% - 3px),#000 calc(100% - 1px))}[data-uiify-spinner][data-size=default]{block-size:2.125rem;inline-size:2.125rem}[data-uiify-spinner][data-size=large]{block-size:6.25rem;inline-size:6.25rem}[data-uiify-spinner][data-size=large]:before{mask:radial-gradient(farthest-side,#0000 calc(100% - 4px),#000 calc(100% - 3px))}[data-uiify-spinner][data-align=center]{margin-inline:auto}[data-uiify-spinner][data-align=fixed],[data-uiify-spinner][data-align=absolute]{inset-block-start:50%;inset-inline-start:50%;translate:-50% -50%}[data-uiify-spinner][data-align=fixed]{position:fixed}[data-uiify-spinner][data-align=absolute]{position:absolute}@keyframes uiify-spinner-rotate{to{transform:rotate(360deg)}}@keyframes uiify-spinner-orbit{0%{--uiify-spinner-tail:0deg;--uiify-spinner-length:36deg}50%{--uiify-spinner-tail:90deg;--uiify-spinner-length:324deg}to{--uiify-spinner-tail:360deg;--uiify-spinner-length:36deg}}@media (prefers-reduced-motion:reduce){[data-uiify-spinner]:before{animation:2.5s ease-in-out infinite uiify-spinner-orbit}}[data-state=loading][data-shape=rect],[data-state=loading][data-shape=circle]{inline-size:var(--skeleton-w,100%);block-size:var(--skeleton-h,1rem);background:linear-gradient(90deg, var(--muted) 0%, var(--secondary) 50%, var(--muted) 100%);border-radius:var(--radius-sm);background-size:200% 100%;animation:1.5s ease-in-out infinite uiify-skeleton-shimmer}[data-state=loading][data-shape=circle]{border-radius:50%}@keyframes uiify-skeleton-shimmer{0%{background-position:200% 0}to{background-position:-200% 0}}@media (prefers-reduced-motion:reduce){[data-state=loading]{opacity:.7;animation:none}}:where([data-uiify-collapsible],[data-uiify-collapsible]){border:var(--border-width) solid var(--border);border-radius:var(--radius-md);overflow:hidden}[data-uiify-collapsible] [data-part=trigger]{justify-content:space-between;align-items:center;gap:var(--space-md);padding:var(--space-lg);font-size:var(--text-sm);font-weight:var(--weight-medium);cursor:pointer;list-style:none;display:flex}[data-uiify-collapsible] [data-part=trigger]::-webkit-details-marker{display:none}[data-uiify-collapsible] [data-part=trigger]:hover{background-color:var(--secondary)}[data-uiify-collapsible] [data-part=trigger]:focus-visible{box-shadow:inset 0 0 0 var(--ring-width) color-mix(in oklch, var(--ring) 16%, transparent);outline:none}[data-uiify-collapsible] [data-part=trigger]:after{content:"";border-inline-end:2px solid var(--muted-foreground);border-block-end:2px solid var(--muted-foreground);block-size:.5rem;inline-size:.5rem;transition:rotate var(--duration-fast) var(--ease-out);rotate:45deg}[data-uiify-collapsible][open] [data-part=trigger]:after{rotate:225deg}[data-uiify-collapsible][open] [data-part=trigger]{color:var(--primary)}[data-uiify-collapsible] [data-part=panel]{padding-block:0 var(--space-lg);padding-inline:var(--space-lg);color:var(--muted-foreground);font-size:var(--text-sm)}@supports (interpolate-size:allow-keywords){:root{interpolate-size:allow-keywords}:where([data-uiify-collapsible],[data-uiify-collapsible])::details-content{block-size:0;transition:block-size var(--duration-base) ease, content-visibility var(--duration-base) allow-discrete;overflow:clip}:where([data-uiify-collapsible],[data-uiify-collapsible])[open]::details-content{block-size:auto}}nav[aria-label=Breadcrumb] ol{flex-wrap:wrap;align-items:center;gap:.25rem;margin:0;padding:0;list-style:none;display:flex}nav[aria-label=Breadcrumb] li{align-items:center;gap:.25rem;display:flex}nav[aria-label=Breadcrumb] a{color:var(--primary);text-decoration:none}nav[aria-label=Breadcrumb] a:hover{text-decoration:underline}nav[aria-label=Breadcrumb] [aria-hidden=true]{color:var(--muted-foreground)}nav[aria-label=Breadcrumb] [data-current]{color:var(--foreground);font-weight:600}nav[aria-label=Pagination] ol,[data-uiify-pagination] ol{flex-wrap:wrap;gap:.25rem;margin:0;padding:0;list-style:none;display:flex}[data-uiify-pagination] a,[data-uiify-pagination] span{border:1px solid var(--border);border-radius:var(--radius-md);background:var(--card);block-size:2rem;min-inline-size:2rem;color:var(--foreground);justify-content:center;align-items:center;padding:0 .5rem;text-decoration:none;display:inline-flex}[data-uiify-pagination] a{cursor:pointer}nav[aria-label=Pagination] button,nav[aria-label=Pagination] a,nav[aria-label=Pagination] span{border:1px solid var(--border);border-radius:var(--radius-md);background:var(--card);cursor:pointer;block-size:2rem;min-inline-size:2rem;padding:0 .5rem}[data-uiify-pagination] a[data-selected],nav[aria-label=Pagination] button[data-selected]{background:var(--primary);color:var(--primary-foreground);border-color:#0000}nav[aria-label=Pagination] button:disabled,[data-uiify-pagination] span[aria-disabled=true]{opacity:.5;cursor:not-allowed}table[role=grid],table{border-collapse:collapse;inline-size:100%}table th,table td{text-align:start;border-block-end:1px solid var(--border);padding:.5rem .75rem}table thead th{background:var(--card);font-weight:600;position:sticky;inset-block-start:0}table tbody tr:nth-child(2n){background:var(--secondary)}table tbody tr[data-selected]{background:var(--accent)}table th[aria-sort]:not([aria-sort=none]){cursor:pointer}table th[aria-sort=ascending]:after{content:" ↑"}table th[aria-sort=descending]:after{content:" ↓"}[data-uiify-carousel]{align-items:center;gap:var(--space-sm);grid-template-columns:auto 1fr auto;inline-size:100%;max-inline-size:24rem;display:grid;position:relative}[data-uiify-carousel]>[data-part=viewport],[data-uiify-carousel]>[data-part=status],[data-uiify-carousel]>button[data-part=controls][data-carousel-action=rotation]{grid-column:1/-1}[data-uiify-carousel][data-enhanced]:has(>button[data-part=controls])>[data-part=viewport]{scrollbar-width:none}[data-uiify-carousel]>[data-part=viewport]>[data-part=slide]>[data-part=slide-content]{aspect-ratio:1;border:var(--border-width) solid var(--border);border-radius:var(--radius-md);background-color:var(--card);color:var(--foreground);font-size:2.25rem;font-weight:var(--weight-semibold);box-shadow:var(--shadow-popover);justify-content:center;align-items:center;line-height:1;display:flex}[data-uiify-carousel]>button[data-part=controls]{border:var(--border-width) solid var(--border);border-radius:var(--radius-full);background-color:var(--card);color:var(--foreground);cursor:pointer;transition:var(--transition-colors)}[data-uiify-carousel]>button[data-part=controls][data-carousel-action=rotation]{padding-inline:var(--space-md);padding-block:var(--space-sm);justify-self:start;margin-block-end:var(--space-sm)}[data-uiify-carousel]>button[data-part=controls][data-carousel-action=previous],[data-uiify-carousel]>button[data-part=controls][data-carousel-action=next]{justify-content:center;align-items:center;min-block-size:2.75rem;min-inline-size:2.75rem;font-size:1.25rem;line-height:1;display:inline-flex}[data-uiify-carousel]>button[data-part=controls]:hover{background-color:var(--secondary)}[data-uiify-carousel]>button[data-part=controls]:disabled{cursor:not-allowed;opacity:.4}[data-uiify-carousel]>button[data-part=controls]:focus-visible,[data-uiify-carousel]>[data-part=dots]>a:focus-visible{box-shadow:0 0 0 var(--ring-width) color-mix(in oklch, var(--ring) 16%, transparent);outline:none}[data-uiify-carousel]>[data-part=dots]{justify-content:center;justify-self:stretch;gap:var(--space-xs);grid-column:2;display:flex}[data-uiify-carousel]>[data-part=dots]>a{border-radius:var(--radius-full);background-color:var(--input);block-size:2.75rem;inline-size:2.75rem;color:var(--foreground);transition:var(--transition-colors);place-items:center;text-decoration:none;display:inline-grid}[data-uiify-carousel]>[data-part=dots]>a[aria-current=true]{background-color:var(--primary);color:var(--primary-foreground)}[data-uiify-candle-chart]{--candle-grid:color-mix(in srgb, currentcolor 10%, transparent);--candle-down:oklch(64% .21 24);--candle-flat:color-mix(in srgb, currentcolor 60%, transparent);--candle-up:oklch(67% .14 166);--candle-axis:var(--muted-foreground);overscroll-behavior:none;touch-action:none;isolation:isolate;color-scheme:light dark;color:light-dark(oklch(28% .04 165),oklch(82% .04 165));background:0 0;min-block-size:21rem;inline-size:100%;padding:1rem .75rem .5rem;display:block;position:relative;overflow:clip}[data-uiify-candle-chart]>[data-part=plot]{overscroll-behavior:none;grid-template-rows:minmax(18rem,1fr) 1.5rem;grid-template-columns:minmax(0,1fr) 4.5rem;gap:0 .75rem;min-block-size:18rem;min-inline-size:0;display:grid;position:relative}[data-uiify-candle-chart] [data-part=scroll-viewport]{overscroll-behavior:none;scrollbar-width:none;direction:rtl;grid-area:1/1/span 2;min-block-size:18rem;min-inline-size:0;overflow:auto hidden;container-type:inline-size}[data-uiify-candle-chart] [data-part=scroll-viewport]::-webkit-scrollbar{display:none}[data-uiify-candle-chart] [data-part=canvas]{inline-size:calc(100% * var(--candle-scale));direction:ltr;grid-template-rows:minmax(18rem,1fr) 1.5rem;min-block-size:100%;min-inline-size:100%;display:grid}[data-uiify-candle-chart] [data-part=candles]{background-image:linear-gradient(to right, var(--candle-grid) 1px, transparent 1px), linear-gradient(to bottom, var(--candle-grid) 1px, transparent 1px);background-size:10% 100%,100% 25%;inline-size:100%;margin:0;padding:1rem .5rem;list-style:none;position:absolute;inset-block:0;inset-inline:auto 0}[data-uiify-candle-chart] [data-part=viewport]{overscroll-behavior:none;grid-area:1/1;min-block-size:18rem;min-inline-size:0;position:relative;overflow:clip}[data-uiify-candle-chart] [data-part=time-viewport]{overscroll-behavior:none;grid-area:2/1;min-inline-size:0;position:relative;overflow:clip}[data-uiify-candle-chart]>figcaption{z-index:1;color:var(--muted-foreground);letter-spacing:.04em;text-transform:uppercase;font-size:.75rem;font-weight:650;position:absolute;inset-block-start:.75rem;inset-inline-start:1rem}[data-uiify-candle-chart] [data-part=readout]{z-index:1;color:var(--candle-axis);font-variant-numeric:tabular-nums;white-space:nowrap;flex-wrap:wrap;align-items:baseline;gap:.35rem .65rem;font-size:.7rem;line-height:1;display:flex;position:absolute;inset-block-start:.75rem;inset-inline-end:1rem}[data-uiify-candle-chart] [data-part=readout-time]{font-weight:650}[data-uiify-candle-chart] [data-part=candles]>li{pointer-events:none;inline-size:var(--candle-slot);color:var(--candle-flat);list-style:none;display:block;position:absolute;inset:1rem .5rem;inset-inline-start:var(--candle-x)}[data-uiify-candle-chart][data-interactive] [data-part=candles]>li{pointer-events:auto}[data-uiify-candle-chart] [data-part=candle-hit]{z-index:1;appearance:none;color:#0000;cursor:crosshair;block-size:100%;inline-size:100%;font:inherit;background:0 0;border:0;margin:0;padding:0;position:absolute;inset:0}[data-uiify-candle-chart] [data-part=candles]>li:before,[data-uiify-candle-chart] [data-part=candles]>li:after{content:"";background:currentColor;display:block;position:absolute}[data-uiify-candle-chart] [data-part=candles]>li:before{inline-size:max(1px,.08em);block-size:var(--candle-wick-height);inset-block-start:var(--candle-wick-top);inset-inline-start:50%;transform:translate(-50%)}[data-uiify-candle-chart] [data-part=candles]>li:after{block-size:var(--candle-body-height);min-block-size:1px;inset-block-start:var(--candle-body-top);inset-inline:17%}[data-uiify-candle-chart] [data-part=candles]>li[data-direction=up]{color:var(--candle-up)}[data-uiify-candle-chart] [data-part=candles]>li[data-direction=down]{color:var(--candle-down)}[data-uiify-candle-chart] [data-part=crosshair]{z-index:3;color:light-dark(oklch(52% .01 0),oklch(72% .01 0));pointer-events:none;block-size:100%;inline-size:100%;position:absolute;inset:0}[data-uiify-candle-chart] [data-part=crosshair]:before,[data-uiify-candle-chart] [data-part=crosshair]:after{content:"";background:currentColor;display:block;position:absolute}[data-uiify-candle-chart] [data-part=crosshair]:before{background-color:#0000;background-image:repeating-linear-gradient(currentColor 0 .4rem,#0000 .4rem .8rem);inline-size:1px;inset-block:0;inset-inline-start:var(--candle-crosshair-x)}[data-uiify-candle-chart] [data-part=crosshair]:after{background-color:#0000;background-image:repeating-linear-gradient(90deg,currentColor 0 .4rem,#0000 .4rem .8rem);block-size:1px;inset-block-start:calc(var(--candle-cursor-y,50%) + 1rem);inset-inline:0}[data-uiify-candle-chart] [data-part=crosshair-marker]{font-size:1rem;line-height:1;position:absolute;inset-block-start:calc(var(--candle-cursor-y,50%) + 1rem);inset-inline-start:var(--candle-crosshair-x);transform:translate(-50%,-50%)}[data-uiify-candle-chart] [data-part=time-axis]>[data-part=crosshair-time]{background:var(--candle-axis);color:canvas;padding:.3rem .5rem;font-weight:650;inset-block-start:0;inset-inline-start:var(--candle-crosshair-x);transform:translate(-50%)}[data-uiify-candle-chart] [data-part=price-axis]>[data-part=crosshair-price]{background:var(--candle-axis);color:canvas;padding:.3rem .5rem;font-weight:650;inset-block-start:calc(var(--candle-cursor-y,50%) + 1rem);inset-inline-end:0;transform:translateY(-50%)}[data-uiify-candle-chart][data-interactive] [data-part=candle-hit]:focus-visible{outline-offset:-2px;outline:2px solid}[data-uiify-candle-chart] [data-part=price-axis],[data-uiify-candle-chart] [data-part=time-axis]{margin:0;padding:0;list-style:none}[data-uiify-candle-chart] [data-part=price-axis]{grid-area:1/2;min-inline-size:0;position:relative}[data-uiify-candle-chart] [data-part=price-axis]>li{color:var(--candle-axis);font-variant-numeric:tabular-nums;text-align:end;text-overflow:ellipsis;white-space:nowrap;font-size:.65rem;line-height:1;position:absolute;inset-block-start:var(--candle-axis-y);inset-inline:0;overflow:hidden;transform:translateY(-50%)}[data-uiify-candle-chart] [data-part=price-axis]>li:first-child{transform:none}[data-uiify-candle-chart] [data-part=price-axis]>li:last-child{transform:translateY(-100%)}[data-uiify-candle-chart] [data-part=time-axis]{inline-size:100%;min-inline-size:0;position:relative;inset-block:0}[data-uiify-candle-chart] [data-part=time-axis]>li{color:var(--candle-axis);white-space:nowrap;font-size:.7rem;position:absolute;inset-block-start:.35rem;inset-inline-start:var(--candle-axis-x);transform:translate(-50%)}[data-uiify-candle-chart] [data-part=time-axis]>li:first-child{transform:none}[data-uiify-candle-chart] [data-part=time-axis]>li:last-child{transform:translate(-100%)}[data-uiify-candle-chart] [data-part=time-axis]>li:only-child,[data-uiify-candle-chart] [data-part=time-axis]>li[data-part=crosshair-time]{transform:translate(-50%)}[data-uiify-candle-chart] [data-part=price-axis]>li[data-part=crosshair-price]{transform:translateY(-50%)}[data-uiify-candle-chart]>table{clip-path:inset(50%);white-space:nowrap;block-size:1px;inline-size:1px;position:absolute;overflow:hidden}[data-uiify-line-chart]{--line-grid:color-mix(in srgb, currentcolor 10%, transparent);--line-up:oklch(67% .14 166);--line-down:oklch(64% .21 24);--line-flat:light-dark(oklch(43% .05 165),oklch(72% .04 165));--line-axis:light-dark(color-mix(in oklch, var(--muted-foreground) 70%, var(--foreground)),var(--muted-foreground));--line-width:.12rem;overscroll-behavior:none;touch-action:none;isolation:isolate;min-block-size:21rem;inline-size:100%;color-scheme:inherit;color:light-dark(oklch(28% .04 165),oklch(82% .04 165));background:0 0;padding:1rem .75rem .5rem;display:block;position:relative;overflow:clip}[data-uiify-line-chart]>[data-part=plot]{overscroll-behavior:none;grid-template-rows:minmax(18rem,1fr) 1.5rem;grid-template-columns:minmax(0,1fr) 4.5rem;gap:0 .75rem;min-block-size:18rem;min-inline-size:0;display:grid;position:relative}[data-uiify-line-chart] [data-part=scroll-viewport]{overscroll-behavior:none;scrollbar-width:none;direction:rtl;grid-area:1/1/span 2;min-block-size:18rem;min-inline-size:0;overflow:auto hidden;container-type:inline-size}[data-uiify-line-chart] [data-part=scroll-viewport]::-webkit-scrollbar{display:none}[data-uiify-line-chart] [data-part=canvas]{inline-size:calc(100% * var(--line-scale));direction:ltr;grid-template-rows:minmax(18rem,1fr) 1.5rem;min-block-size:100%;min-inline-size:100%;display:grid}[data-uiify-line-chart] [data-part=viewport]{overscroll-behavior:none;grid-area:1/1;min-block-size:18rem;min-inline-size:0;position:relative;overflow:clip}[data-uiify-line-chart]>figcaption{z-index:1;color:var(--line-axis);letter-spacing:.04em;text-transform:uppercase;font-size:.75rem;font-weight:650;position:absolute;inset-block-start:.75rem;inset-inline-start:1rem}[data-uiify-line-chart] [data-part=readout]{z-index:1;color:var(--line-axis);font-variant-numeric:tabular-nums;white-space:nowrap;align-items:baseline;gap:.65rem;font-size:.7rem;line-height:1;display:flex;position:absolute;inset-block-start:.75rem;inset-inline-end:1rem}[data-uiify-line-chart] [data-part=readout-time]{font-weight:650}[data-uiify-line-chart] [data-part=points]{background-image:linear-gradient(to right, var(--line-grid) 1px, transparent 1px), linear-gradient(to bottom, var(--line-grid) 1px, transparent 1px);background-size:var(--line-segment-slot) 100%, 100% 20%;margin:0;padding:0;list-style:none;display:block;position:absolute;inset:1rem 0}[data-uiify-line-chart] [data-part=points]>li{inline-size:var(--line-slot);min-block-size:100%;min-inline-size:0;color:var(--line-flat);list-style:none;position:absolute;inset-block:0;inset-inline-start:var(--line-prev-x,var(--line-x))}[data-uiify-line-chart] [data-part=points]>li:before{z-index:1;clip-path:polygon(-1% calc(var(--line-prev-y) - var(--line-width)), -1% calc(var(--line-prev-y) + var(--line-width)), 101% calc(var(--line-y) + var(--line-width)), 101% calc(var(--line-y) - var(--line-width)));content:"";background:currentColor;display:block;position:absolute;inset:0}[data-uiify-line-chart] [data-part=points]>li:first-child:before{display:none}[data-uiify-line-chart] [data-part=points]>li:after{z-index:2;content:"";background:currentColor;border:0;border-radius:50%;block-size:.55rem;inline-size:.55rem;display:block;position:absolute;inset-block-start:var(--line-y);inset-inline-start:100%;transform:translate(-50%,-50%)}[data-uiify-line-chart] [data-part=points]>li:first-child:after{inset-inline-start:0}[data-uiify-line-chart] [data-part=points]>li[data-trend=up]{color:var(--line-up)}[data-uiify-line-chart] [data-part=points]>li[data-trend=down]{color:var(--line-down)}[data-uiify-line-chart] [data-part=point-hit]{z-index:3;appearance:none;color:#0000;cursor:crosshair;block-size:100%;inline-size:100%;font:inherit;background:0 0;border:0;margin:0;padding:0;position:absolute;inset:0}[data-uiify-line-chart][data-interactive] [data-part=points]>li[data-point-selected]:after{box-shadow:0 0 0 .2rem color-mix(in srgb, currentcolor 24%, transparent)}[data-uiify-line-chart][data-interactive] [data-part=point-hit]:focus-visible{outline-offset:-2px;outline:2px solid}[data-uiify-line-chart] [data-part=crosshair]{z-index:4;color:light-dark(oklch(52% .01 0),oklch(72% .01 0));pointer-events:none;block-size:100%;inline-size:100%;position:absolute;inset:0}[data-uiify-line-chart] [data-part=crosshair]:before,[data-uiify-line-chart] [data-part=crosshair]:after{content:"";background:currentColor;display:block;position:absolute}[data-uiify-line-chart] [data-part=crosshair]:before{background-color:#0000;background-image:repeating-linear-gradient(currentColor 0 .4rem,#0000 .4rem .8rem);inline-size:1px;inset-block:0;inset-inline-start:var(--line-crosshair-x)}[data-uiify-line-chart] [data-part=crosshair]:after{background-color:#0000;background-image:repeating-linear-gradient(90deg,currentColor 0 .4rem,#0000 .4rem .8rem);block-size:1px;inset-block-start:calc(var(--line-cursor-y,50%) + 1rem);inset-inline:0}[data-uiify-line-chart] [data-part=crosshair-marker]{font-size:1rem;line-height:1;position:absolute;inset-block-start:calc(var(--line-cursor-y,50%) + 1rem);inset-inline-start:var(--line-crosshair-x);transform:translate(-50%,-50%)}[data-uiify-line-chart] [data-part=value-axis],[data-uiify-line-chart] [data-part=time-axis]{margin:0;padding:0;list-style:none}[data-uiify-line-chart] [data-part=value-axis]{grid-area:1/2;min-inline-size:0;position:relative}[data-uiify-line-chart] [data-part=value-axis]>li{color:var(--line-axis);font-variant-numeric:tabular-nums;text-align:end;text-overflow:ellipsis;white-space:nowrap;font-size:.65rem;line-height:1;position:absolute;inset-block-start:var(--line-axis-y);inset-inline:0;overflow:hidden;transform:translateY(-50%)}[data-uiify-line-chart] [data-part=value-axis]>li:first-child{transform:none}[data-uiify-line-chart] [data-part=value-axis]>li:last-child{transform:translateY(-100%)}[data-uiify-line-chart] [data-part=time-viewport]{overscroll-behavior:none;grid-area:2/1;min-inline-size:0;position:relative;overflow:clip}[data-uiify-line-chart] [data-part=time-axis]{inline-size:100%;min-inline-size:0;position:relative;inset-block:0}[data-uiify-line-chart] [data-part=time-axis]>li{color:var(--line-axis);white-space:nowrap;font-size:.7rem;position:absolute;inset-block-start:.35rem;inset-inline-start:var(--line-axis-x);transform:translate(-50%)}[data-uiify-line-chart] [data-part=time-axis]>li:first-child{transform:none}[data-uiify-line-chart] [data-part=time-axis]>li:last-child{transform:translate(-100%)}[data-uiify-line-chart] [data-part=time-axis]>li:only-child{transform:translate(-50%)}[data-uiify-line-chart] [data-part=time-axis]>li[data-part=crosshair-time]{background:var(--line-axis);color:canvas;padding:.3rem .5rem;font-weight:650;inset-inline-start:var(--line-crosshair-x);transform:translate(-50%)}[data-uiify-line-chart] [data-part=value-axis]>li[data-part=crosshair-value]{background:var(--line-axis);color:canvas;padding:.3rem .5rem;font-weight:650;inset-block-start:calc(var(--line-cursor-y,50%) + 1rem);inset-inline-end:0;transform:translateY(-50%)}[data-uiify-line-chart]>table{clip-path:inset(50%);white-space:nowrap;block-size:1px;inline-size:1px;position:absolute;overflow:hidden}@media (prefers-reduced-motion:no-preference){[data-uiify-line-chart] [data-part=points]>li:after{transition:scale .18s}[data-uiify-line-chart][data-interactive] [data-part=points]>li[data-point-selected]:after{scale:1.15}}[data-uiify-drawer][data-part=content]{inline-size:100%;max-inline-size:100%;padding:var(--space-xl);border:var(--border-width) solid var(--border);background-color:var(--popover);color:var(--popover-foreground);box-shadow:var(--shadow-modal);margin:0}[data-uiify-drawer][data-part=content]::backdrop{background-color:#00000073}[data-uiify-drawer][data-part=content][data-side=bottom]{border-radius:var(--radius-md) var(--radius-md) 0 0;max-block-size:85vh;translate:0 var(--uiify-drawer-transform,0);border-block-end:none;margin-block-start:auto}[data-uiify-drawer][data-part=content][data-side=top]{border-radius:0 0 var(--radius-md) var(--radius-md);max-block-size:85vh;translate:0 var(--uiify-drawer-transform,0);border-block-start:none;margin-block-end:auto}[data-uiify-drawer][data-part=content][data-side=left]{border-radius:0 var(--radius-md) var(--radius-md) 0;block-size:100%;max-block-size:100%;max-inline-size:min(24rem,100vw);translate:var(--uiify-drawer-transform,0) 0;border-inline-start:none;margin-inline-end:auto}[data-uiify-drawer][data-part=content][data-side=right]{border-radius:var(--radius-md) 0 0 var(--radius-md);block-size:100%;max-block-size:100%;max-inline-size:min(24rem,100vw);translate:var(--uiify-drawer-transform,0) 0;border-inline-end:none;margin-inline-start:auto}@media (prefers-reduced-motion:no-preference){[data-uiify-drawer][data-part=content][open]{animation:uiify-drawer-in var(--duration-base) var(--ease-out)}[data-uiify-drawer][data-part=content][open]::backdrop{animation:uiify-fade-in var(--duration-base) var(--ease-out)}}@keyframes uiify-drawer-in{0%{opacity:0}}:where([data-uiify-segmented-control],[data-uiify-segmented-control]){padding:var(--space-xs);border:var(--border-width) solid var(--border);border-radius:var(--radius-md);background-color:var(--muted);display:inline-flex;position:relative}[data-uiify-segmented-control][data-full-width]{inline-size:100%}[data-uiify-segmented-control][data-orientation=vertical]{flex-direction:column}[data-uiify-segmented-control] [data-part=item]{position:relative}[data-uiify-segmented-control][data-full-width] [data-part=item]{flex:1 1 0}[data-uiify-segmented-control] [data-part=item]>input{clip-path:inset(50%);white-space:nowrap;block-size:1px;inline-size:1px;margin:-1px;position:absolute;overflow:hidden}[data-uiify-segmented-control] [data-part=item]>label{z-index:1;min-inline-size:4rem;padding-block:var(--space-xs);padding-inline:var(--space-md);border-radius:calc(var(--radius-md) - var(--space-xs));color:var(--muted-foreground);font-size:var(--text-sm);font-weight:var(--weight-medium);cursor:pointer;justify-content:center;align-items:center;display:inline-flex;position:relative}[data-uiify-segmented-control][data-full-width] [data-part=item]>label{inline-size:100%}[data-uiify-segmented-control] [data-part=item]>label:hover{color:var(--foreground)}[data-uiify-segmented-control] [data-part=item]:has(>input:checked)>label{color:var(--foreground);background-color:var(--card);box-shadow:var(--shadow-1)}[data-uiify-segmented-control] [data-part=item]:has(>input:disabled)>label{opacity:.5;cursor:not-allowed}[data-uiify-segmented-control] [data-part=item]>input:focus-visible+label{box-shadow:0 0 0 var(--ring-width) color-mix(in oklch, var(--ring) 16%, transparent);outline:none}[data-uiify-stepper]{gap:var(--space-md);flex-wrap:wrap;display:flex}[data-uiify-stepper][data-orientation=vertical]{flex-direction:column}[data-uiify-stepper] [data-part=step]{position:relative}[data-uiify-stepper]>[data-part=step]>[data-part=control]{clip-path:inset(50%);white-space:nowrap;block-size:1px;inline-size:1px;margin:-1px;position:absolute;overflow:hidden}[data-uiify-stepper] [data-part=step]>label{align-items:center;gap:var(--space-sm);padding-block:var(--space-sm);padding-inline:var(--space-md);border:var(--border-width) solid var(--border);border-radius:var(--radius-full);background-color:var(--card);color:var(--muted-foreground);font-size:var(--text-sm);font-weight:var(--weight-medium);cursor:pointer;display:inline-flex}[data-uiify-stepper] [data-part=step]:has(>input:checked)>label,[data-uiify-stepper] [data-part=step][data-complete]>label{border-color:var(--primary);color:var(--primary)}[data-uiify-stepper] [data-part=step]>input:focus-visible+label{box-shadow:0 0 0 var(--ring-width) color-mix(in oklch, var(--ring) 16%, transparent);outline:none}[data-uiify-stepper]>[data-part=step]>[data-part=panel]{padding:var(--space-lg);border:var(--border-width) solid var(--border);border-radius:var(--radius-lg);background-color:var(--card);color:var(--foreground);font-size:var(--text-sm);margin-block-start:var(--space-lg)}[data-uiify-rating]{gap:var(--space-xs);flex-direction:row-reverse;display:inline-flex}[data-uiify-rating]>[data-part=item]>input{clip-path:inset(50%);white-space:nowrap;block-size:1px;inline-size:1px;margin:-1px;position:absolute;overflow:hidden}[data-uiify-rating]>[data-part=item]>label{color:var(--input);cursor:pointer;transition:var(--transition-colors);justify-content:center;align-items:center;font-size:1.5rem;line-height:1;display:inline-flex}[data-uiify-rating]>[data-part=item]:has(>input:checked)>label,[data-uiify-rating]>[data-part=item]:has(>input:checked)~[data-part=item]>label,[data-uiify-rating]:not([data-disabled],[data-readonly])>[data-part=item]:has(>label:hover)>label,[data-uiify-rating]:not([data-disabled],[data-readonly])>[data-part=item]:has(>label:hover)~[data-part=item]>label{color:var(--primary)}[data-uiify-rating]>[data-part=item]>input:focus-visible~label{box-shadow:0 0 0 var(--ring-width) color-mix(in oklch, var(--ring) 16%, transparent);border-radius:var(--radius-sm);outline:none}[data-uiify-rating][data-readonly]>[data-part=item]>label{cursor:default}[data-uiify-rating][data-disabled]>[data-part=item]>label{cursor:default;opacity:.5}[data-uiify-otp-input]{gap:var(--space-sm);display:inline-flex;position:relative}[data-uiify-otp-input] [data-part=slot]{border:var(--border-width) solid var(--input);border-radius:var(--radius-md);background-color:var(--card);block-size:2.5rem;inline-size:2.5rem;color:var(--foreground);font-size:var(--text-lg);font-weight:var(--weight-medium);transition:var(--transition-colors);justify-content:center;align-items:center;display:inline-flex}[data-uiify-otp-input] [data-part=slot][data-active]{border-color:var(--primary);outline:2px solid color-mix(in oklch, var(--ring) 35%, transparent);outline-offset:0}[data-uiify-otp-input] [data-part=slot][data-filled]{border-color:var(--input)}[data-uiify-otp-input][data-disabled] [data-part=slot]{opacity:.5;cursor:not-allowed}[data-uiify-tags-input]{align-items:center;gap:var(--space-xs);min-block-size:2.5rem;inline-size:100%;max-inline-size:24rem;padding-block:var(--space-sm);padding-inline:var(--space-md);border:var(--border-width) solid var(--input);border-radius:var(--radius-md);background-color:var(--card);color:var(--foreground);flex-wrap:wrap;display:flex}[data-uiify-tags-input][data-disabled]{opacity:.5;cursor:not-allowed}[data-uiify-tags-input]:focus-within{border-color:var(--primary)}[data-uiify-tags-input] [data-part=list]{align-items:center;gap:var(--space-xs);flex-wrap:wrap;margin:0;padding:0;list-style:none;display:flex}[data-uiify-tags-input] [data-part=list]>li{align-items:center;gap:var(--space-xs);padding-block:var(--space-xs);padding-inline:var(--space-sm);border-radius:var(--radius-sm);background-color:var(--accent);color:var(--accent-foreground);font-size:var(--text-xs);font-weight:var(--weight-medium);display:inline-flex}[data-uiify-tags-input] [data-part=input]{min-inline-size:5rem;padding-block:var(--space-sm);padding-inline:var(--space-md);color:var(--foreground);font-size:var(--text-sm);background:0 0;border:none;outline:none;flex:1}[data-uiify-tags-input] [data-part=input]::placeholder{color:var(--muted-foreground)}[data-uiify-tags-input] [data-part=tag]{align-items:center;gap:var(--space-xs);padding-block:var(--space-xs);padding-inline:var(--space-sm);border-radius:var(--radius-sm);background-color:var(--accent);color:var(--accent-foreground);font-size:var(--text-xs);font-weight:var(--weight-medium);display:inline-flex}[data-uiify-number-field]{border:var(--border-width) solid var(--input);border-radius:var(--radius-md);background-color:var(--card);align-items:stretch;display:inline-flex;overflow:hidden}[data-uiify-number-field]>[role=spinbutton]{inline-size:4rem;padding-block:var(--space-sm);padding-inline:var(--space-md);color:var(--foreground);font-size:var(--text-sm);text-align:center;background:0 0;border:none;outline:none}[data-uiify-number-field]>[role=spinbutton]:focus-visible{box-shadow:inset 0 0 0 var(--ring-width) color-mix(in oklch, var(--ring) 16%, transparent);outline:none}[data-uiify-number-field]>button{border:none;border-inline-start:var(--border-width) solid var(--border);inline-size:2.25rem;color:var(--foreground);font-size:var(--text-lg);cursor:pointer;transition:var(--transition-colors);background-color:#0000;justify-content:center;align-items:center;padding:0;line-height:1;display:inline-flex}[data-uiify-number-field]>button:first-child{border-inline-start:none;border-inline-end:var(--border-width) solid var(--border)}[data-uiify-number-field]>button:hover{background-color:color-mix(in oklch, var(--foreground) 8%, transparent)}[data-uiify-number-field]>button[data-disabled]{opacity:.5;cursor:not-allowed}[data-uiify-file-upload]{gap:var(--space-md);inline-size:100%;max-inline-size:24rem;display:grid}[data-uiify-file-upload] [data-part=dropzone]{min-block-size:8rem;padding:var(--space-lg);border:2px dashed var(--input);border-radius:var(--radius-md);background-color:var(--secondary);color:var(--muted-foreground);font-size:var(--text-sm);text-align:center;transition:var(--transition-colors);justify-content:center;align-items:center;display:flex}[data-uiify-file-upload] [data-part=dropzone]:hover,[data-uiify-file-upload] [data-part=dropzone][data-dragging]{border-color:var(--primary);background-color:color-mix(in oklch, var(--primary) 8%, transparent);color:var(--foreground)}[data-uiify-file-upload] [data-part=dropzone][data-disabled]{opacity:.5;cursor:not-allowed}[data-uiify-file-upload] [data-part=list]{gap:var(--space-xs);margin:0;padding:0;list-style:none;display:grid}[data-uiify-file-upload] [data-part=item]{align-items:center;gap:var(--space-sm);padding:var(--space-sm) var(--space-md);border:var(--border-width) solid var(--border);border-radius:var(--radius-md);background-color:var(--card);font-size:var(--text-sm);display:flex}[data-uiify-toolbar][data-part=root]{align-items:center;gap:var(--space-xs);padding:var(--space-xs);border:var(--border-width) solid var(--border);border-radius:var(--radius-md);background-color:var(--card);display:inline-flex}[data-uiify-toolbar][data-part=root]>hr[data-part=separator][data-orientation]{inline-size:var(--border-width);block-size:auto;margin-inline:var(--space-md);background-color:var(--border);border:0;flex:none;align-self:stretch}}@layer utilities,theme;@property --uiify-spinner-tail{syntax:"<angle>";inherits:false;initial-value:0deg}@property --uiify-spinner-length{syntax:"<angle>";inherits:false;initial-value:36deg}@property --candle-body-height{syntax:"<percentage>";inherits:true;initial-value:0%}@property --candle-body-top{syntax:"<percentage>";inherits:true;initial-value:50%}@property --candle-slot{syntax:"<percentage>";inherits:true;initial-value:100%}@property --candle-wick-height{syntax:"<percentage>";inherits:true;initial-value:0%}@property --candle-wick-top{syntax:"<percentage>";inherits:true;initial-value:50%}@property --candle-x{syntax:"<percentage>";inherits:true;initial-value:0%}@property --candle-scale{syntax:"<number>";inherits:true;initial-value:1}@property --line-y{syntax:"<percentage>";inherits:true;initial-value:50%}@property --line-prev-y{syntax:"<percentage>";inherits:true;initial-value:50%}@property --line-count{syntax:"<integer>";inherits:false;initial-value:1}@property --line-scale{syntax:"<number>";inherits:true;initial-value:1}
1
+ @layer reset;@layer tokens{:root{--gray-0:oklch(100% 0 0);--gray-1:oklch(99% 0 0);--gray-2:oklch(97% 0 0);--gray-3:oklch(94% 0 0);--gray-4:oklch(90% 0 0);--gray-5:oklch(83% 0 0);--gray-6:oklch(70% 0 0);--gray-7:oklch(55% 0 0);--gray-8:oklch(45% 0 0);--gray-9:oklch(35% 0 0);--gray-10:oklch(27% 0 0);--gray-11:oklch(21% 0 0);--gray-12:oklch(15% 0 0);--blue-4:oklch(80% .1 255);--blue-5:oklch(68% .16 255);--blue-6:oklch(55% .2 255);--blue-7:oklch(48% .21 255);--red-5:oklch(68% .18 25);--red-6:oklch(58% .22 25);--red-7:oklch(50% .22 25);--green-6:oklch(62% .17 150);--size-1:.25rem;--size-2:.5rem;--size-3:.75rem;--size-4:1rem;--size-5:1.5rem;--size-6:2rem;--size-7:3rem;--size-8:4rem;--radius-1:7px;--radius-2:9px;--radius-3:10px;--radius-4:12px;--radius-full:9999px;--font-sans:system-ui, -apple-system, "Segoe UI", roboto, helvetica, arial, sans-serif;--font-mono:ui-monospace, "SF Mono", "Cascadia Code", "Fira Code", monospace;--text-xs:.75rem;--text-sm:.875rem;--text-base:1rem;--text-lg:1.125rem;--text-xl:1.5rem;--text-2xl:2rem;--leading-tight:1.2;--leading-normal:1.5;--weight-normal:400;--weight-medium:500;--weight-semibold:600;--shadow-1:0 1px 2px #00000014;--shadow-2:0 12px 32px #14161a24;--shadow-3:0 24px 60px #14161a33;--border-width:1px;--ring-width:3px;--ring-offset:2px;--ease-out:cubic-bezier(.16, 1, .3, 1);--ease-in-out:cubic-bezier(.65, 0, .35, 1);--duration-fast:.12s;--duration-base:.18s;color-scheme:light;--background:light-dark(oklch(96.1% .007 88.6),oklch(17.8% .006 271));--foreground:light-dark(oklch(20% .009 264.4),oklch(95.2% .004 91.4));--card:light-dark(var(--gray-0),oklch(21.7% .008 264.4));--card-foreground:var(--foreground);--popover:light-dark(var(--gray-0),oklch(21.7% .008 264.4));--popover-foreground:var(--foreground);--secondary:light-dark(oklch(98.5% .003 84.6),oklch(19.6% .006 271.1));--secondary-foreground:var(--foreground);--muted:light-dark(var(--gray-3),oklch(26.4% .01 260.7));--muted-foreground:light-dark(oklch(48.5% .012 267.3),oklch(64.863% .0101 258.447));--primary:light-dark(oklch(48.6% .272 267.3),oklch(68.1% .169 275));--primary-foreground:light-dark(var(--gray-0),oklch(17.8% .006 271));--accent:color-mix(in oklch, var(--primary) 12%, transparent);--accent-foreground:var(--primary);--border:light-dark(oklch(90.4% .013 86.8),oklch(30% .012 258.4));--input:light-dark(oklch(87.1% .013 86.8),oklch(36.6% .015 259.8));--ring:light-dark(var(--blue-7),oklch(68.1% .169 275));--destructive:light-dark(var(--red-7),var(--red-5));--destructive-foreground:light-dark(var(--gray-0),oklch(17.8% .006 271));--success:var(--green-6);--success-foreground:var(--gray-0);--warning:light-dark(oklch(72% .16 75),oklch(80% .14 85));--warning-foreground:var(--gray-12);--chart-1:var(--primary);--chart-2:var(--blue-5);--chart-3:var(--green-6);--chart-4:var(--red-5);--chart-5:var(--gray-7);--radius:var(--radius-3);--radius-sm:var(--radius-1);--radius-md:var(--radius-2);--radius-lg:var(--radius);--radius-xl:var(--radius-4);--space-xs:var(--size-1);--space-sm:var(--size-2);--space-md:var(--size-3);--space-lg:var(--size-4);--space-xl:var(--size-5);--shadow-popover:var(--shadow-2);--shadow-modal:var(--shadow-3);--transition-colors:color var(--duration-fast) var(--ease-out), background-color var(--duration-fast) var(--ease-out), border-color var(--duration-fast) var(--ease-out)}[data-theme=basic-light]{color-scheme:light}[data-theme=basic-dark]{color-scheme:dark}}@layer base{body{background-color:var(--background);color:var(--foreground);font-family:var(--font-sans);font-size:var(--text-base);line-height:var(--leading-normal)}[popover]:popover-open:not([data-positioning=native]){margin:revert}[data-positioning=native]{--uiify-anchor-offset:var(--space-sm)}:where([data-uiify-button],[data-uiify-input],[data-uiify-textarea],[data-uiify-select],[data-uiify-checkbox],[data-uiify-radio],[data-uiify-switch],[data-uiify-toggle]):focus-visible{box-shadow:0 0 0 var(--ring-width) color-mix(in oklch, var(--ring) 16%, transparent);outline:none}}@layer demo;@layer components{:where([data-uiify-button]){border:var(--border-width) solid transparent;border-radius:var(--radius-md);background-color:var(--primary);min-block-size:36px;color:var(--primary-foreground);font-size:var(--text-sm);font-weight:var(--weight-medium);cursor:pointer;transition:var(--transition-colors);background-clip:padding-box;justify-content:center;align-items:center;gap:.375rem;padding-block:0;padding-inline:.625rem;line-height:1.25rem;display:inline-flex}[data-uiify-button]:hover{background-color:color-mix(in oklch, var(--primary), transparent 20%)}[data-uiify-button]:active{background-color:color-mix(in oklch, var(--primary), var(--primary-foreground) 20%)}[data-uiify-button]:disabled,[data-uiify-button][data-disabled]{opacity:.5;cursor:not-allowed}[data-uiify-button][data-variant=ghost]{color:var(--foreground);border-color:var(--border);background-color:#0000}[data-uiify-button][data-variant=outline]{border-color:var(--input);background-color:var(--card);color:var(--foreground)}[data-uiify-button][data-variant=outline]:hover{background-color:var(--secondary)}[data-uiify-button][data-variant=solid]{background-color:var(--foreground);color:var(--background)}[data-uiify-button][data-variant=solid]:hover{background-color:var(--muted-foreground)}[data-uiify-button][data-variant=ghost]:hover{background-color:color-mix(in oklch, var(--foreground) 8%, transparent)}[data-uiify-button][data-variant=ghost]:active{background-color:color-mix(in oklch, var(--foreground) 14%, transparent)}[data-uiify-button][data-variant=danger]{background-color:var(--destructive);color:var(--destructive-foreground)}[data-uiify-button][data-variant=danger]:hover{background-color:color-mix(in oklch, var(--destructive), black 12%)}[data-uiify-button][data-variant=danger]:active{background-color:color-mix(in oklch, var(--destructive), black 20%)}[data-uiify-surface]{gap:var(--space-md);inline-size:max-content;max-inline-size:min(28rem, calc(100vw - 2 * var(--space-lg)));padding:var(--space-lg);border:var(--border-width) solid var(--border);border-radius:var(--radius-lg);background-color:var(--card);color:var(--card-foreground);box-shadow:var(--shadow-popover);display:grid}[data-uiify-surface][popover]:not(:popover-open){display:none}@media (prefers-reduced-motion:no-preference){[data-uiify-surface][popover]:popover-open{animation:uiify-overlay-in var(--duration-fast) var(--ease-out)}}:where([data-uiify-input],[data-uiify-textarea]){inline-size:100%;max-inline-size:24rem;padding-block:var(--space-sm);padding-inline:var(--space-md);border:var(--border-width) solid var(--input);border-radius:var(--radius-md);background-color:var(--card);color:var(--foreground);font-size:var(--text-sm);line-height:var(--leading-normal);transition:var(--transition-colors);display:block}:where([data-uiify-input],[data-uiify-textarea])::placeholder{color:var(--muted-foreground)}:where([data-uiify-input],[data-uiify-textarea]):focus-visible{border-color:var(--primary)}:where([data-uiify-input],[data-uiify-textarea]):disabled,:where([data-uiify-input],[data-uiify-textarea])[data-disabled]{opacity:.5;cursor:not-allowed}:is(:where([data-uiify-input],[data-uiify-textarea])[data-invalid],:where([data-uiify-input],[data-uiify-textarea]):user-invalid){border-color:var(--destructive)}:where([data-uiify-input],[data-uiify-textarea])[data-invalid]:focus-visible{outline-color:var(--destructive)}[data-uiify-textarea]{resize:vertical;min-block-size:4lh}[data-uiify-textarea][data-autosize]{field-sizing:content;resize:none}[data-uiify-field]{gap:var(--space-sm);inline-size:100%;max-inline-size:24rem;display:grid}[data-uiify-field] [data-part=label]{color:var(--foreground);font-size:var(--text-sm);font-weight:var(--weight-medium);line-height:var(--leading-normal)}[data-uiify-field] [data-part=label][data-required]:after{content:" *";color:var(--destructive)}[data-uiify-field] [data-part=description]{color:var(--muted-foreground);font-size:var(--text-xs);line-height:var(--leading-normal);margin:0}[data-uiify-field] [data-part=error]{color:var(--destructive);font-size:var(--text-xs);line-height:var(--leading-normal);margin:0}:where([data-uiify-checkbox]>input,[data-uiify-radio]){appearance:none;border:var(--border-width) solid var(--input);background-color:var(--card);cursor:pointer;block-size:1.15rem;inline-size:1.15rem;transition:var(--transition-colors);place-content:center;margin:0;display:inline-grid}[data-uiify-checkbox]{align-items:center;gap:var(--space-sm);cursor:pointer;color:var(--foreground);font-size:var(--text-sm);line-height:var(--leading-normal);display:inline-flex}[data-uiify-checkbox]>input{border-radius:var(--radius-sm)}[data-uiify-radio]{border-radius:var(--radius-full)}[data-uiify-checkbox]>input:checked,[data-uiify-checkbox]>input[data-state=checked]{border-color:var(--primary);background-color:var(--primary)}[data-uiify-radio]:checked,[data-uiify-radio][data-state=checked]{border-width:5px;border-color:var(--primary);background-color:var(--card)}[data-uiify-checkbox]>input:before{content:"";block-size:.65rem;inline-size:.65rem;transition:transform var(--duration-fast) var(--ease-out);background-color:var(--primary-foreground);clip-path:polygon(14% 44%,0 65%,38% 100%,100% 22%,84% 6%,38% 68%);transform:scale(0)}[data-uiify-checkbox]>input:checked:before,[data-uiify-checkbox]>input[data-state=checked]:before{transform:scale(1)}[data-uiify-checkbox]>input:indeterminate,[data-uiify-checkbox]>input[data-state=indeterminate]{border-color:var(--primary);background-color:var(--primary)}[data-uiify-checkbox]>input:indeterminate:before,[data-uiify-checkbox]>input[data-state=indeterminate]:before{clip-path:inset(42% 12%);transform:scale(1)}:where([data-uiify-checkbox]>input,[data-uiify-radio]):disabled,:where([data-uiify-checkbox]>input,[data-uiify-radio])[data-disabled],[data-uiify-checkbox]:has(>input:disabled){opacity:.5;cursor:not-allowed}[data-uiify-radio-group]{gap:var(--space-md);flex-direction:column;display:flex}[data-uiify-switch]{appearance:none;border-radius:var(--radius-full);background-color:var(--input);cursor:pointer;block-size:1.25rem;inline-size:2.25rem;transition:background-color var(--duration-fast) var(--ease-out);border:none;flex:none;margin:0;position:relative}[data-uiify-switch]:before{content:"";border-radius:var(--radius-full);background-color:var(--gray-0);block-size:calc(1.25rem - 4px);inline-size:calc(1.25rem - 4px);box-shadow:var(--shadow-1);transition:translate var(--duration-fast) var(--ease-out);position:absolute;inset-block-start:2px;inset-inline-start:2px}[data-uiify-switch]:checked,[data-uiify-switch][data-state=checked]{background-color:var(--primary)}[data-uiify-switch]:checked:before,[data-uiify-switch][data-state=checked]:before{translate:1rem}[data-uiify-switch]:disabled,[data-uiify-switch][data-disabled]{opacity:.5;cursor:not-allowed}:where([data-uiify-radio-group]){padding:var(--space-md);flex-direction:column;display:flex}[data-uiify-radio-group] [data-part=item]{align-items:center;gap:var(--space-sm);display:flex}[data-uiify-radio-group] [data-part=item]>input{flex:none}[data-uiify-radio-group] [data-part=item]>label{flex:auto}[data-uiify-slider]{inline-size:100%;max-inline-size:16rem;accent-color:var(--primary);cursor:pointer}[data-uiify-slider]:disabled,[data-uiify-slider][data-disabled]{opacity:.5;cursor:not-allowed}[data-uiify-toggle]>[data-part=label]{min-inline-size:2.25rem;padding-block:var(--space-sm);padding-inline:var(--space-md);border:var(--border-width) solid var(--border);border-radius:var(--radius-md);background-color:var(--card);color:var(--foreground);font-size:var(--text-sm);line-height:var(--leading-normal);font-weight:var(--weight-medium);cursor:pointer;transition:var(--transition-colors);justify-content:center;align-items:center;display:inline-flex}[data-uiify-toggle]{display:inline-flex;position:relative}[data-uiify-toggle]>[data-part=label]:hover{background-color:var(--secondary)}[data-uiify-toggle]:has(>input:checked)>[data-part=label],[data-uiify-toggle]:has(>input[data-state=on])>[data-part=label]{background-color:var(--primary);border-color:var(--primary);color:var(--primary-foreground)}[data-uiify-toggle][data-disabled]>[data-part=label],[data-uiify-toggle]:has(>input:disabled)>[data-part=label]{opacity:.5;cursor:not-allowed}[data-uiify-toggle]>input{opacity:0;cursor:pointer;block-size:100%;inline-size:100%;margin:0;position:absolute;inset:0}[data-uiify-toggle]>input:disabled{cursor:not-allowed}[data-uiify-toggle]>input:focus-visible+[data-part=label]{box-shadow:0 0 0 var(--ring-width) color-mix(in oklch, var(--ring) 16%, transparent);outline:none}[data-uiify-toggle-group]{gap:var(--space-xs);display:inline-flex}[data-uiify-toggle-group][data-orientation=vertical]{flex-direction:column}[data-uiify-toggle-group] [data-part=item]{position:relative}[data-uiify-toggle-group] [data-part=item]>input{clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap;block-size:1px;inline-size:1px;margin:-1px;position:absolute;overflow:hidden}[data-uiify-toggle-group] [data-part=item]>label{min-inline-size:2.25rem;padding-block:var(--space-sm);padding-inline:var(--space-md);border:var(--border-width) solid var(--border);border-radius:var(--radius-md);background-color:var(--card);color:var(--foreground);font-size:var(--text-sm);line-height:var(--leading-normal);font-weight:var(--weight-medium);cursor:pointer;transition:var(--transition-colors);justify-content:center;align-items:center;display:inline-flex}[data-uiify-toggle-group] [data-part=item]>label:hover{background-color:var(--secondary)}[data-uiify-toggle-group] [data-part=item]:has(>input:checked)>label{background-color:var(--primary);border-color:var(--primary);color:var(--primary-foreground)}[data-uiify-toggle-group] [data-part=item]:has(>input:disabled)>label{opacity:.5;cursor:not-allowed}[data-uiify-toggle-group] [data-part=item]>input:focus-visible+label{box-shadow:0 0 0 var(--ring-width) color-mix(in oklch, var(--ring) 16%, transparent);outline:none}:where([data-uiify-dialog][data-part=content],[data-uiify-modal][data-part=content],[data-uiify-alert-modal][data-part=content],[data-uiify-drawer][data-part=content]){inline-size:min(28rem, calc(100vw - 2 * var(--space-lg)));padding:var(--space-xl);border:var(--border-width) solid var(--border);background-color:var(--popover);color:var(--popover-foreground);box-shadow:var(--shadow-modal);border-radius:14px;margin:auto}:where([data-uiify-dialog][data-part=content],[data-uiify-modal][data-part=content],[data-uiify-alert-modal][data-part=content],[data-uiify-drawer][data-part=content])::backdrop{background-color:#00000073}:where([data-uiify-dialog],[data-uiify-modal],[data-uiify-alert-modal],[data-uiify-drawer]) [data-part=title]{font-size:var(--text-xl);font-weight:var(--weight-semibold);margin:0;line-height:1.3}:where([data-uiify-dialog],[data-uiify-modal],[data-uiify-alert-modal],[data-uiify-drawer]) [data-part=description]{margin-block:var(--space-sm) var(--space-lg);color:var(--muted-foreground);font-size:var(--text-sm);line-height:var(--leading-normal)}@media (prefers-reduced-motion:no-preference){:where([data-uiify-dialog][data-part=content],[data-uiify-modal][data-part=content],[data-uiify-alert-modal][data-part=content],[data-uiify-drawer][data-part=content])[open]{animation:uiify-dialog-in var(--duration-base) var(--ease-out)}:where([data-uiify-dialog][data-part=content],[data-uiify-modal][data-part=content],[data-uiify-alert-modal][data-part=content],[data-uiify-drawer][data-part=content])[open]::backdrop{animation:uiify-fade-in var(--duration-base) var(--ease-out)}}@keyframes uiify-dialog-in{0%{opacity:0;translate:0 .5rem;scale:.97}}@keyframes uiify-fade-in{0%{opacity:0}}:where([data-uiify-popover][data-part=surface],[data-uiify-popup][data-part=content],[data-uiify-hover-card][data-part=content]){gap:var(--space-sm);inline-size:max-content;max-inline-size:18rem;padding:var(--space-md);border:var(--border-width) solid var(--border);border-radius:var(--radius-md);background-color:var(--popover);color:var(--popover-foreground);box-shadow:var(--shadow-popover);flex-direction:column;display:flex}:where([data-uiify-popover][data-part=surface],[data-uiify-popup][data-part=content],[data-uiify-hover-card][data-part=content])[data-state=closed]{display:none}[data-uiify-tooltip]{inline-size:max-content;max-inline-size:16rem;padding-block:var(--space-xs);padding-inline:var(--space-sm);border-radius:var(--radius-md);background-color:var(--foreground);color:var(--background);font-size:var(--text-xs);line-height:var(--leading-normal);box-shadow:var(--shadow-popover);border:none;display:block}:where([data-uiify-tooltip])[data-state=closed]{display:none}@media (prefers-reduced-motion:no-preference){:where([data-uiify-tooltip])[data-state=open]{animation:uiify-overlay-in var(--duration-fast) var(--ease-out)}:where([data-uiify-popover][data-part=surface],[data-uiify-popup][data-part=content],[data-uiify-hover-card][data-part=content]):popover-open{animation:uiify-overlay-in var(--duration-fast) var(--ease-out)}}@keyframes uiify-overlay-in{0%{opacity:0;scale:.96}}[data-uiify-menu-bar]{align-items:center;gap:var(--space-xs);padding:var(--space-xs);border:var(--border-width) solid var(--border);border-radius:var(--radius-md);background-color:var(--background);display:inline-flex}:where([data-uiify-menu] :is([data-part=content],[data-part=sub-content]),[data-uiify-menu]:is([data-part=content],[data-part=sub-content])){overscroll-behavior:contain;max-block-size:min(24rem,100dvb - 2rem);min-inline-size:12rem;padding:var(--space-xs);border:var(--border-width) solid var(--border);border-radius:var(--radius-md);background-color:var(--popover);color:var(--popover-foreground);box-shadow:var(--shadow-popover);transform-origin:var(--transform-origin,top);flex-direction:column;display:flex;overflow-y:auto}:where([data-uiify-menu] :is([data-part=content],[data-part=sub-content]),[data-uiify-menu]:is([data-part=content],[data-part=sub-content]))[data-state=closed]{display:none}[data-uiify-menu] :is([data-part=item],[data-part=checkbox-item],[data-part=radio-item],[data-part=sub-trigger]){align-items:center;column-gap:var(--space-md);padding-block:var(--space-sm);padding-inline:var(--space-md);border-radius:var(--radius-sm);cursor:pointer;-webkit-user-select:none;user-select:none;inline-size:100%;color:inherit;font:inherit;line-height:var(--leading-normal);text-align:start;appearance:none;background:0 0;border:0;display:flex;font-size:var(--text-sm)!important}[data-uiify-menu] :is([data-part=item],[data-part=checkbox-item],[data-part=radio-item],[data-part=sub-trigger]):is(:hover,:focus-visible,[data-highlighted]){background-color:var(--accent);color:var(--accent-foreground);outline:none}[data-uiify-menu] [data-part=radio-item]:hover[role=menuitemradio][data-state=checked] [data-part=item-indicator],[data-uiify-menu] [data-part=radio-item]:focus-visible[role=menuitemradio][data-state=checked] [data-part=item-indicator],[data-uiify-menu] [data-part=radio-item][data-highlighted][role=menuitemradio][data-state=checked] [data-part=item-indicator]{border-color:var(--accent-foreground)}[data-uiify-menu] :is([data-part=item],[data-part=checkbox-item],[data-part=radio-item],[data-part=sub-trigger]):is([aria-disabled=true],[data-disabled]){opacity:.5;pointer-events:none}[data-uiify-menu] :is([data-part=item],[data-part=checkbox-item],[data-part=radio-item],[data-part=sub-trigger])[data-danger]{color:var(--destructive,var(--foreground))}[data-uiify-menu] :is([data-part=item],[data-part=checkbox-item],[data-part=radio-item],[data-part=sub-trigger])[data-danger]:is(:hover,:focus-visible,[data-highlighted]){background-color:var(--destructive);color:var(--destructive-foreground)}[data-uiify-menu] [data-part=item-icon],[data-uiify-menu] [data-part=item-indicator]{flex:0 0 1.15rem;place-items:center;block-size:1.15rem;inline-size:1.15rem;display:inline-grid}[data-uiify-menu] [data-part=item-indicator]{border:var(--border-width) solid var(--input);border-radius:var(--radius-sm);color:#0000}[role=menuitemcheckbox][data-state=checked] [data-part=item-indicator],[role=menuitemcheckbox][data-state=indeterminate] [data-part=item-indicator]{border-color:var(--primary);background:var(--primary);color:var(--primary-foreground)}[role=menuitemcheckbox][data-state=checked] [data-part=item-indicator]:before{clip-path:polygon(14% 44%,0 65%,38% 100%,100% 22%,84% 6%,38% 68%);content:"";background-color:currentColor;block-size:.65rem;inline-size:.65rem}[role=menuitemcheckbox][data-state=indeterminate] [data-part=item-indicator]:before{content:"";background:currentColor;block-size:.12rem;inline-size:.65rem}[role=menuitemradio] [data-part=item-indicator]{border-radius:50%}[role=menuitemradio][data-state=checked] [data-part=item-indicator]{border-width:5px;border-color:var(--primary);background:var(--card)}[role=menuitemradio][data-state=checked] [data-part=item-indicator]:before{content:none}[data-uiify-menu] [data-part=item-icon]>svg,[data-uiify-menu] [data-part=item-indicator]>svg{block-size:100%;inline-size:100%;display:block}[data-uiify-menu] [data-part=item-text]{flex:auto;min-inline-size:0;display:grid}[data-uiify-menu] [data-part=item-description]{color:var(--muted-foreground);font-size:var(--text-xs);line-height:var(--leading-normal)}[data-uiify-menu] :is([data-part=item],[data-part=checkbox-item],[data-part=radio-item],[data-part=sub-trigger]):is(:hover,:focus-visible,[data-highlighted]) [data-part=item-description]{color:inherit;opacity:.8}[data-uiify-menu] [data-part=shortcut]{color:var(--muted-foreground);font-size:var(--text-xs);font-family:inherit;font-weight:inherit;white-space:nowrap;margin-inline-start:auto;line-height:1}[data-uiify-menu] :is([data-part=item],[data-part=checkbox-item],[data-part=radio-item],[data-part=sub-trigger]):is(:hover,:focus-visible,[data-highlighted]) [data-part=shortcut]{color:inherit;opacity:.85}[data-uiify-menu] [data-part=label]{padding-block:var(--space-xs);padding-inline:var(--space-md);color:var(--muted-foreground);font-size:var(--text-xs);font-weight:var(--weight-semibold)}[data-uiify-menu] [data-part=separator]{block-size:var(--border-width);margin-block:var(--space-xs);margin-inline:calc(-1 * var(--space-xs));background-color:var(--border)}[data-uiify-menu] [data-part=sub-content]{min-inline-size:11rem}[data-uiify-menu] [data-part=sub-content][data-side=right]{--uiify-anchor-offset:0;inset-block-start:calc(anchor(start) - var(--space-xs))}@media (prefers-reduced-motion:no-preference){:where([data-uiify-menu] :is([data-part=content],[data-part=sub-content]),[data-uiify-menu]:is([data-part=content],[data-part=sub-content])):popover-open{animation:uiify-menu-in var(--duration-fast) var(--ease-out)}@starting-style{:where([data-uiify-menu] :is([data-part=content],[data-part=sub-content]),[data-uiify-menu]:is([data-part=content],[data-part=sub-content])):popover-open{opacity:0;scale:.98}}}@media (prefers-reduced-motion:reduce){[data-uiify-menu]:popover-open{transition:none;animation:none}}@keyframes uiify-menu-in{0%{opacity:0;scale:.98}}[data-uiify-select]{align-items:center;gap:var(--space-md);inline-size:100%;min-inline-size:12rem;max-inline-size:16rem;padding-block:var(--space-sm);padding-inline:var(--space-md);border:var(--border-width) solid var(--input);border-radius:var(--radius-md);background-color:var(--card);color:var(--foreground);font-size:var(--text-sm);line-height:var(--leading-normal);cursor:pointer;transition:var(--transition-colors);display:flex}[data-uiify-select]:focus-visible{border-color:var(--primary)}[data-uiify-select]:disabled,[data-uiify-select][data-disabled]{opacity:.5;cursor:not-allowed}[data-uiify-select]::picker-icon{content:"";border-inline-end:2px solid var(--muted-foreground);border-block-end:2px solid var(--muted-foreground);block-size:.3rem;inline-size:.3rem;transition:rotate var(--duration-fast) var(--ease-out);margin-block-end:.1rem;margin-inline-start:auto;display:inline-block;rotate:45deg}[data-uiify-select]:open::picker-icon{margin-block-end:-.2rem;rotate:225deg}[data-uiify-select]::picker(select){max-block-size:min(24rem,100dvb - 2rem);min-inline-size:12rem;padding:var(--space-xs);border:var(--border-width) solid var(--border);border-radius:var(--radius-md);background-color:var(--popover);color:var(--popover-foreground);box-shadow:var(--shadow-popover);overscroll-behavior:contain;opacity:0;transition:opacity var(--duration-fast) var(--ease-out) allow-discrete;inset-block-start:calc(anchor(bottom) + var(--space-sm))}[data-uiify-select]:open::picker(select){opacity:1}@starting-style{[data-uiify-select]:open::picker(select){opacity:0}}[data-uiify-select] optgroup{padding-block-start:var(--space-xs);padding-inline:var(--space-md);color:var(--muted-foreground);font-size:var(--text-xs);font-weight:var(--weight-semibold)}[data-uiify-select] optgroup option{margin-inline:calc(-1 * var(--space-md));inline-size:calc(100% + 2 * var(--space-md))}[data-uiify-select] option{align-items:center;column-gap:var(--space-md);padding-block:var(--space-sm);padding-inline:var(--space-md);border-radius:var(--radius-sm);color:var(--foreground);cursor:pointer;display:flex;font-size:var(--text-sm)!important}[data-uiify-select] option:hover,[data-uiify-select] option:focus-visible{background-color:var(--accent);color:var(--accent-foreground)}[data-uiify-select] option:disabled{opacity:.5;pointer-events:none}[data-uiify-select] option::checkmark{box-sizing:border-box;border-radius:var(--radius-sm);background:var(--primary);block-size:1.15rem;inline-size:1.15rem;color:var(--primary-foreground);font-size:.8rem;font-weight:var(--weight-semibold);content:"✓";flex:0 0 1.15rem;order:-1;place-items:center;line-height:1;display:inline-grid}[data-uiify-select] hr{margin-block:var(--space-xs);border:0;border-block-start:var(--border-width) solid var(--border)}@media (prefers-reduced-motion:reduce){[data-uiify-select]::picker-icon{transition:none}[data-uiify-select]::picker(select){transition:none}}[data-uiify-tabs] [data-part=trigger]{padding-block:var(--space-sm);padding-inline:var(--space-md);color:var(--muted-foreground);font-size:var(--text-sm);line-height:var(--leading-normal);font-weight:var(--weight-medium);cursor:pointer;border:none;transition:var(--transition-colors);background:0 0;border-block-end:2px solid #0000;margin-block-end:calc(-1 * var(--border-width))}[data-uiify-tabs] [data-part=trigger]:hover{color:var(--foreground)}[data-uiify-tabs] [data-part=trigger][data-state=active]{border-block-end-color:var(--primary);color:var(--foreground);font-weight:var(--weight-semibold)}[data-uiify-tabs] [data-part=panel]{font-size:var(--text-sm);line-height:var(--leading-normal)}[data-uiify-tabs]>[data-part=item]{display:contents}[data-uiify-tabs]{grid-template-rows:auto auto;grid-auto-columns:max-content;grid-auto-flow:column;align-items:start;gap:0;display:grid}[data-uiify-tabs]>[data-part=item]>input{clip-path:inset(50%);white-space:nowrap;block-size:1px;inline-size:1px;margin:-1px;position:absolute;overflow:hidden}[data-uiify-tabs]>[data-part=item]>label{padding-block:var(--space-sm);padding-inline:var(--space-md);color:var(--muted-foreground);font-size:var(--text-sm);line-height:var(--leading-normal);font-weight:var(--weight-medium);cursor:pointer;border-block-end:2px solid #0000;grid-row:1;display:inline-flex}[data-uiify-tabs]>[data-part=item]>label:hover{color:var(--foreground)}[data-uiify-tabs]>[data-part=item]:has(>input:checked)>label{border-block-end-color:var(--primary);color:var(--foreground);font-weight:var(--weight-semibold)}[data-uiify-tabs]>[data-part=item]>input:focus-visible+label{box-shadow:0 0 0 var(--ring-width) color-mix(in oklch, var(--ring) 16%, transparent);outline:none}[data-uiify-tabs]>[data-part=item]>[data-part=panel]{font-size:var(--text-sm);line-height:var(--leading-normal);grid-area:2/1/auto/-1}:where([data-uiify-accordion]){border:var(--border-width) solid var(--border);border-radius:var(--radius-lg);overflow:hidden}[data-uiify-accordion]>[data-part=item]{border-block-end:var(--border-width) solid var(--border)}[data-uiify-accordion]>[data-part=item]:last-child{border-block-end:none}[data-uiify-accordion] [data-part=trigger]{justify-content:space-between;align-items:center;gap:var(--space-md);padding:var(--space-lg);font-size:var(--text-sm);line-height:var(--leading-normal);font-weight:var(--weight-medium);cursor:pointer;list-style:none;display:flex}[data-uiify-accordion] [data-part=trigger]::-webkit-details-marker{display:none}[data-uiify-accordion] [data-part=trigger]:hover{background-color:var(--secondary)}[data-uiify-accordion] [data-part=trigger]:focus-visible{box-shadow:inset 0 0 0 var(--ring-width) color-mix(in oklch, var(--ring) 16%, transparent);outline:none}[data-uiify-accordion] [data-part=trigger]:after{content:"";border-inline-end:2px solid var(--muted-foreground);border-block-end:2px solid var(--muted-foreground);block-size:.5rem;inline-size:.5rem;transition:rotate var(--duration-fast) var(--ease-out);rotate:45deg}[data-uiify-accordion] [data-part=item][open]>[data-part=trigger]:after{rotate:225deg}[data-uiify-accordion] [data-part=item][open]>[data-part=trigger]{color:var(--primary)}@supports (interpolate-size:allow-keywords){:root{interpolate-size:allow-keywords}[data-uiify-accordion]>[data-part=item]::details-content{block-size:0;transition:block-size var(--duration-base) ease, content-visibility var(--duration-base) allow-discrete;overflow:clip}[data-uiify-accordion]>[data-part=item][open]::details-content{block-size:auto}}[data-uiify-accordion] [data-part=panel]{padding-block:0 var(--space-lg);padding-inline:var(--space-lg);color:var(--muted-foreground);font-size:var(--text-sm);line-height:var(--leading-normal)}[data-uiify-combobox]{inline-size:100%;max-inline-size:18rem;position:relative}[data-uiify-combobox] [data-part=control]{align-items:center;gap:var(--space-xs);min-block-size:2.5rem;inline-size:100%;padding-block:var(--space-sm);padding-inline:var(--space-md);border:var(--border-width) solid var(--input);border-radius:var(--radius-md);background-color:var(--card);color:var(--foreground);transition:var(--transition-colors);flex-wrap:wrap;display:flex}[data-uiify-combobox] [data-part=control]:focus-within{border-color:var(--primary)}[data-uiify-combobox] [data-part=control][data-disabled],[data-uiify-combobox] [data-part=control]:has([data-part=input]:disabled){opacity:.5;cursor:not-allowed}[data-uiify-combobox] [data-part=control] [data-part=tags]{align-items:center;gap:var(--space-xs);flex-wrap:wrap;display:flex}[data-uiify-combobox] [data-part=control] [data-part=tag]{align-items:center;gap:var(--space-xs);padding-block:var(--space-xs);padding-inline:var(--space-sm);border-radius:var(--radius-sm);background-color:var(--accent);color:var(--accent-foreground);font-size:var(--text-xs);font-weight:var(--weight-medium);display:inline-flex}[data-uiify-combobox] [data-part=control] [data-part=tag-remove]{border-radius:var(--radius-sm);inline-size:1rem;color:inherit;font:inherit;cursor:pointer;background:0 0;border:0;place-items:center;padding:0;line-height:1;display:inline-grid}[data-uiify-combobox] [data-part=control] [data-part=tag-remove]:hover,[data-uiify-combobox] [data-part=control] [data-part=tag-remove]:focus-visible{background-color:var(--primary);color:var(--primary-foreground)}[data-uiify-combobox] [data-part=input]{inline-size:100%;padding-block:var(--space-sm);padding-inline:var(--space-md);border:var(--border-width) solid var(--input);border-radius:var(--radius-md);background-color:var(--card);color:var(--foreground);font-size:var(--text-sm);transition:var(--transition-colors)}[data-uiify-combobox] [data-part=input]:focus-visible{border-color:var(--primary)}[data-uiify-combobox] [data-part=control] [data-part=input]{inline-size:auto;min-inline-size:5rem;padding-block:var(--space-xs);box-shadow:none;background:0 0;border:0;border-radius:0;outline:none;flex:5rem;padding-inline:0}[data-uiify-combobox] [data-part=content]{overscroll-behavior:contain;max-block-size:min(24rem,100dvb - 2rem);min-inline-size:12rem;padding:var(--space-xs);border:var(--border-width) solid var(--border);border-radius:var(--radius-md);background-color:var(--card);color:var(--foreground);box-shadow:var(--shadow-popover);transform-origin:var(--transform-origin,top);flex-direction:column;display:flex;overflow-y:auto}[data-uiify-combobox] [data-part=content][data-state=closed]{display:none}[data-uiify-combobox] [data-part=item]{inline-size:100%;padding-block:var(--space-sm);padding-inline:var(--space-md);border-radius:var(--radius-sm);color:inherit;font:inherit;font-size:var(--text-sm);line-height:var(--leading-normal);text-align:start;cursor:pointer;-webkit-user-select:none;user-select:none;background:0 0;border:0;align-items:center;display:flex}[data-uiify-combobox] [data-part=item]:hover,[data-uiify-combobox] [data-part=item]:focus-visible,[data-uiify-combobox] [data-part=item][data-highlighted],[data-uiify-combobox] [data-part=item][aria-selected=true],[data-uiify-combobox] [data-part=item][data-selected]{background-color:var(--accent);color:var(--accent-foreground);outline:none}[data-uiify-combobox] [data-part=item][aria-disabled=true],[data-uiify-combobox] [data-part=item][data-disabled]{opacity:.5;pointer-events:none}[data-uiify-combobox] [data-part=empty]{padding:var(--space-sm) var(--space-md);color:var(--muted-foreground);font-size:var(--text-sm)}@media (prefers-reduced-motion:no-preference){[data-uiify-combobox] [data-part=content]:popover-open{animation:uiify-combobox-in var(--duration-fast) var(--ease-out)}@starting-style{[data-uiify-combobox] [data-part=content]:popover-open{opacity:0;scale:.98}}}@media (prefers-reduced-motion:reduce){[data-uiify-combobox] [data-part=content]:popover-open{transition:none;animation:none}}@keyframes uiify-combobox-in{0%{opacity:0;scale:.98}}[data-uiify-toast] [data-part=viewport],[data-uiify-toast][data-part=viewport]{gap:var(--space-sm);inline-size:min(24rem, calc(100vw - 2 * var(--space-lg)));background:0 0;border:none;flex-direction:column;margin:0;padding:0;list-style:none;display:flex;position:fixed;inset:auto;inset-block-end:var(--space-lg);inset-inline-end:var(--space-lg)}[data-uiify-toast] [data-part=item],[data-uiify-toast][data-part=viewport] [data-part=item]{gap:var(--space-xs);padding:var(--space-md) var(--space-lg);border:var(--border-width) solid var(--border);border-radius:var(--radius-md);background-color:var(--popover);color:var(--popover-foreground);box-shadow:var(--shadow-popover);flex-direction:column;min-inline-size:0;margin:0;display:flex}@media (prefers-reduced-motion:no-preference){[data-uiify-toast] [data-part=item][data-state=open],[data-uiify-toast][data-part=viewport] [data-part=item][data-state=open]{animation:uiify-toast-in var(--duration-base) var(--ease-out)}}@keyframes uiify-toast-in{0%{opacity:0;translate:0 .75rem}}[data-uiify-spinner]{block-size:2.125rem;inline-size:2.125rem;color:var(--primary);display:inline-block;position:relative}[data-uiify-spinner]:before{content:"";background:conic-gradient(from calc(-90deg + var(--uiify-spinner-tail)), currentcolor 0 var(--uiify-spinner-length), transparent 0);border-radius:50%;animation:2s linear infinite uiify-spinner-rotate,1.5s ease-in-out infinite uiify-spinner-orbit;display:block;position:absolute;inset:0;mask:radial-gradient(farthest-side,#0000 calc(100% - 4px),#000 calc(100% - 3px))}[data-uiify-spinner][data-state=delayed]:before{animation:none}[data-uiify-spinner][data-size=small]{block-size:1.25rem;inline-size:1.25rem}[data-uiify-spinner][data-size=small]:before{mask:radial-gradient(farthest-side,#0000 calc(100% - 3px),#000 calc(100% - 1px))}[data-uiify-spinner][data-size=default]{block-size:2.125rem;inline-size:2.125rem}[data-uiify-spinner][data-size=large]{block-size:6.25rem;inline-size:6.25rem}[data-uiify-spinner][data-size=large]:before{mask:radial-gradient(farthest-side,#0000 calc(100% - 4px),#000 calc(100% - 3px))}[data-uiify-spinner][data-align=center]{margin-inline:auto}[data-uiify-spinner][data-align=fixed],[data-uiify-spinner][data-align=absolute]{inset-block-start:50%;inset-inline-start:50%;translate:-50% -50%}[data-uiify-spinner][data-align=fixed]{position:fixed}[data-uiify-spinner][data-align=absolute]{position:absolute}@keyframes uiify-spinner-rotate{to{transform:rotate(360deg)}}@keyframes uiify-spinner-orbit{0%{--uiify-spinner-tail:0deg;--uiify-spinner-length:36deg}50%{--uiify-spinner-tail:90deg;--uiify-spinner-length:324deg}to{--uiify-spinner-tail:360deg;--uiify-spinner-length:36deg}}@media (prefers-reduced-motion:reduce){[data-uiify-spinner]:before{animation:2.5s ease-in-out infinite uiify-spinner-orbit}}[data-state=loading][data-shape=rect],[data-state=loading][data-shape=circle]{inline-size:var(--skeleton-w,100%);block-size:var(--skeleton-h,1rem);background:linear-gradient(90deg, var(--muted) 0%, var(--secondary) 50%, var(--muted) 100%);border-radius:var(--radius-sm);background-size:200% 100%;animation:1.5s ease-in-out infinite uiify-skeleton-shimmer}[data-state=loading][data-shape=circle]{border-radius:50%}@keyframes uiify-skeleton-shimmer{0%{background-position:200% 0}to{background-position:-200% 0}}@media (prefers-reduced-motion:reduce){[data-state=loading]{opacity:.7;animation:none}}:where([data-uiify-collapsible],[data-uiify-collapsible]){border:var(--border-width) solid var(--border);border-radius:var(--radius-md);overflow:hidden}[data-uiify-collapsible] [data-part=trigger]{justify-content:space-between;align-items:center;gap:var(--space-md);padding:var(--space-lg);font-size:var(--text-sm);font-weight:var(--weight-medium);cursor:pointer;list-style:none;display:flex}[data-uiify-collapsible] [data-part=trigger]::-webkit-details-marker{display:none}[data-uiify-collapsible] [data-part=trigger]:hover{background-color:var(--secondary)}[data-uiify-collapsible] [data-part=trigger]:focus-visible{box-shadow:inset 0 0 0 var(--ring-width) color-mix(in oklch, var(--ring) 16%, transparent);outline:none}[data-uiify-collapsible] [data-part=trigger]:after{content:"";border-inline-end:2px solid var(--muted-foreground);border-block-end:2px solid var(--muted-foreground);block-size:.5rem;inline-size:.5rem;transition:rotate var(--duration-fast) var(--ease-out);rotate:45deg}[data-uiify-collapsible][open] [data-part=trigger]:after{rotate:225deg}[data-uiify-collapsible][open] [data-part=trigger]{color:var(--primary)}[data-uiify-collapsible] [data-part=panel]{padding-block:0 var(--space-lg);padding-inline:var(--space-lg);color:var(--muted-foreground);font-size:var(--text-sm)}@supports (interpolate-size:allow-keywords){:root{interpolate-size:allow-keywords}:where([data-uiify-collapsible],[data-uiify-collapsible])::details-content{block-size:0;transition:block-size var(--duration-base) ease, content-visibility var(--duration-base) allow-discrete;overflow:clip}:where([data-uiify-collapsible],[data-uiify-collapsible])[open]::details-content{block-size:auto}}nav[aria-label=Breadcrumb] ol{flex-wrap:wrap;align-items:center;gap:.25rem;margin:0;padding:0;list-style:none;display:flex}nav[aria-label=Breadcrumb] li{align-items:center;gap:.25rem;display:flex}nav[aria-label=Breadcrumb] a{color:var(--primary);text-decoration:none}nav[aria-label=Breadcrumb] a:hover{text-decoration:underline}nav[aria-label=Breadcrumb] [aria-hidden=true]{color:var(--muted-foreground)}nav[aria-label=Breadcrumb] [data-current]{color:var(--foreground);font-weight:600}nav[aria-label=Pagination] ol,[data-uiify-pagination] ol{flex-wrap:wrap;gap:.25rem;margin:0;padding:0;list-style:none;display:flex}[data-uiify-pagination] a,[data-uiify-pagination] span{border:1px solid var(--border);border-radius:var(--radius-md);background:var(--card);block-size:2rem;min-inline-size:2rem;color:var(--foreground);justify-content:center;align-items:center;padding:0 .5rem;text-decoration:none;display:inline-flex}[data-uiify-pagination] a{cursor:pointer}nav[aria-label=Pagination] button,nav[aria-label=Pagination] a,nav[aria-label=Pagination] span{border:1px solid var(--border);border-radius:var(--radius-md);background:var(--card);cursor:pointer;block-size:2rem;min-inline-size:2rem;padding:0 .5rem}[data-uiify-pagination] a[data-selected],nav[aria-label=Pagination] button[data-selected]{background:var(--primary);color:var(--primary-foreground);border-color:#0000}nav[aria-label=Pagination] button:disabled,[data-uiify-pagination] span[aria-disabled=true]{opacity:.5;cursor:not-allowed}table[role=grid],table{border-collapse:collapse;inline-size:100%}table th,table td{text-align:start;border-block-end:1px solid var(--border);padding:.5rem .75rem}table thead th{background:var(--card);font-weight:600;position:sticky;inset-block-start:0}table tbody tr:nth-child(2n){background:var(--secondary)}table tbody tr[data-selected]{background:var(--accent)}table th[aria-sort]:not([aria-sort=none]){cursor:pointer}table th[aria-sort=ascending]:after{content:" ↑"}table th[aria-sort=descending]:after{content:" ↓"}[data-uiify-carousel]{align-items:center;gap:var(--space-sm);grid-template-columns:auto 1fr auto;inline-size:100%;max-inline-size:24rem;display:grid;position:relative}[data-uiify-carousel]>[data-part=viewport],[data-uiify-carousel]>[data-part=status],[data-uiify-carousel]>button[data-part=controls][data-carousel-action=rotation]{grid-column:1/-1}[data-uiify-carousel][data-enhanced]:has(>button[data-part=controls])>[data-part=viewport]{scrollbar-width:none}[data-uiify-carousel]>[data-part=viewport]>[data-part=slide]>[data-part=slide-content]{aspect-ratio:1;border:var(--border-width) solid var(--border);border-radius:var(--radius-md);background-color:var(--card);color:var(--foreground);font-size:2.25rem;font-weight:var(--weight-semibold);box-shadow:var(--shadow-popover);justify-content:center;align-items:center;line-height:1;display:flex}[data-uiify-carousel]>button[data-part=controls]{border:var(--border-width) solid var(--border);border-radius:var(--radius-full);background-color:var(--card);color:var(--foreground);cursor:pointer;transition:var(--transition-colors)}[data-uiify-carousel]>button[data-part=controls][data-carousel-action=rotation]{padding-inline:var(--space-md);padding-block:var(--space-sm);justify-self:start;margin-block-end:var(--space-sm)}[data-uiify-carousel]>button[data-part=controls][data-carousel-action=previous],[data-uiify-carousel]>button[data-part=controls][data-carousel-action=next]{justify-content:center;align-items:center;min-block-size:2.75rem;min-inline-size:2.75rem;font-size:1.25rem;line-height:1;display:inline-flex}[data-uiify-carousel]>button[data-part=controls]:hover{background-color:var(--secondary)}[data-uiify-carousel]>button[data-part=controls]:disabled{cursor:not-allowed;opacity:.4}[data-uiify-carousel]>button[data-part=controls]:focus-visible,[data-uiify-carousel]>[data-part=dots]>a:focus-visible{box-shadow:0 0 0 var(--ring-width) color-mix(in oklch, var(--ring) 16%, transparent);outline:none}[data-uiify-carousel]>[data-part=dots]{justify-content:center;justify-self:stretch;gap:var(--space-xs);grid-column:2;display:flex}[data-uiify-carousel]>[data-part=dots]>a{border-radius:var(--radius-full);background-color:var(--input);block-size:2.75rem;inline-size:2.75rem;color:var(--foreground);transition:var(--transition-colors);place-items:center;text-decoration:none;display:inline-grid}[data-uiify-carousel]>[data-part=dots]>a[aria-current=true]{background-color:var(--primary);color:var(--primary-foreground)}[data-uiify-candle-chart]{--candle-grid:color-mix(in srgb, currentcolor 10%, transparent);--candle-down:oklch(64% .21 24);--candle-flat:color-mix(in srgb, currentcolor 60%, transparent);--candle-up:oklch(67% .14 166);--candle-axis:var(--muted-foreground);overscroll-behavior:none;isolation:isolate;color-scheme:light dark;color:light-dark(oklch(28% .04 165),oklch(82% .04 165));background:0 0;min-block-size:21rem;inline-size:100%;padding:1rem .75rem .5rem;display:block;position:relative;overflow:clip}[data-uiify-candle-chart][data-interactive]{touch-action:none}[data-uiify-candle-chart][data-interactive] [data-part=scroll-viewport]{overscroll-behavior-inline:none}[data-uiify-candle-chart]>[data-part=plot]{grid-template-columns:minmax(0,1fr) 4.5rem;grid-template-rows:minmax(18rem, 1fr) calc(1.5rem + var(--candle-scrollbar-size,0px));overscroll-behavior:none;gap:0 .75rem;min-block-size:18rem;min-inline-size:0;display:grid;position:relative}[data-uiify-candle-chart] [data-part=scroll-viewport]{direction:rtl;grid-area:1/1/span 2;min-block-size:18rem;min-inline-size:0;overflow:auto hidden;container-type:inline-size}[data-uiify-candle-chart] [data-part=canvas]{inline-size:calc(100% * var(--candle-scale));direction:ltr;grid-template-rows:minmax(18rem,1fr) 1.5rem;min-block-size:100%;min-inline-size:100%;display:grid}[data-uiify-candle-chart] [data-part=candles]{inline-size:100%;margin:0;padding:1rem .5rem;list-style:none;position:absolute;inset-block:0;inset-inline:auto 0}[data-uiify-candle-chart] [data-part=viewport]>[data-uiify-virtual-scroll]{position:absolute;inset:0}[data-uiify-candle-chart] [data-uiify-virtual-scroll] [data-part=candle]{block-size:calc(var(--candle-plot-height,18rem) - 2rem);inset-block:1rem auto}[data-uiify-candle-chart] [data-part=candles],[data-uiify-candle-chart] [data-part=viewport]:has(>[data-uiify-virtual-scroll]){background-image:linear-gradient(to right, var(--candle-grid) 1px, transparent 1px), linear-gradient(to bottom, var(--candle-grid) 1px, transparent 1px);background-size:10% 100%,100% 25%}[data-uiify-candle-chart] [data-part=viewport]{overscroll-behavior:none;grid-area:1/1;min-block-size:18rem;min-inline-size:0;position:relative;overflow:clip}[data-uiify-candle-chart] [data-part=time-viewport]{overscroll-behavior:none;grid-area:2/1;min-inline-size:0;position:relative;overflow:clip}[data-uiify-candle-chart]>figcaption{z-index:1;color:var(--muted-foreground);letter-spacing:.04em;text-transform:uppercase;font-size:.75rem;font-weight:650;position:absolute;inset-block-start:.75rem;inset-inline-start:1rem}[data-uiify-candle-chart] [data-part=readout]{z-index:1;color:var(--candle-axis);font-variant-numeric:tabular-nums;white-space:nowrap;flex-wrap:wrap;align-items:baseline;gap:.35rem .65rem;font-size:.7rem;line-height:1;display:flex;position:absolute;inset-block-start:.75rem;inset-inline-end:1rem}[data-uiify-candle-chart] [data-part=readout-time]{font-weight:650}[data-uiify-candle-chart] [data-part=candle]{pointer-events:none;inline-size:var(--candle-slot);color:var(--candle-flat);list-style:none;display:block;position:absolute;inset:1rem .5rem;inset-inline-start:var(--candle-x)}[data-uiify-candle-chart][data-interactive] [data-part=candle]{pointer-events:auto}[data-uiify-candle-chart] [data-part=candle-hit]{z-index:1;appearance:none;color:#0000;cursor:crosshair;block-size:100%;inline-size:100%;font:inherit;background:0 0;border:0;margin:0;padding:0;position:absolute;inset:0}[data-uiify-candle-chart] [data-part=candle]:before,[data-uiify-candle-chart] [data-part=candle]:after{content:"";background:currentColor;display:block;position:absolute}[data-uiify-candle-chart] [data-part=candle]:before{inline-size:max(1px,.08em);block-size:var(--candle-wick-height);inset-block-start:var(--candle-wick-top);inset-inline-start:50%;transform:translate(-50%)}[data-uiify-candle-chart] [data-part=candle]:after{block-size:var(--candle-body-height);min-block-size:1px;inset-block-start:var(--candle-body-top);inset-inline:17%}[data-uiify-candle-chart] [data-part=candle][data-direction=up]{color:var(--candle-up)}[data-uiify-candle-chart] [data-part=candle][data-direction=down]{color:var(--candle-down)}[data-uiify-candle-chart] [data-part=crosshair]{z-index:3;inline-size:var(--candle-content-size,100%);translate:calc(-1 * var(--candle-scroll-x,0px)) 0;color:light-dark(oklch(52% .01 0),oklch(72% .01 0));pointer-events:none;block-size:100%;position:absolute;inset:0}[data-uiify-candle-chart] [data-part=crosshair]:before,[data-uiify-candle-chart] [data-part=crosshair]:after{content:"";background:currentColor;display:block;position:absolute}[data-uiify-candle-chart] [data-part=crosshair]:before{background-color:#0000;background-image:repeating-linear-gradient(currentColor 0 .4rem,#0000 .4rem .8rem);inline-size:1px;inset-block:0;inset-inline-start:var(--candle-crosshair-x)}[data-uiify-candle-chart] [data-part=crosshair]:after{background-color:#0000;background-image:repeating-linear-gradient(90deg,currentColor 0 .4rem,#0000 .4rem .8rem);block-size:1px;inset-block-start:calc(var(--candle-cursor-y,50%) + 1rem);inset-inline:0}[data-uiify-candle-chart] [data-part=crosshair-marker]{font-size:1rem;line-height:1;position:absolute;inset-block-start:calc(var(--candle-cursor-y,50%) + 1rem);inset-inline-start:var(--candle-crosshair-x);transform:translate(-50%,-50%)}[data-uiify-candle-chart] [data-part=time-axis]>[data-part=crosshair-time]{background:var(--candle-axis);color:canvas;padding:.3rem .5rem;font-weight:650;inset-block-start:0;inset-inline-start:var(--candle-crosshair-x);transform:translate(-50%)}[data-uiify-candle-chart] [data-part=price-axis]>[data-part=crosshair-price]{background:var(--candle-axis);color:canvas;padding:.3rem .5rem;font-weight:650;inset-block-start:calc(var(--candle-cursor-y,50%) + 1rem);inset-inline-end:0;transform:translateY(-50%)}[data-uiify-candle-chart][data-interactive] [data-part=candle-hit]:focus-visible{outline-offset:-2px;outline:2px solid}[data-uiify-candle-chart] [data-part=price-axis],[data-uiify-candle-chart] [data-part=time-axis]{margin:0;padding:0;list-style:none}[data-uiify-candle-chart] [data-part=price-axis]{grid-area:1/2;min-inline-size:0;position:relative}[data-uiify-candle-chart] [data-part=price-axis]>li{color:var(--candle-axis);font-variant-numeric:tabular-nums;text-align:end;text-overflow:ellipsis;white-space:nowrap;font-size:.65rem;line-height:1;position:absolute;inset-block-start:var(--candle-axis-y);inset-inline:0;overflow:hidden;transform:translateY(-50%)}[data-uiify-candle-chart] [data-part=price-axis]>li:first-child{transform:none}[data-uiify-candle-chart] [data-part=price-axis]>li:last-child{transform:translateY(-100%)}[data-uiify-candle-chart] [data-part=time-axis]{inline-size:var(--candle-content-size,100%);translate:calc(-1 * var(--candle-scroll-x,0px)) 0;min-inline-size:0;position:relative;inset-block:0}[data-uiify-candle-chart] [data-part=time-axis]>li{color:var(--candle-axis);white-space:nowrap;font-size:.7rem;position:absolute;inset-block-start:.35rem;inset-inline-start:var(--candle-axis-x);transform:translate(-50%)}[data-uiify-candle-chart] [data-part=time-axis]>li:first-child{transform:none}[data-uiify-candle-chart] [data-part=time-axis]>li:last-child{transform:translate(-100%)}[data-uiify-candle-chart] [data-part=time-axis]>li:only-child,[data-uiify-candle-chart] [data-part=time-axis]>li[data-part=crosshair-time]{transform:translate(-50%)}[data-uiify-candle-chart] [data-part=price-axis]>li[data-part=crosshair-price]{transform:translateY(-50%)}[data-uiify-candle-chart]>table{clip-path:inset(50%);white-space:nowrap;block-size:1px;inline-size:1px;position:absolute;overflow:hidden}[data-uiify-line-chart]{--line-grid:color-mix(in srgb, currentcolor 10%, transparent);--line-up:oklch(67% .14 166);--line-down:oklch(64% .21 24);--line-flat:light-dark(oklch(43% .05 165),oklch(72% .04 165));--line-axis:light-dark(color-mix(in oklch, var(--muted-foreground) 70%, var(--foreground)),var(--muted-foreground));--line-width:.12rem;overscroll-behavior:none;isolation:isolate;color:light-dark(oklch(28% .04 165),oklch(82% .04 165));background:0 0;min-block-size:21rem;inline-size:100%;padding:1rem .75rem .5rem;display:block;position:relative;overflow:clip}[data-uiify-line-chart][data-interactive]{touch-action:none}[data-uiify-line-chart][data-interactive] [data-part=scroll-viewport]{overscroll-behavior-inline:none}[data-uiify-line-chart]>[data-part=plot]{grid-template-columns:minmax(0,1fr) 4.5rem;grid-template-rows:minmax(18rem, 1fr) calc(1.5rem + var(--line-scrollbar-size,0px));overscroll-behavior:none;gap:0 .75rem;min-block-size:18rem;min-inline-size:0;display:grid;position:relative}[data-uiify-line-chart] [data-part=scroll-viewport]{direction:rtl;grid-area:1/1/span 2;min-block-size:18rem;min-inline-size:0;overflow:auto hidden;container-type:inline-size}[data-uiify-line-chart] [data-part=canvas]{inline-size:calc(100% * var(--line-scale));direction:ltr;grid-template-rows:minmax(18rem,1fr) 1.5rem;min-block-size:100%;min-inline-size:100%;display:grid}[data-uiify-line-chart] [data-part=viewport]{overscroll-behavior:none;grid-area:1/1;min-block-size:18rem;min-inline-size:0;position:relative;overflow:clip;container-type:inline-size}[data-uiify-line-chart]>figcaption{z-index:1;color:var(--line-axis);letter-spacing:.04em;text-transform:uppercase;font-size:.75rem;font-weight:650;position:absolute;inset-block-start:.75rem;inset-inline-start:1rem}[data-uiify-line-chart] [data-part=readout]{z-index:1;color:var(--line-axis);font-variant-numeric:tabular-nums;white-space:nowrap;align-items:baseline;gap:.65rem;font-size:.7rem;line-height:1;display:flex;position:absolute;inset-block-start:.75rem;inset-inline-end:1rem}[data-uiify-line-chart] [data-part=readout-time]{font-weight:650}[data-uiify-line-chart] [data-part=points]{background-image:linear-gradient(to right, var(--line-grid) 1px, transparent 1px), linear-gradient(to bottom, var(--line-grid) 1px, transparent 1px);background-size:var(--line-segment-slot) 100%, 100% 20%;margin:0;padding:0;list-style:none;display:block;position:absolute;inset:1rem 0;container-type:size}[data-uiify-line-chart] [data-part=viewport]>[data-uiify-virtual-scroll]{position:absolute;inset:0}[data-uiify-line-chart] [data-part=viewport]:has(>[data-uiify-virtual-scroll]){background-image:linear-gradient(to right, var(--line-grid) 1px, transparent 1px), linear-gradient(to bottom, var(--line-grid) 1px, transparent 1px);background-position:0 1rem;background-size:10% 100%,100% calc(20% - .4rem)}[data-uiify-line-chart] [data-part=point]{min-inline-size:0;color:var(--line-flat);list-style:none;position:absolute}[data-uiify-line-chart] [data-part=points]>[data-part=point]{inline-size:var(--line-slot);min-block-size:100%;inset-block:0;inset-inline-start:var(--line-prev-x,var(--line-x))}[data-uiify-line-chart] [data-uiify-virtual-scroll] [data-part=point]{--line-point-block-size:calc(var(--line-plot-height,18rem) - 2rem);inline-size:100%;block-size:var(--line-point-block-size);inset-block:1rem auto;inset-inline-start:-50%}[data-uiify-line-chart] [data-part=point]:before{--line-dx:calc(var(--line-run,0) * 1cqw);--line-dy:calc(var(--line-rise,0) / 100 * var(--line-point-block-size,100cqh));z-index:1;inline-size:hypot(var(--line-dx), var(--line-dy));block-size:calc(var(--line-width) * 2);border-radius:var(--line-width);content:"";transform-origin:0;rotate:atan2(var(--line-dy), var(--line-dx));background:currentColor;display:block;position:absolute;inset-block-start:calc(var(--line-prev-y) - var(--line-width));inset-inline-start:0}[data-uiify-line-chart] [data-part=point][data-first]:before{display:none}[data-uiify-line-chart] [data-part=point]:after{z-index:2;content:"";background:currentColor;border:0;border-radius:50%;block-size:.55rem;inline-size:.55rem;display:block;position:absolute;inset-block-start:var(--line-y);inset-inline-start:100%;transform:translate(-50%,-50%)}[data-uiify-line-chart] [data-part=points]>[data-part=point][data-first]:after{inset-inline-start:0}[data-uiify-line-chart] [data-part=point][data-trend=up]{color:var(--line-up)}[data-uiify-line-chart] [data-part=point][data-trend=down]{color:var(--line-down)}[data-uiify-line-chart] [data-part=point-hit]{z-index:3;appearance:none;color:#0000;cursor:crosshair;block-size:100%;inline-size:100%;font:inherit;background:0 0;border:0;margin:0;padding:0;position:absolute;inset:0}[data-uiify-line-chart][data-interactive] [data-part=point][data-point-selected]:after{box-shadow:0 0 0 .2rem color-mix(in srgb, currentcolor 24%, transparent)}[data-uiify-line-chart][data-interactive] [data-part=point-hit]:focus-visible{outline-offset:-2px;outline:2px solid}[data-uiify-line-chart] [data-part=crosshair]{z-index:4;inline-size:var(--line-content-size,100%);translate:calc(-1 * var(--line-scroll-x,0px)) 0;color:light-dark(oklch(52% .01 0),oklch(72% .01 0));pointer-events:none;block-size:100%;position:absolute;inset:0}[data-uiify-line-chart] [data-part=crosshair]:before,[data-uiify-line-chart] [data-part=crosshair]:after{content:"";background:currentColor;display:block;position:absolute}[data-uiify-line-chart] [data-part=crosshair]:before{background-color:#0000;background-image:repeating-linear-gradient(currentColor 0 .4rem,#0000 .4rem .8rem);inline-size:1px;inset-block:0;inset-inline-start:var(--line-crosshair-x)}[data-uiify-line-chart] [data-part=crosshair]:after{background-color:#0000;background-image:repeating-linear-gradient(90deg,currentColor 0 .4rem,#0000 .4rem .8rem);block-size:1px;inset-block-start:calc(var(--line-cursor-y,50%) + 1rem);inset-inline:0}[data-uiify-line-chart] [data-part=crosshair-marker]{font-size:1rem;line-height:1;position:absolute;inset-block-start:calc(var(--line-cursor-y,50%) + 1rem);inset-inline-start:var(--line-crosshair-x);transform:translate(-50%,-50%)}[data-uiify-line-chart] [data-part=value-axis],[data-uiify-line-chart] [data-part=time-axis]{margin:0;padding:0;list-style:none}[data-uiify-line-chart] [data-part=value-axis]{grid-area:1/2;min-inline-size:0;position:relative}[data-uiify-line-chart] [data-part=value-axis]>li{color:var(--line-axis);font-variant-numeric:tabular-nums;text-align:end;text-overflow:ellipsis;white-space:nowrap;font-size:.65rem;line-height:1;position:absolute;inset-block-start:var(--line-axis-y);inset-inline:0;overflow:hidden;transform:translateY(-50%)}[data-uiify-line-chart] [data-part=value-axis]>li:first-child{transform:none}[data-uiify-line-chart] [data-part=value-axis]>li:last-child{transform:translateY(-100%)}[data-uiify-line-chart] [data-part=time-viewport]{overscroll-behavior:none;grid-area:2/1;min-inline-size:0;position:relative;overflow:clip}[data-uiify-line-chart] [data-part=time-axis]{inline-size:var(--line-content-size,100%);translate:calc(-1 * var(--line-scroll-x,0px)) 0;min-inline-size:0;position:relative;inset-block:0}[data-uiify-line-chart] [data-part=time-axis]>li{color:var(--line-axis);white-space:nowrap;font-size:.7rem;position:absolute;inset-block-start:.35rem;inset-inline-start:var(--line-axis-x);transform:translate(-50%)}[data-uiify-line-chart] [data-part=time-axis]>li:first-child{transform:none}[data-uiify-line-chart] [data-part=time-axis]>li:last-child{transform:translate(-100%)}[data-uiify-line-chart] [data-part=time-axis]>li:only-child{transform:translate(-50%)}[data-uiify-line-chart] [data-part=time-axis]>li[data-part=crosshair-time]{background:var(--line-axis);color:canvas;padding:.3rem .5rem;font-weight:650;inset-inline-start:var(--line-crosshair-x);transform:translate(-50%)}[data-uiify-line-chart] [data-part=value-axis]>li[data-part=crosshair-value]{background:var(--line-axis);color:canvas;padding:.3rem .5rem;font-weight:650;inset-block-start:calc(var(--line-cursor-y,50%) + 1rem);inset-inline-end:0;transform:translateY(-50%)}[data-uiify-line-chart]>table{clip-path:inset(50%);white-space:nowrap;block-size:1px;inline-size:1px;position:absolute;overflow:hidden}@media (prefers-reduced-motion:no-preference){[data-uiify-line-chart] [data-part=point]:after{transition:scale .18s}[data-uiify-line-chart][data-interactive] [data-part=point][data-point-selected]:after{scale:1.15}}[data-uiify-drawer][data-part=content]{inline-size:100%;max-inline-size:100%;padding:var(--space-xl);border:var(--border-width) solid var(--border);background-color:var(--popover);color:var(--popover-foreground);box-shadow:var(--shadow-modal);margin:0}[data-uiify-drawer][data-part=content]::backdrop{background-color:#00000073}[data-uiify-drawer][data-part=content][data-side=bottom]{border-radius:var(--radius-md) var(--radius-md) 0 0;max-block-size:85vh;translate:0 var(--uiify-drawer-transform,0);border-block-end:none;margin-block-start:auto}[data-uiify-drawer][data-part=content][data-side=top]{border-radius:0 0 var(--radius-md) var(--radius-md);max-block-size:85vh;translate:0 var(--uiify-drawer-transform,0);border-block-start:none;margin-block-end:auto}[data-uiify-drawer][data-part=content][data-side=left]{border-radius:0 var(--radius-md) var(--radius-md) 0;block-size:100%;max-block-size:100%;max-inline-size:min(24rem,100vw);translate:var(--uiify-drawer-transform,0) 0;border-inline-start:none;margin-inline-end:auto}[data-uiify-drawer][data-part=content][data-side=right]{border-radius:var(--radius-md) 0 0 var(--radius-md);block-size:100%;max-block-size:100%;max-inline-size:min(24rem,100vw);translate:var(--uiify-drawer-transform,0) 0;border-inline-end:none;margin-inline-start:auto}@media (prefers-reduced-motion:no-preference){[data-uiify-drawer][data-part=content][open]{animation:uiify-drawer-in var(--duration-base) var(--ease-out)}[data-uiify-drawer][data-part=content][open]::backdrop{animation:uiify-fade-in var(--duration-base) var(--ease-out)}}@keyframes uiify-drawer-in{0%{opacity:0}}:where([data-uiify-segmented-control],[data-uiify-segmented-control]){padding:var(--space-xs);border:var(--border-width) solid var(--border);border-radius:var(--radius-md);background-color:var(--muted);display:inline-flex;position:relative}[data-uiify-segmented-control][data-full-width]{inline-size:100%}[data-uiify-segmented-control][data-orientation=vertical]{flex-direction:column}[data-uiify-segmented-control] [data-part=item]{position:relative}[data-uiify-segmented-control][data-full-width] [data-part=item]{flex:1 1 0}[data-uiify-segmented-control] [data-part=item]>input{clip-path:inset(50%);white-space:nowrap;block-size:1px;inline-size:1px;margin:-1px;position:absolute;overflow:hidden}[data-uiify-segmented-control] [data-part=item]>label{z-index:1;min-inline-size:4rem;padding-block:var(--space-xs);padding-inline:var(--space-md);border-radius:calc(var(--radius-md) - var(--space-xs));color:var(--muted-foreground);font-size:var(--text-sm);font-weight:var(--weight-medium);cursor:pointer;justify-content:center;align-items:center;display:inline-flex;position:relative}[data-uiify-segmented-control][data-full-width] [data-part=item]>label{inline-size:100%}[data-uiify-segmented-control] [data-part=item]>label:hover{color:var(--foreground)}[data-uiify-segmented-control] [data-part=item]:has(>input:checked)>label{color:var(--foreground);background-color:var(--card);box-shadow:var(--shadow-1)}[data-uiify-segmented-control] [data-part=item]:has(>input:disabled)>label{opacity:.5;cursor:not-allowed}[data-uiify-segmented-control] [data-part=item]>input:focus-visible+label{box-shadow:0 0 0 var(--ring-width) color-mix(in oklch, var(--ring) 16%, transparent);outline:none}[data-uiify-stepper]{gap:var(--space-md);flex-wrap:wrap;display:flex}[data-uiify-stepper][data-orientation=vertical]{flex-direction:column}[data-uiify-stepper] [data-part=step]{position:relative}[data-uiify-stepper]>[data-part=step]>[data-part=control]{clip-path:inset(50%);white-space:nowrap;block-size:1px;inline-size:1px;margin:-1px;position:absolute;overflow:hidden}[data-uiify-stepper] [data-part=step]>label{align-items:center;gap:var(--space-sm);padding-block:var(--space-sm);padding-inline:var(--space-md);border:var(--border-width) solid var(--border);border-radius:var(--radius-full);background-color:var(--card);color:var(--muted-foreground);font-size:var(--text-sm);font-weight:var(--weight-medium);cursor:pointer;display:inline-flex}[data-uiify-stepper] [data-part=step]:has(>input:checked)>label,[data-uiify-stepper] [data-part=step][data-complete]>label{border-color:var(--primary);color:var(--primary)}[data-uiify-stepper] [data-part=step]>input:focus-visible+label{box-shadow:0 0 0 var(--ring-width) color-mix(in oklch, var(--ring) 16%, transparent);outline:none}[data-uiify-stepper]>[data-part=step]>[data-part=panel]{padding:var(--space-lg);border:var(--border-width) solid var(--border);border-radius:var(--radius-lg);background-color:var(--card);color:var(--foreground);font-size:var(--text-sm);margin-block-start:var(--space-lg)}[data-uiify-rating]{gap:var(--space-xs);flex-direction:row-reverse;display:inline-flex}[data-uiify-rating]>[data-part=item]>input{clip-path:inset(50%);white-space:nowrap;block-size:1px;inline-size:1px;margin:-1px;position:absolute;overflow:hidden}[data-uiify-rating]>[data-part=item]>label{color:var(--input);cursor:pointer;transition:var(--transition-colors);justify-content:center;align-items:center;font-size:1.5rem;line-height:1;display:inline-flex}[data-uiify-rating]>[data-part=item]:has(>input:checked)>label,[data-uiify-rating]>[data-part=item]:has(>input:checked)~[data-part=item]>label,[data-uiify-rating]:not([data-disabled],[data-readonly])>[data-part=item]:has(>label:hover)>label,[data-uiify-rating]:not([data-disabled],[data-readonly])>[data-part=item]:has(>label:hover)~[data-part=item]>label{color:var(--primary)}[data-uiify-rating]>[data-part=item]>input:focus-visible~label{box-shadow:0 0 0 var(--ring-width) color-mix(in oklch, var(--ring) 16%, transparent);border-radius:var(--radius-sm);outline:none}[data-uiify-rating][data-readonly]>[data-part=item]>label{cursor:default}[data-uiify-rating][data-disabled]>[data-part=item]>label{cursor:default;opacity:.5}[data-uiify-otp-input]{gap:var(--space-sm);display:inline-flex;position:relative}[data-uiify-otp-input] [data-part=slot]{border:var(--border-width) solid var(--input);border-radius:var(--radius-md);background-color:var(--card);block-size:2.5rem;inline-size:2.5rem;color:var(--foreground);font-size:var(--text-lg);font-weight:var(--weight-medium);transition:var(--transition-colors);justify-content:center;align-items:center;display:inline-flex}[data-uiify-otp-input] [data-part=slot][data-active]{border-color:var(--primary);outline:2px solid color-mix(in oklch, var(--ring) 35%, transparent);outline-offset:0}[data-uiify-otp-input] [data-part=slot][data-filled]{border-color:var(--input)}[data-uiify-otp-input][data-disabled] [data-part=slot]{opacity:.5;cursor:not-allowed}[data-uiify-tags-input]{align-items:center;gap:var(--space-xs);min-block-size:2.5rem;inline-size:100%;max-inline-size:24rem;padding-block:var(--space-sm);padding-inline:var(--space-md);border:var(--border-width) solid var(--input);border-radius:var(--radius-md);background-color:var(--card);color:var(--foreground);flex-wrap:wrap;display:flex}[data-uiify-tags-input][data-disabled]{opacity:.5;cursor:not-allowed}[data-uiify-tags-input]:focus-within{border-color:var(--primary)}[data-uiify-tags-input] [data-part=list]{align-items:center;gap:var(--space-xs);flex-wrap:wrap;margin:0;padding:0;list-style:none;display:flex}[data-uiify-tags-input] [data-part=list]>li{align-items:center;gap:var(--space-xs);padding-block:var(--space-xs);padding-inline:var(--space-sm);border-radius:var(--radius-sm);background-color:var(--accent);color:var(--accent-foreground);font-size:var(--text-xs);font-weight:var(--weight-medium);display:inline-flex}[data-uiify-tags-input] [data-part=input]{min-inline-size:5rem;padding-block:var(--space-sm);padding-inline:var(--space-md);color:var(--foreground);font-size:var(--text-sm);background:0 0;border:none;outline:none;flex:1}[data-uiify-tags-input] [data-part=input]::placeholder{color:var(--muted-foreground)}[data-uiify-tags-input] [data-part=tag]{align-items:center;gap:var(--space-xs);padding-block:var(--space-xs);padding-inline:var(--space-sm);border-radius:var(--radius-sm);background-color:var(--accent);color:var(--accent-foreground);font-size:var(--text-xs);font-weight:var(--weight-medium);display:inline-flex}[data-uiify-number-field]{border:var(--border-width) solid var(--input);border-radius:var(--radius-md);background-color:var(--card);align-items:stretch;display:inline-flex;overflow:hidden}[data-uiify-number-field]>[role=spinbutton]{inline-size:4rem;padding-block:var(--space-sm);padding-inline:var(--space-md);color:var(--foreground);font-size:var(--text-sm);text-align:center;background:0 0;border:none;outline:none}[data-uiify-number-field]>[role=spinbutton]:focus-visible{box-shadow:inset 0 0 0 var(--ring-width) color-mix(in oklch, var(--ring) 16%, transparent);outline:none}[data-uiify-number-field]>button{border:none;border-inline-start:var(--border-width) solid var(--border);inline-size:2.25rem;color:var(--foreground);font-size:var(--text-lg);cursor:pointer;transition:var(--transition-colors);background-color:#0000;justify-content:center;align-items:center;padding:0;line-height:1;display:inline-flex}[data-uiify-number-field]>button:first-child{border-inline-start:none;border-inline-end:var(--border-width) solid var(--border)}[data-uiify-number-field]>button:hover{background-color:color-mix(in oklch, var(--foreground) 8%, transparent)}[data-uiify-number-field]>button[data-disabled]{opacity:.5;cursor:not-allowed}[data-uiify-file-upload]{gap:var(--space-md);inline-size:100%;max-inline-size:24rem;display:grid}[data-uiify-file-upload] [data-part=dropzone]{min-block-size:8rem;padding:var(--space-lg);border:2px dashed var(--input);border-radius:var(--radius-md);background-color:var(--secondary);color:var(--muted-foreground);font-size:var(--text-sm);text-align:center;transition:var(--transition-colors);justify-content:center;align-items:center;display:flex}[data-uiify-file-upload] [data-part=dropzone]:hover,[data-uiify-file-upload] [data-part=dropzone][data-dragging]{border-color:var(--primary);background-color:color-mix(in oklch, var(--primary) 8%, transparent);color:var(--foreground)}[data-uiify-file-upload] [data-part=dropzone][data-disabled]{opacity:.5;cursor:not-allowed}[data-uiify-file-upload] [data-part=list]{gap:var(--space-xs);margin:0;padding:0;list-style:none;display:grid}[data-uiify-file-upload] [data-part=item]{align-items:center;gap:var(--space-sm);padding:var(--space-sm) var(--space-md);border:var(--border-width) solid var(--border);border-radius:var(--radius-md);background-color:var(--card);font-size:var(--text-sm);display:flex}[data-uiify-toolbar][data-part=root]{align-items:center;gap:var(--space-xs);padding:var(--space-xs);border:var(--border-width) solid var(--border);border-radius:var(--radius-md);background-color:var(--card);display:inline-flex}[data-uiify-toolbar][data-part=root]>hr[data-part=separator][data-orientation]{inline-size:var(--border-width);block-size:auto;margin-inline:var(--space-md);background-color:var(--border);border:0;flex:none;align-self:stretch}}@layer utilities,theme;@property --uiify-spinner-tail{syntax:"<angle>";inherits:false;initial-value:0deg}@property --uiify-spinner-length{syntax:"<angle>";inherits:false;initial-value:36deg}@property --candle-body-height{syntax:"<percentage>";inherits:true;initial-value:0%}@property --candle-body-top{syntax:"<percentage>";inherits:true;initial-value:50%}@property --candle-slot{syntax:"<percentage>";inherits:true;initial-value:100%}@property --candle-wick-height{syntax:"<percentage>";inherits:true;initial-value:0%}@property --candle-wick-top{syntax:"<percentage>";inherits:true;initial-value:50%}@property --candle-x{syntax:"<percentage>";inherits:true;initial-value:0%}@property --candle-scale{syntax:"<number>";inherits:true;initial-value:1}@property --line-y{syntax:"<percentage>";inherits:true;initial-value:50%}@property --line-prev-y{syntax:"<percentage>";inherits:true;initial-value:50%}@property --line-count{syntax:"<integer>";inherits:false;initial-value:1}@property --line-scale{syntax:"<number>";inherits:true;initial-value:1}