@misael703/ui 1.10.0 → 1.11.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-GD3IZ66H.mjs → chunk-BBZESXFJ.mjs} +35 -13
- package/dist/chunk-BBZESXFJ.mjs.map +1 -0
- package/dist/{chunk-TS2WNAQC.js → chunk-OXX5RSZQ.js} +35 -13
- package/dist/chunk-OXX5RSZQ.js.map +1 -0
- package/dist/components/Display.d.mts +19 -1
- package/dist/components/Display.d.ts +19 -1
- package/dist/components/Display.js +12 -12
- package/dist/components/Display.mjs +1 -1
- package/dist/index.js +12 -12
- package/dist/index.mjs +1 -1
- package/dist/styles.css +1 -1
- package/dist/tokens.css +1 -1
- package/package.json +1 -1
- package/dist/chunk-GD3IZ66H.mjs.map +0 -1
- package/dist/chunk-TS2WNAQC.js.map +0 -1
|
@@ -33,18 +33,40 @@ var CardFooter = React.forwardRef(
|
|
|
33
33
|
return /* @__PURE__ */ jsx("div", { ref, className: cx("card__footer", className), ...rest });
|
|
34
34
|
}
|
|
35
35
|
);
|
|
36
|
-
function Badge({
|
|
36
|
+
function Badge({
|
|
37
|
+
variant = "neutral",
|
|
38
|
+
dot,
|
|
39
|
+
pulse,
|
|
40
|
+
tone = "data",
|
|
41
|
+
appearance = "soft",
|
|
42
|
+
className,
|
|
43
|
+
children,
|
|
44
|
+
...rest
|
|
45
|
+
}) {
|
|
37
46
|
const showDot = dot || pulse;
|
|
38
|
-
return /* @__PURE__ */ jsxs(
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
47
|
+
return /* @__PURE__ */ jsxs(
|
|
48
|
+
"span",
|
|
49
|
+
{
|
|
50
|
+
className: cx(
|
|
51
|
+
"badge",
|
|
52
|
+
`badge--${variant}`,
|
|
53
|
+
tone === "label" && "badge--label",
|
|
54
|
+
appearance !== "soft" && `badge--app-${appearance}`,
|
|
55
|
+
className
|
|
56
|
+
),
|
|
57
|
+
...rest,
|
|
58
|
+
children: [
|
|
59
|
+
showDot && /* @__PURE__ */ jsx(
|
|
60
|
+
"span",
|
|
61
|
+
{
|
|
62
|
+
className: cx("badge__dot", pulse && "is-pulsing"),
|
|
63
|
+
"aria-hidden": "true"
|
|
64
|
+
}
|
|
65
|
+
),
|
|
66
|
+
children
|
|
67
|
+
]
|
|
68
|
+
}
|
|
69
|
+
);
|
|
48
70
|
}
|
|
49
71
|
function Alert({ variant = "info", title, icon, onClose, className, children, ...rest }) {
|
|
50
72
|
const t = useLocale();
|
|
@@ -136,5 +158,5 @@ function ProductCard({
|
|
|
136
158
|
}
|
|
137
159
|
|
|
138
160
|
export { Alert, Badge, Card, CardBody, CardFooter, CardHeader, Chip, ChipGroup, ProductCard, Skeleton, Spinner };
|
|
139
|
-
//# sourceMappingURL=chunk-
|
|
140
|
-
//# sourceMappingURL=chunk-
|
|
161
|
+
//# sourceMappingURL=chunk-BBZESXFJ.mjs.map
|
|
162
|
+
//# sourceMappingURL=chunk-BBZESXFJ.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/Display.tsx"],"names":["Card","CardHeader","CardBody","CardFooter","ChipGroup"],"mappings":";;;;;;;AAoBO,IAAM,IAAA,GAAa,KAAA,CAAA,UAAA,CAAsC,SAASA,KAAAA,CACvE,EAAE,WAAA,EAAa,MAAA,EAAQ,SAAA,EAAW,OAAA,GAAU,KAAA,EAAO,GAAG,IAAA,IACtD,GAAA,EACA;AACA,EAAA,MAAM,GAAA,GAAM,EAAA;AAAA,IACV,MAAA;AAAA,IACA,WAAA,IAAe,mBAAA;AAAA,IACf,MAAA,IAAU,gBAAgB,MAAM,CAAA,CAAA;AAAA,IAChC;AAAA,GACF;AACA,EAAA,IAAI,OAAA,EAAS;AACX,IAAA,2BAAQ,IAAA,EAAA,EAAK,GAAA,EAAoC,SAAA,EAAW,GAAA,EAAM,GAAG,IAAA,EAAM,CAAA;AAAA,EAC7E;AACA,EAAA,2BAAQ,KAAA,EAAA,EAAI,GAAA,EAAU,SAAA,EAAW,GAAA,EAAM,GAAG,IAAA,EAAM,CAAA;AAClD,CAAC;AAEM,IAAM,UAAA,GAAmB,KAAA,CAAA,UAAA;AAAA,EAC9B,SAASC,WAAAA,CAAW,EAAE,WAAW,GAAG,IAAA,IAAQ,GAAA,EAAK;AAC/C,IAAA,uBAAO,GAAA,CAAC,SAAI,GAAA,EAAU,SAAA,EAAW,GAAG,cAAA,EAAgB,SAAS,CAAA,EAAI,GAAG,IAAA,EAAM,CAAA;AAAA,EAC5E;AACF;AAEO,IAAM,QAAA,GAAiB,KAAA,CAAA,UAAA;AAAA,EAC5B,SAASC,SAAAA,CAAS,EAAE,WAAW,GAAG,IAAA,IAAQ,GAAA,EAAK;AAC7C,IAAA,uBAAO,GAAA,CAAC,SAAI,GAAA,EAAU,SAAA,EAAW,GAAG,YAAA,EAAc,SAAS,CAAA,EAAI,GAAG,IAAA,EAAM,CAAA;AAAA,EAC1E;AACF;AAEO,IAAM,UAAA,GAAmB,KAAA,CAAA,UAAA;AAAA,EAC9B,SAASC,WAAAA,CAAW,EAAE,WAAW,GAAG,IAAA,IAAQ,GAAA,EAAK;AAC/C,IAAA,uBAAO,GAAA,CAAC,SAAI,GAAA,EAAU,SAAA,EAAW,GAAG,cAAA,EAAgB,SAAS,CAAA,EAAI,GAAG,IAAA,EAAM,CAAA;AAAA,EAC5E;AACF;AAmCO,SAAS,KAAA,CAAM;AAAA,EACpB,OAAA,GAAU,SAAA;AAAA,EAAW,GAAA;AAAA,EAAK,KAAA;AAAA,EAAO,IAAA,GAAO,MAAA;AAAA,EAAQ,UAAA,GAAa,MAAA;AAAA,EAAQ,SAAA;AAAA,EAAW,QAAA;AAAA,EAAU,GAAG;AAC/F,CAAA,EAAe;AACb,EAAA,MAAM,UAAU,GAAA,IAAO,KAAA;AACvB,EAAA,uBACE,IAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,EAAA;AAAA,QACT,OAAA;AAAA,QACA,UAAU,OAAO,CAAA,CAAA;AAAA,QACjB,SAAS,OAAA,IAAW,cAAA;AAAA,QACpB,UAAA,KAAe,MAAA,IAAU,CAAA,WAAA,EAAc,UAAU,CAAA,CAAA;AAAA,QACjD;AAAA,OACF;AAAA,MACC,GAAG,IAAA;AAAA,MAEH,QAAA,EAAA;AAAA,QAAA,OAAA,oBACC,GAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAW,EAAA,CAAG,YAAA,EAAc,KAAA,IAAS,YAAY,CAAA;AAAA,YACjD,aAAA,EAAY;AAAA;AAAA,SACd;AAAA,QAED;AAAA;AAAA;AAAA,GACH;AAEJ;AAYO,SAAS,KAAA,CAAM,EAAE,OAAA,GAAU,MAAA,EAAQ,KAAA,EAAO,IAAA,EAAM,OAAA,EAAS,SAAA,EAAW,QAAA,EAAU,GAAG,IAAA,EAAK,EAAe;AAC1G,EAAA,MAAM,IAAI,SAAA,EAAU;AACpB,EAAA,uBACE,IAAA,CAAC,KAAA,EAAA,EAAI,IAAA,EAAK,OAAA,EAAQ,SAAA,EAAW,EAAA,CAAG,OAAA,EAAS,CAAA,OAAA,EAAU,OAAO,CAAA,CAAA,EAAI,SAAS,CAAA,EAAI,GAAG,IAAA,EAC3E,QAAA,EAAA;AAAA,IAAA,IAAA,wBAAS,MAAA,EAAA,EAAK,SAAA,EAAU,aAAA,EAAc,aAAA,EAAY,QAAQ,QAAA,EAAA,IAAA,EAAK,CAAA;AAAA,oBAChE,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,aAAA,EACZ,QAAA,EAAA;AAAA,MAAA,KAAA,oBAAS,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,cAAA,EAAgB,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,MAC9C,QAAA,oBAAY,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,eAAe,QAAA,EAAS;AAAA,KAAA,EACtD,CAAA;AAAA,IACC,2BACC,GAAA,CAAC,QAAA,EAAA,EAAO,IAAA,EAAK,QAAA,EAAS,WAAU,cAAA,EAAe,OAAA,EAAS,OAAA,EAAS,YAAA,EAAY,EAAE,aAAa,CAAA,EAC1F,8BAAC,CAAA,EAAA,EAAE,IAAA,EAAM,IAAI,CAAA,EACf;AAAA,GAAA,EAEJ,CAAA;AAEJ;AASO,SAAS,QAAA,CAAS,EAAE,KAAA,EAAO,MAAA,EAAQ,SAAS,SAAA,EAAW,KAAA,EAAO,GAAG,IAAA,EAAK,EAAkB;AAC7F,EAAA,uBACE,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,EAAA,CAAG,MAAA,EAAQ,SAAS,CAAA;AAAA,MAC/B,KAAA,EAAO,EAAE,KAAA,EAAO,MAAA,EAAQ,cAAc,OAAA,GAAU,GAAA,GAAM,MAAA,EAAW,GAAG,KAAA,EAAM;AAAA,MAC1E,aAAA,EAAY,MAAA;AAAA,MACX,GAAG;AAAA;AAAA,GACN;AAEJ;AAOO,SAAS,OAAA,CAAQ,EAAE,IAAA,GAAO,IAAA,EAAM,SAAS,SAAA,EAAW,GAAG,MAAK,EAAiB;AAClF,EAAA,MAAM,IAAI,SAAA,EAAU;AACpB,EAAA,uBACE,GAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAK,QAAA;AAAA,MACL,YAAA,EAAY,EAAE,iBAAiB,CAAA;AAAA,MAC/B,SAAA,EAAW,GAAG,SAAA,EAAW,IAAA,KAAS,QAAQ,aAAA,EAAe,OAAA,IAAW,oBAAoB,SAAS,CAAA;AAAA,MAChG,GAAG;AAAA;AAAA,GACN;AAEJ;AASO,SAAS,IAAA,CAAK,EAAE,MAAA,EAAQ,QAAA,EAAU,aAAa,SAAA,EAAW,QAAA,EAAU,GAAG,IAAA,EAAK,EAAc;AAC/F,EAAA,MAAM,IAAI,SAAA,EAAU;AACpB,EAAA,uBACE,IAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAW,EAAA,CAAG,MAAA,EAAQ,UAAU,cAAA,EAAgB,SAAS,CAAA,EAAI,GAAG,IAAA,EACpE,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,UAAM,QAAA,EAAS,CAAA;AAAA,IACf,QAAA,oBACC,GAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAK,QAAA;AAAA,QACL,SAAA,EAAU,aAAA;AAAA,QACV,YAAA,EAAY,WAAA,IAAe,CAAA,CAAE,aAAa,CAAA;AAAA,QAC1C,OAAA,EAAS,CAAC,CAAA,KAAM;AAAE,UAAA,CAAA,CAAE,eAAA,EAAgB;AAAG,UAAA,QAAA,EAAS;AAAA,QAAG,CAAA;AAAA,QAEnD,QAAA,kBAAA,GAAA,CAAC,CAAA,EAAA,EAAE,IAAA,EAAM,EAAA,EAAI;AAAA;AAAA;AACf,GAAA,EAEJ,CAAA;AAEJ;AAEO,IAAM,SAAA,GAAkB,KAAA,CAAA,UAAA;AAAA,EAC7B,SAASC,WAAU,EAAE,SAAA,EAAW,OAAO,GAAG,IAAA,IAAQ,GAAA,EAAK;AACrD,IAAA,uBACE,GAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,SAAA,EAAW,EAAA,CAAG,YAAA,EAAc,SAAS,CAAA;AAAA,QACrC,KAAA,EAAO,EAAE,OAAA,EAAS,MAAA,EAAQ,UAAU,MAAA,EAAQ,GAAA,EAAK,CAAA,EAAG,GAAG,KAAA,EAAM;AAAA,QAC5D,GAAG;AAAA;AAAA,KACN;AAAA,EAEJ;AACF;AAaO,SAAS,WAAA,CAAY;AAAA,EAC1B,GAAA;AAAA,EAAK,IAAA;AAAA,EAAM,KAAA;AAAA,EAAO,KAAA;AAAA,EAAO,QAAA;AAAA,EAAU,GAAA;AAAA,EAAK,MAAA;AAAA,EAAQ,SAAA;AAAA,EAAW,GAAG;AAChE,CAAA,EAAqB;AACnB,EAAA,uBACE,IAAA,CAAC,aAAQ,SAAA,EAAW,EAAA,CAAG,gBAAgB,SAAS,CAAA,EAAI,GAAG,IAAA,EACpD,QAAA,EAAA;AAAA,IAAA,GAAA,oBAAO,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,mBAAA,EAAqB,QAAA,EAAA,GAAA,EAAI,CAAA;AAAA,oBACjD,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,qBAAA,EACZ,QAAA,EAAA,KAAA,mBACC,GAAA,CAAC,KAAA,EAAA,EAAI,GAAA,EAAK,KAAA,EAAO,GAAA,EAAK,QAAA,KAAa,OAAO,IAAA,KAAS,WAAW,IAAA,GAAO,EAAA,CAAA,EAAK,CAAA,mBAE1E,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,2BAAA,EAA6B,QAAA,EAAA,GAAA,GAAM,CAAA,EAAA,EAAK,GAAG,CAAA,EAAA,CAAA,GAAO,KAAA,EAAM,CAAA,EAE3E,CAAA;AAAA,oBACA,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oBAAA,EACZ,QAAA,EAAA;AAAA,MAAA,GAAA,oBAAO,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mBAAA,EAAqB,QAAA,EAAA,GAAA,EAAI,CAAA;AAAA,sBAChD,GAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,qBAAA,EAAuB,QAAA,EAAA,IAAA,EAAK,CAAA;AAAA,MACzC,KAAA,oBAAS,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,uBAAuB,QAAA,EAAA,KAAA,EAAM;AAAA,KAAA,EACxD,CAAA;AAAA,IACC,MAAA,oBAAU,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wBAAwB,QAAA,EAAA,MAAA,EAAO;AAAA,GAAA,EAC3D,CAAA;AAEJ","file":"chunk-BBZESXFJ.mjs","sourcesContent":["import * as React from 'react';\nimport { cx } from '../utils/cx';\nimport { X } from './Icons';\nimport { useLocale } from '../locale/LocaleProvider';\nimport { Slot } from './Primitives';\nimport type { Extensible } from '../utils/types';\n\nexport type CardAccent = 'brand' | 'secondary' | 'success' | 'warning' | 'danger' | 'info';\n\nexport interface CardProps extends React.HTMLAttributes<HTMLDivElement> {\n interactive?: boolean;\n accent?: Extensible<CardAccent>;\n /**\n * Render as the provided single child element instead of `<div>` (e.g.\n * a clickable card as `next/link`'s `<a>`). Card classes, ref and handlers\n * are merged onto it. Default `false` (identical behavior).\n */\n asChild?: boolean;\n}\n\nexport const Card = React.forwardRef<HTMLDivElement, CardProps>(function Card(\n { interactive, accent, className, asChild = false, ...rest },\n ref\n) {\n const cls = cx(\n 'card',\n interactive && 'card--interactive',\n accent && `card--accent-${accent}`,\n className\n );\n if (asChild) {\n return <Slot ref={ref as React.Ref<HTMLElement>} className={cls} {...rest} />;\n }\n return <div ref={ref} className={cls} {...rest} />;\n});\n\nexport const CardHeader = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n function CardHeader({ className, ...rest }, ref) {\n return <div ref={ref} className={cx('card__header', className)} {...rest} />;\n }\n);\n\nexport const CardBody = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n function CardBody({ className, ...rest }, ref) {\n return <div ref={ref} className={cx('card__body', className)} {...rest} />;\n }\n);\n\nexport const CardFooter = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n function CardFooter({ className, ...rest }, ref) {\n return <div ref={ref} className={cx('card__footer', className)} {...rest} />;\n }\n);\n\n// ---------- Badge --------------------------------------------------------\nexport type BadgeVariant =\n | 'primary' | 'accent' | 'success' | 'warning' | 'danger' | 'info' | 'neutral';\n\nexport interface BadgeProps extends React.HTMLAttributes<HTMLSpanElement> {\n variant?: Extensible<BadgeVariant>;\n dot?: boolean;\n /**\n * Pulsing status dot. Lets ONE component cover a \"status\" column\n * (previously you had to mix `StatusIndicator` + `Badge`, which read\n * inconsistently). Implies a dot. Respects `prefers-reduced-motion`.\n */\n pulse?: boolean;\n /**\n * Typographic register. `'data'` (default) is the quiet data-chip:\n * sentence case, tinted, no hard border — it reads as metadata in a\n * dense table. `'label'` is the brand micro-label: uppercase texture\n * for eyebrows, kickers and short tags. Opt into `'label'` only when\n * the badge is a label, not a value.\n */\n tone?: 'data' | 'label';\n /**\n * Surface intensity, orthogonal to `variant` (which is the colour\n * role). `'soft'` (default) is the tinted chip. `'solid'` is a filled\n * chip (the variant's deep tone + white text). `'outline'` is a hairline\n * chip (transparent fill, the variant's deep tone for text + border).\n * `variant=\"neutral\" appearance=\"solid\"` is the dark/ink tag. Supersedes\n * the legacy `variant=\"solid\"` / `\"solid-orange\"` magic strings (still\n * supported, not removed).\n */\n appearance?: 'soft' | 'solid' | 'outline';\n}\n\nexport function Badge({\n variant = 'neutral', dot, pulse, tone = 'data', appearance = 'soft', className, children, ...rest\n}: BadgeProps) {\n const showDot = dot || pulse;\n return (\n <span\n className={cx(\n 'badge',\n `badge--${variant}`,\n tone === 'label' && 'badge--label',\n appearance !== 'soft' && `badge--app-${appearance}`,\n className\n )}\n {...rest}\n >\n {showDot && (\n <span\n className={cx('badge__dot', pulse && 'is-pulsing')}\n aria-hidden=\"true\"\n />\n )}\n {children}\n </span>\n );\n}\n\n// ---------- Alert --------------------------------------------------------\nexport type AlertVariant = 'info' | 'success' | 'warning' | 'danger';\n\nexport interface AlertProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'title'> {\n variant?: Extensible<AlertVariant>;\n title?: React.ReactNode;\n icon?: React.ReactNode;\n onClose?: () => void;\n}\n\nexport function Alert({ variant = 'info', title, icon, onClose, className, children, ...rest }: AlertProps) {\n const t = useLocale();\n return (\n <div role=\"alert\" className={cx('alert', `alert--${variant}`, className)} {...rest}>\n {icon && <span className=\"alert__icon\" aria-hidden=\"true\">{icon}</span>}\n <div className=\"alert__body\">\n {title && <div className=\"alert__title\">{title}</div>}\n {children && <div className=\"alert__desc\">{children}</div>}\n </div>\n {onClose && (\n <button type=\"button\" className=\"alert__close\" onClick={onClose} aria-label={t['alert.close']}>\n <X size={16} />\n </button>\n )}\n </div>\n );\n}\n\n// ---------- Skeleton & Spinner ------------------------------------------\nexport interface SkeletonProps extends React.HTMLAttributes<HTMLDivElement> {\n width?: number | string;\n height?: number | string;\n rounded?: boolean;\n}\n\nexport function Skeleton({ width, height, rounded, className, style, ...rest }: SkeletonProps) {\n return (\n <div\n className={cx('skel', className)}\n style={{ width, height, borderRadius: rounded ? 999 : undefined, ...style }}\n aria-hidden=\"true\"\n {...rest}\n />\n );\n}\n\nexport interface SpinnerProps extends React.HTMLAttributes<HTMLSpanElement> {\n size?: 'sm' | 'md' | 'lg';\n inverse?: boolean;\n}\n\nexport function Spinner({ size = 'md', inverse, className, ...rest }: SpinnerProps) {\n const t = useLocale();\n return (\n <span\n role=\"status\"\n aria-label={t['spinner.loading']}\n className={cx('spinner', size === 'lg' && 'spinner--lg', inverse && 'spinner--inverse', className)}\n {...rest}\n />\n );\n}\n\n// ---------- Chip + ChipGroup --------------------------------------------\nexport interface ChipProps extends React.HTMLAttributes<HTMLSpanElement> {\n active?: boolean;\n onRemove?: () => void;\n removeLabel?: string;\n}\n\nexport function Chip({ active, onRemove, removeLabel, className, children, ...rest }: ChipProps) {\n const t = useLocale();\n return (\n <span className={cx('chip', active && 'chip--active', className)} {...rest}>\n <span>{children}</span>\n {onRemove && (\n <button\n type=\"button\"\n className=\"chip__close\"\n aria-label={removeLabel ?? t['chip.remove']}\n onClick={(e) => { e.stopPropagation(); onRemove(); }}\n >\n <X size={12} />\n </button>\n )}\n </span>\n );\n}\n\nexport const ChipGroup = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n function ChipGroup({ className, style, ...rest }, ref) {\n return (\n <div\n ref={ref}\n className={cx('chip-group', className)}\n style={{ display: 'flex', flexWrap: 'wrap', gap: 8, ...style }}\n {...rest}\n />\n );\n }\n);\n\n// ---------- ProductCard -------------------------------------------------\nexport interface ProductCardProps extends React.HTMLAttributes<HTMLElement> {\n sku?: React.ReactNode;\n name: React.ReactNode;\n price?: React.ReactNode;\n image?: string;\n imageAlt?: string;\n tag?: React.ReactNode;\n footer?: React.ReactNode;\n}\n\nexport function ProductCard({\n sku, name, price, image, imageAlt, tag, footer, className, ...rest\n}: ProductCardProps) {\n return (\n <article className={cx('product-card', className)} {...rest}>\n {tag && <span className=\"product-card__tag\">{tag}</span>}\n <div className=\"product-card__media\">\n {image ? (\n <img src={image} alt={imageAlt ?? (typeof name === 'string' ? name : '')} />\n ) : (\n <div className=\"product-card__placeholder\">{sku ? `[ ${sku} ]` : 'SKU'}</div>\n )}\n </div>\n <div className=\"product-card__body\">\n {sku && <div className=\"product-card__sku\">{sku}</div>}\n <h4 className=\"product-card__title\">{name}</h4>\n {price && <div className=\"product-card__price\">{price}</div>}\n </div>\n {footer && <div className=\"product-card__footer\">{footer}</div>}\n </article>\n );\n}\n"]}
|
|
@@ -55,18 +55,40 @@ var CardFooter = React__namespace.forwardRef(
|
|
|
55
55
|
return /* @__PURE__ */ jsxRuntime.jsx("div", { ref, className: chunkPASF6T4H_js.cx("card__footer", className), ...rest });
|
|
56
56
|
}
|
|
57
57
|
);
|
|
58
|
-
function Badge({
|
|
58
|
+
function Badge({
|
|
59
|
+
variant = "neutral",
|
|
60
|
+
dot,
|
|
61
|
+
pulse,
|
|
62
|
+
tone = "data",
|
|
63
|
+
appearance = "soft",
|
|
64
|
+
className,
|
|
65
|
+
children,
|
|
66
|
+
...rest
|
|
67
|
+
}) {
|
|
59
68
|
const showDot = dot || pulse;
|
|
60
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
69
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
70
|
+
"span",
|
|
71
|
+
{
|
|
72
|
+
className: chunkPASF6T4H_js.cx(
|
|
73
|
+
"badge",
|
|
74
|
+
`badge--${variant}`,
|
|
75
|
+
tone === "label" && "badge--label",
|
|
76
|
+
appearance !== "soft" && `badge--app-${appearance}`,
|
|
77
|
+
className
|
|
78
|
+
),
|
|
79
|
+
...rest,
|
|
80
|
+
children: [
|
|
81
|
+
showDot && /* @__PURE__ */ jsxRuntime.jsx(
|
|
82
|
+
"span",
|
|
83
|
+
{
|
|
84
|
+
className: chunkPASF6T4H_js.cx("badge__dot", pulse && "is-pulsing"),
|
|
85
|
+
"aria-hidden": "true"
|
|
86
|
+
}
|
|
87
|
+
),
|
|
88
|
+
children
|
|
89
|
+
]
|
|
90
|
+
}
|
|
91
|
+
);
|
|
70
92
|
}
|
|
71
93
|
function Alert({ variant = "info", title, icon, onClose, className, children, ...rest }) {
|
|
72
94
|
const t = chunk4VMQLSHV_js.useLocale();
|
|
@@ -168,5 +190,5 @@ exports.ChipGroup = ChipGroup;
|
|
|
168
190
|
exports.ProductCard = ProductCard;
|
|
169
191
|
exports.Skeleton = Skeleton;
|
|
170
192
|
exports.Spinner = Spinner;
|
|
171
|
-
//# sourceMappingURL=chunk-
|
|
172
|
-
//# sourceMappingURL=chunk-
|
|
193
|
+
//# sourceMappingURL=chunk-OXX5RSZQ.js.map
|
|
194
|
+
//# sourceMappingURL=chunk-OXX5RSZQ.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/Display.tsx"],"names":["React","Card","cx","Slot","CardHeader","jsx","CardBody","CardFooter","jsxs","useLocale","X","ChipGroup"],"mappings":"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","file":"chunk-OXX5RSZQ.js","sourcesContent":["import * as React from 'react';\nimport { cx } from '../utils/cx';\nimport { X } from './Icons';\nimport { useLocale } from '../locale/LocaleProvider';\nimport { Slot } from './Primitives';\nimport type { Extensible } from '../utils/types';\n\nexport type CardAccent = 'brand' | 'secondary' | 'success' | 'warning' | 'danger' | 'info';\n\nexport interface CardProps extends React.HTMLAttributes<HTMLDivElement> {\n interactive?: boolean;\n accent?: Extensible<CardAccent>;\n /**\n * Render as the provided single child element instead of `<div>` (e.g.\n * a clickable card as `next/link`'s `<a>`). Card classes, ref and handlers\n * are merged onto it. Default `false` (identical behavior).\n */\n asChild?: boolean;\n}\n\nexport const Card = React.forwardRef<HTMLDivElement, CardProps>(function Card(\n { interactive, accent, className, asChild = false, ...rest },\n ref\n) {\n const cls = cx(\n 'card',\n interactive && 'card--interactive',\n accent && `card--accent-${accent}`,\n className\n );\n if (asChild) {\n return <Slot ref={ref as React.Ref<HTMLElement>} className={cls} {...rest} />;\n }\n return <div ref={ref} className={cls} {...rest} />;\n});\n\nexport const CardHeader = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n function CardHeader({ className, ...rest }, ref) {\n return <div ref={ref} className={cx('card__header', className)} {...rest} />;\n }\n);\n\nexport const CardBody = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n function CardBody({ className, ...rest }, ref) {\n return <div ref={ref} className={cx('card__body', className)} {...rest} />;\n }\n);\n\nexport const CardFooter = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n function CardFooter({ className, ...rest }, ref) {\n return <div ref={ref} className={cx('card__footer', className)} {...rest} />;\n }\n);\n\n// ---------- Badge --------------------------------------------------------\nexport type BadgeVariant =\n | 'primary' | 'accent' | 'success' | 'warning' | 'danger' | 'info' | 'neutral';\n\nexport interface BadgeProps extends React.HTMLAttributes<HTMLSpanElement> {\n variant?: Extensible<BadgeVariant>;\n dot?: boolean;\n /**\n * Pulsing status dot. Lets ONE component cover a \"status\" column\n * (previously you had to mix `StatusIndicator` + `Badge`, which read\n * inconsistently). Implies a dot. Respects `prefers-reduced-motion`.\n */\n pulse?: boolean;\n /**\n * Typographic register. `'data'` (default) is the quiet data-chip:\n * sentence case, tinted, no hard border — it reads as metadata in a\n * dense table. `'label'` is the brand micro-label: uppercase texture\n * for eyebrows, kickers and short tags. Opt into `'label'` only when\n * the badge is a label, not a value.\n */\n tone?: 'data' | 'label';\n /**\n * Surface intensity, orthogonal to `variant` (which is the colour\n * role). `'soft'` (default) is the tinted chip. `'solid'` is a filled\n * chip (the variant's deep tone + white text). `'outline'` is a hairline\n * chip (transparent fill, the variant's deep tone for text + border).\n * `variant=\"neutral\" appearance=\"solid\"` is the dark/ink tag. Supersedes\n * the legacy `variant=\"solid\"` / `\"solid-orange\"` magic strings (still\n * supported, not removed).\n */\n appearance?: 'soft' | 'solid' | 'outline';\n}\n\nexport function Badge({\n variant = 'neutral', dot, pulse, tone = 'data', appearance = 'soft', className, children, ...rest\n}: BadgeProps) {\n const showDot = dot || pulse;\n return (\n <span\n className={cx(\n 'badge',\n `badge--${variant}`,\n tone === 'label' && 'badge--label',\n appearance !== 'soft' && `badge--app-${appearance}`,\n className\n )}\n {...rest}\n >\n {showDot && (\n <span\n className={cx('badge__dot', pulse && 'is-pulsing')}\n aria-hidden=\"true\"\n />\n )}\n {children}\n </span>\n );\n}\n\n// ---------- Alert --------------------------------------------------------\nexport type AlertVariant = 'info' | 'success' | 'warning' | 'danger';\n\nexport interface AlertProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'title'> {\n variant?: Extensible<AlertVariant>;\n title?: React.ReactNode;\n icon?: React.ReactNode;\n onClose?: () => void;\n}\n\nexport function Alert({ variant = 'info', title, icon, onClose, className, children, ...rest }: AlertProps) {\n const t = useLocale();\n return (\n <div role=\"alert\" className={cx('alert', `alert--${variant}`, className)} {...rest}>\n {icon && <span className=\"alert__icon\" aria-hidden=\"true\">{icon}</span>}\n <div className=\"alert__body\">\n {title && <div className=\"alert__title\">{title}</div>}\n {children && <div className=\"alert__desc\">{children}</div>}\n </div>\n {onClose && (\n <button type=\"button\" className=\"alert__close\" onClick={onClose} aria-label={t['alert.close']}>\n <X size={16} />\n </button>\n )}\n </div>\n );\n}\n\n// ---------- Skeleton & Spinner ------------------------------------------\nexport interface SkeletonProps extends React.HTMLAttributes<HTMLDivElement> {\n width?: number | string;\n height?: number | string;\n rounded?: boolean;\n}\n\nexport function Skeleton({ width, height, rounded, className, style, ...rest }: SkeletonProps) {\n return (\n <div\n className={cx('skel', className)}\n style={{ width, height, borderRadius: rounded ? 999 : undefined, ...style }}\n aria-hidden=\"true\"\n {...rest}\n />\n );\n}\n\nexport interface SpinnerProps extends React.HTMLAttributes<HTMLSpanElement> {\n size?: 'sm' | 'md' | 'lg';\n inverse?: boolean;\n}\n\nexport function Spinner({ size = 'md', inverse, className, ...rest }: SpinnerProps) {\n const t = useLocale();\n return (\n <span\n role=\"status\"\n aria-label={t['spinner.loading']}\n className={cx('spinner', size === 'lg' && 'spinner--lg', inverse && 'spinner--inverse', className)}\n {...rest}\n />\n );\n}\n\n// ---------- Chip + ChipGroup --------------------------------------------\nexport interface ChipProps extends React.HTMLAttributes<HTMLSpanElement> {\n active?: boolean;\n onRemove?: () => void;\n removeLabel?: string;\n}\n\nexport function Chip({ active, onRemove, removeLabel, className, children, ...rest }: ChipProps) {\n const t = useLocale();\n return (\n <span className={cx('chip', active && 'chip--active', className)} {...rest}>\n <span>{children}</span>\n {onRemove && (\n <button\n type=\"button\"\n className=\"chip__close\"\n aria-label={removeLabel ?? t['chip.remove']}\n onClick={(e) => { e.stopPropagation(); onRemove(); }}\n >\n <X size={12} />\n </button>\n )}\n </span>\n );\n}\n\nexport const ChipGroup = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n function ChipGroup({ className, style, ...rest }, ref) {\n return (\n <div\n ref={ref}\n className={cx('chip-group', className)}\n style={{ display: 'flex', flexWrap: 'wrap', gap: 8, ...style }}\n {...rest}\n />\n );\n }\n);\n\n// ---------- ProductCard -------------------------------------------------\nexport interface ProductCardProps extends React.HTMLAttributes<HTMLElement> {\n sku?: React.ReactNode;\n name: React.ReactNode;\n price?: React.ReactNode;\n image?: string;\n imageAlt?: string;\n tag?: React.ReactNode;\n footer?: React.ReactNode;\n}\n\nexport function ProductCard({\n sku, name, price, image, imageAlt, tag, footer, className, ...rest\n}: ProductCardProps) {\n return (\n <article className={cx('product-card', className)} {...rest}>\n {tag && <span className=\"product-card__tag\">{tag}</span>}\n <div className=\"product-card__media\">\n {image ? (\n <img src={image} alt={imageAlt ?? (typeof name === 'string' ? name : '')} />\n ) : (\n <div className=\"product-card__placeholder\">{sku ? `[ ${sku} ]` : 'SKU'}</div>\n )}\n </div>\n <div className=\"product-card__body\">\n {sku && <div className=\"product-card__sku\">{sku}</div>}\n <h4 className=\"product-card__title\">{name}</h4>\n {price && <div className=\"product-card__price\">{price}</div>}\n </div>\n {footer && <div className=\"product-card__footer\">{footer}</div>}\n </article>\n );\n}\n"]}
|
|
@@ -27,8 +27,26 @@ interface BadgeProps extends React.HTMLAttributes<HTMLSpanElement> {
|
|
|
27
27
|
* inconsistently). Implies a dot. Respects `prefers-reduced-motion`.
|
|
28
28
|
*/
|
|
29
29
|
pulse?: boolean;
|
|
30
|
+
/**
|
|
31
|
+
* Typographic register. `'data'` (default) is the quiet data-chip:
|
|
32
|
+
* sentence case, tinted, no hard border — it reads as metadata in a
|
|
33
|
+
* dense table. `'label'` is the brand micro-label: uppercase texture
|
|
34
|
+
* for eyebrows, kickers and short tags. Opt into `'label'` only when
|
|
35
|
+
* the badge is a label, not a value.
|
|
36
|
+
*/
|
|
37
|
+
tone?: 'data' | 'label';
|
|
38
|
+
/**
|
|
39
|
+
* Surface intensity, orthogonal to `variant` (which is the colour
|
|
40
|
+
* role). `'soft'` (default) is the tinted chip. `'solid'` is a filled
|
|
41
|
+
* chip (the variant's deep tone + white text). `'outline'` is a hairline
|
|
42
|
+
* chip (transparent fill, the variant's deep tone for text + border).
|
|
43
|
+
* `variant="neutral" appearance="solid"` is the dark/ink tag. Supersedes
|
|
44
|
+
* the legacy `variant="solid"` / `"solid-orange"` magic strings (still
|
|
45
|
+
* supported, not removed).
|
|
46
|
+
*/
|
|
47
|
+
appearance?: 'soft' | 'solid' | 'outline';
|
|
30
48
|
}
|
|
31
|
-
declare function Badge({ variant, dot, pulse, className, children, ...rest }: BadgeProps): react_jsx_runtime.JSX.Element;
|
|
49
|
+
declare function Badge({ variant, dot, pulse, tone, appearance, className, children, ...rest }: BadgeProps): react_jsx_runtime.JSX.Element;
|
|
32
50
|
type AlertVariant = 'info' | 'success' | 'warning' | 'danger';
|
|
33
51
|
interface AlertProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'title'> {
|
|
34
52
|
variant?: Extensible<AlertVariant>;
|
|
@@ -27,8 +27,26 @@ interface BadgeProps extends React.HTMLAttributes<HTMLSpanElement> {
|
|
|
27
27
|
* inconsistently). Implies a dot. Respects `prefers-reduced-motion`.
|
|
28
28
|
*/
|
|
29
29
|
pulse?: boolean;
|
|
30
|
+
/**
|
|
31
|
+
* Typographic register. `'data'` (default) is the quiet data-chip:
|
|
32
|
+
* sentence case, tinted, no hard border — it reads as metadata in a
|
|
33
|
+
* dense table. `'label'` is the brand micro-label: uppercase texture
|
|
34
|
+
* for eyebrows, kickers and short tags. Opt into `'label'` only when
|
|
35
|
+
* the badge is a label, not a value.
|
|
36
|
+
*/
|
|
37
|
+
tone?: 'data' | 'label';
|
|
38
|
+
/**
|
|
39
|
+
* Surface intensity, orthogonal to `variant` (which is the colour
|
|
40
|
+
* role). `'soft'` (default) is the tinted chip. `'solid'` is a filled
|
|
41
|
+
* chip (the variant's deep tone + white text). `'outline'` is a hairline
|
|
42
|
+
* chip (transparent fill, the variant's deep tone for text + border).
|
|
43
|
+
* `variant="neutral" appearance="solid"` is the dark/ink tag. Supersedes
|
|
44
|
+
* the legacy `variant="solid"` / `"solid-orange"` magic strings (still
|
|
45
|
+
* supported, not removed).
|
|
46
|
+
*/
|
|
47
|
+
appearance?: 'soft' | 'solid' | 'outline';
|
|
30
48
|
}
|
|
31
|
-
declare function Badge({ variant, dot, pulse, className, children, ...rest }: BadgeProps): react_jsx_runtime.JSX.Element;
|
|
49
|
+
declare function Badge({ variant, dot, pulse, tone, appearance, className, children, ...rest }: BadgeProps): react_jsx_runtime.JSX.Element;
|
|
32
50
|
type AlertVariant = 'info' | 'success' | 'warning' | 'danger';
|
|
33
51
|
interface AlertProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'title'> {
|
|
34
52
|
variant?: Extensible<AlertVariant>;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
|
-
var
|
|
4
|
+
var chunkOXX5RSZQ_js = require('../chunk-OXX5RSZQ.js');
|
|
5
5
|
require('../chunk-4VMQLSHV.js');
|
|
6
6
|
require('../chunk-EUB4PHPI.js');
|
|
7
7
|
require('../chunk-RQOTH7I7.js');
|
|
@@ -11,47 +11,47 @@ require('../chunk-PASF6T4H.js');
|
|
|
11
11
|
|
|
12
12
|
Object.defineProperty(exports, "Alert", {
|
|
13
13
|
enumerable: true,
|
|
14
|
-
get: function () { return
|
|
14
|
+
get: function () { return chunkOXX5RSZQ_js.Alert; }
|
|
15
15
|
});
|
|
16
16
|
Object.defineProperty(exports, "Badge", {
|
|
17
17
|
enumerable: true,
|
|
18
|
-
get: function () { return
|
|
18
|
+
get: function () { return chunkOXX5RSZQ_js.Badge; }
|
|
19
19
|
});
|
|
20
20
|
Object.defineProperty(exports, "Card", {
|
|
21
21
|
enumerable: true,
|
|
22
|
-
get: function () { return
|
|
22
|
+
get: function () { return chunkOXX5RSZQ_js.Card; }
|
|
23
23
|
});
|
|
24
24
|
Object.defineProperty(exports, "CardBody", {
|
|
25
25
|
enumerable: true,
|
|
26
|
-
get: function () { return
|
|
26
|
+
get: function () { return chunkOXX5RSZQ_js.CardBody; }
|
|
27
27
|
});
|
|
28
28
|
Object.defineProperty(exports, "CardFooter", {
|
|
29
29
|
enumerable: true,
|
|
30
|
-
get: function () { return
|
|
30
|
+
get: function () { return chunkOXX5RSZQ_js.CardFooter; }
|
|
31
31
|
});
|
|
32
32
|
Object.defineProperty(exports, "CardHeader", {
|
|
33
33
|
enumerable: true,
|
|
34
|
-
get: function () { return
|
|
34
|
+
get: function () { return chunkOXX5RSZQ_js.CardHeader; }
|
|
35
35
|
});
|
|
36
36
|
Object.defineProperty(exports, "Chip", {
|
|
37
37
|
enumerable: true,
|
|
38
|
-
get: function () { return
|
|
38
|
+
get: function () { return chunkOXX5RSZQ_js.Chip; }
|
|
39
39
|
});
|
|
40
40
|
Object.defineProperty(exports, "ChipGroup", {
|
|
41
41
|
enumerable: true,
|
|
42
|
-
get: function () { return
|
|
42
|
+
get: function () { return chunkOXX5RSZQ_js.ChipGroup; }
|
|
43
43
|
});
|
|
44
44
|
Object.defineProperty(exports, "ProductCard", {
|
|
45
45
|
enumerable: true,
|
|
46
|
-
get: function () { return
|
|
46
|
+
get: function () { return chunkOXX5RSZQ_js.ProductCard; }
|
|
47
47
|
});
|
|
48
48
|
Object.defineProperty(exports, "Skeleton", {
|
|
49
49
|
enumerable: true,
|
|
50
|
-
get: function () { return
|
|
50
|
+
get: function () { return chunkOXX5RSZQ_js.Skeleton; }
|
|
51
51
|
});
|
|
52
52
|
Object.defineProperty(exports, "Spinner", {
|
|
53
53
|
enumerable: true,
|
|
54
|
-
get: function () { return
|
|
54
|
+
get: function () { return chunkOXX5RSZQ_js.Spinner; }
|
|
55
55
|
});
|
|
56
56
|
//# sourceMappingURL=Display.js.map
|
|
57
57
|
//# sourceMappingURL=Display.js.map
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
'use client';
|
|
2
|
-
export { Alert, Badge, Card, CardBody, CardFooter, CardHeader, Chip, ChipGroup, ProductCard, Skeleton, Spinner } from '../chunk-
|
|
2
|
+
export { Alert, Badge, Card, CardBody, CardFooter, CardHeader, Chip, ChipGroup, ProductCard, Skeleton, Spinner } from '../chunk-BBZESXFJ.mjs';
|
|
3
3
|
import '../chunk-PQV7HHCJ.mjs';
|
|
4
4
|
import '../chunk-IEPKSPBX.mjs';
|
|
5
5
|
import '../chunk-CIBJKJV3.mjs';
|
package/dist/index.js
CHANGED
|
@@ -31,7 +31,7 @@ var chunkGKSUYHGO_js = require('./chunk-GKSUYHGO.js');
|
|
|
31
31
|
var chunkDIDQCPXU_js = require('./chunk-DIDQCPXU.js');
|
|
32
32
|
var chunkHYUINOPJ_js = require('./chunk-HYUINOPJ.js');
|
|
33
33
|
var chunkKTWHW6UV_js = require('./chunk-KTWHW6UV.js');
|
|
34
|
-
var
|
|
34
|
+
var chunkOXX5RSZQ_js = require('./chunk-OXX5RSZQ.js');
|
|
35
35
|
var chunkZMRN4DMC_js = require('./chunk-ZMRN4DMC.js');
|
|
36
36
|
var chunk56NJXIH7_js = require('./chunk-56NJXIH7.js');
|
|
37
37
|
var chunkD7RM4AY4_js = require('./chunk-D7RM4AY4.js');
|
|
@@ -467,47 +467,47 @@ Object.defineProperty(exports, "Pagination", {
|
|
|
467
467
|
});
|
|
468
468
|
Object.defineProperty(exports, "Alert", {
|
|
469
469
|
enumerable: true,
|
|
470
|
-
get: function () { return
|
|
470
|
+
get: function () { return chunkOXX5RSZQ_js.Alert; }
|
|
471
471
|
});
|
|
472
472
|
Object.defineProperty(exports, "Badge", {
|
|
473
473
|
enumerable: true,
|
|
474
|
-
get: function () { return
|
|
474
|
+
get: function () { return chunkOXX5RSZQ_js.Badge; }
|
|
475
475
|
});
|
|
476
476
|
Object.defineProperty(exports, "Card", {
|
|
477
477
|
enumerable: true,
|
|
478
|
-
get: function () { return
|
|
478
|
+
get: function () { return chunkOXX5RSZQ_js.Card; }
|
|
479
479
|
});
|
|
480
480
|
Object.defineProperty(exports, "CardBody", {
|
|
481
481
|
enumerable: true,
|
|
482
|
-
get: function () { return
|
|
482
|
+
get: function () { return chunkOXX5RSZQ_js.CardBody; }
|
|
483
483
|
});
|
|
484
484
|
Object.defineProperty(exports, "CardFooter", {
|
|
485
485
|
enumerable: true,
|
|
486
|
-
get: function () { return
|
|
486
|
+
get: function () { return chunkOXX5RSZQ_js.CardFooter; }
|
|
487
487
|
});
|
|
488
488
|
Object.defineProperty(exports, "CardHeader", {
|
|
489
489
|
enumerable: true,
|
|
490
|
-
get: function () { return
|
|
490
|
+
get: function () { return chunkOXX5RSZQ_js.CardHeader; }
|
|
491
491
|
});
|
|
492
492
|
Object.defineProperty(exports, "Chip", {
|
|
493
493
|
enumerable: true,
|
|
494
|
-
get: function () { return
|
|
494
|
+
get: function () { return chunkOXX5RSZQ_js.Chip; }
|
|
495
495
|
});
|
|
496
496
|
Object.defineProperty(exports, "ChipGroup", {
|
|
497
497
|
enumerable: true,
|
|
498
|
-
get: function () { return
|
|
498
|
+
get: function () { return chunkOXX5RSZQ_js.ChipGroup; }
|
|
499
499
|
});
|
|
500
500
|
Object.defineProperty(exports, "ProductCard", {
|
|
501
501
|
enumerable: true,
|
|
502
|
-
get: function () { return
|
|
502
|
+
get: function () { return chunkOXX5RSZQ_js.ProductCard; }
|
|
503
503
|
});
|
|
504
504
|
Object.defineProperty(exports, "Skeleton", {
|
|
505
505
|
enumerable: true,
|
|
506
|
-
get: function () { return
|
|
506
|
+
get: function () { return chunkOXX5RSZQ_js.Skeleton; }
|
|
507
507
|
});
|
|
508
508
|
Object.defineProperty(exports, "Spinner", {
|
|
509
509
|
enumerable: true,
|
|
510
|
-
get: function () { return
|
|
510
|
+
get: function () { return chunkOXX5RSZQ_js.Spinner; }
|
|
511
511
|
});
|
|
512
512
|
Object.defineProperty(exports, "Calendar", {
|
|
513
513
|
enumerable: true,
|
package/dist/index.mjs
CHANGED
|
@@ -29,7 +29,7 @@ export { ContextMenu } from './chunk-EJ263Y5X.mjs';
|
|
|
29
29
|
export { Accordion, AccordionItem, Breadcrumbs, DataTable, TablePagination, TableToolbar } from './chunk-WDDSHKU2.mjs';
|
|
30
30
|
export { Checkbox, FormField, Input, InputGroup, InputGroupAddon, Label, Radio, Select, Switch, Textarea } from './chunk-GVYZAOWU.mjs';
|
|
31
31
|
export { EmptyState, Kpi, NumberInput, Pagination } from './chunk-ETG3VM56.mjs';
|
|
32
|
-
export { Alert, Badge, Card, CardBody, CardFooter, CardHeader, Chip, ChipGroup, ProductCard, Skeleton, Spinner } from './chunk-
|
|
32
|
+
export { Alert, Badge, Card, CardBody, CardFooter, CardHeader, Chip, ChipGroup, ProductCard, Skeleton, Spinner } from './chunk-BBZESXFJ.mjs';
|
|
33
33
|
export { Calendar, StatusIndicator, Timeline, TimelineItem, Tree, UserCell } from './chunk-YL2IWHUZ.mjs';
|
|
34
34
|
export { Avatar, AvatarGroup, Menu, Stat } from './chunk-OJNEGJ3P.mjs';
|
|
35
35
|
export { CommandPalette, DateRangePicker, MultiCombobox, useCommandPalette } from './chunk-DY3DCHWD.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:#6b4400;--color-yellow-800:#8c5800;--color-yellow-700:#b67200;--color-yellow-600:#d68b00;--color-yellow-500:#f59f00;--color-yellow-400:#f7b633;--color-yellow-300:#f9cc66;--color-yellow-200:#fbe199;--color-yellow-100:#fdedc4;--color-yellow-50:#fef7e3;--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:#0a3a66;--color-info-800:#0f4d85;--color-info-700:#1660a5;--color-info-600:#1a73c2;--color-info-500:#408fd0;--color-info-400:#6ba9da;--color-info-300:#95c2e4;--color-info-200:#c0d8ee;--color-info-100:#dee9f5;--color-info-50:#eef4fa;--color-success:var(--color-green-600);--color-warning:var(--color-yellow-500);--color-danger:var(--color-red-600);--color-info:var(--color-info-600);--bg-canvas:#fef5ef;--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:#6b6560;--fg-subtle:#726c66;--fg-on-brand:var(--color-white);--fg-on-secondary:var(--color-primary);--fg-link:var(--color-primary);--fg-link-hover:var(--color-secondary-600);--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-secondary);--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:ui-monospace,"SF Mono","JetBrains 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-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);--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) 15%,transparent);--focus-ring-accent:0 0 0 3px color-mix(in srgb,var(--color-secondary) 35%,transparent);--focus-ring-danger:0 0 0 3px color-mix(in srgb,var(--color-red-600) 18%,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{color:var(--fg-muted);font-weight:400;line-height:var(--leading-normal)}.body-sm,.label{font-family:var(--font-body);font-size:var(--text-sm)}.label{color:var(--fg-default);font-weight:700;text-transform:var(--tt-data)}.caption,.label{letter-spacing:var(--tracking-wide)}.caption{color:var(--fg-subtle);font-family:var(--font-body);font-size:var(--text-xs);font-weight:400}.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(--color-primary);color:var(--fg-on-brand)}.btn--primary:hover:not(:disabled){background:var(--color-primary-900)}.btn--secondary{background:var(--color-secondary);color:var(--fg-on-secondary)}.btn--secondary:hover:not(:disabled){background: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-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-default);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:var(--tt-label);white-space:nowrap}.badge--primary{background:var(--color-primary-100);border-color:var(--color-primary-200);color:var(--color-primary-800)}.badge--accent{background:var(--color-secondary-100);border-color:var(--color-secondary-200);color:var(--color-secondary-800)}.badge--success{background:var(--color-green-50);border-color:var(--color-green-200);color:var(--color-green-800)}.badge--warning{background:var(--color-yellow-50);border-color:var(--color-yellow-200);color:var(--color-yellow-800)}.badge--danger{background:var(--color-red-50);border-color:var(--color-red-200);color:var(--color-red-800)}.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-sm);overflow:hidden}.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-md);transform:translateY(-2px)}.card--accent-brand,.card--accent-danger,.card--accent-info,.card--accent-secondary,.card--accent-success,.card--accent-warning{box-shadow:inset 4px 0 0 var(--card-accent-color),var(--shadow-sm)}.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--interactive.card--accent-brand:hover,.card--interactive.card--accent-danger:hover,.card--interactive.card--accent-info: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-md)}.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);overflow-x:auto}.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:600;letter-spacing:var(--tracking-normal);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--sticky{max-height:70vh;overflow-y:auto}.table-wrap--sticky .table thead th{background:var(--bg-surface);box-shadow:inset 0 -1px 0 var(--border-default);position:sticky;top:0;z-index:1}@media (max-width:600px){.table-wrap--cards .table{border:0}.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-xs);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-subtle)}.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}.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{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__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{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{box-shadow:var(--focus-ring-accent);outline:none}.combobox.is-invalid .combobox__input{border-color:var(--color-danger)}.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:22px;justify-content:center;padding:0;position:absolute;right:8px;top:50%;transform:translateY(-50%);width:22px}.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{border-radius:var(--radius-sm);cursor:pointer;display:flex;flex-direction:column;gap:2px;padding:8px 10px}.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__empty{color:var(--fg-muted);font-size:var(--text-sm);padding:16px;text-align:center}.datepicker{align-items:stretch;border-radius:var(--radius-sm);display:inline-flex;position:relative;width:-moz-fit-content;width:fit-content}.datepicker:focus-within{box-shadow:var(--focus-ring-accent);outline:none}.datepicker__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);font-family:var(--font-body);font-size:var(--text-sm);height:40px;min-width:160px;padding:0 12px}.datepicker__input:focus{outline:none}.datepicker.is-invalid .datepicker__input{border-color:var(--color-danger)}.datepicker__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}.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)}.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;grid-template-columns:248px 1fr;min-height:100vh;transition:grid-template-columns var(--duration-base,.2s) var(--ease-standard,cubic-bezier(.22,1,.36,1))}.appshell.is-collapsed{grid-template-columns:72px 1fr}.appshell__sidebar{background:var(--bg-surface);border-right:1px solid var(--border-default);display:flex;flex-direction:column;height:100vh;overflow:hidden;position:sticky;top:0}.appshell__brand{align-items:center;border-bottom:1px solid var(--border-default);display:flex;font-family:var(--font-display);font-weight:700;justify-content:center;letter-spacing:var(--tracking-wide);min-height:64px;padding:12px 20px;text-transform:var(--tt-title)}.appshell.is-collapsed .appshell__brand{overflow:hidden;padding:16px 12px}.appshell__brand-text{overflow:hidden;transition:opacity var(--duration-fast,.12s) ease,max-width var(--duration-base,.2s) var(--ease-standard,cubic-bezier(.22,1,.36,1))}.appshell.is-collapsed .appshell__brand-text{margin:0;max-width:0;opacity:0;padding:0;pointer-events:none}.appshell__foot-text{overflow:hidden;transition:opacity var(--duration-fast,.12s) ease,max-width var(--duration-base,.2s) var(--ease-standard,cubic-bezier(.22,1,.36,1));white-space:nowrap}.appshell.is-collapsed .appshell__foot-text{margin:0;max-width:0;opacity:0;padding:0;pointer-events:none}.appshell.is-collapsed .appshell__sidebar-foot{align-items:center;flex-direction:column;gap:6px;justify-content:center;overflow:hidden;padding:8px 0}.appshell.is-collapsed .appshell__collapse{margin:0 auto}.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__brand{border-bottom-color:hsla(0,0%,100%,.12);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--brand .appshell__collapse{background:transparent;color:hsla(0,0%,100%,.7)}.appshell--brand .appshell__collapse:hover{background:hsla(0,0%,100%,.1);color:var(--color-white)}.appshell__sidebar-foot{align-items:center;border-top:1px solid var(--border-default);display:flex;gap:8px;justify-content:space-between;padding:8px}.appshell__collapse{background:transparent;border:1px solid var(--border-default);border-radius:var(--radius-sm);color:var(--fg-muted);cursor:pointer;height:28px;margin-left:auto;width:28px}.appshell__collapse:hover{background:var(--bg-subtle)}.appshell__main{display:flex;flex-direction:column;min-width:0}.appshell__topbar{align-items:center;background:var(--bg-surface);border-bottom:1px solid var(--border-default);display:flex;gap:16px;min-height:64px;padding:12px 24px;position:sticky;top:0;z-index:20}.appshell__topbar-content{align-items:center;display:flex;flex:1;gap:16px;min-width:0;overflow:hidden}.appshell__topbar-user{align-items:center;display:flex;flex:none;gap:12px}.appshell__hamburger{background:transparent;border:0;border-radius:var(--radius-sm);color:var(--fg-default);cursor:pointer;display:none;font-size:var(--text-lg);height:36px;width:36px}.appshell__hamburger:hover{background:var(--bg-subtle)}.appshell__content{min-height:0;padding:24px}.appshell__scrim{background:var(--backdrop);display:none;inset:0;position:fixed;z-index:30}@media (max-width:900px){.appshell{grid-template-columns:1fr}.appshell__sidebar{bottom:0;left:0;position:fixed;top:0;transform:translateX(-100%);transition:transform var(--duration-base) var(--ease-standard);width:280px;z-index:40}.appshell.is-mobile-open .appshell__sidebar{transform:translateX(0)}.appshell.is-mobile-open .appshell__scrim{display:block}.appshell__hamburger{align-items:center;display:inline-flex;justify-content:center}}@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:28px;width:2px}.timeline__marker{align-items:center;background:var(--bg-surface);border:2px solid var(--border-default);border-radius:var(--radius-pill);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)}.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)}.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)}.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-2);justify-content:center;list-style:none;margin-top:var(--space-3);padding:0}.carousel__dot{background:var(--border-strong,var(--border-default));border:0;border-radius:var(--radius-pill);cursor:pointer;height:8px;padding:0;transition:background var(--duration-fast,.12s),width var(--duration-fast,.12s);width:8px}.carousel__dot.is-active{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)}}@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:#6b4400;--color-yellow-800:#8c5800;--color-yellow-700:#b67200;--color-yellow-600:#d68b00;--color-yellow-500:#f59f00;--color-yellow-400:#f7b633;--color-yellow-300:#f9cc66;--color-yellow-200:#fbe199;--color-yellow-100:#fdedc4;--color-yellow-50:#fef7e3;--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:#0a3a66;--color-info-800:#0f4d85;--color-info-700:#1660a5;--color-info-600:#1a73c2;--color-info-500:#408fd0;--color-info-400:#6ba9da;--color-info-300:#95c2e4;--color-info-200:#c0d8ee;--color-info-100:#dee9f5;--color-info-50:#eef4fa;--color-success:var(--color-green-600);--color-warning:var(--color-yellow-500);--color-danger:var(--color-red-600);--color-info:var(--color-info-600);--bg-canvas:#fef5ef;--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:#6b6560;--fg-subtle:#726c66;--fg-on-brand:var(--color-white);--fg-on-secondary:var(--color-primary);--fg-link:var(--color-primary);--fg-link-hover:var(--color-secondary-600);--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-secondary);--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:ui-monospace,"SF Mono","JetBrains 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-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);--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) 15%,transparent);--focus-ring-accent:0 0 0 3px color-mix(in srgb,var(--color-secondary) 35%,transparent);--focus-ring-danger:0 0 0 3px color-mix(in srgb,var(--color-red-600) 18%,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;text-transform:var(--tt-data)}.caption,.label{letter-spacing:var(--tracking-wide)}.caption{color:var(--fg-subtle);font-family:var(--font-body);font-size:var(--text-xs);font-weight:400}.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(--color-primary);color:var(--fg-on-brand)}.btn--primary:hover:not(:disabled){background:var(--color-primary-900)}.btn--secondary{background:var(--color-secondary);color:var(--fg-on-secondary)}.btn--secondary:hover:not(:disabled){background: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-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 transparent;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--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-sm);overflow:hidden}.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-md);transform:translateY(-2px)}.card--accent-brand,.card--accent-danger,.card--accent-info,.card--accent-secondary,.card--accent-success,.card--accent-warning{box-shadow:inset 4px 0 0 var(--card-accent-color),var(--shadow-sm)}.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--interactive.card--accent-brand:hover,.card--interactive.card--accent-danger:hover,.card--interactive.card--accent-info: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-md)}.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);overflow-x:auto}.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:600;letter-spacing:var(--tracking-normal);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--sticky{max-height:70vh;overflow-y:auto}.table-wrap--sticky .table thead th{background:var(--bg-surface);box-shadow:inset 0 -1px 0 var(--border-default);position:sticky;top:0;z-index:1}@media (max-width:600px){.table-wrap--cards .table{border:0}.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-xs);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-subtle)}.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}.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__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{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{box-shadow:var(--focus-ring-accent);outline:none}.combobox.is-invalid .combobox__input{border-color:var(--color-danger)}.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:22px;justify-content:center;padding:0;position:absolute;right:8px;top:50%;transform:translateY(-50%);width:22px}.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{border-radius:var(--radius-sm);cursor:pointer;display:flex;flex-direction:column;gap:2px;padding:8px 10px}.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__empty{color:var(--fg-muted);font-size:var(--text-sm);padding:16px;text-align:center}.datepicker{align-items:stretch;border-radius:var(--radius-sm);display:inline-flex;position:relative;width:-moz-fit-content;width:fit-content}.datepicker:focus-within{box-shadow:var(--focus-ring-accent);outline:none}.datepicker__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);font-family:var(--font-body);font-size:var(--text-sm);height:40px;min-width:160px;padding:0 12px}.datepicker__input:focus{outline:none}.datepicker.is-invalid .datepicker__input{border-color:var(--color-danger)}.datepicker__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}.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)}.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;grid-template-columns:248px 1fr;min-height:100vh;transition:grid-template-columns var(--duration-base,.2s) var(--ease-standard,cubic-bezier(.22,1,.36,1))}.appshell.is-collapsed{grid-template-columns:72px 1fr}.appshell__sidebar{background:var(--bg-surface);border-right:1px solid var(--border-default);display:flex;flex-direction:column;height:100vh;overflow:hidden;position:sticky;top:0}.appshell__brand{align-items:center;border-bottom:1px solid var(--border-default);display:flex;font-family:var(--font-display);font-weight:700;justify-content:center;letter-spacing:var(--tracking-wide);min-height:64px;padding:12px 20px;text-transform:var(--tt-title)}.appshell.is-collapsed .appshell__brand{overflow:hidden;padding:16px 12px}.appshell__brand-text{overflow:hidden;transition:opacity var(--duration-fast,.12s) ease,max-width var(--duration-base,.2s) var(--ease-standard,cubic-bezier(.22,1,.36,1))}.appshell.is-collapsed .appshell__brand-text{margin:0;max-width:0;opacity:0;padding:0;pointer-events:none}.appshell__foot-text{overflow:hidden;transition:opacity var(--duration-fast,.12s) ease,max-width var(--duration-base,.2s) var(--ease-standard,cubic-bezier(.22,1,.36,1));white-space:nowrap}.appshell.is-collapsed .appshell__foot-text{margin:0;max-width:0;opacity:0;padding:0;pointer-events:none}.appshell.is-collapsed .appshell__sidebar-foot{align-items:center;flex-direction:column;gap:6px;justify-content:center;overflow:hidden;padding:8px 0}.appshell.is-collapsed .appshell__collapse{margin:0 auto}.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__brand{border-bottom-color:hsla(0,0%,100%,.12);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--brand .appshell__collapse{background:transparent;color:hsla(0,0%,100%,.7)}.appshell--brand .appshell__collapse:hover{background:hsla(0,0%,100%,.1);color:var(--color-white)}.appshell__sidebar-foot{align-items:center;border-top:1px solid var(--border-default);display:flex;gap:8px;justify-content:space-between;padding:8px}.appshell__collapse{background:transparent;border:1px solid var(--border-default);border-radius:var(--radius-sm);color:var(--fg-muted);cursor:pointer;height:28px;margin-left:auto;width:28px}.appshell__collapse:hover{background:var(--bg-subtle)}.appshell__main{display:flex;flex-direction:column;min-width:0}.appshell__topbar{align-items:center;background:var(--bg-surface);border-bottom:1px solid var(--border-default);display:flex;gap:16px;min-height:64px;padding:12px 24px;position:sticky;top:0;z-index:20}.appshell__topbar-content{align-items:center;display:flex;flex:1;gap:16px;min-width:0;overflow:hidden}.appshell__topbar-user{align-items:center;display:flex;flex:none;gap:12px}.appshell__hamburger{background:transparent;border:0;border-radius:var(--radius-sm);color:var(--fg-default);cursor:pointer;display:none;font-size:var(--text-lg);height:36px;width:36px}.appshell__hamburger:hover{background:var(--bg-subtle)}.appshell__content{min-height:0;padding:24px}.appshell__scrim{background:var(--backdrop);display:none;inset:0;position:fixed;z-index:30}@media (max-width:900px){.appshell{grid-template-columns:1fr}.appshell__sidebar{bottom:0;left:0;position:fixed;top:0;transform:translateX(-100%);transition:transform var(--duration-base) var(--ease-standard);width:280px;z-index:40}.appshell.is-mobile-open .appshell__sidebar{transform:translateX(0)}.appshell.is-mobile-open .appshell__scrim{display:block}.appshell__hamburger{align-items:center;display:inline-flex;justify-content:center}}@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:28px;width:2px}.timeline__marker{align-items:center;background:var(--bg-surface);border:2px solid var(--border-default);border-radius:var(--radius-pill);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)}.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)}.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)}.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-2);justify-content:center;list-style:none;margin-top:var(--space-3);padding:0}.carousel__dot{background:var(--border-strong,var(--border-default));border:0;border-radius:var(--radius-pill);cursor:pointer;height:8px;padding:0;transition:background var(--duration-fast,.12s),width var(--duration-fast,.12s);width:8px}.carousel__dot.is-active{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)}}@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/dist/tokens.css
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
: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:#6b4400;--color-yellow-800:#8c5800;--color-yellow-700:#b67200;--color-yellow-600:#d68b00;--color-yellow-500:#f59f00;--color-yellow-400:#f7b633;--color-yellow-300:#f9cc66;--color-yellow-200:#fbe199;--color-yellow-100:#fdedc4;--color-yellow-50:#fef7e3;--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:#0a3a66;--color-info-800:#0f4d85;--color-info-700:#1660a5;--color-info-600:#1a73c2;--color-info-500:#408fd0;--color-info-400:#6ba9da;--color-info-300:#95c2e4;--color-info-200:#c0d8ee;--color-info-100:#dee9f5;--color-info-50:#eef4fa;--color-success:var(--color-green-600);--color-warning:var(--color-yellow-500);--color-danger:var(--color-red-600);--color-info:var(--color-info-600);--bg-canvas:#fef5ef;--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:#6b6560;--fg-subtle:#726c66;--fg-on-brand:var(--color-white);--fg-on-secondary:var(--color-primary);--fg-link:var(--color-primary);--fg-link-hover:var(--color-secondary-600);--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-secondary);--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:ui-monospace,"SF Mono","JetBrains 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-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);--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) 15%,transparent);--focus-ring-accent:0 0 0 3px color-mix(in srgb,var(--color-secondary) 35%,transparent);--focus-ring-danger:0 0 0 3px color-mix(in srgb,var(--color-red-600) 18%,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{
|
|
1
|
+
: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:#6b4400;--color-yellow-800:#8c5800;--color-yellow-700:#b67200;--color-yellow-600:#d68b00;--color-yellow-500:#f59f00;--color-yellow-400:#f7b633;--color-yellow-300:#f9cc66;--color-yellow-200:#fbe199;--color-yellow-100:#fdedc4;--color-yellow-50:#fef7e3;--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:#0a3a66;--color-info-800:#0f4d85;--color-info-700:#1660a5;--color-info-600:#1a73c2;--color-info-500:#408fd0;--color-info-400:#6ba9da;--color-info-300:#95c2e4;--color-info-200:#c0d8ee;--color-info-100:#dee9f5;--color-info-50:#eef4fa;--color-success:var(--color-green-600);--color-warning:var(--color-yellow-500);--color-danger:var(--color-red-600);--color-info:var(--color-info-600);--bg-canvas:#fef5ef;--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:#6b6560;--fg-subtle:#726c66;--fg-on-brand:var(--color-white);--fg-on-secondary:var(--color-primary);--fg-link:var(--color-primary);--fg-link-hover:var(--color-secondary-600);--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-secondary);--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:ui-monospace,"SF Mono","JetBrains 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-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);--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) 15%,transparent);--focus-ring-accent:0 0 0 3px color-mix(in srgb,var(--color-secondary) 35%,transparent);--focus-ring-danger:0 0 0 3px color-mix(in srgb,var(--color-red-600) 18%,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;text-transform:var(--tt-data)}.caption,.label{letter-spacing:var(--tracking-wide)}.caption{color:var(--fg-subtle);font-family:var(--font-body);font-size:var(--text-xs);font-weight:400}.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)}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@misael703/ui",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.11.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/Display.tsx"],"names":["Card","CardHeader","CardBody","CardFooter","ChipGroup"],"mappings":"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","file":"chunk-GD3IZ66H.mjs","sourcesContent":["import * as React from 'react';\nimport { cx } from '../utils/cx';\nimport { X } from './Icons';\nimport { useLocale } from '../locale/LocaleProvider';\nimport { Slot } from './Primitives';\nimport type { Extensible } from '../utils/types';\n\nexport type CardAccent = 'brand' | 'secondary' | 'success' | 'warning' | 'danger' | 'info';\n\nexport interface CardProps extends React.HTMLAttributes<HTMLDivElement> {\n interactive?: boolean;\n accent?: Extensible<CardAccent>;\n /**\n * Render as the provided single child element instead of `<div>` (e.g.\n * a clickable card as `next/link`'s `<a>`). Card classes, ref and handlers\n * are merged onto it. Default `false` (identical behavior).\n */\n asChild?: boolean;\n}\n\nexport const Card = React.forwardRef<HTMLDivElement, CardProps>(function Card(\n { interactive, accent, className, asChild = false, ...rest },\n ref\n) {\n const cls = cx(\n 'card',\n interactive && 'card--interactive',\n accent && `card--accent-${accent}`,\n className\n );\n if (asChild) {\n return <Slot ref={ref as React.Ref<HTMLElement>} className={cls} {...rest} />;\n }\n return <div ref={ref} className={cls} {...rest} />;\n});\n\nexport const CardHeader = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n function CardHeader({ className, ...rest }, ref) {\n return <div ref={ref} className={cx('card__header', className)} {...rest} />;\n }\n);\n\nexport const CardBody = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n function CardBody({ className, ...rest }, ref) {\n return <div ref={ref} className={cx('card__body', className)} {...rest} />;\n }\n);\n\nexport const CardFooter = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n function CardFooter({ className, ...rest }, ref) {\n return <div ref={ref} className={cx('card__footer', className)} {...rest} />;\n }\n);\n\n// ---------- Badge --------------------------------------------------------\nexport type BadgeVariant =\n | 'primary' | 'accent' | 'success' | 'warning' | 'danger' | 'info' | 'neutral';\n\nexport interface BadgeProps extends React.HTMLAttributes<HTMLSpanElement> {\n variant?: Extensible<BadgeVariant>;\n dot?: boolean;\n /**\n * Pulsing status dot. Lets ONE component cover a \"status\" column\n * (previously you had to mix `StatusIndicator` + `Badge`, which read\n * inconsistently). Implies a dot. Respects `prefers-reduced-motion`.\n */\n pulse?: boolean;\n}\n\nexport function Badge({ variant = 'neutral', dot, pulse, className, children, ...rest }: BadgeProps) {\n const showDot = dot || pulse;\n return (\n <span className={cx('badge', `badge--${variant}`, className)} {...rest}>\n {showDot && (\n <span\n className={cx('badge__dot', pulse && 'is-pulsing')}\n aria-hidden=\"true\"\n />\n )}\n {children}\n </span>\n );\n}\n\n// ---------- Alert --------------------------------------------------------\nexport type AlertVariant = 'info' | 'success' | 'warning' | 'danger';\n\nexport interface AlertProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'title'> {\n variant?: Extensible<AlertVariant>;\n title?: React.ReactNode;\n icon?: React.ReactNode;\n onClose?: () => void;\n}\n\nexport function Alert({ variant = 'info', title, icon, onClose, className, children, ...rest }: AlertProps) {\n const t = useLocale();\n return (\n <div role=\"alert\" className={cx('alert', `alert--${variant}`, className)} {...rest}>\n {icon && <span className=\"alert__icon\" aria-hidden=\"true\">{icon}</span>}\n <div className=\"alert__body\">\n {title && <div className=\"alert__title\">{title}</div>}\n {children && <div className=\"alert__desc\">{children}</div>}\n </div>\n {onClose && (\n <button type=\"button\" className=\"alert__close\" onClick={onClose} aria-label={t['alert.close']}>\n <X size={16} />\n </button>\n )}\n </div>\n );\n}\n\n// ---------- Skeleton & Spinner ------------------------------------------\nexport interface SkeletonProps extends React.HTMLAttributes<HTMLDivElement> {\n width?: number | string;\n height?: number | string;\n rounded?: boolean;\n}\n\nexport function Skeleton({ width, height, rounded, className, style, ...rest }: SkeletonProps) {\n return (\n <div\n className={cx('skel', className)}\n style={{ width, height, borderRadius: rounded ? 999 : undefined, ...style }}\n aria-hidden=\"true\"\n {...rest}\n />\n );\n}\n\nexport interface SpinnerProps extends React.HTMLAttributes<HTMLSpanElement> {\n size?: 'sm' | 'md' | 'lg';\n inverse?: boolean;\n}\n\nexport function Spinner({ size = 'md', inverse, className, ...rest }: SpinnerProps) {\n const t = useLocale();\n return (\n <span\n role=\"status\"\n aria-label={t['spinner.loading']}\n className={cx('spinner', size === 'lg' && 'spinner--lg', inverse && 'spinner--inverse', className)}\n {...rest}\n />\n );\n}\n\n// ---------- Chip + ChipGroup --------------------------------------------\nexport interface ChipProps extends React.HTMLAttributes<HTMLSpanElement> {\n active?: boolean;\n onRemove?: () => void;\n removeLabel?: string;\n}\n\nexport function Chip({ active, onRemove, removeLabel, className, children, ...rest }: ChipProps) {\n const t = useLocale();\n return (\n <span className={cx('chip', active && 'chip--active', className)} {...rest}>\n <span>{children}</span>\n {onRemove && (\n <button\n type=\"button\"\n className=\"chip__close\"\n aria-label={removeLabel ?? t['chip.remove']}\n onClick={(e) => { e.stopPropagation(); onRemove(); }}\n >\n <X size={12} />\n </button>\n )}\n </span>\n );\n}\n\nexport const ChipGroup = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n function ChipGroup({ className, style, ...rest }, ref) {\n return (\n <div\n ref={ref}\n className={cx('chip-group', className)}\n style={{ display: 'flex', flexWrap: 'wrap', gap: 8, ...style }}\n {...rest}\n />\n );\n }\n);\n\n// ---------- ProductCard -------------------------------------------------\nexport interface ProductCardProps extends React.HTMLAttributes<HTMLElement> {\n sku?: React.ReactNode;\n name: React.ReactNode;\n price?: React.ReactNode;\n image?: string;\n imageAlt?: string;\n tag?: React.ReactNode;\n footer?: React.ReactNode;\n}\n\nexport function ProductCard({\n sku, name, price, image, imageAlt, tag, footer, className, ...rest\n}: ProductCardProps) {\n return (\n <article className={cx('product-card', className)} {...rest}>\n {tag && <span className=\"product-card__tag\">{tag}</span>}\n <div className=\"product-card__media\">\n {image ? (\n <img src={image} alt={imageAlt ?? (typeof name === 'string' ? name : '')} />\n ) : (\n <div className=\"product-card__placeholder\">{sku ? `[ ${sku} ]` : 'SKU'}</div>\n )}\n </div>\n <div className=\"product-card__body\">\n {sku && <div className=\"product-card__sku\">{sku}</div>}\n <h4 className=\"product-card__title\">{name}</h4>\n {price && <div className=\"product-card__price\">{price}</div>}\n </div>\n {footer && <div className=\"product-card__footer\">{footer}</div>}\n </article>\n );\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/Display.tsx"],"names":["React","Card","cx","Slot","CardHeader","jsx","CardBody","CardFooter","jsxs","useLocale","X","ChipGroup"],"mappings":"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","file":"chunk-TS2WNAQC.js","sourcesContent":["import * as React from 'react';\nimport { cx } from '../utils/cx';\nimport { X } from './Icons';\nimport { useLocale } from '../locale/LocaleProvider';\nimport { Slot } from './Primitives';\nimport type { Extensible } from '../utils/types';\n\nexport type CardAccent = 'brand' | 'secondary' | 'success' | 'warning' | 'danger' | 'info';\n\nexport interface CardProps extends React.HTMLAttributes<HTMLDivElement> {\n interactive?: boolean;\n accent?: Extensible<CardAccent>;\n /**\n * Render as the provided single child element instead of `<div>` (e.g.\n * a clickable card as `next/link`'s `<a>`). Card classes, ref and handlers\n * are merged onto it. Default `false` (identical behavior).\n */\n asChild?: boolean;\n}\n\nexport const Card = React.forwardRef<HTMLDivElement, CardProps>(function Card(\n { interactive, accent, className, asChild = false, ...rest },\n ref\n) {\n const cls = cx(\n 'card',\n interactive && 'card--interactive',\n accent && `card--accent-${accent}`,\n className\n );\n if (asChild) {\n return <Slot ref={ref as React.Ref<HTMLElement>} className={cls} {...rest} />;\n }\n return <div ref={ref} className={cls} {...rest} />;\n});\n\nexport const CardHeader = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n function CardHeader({ className, ...rest }, ref) {\n return <div ref={ref} className={cx('card__header', className)} {...rest} />;\n }\n);\n\nexport const CardBody = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n function CardBody({ className, ...rest }, ref) {\n return <div ref={ref} className={cx('card__body', className)} {...rest} />;\n }\n);\n\nexport const CardFooter = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n function CardFooter({ className, ...rest }, ref) {\n return <div ref={ref} className={cx('card__footer', className)} {...rest} />;\n }\n);\n\n// ---------- Badge --------------------------------------------------------\nexport type BadgeVariant =\n | 'primary' | 'accent' | 'success' | 'warning' | 'danger' | 'info' | 'neutral';\n\nexport interface BadgeProps extends React.HTMLAttributes<HTMLSpanElement> {\n variant?: Extensible<BadgeVariant>;\n dot?: boolean;\n /**\n * Pulsing status dot. Lets ONE component cover a \"status\" column\n * (previously you had to mix `StatusIndicator` + `Badge`, which read\n * inconsistently). Implies a dot. Respects `prefers-reduced-motion`.\n */\n pulse?: boolean;\n}\n\nexport function Badge({ variant = 'neutral', dot, pulse, className, children, ...rest }: BadgeProps) {\n const showDot = dot || pulse;\n return (\n <span className={cx('badge', `badge--${variant}`, className)} {...rest}>\n {showDot && (\n <span\n className={cx('badge__dot', pulse && 'is-pulsing')}\n aria-hidden=\"true\"\n />\n )}\n {children}\n </span>\n );\n}\n\n// ---------- Alert --------------------------------------------------------\nexport type AlertVariant = 'info' | 'success' | 'warning' | 'danger';\n\nexport interface AlertProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'title'> {\n variant?: Extensible<AlertVariant>;\n title?: React.ReactNode;\n icon?: React.ReactNode;\n onClose?: () => void;\n}\n\nexport function Alert({ variant = 'info', title, icon, onClose, className, children, ...rest }: AlertProps) {\n const t = useLocale();\n return (\n <div role=\"alert\" className={cx('alert', `alert--${variant}`, className)} {...rest}>\n {icon && <span className=\"alert__icon\" aria-hidden=\"true\">{icon}</span>}\n <div className=\"alert__body\">\n {title && <div className=\"alert__title\">{title}</div>}\n {children && <div className=\"alert__desc\">{children}</div>}\n </div>\n {onClose && (\n <button type=\"button\" className=\"alert__close\" onClick={onClose} aria-label={t['alert.close']}>\n <X size={16} />\n </button>\n )}\n </div>\n );\n}\n\n// ---------- Skeleton & Spinner ------------------------------------------\nexport interface SkeletonProps extends React.HTMLAttributes<HTMLDivElement> {\n width?: number | string;\n height?: number | string;\n rounded?: boolean;\n}\n\nexport function Skeleton({ width, height, rounded, className, style, ...rest }: SkeletonProps) {\n return (\n <div\n className={cx('skel', className)}\n style={{ width, height, borderRadius: rounded ? 999 : undefined, ...style }}\n aria-hidden=\"true\"\n {...rest}\n />\n );\n}\n\nexport interface SpinnerProps extends React.HTMLAttributes<HTMLSpanElement> {\n size?: 'sm' | 'md' | 'lg';\n inverse?: boolean;\n}\n\nexport function Spinner({ size = 'md', inverse, className, ...rest }: SpinnerProps) {\n const t = useLocale();\n return (\n <span\n role=\"status\"\n aria-label={t['spinner.loading']}\n className={cx('spinner', size === 'lg' && 'spinner--lg', inverse && 'spinner--inverse', className)}\n {...rest}\n />\n );\n}\n\n// ---------- Chip + ChipGroup --------------------------------------------\nexport interface ChipProps extends React.HTMLAttributes<HTMLSpanElement> {\n active?: boolean;\n onRemove?: () => void;\n removeLabel?: string;\n}\n\nexport function Chip({ active, onRemove, removeLabel, className, children, ...rest }: ChipProps) {\n const t = useLocale();\n return (\n <span className={cx('chip', active && 'chip--active', className)} {...rest}>\n <span>{children}</span>\n {onRemove && (\n <button\n type=\"button\"\n className=\"chip__close\"\n aria-label={removeLabel ?? t['chip.remove']}\n onClick={(e) => { e.stopPropagation(); onRemove(); }}\n >\n <X size={12} />\n </button>\n )}\n </span>\n );\n}\n\nexport const ChipGroup = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n function ChipGroup({ className, style, ...rest }, ref) {\n return (\n <div\n ref={ref}\n className={cx('chip-group', className)}\n style={{ display: 'flex', flexWrap: 'wrap', gap: 8, ...style }}\n {...rest}\n />\n );\n }\n);\n\n// ---------- ProductCard -------------------------------------------------\nexport interface ProductCardProps extends React.HTMLAttributes<HTMLElement> {\n sku?: React.ReactNode;\n name: React.ReactNode;\n price?: React.ReactNode;\n image?: string;\n imageAlt?: string;\n tag?: React.ReactNode;\n footer?: React.ReactNode;\n}\n\nexport function ProductCard({\n sku, name, price, image, imageAlt, tag, footer, className, ...rest\n}: ProductCardProps) {\n return (\n <article className={cx('product-card', className)} {...rest}>\n {tag && <span className=\"product-card__tag\">{tag}</span>}\n <div className=\"product-card__media\">\n {image ? (\n <img src={image} alt={imageAlt ?? (typeof name === 'string' ? name : '')} />\n ) : (\n <div className=\"product-card__placeholder\">{sku ? `[ ${sku} ]` : 'SKU'}</div>\n )}\n </div>\n <div className=\"product-card__body\">\n {sku && <div className=\"product-card__sku\">{sku}</div>}\n <h4 className=\"product-card__title\">{name}</h4>\n {price && <div className=\"product-card__price\">{price}</div>}\n </div>\n {footer && <div className=\"product-card__footer\">{footer}</div>}\n </article>\n );\n}\n"]}
|