@configura/web-ui 1.4.0-alpha.3 → 1.5.0-alpha.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.
Files changed (45) hide show
  1. package/dist/components/CfgPriceView.d.ts +7 -0
  2. package/dist/components/CfgPriceView.js +13 -0
  3. package/dist/components/ProductInformation.d.ts +4 -1
  4. package/dist/components/ProductInformation.js +10 -19
  5. package/dist/components/TaskListView.d.ts +9 -0
  6. package/dist/components/TaskListView.js +50 -0
  7. package/dist/components/TaskStartView.d.ts +13 -0
  8. package/dist/components/TaskStartView.js +22 -0
  9. package/dist/components/icons/Checkmark.d.ts +4 -3
  10. package/dist/components/icons/Checkmark.js +4 -4
  11. package/dist/components/icons/Chevron.d.ts +2 -1
  12. package/dist/components/icons/Chevron.js +2 -2
  13. package/dist/components/icons/CircleXmarkIcon.d.ts +4 -0
  14. package/dist/components/icons/CircleXmarkIcon.js +8 -0
  15. package/dist/components/icons/DownloadIcon.d.ts +4 -0
  16. package/dist/components/icons/DownloadIcon.js +8 -0
  17. package/dist/components/icons/ErrorIcon.d.ts +4 -0
  18. package/dist/components/icons/ErrorIcon.js +8 -0
  19. package/dist/components/productConfiguration/CfgAdditionalProductView.js +2 -2
  20. package/dist/components/productConfiguration/CfgCheckboxView.d.ts +1 -0
  21. package/dist/components/productConfiguration/CfgCheckboxesView.d.ts +1 -0
  22. package/dist/components/productConfiguration/CfgCheckboxesView.js +2 -1
  23. package/dist/components/productConfiguration/CfgDropdownOptionView.d.ts +1 -0
  24. package/dist/components/productConfiguration/CfgDropdownOptionView.js +2 -1
  25. package/dist/components/productConfiguration/CfgDropdownView.d.ts +1 -0
  26. package/dist/components/productConfiguration/CfgDropdownView.js +2 -1
  27. package/dist/components/productConfiguration/CfgFeatureView.d.ts +2 -0
  28. package/dist/components/productConfiguration/CfgFeatureView.js +3 -1
  29. package/dist/components/productConfiguration/CfgGroupView.js +1 -7
  30. package/dist/components/productConfiguration/CfgOptionNumericView.js +4 -2
  31. package/dist/components/productConfiguration/CfgProductConfigurationView.js +1 -1
  32. package/dist/css/web-ui.css +1 -1
  33. package/dist/css/web-ui.css.map +1 -1
  34. package/dist/index.d.ts +2 -0
  35. package/dist/index.js +2 -0
  36. package/dist/scss/_configurator.scss +53 -33
  37. package/dist/scss/_feature-item.scss +19 -6
  38. package/dist/scss/_forms.scss +42 -0
  39. package/dist/scss/_range-view.scss +33 -22
  40. package/dist/scss/_tasks.scss +71 -0
  41. package/dist/scss/_themed.scss +37 -14
  42. package/dist/scss/icons/_circle-xmark-icon.scss +24 -0
  43. package/dist/scss/icons/_download-icon.scss +24 -0
  44. package/dist/scss/icons/_error-icon.scss +24 -0
  45. package/package.json +3 -3
@@ -0,0 +1,7 @@
1
+ import { CfgPrice } from "@configura/web-api";
2
+ import React from "react";
3
+ export declare const CfgPriceView: React.FC<{
4
+ price: CfgPrice | undefined;
5
+ lang: string | undefined;
6
+ }>;
7
+ //# sourceMappingURL=CfgPriceView.d.ts.map
@@ -0,0 +1,13 @@
1
+ import React from "react";
2
+ import { CurrencyPrice } from "./CurrencyPrice.js";
3
+ export const CfgPriceView = (props) => {
4
+ const { price, lang } = props;
5
+ if (price === undefined) {
6
+ return null;
7
+ }
8
+ const { listPrice, currency, fractionDigits } = price;
9
+ if (listPrice === 0 || currency === "") {
10
+ return null;
11
+ }
12
+ return (React.createElement(CurrencyPrice, { currency: currency, language: lang, price: listPrice, fractionDigits: fractionDigits }));
13
+ };
@@ -1,11 +1,14 @@
1
1
  import { CfgPrice } from "@configura/web-api";
2
+ import React, { ReactElement } from "react";
2
3
  import { CssProps } from "../utilities.js";
3
4
  interface Props {
4
5
  description: string | undefined;
5
6
  lang: string | undefined;
6
7
  styleNr: string | undefined;
7
8
  price: CfgPrice | undefined;
9
+ leftContent?: ReactElement;
10
+ rightContent?: ReactElement;
8
11
  }
9
- export declare function ProductInformation(props: Props & CssProps): JSX.Element;
12
+ export declare const ProductInformation: React.FC<Props & CssProps>;
10
13
  export {};
11
14
  //# sourceMappingURL=ProductInformation.d.ts.map
@@ -1,23 +1,14 @@
1
1
  import React from "react";
2
- import { CurrencyPrice } from "./CurrencyPrice.js";
3
- export function ProductInformation(props) {
4
- const { styleNr, price, description, lang } = props;
2
+ import { CfgPriceView } from "./CfgPriceView.js";
3
+ export const ProductInformation = (props) => {
4
+ const { styleNr, price, description, lang, leftContent, rightContent } = props;
5
5
  return (React.createElement("div", { className: `cfgProductInfo ${props.className || ""}`, style: props.style },
6
6
  React.createElement("div", { className: "cfgProductInfo__left" },
7
7
  React.createElement("h2", { className: "cfgProductInfo__name cfgTextOverflow" }, description),
8
- React.createElement("div", { className: "cfgProductInfo__number cfgTextOverflow" }, styleNr)),
9
- React.createElement(ProductInformationPrice, { price: price, lang: lang })));
10
- }
11
- function ProductInformationPrice(props) {
12
- const { price, lang } = props;
13
- if (price === undefined) {
14
- return null;
15
- }
16
- const { listPrice, currency, fractionDigits } = price;
17
- if (listPrice === 0 || currency === "") {
18
- return null;
19
- }
20
- return (React.createElement("div", { className: "cfgProductInfo__right" },
21
- React.createElement("div", { className: "cfgProductInfo__name cfgProductInfo__name--right" },
22
- React.createElement(CurrencyPrice, { currency: currency, language: lang, price: listPrice, fractionDigits: fractionDigits }))));
23
- }
8
+ React.createElement("div", { className: "cfgProductInfo__number cfgTextOverflow" }, styleNr),
9
+ leftContent),
10
+ React.createElement("div", { className: "cfgProductInfo__right" },
11
+ React.createElement("div", { className: "cfgProductInfo__name cfgProductInfo__name--right" },
12
+ React.createElement(CfgPriceView, { price: price, lang: lang })),
13
+ rightContent)));
14
+ };
@@ -0,0 +1,9 @@
1
+ import { TaskHandler } from "@configura/web-api";
2
+ import React from "react";
3
+ import { CssProps } from "../utilities.js";
4
+ declare type Props = {
5
+ taskHandler: TaskHandler;
6
+ };
7
+ export declare const TaskListView: React.FC<Props & CssProps>;
8
+ export {};
9
+ //# sourceMappingURL=TaskListView.d.ts.map
@@ -0,0 +1,50 @@
1
+ import { isRenderFormat } from "@configura/web-api";
2
+ import React from "react";
3
+ import { CircleXmarkIcon } from "./icons/CircleXmarkIcon.js";
4
+ import { DownloadIcon } from "./icons/DownloadIcon.js";
5
+ import { ErrorIcon } from "./icons/ErrorIcon.js";
6
+ import { Loading } from "./Loading.js";
7
+ export const TaskListView = (props) => {
8
+ var _a;
9
+ const tasks = props.taskHandler.tasks;
10
+ return (React.createElement("div", { className: `cfgTaskList ${(_a = props.className) !== null && _a !== void 0 ? _a : ""}`, style: props.style }, 0 < tasks.length && (React.createElement("ul", null, tasks.map((task) => (React.createElement(TaskView, { task: task, key: task.uuid })))))));
11
+ };
12
+ const spinner = (React.createElement("span", { className: "cfgLoadingSizer" },
13
+ React.createElement(Loading, null)));
14
+ const TaskView = (props) => {
15
+ const { task } = props;
16
+ const { status, format, url, previewUrl } = task;
17
+ let icon;
18
+ let statusMessage;
19
+ switch (status) {
20
+ case "pending":
21
+ icon = spinner;
22
+ statusMessage = `Pending ${format.toUpperCase()} ${isRenderFormat(format) ? "render" : "export"}...`;
23
+ break;
24
+ case "running":
25
+ icon = spinner;
26
+ statusMessage = `${isRenderFormat(format) ? "Rendering" : "Exporting"} ${format.toUpperCase()}...`;
27
+ break;
28
+ case "finished":
29
+ icon = React.createElement(DownloadIcon, null);
30
+ statusMessage = `Download ${format.toUpperCase()}`;
31
+ break;
32
+ case "failed":
33
+ icon = React.createElement(ErrorIcon, null);
34
+ statusMessage = `Failed ${isRenderFormat(format) ? "rendering" : "export"} ${format.toUpperCase()}`;
35
+ break;
36
+ default:
37
+ icon = undefined;
38
+ statusMessage = "";
39
+ }
40
+ return (React.createElement("li", { className: "cfgTaskList__item" },
41
+ React.createElement("div", { className: "cfgTaskList__preview" }, previewUrl && React.createElement("img", { src: previewUrl, alt: `Preview of ${statusMessage}` })),
42
+ React.createElement("div", { className: "cfgTaskList__icon" }, url === undefined ? (icon) : (React.createElement("a", { href: url, title: statusMessage }, icon))),
43
+ React.createElement("div", { className: "cfgTaskList__status" },
44
+ url === undefined ? (statusMessage) : (React.createElement("a", { href: url, title: statusMessage }, statusMessage)),
45
+ status === "failed" && (React.createElement(React.Fragment, null,
46
+ " ",
47
+ React.createElement("button", { className: "cfgTaskList__restart", onClick: () => task.restart() }, "Restart")))),
48
+ React.createElement("button", { className: "cfgTaskList__abort", onClick: () => task.abort() },
49
+ React.createElement(CircleXmarkIcon, null))));
50
+ };
@@ -0,0 +1,13 @@
1
+ import { CfgProduct, RenderOrExportFormat, RenderTaskParams, TaskHandler } from "@configura/web-api";
2
+ import React from "react";
3
+ import { CssProps } from "../utilities.js";
4
+ declare type Props = {
5
+ taskHandler: TaskHandler;
6
+ product: CfgProduct;
7
+ renderTaskParams: (() => RenderTaskParams) | RenderTaskParams | undefined;
8
+ getPreviewUrl: (() => Promise<string>) | undefined;
9
+ formats?: RenderOrExportFormat[];
10
+ };
11
+ export declare const TaskStartView: React.FC<Props & CssProps>;
12
+ export {};
13
+ //# sourceMappingURL=TaskStartView.d.ts.map
@@ -0,0 +1,22 @@
1
+ import React from "react";
2
+ export const TaskStartView = (props) => {
3
+ var _a, _b;
4
+ const { taskHandler, product, renderTaskParams, getPreviewUrl } = props;
5
+ const formats = (_a = props.formats) !== null && _a !== void 0 ? _a : taskHandler.availableFormats;
6
+ if (formats.length === 0) {
7
+ return null;
8
+ }
9
+ return (React.createElement("div", { className: `cfgTaskStart ${(_b = props.className) !== null && _b !== void 0 ? _b : ""}`, style: props.style },
10
+ React.createElement("div", { className: "cfgFormSelect" },
11
+ React.createElement("select", { value: "", onChange: (event) => {
12
+ const index = event.target.selectedIndex;
13
+ if (index === 0) {
14
+ return;
15
+ }
16
+ taskHandler.start(formats[index - 1], product, typeof renderTaskParams === "function"
17
+ ? renderTaskParams()
18
+ : renderTaskParams, getPreviewUrl);
19
+ } },
20
+ React.createElement("option", { value: "" }, "Export"),
21
+ formats.map((format) => (React.createElement("option", { value: format, key: format }, format)))))));
22
+ };
@@ -1,6 +1,7 @@
1
+ import React from "react";
1
2
  import { CssProps } from "../../utilities";
2
- export declare function CheckmarkWithBorder(props: {
3
+ export declare const CheckmarkWithBorder: React.FC<{
3
4
  active: boolean;
4
- } & CssProps): JSX.Element;
5
- export declare function Checkmark(props: CssProps): JSX.Element;
5
+ } & CssProps>;
6
+ export declare const Checkmark: React.FC<CssProps>;
6
7
  //# sourceMappingURL=Checkmark.d.ts.map
@@ -1,12 +1,12 @@
1
1
  import React from "react";
2
- export function CheckmarkWithBorder(props) {
2
+ export const CheckmarkWithBorder = (props) => {
3
3
  const { active } = props;
4
4
  return (React.createElement("div", { className: `cfgCheckmark__border ${props.className || ""} ${active ? "cfgCheckmark__border--active" : ""}`, style: props.style }, active && React.createElement(Checkmark, null)));
5
- }
6
- export function Checkmark(props) {
5
+ };
6
+ export const Checkmark = (props) => {
7
7
  return (React.createElement("span", { className: `cfgCheckmark ${props.className || ""}`, style: props.style },
8
8
  React.createElement("svg", { height: "100%", preserveAspectRatio: "xMidYMid", version: "1.1", viewBox: "0 0 100 100", width: "100%", xmlns: "http://www.w3.org/2000/svg" },
9
9
  React.createElement("g", { className: "cfgCheckmark__container" },
10
10
  React.createElement("line", { className: "cfgCheckmark__line cfgCheckmark__lineLeft", x1: "10", y1: "30", x2: "30", y2: "30" }),
11
11
  React.createElement("line", { className: "cfgCheckmark__line cfgCheckmark__lineRight", x1: "90", y1: "50", x2: "50", y2: "50" })))));
12
- }
12
+ };
@@ -1,7 +1,8 @@
1
+ import React from "react";
1
2
  import { CssProps } from "../../utilities";
2
3
  export interface Props {
3
4
  active: boolean;
4
5
  up?: boolean;
5
6
  }
6
- export declare function Chevron(props: Props & CssProps): JSX.Element;
7
+ export declare const Chevron: React.FC<Props & CssProps>;
7
8
  //# sourceMappingURL=Chevron.d.ts.map
@@ -1,5 +1,5 @@
1
1
  import React from "react";
2
- export function Chevron(props) {
2
+ export const Chevron = (props) => {
3
3
  const { active } = props;
4
4
  let { up } = props;
5
5
  if (up === undefined) {
@@ -15,4 +15,4 @@ export function Chevron(props) {
15
15
  React.createElement("g", { className: `cfgChevron__container ${containerClass}` },
16
16
  React.createElement("line", { className: `cfgChevron__line ${leftLineClass}`, x1: "10", y1: "50", x2: "50", y2: "50" }),
17
17
  React.createElement("line", { className: `cfgChevron__line ${rightLineClass}`, x1: "90", y1: "50", x2: "50", y2: "50" })))));
18
- }
18
+ };
@@ -0,0 +1,4 @@
1
+ import React from "react";
2
+ import { CssProps } from "../../utilities";
3
+ export declare const CircleXmarkIcon: React.FC<CssProps>;
4
+ //# sourceMappingURL=CircleXmarkIcon.d.ts.map
@@ -0,0 +1,8 @@
1
+ import React from "react";
2
+ export const CircleXmarkIcon = (props) => {
3
+ return (React.createElement("span", { className: `cfgCircleXmarkIcon ${props.className || ""}`, style: props.style },
4
+ React.createElement("svg", { preserveAspectRatio: "xMidYMid", width: "100%", height: "100%", viewBox: "0 0 16 16", fill: "none", xmlns: "http://www.w3.org/2000/svg" },
5
+ React.createElement("path", { d: "M6 6L10 10" }),
6
+ React.createElement("path", { d: "M6 10L10 6" }),
7
+ React.createElement("circle", { cx: "8", cy: "8", r: "7.25" }))));
8
+ };
@@ -0,0 +1,4 @@
1
+ import React from "react";
2
+ import { CssProps } from "../../utilities";
3
+ export declare const DownloadIcon: React.FC<CssProps>;
4
+ //# sourceMappingURL=DownloadIcon.d.ts.map
@@ -0,0 +1,8 @@
1
+ import React from "react";
2
+ export const DownloadIcon = (props) => {
3
+ return (React.createElement("span", { className: `cfgDownloadIcon ${props.className || ""}`, style: props.style },
4
+ React.createElement("svg", { preserveAspectRatio: "xMidYMid", width: "100%", height: "100%", viewBox: "0 0 16 16", fill: "none", xmlns: "http://www.w3.org/2000/svg" },
5
+ React.createElement("path", { d: "M1.5 11.5V14.5H14.5V11.5" }),
6
+ React.createElement("path", { d: "M8 1V11" }),
7
+ React.createElement("path", { d: "M5 9L8 12L11 9" }))));
8
+ };
@@ -0,0 +1,4 @@
1
+ import React from "react";
2
+ import { CssProps } from "../../utilities";
3
+ export declare const ErrorIcon: React.FC<CssProps>;
4
+ //# sourceMappingURL=ErrorIcon.d.ts.map
@@ -0,0 +1,8 @@
1
+ import React from "react";
2
+ export const ErrorIcon = (props) => {
3
+ return (React.createElement("span", { className: `cfgErrorIcon ${props.className || ""}`, style: props.style },
4
+ React.createElement("svg", { preserveAspectRatio: "xMidYMid", width: "100%", height: "100%", viewBox: "0 0 16 16", fill: "none", xmlns: "http://www.w3.org/2000/svg" },
5
+ React.createElement("path", { d: "M8 11L8 11.5" }),
6
+ React.createElement("path", { d: "M8 8.5L8 4.5" }),
7
+ React.createElement("circle", { cx: "8", cy: "8", r: "7.25" }))));
8
+ };
@@ -8,8 +8,8 @@ export const CfgAdditionalProductView = React.memo((props) => {
8
8
  const [open, setOpen] = useState(false);
9
9
  const openOrSelected = optional ? selected : open;
10
10
  const noChildren = configuration.features.length === 0 && additionalProducts.length === 0;
11
- const AdditionalProductComponent = additionalProductComponent || CfgAdditionalProductView;
12
- return (React.createElement("li", { className: "cfgFeatureItem" },
11
+ const AdditionalProductComponent = additionalProductComponent !== null && additionalProductComponent !== void 0 ? additionalProductComponent : CfgAdditionalProductView;
12
+ return (React.createElement("li", { className: "cfgFeatureItem cfgAdditionalProduct" },
13
13
  React.createElement(ExpandableHeadingRow, { heading: description || partNumber, expandable: optional || (!noChildren && permanentlyExpandedLevels <= 0), open: openOrSelected, onClick: () => {
14
14
  if (optional) {
15
15
  product.setSelected(!selected);
@@ -11,6 +11,7 @@ export declare const CfgCheckboxViewMemo: React.NamedExoticComponent<Passthrough
11
11
  option: CfgOption;
12
12
  } & {
13
13
  additionalProductComponent?: React.ComponentType<import("./CfgFeatureView.js").CfgAdditionalProductViewProps> | undefined;
14
+ featureFlattenComponent?: React.ComponentType<import("./CfgFeatureView.js").CfgFeatureViewProps> | undefined;
14
15
  featureGroupComponent?: React.ComponentType<import("./CfgFeatureView.js").CfgFeatureViewProps> | undefined;
15
16
  featureSelectManyComponent?: React.ComponentType<import("./CfgFeatureView.js").CfgFeatureViewProps> | undefined;
16
17
  featureSelectOneComponent?: React.ComponentType<import("./CfgFeatureView.js").CfgFeatureViewProps> | undefined;
@@ -4,6 +4,7 @@ import { CfgFeatureViewProps } from "./CfgFeatureView.js";
4
4
  export declare const CfgCheckboxesView: React.FC<CfgFeatureViewProps & CssProps>;
5
5
  export declare const CfgCheckboxesViewMemo: React.NamedExoticComponent<import("./CfgProductConfigurationView.js").PassthroughProps & {
6
6
  additionalProductComponent?: React.ComponentType<import("./CfgFeatureView.js").CfgAdditionalProductViewProps> | undefined;
7
+ featureFlattenComponent?: React.ComponentType<CfgFeatureViewProps> | undefined;
7
8
  featureGroupComponent?: React.ComponentType<CfgFeatureViewProps> | undefined;
8
9
  featureSelectManyComponent?: React.ComponentType<CfgFeatureViewProps> | undefined;
9
10
  featureSelectOneComponent?: React.ComponentType<CfgFeatureViewProps> | undefined;
@@ -3,6 +3,7 @@ import React from "react";
3
3
  import { CfgCheckboxViewMemo } from "./CfgCheckboxView.js";
4
4
  import { forwardProps } from "./CfgFeatureView.js";
5
5
  export const CfgCheckboxesView = (props) => {
6
+ var _a;
6
7
  const { feature } = props;
7
8
  if (feature.selectionType !== SelectionType.SelectMany) {
8
9
  throw Error(`Unsupported selection type expected: ${SelectionType.SelectMany}, got: ${feature.selectionType}`);
@@ -11,7 +12,7 @@ export const CfgCheckboxesView = (props) => {
11
12
  if (options.length === 0) {
12
13
  return null;
13
14
  }
14
- return (React.createElement("li", { className: `cfgFeatureItem cfgFeatureItem--optional ${props.className || ""}`, style: props.style },
15
+ return (React.createElement("li", { className: `cfgFeatureItem cfgFeatureItem--optional ${(_a = props.className) !== null && _a !== void 0 ? _a : ""}`, style: props.style },
15
16
  React.createElement("h3", { className: "cfgFeatureItemOptional__header" }, description),
16
17
  React.createElement("ul", { className: "cfgOptionTree" }, options.map((option) => (React.createElement(CfgCheckboxViewMemo, Object.assign({ option: option, key: option.key }, forwardProps(props))))))));
17
18
  };
@@ -11,6 +11,7 @@ export declare const CfgDropdownOptionViewMemo: React.NamedExoticComponent<Passt
11
11
  option: CfgOption;
12
12
  } & {
13
13
  additionalProductComponent?: React.ComponentType<import("./CfgFeatureView.js").CfgAdditionalProductViewProps> | undefined;
14
+ featureFlattenComponent?: React.ComponentType<import("./CfgFeatureView.js").CfgFeatureViewProps> | undefined;
14
15
  featureGroupComponent?: React.ComponentType<import("./CfgFeatureView.js").CfgFeatureViewProps> | undefined;
15
16
  featureSelectManyComponent?: React.ComponentType<import("./CfgFeatureView.js").CfgFeatureViewProps> | undefined;
16
17
  featureSelectOneComponent?: React.ComponentType<import("./CfgFeatureView.js").CfgFeatureViewProps> | undefined;
@@ -6,11 +6,12 @@ import { CfgOptionFeaturesView } from "./CfgOptionFeaturesView.js";
6
6
  import { CfgOptionNumericView } from "./CfgOptionNumericView.js";
7
7
  import { CfgOptionPriceView } from "./CfgOptionPriceView.js";
8
8
  export const CfgDropdownOptionView = (props) => {
9
+ var _a;
9
10
  const { option, upchargeDisplayMode } = props;
10
11
  const { code, thumbnail, description, selected } = option;
11
12
  const optionClasses = selected ? "cfgFeatureItemOption--checked" : "";
12
13
  const uniqueId = useUuid();
13
- return (React.createElement("li", { className: `cfgFeatureItem cfgMb1 ${props.className || ""}`, style: props.style },
14
+ return (React.createElement("li", { className: `cfgFeatureItem cfgMb1 ${(_a = props.className) !== null && _a !== void 0 ? _a : ""}`, style: props.style },
14
15
  React.createElement("label", { className: `cfgFeatureItemOption ${optionClasses}`, htmlFor: uniqueId },
15
16
  React.createElement("input", { checked: selected, className: "cfgFeatureItem__hiddenInput", id: uniqueId, name: uniqueId, onChange: () => {
16
17
  option.setSelected(true);
@@ -4,6 +4,7 @@ import { CfgFeatureViewProps } from "./CfgFeatureView.js";
4
4
  export declare const CfgDropdownView: React.FC<CfgFeatureViewProps & CssProps>;
5
5
  export declare const CfgDropdownViewMemo: React.NamedExoticComponent<import("./CfgProductConfigurationView.js").PassthroughProps & {
6
6
  additionalProductComponent?: React.ComponentType<import("./CfgFeatureView.js").CfgAdditionalProductViewProps> | undefined;
7
+ featureFlattenComponent?: React.ComponentType<CfgFeatureViewProps> | undefined;
7
8
  featureGroupComponent?: React.ComponentType<CfgFeatureViewProps> | undefined;
8
9
  featureSelectManyComponent?: React.ComponentType<CfgFeatureViewProps> | undefined;
9
10
  featureSelectOneComponent?: React.ComponentType<CfgFeatureViewProps> | undefined;
@@ -4,13 +4,14 @@ import { ExpandableHeadingRow } from "../ExpandableHeadingRow.js";
4
4
  import { CfgDropdownOptionViewMemo } from "./CfgDropdownOptionView.js";
5
5
  import { forwardProps } from "./CfgFeatureView.js";
6
6
  export const CfgDropdownView = (props) => {
7
+ var _a;
7
8
  const { feature } = props;
8
9
  if (feature.selectionType !== SelectionType.SelectOne) {
9
10
  throw Error(`Unsupported selection type expected: ${SelectionType.SelectOne}, got: ${feature.selectionType}`);
10
11
  }
11
12
  const { description, preview, options } = feature;
12
13
  const [open, setOpen] = useState(false);
13
- return (React.createElement("li", { className: `cfgFeatureItem ${props.className || ""}`, style: props.style },
14
+ return (React.createElement("li", { className: `cfgFeatureItem ${(_a = props.className) !== null && _a !== void 0 ? _a : ""}`, style: props.style },
14
15
  React.createElement(ExpandableHeadingRow, { heading: description, open: open, onClick: () => setOpen((prev) => !prev) }, preview && (React.createElement("div", { className: "cfgThumbnailPlaceholder" },
15
16
  React.createElement("img", { alt: `Preview for ${description}`, className: "cfgThumbnailImage", src: preview })))),
16
17
  React.createElement("div", { className: "cfgFeatureItem__subTree" },
@@ -11,6 +11,7 @@ export declare type CfgAdditionalProductViewProps = CfgProductConfigurationCompo
11
11
  };
12
12
  export declare type CfgProductConfigurationComponentAndPassthroughProps = PassthroughProps & {
13
13
  additionalProductComponent?: React.ComponentType<CfgAdditionalProductViewProps>;
14
+ featureFlattenComponent?: React.ComponentType<CfgFeatureViewProps>;
14
15
  featureGroupComponent?: React.ComponentType<CfgFeatureViewProps>;
15
16
  featureSelectManyComponent?: React.ComponentType<CfgFeatureViewProps>;
16
17
  featureSelectOneComponent?: React.ComponentType<CfgFeatureViewProps>;
@@ -19,6 +20,7 @@ export declare const forwardProps: (props: CfgProductConfigurationComponentAndPa
19
20
  export declare const CfgFeatureView: React.FC<CfgFeatureViewProps & CssProps>;
20
21
  export declare const CfgFeatureViewMemo: React.NamedExoticComponent<PassthroughProps & {
21
22
  additionalProductComponent?: React.ComponentType<CfgAdditionalProductViewProps> | undefined;
23
+ featureFlattenComponent?: React.ComponentType<CfgFeatureViewProps> | undefined;
22
24
  featureGroupComponent?: React.ComponentType<CfgFeatureViewProps> | undefined;
23
25
  featureSelectManyComponent?: React.ComponentType<CfgFeatureViewProps> | undefined;
24
26
  featureSelectOneComponent?: React.ComponentType<CfgFeatureViewProps> | undefined;
@@ -7,6 +7,7 @@ export const forwardProps = (props) => {
7
7
  return {
8
8
  upchargeDisplayMode: props.upchargeDisplayMode,
9
9
  additionalProductComponent: props.additionalProductComponent,
10
+ featureFlattenComponent: props.featureFlattenComponent,
10
11
  featureGroupComponent: props.featureGroupComponent,
11
12
  featureSelectManyComponent: props.featureSelectManyComponent,
12
13
  featureSelectOneComponent: props.featureSelectOneComponent,
@@ -14,8 +15,9 @@ export const forwardProps = (props) => {
14
15
  };
15
16
  export const CfgFeatureView = (props) => {
16
17
  const { feature } = props;
18
+ const FlattenComponent = props.featureFlattenComponent || CfgGroupViewMemo;
17
19
  if (!feature.visible) {
18
- return null;
20
+ return React.createElement(FlattenComponent, Object.assign({}, props));
19
21
  }
20
22
  const GroupComponent = props.featureGroupComponent || CfgGroupViewMemo;
21
23
  const SelectManyComponent = props.featureSelectManyComponent || CfgCheckboxesViewMemo;
@@ -1,13 +1,7 @@
1
- import { SelectionType } from "@configura/web-api";
2
1
  import React from "react";
3
2
  import { CfgFeatureViewMemo, forwardProps } from "./CfgFeatureView.js";
4
3
  export const CfgGroupView = (props) => {
5
4
  const { feature } = props;
6
- if (feature.selectionType !== SelectionType.Group) {
7
- throw Error(`Unsupported selection type expected: ${SelectionType.Group}, got: ${feature.selectionType}`);
8
- }
9
- return (React.createElement(React.Fragment, null, feature.options.map((o) => {
10
- return o.features.map((f) => (React.createElement(CfgFeatureViewMemo, Object.assign({ key: f.key, feature: f }, forwardProps(props)))));
11
- })));
5
+ return (React.createElement(React.Fragment, null, feature.selectedOptions.map((o) => o.features.map((f) => (React.createElement(CfgFeatureViewMemo, Object.assign({ key: f.key, feature: f }, forwardProps(props))))))));
12
6
  };
13
7
  export const CfgGroupViewMemo = React.memo(CfgGroupView);
@@ -12,6 +12,7 @@ import React, { useEffect, useState } from "react";
12
12
  import { useRerender } from "../../useRerender.js";
13
13
  import { useUuid } from "../../useUniqueId.js";
14
14
  import { Checkmark } from "../icons/Checkmark.js";
15
+ import { ErrorIcon } from "../icons/ErrorIcon.js";
15
16
  export const CfgOptionNumericView = (props) => {
16
17
  const { option } = props;
17
18
  const { isUseNumericValue } = option;
@@ -108,10 +109,11 @@ export const RangeView = (props) => {
108
109
  };
109
110
  return (React.createElement("div", { className: `cfgRangeView cfgMt1 ${props.className || ""}`, style: props.style },
110
111
  React.createElement("div", { className: "cfgRangeView__inputs" },
111
- React.createElement("input", Object.assign({}, inputProps, { type: "number", value: isNaN(inputValue) ? "" : inputValue, onChange: getOnChange(false), className: "cfgRangeView__number-input" })),
112
+ React.createElement("input", Object.assign({}, inputProps, { type: "number", value: isNaN(inputValue) ? "" : inputValue, onChange: getOnChange(false), className: "cfgInput cfgRangeView__number-input" })),
112
113
  React.createElement("span", { className: "cfgRangeView__unit-label" }, unit),
113
114
  React.createElement("input", Object.assign({}, inputProps, { type: "range", className: "cfgSlider cfgRangeView__slider-input", value: currentValue, onChange: getOnChange(true) }))),
114
115
  showRangeError && (React.createElement("div", { className: "cfgRangeView__error" },
115
- "Value not allowed, allowed values are ",
116
+ React.createElement(ErrorIcon, null),
117
+ " Value not allowed, allowed values are ",
116
118
  legend))));
117
119
  };
@@ -41,5 +41,5 @@ export const CfgProductConfigurationView = React.memo((props) => {
41
41
  }, [configuration, rerender]);
42
42
  return (React.createElement(React.Fragment, null,
43
43
  React.createElement("ul", { className: `cfgOptionTree cfgOptionTree--topLevel ${props.className || ""}`, style: props.style }, features.map((f) => (React.createElement(CfgFeatureViewMemo, Object.assign({ feature: f, key: f.key }, forwardProps(props)))))),
44
- additionalProducts !== undefined && (React.createElement("ul", { className: `cfgAdditionalProduct cfgOptionTree cfgOptionTree--topLevel` }, additionalProducts.map((additionalProduct) => (React.createElement(AdditionalProductComponent, Object.assign({ key: additionalProduct.key }, forwardProps(props), { additionalProductComponent: AdditionalProductComponent, product: additionalProduct, permanentlyExpandedLevels: permanentlyExpandedAdditionalProductLevels || 0 }))))))));
44
+ additionalProducts !== undefined && (React.createElement("ul", { className: `cfgOptionTree cfgOptionTree--topLevel` }, additionalProducts.map((additionalProduct) => (React.createElement(AdditionalProductComponent, Object.assign({ key: additionalProduct.key }, forwardProps(props), { additionalProductComponent: AdditionalProductComponent, product: additionalProduct, permanentlyExpandedLevels: permanentlyExpandedAdditionalProductLevels !== null && permanentlyExpandedAdditionalProductLevels !== void 0 ? permanentlyExpandedAdditionalProductLevels : 0 }))))))));
45
45
  });
@@ -1 +1 @@
1
- .cfgRangeView__inputs{display:flex;align-items:center}.cfgRangeView__number-input{font-size:1.5em;flex-grow:1;text-align:right}.cfgRangeView__unit-label{font-size:1.5em;margin-left:.3em}.cfgRangeView__slider-input.cfgSlider{margin-left:1em;flex-grow:3}.cfgRangeView__error{margin-top:1em;font-size:1.5em;color:#b00}.cfgMl1{margin-left:1em}.cfgMt1{margin-top:1em}.cfgMb1{margin-bottom:1em}.cfgTextOverflow{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.cfgButton{box-sizing:border-box;display:inline-block;background-color:transparent;color:#333;border-radius:.3em;border:.1em solid #bababa;font-size:1.3em;font-weight:500;outline:none;padding:.4em .8em}.cfgButton:after,.cfgButton:before{box-sizing:inherit}.cfgButton *{box-sizing:border-box}.cfgButton :after,.cfgButton :before{box-sizing:inherit}.cfgButton:focus{box-shadow:0 0 0 .075em #fff,0 0 0 .2em #333}.cfgButtonRow{box-sizing:border-box}.cfgButtonRow:after,.cfgButtonRow:before{box-sizing:inherit}.cfgButtonRow *{box-sizing:border-box}.cfgButtonRow :after,.cfgButtonRow :before{box-sizing:inherit}.cfgButtonRow__button:nth-child(n+2){margin-left:1em}.cfgConfigurator{box-sizing:border-box;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;font-size:10px;color:#333;min-width:0}.cfgConfigurator:after,.cfgConfigurator:before{box-sizing:inherit}.cfgConfigurator *{box-sizing:border-box}.cfgConfigurator :after,.cfgConfigurator :before{box-sizing:inherit}.cfgConfiguratorHeader{border-bottom:.1em solid #c8c7cc;padding:1.7em 1.7em 1.9em;position:relative}.cfgConfiguratorHeader__actions{margin-top:1em}.cfgConfiguratorTree{padding-top:1em}.cfgCanvasWrapper{box-sizing:border-box;position:relative;height:50rem;-webkit-user-select:none;user-select:none}.cfgCanvasWrapper:after,.cfgCanvasWrapper:before{box-sizing:inherit}.cfgCanvasWrapper *{box-sizing:border-box}.cfgCanvasWrapper :after,.cfgCanvasWrapper :before{box-sizing:inherit}.cfgCanvasWrapper canvas{outline:none}.cfgConfiguratorWrapper{box-sizing:border-box;color:#333;height:100%;width:100%}.cfgConfiguratorWrapper:after,.cfgConfiguratorWrapper:before{box-sizing:inherit}.cfgConfiguratorWrapper *{box-sizing:border-box}.cfgConfiguratorWrapper :after,.cfgConfiguratorWrapper :before{box-sizing:inherit}@media screen and (orientation:landscape){.cfgConfiguratorWrapper{display:flex;flex-direction:row}.cfgConfiguratorWrapper>.cfgConfigurator{flex:0 1 40%;height:100%}.cfgConfiguratorWrapper .cfgCanvasWrapper{flex:0 1 60%;height:85vh;overflow:hidden;position:sticky;top:0}}.cfgExpandableHeadingRow{box-sizing:border-box;-webkit-appearance:none;appearance:none;font-family:inherit;font-size:inherit;color:inherit;background:none;border:none;padding:0;align-items:stretch;display:flex;height:3.9em;outline:0;position:relative;width:100%}.cfgExpandableHeadingRow:after,.cfgExpandableHeadingRow:before{box-sizing:inherit}.cfgExpandableHeadingRow *{box-sizing:border-box}.cfgExpandableHeadingRow :after,.cfgExpandableHeadingRow :before{box-sizing:inherit}.cfgExpandableHeadingRow--expandable{cursor:pointer}.cfgExpandableHeadingRow__title{align-items:center;display:flex;flex:1 1 auto;font-size:1.5em;font-weight:500;justify-content:flex-start}.cfgExpandableHeadingRow__icon{align-items:center;display:flex;flex:0 0 5em;justify-content:center;padding:0 1.5em}.cfgHr{box-sizing:border-box;border:0;border-bottom:.1em solid #c8c7cc;padding:0;margin:0}.cfgHr:after,.cfgHr:before{box-sizing:inherit}.cfgHr *{box-sizing:border-box}.cfgHr :after,.cfgHr :before{box-sizing:inherit}.cfgThumbnailImage{border-radius:.7em;display:inline-block;height:3em;width:3em}.cfgThumbnailPlaceholder{align-items:center;display:flex;flex:0 0 4.2em;justify-content:flex-start}.cfgFeatureItem{box-sizing:border-box;color:#333}.cfgFeatureItem:after,.cfgFeatureItem:before{box-sizing:inherit}.cfgFeatureItem *{box-sizing:border-box}.cfgFeatureItem :after,.cfgFeatureItem :before{box-sizing:inherit}.cfgFeatureItem__dropdown{-webkit-appearance:none;appearance:none;font-family:inherit;font-size:inherit;color:inherit;background:none;border:none;padding:0;align-items:stretch;display:flex;height:3.9em;outline:0;position:relative;width:100%;cursor:pointer}.cfgFeatureItem--optional{margin-top:1em}.cfgFeatureItem__hiddenInput{left:-99999px;opacity:0;position:absolute;z-index:-1}.cfgFeatureItem__radio{border:.2em solid #c8c7cc;border-radius:50%}.cfgFeatureItem__checkbox,.cfgFeatureItem__radio{align-items:center;display:flex;flex:0 0 auto;height:2.2em;justify-content:center;pointer-events:none;-webkit-user-select:none;user-select:none;width:2.2em}.cfgFeatureItem__checkbox{border:.2em solid #c8c7cc;border-radius:.3em}.cfgFeatureItem__hiddenInput:focus~.cfgFeatureItem__checkbox,.cfgFeatureItem__hiddenInput:focus~.cfgFeatureItem__radio{box-shadow:0 0 0 .075em #fff,0 0 0 .2em #333}.cfgFeatureItem__hiddenInput:checked~.cfgFeatureItem__radio{border:.2em solid #000;border-radius:50%}.cfgFeatureItem__hiddenInput:checked~.cfgFeatureItem__checkbox,.cfgFeatureItem__hiddenInput:checked~.cfgFeatureItem__radio{align-items:center;display:flex;flex:0 0 auto;height:2.2em;justify-content:center;pointer-events:none;-webkit-user-select:none;user-select:none;width:2.2em}.cfgFeatureItem__hiddenInput:checked~.cfgFeatureItem__checkbox{border:.2em solid #000;border-radius:.3em}.cfgFeatureItemOption__titleWrapper,.cfgFeatureItemOptional__titleWrapper{flex:1 1 auto;margin-left:1em}.cfgFeatureItemOption__title,.cfgFeatureItemOptional__title{font-size:1.5em}.cfgFeatureItemOption__price{font-weight:600;font-size:.75em;color:grey}.cfgOptionTree--subLevel .cfgFeatureItem__hr{display:none}.cfgFeatureItemOption,.cfgFeatureItemOptional{align-items:center;display:flex}.cfgFeatureItemOptional{justify-content:center;margin-top:.5em}.cfgFeatureItemOptional__header{font-size:1.2em;font-weight:600;margin:0 0 .3em;padding:0;text-transform:uppercase}.cfgAdditionalProduct .cfgFeatureItem:last-child .cfgFeatureItem__hr{margin-bottom:-.1em}.cfgOptionTree{box-sizing:border-box;list-style:none;margin:0;padding:0}.cfgOptionTree:after,.cfgOptionTree:before{box-sizing:inherit}.cfgOptionTree *{box-sizing:border-box}.cfgOptionTree :after,.cfgOptionTree :before{box-sizing:inherit}.cfgOptionTree--topLevel{padding-left:1.7em}.cfgOptionTree--indent{margin-left:3.2em}.cfgOptionTree--compThumb{margin-left:4.2em}.cfgProductInfo{box-sizing:border-box;color:#333;display:flex}.cfgProductInfo:after,.cfgProductInfo:before{box-sizing:inherit}.cfgProductInfo *{box-sizing:border-box}.cfgProductInfo :after,.cfgProductInfo :before{box-sizing:inherit}.cfgProductInfo__left{flex:1 1 auto;min-width:0;overflow:hidden}.cfgProductInfo__right{align-items:flex-end;display:flex;flex-direction:column;flex:1 0 auto;margin-left:1em;max-width:.333333333;min-width:0}.cfgProductInfo__name{display:block;font-size:1.6em;font-weight:600;line-height:1.33;margin:0}.cfgProductInfo__number{font-size:1.3em;font-weight:400;line-height:1.38;margin:0}.cfgCenteredLoading{box-sizing:border-box;align-items:center;display:flex;flex-direction:column;height:100%;justify-content:center;width:100%}.cfgCenteredLoading:after,.cfgCenteredLoading:before{box-sizing:inherit}.cfgCenteredLoading *{box-sizing:border-box}.cfgCenteredLoading :after,.cfgCenteredLoading :before{box-sizing:inherit}.cfgOverlayLoading{box-sizing:border-box;align-items:center;background-color:#fff;bottom:0;display:flex;flex-direction:column;justify-content:center;left:0;position:absolute;right:0;top:0;z-index:1000}.cfgOverlayLoading:after,.cfgOverlayLoading:before{box-sizing:inherit}.cfgOverlayLoading *{box-sizing:border-box}.cfgOverlayLoading :after,.cfgOverlayLoading :before{box-sizing:inherit}.cfgOverlayLoading--clickThrough{background-color:transparent;pointer-events:none}.cfgOverlayLoading--clickThrough .cfgLoadingWithText{padding:2em 2em 1.8em;border-radius:.8em;background-color:#fff;opacity:.8;border:.1em solid rgba(0,0,0,.15)}.cfgOverlayLoading--fullWindow{position:fixed;z-index:1001}.cfgLoadingWithText{box-sizing:border-box;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;text-align:center}.cfgLoadingWithText:after,.cfgLoadingWithText:before{box-sizing:inherit}.cfgLoadingWithText *{box-sizing:border-box}.cfgLoadingWithText :after,.cfgLoadingWithText :before{box-sizing:inherit}.cfgLoadingWithText__text{color:#000;font-weight:600;margin-top:.5em;font-size:1.6em}.cfgLoading{box-sizing:border-box;animation:rotate 1.1s linear 0s infinite;border-radius:100%;border:.5em solid rgba(0,0,0,.15);border-bottom-color:#000;display:inline-block;height:3em;width:3em}.cfgLoading:after,.cfgLoading:before{box-sizing:inherit}.cfgLoading *{box-sizing:border-box}.cfgLoading :after,.cfgLoading :before{box-sizing:inherit}.cfgLoading--small{border-width:.4em;height:2em;width:2em}.cfgSlider{box-sizing:border-box;flex:1;margin:0;padding:0;min-height:2.8em;background:transparent;font:inherit}.cfgSlider:after,.cfgSlider:before{box-sizing:inherit}.cfgSlider *{box-sizing:border-box}.cfgSlider :after,.cfgSlider :before{box-sizing:inherit}.cfgSlider,.cfgSlider::-webkit-slider-thumb{-webkit-appearance:none}.cfgSlider::-webkit-slider-runnable-track{box-sizing:border-box;border:none;height:.2em;background:#666}.cfgSlider::-moz-range-track{box-sizing:border-box;border:none;height:.2em;background:#666}.cfgSlider::-ms-track{box-sizing:border-box;border:none;height:.2em;background:#666}.cfgSlider::-webkit-slider-thumb{margin-top:-1.3em;box-sizing:border-box;border:none;width:2.8em;height:2.8em;border-radius:50%;background:#fff;box-shadow:0 .15em .45em .05em #666}.cfgSlider::-moz-range-thumb{box-sizing:border-box;border:none;width:2.8em;height:2.8em;border-radius:50%;background:#fff;box-shadow:0 .15em .45em .05em #666}.cfgSlider::-ms-thumb{margin-top:0;box-sizing:border-box;border:none;width:2.8em;height:2.8em;border-radius:50%;background:#fff;box-shadow:0 .15em .45em .05em #666}.cfgSlider::-ms-tooltip{display:none}.cfgCheckmark{box-sizing:border-box;display:inline-block;width:100%;height:100%}.cfgCheckmark:after,.cfgCheckmark:before{box-sizing:inherit}.cfgCheckmark *{box-sizing:border-box}.cfgCheckmark :after,.cfgCheckmark :before{box-sizing:inherit}.cfgCheckmark__container{transition:transform .4s;transform:translateY(17px)}.cfgCheckmark__line{stroke:#000;stroke-linecap:round;stroke-width:12;transform-origin:50px 50px;transition:transform .4s,stroke .4s}.cfgCheckmark__lineLeft{stroke:#000;transform:rotate(40deg) translateY(24px) translateX(18px)}.cfgCheckmark__lineRight{stroke:#000;transform:rotate(-50deg) translateY(-2px) translateX(-3px)}.cfgCheckmark__border{border:.2em solid #c8c7cc;border-radius:.3em}.cfgCheckmark__border,.cfgCheckmark__border--active{align-items:center;display:flex;flex:0 0 auto;height:2.2em;justify-content:center;pointer-events:none;-webkit-user-select:none;user-select:none;width:2.2em}.cfgCheckmark__border--active{border:.2em solid #000;border-radius:.3em}.cfgChevron{box-sizing:border-box;display:inline-block;width:100%}.cfgChevron:after,.cfgChevron:before{box-sizing:inherit}.cfgChevron *{box-sizing:border-box}.cfgChevron :after,.cfgChevron :before{box-sizing:inherit}.cfgChevron__container{transition:transform .4s}.cfgChevron__container--down{transform:translateY(13px)}.cfgChevron__container--up{transform:translateY(-13px)}.cfgChevron__line{stroke-linecap:round;stroke-width:10;transform-origin:50px 50px;transition:transform .4s,stroke .4s}.cfgChevron__lineLeft--active,.cfgChevron__lineRight--active{stroke:#000}.cfgChevron__lineLeft--passive,.cfgChevron__lineRight--passive{stroke:#bababa}.cfgChevron__lineLeft--down{transform:rotate(40deg)}.cfgChevron__lineLeft--up,.cfgChevron__lineRight--down{transform:rotate(-40deg)}.cfgChevron__lineRight--up{transform:rotate(40deg)}.cfgDarkTheme .cfgButton{box-sizing:border-box;display:inline-block;background-color:transparent;color:#d6d6d6;border-radius:.3em;border:.1em solid #6a6a6a;font-size:1.3em;font-weight:500;outline:none;padding:.4em .8em}.cfgDarkTheme .cfgButton:after,.cfgDarkTheme .cfgButton:before{box-sizing:inherit}.cfgDarkTheme .cfgButton *{box-sizing:border-box}.cfgDarkTheme .cfgButton :after,.cfgDarkTheme .cfgButton :before{box-sizing:inherit}.cfgDarkTheme .cfgButton:focus{box-shadow:0 0 0 .075em #333,0 0 0 .2em #d6d6d6}.cfgDarkTheme .cfgButtonRow{box-sizing:border-box}.cfgDarkTheme .cfgButtonRow:after,.cfgDarkTheme .cfgButtonRow:before{box-sizing:inherit}.cfgDarkTheme .cfgButtonRow *{box-sizing:border-box}.cfgDarkTheme .cfgButtonRow :after,.cfgDarkTheme .cfgButtonRow :before{box-sizing:inherit}.cfgDarkTheme .cfgButtonRow__button:nth-child(n+2){margin-left:1em}.cfgDarkTheme .cfgConfigurator{box-sizing:border-box;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;font-size:10px;color:#d6d6d6;min-width:0}.cfgDarkTheme .cfgConfigurator:after,.cfgDarkTheme .cfgConfigurator:before{box-sizing:inherit}.cfgDarkTheme .cfgConfigurator *{box-sizing:border-box}.cfgDarkTheme .cfgConfigurator :after,.cfgDarkTheme .cfgConfigurator :before{box-sizing:inherit}.cfgDarkTheme .cfgConfiguratorHeader{border-bottom:.1em solid #5b5963;padding:1.7em 1.7em 1.9em;position:relative}.cfgDarkTheme .cfgConfiguratorHeader__actions{margin-top:1em}.cfgDarkTheme .cfgConfiguratorTree{padding-top:1em}.cfgDarkTheme .cfgCanvasWrapper{box-sizing:border-box;position:relative;height:50rem;-webkit-user-select:none;user-select:none}.cfgDarkTheme .cfgCanvasWrapper:after,.cfgDarkTheme .cfgCanvasWrapper:before{box-sizing:inherit}.cfgDarkTheme .cfgCanvasWrapper *{box-sizing:border-box}.cfgDarkTheme .cfgCanvasWrapper :after,.cfgDarkTheme .cfgCanvasWrapper :before{box-sizing:inherit}.cfgDarkTheme .cfgCanvasWrapper canvas{outline:none}.cfgDarkTheme .cfgConfiguratorWrapper{box-sizing:border-box;color:#d6d6d6;height:100%;width:100%}.cfgDarkTheme .cfgConfiguratorWrapper:after,.cfgDarkTheme .cfgConfiguratorWrapper:before{box-sizing:inherit}.cfgDarkTheme .cfgConfiguratorWrapper *{box-sizing:border-box}.cfgDarkTheme .cfgConfiguratorWrapper :after,.cfgDarkTheme .cfgConfiguratorWrapper :before{box-sizing:inherit}@media screen and (orientation:landscape){.cfgDarkTheme .cfgConfiguratorWrapper{display:flex;flex-direction:row}.cfgDarkTheme .cfgConfiguratorWrapper>.cfgConfigurator{flex:0 1 40%;height:100%}.cfgDarkTheme .cfgConfiguratorWrapper .cfgCanvasWrapper{flex:0 1 60%;height:85vh;overflow:hidden;position:sticky;top:0}}.cfgDarkTheme .cfgExpandableHeadingRow{box-sizing:border-box;-webkit-appearance:none;appearance:none;font-family:inherit;font-size:inherit;color:inherit;background:none;border:none;padding:0;align-items:stretch;display:flex;height:3.9em;outline:0;position:relative;width:100%}.cfgDarkTheme .cfgExpandableHeadingRow:after,.cfgDarkTheme .cfgExpandableHeadingRow:before{box-sizing:inherit}.cfgDarkTheme .cfgExpandableHeadingRow *{box-sizing:border-box}.cfgDarkTheme .cfgExpandableHeadingRow :after,.cfgDarkTheme .cfgExpandableHeadingRow :before{box-sizing:inherit}.cfgDarkTheme .cfgExpandableHeadingRow--expandable{cursor:pointer}.cfgDarkTheme .cfgExpandableHeadingRow__title{align-items:center;display:flex;flex:1 1 auto;font-size:1.5em;font-weight:500;justify-content:flex-start}.cfgDarkTheme .cfgExpandableHeadingRow__icon{align-items:center;display:flex;flex:0 0 5em;justify-content:center;padding:0 1.5em}.cfgDarkTheme .cfgHr{box-sizing:border-box;border:0;border-bottom:.1em solid #5b5963;padding:0;margin:0}.cfgDarkTheme .cfgHr:after,.cfgDarkTheme .cfgHr:before{box-sizing:inherit}.cfgDarkTheme .cfgHr *{box-sizing:border-box}.cfgDarkTheme .cfgHr :after,.cfgDarkTheme .cfgHr :before{box-sizing:inherit}.cfgDarkTheme .cfgThumbnailImage{border-radius:.7em;display:inline-block;height:3em;width:3em}.cfgDarkTheme .cfgThumbnailPlaceholder{align-items:center;display:flex;flex:0 0 4.2em;justify-content:flex-start}.cfgDarkTheme .cfgFeatureItem{box-sizing:border-box;color:#d6d6d6}.cfgDarkTheme .cfgFeatureItem:after,.cfgDarkTheme .cfgFeatureItem:before{box-sizing:inherit}.cfgDarkTheme .cfgFeatureItem *{box-sizing:border-box}.cfgDarkTheme .cfgFeatureItem :after,.cfgDarkTheme .cfgFeatureItem :before{box-sizing:inherit}.cfgDarkTheme .cfgFeatureItem__dropdown{-webkit-appearance:none;appearance:none;font-family:inherit;font-size:inherit;color:inherit;background:none;border:none;padding:0;align-items:stretch;display:flex;height:3.9em;outline:0;position:relative;width:100%;cursor:pointer}.cfgDarkTheme .cfgFeatureItem--optional{margin-top:1em}.cfgDarkTheme .cfgFeatureItem__hiddenInput{left:-99999px;opacity:0;position:absolute;z-index:-1}.cfgDarkTheme .cfgFeatureItem__radio{border:.2em solid #5b5963;border-radius:50%}.cfgDarkTheme .cfgFeatureItem__checkbox,.cfgDarkTheme .cfgFeatureItem__radio{align-items:center;display:flex;flex:0 0 auto;height:2.2em;justify-content:center;pointer-events:none;-webkit-user-select:none;user-select:none;width:2.2em}.cfgDarkTheme .cfgFeatureItem__checkbox{border:.2em solid #5b5963;border-radius:.3em}.cfgDarkTheme .cfgFeatureItem__hiddenInput:focus~.cfgFeatureItem__checkbox,.cfgDarkTheme .cfgFeatureItem__hiddenInput:focus~.cfgFeatureItem__radio{box-shadow:0 0 0 .075em #333,0 0 0 .2em #d6d6d6}.cfgDarkTheme .cfgFeatureItem__hiddenInput:checked~.cfgFeatureItem__radio{border:.2em solid #fff;border-radius:50%}.cfgDarkTheme .cfgFeatureItem__hiddenInput:checked~.cfgFeatureItem__checkbox,.cfgDarkTheme .cfgFeatureItem__hiddenInput:checked~.cfgFeatureItem__radio{align-items:center;display:flex;flex:0 0 auto;height:2.2em;justify-content:center;pointer-events:none;-webkit-user-select:none;user-select:none;width:2.2em}.cfgDarkTheme .cfgFeatureItem__hiddenInput:checked~.cfgFeatureItem__checkbox{border:.2em solid #fff;border-radius:.3em}.cfgDarkTheme .cfgFeatureItemOption__titleWrapper,.cfgDarkTheme .cfgFeatureItemOptional__titleWrapper{flex:1 1 auto;margin-left:1em}.cfgDarkTheme .cfgFeatureItemOption__title,.cfgDarkTheme .cfgFeatureItemOptional__title{font-size:1.5em}.cfgDarkTheme .cfgFeatureItemOption__price{font-weight:600;font-size:.75em;color:#999}.cfgDarkTheme .cfgOptionTree--subLevel .cfgFeatureItem__hr{display:none}.cfgDarkTheme .cfgFeatureItemOption{align-items:center;display:flex}.cfgDarkTheme .cfgFeatureItemOptional{align-items:center;display:flex;justify-content:center;margin-top:.5em}.cfgDarkTheme .cfgFeatureItemOptional__header{font-size:1.2em;font-weight:600;margin:0 0 .3em;padding:0;text-transform:uppercase}.cfgDarkTheme .cfgAdditionalProduct .cfgFeatureItem:last-child .cfgFeatureItem__hr{margin-bottom:-.1em}.cfgDarkTheme .cfgOptionTree{box-sizing:border-box;list-style:none;margin:0;padding:0}.cfgDarkTheme .cfgOptionTree:after,.cfgDarkTheme .cfgOptionTree:before{box-sizing:inherit}.cfgDarkTheme .cfgOptionTree *{box-sizing:border-box}.cfgDarkTheme .cfgOptionTree :after,.cfgDarkTheme .cfgOptionTree :before{box-sizing:inherit}.cfgDarkTheme .cfgOptionTree--topLevel{padding-left:1.7em}.cfgDarkTheme .cfgOptionTree--indent{margin-left:3.2em}.cfgDarkTheme .cfgOptionTree--compThumb{margin-left:4.2em}.cfgDarkTheme .cfgProductInfo{box-sizing:border-box;color:#d6d6d6;display:flex}.cfgDarkTheme .cfgProductInfo:after,.cfgDarkTheme .cfgProductInfo:before{box-sizing:inherit}.cfgDarkTheme .cfgProductInfo *{box-sizing:border-box}.cfgDarkTheme .cfgProductInfo :after,.cfgDarkTheme .cfgProductInfo :before{box-sizing:inherit}.cfgDarkTheme .cfgProductInfo__left{flex:1 1 auto;min-width:0;overflow:hidden}.cfgDarkTheme .cfgProductInfo__right{align-items:flex-end;display:flex;flex-direction:column;flex:1 0 auto;margin-left:1em;max-width:.333333333;min-width:0}.cfgDarkTheme .cfgProductInfo__name{display:block;font-size:1.6em;font-weight:600;line-height:1.33;margin:0}.cfgDarkTheme .cfgProductInfo__number{font-size:1.3em;font-weight:400;line-height:1.38;margin:0}.cfgDarkTheme .cfgCenteredLoading{box-sizing:border-box;align-items:center;display:flex;flex-direction:column;height:100%;justify-content:center;width:100%}.cfgDarkTheme .cfgCenteredLoading:after,.cfgDarkTheme .cfgCenteredLoading:before{box-sizing:inherit}.cfgDarkTheme .cfgCenteredLoading *{box-sizing:border-box}.cfgDarkTheme .cfgCenteredLoading :after,.cfgDarkTheme .cfgCenteredLoading :before{box-sizing:inherit}.cfgDarkTheme .cfgOverlayLoading{box-sizing:border-box;align-items:center;background-color:#333;bottom:0;display:flex;flex-direction:column;justify-content:center;left:0;position:absolute;right:0;top:0;z-index:1000}.cfgDarkTheme .cfgOverlayLoading:after,.cfgDarkTheme .cfgOverlayLoading:before{box-sizing:inherit}.cfgDarkTheme .cfgOverlayLoading *{box-sizing:border-box}.cfgDarkTheme .cfgOverlayLoading :after,.cfgDarkTheme .cfgOverlayLoading :before{box-sizing:inherit}.cfgDarkTheme .cfgOverlayLoading--clickThrough{background-color:transparent;pointer-events:none}.cfgDarkTheme .cfgOverlayLoading--clickThrough .cfgLoadingWithText{padding:2em 2em 1.8em;border-radius:.8em;background-color:#333;opacity:.8;border:.1em solid hsla(0,0%,100%,.15)}.cfgDarkTheme .cfgOverlayLoading--fullWindow{position:fixed;z-index:1001}.cfgDarkTheme .cfgLoadingWithText{box-sizing:border-box;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;text-align:center}.cfgDarkTheme .cfgLoadingWithText:after,.cfgDarkTheme .cfgLoadingWithText:before{box-sizing:inherit}.cfgDarkTheme .cfgLoadingWithText *{box-sizing:border-box}.cfgDarkTheme .cfgLoadingWithText :after,.cfgDarkTheme .cfgLoadingWithText :before{box-sizing:inherit}.cfgDarkTheme .cfgLoadingWithText__text{color:#fff;font-weight:600;margin-top:.5em;font-size:1.6em}.cfgDarkTheme .cfgLoading{box-sizing:border-box;animation:rotate 1.1s linear 0s infinite;border-radius:100%;border:.5em solid hsla(0,0%,100%,.15);border-bottom-color:#fff;display:inline-block;height:3em;width:3em}.cfgDarkTheme .cfgLoading:after,.cfgDarkTheme .cfgLoading:before{box-sizing:inherit}.cfgDarkTheme .cfgLoading *{box-sizing:border-box}.cfgDarkTheme .cfgLoading :after,.cfgDarkTheme .cfgLoading :before{box-sizing:inherit}.cfgDarkTheme .cfgLoading--small{border-width:.4em;height:2em;width:2em}@keyframes rotate{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.cfgDarkTheme .cfgSlider{box-sizing:border-box;flex:1;margin:0;padding:0;min-height:2.8em;background:transparent;font:inherit}.cfgDarkTheme .cfgSlider:after,.cfgDarkTheme .cfgSlider:before{box-sizing:inherit}.cfgDarkTheme .cfgSlider *{box-sizing:border-box}.cfgDarkTheme .cfgSlider :after,.cfgDarkTheme .cfgSlider :before{box-sizing:inherit}.cfgDarkTheme .cfgSlider,.cfgDarkTheme .cfgSlider::-webkit-slider-thumb{-webkit-appearance:none}.cfgDarkTheme .cfgSlider::-webkit-slider-runnable-track{box-sizing:border-box;border:none;height:.2em;background:#adadad}.cfgDarkTheme .cfgSlider::-moz-range-track{box-sizing:border-box;border:none;height:.2em;background:#adadad}.cfgDarkTheme .cfgSlider::-ms-track{box-sizing:border-box;border:none;height:.2em;background:#adadad}.cfgDarkTheme .cfgSlider::-webkit-slider-thumb{margin-top:-1.3em;box-sizing:border-box;border:none;width:2.8em;height:2.8em;border-radius:50%;background:#333;box-shadow:0 .15em .45em .05em #adadad}.cfgDarkTheme .cfgSlider::-moz-range-thumb{box-sizing:border-box;border:none;width:2.8em;height:2.8em;border-radius:50%;background:#333;box-shadow:0 .15em .45em .05em #adadad}.cfgDarkTheme .cfgSlider::-ms-thumb{margin-top:0;box-sizing:border-box;border:none;width:2.8em;height:2.8em;border-radius:50%;background:#333;box-shadow:0 .15em .45em .05em #adadad}.cfgDarkTheme .cfgSlider::-ms-tooltip{display:none}.cfgDarkTheme .cfgCheckmark{box-sizing:border-box;display:inline-block;width:100%;height:100%}.cfgDarkTheme .cfgCheckmark:after,.cfgDarkTheme .cfgCheckmark:before{box-sizing:inherit}.cfgDarkTheme .cfgCheckmark *{box-sizing:border-box}.cfgDarkTheme .cfgCheckmark :after,.cfgDarkTheme .cfgCheckmark :before{box-sizing:inherit}.cfgDarkTheme .cfgCheckmark__container{transition:transform .4s;transform:translateY(17px)}.cfgDarkTheme .cfgCheckmark__line{stroke:#fff;stroke-linecap:round;stroke-width:12;transform-origin:50px 50px;transition:transform .4s,stroke .4s}.cfgDarkTheme .cfgCheckmark__lineLeft{stroke:#fff;transform:rotate(40deg) translateY(24px) translateX(18px)}.cfgDarkTheme .cfgCheckmark__lineRight{stroke:#fff;transform:rotate(-50deg) translateY(-2px) translateX(-3px)}.cfgDarkTheme .cfgCheckmark__border{border:.2em solid #5b5963;border-radius:.3em}.cfgDarkTheme .cfgCheckmark__border,.cfgDarkTheme .cfgCheckmark__border--active{align-items:center;display:flex;flex:0 0 auto;height:2.2em;justify-content:center;pointer-events:none;-webkit-user-select:none;user-select:none;width:2.2em}.cfgDarkTheme .cfgCheckmark__border--active{border:.2em solid #fff;border-radius:.3em}.cfgDarkTheme .cfgChevron{box-sizing:border-box;display:inline-block;width:100%}.cfgDarkTheme .cfgChevron:after,.cfgDarkTheme .cfgChevron:before{box-sizing:inherit}.cfgDarkTheme .cfgChevron *{box-sizing:border-box}.cfgDarkTheme .cfgChevron :after,.cfgDarkTheme .cfgChevron :before{box-sizing:inherit}.cfgDarkTheme .cfgChevron__container{transition:transform .4s}.cfgDarkTheme .cfgChevron__container--down{transform:translateY(13px)}.cfgDarkTheme .cfgChevron__container--up{transform:translateY(-13px)}.cfgDarkTheme .cfgChevron__line{stroke-linecap:round;stroke-width:10;transform-origin:50px 50px;transition:transform .4s,stroke .4s}.cfgDarkTheme .cfgChevron__lineLeft--active,.cfgDarkTheme .cfgChevron__lineRight--active{stroke:#fff}.cfgDarkTheme .cfgChevron__lineLeft--passive,.cfgDarkTheme .cfgChevron__lineRight--passive{stroke:#6a6a6a}.cfgDarkTheme .cfgChevron__lineLeft--down{transform:rotate(40deg)}.cfgDarkTheme .cfgChevron__lineLeft--up,.cfgDarkTheme .cfgChevron__lineRight--down{transform:rotate(-40deg)}.cfgDarkTheme .cfgChevron__lineRight--up{transform:rotate(40deg)}
1
+ .cfgMl1{margin-left:1em}.cfgMt1{margin-top:1em}.cfgMb1{margin-bottom:1em}.cfgTextOverflow{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}a{color:#005cb3}.cfgButton{box-sizing:border-box;display:inline-block;background-color:transparent;color:#333;border-radius:.3em;border:.1em solid #bababa;font-size:1.3em;font-weight:500;outline:none;padding:.4em .8em}.cfgButton:after,.cfgButton:before{box-sizing:inherit}.cfgButton *{box-sizing:border-box}.cfgButton :after,.cfgButton :before{box-sizing:inherit}.cfgButton:focus{box-shadow:0 0 0 .075em #fff,0 0 0 .2em #333}.cfgButtonRow{box-sizing:border-box}.cfgButtonRow:after,.cfgButtonRow:before{box-sizing:inherit}.cfgButtonRow *{box-sizing:border-box}.cfgButtonRow :after,.cfgButtonRow :before{box-sizing:inherit}.cfgButtonRow__button:nth-child(n+2){margin-left:1em}.cfgCheckmark{box-sizing:border-box;display:inline-block;width:100%;height:100%}.cfgCheckmark:after,.cfgCheckmark:before{box-sizing:inherit}.cfgCheckmark *{box-sizing:border-box}.cfgCheckmark :after,.cfgCheckmark :before{box-sizing:inherit}.cfgCheckmark__container{transition:transform .4s;transform:translateY(17px)}.cfgCheckmark__line{stroke:#000;stroke-linecap:round;stroke-width:12;transform-origin:50px 50px;transition:transform .4s,stroke .4s}.cfgCheckmark__lineLeft{stroke:#000;transform:rotate(40deg) translateY(24px) translateX(18px)}.cfgCheckmark__lineRight{stroke:#000;transform:rotate(-50deg) translateY(-2px) translateX(-3px)}.cfgCheckmark__border{border:.2em solid #c8c7cc;border-radius:.3em}.cfgCheckmark__border,.cfgCheckmark__border--active{align-items:center;display:flex;flex:0 0 auto;height:2.2em;justify-content:center;pointer-events:none;-webkit-user-select:none;user-select:none;width:2.2em}.cfgCheckmark__border--active{border:.2em solid #000;border-radius:.3em}.cfgChevron{box-sizing:border-box;display:inline-block;width:100%}.cfgChevron:after,.cfgChevron:before{box-sizing:inherit}.cfgChevron *{box-sizing:border-box}.cfgChevron :after,.cfgChevron :before{box-sizing:inherit}.cfgChevron__container{transition:transform .4s}.cfgChevron__container--down{transform:translateY(13px)}.cfgChevron__container--up{transform:translateY(-13px)}.cfgChevron__line{stroke-linecap:round;stroke-width:10;transform-origin:50px 50px;transition:transform .4s,stroke .4s}.cfgChevron__lineLeft--active,.cfgChevron__lineRight--active{stroke:#000}.cfgChevron__lineLeft--passive,.cfgChevron__lineRight--passive{stroke:#bababa}.cfgChevron__lineLeft--down{transform:rotate(40deg)}.cfgChevron__lineLeft--up,.cfgChevron__lineRight--down{transform:rotate(-40deg)}.cfgChevron__lineRight--up{transform:rotate(40deg)}.cfgCircleXmarkIcon{box-sizing:border-box;display:inline-block;width:100%;height:100%}.cfgCircleXmarkIcon:after,.cfgCircleXmarkIcon:before{box-sizing:inherit}.cfgCircleXmarkIcon *{box-sizing:border-box}.cfgCircleXmarkIcon :after,.cfgCircleXmarkIcon :before{box-sizing:inherit}.cfgCircleXmarkIcon circle,.cfgCircleXmarkIcon path{stroke:#7c7986;stroke-linecap:round;stroke-linejoin:round;stroke-width:1.5}.cfgConfiguratorWrapper{box-sizing:border-box;color:#333;display:flex;height:85vh;flex-direction:column}.cfgConfiguratorWrapper:after,.cfgConfiguratorWrapper:before{box-sizing:inherit}.cfgConfiguratorWrapper *{box-sizing:border-box}.cfgConfiguratorWrapper :after,.cfgConfiguratorWrapper :before{box-sizing:inherit}@media screen and (orientation:landscape){.cfgConfiguratorWrapper{flex-direction:row}}.cfgConfiguratorWrapper .cfgTaskStart{margin-top:.5em;font-size:1.2em;font-weight:500}.cfgConfiguratorWrapper .cfgTaskStart .cfgFormSelect{padding:.5em}.cfgConfiguratorWrapper .cfgTaskStart .cfgFormSelect:after{right:.5em}.cfgCanvasWrapper{box-sizing:border-box;position:relative;height:50rem;-webkit-user-select:none;user-select:none;flex:1 1 auto;overflow:hidden}.cfgCanvasWrapper:after,.cfgCanvasWrapper:before{box-sizing:inherit}.cfgCanvasWrapper *{box-sizing:border-box}.cfgCanvasWrapper :after,.cfgCanvasWrapper :before{box-sizing:inherit}.cfgCanvasWrapper canvas{outline:none}@media screen and (orientation:landscape){.cfgCanvasWrapper{height:100%;flex:0 1 60%}}.cfgConfigurator{box-sizing:border-box;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;font-size:10px;color:#333;min-width:0;height:100%;display:flex;flex-direction:column;flex:0 0 50%;overflow:auto}.cfgConfigurator:after,.cfgConfigurator:before{box-sizing:inherit}.cfgConfigurator *{box-sizing:border-box}.cfgConfigurator :after,.cfgConfigurator :before{box-sizing:inherit}@media screen and (orientation:landscape){.cfgConfigurator{height:100%;flex:0 1 40%}}.cfgConfiguratorHeader{border-bottom:.1em solid #c8c7cc;padding:1.7em 1.7em 1.9em;position:relative}.cfgConfiguratorHeader__actions{margin-top:1em}.cfgConfiguratorTree{padding-top:1em;overflow-y:auto;-webkit-overflow-scrolling:touch}.cfgDownloadIcon{box-sizing:border-box;display:inline-block;width:100%;height:100%}.cfgDownloadIcon:after,.cfgDownloadIcon:before{box-sizing:inherit}.cfgDownloadIcon *{box-sizing:border-box}.cfgDownloadIcon :after,.cfgDownloadIcon :before{box-sizing:inherit}.cfgDownloadIcon circle,.cfgDownloadIcon path{stroke:#005cb3;stroke-linecap:round;stroke-linejoin:round;stroke-width:1.5}.cfgExpandableHeadingRow{box-sizing:border-box;-webkit-appearance:none;appearance:none;font-family:inherit;font-size:inherit;color:inherit;background:none;border:none;padding:0;align-items:stretch;display:flex;height:3.9em;outline:0;position:relative;width:100%}.cfgExpandableHeadingRow:after,.cfgExpandableHeadingRow:before{box-sizing:inherit}.cfgExpandableHeadingRow *{box-sizing:border-box}.cfgExpandableHeadingRow :after,.cfgExpandableHeadingRow :before{box-sizing:inherit}.cfgExpandableHeadingRow--expandable{cursor:pointer}.cfgExpandableHeadingRow__title{align-items:center;display:flex;flex:1 1 auto;font-size:1.5em;font-weight:500;justify-content:flex-start}.cfgExpandableHeadingRow__icon{align-items:center;display:flex;flex:0 0 5em;justify-content:center;padding:0 1.5em}.cfgErrorIcon{box-sizing:border-box;display:inline-block;width:100%;height:100%}.cfgErrorIcon:after,.cfgErrorIcon:before{box-sizing:inherit}.cfgErrorIcon *{box-sizing:border-box}.cfgErrorIcon :after,.cfgErrorIcon :before{box-sizing:inherit}.cfgErrorIcon circle,.cfgErrorIcon path{stroke:#b4361d;stroke-linecap:round;stroke-linejoin:round;stroke-width:1.5}.cfgThumbnailImage{border-radius:.7em;display:inline-block;height:3em;width:3em}.cfgThumbnailPlaceholder{align-items:center;display:flex;flex:0 0 4.2em;justify-content:flex-start}.cfgFeatureItem{box-sizing:border-box;color:#333}.cfgFeatureItem:after,.cfgFeatureItem:before{box-sizing:inherit}.cfgFeatureItem *{box-sizing:border-box}.cfgFeatureItem :after,.cfgFeatureItem :before{box-sizing:inherit}.cfgFeatureItem__dropdown{-webkit-appearance:none;appearance:none;font-family:inherit;font-size:inherit;color:inherit;background:none;border:none;padding:0;align-items:stretch;display:flex;height:3.9em;outline:0;position:relative;width:100%;cursor:pointer}.cfgFeatureItem--optional{margin-top:1em}.cfgFeatureItem__hiddenInput{left:-99999px;opacity:0;position:absolute;z-index:-1}.cfgFeatureItem__radio{border:.2em solid #c8c7cc;border-radius:50%}.cfgFeatureItem__checkbox,.cfgFeatureItem__radio{align-items:center;display:flex;flex:0 0 auto;height:2.2em;justify-content:center;pointer-events:none;-webkit-user-select:none;user-select:none;width:2.2em}.cfgFeatureItem__checkbox{border:.2em solid #c8c7cc;border-radius:.3em}.cfgFeatureItem__hiddenInput:focus~.cfgFeatureItem__checkbox,.cfgFeatureItem__hiddenInput:focus~.cfgFeatureItem__radio{box-shadow:0 0 0 .075em #fff,0 0 0 .2em #333}.cfgFeatureItem__hiddenInput:checked~.cfgFeatureItem__radio{border:.2em solid #000;border-radius:50%}.cfgFeatureItem__hiddenInput:checked~.cfgFeatureItem__checkbox,.cfgFeatureItem__hiddenInput:checked~.cfgFeatureItem__radio{align-items:center;display:flex;flex:0 0 auto;height:2.2em;justify-content:center;pointer-events:none;-webkit-user-select:none;user-select:none;width:2.2em}.cfgFeatureItem__hiddenInput:checked~.cfgFeatureItem__checkbox{border:.2em solid #000;border-radius:.3em}.cfgFeatureItem.cfgAdditionalProduct>.cfgExpandableHeadingRow>.cfgExpandableHeadingRow__title{font-weight:600}.cfgFeatureItem.cfgAdditionalProduct>.cfgFeatureItem__hr{border-bottom-color:#bababa}.cfgFeatureItem.cfgAdditionalProduct .cfgFeatureItem:last-child .cfgFeatureItem__hr{margin-bottom:-.1em}.cfgFeatureItemOption__titleWrapper,.cfgFeatureItemOptional__titleWrapper{flex:1 1 auto;margin-left:1em}.cfgFeatureItemOption__title,.cfgFeatureItemOptional__title{font-size:1.5em}.cfgFeatureItemOption__price{font-weight:600;font-size:.75em;color:grey}.cfgOptionTree--subLevel .cfgFeatureItem__hr{display:none}.cfgFeatureItemOption,.cfgFeatureItemOptional{align-items:center;display:flex}.cfgFeatureItemOptional{justify-content:center;margin-top:.5em}.cfgFeatureItemOptional__header{font-size:1.2em;font-weight:600;margin:0 0 .3em;padding:0;text-transform:uppercase}.cfgFormSelect,.cfgInput{border:.1em solid #bababa;padding:.3em .4em;border-radius:.3em}.cfgFormSelect{cursor:pointer;position:relative}.cfgFormSelect select{-webkit-appearance:none;appearance:none;padding:0 1em 0 0;margin:0;width:100%;background-color:transparent;font-family:inherit;font-size:inherit;font-weight:inherit;cursor:inherit;line-height:inherit;outline:none;border:none}.cfgFormSelect:after{position:absolute;right:.35em;top:50%;margin-top:-.55em;content:"";width:1em;height:1em;background-color:#bababa;-webkit-clip-path:polygon(50% 80%,90% 40%,100% 50%,50% 100%,0 50%,10% 40%);clip-path:polygon(50% 80%,90% 40%,100% 50%,50% 100%,0 50%,10% 40%);justify-self:end}.cfgHr{box-sizing:border-box;border:0;border-bottom:.1em solid #c8c7cc;padding:0;margin:0}.cfgHr:after,.cfgHr:before{box-sizing:inherit}.cfgHr *{box-sizing:border-box}.cfgHr :after,.cfgHr :before{box-sizing:inherit}.cfgCenteredLoading{box-sizing:border-box;align-items:center;display:flex;flex-direction:column;height:100%;justify-content:center;width:100%}.cfgCenteredLoading:after,.cfgCenteredLoading:before{box-sizing:inherit}.cfgCenteredLoading *{box-sizing:border-box}.cfgCenteredLoading :after,.cfgCenteredLoading :before{box-sizing:inherit}.cfgOverlayLoading{box-sizing:border-box;align-items:center;background-color:#fff;bottom:0;display:flex;flex-direction:column;justify-content:center;left:0;position:absolute;right:0;top:0;z-index:1000}.cfgOverlayLoading:after,.cfgOverlayLoading:before{box-sizing:inherit}.cfgOverlayLoading *{box-sizing:border-box}.cfgOverlayLoading :after,.cfgOverlayLoading :before{box-sizing:inherit}.cfgOverlayLoading--clickThrough{background-color:transparent;pointer-events:none}.cfgOverlayLoading--clickThrough .cfgLoadingWithText{padding:2em 2em 1.8em;border-radius:.8em;background-color:#fff;opacity:.8;border:.1em solid rgba(0,0,0,.15)}.cfgOverlayLoading--fullWindow{position:fixed;z-index:1001}.cfgLoadingWithText{box-sizing:border-box;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;text-align:center}.cfgLoadingWithText:after,.cfgLoadingWithText:before{box-sizing:inherit}.cfgLoadingWithText *{box-sizing:border-box}.cfgLoadingWithText :after,.cfgLoadingWithText :before{box-sizing:inherit}.cfgLoadingWithText__text{color:#000;font-weight:600;margin-top:.5em;font-size:1.6em}.cfgLoading{box-sizing:border-box;animation:rotate 1.1s linear 0s infinite;border-radius:100%;border:.5em solid rgba(0,0,0,.15);border-bottom-color:#000;display:inline-block;height:3em;width:3em}.cfgLoading:after,.cfgLoading:before{box-sizing:inherit}.cfgLoading *{box-sizing:border-box}.cfgLoading :after,.cfgLoading :before{box-sizing:inherit}.cfgLoading--small{border-width:.4em;height:2em;width:2em}.cfgOptionTree{box-sizing:border-box;list-style:none;margin:0;padding:0}.cfgOptionTree:after,.cfgOptionTree:before{box-sizing:inherit}.cfgOptionTree *{box-sizing:border-box}.cfgOptionTree :after,.cfgOptionTree :before{box-sizing:inherit}.cfgOptionTree--topLevel{padding-left:1.7em}.cfgOptionTree--indent{margin-left:3.2em}.cfgOptionTree--compThumb{margin-left:4.2em}.cfgProductInfo{box-sizing:border-box;color:#333;display:flex}.cfgProductInfo:after,.cfgProductInfo:before{box-sizing:inherit}.cfgProductInfo *{box-sizing:border-box}.cfgProductInfo :after,.cfgProductInfo :before{box-sizing:inherit}.cfgProductInfo__left{flex:1 1 auto;min-width:0;overflow:hidden}.cfgProductInfo__right{align-items:flex-end;display:flex;flex-direction:column;flex:1 0 auto;margin-left:1em;max-width:.333333333;min-width:0}.cfgProductInfo__name{display:block;font-size:1.6em;font-weight:600;line-height:1.33;margin:0}.cfgProductInfo__number{font-size:1.3em;font-weight:400;line-height:1.38;margin:0}.cfgRangeView__inputs{display:flex;align-items:center}.cfgRangeView__number-input{font-size:1.5em;flex-grow:1;text-align:right}.cfgRangeView__unit-label{font-size:1.5em;margin-left:.3em}.cfgRangeView__slider-input.cfgSlider{margin-left:1em;flex-grow:3}.cfgRangeView__error{display:flex;align-items:center;margin-top:1em;font-size:1.5em;color:#b4361d}.cfgRangeView__error .cfgErrorIcon{padding-right:.25em;width:1.25em;height:1em}.cfgSlider{box-sizing:border-box;flex:1;margin:0;padding:0;min-height:2.8em;background:transparent;font:inherit}.cfgSlider:after,.cfgSlider:before{box-sizing:inherit}.cfgSlider *{box-sizing:border-box}.cfgSlider :after,.cfgSlider :before{box-sizing:inherit}.cfgSlider,.cfgSlider::-webkit-slider-thumb{-webkit-appearance:none}.cfgSlider::-webkit-slider-runnable-track{box-sizing:border-box;border:none;height:.2em;background:#666}.cfgSlider::-moz-range-track{box-sizing:border-box;border:none;height:.2em;background:#666}.cfgSlider::-ms-track{box-sizing:border-box;border:none;height:.2em;background:#666}.cfgSlider::-webkit-slider-thumb{margin-top:-1.3em;box-sizing:border-box;border:none;width:2.8em;height:2.8em;border-radius:50%;background:#fff;box-shadow:0 .15em .45em .05em #666}.cfgSlider::-moz-range-thumb{box-sizing:border-box;border:none;width:2.8em;height:2.8em;border-radius:50%;background:#fff;box-shadow:0 .15em .45em .05em #666}.cfgSlider::-ms-thumb{margin-top:0;box-sizing:border-box;border:none;width:2.8em;height:2.8em;border-radius:50%;background:#fff;box-shadow:0 .15em .45em .05em #666}.cfgSlider::-ms-tooltip{display:none}.cfgTaskList ul{list-style-type:none;padding:0;border-bottom:.1em solid #c8c7cc}.cfgTaskList__item{padding:0 1.5em 0 1.7em;margin-bottom:1em;display:flex;align-items:center}.cfgTaskList__preview{border:.1em solid #c8c7cc;border-radius:10%;width:4.8em;height:4.8em;flex-shrink:0}.cfgTaskList__preview img{object-fit:cover;position:relative;left:.38em;top:.38em;width:3.84em;height:3.84em}.cfgTaskList__icon{flex-shrink:0;width:4em;height:2em;padding-left:1em;padding-right:1em}.cfgTaskList__icon .cfgLoadingSizer{font-size:.75em}.cfgTaskList__status{flex-grow:1;font-size:1.5em}.cfgTaskList__abort{color:inherit;width:2em;height:2em;flex-shrink:0}.cfgTaskList__abort,.cfgTaskList__restart{-webkit-appearance:none;appearance:none;font-family:inherit;font-size:inherit;background:none;border:none;padding:0;cursor:pointer}.cfgTaskList__restart{color:inherit;text-decoration:underline;color:#005cb3}.cfgDarkTheme a{color:#70baff}.cfgDarkTheme .cfgButton{box-sizing:border-box;display:inline-block;background-color:transparent;color:#d6d6d6;border-radius:.3em;border:.1em solid #6a6a6a;font-size:1.3em;font-weight:500;outline:none;padding:.4em .8em}.cfgDarkTheme .cfgButton:after,.cfgDarkTheme .cfgButton:before{box-sizing:inherit}.cfgDarkTheme .cfgButton *{box-sizing:border-box}.cfgDarkTheme .cfgButton :after,.cfgDarkTheme .cfgButton :before{box-sizing:inherit}.cfgDarkTheme .cfgButton:focus{box-shadow:0 0 0 .075em #333,0 0 0 .2em #d6d6d6}.cfgDarkTheme .cfgButtonRow{box-sizing:border-box}.cfgDarkTheme .cfgButtonRow:after,.cfgDarkTheme .cfgButtonRow:before{box-sizing:inherit}.cfgDarkTheme .cfgButtonRow *{box-sizing:border-box}.cfgDarkTheme .cfgButtonRow :after,.cfgDarkTheme .cfgButtonRow :before{box-sizing:inherit}.cfgDarkTheme .cfgButtonRow__button:nth-child(n+2){margin-left:1em}.cfgDarkTheme .cfgCheckmark{box-sizing:border-box;display:inline-block;width:100%;height:100%}.cfgDarkTheme .cfgCheckmark:after,.cfgDarkTheme .cfgCheckmark:before{box-sizing:inherit}.cfgDarkTheme .cfgCheckmark *{box-sizing:border-box}.cfgDarkTheme .cfgCheckmark :after,.cfgDarkTheme .cfgCheckmark :before{box-sizing:inherit}.cfgDarkTheme .cfgCheckmark__container{transition:transform .4s;transform:translateY(17px)}.cfgDarkTheme .cfgCheckmark__line{stroke:#fff;stroke-linecap:round;stroke-width:12;transform-origin:50px 50px;transition:transform .4s,stroke .4s}.cfgDarkTheme .cfgCheckmark__lineLeft{stroke:#fff;transform:rotate(40deg) translateY(24px) translateX(18px)}.cfgDarkTheme .cfgCheckmark__lineRight{stroke:#fff;transform:rotate(-50deg) translateY(-2px) translateX(-3px)}.cfgDarkTheme .cfgCheckmark__border{border:.2em solid #5b5963;border-radius:.3em}.cfgDarkTheme .cfgCheckmark__border,.cfgDarkTheme .cfgCheckmark__border--active{align-items:center;display:flex;flex:0 0 auto;height:2.2em;justify-content:center;pointer-events:none;-webkit-user-select:none;user-select:none;width:2.2em}.cfgDarkTheme .cfgCheckmark__border--active{border:.2em solid #fff;border-radius:.3em}.cfgDarkTheme .cfgChevron{box-sizing:border-box;display:inline-block;width:100%}.cfgDarkTheme .cfgChevron:after,.cfgDarkTheme .cfgChevron:before{box-sizing:inherit}.cfgDarkTheme .cfgChevron *{box-sizing:border-box}.cfgDarkTheme .cfgChevron :after,.cfgDarkTheme .cfgChevron :before{box-sizing:inherit}.cfgDarkTheme .cfgChevron__container{transition:transform .4s}.cfgDarkTheme .cfgChevron__container--down{transform:translateY(13px)}.cfgDarkTheme .cfgChevron__container--up{transform:translateY(-13px)}.cfgDarkTheme .cfgChevron__line{stroke-linecap:round;stroke-width:10;transform-origin:50px 50px;transition:transform .4s,stroke .4s}.cfgDarkTheme .cfgChevron__lineLeft--active,.cfgDarkTheme .cfgChevron__lineRight--active{stroke:#fff}.cfgDarkTheme .cfgChevron__lineLeft--passive,.cfgDarkTheme .cfgChevron__lineRight--passive{stroke:#6a6a6a}.cfgDarkTheme .cfgChevron__lineLeft--down{transform:rotate(40deg)}.cfgDarkTheme .cfgChevron__lineLeft--up,.cfgDarkTheme .cfgChevron__lineRight--down{transform:rotate(-40deg)}.cfgDarkTheme .cfgChevron__lineRight--up{transform:rotate(40deg)}.cfgDarkTheme .cfgCircleXmarkIcon{box-sizing:border-box;display:inline-block;width:100%;height:100%}.cfgDarkTheme .cfgCircleXmarkIcon:after,.cfgDarkTheme .cfgCircleXmarkIcon:before{box-sizing:inherit}.cfgDarkTheme .cfgCircleXmarkIcon *{box-sizing:border-box}.cfgDarkTheme .cfgCircleXmarkIcon :after,.cfgDarkTheme .cfgCircleXmarkIcon :before{box-sizing:inherit}.cfgDarkTheme .cfgCircleXmarkIcon circle,.cfgDarkTheme .cfgCircleXmarkIcon path{stroke:#96949e;stroke-linecap:round;stroke-linejoin:round;stroke-width:1.5}.cfgDarkTheme .cfgConfiguratorWrapper{box-sizing:border-box;color:#d6d6d6;display:flex;height:85vh;flex-direction:column}.cfgDarkTheme .cfgConfiguratorWrapper:after,.cfgDarkTheme .cfgConfiguratorWrapper:before{box-sizing:inherit}.cfgDarkTheme .cfgConfiguratorWrapper *{box-sizing:border-box}.cfgDarkTheme .cfgConfiguratorWrapper :after,.cfgDarkTheme .cfgConfiguratorWrapper :before{box-sizing:inherit}@media screen and (orientation:landscape){.cfgDarkTheme .cfgConfiguratorWrapper{flex-direction:row}}.cfgDarkTheme .cfgConfiguratorWrapper .cfgTaskStart{margin-top:.5em;font-size:1.2em;font-weight:500}.cfgDarkTheme .cfgConfiguratorWrapper .cfgTaskStart .cfgFormSelect{padding:.5em}.cfgDarkTheme .cfgConfiguratorWrapper .cfgTaskStart .cfgFormSelect:after{right:.5em}.cfgDarkTheme .cfgCanvasWrapper{box-sizing:border-box;position:relative;height:50rem;-webkit-user-select:none;user-select:none;flex:1 1 auto;overflow:hidden}.cfgDarkTheme .cfgCanvasWrapper:after,.cfgDarkTheme .cfgCanvasWrapper:before{box-sizing:inherit}.cfgDarkTheme .cfgCanvasWrapper *{box-sizing:border-box}.cfgDarkTheme .cfgCanvasWrapper :after,.cfgDarkTheme .cfgCanvasWrapper :before{box-sizing:inherit}.cfgDarkTheme .cfgCanvasWrapper canvas{outline:none}@media screen and (orientation:landscape){.cfgDarkTheme .cfgCanvasWrapper{height:100%;flex:0 1 60%}}.cfgDarkTheme .cfgConfigurator{box-sizing:border-box;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;font-size:10px;color:#d6d6d6;min-width:0;height:100%;display:flex;flex-direction:column;flex:0 0 50%;overflow:auto}.cfgDarkTheme .cfgConfigurator:after,.cfgDarkTheme .cfgConfigurator:before{box-sizing:inherit}.cfgDarkTheme .cfgConfigurator *{box-sizing:border-box}.cfgDarkTheme .cfgConfigurator :after,.cfgDarkTheme .cfgConfigurator :before{box-sizing:inherit}@media screen and (orientation:landscape){.cfgDarkTheme .cfgConfigurator{height:100%;flex:0 1 40%}}.cfgDarkTheme .cfgConfiguratorHeader{border-bottom:.1em solid #5b5963;padding:1.7em 1.7em 1.9em;position:relative}.cfgDarkTheme .cfgConfiguratorHeader__actions{margin-top:1em}.cfgDarkTheme .cfgConfiguratorTree{padding-top:1em;overflow-y:auto;-webkit-overflow-scrolling:touch}.cfgDarkTheme .cfgDownloadIcon{box-sizing:border-box;display:inline-block;width:100%;height:100%}.cfgDarkTheme .cfgDownloadIcon:after,.cfgDarkTheme .cfgDownloadIcon:before{box-sizing:inherit}.cfgDarkTheme .cfgDownloadIcon *{box-sizing:border-box}.cfgDarkTheme .cfgDownloadIcon :after,.cfgDarkTheme .cfgDownloadIcon :before{box-sizing:inherit}.cfgDarkTheme .cfgDownloadIcon circle,.cfgDarkTheme .cfgDownloadIcon path{stroke:#70baff;stroke-linecap:round;stroke-linejoin:round;stroke-width:1.5}.cfgDarkTheme .cfgExpandableHeadingRow{box-sizing:border-box;-webkit-appearance:none;appearance:none;font-family:inherit;font-size:inherit;color:inherit;background:none;border:none;padding:0;align-items:stretch;display:flex;height:3.9em;outline:0;position:relative;width:100%}.cfgDarkTheme .cfgExpandableHeadingRow:after,.cfgDarkTheme .cfgExpandableHeadingRow:before{box-sizing:inherit}.cfgDarkTheme .cfgExpandableHeadingRow *{box-sizing:border-box}.cfgDarkTheme .cfgExpandableHeadingRow :after,.cfgDarkTheme .cfgExpandableHeadingRow :before{box-sizing:inherit}.cfgDarkTheme .cfgExpandableHeadingRow--expandable{cursor:pointer}.cfgDarkTheme .cfgExpandableHeadingRow__title{align-items:center;display:flex;flex:1 1 auto;font-size:1.5em;font-weight:500;justify-content:flex-start}.cfgDarkTheme .cfgExpandableHeadingRow__icon{align-items:center;display:flex;flex:0 0 5em;justify-content:center;padding:0 1.5em}.cfgDarkTheme .cfgErrorIcon{box-sizing:border-box;display:inline-block;width:100%;height:100%}.cfgDarkTheme .cfgErrorIcon:after,.cfgDarkTheme .cfgErrorIcon:before{box-sizing:inherit}.cfgDarkTheme .cfgErrorIcon *{box-sizing:border-box}.cfgDarkTheme .cfgErrorIcon :after,.cfgDarkTheme .cfgErrorIcon :before{box-sizing:inherit}.cfgDarkTheme .cfgErrorIcon circle,.cfgDarkTheme .cfgErrorIcon path{stroke:#e8836f;stroke-linecap:round;stroke-linejoin:round;stroke-width:1.5}.cfgDarkTheme .cfgThumbnailImage{border-radius:.7em;display:inline-block;height:3em;width:3em}.cfgDarkTheme .cfgThumbnailPlaceholder{align-items:center;display:flex;flex:0 0 4.2em;justify-content:flex-start}.cfgDarkTheme .cfgFeatureItem{box-sizing:border-box;color:#d6d6d6}.cfgDarkTheme .cfgFeatureItem:after,.cfgDarkTheme .cfgFeatureItem:before{box-sizing:inherit}.cfgDarkTheme .cfgFeatureItem *{box-sizing:border-box}.cfgDarkTheme .cfgFeatureItem :after,.cfgDarkTheme .cfgFeatureItem :before{box-sizing:inherit}.cfgDarkTheme .cfgFeatureItem__dropdown{-webkit-appearance:none;appearance:none;font-family:inherit;font-size:inherit;color:inherit;background:none;border:none;padding:0;align-items:stretch;display:flex;height:3.9em;outline:0;position:relative;width:100%;cursor:pointer}.cfgDarkTheme .cfgFeatureItem--optional{margin-top:1em}.cfgDarkTheme .cfgFeatureItem__hiddenInput{left:-99999px;opacity:0;position:absolute;z-index:-1}.cfgDarkTheme .cfgFeatureItem__radio{border:.2em solid #5b5963;border-radius:50%}.cfgDarkTheme .cfgFeatureItem__checkbox,.cfgDarkTheme .cfgFeatureItem__radio{align-items:center;display:flex;flex:0 0 auto;height:2.2em;justify-content:center;pointer-events:none;-webkit-user-select:none;user-select:none;width:2.2em}.cfgDarkTheme .cfgFeatureItem__checkbox{border:.2em solid #5b5963;border-radius:.3em}.cfgDarkTheme .cfgFeatureItem__hiddenInput:focus~.cfgFeatureItem__checkbox,.cfgDarkTheme .cfgFeatureItem__hiddenInput:focus~.cfgFeatureItem__radio{box-shadow:0 0 0 .075em #333,0 0 0 .2em #d6d6d6}.cfgDarkTheme .cfgFeatureItem__hiddenInput:checked~.cfgFeatureItem__radio{border:.2em solid #fff;border-radius:50%}.cfgDarkTheme .cfgFeatureItem__hiddenInput:checked~.cfgFeatureItem__checkbox,.cfgDarkTheme .cfgFeatureItem__hiddenInput:checked~.cfgFeatureItem__radio{align-items:center;display:flex;flex:0 0 auto;height:2.2em;justify-content:center;pointer-events:none;-webkit-user-select:none;user-select:none;width:2.2em}.cfgDarkTheme .cfgFeatureItem__hiddenInput:checked~.cfgFeatureItem__checkbox{border:.2em solid #fff;border-radius:.3em}.cfgDarkTheme .cfgFeatureItem.cfgAdditionalProduct>.cfgExpandableHeadingRow>.cfgExpandableHeadingRow__title{font-weight:600}.cfgDarkTheme .cfgFeatureItem.cfgAdditionalProduct>.cfgFeatureItem__hr{border-bottom-color:#6a6a6a}.cfgDarkTheme .cfgFeatureItem.cfgAdditionalProduct .cfgFeatureItem:last-child .cfgFeatureItem__hr{margin-bottom:-.1em}.cfgDarkTheme .cfgFeatureItemOption__titleWrapper,.cfgDarkTheme .cfgFeatureItemOptional__titleWrapper{flex:1 1 auto;margin-left:1em}.cfgDarkTheme .cfgFeatureItemOption__title,.cfgDarkTheme .cfgFeatureItemOptional__title{font-size:1.5em}.cfgDarkTheme .cfgFeatureItemOption__price{font-weight:600;font-size:.75em;color:#999}.cfgDarkTheme .cfgOptionTree--subLevel .cfgFeatureItem__hr{display:none}.cfgDarkTheme .cfgFeatureItemOption{align-items:center;display:flex}.cfgDarkTheme .cfgFeatureItemOptional{align-items:center;display:flex;justify-content:center;margin-top:.5em}.cfgDarkTheme .cfgFeatureItemOptional__header{font-size:1.2em;font-weight:600;margin:0 0 .3em;padding:0;text-transform:uppercase}.cfgDarkTheme .cfgFormSelect,.cfgDarkTheme .cfgInput{border:.1em solid #6a6a6a;padding:.3em .4em;border-radius:.3em}.cfgDarkTheme .cfgFormSelect{cursor:pointer;position:relative}.cfgDarkTheme .cfgFormSelect select{-webkit-appearance:none;appearance:none;padding:0 1em 0 0;margin:0;width:100%;background-color:transparent;font-family:inherit;font-size:inherit;font-weight:inherit;cursor:inherit;line-height:inherit;outline:none;border:none}.cfgDarkTheme .cfgFormSelect:after{position:absolute;right:.35em;top:50%;margin-top:-.55em;content:"";width:1em;height:1em;background-color:#6a6a6a;-webkit-clip-path:polygon(50% 80%,90% 40%,100% 50%,50% 100%,0 50%,10% 40%);clip-path:polygon(50% 80%,90% 40%,100% 50%,50% 100%,0 50%,10% 40%);justify-self:end}.cfgDarkTheme .cfgHr{box-sizing:border-box;border:0;border-bottom:.1em solid #5b5963;padding:0;margin:0}.cfgDarkTheme .cfgHr:after,.cfgDarkTheme .cfgHr:before{box-sizing:inherit}.cfgDarkTheme .cfgHr *{box-sizing:border-box}.cfgDarkTheme .cfgHr :after,.cfgDarkTheme .cfgHr :before{box-sizing:inherit}.cfgDarkTheme .cfgCenteredLoading{box-sizing:border-box;align-items:center;display:flex;flex-direction:column;height:100%;justify-content:center;width:100%}.cfgDarkTheme .cfgCenteredLoading:after,.cfgDarkTheme .cfgCenteredLoading:before{box-sizing:inherit}.cfgDarkTheme .cfgCenteredLoading *{box-sizing:border-box}.cfgDarkTheme .cfgCenteredLoading :after,.cfgDarkTheme .cfgCenteredLoading :before{box-sizing:inherit}.cfgDarkTheme .cfgOverlayLoading{box-sizing:border-box;align-items:center;background-color:#333;bottom:0;display:flex;flex-direction:column;justify-content:center;left:0;position:absolute;right:0;top:0;z-index:1000}.cfgDarkTheme .cfgOverlayLoading:after,.cfgDarkTheme .cfgOverlayLoading:before{box-sizing:inherit}.cfgDarkTheme .cfgOverlayLoading *{box-sizing:border-box}.cfgDarkTheme .cfgOverlayLoading :after,.cfgDarkTheme .cfgOverlayLoading :before{box-sizing:inherit}.cfgDarkTheme .cfgOverlayLoading--clickThrough{background-color:transparent;pointer-events:none}.cfgDarkTheme .cfgOverlayLoading--clickThrough .cfgLoadingWithText{padding:2em 2em 1.8em;border-radius:.8em;background-color:#333;opacity:.8;border:.1em solid hsla(0,0%,100%,.15)}.cfgDarkTheme .cfgOverlayLoading--fullWindow{position:fixed;z-index:1001}.cfgDarkTheme .cfgLoadingWithText{box-sizing:border-box;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;text-align:center}.cfgDarkTheme .cfgLoadingWithText:after,.cfgDarkTheme .cfgLoadingWithText:before{box-sizing:inherit}.cfgDarkTheme .cfgLoadingWithText *{box-sizing:border-box}.cfgDarkTheme .cfgLoadingWithText :after,.cfgDarkTheme .cfgLoadingWithText :before{box-sizing:inherit}.cfgDarkTheme .cfgLoadingWithText__text{color:#fff;font-weight:600;margin-top:.5em;font-size:1.6em}.cfgDarkTheme .cfgLoading{box-sizing:border-box;animation:rotate 1.1s linear 0s infinite;border-radius:100%;border:.5em solid hsla(0,0%,100%,.15);border-bottom-color:#fff;display:inline-block;height:3em;width:3em}.cfgDarkTheme .cfgLoading:after,.cfgDarkTheme .cfgLoading:before{box-sizing:inherit}.cfgDarkTheme .cfgLoading *{box-sizing:border-box}.cfgDarkTheme .cfgLoading :after,.cfgDarkTheme .cfgLoading :before{box-sizing:inherit}.cfgDarkTheme .cfgLoading--small{border-width:.4em;height:2em;width:2em}@keyframes rotate{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.cfgDarkTheme .cfgOptionTree{box-sizing:border-box;list-style:none;margin:0;padding:0}.cfgDarkTheme .cfgOptionTree:after,.cfgDarkTheme .cfgOptionTree:before{box-sizing:inherit}.cfgDarkTheme .cfgOptionTree *{box-sizing:border-box}.cfgDarkTheme .cfgOptionTree :after,.cfgDarkTheme .cfgOptionTree :before{box-sizing:inherit}.cfgDarkTheme .cfgOptionTree--topLevel{padding-left:1.7em}.cfgDarkTheme .cfgOptionTree--indent{margin-left:3.2em}.cfgDarkTheme .cfgOptionTree--compThumb{margin-left:4.2em}.cfgDarkTheme .cfgProductInfo{box-sizing:border-box;color:#d6d6d6;display:flex}.cfgDarkTheme .cfgProductInfo:after,.cfgDarkTheme .cfgProductInfo:before{box-sizing:inherit}.cfgDarkTheme .cfgProductInfo *{box-sizing:border-box}.cfgDarkTheme .cfgProductInfo :after,.cfgDarkTheme .cfgProductInfo :before{box-sizing:inherit}.cfgDarkTheme .cfgProductInfo__left{flex:1 1 auto;min-width:0;overflow:hidden}.cfgDarkTheme .cfgProductInfo__right{align-items:flex-end;display:flex;flex-direction:column;flex:1 0 auto;margin-left:1em;max-width:.333333333;min-width:0}.cfgDarkTheme .cfgProductInfo__name{display:block;font-size:1.6em;font-weight:600;line-height:1.33;margin:0}.cfgDarkTheme .cfgProductInfo__number{font-size:1.3em;font-weight:400;line-height:1.38;margin:0}.cfgDarkTheme .cfgRangeView__inputs{display:flex;align-items:center}.cfgDarkTheme .cfgRangeView__number-input{font-size:1.5em;flex-grow:1;text-align:right}.cfgDarkTheme .cfgRangeView__unit-label{font-size:1.5em;margin-left:.3em}.cfgDarkTheme .cfgRangeView__slider-input.cfgSlider{margin-left:1em;flex-grow:3}.cfgDarkTheme .cfgRangeView__error{display:flex;align-items:center;margin-top:1em;font-size:1.5em;color:#e8836f}.cfgDarkTheme .cfgRangeView__error .cfgErrorIcon{padding-right:.25em;width:1.25em;height:1em}.cfgDarkTheme .cfgSlider{box-sizing:border-box;flex:1;margin:0;padding:0;min-height:2.8em;background:transparent;font:inherit}.cfgDarkTheme .cfgSlider:after,.cfgDarkTheme .cfgSlider:before{box-sizing:inherit}.cfgDarkTheme .cfgSlider *{box-sizing:border-box}.cfgDarkTheme .cfgSlider :after,.cfgDarkTheme .cfgSlider :before{box-sizing:inherit}.cfgDarkTheme .cfgSlider,.cfgDarkTheme .cfgSlider::-webkit-slider-thumb{-webkit-appearance:none}.cfgDarkTheme .cfgSlider::-webkit-slider-runnable-track{box-sizing:border-box;border:none;height:.2em;background:#adadad}.cfgDarkTheme .cfgSlider::-moz-range-track{box-sizing:border-box;border:none;height:.2em;background:#adadad}.cfgDarkTheme .cfgSlider::-ms-track{box-sizing:border-box;border:none;height:.2em;background:#adadad}.cfgDarkTheme .cfgSlider::-webkit-slider-thumb{margin-top:-1.3em;box-sizing:border-box;border:none;width:2.8em;height:2.8em;border-radius:50%;background:#333;box-shadow:0 .15em .45em .05em #adadad}.cfgDarkTheme .cfgSlider::-moz-range-thumb{box-sizing:border-box;border:none;width:2.8em;height:2.8em;border-radius:50%;background:#333;box-shadow:0 .15em .45em .05em #adadad}.cfgDarkTheme .cfgSlider::-ms-thumb{margin-top:0;box-sizing:border-box;border:none;width:2.8em;height:2.8em;border-radius:50%;background:#333;box-shadow:0 .15em .45em .05em #adadad}.cfgDarkTheme .cfgSlider::-ms-tooltip{display:none}.cfgDarkTheme .cfgTaskList ul{list-style-type:none;padding:0;border-bottom:.1em solid #5b5963}.cfgDarkTheme .cfgTaskList__item{padding:0 1.5em 0 1.7em;margin-bottom:1em;display:flex;align-items:center}.cfgDarkTheme .cfgTaskList__preview{border:.1em solid #5b5963;border-radius:10%;width:4.8em;height:4.8em;flex-shrink:0}.cfgDarkTheme .cfgTaskList__preview img{object-fit:cover;position:relative;left:.38em;top:.38em;width:3.84em;height:3.84em}.cfgDarkTheme .cfgTaskList__icon{flex-shrink:0;width:4em;height:2em;padding-left:1em;padding-right:1em}.cfgDarkTheme .cfgTaskList__icon .cfgLoadingSizer{font-size:.75em}.cfgDarkTheme .cfgTaskList__status{flex-grow:1;font-size:1.5em}.cfgDarkTheme .cfgTaskList__abort{color:inherit;width:2em;height:2em;flex-shrink:0}.cfgDarkTheme .cfgTaskList__abort,.cfgDarkTheme .cfgTaskList__restart{-webkit-appearance:none;appearance:none;font-family:inherit;font-size:inherit;background:none;border:none;padding:0;cursor:pointer}.cfgDarkTheme .cfgTaskList__restart{color:inherit;text-decoration:underline;color:#70baff}