@misael703/ui 1.51.0 → 1.52.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{chunk-4N2PCBGA.mjs → chunk-CNV2E2M5.mjs} +51 -6
- package/dist/chunk-CNV2E2M5.mjs.map +1 -0
- package/dist/{chunk-5LSPN6Q6.js → chunk-NBWCHPRN.js} +51 -6
- package/dist/chunk-NBWCHPRN.js.map +1 -0
- package/dist/components/Toggle.d.mts +7 -1
- package/dist/components/Toggle.d.ts +7 -1
- package/dist/components/Toggle.js +6 -6
- package/dist/components/Toggle.mjs +1 -1
- package/dist/index.js +6 -6
- package/dist/index.mjs +1 -1
- package/dist/styles.css +1 -1
- package/package.json +1 -1
- package/dist/chunk-4N2PCBGA.mjs.map +0 -1
- package/dist/chunk-5LSPN6Q6.js.map +0 -1
|
@@ -27,8 +27,9 @@ var Toggle = React.forwardRef(function Toggle2({ pressed, defaultPressed, onPres
|
|
|
27
27
|
);
|
|
28
28
|
});
|
|
29
29
|
var ToggleGroupContext = React.createContext(null);
|
|
30
|
+
var useIsoLayoutEffect = typeof window !== "undefined" ? React.useLayoutEffect : React.useEffect;
|
|
30
31
|
function ToggleGroup(props) {
|
|
31
|
-
const { type, size = "md", variant = "default", disabled = false, className, ariaLabel, children } = props;
|
|
32
|
+
const { type, size = "md", variant = "default", disabled = false, className, ariaLabel, children, indicator = false } = props;
|
|
32
33
|
const initial = type === "single" ? props.defaultValue ?? "" : props.defaultValue ?? [];
|
|
33
34
|
const [internal, setInternal] = React.useState(initial);
|
|
34
35
|
const isControlled = props.value !== void 0 && props.value !== null;
|
|
@@ -42,10 +43,54 @@ function ToggleGroup(props) {
|
|
|
42
43
|
props.onChange?.(next);
|
|
43
44
|
}
|
|
44
45
|
};
|
|
45
|
-
|
|
46
|
+
const wantIndicator = indicator && type === "single";
|
|
47
|
+
const groupRef = React.useRef(null);
|
|
48
|
+
const [ind, setInd] = React.useState(null);
|
|
49
|
+
useIsoLayoutEffect(() => {
|
|
50
|
+
if (!wantIndicator) return;
|
|
51
|
+
const el = groupRef.current;
|
|
52
|
+
if (!el) return;
|
|
53
|
+
const measure = () => {
|
|
54
|
+
const active = el.querySelector('[data-state="on"]');
|
|
55
|
+
if (!active) {
|
|
56
|
+
setInd((prev) => prev ? { ...prev, width: 0 } : null);
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
const g = el.getBoundingClientRect();
|
|
60
|
+
const b = active.getBoundingClientRect();
|
|
61
|
+
setInd((prev) => ({ left: b.left - g.left - el.clientLeft, width: b.width, ready: prev?.ready ?? false }));
|
|
62
|
+
};
|
|
63
|
+
measure();
|
|
64
|
+
const ro = typeof ResizeObserver !== "undefined" ? new ResizeObserver(measure) : null;
|
|
65
|
+
ro?.observe(el);
|
|
66
|
+
return () => ro?.disconnect();
|
|
67
|
+
}, [wantIndicator, current, children]);
|
|
68
|
+
React.useEffect(() => {
|
|
69
|
+
if (ind && !ind.ready) setInd((prev) => prev ? { ...prev, ready: true } : prev);
|
|
70
|
+
}, [ind]);
|
|
71
|
+
return /* @__PURE__ */ jsx(ToggleGroupContext.Provider, { value: { type, value: current, setValue, size, variant, disabled }, children: /* @__PURE__ */ jsxs(
|
|
72
|
+
"div",
|
|
73
|
+
{
|
|
74
|
+
ref: groupRef,
|
|
75
|
+
role: "group",
|
|
76
|
+
"aria-label": ariaLabel,
|
|
77
|
+
className: cx("toggle-group", wantIndicator && "toggle-group--has-indicator", className),
|
|
78
|
+
children: [
|
|
79
|
+
wantIndicator && ind && /* @__PURE__ */ jsx(
|
|
80
|
+
"span",
|
|
81
|
+
{
|
|
82
|
+
"aria-hidden": "true",
|
|
83
|
+
className: cx("toggle-group__indicator", ind.ready && "is-ready"),
|
|
84
|
+
style: { transform: `translateX(${ind.left}px)`, width: ind.width, opacity: ind.width > 0 ? 1 : 0 }
|
|
85
|
+
}
|
|
86
|
+
),
|
|
87
|
+
children
|
|
88
|
+
]
|
|
89
|
+
}
|
|
90
|
+
) });
|
|
46
91
|
}
|
|
47
|
-
function SegmentedControl({ className, ...rest }) {
|
|
48
|
-
return /* @__PURE__ */ jsx(ToggleGroup, { type: "single", className: cx("toggle-group--segmented", className), ...rest });
|
|
92
|
+
function SegmentedControl({ className, indicator = true, ...rest }) {
|
|
93
|
+
return /* @__PURE__ */ jsx(ToggleGroup, { type: "single", indicator, className: cx("toggle-group--segmented", className), ...rest });
|
|
49
94
|
}
|
|
50
95
|
var ToggleGroupItem = React.forwardRef(function ToggleGroupItem2({ value, className, children, icon, disabled: itemDisabled, ...rest }, ref) {
|
|
51
96
|
const ctx = React.useContext(ToggleGroupContext);
|
|
@@ -80,5 +125,5 @@ var ToggleGroupItem = React.forwardRef(function ToggleGroupItem2({ value, classN
|
|
|
80
125
|
var SegmentedControlItem = ToggleGroupItem;
|
|
81
126
|
|
|
82
127
|
export { SegmentedControl, SegmentedControlItem, Toggle, ToggleGroup, ToggleGroupItem };
|
|
83
|
-
//# sourceMappingURL=chunk-
|
|
84
|
-
//# sourceMappingURL=chunk-
|
|
128
|
+
//# sourceMappingURL=chunk-CNV2E2M5.mjs.map
|
|
129
|
+
//# sourceMappingURL=chunk-CNV2E2M5.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/Toggle.tsx"],"names":["Toggle","ToggleGroupItem"],"mappings":"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","file":"chunk-CNV2E2M5.mjs","sourcesContent":["'use client';\nimport * as React from 'react';\nimport { cx } from '../utils/cx';\n\nexport type ToggleSize = 'sm' | 'md' | 'lg';\nexport type ToggleVariant = 'default' | 'outline';\n\nexport interface ToggleProps extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'onChange'> {\n pressed?: boolean;\n defaultPressed?: boolean;\n onPressedChange?: (pressed: boolean) => void;\n size?: ToggleSize;\n variant?: ToggleVariant;\n}\n\nexport const Toggle = React.forwardRef<HTMLButtonElement, ToggleProps>(function Toggle(\n { pressed, defaultPressed, onPressedChange, size = 'md', variant = 'default', className, children, onClick, ...rest },\n ref\n) {\n const [internal, setInternal] = React.useState(defaultPressed ?? false);\n const isControlled = pressed !== undefined;\n const value = isControlled ? pressed : internal;\n\n return (\n <button\n ref={ref}\n type=\"button\"\n aria-pressed={value}\n data-state={value ? 'on' : 'off'}\n className={cx('toggle', `toggle--${size}`, `toggle--${variant}`, value && 'is-pressed', className)}\n onClick={(e) => {\n const next = !value;\n if (!isControlled) setInternal(next);\n onPressedChange?.(next);\n onClick?.(e);\n }}\n {...rest}\n >\n {children}\n </button>\n );\n});\n\ninterface ToggleGroupContextValue {\n type: 'single' | 'multiple';\n value: string | string[];\n setValue: (next: string | string[]) => void;\n size: ToggleSize;\n variant: ToggleVariant;\n disabled: boolean;\n}\nconst ToggleGroupContext = React.createContext<ToggleGroupContextValue | null>(null);\n\ninterface ToggleGroupBaseProps {\n size?: ToggleSize;\n variant?: ToggleVariant;\n disabled?: boolean;\n className?: string;\n ariaLabel?: string;\n children: React.ReactNode;\n /**\n * Sliding active indicator: a single pill that animates between segments\n * instead of the active item lighting up in place. Only meaningful for\n * `type=\"single\"`. On by default for `SegmentedControl`, off otherwise.\n */\n indicator?: boolean;\n}\n\nexport interface ToggleGroupSingleProps extends ToggleGroupBaseProps {\n type: 'single';\n value?: string | null;\n defaultValue?: string;\n onChange?: (value: string | null) => void;\n rovingFocus?: boolean;\n}\n\nexport interface ToggleGroupMultipleProps extends ToggleGroupBaseProps {\n type: 'multiple';\n value?: string[];\n defaultValue?: string[];\n onChange?: (value: string[]) => void;\n}\n\nexport type ToggleGroupProps = ToggleGroupSingleProps | ToggleGroupMultipleProps;\n\n// useLayoutEffect en cliente, useEffect en el server (evita el warning de SSR;\n// el kit es 'use client' pero igual se renderiza en el server de Next).\nconst useIsoLayoutEffect = typeof window !== 'undefined' ? React.useLayoutEffect : React.useEffect;\n\nexport function ToggleGroup(props: ToggleGroupProps) {\n const { type, size = 'md', variant = 'default', disabled = false, className, ariaLabel, children, indicator = false } = props;\n\n const initial: string | string[] =\n type === 'single' ? (props.defaultValue ?? '') : (props.defaultValue ?? []);\n const [internal, setInternal] = React.useState<string | string[]>(initial);\n\n const isControlled = props.value !== undefined && props.value !== null;\n const current: string | string[] = isControlled\n ? type === 'single'\n ? (props.value ?? '')\n : (props.value ?? [])\n : internal;\n\n const setValue = (next: string | string[]) => {\n if (!isControlled) setInternal(next);\n if (type === 'single') {\n const v = (next as string) || null;\n (props as ToggleGroupSingleProps).onChange?.(v);\n } else {\n (props as ToggleGroupMultipleProps).onChange?.(next as string[]);\n }\n };\n\n // Indicador deslizante (solo single): un único pill absoluto que se traslada a\n // la geometría del ítem activo, en vez de prender/apagar el fondo de cada ítem.\n const wantIndicator = indicator && type === 'single';\n const groupRef = React.useRef<HTMLDivElement>(null);\n const [ind, setInd] = React.useState<{ left: number; width: number; ready: boolean } | null>(null);\n\n useIsoLayoutEffect(() => {\n if (!wantIndicator) return;\n const el = groupRef.current;\n if (!el) return;\n const measure = () => {\n const active = el.querySelector<HTMLElement>('[data-state=\"on\"]');\n if (!active) {\n setInd((prev) => (prev ? { ...prev, width: 0 } : null)); // nada activo → pill oculto\n return;\n }\n const g = el.getBoundingClientRect();\n const b = active.getBoundingClientRect();\n // left relativo al padding-box del grupo (containing block del absolute).\n setInd((prev) => ({ left: b.left - g.left - el.clientLeft, width: b.width, ready: prev?.ready ?? false }));\n };\n measure();\n // typeof-guard: jsdom/SSR no traen ResizeObserver (mismo patrón que la\n // elevación del DataTable y useVirtualRows); measure() ya corrió una vez.\n const ro = typeof ResizeObserver !== 'undefined' ? new ResizeObserver(measure) : null;\n ro?.observe(el);\n return () => ro?.disconnect();\n }, [wantIndicator, current, children]);\n\n // La transición se habilita recién tras la primera medición → el pill aparece en\n // su lugar al montar (no desliza desde 0); a partir de ahí los cambios animan.\n React.useEffect(() => {\n if (ind && !ind.ready) setInd((prev) => (prev ? { ...prev, ready: true } : prev));\n }, [ind]);\n\n return (\n <ToggleGroupContext.Provider value={{ type, value: current, setValue, size, variant, disabled }}>\n <div\n ref={groupRef}\n role=\"group\"\n aria-label={ariaLabel}\n className={cx('toggle-group', wantIndicator && 'toggle-group--has-indicator', className)}\n >\n {wantIndicator && ind && (\n <span\n aria-hidden=\"true\"\n className={cx('toggle-group__indicator', ind.ready && 'is-ready')}\n style={{ transform: `translateX(${ind.left}px)`, width: ind.width, opacity: ind.width > 0 ? 1 : 0 }}\n />\n )}\n {children}\n </div>\n </ToggleGroupContext.Provider>\n );\n}\n\n/**\n * `SegmentedControl` — a single-select `ToggleGroup` with equal-width\n * segments. The common case (view switcher, filter mode, on/off pair) is\n * `type=\"single\"`; this drops the discriminant so you can't trip the\n * cryptic union error from forgetting `type`. Use `SegmentedControlItem`\n * (alias of `ToggleGroupItem`) for the options.\n *\n * <SegmentedControl value={view} onChange={setView} ariaLabel=\"Vista\">\n * <SegmentedControlItem value=\"list\">Lista</SegmentedControlItem>\n * <SegmentedControlItem value=\"grid\">Tarjetas</SegmentedControlItem>\n * </SegmentedControl>\n */\nexport type SegmentedControlProps = Omit<ToggleGroupSingleProps, 'type'>;\n\nexport function SegmentedControl({ className, indicator = true, ...rest }: SegmentedControlProps) {\n return (\n <ToggleGroup type=\"single\" indicator={indicator} className={cx('toggle-group--segmented', className)} {...rest} />\n );\n}\n\nexport interface ToggleGroupItemProps extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'value'> {\n value: string;\n /**\n * Optional leading icon, rendered before `children` and aligned via the\n * toggle's built-in flex gap. Convenience for view switchers / segmented\n * controls: `<SegmentedControlItem value=\"table\" icon={<Table />}>Tabla</…>`.\n * For an **icon-only** segment, pass `icon` with no children and give the\n * button an accessible name via `aria-label` (icons are decorative).\n */\n icon?: React.ReactNode;\n}\n\nexport const ToggleGroupItem = React.forwardRef<HTMLButtonElement, ToggleGroupItemProps>(function ToggleGroupItem(\n { value, className, children, icon, disabled: itemDisabled, ...rest },\n ref\n) {\n const ctx = React.useContext(ToggleGroupContext);\n if (!ctx) throw new Error('ToggleGroupItem must be used inside ToggleGroup');\n const isPressed =\n ctx.type === 'single'\n ? ctx.value === value\n : Array.isArray(ctx.value) && ctx.value.includes(value);\n\n const onClick = () => {\n if (ctx.type === 'single') {\n ctx.setValue(isPressed ? '' : value);\n } else {\n const arr = (ctx.value as string[]) ?? [];\n ctx.setValue(isPressed ? arr.filter((v) => v !== value) : [...arr, value]);\n }\n };\n\n return (\n <button\n ref={ref}\n type=\"button\"\n aria-pressed={isPressed}\n data-state={isPressed ? 'on' : 'off'}\n disabled={ctx.disabled || itemDisabled}\n className={cx('toggle', `toggle--${ctx.size}`, `toggle--${ctx.variant}`, 'toggle-group__item', isPressed && 'is-pressed', className)}\n onClick={onClick}\n {...rest}\n >\n {icon}\n {children}\n </button>\n );\n});\n\n/** Alias of `ToggleGroupItem` for use inside `SegmentedControl`. */\nexport const SegmentedControlItem = ToggleGroupItem;\n"]}
|
|
@@ -49,8 +49,9 @@ var Toggle = React__namespace.forwardRef(function Toggle2({ pressed, defaultPres
|
|
|
49
49
|
);
|
|
50
50
|
});
|
|
51
51
|
var ToggleGroupContext = React__namespace.createContext(null);
|
|
52
|
+
var useIsoLayoutEffect = typeof window !== "undefined" ? React__namespace.useLayoutEffect : React__namespace.useEffect;
|
|
52
53
|
function ToggleGroup(props) {
|
|
53
|
-
const { type, size = "md", variant = "default", disabled = false, className, ariaLabel, children } = props;
|
|
54
|
+
const { type, size = "md", variant = "default", disabled = false, className, ariaLabel, children, indicator = false } = props;
|
|
54
55
|
const initial = type === "single" ? props.defaultValue ?? "" : props.defaultValue ?? [];
|
|
55
56
|
const [internal, setInternal] = React__namespace.useState(initial);
|
|
56
57
|
const isControlled = props.value !== void 0 && props.value !== null;
|
|
@@ -64,10 +65,54 @@ function ToggleGroup(props) {
|
|
|
64
65
|
props.onChange?.(next);
|
|
65
66
|
}
|
|
66
67
|
};
|
|
67
|
-
|
|
68
|
+
const wantIndicator = indicator && type === "single";
|
|
69
|
+
const groupRef = React__namespace.useRef(null);
|
|
70
|
+
const [ind, setInd] = React__namespace.useState(null);
|
|
71
|
+
useIsoLayoutEffect(() => {
|
|
72
|
+
if (!wantIndicator) return;
|
|
73
|
+
const el = groupRef.current;
|
|
74
|
+
if (!el) return;
|
|
75
|
+
const measure = () => {
|
|
76
|
+
const active = el.querySelector('[data-state="on"]');
|
|
77
|
+
if (!active) {
|
|
78
|
+
setInd((prev) => prev ? { ...prev, width: 0 } : null);
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
const g = el.getBoundingClientRect();
|
|
82
|
+
const b = active.getBoundingClientRect();
|
|
83
|
+
setInd((prev) => ({ left: b.left - g.left - el.clientLeft, width: b.width, ready: prev?.ready ?? false }));
|
|
84
|
+
};
|
|
85
|
+
measure();
|
|
86
|
+
const ro = typeof ResizeObserver !== "undefined" ? new ResizeObserver(measure) : null;
|
|
87
|
+
ro?.observe(el);
|
|
88
|
+
return () => ro?.disconnect();
|
|
89
|
+
}, [wantIndicator, current, children]);
|
|
90
|
+
React__namespace.useEffect(() => {
|
|
91
|
+
if (ind && !ind.ready) setInd((prev) => prev ? { ...prev, ready: true } : prev);
|
|
92
|
+
}, [ind]);
|
|
93
|
+
return /* @__PURE__ */ jsxRuntime.jsx(ToggleGroupContext.Provider, { value: { type, value: current, setValue, size, variant, disabled }, children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
94
|
+
"div",
|
|
95
|
+
{
|
|
96
|
+
ref: groupRef,
|
|
97
|
+
role: "group",
|
|
98
|
+
"aria-label": ariaLabel,
|
|
99
|
+
className: chunkPASF6T4H_js.cx("toggle-group", wantIndicator && "toggle-group--has-indicator", className),
|
|
100
|
+
children: [
|
|
101
|
+
wantIndicator && ind && /* @__PURE__ */ jsxRuntime.jsx(
|
|
102
|
+
"span",
|
|
103
|
+
{
|
|
104
|
+
"aria-hidden": "true",
|
|
105
|
+
className: chunkPASF6T4H_js.cx("toggle-group__indicator", ind.ready && "is-ready"),
|
|
106
|
+
style: { transform: `translateX(${ind.left}px)`, width: ind.width, opacity: ind.width > 0 ? 1 : 0 }
|
|
107
|
+
}
|
|
108
|
+
),
|
|
109
|
+
children
|
|
110
|
+
]
|
|
111
|
+
}
|
|
112
|
+
) });
|
|
68
113
|
}
|
|
69
|
-
function SegmentedControl({ className, ...rest }) {
|
|
70
|
-
return /* @__PURE__ */ jsxRuntime.jsx(ToggleGroup, { type: "single", className: chunkPASF6T4H_js.cx("toggle-group--segmented", className), ...rest });
|
|
114
|
+
function SegmentedControl({ className, indicator = true, ...rest }) {
|
|
115
|
+
return /* @__PURE__ */ jsxRuntime.jsx(ToggleGroup, { type: "single", indicator, className: chunkPASF6T4H_js.cx("toggle-group--segmented", className), ...rest });
|
|
71
116
|
}
|
|
72
117
|
var ToggleGroupItem = React__namespace.forwardRef(function ToggleGroupItem2({ value, className, children, icon, disabled: itemDisabled, ...rest }, ref) {
|
|
73
118
|
const ctx = React__namespace.useContext(ToggleGroupContext);
|
|
@@ -106,5 +151,5 @@ exports.SegmentedControlItem = SegmentedControlItem;
|
|
|
106
151
|
exports.Toggle = Toggle;
|
|
107
152
|
exports.ToggleGroup = ToggleGroup;
|
|
108
153
|
exports.ToggleGroupItem = ToggleGroupItem;
|
|
109
|
-
//# sourceMappingURL=chunk-
|
|
110
|
-
//# sourceMappingURL=chunk-
|
|
154
|
+
//# sourceMappingURL=chunk-NBWCHPRN.js.map
|
|
155
|
+
//# sourceMappingURL=chunk-NBWCHPRN.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/Toggle.tsx"],"names":["React","Toggle","jsx","cx","jsxs","ToggleGroupItem"],"mappings":"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","file":"chunk-NBWCHPRN.js","sourcesContent":["'use client';\nimport * as React from 'react';\nimport { cx } from '../utils/cx';\n\nexport type ToggleSize = 'sm' | 'md' | 'lg';\nexport type ToggleVariant = 'default' | 'outline';\n\nexport interface ToggleProps extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'onChange'> {\n pressed?: boolean;\n defaultPressed?: boolean;\n onPressedChange?: (pressed: boolean) => void;\n size?: ToggleSize;\n variant?: ToggleVariant;\n}\n\nexport const Toggle = React.forwardRef<HTMLButtonElement, ToggleProps>(function Toggle(\n { pressed, defaultPressed, onPressedChange, size = 'md', variant = 'default', className, children, onClick, ...rest },\n ref\n) {\n const [internal, setInternal] = React.useState(defaultPressed ?? false);\n const isControlled = pressed !== undefined;\n const value = isControlled ? pressed : internal;\n\n return (\n <button\n ref={ref}\n type=\"button\"\n aria-pressed={value}\n data-state={value ? 'on' : 'off'}\n className={cx('toggle', `toggle--${size}`, `toggle--${variant}`, value && 'is-pressed', className)}\n onClick={(e) => {\n const next = !value;\n if (!isControlled) setInternal(next);\n onPressedChange?.(next);\n onClick?.(e);\n }}\n {...rest}\n >\n {children}\n </button>\n );\n});\n\ninterface ToggleGroupContextValue {\n type: 'single' | 'multiple';\n value: string | string[];\n setValue: (next: string | string[]) => void;\n size: ToggleSize;\n variant: ToggleVariant;\n disabled: boolean;\n}\nconst ToggleGroupContext = React.createContext<ToggleGroupContextValue | null>(null);\n\ninterface ToggleGroupBaseProps {\n size?: ToggleSize;\n variant?: ToggleVariant;\n disabled?: boolean;\n className?: string;\n ariaLabel?: string;\n children: React.ReactNode;\n /**\n * Sliding active indicator: a single pill that animates between segments\n * instead of the active item lighting up in place. Only meaningful for\n * `type=\"single\"`. On by default for `SegmentedControl`, off otherwise.\n */\n indicator?: boolean;\n}\n\nexport interface ToggleGroupSingleProps extends ToggleGroupBaseProps {\n type: 'single';\n value?: string | null;\n defaultValue?: string;\n onChange?: (value: string | null) => void;\n rovingFocus?: boolean;\n}\n\nexport interface ToggleGroupMultipleProps extends ToggleGroupBaseProps {\n type: 'multiple';\n value?: string[];\n defaultValue?: string[];\n onChange?: (value: string[]) => void;\n}\n\nexport type ToggleGroupProps = ToggleGroupSingleProps | ToggleGroupMultipleProps;\n\n// useLayoutEffect en cliente, useEffect en el server (evita el warning de SSR;\n// el kit es 'use client' pero igual se renderiza en el server de Next).\nconst useIsoLayoutEffect = typeof window !== 'undefined' ? React.useLayoutEffect : React.useEffect;\n\nexport function ToggleGroup(props: ToggleGroupProps) {\n const { type, size = 'md', variant = 'default', disabled = false, className, ariaLabel, children, indicator = false } = props;\n\n const initial: string | string[] =\n type === 'single' ? (props.defaultValue ?? '') : (props.defaultValue ?? []);\n const [internal, setInternal] = React.useState<string | string[]>(initial);\n\n const isControlled = props.value !== undefined && props.value !== null;\n const current: string | string[] = isControlled\n ? type === 'single'\n ? (props.value ?? '')\n : (props.value ?? [])\n : internal;\n\n const setValue = (next: string | string[]) => {\n if (!isControlled) setInternal(next);\n if (type === 'single') {\n const v = (next as string) || null;\n (props as ToggleGroupSingleProps).onChange?.(v);\n } else {\n (props as ToggleGroupMultipleProps).onChange?.(next as string[]);\n }\n };\n\n // Indicador deslizante (solo single): un único pill absoluto que se traslada a\n // la geometría del ítem activo, en vez de prender/apagar el fondo de cada ítem.\n const wantIndicator = indicator && type === 'single';\n const groupRef = React.useRef<HTMLDivElement>(null);\n const [ind, setInd] = React.useState<{ left: number; width: number; ready: boolean } | null>(null);\n\n useIsoLayoutEffect(() => {\n if (!wantIndicator) return;\n const el = groupRef.current;\n if (!el) return;\n const measure = () => {\n const active = el.querySelector<HTMLElement>('[data-state=\"on\"]');\n if (!active) {\n setInd((prev) => (prev ? { ...prev, width: 0 } : null)); // nada activo → pill oculto\n return;\n }\n const g = el.getBoundingClientRect();\n const b = active.getBoundingClientRect();\n // left relativo al padding-box del grupo (containing block del absolute).\n setInd((prev) => ({ left: b.left - g.left - el.clientLeft, width: b.width, ready: prev?.ready ?? false }));\n };\n measure();\n // typeof-guard: jsdom/SSR no traen ResizeObserver (mismo patrón que la\n // elevación del DataTable y useVirtualRows); measure() ya corrió una vez.\n const ro = typeof ResizeObserver !== 'undefined' ? new ResizeObserver(measure) : null;\n ro?.observe(el);\n return () => ro?.disconnect();\n }, [wantIndicator, current, children]);\n\n // La transición se habilita recién tras la primera medición → el pill aparece en\n // su lugar al montar (no desliza desde 0); a partir de ahí los cambios animan.\n React.useEffect(() => {\n if (ind && !ind.ready) setInd((prev) => (prev ? { ...prev, ready: true } : prev));\n }, [ind]);\n\n return (\n <ToggleGroupContext.Provider value={{ type, value: current, setValue, size, variant, disabled }}>\n <div\n ref={groupRef}\n role=\"group\"\n aria-label={ariaLabel}\n className={cx('toggle-group', wantIndicator && 'toggle-group--has-indicator', className)}\n >\n {wantIndicator && ind && (\n <span\n aria-hidden=\"true\"\n className={cx('toggle-group__indicator', ind.ready && 'is-ready')}\n style={{ transform: `translateX(${ind.left}px)`, width: ind.width, opacity: ind.width > 0 ? 1 : 0 }}\n />\n )}\n {children}\n </div>\n </ToggleGroupContext.Provider>\n );\n}\n\n/**\n * `SegmentedControl` — a single-select `ToggleGroup` with equal-width\n * segments. The common case (view switcher, filter mode, on/off pair) is\n * `type=\"single\"`; this drops the discriminant so you can't trip the\n * cryptic union error from forgetting `type`. Use `SegmentedControlItem`\n * (alias of `ToggleGroupItem`) for the options.\n *\n * <SegmentedControl value={view} onChange={setView} ariaLabel=\"Vista\">\n * <SegmentedControlItem value=\"list\">Lista</SegmentedControlItem>\n * <SegmentedControlItem value=\"grid\">Tarjetas</SegmentedControlItem>\n * </SegmentedControl>\n */\nexport type SegmentedControlProps = Omit<ToggleGroupSingleProps, 'type'>;\n\nexport function SegmentedControl({ className, indicator = true, ...rest }: SegmentedControlProps) {\n return (\n <ToggleGroup type=\"single\" indicator={indicator} className={cx('toggle-group--segmented', className)} {...rest} />\n );\n}\n\nexport interface ToggleGroupItemProps extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'value'> {\n value: string;\n /**\n * Optional leading icon, rendered before `children` and aligned via the\n * toggle's built-in flex gap. Convenience for view switchers / segmented\n * controls: `<SegmentedControlItem value=\"table\" icon={<Table />}>Tabla</…>`.\n * For an **icon-only** segment, pass `icon` with no children and give the\n * button an accessible name via `aria-label` (icons are decorative).\n */\n icon?: React.ReactNode;\n}\n\nexport const ToggleGroupItem = React.forwardRef<HTMLButtonElement, ToggleGroupItemProps>(function ToggleGroupItem(\n { value, className, children, icon, disabled: itemDisabled, ...rest },\n ref\n) {\n const ctx = React.useContext(ToggleGroupContext);\n if (!ctx) throw new Error('ToggleGroupItem must be used inside ToggleGroup');\n const isPressed =\n ctx.type === 'single'\n ? ctx.value === value\n : Array.isArray(ctx.value) && ctx.value.includes(value);\n\n const onClick = () => {\n if (ctx.type === 'single') {\n ctx.setValue(isPressed ? '' : value);\n } else {\n const arr = (ctx.value as string[]) ?? [];\n ctx.setValue(isPressed ? arr.filter((v) => v !== value) : [...arr, value]);\n }\n };\n\n return (\n <button\n ref={ref}\n type=\"button\"\n aria-pressed={isPressed}\n data-state={isPressed ? 'on' : 'off'}\n disabled={ctx.disabled || itemDisabled}\n className={cx('toggle', `toggle--${ctx.size}`, `toggle--${ctx.variant}`, 'toggle-group__item', isPressed && 'is-pressed', className)}\n onClick={onClick}\n {...rest}\n >\n {icon}\n {children}\n </button>\n );\n});\n\n/** Alias of `ToggleGroupItem` for use inside `SegmentedControl`. */\nexport const SegmentedControlItem = ToggleGroupItem;\n"]}
|
|
@@ -18,6 +18,12 @@ interface ToggleGroupBaseProps {
|
|
|
18
18
|
className?: string;
|
|
19
19
|
ariaLabel?: string;
|
|
20
20
|
children: React.ReactNode;
|
|
21
|
+
/**
|
|
22
|
+
* Sliding active indicator: a single pill that animates between segments
|
|
23
|
+
* instead of the active item lighting up in place. Only meaningful for
|
|
24
|
+
* `type="single"`. On by default for `SegmentedControl`, off otherwise.
|
|
25
|
+
*/
|
|
26
|
+
indicator?: boolean;
|
|
21
27
|
}
|
|
22
28
|
interface ToggleGroupSingleProps extends ToggleGroupBaseProps {
|
|
23
29
|
type: 'single';
|
|
@@ -47,7 +53,7 @@ declare function ToggleGroup(props: ToggleGroupProps): react_jsx_runtime.JSX.Ele
|
|
|
47
53
|
* </SegmentedControl>
|
|
48
54
|
*/
|
|
49
55
|
type SegmentedControlProps = Omit<ToggleGroupSingleProps, 'type'>;
|
|
50
|
-
declare function SegmentedControl({ className, ...rest }: SegmentedControlProps): react_jsx_runtime.JSX.Element;
|
|
56
|
+
declare function SegmentedControl({ className, indicator, ...rest }: SegmentedControlProps): react_jsx_runtime.JSX.Element;
|
|
51
57
|
interface ToggleGroupItemProps extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'value'> {
|
|
52
58
|
value: string;
|
|
53
59
|
/**
|
|
@@ -18,6 +18,12 @@ interface ToggleGroupBaseProps {
|
|
|
18
18
|
className?: string;
|
|
19
19
|
ariaLabel?: string;
|
|
20
20
|
children: React.ReactNode;
|
|
21
|
+
/**
|
|
22
|
+
* Sliding active indicator: a single pill that animates between segments
|
|
23
|
+
* instead of the active item lighting up in place. Only meaningful for
|
|
24
|
+
* `type="single"`. On by default for `SegmentedControl`, off otherwise.
|
|
25
|
+
*/
|
|
26
|
+
indicator?: boolean;
|
|
21
27
|
}
|
|
22
28
|
interface ToggleGroupSingleProps extends ToggleGroupBaseProps {
|
|
23
29
|
type: 'single';
|
|
@@ -47,7 +53,7 @@ declare function ToggleGroup(props: ToggleGroupProps): react_jsx_runtime.JSX.Ele
|
|
|
47
53
|
* </SegmentedControl>
|
|
48
54
|
*/
|
|
49
55
|
type SegmentedControlProps = Omit<ToggleGroupSingleProps, 'type'>;
|
|
50
|
-
declare function SegmentedControl({ className, ...rest }: SegmentedControlProps): react_jsx_runtime.JSX.Element;
|
|
56
|
+
declare function SegmentedControl({ className, indicator, ...rest }: SegmentedControlProps): react_jsx_runtime.JSX.Element;
|
|
51
57
|
interface ToggleGroupItemProps extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'value'> {
|
|
52
58
|
value: string;
|
|
53
59
|
/**
|
|
@@ -1,30 +1,30 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
|
-
var
|
|
4
|
+
var chunkNBWCHPRN_js = require('../chunk-NBWCHPRN.js');
|
|
5
5
|
require('../chunk-PASF6T4H.js');
|
|
6
6
|
|
|
7
7
|
|
|
8
8
|
|
|
9
9
|
Object.defineProperty(exports, "SegmentedControl", {
|
|
10
10
|
enumerable: true,
|
|
11
|
-
get: function () { return
|
|
11
|
+
get: function () { return chunkNBWCHPRN_js.SegmentedControl; }
|
|
12
12
|
});
|
|
13
13
|
Object.defineProperty(exports, "SegmentedControlItem", {
|
|
14
14
|
enumerable: true,
|
|
15
|
-
get: function () { return
|
|
15
|
+
get: function () { return chunkNBWCHPRN_js.SegmentedControlItem; }
|
|
16
16
|
});
|
|
17
17
|
Object.defineProperty(exports, "Toggle", {
|
|
18
18
|
enumerable: true,
|
|
19
|
-
get: function () { return
|
|
19
|
+
get: function () { return chunkNBWCHPRN_js.Toggle; }
|
|
20
20
|
});
|
|
21
21
|
Object.defineProperty(exports, "ToggleGroup", {
|
|
22
22
|
enumerable: true,
|
|
23
|
-
get: function () { return
|
|
23
|
+
get: function () { return chunkNBWCHPRN_js.ToggleGroup; }
|
|
24
24
|
});
|
|
25
25
|
Object.defineProperty(exports, "ToggleGroupItem", {
|
|
26
26
|
enumerable: true,
|
|
27
|
-
get: function () { return
|
|
27
|
+
get: function () { return chunkNBWCHPRN_js.ToggleGroupItem; }
|
|
28
28
|
});
|
|
29
29
|
//# sourceMappingURL=Toggle.js.map
|
|
30
30
|
//# sourceMappingURL=Toggle.js.map
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
'use client';
|
|
2
|
-
export { SegmentedControl, SegmentedControlItem, Toggle, ToggleGroup, ToggleGroupItem } from '../chunk-
|
|
2
|
+
export { SegmentedControl, SegmentedControlItem, Toggle, ToggleGroup, ToggleGroupItem } from '../chunk-CNV2E2M5.mjs';
|
|
3
3
|
import '../chunk-IEPCH3JB.mjs';
|
|
4
4
|
//# sourceMappingURL=Toggle.mjs.map
|
|
5
5
|
//# sourceMappingURL=Toggle.mjs.map
|
package/dist/index.js
CHANGED
|
@@ -5,7 +5,7 @@ require('./chunk-4REALDR3.js');
|
|
|
5
5
|
var chunkCTOPKHEE_js = require('./chunk-CTOPKHEE.js');
|
|
6
6
|
require('./chunk-2LTV7VB5.js');
|
|
7
7
|
var chunkL5R6FKHH_js = require('./chunk-L5R6FKHH.js');
|
|
8
|
-
var
|
|
8
|
+
var chunkNBWCHPRN_js = require('./chunk-NBWCHPRN.js');
|
|
9
9
|
var chunkEI2V2GGG_js = require('./chunk-EI2V2GGG.js');
|
|
10
10
|
var chunkMR2KQSBB_js = require('./chunk-MR2KQSBB.js');
|
|
11
11
|
var chunkQHRP73CS_js = require('./chunk-QHRP73CS.js');
|
|
@@ -78,23 +78,23 @@ Object.defineProperty(exports, "useToast", {
|
|
|
78
78
|
});
|
|
79
79
|
Object.defineProperty(exports, "SegmentedControl", {
|
|
80
80
|
enumerable: true,
|
|
81
|
-
get: function () { return
|
|
81
|
+
get: function () { return chunkNBWCHPRN_js.SegmentedControl; }
|
|
82
82
|
});
|
|
83
83
|
Object.defineProperty(exports, "SegmentedControlItem", {
|
|
84
84
|
enumerable: true,
|
|
85
|
-
get: function () { return
|
|
85
|
+
get: function () { return chunkNBWCHPRN_js.SegmentedControlItem; }
|
|
86
86
|
});
|
|
87
87
|
Object.defineProperty(exports, "Toggle", {
|
|
88
88
|
enumerable: true,
|
|
89
|
-
get: function () { return
|
|
89
|
+
get: function () { return chunkNBWCHPRN_js.Toggle; }
|
|
90
90
|
});
|
|
91
91
|
Object.defineProperty(exports, "ToggleGroup", {
|
|
92
92
|
enumerable: true,
|
|
93
|
-
get: function () { return
|
|
93
|
+
get: function () { return chunkNBWCHPRN_js.ToggleGroup; }
|
|
94
94
|
});
|
|
95
95
|
Object.defineProperty(exports, "ToggleGroupItem", {
|
|
96
96
|
enumerable: true,
|
|
97
|
-
get: function () { return
|
|
97
|
+
get: function () { return chunkNBWCHPRN_js.ToggleGroupItem; }
|
|
98
98
|
});
|
|
99
99
|
Object.defineProperty(exports, "PermissionMatrix", {
|
|
100
100
|
enumerable: true,
|
package/dist/index.mjs
CHANGED
|
@@ -3,7 +3,7 @@ import './chunk-CHVTPN3K.mjs';
|
|
|
3
3
|
export { formatCurrency, formatNumber } from './chunk-WYOJ7YRQ.mjs';
|
|
4
4
|
import './chunk-XTHC46M2.mjs';
|
|
5
5
|
export { ToastProvider, useToast } from './chunk-JL77KUET.mjs';
|
|
6
|
-
export { SegmentedControl, SegmentedControlItem, Toggle, ToggleGroup, ToggleGroupItem } from './chunk-
|
|
6
|
+
export { SegmentedControl, SegmentedControlItem, Toggle, ToggleGroup, ToggleGroupItem } from './chunk-CNV2E2M5.mjs';
|
|
7
7
|
export { PermissionMatrix } from './chunk-C4XPGEU2.mjs';
|
|
8
8
|
export { Combobox, DatePicker, FileUpload, MonthPicker, YearPicker } from './chunk-MMFYXM3J.mjs';
|
|
9
9
|
export { ResizableGroup, ResizableHandle, ResizablePanel } from './chunk-ML5IYW5D.mjs';
|
package/dist/styles.css
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
@layer elalba;@layer elalba{:root{--color-primary:var(--color-primary-800);--color-secondary:var(--color-secondary-400);--color-primary-900:#2e2b26;--color-primary-800:#423e37;--color-primary-700:#554839;--color-primary-600:#6b5a47;--color-primary-500:#87735e;--color-primary-400:#a8957f;--color-primary-300:#c8b8a6;--color-primary-200:#dfd3c6;--color-primary-100:#f0e9e1;--color-primary-50:#faf6f2;--color-secondary-900:#573820;--color-secondary-800:#7a4f30;--color-secondary-700:#9c6840;--color-secondary-600:#be8456;--color-secondary-500:#d4a074;--color-secondary-400:#e4bb97;--color-secondary-300:#ebcbab;--color-secondary-200:#f1dbc2;--color-secondary-100:#f8eddf;--color-secondary-50:#fcf7f1;--color-ink:#1c1917;--color-gray-900:#292524;--color-gray-800:#44403c;--color-gray-700:#57534e;--color-gray-600:#78716c;--color-gray-500:#a8a29e;--color-gray-400:#c4bcb4;--color-gray-300:#d6d3d1;--color-gray-200:#e7e5e4;--color-gray-150:#efedeb;--color-gray-100:#f5f5f4;--color-gray-50:#fafaf9;--color-white:#fff;--color-green-900:#0f4d22;--color-green-800:#166130;--color-green-700:#1f7a3d;--color-green-600:#2f9e44;--color-green-500:#4ab35a;--color-green-400:#6ec47e;--color-green-300:#95d5a1;--color-green-200:#c1e6c8;--color-green-100:#e0f1e3;--color-green-50:#f0f8f2;--color-yellow-900:#713f12;--color-yellow-800:#854d0e;--color-yellow-700:#a16207;--color-yellow-600:#ca8a04;--color-yellow-500:#eab308;--color-yellow-400:#facc15;--color-yellow-300:#fde047;--color-yellow-200:#fef08a;--color-yellow-100:#fef9c3;--color-yellow-50:#fefce8;--color-red-900:#5b0e0e;--color-red-800:#7e1818;--color-red-700:#b91c1c;--color-red-600:#dc2626;--color-red-500:#ef4444;--color-red-400:#f87171;--color-red-300:#fca5a5;--color-red-200:#fecaca;--color-red-100:#fee2e2;--color-red-50:#fef2f2;--color-info-900:#0c4a6e;--color-info-800:#075985;--color-info-700:#0369a1;--color-info-600:#0284c7;--color-info-500:#0ea5e9;--color-info-400:#38bdf8;--color-info-300:#7dd3fc;--color-info-200:#bae6fd;--color-info-100:#e0f2fe;--color-info-50:#f0f9ff;--color-success:var(--color-green-600);--color-warning:var(--color-yellow-600);--color-danger:var(--color-red-600);--color-info:var(--color-info-600);--bg-canvas:#ede1cc;--bg-surface:var(--color-white);--bg-subtle:var(--color-gray-100);--bg-muted:var(--color-gray-150);--bg-inverse:var(--color-primary);--bg-inverse-strong:var(--color-primary-900);--fg-default:var(--color-ink);--fg-muted:#605a54;--fg-subtle:#655e57;--fg-meta:var(--fg-subtle);--fg-on-brand:var(--color-white);--fg-on-secondary:var(--color-primary);--fg-link:var(--color-primary);--fg-link-hover:var(--color-primary-900);--accent-primary:var(--color-primary);--accent-secondary:var(--color-secondary);--border-default:var(--color-gray-200);--border-strong:var(--color-gray-300);--border-brand:var(--color-primary);--border-focus:var(--color-primary);--cat-1:#2f6fed;--cat-1-bg:#e8f0fe;--cat-1-fg:#1c4fa3;--cat-2:#14a08c;--cat-2-bg:#d9f2ee;--cat-2-fg:#0f6b5f;--cat-3:#7c4ddb;--cat-3-bg:#efe7fb;--cat-3-fg:#5b3aa8;--cat-4:#c98a00;--cat-4-bg:#fcf0d8;--cat-4-fg:#8a5a00;--cat-5:#e0457e;--cat-5-bg:#fde4ec;--cat-5-fg:#a52a5a;--cat-6:#64748b;--cat-6-bg:#e6e9ef;--cat-6-fg:#3f4756;--bp-sm:480px;--bp-md:768px;--bp-lg:1024px;--bp-xl:1280px;--font-display:"Outfit","Helvetica Neue",Arial,sans-serif;--font-body:"DM Sans","Helvetica Neue",Arial,sans-serif;--font-mono:"JetBrains Mono",ui-monospace,"SF Mono",Menlo,Consolas,monospace;--weight-thin:100;--weight-extralight:200;--weight-light:300;--weight-regular:400;--weight-medium:500;--weight-semibold:600;--weight-bold:700;--weight-extrabold:800;--weight-black:900;--text-2xs:0.6875rem;--text-xs:0.75rem;--text-sm:0.875rem;--text-md:1rem;--text-lg:1.125rem;--text-xl:1.25rem;--text-2xl:1.5rem;--text-3xl:1.875rem;--text-4xl:2.5rem;--text-5xl:3.25rem;--text-6xl:4.25rem;--text-7xl:5.5rem;--leading-tight:1.05;--leading-snug:1.2;--leading-normal:1.45;--leading-relaxed:1.6;--tracking-tight:-0.01em;--tracking-normal:0;--tracking-snug:0.02em;--tracking-wide:0.04em;--tracking-wider:0.08em;--tt-label:uppercase;--tt-data:none;--tt-title:none;--space-0:0;--space-1:4px;--space-2:8px;--space-3:12px;--space-4:16px;--space-5:20px;--space-6:24px;--space-8:32px;--space-10:40px;--space-12:48px;--space-16:64px;--space-20:80px;--space-24:96px;--radius-none:0;--radius-xs:2px;--radius-sm:4px;--radius-md:8px;--radius-lg:12px;--radius-xl:18px;--radius-pill:999px;--shadow-xs:0 1px 2px rgba(12,18,32,.06);--shadow-sm:0 2px 6px rgba(12,18,32,.08);--shadow-md:0 8px 20px rgba(12,18,32,.1);--shadow-lg:0 18px 40px rgba(12,18,32,.14);--shadow-brand:0 10px 30px rgba(0,47,135,.25);--shadow-card:0 1px 2px rgba(12,18,32,.05),0 8px 24px -16px rgba(12,18,32,.2);--shadow-card-hover:0 2px 4px rgba(12,18,32,.06),0 16px 32px -14px rgba(12,18,32,.26);--ease-out-quart:cubic-bezier(0.25,1,0.5,1);--ease-out-quint:cubic-bezier(0.22,1,0.36,1);--ease-out-expo:cubic-bezier(0.16,1,0.3,1);--ease-standard:var(--ease-out-quint);--ease-out:var(--ease-out-quint);--ease-in:cubic-bezier(0.4,0,1,1);--duration-fast:120ms;--duration-base:200ms;--duration-slow:320ms;--duration-exit:150ms;--z-base:1;--z-dropdown:50;--z-sticky:60;--z-overlay:100;--z-toast:200;--z-tooltip:1000;--z-popover:1300;--z-floating:1300;--focus-ring-brand:0 0 0 3px color-mix(in srgb,var(--color-primary) 16%,transparent);--focus-ring-accent:0 0 0 3px color-mix(in srgb,var(--color-secondary) 16%,transparent);--focus-ring-danger:0 0 0 3px color-mix(in srgb,var(--color-red-600) 16%,transparent);--backdrop:color-mix(in srgb,var(--color-ink) 55%,transparent)}.h-display,.h1{font-size:var(--text-6xl);line-height:var(--leading-tight)}.h-display,.h1,.h2{color:var(--fg-default);font-family:var(--font-display);font-weight:700;letter-spacing:var(--tracking-tight);text-transform:var(--tt-title)}.h2{font-size:var(--text-4xl);line-height:var(--leading-snug)}.h3{font-family:var(--font-display);font-size:var(--text-2xl);text-transform:var(--tt-title)}.h3,.h4{color:var(--fg-default);font-weight:700;line-height:var(--leading-snug)}.h4{font-size:var(--text-xl)}.eyebrow,.h4{font-family:var(--font-body)}.eyebrow{color:var(--accent-secondary);font-size:var(--text-sm);font-weight:700;letter-spacing:var(--tracking-wider);text-transform:var(--tt-label)}.body-lg{font-size:var(--text-lg)}.body,.body-lg,p{color:var(--fg-default);font-family:var(--font-body);font-weight:400;line-height:var(--leading-relaxed)}.body,p{font-size:var(--text-md)}.body-sm{font-weight:400;line-height:var(--leading-normal)}.body-sm,.label{color:var(--fg-muted);font-family:var(--font-body);font-size:var(--text-sm)}.label{font-weight:500;letter-spacing:var(--tracking-wide);text-transform:var(--tt-data)}.caption{color:var(--fg-subtle);font-size:var(--text-xs);letter-spacing:var(--tracking-wide)}.caption,.cell-meta{font-family:var(--font-body);font-weight:400}.cell-meta{color:var(--fg-meta);display:block;font-size:var(--text-2xs);line-height:var(--leading-normal)}.cell-mono{font-family:var(--font-mono);font-variant-numeric:tabular-nums}.cell-wrap{overflow-wrap:anywhere;white-space:normal}.mono,code{font-family:var(--font-mono);font-size:.95em}.mono,:not(pre)>code{background:var(--bg-subtle);border-radius:var(--radius-sm);padding:2px 6px}a{border-bottom:1px solid transparent;color:var(--fg-link);text-decoration:none;transition:color var(--duration-fast) var(--ease-standard),border-color var(--duration-fast) var(--ease-standard)}a:hover{border-bottom-color:currentColor;color:var(--fg-link-hover)}.surface-inverse,[data-tone=inverse]{--fg-default:var(--fg-on-brand);--fg-muted:color-mix(in srgb,var(--fg-on-brand) 70%,transparent);--fg-subtle:color-mix(in srgb,var(--fg-on-brand) 50%,transparent);--fg-link:var(--fg-on-brand);--fg-link-hover:var(--color-secondary);--border-default:color-mix(in srgb,var(--fg-on-brand) 20%,transparent);--border-strong:color-mix(in srgb,var(--fg-on-brand) 35%,transparent);--bg-subtle:color-mix(in srgb,var(--fg-on-brand) 12%,transparent);--bg-muted:color-mix(in srgb,var(--fg-on-brand) 18%,transparent);color:var(--fg-default)}.surface-inverse--brand{background:var(--color-primary)}.surface-inverse--dark{background:var(--color-primary-900)}}@layer elalba{}@layer elalba{:where(html,body){color:var(--fg-default);font-family:var(--font-body);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}svg text{font-family:inherit}button,input,optgroup,select,textarea{font:inherit}button,input,select,textarea{box-sizing:border-box}.btn{align-items:center;border:1px solid transparent;border-radius:var(--radius-md);cursor:pointer;display:inline-flex;font-family:var(--font-body);font-size:var(--text-sm);font-weight:700;gap:8px;justify-content:center;letter-spacing:var(--tracking-wide);text-decoration:none;text-transform:var(--tt-label);transition:background var(--duration-fast) var(--ease-standard),color var(--duration-fast) var(--ease-standard),border-color var(--duration-fast) var(--ease-standard),transform var(--duration-fast) var(--ease-standard),box-shadow var(--duration-fast) var(--ease-standard);-webkit-user-select:none;-moz-user-select:none;user-select:none;white-space:nowrap}.btn:focus-visible{box-shadow:var(--focus-ring-accent);outline:none}.btn:active:not(:disabled){box-shadow:var(--shadow-xs);transform:scale(.98)}.btn:disabled{cursor:not-allowed;opacity:.45}.btn--xs{font-size:var(--text-2xs);min-height:28px;padding:6px 10px}.btn--sm{font-size:var(--text-xs);min-height:36px;padding:8px 14px}.btn--md{font-size:var(--text-sm);min-height:44px;padding:10px 18px}.btn--lg{font-size:var(--text-md);min-height:52px;padding:14px 24px}.btn--xl{font-size:var(--text-lg);min-height:60px;padding:18px 32px}.btn--icon{aspect-ratio:1;padding:0}.btn--icon.btn--sm{width:36px}.btn--icon.btn--md{width:44px}.btn--icon.btn--lg{width:52px}.btn--block{display:flex;width:100%}.btn--primary{background:var(--btn-primary-bg,var(--color-primary));color:var(--btn-primary-fg,var(--fg-on-brand))}.btn--primary:hover:not(:disabled){background:var(--btn-primary-bg-hover,var(--color-primary-900))}.btn--secondary{background:var(--btn-secondary-bg,var(--color-secondary));color:var(--btn-secondary-fg,var(--fg-on-secondary))}.btn--secondary:hover:not(:disabled){background:var(--btn-secondary-bg-hover,var(--color-secondary-500))}.btn--outline{background:transparent;border-color:var(--color-primary);color:var(--color-primary)}.btn--outline:hover:not(:disabled){background:var(--color-primary);color:var(--color-white)}.btn--ghost{background:transparent;color:var(--fg-default)}.btn--ghost:hover:not(:disabled),.btn--subtle{background:var(--bg-subtle)}.btn--subtle{color:var(--fg-default)}.btn--subtle:hover:not(:disabled){background:var(--bg-muted)}.btn--danger{background:var(--color-danger);color:var(--color-white)}.btn--danger:hover:not(:disabled){background:var(--color-red-700)}.btn--success{background:var(--color-success);color:var(--color-white)}.btn--success:hover:not(:disabled){background:var(--color-green-700)}.btn--warning{background:var(--color-warning);color:var(--color-yellow-900)}.btn--warning:hover:not(:disabled){background:var(--color-yellow-600)}.btn--link{background:transparent;color:var(--color-primary);font-weight:700;letter-spacing:0;min-height:auto;padding:4px 6px;text-transform:none}.btn--link:hover:not(:disabled){color:var(--color-secondary-700);text-decoration:underline}.btn--link:active:not(:disabled){box-shadow:none;transform:none}.btn-group{display:inline-flex}.btn-group .btn{border-radius:var(--radius-none);border-right-width:0}.btn-group .btn:first-child{border-bottom-left-radius:var(--radius-md);border-top-left-radius:var(--radius-md)}.btn-group .btn:last-child{border-bottom-right-radius:var(--radius-md);border-right-width:1px;border-top-right-radius:var(--radius-md)}.btn-group .btn--outline+.btn--outline{border-left:1px solid var(--color-primary)}.field{display:flex;flex-direction:column;gap:6px}.field__label{align-items:center;color:var(--fg-default);display:flex;font-family:var(--font-body);font-size:var(--text-sm);font-weight:700;gap:4px}.field__label .req{color:var(--color-danger)}.field__label .opt{font-weight:400}.field__help,.field__label .opt{color:var(--fg-subtle);font-size:var(--text-xs)}.field__error,.field__help{font-family:var(--font-body)}.field__error{align-items:center;color:var(--color-danger);display:flex;font-size:var(--text-xs);font-weight:700;gap:4px}.input,.select,.textarea{background:var(--bg-surface);border:1px solid var(--border-strong);border-radius:var(--radius-md);color:var(--fg-default);font-family:var(--font-body);font-size:var(--text-md);min-height:var(--field-min-h,44px);padding:var(--field-pad-y,10px) var(--field-pad-x,14px);transition:border-color var(--duration-fast),box-shadow var(--duration-fast);width:100%}.fields--dense{--field-min-h:36px;--field-pad-y:6px;--field-pad-x:10px}.fields--dense .combobox__input,.fields--dense .input,.fields--dense .select,.fields--dense .textarea{font-size:var(--text-sm)}.input::-moz-placeholder,.textarea::-moz-placeholder{color:var(--fg-subtle)}.input::placeholder,.textarea::placeholder{color:var(--fg-subtle)}.input:hover:not(:disabled),.select:hover:not(:disabled),.textarea:hover:not(:disabled){border-color:var(--border-strong)}.input:focus,.select:focus,.textarea:focus{border-color:var(--color-primary);box-shadow:var(--focus-ring-brand);outline:none}.input:disabled,.select:disabled,.textarea:disabled{background:var(--bg-subtle);color:var(--fg-subtle);cursor:not-allowed}.field--error .input,.field--error .select,.field--error .textarea{border-color:var(--color-danger)}.field--error .input:focus{box-shadow:var(--focus-ring-danger)}.form-field{display:flex;flex-direction:column;gap:6px}.form-field__hint{color:var(--fg-subtle)}.form-field__error,.form-field__hint{font-family:var(--font-body);font-size:var(--text-xs)}.form-field__error{align-items:center;color:var(--color-danger);display:flex;font-weight:700;gap:4px}.select{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='20' height='20' fill='none' stroke='%235b6173' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E");background-position:right 12px center;background-repeat:no-repeat;padding-right:40px}.textarea{min-height:96px;padding-bottom:12px;padding-top:12px;resize:vertical}.input-group{align-items:stretch;background:var(--bg-surface);border:1px solid var(--border-strong);border-radius:var(--radius-md);display:flex;overflow:hidden;transition:border-color var(--duration-fast),box-shadow var(--duration-fast)}.input-group:focus-within{border-color:var(--color-primary);box-shadow:var(--focus-ring-brand)}.input-group .input{border:0;border-radius:var(--radius-none);box-shadow:none}.input-group .input:focus{box-shadow:none}.input-group__addon{align-items:center;background:var(--bg-subtle);border-right:1px solid var(--border-default);color:var(--fg-muted);display:flex;font-family:var(--font-body);font-size:var(--text-sm);font-weight:700;padding:0 14px}.input-group__addon:last-child{border-left:1px solid var(--border-default);border-right:0}.input-wrap{align-items:center;display:flex;position:relative;width:100%}.input-wrap__icon{align-items:center;color:var(--fg-subtle);display:inline-flex;height:20px;justify-content:center;pointer-events:none;position:absolute;width:20px}.input-wrap__icon--left{left:12px}.input-wrap__icon--right{right:12px}.input-wrap .input{width:100%}.input--has-left{padding-left:40px}.input--has-right{padding-right:40px}.input-wrap.is-invalid .input{border-color:var(--color-danger)}.input-wrap.is-invalid .input:focus{box-shadow:var(--focus-ring-danger)}.check{align-items:flex-start;color:var(--fg-default);cursor:pointer;display:inline-flex;font-family:var(--font-body);font-size:var(--text-sm);gap:10px;-webkit-user-select:none;-moz-user-select:none;user-select:none}.check input{opacity:0;pointer-events:none;position:absolute}.check__box{align-items:center;background:var(--bg-surface);border:1.5px solid var(--border-strong);border-radius:var(--radius-sm);display:inline-flex;flex:none;height:20px;justify-content:center;margin-top:1px;transition:background var(--duration-fast),border-color var(--duration-fast);width:20px}.check input:checked~.check__box{background:var(--color-primary);border-color:var(--color-primary);color:var(--color-white)}.check input:focus-visible~.check__box{box-shadow:var(--focus-ring-accent);outline:none}.check:hover .check__box{border-color:var(--border-strong)}.check input:disabled~.check__box{background:var(--bg-subtle);border-color:var(--border-default)}.check__box svg{opacity:0;transition:opacity var(--duration-fast)}.check input:checked~.check__box svg{opacity:1}.check--radio .check__box,.check--radio .check__box:after{border-radius:var(--radius-pill)}.check--radio .check__box:after{background:var(--color-white);content:"";height:8px;opacity:0;transition:opacity var(--duration-fast);width:8px}.check--radio input:checked~.check__box:after{opacity:1}.switch{align-items:center;cursor:pointer;display:inline-flex;gap:10px;-webkit-user-select:none;-moz-user-select:none;user-select:none}.switch input{opacity:0;pointer-events:none;position:absolute}.switch__track{background:var(--color-gray-300);border-radius:var(--radius-pill);flex:none;height:22px;position:relative;transition:background var(--duration-fast) var(--ease-standard);width:40px}.switch__track:after{background:var(--color-white);border-radius:var(--radius-pill);box-shadow:var(--shadow-xs);content:"";height:18px;left:2px;position:absolute;top:2px;transition:transform var(--duration-fast) var(--ease-standard);width:18px}.switch input:checked~.switch__track{background:var(--color-primary)}.switch input:checked~.switch__track:after{transform:translateX(18px)}.switch input:focus-visible~.switch__track{box-shadow:var(--focus-ring-accent)}.switch input:disabled~.switch__track{opacity:.5}.badge{align-items:center;background:var(--bg-subtle);border:1px solid var(--border-default);border-radius:var(--radius-pill);color:var(--fg-muted);display:inline-flex;font-family:var(--font-body);font-size:var(--text-xs);font-weight:600;gap:6px;letter-spacing:var(--tracking-wide);padding:3px 8px;text-transform:none;white-space:nowrap;--badge-ink:var(--color-gray-800)}.badge--label{text-transform:var(--tt-label)}.badge--primary{background:var(--color-primary-100);border-color:var(--color-primary-200);color:var(--color-primary-800);--badge-ink:var(--color-primary-800)}.badge--accent{background:var(--color-secondary-100);border-color:var(--color-secondary-200);color:var(--color-secondary-800);--badge-ink:var(--color-secondary-800)}.badge--success{background:var(--color-green-50);border-color:var(--color-green-200);color:var(--color-green-800);--badge-ink:var(--color-green-800)}.badge--warning{background:var(--color-yellow-50);border-color:var(--color-yellow-200);color:var(--color-yellow-800);--badge-ink:var(--color-yellow-800)}.badge--danger{background:var(--color-red-50);border-color:var(--color-red-200);color:var(--color-red-800);--badge-ink:var(--color-red-800)}.badge--info{background:var(--color-info-50);border-color:var(--color-info-200);color:var(--color-info-800);--badge-ink:var(--color-info-800)}.badge--cat-1{background:var(--cat-1-bg);border-color:transparent;color:var(--cat-1-fg);--badge-ink:var(--cat-1-fg)}.badge--cat-2{background:var(--cat-2-bg);border-color:transparent;color:var(--cat-2-fg);--badge-ink:var(--cat-2-fg)}.badge--cat-3{background:var(--cat-3-bg);border-color:transparent;color:var(--cat-3-fg);--badge-ink:var(--cat-3-fg)}.badge--cat-4{background:var(--cat-4-bg);border-color:transparent;color:var(--cat-4-fg);--badge-ink:var(--cat-4-fg)}.badge--cat-5{background:var(--cat-5-bg);border-color:transparent;color:var(--cat-5-fg);--badge-ink:var(--cat-5-fg)}.badge--cat-6{background:var(--cat-6-bg);border-color:transparent;color:var(--cat-6-fg);--badge-ink:var(--cat-6-fg)}.badge--app-solid{background:var(--badge-ink);border-color:transparent;color:var(--color-white)}.badge--app-outline{background:transparent;border-color:var(--badge-ink);color:var(--badge-ink)}.badge--solid{background:var(--color-primary)}.badge--solid,.badge--solid-orange{border-color:transparent;color:var(--color-white)}.badge--solid-orange{background:var(--color-secondary)}.badge__dot{background:currentColor;border-radius:var(--radius-pill);height:6px;width:6px}.badge__dot.is-pulsing{animation:status-pulse 1.6s ease-out infinite}@media (prefers-reduced-motion:reduce){.badge__dot.is-pulsing{animation:none}}.chip{align-items:center;background:var(--bg-subtle);border:1px solid var(--border-default);border-radius:var(--radius-pill);color:var(--fg-default);cursor:pointer;display:inline-flex;font-family:var(--font-body);font-size:var(--text-sm);gap:6px;padding:6px 12px;transition:background var(--duration-fast),border-color var(--duration-fast)}.chip:hover{background:var(--bg-muted)}.chip--active{background:var(--color-primary);border-color:var(--color-primary);color:var(--color-white)}.chip__close{align-items:center;background:transparent;border:0;border-radius:var(--radius-pill);color:inherit;cursor:pointer;display:inline-flex;height:16px;justify-content:center;opacity:.6;padding:0;transition:opacity var(--duration-fast),background var(--duration-fast);width:16px}.chip__close:hover{background:rgba(0,0,0,.08);opacity:1}.chip--active .chip__close:hover{background:hsla(0,0%,100%,.2)}.chip__close:focus-visible{box-shadow:var(--focus-ring-accent);outline:none}.chip__close svg{display:block}.avatar{align-items:center;border-radius:var(--radius-pill);display:inline-flex;flex:none;font-size:var(--text-sm);font-weight:700;height:40px;justify-content:center;letter-spacing:.02em;position:relative;text-transform:var(--tt-label);width:40px}.avatar img{border-radius:inherit;height:100%;-o-object-fit:cover;object-fit:cover;width:100%}.avatar--xs{font-size:.625rem;height:24px;width:24px}.avatar--sm{font-size:var(--text-2xs);height:32px;width:32px}.avatar--lg{font-size:var(--text-md);height:56px;width:56px}.avatar--xl{font-size:var(--text-xl);height:80px;width:80px}.avatar-stack{display:inline-flex}.avatar-stack .avatar{border:2px solid var(--bg-surface);margin-left:-10px}.avatar-stack .avatar:first-child{margin-left:0}.card{background:var(--bg-surface);border:1px solid var(--border-default);border-radius:var(--radius-lg);box-shadow:var(--shadow-card);overflow:hidden}.card .card{box-shadow:none}.card__body,.card__header{padding:20px 24px}.card__header{border-bottom:1px solid var(--border-default)}.card__footer{background:var(--bg-subtle);border-top:1px solid var(--border-default);padding:16px 24px}.card__title{font-family:var(--font-body);font-size:var(--text-lg);font-weight:700;margin:0 0 4px}.card__subtitle{color:var(--fg-muted);font-size:var(--text-sm);margin:0}.card--interactive{cursor:pointer;transition:box-shadow var(--duration-base) var(--ease-standard),transform var(--duration-base) var(--ease-standard)}.card--interactive:hover{box-shadow:var(--shadow-card-hover);transform:translateY(-2px)}.card--accent-brand,.card--accent-cat-1,.card--accent-cat-2,.card--accent-cat-3,.card--accent-cat-4,.card--accent-cat-5,.card--accent-cat-6,.card--accent-danger,.card--accent-info,.card--accent-neutral,.card--accent-secondary,.card--accent-success,.card--accent-warning{box-shadow:inset 4px 0 0 var(--card-accent-color),var(--shadow-card)}.card--accent-brand{--card-accent-color:var(--color-primary)}.card--accent-secondary{--card-accent-color:var(--accent-secondary)}.card--accent-success{--card-accent-color:var(--color-success)}.card--accent-warning{--card-accent-color:var(--color-warning)}.card--accent-danger{--card-accent-color:var(--color-danger)}.card--accent-info{--card-accent-color:var(--color-info)}.card--accent-neutral{--card-accent-color:var(--border-strong)}.card--accent-cat-1{--card-accent-color:var(--cat-1)}.card--accent-cat-2{--card-accent-color:var(--cat-2)}.card--accent-cat-3{--card-accent-color:var(--cat-3)}.card--accent-cat-4{--card-accent-color:var(--cat-4)}.card--accent-cat-5{--card-accent-color:var(--cat-5)}.card--accent-cat-6{--card-accent-color:var(--cat-6)}.card--interactive.card--accent-brand:hover,.card--interactive.card--accent-cat-1:hover,.card--interactive.card--accent-cat-2:hover,.card--interactive.card--accent-cat-3:hover,.card--interactive.card--accent-cat-4:hover,.card--interactive.card--accent-cat-5:hover,.card--interactive.card--accent-cat-6:hover,.card--interactive.card--accent-danger:hover,.card--interactive.card--accent-info:hover,.card--interactive.card--accent-neutral:hover,.card--interactive.card--accent-secondary:hover,.card--interactive.card--accent-success:hover,.card--interactive.card--accent-warning:hover{box-shadow:inset 4px 0 0 var(--card-accent-color),var(--shadow-card-hover)}.kpi-card{background:var(--bg-surface);border:1px solid var(--border-default);border-radius:var(--radius-lg);display:flex;flex-direction:column;gap:8px;padding:20px 24px}.kpi-card__label{color:var(--fg-muted);font-family:var(--font-body);font-size:var(--text-xs);font-weight:700;letter-spacing:var(--tracking-wider);text-transform:var(--tt-label)}.kpi-card__value{color:var(--fg-default);font-family:var(--font-display);font-size:var(--text-4xl);font-weight:700;line-height:1}.kpi-card__trend{align-items:center;display:inline-flex;font-family:var(--font-body);font-size:var(--text-xs);font-weight:700;gap:4px}.kpi-card__trend--up{color:var(--color-success)}.kpi-card__trend--down{color:var(--color-danger)}.product-card{background:var(--bg-surface);border:1px solid var(--border-default);border-radius:var(--radius-lg);display:flex;flex-direction:column;overflow:hidden;position:relative;transition:box-shadow var(--duration-base),transform var(--duration-base)}.product-card:hover{box-shadow:var(--shadow-md);transform:translateY(-2px)}.product-card__media{aspect-ratio:1;background:var(--bg-subtle);overflow:hidden;position:relative}.product-card__media,.product-card__placeholder{align-items:center;display:flex;justify-content:center}.product-card__placeholder{background-image:linear-gradient(45deg,var(--bg-muted) 25%,transparent 25%),linear-gradient(-45deg,var(--bg-muted) 25%,transparent 25%);background-size:16px 16px;color:var(--color-gray-500);font-size:var(--text-xs);height:100%;width:100%}.product-card__body{display:flex;flex:1;flex-direction:column;gap:6px;padding:16px}.product-card__title{font-size:var(--text-md);font-weight:700;line-height:1.3;margin:0}.product-card__sku{color:var(--fg-subtle);font-family:var(--font-mono);font-size:var(--text-xs)}.product-card__price{color:var(--color-primary);font-size:var(--text-xl);font-weight:700}.product-card__footer{align-items:center;display:flex;gap:8px;justify-content:space-between;padding:0 16px 16px}.product-card__tag{background:var(--color-secondary);color:var(--color-white);font-size:var(--text-2xs);font-weight:700;left:12px;letter-spacing:var(--tracking-wide);padding:4px 8px;position:absolute;text-transform:var(--tt-label);top:12px}.alert{align-items:flex-start;background:var(--bg-subtle);border:1px solid var(--border-default);border-radius:var(--radius-md);display:flex;font-family:var(--font-body);font-size:var(--text-sm);gap:12px;line-height:1.5;padding:14px 18px}.alert__icon{flex:none;margin-top:1px}.alert__body{flex:1}.alert__title{font-weight:700;margin-bottom:2px}.alert__desc{color:inherit;font-size:var(--text-sm);line-height:1.5;opacity:.92}.alert--info{background:var(--color-info-50);border-color:var(--color-info-200);color:var(--color-info-800)}.alert--info .alert__icon{color:var(--color-info)}.alert--success{background:var(--color-green-50);border-color:var(--color-green-200);color:var(--color-green-800)}.alert--success .alert__icon{color:var(--color-success)}.alert--warning{background:var(--color-yellow-50);border-color:var(--color-yellow-200);color:var(--color-yellow-800)}.alert--warning .alert__icon{color:var(--color-warning)}.alert--danger{background:var(--color-red-50);border-color:var(--color-red-200);color:var(--color-red-800)}.alert--danger .alert__icon{color:var(--color-danger)}.alert__close{background:transparent;border:0;color:currentColor;cursor:pointer;opacity:.7;padding:2px}.alert__close:hover{opacity:1}.tooltip{display:inline-flex;position:relative}.tooltip__bubble{background:var(--color-ink);border-radius:var(--radius-sm);color:var(--color-white);font-family:var(--font-body);font-size:var(--text-xs);font-weight:700;opacity:0;padding:6px 10px;pointer-events:none;position:absolute;transition:opacity var(--duration-fast);white-space:nowrap;z-index:var(--z-tooltip)}.tooltip__bubble:after{border:4px solid transparent;content:"";position:absolute}.tooltip--top .tooltip__bubble{bottom:calc(100% + 8px);left:50%;transform:translateX(-50%)}.tooltip--top .tooltip__bubble:after{border-top-color:var(--color-ink);left:50%;top:100%;transform:translateX(-50%)}.tooltip--bottom .tooltip__bubble{left:50%;top:calc(100% + 8px);transform:translateX(-50%)}.tooltip--bottom .tooltip__bubble:after{border-bottom-color:var(--color-ink);bottom:100%;left:50%;transform:translateX(-50%)}.tooltip--left .tooltip__bubble{right:calc(100% + 8px);top:50%;transform:translateY(-50%)}.tooltip--left .tooltip__bubble:after{border-left-color:var(--color-ink);left:100%;top:50%;transform:translateY(-50%)}.tooltip--right .tooltip__bubble{left:calc(100% + 8px);top:50%;transform:translateY(-50%)}.tooltip--right .tooltip__bubble:after{border-right-color:var(--color-ink);right:100%;top:50%;transform:translateY(-50%)}.tooltip:focus-within .tooltip__bubble,.tooltip:hover .tooltip__bubble{opacity:1}.tabs{display:flex;flex-direction:column}.tabs__list{border-bottom:1px solid var(--border-default);display:flex;gap:4px}.tabs__tab{background:transparent;border:0;border-bottom:2px solid transparent;color:var(--fg-default);cursor:pointer;font-family:var(--font-body);font-size:var(--text-sm);font-weight:600;margin-bottom:-1px;padding:12px 18px;transition:color var(--duration-fast),border-color var(--duration-fast)}.tabs__tab.is-active,.tabs__tab:hover{color:var(--color-primary)}.tabs__tab.is-active{border-bottom-color:var(--color-secondary)}.tabs__tab:focus-visible{border-radius:var(--radius-sm);box-shadow:var(--focus-ring-accent);outline:none}.tabs__panel{padding:16px 0}.tabs--pill .tabs__list{background:var(--bg-subtle);border:0;border-radius:var(--radius-md);display:inline-flex;gap:8px;padding:4px}.tabs--pill .tabs__tab{border:0;border-radius:var(--radius-sm);margin:0;padding:8px 14px}.tabs--pill .tabs__tab.is-active{background:var(--bg-surface);box-shadow:var(--shadow-xs);color:var(--color-primary)}.pagination__btn{align-items:center;display:inline-flex;font-weight:500;height:36px;justify-content:center;min-width:36px;padding:0 10px;transition:background var(--duration-fast),border-color var(--duration-fast)}.pagination__btn.active{background:var(--color-primary);border-color:var(--color-primary);color:var(--color-white)}.pagination__ellipsis{align-self:center;color:var(--fg-subtle)}.breadcrumbs{align-items:center;display:flex;flex-wrap:wrap;gap:6px}.breadcrumbs__current{color:var(--fg-default);font-weight:700}.table-wrap{background:linear-gradient(to right,var(--bg-surface) 30%,transparent) 0,linear-gradient(to left,var(--bg-surface) 30%,transparent) 100%,linear-gradient(to right,rgba(0,0,0,.08),transparent 24px) 0,linear-gradient(to left,rgba(0,0,0,.08),transparent 24px) 100%,var(--bg-surface);background-attachment:local,local,scroll,scroll,scroll;background-clip:padding-box;background-repeat:no-repeat;background-size:30px 100%,30px 100%,24px 100%,24px 100%,100% 100%;border:1px solid var(--border-default);border-radius:var(--radius-lg);box-shadow:var(--table-elevation,none);overflow-x:auto}.table-wrap--flush{border:0;border-radius:0;box-shadow:none}.table-wrap--flush>.data-table thead tr:first-child th:first-child,.table-wrap--flush>.data-table thead tr:first-child th:last-child{border-top-left-radius:0;border-top-right-radius:0}.table-wrap>.data-table thead tr:first-child th:first-child{border-top-left-radius:var(--radius-lg)}.table-wrap>.data-table thead tr:first-child th:last-child{border-top-right-radius:var(--radius-lg)}.table{border-collapse:collapse;color:var(--fg-default);font-family:var(--font-body);font-size:var(--text-sm);width:100%}.table th{background:var(--bg-subtle);border-bottom:1px solid var(--border-default);color:var(--fg-muted);font-size:var(--text-xs);font-weight:500;letter-spacing:var(--tracking-snug);padding:8px 12px;text-align:left;text-transform:var(--tt-data);white-space:nowrap}.data-table__sort{display:inline-flex;margin-left:4px;opacity:.75;vertical-align:middle}.data-table__sort-btn{align-items:center;background:transparent;border:0;color:inherit;cursor:pointer;display:inline-flex;font-size:inherit;font-weight:inherit;gap:4px;letter-spacing:inherit;padding:0;text-transform:inherit}.data-table__sort-btn:hover{color:var(--fg-default)}.data-table__sort-btn:focus-visible{border-radius:var(--radius-sm);box-shadow:var(--focus-ring-accent);outline:none}.table th[aria-sort=ascending],.table th[aria-sort=descending]{background:var(--color-primary-50);border-bottom-color:var(--color-primary);color:var(--color-primary)}.data-table__error{color:var(--color-danger);font-size:var(--text-sm)}.table-pagination{align-items:center;display:flex;flex-wrap:wrap;gap:var(--space-3);justify-content:space-between;padding:var(--space-3) 0}.table-pagination__size{align-items:center;color:var(--fg-muted);display:inline-flex;font-size:var(--text-sm);gap:var(--space-2)}.table-pagination__size .select{min-width:0;width:auto}@media (max-width:600px){.table-pagination{justify-content:center}}.table-wrap--scroll{overflow:hidden}.table-wrap__scroll{overflow:auto}.table-wrap__sentinel{height:0}.cmdk__list,.combobox__list,.drawer__body,.kit-scrollbar,.menu__panel,.modal__body,.multicombo__list,.notif__list,.table-wrap__scroll,.transfer__list{scrollbar-color:var(--border-strong) transparent;scrollbar-width:thin}.cmdk__list::-webkit-scrollbar,.combobox__list::-webkit-scrollbar,.drawer__body::-webkit-scrollbar,.kit-scrollbar::-webkit-scrollbar,.menu__panel::-webkit-scrollbar,.modal__body::-webkit-scrollbar,.multicombo__list::-webkit-scrollbar,.notif__list::-webkit-scrollbar,.table-wrap__scroll::-webkit-scrollbar,.transfer__list::-webkit-scrollbar{height:12px;width:12px}.cmdk__list::-webkit-scrollbar-track,.combobox__list::-webkit-scrollbar-track,.drawer__body::-webkit-scrollbar-track,.kit-scrollbar::-webkit-scrollbar-track,.menu__panel::-webkit-scrollbar-track,.modal__body::-webkit-scrollbar-track,.multicombo__list::-webkit-scrollbar-track,.notif__list::-webkit-scrollbar-track,.table-wrap__scroll::-webkit-scrollbar-track,.transfer__list::-webkit-scrollbar-track{background:transparent}.cmdk__list::-webkit-scrollbar-thumb,.combobox__list::-webkit-scrollbar-thumb,.drawer__body::-webkit-scrollbar-thumb,.kit-scrollbar::-webkit-scrollbar-thumb,.menu__panel::-webkit-scrollbar-thumb,.modal__body::-webkit-scrollbar-thumb,.multicombo__list::-webkit-scrollbar-thumb,.notif__list::-webkit-scrollbar-thumb,.table-wrap__scroll::-webkit-scrollbar-thumb,.transfer__list::-webkit-scrollbar-thumb{background:var(--border-strong);background-clip:content-box;border:3px solid transparent;border-radius:999px}.cmdk__list::-webkit-scrollbar-thumb:hover,.combobox__list::-webkit-scrollbar-thumb:hover,.drawer__body::-webkit-scrollbar-thumb:hover,.kit-scrollbar::-webkit-scrollbar-thumb:hover,.menu__panel::-webkit-scrollbar-thumb:hover,.modal__body::-webkit-scrollbar-thumb:hover,.multicombo__list::-webkit-scrollbar-thumb:hover,.notif__list::-webkit-scrollbar-thumb:hover,.table-wrap__scroll::-webkit-scrollbar-thumb:hover,.transfer__list::-webkit-scrollbar-thumb:hover{background:var(--fg-subtle)}.table-wrap--sticky:not(.table-wrap--scroll){overflow:visible}.table-wrap--sticky .table thead th{background:var(--bg-subtle);box-shadow:inset 0 -1px 0 var(--border-default);position:sticky;top:0;transition:box-shadow var(--duration-base,.2s) var(--ease-standard,ease);z-index:1}.table-wrap--sticky .table-wrap__scroll.is-stuck .data-table thead th{box-shadow:inset 0 -1px 0 var(--border-default),0 6px 8px -6px rgba(12,18,32,.18)}.data-table__expand-btn{align-items:center;background:transparent;border:0;border-radius:var(--radius-sm);color:var(--fg-subtle);cursor:pointer;display:inline-flex;height:24px;justify-content:center;transition:color var(--duration-fast),background var(--duration-fast);width:24px}.data-table__expand-btn:hover{background:var(--bg-subtle);color:var(--fg-default)}.data-table__expand-btn:focus-visible{box-shadow:var(--focus-ring-accent);outline:none}.data-table__expand-btn svg{transition:transform var(--duration-fast)}.data-table__expand-btn[aria-expanded=true] svg{transform:rotate(90deg)}.data-table__detail>td{background:var(--bg-subtle);box-shadow:inset 0 1px 0 var(--border-default);padding:12px 16px}.data-table__spacer>td{border:0;padding:0}.column-toggle{display:grid;gap:2px;min-width:180px;padding:4px}.column-toggle__item{border-radius:var(--radius-sm);color:var(--fg-default);font-size:var(--text-sm);padding:6px 8px;-webkit-user-select:none;-moz-user-select:none;user-select:none}.column-toggle__item:hover{background:var(--bg-subtle)}.column-toggle__item:has(input:disabled){color:var(--fg-subtle);cursor:not-allowed}.editable-cell{align-items:center;background:transparent;border:0;border-radius:var(--radius-sm);color:inherit;cursor:pointer;display:inline-flex;font:inherit;gap:6px;margin:-2px -4px;max-width:100%;padding:2px 4px;text-align:inherit}.editable-cell:hover{background:var(--bg-subtle)}.editable-cell:focus-visible{box-shadow:var(--focus-ring-accent);outline:none}.editable-cell.is-disabled{color:var(--fg-subtle);cursor:default}.editable-cell__value{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.editable-cell__icon{color:var(--fg-subtle);flex-shrink:0;opacity:0;transition:opacity var(--duration-fast)}.editable-cell:focus-visible .editable-cell__icon,.editable-cell:hover .editable-cell__icon{opacity:1}.editable-cell__input{font-size:inherit;height:26px;min-height:0;min-width:80px;padding:0 6px;width:100%}.data-table tfoot td{background:var(--bg-subtle);box-shadow:inset 0 1px 0 var(--border-default);font-weight:600;padding:8px 12px}.table-wrap--scroll .data-table tfoot td{bottom:0;position:sticky;z-index:1}@media (max-width:600px){.table-wrap--cards .table{border:0}.table-wrap--cards .table tfoot,.table-wrap--cards .table thead{display:none}.table-wrap--cards .table tr{background:var(--bg-surface);border:1px solid var(--border-default);border-radius:var(--radius-md);display:block;margin-bottom:var(--space-3);padding:var(--space-3)}.table-wrap--cards .table td{align-items:baseline;border:0;display:flex;gap:var(--space-3);justify-content:space-between;overflow:visible;padding:var(--space-2) 0;text-align:left!important;text-overflow:clip;white-space:normal}.table-wrap--cards .table td:not(:last-child){border-bottom:1px solid var(--border-subtle)}.table-wrap--cards .table td[data-label]:before{color:var(--fg-muted);content:attr(data-label);flex-shrink:0;font-size:var(--text-xs);font-weight:600;letter-spacing:var(--tracking-wide);text-transform:var(--tt-label)}}.table th[aria-sort=ascending] .data-table__sort,.table th[aria-sort=descending] .data-table__sort{color:var(--color-primary);opacity:1}.table td{border-bottom:1px solid var(--border-default);font-size:var(--text-sm);overflow:hidden;padding:8px 12px;text-overflow:ellipsis;vertical-align:middle;white-space:nowrap}.table tr:last-child td{border-bottom:0}.table tbody tr{transition:background var(--duration-fast)}.table tbody tr:hover{background:var(--bg-muted)}.table--compact td,.table--compact th{font-size:var(--text-xs);padding:8px 12px}.table--comfortable th{padding:14px 16px}.table--comfortable td{font-size:var(--text-sm);overflow:visible;padding:14px 16px;text-overflow:clip;white-space:normal}.table__num{font-family:var(--font-mono)}.table td.table__align-right,.table__num{text-align:right}.table td.table__align-center{text-align:center}.table td.table__align-right>*{margin-left:auto}.table td.table__align-center>*{margin-inline:auto}.table-toolbar{align-items:center;background:var(--bg-surface);border-bottom:1px solid var(--border-default);display:flex;flex-wrap:wrap;gap:12px;padding:14px 16px}.table-toolbar>.grow,.table-toolbar>.input,.table-toolbar>.input-wrap,.table-toolbar>.select{flex:1 1 200px;min-width:0}.table-toolbar+.table-wrap{border-top:0;border-top-left-radius:0;border-top-right-radius:0}.table-surface{background:var(--bg-surface);border:1px solid var(--border-default);border-radius:var(--radius-lg);box-shadow:var(--table-elevation,none);overflow:hidden}.table-surface__bar{border-bottom:1px solid var(--border-default)}.table-surface--flush,.table-surface>.table-wrap{border:0;border-radius:0;box-shadow:none}.table-surface .data-table thead tr:first-child th:first-child{border-top-left-radius:0}.table-surface .data-table thead tr:first-child th:last-child{border-top-right-radius:0}.modal-backdrop{align-items:center;animation:fadeIn var(--duration-base) var(--ease-standard);background:var(--backdrop);display:flex;inset:0;justify-content:center;padding:24px;position:fixed;z-index:var(--z-overlay)}.modal{animation:rise var(--duration-base) var(--ease-standard);background:var(--bg-surface);border-radius:var(--radius-lg);box-shadow:var(--shadow-lg);display:flex;flex-direction:column;max-height:calc(100vh - 48px);max-width:520px;overflow:hidden;width:100%}.modal--sm{max-width:380px}.modal--md{max-width:520px}.modal--lg{max-width:760px}.modal__header{align-items:center;border-bottom:1px solid var(--border-default);display:flex;justify-content:space-between;padding:20px 24px}.modal__title{font-family:var(--font-display);font-size:var(--text-xl);font-weight:700;letter-spacing:var(--tracking-tight);margin:0;text-transform:var(--tt-title)}.modal__body{min-width:0;overflow-x:hidden;overflow-y:auto;padding:24px}.modal__footer{background:var(--bg-subtle);border-top:1px solid var(--border-default);display:flex;flex-wrap:wrap;gap:8px;justify-content:flex-end;padding:16px 24px}.modal__close{background:transparent;border:0;border-radius:var(--radius-sm);color:var(--fg-muted);cursor:pointer;padding:4px}.modal__close:hover{background:var(--bg-subtle);color:var(--fg-default)}.drawer-backdrop{animation:fadeIn var(--duration-base) var(--ease-standard);background:var(--backdrop);display:flex;inset:0;justify-content:flex-end;position:fixed;z-index:var(--z-overlay)}.drawer{animation:slideIn var(--duration-base) var(--ease-standard);background:var(--bg-surface);box-shadow:var(--shadow-lg);display:flex;flex-direction:column;height:100%;max-width:480px;width:100%}.drawer-backdrop:has(.drawer--left){justify-content:flex-start}.drawer--left{animation:slideInLeft var(--duration-base) var(--ease-standard)}.drawer__header{align-items:center;border-bottom:1px solid var(--border-default);display:flex;justify-content:space-between;padding:20px 24px}.drawer__title{font-family:var(--font-display);font-size:var(--text-xl);font-weight:700;letter-spacing:var(--tracking-tight);margin:0;text-transform:var(--tt-title)}.drawer__body{flex:1;overflow-y:auto;padding:24px}.drawer__footer{background:var(--bg-subtle);border-top:1px solid var(--border-default);display:flex;flex-wrap:wrap;gap:8px;justify-content:flex-end;padding:16px 24px}.drawer__close{background:transparent;border:0;border-radius:var(--radius-sm);color:var(--fg-muted);cursor:pointer;padding:4px}.drawer__close:hover{background:var(--bg-subtle);color:var(--fg-default)}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes rise{0%{opacity:0;transform:translateY(8px) scale(.98)}to{opacity:1;transform:translateY(0) scale(1)}}@keyframes slideIn{0%{opacity:0;transform:translateX(20px)}to{opacity:1;transform:translateX(0)}}@keyframes slideInLeft{0%{opacity:0;transform:translateX(-20px)}to{opacity:1;transform:translateX(0)}}@keyframes fadeOut{0%{opacity:1}to{opacity:0}}@keyframes sink{0%{opacity:1;transform:translateY(0) scale(1)}to{opacity:0;transform:translateY(8px) scale(.98)}}@keyframes slideOut{0%{opacity:1;transform:translateX(0)}to{opacity:0;transform:translateX(20px)}}@keyframes slideOutLeft{0%{opacity:1;transform:translateX(0)}to{opacity:0;transform:translateX(-20px)}}.modal-backdrop.is-closing{animation:fadeOut var(--duration-exit) var(--ease-standard) forwards}.modal.is-closing{animation:sink var(--duration-exit) var(--ease-standard) forwards}.drawer-backdrop.is-closing{animation:fadeOut var(--duration-exit) var(--ease-standard) forwards}.drawer--right.is-closing{animation:slideOut var(--duration-exit) var(--ease-standard) forwards}.drawer--left.is-closing{animation:slideOutLeft var(--duration-exit) var(--ease-standard) forwards}@keyframes slideInBottom{0%{opacity:0;transform:translateY(100%)}to{opacity:1;transform:translateY(0)}}@keyframes slideOutBottom{0%{opacity:1;transform:translateY(0)}to{opacity:0;transform:translateY(100%)}}@media (max-width:600px){.drawer-backdrop{align-items:flex-end;justify-content:stretch}.drawer-backdrop:has(.drawer--left){justify-content:stretch}.drawer{animation:slideInBottom var(--duration-base) var(--ease-standard);border-radius:var(--radius-lg) var(--radius-lg) 0 0;height:auto;max-height:90vh;max-width:none;width:100%}.drawer--left.is-closing,.drawer--right.is-closing,.drawer.is-closing{animation:slideOutBottom var(--duration-exit) var(--ease-standard) forwards}}.menu-item{align-items:center;background:transparent;border:0;border-radius:var(--radius-sm);color:var(--fg-default);cursor:pointer;display:flex;font-family:var(--font-body);font-size:var(--text-sm);gap:8px;padding:8px 10px;text-align:left;width:100%}.menu-item:hover{background:var(--bg-subtle)}.menu-item--danger{color:var(--color-danger)}.menu-divider{background:var(--border-default);height:1px;margin:4px 0}.toast-stack{bottom:24px;display:flex;flex-direction:column;gap:8px;pointer-events:none;position:fixed;right:24px;z-index:var(--z-toast)}.toast{align-items:center;animation:slideUp var(--duration-base) var(--ease-standard);background:var(--bg-surface);border:1px solid var(--border-default);border-left-width:4px;border-radius:var(--radius-md);box-shadow:var(--shadow-lg);color:var(--fg-default);display:flex;font-family:var(--font-body);font-size:var(--text-sm);gap:12px;max-width:420px;min-width:320px;padding:14px 16px 14px 14px;pointer-events:auto}.toast:has(.toast__desc){align-items:flex-start}.toast:has(.toast__desc) .toast__icon{margin-top:1px}.toast__body{flex:1;min-width:0}.toast__title{color:var(--fg-default);font-weight:700}.toast:has(.toast__desc) .toast__title{margin-bottom:2px}.toast__desc{color:var(--fg-muted);font-size:var(--text-xs);line-height:1.4}.toast__close,.toast__icon{display:inline-flex;flex:none}.toast__close{align-items:center;align-self:flex-start;background:transparent;border:0;border-radius:var(--radius-sm);color:var(--fg-muted);cursor:pointer;justify-content:center;line-height:1;padding:2px 6px}.toast__close:hover{background:var(--bg-subtle);color:var(--fg-default)}.toast--success{border-left-color:var(--color-success)}.toast--success .toast__icon{color:var(--color-success)}.toast--warning{border-left-color:var(--color-warning)}.toast--warning .toast__icon{color:var(--color-warning)}.toast--danger{border-left-color:var(--color-danger)}.toast--danger .toast__icon{color:var(--color-danger)}.toast--info{border-left-color:var(--color-info)}.toast--info .toast__icon{color:var(--color-info)}@keyframes slideUp{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}@keyframes toastSlideOut{0%{opacity:1;transform:translateX(0)}to{opacity:0;transform:translateX(100%)}}.toast.is-closing{animation:toastSlideOut var(--duration-exit) var(--ease-standard) forwards}.empty{background:var(--bg-subtle);border:1px dashed var(--border-strong);border-radius:var(--radius-lg);padding:48px 24px;text-align:center}.empty,.empty__icon{color:var(--fg-muted)}.empty__icon{align-items:center;background:var(--bg-surface);border:1px solid var(--border-default);border-radius:var(--radius-pill);display:inline-flex;height:56px;justify-content:center;margin:0 auto 16px;width:56px}.empty__title{color:var(--fg-default);font-family:var(--font-display);font-size:var(--text-xl);font-weight:700;margin:0 0 8px;text-transform:var(--tt-title)}.empty__desc{color:var(--fg-muted);font-size:var(--text-sm);line-height:1.5;margin:0 0 16px;margin-inline:auto;max-width:360px}.skel{animation:shimmer 1.6s linear infinite;background:linear-gradient(90deg,var(--bg-subtle),var(--bg-muted),var(--bg-subtle));background-size:200% 100%;border-radius:var(--radius-sm);display:block}@keyframes shimmer{0%{background-position:200% 0}to{background-position:-200% 0}}.progress{background:var(--bg-subtle);border-radius:var(--radius-pill);height:8px;overflow:hidden}.progress__bar{background:var(--color-primary);border-radius:inherit;height:100%;transition:width var(--duration-base)}.progress__bar--orange{background:var(--color-secondary)}.progress__bar--success{background:var(--color-success)}.spinner{animation:spin .8s linear infinite;border:2px solid var(--border-default);border-radius:var(--radius-pill);border-top-color:var(--color-primary);display:inline-block;height:20px;width:20px}.spinner--lg{border-width:3px;height:32px;width:32px}.spinner--inverse{border-color:hsla(0,0%,100%,.35);border-top-color:var(--color-white);border-width:2px;height:16px;width:16px}@keyframes spin{to{transform:rotate(1turn)}}.stepper{gap:0;list-style:none;margin:0;padding:0;width:100%}.stepper,.stepper__item{align-items:center;display:flex}.stepper__item{flex:1;gap:12px}.stepper__item:last-child{flex:0 0 auto}.stepper__circle{align-items:center;background:var(--bg-surface);border:2px solid var(--border-strong);border-radius:var(--radius-pill);color:var(--fg-muted);display:inline-flex;flex:none;font-family:var(--font-body);font-size:var(--text-md);font-weight:700;height:36px;justify-content:center;line-height:1;width:36px}.stepper__item.is-current .stepper__circle{background:var(--color-primary);border-color:var(--color-primary);color:var(--color-white)}.stepper__item.is-done .stepper__circle{background:var(--color-success);border-color:var(--color-success);color:var(--color-white)}.stepper__label{color:var(--fg-muted);font-size:var(--text-sm);font-weight:700}.stepper__desc,.stepper__label{font-family:var(--font-body);white-space:nowrap}.stepper__desc{color:var(--fg-subtle);font-size:var(--text-xs)}.stepper__item.is-current .stepper__label,.stepper__item.is-done .stepper__label{color:var(--fg-default)}.stepper__item:not(:last-child):after{background:var(--border-default);content:"";flex:1;height:2px;margin:0 12px}.stepper__item.is-done:not(:last-child):after{background:var(--color-success)}.accordion{border-radius:var(--radius-lg)}.accordion__item{border-bottom:1px solid var(--border-default)}.accordion__item:last-child{border-bottom:0}.upload{background:var(--bg-subtle);border:1.5px dashed var(--border-strong);border-radius:var(--radius-lg);color:var(--fg-muted);cursor:pointer;padding:32px 24px;text-align:center;transition:border-color var(--duration-fast),background var(--duration-fast)}.upload.dragover,.upload:hover{background:var(--color-primary-50);border-color:var(--color-primary);color:var(--color-primary)}.upload__title{color:var(--fg-default);font-family:var(--font-body);font-weight:700;margin:8px 0 4px}.divider{height:1px;width:100%}.divider,.divider--vertical{background:var(--border-default)}.divider--vertical{height:100%;min-height:24px;width:1px}.tpl-nav{background:var(--color-primary);color:var(--color-white);gap:16px;justify-content:space-between;padding:12px 24px}.tpl-nav,.tpl-nav__brand{align-items:center;display:flex}.tpl-nav__brand{gap:12px}.tpl-nav__brand img{height:32px}.tpl-nav__title{font-family:var(--font-display);font-size:var(--text-md);font-weight:700;letter-spacing:var(--tracking-wide);text-transform:var(--tt-title)}.tpl-nav__items{display:flex;gap:4px}.tpl-nav__items a{border-radius:var(--radius-sm);color:hsla(0,0%,100%,.85);font-size:var(--text-sm);font-weight:700;padding:8px 14px}.tpl-nav__items a:hover{background:hsla(0,0%,100%,.1);color:var(--color-white)}.tpl-nav__items a.active{background:hsla(0,0%,100%,.15);color:var(--color-white)}.tpl-sb{background:var(--bg-surface);border-right:1px solid var(--border-default);display:flex;flex:none;flex-direction:column;height:100%;width:240px}.tpl-sb__brand{align-items:center;border-bottom:1px solid var(--border-default);display:flex;gap:10px;padding:18px 20px}.tpl-sb__brand img{height:28px}.tpl-sb__title{font-family:var(--font-display);font-size:var(--text-sm);font-weight:700;text-transform:var(--tt-title)}.tpl-sb__nav{flex:1;overflow-y:auto;padding:12px}.tpl-sb__group{color:var(--fg-subtle);font-family:var(--font-body);font-size:var(--text-2xs);font-weight:700;letter-spacing:var(--tracking-wider);padding:12px 12px 6px;text-transform:var(--tt-label)}.tpl-sb__link{align-items:center;border-radius:var(--radius-sm);color:var(--fg-default);cursor:pointer;display:flex;font-size:var(--text-sm);font-weight:700;gap:10px;padding:8px 12px}.tpl-sb__link:hover{background:var(--bg-subtle)}.tpl-sb__link.active{background:var(--color-primary-100);color:var(--color-primary)}.tpl-sb__link.active:before{background:var(--color-secondary);border-radius:var(--radius-xs);content:"";height:16px;margin-left:-12px;margin-right:9px;width:3px}.divider-h{border-top:1px solid var(--border-default)}.kv{display:grid;font-size:var(--text-sm);gap:8px 16px;grid-template-columns:200px 1fr}.kv__k{color:var(--fg-muted);font-weight:700}.kv__v{color:var(--fg-default)}.list-group{background:var(--bg-surface);border:1px solid var(--border-default);border-radius:var(--radius-lg);list-style:none;margin:0;overflow:hidden;padding:0}.list-group__item--interactive{cursor:pointer}.list-group__item{align-items:center;border-bottom:1px solid var(--border-default);display:flex;gap:12px;padding:14px 18px}.list-group__item:last-child{border-bottom:0}.list-group__item:hover{background:var(--bg-subtle)}.template-frame{background:var(--bg-surface);border:1px solid var(--border-default);border-radius:var(--radius-lg);overflow:hidden}.template-frame__chrome{align-items:center;background:var(--bg-subtle);border-bottom:1px solid var(--border-default);color:var(--fg-subtle);display:flex;font-family:var(--font-mono);font-size:var(--text-xs);gap:10px;padding:8px 14px}.template-frame__chrome:before{background-image:radial-gradient(circle,#ff5f57 5px,transparent 0),radial-gradient(circle,#febc2e 5px,transparent 0),radial-gradient(circle,#28c840 5px,transparent 0);background-position:0 0,20px 0,40px 0;background-repeat:no-repeat;background-size:20px 12px;content:"";display:inline-flex;height:12px;width:56px}.number-input,.template-frame__body{background:var(--bg-surface)}.number-input{align-items:stretch;border:1px solid var(--border-default);border-radius:var(--radius-sm);display:inline-flex;height:40px;overflow:hidden}.number-input.is-invalid{border-color:var(--color-danger)}.number-input.is-disabled{opacity:.55;pointer-events:none}.number-input--block{display:flex;width:100%}.number-input--block .number-input__field{flex:1 1 auto;min-width:0;text-align:left}.number-input__btn{background:var(--bg-subtle);border:none;color:var(--fg-default);cursor:pointer;font-size:var(--text-lg);font-weight:500;width:36px}.number-input__btn:hover{background:var(--color-grey-200)}.number-input__field{background:transparent;border:none;color:var(--fg-default);font-family:var(--font-body);font-size:var(--text-sm);min-width:80px;outline:none;padding:0 12px;text-align:center}.number-input__field::-webkit-inner-spin-button,.number-input__field::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.number-input__field{-moz-appearance:textfield}.number-input__affix{background:var(--bg-subtle);padding:0 8px}.number-input__affix,.pagination{align-items:center;color:var(--fg-muted);display:inline-flex;font-size:var(--text-sm)}.pagination{font-family:var(--font-body);gap:4px}.pagination__info{color:var(--fg-muted);margin-right:12px}.pagination__btn{background:var(--bg-surface);border:1px solid var(--border-default);border-radius:var(--radius-sm);color:var(--fg-default);cursor:pointer;font-family:var(--font-body);font-size:var(--text-sm);height:32px;min-width:32px;padding:0 8px;transition:background var(--duration-fast)}.pagination__btn:hover:not(:disabled){background:var(--bg-subtle)}.pagination__btn:disabled{cursor:not-allowed;opacity:.4}.pagination__btn.is-active{background:var(--color-primary);border-color:var(--color-primary);color:var(--color-white)}.pagination__ellipsis{color:var(--fg-muted);padding:0 4px}.kpi{background:var(--bg-surface);border:1px solid var(--border-default);border-radius:var(--radius-md);display:flex;flex-direction:column;gap:6px;padding:16px 18px}.kpi__head{align-items:center;display:flex;justify-content:space-between}.kpi__label{font-family:var(--font-body);font-size:var(--text-xs);letter-spacing:var(--tracking-wider);text-transform:var(--tt-label)}.kpi__icon,.kpi__label{color:var(--fg-muted)}.kpi__value{color:var(--fg-default);font-family:var(--font-display);font-size:var(--text-3xl);font-weight:700;line-height:1.2}.kpi__foot{align-items:center;display:flex;font-size:var(--text-sm);gap:10px}.kpi__delta{font-weight:600}.kpi__delta--up{color:var(--color-success)}.kpi__delta--down{color:var(--color-danger)}.kpi__delta--flat,.kpi__hint{color:var(--fg-muted)}.combobox{display:inline-block;min-width:220px;position:relative}.combobox__input,.combobox__trigger{background:var(--bg-surface);background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='20' height='20' fill='none' stroke='%235b6173' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E");background-position:right 12px center;background-repeat:no-repeat;border:1px solid var(--border-strong);border-radius:var(--radius-md);color:var(--fg-default);font-family:var(--font-body);font-size:var(--text-md);min-height:var(--field-min-h,44px);padding:var(--field-pad-y,10px) 38px var(--field-pad-y,10px) var(--field-pad-x,14px);width:100%}.combobox__input:focus,.combobox__trigger:focus-visible{box-shadow:var(--focus-ring-accent);outline:none}.combobox.is-invalid .combobox__input,.combobox.is-invalid .combobox__trigger{border-color:var(--color-danger)}.combobox__trigger{-webkit-appearance:none;-moz-appearance:none;appearance:none;cursor:pointer;text-align:left}.combobox__trigger[disabled]{cursor:not-allowed;opacity:.6}.combobox__trigger-placeholder{color:var(--fg-subtle)}.combobox__clear{align-items:center;background:var(--bg-subtle);border:none;border-radius:var(--radius-pill);color:var(--fg-muted);cursor:pointer;display:inline-flex;font-size:var(--text-sm);height:24px;justify-content:center;padding:0;position:absolute;right:8px;top:50%;transform:translateY(-50%);width:24px}.combobox__clear:focus-visible{box-shadow:var(--focus-ring-accent);outline:none}.combobox__list{background:var(--bg-surface);border:1px solid var(--border-default);border-radius:var(--radius-sm);box-shadow:var(--shadow-md);left:0;list-style:none;margin:0;max-height:240px;overflow-y:auto;padding:4px;position:absolute;right:0;top:calc(100% + 4px);z-index:var(--z-tooltip)}.combobox__option{align-items:center;border-radius:var(--radius-sm);cursor:pointer;display:flex;gap:8px;padding:8px 10px}.combobox__option-content{display:flex;flex:1;flex-direction:column;gap:2px;min-width:0}.combobox__option.is-active{background:var(--bg-subtle)}.combobox__option.is-selected{background:var(--color-primary-50);color:var(--color-primary)}.combobox__option.is-disabled{cursor:not-allowed;opacity:.4}.combobox__option-label{color:var(--fg-default);font-size:var(--text-sm)}.combobox__option-desc{color:var(--fg-muted);font-size:var(--text-xs)}.combobox__option-check{color:var(--color-primary);flex-shrink:0}.combobox__empty{color:var(--fg-muted);font-size:var(--text-sm);padding:16px;text-align:center}.combobox__loading{align-items:center;display:flex;gap:8px;justify-content:center}.datepicker{align-items:stretch;background:var(--bg-surface);border:1px solid var(--border-strong);border-radius:var(--radius-md);color:var(--fg-default);display:inline-flex;min-height:var(--field-min-h,44px);position:relative;transition:border-color var(--duration-fast),box-shadow var(--duration-fast);width:-moz-fit-content;width:fit-content}.datepicker:focus-within{border-color:var(--color-primary);box-shadow:var(--focus-ring-brand);outline:none}.datepicker.is-invalid{border-color:var(--color-danger)}.datepicker.is-disabled{background:var(--bg-subtle);cursor:not-allowed}.datepicker.is-disabled .datepicker__input,.datepicker.is-disabled .datepicker__toggle{color:var(--fg-subtle);cursor:not-allowed}.datepicker__input{background:transparent;border:none;color:inherit;flex:1;font-family:var(--font-body);font-size:var(--text-sm);min-width:132px;padding:0 0 0 var(--field-pad-x,14px)}.datepicker__input::-moz-placeholder{color:var(--fg-subtle)}.datepicker__input::placeholder{color:var(--fg-subtle)}.datepicker__input:focus{outline:none}.datepicker__toggle{align-items:center;background:transparent;border:none;color:var(--fg-subtle);cursor:pointer;display:inline-flex;flex-shrink:0;justify-content:center;padding:0;transition:color var(--duration-fast);width:40px}.datepicker__toggle:hover:not(:disabled){color:var(--fg-default)}.datepicker__toggle:focus-visible{outline:none}.datepicker__popover{background:var(--bg-surface);border:1px solid var(--border-default);border-radius:var(--radius-md);box-shadow:var(--shadow-md);left:0;min-width:280px;padding:12px;position:absolute;top:calc(100% + 4px);z-index:var(--z-tooltip)}.datepicker__nav{align-items:center;display:flex;justify-content:space-between;margin-bottom:8px}.datepicker__nav button{background:transparent;border:none;border-radius:var(--radius-sm);color:var(--fg-default);cursor:pointer;height:28px;width:28px}.datepicker__nav button:hover{background:var(--bg-subtle)}.datepicker__title{font-family:var(--font-body);font-size:var(--text-sm);font-weight:600}.datepicker__grid{display:grid;gap:2px;grid-template-columns:repeat(7,1fr)}.datepicker__dow{color:var(--fg-muted);font-size:var(--text-2xs);padding:4px 0;text-align:center;text-transform:var(--tt-label)}.datepicker__day{background:transparent;border:none;border-radius:var(--radius-sm);color:var(--fg-default);cursor:pointer;font-family:var(--font-body);font-size:var(--text-sm);height:32px}.datepicker__day:hover:not(:disabled){background:var(--bg-subtle)}.datepicker__day.is-today{color:var(--color-primary);font-weight:700}.datepicker__day.is-selected{background:var(--color-primary);color:var(--color-white)}.datepicker__day.is-disabled,.datepicker__day:disabled{cursor:not-allowed;opacity:.3}.gridpicker{align-items:stretch;border-radius:var(--radius-sm);display:inline-flex;position:relative;width:-moz-fit-content;width:fit-content}.gridpicker:focus-within{box-shadow:var(--focus-ring-accent);outline:none}.gridpicker__input{background:var(--bg-surface);border:1px solid var(--border-default);border-radius:var(--radius-sm) 0 0 var(--radius-sm);color:var(--fg-default);cursor:pointer;font-family:var(--font-body);font-size:var(--text-sm);height:40px;min-width:160px;padding:0 12px}.gridpicker__input:focus{outline:none}.gridpicker__input::-moz-placeholder{color:var(--fg-subtle)}.gridpicker__input::placeholder{color:var(--fg-subtle)}.gridpicker.is-invalid .gridpicker__input{border-color:var(--color-danger)}.gridpicker.is-disabled{opacity:.6;pointer-events:none}.gridpicker__toggle{align-items:center;background:var(--bg-subtle);border:1px solid var(--border-default);border-left:none;border-radius:0 var(--radius-sm) var(--radius-sm) 0;color:var(--fg-default);cursor:pointer;display:inline-flex;height:40px;justify-content:center;padding:0;width:40px}.gridpicker__toggle:focus-visible{box-shadow:var(--focus-ring-accent);outline:none}.gridpicker__popover{background:var(--bg-surface);border:1px solid var(--border-default);border-radius:var(--radius-md);box-shadow:var(--shadow-md);min-width:260px;padding:12px;position:absolute}.gridpicker__nav{align-items:center;display:flex;justify-content:space-between;margin-bottom:8px}.gridpicker__nav button{background:transparent;border:none;border-radius:var(--radius-sm);color:var(--fg-default);cursor:pointer;height:28px;width:28px}.gridpicker__nav button:hover{background:var(--bg-subtle)}.gridpicker__nav button:focus-visible{box-shadow:var(--focus-ring-accent);outline:none}.gridpicker__title{font-family:var(--font-body);font-size:var(--text-sm);font-weight:600}.gridpicker__grid{display:grid;gap:4px;grid-template-columns:repeat(3,1fr)}.gridpicker__cell{background:transparent;border:none;border-radius:var(--radius-sm);color:var(--fg-default);cursor:pointer;font-family:var(--font-body);font-size:var(--text-sm);min-height:44px;padding:8px 6px}.gridpicker__cell:hover:not(:disabled){background:var(--bg-subtle)}.gridpicker__cell:focus-visible{box-shadow:var(--focus-ring-accent);outline:none}.gridpicker__cell.is-out{color:var(--fg-subtle)}.gridpicker__cell.is-selected{background:var(--color-primary);color:var(--color-white)}.gridpicker__cell:disabled{cursor:not-allowed;opacity:.3}.file-upload{background:var(--bg-subtle);border:2px dashed var(--border-default);border-radius:var(--radius-md);cursor:pointer;padding:28px 20px;text-align:center;transition:background var(--duration-fast),border-color var(--duration-fast)}.file-upload.is-drag,.file-upload:hover{background:var(--color-primary-50);border-color:var(--color-primary)}.file-upload.is-disabled{opacity:.5;pointer-events:none}.file-upload__icon{color:var(--fg-muted);font-size:var(--text-3xl);margin-bottom:8px}.file-upload__title{color:var(--fg-default);font-family:var(--font-body);font-weight:600}.file-upload__hint{color:var(--fg-muted);font-size:var(--text-xs);margin-top:4px}.data-table tr.is-selected{background:var(--color-primary-50)}.data-table tr.is-clickable{cursor:pointer;position:relative}.data-table tr.is-clickable:hover{background:var(--bg-subtle)}.data-table tr.is-clickable:focus-within{box-shadow:inset 0 0 0 2px var(--border-focus)}.data-table__rowlink{background:transparent;border:0;color:transparent;cursor:pointer;font-size:0;inset:0;margin:0;padding:0;position:absolute;z-index:1}.data-table__rowlink:focus,.data-table__rowlink:focus-visible{outline:none}.data-table tr.is-clickable .data-table__cell--above,.data-table tr.is-clickable [data-row-interactive]{position:relative;z-index:2}.data-table__th{align-items:center;display:inline-flex;gap:6px}.data-table__sort{color:var(--fg-muted);font-size:var(--text-2xs)}.accordion{background:var(--bg-surface);border:1px solid var(--border-default);border-radius:var(--radius-md);overflow:hidden}.accordion__item+.accordion__item{border-top:1px solid var(--border-default)}.accordion__trigger{align-items:center;background:transparent;border:none;color:var(--fg-default);cursor:pointer;display:flex;font-family:var(--font-body);font-size:var(--text-sm);font-weight:600;justify-content:space-between;padding:14px 16px;text-align:left;width:100%}.accordion__trigger:hover{background:var(--bg-subtle)}.accordion__chev{color:var(--fg-muted);transition:transform var(--duration-fast)}.accordion__item.is-open .accordion__chev{transform:rotate(180deg)}.accordion__panel{color:var(--fg-default);font-size:var(--text-sm);padding:0 16px 16px}.breadcrumbs{color:var(--fg-muted);font-family:var(--font-body);font-size:var(--text-sm)}.breadcrumbs ol{display:flex;flex-wrap:wrap;gap:6px;list-style:none;margin:0;padding:0}.breadcrumbs a{color:var(--fg-muted);text-decoration:none}.breadcrumbs a:hover{color:var(--color-primary);text-decoration:underline}.breadcrumbs [aria-current=page]{color:var(--fg-default);font-weight:600}.breadcrumbs__sep{color:var(--fg-subtle);margin:0 2px}.slider{align-items:center;display:inline-flex;gap:12px;width:100%}.slider__input{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:transparent;height:22px;outline:none;width:100%}.slider__input::-webkit-slider-runnable-track{background:linear-gradient(to right,var(--color-primary) 0,var(--color-primary) var(--pct,0),var(--bg-muted) var(--pct,0),var(--bg-muted) 100%);border-radius:var(--radius-pill);height:6px}.slider__input::-moz-range-track{background:var(--bg-muted);border-radius:var(--radius-pill);height:6px}.slider__input::-moz-range-progress{background:var(--color-primary);border-radius:var(--radius-pill);height:6px}.slider__input::-webkit-slider-thumb{-webkit-appearance:none;appearance:none;background:var(--bg-surface);border:2px solid var(--color-primary);border-radius:var(--radius-pill);box-shadow:var(--shadow-xs);cursor:pointer;height:18px;margin-top:-6px;width:18px}.slider__input::-moz-range-thumb{background:var(--bg-surface);border:2px solid var(--color-primary);border-radius:var(--radius-pill);cursor:pointer;height:18px;width:18px}.slider__input:focus-visible::-webkit-slider-thumb{box-shadow:0 0 0 4px rgba(0,47,135,.18)}.slider__value{color:var(--fg-default);font-family:var(--font-mono);font-size:var(--text-sm);min-width:48px;text-align:right}.progress--sm{height:4px}.progress__bar--blue{background:var(--color-primary)}.progress__bar--warning{background:var(--color-warning)}.progress__bar--danger{background:var(--color-danger)}.progress__label{color:var(--fg-muted);display:inline-block;font-family:var(--font-mono);font-size:var(--text-xs);margin-left:8px}.progress-circle{display:inline-block;position:relative}.progress-circle__label{align-items:center;color:var(--fg-default);display:flex;font-family:var(--font-display);font-size:var(--text-sm);font-weight:700;inset:0;justify-content:center;position:absolute}.tag-input{align-items:center;background:var(--bg-surface);border:1px solid var(--border-strong);border-radius:var(--radius-md);cursor:text;display:flex;flex-wrap:wrap;gap:6px;min-height:44px;padding:6px 8px}.tag-input:focus-within{border-color:var(--color-primary);box-shadow:var(--focus-ring-brand)}.tag-input.is-disabled{opacity:.55;pointer-events:none}.tag-input__tag{align-items:center;background:var(--color-primary-100);border:1px solid var(--color-primary-200);border-radius:var(--radius-pill);color:var(--color-primary-800);display:inline-flex;font-family:var(--font-body);font-size:var(--text-xs);font-weight:600;gap:4px;padding:2px 4px 2px 10px}.tag-input__tag button{align-items:center;background:transparent;border:0;border-radius:var(--radius-pill);color:inherit;cursor:pointer;display:inline-flex;height:18px;justify-content:center;line-height:1;width:18px}.tag-input__tag button:hover{background:rgba(0,0,0,.08)}.tag-input__field{background:transparent;border:0;color:var(--fg-default);flex:1;font-family:var(--font-body);font-size:var(--text-sm);min-width:80px;outline:none;padding:4px 6px}.phone-input{align-items:stretch;background:var(--bg-surface);border:1px solid var(--border-strong);border-radius:var(--radius-md);display:inline-flex;height:44px;overflow:hidden;width:100%}.phone-input:focus-within{border-color:var(--color-primary);box-shadow:var(--focus-ring-brand)}.phone-input.is-invalid{border-color:var(--color-danger)}.phone-input.is-disabled{opacity:.55;pointer-events:none}.phone-input__prefix{align-items:center;background:var(--bg-subtle);border-right:1px solid var(--border-default);color:var(--fg-muted);display:inline-flex;font-family:var(--font-mono);font-size:var(--text-sm);padding:0 12px}.phone-input__field{background:transparent;border:0;color:var(--fg-default);flex:1;font-family:var(--font-body);font-size:var(--text-sm);outline:none;padding:0 12px}.option-group{display:flex;gap:12px}.option-group--vertical{flex-direction:column}.option-group--horizontal{flex-direction:row;flex-wrap:wrap}.option-row{align-items:flex-start;background:var(--bg-surface);border:1px solid var(--border-default);border-radius:var(--radius-md);cursor:pointer;display:flex;gap:10px;padding:10px 12px;transition:border-color var(--duration-fast),background var(--duration-fast)}.option-row:hover{background:var(--bg-subtle);border-color:var(--border-strong)}.option-row.is-disabled{cursor:not-allowed;opacity:.55}.option-row input{accent-color:var(--color-primary);margin-top:3px}.option-row__body{display:flex;flex-direction:column;gap:2px}.option-row__label{color:var(--fg-default);font-family:var(--font-body);font-size:var(--text-sm);font-weight:600}.option-row__desc{color:var(--fg-muted);font-size:var(--text-xs)}.avatar{background:var(--color-primary-100);color:var(--color-primary)}.surface-inverse .avatar,[data-tone=inverse] .avatar{background:color-mix(in srgb,var(--fg-on-brand) 16%,transparent);color:var(--fg-on-brand)}.avatar--circle{border-radius:var(--radius-pill)}.avatar--square{border-radius:var(--radius-md)}.avatar__initials{font-family:var(--font-body);font-weight:700;letter-spacing:.02em;line-height:1;transform:translateY(.06em)}.avatar__status{border:2px solid var(--bg-surface);border-radius:var(--radius-pill);bottom:4%;box-sizing:border-box;height:34%;min-height:10px;min-width:10px;position:absolute;right:4%;width:34%}.avatar__status--online{background:var(--color-success)}.avatar__status--offline{background:var(--color-gray-400)}.avatar__status--busy{background:var(--color-danger)}.avatar-group{align-items:center;display:inline-flex}.avatar-group .avatar{border:2px solid var(--bg-surface)}.avatar.avatar--overflow{background:var(--bg-muted);color:var(--fg-default);font-size:var(--text-xs)}.is-floating.is-floating{z-index:var(--z-floating)}.menu{display:inline-block;position:relative}.menu__panel{background:var(--bg-surface);border:1px solid var(--border-default);border-radius:var(--radius-md);box-shadow:var(--shadow-md);display:flex;flex-direction:column;gap:2px;max-width:320px;min-width:220px;padding:6px;z-index:var(--z-floating)}.menu__sep{background:var(--border-default);height:1px;margin:4px 0}.menu__label{color:var(--fg-subtle);font-size:var(--text-2xs);font-weight:700;letter-spacing:var(--tracking-wider);padding:6px 10px;text-transform:var(--tt-label)}.menu__item,.menu__label{font-family:var(--font-body)}.menu__item{align-items:flex-start;background:transparent;border:0;border-radius:var(--radius-sm);color:var(--fg-default);cursor:pointer;display:flex;font-size:var(--text-sm);gap:10px;padding:8px 10px;text-align:left;width:100%}.menu__item:disabled{cursor:not-allowed;opacity:.5}.menu__item.is-active{background:var(--bg-subtle)}.menu__item.is-destructive{color:var(--color-danger)}.menu__icon{align-items:center;display:inline-flex;flex:none;height:16px;justify-content:center;margin-top:1px;width:16px}.menu__body{display:flex;flex:1;flex-direction:column;gap:2px}.menu__label-row{align-items:center;display:flex;gap:12px;justify-content:space-between}.menu__desc{color:var(--fg-muted);font-size:var(--text-xs)}.menu__kbd{background:var(--bg-subtle);border:1px solid var(--border-default);border-radius:var(--radius-sm);color:var(--fg-muted);font-family:var(--font-mono);font-size:var(--text-2xs);padding:2px 6px}.stat{display:flex;flex-direction:column;gap:4px}.stat--center{align-items:center;text-align:center}.stat__label{color:var(--fg-muted);font-family:var(--font-body);font-size:var(--text-xs);font-weight:700;letter-spacing:var(--tracking-wider);text-transform:var(--tt-label)}.stat__value{color:var(--fg-default);font-family:var(--font-display);font-size:var(--text-3xl);font-weight:700;line-height:1.1}.stat__foot{align-items:center;display:inline-flex;font-size:var(--text-xs);gap:8px}.stat__trend--up{color:var(--color-success);font-weight:700}.stat__trend--down{color:var(--color-danger);font-weight:700}.stat__trend--flat{font-weight:700}.stat__hint,.stat__trend--flat{color:var(--fg-muted)}.multicombo{min-width:240px;position:relative}.multicombo__chips{align-items:center;background:var(--bg-surface);border:1px solid var(--border-strong);border-radius:var(--radius-md);cursor:text;display:flex;flex-wrap:wrap;gap:6px;min-height:44px;padding:6px 8px}.multicombo:focus-within .multicombo__chips,.multicombo__chips:focus-within{border-color:var(--color-primary);box-shadow:var(--focus-ring-brand)}.multicombo.is-invalid .multicombo__chips{border-color:var(--color-danger)}.multicombo.is-disabled{opacity:.55;pointer-events:none}.multicombo__chip{align-items:center;background:var(--color-primary-100);border:1px solid var(--color-primary-200);border-radius:var(--radius-pill);color:var(--color-primary-800);display:inline-flex;font-family:var(--font-body);font-size:var(--text-xs);font-weight:600;gap:4px;padding:2px 4px 2px 10px}.multicombo__chip--more{background:var(--bg-muted);border-color:var(--border-default);color:var(--fg-muted);padding:2px 10px}.multicombo__chip button{align-items:center;background:transparent;border:0;border-radius:var(--radius-pill);color:inherit;cursor:pointer;display:inline-flex;height:18px;justify-content:center;line-height:1;width:18px}.multicombo__chip button:hover{background:rgba(0,0,0,.08)}.multicombo__input{background:transparent;border:0;color:var(--fg-default);flex:1;font-family:var(--font-body);font-size:var(--text-sm);min-width:80px;outline:none;padding:4px 6px}.multicombo__list{background:var(--bg-surface);border:1px solid var(--border-default);border-radius:var(--radius-md);box-shadow:var(--shadow-md);left:0;list-style:none;margin:0;max-height:280px;overflow:auto;padding:4px;position:absolute;right:0;top:calc(100% + 4px);z-index:40}.multicombo__option{align-items:center;border-radius:var(--radius-sm);color:var(--fg-default);cursor:pointer;display:flex;font-family:var(--font-body);font-size:var(--text-sm);gap:10px;padding:8px 10px}.multicombo__option:has(.multicombo__option-desc){align-items:flex-start}.multicombo__option.is-active{background:var(--bg-subtle)}.multicombo__option.is-selected{color:var(--color-primary);font-weight:600}.multicombo__option.is-disabled{opacity:.5;pointer-events:none}.multicombo__check{align-items:center;border:1.5px solid var(--border-strong);border-radius:var(--radius-sm);color:var(--bg-surface);display:inline-flex;flex:none;font-size:var(--text-xs);height:18px;justify-content:center;width:18px}.multicombo__option:has(.multicombo__option-desc) .multicombo__check{margin-top:1px}.multicombo__check.is-checked{background:var(--color-primary);border-color:var(--color-primary)}.multicombo__option-body{display:flex;flex-direction:column;gap:2px}.multicombo__option-label{color:var(--fg-default);font-size:var(--text-sm)}.multicombo__option-desc{color:var(--fg-muted);font-size:var(--text-xs)}.multicombo__empty{color:var(--fg-muted);font-size:var(--text-sm);padding:12px;text-align:center}.daterange{display:inline-block;position:relative}.daterange__trigger{align-items:center;background:var(--bg-surface);border:1px solid var(--border-strong);border-radius:var(--radius-md);color:var(--fg-default);cursor:pointer;display:inline-flex;font-family:var(--font-body);font-size:var(--text-sm);gap:8px;height:44px;padding:0 14px}.daterange__trigger:focus-visible{box-shadow:var(--focus-ring-accent);outline:none}.daterange.is-invalid .daterange__trigger{border-color:var(--color-danger)}.daterange.is-disabled{opacity:.55;pointer-events:none}.daterange__icon{color:var(--fg-muted)}.daterange__popover{background:var(--bg-surface);border:1px solid var(--border-default);border-radius:var(--radius-md);box-shadow:var(--shadow-lg);display:flex;left:0;min-width:560px;position:absolute;top:calc(100% + 6px);z-index:var(--z-tooltip)}.daterange__presets{border-right:1px solid var(--border-default);display:flex;flex-direction:column;gap:2px;list-style:none;margin:0;min-width:140px;padding:8px}.daterange__presets button{background:transparent;border:0;border-radius:var(--radius-sm);color:var(--fg-default);cursor:pointer;font-family:var(--font-body);font-size:var(--text-sm);padding:8px 10px;text-align:left;width:100%}.daterange__presets button:hover{background:var(--bg-subtle)}.daterange__panes{flex:1;padding:12px}.daterange__nav{align-items:center;display:grid;grid-template-columns:auto 1fr auto;margin-bottom:8px}.daterange__nav button{background:transparent;border:0;border-radius:var(--radius-sm);color:var(--fg-default);cursor:pointer;font-size:var(--text-lg);height:28px;width:28px}.daterange__nav button:hover{background:var(--bg-subtle)}.daterange__months{display:grid;gap:16px;grid-template-columns:1fr 1fr}.daterange__month{font-family:var(--font-body)}.daterange__title{font-family:var(--font-display);font-size:var(--text-sm);font-weight:700;letter-spacing:var(--tracking-wide);margin-bottom:8px;text-align:center;text-transform:var(--tt-title)}.daterange__grid{display:grid;gap:2px;grid-template-columns:repeat(7,1fr)}.daterange__dow{color:var(--fg-subtle);font-family:var(--font-body);font-size:.625rem;font-weight:700;letter-spacing:var(--tracking-wider);padding:4px 0;text-align:center;text-transform:var(--tt-label)}.daterange__day{background:transparent;border:0;border-radius:var(--radius-sm);color:var(--fg-default);cursor:pointer;font-family:var(--font-body);font-size:var(--text-sm);height:32px}.daterange__day:hover:not(:disabled){background:var(--bg-subtle)}.daterange__day.is-today{color:var(--color-primary);font-weight:700}.daterange__day.is-range{background:var(--color-primary-100);border-radius:var(--radius-none);color:var(--color-primary-800)}.daterange__day.is-selected{background:var(--color-primary);color:var(--color-white);font-weight:700}.daterange__day.is-disabled{opacity:.3;pointer-events:none}.daterange__actions{border-top:1px solid var(--border-default);display:flex;gap:8px;justify-content:flex-end;margin-top:12px;padding-top:12px}.daterange__apply,.daterange__clear{background:transparent;border:1px solid var(--border-default);border-radius:var(--radius-sm);color:var(--fg-default);cursor:pointer;font-family:var(--font-body);font-size:var(--text-sm);font-weight:700;padding:6px 14px}.daterange__apply{background:var(--color-primary);border-color:var(--color-primary);color:var(--color-white)}.daterange__apply:disabled{cursor:not-allowed;opacity:.5}.cmdk__overlay{align-items:flex-start;animation:fadeIn var(--duration-base) var(--ease-standard);background:var(--backdrop);display:flex;inset:0;justify-content:center;padding-top:12vh;position:fixed;z-index:var(--z-toast)}.cmdk__panel{animation:rise var(--duration-base) var(--ease-standard);background:var(--bg-surface);border:1px solid var(--border-default);border-radius:var(--radius-lg);box-shadow:var(--shadow-lg);display:flex;flex-direction:column;max-width:560px;overflow:hidden;width:100%}.cmdk__searchbar{align-items:center;border-bottom:1px solid var(--border-default);display:flex;gap:10px;padding:14px 16px}.cmdk__icon{color:var(--fg-muted);font-size:var(--text-lg)}.cmdk__input{background:transparent;border:0;color:var(--fg-default);flex:1;font-family:var(--font-body);font-size:var(--text-md);outline:none}.cmdk__esc{background:var(--bg-subtle);border:1px solid var(--border-default);border-radius:var(--radius-sm);color:var(--fg-muted);font-family:var(--font-mono);font-size:var(--text-2xs);padding:2px 6px}.cmdk__list{list-style:none;margin:0;max-height:60vh;overflow:auto;padding:6px}.cmdk__group{color:var(--fg-subtle);font-size:var(--text-2xs);font-weight:700;letter-spacing:var(--tracking-wider);padding:8px 10px 4px;text-transform:var(--tt-label)}.cmdk__group,.cmdk__item{font-family:var(--font-body)}.cmdk__item{align-items:center;border-radius:var(--radius-sm);color:var(--fg-default);cursor:pointer;display:flex;font-size:var(--text-sm);gap:12px;padding:10px 12px}.cmdk__item.is-active{background:var(--bg-subtle)}.cmdk__item-icon{color:var(--fg-muted);flex:none;width:18px}.cmdk__item-body{display:flex;flex:1;flex-direction:column;gap:2px}.cmdk__item-label{color:var(--fg-default);font-size:var(--text-sm);font-weight:500}.cmdk__item-desc{color:var(--fg-muted);font-size:var(--text-xs)}.cmdk__kbd{background:var(--bg-default);border:1px solid var(--border-default);border-radius:var(--radius-sm);color:var(--fg-muted);font-family:var(--font-mono);font-size:var(--text-2xs);padding:2px 6px}.cmdk__empty{color:var(--fg-muted);font-size:var(--text-sm);padding:24px;text-align:center}.appshell{background:var(--bg-canvas);display:grid}.appshell__sidebar{background:var(--bg-surface);border-right:1px solid var(--border-default);display:flex;flex-direction:column;overflow:hidden}.appshell__nav{flex:1;overflow:auto;padding:12px 8px}.appshell__navsection{padding:4px 0 12px}.appshell__navlabel-section{color:var(--fg-subtle);font-family:var(--font-body);font-size:var(--text-2xs);font-weight:700;letter-spacing:var(--tracking-wider);padding:10px 12px 4px;text-transform:var(--tt-label)}.appshell.is-collapsed .appshell__navlabel-section{display:none}.appshell__nav ul{list-style:none;margin:0;padding:0}.appshell__navitem{align-items:center;border-bottom:0;border-radius:var(--radius-sm);color:var(--fg-default);display:flex;font-family:var(--font-body);font-size:var(--text-sm);font-weight:600;gap:12px;margin:1px 4px;padding:10px 12px;position:relative;text-decoration:none}.appshell__navitem:hover{background:var(--bg-subtle);border-bottom:0;color:var(--fg-default)}.appshell__navitem.is-active{background:var(--color-primary-100);color:var(--color-primary)}.appshell__navitem.is-active:before{background:var(--color-secondary);border-radius:var(--radius-xs);bottom:8px;content:"";left:-4px;position:absolute;top:8px;width:3px}.appshell__navicon{align-items:center;color:var(--fg-muted);display:inline-flex;flex:none;justify-content:center;width:20px}.appshell__navitem.is-active .appshell__navicon{color:var(--color-primary)}.appshell__navlabel{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.appshell__navbadge,.appshell__navlabel{transition:opacity var(--duration-fast,.12s) ease,max-width var(--duration-base,.2s) var(--ease-standard,cubic-bezier(.22,1,.36,1))}.appshell__navbadge{background:var(--color-secondary-100);border-radius:var(--radius-pill);color:var(--color-secondary-800);font-size:var(--text-2xs);font-weight:700;padding:1px 8px}.appshell.is-collapsed .appshell__navbadge,.appshell.is-collapsed .appshell__navlabel{margin:0;max-width:0;opacity:0;overflow:hidden;padding:0;pointer-events:none}.appshell.is-collapsed .appshell__navchildren{display:none}.appshell__navlabel-section{transition:opacity var(--duration-fast,.12s) ease,visibility 0s linear 0s}.appshell.is-collapsed .appshell__navlabel-section{height:0;opacity:0;overflow:hidden;padding:0;pointer-events:none;transition:opacity var(--duration-fast,.12s) ease,visibility 0s linear var(--duration-fast,.12s);visibility:hidden}.appshell__navchildren{padding-left:28px}.appshell__navitem--depth-1{font-size:var(--text-sm);font-weight:500;padding:8px 10px}.appshell--brand .appshell__sidebar{background:var(--color-primary);border-right-color:transparent;color:var(--color-white)}.appshell--brand .appshell__navlabel-section{color:hsla(0,0%,100%,.55)}.appshell--brand .appshell__navitem{color:hsla(0,0%,100%,.85)}.appshell--brand .appshell__navitem:hover{background:hsla(0,0%,100%,.08);color:var(--color-white)}.appshell--brand .appshell__navitem.is-active{background:hsla(0,0%,100%,.16);color:var(--color-white)}.appshell--brand .appshell__navitem.is-active:before{background:var(--color-secondary)}.appshell--brand .appshell__navicon{color:hsla(0,0%,100%,.7)}.appshell--brand .appshell__navitem.is-active .appshell__navicon,.appshell--brand .appshell__navitem:hover .appshell__navicon{color:var(--color-white)}.appshell--brand .appshell__navbadge{background:var(--color-secondary);color:var(--color-white)}.appshell--brand .appshell__sidebar-foot{border-top-color:hsla(0,0%,100%,.12)}.appshell.appshell--header-top{grid-template-columns:1fr;grid-template-rows:auto 1fr;height:100vh;height:100dvh;--appshell-header-height:56px;--appshell-header-pad-y:8px;--appshell-header-pad-x:16px;margin-left:calc(50% - 50vw);width:100vw}.appshell--header-top .appshell__header{align-items:center;background:var(--bg-surface);border-bottom:1px solid var(--border-default);color:var(--fg-default);display:grid;gap:12px;grid-template-columns:1fr auto 1fr;min-height:var(--appshell-header-height);padding:var(--appshell-header-pad-y,8px) var(--appshell-header-pad-x,16px)}.appshell--header-top .appshell__header-left{align-items:center;display:flex;gap:10px;justify-self:start}.appshell--header-top .appshell__header-center{align-items:center;display:flex;justify-self:center}.appshell--header-top .appshell__header-right{align-items:center;display:flex;gap:10px;justify-self:end}.appshell__menu-toggle{align-items:center;background:transparent;border:0;border-radius:var(--radius-sm,8px);color:inherit;cursor:pointer;display:inline-flex;height:36px;justify-content:center;padding:0;transition:background-color var(--duration-fast) var(--ease-standard);width:36px}.appshell__menu-toggle:hover{background:var(--bg-subtle)}.appshell__menu-toggle:focus-visible{box-shadow:var(--focus-ring);outline:none}.appshell--header-brand .appshell__menu-toggle:hover{background:hsla(0,0%,100%,.12)}.appshell--header-top .appshell__body{display:grid;grid-template-columns:240px 1fr;min-height:0;position:relative;transition:grid-template-columns var(--duration-base) var(--ease-standard)}@media (min-width:901px){.appshell--header-top.is-collapsed .appshell__body{grid-template-columns:0 1fr}.appshell--header-top.appshell--rail.is-collapsed .appshell__body{grid-template-columns:72px 1fr}}.appshell--header-top.appshell--no-nav .appshell__body{grid-template-columns:1fr}.appshell--header-top .appshell__sidebar{height:auto;overflow:hidden}.appshell--header-top .appshell__content{min-height:0;overflow-y:auto}@media (min-width:901px){.appshell--header-top:not(.appshell--rail) .appshell__body{position:relative;transition:none}.appshell--header-top:not(.appshell--rail).is-collapsed .appshell__sidebar{inset:0 auto 0 0;position:absolute;transform:translateX(-100%);width:240px}.appshell--header-top:not(.appshell--rail) .appshell__sidebar{transition:transform var(--duration-base) var(--ease-standard)}.appshell--header-top:not(.appshell--no-nav) .appshell__content{grid-column:2}}.appshell--header-top.appshell--header-brand .appshell__header{background:var(--color-primary);border-bottom:1px solid hsla(0,0%,100%,.12);color:var(--color-white)}@media (max-width:900px){.appshell--header-top .appshell__header{gap:8px;grid-template-columns:auto 1fr auto;padding:var(--appshell-header-pad-y,8px) var(--appshell-header-pad-x,12px)}.appshell--header-top .appshell__body{grid-template-columns:1fr}.appshell--header-top .appshell__sidebar{bottom:0;left:0;overflow:auto;position:absolute;top:0;transform:translateX(-100%);transition:transform var(--duration-base) var(--ease-standard);width:min(280px,85vw);z-index:40}.appshell--brand.appshell--header-top .appshell__sidebar{border-right-color:hsla(0,0%,100%,.12)}.appshell--header-top.is-mobile-open .appshell__sidebar{transform:translateX(0)}.appshell--header-top.is-mobile-open .appshell__scrim{background:var(--backdrop);display:block;inset:0;position:absolute;z-index:35}}.appshell__sidebar-foot{align-items:center;border-top:1px solid var(--border-default);display:flex;gap:8px;justify-content:space-between;padding:8px}.appshell__content{min-height:0;padding:24px}.appshell__scrim{display:none}@media (max-width:768px){.appshell__content{padding:16px}.combobox{min-width:min(220px,100%)}.multicombo{min-width:min(240px,100%)}.datepicker__input{min-width:min(160px,100%)}.number-input{min-width:min(140px,100%)}}@media (max-width:600px){.daterange__popover{flex-direction:column;min-width:0}.daterange__months{grid-template-columns:1fr}.daterange__presets{display:none}.toast-stack{left:0;padding:0 12px;right:0}.toast{max-width:none;min-width:0;width:100%}}.page-header{margin-bottom:24px}.page-header__crumbs ol{align-items:center;color:var(--fg-muted);display:flex;flex-wrap:wrap;font-family:var(--font-body);font-size:var(--text-sm);gap:6px;list-style:none;margin:0;padding:0}.page-header__crumbs a{border:0;color:var(--fg-muted)}.page-header__crumbs a:hover{color:var(--color-primary)}.page-header__crumb-sep{color:var(--fg-subtle)}.page-header__row{align-items:flex-end;display:flex;flex-wrap:wrap;gap:16px;justify-content:space-between;margin-top:8px}.page-header__title-wrap{display:flex;flex-direction:column;gap:4px;min-width:0}.page-header__title{color:var(--fg-default);font-family:var(--font-display);font-size:clamp(var(--text-xl),3vw + .75rem,var(--text-3xl));font-weight:700;letter-spacing:var(--tracking-tight);line-height:1.1;margin:0;text-transform:var(--tt-title)}.page-header__desc{color:var(--fg-muted);font-size:var(--text-sm);margin:0}.page-header__actions{display:flex;flex-wrap:wrap;gap:8px}.page-header__meta{margin-top:12px}.chart{position:relative;width:100%}.chart--donut{align-items:stretch;display:flex;flex-direction:column;gap:var(--space-3)}.chart__donut-area{position:relative;width:100%}.chart__center{align-items:center;font-size:var(--text-base);inset:0;pointer-events:none;position:absolute;text-align:center}.chart__center,.chart__legend{color:var(--fg-default);display:flex;justify-content:center}.chart__legend{flex-wrap:wrap;font-size:var(--text-xs);gap:var(--space-2) var(--space-4);list-style:none;margin:0;padding:0}.chart__legend-item{align-items:center;display:inline-flex;gap:var(--space-2)}.chart__legend-swatch{border-radius:var(--radius-xs);flex:none;height:10px;width:10px}.chart__legend-label{font-weight:500}.sparkline{display:inline-block;vertical-align:middle}.user-cell{align-items:center;display:inline-flex;gap:var(--space-3);min-width:0}.user-cell__body{display:flex;flex-direction:column;line-height:1.3;min-width:0}.user-cell__name{color:var(--fg-default);font-size:var(--text-sm);font-weight:700}.user-cell__meta,.user-cell__name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.user-cell__meta{color:var(--fg-muted);font-size:var(--text-xs)}.status-indicator{align-items:center;color:var(--fg-default);display:inline-flex;font-size:var(--text-sm);gap:var(--space-2)}.status-indicator__dot{border-radius:var(--radius-pill);flex:none;height:8px;width:8px}.status-indicator__dot--success{background:var(--color-success)}.status-indicator__dot--warning{background:var(--color-warning)}.status-indicator__dot--danger{background:var(--color-danger)}.status-indicator__dot--info{background:var(--color-info)}.status-indicator__dot--neutral{background:var(--color-gray-400)}.status-indicator__dot.is-pulsing{animation:status-pulse 1.6s ease-out infinite}@keyframes status-pulse{0%{box-shadow:0 0 0 0 currentColor}70%{box-shadow:0 0 0 8px transparent}to{box-shadow:0 0 0 0 transparent}}.timeline{display:flex;flex-direction:column;gap:var(--space-4);list-style:none;margin:0;padding:0}.timeline__item{display:flex;gap:var(--space-3);position:relative}.timeline__item:not(:last-child):before{background:var(--border-default);bottom:calc(var(--space-4)*-1 - 4px);content:"";left:11px;position:absolute;top:24px;width:2px}.timeline__marker{align-items:center;background:var(--bg-surface);border:2px solid var(--border-default);border-radius:var(--radius-pill);box-sizing:border-box;color:var(--fg-muted);display:inline-flex;flex:none;height:24px;justify-content:center;margin-top:2px;width:24px;z-index:1}.timeline__marker--success{border-color:var(--color-success);color:var(--color-success)}.timeline__marker--warning{border-color:var(--color-warning);color:var(--color-warning)}.timeline__marker--danger{border-color:var(--color-danger);color:var(--color-danger)}.timeline__marker--info{border-color:var(--color-info);color:var(--color-info)}.timeline__body{flex:1;min-width:0}.timeline__title{color:var(--fg-default);font-size:var(--text-sm);font-weight:700}.timeline__meta{color:var(--fg-muted);font-size:var(--text-xs);margin-top:2px}.timeline__content{color:var(--fg-default);font-size:var(--text-sm);margin-top:var(--space-2)}.timeline__title-row{align-items:baseline;display:flex;gap:var(--space-3);justify-content:space-between}.timeline__right{align-items:center;display:inline-flex;flex:none;gap:6px}.timeline__item{--timeline-tone:var(--border-default)}.timeline__item:has(>.timeline__marker--success){--timeline-tone:var(--color-success)}.timeline__item:has(>.timeline__marker--info){--timeline-tone:var(--color-info)}.timeline__item:has(>.timeline__marker--warning){--timeline-tone:var(--color-warning)}.timeline__item:has(>.timeline__marker--danger){--timeline-tone:var(--color-danger)}.timeline__item--done .timeline__marker{background:var(--timeline-tone);border-color:var(--timeline-tone);color:var(--color-white)}.timeline__item--done.timeline__item:not(:last-child):before{background:var(--timeline-tone)}.timeline__item--current .timeline__marker{animation:timeline-pulse 1.8s ease-in-out infinite;background:var(--bg-surface);border-color:var(--timeline-tone);box-shadow:0 0 0 4px color-mix(in srgb,var(--timeline-tone) 24%,transparent);color:var(--timeline-tone)}.timeline__item--current.timeline__item:not(:last-child):before{background:var(--timeline-tone)}@keyframes timeline-pulse{0%,to{box-shadow:0 0 0 4px color-mix(in srgb,var(--timeline-tone) 24%,transparent)}50%{box-shadow:0 0 0 8px color-mix(in srgb,var(--timeline-tone) 12%,transparent)}}@media (prefers-reduced-motion:reduce){.timeline__item--current .timeline__marker{animation:none}}.timeline__item--pending .timeline__marker{background:var(--bg-surface);border-color:var(--border-default);color:var(--fg-muted)}.timeline__item--pending.timeline__item:not(:last-child):before{background:repeating-linear-gradient(to bottom,var(--border-default) 0 4px,transparent 4px 8px)}.timeline__item--pending .timeline__meta,.timeline__item--pending .timeline__title{color:var(--fg-muted)}.timeline__marker--milestone{background:var(--timeline-tone);border-color:var(--timeline-tone);box-shadow:0 0 0 4px color-mix(in srgb,var(--timeline-tone) 14%,transparent);color:var(--color-white);height:32px;margin-left:-4px;width:32px}.timeline__item:has(>.timeline__marker--milestone):not(:last-child):before{top:32px}.timeline__item--pending .timeline__marker--milestone{background:var(--bg-surface);border-color:var(--border-default);box-shadow:none;color:var(--fg-muted)}.timeline--compact{gap:var(--space-3)}.timeline--compact .timeline__item{gap:var(--space-2)}.timeline--compact .timeline__marker{border-width:2px;height:16px;margin-top:3px;width:16px}.timeline--compact .timeline__marker>svg{height:10px;width:10px}.timeline--compact .timeline__marker--milestone{margin-left:0}.timeline--compact .timeline__item:not(:last-child):before{left:7px;top:17px}.timeline--compact .timeline__title{font-size:var(--text-xs);font-weight:600}.timeline--compact .timeline__meta{font-size:11px}.timeline--compact .timeline__content{font-size:var(--text-xs);margin-top:4px}.tree{font-family:var(--font-body);font-size:var(--text-sm);margin:0;padding:0}.tree,.tree__node{list-style:none}.tree__row{align-items:center;border-radius:var(--radius-sm);color:var(--fg-default);cursor:pointer;display:flex;gap:var(--space-2);padding:var(--space-2) var(--space-2);transition:background var(--duration-fast)}.tree__row:hover{background:var(--bg-subtle)}.tree__row:focus-visible{box-shadow:var(--focus-ring-accent);outline:none}.tree__row.is-selected{background:var(--color-primary-100);color:var(--color-primary);font-weight:700}.tree__chev{align-items:center;background:transparent;border:0;border-radius:var(--radius-sm);color:var(--fg-muted);cursor:pointer;display:inline-flex;flex:none;height:18px;justify-content:center;width:18px}.tree__chev:hover{background:var(--bg-muted);color:var(--fg-default)}.tree__chev--placeholder{cursor:default}.tree__icon{color:var(--fg-muted);display:inline-flex}.tree__label{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tree__meta{color:var(--fg-subtle);font-size:var(--text-xs)}.tree__children{list-style:none;margin:0;padding:0}.calendar{background:var(--bg-surface);border:1px solid var(--border-default);border-radius:var(--radius-lg);font-family:var(--font-body);overflow:hidden}.calendar__head{align-items:center;border-bottom:1px solid var(--border-default);display:flex;justify-content:space-between;padding:var(--space-3) var(--space-4)}.calendar__title{color:var(--fg-default);font-family:var(--font-display);font-size:var(--text-md);font-weight:700;text-transform:var(--tt-title)}.calendar__nav{align-items:center;background:transparent;border:0;border-radius:var(--radius-sm);color:var(--fg-default);cursor:pointer;display:inline-flex;height:32px;justify-content:center;width:32px}.calendar__nav:hover{background:var(--bg-subtle)}.calendar__grid{display:grid;grid-template-columns:repeat(7,1fr)}.calendar__weekdays{background:var(--bg-subtle);border-bottom:1px solid var(--border-default)}.calendar__weekday{color:var(--fg-muted);font-size:var(--text-2xs);font-weight:700;letter-spacing:var(--tracking-wider);padding:var(--space-2);text-align:center;text-transform:var(--tt-label)}.calendar__day{background:var(--bg-surface);border:0;border-bottom:1px solid var(--border-default);border-right:1px solid var(--border-default);color:var(--fg-default);cursor:pointer;display:flex;flex-direction:column;font-family:var(--font-body);gap:var(--space-1);min-height:84px;padding:var(--space-2);text-align:left}.calendar__day:hover{background:var(--bg-subtle)}.calendar__day:nth-child(7n){border-right:0}.calendar__day.is-out{background:var(--bg-canvas);color:var(--fg-subtle)}.calendar__day.is-today .calendar__daynum{align-items:center;background:var(--color-primary);border-radius:var(--radius-pill);color:var(--color-white);display:inline-flex;font-weight:700;height:22px;justify-content:center;width:22px}.calendar__daynum{font-size:var(--text-xs)}.calendar__events{display:flex;flex-direction:column;gap:2px;min-width:0}.calendar__event{background:var(--color-primary-100);border-radius:var(--radius-sm);color:var(--color-primary-800);cursor:pointer;font-size:var(--text-2xs);overflow:hidden;padding:1px var(--space-2);text-overflow:ellipsis;white-space:nowrap}.calendar__event--success{background:var(--color-green-100);color:var(--color-green-800)}.calendar__event--warning{background:var(--color-yellow-100);color:var(--color-yellow-800)}.calendar__event--danger{background:var(--color-red-100);color:var(--color-red-800)}.calendar__event--info{background:var(--color-info-100);color:var(--color-info-800)}.calendar__more{color:var(--fg-muted);font-size:var(--text-2xs)}.notif{display:inline-block;position:relative}.notif__trigger{align-items:center;background:transparent;border:0;border-radius:var(--radius-pill);color:var(--fg-default);cursor:pointer;display:inline-flex;height:40px;justify-content:center;position:relative;width:40px}.notif__trigger:hover{background:var(--bg-subtle)}.notif__badge{align-items:center;background:var(--color-danger);border:2px solid var(--bg-surface);border-radius:var(--radius-pill);box-sizing:border-box;color:var(--color-white);display:inline-flex;font-size:var(--text-2xs);font-weight:700;height:16px;justify-content:center;line-height:1;min-width:16px;padding:0 4px;position:absolute;right:-2px;top:-2px}.notif__panel{background:var(--bg-surface);border:1px solid var(--border-default);border-radius:var(--radius-lg);box-shadow:var(--shadow-lg);display:flex;flex-direction:column;max-height:480px;position:absolute;right:0;top:calc(100% + var(--space-2));width:380px;z-index:var(--z-dropdown)}.notif__head{align-items:center;border-bottom:1px solid var(--border-default);display:flex;gap:var(--space-2);justify-content:space-between;padding:var(--space-3) var(--space-4)}.notif__title{color:var(--fg-default);font-weight:700}.notif__head-actions{display:flex;gap:var(--space-2)}.notif__action{background:transparent;border:0;color:var(--color-primary);cursor:pointer;font-size:var(--text-xs);font-weight:700;padding:var(--space-1) var(--space-2)}.notif__action:hover{text-decoration:underline}.notif__list{flex:1;overflow-y:auto}.notif__empty{color:var(--fg-muted);font-size:var(--text-sm);padding:var(--space-8) var(--space-4);text-align:center}.notif__item{align-items:flex-start;background:transparent;border:0;border-bottom:1px solid var(--border-default);cursor:pointer;display:flex;gap:var(--space-3);padding:var(--space-3) var(--space-4);text-align:left;width:100%}.notif__item:last-child{border-bottom:0}.notif__item:hover{background:var(--bg-subtle)}.notif__item.is-unread{background:var(--color-primary-50)}.notif__dot{border-radius:var(--radius-pill);flex:none;height:8px;margin-top:6px;width:8px}.notif__dot--info{background:var(--color-info)}.notif__dot--success{background:var(--color-success)}.notif__dot--warning{background:var(--color-warning)}.notif__dot--danger{background:var(--color-danger)}.notif__body{flex:1;min-width:0}.notif__item-title{color:var(--fg-default);font-size:var(--text-sm);font-weight:700}.notif__item-desc{color:var(--fg-muted);font-size:var(--text-xs);line-height:1.4;margin-top:2px}.notif__time{color:var(--fg-subtle);font-size:var(--text-2xs);margin-top:var(--space-1)}.codeblock{background:var(--color-gray-900);border-radius:var(--radius-md);font-family:var(--font-mono);font-size:var(--text-sm);overflow:hidden}.codeblock__head{align-items:center;background:var(--color-gray-800);border-bottom:1px solid var(--color-gray-700);display:flex;justify-content:space-between;padding:var(--space-2) var(--space-3)}.codeblock__meta{align-items:center;display:flex;gap:var(--space-3)}.codeblock__filename{color:var(--color-gray-200);font-size:var(--text-xs);font-weight:700}.codeblock__lang{color:var(--color-gray-400);font-size:var(--text-2xs);letter-spacing:var(--tracking-wider);text-transform:var(--tt-label)}.codeblock__copy{align-items:center;background:transparent;border:0;border-radius:var(--radius-sm);color:var(--color-gray-200);cursor:pointer;display:inline-flex;font-family:var(--font-body);font-size:var(--text-xs);gap:var(--space-1);padding:var(--space-1) var(--space-2)}.codeblock__copy:hover{background:var(--color-gray-700)}.codeblock__body{color:var(--color-gray-100);line-height:1.5;margin:0;overflow-x:auto;padding:var(--space-4)}.jsonviewer{background:var(--bg-subtle);border:1px solid var(--border-default);border-radius:var(--radius-md);color:var(--fg-default);font-family:var(--font-mono);font-size:var(--text-xs);line-height:1.6;overflow-x:auto;padding:var(--space-3)}.json__line,.json__node{display:block}.json__children{padding-left:var(--space-4)}.json__toggle{background:transparent;border:0;color:var(--fg-muted);cursor:pointer;font-family:var(--font-mono);font-size:var(--text-xs);padding:0 var(--space-1) 0 0}.json__key{color:var(--color-info-700)}.json__str{color:var(--color-green-700)}.json__num{color:var(--color-secondary-700)}.json__bool{color:var(--color-info);font-weight:700}.json__null{color:var(--fg-subtle);font-style:italic}.json__brace{color:var(--fg-muted)}.json__count{color:var(--fg-subtle);font-size:var(--text-2xs);padding:0 var(--space-2)}.filter-panel{background:var(--bg-surface);border:1px solid var(--border-default);border-radius:var(--radius-lg);flex:none;width:240px}.filter-panel__head{align-items:center;border-bottom:1px solid var(--border-default);display:flex;justify-content:space-between;padding:var(--space-3) var(--space-4)}.filter-panel__title{color:var(--fg-default);gap:var(--space-2)}.filter-panel__count,.filter-panel__title{align-items:center;display:inline-flex;font-weight:700}.filter-panel__count{background:var(--color-primary);border-radius:var(--radius-pill);color:var(--color-white);font-size:var(--text-2xs);justify-content:center;min-width:18px;padding:0 var(--space-2)}.filter-panel__clear{background:transparent;border:0;color:var(--color-primary);cursor:pointer;font-size:var(--text-xs);font-weight:700}.filter-panel__body{padding:var(--space-2)}.filter-section{border-bottom:1px solid var(--border-default)}.filter-section:last-child{border-bottom:0}.filter-section__head{align-items:center;background:transparent;border:0;color:var(--fg-default);cursor:pointer;display:flex;font-family:var(--font-body);font-size:var(--text-sm);font-weight:700;justify-content:space-between;padding:var(--space-3) var(--space-2);width:100%}.filter-section__head:hover{color:var(--color-primary)}.filter-section__body{display:flex;flex-direction:column;gap:var(--space-2);padding:0 var(--space-2) var(--space-3)}.filter-bar{align-items:flex-end;display:flex;flex-wrap:wrap}.filter-bar,.filter-bar__fields{gap:var(--space-3) var(--space-4)}.filter-bar__fields{display:grid;flex:1 1 auto;grid-template-columns:repeat(auto-fit,minmax(var(--filter-col-min,160px),1fr))}.filter-bar--fixed-cols .filter-bar__fields{grid-template-columns:repeat(var(--filter-cols,4),minmax(0,1fr))}.filter-bar__actions{align-items:flex-end;display:flex;gap:var(--space-2)}.filter-bar .combobox{display:block;min-width:0;width:100%}.filter-field{display:flex;flex-direction:column;gap:4px;min-width:0}.filter-field__label{color:var(--fg-muted);font-family:var(--font-body);font-size:var(--text-xs);font-weight:500;letter-spacing:normal;text-transform:none}.bulk-bar{align-items:center;background:var(--color-gray-900);border-radius:var(--radius-md);box-shadow:var(--shadow-lg);color:var(--color-white);display:flex;gap:var(--space-3);padding:var(--space-2) var(--space-4)}.bulk-bar__count{font-size:var(--text-sm);font-weight:700;gap:var(--space-2)}.bulk-bar__clear,.bulk-bar__count{align-items:center;display:inline-flex}.bulk-bar__clear{background:transparent;border:0;border-radius:var(--radius-sm);color:var(--color-white);cursor:pointer;height:24px;justify-content:center;margin-left:var(--space-1);opacity:.85;width:24px}.bulk-bar__clear:hover{background:hsla(0,0%,100%,.12);opacity:1}.bulk-bar__clear:focus-visible{box-shadow:0 0 0 2px var(--color-white);outline:none}.bulk-bar__actions{display:flex;gap:var(--space-2);margin-left:auto}.bulk-bar .btn--outline{background:transparent;border-color:hsla(0,0%,100%,.4);color:var(--color-white)}.bulk-bar .btn--outline:hover:not(:disabled){background:hsla(0,0%,100%,.12);border-color:var(--color-white);color:var(--color-white)}.bulk-bar .btn--ghost{color:var(--color-white)}.bulk-bar .btn--ghost:hover:not(:disabled){background:hsla(0,0%,100%,.12)}.bulk-bar .btn--secondary{background:hsla(0,0%,100%,.1);border-color:transparent;color:var(--color-white)}.bulk-bar .btn--secondary:hover:not(:disabled){background:hsla(0,0%,100%,.18)}.sort-dropdown{align-items:center;display:inline-flex;gap:var(--space-2)}.sort-dropdown__label{color:var(--fg-muted);font-size:var(--text-sm);white-space:nowrap}.sort-dropdown__select{min-height:36px;min-width:180px;padding:var(--space-2) var(--space-3)}.comments{gap:var(--space-4)}.comments,.comments__list{display:flex;flex-direction:column}.comments__list{gap:var(--space-3);list-style:none;margin:0;padding:0}.comment{background:var(--bg-subtle);border-radius:var(--radius-md);display:flex;gap:var(--space-3);padding:var(--space-3)}.comment--internal{background:var(--color-yellow-50);border:1px dashed var(--color-yellow-300)}.comment__body{flex:1;min-width:0}.comment__head{align-items:center;display:flex;flex-wrap:wrap;gap:var(--space-2)}.comment__author{color:var(--fg-default);font-size:var(--text-sm);font-weight:700}.comment__time{color:var(--fg-subtle);font-size:var(--text-xs)}.comment__tag{background:var(--color-yellow-200);border-radius:var(--radius-sm);color:var(--color-yellow-900);font-size:var(--text-2xs);font-weight:700;letter-spacing:var(--tracking-wider);padding:0 var(--space-2);text-transform:var(--tt-label)}.comment__text{color:var(--fg-default);font-size:var(--text-sm);line-height:1.5;margin-top:var(--space-1)}.comments__compose{display:flex;flex-direction:column;gap:var(--space-2)}.comments__compose-actions{align-items:center;display:flex;gap:var(--space-3);justify-content:space-between}.comments__internal-toggle{align-items:center;color:var(--fg-muted);cursor:pointer;display:inline-flex;font-size:var(--text-sm);gap:var(--space-2)}.comments__compose--inline{align-items:center;flex-direction:row;gap:var(--space-2)}.comments__compose--inline.is-grown{align-items:flex-end}.comments__compose--inline .textarea{flex:1;max-height:140px;min-height:0;overflow-y:auto;resize:none}.comments__compose-submit{flex-shrink:0}.attachments{display:flex;flex-direction:column;gap:var(--space-2);list-style:none;margin:0;padding:0}.attachments__empty{border:1px dashed var(--border-default);border-radius:var(--radius-md);color:var(--fg-muted);font-size:var(--text-sm);padding:var(--space-4);text-align:center}.attachment{align-items:center;background:var(--bg-surface);border:1px solid var(--border-default);border-radius:var(--radius-md);display:flex;gap:var(--space-3);padding:var(--space-2) var(--space-3)}.attachment__icon{color:var(--fg-muted);flex:none}.attachment__body{flex:1;min-width:0}.attachment__name{color:var(--fg-default);font-size:var(--text-sm);font-weight:700;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.attachment__meta{color:var(--fg-subtle);display:flex;flex-wrap:wrap;font-size:var(--text-xs);gap:var(--space-1)}.attachment__actions{display:flex;flex:none;gap:var(--space-1)}.attachment__action{align-items:center;background:transparent;border:0;border-radius:var(--radius-sm);color:var(--fg-muted);cursor:pointer;display:inline-flex;height:32px;justify-content:center;text-decoration:none;width:32px}.attachment__action:hover{background:var(--bg-subtle);color:var(--fg-default)}.attachment__action--danger:hover{color:var(--color-danger)}.confirm__desc{color:var(--fg-default);font-size:var(--text-sm);line-height:1.5;margin:0}.desc-list{display:grid;gap:var(--space-2) var(--space-4);grid-template-columns:200px 1fr;margin:0}.desc-list__label{color:var(--fg-muted);font-size:var(--text-sm);font-weight:700}.desc-list__value{align-items:center;color:var(--fg-default);display:flex;font-size:var(--text-sm);gap:var(--space-2);justify-content:space-between;margin:0}.desc-list__edit{background:transparent;border:0;color:var(--color-primary);cursor:pointer;font-size:var(--text-xs);font-weight:700}.desc-list__edit:hover{text-decoration:underline}.diff{border:1px solid var(--border-default);border-radius:var(--radius-md);display:grid;font-size:var(--text-sm);grid-template-columns:200px 1fr 1fr;overflow:hidden}.diff__head{display:contents}.diff__head>div{background:var(--bg-subtle);border-bottom:1px solid var(--border-default);color:var(--fg-muted);font-size:var(--text-xs);font-weight:700;letter-spacing:var(--tracking-wide);padding:var(--space-2) var(--space-3);text-transform:var(--tt-label)}.diff__row{display:contents}.diff__row>div{border-bottom:1px solid var(--border-default);padding:var(--space-2) var(--space-3)}.diff__row:last-child>div{border-bottom:0}.diff__field{color:var(--fg-muted);font-weight:700}.diff__before{background:var(--color-red-50);color:var(--color-red-800)}.diff__after{background:var(--color-green-50);color:var(--color-green-800)}.diff__after ins,.diff__before del{text-decoration:none}@media (max-width:600px){.desc-list{gap:var(--space-1) 0;grid-template-columns:1fr}.desc-list__label{padding-top:var(--space-2)}.desc-list__value{border-bottom:1px solid var(--border-subtle);padding-bottom:var(--space-2)}.desc-list__value:last-of-type{border-bottom:0}.diff{grid-template-columns:1fr}.diff__head{display:none}.diff__row>div{border-bottom:0;padding:var(--space-2) var(--space-3)}.diff__row{border-bottom:1px solid var(--border-default);padding-bottom:var(--space-2)}.diff__row:last-child{border-bottom:0}.diff__field{background:var(--bg-subtle);font-size:var(--text-xs);letter-spacing:var(--tracking-wide);text-transform:var(--tt-label)}.diff__after[data-label]:before,.diff__before[data-label]:before{color:var(--fg-muted);content:attr(data-label) ": ";font-weight:700;margin-right:var(--space-1)}}.transfer{align-items:stretch;display:grid;gap:var(--space-3);grid-template-columns:1fr auto 1fr}.transfer__col{background:var(--bg-surface);border:1px solid var(--border-default);border-radius:var(--radius-md);display:flex;flex-direction:column;min-width:0;overflow:hidden}.transfer__col-head{align-items:center;background:var(--bg-subtle);border-bottom:1px solid var(--border-default);display:flex;justify-content:space-between;padding:var(--space-2) var(--space-3)}.transfer__col-title{color:var(--fg-default);font-size:var(--text-sm);font-weight:700}.transfer__col-count{background:var(--bg-muted);border-radius:var(--radius-pill);color:var(--fg-muted);font-size:var(--text-xs);padding:0 var(--space-2)}.transfer__list{flex:1;list-style:none;margin:0;max-height:320px;overflow-y:auto;padding:var(--space-1)}.transfer__empty{color:var(--fg-muted);font-size:var(--text-sm);padding:var(--space-4);text-align:center}.transfer__item{align-items:center;border-radius:var(--radius-sm);cursor:pointer;display:flex;gap:var(--space-2);padding:var(--space-2)}.transfer__item:has(.transfer__item-desc){align-items:flex-start}.transfer__item:hover{background:var(--bg-subtle)}.transfer__item.is-checked{background:var(--color-primary-50)}.transfer__item.is-disabled{cursor:not-allowed;opacity:.5}.transfer__item-body{color:var(--fg-default);flex:1;font-size:var(--text-sm);min-width:0}.transfer__item-desc{color:var(--fg-muted);font-size:var(--text-xs)}.transfer__controls{display:flex;flex-direction:column;gap:var(--space-2);justify-content:center}.permissions{border:1px solid var(--border-default);border-radius:var(--radius-md);overflow-x:auto}.permissions__table{border-collapse:collapse;font-family:var(--font-body);font-size:var(--text-sm);width:100%}.permissions__table td,.permissions__table th{border-bottom:1px solid var(--border-default);padding:var(--space-3)}.permissions__table thead th{background:var(--bg-subtle);text-align:left}.permissions__action-col{min-width:240px}.permissions__role-col{min-width:120px;text-align:center}.permissions__role-head{align-items:center;display:flex;flex-direction:column;gap:var(--space-1)}.permissions__role-toggle{background:transparent;border:0;color:var(--color-primary);cursor:pointer;font-size:var(--text-2xs);font-weight:700}.permissions__action-cell{color:var(--fg-default);font-weight:600;text-align:left}.permissions__action-desc{color:var(--fg-muted);font-size:var(--text-xs);font-weight:400;margin-top:2px}.permissions__cell{text-align:center}.gallery{display:flex;flex-direction:column;gap:var(--space-3)}.gallery--thumbs-left{flex-direction:row}.gallery__main{aspect-ratio:1;background:var(--bg-subtle);border-radius:var(--radius-lg);flex:1;overflow:hidden;position:relative}.gallery__image{display:block;height:100%;-o-object-fit:contain;object-fit:contain;width:100%}.gallery__nav{align-items:center;background:rgba(0,0,0,.5);border:0;border-radius:var(--radius-pill);color:var(--color-white);cursor:pointer;display:inline-flex;height:40px;justify-content:center;opacity:0;position:absolute;top:50%;transform:translateY(-50%);transition:opacity var(--duration-fast);width:40px}.gallery__main:hover .gallery__nav{opacity:1}.gallery__nav--prev{left:var(--space-3)}.gallery__nav--next{right:var(--space-3)}.gallery__thumbs{display:flex;flex-wrap:wrap;gap:var(--space-2)}.gallery--thumbs-left .gallery__thumbs{flex-direction:column;flex-wrap:nowrap;max-width:80px}.gallery__thumb{background:var(--bg-subtle);border:2px solid transparent;border-radius:var(--radius-md);cursor:pointer;height:64px;overflow:hidden;padding:0;width:64px}.gallery__thumb img{height:100%;-o-object-fit:cover;object-fit:cover;width:100%}.gallery__thumb.is-active{border-color:var(--color-primary)}.lightbox{align-items:center;background:rgba(12,18,32,.92);cursor:zoom-out;display:flex;inset:0;justify-content:center;padding:var(--space-8);position:fixed;z-index:var(--z-tooltip)}.lightbox__image{cursor:default;max-height:100%;max-width:100%;-o-object-fit:contain;object-fit:contain}.lightbox__close,.lightbox__nav{align-items:center;background:hsla(0,0%,100%,.1);border:0;border-radius:var(--radius-pill);color:var(--color-white);cursor:pointer;display:inline-flex;height:48px;justify-content:center;position:absolute;width:48px}.lightbox__close:hover,.lightbox__nav:hover{background:hsla(0,0%,100%,.2)}.lightbox__close{right:var(--space-4);top:var(--space-4)}.lightbox__nav--prev{left:var(--space-4);top:50%;transform:translateY(-50%)}.lightbox__nav--next{right:var(--space-4);top:50%;transform:translateY(-50%)}.lightbox__counter{bottom:var(--space-4);color:var(--color-white);font-family:var(--font-mono);font-size:var(--text-sm);left:50%;position:absolute;transform:translateX(-50%)}.rating{display:inline-flex;gap:2px}.rating__star{background:transparent;border:0;color:var(--color-gray-300);cursor:default;display:inline-flex;padding:2px}.rating--interactive .rating__star{cursor:pointer}.rating--interactive .rating__star:hover{color:var(--color-yellow-400)}.rating__star.is-full,.rating__star.is-half{color:var(--color-yellow-500)}.rating__star.is-half{opacity:.6}.price{align-items:baseline;display:inline-flex;flex-wrap:wrap;font-family:var(--font-body);gap:var(--space-2)}.price__amount{color:var(--fg-default);font-weight:700}.price__compare{color:var(--fg-subtle);font-size:.85em}.price__discount{background:var(--color-red-100);border-radius:var(--radius-sm);color:var(--color-red-800);font-size:var(--text-xs);font-weight:700;padding:2px var(--space-2)}.price--sm .price__amount{font-size:var(--text-md)}.price--md .price__amount{font-size:var(--text-lg)}.price--lg .price__amount{font-size:var(--text-2xl)}.price--xl .price__amount{font-family:var(--font-display);font-size:var(--text-3xl)}.qty{align-items:center;background:var(--bg-surface);border:1px solid var(--border-strong);border-radius:var(--radius-md);display:inline-flex;overflow:hidden}.qty.is-disabled{opacity:.5;pointer-events:none}.qty__btn{align-items:center;background:transparent;border:0;color:var(--fg-default);cursor:pointer;display:inline-flex;height:32px;justify-content:center;width:32px}.qty__btn:hover:not(:disabled){background:var(--bg-subtle)}.qty__btn:disabled{cursor:not-allowed;opacity:.4}.qty__input{-moz-appearance:textfield;background:transparent;border:0;border-left:1px solid var(--border-default);border-right:1px solid var(--border-default);color:var(--fg-default);font-family:var(--font-body);font-size:var(--text-sm);height:32px;text-align:center;width:44px}.qty__input::-webkit-inner-spin-button,.qty__input::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.qty--sm .qty__btn{height:28px;width:28px}.qty--sm .qty__input{font-size:var(--text-xs);height:28px;width:36px}.variants{display:flex;flex-direction:column;gap:var(--space-2)}.variants__label{color:var(--fg-default);font-size:var(--text-sm);font-weight:700}.variants__options{display:flex;flex-wrap:wrap;gap:var(--space-2)}.variants__chip{background:var(--bg-surface);border:1px solid var(--border-strong);border-radius:var(--radius-sm);color:var(--fg-default);cursor:pointer;font-family:var(--font-body);font-size:var(--text-sm);font-weight:700;padding:var(--space-2) var(--space-3)}.variants__chip.is-selected,.variants__chip:hover:not(:disabled){border-color:var(--color-primary)}.variants__chip.is-selected{background:var(--color-primary);color:var(--color-white)}.variants__chip.is-disabled{cursor:not-allowed;opacity:.4;text-decoration:line-through}.variants__swatch{align-items:center;border:2px solid var(--border-default);border-radius:var(--radius-pill);color:var(--color-white);cursor:pointer;display:inline-flex;height:32px;justify-content:center;position:relative;width:32px}.variants__swatch.is-selected{border-color:var(--color-primary);box-shadow:0 0 0 2px var(--bg-surface),0 0 0 4px var(--color-primary)}.variants__swatch.is-disabled{cursor:not-allowed;opacity:.4}.wishlist{align-items:center;background:var(--bg-surface);border:1px solid var(--border-default);border-radius:var(--radius-pill);color:var(--fg-muted);cursor:pointer;display:inline-flex;height:36px;justify-content:center;transition:color var(--duration-fast),background var(--duration-fast);width:36px}.wishlist.is-active,.wishlist:hover{color:var(--color-danger)}.wishlist.is-active{background:var(--color-red-50);border-color:var(--color-red-200)}.promo{flex-direction:column}.promo,.promo__row{display:flex;gap:var(--space-2)}.promo__input{flex:1;letter-spacing:var(--tracking-wide);text-transform:var(--tt-label)}.promo__message{border-radius:var(--radius-sm);font-size:var(--text-xs);padding:var(--space-1) var(--space-2)}.promo__message--success{background:var(--color-green-50);color:var(--color-green-800)}.promo__message--error{background:var(--color-red-50);color:var(--color-red-800)}.shipping-progress{display:flex;flex-direction:column;gap:var(--space-2)}.shipping-progress__text{color:var(--fg-default);font-size:var(--text-sm)}.shipping-progress__track{background:var(--bg-muted);border-radius:var(--radius-pill);height:6px;overflow:hidden}.shipping-progress__bar{background:var(--color-secondary);height:100%;transition:width var(--duration-base) var(--ease-standard)}.shipping-progress.is-achieved .shipping-progress__bar{background:var(--color-success)}.shipping-progress.is-achieved .shipping-progress__text{color:var(--color-green-800);font-weight:700}.cart__empty{color:var(--fg-muted);font-size:var(--text-sm);padding:var(--space-12) var(--space-4);text-align:center}.cart__list{flex-direction:column;list-style:none;margin:0;padding:0}.cart__item,.cart__list{display:flex;gap:var(--space-3)}.cart__item{background:var(--bg-subtle);border-radius:var(--radius-md);padding:var(--space-3)}.cart__item-media{background:var(--bg-surface);border-radius:var(--radius-sm);flex:none;height:64px;overflow:hidden;width:64px}.cart__item-media img{height:100%;-o-object-fit:cover;object-fit:cover;width:100%}.cart__item-placeholder{background:var(--bg-muted);height:100%;width:100%}.cart__item-body{display:flex;flex:1;flex-direction:column;gap:var(--space-1);min-width:0}.cart__item-name{color:var(--fg-default);font-size:var(--text-sm);font-weight:700}.cart__item-variant{color:var(--fg-muted);font-size:var(--text-xs)}.cart__item-price{color:var(--color-primary);font-size:var(--text-sm);font-weight:700}.cart__item-actions{align-items:flex-end;display:flex;flex-direction:column;gap:var(--space-2)}.cart__item-qty{color:var(--fg-muted);font-size:var(--text-sm);font-weight:700}.cart__item-remove{background:transparent;border:0;color:var(--fg-muted);cursor:pointer;padding:var(--space-1)}.cart__item-remove:hover{color:var(--color-danger)}.cart__footer{display:flex;flex-direction:column;gap:var(--space-3);width:100%}.cart__totals{align-items:center;display:flex;font-size:var(--text-md);justify-content:space-between}.order-summary{background:var(--bg-surface);border:1px solid var(--border-default);border-radius:var(--radius-lg);padding:var(--space-4)}.order-summary__title{border-bottom:1px solid var(--border-default);color:var(--fg-default);font-size:var(--text-md);font-weight:700;margin-bottom:var(--space-3);padding-bottom:var(--space-2)}.order-summary__list{display:flex;flex-direction:column;gap:var(--space-2);margin:0}.order-summary__row{align-items:center;color:var(--fg-default);display:flex;font-size:var(--text-sm);gap:var(--space-3);justify-content:space-between}.order-summary__row dt{color:var(--fg-muted);margin:0}.order-summary__row dd{color:var(--fg-default);font-weight:600;margin:0}.order-summary__row.is-emphasis{border-top:1px solid var(--border-default);font-size:var(--text-md);padding-top:var(--space-2)}.order-summary__row.is-emphasis dd,.order-summary__row.is-emphasis dt{color:var(--fg-default);font-weight:700}.address-form{display:grid;gap:var(--space-3) var(--space-3);grid-template-columns:repeat(6,1fr)}.address-form__field--full{grid-column:span 6}.address-form__field--half{grid-column:span 3}.address-form__field--third{grid-column:span 2}@media (max-width:600px){.address-form__field--half,.address-form__field--third{grid-column:span 6}}.compare{border:1px solid var(--border-default);border-radius:var(--radius-lg);overflow-x:auto}.compare__table{border-collapse:collapse;font-family:var(--font-body);font-size:var(--text-sm);width:100%}.compare__table td,.compare__table th{border-bottom:1px solid var(--border-default);padding:var(--space-3);text-align:center;vertical-align:top}.compare__head{align-items:center;display:flex;flex-direction:column;gap:var(--space-2);position:relative}.compare__img{height:80px;-o-object-fit:contain;object-fit:contain;width:80px}.compare__name{color:var(--fg-default);font-weight:700}.compare__price{color:var(--color-primary);font-weight:700}.compare__remove{align-items:center;background:var(--bg-subtle);border:0;border-radius:var(--radius-pill);color:var(--fg-muted);cursor:pointer;display:inline-flex;height:24px;justify-content:center;position:absolute;right:0;top:0;width:24px}.compare__remove:hover{background:var(--color-red-50);color:var(--color-danger)}.compare__attr{background:var(--bg-subtle);color:var(--fg-muted);font-weight:700;text-align:left}.compare__cell{color:var(--fg-default)}.hero{--hero-fg:var(--fg-default);background-position:50%;background-size:cover;border-radius:var(--radius-lg);color:var(--hero-fg);padding:var(--space-12) var(--space-6);position:relative}.hero--brand{background:var(--color-primary)}.hero--brand,.hero--inverse{--hero-fg:var(--color-white)}.hero--inverse{background:var(--color-ink)}.hero--subtle{--hero-fg:var(--fg-default);background:var(--bg-subtle)}.hero--image{--hero-fg:var(--color-white)}.hero--image:before{background:linear-gradient(180deg,transparent,rgba(12,18,32,.6));border-radius:inherit;content:"";inset:0;position:absolute}.hero--sm{padding:var(--space-8) var(--space-6)}.hero--lg{padding:var(--space-20) var(--space-8)}.hero__inner{display:flex;flex-direction:column;gap:var(--space-3);max-width:720px;position:relative;width:100%}.hero--align-center .hero__inner{align-items:center;margin:0 auto;text-align:center}.hero--align-end .hero__inner{align-items:flex-end;margin-left:auto;text-align:right}.hero__eyebrow{font-size:var(--text-sm);letter-spacing:var(--tracking-wider);opacity:.85;text-transform:var(--tt-label)}.hero__eyebrow,.hero__title{color:var(--hero-fg);font-weight:700}.hero__title{font-family:var(--font-display);font-size:clamp(var(--text-3xl),5vw + 1rem,var(--text-5xl));letter-spacing:var(--tracking-tight);line-height:var(--leading-tight);margin:0;text-transform:var(--tt-title)}.hero--sm .hero__title{font-size:var(--text-3xl)}.hero__subtitle{color:var(--hero-fg);font-size:var(--text-lg);line-height:var(--leading-relaxed);margin:0;opacity:.92}.hero__actions{display:flex;flex-wrap:wrap;gap:var(--space-3);margin-top:var(--space-3)}.hero--align-center .hero__actions{justify-content:center}.hero--align-end .hero__actions{justify-content:flex-end}.hero--brand .hero__actions .btn--outline,.hero--image .hero__actions .btn--outline,.hero--inverse .hero__actions .btn--outline{background:transparent;border-color:hsla(0,0%,100%,.6);color:var(--color-white)}.hero--brand .hero__actions .btn--outline:hover:not(:disabled),.hero--image .hero__actions .btn--outline:hover:not(:disabled),.hero--inverse .hero__actions .btn--outline:hover:not(:disabled){background:hsla(0,0%,100%,.15);border-color:var(--color-white);color:var(--color-white)}.hero--brand .hero__actions .btn--ghost,.hero--image .hero__actions .btn--ghost,.hero--inverse .hero__actions .btn--ghost{color:var(--color-white)}.hero--brand .hero__actions .btn--ghost:hover:not(:disabled),.hero--image .hero__actions .btn--ghost:hover:not(:disabled),.hero--inverse .hero__actions .btn--ghost:hover:not(:disabled){background:hsla(0,0%,100%,.12)}.hero--brand .hero__actions .btn--primary,.hero--image .hero__actions .btn--primary,.hero--inverse .hero__actions .btn--primary{background:var(--color-white);color:var(--color-primary)}.hero--brand .hero__actions .btn--primary:hover:not(:disabled),.hero--image .hero__actions .btn--primary:hover:not(:disabled),.hero--inverse .hero__actions .btn--primary:hover:not(:disabled){background:hsla(0,0%,100%,.88)}.testimonial{background:var(--bg-surface);border:1px solid var(--border-default);border-radius:var(--radius-lg);display:flex;flex-direction:column;gap:var(--space-3);margin:0;padding:var(--space-6)}.testimonial__rating{color:var(--color-gray-300);display:inline-flex;gap:2px}.testimonial__rating .is-filled{color:var(--color-yellow-500)}.testimonial__quote{color:var(--fg-default);font-family:var(--font-body);font-size:var(--text-lg);font-style:italic;line-height:var(--leading-relaxed);margin:0}.testimonial__caption{align-items:center;display:flex;gap:var(--space-3);margin:0}.testimonial__avatar{border-radius:var(--radius-pill);height:40px;-o-object-fit:cover;object-fit:cover;width:40px}.testimonial__author{color:var(--fg-default);font-size:var(--text-sm);font-weight:700}.testimonial__meta{color:var(--fg-muted);font-size:var(--text-xs)}.category-nav{display:block}.category-nav__list{display:flex;gap:var(--space-1);list-style:none;margin:0;padding:0}.category-nav__item{position:relative}.category-nav__link{align-items:center;background:transparent;border:0;color:var(--fg-default);cursor:pointer;display:inline-flex;font-family:var(--font-body);font-size:var(--text-sm);font-weight:700;gap:var(--space-1);padding:var(--space-3) var(--space-4);text-decoration:none}.category-nav__link.is-open,.category-nav__link:hover{color:var(--color-primary)}.category-nav__mega{background:var(--bg-surface);border:1px solid var(--border-default);border-radius:var(--radius-md);box-shadow:var(--shadow-lg);display:grid;gap:var(--space-5);grid-template-columns:repeat(auto-fit,minmax(180px,1fr));left:0;min-width:480px;padding:var(--space-5);position:absolute;top:100%;z-index:var(--z-dropdown)}.category-nav__group-title{color:var(--fg-muted);font-size:var(--text-xs);font-weight:700;letter-spacing:var(--tracking-wider);margin-bottom:var(--space-2);text-transform:var(--tt-label)}.category-nav__group-items{display:flex;flex-direction:column;gap:var(--space-1);list-style:none;margin:0;padding:0}.category-nav__group-items a{border:0;color:var(--fg-default);font-size:var(--text-sm);padding:var(--space-1) 0;text-decoration:none}.category-nav__group-items a:hover{color:var(--color-primary)}.popover{display:inline-block;position:relative}.popover__trigger{cursor:pointer;display:inline-flex}.popover__content{animation:popover-fade var(--duration-fast,.12s) var(--ease-standard,cubic-bezier(.22,1,.36,1));background:var(--bg-surface);border:1px solid var(--border-default);border-radius:var(--radius-md);box-shadow:var(--shadow-lg);color:var(--fg-default);font-size:var(--text-sm);max-width:320px;min-width:200px;padding:var(--space-3);z-index:var(--z-popover,1300)}@keyframes popover-fade{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}.hover-card{display:inline-block;position:relative}.hover-card__trigger{display:inline-flex}.hover-card__content{animation:popover-fade var(--duration-fast,.12s) var(--ease-standard,cubic-bezier(.22,1,.36,1));background:var(--bg-surface);border:1px solid var(--border-default);border-radius:var(--radius-md);box-shadow:var(--shadow-lg);color:var(--fg-default);font-size:var(--text-sm);max-width:320px;min-width:220px;padding:var(--space-3);z-index:var(--z-popover,1300)}.context-menu{display:inline-block}.context-menu__menu{background:var(--bg-surface);border:1px solid var(--border-default);border-radius:var(--radius-md);box-shadow:var(--shadow-lg);font-size:var(--text-sm);list-style:none;margin:0;min-width:200px;padding:var(--space-1)}.context-menu__item{align-items:center;background:transparent;border:0;border-radius:var(--radius-sm);color:var(--fg-default);cursor:pointer;display:flex;gap:var(--space-2);padding:var(--space-2) var(--space-3);text-align:left;width:100%}.context-menu__item:hover:not(:disabled){background:var(--bg-subtle)}.context-menu__item.is-disabled,.context-menu__item:disabled{cursor:not-allowed;opacity:.5}.context-menu__item--danger{color:var(--color-danger)}.context-menu__icon{display:inline-flex}.context-menu__separator{background:var(--border-default);height:1px;margin:var(--space-1) 0}.toggle{align-items:center;background:transparent;border:1px solid transparent;border-radius:var(--radius-md);color:var(--fg-default);cursor:pointer;display:inline-flex;font-weight:500;gap:var(--space-2);justify-content:center;transition:background var(--duration-fast,.12s),color var(--duration-fast,.12s),border-color var(--duration-fast,.12s)}.toggle--sm{font-size:var(--text-xs);height:28px;padding:4px var(--space-2)}.toggle--md{font-size:var(--text-sm);height:36px;padding:6px var(--space-3)}.toggle--lg{font-size:var(--text-base);height:44px;padding:8px var(--space-4)}.toggle--outline{border-color:var(--border-default)}.toggle:hover:not(:disabled):not(.is-pressed):not([aria-pressed=true]){background:var(--bg-subtle)}.toggle.is-pressed,.toggle[aria-pressed=true]{background:var(--bg-inverse,var(--fg-default));border-color:transparent;color:var(--bg-canvas)}.toggle.is-pressed:hover:not(:disabled),.toggle[aria-pressed=true]:hover:not(:disabled){filter:brightness(1.15)}.toggle:disabled{cursor:not-allowed;opacity:.5}.toggle-group{background:var(--bg-subtle);border:1px solid var(--border-default);border-radius:var(--radius-md);display:inline-flex;gap:2px;padding:2px}.toggle-group__item{border:0;border-radius:calc(var(--radius-md) - 2px)}.toggle-group__item:hover:not(:disabled){background:var(--bg-surface)}.toggle-group__item.is-pressed,.toggle-group__item[aria-pressed=true]{background:var(--bg-surface);box-shadow:var(--shadow-sm);color:var(--fg-default)}.toggle-group--segmented{display:flex}.toggle-group--segmented .toggle-group__item{flex:1 1 0}.input-otp{display:inline-flex;gap:var(--space-2)}.input-otp__slot{background:var(--bg-surface);border:1px solid var(--border-default);border-radius:var(--radius-md);caret-color:var(--color-primary);color:var(--fg-default);font-family:var(--font-mono,ui-monospace,monospace);font-size:var(--text-xl);font-weight:600;height:52px;text-align:center;transition:border-color var(--duration-fast,.12s),box-shadow var(--duration-fast,.12s);width:44px}.input-otp__slot:focus{border-color:var(--border-focus,var(--color-primary));box-shadow:0 0 0 3px color-mix(in srgb,var(--color-primary) 25%,transparent);outline:none}.input-otp.is-invalid .input-otp__slot{border-color:var(--color-danger)}.input-otp.is-disabled .input-otp__slot{opacity:.5}.separator{background:var(--border-default);flex:none}.separator--horizontal{height:1px;width:100%}.separator--vertical{align-self:stretch;height:100%;width:1px}.carousel{position:relative}.carousel:focus{outline:none}.carousel:focus-visible{border-radius:var(--radius-md);box-shadow:var(--focus-ring-accent);outline:none}.carousel__viewport{border-radius:var(--radius-lg);overflow:hidden;position:relative}.carousel__track{display:flex;transition:transform .32s var(--ease-standard,cubic-bezier(.22,1,.36,1))}.carousel__slide{flex:0 0 100%;min-width:0}.carousel__control{align-items:center;background:color-mix(in srgb,var(--bg-surface) 90%,transparent);border:1px solid var(--border-default);border-radius:var(--radius-pill);box-shadow:var(--shadow-sm);color:var(--fg-default);cursor:pointer;display:inline-flex;height:40px;justify-content:center;position:absolute;top:50%;transform:translateY(-50%);width:40px}.carousel__control:hover:not(:disabled){background:var(--bg-surface)}.carousel__control:disabled{cursor:not-allowed;opacity:.4}.carousel__control--prev{left:var(--space-2)}.carousel__control--next{right:var(--space-2)}.carousel__dots{display:flex;gap:var(--space-1,4px);list-style:none;margin-top:var(--space-3)}.carousel__dot,.carousel__dots{justify-content:center;padding:0}.carousel__dot{align-items:center;background:transparent;border:0;cursor:pointer;display:inline-flex;height:24px;width:24px}.carousel__dot:before{background:var(--border-strong,var(--border-default));border-radius:var(--radius-pill);content:"";height:8px;transition:background var(--duration-fast,.12s),width var(--duration-fast,.12s);width:8px}.carousel__dot.is-active:before{background:var(--color-primary);width:24px}.resizable{display:flex;height:100%;width:100%}.resizable--horizontal{flex-direction:row}.resizable--vertical{flex-direction:column}.resizable__panel{min-height:0;min-width:0;overflow:auto}.resizable__handle{background:var(--border-default);flex:none;position:relative;transition:background var(--duration-fast,.12s)}.resizable__handle:focus-visible,.resizable__handle:hover{background:var(--color-primary)}.resizable__handle--horizontal{cursor:col-resize;width:4px}.resizable__handle--vertical{cursor:row-resize;height:4px}.menubar{background:var(--bg-surface);border:1px solid var(--border-default);border-radius:var(--radius-md);display:inline-flex;gap:2px;padding:2px}.menubar__menu{position:relative}.menubar__trigger{background:transparent;border:0;border-radius:var(--radius-sm);color:var(--fg-default);cursor:pointer;font-weight:500;padding:var(--space-1) var(--space-3)}.menubar__trigger.is-open,.menubar__trigger:hover{background:var(--bg-subtle)}.menubar__list{background:var(--bg-surface);border:1px solid var(--border-default);border-radius:var(--radius-md);box-shadow:var(--shadow-lg);left:0;list-style:none;margin:0;min-width:200px;padding:var(--space-1);position:absolute;top:calc(100% + 4px);z-index:var(--z-popover,1300)}.menubar__item{align-items:center;background:transparent;border:0;border-radius:var(--radius-sm);color:var(--fg-default);cursor:pointer;display:flex;gap:var(--space-4);justify-content:space-between;padding:var(--space-2) var(--space-3);text-align:left;width:100%}.menubar__item:hover:not(:disabled){background:var(--bg-subtle)}.menubar__item.is-disabled,.menubar__item:disabled{cursor:not-allowed;opacity:.5}.menubar__shortcut{color:var(--fg-subtle);font-family:var(--font-mono,ui-monospace,monospace);font-size:var(--text-xs)}.menubar__separator{background:var(--border-default);height:1px;margin:var(--space-1) 0}.nav-menu{position:relative}.nav-menu__list{display:flex;gap:var(--space-1);list-style:none;margin:0;padding:0}.nav-menu__item{position:relative}.nav-menu__trigger{align-items:center;background:transparent;border:0;border-radius:var(--radius-sm);color:var(--fg-default);cursor:pointer;display:inline-flex;font-weight:500;gap:var(--space-1);padding:var(--space-2) var(--space-3);text-decoration:none}.nav-menu__trigger.is-open,.nav-menu__trigger:hover{background:var(--bg-subtle);color:var(--color-primary)}.nav-menu__chevron{transition:transform var(--duration-fast,.12s)}.nav-menu__trigger.is-open .nav-menu__chevron{transform:rotate(180deg)}.nav-menu__panel{background:var(--bg-surface);border:1px solid var(--border-default);border-radius:var(--radius-md);box-shadow:var(--shadow-lg);display:grid;gap:var(--space-3);grid-template-columns:1fr;left:0;min-width:320px;padding:var(--space-3);position:absolute;top:calc(100% + 8px);z-index:var(--z-popover,1300)}.nav-menu__featured{background:var(--bg-subtle);border-radius:var(--radius-sm);padding:var(--space-3)}.nav-menu__featured strong{color:var(--fg-default);display:block;font-size:var(--text-base)}.nav-menu__featured p{color:var(--fg-muted);font-size:var(--text-sm);margin:var(--space-1) 0 0}.nav-menu__sublist{display:flex;flex-direction:column;gap:2px;list-style:none;margin:0;padding:0}.nav-menu__link{align-items:flex-start;border-radius:var(--radius-sm);color:var(--fg-default);display:flex;gap:var(--space-2);padding:var(--space-2);text-decoration:none}.nav-menu__link:hover{background:var(--bg-subtle);color:var(--color-primary)}.nav-menu__link-icon{display:inline-flex}.nav-menu__link-body{display:flex;flex-direction:column;gap:2px}.nav-menu__link-label{font-size:var(--text-sm);font-weight:500}.nav-menu__link-desc{color:var(--fg-muted);font-size:var(--text-xs)}.grid--responsive{display:grid;grid-template-columns:repeat(var(--grid-cols,1),minmax(0,1fr))}@media (min-width:480px){.grid--responsive{grid-template-columns:repeat(var(--grid-cols-sm,var(--grid-cols,1)),minmax(0,1fr))}}@media (min-width:768px){.grid--responsive{grid-template-columns:repeat(var(--grid-cols-md,var(--grid-cols-sm,var(--grid-cols,1))),minmax(0,1fr))}}@media (min-width:1024px){.grid--responsive{grid-template-columns:repeat(var(--grid-cols-lg,var(--grid-cols-md,var(--grid-cols-sm,var(--grid-cols,1)))),minmax(0,1fr))}}@media (min-width:1280px){.grid--responsive{grid-template-columns:repeat(var(--grid-cols-xl,var(--grid-cols-lg,var(--grid-cols-md,var(--grid-cols-sm,var(--grid-cols,1))))),minmax(0,1fr))}}}@media (prefers-reduced-motion:reduce){*,:after,:before{animation-duration:.01ms!important;animation-iteration-count:1!important;scroll-behavior:auto!important;transition-duration:.01ms!important}}.aspect-ratio{overflow:hidden;position:relative;width:100%}.aspect-ratio>*{height:100%;inset:0;position:absolute;width:100%}.aspect-ratio>iframe,.aspect-ratio>img,.aspect-ratio>video{display:block;-o-object-fit:cover;object-fit:cover}.collapsible__trigger{background:transparent;border:0;color:inherit;cursor:pointer;padding:0}.collapsible__trigger:focus-visible{border-radius:var(--radius-sm);box-shadow:var(--focus-ring-accent);outline:none}.scroll-area{scrollbar-color:var(--border-strong) transparent;scrollbar-width:thin}.scroll-area--vertical{overflow-x:hidden;overflow-y:auto}.scroll-area--horizontal{overflow-x:auto;overflow-y:hidden}.scroll-area--both{overflow:auto}.scroll-area::-webkit-scrollbar{height:8px;width:8px}.scroll-area::-webkit-scrollbar-track{background:transparent}.scroll-area::-webkit-scrollbar-thumb{background:var(--border-strong);background-clip:padding-box;border:2px solid transparent;border-radius:var(--radius-pill)}.scroll-area::-webkit-scrollbar-thumb:hover{background-color:var(--fg-muted)}.scroll-area::-webkit-scrollbar-corner{background:transparent}
|
|
1
|
+
@layer elalba;@layer elalba{:root{--color-primary:var(--color-primary-800);--color-secondary:var(--color-secondary-400);--color-primary-900:#2e2b26;--color-primary-800:#423e37;--color-primary-700:#554839;--color-primary-600:#6b5a47;--color-primary-500:#87735e;--color-primary-400:#a8957f;--color-primary-300:#c8b8a6;--color-primary-200:#dfd3c6;--color-primary-100:#f0e9e1;--color-primary-50:#faf6f2;--color-secondary-900:#573820;--color-secondary-800:#7a4f30;--color-secondary-700:#9c6840;--color-secondary-600:#be8456;--color-secondary-500:#d4a074;--color-secondary-400:#e4bb97;--color-secondary-300:#ebcbab;--color-secondary-200:#f1dbc2;--color-secondary-100:#f8eddf;--color-secondary-50:#fcf7f1;--color-ink:#1c1917;--color-gray-900:#292524;--color-gray-800:#44403c;--color-gray-700:#57534e;--color-gray-600:#78716c;--color-gray-500:#a8a29e;--color-gray-400:#c4bcb4;--color-gray-300:#d6d3d1;--color-gray-200:#e7e5e4;--color-gray-150:#efedeb;--color-gray-100:#f5f5f4;--color-gray-50:#fafaf9;--color-white:#fff;--color-green-900:#0f4d22;--color-green-800:#166130;--color-green-700:#1f7a3d;--color-green-600:#2f9e44;--color-green-500:#4ab35a;--color-green-400:#6ec47e;--color-green-300:#95d5a1;--color-green-200:#c1e6c8;--color-green-100:#e0f1e3;--color-green-50:#f0f8f2;--color-yellow-900:#713f12;--color-yellow-800:#854d0e;--color-yellow-700:#a16207;--color-yellow-600:#ca8a04;--color-yellow-500:#eab308;--color-yellow-400:#facc15;--color-yellow-300:#fde047;--color-yellow-200:#fef08a;--color-yellow-100:#fef9c3;--color-yellow-50:#fefce8;--color-red-900:#5b0e0e;--color-red-800:#7e1818;--color-red-700:#b91c1c;--color-red-600:#dc2626;--color-red-500:#ef4444;--color-red-400:#f87171;--color-red-300:#fca5a5;--color-red-200:#fecaca;--color-red-100:#fee2e2;--color-red-50:#fef2f2;--color-info-900:#0c4a6e;--color-info-800:#075985;--color-info-700:#0369a1;--color-info-600:#0284c7;--color-info-500:#0ea5e9;--color-info-400:#38bdf8;--color-info-300:#7dd3fc;--color-info-200:#bae6fd;--color-info-100:#e0f2fe;--color-info-50:#f0f9ff;--color-success:var(--color-green-600);--color-warning:var(--color-yellow-600);--color-danger:var(--color-red-600);--color-info:var(--color-info-600);--bg-canvas:#ede1cc;--bg-surface:var(--color-white);--bg-subtle:var(--color-gray-100);--bg-muted:var(--color-gray-150);--bg-inverse:var(--color-primary);--bg-inverse-strong:var(--color-primary-900);--fg-default:var(--color-ink);--fg-muted:#605a54;--fg-subtle:#655e57;--fg-meta:var(--fg-subtle);--fg-on-brand:var(--color-white);--fg-on-secondary:var(--color-primary);--fg-link:var(--color-primary);--fg-link-hover:var(--color-primary-900);--accent-primary:var(--color-primary);--accent-secondary:var(--color-secondary);--border-default:var(--color-gray-200);--border-strong:var(--color-gray-300);--border-brand:var(--color-primary);--border-focus:var(--color-primary);--cat-1:#2f6fed;--cat-1-bg:#e8f0fe;--cat-1-fg:#1c4fa3;--cat-2:#14a08c;--cat-2-bg:#d9f2ee;--cat-2-fg:#0f6b5f;--cat-3:#7c4ddb;--cat-3-bg:#efe7fb;--cat-3-fg:#5b3aa8;--cat-4:#c98a00;--cat-4-bg:#fcf0d8;--cat-4-fg:#8a5a00;--cat-5:#e0457e;--cat-5-bg:#fde4ec;--cat-5-fg:#a52a5a;--cat-6:#64748b;--cat-6-bg:#e6e9ef;--cat-6-fg:#3f4756;--bp-sm:480px;--bp-md:768px;--bp-lg:1024px;--bp-xl:1280px;--font-display:"Outfit","Helvetica Neue",Arial,sans-serif;--font-body:"DM Sans","Helvetica Neue",Arial,sans-serif;--font-mono:"JetBrains Mono",ui-monospace,"SF Mono",Menlo,Consolas,monospace;--weight-thin:100;--weight-extralight:200;--weight-light:300;--weight-regular:400;--weight-medium:500;--weight-semibold:600;--weight-bold:700;--weight-extrabold:800;--weight-black:900;--text-2xs:0.6875rem;--text-xs:0.75rem;--text-sm:0.875rem;--text-md:1rem;--text-lg:1.125rem;--text-xl:1.25rem;--text-2xl:1.5rem;--text-3xl:1.875rem;--text-4xl:2.5rem;--text-5xl:3.25rem;--text-6xl:4.25rem;--text-7xl:5.5rem;--leading-tight:1.05;--leading-snug:1.2;--leading-normal:1.45;--leading-relaxed:1.6;--tracking-tight:-0.01em;--tracking-normal:0;--tracking-snug:0.02em;--tracking-wide:0.04em;--tracking-wider:0.08em;--tt-label:uppercase;--tt-data:none;--tt-title:none;--space-0:0;--space-1:4px;--space-2:8px;--space-3:12px;--space-4:16px;--space-5:20px;--space-6:24px;--space-8:32px;--space-10:40px;--space-12:48px;--space-16:64px;--space-20:80px;--space-24:96px;--radius-none:0;--radius-xs:2px;--radius-sm:4px;--radius-md:8px;--radius-lg:12px;--radius-xl:18px;--radius-pill:999px;--shadow-xs:0 1px 2px rgba(12,18,32,.06);--shadow-sm:0 2px 6px rgba(12,18,32,.08);--shadow-md:0 8px 20px rgba(12,18,32,.1);--shadow-lg:0 18px 40px rgba(12,18,32,.14);--shadow-brand:0 10px 30px rgba(0,47,135,.25);--shadow-card:0 1px 2px rgba(12,18,32,.05),0 8px 24px -16px rgba(12,18,32,.2);--shadow-card-hover:0 2px 4px rgba(12,18,32,.06),0 16px 32px -14px rgba(12,18,32,.26);--ease-out-quart:cubic-bezier(0.25,1,0.5,1);--ease-out-quint:cubic-bezier(0.22,1,0.36,1);--ease-out-expo:cubic-bezier(0.16,1,0.3,1);--ease-standard:var(--ease-out-quint);--ease-out:var(--ease-out-quint);--ease-in:cubic-bezier(0.4,0,1,1);--duration-fast:120ms;--duration-base:200ms;--duration-slow:320ms;--duration-exit:150ms;--z-base:1;--z-dropdown:50;--z-sticky:60;--z-overlay:100;--z-toast:200;--z-tooltip:1000;--z-popover:1300;--z-floating:1300;--focus-ring-brand:0 0 0 3px color-mix(in srgb,var(--color-primary) 16%,transparent);--focus-ring-accent:0 0 0 3px color-mix(in srgb,var(--color-secondary) 16%,transparent);--focus-ring-danger:0 0 0 3px color-mix(in srgb,var(--color-red-600) 16%,transparent);--backdrop:color-mix(in srgb,var(--color-ink) 55%,transparent)}.h-display,.h1{font-size:var(--text-6xl);line-height:var(--leading-tight)}.h-display,.h1,.h2{color:var(--fg-default);font-family:var(--font-display);font-weight:700;letter-spacing:var(--tracking-tight);text-transform:var(--tt-title)}.h2{font-size:var(--text-4xl);line-height:var(--leading-snug)}.h3{font-family:var(--font-display);font-size:var(--text-2xl);text-transform:var(--tt-title)}.h3,.h4{color:var(--fg-default);font-weight:700;line-height:var(--leading-snug)}.h4{font-size:var(--text-xl)}.eyebrow,.h4{font-family:var(--font-body)}.eyebrow{color:var(--accent-secondary);font-size:var(--text-sm);font-weight:700;letter-spacing:var(--tracking-wider);text-transform:var(--tt-label)}.body-lg{font-size:var(--text-lg)}.body,.body-lg,p{color:var(--fg-default);font-family:var(--font-body);font-weight:400;line-height:var(--leading-relaxed)}.body,p{font-size:var(--text-md)}.body-sm{font-weight:400;line-height:var(--leading-normal)}.body-sm,.label{color:var(--fg-muted);font-family:var(--font-body);font-size:var(--text-sm)}.label{font-weight:500;letter-spacing:var(--tracking-wide);text-transform:var(--tt-data)}.caption{color:var(--fg-subtle);font-size:var(--text-xs);letter-spacing:var(--tracking-wide)}.caption,.cell-meta{font-family:var(--font-body);font-weight:400}.cell-meta{color:var(--fg-meta);display:block;font-size:var(--text-2xs);line-height:var(--leading-normal)}.cell-mono{font-family:var(--font-mono);font-variant-numeric:tabular-nums}.cell-wrap{overflow-wrap:anywhere;white-space:normal}.mono,code{font-family:var(--font-mono);font-size:.95em}.mono,:not(pre)>code{background:var(--bg-subtle);border-radius:var(--radius-sm);padding:2px 6px}a{border-bottom:1px solid transparent;color:var(--fg-link);text-decoration:none;transition:color var(--duration-fast) var(--ease-standard),border-color var(--duration-fast) var(--ease-standard)}a:hover{border-bottom-color:currentColor;color:var(--fg-link-hover)}.surface-inverse,[data-tone=inverse]{--fg-default:var(--fg-on-brand);--fg-muted:color-mix(in srgb,var(--fg-on-brand) 70%,transparent);--fg-subtle:color-mix(in srgb,var(--fg-on-brand) 50%,transparent);--fg-link:var(--fg-on-brand);--fg-link-hover:var(--color-secondary);--border-default:color-mix(in srgb,var(--fg-on-brand) 20%,transparent);--border-strong:color-mix(in srgb,var(--fg-on-brand) 35%,transparent);--bg-subtle:color-mix(in srgb,var(--fg-on-brand) 12%,transparent);--bg-muted:color-mix(in srgb,var(--fg-on-brand) 18%,transparent);color:var(--fg-default)}.surface-inverse--brand{background:var(--color-primary)}.surface-inverse--dark{background:var(--color-primary-900)}}@layer elalba{}@layer elalba{:where(html,body){color:var(--fg-default);font-family:var(--font-body);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}svg text{font-family:inherit}button,input,optgroup,select,textarea{font:inherit}button,input,select,textarea{box-sizing:border-box}.btn{align-items:center;border:1px solid transparent;border-radius:var(--radius-md);cursor:pointer;display:inline-flex;font-family:var(--font-body);font-size:var(--text-sm);font-weight:700;gap:8px;justify-content:center;letter-spacing:var(--tracking-wide);text-decoration:none;text-transform:var(--tt-label);transition:background var(--duration-fast) var(--ease-standard),color var(--duration-fast) var(--ease-standard),border-color var(--duration-fast) var(--ease-standard),transform var(--duration-fast) var(--ease-standard),box-shadow var(--duration-fast) var(--ease-standard);-webkit-user-select:none;-moz-user-select:none;user-select:none;white-space:nowrap}.btn:focus-visible{box-shadow:var(--focus-ring-accent);outline:none}.btn:active:not(:disabled){box-shadow:var(--shadow-xs);transform:scale(.98)}.btn:disabled{cursor:not-allowed;opacity:.45}.btn--xs{font-size:var(--text-2xs);min-height:28px;padding:6px 10px}.btn--sm{font-size:var(--text-xs);min-height:36px;padding:8px 14px}.btn--md{font-size:var(--text-sm);min-height:44px;padding:10px 18px}.btn--lg{font-size:var(--text-md);min-height:52px;padding:14px 24px}.btn--xl{font-size:var(--text-lg);min-height:60px;padding:18px 32px}.btn--icon{aspect-ratio:1;padding:0}.btn--icon.btn--sm{width:36px}.btn--icon.btn--md{width:44px}.btn--icon.btn--lg{width:52px}.btn--block{display:flex;width:100%}.btn--primary{background:var(--btn-primary-bg,var(--color-primary));color:var(--btn-primary-fg,var(--fg-on-brand))}.btn--primary:hover:not(:disabled){background:var(--btn-primary-bg-hover,var(--color-primary-900))}.btn--secondary{background:var(--btn-secondary-bg,var(--color-secondary));color:var(--btn-secondary-fg,var(--fg-on-secondary))}.btn--secondary:hover:not(:disabled){background:var(--btn-secondary-bg-hover,var(--color-secondary-500))}.btn--outline{background:transparent;border-color:var(--color-primary);color:var(--color-primary)}.btn--outline:hover:not(:disabled){background:var(--color-primary);color:var(--color-white)}.btn--ghost{background:transparent;color:var(--fg-default)}.btn--ghost:hover:not(:disabled),.btn--subtle{background:var(--bg-subtle)}.btn--subtle{color:var(--fg-default)}.btn--subtle:hover:not(:disabled){background:var(--bg-muted)}.btn--danger{background:var(--color-danger);color:var(--color-white)}.btn--danger:hover:not(:disabled){background:var(--color-red-700)}.btn--success{background:var(--color-success);color:var(--color-white)}.btn--success:hover:not(:disabled){background:var(--color-green-700)}.btn--warning{background:var(--color-warning);color:var(--color-yellow-900)}.btn--warning:hover:not(:disabled){background:var(--color-yellow-600)}.btn--link{background:transparent;color:var(--color-primary);font-weight:700;letter-spacing:0;min-height:auto;padding:4px 6px;text-transform:none}.btn--link:hover:not(:disabled){color:var(--color-secondary-700);text-decoration:underline}.btn--link:active:not(:disabled){box-shadow:none;transform:none}.btn-group{display:inline-flex}.btn-group .btn{border-radius:var(--radius-none);border-right-width:0}.btn-group .btn:first-child{border-bottom-left-radius:var(--radius-md);border-top-left-radius:var(--radius-md)}.btn-group .btn:last-child{border-bottom-right-radius:var(--radius-md);border-right-width:1px;border-top-right-radius:var(--radius-md)}.btn-group .btn--outline+.btn--outline{border-left:1px solid var(--color-primary)}.field{display:flex;flex-direction:column;gap:6px}.field__label{align-items:center;color:var(--fg-default);display:flex;font-family:var(--font-body);font-size:var(--text-sm);font-weight:700;gap:4px}.field__label .req{color:var(--color-danger)}.field__label .opt{font-weight:400}.field__help,.field__label .opt{color:var(--fg-subtle);font-size:var(--text-xs)}.field__error,.field__help{font-family:var(--font-body)}.field__error{align-items:center;color:var(--color-danger);display:flex;font-size:var(--text-xs);font-weight:700;gap:4px}.input,.select,.textarea{background:var(--bg-surface);border:1px solid var(--border-strong);border-radius:var(--radius-md);color:var(--fg-default);font-family:var(--font-body);font-size:var(--text-md);min-height:var(--field-min-h,44px);padding:var(--field-pad-y,10px) var(--field-pad-x,14px);transition:border-color var(--duration-fast),box-shadow var(--duration-fast);width:100%}.fields--dense{--field-min-h:36px;--field-pad-y:6px;--field-pad-x:10px}.fields--dense .combobox__input,.fields--dense .input,.fields--dense .select,.fields--dense .textarea{font-size:var(--text-sm)}.input::-moz-placeholder,.textarea::-moz-placeholder{color:var(--fg-subtle)}.input::placeholder,.textarea::placeholder{color:var(--fg-subtle)}.input:hover:not(:disabled),.select:hover:not(:disabled),.textarea:hover:not(:disabled){border-color:var(--border-strong)}.input:focus,.select:focus,.textarea:focus{border-color:var(--color-primary);box-shadow:var(--focus-ring-brand);outline:none}.input:disabled,.select:disabled,.textarea:disabled{background:var(--bg-subtle);color:var(--fg-subtle);cursor:not-allowed}.field--error .input,.field--error .select,.field--error .textarea{border-color:var(--color-danger)}.field--error .input:focus{box-shadow:var(--focus-ring-danger)}.form-field{display:flex;flex-direction:column;gap:6px}.form-field__hint{color:var(--fg-subtle)}.form-field__error,.form-field__hint{font-family:var(--font-body);font-size:var(--text-xs)}.form-field__error{align-items:center;color:var(--color-danger);display:flex;font-weight:700;gap:4px}.select{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='20' height='20' fill='none' stroke='%235b6173' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E");background-position:right 12px center;background-repeat:no-repeat;padding-right:40px}.textarea{min-height:96px;padding-bottom:12px;padding-top:12px;resize:vertical}.input-group{align-items:stretch;background:var(--bg-surface);border:1px solid var(--border-strong);border-radius:var(--radius-md);display:flex;overflow:hidden;transition:border-color var(--duration-fast),box-shadow var(--duration-fast)}.input-group:focus-within{border-color:var(--color-primary);box-shadow:var(--focus-ring-brand)}.input-group .input{border:0;border-radius:var(--radius-none);box-shadow:none}.input-group .input:focus{box-shadow:none}.input-group__addon{align-items:center;background:var(--bg-subtle);border-right:1px solid var(--border-default);color:var(--fg-muted);display:flex;font-family:var(--font-body);font-size:var(--text-sm);font-weight:700;padding:0 14px}.input-group__addon:last-child{border-left:1px solid var(--border-default);border-right:0}.input-wrap{align-items:center;display:flex;position:relative;width:100%}.input-wrap__icon{align-items:center;color:var(--fg-subtle);display:inline-flex;height:20px;justify-content:center;pointer-events:none;position:absolute;width:20px}.input-wrap__icon--left{left:12px}.input-wrap__icon--right{right:12px}.input-wrap .input{width:100%}.input--has-left{padding-left:40px}.input--has-right{padding-right:40px}.input-wrap.is-invalid .input{border-color:var(--color-danger)}.input-wrap.is-invalid .input:focus{box-shadow:var(--focus-ring-danger)}.check{align-items:flex-start;color:var(--fg-default);cursor:pointer;display:inline-flex;font-family:var(--font-body);font-size:var(--text-sm);gap:10px;-webkit-user-select:none;-moz-user-select:none;user-select:none}.check input{opacity:0;pointer-events:none;position:absolute}.check__box{align-items:center;background:var(--bg-surface);border:1.5px solid var(--border-strong);border-radius:var(--radius-sm);display:inline-flex;flex:none;height:20px;justify-content:center;margin-top:1px;transition:background var(--duration-fast),border-color var(--duration-fast);width:20px}.check input:checked~.check__box{background:var(--color-primary);border-color:var(--color-primary);color:var(--color-white)}.check input:focus-visible~.check__box{box-shadow:var(--focus-ring-accent);outline:none}.check:hover .check__box{border-color:var(--border-strong)}.check input:disabled~.check__box{background:var(--bg-subtle);border-color:var(--border-default)}.check__box svg{opacity:0;transition:opacity var(--duration-fast)}.check input:checked~.check__box svg{opacity:1}.check--radio .check__box,.check--radio .check__box:after{border-radius:var(--radius-pill)}.check--radio .check__box:after{background:var(--color-white);content:"";height:8px;opacity:0;transition:opacity var(--duration-fast);width:8px}.check--radio input:checked~.check__box:after{opacity:1}.switch{align-items:center;cursor:pointer;display:inline-flex;gap:10px;-webkit-user-select:none;-moz-user-select:none;user-select:none}.switch input{opacity:0;pointer-events:none;position:absolute}.switch__track{background:var(--color-gray-300);border-radius:var(--radius-pill);flex:none;height:22px;position:relative;transition:background var(--duration-fast) var(--ease-standard);width:40px}.switch__track:after{background:var(--color-white);border-radius:var(--radius-pill);box-shadow:var(--shadow-xs);content:"";height:18px;left:2px;position:absolute;top:2px;transition:transform var(--duration-fast) var(--ease-standard);width:18px}.switch input:checked~.switch__track{background:var(--color-primary)}.switch input:checked~.switch__track:after{transform:translateX(18px)}.switch input:focus-visible~.switch__track{box-shadow:var(--focus-ring-accent)}.switch input:disabled~.switch__track{opacity:.5}.badge{align-items:center;background:var(--bg-subtle);border:1px solid var(--border-default);border-radius:var(--radius-pill);color:var(--fg-muted);display:inline-flex;font-family:var(--font-body);font-size:var(--text-xs);font-weight:600;gap:6px;letter-spacing:var(--tracking-wide);padding:3px 8px;text-transform:none;white-space:nowrap;--badge-ink:var(--color-gray-800)}.badge--label{text-transform:var(--tt-label)}.badge--primary{background:var(--color-primary-100);border-color:var(--color-primary-200);color:var(--color-primary-800);--badge-ink:var(--color-primary-800)}.badge--accent{background:var(--color-secondary-100);border-color:var(--color-secondary-200);color:var(--color-secondary-800);--badge-ink:var(--color-secondary-800)}.badge--success{background:var(--color-green-50);border-color:var(--color-green-200);color:var(--color-green-800);--badge-ink:var(--color-green-800)}.badge--warning{background:var(--color-yellow-50);border-color:var(--color-yellow-200);color:var(--color-yellow-800);--badge-ink:var(--color-yellow-800)}.badge--danger{background:var(--color-red-50);border-color:var(--color-red-200);color:var(--color-red-800);--badge-ink:var(--color-red-800)}.badge--info{background:var(--color-info-50);border-color:var(--color-info-200);color:var(--color-info-800);--badge-ink:var(--color-info-800)}.badge--cat-1{background:var(--cat-1-bg);border-color:transparent;color:var(--cat-1-fg);--badge-ink:var(--cat-1-fg)}.badge--cat-2{background:var(--cat-2-bg);border-color:transparent;color:var(--cat-2-fg);--badge-ink:var(--cat-2-fg)}.badge--cat-3{background:var(--cat-3-bg);border-color:transparent;color:var(--cat-3-fg);--badge-ink:var(--cat-3-fg)}.badge--cat-4{background:var(--cat-4-bg);border-color:transparent;color:var(--cat-4-fg);--badge-ink:var(--cat-4-fg)}.badge--cat-5{background:var(--cat-5-bg);border-color:transparent;color:var(--cat-5-fg);--badge-ink:var(--cat-5-fg)}.badge--cat-6{background:var(--cat-6-bg);border-color:transparent;color:var(--cat-6-fg);--badge-ink:var(--cat-6-fg)}.badge--app-solid{background:var(--badge-ink);border-color:transparent;color:var(--color-white)}.badge--app-outline{background:transparent;border-color:var(--badge-ink);color:var(--badge-ink)}.badge--solid{background:var(--color-primary)}.badge--solid,.badge--solid-orange{border-color:transparent;color:var(--color-white)}.badge--solid-orange{background:var(--color-secondary)}.badge__dot{background:currentColor;border-radius:var(--radius-pill);height:6px;width:6px}.badge__dot.is-pulsing{animation:status-pulse 1.6s ease-out infinite}@media (prefers-reduced-motion:reduce){.badge__dot.is-pulsing{animation:none}}.chip{align-items:center;background:var(--bg-subtle);border:1px solid var(--border-default);border-radius:var(--radius-pill);color:var(--fg-default);cursor:pointer;display:inline-flex;font-family:var(--font-body);font-size:var(--text-sm);gap:6px;padding:6px 12px;transition:background var(--duration-fast),border-color var(--duration-fast)}.chip:hover{background:var(--bg-muted)}.chip--active{background:var(--color-primary);border-color:var(--color-primary);color:var(--color-white)}.chip__close{align-items:center;background:transparent;border:0;border-radius:var(--radius-pill);color:inherit;cursor:pointer;display:inline-flex;height:16px;justify-content:center;opacity:.6;padding:0;transition:opacity var(--duration-fast),background var(--duration-fast);width:16px}.chip__close:hover{background:rgba(0,0,0,.08);opacity:1}.chip--active .chip__close:hover{background:hsla(0,0%,100%,.2)}.chip__close:focus-visible{box-shadow:var(--focus-ring-accent);outline:none}.chip__close svg{display:block}.avatar{align-items:center;border-radius:var(--radius-pill);display:inline-flex;flex:none;font-size:var(--text-sm);font-weight:700;height:40px;justify-content:center;letter-spacing:.02em;position:relative;text-transform:var(--tt-label);width:40px}.avatar img{border-radius:inherit;height:100%;-o-object-fit:cover;object-fit:cover;width:100%}.avatar--xs{font-size:.625rem;height:24px;width:24px}.avatar--sm{font-size:var(--text-2xs);height:32px;width:32px}.avatar--lg{font-size:var(--text-md);height:56px;width:56px}.avatar--xl{font-size:var(--text-xl);height:80px;width:80px}.avatar-stack{display:inline-flex}.avatar-stack .avatar{border:2px solid var(--bg-surface);margin-left:-10px}.avatar-stack .avatar:first-child{margin-left:0}.card{background:var(--bg-surface);border:1px solid var(--border-default);border-radius:var(--radius-lg);box-shadow:var(--shadow-card);overflow:hidden}.card .card{box-shadow:none}.card__body,.card__header{padding:20px 24px}.card__header{border-bottom:1px solid var(--border-default)}.card__footer{background:var(--bg-subtle);border-top:1px solid var(--border-default);padding:16px 24px}.card__title{font-family:var(--font-body);font-size:var(--text-lg);font-weight:700;margin:0 0 4px}.card__subtitle{color:var(--fg-muted);font-size:var(--text-sm);margin:0}.card--interactive{cursor:pointer;transition:box-shadow var(--duration-base) var(--ease-standard),transform var(--duration-base) var(--ease-standard)}.card--interactive:hover{box-shadow:var(--shadow-card-hover);transform:translateY(-2px)}.card--accent-brand,.card--accent-cat-1,.card--accent-cat-2,.card--accent-cat-3,.card--accent-cat-4,.card--accent-cat-5,.card--accent-cat-6,.card--accent-danger,.card--accent-info,.card--accent-neutral,.card--accent-secondary,.card--accent-success,.card--accent-warning{box-shadow:inset 4px 0 0 var(--card-accent-color),var(--shadow-card)}.card--accent-brand{--card-accent-color:var(--color-primary)}.card--accent-secondary{--card-accent-color:var(--accent-secondary)}.card--accent-success{--card-accent-color:var(--color-success)}.card--accent-warning{--card-accent-color:var(--color-warning)}.card--accent-danger{--card-accent-color:var(--color-danger)}.card--accent-info{--card-accent-color:var(--color-info)}.card--accent-neutral{--card-accent-color:var(--border-strong)}.card--accent-cat-1{--card-accent-color:var(--cat-1)}.card--accent-cat-2{--card-accent-color:var(--cat-2)}.card--accent-cat-3{--card-accent-color:var(--cat-3)}.card--accent-cat-4{--card-accent-color:var(--cat-4)}.card--accent-cat-5{--card-accent-color:var(--cat-5)}.card--accent-cat-6{--card-accent-color:var(--cat-6)}.card--interactive.card--accent-brand:hover,.card--interactive.card--accent-cat-1:hover,.card--interactive.card--accent-cat-2:hover,.card--interactive.card--accent-cat-3:hover,.card--interactive.card--accent-cat-4:hover,.card--interactive.card--accent-cat-5:hover,.card--interactive.card--accent-cat-6:hover,.card--interactive.card--accent-danger:hover,.card--interactive.card--accent-info:hover,.card--interactive.card--accent-neutral:hover,.card--interactive.card--accent-secondary:hover,.card--interactive.card--accent-success:hover,.card--interactive.card--accent-warning:hover{box-shadow:inset 4px 0 0 var(--card-accent-color),var(--shadow-card-hover)}.kpi-card{background:var(--bg-surface);border:1px solid var(--border-default);border-radius:var(--radius-lg);display:flex;flex-direction:column;gap:8px;padding:20px 24px}.kpi-card__label{color:var(--fg-muted);font-family:var(--font-body);font-size:var(--text-xs);font-weight:700;letter-spacing:var(--tracking-wider);text-transform:var(--tt-label)}.kpi-card__value{color:var(--fg-default);font-family:var(--font-display);font-size:var(--text-4xl);font-weight:700;line-height:1}.kpi-card__trend{align-items:center;display:inline-flex;font-family:var(--font-body);font-size:var(--text-xs);font-weight:700;gap:4px}.kpi-card__trend--up{color:var(--color-success)}.kpi-card__trend--down{color:var(--color-danger)}.product-card{background:var(--bg-surface);border:1px solid var(--border-default);border-radius:var(--radius-lg);display:flex;flex-direction:column;overflow:hidden;position:relative;transition:box-shadow var(--duration-base),transform var(--duration-base)}.product-card:hover{box-shadow:var(--shadow-md);transform:translateY(-2px)}.product-card__media{aspect-ratio:1;background:var(--bg-subtle);overflow:hidden;position:relative}.product-card__media,.product-card__placeholder{align-items:center;display:flex;justify-content:center}.product-card__placeholder{background-image:linear-gradient(45deg,var(--bg-muted) 25%,transparent 25%),linear-gradient(-45deg,var(--bg-muted) 25%,transparent 25%);background-size:16px 16px;color:var(--color-gray-500);font-size:var(--text-xs);height:100%;width:100%}.product-card__body{display:flex;flex:1;flex-direction:column;gap:6px;padding:16px}.product-card__title{font-size:var(--text-md);font-weight:700;line-height:1.3;margin:0}.product-card__sku{color:var(--fg-subtle);font-family:var(--font-mono);font-size:var(--text-xs)}.product-card__price{color:var(--color-primary);font-size:var(--text-xl);font-weight:700}.product-card__footer{align-items:center;display:flex;gap:8px;justify-content:space-between;padding:0 16px 16px}.product-card__tag{background:var(--color-secondary);color:var(--color-white);font-size:var(--text-2xs);font-weight:700;left:12px;letter-spacing:var(--tracking-wide);padding:4px 8px;position:absolute;text-transform:var(--tt-label);top:12px}.alert{align-items:flex-start;background:var(--bg-subtle);border:1px solid var(--border-default);border-radius:var(--radius-md);display:flex;font-family:var(--font-body);font-size:var(--text-sm);gap:12px;line-height:1.5;padding:14px 18px}.alert__icon{flex:none;margin-top:1px}.alert__body{flex:1}.alert__title{font-weight:700;margin-bottom:2px}.alert__desc{color:inherit;font-size:var(--text-sm);line-height:1.5;opacity:.92}.alert--info{background:var(--color-info-50);border-color:var(--color-info-200);color:var(--color-info-800)}.alert--info .alert__icon{color:var(--color-info)}.alert--success{background:var(--color-green-50);border-color:var(--color-green-200);color:var(--color-green-800)}.alert--success .alert__icon{color:var(--color-success)}.alert--warning{background:var(--color-yellow-50);border-color:var(--color-yellow-200);color:var(--color-yellow-800)}.alert--warning .alert__icon{color:var(--color-warning)}.alert--danger{background:var(--color-red-50);border-color:var(--color-red-200);color:var(--color-red-800)}.alert--danger .alert__icon{color:var(--color-danger)}.alert__close{background:transparent;border:0;color:currentColor;cursor:pointer;opacity:.7;padding:2px}.alert__close:hover{opacity:1}.tooltip{display:inline-flex;position:relative}.tooltip__bubble{background:var(--color-ink);border-radius:var(--radius-sm);color:var(--color-white);font-family:var(--font-body);font-size:var(--text-xs);font-weight:700;opacity:0;padding:6px 10px;pointer-events:none;position:absolute;transition:opacity var(--duration-fast);white-space:nowrap;z-index:var(--z-tooltip)}.tooltip__bubble:after{border:4px solid transparent;content:"";position:absolute}.tooltip--top .tooltip__bubble{bottom:calc(100% + 8px);left:50%;transform:translateX(-50%)}.tooltip--top .tooltip__bubble:after{border-top-color:var(--color-ink);left:50%;top:100%;transform:translateX(-50%)}.tooltip--bottom .tooltip__bubble{left:50%;top:calc(100% + 8px);transform:translateX(-50%)}.tooltip--bottom .tooltip__bubble:after{border-bottom-color:var(--color-ink);bottom:100%;left:50%;transform:translateX(-50%)}.tooltip--left .tooltip__bubble{right:calc(100% + 8px);top:50%;transform:translateY(-50%)}.tooltip--left .tooltip__bubble:after{border-left-color:var(--color-ink);left:100%;top:50%;transform:translateY(-50%)}.tooltip--right .tooltip__bubble{left:calc(100% + 8px);top:50%;transform:translateY(-50%)}.tooltip--right .tooltip__bubble:after{border-right-color:var(--color-ink);right:100%;top:50%;transform:translateY(-50%)}.tooltip:focus-within .tooltip__bubble,.tooltip:hover .tooltip__bubble{opacity:1}.tabs{display:flex;flex-direction:column}.tabs__list{border-bottom:1px solid var(--border-default);display:flex;gap:4px}.tabs__tab{background:transparent;border:0;border-bottom:2px solid transparent;color:var(--fg-default);cursor:pointer;font-family:var(--font-body);font-size:var(--text-sm);font-weight:600;margin-bottom:-1px;padding:12px 18px;transition:color var(--duration-fast),border-color var(--duration-fast)}.tabs__tab.is-active,.tabs__tab:hover{color:var(--color-primary)}.tabs__tab.is-active{border-bottom-color:var(--color-secondary)}.tabs__tab:focus-visible{border-radius:var(--radius-sm);box-shadow:var(--focus-ring-accent);outline:none}.tabs__panel{padding:16px 0}.tabs--pill .tabs__list{background:var(--bg-subtle);border:0;border-radius:var(--radius-md);display:inline-flex;gap:8px;padding:4px}.tabs--pill .tabs__tab{border:0;border-radius:var(--radius-sm);margin:0;padding:8px 14px}.tabs--pill .tabs__tab.is-active{background:var(--bg-surface);box-shadow:var(--shadow-xs);color:var(--color-primary)}.pagination__btn{align-items:center;display:inline-flex;font-weight:500;height:36px;justify-content:center;min-width:36px;padding:0 10px;transition:background var(--duration-fast),border-color var(--duration-fast)}.pagination__btn.active{background:var(--color-primary);border-color:var(--color-primary);color:var(--color-white)}.pagination__ellipsis{align-self:center;color:var(--fg-subtle)}.breadcrumbs{align-items:center;display:flex;flex-wrap:wrap;gap:6px}.breadcrumbs__current{color:var(--fg-default);font-weight:700}.table-wrap{background:linear-gradient(to right,var(--bg-surface) 30%,transparent) 0,linear-gradient(to left,var(--bg-surface) 30%,transparent) 100%,linear-gradient(to right,rgba(0,0,0,.08),transparent 24px) 0,linear-gradient(to left,rgba(0,0,0,.08),transparent 24px) 100%,var(--bg-surface);background-attachment:local,local,scroll,scroll,scroll;background-clip:padding-box;background-repeat:no-repeat;background-size:30px 100%,30px 100%,24px 100%,24px 100%,100% 100%;border:1px solid var(--border-default);border-radius:var(--radius-lg);box-shadow:var(--table-elevation,none);overflow-x:auto}.table-wrap--flush{border:0;border-radius:0;box-shadow:none}.table-wrap--flush>.data-table thead tr:first-child th:first-child,.table-wrap--flush>.data-table thead tr:first-child th:last-child{border-top-left-radius:0;border-top-right-radius:0}.table-wrap>.data-table thead tr:first-child th:first-child{border-top-left-radius:var(--radius-lg)}.table-wrap>.data-table thead tr:first-child th:last-child{border-top-right-radius:var(--radius-lg)}.table{border-collapse:collapse;color:var(--fg-default);font-family:var(--font-body);font-size:var(--text-sm);width:100%}.table th{background:var(--bg-subtle);border-bottom:1px solid var(--border-default);color:var(--fg-muted);font-size:var(--text-xs);font-weight:500;letter-spacing:var(--tracking-snug);padding:8px 12px;text-align:left;text-transform:var(--tt-data);white-space:nowrap}.data-table__sort{display:inline-flex;margin-left:4px;opacity:.75;vertical-align:middle}.data-table__sort-btn{align-items:center;background:transparent;border:0;color:inherit;cursor:pointer;display:inline-flex;font-size:inherit;font-weight:inherit;gap:4px;letter-spacing:inherit;padding:0;text-transform:inherit}.data-table__sort-btn:hover{color:var(--fg-default)}.data-table__sort-btn:focus-visible{border-radius:var(--radius-sm);box-shadow:var(--focus-ring-accent);outline:none}.table th[aria-sort=ascending],.table th[aria-sort=descending]{background:var(--color-primary-50);border-bottom-color:var(--color-primary);color:var(--color-primary)}.data-table__error{color:var(--color-danger);font-size:var(--text-sm)}.table-pagination{align-items:center;display:flex;flex-wrap:wrap;gap:var(--space-3);justify-content:space-between;padding:var(--space-3) 0}.table-pagination__size{align-items:center;color:var(--fg-muted);display:inline-flex;font-size:var(--text-sm);gap:var(--space-2)}.table-pagination__size .select{min-width:0;width:auto}@media (max-width:600px){.table-pagination{justify-content:center}}.table-wrap--scroll{overflow:hidden}.table-wrap__scroll{overflow:auto}.table-wrap__sentinel{height:0}.cmdk__list,.combobox__list,.drawer__body,.kit-scrollbar,.menu__panel,.modal__body,.multicombo__list,.notif__list,.table-wrap__scroll,.transfer__list{scrollbar-color:var(--border-strong) transparent;scrollbar-width:thin}.cmdk__list::-webkit-scrollbar,.combobox__list::-webkit-scrollbar,.drawer__body::-webkit-scrollbar,.kit-scrollbar::-webkit-scrollbar,.menu__panel::-webkit-scrollbar,.modal__body::-webkit-scrollbar,.multicombo__list::-webkit-scrollbar,.notif__list::-webkit-scrollbar,.table-wrap__scroll::-webkit-scrollbar,.transfer__list::-webkit-scrollbar{height:12px;width:12px}.cmdk__list::-webkit-scrollbar-track,.combobox__list::-webkit-scrollbar-track,.drawer__body::-webkit-scrollbar-track,.kit-scrollbar::-webkit-scrollbar-track,.menu__panel::-webkit-scrollbar-track,.modal__body::-webkit-scrollbar-track,.multicombo__list::-webkit-scrollbar-track,.notif__list::-webkit-scrollbar-track,.table-wrap__scroll::-webkit-scrollbar-track,.transfer__list::-webkit-scrollbar-track{background:transparent}.cmdk__list::-webkit-scrollbar-thumb,.combobox__list::-webkit-scrollbar-thumb,.drawer__body::-webkit-scrollbar-thumb,.kit-scrollbar::-webkit-scrollbar-thumb,.menu__panel::-webkit-scrollbar-thumb,.modal__body::-webkit-scrollbar-thumb,.multicombo__list::-webkit-scrollbar-thumb,.notif__list::-webkit-scrollbar-thumb,.table-wrap__scroll::-webkit-scrollbar-thumb,.transfer__list::-webkit-scrollbar-thumb{background:var(--border-strong);background-clip:content-box;border:3px solid transparent;border-radius:999px}.cmdk__list::-webkit-scrollbar-thumb:hover,.combobox__list::-webkit-scrollbar-thumb:hover,.drawer__body::-webkit-scrollbar-thumb:hover,.kit-scrollbar::-webkit-scrollbar-thumb:hover,.menu__panel::-webkit-scrollbar-thumb:hover,.modal__body::-webkit-scrollbar-thumb:hover,.multicombo__list::-webkit-scrollbar-thumb:hover,.notif__list::-webkit-scrollbar-thumb:hover,.table-wrap__scroll::-webkit-scrollbar-thumb:hover,.transfer__list::-webkit-scrollbar-thumb:hover{background:var(--fg-subtle)}.table-wrap--sticky:not(.table-wrap--scroll){overflow:visible}.table-wrap--sticky .table thead th{background:var(--bg-subtle);box-shadow:inset 0 -1px 0 var(--border-default);position:sticky;top:0;transition:box-shadow var(--duration-base,.2s) var(--ease-standard,ease);z-index:1}.table-wrap--sticky .table-wrap__scroll.is-stuck .data-table thead th{box-shadow:inset 0 -1px 0 var(--border-default),0 6px 8px -6px rgba(12,18,32,.18)}.data-table__expand-btn{align-items:center;background:transparent;border:0;border-radius:var(--radius-sm);color:var(--fg-subtle);cursor:pointer;display:inline-flex;height:24px;justify-content:center;transition:color var(--duration-fast),background var(--duration-fast);width:24px}.data-table__expand-btn:hover{background:var(--bg-subtle);color:var(--fg-default)}.data-table__expand-btn:focus-visible{box-shadow:var(--focus-ring-accent);outline:none}.data-table__expand-btn svg{transition:transform var(--duration-fast)}.data-table__expand-btn[aria-expanded=true] svg{transform:rotate(90deg)}.data-table__detail>td{background:var(--bg-subtle);box-shadow:inset 0 1px 0 var(--border-default);padding:12px 16px}.data-table__spacer>td{border:0;padding:0}.column-toggle{display:grid;gap:2px;min-width:180px;padding:4px}.column-toggle__item{border-radius:var(--radius-sm);color:var(--fg-default);font-size:var(--text-sm);padding:6px 8px;-webkit-user-select:none;-moz-user-select:none;user-select:none}.column-toggle__item:hover{background:var(--bg-subtle)}.column-toggle__item:has(input:disabled){color:var(--fg-subtle);cursor:not-allowed}.editable-cell{align-items:center;background:transparent;border:0;border-radius:var(--radius-sm);color:inherit;cursor:pointer;display:inline-flex;font:inherit;gap:6px;margin:-2px -4px;max-width:100%;padding:2px 4px;text-align:inherit}.editable-cell:hover{background:var(--bg-subtle)}.editable-cell:focus-visible{box-shadow:var(--focus-ring-accent);outline:none}.editable-cell.is-disabled{color:var(--fg-subtle);cursor:default}.editable-cell__value{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.editable-cell__icon{color:var(--fg-subtle);flex-shrink:0;opacity:0;transition:opacity var(--duration-fast)}.editable-cell:focus-visible .editable-cell__icon,.editable-cell:hover .editable-cell__icon{opacity:1}.editable-cell__input{font-size:inherit;height:26px;min-height:0;min-width:80px;padding:0 6px;width:100%}.data-table tfoot td{background:var(--bg-subtle);box-shadow:inset 0 1px 0 var(--border-default);font-weight:600;padding:8px 12px}.table-wrap--scroll .data-table tfoot td{bottom:0;position:sticky;z-index:1}@media (max-width:600px){.table-wrap--cards .table{border:0}.table-wrap--cards .table tfoot,.table-wrap--cards .table thead{display:none}.table-wrap--cards .table tr{background:var(--bg-surface);border:1px solid var(--border-default);border-radius:var(--radius-md);display:block;margin-bottom:var(--space-3);padding:var(--space-3)}.table-wrap--cards .table td{align-items:baseline;border:0;display:flex;gap:var(--space-3);justify-content:space-between;overflow:visible;padding:var(--space-2) 0;text-align:left!important;text-overflow:clip;white-space:normal}.table-wrap--cards .table td:not(:last-child){border-bottom:1px solid var(--border-subtle)}.table-wrap--cards .table td[data-label]:before{color:var(--fg-muted);content:attr(data-label);flex-shrink:0;font-size:var(--text-xs);font-weight:600;letter-spacing:var(--tracking-wide);text-transform:var(--tt-label)}}.table th[aria-sort=ascending] .data-table__sort,.table th[aria-sort=descending] .data-table__sort{color:var(--color-primary);opacity:1}.table td{border-bottom:1px solid var(--border-default);font-size:var(--text-sm);overflow:hidden;padding:8px 12px;text-overflow:ellipsis;vertical-align:middle;white-space:nowrap}.table tr:last-child td{border-bottom:0}.table tbody tr{transition:background var(--duration-fast)}.table tbody tr:hover{background:var(--bg-muted)}.table--compact td,.table--compact th{font-size:var(--text-xs);padding:8px 12px}.table--comfortable th{padding:14px 16px}.table--comfortable td{font-size:var(--text-sm);overflow:visible;padding:14px 16px;text-overflow:clip;white-space:normal}.table__num{font-family:var(--font-mono)}.table td.table__align-right,.table__num{text-align:right}.table td.table__align-center{text-align:center}.table td.table__align-right>*{margin-left:auto}.table td.table__align-center>*{margin-inline:auto}.table-toolbar{align-items:center;background:var(--bg-surface);border-bottom:1px solid var(--border-default);display:flex;flex-wrap:wrap;gap:12px;padding:14px 16px}.table-toolbar>.grow,.table-toolbar>.input,.table-toolbar>.input-wrap,.table-toolbar>.select{flex:1 1 200px;min-width:0}.table-toolbar+.table-wrap{border-top:0;border-top-left-radius:0;border-top-right-radius:0}.table-surface{background:var(--bg-surface);border:1px solid var(--border-default);border-radius:var(--radius-lg);box-shadow:var(--table-elevation,none);overflow:hidden}.table-surface__bar{border-bottom:1px solid var(--border-default)}.table-surface--flush,.table-surface>.table-wrap{border:0;border-radius:0;box-shadow:none}.table-surface .data-table thead tr:first-child th:first-child{border-top-left-radius:0}.table-surface .data-table thead tr:first-child th:last-child{border-top-right-radius:0}.modal-backdrop{align-items:center;animation:fadeIn var(--duration-base) var(--ease-standard);background:var(--backdrop);display:flex;inset:0;justify-content:center;padding:24px;position:fixed;z-index:var(--z-overlay)}.modal{animation:rise var(--duration-base) var(--ease-standard);background:var(--bg-surface);border-radius:var(--radius-lg);box-shadow:var(--shadow-lg);display:flex;flex-direction:column;max-height:calc(100vh - 48px);max-width:520px;overflow:hidden;width:100%}.modal--sm{max-width:380px}.modal--md{max-width:520px}.modal--lg{max-width:760px}.modal__header{align-items:center;border-bottom:1px solid var(--border-default);display:flex;justify-content:space-between;padding:20px 24px}.modal__title{font-family:var(--font-display);font-size:var(--text-xl);font-weight:700;letter-spacing:var(--tracking-tight);margin:0;text-transform:var(--tt-title)}.modal__body{min-width:0;overflow-x:hidden;overflow-y:auto;padding:24px}.modal__footer{background:var(--bg-subtle);border-top:1px solid var(--border-default);display:flex;flex-wrap:wrap;gap:8px;justify-content:flex-end;padding:16px 24px}.modal__close{background:transparent;border:0;border-radius:var(--radius-sm);color:var(--fg-muted);cursor:pointer;padding:4px}.modal__close:hover{background:var(--bg-subtle);color:var(--fg-default)}.drawer-backdrop{animation:fadeIn var(--duration-base) var(--ease-standard);background:var(--backdrop);display:flex;inset:0;justify-content:flex-end;position:fixed;z-index:var(--z-overlay)}.drawer{animation:slideIn var(--duration-base) var(--ease-standard);background:var(--bg-surface);box-shadow:var(--shadow-lg);display:flex;flex-direction:column;height:100%;max-width:480px;width:100%}.drawer-backdrop:has(.drawer--left){justify-content:flex-start}.drawer--left{animation:slideInLeft var(--duration-base) var(--ease-standard)}.drawer__header{align-items:center;border-bottom:1px solid var(--border-default);display:flex;justify-content:space-between;padding:20px 24px}.drawer__title{font-family:var(--font-display);font-size:var(--text-xl);font-weight:700;letter-spacing:var(--tracking-tight);margin:0;text-transform:var(--tt-title)}.drawer__body{flex:1;overflow-y:auto;padding:24px}.drawer__footer{background:var(--bg-subtle);border-top:1px solid var(--border-default);display:flex;flex-wrap:wrap;gap:8px;justify-content:flex-end;padding:16px 24px}.drawer__close{background:transparent;border:0;border-radius:var(--radius-sm);color:var(--fg-muted);cursor:pointer;padding:4px}.drawer__close:hover{background:var(--bg-subtle);color:var(--fg-default)}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes rise{0%{opacity:0;transform:translateY(8px) scale(.98)}to{opacity:1;transform:translateY(0) scale(1)}}@keyframes slideIn{0%{opacity:0;transform:translateX(20px)}to{opacity:1;transform:translateX(0)}}@keyframes slideInLeft{0%{opacity:0;transform:translateX(-20px)}to{opacity:1;transform:translateX(0)}}@keyframes fadeOut{0%{opacity:1}to{opacity:0}}@keyframes sink{0%{opacity:1;transform:translateY(0) scale(1)}to{opacity:0;transform:translateY(8px) scale(.98)}}@keyframes slideOut{0%{opacity:1;transform:translateX(0)}to{opacity:0;transform:translateX(20px)}}@keyframes slideOutLeft{0%{opacity:1;transform:translateX(0)}to{opacity:0;transform:translateX(-20px)}}.modal-backdrop.is-closing{animation:fadeOut var(--duration-exit) var(--ease-standard) forwards}.modal.is-closing{animation:sink var(--duration-exit) var(--ease-standard) forwards}.drawer-backdrop.is-closing{animation:fadeOut var(--duration-exit) var(--ease-standard) forwards}.drawer--right.is-closing{animation:slideOut var(--duration-exit) var(--ease-standard) forwards}.drawer--left.is-closing{animation:slideOutLeft var(--duration-exit) var(--ease-standard) forwards}@keyframes slideInBottom{0%{opacity:0;transform:translateY(100%)}to{opacity:1;transform:translateY(0)}}@keyframes slideOutBottom{0%{opacity:1;transform:translateY(0)}to{opacity:0;transform:translateY(100%)}}@media (max-width:600px){.drawer-backdrop{align-items:flex-end;justify-content:stretch}.drawer-backdrop:has(.drawer--left){justify-content:stretch}.drawer{animation:slideInBottom var(--duration-base) var(--ease-standard);border-radius:var(--radius-lg) var(--radius-lg) 0 0;height:auto;max-height:90vh;max-width:none;width:100%}.drawer--left.is-closing,.drawer--right.is-closing,.drawer.is-closing{animation:slideOutBottom var(--duration-exit) var(--ease-standard) forwards}}.menu-item{align-items:center;background:transparent;border:0;border-radius:var(--radius-sm);color:var(--fg-default);cursor:pointer;display:flex;font-family:var(--font-body);font-size:var(--text-sm);gap:8px;padding:8px 10px;text-align:left;width:100%}.menu-item:hover{background:var(--bg-subtle)}.menu-item--danger{color:var(--color-danger)}.menu-divider{background:var(--border-default);height:1px;margin:4px 0}.toast-stack{bottom:24px;display:flex;flex-direction:column;gap:8px;pointer-events:none;position:fixed;right:24px;z-index:var(--z-toast)}.toast{align-items:center;animation:slideUp var(--duration-base) var(--ease-standard);background:var(--bg-surface);border:1px solid var(--border-default);border-left-width:4px;border-radius:var(--radius-md);box-shadow:var(--shadow-lg);color:var(--fg-default);display:flex;font-family:var(--font-body);font-size:var(--text-sm);gap:12px;max-width:420px;min-width:320px;padding:14px 16px 14px 14px;pointer-events:auto}.toast:has(.toast__desc){align-items:flex-start}.toast:has(.toast__desc) .toast__icon{margin-top:1px}.toast__body{flex:1;min-width:0}.toast__title{color:var(--fg-default);font-weight:700}.toast:has(.toast__desc) .toast__title{margin-bottom:2px}.toast__desc{color:var(--fg-muted);font-size:var(--text-xs);line-height:1.4}.toast__close,.toast__icon{display:inline-flex;flex:none}.toast__close{align-items:center;align-self:flex-start;background:transparent;border:0;border-radius:var(--radius-sm);color:var(--fg-muted);cursor:pointer;justify-content:center;line-height:1;padding:2px 6px}.toast__close:hover{background:var(--bg-subtle);color:var(--fg-default)}.toast--success{border-left-color:var(--color-success)}.toast--success .toast__icon{color:var(--color-success)}.toast--warning{border-left-color:var(--color-warning)}.toast--warning .toast__icon{color:var(--color-warning)}.toast--danger{border-left-color:var(--color-danger)}.toast--danger .toast__icon{color:var(--color-danger)}.toast--info{border-left-color:var(--color-info)}.toast--info .toast__icon{color:var(--color-info)}@keyframes slideUp{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}@keyframes toastSlideOut{0%{opacity:1;transform:translateX(0)}to{opacity:0;transform:translateX(100%)}}.toast.is-closing{animation:toastSlideOut var(--duration-exit) var(--ease-standard) forwards}.empty{background:var(--bg-subtle);border:1px dashed var(--border-strong);border-radius:var(--radius-lg);padding:48px 24px;text-align:center}.empty,.empty__icon{color:var(--fg-muted)}.empty__icon{align-items:center;background:var(--bg-surface);border:1px solid var(--border-default);border-radius:var(--radius-pill);display:inline-flex;height:56px;justify-content:center;margin:0 auto 16px;width:56px}.empty__title{color:var(--fg-default);font-family:var(--font-display);font-size:var(--text-xl);font-weight:700;margin:0 0 8px;text-transform:var(--tt-title)}.empty__desc{color:var(--fg-muted);font-size:var(--text-sm);line-height:1.5;margin:0 0 16px;margin-inline:auto;max-width:360px}.skel{animation:shimmer 1.6s linear infinite;background:linear-gradient(90deg,var(--bg-subtle),var(--bg-muted),var(--bg-subtle));background-size:200% 100%;border-radius:var(--radius-sm);display:block}@keyframes shimmer{0%{background-position:200% 0}to{background-position:-200% 0}}.progress{background:var(--bg-subtle);border-radius:var(--radius-pill);height:8px;overflow:hidden}.progress__bar{background:var(--color-primary);border-radius:inherit;height:100%;transition:width var(--duration-base)}.progress__bar--orange{background:var(--color-secondary)}.progress__bar--success{background:var(--color-success)}.spinner{animation:spin .8s linear infinite;border:2px solid var(--border-default);border-radius:var(--radius-pill);border-top-color:var(--color-primary);display:inline-block;height:20px;width:20px}.spinner--lg{border-width:3px;height:32px;width:32px}.spinner--inverse{border-color:hsla(0,0%,100%,.35);border-top-color:var(--color-white);border-width:2px;height:16px;width:16px}@keyframes spin{to{transform:rotate(1turn)}}.stepper{gap:0;list-style:none;margin:0;padding:0;width:100%}.stepper,.stepper__item{align-items:center;display:flex}.stepper__item{flex:1;gap:12px}.stepper__item:last-child{flex:0 0 auto}.stepper__circle{align-items:center;background:var(--bg-surface);border:2px solid var(--border-strong);border-radius:var(--radius-pill);color:var(--fg-muted);display:inline-flex;flex:none;font-family:var(--font-body);font-size:var(--text-md);font-weight:700;height:36px;justify-content:center;line-height:1;width:36px}.stepper__item.is-current .stepper__circle{background:var(--color-primary);border-color:var(--color-primary);color:var(--color-white)}.stepper__item.is-done .stepper__circle{background:var(--color-success);border-color:var(--color-success);color:var(--color-white)}.stepper__label{color:var(--fg-muted);font-size:var(--text-sm);font-weight:700}.stepper__desc,.stepper__label{font-family:var(--font-body);white-space:nowrap}.stepper__desc{color:var(--fg-subtle);font-size:var(--text-xs)}.stepper__item.is-current .stepper__label,.stepper__item.is-done .stepper__label{color:var(--fg-default)}.stepper__item:not(:last-child):after{background:var(--border-default);content:"";flex:1;height:2px;margin:0 12px}.stepper__item.is-done:not(:last-child):after{background:var(--color-success)}.accordion{border-radius:var(--radius-lg)}.accordion__item{border-bottom:1px solid var(--border-default)}.accordion__item:last-child{border-bottom:0}.upload{background:var(--bg-subtle);border:1.5px dashed var(--border-strong);border-radius:var(--radius-lg);color:var(--fg-muted);cursor:pointer;padding:32px 24px;text-align:center;transition:border-color var(--duration-fast),background var(--duration-fast)}.upload.dragover,.upload:hover{background:var(--color-primary-50);border-color:var(--color-primary);color:var(--color-primary)}.upload__title{color:var(--fg-default);font-family:var(--font-body);font-weight:700;margin:8px 0 4px}.divider{height:1px;width:100%}.divider,.divider--vertical{background:var(--border-default)}.divider--vertical{height:100%;min-height:24px;width:1px}.tpl-nav{background:var(--color-primary);color:var(--color-white);gap:16px;justify-content:space-between;padding:12px 24px}.tpl-nav,.tpl-nav__brand{align-items:center;display:flex}.tpl-nav__brand{gap:12px}.tpl-nav__brand img{height:32px}.tpl-nav__title{font-family:var(--font-display);font-size:var(--text-md);font-weight:700;letter-spacing:var(--tracking-wide);text-transform:var(--tt-title)}.tpl-nav__items{display:flex;gap:4px}.tpl-nav__items a{border-radius:var(--radius-sm);color:hsla(0,0%,100%,.85);font-size:var(--text-sm);font-weight:700;padding:8px 14px}.tpl-nav__items a:hover{background:hsla(0,0%,100%,.1);color:var(--color-white)}.tpl-nav__items a.active{background:hsla(0,0%,100%,.15);color:var(--color-white)}.tpl-sb{background:var(--bg-surface);border-right:1px solid var(--border-default);display:flex;flex:none;flex-direction:column;height:100%;width:240px}.tpl-sb__brand{align-items:center;border-bottom:1px solid var(--border-default);display:flex;gap:10px;padding:18px 20px}.tpl-sb__brand img{height:28px}.tpl-sb__title{font-family:var(--font-display);font-size:var(--text-sm);font-weight:700;text-transform:var(--tt-title)}.tpl-sb__nav{flex:1;overflow-y:auto;padding:12px}.tpl-sb__group{color:var(--fg-subtle);font-family:var(--font-body);font-size:var(--text-2xs);font-weight:700;letter-spacing:var(--tracking-wider);padding:12px 12px 6px;text-transform:var(--tt-label)}.tpl-sb__link{align-items:center;border-radius:var(--radius-sm);color:var(--fg-default);cursor:pointer;display:flex;font-size:var(--text-sm);font-weight:700;gap:10px;padding:8px 12px}.tpl-sb__link:hover{background:var(--bg-subtle)}.tpl-sb__link.active{background:var(--color-primary-100);color:var(--color-primary)}.tpl-sb__link.active:before{background:var(--color-secondary);border-radius:var(--radius-xs);content:"";height:16px;margin-left:-12px;margin-right:9px;width:3px}.divider-h{border-top:1px solid var(--border-default)}.kv{display:grid;font-size:var(--text-sm);gap:8px 16px;grid-template-columns:200px 1fr}.kv__k{color:var(--fg-muted);font-weight:700}.kv__v{color:var(--fg-default)}.list-group{background:var(--bg-surface);border:1px solid var(--border-default);border-radius:var(--radius-lg);list-style:none;margin:0;overflow:hidden;padding:0}.list-group__item--interactive{cursor:pointer}.list-group__item{align-items:center;border-bottom:1px solid var(--border-default);display:flex;gap:12px;padding:14px 18px}.list-group__item:last-child{border-bottom:0}.list-group__item:hover{background:var(--bg-subtle)}.template-frame{background:var(--bg-surface);border:1px solid var(--border-default);border-radius:var(--radius-lg);overflow:hidden}.template-frame__chrome{align-items:center;background:var(--bg-subtle);border-bottom:1px solid var(--border-default);color:var(--fg-subtle);display:flex;font-family:var(--font-mono);font-size:var(--text-xs);gap:10px;padding:8px 14px}.template-frame__chrome:before{background-image:radial-gradient(circle,#ff5f57 5px,transparent 0),radial-gradient(circle,#febc2e 5px,transparent 0),radial-gradient(circle,#28c840 5px,transparent 0);background-position:0 0,20px 0,40px 0;background-repeat:no-repeat;background-size:20px 12px;content:"";display:inline-flex;height:12px;width:56px}.number-input,.template-frame__body{background:var(--bg-surface)}.number-input{align-items:stretch;border:1px solid var(--border-default);border-radius:var(--radius-sm);display:inline-flex;height:40px;overflow:hidden}.number-input.is-invalid{border-color:var(--color-danger)}.number-input.is-disabled{opacity:.55;pointer-events:none}.number-input--block{display:flex;width:100%}.number-input--block .number-input__field{flex:1 1 auto;min-width:0;text-align:left}.number-input__btn{background:var(--bg-subtle);border:none;color:var(--fg-default);cursor:pointer;font-size:var(--text-lg);font-weight:500;width:36px}.number-input__btn:hover{background:var(--color-grey-200)}.number-input__field{background:transparent;border:none;color:var(--fg-default);font-family:var(--font-body);font-size:var(--text-sm);min-width:80px;outline:none;padding:0 12px;text-align:center}.number-input__field::-webkit-inner-spin-button,.number-input__field::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.number-input__field{-moz-appearance:textfield}.number-input__affix{background:var(--bg-subtle);padding:0 8px}.number-input__affix,.pagination{align-items:center;color:var(--fg-muted);display:inline-flex;font-size:var(--text-sm)}.pagination{font-family:var(--font-body);gap:4px}.pagination__info{color:var(--fg-muted);margin-right:12px}.pagination__btn{background:var(--bg-surface);border:1px solid var(--border-default);border-radius:var(--radius-sm);color:var(--fg-default);cursor:pointer;font-family:var(--font-body);font-size:var(--text-sm);height:32px;min-width:32px;padding:0 8px;transition:background var(--duration-fast)}.pagination__btn:hover:not(:disabled){background:var(--bg-subtle)}.pagination__btn:disabled{cursor:not-allowed;opacity:.4}.pagination__btn.is-active{background:var(--color-primary);border-color:var(--color-primary);color:var(--color-white)}.pagination__ellipsis{color:var(--fg-muted);padding:0 4px}.kpi{background:var(--bg-surface);border:1px solid var(--border-default);border-radius:var(--radius-md);display:flex;flex-direction:column;gap:6px;padding:16px 18px}.kpi__head{align-items:center;display:flex;justify-content:space-between}.kpi__label{font-family:var(--font-body);font-size:var(--text-xs);letter-spacing:var(--tracking-wider);text-transform:var(--tt-label)}.kpi__icon,.kpi__label{color:var(--fg-muted)}.kpi__value{color:var(--fg-default);font-family:var(--font-display);font-size:var(--text-3xl);font-weight:700;line-height:1.2}.kpi__foot{align-items:center;display:flex;font-size:var(--text-sm);gap:10px}.kpi__delta{font-weight:600}.kpi__delta--up{color:var(--color-success)}.kpi__delta--down{color:var(--color-danger)}.kpi__delta--flat,.kpi__hint{color:var(--fg-muted)}.combobox{display:inline-block;min-width:220px;position:relative}.combobox__input,.combobox__trigger{background:var(--bg-surface);background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='20' height='20' fill='none' stroke='%235b6173' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E");background-position:right 12px center;background-repeat:no-repeat;border:1px solid var(--border-strong);border-radius:var(--radius-md);color:var(--fg-default);font-family:var(--font-body);font-size:var(--text-md);min-height:var(--field-min-h,44px);padding:var(--field-pad-y,10px) 38px var(--field-pad-y,10px) var(--field-pad-x,14px);width:100%}.combobox__input:focus,.combobox__trigger:focus-visible{box-shadow:var(--focus-ring-accent);outline:none}.combobox.is-invalid .combobox__input,.combobox.is-invalid .combobox__trigger{border-color:var(--color-danger)}.combobox__trigger{-webkit-appearance:none;-moz-appearance:none;appearance:none;cursor:pointer;text-align:left}.combobox__trigger[disabled]{cursor:not-allowed;opacity:.6}.combobox__trigger-placeholder{color:var(--fg-subtle)}.combobox__clear{align-items:center;background:var(--bg-subtle);border:none;border-radius:var(--radius-pill);color:var(--fg-muted);cursor:pointer;display:inline-flex;font-size:var(--text-sm);height:24px;justify-content:center;padding:0;position:absolute;right:8px;top:50%;transform:translateY(-50%);width:24px}.combobox__clear:focus-visible{box-shadow:var(--focus-ring-accent);outline:none}.combobox__list{background:var(--bg-surface);border:1px solid var(--border-default);border-radius:var(--radius-sm);box-shadow:var(--shadow-md);left:0;list-style:none;margin:0;max-height:240px;overflow-y:auto;padding:4px;position:absolute;right:0;top:calc(100% + 4px);z-index:var(--z-tooltip)}.combobox__option{align-items:center;border-radius:var(--radius-sm);cursor:pointer;display:flex;gap:8px;padding:8px 10px}.combobox__option-content{display:flex;flex:1;flex-direction:column;gap:2px;min-width:0}.combobox__option.is-active{background:var(--bg-subtle)}.combobox__option.is-selected{background:var(--color-primary-50);color:var(--color-primary)}.combobox__option.is-disabled{cursor:not-allowed;opacity:.4}.combobox__option-label{color:var(--fg-default);font-size:var(--text-sm)}.combobox__option-desc{color:var(--fg-muted);font-size:var(--text-xs)}.combobox__option-check{color:var(--color-primary);flex-shrink:0}.combobox__empty{color:var(--fg-muted);font-size:var(--text-sm);padding:16px;text-align:center}.combobox__loading{align-items:center;display:flex;gap:8px;justify-content:center}.datepicker{align-items:stretch;background:var(--bg-surface);border:1px solid var(--border-strong);border-radius:var(--radius-md);color:var(--fg-default);display:inline-flex;min-height:var(--field-min-h,44px);position:relative;transition:border-color var(--duration-fast),box-shadow var(--duration-fast);width:-moz-fit-content;width:fit-content}.datepicker:focus-within{border-color:var(--color-primary);box-shadow:var(--focus-ring-brand);outline:none}.datepicker.is-invalid{border-color:var(--color-danger)}.datepicker.is-disabled{background:var(--bg-subtle);cursor:not-allowed}.datepicker.is-disabled .datepicker__input,.datepicker.is-disabled .datepicker__toggle{color:var(--fg-subtle);cursor:not-allowed}.datepicker__input{background:transparent;border:none;color:inherit;flex:1;font-family:var(--font-body);font-size:var(--text-sm);min-width:132px;padding:0 0 0 var(--field-pad-x,14px)}.datepicker__input::-moz-placeholder{color:var(--fg-subtle)}.datepicker__input::placeholder{color:var(--fg-subtle)}.datepicker__input:focus{outline:none}.datepicker__toggle{align-items:center;background:transparent;border:none;color:var(--fg-subtle);cursor:pointer;display:inline-flex;flex-shrink:0;justify-content:center;padding:0;transition:color var(--duration-fast);width:40px}.datepicker__toggle:hover:not(:disabled){color:var(--fg-default)}.datepicker__toggle:focus-visible{outline:none}.datepicker__popover{background:var(--bg-surface);border:1px solid var(--border-default);border-radius:var(--radius-md);box-shadow:var(--shadow-md);left:0;min-width:280px;padding:12px;position:absolute;top:calc(100% + 4px);z-index:var(--z-tooltip)}.datepicker__nav{align-items:center;display:flex;justify-content:space-between;margin-bottom:8px}.datepicker__nav button{background:transparent;border:none;border-radius:var(--radius-sm);color:var(--fg-default);cursor:pointer;height:28px;width:28px}.datepicker__nav button:hover{background:var(--bg-subtle)}.datepicker__title{font-family:var(--font-body);font-size:var(--text-sm);font-weight:600}.datepicker__grid{display:grid;gap:2px;grid-template-columns:repeat(7,1fr)}.datepicker__dow{color:var(--fg-muted);font-size:var(--text-2xs);padding:4px 0;text-align:center;text-transform:var(--tt-label)}.datepicker__day{background:transparent;border:none;border-radius:var(--radius-sm);color:var(--fg-default);cursor:pointer;font-family:var(--font-body);font-size:var(--text-sm);height:32px}.datepicker__day:hover:not(:disabled){background:var(--bg-subtle)}.datepicker__day.is-today{color:var(--color-primary);font-weight:700}.datepicker__day.is-selected{background:var(--color-primary);color:var(--color-white)}.datepicker__day.is-disabled,.datepicker__day:disabled{cursor:not-allowed;opacity:.3}.gridpicker{align-items:stretch;border-radius:var(--radius-sm);display:inline-flex;position:relative;width:-moz-fit-content;width:fit-content}.gridpicker:focus-within{box-shadow:var(--focus-ring-accent);outline:none}.gridpicker__input{background:var(--bg-surface);border:1px solid var(--border-default);border-radius:var(--radius-sm) 0 0 var(--radius-sm);color:var(--fg-default);cursor:pointer;font-family:var(--font-body);font-size:var(--text-sm);height:40px;min-width:160px;padding:0 12px}.gridpicker__input:focus{outline:none}.gridpicker__input::-moz-placeholder{color:var(--fg-subtle)}.gridpicker__input::placeholder{color:var(--fg-subtle)}.gridpicker.is-invalid .gridpicker__input{border-color:var(--color-danger)}.gridpicker.is-disabled{opacity:.6;pointer-events:none}.gridpicker__toggle{align-items:center;background:var(--bg-subtle);border:1px solid var(--border-default);border-left:none;border-radius:0 var(--radius-sm) var(--radius-sm) 0;color:var(--fg-default);cursor:pointer;display:inline-flex;height:40px;justify-content:center;padding:0;width:40px}.gridpicker__toggle:focus-visible{box-shadow:var(--focus-ring-accent);outline:none}.gridpicker__popover{background:var(--bg-surface);border:1px solid var(--border-default);border-radius:var(--radius-md);box-shadow:var(--shadow-md);min-width:260px;padding:12px;position:absolute}.gridpicker__nav{align-items:center;display:flex;justify-content:space-between;margin-bottom:8px}.gridpicker__nav button{background:transparent;border:none;border-radius:var(--radius-sm);color:var(--fg-default);cursor:pointer;height:28px;width:28px}.gridpicker__nav button:hover{background:var(--bg-subtle)}.gridpicker__nav button:focus-visible{box-shadow:var(--focus-ring-accent);outline:none}.gridpicker__title{font-family:var(--font-body);font-size:var(--text-sm);font-weight:600}.gridpicker__grid{display:grid;gap:4px;grid-template-columns:repeat(3,1fr)}.gridpicker__cell{background:transparent;border:none;border-radius:var(--radius-sm);color:var(--fg-default);cursor:pointer;font-family:var(--font-body);font-size:var(--text-sm);min-height:44px;padding:8px 6px}.gridpicker__cell:hover:not(:disabled){background:var(--bg-subtle)}.gridpicker__cell:focus-visible{box-shadow:var(--focus-ring-accent);outline:none}.gridpicker__cell.is-out{color:var(--fg-subtle)}.gridpicker__cell.is-selected{background:var(--color-primary);color:var(--color-white)}.gridpicker__cell:disabled{cursor:not-allowed;opacity:.3}.file-upload{background:var(--bg-subtle);border:2px dashed var(--border-default);border-radius:var(--radius-md);cursor:pointer;padding:28px 20px;text-align:center;transition:background var(--duration-fast),border-color var(--duration-fast)}.file-upload.is-drag,.file-upload:hover{background:var(--color-primary-50);border-color:var(--color-primary)}.file-upload.is-disabled{opacity:.5;pointer-events:none}.file-upload__icon{color:var(--fg-muted);font-size:var(--text-3xl);margin-bottom:8px}.file-upload__title{color:var(--fg-default);font-family:var(--font-body);font-weight:600}.file-upload__hint{color:var(--fg-muted);font-size:var(--text-xs);margin-top:4px}.data-table tr.is-selected{background:var(--color-primary-50)}.data-table tr.is-clickable{cursor:pointer;position:relative}.data-table tr.is-clickable:hover{background:var(--bg-subtle)}.data-table tr.is-clickable:focus-within{box-shadow:inset 0 0 0 2px var(--border-focus)}.data-table__rowlink{background:transparent;border:0;color:transparent;cursor:pointer;font-size:0;inset:0;margin:0;padding:0;position:absolute;z-index:1}.data-table__rowlink:focus,.data-table__rowlink:focus-visible{outline:none}.data-table tr.is-clickable .data-table__cell--above,.data-table tr.is-clickable [data-row-interactive]{position:relative;z-index:2}.data-table__th{align-items:center;display:inline-flex;gap:6px}.data-table__sort{color:var(--fg-muted);font-size:var(--text-2xs)}.accordion{background:var(--bg-surface);border:1px solid var(--border-default);border-radius:var(--radius-md);overflow:hidden}.accordion__item+.accordion__item{border-top:1px solid var(--border-default)}.accordion__trigger{align-items:center;background:transparent;border:none;color:var(--fg-default);cursor:pointer;display:flex;font-family:var(--font-body);font-size:var(--text-sm);font-weight:600;justify-content:space-between;padding:14px 16px;text-align:left;width:100%}.accordion__trigger:hover{background:var(--bg-subtle)}.accordion__chev{color:var(--fg-muted);transition:transform var(--duration-fast)}.accordion__item.is-open .accordion__chev{transform:rotate(180deg)}.accordion__panel{color:var(--fg-default);font-size:var(--text-sm);padding:0 16px 16px}.breadcrumbs{color:var(--fg-muted);font-family:var(--font-body);font-size:var(--text-sm)}.breadcrumbs ol{display:flex;flex-wrap:wrap;gap:6px;list-style:none;margin:0;padding:0}.breadcrumbs a{color:var(--fg-muted);text-decoration:none}.breadcrumbs a:hover{color:var(--color-primary);text-decoration:underline}.breadcrumbs [aria-current=page]{color:var(--fg-default);font-weight:600}.breadcrumbs__sep{color:var(--fg-subtle);margin:0 2px}.slider{align-items:center;display:inline-flex;gap:12px;width:100%}.slider__input{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:transparent;height:22px;outline:none;width:100%}.slider__input::-webkit-slider-runnable-track{background:linear-gradient(to right,var(--color-primary) 0,var(--color-primary) var(--pct,0),var(--bg-muted) var(--pct,0),var(--bg-muted) 100%);border-radius:var(--radius-pill);height:6px}.slider__input::-moz-range-track{background:var(--bg-muted);border-radius:var(--radius-pill);height:6px}.slider__input::-moz-range-progress{background:var(--color-primary);border-radius:var(--radius-pill);height:6px}.slider__input::-webkit-slider-thumb{-webkit-appearance:none;appearance:none;background:var(--bg-surface);border:2px solid var(--color-primary);border-radius:var(--radius-pill);box-shadow:var(--shadow-xs);cursor:pointer;height:18px;margin-top:-6px;width:18px}.slider__input::-moz-range-thumb{background:var(--bg-surface);border:2px solid var(--color-primary);border-radius:var(--radius-pill);cursor:pointer;height:18px;width:18px}.slider__input:focus-visible::-webkit-slider-thumb{box-shadow:0 0 0 4px rgba(0,47,135,.18)}.slider__value{color:var(--fg-default);font-family:var(--font-mono);font-size:var(--text-sm);min-width:48px;text-align:right}.progress--sm{height:4px}.progress__bar--blue{background:var(--color-primary)}.progress__bar--warning{background:var(--color-warning)}.progress__bar--danger{background:var(--color-danger)}.progress__label{color:var(--fg-muted);display:inline-block;font-family:var(--font-mono);font-size:var(--text-xs);margin-left:8px}.progress-circle{display:inline-block;position:relative}.progress-circle__label{align-items:center;color:var(--fg-default);display:flex;font-family:var(--font-display);font-size:var(--text-sm);font-weight:700;inset:0;justify-content:center;position:absolute}.tag-input{align-items:center;background:var(--bg-surface);border:1px solid var(--border-strong);border-radius:var(--radius-md);cursor:text;display:flex;flex-wrap:wrap;gap:6px;min-height:44px;padding:6px 8px}.tag-input:focus-within{border-color:var(--color-primary);box-shadow:var(--focus-ring-brand)}.tag-input.is-disabled{opacity:.55;pointer-events:none}.tag-input__tag{align-items:center;background:var(--color-primary-100);border:1px solid var(--color-primary-200);border-radius:var(--radius-pill);color:var(--color-primary-800);display:inline-flex;font-family:var(--font-body);font-size:var(--text-xs);font-weight:600;gap:4px;padding:2px 4px 2px 10px}.tag-input__tag button{align-items:center;background:transparent;border:0;border-radius:var(--radius-pill);color:inherit;cursor:pointer;display:inline-flex;height:18px;justify-content:center;line-height:1;width:18px}.tag-input__tag button:hover{background:rgba(0,0,0,.08)}.tag-input__field{background:transparent;border:0;color:var(--fg-default);flex:1;font-family:var(--font-body);font-size:var(--text-sm);min-width:80px;outline:none;padding:4px 6px}.phone-input{align-items:stretch;background:var(--bg-surface);border:1px solid var(--border-strong);border-radius:var(--radius-md);display:inline-flex;height:44px;overflow:hidden;width:100%}.phone-input:focus-within{border-color:var(--color-primary);box-shadow:var(--focus-ring-brand)}.phone-input.is-invalid{border-color:var(--color-danger)}.phone-input.is-disabled{opacity:.55;pointer-events:none}.phone-input__prefix{align-items:center;background:var(--bg-subtle);border-right:1px solid var(--border-default);color:var(--fg-muted);display:inline-flex;font-family:var(--font-mono);font-size:var(--text-sm);padding:0 12px}.phone-input__field{background:transparent;border:0;color:var(--fg-default);flex:1;font-family:var(--font-body);font-size:var(--text-sm);outline:none;padding:0 12px}.option-group{display:flex;gap:12px}.option-group--vertical{flex-direction:column}.option-group--horizontal{flex-direction:row;flex-wrap:wrap}.option-row{align-items:flex-start;background:var(--bg-surface);border:1px solid var(--border-default);border-radius:var(--radius-md);cursor:pointer;display:flex;gap:10px;padding:10px 12px;transition:border-color var(--duration-fast),background var(--duration-fast)}.option-row:hover{background:var(--bg-subtle);border-color:var(--border-strong)}.option-row.is-disabled{cursor:not-allowed;opacity:.55}.option-row input{accent-color:var(--color-primary);margin-top:3px}.option-row__body{display:flex;flex-direction:column;gap:2px}.option-row__label{color:var(--fg-default);font-family:var(--font-body);font-size:var(--text-sm);font-weight:600}.option-row__desc{color:var(--fg-muted);font-size:var(--text-xs)}.avatar{background:var(--color-primary-100);color:var(--color-primary)}.surface-inverse .avatar,[data-tone=inverse] .avatar{background:color-mix(in srgb,var(--fg-on-brand) 16%,transparent);color:var(--fg-on-brand)}.avatar--circle{border-radius:var(--radius-pill)}.avatar--square{border-radius:var(--radius-md)}.avatar__initials{font-family:var(--font-body);font-weight:700;letter-spacing:.02em;line-height:1;transform:translateY(.06em)}.avatar__status{border:2px solid var(--bg-surface);border-radius:var(--radius-pill);bottom:4%;box-sizing:border-box;height:34%;min-height:10px;min-width:10px;position:absolute;right:4%;width:34%}.avatar__status--online{background:var(--color-success)}.avatar__status--offline{background:var(--color-gray-400)}.avatar__status--busy{background:var(--color-danger)}.avatar-group{align-items:center;display:inline-flex}.avatar-group .avatar{border:2px solid var(--bg-surface)}.avatar.avatar--overflow{background:var(--bg-muted);color:var(--fg-default);font-size:var(--text-xs)}.is-floating.is-floating{z-index:var(--z-floating)}.menu{display:inline-block;position:relative}.menu__panel{background:var(--bg-surface);border:1px solid var(--border-default);border-radius:var(--radius-md);box-shadow:var(--shadow-md);display:flex;flex-direction:column;gap:2px;max-width:320px;min-width:220px;padding:6px;z-index:var(--z-floating)}.menu__sep{background:var(--border-default);height:1px;margin:4px 0}.menu__label{color:var(--fg-subtle);font-size:var(--text-2xs);font-weight:700;letter-spacing:var(--tracking-wider);padding:6px 10px;text-transform:var(--tt-label)}.menu__item,.menu__label{font-family:var(--font-body)}.menu__item{align-items:flex-start;background:transparent;border:0;border-radius:var(--radius-sm);color:var(--fg-default);cursor:pointer;display:flex;font-size:var(--text-sm);gap:10px;padding:8px 10px;text-align:left;width:100%}.menu__item:disabled{cursor:not-allowed;opacity:.5}.menu__item.is-active{background:var(--bg-subtle)}.menu__item.is-destructive{color:var(--color-danger)}.menu__icon{align-items:center;display:inline-flex;flex:none;height:16px;justify-content:center;margin-top:1px;width:16px}.menu__body{display:flex;flex:1;flex-direction:column;gap:2px}.menu__label-row{align-items:center;display:flex;gap:12px;justify-content:space-between}.menu__desc{color:var(--fg-muted);font-size:var(--text-xs)}.menu__kbd{background:var(--bg-subtle);border:1px solid var(--border-default);border-radius:var(--radius-sm);color:var(--fg-muted);font-family:var(--font-mono);font-size:var(--text-2xs);padding:2px 6px}.stat{display:flex;flex-direction:column;gap:4px}.stat--center{align-items:center;text-align:center}.stat__label{color:var(--fg-muted);font-family:var(--font-body);font-size:var(--text-xs);font-weight:700;letter-spacing:var(--tracking-wider);text-transform:var(--tt-label)}.stat__value{color:var(--fg-default);font-family:var(--font-display);font-size:var(--text-3xl);font-weight:700;line-height:1.1}.stat__foot{align-items:center;display:inline-flex;font-size:var(--text-xs);gap:8px}.stat__trend--up{color:var(--color-success);font-weight:700}.stat__trend--down{color:var(--color-danger);font-weight:700}.stat__trend--flat{font-weight:700}.stat__hint,.stat__trend--flat{color:var(--fg-muted)}.multicombo{min-width:240px;position:relative}.multicombo__chips{align-items:center;background:var(--bg-surface);border:1px solid var(--border-strong);border-radius:var(--radius-md);cursor:text;display:flex;flex-wrap:wrap;gap:6px;min-height:44px;padding:6px 8px}.multicombo:focus-within .multicombo__chips,.multicombo__chips:focus-within{border-color:var(--color-primary);box-shadow:var(--focus-ring-brand)}.multicombo.is-invalid .multicombo__chips{border-color:var(--color-danger)}.multicombo.is-disabled{opacity:.55;pointer-events:none}.multicombo__chip{align-items:center;background:var(--color-primary-100);border:1px solid var(--color-primary-200);border-radius:var(--radius-pill);color:var(--color-primary-800);display:inline-flex;font-family:var(--font-body);font-size:var(--text-xs);font-weight:600;gap:4px;padding:2px 4px 2px 10px}.multicombo__chip--more{background:var(--bg-muted);border-color:var(--border-default);color:var(--fg-muted);padding:2px 10px}.multicombo__chip button{align-items:center;background:transparent;border:0;border-radius:var(--radius-pill);color:inherit;cursor:pointer;display:inline-flex;height:18px;justify-content:center;line-height:1;width:18px}.multicombo__chip button:hover{background:rgba(0,0,0,.08)}.multicombo__input{background:transparent;border:0;color:var(--fg-default);flex:1;font-family:var(--font-body);font-size:var(--text-sm);min-width:80px;outline:none;padding:4px 6px}.multicombo__list{background:var(--bg-surface);border:1px solid var(--border-default);border-radius:var(--radius-md);box-shadow:var(--shadow-md);left:0;list-style:none;margin:0;max-height:280px;overflow:auto;padding:4px;position:absolute;right:0;top:calc(100% + 4px);z-index:40}.multicombo__option{align-items:center;border-radius:var(--radius-sm);color:var(--fg-default);cursor:pointer;display:flex;font-family:var(--font-body);font-size:var(--text-sm);gap:10px;padding:8px 10px}.multicombo__option:has(.multicombo__option-desc){align-items:flex-start}.multicombo__option.is-active{background:var(--bg-subtle)}.multicombo__option.is-selected{color:var(--color-primary);font-weight:600}.multicombo__option.is-disabled{opacity:.5;pointer-events:none}.multicombo__check{align-items:center;border:1.5px solid var(--border-strong);border-radius:var(--radius-sm);color:var(--bg-surface);display:inline-flex;flex:none;font-size:var(--text-xs);height:18px;justify-content:center;width:18px}.multicombo__option:has(.multicombo__option-desc) .multicombo__check{margin-top:1px}.multicombo__check.is-checked{background:var(--color-primary);border-color:var(--color-primary)}.multicombo__option-body{display:flex;flex-direction:column;gap:2px}.multicombo__option-label{color:var(--fg-default);font-size:var(--text-sm)}.multicombo__option-desc{color:var(--fg-muted);font-size:var(--text-xs)}.multicombo__empty{color:var(--fg-muted);font-size:var(--text-sm);padding:12px;text-align:center}.daterange{display:inline-block;position:relative}.daterange__trigger{align-items:center;background:var(--bg-surface);border:1px solid var(--border-strong);border-radius:var(--radius-md);color:var(--fg-default);cursor:pointer;display:inline-flex;font-family:var(--font-body);font-size:var(--text-sm);gap:8px;height:44px;padding:0 14px}.daterange__trigger:focus-visible{box-shadow:var(--focus-ring-accent);outline:none}.daterange.is-invalid .daterange__trigger{border-color:var(--color-danger)}.daterange.is-disabled{opacity:.55;pointer-events:none}.daterange__icon{color:var(--fg-muted)}.daterange__popover{background:var(--bg-surface);border:1px solid var(--border-default);border-radius:var(--radius-md);box-shadow:var(--shadow-lg);display:flex;left:0;min-width:560px;position:absolute;top:calc(100% + 6px);z-index:var(--z-tooltip)}.daterange__presets{border-right:1px solid var(--border-default);display:flex;flex-direction:column;gap:2px;list-style:none;margin:0;min-width:140px;padding:8px}.daterange__presets button{background:transparent;border:0;border-radius:var(--radius-sm);color:var(--fg-default);cursor:pointer;font-family:var(--font-body);font-size:var(--text-sm);padding:8px 10px;text-align:left;width:100%}.daterange__presets button:hover{background:var(--bg-subtle)}.daterange__panes{flex:1;padding:12px}.daterange__nav{align-items:center;display:grid;grid-template-columns:auto 1fr auto;margin-bottom:8px}.daterange__nav button{background:transparent;border:0;border-radius:var(--radius-sm);color:var(--fg-default);cursor:pointer;font-size:var(--text-lg);height:28px;width:28px}.daterange__nav button:hover{background:var(--bg-subtle)}.daterange__months{display:grid;gap:16px;grid-template-columns:1fr 1fr}.daterange__month{font-family:var(--font-body)}.daterange__title{font-family:var(--font-display);font-size:var(--text-sm);font-weight:700;letter-spacing:var(--tracking-wide);margin-bottom:8px;text-align:center;text-transform:var(--tt-title)}.daterange__grid{display:grid;gap:2px;grid-template-columns:repeat(7,1fr)}.daterange__dow{color:var(--fg-subtle);font-family:var(--font-body);font-size:.625rem;font-weight:700;letter-spacing:var(--tracking-wider);padding:4px 0;text-align:center;text-transform:var(--tt-label)}.daterange__day{background:transparent;border:0;border-radius:var(--radius-sm);color:var(--fg-default);cursor:pointer;font-family:var(--font-body);font-size:var(--text-sm);height:32px}.daterange__day:hover:not(:disabled){background:var(--bg-subtle)}.daterange__day.is-today{color:var(--color-primary);font-weight:700}.daterange__day.is-range{background:var(--color-primary-100);border-radius:var(--radius-none);color:var(--color-primary-800)}.daterange__day.is-selected{background:var(--color-primary);color:var(--color-white);font-weight:700}.daterange__day.is-disabled{opacity:.3;pointer-events:none}.daterange__actions{border-top:1px solid var(--border-default);display:flex;gap:8px;justify-content:flex-end;margin-top:12px;padding-top:12px}.daterange__apply,.daterange__clear{background:transparent;border:1px solid var(--border-default);border-radius:var(--radius-sm);color:var(--fg-default);cursor:pointer;font-family:var(--font-body);font-size:var(--text-sm);font-weight:700;padding:6px 14px}.daterange__apply{background:var(--color-primary);border-color:var(--color-primary);color:var(--color-white)}.daterange__apply:disabled{cursor:not-allowed;opacity:.5}.cmdk__overlay{align-items:flex-start;animation:fadeIn var(--duration-base) var(--ease-standard);background:var(--backdrop);display:flex;inset:0;justify-content:center;padding-top:12vh;position:fixed;z-index:var(--z-toast)}.cmdk__panel{animation:rise var(--duration-base) var(--ease-standard);background:var(--bg-surface);border:1px solid var(--border-default);border-radius:var(--radius-lg);box-shadow:var(--shadow-lg);display:flex;flex-direction:column;max-width:560px;overflow:hidden;width:100%}.cmdk__searchbar{align-items:center;border-bottom:1px solid var(--border-default);display:flex;gap:10px;padding:14px 16px}.cmdk__icon{color:var(--fg-muted);font-size:var(--text-lg)}.cmdk__input{background:transparent;border:0;color:var(--fg-default);flex:1;font-family:var(--font-body);font-size:var(--text-md);outline:none}.cmdk__esc{background:var(--bg-subtle);border:1px solid var(--border-default);border-radius:var(--radius-sm);color:var(--fg-muted);font-family:var(--font-mono);font-size:var(--text-2xs);padding:2px 6px}.cmdk__list{list-style:none;margin:0;max-height:60vh;overflow:auto;padding:6px}.cmdk__group{color:var(--fg-subtle);font-size:var(--text-2xs);font-weight:700;letter-spacing:var(--tracking-wider);padding:8px 10px 4px;text-transform:var(--tt-label)}.cmdk__group,.cmdk__item{font-family:var(--font-body)}.cmdk__item{align-items:center;border-radius:var(--radius-sm);color:var(--fg-default);cursor:pointer;display:flex;font-size:var(--text-sm);gap:12px;padding:10px 12px}.cmdk__item.is-active{background:var(--bg-subtle)}.cmdk__item-icon{color:var(--fg-muted);flex:none;width:18px}.cmdk__item-body{display:flex;flex:1;flex-direction:column;gap:2px}.cmdk__item-label{color:var(--fg-default);font-size:var(--text-sm);font-weight:500}.cmdk__item-desc{color:var(--fg-muted);font-size:var(--text-xs)}.cmdk__kbd{background:var(--bg-default);border:1px solid var(--border-default);border-radius:var(--radius-sm);color:var(--fg-muted);font-family:var(--font-mono);font-size:var(--text-2xs);padding:2px 6px}.cmdk__empty{color:var(--fg-muted);font-size:var(--text-sm);padding:24px;text-align:center}.appshell{background:var(--bg-canvas);display:grid}.appshell__sidebar{background:var(--bg-surface);border-right:1px solid var(--border-default);display:flex;flex-direction:column;overflow:hidden}.appshell__nav{flex:1;overflow:auto;padding:12px 8px}.appshell__navsection{padding:4px 0 12px}.appshell__navlabel-section{color:var(--fg-subtle);font-family:var(--font-body);font-size:var(--text-2xs);font-weight:700;letter-spacing:var(--tracking-wider);padding:10px 12px 4px;text-transform:var(--tt-label)}.appshell.is-collapsed .appshell__navlabel-section{display:none}.appshell__nav ul{list-style:none;margin:0;padding:0}.appshell__navitem{align-items:center;border-bottom:0;border-radius:var(--radius-sm);color:var(--fg-default);display:flex;font-family:var(--font-body);font-size:var(--text-sm);font-weight:600;gap:12px;margin:1px 4px;padding:10px 12px;position:relative;text-decoration:none}.appshell__navitem:hover{background:var(--bg-subtle);border-bottom:0;color:var(--fg-default)}.appshell__navitem.is-active{background:var(--color-primary-100);color:var(--color-primary)}.appshell__navitem.is-active:before{background:var(--color-secondary);border-radius:var(--radius-xs);bottom:8px;content:"";left:-4px;position:absolute;top:8px;width:3px}.appshell__navicon{align-items:center;color:var(--fg-muted);display:inline-flex;flex:none;justify-content:center;width:20px}.appshell__navitem.is-active .appshell__navicon{color:var(--color-primary)}.appshell__navlabel{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.appshell__navbadge,.appshell__navlabel{transition:opacity var(--duration-fast,.12s) ease,max-width var(--duration-base,.2s) var(--ease-standard,cubic-bezier(.22,1,.36,1))}.appshell__navbadge{background:var(--color-secondary-100);border-radius:var(--radius-pill);color:var(--color-secondary-800);font-size:var(--text-2xs);font-weight:700;padding:1px 8px}.appshell.is-collapsed .appshell__navbadge,.appshell.is-collapsed .appshell__navlabel{margin:0;max-width:0;opacity:0;overflow:hidden;padding:0;pointer-events:none}.appshell.is-collapsed .appshell__navchildren{display:none}.appshell__navlabel-section{transition:opacity var(--duration-fast,.12s) ease,visibility 0s linear 0s}.appshell.is-collapsed .appshell__navlabel-section{height:0;opacity:0;overflow:hidden;padding:0;pointer-events:none;transition:opacity var(--duration-fast,.12s) ease,visibility 0s linear var(--duration-fast,.12s);visibility:hidden}.appshell__navchildren{padding-left:28px}.appshell__navitem--depth-1{font-size:var(--text-sm);font-weight:500;padding:8px 10px}.appshell--brand .appshell__sidebar{background:var(--color-primary);border-right-color:transparent;color:var(--color-white)}.appshell--brand .appshell__navlabel-section{color:hsla(0,0%,100%,.55)}.appshell--brand .appshell__navitem{color:hsla(0,0%,100%,.85)}.appshell--brand .appshell__navitem:hover{background:hsla(0,0%,100%,.08);color:var(--color-white)}.appshell--brand .appshell__navitem.is-active{background:hsla(0,0%,100%,.16);color:var(--color-white)}.appshell--brand .appshell__navitem.is-active:before{background:var(--color-secondary)}.appshell--brand .appshell__navicon{color:hsla(0,0%,100%,.7)}.appshell--brand .appshell__navitem.is-active .appshell__navicon,.appshell--brand .appshell__navitem:hover .appshell__navicon{color:var(--color-white)}.appshell--brand .appshell__navbadge{background:var(--color-secondary);color:var(--color-white)}.appshell--brand .appshell__sidebar-foot{border-top-color:hsla(0,0%,100%,.12)}.appshell.appshell--header-top{grid-template-columns:1fr;grid-template-rows:auto 1fr;height:100vh;height:100dvh;--appshell-header-height:56px;--appshell-header-pad-y:8px;--appshell-header-pad-x:16px;margin-left:calc(50% - 50vw);width:100vw}.appshell--header-top .appshell__header{align-items:center;background:var(--bg-surface);border-bottom:1px solid var(--border-default);color:var(--fg-default);display:grid;gap:12px;grid-template-columns:1fr auto 1fr;min-height:var(--appshell-header-height);padding:var(--appshell-header-pad-y,8px) var(--appshell-header-pad-x,16px)}.appshell--header-top .appshell__header-left{align-items:center;display:flex;gap:10px;justify-self:start}.appshell--header-top .appshell__header-center{align-items:center;display:flex;justify-self:center}.appshell--header-top .appshell__header-right{align-items:center;display:flex;gap:10px;justify-self:end}.appshell__menu-toggle{align-items:center;background:transparent;border:0;border-radius:var(--radius-sm,8px);color:inherit;cursor:pointer;display:inline-flex;height:36px;justify-content:center;padding:0;transition:background-color var(--duration-fast) var(--ease-standard);width:36px}.appshell__menu-toggle:hover{background:var(--bg-subtle)}.appshell__menu-toggle:focus-visible{box-shadow:var(--focus-ring);outline:none}.appshell--header-brand .appshell__menu-toggle:hover{background:hsla(0,0%,100%,.12)}.appshell--header-top .appshell__body{display:grid;grid-template-columns:240px 1fr;min-height:0;position:relative;transition:grid-template-columns var(--duration-base) var(--ease-standard)}@media (min-width:901px){.appshell--header-top.is-collapsed .appshell__body{grid-template-columns:0 1fr}.appshell--header-top.appshell--rail.is-collapsed .appshell__body{grid-template-columns:72px 1fr}}.appshell--header-top.appshell--no-nav .appshell__body{grid-template-columns:1fr}.appshell--header-top .appshell__sidebar{height:auto;overflow:hidden}.appshell--header-top .appshell__content{min-height:0;overflow-y:auto}@media (min-width:901px){.appshell--header-top:not(.appshell--rail) .appshell__body{position:relative;transition:none}.appshell--header-top:not(.appshell--rail).is-collapsed .appshell__sidebar{inset:0 auto 0 0;position:absolute;transform:translateX(-100%);width:240px}.appshell--header-top:not(.appshell--rail) .appshell__sidebar{transition:transform var(--duration-base) var(--ease-standard)}.appshell--header-top:not(.appshell--no-nav) .appshell__content{grid-column:2}}.appshell--header-top.appshell--header-brand .appshell__header{background:var(--color-primary);border-bottom:1px solid hsla(0,0%,100%,.12);color:var(--color-white)}@media (max-width:900px){.appshell--header-top .appshell__header{gap:8px;grid-template-columns:auto 1fr auto;padding:var(--appshell-header-pad-y,8px) var(--appshell-header-pad-x,12px)}.appshell--header-top .appshell__body{grid-template-columns:1fr}.appshell--header-top .appshell__sidebar{bottom:0;left:0;overflow:auto;position:absolute;top:0;transform:translateX(-100%);transition:transform var(--duration-base) var(--ease-standard);width:min(280px,85vw);z-index:40}.appshell--brand.appshell--header-top .appshell__sidebar{border-right-color:hsla(0,0%,100%,.12)}.appshell--header-top.is-mobile-open .appshell__sidebar{transform:translateX(0)}.appshell--header-top.is-mobile-open .appshell__scrim{background:var(--backdrop);display:block;inset:0;position:absolute;z-index:35}}.appshell__sidebar-foot{align-items:center;border-top:1px solid var(--border-default);display:flex;gap:8px;justify-content:space-between;padding:8px}.appshell__content{min-height:0;padding:24px}.appshell__scrim{display:none}@media (max-width:768px){.appshell__content{padding:16px}.combobox{min-width:min(220px,100%)}.multicombo{min-width:min(240px,100%)}.datepicker__input{min-width:min(160px,100%)}.number-input{min-width:min(140px,100%)}}@media (max-width:600px){.daterange__popover{flex-direction:column;min-width:0}.daterange__months{grid-template-columns:1fr}.daterange__presets{display:none}.toast-stack{left:0;padding:0 12px;right:0}.toast{max-width:none;min-width:0;width:100%}}.page-header{margin-bottom:24px}.page-header__crumbs ol{align-items:center;color:var(--fg-muted);display:flex;flex-wrap:wrap;font-family:var(--font-body);font-size:var(--text-sm);gap:6px;list-style:none;margin:0;padding:0}.page-header__crumbs a{border:0;color:var(--fg-muted)}.page-header__crumbs a:hover{color:var(--color-primary)}.page-header__crumb-sep{color:var(--fg-subtle)}.page-header__row{align-items:flex-end;display:flex;flex-wrap:wrap;gap:16px;justify-content:space-between;margin-top:8px}.page-header__title-wrap{display:flex;flex-direction:column;gap:4px;min-width:0}.page-header__title{color:var(--fg-default);font-family:var(--font-display);font-size:clamp(var(--text-xl),3vw + .75rem,var(--text-3xl));font-weight:700;letter-spacing:var(--tracking-tight);line-height:1.1;margin:0;text-transform:var(--tt-title)}.page-header__desc{color:var(--fg-muted);font-size:var(--text-sm);margin:0}.page-header__actions{display:flex;flex-wrap:wrap;gap:8px}.page-header__meta{margin-top:12px}.chart{position:relative;width:100%}.chart--donut{align-items:stretch;display:flex;flex-direction:column;gap:var(--space-3)}.chart__donut-area{position:relative;width:100%}.chart__center{align-items:center;font-size:var(--text-base);inset:0;pointer-events:none;position:absolute;text-align:center}.chart__center,.chart__legend{color:var(--fg-default);display:flex;justify-content:center}.chart__legend{flex-wrap:wrap;font-size:var(--text-xs);gap:var(--space-2) var(--space-4);list-style:none;margin:0;padding:0}.chart__legend-item{align-items:center;display:inline-flex;gap:var(--space-2)}.chart__legend-swatch{border-radius:var(--radius-xs);flex:none;height:10px;width:10px}.chart__legend-label{font-weight:500}.sparkline{display:inline-block;vertical-align:middle}.user-cell{align-items:center;display:inline-flex;gap:var(--space-3);min-width:0}.user-cell__body{display:flex;flex-direction:column;line-height:1.3;min-width:0}.user-cell__name{color:var(--fg-default);font-size:var(--text-sm);font-weight:700}.user-cell__meta,.user-cell__name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.user-cell__meta{color:var(--fg-muted);font-size:var(--text-xs)}.status-indicator{align-items:center;color:var(--fg-default);display:inline-flex;font-size:var(--text-sm);gap:var(--space-2)}.status-indicator__dot{border-radius:var(--radius-pill);flex:none;height:8px;width:8px}.status-indicator__dot--success{background:var(--color-success)}.status-indicator__dot--warning{background:var(--color-warning)}.status-indicator__dot--danger{background:var(--color-danger)}.status-indicator__dot--info{background:var(--color-info)}.status-indicator__dot--neutral{background:var(--color-gray-400)}.status-indicator__dot.is-pulsing{animation:status-pulse 1.6s ease-out infinite}@keyframes status-pulse{0%{box-shadow:0 0 0 0 currentColor}70%{box-shadow:0 0 0 8px transparent}to{box-shadow:0 0 0 0 transparent}}.timeline{display:flex;flex-direction:column;gap:var(--space-4);list-style:none;margin:0;padding:0}.timeline__item{display:flex;gap:var(--space-3);position:relative}.timeline__item:not(:last-child):before{background:var(--border-default);bottom:calc(var(--space-4)*-1 - 4px);content:"";left:11px;position:absolute;top:24px;width:2px}.timeline__marker{align-items:center;background:var(--bg-surface);border:2px solid var(--border-default);border-radius:var(--radius-pill);box-sizing:border-box;color:var(--fg-muted);display:inline-flex;flex:none;height:24px;justify-content:center;margin-top:2px;width:24px;z-index:1}.timeline__marker--success{border-color:var(--color-success);color:var(--color-success)}.timeline__marker--warning{border-color:var(--color-warning);color:var(--color-warning)}.timeline__marker--danger{border-color:var(--color-danger);color:var(--color-danger)}.timeline__marker--info{border-color:var(--color-info);color:var(--color-info)}.timeline__body{flex:1;min-width:0}.timeline__title{color:var(--fg-default);font-size:var(--text-sm);font-weight:700}.timeline__meta{color:var(--fg-muted);font-size:var(--text-xs);margin-top:2px}.timeline__content{color:var(--fg-default);font-size:var(--text-sm);margin-top:var(--space-2)}.timeline__title-row{align-items:baseline;display:flex;gap:var(--space-3);justify-content:space-between}.timeline__right{align-items:center;display:inline-flex;flex:none;gap:6px}.timeline__item{--timeline-tone:var(--border-default)}.timeline__item:has(>.timeline__marker--success){--timeline-tone:var(--color-success)}.timeline__item:has(>.timeline__marker--info){--timeline-tone:var(--color-info)}.timeline__item:has(>.timeline__marker--warning){--timeline-tone:var(--color-warning)}.timeline__item:has(>.timeline__marker--danger){--timeline-tone:var(--color-danger)}.timeline__item--done .timeline__marker{background:var(--timeline-tone);border-color:var(--timeline-tone);color:var(--color-white)}.timeline__item--done.timeline__item:not(:last-child):before{background:var(--timeline-tone)}.timeline__item--current .timeline__marker{animation:timeline-pulse 1.8s ease-in-out infinite;background:var(--bg-surface);border-color:var(--timeline-tone);box-shadow:0 0 0 4px color-mix(in srgb,var(--timeline-tone) 24%,transparent);color:var(--timeline-tone)}.timeline__item--current.timeline__item:not(:last-child):before{background:var(--timeline-tone)}@keyframes timeline-pulse{0%,to{box-shadow:0 0 0 4px color-mix(in srgb,var(--timeline-tone) 24%,transparent)}50%{box-shadow:0 0 0 8px color-mix(in srgb,var(--timeline-tone) 12%,transparent)}}@media (prefers-reduced-motion:reduce){.timeline__item--current .timeline__marker{animation:none}}.timeline__item--pending .timeline__marker{background:var(--bg-surface);border-color:var(--border-default);color:var(--fg-muted)}.timeline__item--pending.timeline__item:not(:last-child):before{background:repeating-linear-gradient(to bottom,var(--border-default) 0 4px,transparent 4px 8px)}.timeline__item--pending .timeline__meta,.timeline__item--pending .timeline__title{color:var(--fg-muted)}.timeline__marker--milestone{background:var(--timeline-tone);border-color:var(--timeline-tone);box-shadow:0 0 0 4px color-mix(in srgb,var(--timeline-tone) 14%,transparent);color:var(--color-white);height:32px;margin-left:-4px;width:32px}.timeline__item:has(>.timeline__marker--milestone):not(:last-child):before{top:32px}.timeline__item--pending .timeline__marker--milestone{background:var(--bg-surface);border-color:var(--border-default);box-shadow:none;color:var(--fg-muted)}.timeline--compact{gap:var(--space-3)}.timeline--compact .timeline__item{gap:var(--space-2)}.timeline--compact .timeline__marker{border-width:2px;height:16px;margin-top:3px;width:16px}.timeline--compact .timeline__marker>svg{height:10px;width:10px}.timeline--compact .timeline__marker--milestone{margin-left:0}.timeline--compact .timeline__item:not(:last-child):before{left:7px;top:17px}.timeline--compact .timeline__title{font-size:var(--text-xs);font-weight:600}.timeline--compact .timeline__meta{font-size:11px}.timeline--compact .timeline__content{font-size:var(--text-xs);margin-top:4px}.tree{font-family:var(--font-body);font-size:var(--text-sm);margin:0;padding:0}.tree,.tree__node{list-style:none}.tree__row{align-items:center;border-radius:var(--radius-sm);color:var(--fg-default);cursor:pointer;display:flex;gap:var(--space-2);padding:var(--space-2) var(--space-2);transition:background var(--duration-fast)}.tree__row:hover{background:var(--bg-subtle)}.tree__row:focus-visible{box-shadow:var(--focus-ring-accent);outline:none}.tree__row.is-selected{background:var(--color-primary-100);color:var(--color-primary);font-weight:700}.tree__chev{align-items:center;background:transparent;border:0;border-radius:var(--radius-sm);color:var(--fg-muted);cursor:pointer;display:inline-flex;flex:none;height:18px;justify-content:center;width:18px}.tree__chev:hover{background:var(--bg-muted);color:var(--fg-default)}.tree__chev--placeholder{cursor:default}.tree__icon{color:var(--fg-muted);display:inline-flex}.tree__label{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tree__meta{color:var(--fg-subtle);font-size:var(--text-xs)}.tree__children{list-style:none;margin:0;padding:0}.calendar{background:var(--bg-surface);border:1px solid var(--border-default);border-radius:var(--radius-lg);font-family:var(--font-body);overflow:hidden}.calendar__head{align-items:center;border-bottom:1px solid var(--border-default);display:flex;justify-content:space-between;padding:var(--space-3) var(--space-4)}.calendar__title{color:var(--fg-default);font-family:var(--font-display);font-size:var(--text-md);font-weight:700;text-transform:var(--tt-title)}.calendar__nav{align-items:center;background:transparent;border:0;border-radius:var(--radius-sm);color:var(--fg-default);cursor:pointer;display:inline-flex;height:32px;justify-content:center;width:32px}.calendar__nav:hover{background:var(--bg-subtle)}.calendar__grid{display:grid;grid-template-columns:repeat(7,1fr)}.calendar__weekdays{background:var(--bg-subtle);border-bottom:1px solid var(--border-default)}.calendar__weekday{color:var(--fg-muted);font-size:var(--text-2xs);font-weight:700;letter-spacing:var(--tracking-wider);padding:var(--space-2);text-align:center;text-transform:var(--tt-label)}.calendar__day{background:var(--bg-surface);border:0;border-bottom:1px solid var(--border-default);border-right:1px solid var(--border-default);color:var(--fg-default);cursor:pointer;display:flex;flex-direction:column;font-family:var(--font-body);gap:var(--space-1);min-height:84px;padding:var(--space-2);text-align:left}.calendar__day:hover{background:var(--bg-subtle)}.calendar__day:nth-child(7n){border-right:0}.calendar__day.is-out{background:var(--bg-canvas);color:var(--fg-subtle)}.calendar__day.is-today .calendar__daynum{align-items:center;background:var(--color-primary);border-radius:var(--radius-pill);color:var(--color-white);display:inline-flex;font-weight:700;height:22px;justify-content:center;width:22px}.calendar__daynum{font-size:var(--text-xs)}.calendar__events{display:flex;flex-direction:column;gap:2px;min-width:0}.calendar__event{background:var(--color-primary-100);border-radius:var(--radius-sm);color:var(--color-primary-800);cursor:pointer;font-size:var(--text-2xs);overflow:hidden;padding:1px var(--space-2);text-overflow:ellipsis;white-space:nowrap}.calendar__event--success{background:var(--color-green-100);color:var(--color-green-800)}.calendar__event--warning{background:var(--color-yellow-100);color:var(--color-yellow-800)}.calendar__event--danger{background:var(--color-red-100);color:var(--color-red-800)}.calendar__event--info{background:var(--color-info-100);color:var(--color-info-800)}.calendar__more{color:var(--fg-muted);font-size:var(--text-2xs)}.notif{display:inline-block;position:relative}.notif__trigger{align-items:center;background:transparent;border:0;border-radius:var(--radius-pill);color:var(--fg-default);cursor:pointer;display:inline-flex;height:40px;justify-content:center;position:relative;width:40px}.notif__trigger:hover{background:var(--bg-subtle)}.notif__badge{align-items:center;background:var(--color-danger);border:2px solid var(--bg-surface);border-radius:var(--radius-pill);box-sizing:border-box;color:var(--color-white);display:inline-flex;font-size:var(--text-2xs);font-weight:700;height:16px;justify-content:center;line-height:1;min-width:16px;padding:0 4px;position:absolute;right:-2px;top:-2px}.notif__panel{background:var(--bg-surface);border:1px solid var(--border-default);border-radius:var(--radius-lg);box-shadow:var(--shadow-lg);display:flex;flex-direction:column;max-height:480px;position:absolute;right:0;top:calc(100% + var(--space-2));width:380px;z-index:var(--z-dropdown)}.notif__head{align-items:center;border-bottom:1px solid var(--border-default);display:flex;gap:var(--space-2);justify-content:space-between;padding:var(--space-3) var(--space-4)}.notif__title{color:var(--fg-default);font-weight:700}.notif__head-actions{display:flex;gap:var(--space-2)}.notif__action{background:transparent;border:0;color:var(--color-primary);cursor:pointer;font-size:var(--text-xs);font-weight:700;padding:var(--space-1) var(--space-2)}.notif__action:hover{text-decoration:underline}.notif__list{flex:1;overflow-y:auto}.notif__empty{color:var(--fg-muted);font-size:var(--text-sm);padding:var(--space-8) var(--space-4);text-align:center}.notif__item{align-items:flex-start;background:transparent;border:0;border-bottom:1px solid var(--border-default);cursor:pointer;display:flex;gap:var(--space-3);padding:var(--space-3) var(--space-4);text-align:left;width:100%}.notif__item:last-child{border-bottom:0}.notif__item:hover{background:var(--bg-subtle)}.notif__item.is-unread{background:var(--color-primary-50)}.notif__dot{border-radius:var(--radius-pill);flex:none;height:8px;margin-top:6px;width:8px}.notif__dot--info{background:var(--color-info)}.notif__dot--success{background:var(--color-success)}.notif__dot--warning{background:var(--color-warning)}.notif__dot--danger{background:var(--color-danger)}.notif__body{flex:1;min-width:0}.notif__item-title{color:var(--fg-default);font-size:var(--text-sm);font-weight:700}.notif__item-desc{color:var(--fg-muted);font-size:var(--text-xs);line-height:1.4;margin-top:2px}.notif__time{color:var(--fg-subtle);font-size:var(--text-2xs);margin-top:var(--space-1)}.codeblock{background:var(--color-gray-900);border-radius:var(--radius-md);font-family:var(--font-mono);font-size:var(--text-sm);overflow:hidden}.codeblock__head{align-items:center;background:var(--color-gray-800);border-bottom:1px solid var(--color-gray-700);display:flex;justify-content:space-between;padding:var(--space-2) var(--space-3)}.codeblock__meta{align-items:center;display:flex;gap:var(--space-3)}.codeblock__filename{color:var(--color-gray-200);font-size:var(--text-xs);font-weight:700}.codeblock__lang{color:var(--color-gray-400);font-size:var(--text-2xs);letter-spacing:var(--tracking-wider);text-transform:var(--tt-label)}.codeblock__copy{align-items:center;background:transparent;border:0;border-radius:var(--radius-sm);color:var(--color-gray-200);cursor:pointer;display:inline-flex;font-family:var(--font-body);font-size:var(--text-xs);gap:var(--space-1);padding:var(--space-1) var(--space-2)}.codeblock__copy:hover{background:var(--color-gray-700)}.codeblock__body{color:var(--color-gray-100);line-height:1.5;margin:0;overflow-x:auto;padding:var(--space-4)}.jsonviewer{background:var(--bg-subtle);border:1px solid var(--border-default);border-radius:var(--radius-md);color:var(--fg-default);font-family:var(--font-mono);font-size:var(--text-xs);line-height:1.6;overflow-x:auto;padding:var(--space-3)}.json__line,.json__node{display:block}.json__children{padding-left:var(--space-4)}.json__toggle{background:transparent;border:0;color:var(--fg-muted);cursor:pointer;font-family:var(--font-mono);font-size:var(--text-xs);padding:0 var(--space-1) 0 0}.json__key{color:var(--color-info-700)}.json__str{color:var(--color-green-700)}.json__num{color:var(--color-secondary-700)}.json__bool{color:var(--color-info);font-weight:700}.json__null{color:var(--fg-subtle);font-style:italic}.json__brace{color:var(--fg-muted)}.json__count{color:var(--fg-subtle);font-size:var(--text-2xs);padding:0 var(--space-2)}.filter-panel{background:var(--bg-surface);border:1px solid var(--border-default);border-radius:var(--radius-lg);flex:none;width:240px}.filter-panel__head{align-items:center;border-bottom:1px solid var(--border-default);display:flex;justify-content:space-between;padding:var(--space-3) var(--space-4)}.filter-panel__title{color:var(--fg-default);gap:var(--space-2)}.filter-panel__count,.filter-panel__title{align-items:center;display:inline-flex;font-weight:700}.filter-panel__count{background:var(--color-primary);border-radius:var(--radius-pill);color:var(--color-white);font-size:var(--text-2xs);justify-content:center;min-width:18px;padding:0 var(--space-2)}.filter-panel__clear{background:transparent;border:0;color:var(--color-primary);cursor:pointer;font-size:var(--text-xs);font-weight:700}.filter-panel__body{padding:var(--space-2)}.filter-section{border-bottom:1px solid var(--border-default)}.filter-section:last-child{border-bottom:0}.filter-section__head{align-items:center;background:transparent;border:0;color:var(--fg-default);cursor:pointer;display:flex;font-family:var(--font-body);font-size:var(--text-sm);font-weight:700;justify-content:space-between;padding:var(--space-3) var(--space-2);width:100%}.filter-section__head:hover{color:var(--color-primary)}.filter-section__body{display:flex;flex-direction:column;gap:var(--space-2);padding:0 var(--space-2) var(--space-3)}.filter-bar{align-items:flex-end;display:flex;flex-wrap:wrap}.filter-bar,.filter-bar__fields{gap:var(--space-3) var(--space-4)}.filter-bar__fields{display:grid;flex:1 1 auto;grid-template-columns:repeat(auto-fit,minmax(var(--filter-col-min,160px),1fr))}.filter-bar--fixed-cols .filter-bar__fields{grid-template-columns:repeat(var(--filter-cols,4),minmax(0,1fr))}.filter-bar__actions{align-items:flex-end;display:flex;gap:var(--space-2)}.filter-bar .combobox{display:block;min-width:0;width:100%}.filter-field{display:flex;flex-direction:column;gap:4px;min-width:0}.filter-field__label{color:var(--fg-muted);font-family:var(--font-body);font-size:var(--text-xs);font-weight:500;letter-spacing:normal;text-transform:none}.bulk-bar{align-items:center;background:var(--color-gray-900);border-radius:var(--radius-md);box-shadow:var(--shadow-lg);color:var(--color-white);display:flex;gap:var(--space-3);padding:var(--space-2) var(--space-4)}.bulk-bar__count{font-size:var(--text-sm);font-weight:700;gap:var(--space-2)}.bulk-bar__clear,.bulk-bar__count{align-items:center;display:inline-flex}.bulk-bar__clear{background:transparent;border:0;border-radius:var(--radius-sm);color:var(--color-white);cursor:pointer;height:24px;justify-content:center;margin-left:var(--space-1);opacity:.85;width:24px}.bulk-bar__clear:hover{background:hsla(0,0%,100%,.12);opacity:1}.bulk-bar__clear:focus-visible{box-shadow:0 0 0 2px var(--color-white);outline:none}.bulk-bar__actions{display:flex;gap:var(--space-2);margin-left:auto}.bulk-bar .btn--outline{background:transparent;border-color:hsla(0,0%,100%,.4);color:var(--color-white)}.bulk-bar .btn--outline:hover:not(:disabled){background:hsla(0,0%,100%,.12);border-color:var(--color-white);color:var(--color-white)}.bulk-bar .btn--ghost{color:var(--color-white)}.bulk-bar .btn--ghost:hover:not(:disabled){background:hsla(0,0%,100%,.12)}.bulk-bar .btn--secondary{background:hsla(0,0%,100%,.1);border-color:transparent;color:var(--color-white)}.bulk-bar .btn--secondary:hover:not(:disabled){background:hsla(0,0%,100%,.18)}.sort-dropdown{align-items:center;display:inline-flex;gap:var(--space-2)}.sort-dropdown__label{color:var(--fg-muted);font-size:var(--text-sm);white-space:nowrap}.sort-dropdown__select{min-height:36px;min-width:180px;padding:var(--space-2) var(--space-3)}.comments{gap:var(--space-4)}.comments,.comments__list{display:flex;flex-direction:column}.comments__list{gap:var(--space-3);list-style:none;margin:0;padding:0}.comment{background:var(--bg-subtle);border-radius:var(--radius-md);display:flex;gap:var(--space-3);padding:var(--space-3)}.comment--internal{background:var(--color-yellow-50);border:1px dashed var(--color-yellow-300)}.comment__body{flex:1;min-width:0}.comment__head{align-items:center;display:flex;flex-wrap:wrap;gap:var(--space-2)}.comment__author{color:var(--fg-default);font-size:var(--text-sm);font-weight:700}.comment__time{color:var(--fg-subtle);font-size:var(--text-xs)}.comment__tag{background:var(--color-yellow-200);border-radius:var(--radius-sm);color:var(--color-yellow-900);font-size:var(--text-2xs);font-weight:700;letter-spacing:var(--tracking-wider);padding:0 var(--space-2);text-transform:var(--tt-label)}.comment__text{color:var(--fg-default);font-size:var(--text-sm);line-height:1.5;margin-top:var(--space-1)}.comments__compose{display:flex;flex-direction:column;gap:var(--space-2)}.comments__compose-actions{align-items:center;display:flex;gap:var(--space-3);justify-content:space-between}.comments__internal-toggle{align-items:center;color:var(--fg-muted);cursor:pointer;display:inline-flex;font-size:var(--text-sm);gap:var(--space-2)}.comments__compose--inline{align-items:center;flex-direction:row;gap:var(--space-2)}.comments__compose--inline.is-grown{align-items:flex-end}.comments__compose--inline .textarea{flex:1;max-height:140px;min-height:0;overflow-y:auto;resize:none}.comments__compose-submit{flex-shrink:0}.attachments{display:flex;flex-direction:column;gap:var(--space-2);list-style:none;margin:0;padding:0}.attachments__empty{border:1px dashed var(--border-default);border-radius:var(--radius-md);color:var(--fg-muted);font-size:var(--text-sm);padding:var(--space-4);text-align:center}.attachment{align-items:center;background:var(--bg-surface);border:1px solid var(--border-default);border-radius:var(--radius-md);display:flex;gap:var(--space-3);padding:var(--space-2) var(--space-3)}.attachment__icon{color:var(--fg-muted);flex:none}.attachment__body{flex:1;min-width:0}.attachment__name{color:var(--fg-default);font-size:var(--text-sm);font-weight:700;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.attachment__meta{color:var(--fg-subtle);display:flex;flex-wrap:wrap;font-size:var(--text-xs);gap:var(--space-1)}.attachment__actions{display:flex;flex:none;gap:var(--space-1)}.attachment__action{align-items:center;background:transparent;border:0;border-radius:var(--radius-sm);color:var(--fg-muted);cursor:pointer;display:inline-flex;height:32px;justify-content:center;text-decoration:none;width:32px}.attachment__action:hover{background:var(--bg-subtle);color:var(--fg-default)}.attachment__action--danger:hover{color:var(--color-danger)}.confirm__desc{color:var(--fg-default);font-size:var(--text-sm);line-height:1.5;margin:0}.desc-list{display:grid;gap:var(--space-2) var(--space-4);grid-template-columns:200px 1fr;margin:0}.desc-list__label{color:var(--fg-muted);font-size:var(--text-sm);font-weight:700}.desc-list__value{align-items:center;color:var(--fg-default);display:flex;font-size:var(--text-sm);gap:var(--space-2);justify-content:space-between;margin:0}.desc-list__edit{background:transparent;border:0;color:var(--color-primary);cursor:pointer;font-size:var(--text-xs);font-weight:700}.desc-list__edit:hover{text-decoration:underline}.diff{border:1px solid var(--border-default);border-radius:var(--radius-md);display:grid;font-size:var(--text-sm);grid-template-columns:200px 1fr 1fr;overflow:hidden}.diff__head{display:contents}.diff__head>div{background:var(--bg-subtle);border-bottom:1px solid var(--border-default);color:var(--fg-muted);font-size:var(--text-xs);font-weight:700;letter-spacing:var(--tracking-wide);padding:var(--space-2) var(--space-3);text-transform:var(--tt-label)}.diff__row{display:contents}.diff__row>div{border-bottom:1px solid var(--border-default);padding:var(--space-2) var(--space-3)}.diff__row:last-child>div{border-bottom:0}.diff__field{color:var(--fg-muted);font-weight:700}.diff__before{background:var(--color-red-50);color:var(--color-red-800)}.diff__after{background:var(--color-green-50);color:var(--color-green-800)}.diff__after ins,.diff__before del{text-decoration:none}@media (max-width:600px){.desc-list{gap:var(--space-1) 0;grid-template-columns:1fr}.desc-list__label{padding-top:var(--space-2)}.desc-list__value{border-bottom:1px solid var(--border-subtle);padding-bottom:var(--space-2)}.desc-list__value:last-of-type{border-bottom:0}.diff{grid-template-columns:1fr}.diff__head{display:none}.diff__row>div{border-bottom:0;padding:var(--space-2) var(--space-3)}.diff__row{border-bottom:1px solid var(--border-default);padding-bottom:var(--space-2)}.diff__row:last-child{border-bottom:0}.diff__field{background:var(--bg-subtle);font-size:var(--text-xs);letter-spacing:var(--tracking-wide);text-transform:var(--tt-label)}.diff__after[data-label]:before,.diff__before[data-label]:before{color:var(--fg-muted);content:attr(data-label) ": ";font-weight:700;margin-right:var(--space-1)}}.transfer{align-items:stretch;display:grid;gap:var(--space-3);grid-template-columns:1fr auto 1fr}.transfer__col{background:var(--bg-surface);border:1px solid var(--border-default);border-radius:var(--radius-md);display:flex;flex-direction:column;min-width:0;overflow:hidden}.transfer__col-head{align-items:center;background:var(--bg-subtle);border-bottom:1px solid var(--border-default);display:flex;justify-content:space-between;padding:var(--space-2) var(--space-3)}.transfer__col-title{color:var(--fg-default);font-size:var(--text-sm);font-weight:700}.transfer__col-count{background:var(--bg-muted);border-radius:var(--radius-pill);color:var(--fg-muted);font-size:var(--text-xs);padding:0 var(--space-2)}.transfer__list{flex:1;list-style:none;margin:0;max-height:320px;overflow-y:auto;padding:var(--space-1)}.transfer__empty{color:var(--fg-muted);font-size:var(--text-sm);padding:var(--space-4);text-align:center}.transfer__item{align-items:center;border-radius:var(--radius-sm);cursor:pointer;display:flex;gap:var(--space-2);padding:var(--space-2)}.transfer__item:has(.transfer__item-desc){align-items:flex-start}.transfer__item:hover{background:var(--bg-subtle)}.transfer__item.is-checked{background:var(--color-primary-50)}.transfer__item.is-disabled{cursor:not-allowed;opacity:.5}.transfer__item-body{color:var(--fg-default);flex:1;font-size:var(--text-sm);min-width:0}.transfer__item-desc{color:var(--fg-muted);font-size:var(--text-xs)}.transfer__controls{display:flex;flex-direction:column;gap:var(--space-2);justify-content:center}.permissions{border:1px solid var(--border-default);border-radius:var(--radius-md);overflow-x:auto}.permissions__table{border-collapse:collapse;font-family:var(--font-body);font-size:var(--text-sm);width:100%}.permissions__table td,.permissions__table th{border-bottom:1px solid var(--border-default);padding:var(--space-3)}.permissions__table thead th{background:var(--bg-subtle);text-align:left}.permissions__action-col{min-width:240px}.permissions__role-col{min-width:120px;text-align:center}.permissions__role-head{align-items:center;display:flex;flex-direction:column;gap:var(--space-1)}.permissions__role-toggle{background:transparent;border:0;color:var(--color-primary);cursor:pointer;font-size:var(--text-2xs);font-weight:700}.permissions__action-cell{color:var(--fg-default);font-weight:600;text-align:left}.permissions__action-desc{color:var(--fg-muted);font-size:var(--text-xs);font-weight:400;margin-top:2px}.permissions__cell{text-align:center}.gallery{display:flex;flex-direction:column;gap:var(--space-3)}.gallery--thumbs-left{flex-direction:row}.gallery__main{aspect-ratio:1;background:var(--bg-subtle);border-radius:var(--radius-lg);flex:1;overflow:hidden;position:relative}.gallery__image{display:block;height:100%;-o-object-fit:contain;object-fit:contain;width:100%}.gallery__nav{align-items:center;background:rgba(0,0,0,.5);border:0;border-radius:var(--radius-pill);color:var(--color-white);cursor:pointer;display:inline-flex;height:40px;justify-content:center;opacity:0;position:absolute;top:50%;transform:translateY(-50%);transition:opacity var(--duration-fast);width:40px}.gallery__main:hover .gallery__nav{opacity:1}.gallery__nav--prev{left:var(--space-3)}.gallery__nav--next{right:var(--space-3)}.gallery__thumbs{display:flex;flex-wrap:wrap;gap:var(--space-2)}.gallery--thumbs-left .gallery__thumbs{flex-direction:column;flex-wrap:nowrap;max-width:80px}.gallery__thumb{background:var(--bg-subtle);border:2px solid transparent;border-radius:var(--radius-md);cursor:pointer;height:64px;overflow:hidden;padding:0;width:64px}.gallery__thumb img{height:100%;-o-object-fit:cover;object-fit:cover;width:100%}.gallery__thumb.is-active{border-color:var(--color-primary)}.lightbox{align-items:center;background:rgba(12,18,32,.92);cursor:zoom-out;display:flex;inset:0;justify-content:center;padding:var(--space-8);position:fixed;z-index:var(--z-tooltip)}.lightbox__image{cursor:default;max-height:100%;max-width:100%;-o-object-fit:contain;object-fit:contain}.lightbox__close,.lightbox__nav{align-items:center;background:hsla(0,0%,100%,.1);border:0;border-radius:var(--radius-pill);color:var(--color-white);cursor:pointer;display:inline-flex;height:48px;justify-content:center;position:absolute;width:48px}.lightbox__close:hover,.lightbox__nav:hover{background:hsla(0,0%,100%,.2)}.lightbox__close{right:var(--space-4);top:var(--space-4)}.lightbox__nav--prev{left:var(--space-4);top:50%;transform:translateY(-50%)}.lightbox__nav--next{right:var(--space-4);top:50%;transform:translateY(-50%)}.lightbox__counter{bottom:var(--space-4);color:var(--color-white);font-family:var(--font-mono);font-size:var(--text-sm);left:50%;position:absolute;transform:translateX(-50%)}.rating{display:inline-flex;gap:2px}.rating__star{background:transparent;border:0;color:var(--color-gray-300);cursor:default;display:inline-flex;padding:2px}.rating--interactive .rating__star{cursor:pointer}.rating--interactive .rating__star:hover{color:var(--color-yellow-400)}.rating__star.is-full,.rating__star.is-half{color:var(--color-yellow-500)}.rating__star.is-half{opacity:.6}.price{align-items:baseline;display:inline-flex;flex-wrap:wrap;font-family:var(--font-body);gap:var(--space-2)}.price__amount{color:var(--fg-default);font-weight:700}.price__compare{color:var(--fg-subtle);font-size:.85em}.price__discount{background:var(--color-red-100);border-radius:var(--radius-sm);color:var(--color-red-800);font-size:var(--text-xs);font-weight:700;padding:2px var(--space-2)}.price--sm .price__amount{font-size:var(--text-md)}.price--md .price__amount{font-size:var(--text-lg)}.price--lg .price__amount{font-size:var(--text-2xl)}.price--xl .price__amount{font-family:var(--font-display);font-size:var(--text-3xl)}.qty{align-items:center;background:var(--bg-surface);border:1px solid var(--border-strong);border-radius:var(--radius-md);display:inline-flex;overflow:hidden}.qty.is-disabled{opacity:.5;pointer-events:none}.qty__btn{align-items:center;background:transparent;border:0;color:var(--fg-default);cursor:pointer;display:inline-flex;height:32px;justify-content:center;width:32px}.qty__btn:hover:not(:disabled){background:var(--bg-subtle)}.qty__btn:disabled{cursor:not-allowed;opacity:.4}.qty__input{-moz-appearance:textfield;background:transparent;border:0;border-left:1px solid var(--border-default);border-right:1px solid var(--border-default);color:var(--fg-default);font-family:var(--font-body);font-size:var(--text-sm);height:32px;text-align:center;width:44px}.qty__input::-webkit-inner-spin-button,.qty__input::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.qty--sm .qty__btn{height:28px;width:28px}.qty--sm .qty__input{font-size:var(--text-xs);height:28px;width:36px}.variants{display:flex;flex-direction:column;gap:var(--space-2)}.variants__label{color:var(--fg-default);font-size:var(--text-sm);font-weight:700}.variants__options{display:flex;flex-wrap:wrap;gap:var(--space-2)}.variants__chip{background:var(--bg-surface);border:1px solid var(--border-strong);border-radius:var(--radius-sm);color:var(--fg-default);cursor:pointer;font-family:var(--font-body);font-size:var(--text-sm);font-weight:700;padding:var(--space-2) var(--space-3)}.variants__chip.is-selected,.variants__chip:hover:not(:disabled){border-color:var(--color-primary)}.variants__chip.is-selected{background:var(--color-primary);color:var(--color-white)}.variants__chip.is-disabled{cursor:not-allowed;opacity:.4;text-decoration:line-through}.variants__swatch{align-items:center;border:2px solid var(--border-default);border-radius:var(--radius-pill);color:var(--color-white);cursor:pointer;display:inline-flex;height:32px;justify-content:center;position:relative;width:32px}.variants__swatch.is-selected{border-color:var(--color-primary);box-shadow:0 0 0 2px var(--bg-surface),0 0 0 4px var(--color-primary)}.variants__swatch.is-disabled{cursor:not-allowed;opacity:.4}.wishlist{align-items:center;background:var(--bg-surface);border:1px solid var(--border-default);border-radius:var(--radius-pill);color:var(--fg-muted);cursor:pointer;display:inline-flex;height:36px;justify-content:center;transition:color var(--duration-fast),background var(--duration-fast);width:36px}.wishlist.is-active,.wishlist:hover{color:var(--color-danger)}.wishlist.is-active{background:var(--color-red-50);border-color:var(--color-red-200)}.promo{flex-direction:column}.promo,.promo__row{display:flex;gap:var(--space-2)}.promo__input{flex:1;letter-spacing:var(--tracking-wide);text-transform:var(--tt-label)}.promo__message{border-radius:var(--radius-sm);font-size:var(--text-xs);padding:var(--space-1) var(--space-2)}.promo__message--success{background:var(--color-green-50);color:var(--color-green-800)}.promo__message--error{background:var(--color-red-50);color:var(--color-red-800)}.shipping-progress{display:flex;flex-direction:column;gap:var(--space-2)}.shipping-progress__text{color:var(--fg-default);font-size:var(--text-sm)}.shipping-progress__track{background:var(--bg-muted);border-radius:var(--radius-pill);height:6px;overflow:hidden}.shipping-progress__bar{background:var(--color-secondary);height:100%;transition:width var(--duration-base) var(--ease-standard)}.shipping-progress.is-achieved .shipping-progress__bar{background:var(--color-success)}.shipping-progress.is-achieved .shipping-progress__text{color:var(--color-green-800);font-weight:700}.cart__empty{color:var(--fg-muted);font-size:var(--text-sm);padding:var(--space-12) var(--space-4);text-align:center}.cart__list{flex-direction:column;list-style:none;margin:0;padding:0}.cart__item,.cart__list{display:flex;gap:var(--space-3)}.cart__item{background:var(--bg-subtle);border-radius:var(--radius-md);padding:var(--space-3)}.cart__item-media{background:var(--bg-surface);border-radius:var(--radius-sm);flex:none;height:64px;overflow:hidden;width:64px}.cart__item-media img{height:100%;-o-object-fit:cover;object-fit:cover;width:100%}.cart__item-placeholder{background:var(--bg-muted);height:100%;width:100%}.cart__item-body{display:flex;flex:1;flex-direction:column;gap:var(--space-1);min-width:0}.cart__item-name{color:var(--fg-default);font-size:var(--text-sm);font-weight:700}.cart__item-variant{color:var(--fg-muted);font-size:var(--text-xs)}.cart__item-price{color:var(--color-primary);font-size:var(--text-sm);font-weight:700}.cart__item-actions{align-items:flex-end;display:flex;flex-direction:column;gap:var(--space-2)}.cart__item-qty{color:var(--fg-muted);font-size:var(--text-sm);font-weight:700}.cart__item-remove{background:transparent;border:0;color:var(--fg-muted);cursor:pointer;padding:var(--space-1)}.cart__item-remove:hover{color:var(--color-danger)}.cart__footer{display:flex;flex-direction:column;gap:var(--space-3);width:100%}.cart__totals{align-items:center;display:flex;font-size:var(--text-md);justify-content:space-between}.order-summary{background:var(--bg-surface);border:1px solid var(--border-default);border-radius:var(--radius-lg);padding:var(--space-4)}.order-summary__title{border-bottom:1px solid var(--border-default);color:var(--fg-default);font-size:var(--text-md);font-weight:700;margin-bottom:var(--space-3);padding-bottom:var(--space-2)}.order-summary__list{display:flex;flex-direction:column;gap:var(--space-2);margin:0}.order-summary__row{align-items:center;color:var(--fg-default);display:flex;font-size:var(--text-sm);gap:var(--space-3);justify-content:space-between}.order-summary__row dt{color:var(--fg-muted);margin:0}.order-summary__row dd{color:var(--fg-default);font-weight:600;margin:0}.order-summary__row.is-emphasis{border-top:1px solid var(--border-default);font-size:var(--text-md);padding-top:var(--space-2)}.order-summary__row.is-emphasis dd,.order-summary__row.is-emphasis dt{color:var(--fg-default);font-weight:700}.address-form{display:grid;gap:var(--space-3) var(--space-3);grid-template-columns:repeat(6,1fr)}.address-form__field--full{grid-column:span 6}.address-form__field--half{grid-column:span 3}.address-form__field--third{grid-column:span 2}@media (max-width:600px){.address-form__field--half,.address-form__field--third{grid-column:span 6}}.compare{border:1px solid var(--border-default);border-radius:var(--radius-lg);overflow-x:auto}.compare__table{border-collapse:collapse;font-family:var(--font-body);font-size:var(--text-sm);width:100%}.compare__table td,.compare__table th{border-bottom:1px solid var(--border-default);padding:var(--space-3);text-align:center;vertical-align:top}.compare__head{align-items:center;display:flex;flex-direction:column;gap:var(--space-2);position:relative}.compare__img{height:80px;-o-object-fit:contain;object-fit:contain;width:80px}.compare__name{color:var(--fg-default);font-weight:700}.compare__price{color:var(--color-primary);font-weight:700}.compare__remove{align-items:center;background:var(--bg-subtle);border:0;border-radius:var(--radius-pill);color:var(--fg-muted);cursor:pointer;display:inline-flex;height:24px;justify-content:center;position:absolute;right:0;top:0;width:24px}.compare__remove:hover{background:var(--color-red-50);color:var(--color-danger)}.compare__attr{background:var(--bg-subtle);color:var(--fg-muted);font-weight:700;text-align:left}.compare__cell{color:var(--fg-default)}.hero{--hero-fg:var(--fg-default);background-position:50%;background-size:cover;border-radius:var(--radius-lg);color:var(--hero-fg);padding:var(--space-12) var(--space-6);position:relative}.hero--brand{background:var(--color-primary)}.hero--brand,.hero--inverse{--hero-fg:var(--color-white)}.hero--inverse{background:var(--color-ink)}.hero--subtle{--hero-fg:var(--fg-default);background:var(--bg-subtle)}.hero--image{--hero-fg:var(--color-white)}.hero--image:before{background:linear-gradient(180deg,transparent,rgba(12,18,32,.6));border-radius:inherit;content:"";inset:0;position:absolute}.hero--sm{padding:var(--space-8) var(--space-6)}.hero--lg{padding:var(--space-20) var(--space-8)}.hero__inner{display:flex;flex-direction:column;gap:var(--space-3);max-width:720px;position:relative;width:100%}.hero--align-center .hero__inner{align-items:center;margin:0 auto;text-align:center}.hero--align-end .hero__inner{align-items:flex-end;margin-left:auto;text-align:right}.hero__eyebrow{font-size:var(--text-sm);letter-spacing:var(--tracking-wider);opacity:.85;text-transform:var(--tt-label)}.hero__eyebrow,.hero__title{color:var(--hero-fg);font-weight:700}.hero__title{font-family:var(--font-display);font-size:clamp(var(--text-3xl),5vw + 1rem,var(--text-5xl));letter-spacing:var(--tracking-tight);line-height:var(--leading-tight);margin:0;text-transform:var(--tt-title)}.hero--sm .hero__title{font-size:var(--text-3xl)}.hero__subtitle{color:var(--hero-fg);font-size:var(--text-lg);line-height:var(--leading-relaxed);margin:0;opacity:.92}.hero__actions{display:flex;flex-wrap:wrap;gap:var(--space-3);margin-top:var(--space-3)}.hero--align-center .hero__actions{justify-content:center}.hero--align-end .hero__actions{justify-content:flex-end}.hero--brand .hero__actions .btn--outline,.hero--image .hero__actions .btn--outline,.hero--inverse .hero__actions .btn--outline{background:transparent;border-color:hsla(0,0%,100%,.6);color:var(--color-white)}.hero--brand .hero__actions .btn--outline:hover:not(:disabled),.hero--image .hero__actions .btn--outline:hover:not(:disabled),.hero--inverse .hero__actions .btn--outline:hover:not(:disabled){background:hsla(0,0%,100%,.15);border-color:var(--color-white);color:var(--color-white)}.hero--brand .hero__actions .btn--ghost,.hero--image .hero__actions .btn--ghost,.hero--inverse .hero__actions .btn--ghost{color:var(--color-white)}.hero--brand .hero__actions .btn--ghost:hover:not(:disabled),.hero--image .hero__actions .btn--ghost:hover:not(:disabled),.hero--inverse .hero__actions .btn--ghost:hover:not(:disabled){background:hsla(0,0%,100%,.12)}.hero--brand .hero__actions .btn--primary,.hero--image .hero__actions .btn--primary,.hero--inverse .hero__actions .btn--primary{background:var(--color-white);color:var(--color-primary)}.hero--brand .hero__actions .btn--primary:hover:not(:disabled),.hero--image .hero__actions .btn--primary:hover:not(:disabled),.hero--inverse .hero__actions .btn--primary:hover:not(:disabled){background:hsla(0,0%,100%,.88)}.testimonial{background:var(--bg-surface);border:1px solid var(--border-default);border-radius:var(--radius-lg);display:flex;flex-direction:column;gap:var(--space-3);margin:0;padding:var(--space-6)}.testimonial__rating{color:var(--color-gray-300);display:inline-flex;gap:2px}.testimonial__rating .is-filled{color:var(--color-yellow-500)}.testimonial__quote{color:var(--fg-default);font-family:var(--font-body);font-size:var(--text-lg);font-style:italic;line-height:var(--leading-relaxed);margin:0}.testimonial__caption{align-items:center;display:flex;gap:var(--space-3);margin:0}.testimonial__avatar{border-radius:var(--radius-pill);height:40px;-o-object-fit:cover;object-fit:cover;width:40px}.testimonial__author{color:var(--fg-default);font-size:var(--text-sm);font-weight:700}.testimonial__meta{color:var(--fg-muted);font-size:var(--text-xs)}.category-nav{display:block}.category-nav__list{display:flex;gap:var(--space-1);list-style:none;margin:0;padding:0}.category-nav__item{position:relative}.category-nav__link{align-items:center;background:transparent;border:0;color:var(--fg-default);cursor:pointer;display:inline-flex;font-family:var(--font-body);font-size:var(--text-sm);font-weight:700;gap:var(--space-1);padding:var(--space-3) var(--space-4);text-decoration:none}.category-nav__link.is-open,.category-nav__link:hover{color:var(--color-primary)}.category-nav__mega{background:var(--bg-surface);border:1px solid var(--border-default);border-radius:var(--radius-md);box-shadow:var(--shadow-lg);display:grid;gap:var(--space-5);grid-template-columns:repeat(auto-fit,minmax(180px,1fr));left:0;min-width:480px;padding:var(--space-5);position:absolute;top:100%;z-index:var(--z-dropdown)}.category-nav__group-title{color:var(--fg-muted);font-size:var(--text-xs);font-weight:700;letter-spacing:var(--tracking-wider);margin-bottom:var(--space-2);text-transform:var(--tt-label)}.category-nav__group-items{display:flex;flex-direction:column;gap:var(--space-1);list-style:none;margin:0;padding:0}.category-nav__group-items a{border:0;color:var(--fg-default);font-size:var(--text-sm);padding:var(--space-1) 0;text-decoration:none}.category-nav__group-items a:hover{color:var(--color-primary)}.popover{display:inline-block;position:relative}.popover__trigger{cursor:pointer;display:inline-flex}.popover__content{animation:popover-fade var(--duration-fast,.12s) var(--ease-standard,cubic-bezier(.22,1,.36,1));background:var(--bg-surface);border:1px solid var(--border-default);border-radius:var(--radius-md);box-shadow:var(--shadow-lg);color:var(--fg-default);font-size:var(--text-sm);max-width:320px;min-width:200px;padding:var(--space-3);z-index:var(--z-popover,1300)}@keyframes popover-fade{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}.hover-card{display:inline-block;position:relative}.hover-card__trigger{display:inline-flex}.hover-card__content{animation:popover-fade var(--duration-fast,.12s) var(--ease-standard,cubic-bezier(.22,1,.36,1));background:var(--bg-surface);border:1px solid var(--border-default);border-radius:var(--radius-md);box-shadow:var(--shadow-lg);color:var(--fg-default);font-size:var(--text-sm);max-width:320px;min-width:220px;padding:var(--space-3);z-index:var(--z-popover,1300)}.context-menu{display:inline-block}.context-menu__menu{background:var(--bg-surface);border:1px solid var(--border-default);border-radius:var(--radius-md);box-shadow:var(--shadow-lg);font-size:var(--text-sm);list-style:none;margin:0;min-width:200px;padding:var(--space-1)}.context-menu__item{align-items:center;background:transparent;border:0;border-radius:var(--radius-sm);color:var(--fg-default);cursor:pointer;display:flex;gap:var(--space-2);padding:var(--space-2) var(--space-3);text-align:left;width:100%}.context-menu__item:hover:not(:disabled){background:var(--bg-subtle)}.context-menu__item.is-disabled,.context-menu__item:disabled{cursor:not-allowed;opacity:.5}.context-menu__item--danger{color:var(--color-danger)}.context-menu__icon{display:inline-flex}.context-menu__separator{background:var(--border-default);height:1px;margin:var(--space-1) 0}.toggle{align-items:center;background:transparent;border:1px solid transparent;border-radius:var(--radius-md);color:var(--fg-default);cursor:pointer;display:inline-flex;font-weight:500;gap:var(--space-2);justify-content:center;transition:background var(--duration-fast,.12s),color var(--duration-fast,.12s),border-color var(--duration-fast,.12s)}.toggle--sm{font-size:var(--text-xs);height:28px;padding:4px var(--space-2)}.toggle--md{font-size:var(--text-sm);height:36px;padding:6px var(--space-3)}.toggle--lg{font-size:var(--text-base);height:44px;padding:8px var(--space-4)}.toggle--outline{border-color:var(--border-default)}.toggle:hover:not(:disabled):not(.is-pressed):not([aria-pressed=true]){background:var(--bg-subtle)}.toggle.is-pressed,.toggle[aria-pressed=true]{background:var(--bg-inverse,var(--fg-default));border-color:transparent;color:var(--bg-canvas)}.toggle.is-pressed:hover:not(:disabled),.toggle[aria-pressed=true]:hover:not(:disabled){filter:brightness(1.15)}.toggle:disabled{cursor:not-allowed;opacity:.5}.toggle-group{background:var(--bg-subtle);border:1px solid var(--border-default);border-radius:var(--radius-md);display:inline-flex;gap:2px;padding:2px}.toggle-group__item{border:0;border-radius:calc(var(--radius-md) - 2px)}.toggle-group__item:hover:not(:disabled){background:var(--bg-surface)}.toggle-group__item.is-pressed,.toggle-group__item[aria-pressed=true]{background:var(--bg-surface);box-shadow:var(--shadow-sm);color:var(--fg-default)}.toggle-group--segmented{display:flex}.toggle-group--segmented .toggle-group__item{flex:1 1 0}.toggle-group--has-indicator{position:relative}.toggle-group__indicator{background:var(--bg-surface);border-radius:calc(var(--radius-md) - 2px);bottom:2px;box-shadow:var(--shadow-sm);left:0;pointer-events:none;position:absolute;top:2px;z-index:0}.toggle-group__indicator.is-ready{transition:transform .2s cubic-bezier(.4,0,.2,1),width .2s cubic-bezier(.4,0,.2,1)}.toggle-group--has-indicator .toggle-group__item{position:relative;z-index:1}.toggle-group--has-indicator .toggle-group__item.is-pressed,.toggle-group--has-indicator .toggle-group__item[aria-pressed=true]{background:transparent;box-shadow:none}@media (prefers-reduced-motion:reduce){.toggle-group__indicator.is-ready{transition:none}}.input-otp{display:inline-flex;gap:var(--space-2)}.input-otp__slot{background:var(--bg-surface);border:1px solid var(--border-default);border-radius:var(--radius-md);caret-color:var(--color-primary);color:var(--fg-default);font-family:var(--font-mono,ui-monospace,monospace);font-size:var(--text-xl);font-weight:600;height:52px;text-align:center;transition:border-color var(--duration-fast,.12s),box-shadow var(--duration-fast,.12s);width:44px}.input-otp__slot:focus{border-color:var(--border-focus,var(--color-primary));box-shadow:0 0 0 3px color-mix(in srgb,var(--color-primary) 25%,transparent);outline:none}.input-otp.is-invalid .input-otp__slot{border-color:var(--color-danger)}.input-otp.is-disabled .input-otp__slot{opacity:.5}.separator{background:var(--border-default);flex:none}.separator--horizontal{height:1px;width:100%}.separator--vertical{align-self:stretch;height:100%;width:1px}.carousel{position:relative}.carousel:focus{outline:none}.carousel:focus-visible{border-radius:var(--radius-md);box-shadow:var(--focus-ring-accent);outline:none}.carousel__viewport{border-radius:var(--radius-lg);overflow:hidden;position:relative}.carousel__track{display:flex;transition:transform .32s var(--ease-standard,cubic-bezier(.22,1,.36,1))}.carousel__slide{flex:0 0 100%;min-width:0}.carousel__control{align-items:center;background:color-mix(in srgb,var(--bg-surface) 90%,transparent);border:1px solid var(--border-default);border-radius:var(--radius-pill);box-shadow:var(--shadow-sm);color:var(--fg-default);cursor:pointer;display:inline-flex;height:40px;justify-content:center;position:absolute;top:50%;transform:translateY(-50%);width:40px}.carousel__control:hover:not(:disabled){background:var(--bg-surface)}.carousel__control:disabled{cursor:not-allowed;opacity:.4}.carousel__control--prev{left:var(--space-2)}.carousel__control--next{right:var(--space-2)}.carousel__dots{display:flex;gap:var(--space-1,4px);list-style:none;margin-top:var(--space-3)}.carousel__dot,.carousel__dots{justify-content:center;padding:0}.carousel__dot{align-items:center;background:transparent;border:0;cursor:pointer;display:inline-flex;height:24px;width:24px}.carousel__dot:before{background:var(--border-strong,var(--border-default));border-radius:var(--radius-pill);content:"";height:8px;transition:background var(--duration-fast,.12s),width var(--duration-fast,.12s);width:8px}.carousel__dot.is-active:before{background:var(--color-primary);width:24px}.resizable{display:flex;height:100%;width:100%}.resizable--horizontal{flex-direction:row}.resizable--vertical{flex-direction:column}.resizable__panel{min-height:0;min-width:0;overflow:auto}.resizable__handle{background:var(--border-default);flex:none;position:relative;transition:background var(--duration-fast,.12s)}.resizable__handle:focus-visible,.resizable__handle:hover{background:var(--color-primary)}.resizable__handle--horizontal{cursor:col-resize;width:4px}.resizable__handle--vertical{cursor:row-resize;height:4px}.menubar{background:var(--bg-surface);border:1px solid var(--border-default);border-radius:var(--radius-md);display:inline-flex;gap:2px;padding:2px}.menubar__menu{position:relative}.menubar__trigger{background:transparent;border:0;border-radius:var(--radius-sm);color:var(--fg-default);cursor:pointer;font-weight:500;padding:var(--space-1) var(--space-3)}.menubar__trigger.is-open,.menubar__trigger:hover{background:var(--bg-subtle)}.menubar__list{background:var(--bg-surface);border:1px solid var(--border-default);border-radius:var(--radius-md);box-shadow:var(--shadow-lg);left:0;list-style:none;margin:0;min-width:200px;padding:var(--space-1);position:absolute;top:calc(100% + 4px);z-index:var(--z-popover,1300)}.menubar__item{align-items:center;background:transparent;border:0;border-radius:var(--radius-sm);color:var(--fg-default);cursor:pointer;display:flex;gap:var(--space-4);justify-content:space-between;padding:var(--space-2) var(--space-3);text-align:left;width:100%}.menubar__item:hover:not(:disabled){background:var(--bg-subtle)}.menubar__item.is-disabled,.menubar__item:disabled{cursor:not-allowed;opacity:.5}.menubar__shortcut{color:var(--fg-subtle);font-family:var(--font-mono,ui-monospace,monospace);font-size:var(--text-xs)}.menubar__separator{background:var(--border-default);height:1px;margin:var(--space-1) 0}.nav-menu{position:relative}.nav-menu__list{display:flex;gap:var(--space-1);list-style:none;margin:0;padding:0}.nav-menu__item{position:relative}.nav-menu__trigger{align-items:center;background:transparent;border:0;border-radius:var(--radius-sm);color:var(--fg-default);cursor:pointer;display:inline-flex;font-weight:500;gap:var(--space-1);padding:var(--space-2) var(--space-3);text-decoration:none}.nav-menu__trigger.is-open,.nav-menu__trigger:hover{background:var(--bg-subtle);color:var(--color-primary)}.nav-menu__chevron{transition:transform var(--duration-fast,.12s)}.nav-menu__trigger.is-open .nav-menu__chevron{transform:rotate(180deg)}.nav-menu__panel{background:var(--bg-surface);border:1px solid var(--border-default);border-radius:var(--radius-md);box-shadow:var(--shadow-lg);display:grid;gap:var(--space-3);grid-template-columns:1fr;left:0;min-width:320px;padding:var(--space-3);position:absolute;top:calc(100% + 8px);z-index:var(--z-popover,1300)}.nav-menu__featured{background:var(--bg-subtle);border-radius:var(--radius-sm);padding:var(--space-3)}.nav-menu__featured strong{color:var(--fg-default);display:block;font-size:var(--text-base)}.nav-menu__featured p{color:var(--fg-muted);font-size:var(--text-sm);margin:var(--space-1) 0 0}.nav-menu__sublist{display:flex;flex-direction:column;gap:2px;list-style:none;margin:0;padding:0}.nav-menu__link{align-items:flex-start;border-radius:var(--radius-sm);color:var(--fg-default);display:flex;gap:var(--space-2);padding:var(--space-2);text-decoration:none}.nav-menu__link:hover{background:var(--bg-subtle);color:var(--color-primary)}.nav-menu__link-icon{display:inline-flex}.nav-menu__link-body{display:flex;flex-direction:column;gap:2px}.nav-menu__link-label{font-size:var(--text-sm);font-weight:500}.nav-menu__link-desc{color:var(--fg-muted);font-size:var(--text-xs)}.grid--responsive{display:grid;grid-template-columns:repeat(var(--grid-cols,1),minmax(0,1fr))}@media (min-width:480px){.grid--responsive{grid-template-columns:repeat(var(--grid-cols-sm,var(--grid-cols,1)),minmax(0,1fr))}}@media (min-width:768px){.grid--responsive{grid-template-columns:repeat(var(--grid-cols-md,var(--grid-cols-sm,var(--grid-cols,1))),minmax(0,1fr))}}@media (min-width:1024px){.grid--responsive{grid-template-columns:repeat(var(--grid-cols-lg,var(--grid-cols-md,var(--grid-cols-sm,var(--grid-cols,1)))),minmax(0,1fr))}}@media (min-width:1280px){.grid--responsive{grid-template-columns:repeat(var(--grid-cols-xl,var(--grid-cols-lg,var(--grid-cols-md,var(--grid-cols-sm,var(--grid-cols,1))))),minmax(0,1fr))}}}@media (prefers-reduced-motion:reduce){*,:after,:before{animation-duration:.01ms!important;animation-iteration-count:1!important;scroll-behavior:auto!important;transition-duration:.01ms!important}}.aspect-ratio{overflow:hidden;position:relative;width:100%}.aspect-ratio>*{height:100%;inset:0;position:absolute;width:100%}.aspect-ratio>iframe,.aspect-ratio>img,.aspect-ratio>video{display:block;-o-object-fit:cover;object-fit:cover}.collapsible__trigger{background:transparent;border:0;color:inherit;cursor:pointer;padding:0}.collapsible__trigger:focus-visible{border-radius:var(--radius-sm);box-shadow:var(--focus-ring-accent);outline:none}.scroll-area{scrollbar-color:var(--border-strong) transparent;scrollbar-width:thin}.scroll-area--vertical{overflow-x:hidden;overflow-y:auto}.scroll-area--horizontal{overflow-x:auto;overflow-y:hidden}.scroll-area--both{overflow:auto}.scroll-area::-webkit-scrollbar{height:8px;width:8px}.scroll-area::-webkit-scrollbar-track{background:transparent}.scroll-area::-webkit-scrollbar-thumb{background:var(--border-strong);background-clip:padding-box;border:2px solid transparent;border-radius:var(--radius-pill)}.scroll-area::-webkit-scrollbar-thumb:hover{background-color:var(--fg-muted)}.scroll-area::-webkit-scrollbar-corner{background:transparent}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@misael703/ui",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.52.0",
|
|
4
4
|
"description": "Generic React + TypeScript UI kit, optimized for Next.js. Tokens, accessible components, runtime-configurable theming via presets.",
|
|
5
5
|
"author": "Misael Ocas <misael.ocas@gmail.com>",
|
|
6
6
|
"license": "MIT",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/Toggle.tsx"],"names":["Toggle","ToggleGroupItem"],"mappings":"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","file":"chunk-4N2PCBGA.mjs","sourcesContent":["'use client';\nimport * as React from 'react';\nimport { cx } from '../utils/cx';\n\nexport type ToggleSize = 'sm' | 'md' | 'lg';\nexport type ToggleVariant = 'default' | 'outline';\n\nexport interface ToggleProps extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'onChange'> {\n pressed?: boolean;\n defaultPressed?: boolean;\n onPressedChange?: (pressed: boolean) => void;\n size?: ToggleSize;\n variant?: ToggleVariant;\n}\n\nexport const Toggle = React.forwardRef<HTMLButtonElement, ToggleProps>(function Toggle(\n { pressed, defaultPressed, onPressedChange, size = 'md', variant = 'default', className, children, onClick, ...rest },\n ref\n) {\n const [internal, setInternal] = React.useState(defaultPressed ?? false);\n const isControlled = pressed !== undefined;\n const value = isControlled ? pressed : internal;\n\n return (\n <button\n ref={ref}\n type=\"button\"\n aria-pressed={value}\n data-state={value ? 'on' : 'off'}\n className={cx('toggle', `toggle--${size}`, `toggle--${variant}`, value && 'is-pressed', className)}\n onClick={(e) => {\n const next = !value;\n if (!isControlled) setInternal(next);\n onPressedChange?.(next);\n onClick?.(e);\n }}\n {...rest}\n >\n {children}\n </button>\n );\n});\n\ninterface ToggleGroupContextValue {\n type: 'single' | 'multiple';\n value: string | string[];\n setValue: (next: string | string[]) => void;\n size: ToggleSize;\n variant: ToggleVariant;\n disabled: boolean;\n}\nconst ToggleGroupContext = React.createContext<ToggleGroupContextValue | null>(null);\n\ninterface ToggleGroupBaseProps {\n size?: ToggleSize;\n variant?: ToggleVariant;\n disabled?: boolean;\n className?: string;\n ariaLabel?: string;\n children: React.ReactNode;\n}\n\nexport interface ToggleGroupSingleProps extends ToggleGroupBaseProps {\n type: 'single';\n value?: string | null;\n defaultValue?: string;\n onChange?: (value: string | null) => void;\n rovingFocus?: boolean;\n}\n\nexport interface ToggleGroupMultipleProps extends ToggleGroupBaseProps {\n type: 'multiple';\n value?: string[];\n defaultValue?: string[];\n onChange?: (value: string[]) => void;\n}\n\nexport type ToggleGroupProps = ToggleGroupSingleProps | ToggleGroupMultipleProps;\n\nexport function ToggleGroup(props: ToggleGroupProps) {\n const { type, size = 'md', variant = 'default', disabled = false, className, ariaLabel, children } = props;\n\n const initial: string | string[] =\n type === 'single' ? (props.defaultValue ?? '') : (props.defaultValue ?? []);\n const [internal, setInternal] = React.useState<string | string[]>(initial);\n\n const isControlled = props.value !== undefined && props.value !== null;\n const current: string | string[] = isControlled\n ? type === 'single'\n ? (props.value ?? '')\n : (props.value ?? [])\n : internal;\n\n const setValue = (next: string | string[]) => {\n if (!isControlled) setInternal(next);\n if (type === 'single') {\n const v = (next as string) || null;\n (props as ToggleGroupSingleProps).onChange?.(v);\n } else {\n (props as ToggleGroupMultipleProps).onChange?.(next as string[]);\n }\n };\n\n return (\n <ToggleGroupContext.Provider value={{ type, value: current, setValue, size, variant, disabled }}>\n <div role=\"group\" aria-label={ariaLabel} className={cx('toggle-group', className)}>\n {children}\n </div>\n </ToggleGroupContext.Provider>\n );\n}\n\n/**\n * `SegmentedControl` — a single-select `ToggleGroup` with equal-width\n * segments. The common case (view switcher, filter mode, on/off pair) is\n * `type=\"single\"`; this drops the discriminant so you can't trip the\n * cryptic union error from forgetting `type`. Use `SegmentedControlItem`\n * (alias of `ToggleGroupItem`) for the options.\n *\n * <SegmentedControl value={view} onChange={setView} ariaLabel=\"Vista\">\n * <SegmentedControlItem value=\"list\">Lista</SegmentedControlItem>\n * <SegmentedControlItem value=\"grid\">Tarjetas</SegmentedControlItem>\n * </SegmentedControl>\n */\nexport type SegmentedControlProps = Omit<ToggleGroupSingleProps, 'type'>;\n\nexport function SegmentedControl({ className, ...rest }: SegmentedControlProps) {\n return <ToggleGroup type=\"single\" className={cx('toggle-group--segmented', className)} {...rest} />;\n}\n\nexport interface ToggleGroupItemProps extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'value'> {\n value: string;\n /**\n * Optional leading icon, rendered before `children` and aligned via the\n * toggle's built-in flex gap. Convenience for view switchers / segmented\n * controls: `<SegmentedControlItem value=\"table\" icon={<Table />}>Tabla</…>`.\n * For an **icon-only** segment, pass `icon` with no children and give the\n * button an accessible name via `aria-label` (icons are decorative).\n */\n icon?: React.ReactNode;\n}\n\nexport const ToggleGroupItem = React.forwardRef<HTMLButtonElement, ToggleGroupItemProps>(function ToggleGroupItem(\n { value, className, children, icon, disabled: itemDisabled, ...rest },\n ref\n) {\n const ctx = React.useContext(ToggleGroupContext);\n if (!ctx) throw new Error('ToggleGroupItem must be used inside ToggleGroup');\n const isPressed =\n ctx.type === 'single'\n ? ctx.value === value\n : Array.isArray(ctx.value) && ctx.value.includes(value);\n\n const onClick = () => {\n if (ctx.type === 'single') {\n ctx.setValue(isPressed ? '' : value);\n } else {\n const arr = (ctx.value as string[]) ?? [];\n ctx.setValue(isPressed ? arr.filter((v) => v !== value) : [...arr, value]);\n }\n };\n\n return (\n <button\n ref={ref}\n type=\"button\"\n aria-pressed={isPressed}\n data-state={isPressed ? 'on' : 'off'}\n disabled={ctx.disabled || itemDisabled}\n className={cx('toggle', `toggle--${ctx.size}`, `toggle--${ctx.variant}`, 'toggle-group__item', isPressed && 'is-pressed', className)}\n onClick={onClick}\n {...rest}\n >\n {icon}\n {children}\n </button>\n );\n});\n\n/** Alias of `ToggleGroupItem` for use inside `SegmentedControl`. */\nexport const SegmentedControlItem = ToggleGroupItem;\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/Toggle.tsx"],"names":["React","Toggle","jsx","cx","ToggleGroupItem","jsxs"],"mappings":"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","file":"chunk-5LSPN6Q6.js","sourcesContent":["'use client';\nimport * as React from 'react';\nimport { cx } from '../utils/cx';\n\nexport type ToggleSize = 'sm' | 'md' | 'lg';\nexport type ToggleVariant = 'default' | 'outline';\n\nexport interface ToggleProps extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'onChange'> {\n pressed?: boolean;\n defaultPressed?: boolean;\n onPressedChange?: (pressed: boolean) => void;\n size?: ToggleSize;\n variant?: ToggleVariant;\n}\n\nexport const Toggle = React.forwardRef<HTMLButtonElement, ToggleProps>(function Toggle(\n { pressed, defaultPressed, onPressedChange, size = 'md', variant = 'default', className, children, onClick, ...rest },\n ref\n) {\n const [internal, setInternal] = React.useState(defaultPressed ?? false);\n const isControlled = pressed !== undefined;\n const value = isControlled ? pressed : internal;\n\n return (\n <button\n ref={ref}\n type=\"button\"\n aria-pressed={value}\n data-state={value ? 'on' : 'off'}\n className={cx('toggle', `toggle--${size}`, `toggle--${variant}`, value && 'is-pressed', className)}\n onClick={(e) => {\n const next = !value;\n if (!isControlled) setInternal(next);\n onPressedChange?.(next);\n onClick?.(e);\n }}\n {...rest}\n >\n {children}\n </button>\n );\n});\n\ninterface ToggleGroupContextValue {\n type: 'single' | 'multiple';\n value: string | string[];\n setValue: (next: string | string[]) => void;\n size: ToggleSize;\n variant: ToggleVariant;\n disabled: boolean;\n}\nconst ToggleGroupContext = React.createContext<ToggleGroupContextValue | null>(null);\n\ninterface ToggleGroupBaseProps {\n size?: ToggleSize;\n variant?: ToggleVariant;\n disabled?: boolean;\n className?: string;\n ariaLabel?: string;\n children: React.ReactNode;\n}\n\nexport interface ToggleGroupSingleProps extends ToggleGroupBaseProps {\n type: 'single';\n value?: string | null;\n defaultValue?: string;\n onChange?: (value: string | null) => void;\n rovingFocus?: boolean;\n}\n\nexport interface ToggleGroupMultipleProps extends ToggleGroupBaseProps {\n type: 'multiple';\n value?: string[];\n defaultValue?: string[];\n onChange?: (value: string[]) => void;\n}\n\nexport type ToggleGroupProps = ToggleGroupSingleProps | ToggleGroupMultipleProps;\n\nexport function ToggleGroup(props: ToggleGroupProps) {\n const { type, size = 'md', variant = 'default', disabled = false, className, ariaLabel, children } = props;\n\n const initial: string | string[] =\n type === 'single' ? (props.defaultValue ?? '') : (props.defaultValue ?? []);\n const [internal, setInternal] = React.useState<string | string[]>(initial);\n\n const isControlled = props.value !== undefined && props.value !== null;\n const current: string | string[] = isControlled\n ? type === 'single'\n ? (props.value ?? '')\n : (props.value ?? [])\n : internal;\n\n const setValue = (next: string | string[]) => {\n if (!isControlled) setInternal(next);\n if (type === 'single') {\n const v = (next as string) || null;\n (props as ToggleGroupSingleProps).onChange?.(v);\n } else {\n (props as ToggleGroupMultipleProps).onChange?.(next as string[]);\n }\n };\n\n return (\n <ToggleGroupContext.Provider value={{ type, value: current, setValue, size, variant, disabled }}>\n <div role=\"group\" aria-label={ariaLabel} className={cx('toggle-group', className)}>\n {children}\n </div>\n </ToggleGroupContext.Provider>\n );\n}\n\n/**\n * `SegmentedControl` — a single-select `ToggleGroup` with equal-width\n * segments. The common case (view switcher, filter mode, on/off pair) is\n * `type=\"single\"`; this drops the discriminant so you can't trip the\n * cryptic union error from forgetting `type`. Use `SegmentedControlItem`\n * (alias of `ToggleGroupItem`) for the options.\n *\n * <SegmentedControl value={view} onChange={setView} ariaLabel=\"Vista\">\n * <SegmentedControlItem value=\"list\">Lista</SegmentedControlItem>\n * <SegmentedControlItem value=\"grid\">Tarjetas</SegmentedControlItem>\n * </SegmentedControl>\n */\nexport type SegmentedControlProps = Omit<ToggleGroupSingleProps, 'type'>;\n\nexport function SegmentedControl({ className, ...rest }: SegmentedControlProps) {\n return <ToggleGroup type=\"single\" className={cx('toggle-group--segmented', className)} {...rest} />;\n}\n\nexport interface ToggleGroupItemProps extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'value'> {\n value: string;\n /**\n * Optional leading icon, rendered before `children` and aligned via the\n * toggle's built-in flex gap. Convenience for view switchers / segmented\n * controls: `<SegmentedControlItem value=\"table\" icon={<Table />}>Tabla</…>`.\n * For an **icon-only** segment, pass `icon` with no children and give the\n * button an accessible name via `aria-label` (icons are decorative).\n */\n icon?: React.ReactNode;\n}\n\nexport const ToggleGroupItem = React.forwardRef<HTMLButtonElement, ToggleGroupItemProps>(function ToggleGroupItem(\n { value, className, children, icon, disabled: itemDisabled, ...rest },\n ref\n) {\n const ctx = React.useContext(ToggleGroupContext);\n if (!ctx) throw new Error('ToggleGroupItem must be used inside ToggleGroup');\n const isPressed =\n ctx.type === 'single'\n ? ctx.value === value\n : Array.isArray(ctx.value) && ctx.value.includes(value);\n\n const onClick = () => {\n if (ctx.type === 'single') {\n ctx.setValue(isPressed ? '' : value);\n } else {\n const arr = (ctx.value as string[]) ?? [];\n ctx.setValue(isPressed ? arr.filter((v) => v !== value) : [...arr, value]);\n }\n };\n\n return (\n <button\n ref={ref}\n type=\"button\"\n aria-pressed={isPressed}\n data-state={isPressed ? 'on' : 'off'}\n disabled={ctx.disabled || itemDisabled}\n className={cx('toggle', `toggle--${ctx.size}`, `toggle--${ctx.variant}`, 'toggle-group__item', isPressed && 'is-pressed', className)}\n onClick={onClick}\n {...rest}\n >\n {icon}\n {children}\n </button>\n );\n});\n\n/** Alias of `ToggleGroupItem` for use inside `SegmentedControl`. */\nexport const SegmentedControlItem = ToggleGroupItem;\n"]}
|