@praxisui/dynamic-form 10.0.0-rc.40 → 10.0.0-rc.41

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.
@@ -20,10 +20,10 @@ import * as i9 from '@angular/material/snack-bar';
20
20
  import { MatSnackBarModule } from '@angular/material/snack-bar';
21
21
  import * as i19 from '@angular/material/badge';
22
22
  import { MatBadgeModule } from '@angular/material/badge';
23
- import { BehaviorSubject, map, Subscription, merge, of, timer, NEVER, EMPTY, defer, TimeoutError, Subject, firstValueFrom, throwError, combineLatest, forkJoin, Observable, race, from, debounceTime as debounceTime$1, takeUntil as takeUntil$1, defaultIfEmpty, switchMap as switchMap$1, catchError as catchError$1, take as take$1, finalize as finalize$1 } from 'rxjs';
23
+ import { BehaviorSubject, map, Subscription, merge, of, timer, NEVER, EMPTY, defer, TimeoutError, Subject, firstValueFrom, throwError, combineLatest, forkJoin, Observable, race, from, debounceTime as debounceTime$1, takeUntil as takeUntil$1, catchError as catchError$1, defaultIfEmpty, take as take$1, switchMap as switchMap$1, finalize as finalize$1 } from 'rxjs';
24
24
  import { filter, map as map$1, switchMap, take, timeout, throwIfEmpty, tap, catchError, ignoreElements, finalize, takeUntil, skip, debounceTime, startWith } from 'rxjs/operators';
25
25
  import * as i1 from '@praxisui/core';
26
- import { serializeEntityLookupValueForPayload, PraxisI18nService, PraxisIconButtonComponent, PraxisIconDirective, providePraxisI18nConfig, RULE_PROPERTY_SCHEMA, FIELD_METADATA_CAPABILITIES, migrateFormLayoutRule, PraxisJsonLogicService, normalizeFormLayoutItems, deepMerge, createDefaultFormConfig, normalizeFormConfig as normalizeFormConfig$1, ensureIds, createEmptyRichContentDocument, formIdentityIssues, resolveHidden, resolveOrder, resolveSpan, projectGroupedCommandPartialRows, isPraxisRuntimeGlobalActionEffect, ASYNC_CONFIG_STORAGE, withFormConfigSections, createFieldLayoutItem, getFormLayoutFieldNames, LoggerService, createCorporateLoggerConfig, ConsoleLoggerSink, ResourceDiscoveryService, GlobalActionService, SCHEMA_METADATA_CLIENT_OPTIONS, ResourceQuickConnectComponent, composeHeadersWithVersion, buildApiUrl, readStrongResourceEtag, ApiEndpoint, mapFieldDefinitionsToMetadata, reconcileFormConfig, applyLocalFormCustomizations, materializeFormLayoutFromMetadata, syncWithServerMetadata, PRAXIS_LOADING_CTX, evaluateFieldAccess, normalizeControlTypeKey, normalizePraxisEffectPolicy, buildPraxisEffectDistinctKey, getFormColumnFieldNames, resolveGroupedCommandPartialRowSpans, resolveOffset, buildSchemaIdStorageKeySegment, buildSchemaId, fetchWithETag, resolveControlTypeAlias, getTextTransformer, MemoryCacheAdapter, LocalStorageCacheAdapter, SchemaMetadataClient, DEFAULT_SCHEMA_REQUEST_TIMEOUT_MS, normalizeReactiveDeterminations, CONNECTION_STORAGE, API_URL, PRAXIS_LOADING_RENDERER, FORM_HOOKS_PRESETS, EmptyStateCardComponent, GenericCrudService, isValidFormConfig, ComponentMetadataRegistry, FieldControlType, hasSemanticFieldCalibrationDiff, calibrateFieldMetadataFromSemantics, canOrganizeFormLayoutBySemantics, organizeFormLayoutBySemantics, isRequiredGlobalActionPayloadMissing, GLOBAL_ACTION_CATALOG, PRAXIS_GLOBAL_ACTION_CATALOG, getGlobalActionCatalog, SURFACE_OPEN_I18N_NAMESPACE, getGlobalActionUiSchema, getRequiredGlobalActionPayloadKeys, hasMeaningfulGlobalActionPayloadValue, SurfaceOpenActionEditorComponent, SURFACE_OPEN_I18N_CONFIG, IconPickerService, validateGlobalActionRefs, normalizeFormMetadata, mapCatalogFieldsToMetadata, uiLayoutJsonIdentity, DynamicFormService, projectComponentAuthoringManifest, cloneBoundedUiLayoutJsonDocument, derivePageChildRuntimeId } from '@praxisui/core';
26
+ import { normalizeControlTypeKey, normalizeScalarArrayValue, serializeEntityLookupValueForPayload, PraxisI18nService, PraxisIconButtonComponent, PraxisIconDirective, providePraxisI18nConfig, RULE_PROPERTY_SCHEMA, FIELD_METADATA_CAPABILITIES, migrateFormLayoutRule, PraxisJsonLogicService, normalizeFormLayoutItems, deepMerge, createDefaultFormConfig, normalizeFormConfig as normalizeFormConfig$1, ensureIds, createEmptyRichContentDocument, formIdentityIssues, resolveHidden, resolveOrder, resolveSpan, projectGroupedCommandPartialRows, isPraxisRuntimeGlobalActionEffect, ASYNC_CONFIG_STORAGE, withFormConfigSections, createFieldLayoutItem, getFormLayoutFieldNames, LoggerService, createCorporateLoggerConfig, ConsoleLoggerSink, ResourceDiscoveryService, GlobalActionService, SCHEMA_METADATA_CLIENT_OPTIONS, ResourceQuickConnectComponent, composeHeadersWithVersion, buildApiUrl, readStrongResourceEtag, ApiEndpoint, mapFieldDefinitionsToMetadata, reconcileFormConfig, applyLocalFormCustomizations, materializeFormLayoutFromMetadata, syncWithServerMetadata, PRAXIS_LOADING_CTX, evaluateFieldAccess, normalizePraxisEffectPolicy, buildPraxisEffectDistinctKey, getFormColumnFieldNames, resolveGroupedCommandPartialRowSpans, resolveOffset, buildSchemaIdStorageKeySegment, buildSchemaId, fetchWithETag, resolveControlTypeAlias, getTextTransformer, MemoryCacheAdapter, LocalStorageCacheAdapter, SchemaMetadataClient, DEFAULT_SCHEMA_REQUEST_TIMEOUT_MS, normalizeReactiveDeterminations, CONNECTION_STORAGE, API_URL, PRAXIS_LOADING_RENDERER, FORM_HOOKS_PRESETS, EmptyStateCardComponent, GenericCrudService, isValidFormConfig, ComponentMetadataRegistry, FieldControlType, hasSemanticFieldCalibrationDiff, calibrateFieldMetadataFromSemantics, canOrganizeFormLayoutBySemantics, organizeFormLayoutBySemantics, isRequiredGlobalActionPayloadMissing, GLOBAL_ACTION_CATALOG, PRAXIS_GLOBAL_ACTION_CATALOG, getGlobalActionCatalog, SURFACE_OPEN_I18N_NAMESPACE, getGlobalActionUiSchema, getRequiredGlobalActionPayloadKeys, hasMeaningfulGlobalActionPayloadValue, SurfaceOpenActionEditorComponent, SURFACE_OPEN_I18N_CONFIG, IconPickerService, validateGlobalActionRefs, normalizeFormMetadata, mapCatalogFieldsToMetadata, uiLayoutJsonIdentity, DynamicFormService, projectComponentAuthoringManifest, cloneBoundedUiLayoutJsonDocument, derivePageChildRuntimeId } from '@praxisui/core';
27
27
  import * as i1$1 from '@praxisui/dynamic-fields';
28
28
  import { getControlTypeCatalog, SelectOptionRegistry, ConfirmDialogComponent, DynamicFieldLoaderDirective } from '@praxisui/dynamic-fields';
29
29
  import { BaseAiAdapter, AgenticAuthoringTurnClientService, PraxisAssistantSessionRegistryService, PraxisAssistantTurnOrchestratorService, createPraxisAssistantViewportLayout, PraxisAiAssistantShellComponent } from '@praxisui/ai';
@@ -63,6 +63,76 @@ import { MatExpansionModule } from '@angular/material/expansion';
63
63
  import { MatListModule } from '@angular/material/list';
64
64
  import { CascadeRulesService, CascadeManagerTabComponent } from '@praxisui/metadata-editor';
65
65
 
66
+ /** Internal record paths for form values; array items are handled by their own schema. */
67
+ // constructor/prototype can be legitimate own data keys. Traversal below never
68
+ // follows inherited values, and computed spread writes create own properties.
69
+ const unsafeSegments = new Set(['__proto__']);
70
+ function segmentsFor(path) {
71
+ const segments = path.split('.');
72
+ return segments.every(segment => segment.length > 0 && !unsafeSegments.has(segment))
73
+ ? segments
74
+ : undefined;
75
+ }
76
+ function isRecord$2(value) {
77
+ if (!value || typeof value !== 'object' || Array.isArray(value))
78
+ return false;
79
+ const prototype = Object.getPrototypeOf(value);
80
+ return prototype === Object.prototype || prototype === null;
81
+ }
82
+ function hasNestedPath(value, path) {
83
+ const segments = segmentsFor(path);
84
+ if (!segments)
85
+ return false;
86
+ let current = value;
87
+ for (const segment of segments) {
88
+ if (!isRecord$2(current) || !Object.prototype.hasOwnProperty.call(current, segment))
89
+ return false;
90
+ current = current[segment];
91
+ }
92
+ return true;
93
+ }
94
+ function getNestedPath(value, path) {
95
+ if (!hasNestedPath(value, path))
96
+ return undefined;
97
+ let current = value;
98
+ for (const segment of path.split('.')) {
99
+ current = current[segment];
100
+ }
101
+ return current;
102
+ }
103
+ /** Copies only the record ancestors; never traverses inherited or unsafe properties. */
104
+ function setNestedPath(value, path, next) {
105
+ const segments = segmentsFor(path);
106
+ if (!segments)
107
+ return value;
108
+ const write = (record, index) => {
109
+ const key = segments[index];
110
+ if (index === segments.length - 1)
111
+ return { ...record, [key]: next };
112
+ const child = Object.prototype.hasOwnProperty.call(record, key) ? record[key] : undefined;
113
+ if (child !== undefined && !isRecord$2(child))
114
+ return record;
115
+ const updated = write(child ?? {}, index + 1);
116
+ return { ...record, [key]: updated };
117
+ };
118
+ return write(value, 0);
119
+ }
120
+ function deleteNestedPath(value, path) {
121
+ if (!hasNestedPath(value, path))
122
+ return value;
123
+ const segments = path.split('.');
124
+ const remove = (record, index) => {
125
+ const copy = { ...record };
126
+ const key = segments[index];
127
+ if (index === segments.length - 1)
128
+ delete copy[key];
129
+ else
130
+ copy[key] = remove(record[key], index + 1);
131
+ return copy;
132
+ };
133
+ return remove(value, 0);
134
+ }
135
+
66
136
  const PRAXIS_DYNAMIC_FORM_I18N_NAMESPACE = 'praxisDynamicForm';
67
137
  const PRAXIS_DYNAMIC_FORM_I18N_CONFIG = {
68
138
  namespaces: {
@@ -101,6 +171,12 @@ const PRAXIS_DYNAMIC_FORM_I18N_CONFIG = {
101
171
  'config.emptyState.option.circle': 'Círculo',
102
172
  'config.emptyState.option.soft': 'Suave',
103
173
  'runtime.schemaRead.timeout': 'O carregamento dos campos excedeu o tempo limite. Tente novamente.',
174
+ 'runtime.schemaRead.deniedTitle': 'Acesso ao formulário não autorizado',
175
+ 'runtime.schemaRead.denied': 'Sua sessão não tem permissão para carregar este formulário. Verifique o acesso antes de continuar.',
176
+ 'runtime.schemaRead.invalidTitle': 'Metadados do formulário inválidos',
177
+ 'runtime.schemaRead.invalid': 'Os metadados recebidos não puderam ser validados. A configuração do servidor precisa ser corrigida antes de continuar.',
178
+ 'runtime.schemaRead.contextRequiredTitle': 'Contexto de acesso não confirmado',
179
+ 'runtime.schemaRead.contextRequired': 'Confirme o contexto de acesso da sessão antes de carregar este formulário.',
104
180
  'runtime.entityRead.loading': 'Atualizando dados do registro…',
105
181
  'runtime.entityRead.error': 'Não foi possível carregar os dados deste registro.',
106
182
  'runtime.entityRead.retry': 'Tentar novamente',
@@ -111,6 +187,7 @@ const PRAXIS_DYNAMIC_FORM_I18N_CONFIG = {
111
187
  'runtime.configControls.reconcile': 'O schema do servidor mudou — reconciliar',
112
188
  'runtime.configControls.disconnect': 'Desconectar da fonte de dados',
113
189
  'layout.defaultSectionTitle': 'Informações',
190
+ 'runtime.actionTarget.selectedRecord': 'Registro selecionado',
114
191
  'actions.invalidRequired': 'Preencha os campos obrigatórios para continuar.',
115
192
  'actions.invalidRequiredWithFields': 'Preencha: {{fields}}.',
116
193
  'actions.submitErrorTitle': 'Erro ao salvar',
@@ -705,6 +782,12 @@ const PRAXIS_DYNAMIC_FORM_I18N_CONFIG = {
705
782
  'config.emptyState.option.circle': 'Circle',
706
783
  'config.emptyState.option.soft': 'Soft',
707
784
  'runtime.schemaRead.timeout': 'Loading the form fields timed out. Try again.',
785
+ 'runtime.schemaRead.deniedTitle': 'Form access denied',
786
+ 'runtime.schemaRead.denied': 'Your session does not have permission to load this form. Check access before continuing.',
787
+ 'runtime.schemaRead.invalidTitle': 'Invalid form metadata',
788
+ 'runtime.schemaRead.invalid': 'The received metadata could not be validated. The server configuration must be corrected before continuing.',
789
+ 'runtime.schemaRead.contextRequiredTitle': 'Access context not confirmed',
790
+ 'runtime.schemaRead.contextRequired': 'Confirm the session access context before loading this form.',
708
791
  'runtime.entityRead.loading': 'Updating record details…',
709
792
  'runtime.entityRead.error': 'Could not load this record’s details.',
710
793
  'runtime.entityRead.retry': 'Try again',
@@ -720,6 +803,7 @@ const PRAXIS_DYNAMIC_FORM_I18N_CONFIG = {
720
803
  'runtime.configControls.reconcile': 'Server schema changed — reconcile',
721
804
  'runtime.configControls.disconnect': 'Disconnect from data source',
722
805
  'layout.defaultSectionTitle': 'Information',
806
+ 'runtime.actionTarget.selectedRecord': 'Selected record',
723
807
  'actions.invalidRequired': 'Complete the required fields to continue.',
724
808
  'actions.invalidRequiredWithFields': 'Complete: {{fields}}.',
725
809
  'actions.submitErrorTitle': 'Save error',
@@ -1484,29 +1568,82 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
1484
1568
  }]
1485
1569
  }], ctorParameters: () => [{ type: i1.DomainRuleService }] });
1486
1570
 
1487
- /**
1488
- * Recursively converts arrays representing dates into ISO-8601 strings.
1489
- * Arrays are expected in the form `[year, month, day, hour?, minute?, second?, millisecond?]`.
1490
- * Non-date arrays and other values are returned untouched.
1491
- */
1492
- function normalizeDateArrays(data) {
1571
+ const temporalControlTypes = new Set([
1572
+ 'DATE', 'DATE_PICKER', 'DATE_INPUT', 'DATE_RANGE', 'DATE_TIME_PICKER',
1573
+ 'DATETIME_LOCAL_INPUT', 'DATE_TIME_RANGE', 'INLINE_DATE', 'INLINE_DATE_RANGE',
1574
+ ]);
1575
+ const temporalDataTypes = new Set(['date', 'local-date', 'localdate', 'date-time', 'datetime', 'instant']);
1576
+ /** Converts legacy date tuples only where the existing field metadata declares a temporal value. */
1577
+ function normalizeDateArrays(data, fields) {
1578
+ return normalizeTemporalFieldValues(data, fields, value => value);
1579
+ }
1580
+ /** One private draft shared by hydration and submit; only declared temporal fields are transformed. */
1581
+ function normalizeTemporalFieldValues(data, fields, normalizeString) {
1582
+ const draft = cloneValue$1(data);
1583
+ normalizeRecord(draft, fields, normalizeString);
1584
+ return draft;
1585
+ }
1586
+ function normalizeRecord(draft, fields, normalizeString) {
1587
+ if (!draft || typeof draft !== 'object' || Array.isArray(draft) || draft instanceof Date)
1588
+ return;
1589
+ for (const field of fields) {
1590
+ if (!hasNestedPath(draft, field.name))
1591
+ continue;
1592
+ const value = getNestedPath(draft, field.name);
1593
+ const itemFields = field.array?.itemSchema?.fields;
1594
+ if (Array.isArray(value) && itemFields?.length) {
1595
+ value.forEach(item => normalizeRecord(item, itemFields, normalizeString));
1596
+ continue;
1597
+ }
1598
+ if (!isTemporalField(field))
1599
+ continue;
1600
+ const normalized = normalizeTemporalValue(value, normalizeString);
1601
+ if (!field.name.includes('.')) {
1602
+ draft[field.name] = normalized;
1603
+ }
1604
+ else {
1605
+ // hasNestedPath admitted each own segment. All ancestors belong to the
1606
+ // private draft, so writing the leaf does not require copying the record.
1607
+ const boundary = field.name.lastIndexOf('.');
1608
+ const parent = getNestedPath(draft, field.name.slice(0, boundary));
1609
+ parent[field.name.slice(boundary + 1)] = normalized;
1610
+ }
1611
+ }
1612
+ }
1613
+ function isTemporalField(field) {
1614
+ return temporalControlTypes.has(normalizeControlTypeKey(field.controlType)) ||
1615
+ temporalDataTypes.has(String(field.dataType ?? '').toLowerCase()) ||
1616
+ temporalDataTypes.has(String(field.format ?? '').toLowerCase());
1617
+ }
1618
+ function cloneValue$1(data) {
1619
+ if (data instanceof Date)
1620
+ return data;
1621
+ if (Array.isArray(data))
1622
+ return data.map(cloneValue$1);
1623
+ if (data && typeof data === 'object') {
1624
+ return Object.fromEntries(Object.entries(data).map(([key, value]) => [key, cloneValue$1(value)]));
1625
+ }
1626
+ return data;
1627
+ }
1628
+ function normalizeTemporalValue(data, normalizeString) {
1493
1629
  if (data instanceof Date) {
1494
1630
  return data;
1495
1631
  }
1496
1632
  if (Array.isArray(data)) {
1497
1633
  if (isDateArray(data)) {
1498
- return formatDateArray(data);
1634
+ return normalizeString(formatDateArray(data));
1499
1635
  }
1500
- return data.map((v) => normalizeDateArrays(v));
1636
+ for (let index = 0; index < data.length; index += 1)
1637
+ data[index] = normalizeTemporalValue(data[index], normalizeString);
1638
+ return data;
1501
1639
  }
1502
1640
  if (data && typeof data === 'object') {
1503
- const result = {};
1504
1641
  for (const [key, value] of Object.entries(data)) {
1505
- result[key] = normalizeDateArrays(value);
1642
+ data[key] = normalizeTemporalValue(value, normalizeString);
1506
1643
  }
1507
- return result;
1644
+ return data;
1508
1645
  }
1509
- return data;
1646
+ return typeof data === 'string' ? normalizeString(data) : data;
1510
1647
  }
1511
1648
  function isDateArray(arr) {
1512
1649
  if (arr.length < 3 || arr.length > 7)
@@ -1530,30 +1667,8 @@ function formatDateArray(arr) {
1530
1667
 
1531
1668
  const ISO_LOCAL_DATETIME_PATTERN = /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}(?::\d{2}(?:\.\d{1,3})?)?$/;
1532
1669
  const ISO_OFFSET_OR_Z_SUFFIX_PATTERN = /(Z|[+\-]\d{2}:\d{2})$/i;
1533
- function normalizeSubmitPayload(data) {
1534
- return normalizeTemporalStrings(normalizeDateArrays(data));
1535
- }
1536
- function normalizeTemporalStrings(value) {
1537
- // Date-only fields are converted by the field-aware submit pipeline. Keep
1538
- // native Date values intact here instead of treating them as generic records
1539
- // (which would otherwise turn them into an empty object).
1540
- if (value instanceof Date) {
1541
- return value;
1542
- }
1543
- if (Array.isArray(value)) {
1544
- return value.map((item) => normalizeTemporalStrings(item));
1545
- }
1546
- if (value && typeof value === 'object') {
1547
- const normalized = {};
1548
- for (const [key, nested] of Object.entries(value)) {
1549
- normalized[key] = normalizeTemporalStrings(nested);
1550
- }
1551
- return normalized;
1552
- }
1553
- if (typeof value === 'string') {
1554
- return normalizeLocalDateTimeString(value);
1555
- }
1556
- return value;
1670
+ function normalizeSubmitPayload(data, fields) {
1671
+ return normalizeTemporalFieldValues(data, fields, normalizeLocalDateTimeString);
1557
1672
  }
1558
1673
  function normalizeLocalDateTimeString(value) {
1559
1674
  const trimmed = String(value || '').trim();
@@ -1606,7 +1721,7 @@ function pad(value) {
1606
1721
  }
1607
1722
 
1608
1723
  function prepareSubmitPayload(rawValue, fieldMetadata, options = {}) {
1609
- const normalized = normalizeSubmitPayload(rawValue);
1724
+ const normalized = normalizeSubmitPayload(rawValue, fieldMetadata ?? []);
1610
1725
  if (!normalized || typeof normalized !== 'object' || Array.isArray(normalized)) {
1611
1726
  return normalized;
1612
1727
  }
@@ -1654,17 +1769,35 @@ function shouldOmitByPolicy(policy, fieldName, dirtyFields, scopePath) {
1654
1769
  }
1655
1770
  }
1656
1771
  function filterRecordForSubmit(value, fields, dirtyFields, scopePath) {
1657
- const payload = { ...value };
1772
+ let payload = { ...value };
1658
1773
  for (const field of fields) {
1774
+ const isNested = field.name.includes('.');
1775
+ if (isNested && !hasNestedPath(payload, field.name))
1776
+ continue;
1659
1777
  if (shouldOmitFieldFromSubmit(field, dirtyFields, scopePath)) {
1660
- delete payload[field.name];
1778
+ if (isNested)
1779
+ payload = deleteNestedPath(payload, field.name);
1780
+ else
1781
+ delete payload[field.name];
1661
1782
  continue;
1662
1783
  }
1663
- const fieldValue = payload[field.name];
1784
+ const fieldValue = isNested
1785
+ ? getNestedPath(payload, field.name)
1786
+ : Object.prototype.hasOwnProperty.call(payload, field.name) ? payload[field.name] : undefined;
1664
1787
  const fieldPath = buildScopedFieldPath(field.name, scopePath);
1665
- payload[field.name] = normalizeFieldValueForSubmit(field, fieldValue, dirtyFields, fieldPath);
1666
- if (shouldOmitEmptyOptionalField(field, payload[field.name], dirtyFields, scopePath)) {
1667
- delete payload[field.name];
1788
+ const normalizedValue = normalizeFieldValueForSubmit(field, fieldValue, dirtyFields, fieldPath);
1789
+ if (shouldOmitEmptyOptionalField(field, normalizedValue, dirtyFields, scopePath)) {
1790
+ if (isNested)
1791
+ payload = deleteNestedPath(payload, field.name);
1792
+ else
1793
+ delete payload[field.name];
1794
+ }
1795
+ else if (isNested) {
1796
+ payload = setNestedPath(payload, field.name, normalizedValue);
1797
+ }
1798
+ else {
1799
+ // The root is already a private draft; do not copy every flat field for each write.
1800
+ payload[field.name] = normalizedValue;
1668
1801
  }
1669
1802
  }
1670
1803
  return payload;
@@ -1681,6 +1814,12 @@ function normalizeFieldValueForSubmit(field, value, dirtyFields, fieldPath) {
1681
1814
  */
1682
1815
  function normalizeFieldValueForRequestPayload(field, value) {
1683
1816
  if (field) {
1817
+ if (field.items) {
1818
+ const result = normalizeScalarArrayValue(value, field.items);
1819
+ if (!result.valid)
1820
+ throw new TypeError(`Invalid scalar array value for field: ${field.name}`);
1821
+ value = result.value;
1822
+ }
1684
1823
  const normalizedDateValue = normalizeDateOnlyFieldValueForSubmit(field, value);
1685
1824
  return normalizeEntityLookupValueForSubmit(field, normalizedDateValue);
1686
1825
  }
@@ -1717,8 +1856,8 @@ function isDateOnlyField(field) {
1717
1856
  if (dataType === 'date') {
1718
1857
  return true;
1719
1858
  }
1720
- const controlType = String(field.controlType ?? '').trim().toLowerCase();
1721
- return controlType === 'date' || controlType === 'datepicker' || controlType === 'date_picker';
1859
+ const controlType = normalizeControlTypeKey(field.controlType);
1860
+ return controlType === 'DATE' || controlType === 'DATE_PICKER' || controlType === 'DATE_INPUT';
1722
1861
  }
1723
1862
  function isIsoDate(value) {
1724
1863
  return /^\d{4}-\d{2}-\d{2}$/.test(value);
@@ -1912,6 +2051,7 @@ class ReactiveDeterminationRuntimeService {
1912
2051
  composite.add(this.claimTargets(form, targetControls));
1913
2052
  const triggerControlSet = new Set(triggerControls);
1914
2053
  const targetControlSet = new Set(targetControls);
2054
+ const upstreamInputControls = this.resolveControls(form, [...upstreamInputPaths]);
1915
2055
  const dependencyObservedControls = [...new Set([...triggerControls, ...inputControls])];
1916
2056
  const directlyObservedControls = [
1917
2057
  ...new Set([...dependencyObservedControls, ...targetControls]),
@@ -1924,7 +2064,9 @@ class ReactiveDeterminationRuntimeService {
1924
2064
  shouldExecute: triggerControlSet.has(control) || targetControlSet.has(control),
1925
2065
  initial: false,
1926
2066
  }))))), committedControls$.pipe(filter((committedControls) => dependencyObservedControls.some((control) => committedControls.has(control))), map$1((committedControls) => ({
1927
- shouldExecute: triggerControls.some((control) => committedControls.has(control)),
2067
+ shouldExecute: triggerControls.some((control) => committedControls.has(control)) ||
2068
+ (upstreamInputControls.some((control) => committedControls.has(control)) &&
2069
+ triggerControls.some((control) => hasMeaningfulSourceValue(control.value))),
1928
2070
  initial: false,
1929
2071
  }))));
1930
2072
  const determinationSubscription = changes$
@@ -1972,7 +2114,7 @@ class ReactiveDeterminationRuntimeService {
1972
2114
  publishEvent(this.event(definition, 'error', signal.correlationId, 0, 'request-binding-invalid'));
1973
2115
  return EMPTY;
1974
2116
  }
1975
- const currentOutputFingerprint = this.buildOutputFingerprint(form, definition);
2117
+ const currentOutputFingerprint = this.buildOutputFingerprint(form, definition, fieldMetadata);
1976
2118
  if (invocation.fingerprint === lastSuccessfulFingerprint &&
1977
2119
  currentOutputFingerprint !== null &&
1978
2120
  currentOutputFingerprint === lastSuccessfulOutputFingerprint) {
@@ -1993,7 +2135,7 @@ class ReactiveDeterminationRuntimeService {
1993
2135
  this.commit(form, commit);
1994
2136
  this.satisfyGeneration(form, determinationKey, signal.generation);
1995
2137
  lastSuccessfulFingerprint = invocation.fingerprint;
1996
- lastSuccessfulOutputFingerprint = this.buildOutputFingerprint(form, definition);
2138
+ lastSuccessfulOutputFingerprint = this.buildOutputFingerprint(form, definition, fieldMetadata);
1997
2139
  publishEvent(this.event(definition, 'success', signal.correlationId, Date.now() - startedAt, undefined, commit.map((entry) => entry.targetPath)));
1998
2140
  }), catchError((error) => {
1999
2141
  if (this.isCurrentGeneration(form, determinationKey, signal.generation)) {
@@ -2109,13 +2251,15 @@ class ReactiveDeterminationRuntimeService {
2109
2251
  }
2110
2252
  return entries;
2111
2253
  }
2112
- buildOutputFingerprint(form, definition) {
2254
+ buildOutputFingerprint(form, definition, fieldMetadata) {
2113
2255
  const values = [];
2114
2256
  for (const binding of definition.outputs) {
2115
- const control = form.get(jsonPointerSegments(binding.fieldPath));
2257
+ const segments = jsonPointerSegments(binding.fieldPath);
2258
+ const control = form.get(segments);
2116
2259
  if (!control)
2117
2260
  return null;
2118
- values.push(control.value);
2261
+ const field = resolveFieldMetadataForSegments(fieldMetadata, segments);
2262
+ values.push(normalizeFieldValueForRequestPayload(field, control.value));
2119
2263
  }
2120
2264
  return stableFingerprint(values);
2121
2265
  }
@@ -9823,7 +9967,7 @@ class FormRulesService {
9823
9967
  }
9824
9968
  }
9825
9969
  resolveComputedRuleFormData(baseFormData, formGroup, formRules, context, result) {
9826
- const formData = { ...baseFormData };
9970
+ let formData = { ...baseFormData };
9827
9971
  const maxIterations = Math.max(2, formRules.length + 1);
9828
9972
  for (let iteration = 0; iteration < maxIterations; iteration += 1) {
9829
9973
  let changed = false;
@@ -9852,13 +9996,28 @@ class FormRulesService {
9852
9996
  if (!this.ruleTargetExists(rule.targetType, normalizedTargetId, formGroup, context.targetIndex)) {
9853
9997
  continue;
9854
9998
  }
9999
+ const isNested = normalizedTargetId.includes('.');
10000
+ if (isNested && !hasNestedPath(formData, normalizedTargetId)) {
10001
+ continue;
10002
+ }
9855
10003
  const valueResult = this.evaluateRuleValue(properties['value'], formData, context);
9856
10004
  if (!valueResult.valid) {
9857
10005
  continue;
9858
10006
  }
9859
- if (!this.areRuleValuesEqual(formData[normalizedTargetId], valueResult.value)) {
9860
- formData[normalizedTargetId] = valueResult.value;
9861
- changed = true;
10007
+ const currentValue = isNested
10008
+ ? getNestedPath(formData, normalizedTargetId)
10009
+ : Object.prototype.hasOwnProperty.call(formData, normalizedTargetId) ? formData[normalizedTargetId] : undefined;
10010
+ if (!this.areRuleValuesEqual(currentValue, valueResult.value)) {
10011
+ if (!isNested) {
10012
+ formData[normalizedTargetId] = valueResult.value;
10013
+ changed = true;
10014
+ continue;
10015
+ }
10016
+ const updatedFormData = setNestedPath(formData, normalizedTargetId, valueResult.value);
10017
+ if (updatedFormData !== formData) {
10018
+ formData = updatedFormData;
10019
+ changed = true;
10020
+ }
9862
10021
  }
9863
10022
  }
9864
10023
  }
@@ -11794,7 +11953,10 @@ class PraxisDynamicForm {
11794
11953
  return this.getSectionPresentationPreset(section) === 'compact-presentation';
11795
11954
  }
11796
11955
  shouldShowContextEmptyState() {
11797
- if (!this.emptyState || this.mode !== 'view')
11956
+ if (!this.emptyState)
11957
+ return false;
11958
+ const isEligibleMode = this.mode === 'view' || this.isItemScopedActionSubmitTarget();
11959
+ if (!isEligibleMode)
11798
11960
  return false;
11799
11961
  if (!this.resourcePath && !this.hasExplicitSchemaUrl() && !this.hasRenderableConfig()) {
11800
11962
  return false;
@@ -11803,6 +11965,126 @@ class PraxisDynamicForm {
11803
11965
  return false;
11804
11966
  return !this.hasLocalRecordContext(this.initialValue);
11805
11967
  }
11968
+ isItemScopedActionSubmitTarget() {
11969
+ if (this.schemaSource !== 'action')
11970
+ return false;
11971
+ const rawSubmitUrl = typeof this.submitUrl === 'string' ? this.submitUrl.trim() : '';
11972
+ return rawSubmitUrl.includes('{') || rawSubmitUrl.includes(':id');
11973
+ }
11974
+ getActionTargetRecordSummary() {
11975
+ if (this.schemaSource !== 'action')
11976
+ return null;
11977
+ const record = this.initialValue && typeof this.initialValue === 'object'
11978
+ ? this.initialValue
11979
+ : null;
11980
+ const rawId = record?.['id'] ?? this.resourceId;
11981
+ const id = typeof rawId === 'number' && Number.isFinite(rawId)
11982
+ ? String(rawId)
11983
+ : typeof rawId === 'string' && rawId.trim().length > 0
11984
+ ? rawId.trim()
11985
+ : undefined;
11986
+ if (!id && !record)
11987
+ return null;
11988
+ const titleKeys = [
11989
+ 'titulo',
11990
+ 'title',
11991
+ 'nome',
11992
+ 'name',
11993
+ 'assunto',
11994
+ 'subject',
11995
+ 'descricao',
11996
+ 'description',
11997
+ 'codigo',
11998
+ 'code',
11999
+ ];
12000
+ const subtitleKeys = [
12001
+ 'objetivo',
12002
+ 'resumo',
12003
+ 'summary',
12004
+ 'local',
12005
+ 'setor',
12006
+ 'departamento',
12007
+ 'categoria',
12008
+ 'category',
12009
+ ];
12010
+ const badgeKeys = [
12011
+ 'status',
12012
+ 'situacao',
12013
+ 'state',
12014
+ 'prioridade',
12015
+ 'priority',
12016
+ 'severidade',
12017
+ 'severity',
12018
+ 'tipo',
12019
+ 'type',
12020
+ 'fase',
12021
+ ];
12022
+ let title;
12023
+ let subtitle;
12024
+ const badges = [];
12025
+ if (record) {
12026
+ for (const key of titleKeys) {
12027
+ const val = record[key];
12028
+ if (typeof val === 'string' && val.trim().length > 0) {
12029
+ title = val.trim();
12030
+ break;
12031
+ }
12032
+ }
12033
+ for (const key of subtitleKeys) {
12034
+ const val = record[key];
12035
+ if (typeof val === 'string' && val.trim().length > 0 && val.trim() !== title) {
12036
+ subtitle = val.trim();
12037
+ break;
12038
+ }
12039
+ }
12040
+ for (const key of badgeKeys) {
12041
+ if (badges.length >= 2)
12042
+ break;
12043
+ const val = record[key];
12044
+ if (typeof val === 'string' && val.trim().length > 0 && val.trim().length <= 32) {
12045
+ const normalized = val.trim();
12046
+ const upper = normalized.toUpperCase();
12047
+ let tone = 'neutral';
12048
+ if (upper.includes('CRITIC') ||
12049
+ upper.includes('ERRO') ||
12050
+ upper.includes('FALH') ||
12051
+ upper.includes('REJEIT') ||
12052
+ upper.includes('CANCEL') ||
12053
+ upper.includes('BLOQUE')) {
12054
+ tone = 'danger';
12055
+ }
12056
+ else if (upper.includes('ALTA') ||
12057
+ upper.includes('HIGH') ||
12058
+ upper.includes('ALERT') ||
12059
+ upper.includes('PENDENT') ||
12060
+ upper.includes('AGUARD')) {
12061
+ tone = 'warning';
12062
+ }
12063
+ else if (upper.includes('APROV') ||
12064
+ upper.includes('CONCLU') ||
12065
+ upper.includes('ATIV') ||
12066
+ upper.includes('OK') ||
12067
+ upper.includes('DONE')) {
12068
+ tone = 'success';
12069
+ }
12070
+ else if (upper.includes('PLANEJ') ||
12071
+ upper.includes('ANDAMENTO') ||
12072
+ upper.includes('INICI') ||
12073
+ upper.includes('ABERT')) {
12074
+ tone = 'info';
12075
+ }
12076
+ badges.push({
12077
+ label: key,
12078
+ value: normalized.replace(/_/g, ' '),
12079
+ tone,
12080
+ });
12081
+ }
12082
+ }
12083
+ }
12084
+ if (!id && !title && badges.length === 0)
12085
+ return null;
12086
+ return { id, title, subtitle, badges };
12087
+ }
11806
12088
  hasResourceContext(value) {
11807
12089
  return typeof value === 'number'
11808
12090
  ? Number.isFinite(value)
@@ -12142,6 +12424,8 @@ class PraxisDynamicForm {
12142
12424
  (error.name === 'TimeoutError' || error.name === 'AbortError');
12143
12425
  }
12144
12426
  schemaCache = null;
12427
+ schemaValidationFailed = false;
12428
+ initialValueContextInvalidated = false;
12145
12429
  lastSchemaMeta;
12146
12430
  schemaMetaPersistenceQueues = new Map();
12147
12431
  persistenceContextEpoch = 0;
@@ -13149,6 +13433,12 @@ class PraxisDynamicForm {
13149
13433
  this.loadedEntityData = null;
13150
13434
  this.hydratedEntityId = null;
13151
13435
  this.entityHydrationPending = false;
13436
+ if (this.hasSchemaBackedRuntime()) {
13437
+ this.runtimeFieldMetadata = null;
13438
+ this.initialValueContextInvalidated = true;
13439
+ this.retryInitialization();
13440
+ return;
13441
+ }
13152
13442
  }
13153
13443
  this.runtimeFieldMetadata = null;
13154
13444
  if (this.hasBuiltFormFromConfig && this.hasRenderableConfig()) {
@@ -13290,6 +13580,8 @@ class PraxisDynamicForm {
13290
13580
  }
13291
13581
  }
13292
13582
  ngOnChanges(changes) {
13583
+ if (changes['initialValue'])
13584
+ this.initialValueContextInvalidated = false;
13293
13585
  const configChange = changes['config'];
13294
13586
  const configInputChanged = !!configChange && (configChange.firstChange ||
13295
13587
  !this.isEquivalentFormConfig(configChange.previousValue, configChange.currentValue));
@@ -13659,6 +13951,8 @@ class PraxisDynamicForm {
13659
13951
  catch (error) {
13660
13952
  if (!current() || initializationCycle !== this.schemaInitializationCycle || error instanceof PraxisDynamicFormDestroyedError)
13661
13953
  return;
13954
+ if (this.hasInitializationError())
13955
+ return;
13662
13956
  this.errorLog('[PDF] initializeForm:error', error);
13663
13957
  const key = this.formConfigKey();
13664
13958
  const hasLocalConfig = key
@@ -13683,22 +13977,27 @@ class PraxisDynamicForm {
13683
13977
  }
13684
13978
  }
13685
13979
  }
13980
+ hasInitializationError() {
13981
+ return this.initializationStatus === 'error';
13982
+ }
13686
13983
  handleInitializationError(stage, error, context) {
13687
13984
  if (this.isDestroyed || error instanceof PraxisDynamicFormDestroyedError)
13688
13985
  return;
13689
13986
  this.initializationStatus = 'error';
13987
+ this.isInitialized = false;
13690
13988
  this.isLoading = false;
13691
13989
  this.cdr.detectChanges();
13692
13990
  const formError = {
13693
13991
  stage,
13694
13992
  error,
13695
13993
  context,
13696
- recoverable: stage !== 'config-load',
13994
+ recoverable: stage !== 'config-load' && !this.requiresConfirmedSchemaContext() &&
13995
+ ![401, 403].includes(Number(error.status)),
13697
13996
  userMessage: this.getErrorMessage(stage, error),
13698
13997
  };
13699
13998
  // Update UX state
13700
13999
  this.currentErrorMessage = formError.userMessage;
13701
- this.currentErrorDetails = { stage, error: error.message, context };
14000
+ this.currentErrorDetails = { stage, error: error.message, status: error.status, context };
13702
14001
  this.isRecoverable = formError.recoverable;
13703
14002
  this.errorLog(`[PraxisDynamicForm] Initialization error at ${stage}:`, error);
13704
14003
  this.initializationError.emit(formError);
@@ -13728,6 +14027,15 @@ class PraxisDynamicForm {
13728
14027
  return String(field.name || '').replace(/([a-z])([A-Z])/g, '$1 $2');
13729
14028
  }
13730
14029
  getErrorMessage(stage, error) {
14030
+ if (stage === 'schema-fetch' && this.requiresConfirmedSchemaContext()) {
14031
+ return this.i18n.t('runtime.schemaRead.contextRequired', undefined, undefined, PRAXIS_DYNAMIC_FORM_I18N_NAMESPACE);
14032
+ }
14033
+ if ([401, 403].includes(Number(error.status))) {
14034
+ return this.i18n.t('runtime.schemaRead.denied', undefined, undefined, PRAXIS_DYNAMIC_FORM_I18N_NAMESPACE);
14035
+ }
14036
+ if (stage === 'schema-fetch' && this.schemaValidationFailed) {
14037
+ return this.i18n.t('runtime.schemaRead.invalid', undefined, undefined, PRAXIS_DYNAMIC_FORM_I18N_NAMESPACE);
14038
+ }
13731
14039
  if (stage === 'schema-fetch' && error.name === 'TimeoutError') {
13732
14040
  return this.i18n.t('runtime.schemaRead.timeout', undefined, undefined, PRAXIS_DYNAMIC_FORM_I18N_NAMESPACE);
13733
14041
  }
@@ -13822,10 +14130,9 @@ class PraxisDynamicForm {
13822
14130
  this.assertSchemaInitializationCurrent(cycle);
13823
14131
  if (!current())
13824
14132
  return;
14133
+ if (!Array.isArray(serverDefs))
14134
+ throw new Error('Invalid schema field metadata.');
13825
14135
  const fieldMetadata = mapFieldDefinitionsToMetadata(serverDefs);
13826
- if (!fieldMetadata || fieldMetadata.length === 0) {
13827
- throw new Error('No field metadata received from server');
13828
- }
13829
14136
  // Generate default layout from metadata (padrão: 2 campos por linha)
13830
14137
  const hostConfig = normalizeFormConfig$1(this.config);
13831
14138
  if (this.shouldUseSchemaLayoutPolicy()) {
@@ -13885,9 +14192,8 @@ class PraxisDynamicForm {
13885
14192
  this.assertSchemaInitializationCurrent(cycle);
13886
14193
  if (!current())
13887
14194
  return;
13888
- if (!serverDefs || serverDefs.length === 0) {
13889
- throw new Error('No field metadata received from server');
13890
- }
14195
+ if (!Array.isArray(serverDefs))
14196
+ throw new Error('Invalid schema field metadata.');
13891
14197
  const hostConfig = normalizeFormConfig$1(this.config);
13892
14198
  this.effectiveConfig = this.shouldUseSchemaLayoutPolicy()
13893
14199
  ? this.createSchemaMaterializedConfig(hostConfig, mapFieldDefinitionsToMetadata(serverDefs))
@@ -13969,13 +14275,13 @@ class PraxisDynamicForm {
13969
14275
  const cycle = this.schemaInitializationCycle;
13970
14276
  const current = this.persistenceGuard(true);
13971
14277
  try {
14278
+ this.schemaCache = null;
13972
14279
  const serverDefs = await this.getSchemaWithCache();
13973
14280
  this.assertSchemaInitializationCurrent(cycle);
13974
14281
  if (!current())
13975
14282
  return;
13976
- if (!serverDefs || serverDefs.length === 0) {
13977
- return;
13978
- }
14283
+ if (!Array.isArray(serverDefs))
14284
+ throw new Error('Invalid schema field metadata.');
13979
14285
  const before = JSON.stringify(this.config);
13980
14286
  this.effectiveConfig = normalizeFormConfig$1(reconcileFormConfig(this.config, serverDefs));
13981
14287
  if (this.schemaRootHooks) {
@@ -14001,7 +14307,10 @@ class PraxisDynamicForm {
14001
14307
  return;
14002
14308
  if (this.isSchemaTransportInterruption(error) || error instanceof PraxisDynamicFormDestroyedError)
14003
14309
  throw error;
14004
- this.warnLog('[PraxisDynamicForm] Failed to reconcile saved form configuration with server schema', error);
14310
+ this.handleInitializationError('schema-fetch', error, {
14311
+ formId: this.formId, resourcePath: this.resourcePath, hasLocalConfig: true,
14312
+ });
14313
+ throw error;
14005
14314
  }
14006
14315
  }
14007
14316
  hostConfigHasAuthoredLocalFieldsNotInLocalConfig(hostConfig, localConfig) {
@@ -14014,8 +14323,14 @@ class PraxisDynamicForm {
14014
14323
  }
14015
14324
  async syncWithServer() {
14016
14325
  // Deprecated by verify-only flow; keeping for manual reconcile paths
14326
+ const cycle = this.schemaInitializationCycle;
14327
+ const current = this.persistenceGuard(true);
14017
14328
  try {
14329
+ this.schemaCache = null;
14018
14330
  const serverDefs = await this.getSchemaWithCache();
14331
+ this.assertSchemaInitializationCurrent(cycle);
14332
+ if (!current())
14333
+ return;
14019
14334
  const serverMetadata = mapFieldDefinitionsToMetadata(serverDefs);
14020
14335
  const syncResult = syncWithServerMetadata(this.config, serverMetadata);
14021
14336
  this.effectiveConfig = syncResult.config;
@@ -14038,13 +14353,16 @@ class PraxisDynamicForm {
14038
14353
  }
14039
14354
  }
14040
14355
  catch (error) {
14041
- // Sync errors are not critical - we can continue with local config
14042
- this.handleInitializationError('sync', error, {
14356
+ if (!current())
14357
+ return;
14358
+ if (this.isSchemaTransportInterruption(error) || error instanceof PraxisDynamicFormDestroyedError)
14359
+ throw error;
14360
+ this.handleInitializationError('schema-fetch', error, {
14043
14361
  formId: this.formId,
14044
14362
  resourcePath: this.resourcePath,
14045
14363
  hasLocalConfig: true,
14046
14364
  });
14047
- // Don't re-throw - continue with local config
14365
+ throw error;
14048
14366
  }
14049
14367
  }
14050
14368
  isActionCommandWithoutExplicitReadUrl() {
@@ -14568,13 +14886,12 @@ class PraxisDynamicForm {
14568
14886
  return null;
14569
14887
  }
14570
14888
  const dirtyFields = this.getDirtyFieldNames();
14571
- const touchedFields = Object.entries(this.form.controls)
14572
- .filter(([, control]) => control.touched)
14573
- .map(([fieldName]) => fieldName);
14889
+ const touchedFields = new Set();
14890
+ this.collectTouchedFieldNames(this.form, '', touchedFields);
14574
14891
  return {
14575
14892
  rawValue: this.form.getRawValue(),
14576
14893
  dirtyFields,
14577
- touchedFields,
14894
+ touchedFields: Array.from(touchedFields),
14578
14895
  context: this.buildCurrentFormRuntimeContext(),
14579
14896
  };
14580
14897
  }
@@ -14597,11 +14914,24 @@ class PraxisDynamicForm {
14597
14914
  if (!this.form || !Object.keys(this.form.controls || {}).length) {
14598
14915
  return;
14599
14916
  }
14917
+ let formData;
14918
+ let isValid = this.form.valid;
14919
+ try {
14920
+ formData = this.prepareCurrentSubmitPayload(rawFormData, dirtyFields);
14921
+ }
14922
+ catch (error) {
14923
+ if (!(error instanceof TypeError))
14924
+ throw error;
14925
+ // Invalid scalar input remains available as raw diagnostics, never as a
14926
+ // payload that a preview consumer could apply.
14927
+ formData = null;
14928
+ isValid = false;
14929
+ }
14600
14930
  this.payloadPreviewChange.emit({
14601
- formData: this.prepareCurrentSubmitPayload(rawFormData, dirtyFields),
14931
+ formData,
14602
14932
  rawFormData,
14603
14933
  changedFields: dirtyFields,
14604
- isValid: this.form.valid,
14934
+ isValid,
14605
14935
  entityId: this.resourceId ?? undefined,
14606
14936
  operation: this.resolveSubmitOperation(),
14607
14937
  reason,
@@ -14648,6 +14978,15 @@ class PraxisDynamicForm {
14648
14978
  this.collectDirtyFieldNames(childControl, childPath, dirtyFields);
14649
14979
  }
14650
14980
  }
14981
+ collectTouchedFieldNames(control, path, fields) {
14982
+ const children = control.controls;
14983
+ for (const [name, child] of Object.entries(children ?? {})) {
14984
+ const childPath = path ? `${path}.${name}` : name;
14985
+ if (child.touched)
14986
+ fields.add(childPath);
14987
+ this.collectTouchedFieldNames(child, childPath, fields);
14988
+ }
14989
+ }
14651
14990
  buildCurrentFormRuntimeContext() {
14652
14991
  const resourcePath = (this.resourcePath || '').trim();
14653
14992
  return {
@@ -14711,6 +15050,8 @@ class PraxisDynamicForm {
14711
15050
  }
14712
15051
  }
14713
15052
  getNormalizedInitialValue() {
15053
+ if (this.initialValueContextInvalidated)
15054
+ return null;
14714
15055
  // A seed from the former remote record cannot resurrect a cleared selection.
14715
15056
  // Local projections and create commands still own their initialValue snapshot.
14716
15057
  if (this.entitySelectionCleared && !this.usesInitialValueAsAuthoritativeSnapshot())
@@ -14733,20 +15074,25 @@ class PraxisDynamicForm {
14733
15074
  return !String(this.readUrl || '').trim() && !String(this.resourcePath || '').trim();
14734
15075
  }
14735
15076
  normalizeFormPatchValue(value) {
14736
- const normalized = normalizeDateArrays(value);
15077
+ const fieldMetadata = this.config?.fieldMetadata || [];
15078
+ const normalized = normalizeDateArrays(value, fieldMetadata);
14737
15079
  if (!normalized || typeof normalized !== 'object' || Array.isArray(normalized)) {
14738
15080
  return normalized;
14739
15081
  }
14740
- const fieldMetadata = this.config?.fieldMetadata || [];
14741
15082
  if (!fieldMetadata.length) {
14742
15083
  return normalized;
14743
15084
  }
14744
- const result = { ...normalized };
15085
+ let result = { ...normalized };
14745
15086
  for (const field of fieldMetadata) {
14746
- if (!field?.name || !this.isDateControlMetadata(field) || !(field.name in result)) {
15087
+ if (!field?.name || !this.isDateControlMetadata(field) || !hasNestedPath(result, field.name)) {
15088
+ continue;
15089
+ }
15090
+ const value = this.coerceDateControlValue(getNestedPath(result, field.name));
15091
+ if (!field.name.includes('.')) {
15092
+ result[field.name] = value;
14747
15093
  continue;
14748
15094
  }
14749
- result[field.name] = this.coerceDateControlValue(result[field.name]);
15095
+ result = setNestedPath(result, field.name, value);
14750
15096
  }
14751
15097
  return result;
14752
15098
  }
@@ -15594,9 +15940,24 @@ class PraxisDynamicForm {
15594
15940
  }
15595
15941
  return eligibleSections[eligibleSections.length - 1];
15596
15942
  }
15943
+ get actionTargetSelectedRecordLabel() {
15944
+ return this.i18n.t('runtime.actionTarget.selectedRecord', undefined, 'Registro selecionado', PRAXIS_DYNAMIC_FORM_I18N_NAMESPACE);
15945
+ }
15597
15946
  getSectionTitle(section) {
15598
15947
  const props = this.getSectionRuleProps(section);
15599
- return props.title !== undefined ? props.title : section.title;
15948
+ if (props.title !== undefined) {
15949
+ return props.title;
15950
+ }
15951
+ const rawSectionTitle = section.title;
15952
+ const defaultTitle = this.i18n.t('layout.defaultSectionTitle', undefined, 'Informações', PRAXIS_DYNAMIC_FORM_I18N_NAMESPACE);
15953
+ if ((!rawSectionTitle || rawSectionTitle === 'Informações' || rawSectionTitle === defaultTitle) &&
15954
+ (this.config?.sections?.length ?? 0) === 1) {
15955
+ const hostTitle = this.config?.title;
15956
+ if (typeof hostTitle === 'string' && hostTitle.trim().length > 0) {
15957
+ return hostTitle.trim();
15958
+ }
15959
+ }
15960
+ return rawSectionTitle;
15600
15961
  }
15601
15962
  getSectionDescription(section) {
15602
15963
  const props = this.getSectionRuleProps(section);
@@ -16851,6 +17212,8 @@ class PraxisDynamicForm {
16851
17212
  undefined);
16852
17213
  }
16853
17214
  async onSubmit() {
17215
+ if (this.hasSchemaBackedRuntime() && (this.isLoading || this.initializationStatus === 'error' || this.requiresConfirmedSchemaContext()))
17216
+ return;
16854
17217
  if (this.effectiveReadonly || this.effectivePresentation)
16855
17218
  return;
16856
17219
  if (this.isDestroyed || this.submitting || this.submitPreparationInProgress)
@@ -16879,6 +17242,8 @@ class PraxisDynamicForm {
16879
17242
  const preparationIsCurrent = () => {
16880
17243
  if (this.isDestroyed)
16881
17244
  return false;
17245
+ if (this.hasSchemaBackedRuntime() && (this.isLoading || this.initializationStatus === 'error' || this.requiresConfirmedSchemaContext()))
17246
+ return false;
16882
17247
  if (!automatic || this.isResourceRevisionCurrent(binding, epoch))
16883
17248
  return true;
16884
17249
  // A previously started hook can still hold the reused group. Its draft is no longer authoritative.
@@ -21635,6 +22000,15 @@ class PraxisDynamicForm {
21635
22000
  this.tryInitializeForm();
21636
22001
  }
21637
22002
  getErrorTitle() {
22003
+ if (this.requiresConfirmedSchemaContext() && this.currentErrorDetails?.stage === 'schema-fetch') {
22004
+ return this.i18n.t('runtime.schemaRead.contextRequiredTitle', undefined, undefined, PRAXIS_DYNAMIC_FORM_I18N_NAMESPACE);
22005
+ }
22006
+ if ([401, 403].includes(Number(this.currentErrorDetails?.status))) {
22007
+ return this.i18n.t('runtime.schemaRead.deniedTitle', undefined, undefined, PRAXIS_DYNAMIC_FORM_I18N_NAMESPACE);
22008
+ }
22009
+ if (this.schemaValidationFailed && this.currentErrorDetails?.stage === 'schema-fetch') {
22010
+ return this.i18n.t('runtime.schemaRead.invalidTitle', undefined, undefined, PRAXIS_DYNAMIC_FORM_I18N_NAMESPACE);
22011
+ }
21638
22012
  const titles = {
21639
22013
  'config-load': 'Configuração inválida',
21640
22014
  'schema-fetch': 'Erro de conexão',
@@ -21671,9 +22045,7 @@ class PraxisDynamicForm {
21671
22045
  const operation = (url.searchParams.get('operation') || 'get').toLowerCase();
21672
22046
  const schemaType = (url.searchParams.get('schemaType') || 'response').toLowerCase();
21673
22047
  const includeInternalSchemas = (url.searchParams.get('includeInternalSchemas') || 'false').toLowerCase() === 'true';
21674
- const tenant = url.searchParams.get('tenant') || this.global?.getTenant?.() || undefined;
21675
- const locale = url.searchParams.get('locale') ||
21676
- ((typeof navigator !== 'undefined' && navigator.language) ? navigator.language : undefined);
22048
+ const { tenant, locale } = this.schemaRepresentationContext(url.searchParams);
21677
22049
  const origin = /^https?:\/\//i.test(resolvedSchemaUrl) ? url.origin : this.resolveApiOrigin();
21678
22050
  const baseUrl = origin
21679
22051
  ? new URL(url.pathname, `${origin}/`).toString()
@@ -21720,10 +22092,28 @@ class PraxisDynamicForm {
21720
22092
  }
21721
22093
  catch { }
21722
22094
  // Tenant/locale from GlobalConfigService and navigator
21723
- const tenant = this.global?.getTenant?.();
21724
- const locale = (typeof navigator !== 'undefined' && navigator.language) ? navigator.language : undefined;
22095
+ const { tenant, locale } = this.schemaRepresentationContext();
21725
22096
  return { path, operation, schemaType, includeInternalSchemas: useFilterSchema, tenant, locale, baseUrl, apiOrigin };
21726
22097
  }
22098
+ requiresConfirmedSchemaContext() {
22099
+ const snapshot = this.enterpriseRuntimeContext?.snapshot;
22100
+ return !!snapshot && snapshot.state !== 'ready';
22101
+ }
22102
+ schemaRepresentationContext(query) {
22103
+ if (this.requiresConfirmedSchemaContext())
22104
+ throw new Error('A confirmed runtime context is required to load the form schema.');
22105
+ const effective = this.enterpriseRuntimeContext?.effectiveContext;
22106
+ const requestedTenant = query?.get('tenant') || undefined;
22107
+ const requestedLocale = query?.get('locale') || undefined;
22108
+ if (effective && (requestedTenant && requestedTenant !== effective.activeTenant.tenantId ||
22109
+ requestedLocale && requestedLocale !== effective.locale))
22110
+ throw new Error('The schema URL conflicts with the confirmed runtime context.');
22111
+ return {
22112
+ tenant: effective ? effective.activeTenant.tenantId : requestedTenant || this.global?.getTenant?.(),
22113
+ locale: effective ? effective.locale ?? undefined : requestedLocale ||
22114
+ (typeof navigator !== 'undefined' ? navigator.language : undefined),
22115
+ };
22116
+ }
21727
22117
  async getSchemaWithCache() {
21728
22118
  const current = this.persistenceGuard(true);
21729
22119
  const assertCurrent = () => {
@@ -21732,6 +22122,8 @@ class PraxisDynamicForm {
21732
22122
  };
21733
22123
  if (this.isDestroyed)
21734
22124
  throw new PraxisDynamicFormDestroyedError();
22125
+ if (this.requiresConfirmedSchemaContext())
22126
+ throw new Error('A confirmed runtime context is required to load the form schema.');
21735
22127
  if (this.schemaCache) {
21736
22128
  this.debugLog('[PDF] schema:fromCache');
21737
22129
  return this.schemaCache;
@@ -21739,6 +22131,7 @@ class PraxisDynamicForm {
21739
22131
  const ctx = this.buildSchemaContext();
21740
22132
  this.schemaRootReactiveDeterminations = [];
21741
22133
  this.schemaRootOperationId = null;
22134
+ this.schemaRootHooks = undefined;
21742
22135
  const schemaContext = {
21743
22136
  path: ctx.path,
21744
22137
  operation: ctx.operation,
@@ -21750,18 +22143,9 @@ class PraxisDynamicForm {
21750
22143
  };
21751
22144
  const disableCache = this.global.get('cache.disableSchemaCache');
21752
22145
  const cacheKey = this.dynamicForm.buildSchemaCacheKey({ ...schemaContext, baseUrl: ctx.baseUrl });
21753
- if (!disableCache) {
21754
- const compiled = this.dynamicForm.getCompiledSchema(cacheKey);
21755
- if (compiled) {
21756
- this.debugLog('[PDF] schema:fromL1Cache', { cacheKey });
21757
- this.schemaCache = compiled.normalizedFields;
21758
- this.schemaRootOperationId = compiled.schemaRootOperationId ?? null;
21759
- this.schemaRootHooks = compiled.schemaRootHooks;
21760
- this.schemaRootReactiveDeterminations = compiled.schemaRootReactiveDeterminations ?? [];
21761
- this.lastSchemaMeta = { schemaId: compiled.schemaId, serverHash: compiled.serverHash, context: schemaContext };
21762
- return compiled.normalizedFields;
21763
- }
21764
- }
22146
+ // Compiled L1 values cannot establish readiness. Revalidate the structural
22147
+ // representation and normalize it again before reconciling this lifecycle.
22148
+ this.schemaValidationFailed = false;
21765
22149
  const loadingCtx = this.buildLoadingContext('schema', 'Carregando configuração...', true);
21766
22150
  this.beginLoading(loadingCtx);
21767
22151
  this.emitLoadingState('schema', 'loading', 'Carregando schema do formulário...');
@@ -21784,6 +22168,8 @@ class PraxisDynamicForm {
21784
22168
  : new LocalStorageCacheAdapter({ ttlMs: 30 * 60 * 1000, maxEntries: 200 });
21785
22169
  const client = new SchemaMetadataClient(adapter, this.schemaTransportOptions);
21786
22170
  let discoveryAttempted = false;
22171
+ let legacyAttempted = false;
22172
+ let representationReceived = false;
21787
22173
  const loadDiscoverySchema = async (reason) => {
21788
22174
  discoveryAttempted = true;
21789
22175
  if (this.isDestroyed)
@@ -21794,7 +22180,9 @@ class PraxisDynamicForm {
21794
22180
  ...(this.apiUrlEntry ? { apiUrlEntry: this.apiUrlEntry } : {}),
21795
22181
  };
21796
22182
  const canLoadViaDiscovery = !!rp &&
21797
- typeof this.resourceDiscovery?.getResourceSchemaFields === 'function' &&
22183
+ (ctx.schemaType === 'request'
22184
+ ? typeof this.resourceDiscovery?.getResourceFilterSchemaFields === 'function'
22185
+ : typeof this.resourceDiscovery?.getResourceSchemaFields === 'function') &&
21798
22186
  (typeof this.resourceDiscovery.canResolveSchemas !== 'function' ||
21799
22187
  this.resourceDiscovery.canResolveSchemas(discoveryOptions));
21800
22188
  if (!canLoadViaDiscovery) {
@@ -21802,8 +22190,7 @@ class PraxisDynamicForm {
21802
22190
  ? reason
21803
22191
  : new Error('Schema metadata unavailable and legacy crud.getSchema() not found.');
21804
22192
  }
21805
- const inferredFilter = /(^|[-_])filter($|[-_])/i.test(this.formId || '');
21806
- const useFilterSchema = this.schemaSource === 'filter' || inferredFilter;
22193
+ const useFilterSchema = ctx.schemaType === 'request';
21807
22194
  const hasDedicatedOptions = !!(discoveryOptions.endpointKey || discoveryOptions.apiUrlEntry);
21808
22195
  const discoveryCall$ = useFilterSchema && typeof this.resourceDiscovery.getResourceFilterSchemaFields === 'function'
21809
22196
  ? (hasDedicatedOptions
@@ -21828,11 +22215,8 @@ class PraxisDynamicForm {
21828
22215
  assertCurrent();
21829
22216
  if (this.isDestroyed)
21830
22217
  throw new PraxisDynamicFormDestroyedError();
21831
- if (!Array.isArray(discoveryDefs) || discoveryDefs.length === 0) {
21832
- throw reason instanceof Error
21833
- ? reason
21834
- : new Error('Schema metadata unavailable via ResourceDiscoveryService.');
21835
- }
22218
+ if (!Array.isArray(discoveryDefs))
22219
+ throw new Error('Invalid discovery schema field metadata.');
21836
22220
  try {
21837
22221
  const schemaId = buildSchemaId(schemaContext);
21838
22222
  this.lastSchemaMeta = { schemaId, context: schemaContext };
@@ -21843,13 +22227,16 @@ class PraxisDynamicForm {
21843
22227
  return discoveryDefs;
21844
22228
  };
21845
22229
  const loadLegacySchema = async (reason) => {
22230
+ legacyAttempted = true;
21846
22231
  if (this.isDestroyed)
21847
22232
  throw new PraxisDynamicFormDestroyedError();
21848
22233
  try {
21849
22234
  this.warnLog('[PDF] schema:metadata-fallback', reason);
21850
22235
  }
21851
22236
  catch { }
21852
- const legacyGetSchema = this.crud?.getSchema;
22237
+ const legacyGetSchema = ctx.schemaType === 'request'
22238
+ ? this.crud?.getFilterSchema
22239
+ : this.crud?.getSchema;
21853
22240
  if (typeof legacyGetSchema !== 'function') {
21854
22241
  if (discoveryAttempted) {
21855
22242
  throw reason instanceof Error
@@ -21861,7 +22248,9 @@ class PraxisDynamicForm {
21861
22248
  const isMockedLegacy = !!legacyGetSchema?.and;
21862
22249
  let legacyDefs;
21863
22250
  try {
21864
- const legacyResult = legacyGetSchema.call(this.crud);
22251
+ const legacyResult = ctx.schemaType === 'request'
22252
+ ? legacyGetSchema.call(this.crud, { cache: false })
22253
+ : legacyGetSchema.call(this.crud);
21865
22254
  controller.signal.throwIfAborted();
21866
22255
  assertCurrent();
21867
22256
  const cancelled$ = new Observable(subscriber => {
@@ -21882,7 +22271,8 @@ class PraxisDynamicForm {
21882
22271
  if (this.isSchemaTransportInterruption(legacyError) ||
21883
22272
  controller.signal.aborted ||
21884
22273
  isMockedLegacy ||
21885
- discoveryAttempted) {
22274
+ discoveryAttempted ||
22275
+ ![404, 405, 501].includes(Number(legacyError?.status))) {
21886
22276
  throw legacyError;
21887
22277
  }
21888
22278
  return await loadDiscoverySchema(legacyError);
@@ -21891,21 +22281,8 @@ class PraxisDynamicForm {
21891
22281
  assertCurrent();
21892
22282
  if (this.isDestroyed)
21893
22283
  throw new PraxisDynamicFormDestroyedError();
21894
- if (!isMockedLegacy &&
21895
- !discoveryAttempted &&
21896
- (!Array.isArray(legacyDefs) || legacyDefs.length === 0)) {
21897
- try {
21898
- return await loadDiscoverySchema(reason);
21899
- }
21900
- catch (discoveryError) {
21901
- if (this.isDestroyed || discoveryError instanceof PraxisDynamicFormDestroyedError) {
21902
- throw new PraxisDynamicFormDestroyedError();
21903
- }
21904
- if (this.isSchemaTransportInterruption(discoveryError) || controller.signal.aborted) {
21905
- throw discoveryError;
21906
- }
21907
- }
21908
- }
22284
+ if (!Array.isArray(legacyDefs))
22285
+ throw new Error('Invalid resource schema field metadata.');
21909
22286
  try {
21910
22287
  const schemaId = buildSchemaId(schemaContext);
21911
22288
  this.lastSchemaMeta = { schemaId, context: schemaContext };
@@ -21917,7 +22294,8 @@ class PraxisDynamicForm {
21917
22294
  };
21918
22295
  try {
21919
22296
  const legacyGetSchema = this.crud?.getSchema;
21920
- const preferLegacySchema = typeof legacyGetSchema === 'function' &&
22297
+ const preferLegacySchema = !String(this.schemaUrl || '').trim() && ctx.schemaType === 'response' &&
22298
+ typeof legacyGetSchema === 'function' &&
21921
22299
  !!legacyGetSchema?.and;
21922
22300
  if (preferLegacySchema) {
21923
22301
  return await loadLegacySchema(new Error('Using legacy schema source (mocked crud.getSchema).'));
@@ -21947,11 +22325,18 @@ class PraxisDynamicForm {
21947
22325
  assertCurrent();
21948
22326
  if (this.isDestroyed)
21949
22327
  throw new PraxisDynamicFormDestroyedError();
21950
- const defs = this.schemaNormalizer.normalizeSchema(entry.schema);
21951
- if ((!Array.isArray(defs) || defs.length === 0) &&
21952
- this.schemaSource === 'action' &&
21953
- String(this.resourcePath || '').trim()) {
21954
- return await loadLegacySchema(new Error('Action request schema returned no fields; falling back to resource schema.'));
22328
+ representationReceived = true;
22329
+ let defs;
22330
+ try {
22331
+ if (!entry.schema || typeof entry.schema !== 'object' || Array.isArray(entry.schema) ||
22332
+ ('properties' in entry.schema && (!entry.schema.properties || typeof entry.schema.properties !== 'object' || Array.isArray(entry.schema.properties)))) {
22333
+ throw new Error('Invalid structural schema representation.');
22334
+ }
22335
+ defs = this.schemaNormalizer.normalizeSchema(entry.schema);
22336
+ }
22337
+ catch (error) {
22338
+ this.schemaValidationFailed = true;
22339
+ throw error;
21955
22340
  }
21956
22341
  // Parse backend-owned root x-ui runtime contracts. They remain transient
21957
22342
  // and are never copied into the persisted/authorable FormConfig.
@@ -22027,9 +22412,21 @@ class PraxisDynamicForm {
22027
22412
  if (this.isSchemaTransportInterruption(error) || controller.signal.aborted)
22028
22413
  throw error;
22029
22414
  if (error instanceof InvalidReactiveDeterminationProjectionError) {
22415
+ this.schemaValidationFailed = true;
22030
22416
  throw error;
22031
22417
  }
22032
- return await loadLegacySchema(error);
22418
+ const status = Number(error?.status);
22419
+ if (!representationReceived && !legacyAttempted && !discoveryAttempted &&
22420
+ !String(this.schemaUrl || '').trim() && ctx.schemaType === 'response' && [404, 405, 501].includes(status)) {
22421
+ return await loadLegacySchema(error);
22422
+ }
22423
+ if (error instanceof SyntaxError || error?.cause instanceof SyntaxError) {
22424
+ this.schemaValidationFailed = true;
22425
+ }
22426
+ if ((discoveryAttempted || legacyAttempted) && error instanceof Error &&
22427
+ !('status' in error) && error.name !== 'TypeError')
22428
+ this.schemaValidationFailed = true;
22429
+ throw error;
22033
22430
  }
22034
22431
  }
22035
22432
  finally {
@@ -22190,7 +22587,7 @@ class PraxisDynamicForm {
22190
22587
  providePraxisI18nConfig(PRAXIS_DYNAMIC_FORM_I18N_CONFIG),
22191
22588
  GenericCrudService,
22192
22589
  FormContextService,
22193
- ], viewQueries: [{ propertyName: "formHost", first: true, predicate: ["formHost"], descendants: true }, { propertyName: "fieldLoaders", predicate: DynamicFieldLoaderDirective, descendants: true }], usesOnChanges: true, ngImport: i0, template: "@if (isLoading) {\n <!-- Loading State -->\n <div class=\"form-loading\" role=\"status\" aria-live=\"polite\" aria-label=\"Carregando formul\u00E1rio\">\n <div class=\"form-loading-header\">\n <mat-progress-spinner diameter=\"32\" aria-label=\"Carregando formul\u00E1rio\"></mat-progress-spinner>\n <div class=\"form-loading-copy\">\n <p class=\"form-loading-title\">Carregando formul\u00E1rio...</p>\n <p class=\"form-loading-subtitle\">Preparando campos e op\u00E7\u00F5es do cadastro.</p>\n </div>\n </div>\n <div class=\"form-loading-skeleton\" aria-hidden=\"true\">\n <span class=\"form-loading-line form-loading-line-title\"></span>\n <span class=\"form-loading-line\"></span>\n <span class=\"form-loading-line form-loading-line-short\"></span>\n <span class=\"form-loading-field\"></span>\n <span class=\"form-loading-field form-loading-field-wide\"></span>\n </div>\n </div>\n} @else if (initializationStatus === 'error') {\n <!-- Error State -->\n <div class=\"form-error\">\n <mat-icon color=\"warn\" [praxisIcon]=\"'error'\"></mat-icon>\n <h3>{{ getErrorTitle() }}</h3>\n <p>{{ currentErrorMessage }}</p>\n @if (isRecoverable) {\n <button mat-stroked-button (click)=\"retryInitialization()\">\n <mat-icon [praxisIcon]=\"'refresh'\"></mat-icon>\n Tentar Novamente\n </button>\n }\n <button mat-button (click)=\"showDetailedError()\" class=\"show-details\">\n Ver Detalhes T\u00E9cnicos\n </button>\n <!-- Permitir corre\u00E7\u00E3o do resourcePath diretamente do estado de erro -->\n <button mat-flat-button color=\"primary\" (click)=\"openQuickConnect()\" class=\"connect-action\">\n <mat-icon [praxisIcon]=\"'bolt'\"></mat-icon>\n Conectar a recurso\n </button>\n </div>\n} @else if (initializationStatus === 'success') {\n <!-- Inline banner for schema change (only when customization is enabled) -->\n @if (shouldShowOutdatedInline()) {\n <div class=\"pfx-form-info-banner\" role=\"status\" aria-live=\"polite\">\n <div class=\"text\">O schema do servidor mudou. Reconciliar agora?</div>\n <div class=\"actions\">\n <button mat-stroked-button color=\"primary\" (click)=\"openConfigEditor()\">\n <mat-icon [praxisIcon]=\"'sync'\"></mat-icon>\n Reconciliar\n </button>\n <button mat-button (click)=\"onSnoozeOutdated()\">Lembrar depois</button>\n <button mat-button (click)=\"onIgnoreOutdated()\">Ignorar</button>\n </div>\n </div>\n }\n\n <!-- Configuration Controls -->\n @if (shouldShowConfigControls && enableCustomization) {\n <div class=\"form-config-controls\">\n @if (showAiAssistant) {\n <button type=\"button\" praxisIconButton=\"auto_awesome\" size=\"dense\" (click)=\"openAiAssistant()\" [disabled]=\"isLoading\"\n [attr.data-testid]=\"aiAssistantTriggerTestId('config-controls')\"\n aria-label=\"Abrir copiloto semantico Praxis do formulario\"\n matTooltip=\"Abrir copiloto sem\u00E2ntico do formul\u00E1rio\">\n </button>\n }\n <button type=\"button\" praxisIconButton=\"settings\" size=\"dense\" (click)=\"openConfigEditor()\" [disabled]=\"isLoading\" class=\"config-button\"\n [matBadge]=\"schemaOutdated ? '!' : ''\" [matBadgeHidden]=\"!schemaOutdated\" matBadgeColor=\"warn\" matBadgeSize=\"small\"\n matBadgePosition=\"above after\"\n [attr.aria-label]=\"configControlLabel\" [matTooltip]=\"configControlLabel\">\n </button>\n <button type=\"button\" praxisIconButton=\"link_off\" size=\"dense\" (click)=\"disconnect()\"\n [attr.aria-label]=\"disconnectControlLabel\" [matTooltip]=\"disconnectControlLabel\"\n [disabled]=\"isLoading\">\n </button>\n </div>\n }\n\n <!-- Form Content -->\n @if (!resourcePath && !hasExplicitSchemaUrl() && !hasRenderableConfig()) {\n <praxis-empty-state-card\n icon=\"link\"\n [title]=\"'Conecte o formul\u00E1rio \u00E0 fonte de dados'\"\n [description]=\"'Informe a rota do recurso da API para gerar automaticamente os campos do formul\u00E1rio.'\"\n [primaryAction]=\"enableCustomization ? { label: 'Conectar \u00E0 fonte de dados', icon: 'bolt', action: openQuickConnect.bind(this) } : undefined\"\n ></praxis-empty-state-card>\n }\n @if (shouldShowContextEmptyState()) {\n <div class=\"form-context-empty-state\" role=\"status\" aria-live=\"polite\">\n <praxis-empty-state-card\n [icon]=\"emptyState?.icon || 'touch_app'\"\n [title]=\"emptyState!.title\"\n [description]=\"emptyState?.description\"\n [tone]=\"emptyState?.tone || 'primary'\"\n [variant]=\"emptyState?.variant || 'transparent'\"\n [alignment]=\"emptyState?.alignment || 'center'\"\n [density]=\"emptyState?.density || 'compact'\"\n [iconContainer]=\"emptyState?.iconContainer || 'circle'\"\n [inline]=\"true\"\n />\n </div>\n } @else {\n <div #entityReadRegion class=\"entity-read-region\" tabindex=\"-1\" role=\"region\" [attr.aria-label]=\"entityReadText('region')\">\n <span class=\"cdk-visually-hidden\" role=\"status\" aria-live=\"polite\" aria-atomic=\"true\">{{ entityReadStatusText() }}</span>\n @if (entityHydrationPending || entityReadFailed) {\n <div class=\"entity-read-feedback\" data-testid=\"form-entity-read-feedback\">\n @if (entityHydrationPending) {\n <mat-progress-spinner diameter=\"28\" mode=\"indeterminate\" aria-hidden=\"true\"></mat-progress-spinner>\n <p class=\"entity-read-loading-text\" aria-hidden=\"true\">{{ entityReadText('loading') }}</p>\n } @else {\n <mat-icon [praxisIcon]=\"'error_outline'\" aria-hidden=\"true\"></mat-icon>\n <p aria-hidden=\"true\">{{ entityReadText('error') }}</p>\n <button mat-stroked-button type=\"button\" (click)=\"retryEntityRead(entityReadRegion)\">{{ entityReadText('retry') }}</button>\n }\n </div>\n }\n <form #formHost (ngSubmit)=\"onSubmit()\" [attr.aria-busy]=\"submitting || entityHydrationPending ? 'true' : null\"\n [style.opacity]=\"entityHydrationPending || entityReadFailed ? '0' : null\"\n [style.transition]=\"entityHydrationPending || entityReadFailed ? 'none' : null\"\n [attr.inert]=\"entityHydrationPending || entityReadFailed ? '' : null\"\n [attr.aria-hidden]=\"entityHydrationPending || entityReadFailed ? 'true' : null\"\n [attr.aria-label]=\"'Formul\u00E1rio ' + (config.metadata?.version || '')\" [class.canvas-mode-enabled]=\"enableCustomization\"\n [class.presentation-mode]=\"effectivePresentation\"\n [class.praxis-dynamic-form--presentation]=\"effectivePresentation\"\n [class.readonly-mode]=\"effectiveReadonly\"\n [attr.data-presentation-preset]=\"effectivePresentation ? effectivePresentationPreset : null\"\n [class.praxis-dynamic-form--corporate-dossier]=\"isCorporateDossierPreset()\"\n [class.praxis-dynamic-form--editorial-card]=\"isEditorialCardPreset()\"\n [class.praxis-dynamic-form--compact-presentation]=\"isCompactPresentationPreset()\"\n [class.editorial-visual-context]=\"hasEditorialVisualContext()\"\n [class.pfx-mounting]=\"isMounting\" [formGroup]=\"form\"\n [ngClass]=\"{\n 'pres-compact': presentationVars.compact,\n 'pres-label-left': presentationVars.labelPosition === 'left',\n 'pres-label-above': presentationVars.labelPosition === 'above'\n }\" [style.--pfx-pres-label-align]=\"presentationVars.labelAlign\"\n [style.--pfx-pres-label-size]=\"presentationVars.labelSize\"\n [style.--pfx-pres-label-width]=\"presentationVars.labelWidth\"\n [style.--pfx-pres-row-gap]=\"presentationVars.density === 'compact' ? '6px' : (presentationVars.density === 'cozy' ? '8px' : '10px')\"\n [style.--pfx-pres-row-padding]=\"presentationVars.density === 'compact' ? '2px 0' : (presentationVars.density === 'cozy' ? '6px 0' : '8px 0')\"\n [style.--pfx-pres-value-align]=\"presentationVars.valueAlign\"\n [style.--pfx-pres-value-size]=\"presentationVars.valueSize\"\n [style.--pdx-form-mount-duration]=\"getMountDurationVar()\"\n [style.--pdx-form-mount-offset]=\"getMountOffsetVar()\"\n [style.--pdx-form-mount-stagger]=\"getMountStaggerVar()\"\n class=\"praxis-dynamic-form\">\n @if (enableCustomization && selectedElement) {\n <praxis-canvas-toolbar (editMetadata)=\"openSelectedElementEditor()\" (selectPath)=\"onSelectPath($event)\"\n (moveUp)=\"onToolbarMove('up')\" (moveDown)=\"onToolbarMove('down')\" (toggleReadonly)=\"onToolbarToggleReadonly()\"\n (toggleRequired)=\"onToolbarToggleRequired()\" (toggleHidden)=\"onToolbarToggleHidden()\"\n (toggleDisabled)=\"onToolbarToggleDisabled()\" (requestClose)=\"onToolbarRequestClose()\"\n [selectedElement]=\"selectedElement\"\n [style.transform]=\"toolbarTransform\"></praxis-canvas-toolbar>\n }\n\n @if (formBlocksBefore?.nodes?.length) {\n <section class=\"form-editorial-blocks form-editorial-blocks-before\" data-editorial-placement=\"before\">\n <praxis-rich-content\n [document]=\"formBlocksBeforeDocument\"\n [context]=\"getEditorialRichContentContext()\"\n [hostCapabilities]=\"richContentHostCapabilities\"\n ></praxis-rich-content>\n </section>\n }\n\n @if (actionPlacement === 'top' && !(effectivePresentation || effectiveReadonly)) {\n <praxis-form-actions data-actions-placement=\"top\" [actions]=\"effectiveActions\" [isSubmitting]=\"submitting\"\n [formIsValid]=\"effectiveFormIsValid\" [submitError]=\"submitError\" [formId]=\"formId\" [actionOverrides]=\"actionRuleProps\"\n [invalidRequiredFieldLabels]=\"invalidRequiredFieldLabels\"\n [suppressInvalidSubmitHint]=\"entityHydrationPending\"\n [editorialVisualContext]=\"hasEditorialVisualContext()\"\n (action)=\"onFormAction($event)\"></praxis-form-actions>\n }\n\n <!-- Tab Layout Navigation Bar -->\n @if (effectiveLayoutMode === 'tabs' && effectiveTabs.length > 1) {\n <nav class=\"prx-form-tabs\" [attr.data-appearance]=\"effectiveTabsAppearance\" role=\"tablist\" aria-label=\"Navega\u00E7\u00E3o em abas do formul\u00E1rio\">\n <div class=\"prx-form-tabs__tablist prx-form-tabs__tablist--scrollable\">\n @for (tab of effectiveTabs; track tab.id) {\n <button\n type=\"button\"\n role=\"tab\"\n class=\"prx-form-tabs__tab\"\n [class.prx-form-tabs__tab--active]=\"activeTabId === tab.id\"\n [attr.aria-selected]=\"activeTabId === tab.id\"\n [attr.aria-controls]=\"getTabAriaControls(tab)\"\n [attr.id]=\"'tab-' + tab.id\"\n [disabled]=\"tab.disabled\"\n [matTooltip]=\"tab.tooltip || null\"\n [matTooltipDisabled]=\"!tab.tooltip\"\n (click)=\"selectTab(tab.id)\"\n >\n @if (tab.icon) {\n <mat-icon class=\"prx-form-tabs__tab-icon\" [praxisIcon]=\"tab.icon\" aria-hidden=\"true\"></mat-icon>\n }\n <span class=\"prx-form-tabs__tab-label\">{{ tab.label }}</span>\n @if (tab.badge != null) {\n <span class=\"prx-form-tabs__tab-badge\">{{ tab.badge }}</span>\n }\n @if (getTabErrorCount(tab) > 0) {\n <span class=\"prx-form-tabs__tab-error-badge\" [attr.aria-label]=\"getTabErrorCount(tab) + ' erros na aba'\">\n {{ getTabErrorCount(tab) }}\n </span>\n }\n </button>\n }\n </div>\n </nav>\n }\n\n @for (section of (config.sections || []); track (section.id ?? $index); let sectionIndex = $index) {\n <div class=\"section-drop-wrapper\" [attr.data-section-id]=\"section.id\" [hidden]=\"!isSectionInActiveTab(section)\"\n [attr.role]=\"effectiveLayoutMode === 'tabs' ? 'tabpanel' : null\"\n [attr.id]=\"effectiveLayoutMode === 'tabs' ? ('section-tabpanel-' + section.id) : null\"\n [attr.aria-labelledby]=\"effectiveLayoutMode === 'tabs' ? ('tab-' + (getTabIdForSection(section) || section.id)) : null\">\n @if (isSectionVisible(section)) {\n <div #sectionEl class=\"form-section canvas-element\" data-canvas-type=\"section\" [attr.data-section-id]=\"section.id\"\n [attr.data-section-index]=\"sectionIndex\" (mouseenter)=\"onElementMouseEnter($event, 'section', section, sectionEl)\"\n (mouseleave)=\"onElementMouseLeave($event)\" (click)=\"onElementClick($event, 'section', section, sectionEl)\"\n [class.selected]=\"selectedElement?.domElement === sectionEl\"\n [class.hovered]=\"hoveredElement?.domElement === sectionEl && selectedElement?.domElement !== sectionEl\"\n [attr.data-section-appearance]=\"getSectionAppearance(section) || null\"\n [attr.data-section-divider]=\"isSectionDividerEnabled(section) ? 'true' : null\"\n [attr.data-presentation-preset]=\"effectivePresentation ? getSectionPresentationPreset(section) : null\"\n [class.form-section--corporate-dossier]=\"isSectionCorporateDossier(section)\"\n [class.form-section--editorial-card]=\"isSectionEditorialCard(section)\"\n [class.form-section--compact-presentation]=\"isSectionCompactPresentation(section)\"\n [style.marginBottom.px]=\"!isLastVisibleSection(section) ? getSectionGapBottom(section) : null\" [ngClass]=\"getSectionClasses(section)\"\n [ngStyle]=\"getSectionStyles(section)\">\n @if (!shouldHideSectionHeader(section)) {\n <div\n class=\"section-heading\"\n [class.align-center]=\"getSectionHeaderAlign(section) === 'center'\"\n [class.step-appearance]=\"getSectionAppearance(section) === 'step'\"\n [class.title-only]=\"isSectionHeaderTitleOnly(section)\"\n >\n <div class=\"section-heading-text\" [matTooltip]=\"getSectionHeaderTooltip(section) || null\"\n [matTooltipDisabled]=\"!getSectionHeaderTooltip(section)\">\n @if (getSectionStepLabel(section)) {\n <div class=\"section-step-label\" [class.align-center]=\"getSectionHeaderAlign(section) === 'center'\">\n {{ getSectionStepLabel(section) }}\n </div>\n }\n @if (getSectionTitle(section)) {\n <h3 class=\"section-title\" [class.title-large]=\"getSectionTitleStyle(section) === 'titleLarge'\"\n [class.title-medium]=\"getSectionTitleStyle(section) === 'titleMedium'\"\n [class.title-small]=\"getSectionTitleStyle(section) === 'titleSmall'\"\n [class.headline-small]=\"getSectionTitleStyle(section) === 'headlineSmall'\"\n [style.marginBottom.px]=\"getEffectiveSectionTitleGapBottom(section)\" [style.color]=\"getSectionTitleColor(section) || null\"\n [class.align-center]=\"getSectionHeaderAlign(section) === 'center'\"\n [attr.id]=\"sectionPanelId(section, sectionIndex) + '-title'\">\n @let sectionHeaderVisual = getSectionHeaderVisual(section);\n @let sectionHeaderAvatarSize = getSectionHeaderAvatarSize(section);\n @if (sectionHeaderVisual.kind === 'icon') {\n <mat-icon class=\"section-title-icon\" aria-hidden=\"true\" [praxisIcon]=\"sectionHeaderVisual.icon\"></mat-icon>\n }\n @if (sectionHeaderVisual.kind === 'image') {\n <img class=\"section-title-avatar section-title-avatar-image\" [class.size-sm]=\"sectionHeaderAvatarSize === 'sm'\"\n [class.size-md]=\"sectionHeaderAvatarSize === 'md'\" [class.size-lg]=\"sectionHeaderAvatarSize === 'lg'\"\n [src]=\"sectionHeaderVisual.src\" [alt]=\"sectionHeaderVisual.alt\" />\n }\n @if (sectionHeaderVisual.kind === 'initials') {\n <span class=\"section-title-avatar section-title-avatar-text\" [class.size-sm]=\"sectionHeaderAvatarSize === 'sm'\"\n [class.size-md]=\"sectionHeaderAvatarSize === 'md'\" [class.size-lg]=\"sectionHeaderAvatarSize === 'lg'\" aria-hidden=\"true\">\n {{ sectionHeaderVisual.text }}\n </span>\n @if (sectionHeaderVisual.ariaLabel) {\n <span class=\"section-title-avatar-sr-only\">{{ sectionHeaderVisual.ariaLabel }}</span>\n }\n }\n @if (sectionHeaderVisual.kind === 'placeholder') {\n <span class=\"section-title-avatar section-title-avatar-placeholder\" [class.size-sm]=\"sectionHeaderAvatarSize === 'sm'\"\n [class.size-md]=\"sectionHeaderAvatarSize === 'md'\" [class.size-lg]=\"sectionHeaderAvatarSize === 'lg'\" aria-hidden=\"true\">\n @if (sectionHeaderVisual.icon) {\n <mat-icon aria-hidden=\"true\" [praxisIcon]=\"sectionHeaderVisual.icon\"></mat-icon>\n }\n @if (sectionHeaderVisual.text) {\n <span>{{ sectionHeaderVisual.text }}</span>\n }\n </span>\n @if (sectionHeaderVisual.ariaLabel) {\n <span class=\"section-title-avatar-sr-only\">{{ sectionHeaderVisual.ariaLabel }}</span>\n }\n }\n {{ getSectionTitle(section) }}\n @if (enableCustomization) {\n <button type=\"button\" class=\"inline-edit-btn\" praxisIconButton=\"edit\" size=\"dense\" (click)=\"openSectionEditor(section, 'title')\"\n aria-label=\"Editar t\u00EDtulo da se\u00E7\u00E3o\" matTooltip=\"Editar t\u00EDtulo\">\n </button>\n }\n </h3>\n }\n @if (getSectionDescription(section)) {\n <p class=\"section-description\" [class.body-large]=\"getSectionDescriptionStyle(section) === 'bodyLarge'\"\n [class.body-medium]=\"getSectionDescriptionStyle(section) === 'bodyMedium'\"\n [class.body-small]=\"getSectionDescriptionStyle(section) === 'bodySmall'\"\n [style.marginBottom.px]=\"getSectionDescriptionGapBottom(section) ?? 8\" [style.color]=\"getSectionDescriptionColor(section) || null\"\n [class.align-center]=\"getSectionHeaderAlign(section) === 'center'\">\n {{ getSectionDescription(section) }}\n @if (enableCustomization) {\n <button type=\"button\" class=\"inline-edit-btn\" praxisIconButton=\"edit\" size=\"dense\"\n (click)=\"openSectionEditor(section, 'description')\" aria-label=\"Editar descri\u00E7\u00E3o da se\u00E7\u00E3o\"\n matTooltip=\"Editar descri\u00E7\u00E3o\">\n </button>\n }\n </p>\n }\n </div>\n @if (getSectionHeaderActions(section).length) {\n <div class=\"section-heading-actions\" [class.align-center]=\"getSectionHeaderAlign(section) === 'center'\">\n @for (action of getSectionHeaderActions(section); track action.id) {\n <button\n type=\"button\"\n class=\"section-heading-action-btn\"\n [praxisIconButton]=\"action.icon\"\n size=\"compact\"\n [busy]=\"action.loading\"\n [disabled]=\"isSectionHeaderActionDisabled(action)\"\n [matTooltip]=\"getSectionHeaderActionTooltip(action)\"\n [attr.aria-label]=\"action.label\"\n [attr.aria-busy]=\"action.loading ? 'true' : null\"\n [ngClass]=\"getSectionHeaderActionNgClass(action)\"\n [ngStyle]=\"getSectionHeaderActionStyles(action)\"\n (click)=\"onSectionHeaderActionClick(section, action, $event)\"\n >\n @if (action.loading) {\n <span class=\"section-heading-action-sr-only\">{{ getSectionHeaderActionLoadingLabel(action) }}</span>\n }\n </button>\n }\n </div>\n }\n @if (isSectionCollapsible(section)) {\n <button type=\"button\" class=\"section-collapse-btn\" [praxisIconButton]=\"isSectionCollapsed(section) ? 'expand_more' : 'expand_less'\" size=\"compact\"\n (click)=\"toggleSectionCollapse($event, section)\" [attr.aria-expanded]=\"!isSectionCollapsed(section)\"\n [attr.aria-controls]=\"sectionPanelId(section, sectionIndex)\"\n [attr.aria-label]=\"isSectionCollapsed(section) ? 'Expandir se\u00E7\u00E3o' : 'Recolher se\u00E7\u00E3o'\">\n </button>\n }\n </div>\n }\n\n <div class=\"section-body\" [class.collapsed]=\"isSectionCollapsed(section)\"\n [attr.id]=\"sectionPanelId(section, sectionIndex)\"\n [attr.role]=\"getSectionTitle(section) ? 'region' : null\"\n [attr.aria-labelledby]=\"getSectionTitle(section) ? sectionPanelId(section, sectionIndex) + '-title' : null\">\n @if (!isSectionCollapsed(section)) {\n @for (row of section.rows; track (row.id ?? $index); let rowIndex = $index) {\n @if (isRowVisible(row)) {\n <div class=\"row-drop-wrapper\" [attr.data-section-id]=\"section.id\">\n <div #rowEl class=\"form-row grid-12 canvas-element\" data-canvas-type=\"row\" [attr.data-row-index]=\"rowIndex\"\n [attr.data-section-id]=\"section.id\" [attr.data-row-id]=\"row.id\" [style.--pfx-grid-gap.px]=\"getRowGap(row)\"\n [style.--pfx-field-gap.px]=\"getRowRowGap(row)\"\n [style.--pfx-mount-index]=\"rowIndex\"\n [style.marginBottom.px]=\"rowIndex < section.rows.length - 1 ? (getRowRowGap(row) ?? null) : null\"\n [ngClass]=\"getRowClasses(row)\" [ngStyle]=\"getRowStyles(row)\"\n (mouseenter)=\"onElementMouseEnter($event, 'row', row, rowEl)\" (mouseleave)=\"onElementMouseLeave($event)\"\n (click)=\"onElementClick($event, 'row', row, rowEl)\" [class.selected]=\"selectedElement?.domElement === rowEl\"\n [class.hovered]=\"hoveredElement?.domElement === rowEl && selectedElement?.domElement !== rowEl\">\n @for (column of row.columns; track (column.id ?? $index); let colIndex = $index) {\n @if (isColumnVisible(column)) {\n <div class=\"column-drop-wrapper\" [attr.data-section-id]=\"section.id\" [attr.data-row-id]=\"row.id\">\n <div #colEl class=\"form-column canvas-element\" [ngClass]=\"getColumnClasses(column, row)\"\n [style.padding.px]=\"getColumnPadding(column)\" [style.--pfx-field-gap.px]=\"getRowRowGap(row)\"\n [ngStyle]=\"getColumnStyles(column)\" [attr.data-testid]=\"column.testId || null\"\n [attr.data-row-gap]=\"getRowRowGap(row)\" data-canvas-type=\"column\" [attr.data-column-index]=\"colIndex\"\n [attr.data-row-index]=\"rowIndex\" [attr.data-section-id]=\"section.id\" [attr.data-row-id]=\"row.id\"\n [attr.data-column-id]=\"column.id\" (mouseenter)=\"onElementMouseEnter($event, 'column', column, colEl)\"\n (mouseleave)=\"onElementMouseLeave($event)\" (click)=\"onElementClick($event, 'column', column, colEl)\"\n [class.selected]=\"selectedElement?.domElement === colEl\"\n [class.hovered]=\"hoveredElement?.domElement === colEl && selectedElement?.domElement !== colEl\">\n @for (renderItem of getColumnRenderItems(column); track renderItem.id) {\n @if (renderItem.kind === 'fields') {\n <ng-container dynamicFieldLoader [fields]=\"getRenderableFieldsForLoader(renderItem.fields)\" [formGroup]=\"form\"\n [enableExternalControlBinding]=\"true\"\n [readonlyMode]=\"effectiveReadonly\"\n [disabledMode]=\"effectiveDisabledMode\"\n [presentationMode]=\"presentationForLoader\" [visible]=\"visibleGlobal === null ? null : visibleGlobal\"\n [canvasMode]=\"enableCustomization\" (canvasMouseEnter)=\"onFieldMouseEnter($event)\"\n (canvasMouseLeave)=\"onFieldMouseLeave($event)\" (canvasClick)=\"onFieldClick($event)\"\n (canvasFocus)=\"onFieldFocus($event)\"\n (renderError)=\"onFieldRenderError($event)\">\n </ng-container>\n } @else {\n <praxis-rich-content\n class=\"form-layout-rich-content\"\n [ngClass]=\"renderItem.className || null\"\n [ngStyle]=\"renderItem.style || null\"\n [document]=\"renderItem.document\"\n [layout]=\"renderItem.layout\"\n [rootClassName]=\"renderItem.rootClassName || ''\"\n [context]=\"getEditorialRichContentContext()\"\n [hostCapabilities]=\"richContentHostCapabilities\"\n ></praxis-rich-content>\n }\n }\n </div>\n </div>\n } }\n </div>\n </div>\n }\n }\n } @else {\n <div class=\"section-collapsed-placeholder\">\n <mat-icon aria-hidden=\"true\" [praxisIcon]=\"'unfold_more'\"></mat-icon>\n <span>{{ getSectionCollapsedSummary(section) }}</span>\n </div>\n }\n @if (isLastVisibleSection(section) && beforeActionsPlacement === 'insideLastSection' && formBlocksBeforeActions?.nodes?.length) {\n <section class=\"form-editorial-blocks form-editorial-blocks-before-actions\" data-editorial-placement=\"beforeActions\">\n <praxis-rich-content\n [document]=\"formBlocksBeforeActionsDocument\"\n [context]=\"getEditorialRichContentContext()\"\n [hostCapabilities]=\"richContentHostCapabilities\"\n ></praxis-rich-content>\n </section>\n }\n @if (actionPlacement === 'insideLastSection' && isLastVisibleSection(section) && !(effectivePresentation\n || effectiveReadonly)) {\n <praxis-form-actions data-actions-placement=\"insideLastSection\" [actions]=\"effectiveActions\"\n [isSubmitting]=\"submitting\" [formIsValid]=\"effectiveFormIsValid\" [submitError]=\"submitError\" [formId]=\"formId\"\n [actionOverrides]=\"actionRuleProps\" [invalidRequiredFieldLabels]=\"invalidRequiredFieldLabels\"\n [suppressInvalidSubmitHint]=\"entityHydrationPending\"\n [editorialVisualContext]=\"hasEditorialVisualContext()\"\n (action)=\"onFormAction($event)\"></praxis-form-actions>\n }\n </div>\n <!-- Overlay de bloqueio durante submiss\u00E3o -->\n @if (submitting) {\n <div class=\"form-blocking-overlay\" aria-live=\"polite\">\n <mat-progress-spinner\n diameter=\"40\"\n color=\"primary\"\n [attr.aria-label]=\"config.messages?.loading?.submit || 'Salvando formul\u00E1rio'\"\n ></mat-progress-spinner>\n <p>{{ config.messages?.loading?.submit || 'Salvando...' }}</p>\n </div>\n }\n </div>\n\n @if (enableCustomization && selectedElement?.domElement === sectionEl) {\n <div class=\"add-section-container\">\n <div class=\"add-section-line\"></div>\n <button mat-fab color=\"primary\" aria-label=\"Adicionar nova se\u00E7\u00E3o\" (click)=\"addNewSectionAfter(sectionIndex)\"\n matTooltip=\"Adicionar nova se\u00E7\u00E3o aqui\">\n <mat-icon [praxisIcon]=\"'add'\"></mat-icon>\n </button>\n <div class=\"add-section-line\"></div>\n </div>\n }\n }\n </div>\n }\n\n @if (beforeActionsPlacement !== 'insideLastSection' && formBlocksBeforeActions?.nodes?.length) {\n <section class=\"form-editorial-blocks form-editorial-blocks-before-actions\" data-editorial-placement=\"beforeActions\">\n <praxis-rich-content\n [document]=\"formBlocksBeforeActionsDocument\"\n [context]=\"getEditorialRichContentContext()\"\n [hostCapabilities]=\"richContentHostCapabilities\"\n ></praxis-rich-content>\n </section>\n }\n\n @if (actionPlacement === 'afterSections' && !(effectivePresentation || effectiveReadonly)) {\n <praxis-form-actions data-actions-placement=\"afterSections\" [actions]=\"effectiveActions\" [isSubmitting]=\"submitting\"\n [formIsValid]=\"effectiveFormIsValid\" [submitError]=\"submitError\" [formId]=\"formId\"\n [actionOverrides]=\"actionRuleProps\" [invalidRequiredFieldLabels]=\"invalidRequiredFieldLabels\"\n [suppressInvalidSubmitHint]=\"entityHydrationPending\"\n [editorialVisualContext]=\"hasEditorialVisualContext()\"\n (action)=\"onFormAction($event)\"></praxis-form-actions>\n }\n\n @if (formBlocksAfter?.nodes?.length) {\n <section class=\"form-editorial-blocks form-editorial-blocks-after\" data-editorial-placement=\"after\">\n <praxis-rich-content\n [document]=\"formBlocksAfterDocument\"\n [context]=\"getEditorialRichContentContext()\"\n [hostCapabilities]=\"richContentHostCapabilities\"\n ></praxis-rich-content>\n </section>\n }\n </form>\n </div>\n }\n @if (showAiAssistant && !enableCustomization && (mode === 'view' || mode === 'presentation' || mode === 'dossier') && !shouldShowContextEmptyState()) {\n <div class=\"ai-floating-assistant\">\n <button type=\"button\" praxisIconButton=\"auto_awesome\" size=\"compact\" (click)=\"openAiAssistant()\" [disabled]=\"isLoading || entityHydrationPending || entityReadFailed\"\n [attr.data-testid]=\"aiAssistantTriggerTestId('view-floating')\"\n aria-label=\"Abrir copiloto semantico Praxis do formulario\"\n matTooltip=\"Pedir ajuda sobre este formul\u00E1rio\">\n </button>\n </div>\n }\n @if (showAiAssistant && aiAssistantOpen && aiAssistantViewState) {\n <praxis-ai-assistant-shell\n [labels]=\"aiAssistantLabels\"\n [mode]=\"aiAssistantViewState.mode\"\n [state]=\"aiAssistantViewState.state\"\n [contextItems]=\"aiAssistantViewState.contextItems\"\n [attachments]=\"aiAssistantViewState.attachments\"\n [messages]=\"aiAssistantViewState.messages\"\n [quickReplies]=\"aiAssistantViewState.quickReplies\"\n [prompt]=\"aiAssistantPrompt\"\n [statusText]=\"aiAssistantViewState.statusText\"\n [errorText]=\"aiAssistantViewState.errorText\"\n [busy]=\"aiAssistantViewState.state === 'processing' || aiAssistantViewState.state === 'applying'\"\n [canApply]=\"aiAssistantViewState.canApply\"\n [layout]=\"aiAssistantLayout\"\n testIdPrefix=\"dynamic-form-ai-assistant\"\n panelTestId=\"dynamic-form-ai-assistant-panel\"\n submitTestId=\"dynamic-form-ai-assistant-submit\"\n applyTestId=\"dynamic-form-ai-assistant-apply\"\n (promptChange)=\"onAiAssistantPromptChange($event)\"\n (submitPrompt)=\"onAiAssistantSubmit($event)\"\n (apply)=\"onAiAssistantApply()\"\n (retryTurn)=\"onAiAssistantRetry()\"\n (cancelTurn)=\"onAiAssistantCancel()\"\n (quickReply)=\"onAiAssistantQuickReply($event)\"\n (editMessage)=\"onAiAssistantEditMessage($event)\"\n (resendMessage)=\"onAiAssistantResendMessage($event)\"\n (layoutChange)=\"onAiAssistantLayoutChange($event)\"\n (close)=\"closeAiAssistant()\"\n ></praxis-ai-assistant-shell>\n }\n }\n", styles: ["@charset \"UTF-8\";.span-xs-1{grid-column:span 1}.span-xs-2{grid-column:span 2}.span-xs-3{grid-column:span 3}.span-xs-4{grid-column:span 4}.span-xs-5{grid-column:span 5}.span-xs-6{grid-column:span 6}.span-xs-7{grid-column:span 7}.span-xs-8{grid-column:span 8}.span-xs-9{grid-column:span 9}.span-xs-10{grid-column:span 10}.span-xs-11{grid-column:span 11}.span-xs-12{grid-column:span 12}.offset-xs-0{margin-left:0%}.offset-xs-1{margin-left:calc(1 / 12 * 100%)}.offset-xs-2{margin-left:calc(2 / 12 * 100%)}.offset-xs-3{margin-left:25%}.offset-xs-4{margin-left:calc(4 / 12 * 100%)}.offset-xs-5{margin-left:calc(5 / 12 * 100%)}.offset-xs-6{margin-left:50%}.offset-xs-7{margin-left:calc(7 / 12 * 100%)}.offset-xs-8{margin-left:calc(8 / 12 * 100%)}.offset-xs-9{margin-left:75%}.offset-xs-10{margin-left:calc(10 / 12 * 100%)}.offset-xs-11{margin-left:calc(11 / 12 * 100%)}.order-xs--12{order:-12}.order-xs--11{order:-11}.order-xs--10{order:-10}.order-xs--9{order:-9}.order-xs--8{order:-8}.order-xs--7{order:-7}.order-xs--6{order:-6}.order-xs--5{order:-5}.order-xs--4{order:-4}.order-xs--3{order:-3}.order-xs--2{order:-2}.order-xs--1{order:-1}.order-xs-0{order:0}.order-xs-1{order:1}.order-xs-2{order:2}.order-xs-3{order:3}.order-xs-4{order:4}.order-xs-5{order:5}.order-xs-6{order:6}.order-xs-7{order:7}.order-xs-8{order:8}.order-xs-9{order:9}.order-xs-10{order:10}.order-xs-11{order:11}.order-xs-12{order:12}.hidden-xs{display:none}@container praxis-form-row (min-width: 600px){.span-sm-1{grid-column:span 1}.span-sm-2{grid-column:span 2}.span-sm-3{grid-column:span 3}.span-sm-4{grid-column:span 4}.span-sm-5{grid-column:span 5}.span-sm-6{grid-column:span 6}.span-sm-7{grid-column:span 7}.span-sm-8{grid-column:span 8}.span-sm-9{grid-column:span 9}.span-sm-10{grid-column:span 10}.span-sm-11{grid-column:span 11}.span-sm-12{grid-column:span 12}.offset-sm-0{margin-left:0%}.offset-sm-1{margin-left:calc(1 / 12 * 100%)}.offset-sm-2{margin-left:calc(2 / 12 * 100%)}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:calc(4 / 12 * 100%)}.offset-sm-5{margin-left:calc(5 / 12 * 100%)}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:calc(7 / 12 * 100%)}.offset-sm-8{margin-left:calc(8 / 12 * 100%)}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:calc(10 / 12 * 100%)}.offset-sm-11{margin-left:calc(11 / 12 * 100%)}.order-sm--12{order:-12}.order-sm--11{order:-11}.order-sm--10{order:-10}.order-sm--9{order:-9}.order-sm--8{order:-8}.order-sm--7{order:-7}.order-sm--6{order:-6}.order-sm--5{order:-5}.order-sm--4{order:-4}.order-sm--3{order:-3}.order-sm--2{order:-2}.order-sm--1{order:-1}.order-sm-0{order:0}.order-sm-1{order:1}.order-sm-2{order:2}.order-sm-3{order:3}.order-sm-4{order:4}.order-sm-5{order:5}.order-sm-6{order:6}.order-sm-7{order:7}.order-sm-8{order:8}.order-sm-9{order:9}.order-sm-10{order:10}.order-sm-11{order:11}.order-sm-12{order:12}.hidden-sm{display:none}}@container praxis-form-row (min-width: 900px){.span-md-1{grid-column:span 1}.span-md-2{grid-column:span 2}.span-md-3{grid-column:span 3}.span-md-4{grid-column:span 4}.span-md-5{grid-column:span 5}.span-md-6{grid-column:span 6}.span-md-7{grid-column:span 7}.span-md-8{grid-column:span 8}.span-md-9{grid-column:span 9}.span-md-10{grid-column:span 10}.span-md-11{grid-column:span 11}.span-md-12{grid-column:span 12}.offset-md-0{margin-left:0%}.offset-md-1{margin-left:calc(1 / 12 * 100%)}.offset-md-2{margin-left:calc(2 / 12 * 100%)}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:calc(4 / 12 * 100%)}.offset-md-5{margin-left:calc(5 / 12 * 100%)}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:calc(7 / 12 * 100%)}.offset-md-8{margin-left:calc(8 / 12 * 100%)}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:calc(10 / 12 * 100%)}.offset-md-11{margin-left:calc(11 / 12 * 100%)}.order-md--12{order:-12}.order-md--11{order:-11}.order-md--10{order:-10}.order-md--9{order:-9}.order-md--8{order:-8}.order-md--7{order:-7}.order-md--6{order:-6}.order-md--5{order:-5}.order-md--4{order:-4}.order-md--3{order:-3}.order-md--2{order:-2}.order-md--1{order:-1}.order-md-0{order:0}.order-md-1{order:1}.order-md-2{order:2}.order-md-3{order:3}.order-md-4{order:4}.order-md-5{order:5}.order-md-6{order:6}.order-md-7{order:7}.order-md-8{order:8}.order-md-9{order:9}.order-md-10{order:10}.order-md-11{order:11}.order-md-12{order:12}.hidden-md{display:none}}@container praxis-form-row (min-width: 1200px){.span-lg-1{grid-column:span 1}.span-lg-2{grid-column:span 2}.span-lg-3{grid-column:span 3}.span-lg-4{grid-column:span 4}.span-lg-5{grid-column:span 5}.span-lg-6{grid-column:span 6}.span-lg-7{grid-column:span 7}.span-lg-8{grid-column:span 8}.span-lg-9{grid-column:span 9}.span-lg-10{grid-column:span 10}.span-lg-11{grid-column:span 11}.span-lg-12{grid-column:span 12}.offset-lg-0{margin-left:0%}.offset-lg-1{margin-left:calc(1 / 12 * 100%)}.offset-lg-2{margin-left:calc(2 / 12 * 100%)}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:calc(4 / 12 * 100%)}.offset-lg-5{margin-left:calc(5 / 12 * 100%)}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:calc(7 / 12 * 100%)}.offset-lg-8{margin-left:calc(8 / 12 * 100%)}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:calc(10 / 12 * 100%)}.offset-lg-11{margin-left:calc(11 / 12 * 100%)}.order-lg--12{order:-12}.order-lg--11{order:-11}.order-lg--10{order:-10}.order-lg--9{order:-9}.order-lg--8{order:-8}.order-lg--7{order:-7}.order-lg--6{order:-6}.order-lg--5{order:-5}.order-lg--4{order:-4}.order-lg--3{order:-3}.order-lg--2{order:-2}.order-lg--1{order:-1}.order-lg-0{order:0}.order-lg-1{order:1}.order-lg-2{order:2}.order-lg-3{order:3}.order-lg-4{order:4}.order-lg-5{order:5}.order-lg-6{order:6}.order-lg-7{order:7}.order-lg-8{order:8}.order-lg-9{order:9}.order-lg-10{order:10}.order-lg-11{order:11}.order-lg-12{order:12}.hidden-lg{display:none}}@container praxis-form-row (min-width: 1536px){.span-xl-1{grid-column:span 1}.span-xl-2{grid-column:span 2}.span-xl-3{grid-column:span 3}.span-xl-4{grid-column:span 4}.span-xl-5{grid-column:span 5}.span-xl-6{grid-column:span 6}.span-xl-7{grid-column:span 7}.span-xl-8{grid-column:span 8}.span-xl-9{grid-column:span 9}.span-xl-10{grid-column:span 10}.span-xl-11{grid-column:span 11}.span-xl-12{grid-column:span 12}.offset-xl-0{margin-left:0%}.offset-xl-1{margin-left:calc(1 / 12 * 100%)}.offset-xl-2{margin-left:calc(2 / 12 * 100%)}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:calc(4 / 12 * 100%)}.offset-xl-5{margin-left:calc(5 / 12 * 100%)}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:calc(7 / 12 * 100%)}.offset-xl-8{margin-left:calc(8 / 12 * 100%)}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:calc(10 / 12 * 100%)}.offset-xl-11{margin-left:calc(11 / 12 * 100%)}.order-xl--12{order:-12}.order-xl--11{order:-11}.order-xl--10{order:-10}.order-xl--9{order:-9}.order-xl--8{order:-8}.order-xl--7{order:-7}.order-xl--6{order:-6}.order-xl--5{order:-5}.order-xl--4{order:-4}.order-xl--3{order:-3}.order-xl--2{order:-2}.order-xl--1{order:-1}.order-xl-0{order:0}.order-xl-1{order:1}.order-xl-2{order:2}.order-xl-3{order:3}.order-xl-4{order:4}.order-xl-5{order:5}.order-xl-6{order:6}.order-xl-7{order:7}.order-xl-8{order:8}.order-xl-9{order:9}.order-xl-10{order:10}.order-xl-11{order:11}.order-xl-12{order:12}.hidden-xl{display:none}}.canvas-mode-enabled{--canvas-hit: 14px}.canvas-mode-enabled .canvas-element{position:relative;z-index:0;border-radius:8px;outline:2px solid transparent;outline-offset:2px;transition:outline-color .2s ease,outline-style .2s ease}.canvas-mode-enabled .canvas-element:before{content:\"\";position:absolute;inset:calc(-1 * var(--canvas-hit));pointer-events:none;border-radius:inherit;background:transparent}.canvas-mode-enabled .canvas-element[data-canvas-type=section]{--outline-color: var(--md-sys-color-primary)}.canvas-mode-enabled .canvas-element[data-canvas-type=row]{--outline-color: var(--md-sys-color-secondary)}.canvas-mode-enabled .canvas-element[data-canvas-type=column],.canvas-mode-enabled .canvas-element[data-canvas-type=field]{--outline-color: var(--md-sys-color-tertiary)}.canvas-mode-enabled .canvas-element[data-canvas-type=actions]{--outline-color: var(--md-sys-color-primary)}.canvas-mode-enabled .canvas-element.hovered:not(.selected){outline-color:var(--outline-color, var(--md-sys-color-primary));outline-style:dashed}.canvas-mode-enabled .canvas-element.selected{outline-color:var(--outline-color, var(--md-sys-color-primary));outline-style:solid;box-shadow:0 0 0 2px var(--outline-color, var(--md-sys-color-primary))}.canvas-mode-enabled .canvas-element.hovered{z-index:var(--praxis-layer-authoring-hover, 300)}.canvas-mode-enabled .canvas-element.selected{z-index:var(--praxis-layer-authoring-selected, 320)}.section-drop-wrapper,.row-drop-wrapper,.column-drop-wrapper{display:contents}.add-section-container{display:flex;align-items:center;justify-content:center;padding:.5rem 0;margin:-.5rem 0;position:relative;z-index:var(--praxis-layer-authoring-insert, 280)}.add-section-container .add-section-line{flex-grow:1;height:1px;background:repeating-linear-gradient(90deg,var(--md-sys-color-outline-variant),var(--md-sys-color-outline-variant) 4px,transparent 4px,transparent 8px)}.add-section-container button{margin:0 1rem;transform:scale(.85)}:host{display:block;position:relative;--pfx-editorial-form-radius: var(--pfx-form-section-radius, 8px);--pfx-editorial-form-border: var( --pfx-form-stroke, var(--pdx-color-border-subtle, var(--md-sys-color-outline-variant)) );--pfx-editorial-form-surface: var( --pfx-form-section-surface, var(--pdx-color-surface, var(--md-sys-color-surface-container)) );--pfx-editorial-form-surface-muted: var( --pdx-color-surface-muted, var(--md-sys-color-surface-container-low) );--pfx-form-shell-surface: color-mix( in srgb, var(--pfx-editorial-form-surface) 36%, transparent );--pfx-form-section-divider: color-mix( in srgb, var(--pfx-editorial-form-border) 68%, transparent );--pfx-form-footer-surface: color-mix( in srgb, var(--pfx-editorial-form-surface) 70%, var(--pfx-editorial-form-surface-muted) 30% );--pfx-form-footer-border: color-mix( in srgb, var(--pfx-editorial-form-border) 76%, transparent );--pfx-form-shell-padding: clamp(.9rem, 1.4vw, 1.2rem)}.form-config-controls{position:relative;top:auto;margin:0;display:flex;align-items:center;gap:.35rem;z-index:60;background:color-mix(in srgb,var(--pfx-form-shell-surface) 88%,var(--md-sys-color-surface) 12%);padding:8px var(--pfx-form-shell-padding);border:1px solid var(--pfx-form-footer-border);border-bottom-color:color-mix(in srgb,var(--pfx-form-footer-border) 72%,transparent);border-radius:var(--pfx-editorial-form-radius) var(--pfx-editorial-form-radius) 0 0;-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);box-shadow:none;min-width:0;justify-content:flex-end;pointer-events:none;opacity:.96;transition:opacity .16s ease,border-color .16s ease}.form-config-controls>*{pointer-events:auto}.form-config-controls:hover,.form-config-controls:focus-within{opacity:1;border-color:color-mix(in srgb,var(--md-sys-color-primary) 26%,var(--md-sys-color-outline-variant) 74%)}.form-config-controls .praxis-icon-button{color:var(--md-sys-color-on-surface-variant)}.form-config-controls .praxis-icon-button:hover{color:var(--md-sys-color-primary)}.ai-floating-assistant{position:sticky;right:0;bottom:12px;margin-top:14px;margin-left:auto;width:fit-content;z-index:70;pointer-events:none}.ai-floating-assistant button{pointer-events:auto;display:inline-flex}.ai-floating-assistant .ai-trigger-btn{box-shadow:0 12px 28px #0f172a24}.config-button{color:var(--md-sys-color-primary)}.form-loading{display:flex;flex-direction:column;align-items:stretch;justify-content:center;padding:1.25rem;text-align:left;color:var(--md-sys-color-on-surface);gap:1rem;min-height:220px;border:1px solid color-mix(in srgb,var(--md-sys-color-primary) 14%,var(--md-sys-color-outline-variant) 86%);border-radius:8px;background:linear-gradient(135deg,color-mix(in srgb,var(--md-sys-color-primary) 8%,transparent),transparent 42%),color-mix(in srgb,var(--md-sys-color-surface-container-low) 78%,var(--md-sys-color-surface) 22%);box-shadow:0 12px 28px #0f172a14}.entity-read-region{position:relative;min-width:0}.entity-read-feedback{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:flex-start;gap:1rem;padding:2rem 1rem;box-sizing:border-box;text-align:center;color:var(--md-sys-color-on-surface)}.entity-read-feedback p{margin:0;max-width:40ch}.form-loading-header{display:flex;align-items:center;gap:.85rem}.form-loading-copy{min-width:0}.form-loading p{margin:0}.form-loading-title{font-weight:700;color:var(--md-sys-color-on-surface)}.form-loading-subtitle{margin-top:.2rem;font-size:.875rem;color:var(--md-sys-color-on-surface-variant)}.form-loading-skeleton{display:grid;gap:.7rem}.form-loading-line,.form-loading-field{display:block;overflow:hidden;position:relative;border-radius:6px;background:color-mix(in srgb,var(--md-sys-color-surface-container-high) 74%,var(--md-sys-color-primary) 6%)}.form-loading-line:after,.form-loading-field:after{content:\"\";position:absolute;inset:0;transform:translate(-100%);background:linear-gradient(90deg,transparent,color-mix(in srgb,var(--md-sys-color-primary) 16%,var(--md-sys-color-on-surface) 18%),transparent);animation:form-loading-shimmer 1.4s ease-in-out infinite}.form-loading-line{height:12px}.form-loading-line-title{width:min(42%,240px)}.form-loading-line-short{width:min(64%,360px)}.form-loading-field{height:44px}.form-loading-field-wide{height:72px}@keyframes form-loading-shimmer{to{transform:translate(100%)}}@media(prefers-reduced-motion:reduce){.form-loading-line:after,.form-loading-field:after{animation:none;transform:none;opacity:.28}}.form-error{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:3rem;text-align:center;color:var(--md-sys-color-error);gap:1rem;border:1px solid var(--md-sys-color-error);border-radius:8px;background-color:var(--md-sys-color-error-container);margin:1rem;box-shadow:0 12px 30px #7f1d1d1f}.form-error h3{margin:0;color:var(--md-sys-color-on-error-container)}.form-error p{margin:0;color:var(--md-sys-color-on-error-container);opacity:.8}.form-error button{margin-top:.5rem}.pfx-form-info-banner{margin-bottom:14px;padding:12px 14px;border-radius:16px;border:1px solid color-mix(in srgb,var(--md-sys-color-primary) 18%,var(--md-sys-color-outline-variant) 82%);background:color-mix(in srgb,var(--md-sys-color-primary-container) 24%,var(--md-sys-color-surface) 76%);color:var(--md-sys-color-on-surface);display:flex;align-items:flex-start;justify-content:space-between;gap:14px}.pfx-form-info-banner .text{font-size:.92rem;line-height:1.5;font-weight:600}.pfx-form-info-banner .actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:8px}.praxis-dynamic-form{display:flex;flex-direction:column;max-width:100%;min-width:0;transition:all .3s ease;position:relative;font-family:inherit;font-size:inherit;color:inherit;--pfx-editorial-form-surface: var( --pfx-form-section-surface, var(--md-sys-color-surface-container) );--pfx-editorial-form-surface-muted: var( --pdx-color-surface-muted, var(--md-sys-color-surface-container-low) );--pfx-editorial-form-border: var( --pfx-form-stroke, var(--pdx-color-border-subtle, var(--md-sys-color-outline-variant)) );--pfx-editorial-form-text: var( --pdx-color-text-primary, var(--md-sys-color-on-surface) );--pfx-editorial-form-text-muted: var( --pdx-color-text-secondary, var(--md-sys-color-on-surface-variant) );--pfx-editorial-form-field-surface: color-mix( in srgb, var(--pfx-editorial-form-surface-muted) 76%, var(--pfx-editorial-form-surface) 24% );--pfx-editorial-form-field-outline: color-mix( in srgb, var(--pfx-editorial-form-border) 88%, transparent );--pfx-editorial-form-accent: var( --pdx-color-primary, var(--md-sys-color-primary) );--pfx-editorial-form-accent-text: var(--md-sys-color-on-primary);--pfx-editorial-form-radius: var(--pfx-form-section-radius, 8px);--pfx-editorial-form-field-radius: var(--pfx-form-field-radius, 4px);--pfx-editorial-form-border-width: 1px;--pfx-editorial-form-field-border-width: 1px;--pfx-editorial-form-shadow: none;--pfx-form-shell-surface: color-mix( in srgb, var(--pfx-editorial-form-surface) 36%, transparent );--pfx-form-section-surface-flat: color-mix( in srgb, var(--pfx-editorial-form-surface) 78%, var(--pfx-editorial-form-surface-muted) 22% );--pfx-form-section-divider: color-mix( in srgb, var(--pfx-editorial-form-border) 68%, transparent );--pfx-form-label-strong: color-mix( in srgb, var(--pfx-editorial-form-text) 96%, white 4% );--pfx-form-label-muted: color-mix( in srgb, var(--pfx-editorial-form-text-muted) 92%, var(--pfx-editorial-form-text) 8% );--pfx-form-field-surface-rest: color-mix( in srgb, var(--pfx-editorial-form-field-surface) 82%, var(--pfx-editorial-form-surface) 18% );--pfx-form-field-surface-focus: color-mix( in srgb, var(--pfx-editorial-form-accent) 4%, var(--pfx-form-field-surface-rest) 96% );--pfx-form-field-min-height: 48px;--pfx-form-section-padding: clamp(1.1rem, 1.8vw, 1.5rem);--pfx-form-section-gap: 22px;--pdx-presentation-label-size: var(--pfx-pres-compact-label-size, .78rem);--pdx-presentation-value-size: var(--pfx-pres-compact-value-size, 1rem);--pdx-presentation-icon-size: var(--pfx-pres-icon-size, 18px);--pdx-presentation-row-gap: var(--pfx-pres-row-gap, .5rem);--pdx-presentation-column-gap: var(--pfx-pres-column-gap, .5rem);--pdx-presentation-section-gap: var(--pfx-pres-section-gap, .75rem);--pdx-presentation-label-width: var(--pfx-pres-label-width, 220px);--pdx-presentation-flag-height: var(--pfx-pres-boolean-min-height, 22px);--pdx-presentation-flag-radius: var(--pfx-pres-boolean-radius, 999px);--pdx-presentation-flag-padding: var(--pfx-pres-boolean-padding, 0 8px);--pdx-presentation-flag-active-color: var( --pfx-pres-boolean-active-color, var(--md-sys-color-primary) );--pdx-presentation-flag-active-bg: var( --pfx-pres-boolean-active-bg, color-mix(in srgb, var(--md-sys-color-primary) 14%, transparent) );--pdx-presentation-flag-inactive-color: var( --pfx-pres-boolean-inactive-color, var(--md-sys-color-on-surface-variant) );--pdx-presentation-flag-inactive-bg: var( --pfx-pres-boolean-inactive-bg, color-mix(in srgb, var(--md-sys-color-outline-variant) 34%, transparent) );--pfx-form-footer-surface: color-mix( in srgb, var(--pfx-editorial-form-surface) 70%, var(--pfx-editorial-form-surface-muted) 30% );--pfx-form-footer-border: color-mix( in srgb, var(--pfx-editorial-form-border) 76%, transparent )}.praxis-dynamic-form.canvas-mode-enabled{border:1px solid var(--pfx-form-footer-border);border-radius:var(--pfx-editorial-form-radius);background:linear-gradient(180deg,color-mix(in srgb,var(--pfx-form-shell-surface) 86%,transparent),color-mix(in srgb,var(--pfx-editorial-form-surface-muted) 42%,transparent));overflow:visible}.form-config-controls+.praxis-dynamic-form.canvas-mode-enabled{border-top:0;border-top-left-radius:0;border-top-right-radius:0}.praxis-dynamic-form.canvas-mode-enabled>.section-drop-wrapper,.praxis-dynamic-form.canvas-mode-enabled>.form-editorial-blocks{margin-inline:var(--pfx-form-shell-padding)}.praxis-dynamic-form.canvas-mode-enabled>.section-drop-wrapper:first-of-type,.praxis-dynamic-form.canvas-mode-enabled>.form-editorial-blocks:first-child{margin-top:var(--pfx-form-shell-padding)}.praxis-dynamic-form.canvas-mode-enabled>praxis-form-actions[data-actions-placement=afterSections]{display:block;margin-top:var(--pfx-form-shell-padding)}.praxis-dynamic-form.editorial-visual-context{--_pfx-editorial-host-text: var( --editorial-text-primary, var(--foreground, var(--mat-sys-on-surface, #1d1b20)) );--_pfx-editorial-host-text-muted: var( --editorial-text-secondary, var( --muted-foreground, color-mix(in srgb, var(--_pfx-editorial-host-text) 64%, transparent) ) );--_pfx-editorial-host-surface: var( --editorial-surface-primary, var(--card, var(--mat-sys-surface-container, #ffffff)) );--_pfx-editorial-host-surface-muted: var( --editorial-surface-secondary, var(--surface-dim, var(--muted, var(--mat-sys-surface-container-low, #f7f2fa))) );--_pfx-editorial-host-border: var( --editorial-border-color, var(--border, var(--mat-sys-outline-variant, #cac4d0)) );--_pfx-editorial-host-accent: var( --editorial-cta-primary, var(--editorial-accent, var(--primary, var(--mat-sys-primary, #6750a4))) );--_pfx-editorial-host-accent-text: var( --editorial-cta-primary-text, var( --editorial-accent-contrast, var(--primary-foreground, var(--mat-sys-on-primary, #ffffff)) ) );--_pfx-editorial-host-accent-container: var( --primary-container, color-mix(in srgb, var(--_pfx-editorial-host-accent) 16%, var(--_pfx-editorial-host-surface) 84%) );--_pfx-editorial-host-accent-container-text: var( --primary-container-fg, var(--_pfx-editorial-host-accent) );font-family:var(--editorial-body-font-family, inherit);font-size:var(--editorial-body-size, 1rem);color:var(--_pfx-editorial-host-text);--pfx-editorial-form-surface: var( --editorial-surface-primary, var(--pfx-form-section-surface, var(--_pfx-editorial-host-surface)) );--pfx-editorial-form-surface-muted: var( --editorial-surface-secondary, var(--_pfx-editorial-host-surface-muted) );--pfx-editorial-form-border: var( --editorial-border-color, var(--pfx-form-stroke, var(--_pfx-editorial-host-border)) );--pfx-editorial-form-text: var( --editorial-text-primary, var(--_pfx-editorial-host-text) );--pfx-editorial-form-text-muted: var( --editorial-text-secondary, color-mix( in srgb, var(--_pfx-editorial-host-text-muted) 86%, var(--_pfx-editorial-host-text) 14% ) );--pfx-editorial-form-accent: var( --editorial-cta-primary, var(--editorial-accent, var(--_pfx-editorial-host-accent)) );--pfx-editorial-form-accent-text: var( --editorial-cta-primary-text, var(--editorial-accent-contrast, var(--_pfx-editorial-host-accent-text)) );--pfx-editorial-form-accent-container: var(--_pfx-editorial-host-accent-container);--pfx-editorial-form-accent-container-text: var(--_pfx-editorial-host-accent-container-text);--pfx-editorial-form-radius: var(--editorial-card-radius, 18px);--pfx-editorial-form-field-radius: var( --editorial-field-radius, var(--editorial-card-radius, 14px) );--pfx-editorial-form-border-width: var(--editorial-card-border-width, 1px);--pfx-editorial-form-field-border-width: var(--editorial-field-border-width, 1px);--pfx-editorial-form-shadow: var(--editorial-card-shadow, none);--md-sys-color-surface: var( --pfx-editorial-form-surface, var(--md-sys-color-surface) );--md-sys-color-surface-container: var( --pfx-editorial-form-surface, var(--md-sys-color-surface-container) );--md-sys-color-surface-container-low: var( --pfx-editorial-form-surface-muted, var(--md-sys-color-surface-container-low) );--md-sys-color-surface-variant: var( --pfx-editorial-form-field-surface, var(--md-sys-color-surface-variant) );--md-sys-color-outline: var( --pfx-editorial-form-field-outline, var(--md-sys-color-outline) );--md-sys-color-outline-variant: var( --pfx-editorial-form-border, var(--md-sys-color-outline-variant) );--md-sys-color-on-surface: var( --editorial-text-primary, inherit );--md-sys-color-on-surface-variant: var( --editorial-text-secondary, inherit );--md-sys-color-primary: var( --pfx-editorial-form-accent, var(--md-sys-color-primary) );--md-sys-color-primary-container: var( --pfx-editorial-form-accent-container, var(--md-sys-color-primary-container) );--md-sys-color-on-primary-container: var( --pfx-editorial-form-accent-container-text, var(--md-sys-color-on-primary-container) );--md-sys-color-on-primary: var( --pfx-editorial-form-accent-text, var(--md-sys-color-on-primary) );--md-sys-color-on-surface-rgb: var( --editorial-text-primary-rgb, inherit );--mat-sys-on-surface: var( --editorial-text-primary, inherit );--mat-sys-on-surface-variant: var( --editorial-text-secondary, inherit );--mat-sys-on-surface-rgb: var( --editorial-text-primary-rgb, inherit );color:inherit;color-scheme:light}.praxis-dynamic-form.presentation-mode .form-row,.praxis-dynamic-form.readonly-mode .form-row{gap:var(--pdx-presentation-column-gap);margin-bottom:var(--pdx-presentation-row-gap)}.praxis-dynamic-form.presentation-mode{--pfx-pres-on-surface: var( --pdx-color-text-primary, var(--pfx-editorial-form-text, var(--pfx-form-label-strong, currentColor)) );--pfx-pres-on-surface-variant: var( --pdx-color-text-secondary, var( --pfx-editorial-form-text-muted, var( --pfx-form-label-muted, color-mix(in srgb, var(--pfx-pres-on-surface) 78%, transparent) ) ) )}.praxis-dynamic-form.presentation-mode .form-section,.praxis-dynamic-form.readonly-mode .form-section{padding:var(--pdx-presentation-section-gap) .875rem}.praxis-dynamic-form.pres-compact .form-row{gap:var(--pdx-presentation-column-gap, .35rem);margin-bottom:var(--pdx-presentation-row-gap, .35rem)}.praxis-dynamic-form.pres-compact .form-section{padding:var(--pdx-presentation-section-gap, .5rem) .75rem}.praxis-dynamic-form.pres-label-left .praxis-presentation{display:grid;grid-template-columns:minmax(0,var(--pfx-presentation-label-w, var(--pdx-presentation-label-width))) minmax(0,1fr);align-items:baseline;column-gap:var(--pdx-presentation-column-gap, 10px)}.praxis-dynamic-form.pres-label-left .praxis-presentation__label{text-align:right;margin-bottom:0}@media(max-width:480px){.praxis-dynamic-form.pres-label-left .praxis-presentation{grid-template-columns:minmax(0,1fr);row-gap:4px}.praxis-dynamic-form.pres-label-left .praxis-presentation__label{text-align:start}}.praxis-dynamic-form.praxis-dynamic-form--corporate-dossier .form-section:not(.section-appearance-plain),.praxis-dynamic-form .form-section.form-section--corporate-dossier:not(.section-appearance-plain),.praxis-dynamic-form .form-section[data-presentation-preset=corporate-dossier]:not(.section-appearance-plain){background:var(--md-sys-color-surface-container-low, #f8f9fa);border:1px solid var(--md-sys-color-outline-variant, #e0e2ec);border-radius:16px;padding:16px 20px;box-shadow:0 1px 3px #0000000a}.praxis-dynamic-form.praxis-dynamic-form--corporate-dossier .form-section .section-heading,.praxis-dynamic-form .form-section.form-section--corporate-dossier .section-heading,.praxis-dynamic-form .form-section[data-presentation-preset=corporate-dossier] .section-heading{margin-bottom:12px;padding-bottom:8px;border-bottom:1px solid var(--md-sys-color-outline-variant, #e0e2ec)}.praxis-dynamic-form.praxis-dynamic-form--corporate-dossier .form-section .section-title,.praxis-dynamic-form .form-section.form-section--corporate-dossier .section-title,.praxis-dynamic-form .form-section[data-presentation-preset=corporate-dossier] .section-title{font-size:.88rem;font-weight:700;letter-spacing:.05em;text-transform:uppercase;color:var(--md-sys-color-primary, #005ac1)}:host ::ng-deep .praxis-dynamic-form--corporate-dossier .praxis-presentation,:host ::ng-deep .form-section--corporate-dossier .praxis-presentation,:host ::ng-deep [data-presentation-preset=corporate-dossier] .praxis-presentation{padding:8px 0;border-bottom:1px dashed var(--md-sys-color-outline-variant, rgba(0, 0, 0, .08))}:host ::ng-deep .praxis-dynamic-form--corporate-dossier .form-row:last-child .praxis-presentation,:host ::ng-deep .praxis-dynamic-form--corporate-dossier .praxis-presentation:last-child,:host ::ng-deep .form-section--corporate-dossier .form-row:last-child .praxis-presentation,:host ::ng-deep .form-section--corporate-dossier .praxis-presentation:last-child,:host ::ng-deep [data-presentation-preset=corporate-dossier] .form-row:last-child .praxis-presentation,:host ::ng-deep [data-presentation-preset=corporate-dossier] .praxis-presentation:last-child{border-bottom:none}:host ::ng-deep .praxis-dynamic-form--corporate-dossier .praxis-presentation__label,:host ::ng-deep .form-section--corporate-dossier .praxis-presentation__label,:host ::ng-deep [data-presentation-preset=corporate-dossier] .praxis-presentation__label{font-size:.74rem;font-weight:600;text-transform:uppercase;letter-spacing:.05em;color:var(--md-sys-color-on-surface-variant, #44474f);margin-bottom:3px}:host ::ng-deep .praxis-dynamic-form--corporate-dossier .praxis-presentation__value,:host ::ng-deep .form-section--corporate-dossier .praxis-presentation__value,:host ::ng-deep [data-presentation-preset=corporate-dossier] .praxis-presentation__value{font-size:.95rem;font-weight:600;color:var(--md-sys-color-on-surface, #1a1c1e);line-height:1.4}.praxis-dynamic-form.praxis-dynamic-form--editorial-card .form-section:not(.section-appearance-plain),.praxis-dynamic-form .form-section.form-section--editorial-card:not(.section-appearance-plain),.praxis-dynamic-form .form-section[data-presentation-preset=editorial-card]:not(.section-appearance-plain){background:var(--pfx-editorial-form-surface, var(--md-sys-color-surface-container-low, var(--mat-sys-surface-container-low)));border:1px solid var(--pfx-editorial-form-border, var(--md-sys-color-outline-variant, #e0e2ec));border-radius:20px;padding:24px;box-shadow:0 2px 8px #0000000d}.praxis-dynamic-form.praxis-dynamic-form--editorial-card .form-section .section-heading,.praxis-dynamic-form .form-section.form-section--editorial-card .section-heading,.praxis-dynamic-form .form-section[data-presentation-preset=editorial-card] .section-heading{margin-bottom:16px;padding-bottom:10px;border-bottom:1px solid color-mix(in srgb,var(--md-sys-color-outline-variant, #e0e2ec) 40%,transparent)}.praxis-dynamic-form.praxis-dynamic-form--editorial-card .form-section .section-title,.praxis-dynamic-form .form-section.form-section--editorial-card .section-title,.praxis-dynamic-form .form-section[data-presentation-preset=editorial-card] .section-title{font-size:1.15rem;font-weight:700;color:var(--pfx-editorial-form-accent, var(--md-sys-color-primary, #005ac1))}:host ::ng-deep .praxis-dynamic-form--editorial-card .praxis-presentation,:host ::ng-deep .form-section--editorial-card .praxis-presentation,:host ::ng-deep [data-presentation-preset=editorial-card] .praxis-presentation{padding:10px 0;border-bottom:1px solid color-mix(in srgb,var(--md-sys-color-outline-variant, #e0e2ec) 35%,transparent)}:host ::ng-deep .praxis-dynamic-form--editorial-card .form-row:last-child .praxis-presentation,:host ::ng-deep .praxis-dynamic-form--editorial-card .praxis-presentation:last-child,:host ::ng-deep .form-section--editorial-card .form-row:last-child .praxis-presentation,:host ::ng-deep .form-section--editorial-card .praxis-presentation:last-child,:host ::ng-deep [data-presentation-preset=editorial-card] .form-row:last-child .praxis-presentation,:host ::ng-deep [data-presentation-preset=editorial-card] .praxis-presentation:last-child{border-bottom:none}:host ::ng-deep .praxis-dynamic-form--editorial-card .praxis-presentation__label,:host ::ng-deep .form-section--editorial-card .praxis-presentation__label,:host ::ng-deep [data-presentation-preset=editorial-card] .praxis-presentation__label{font-size:.8rem;font-weight:500;color:var(--pfx-editorial-form-text-muted, var(--md-sys-color-on-surface-variant, #44474f));margin-bottom:4px}:host ::ng-deep .praxis-dynamic-form--editorial-card .praxis-presentation__value,:host ::ng-deep .form-section--editorial-card .praxis-presentation__value,:host ::ng-deep [data-presentation-preset=editorial-card] .praxis-presentation__value{font-size:1rem;font-weight:600;color:var(--pfx-editorial-form-text, var(--md-sys-color-on-surface, #1a1c1e));line-height:1.5}.praxis-dynamic-form.praxis-dynamic-form--compact-presentation .form-section:not(.section-appearance-plain),.praxis-dynamic-form .form-section.form-section--compact-presentation:not(.section-appearance-plain),.praxis-dynamic-form .form-section[data-presentation-preset=compact-presentation]:not(.section-appearance-plain){background:transparent;border:1px solid color-mix(in srgb,var(--md-sys-color-outline-variant, #e0e2ec) 50%,transparent);border-radius:8px;padding:10px 14px;box-shadow:none}.praxis-dynamic-form.praxis-dynamic-form--compact-presentation .form-section .section-heading,.praxis-dynamic-form .form-section.form-section--compact-presentation .section-heading,.praxis-dynamic-form .form-section[data-presentation-preset=compact-presentation] .section-heading{margin-bottom:8px;padding-bottom:4px;border-bottom:1px solid color-mix(in srgb,var(--md-sys-color-outline-variant, #e0e2ec) 25%,transparent)}.praxis-dynamic-form.praxis-dynamic-form--compact-presentation .form-section .section-title,.praxis-dynamic-form .form-section.form-section--compact-presentation .section-title,.praxis-dynamic-form .form-section[data-presentation-preset=compact-presentation] .section-title{font-size:.82rem;font-weight:700;letter-spacing:.03em;text-transform:uppercase;color:var(--md-sys-color-on-surface-variant, #44474f)}:host ::ng-deep .praxis-dynamic-form--compact-presentation .praxis-presentation,:host ::ng-deep .form-section--compact-presentation .praxis-presentation,:host ::ng-deep [data-presentation-preset=compact-presentation] .praxis-presentation{padding:4px 0;border-bottom:none}:host ::ng-deep .praxis-dynamic-form--compact-presentation .praxis-presentation__label,:host ::ng-deep .form-section--compact-presentation .praxis-presentation__label,:host ::ng-deep [data-presentation-preset=compact-presentation] .praxis-presentation__label{font-size:.72rem;font-weight:600;color:var(--md-sys-color-on-surface-variant, #44474f);margin-bottom:2px}:host ::ng-deep .praxis-dynamic-form--compact-presentation .praxis-presentation__value,:host ::ng-deep .form-section--compact-presentation .praxis-presentation__value,:host ::ng-deep [data-presentation-preset=compact-presentation] .praxis-presentation__value{font-size:.88rem;font-weight:500;color:var(--md-sys-color-on-surface, #1a1c1e);line-height:1.35}:host-context(.mdc-theme-dark) .praxis-dynamic-form.praxis-dynamic-form--corporate-dossier .form-section:not(.section-appearance-plain),:host-context(.mdc-theme-dark) .praxis-dynamic-form .form-section.form-section--corporate-dossier:not(.section-appearance-plain),:host-context(.mdc-theme-dark) .praxis-dynamic-form .form-section[data-presentation-preset=corporate-dossier]:not(.section-appearance-plain),:host-context(.theme-dark) .praxis-dynamic-form.praxis-dynamic-form--corporate-dossier .form-section:not(.section-appearance-plain),:host-context(.theme-dark) .praxis-dynamic-form .form-section.form-section--corporate-dossier:not(.section-appearance-plain),:host-context(.theme-dark) .praxis-dynamic-form .form-section[data-presentation-preset=corporate-dossier]:not(.section-appearance-plain){background:var(--md-sys-color-surface-container-low);border-color:color-mix(in srgb,var(--md-sys-color-outline-variant) 70%,transparent);box-shadow:0 2px 8px #0000004d}:host-context(.mdc-theme-dark) .praxis-dynamic-form.praxis-dynamic-form--editorial-card .form-section:not(.section-appearance-plain),:host-context(.mdc-theme-dark) .praxis-dynamic-form .form-section.form-section--editorial-card:not(.section-appearance-plain),:host-context(.mdc-theme-dark) .praxis-dynamic-form .form-section[data-presentation-preset=editorial-card]:not(.section-appearance-plain),:host-context(.theme-dark) .praxis-dynamic-form.praxis-dynamic-form--editorial-card .form-section:not(.section-appearance-plain),:host-context(.theme-dark) .praxis-dynamic-form .form-section.form-section--editorial-card:not(.section-appearance-plain),:host-context(.theme-dark) .praxis-dynamic-form .form-section[data-presentation-preset=editorial-card]:not(.section-appearance-plain){background:var(--pfx-editorial-form-surface, var(--md-sys-color-surface-container-low));border-color:color-mix(in srgb,var(--md-sys-color-outline-variant) 70%,transparent);box-shadow:0 4px 16px #0006}.form-section{border:1px solid var(--pfx-form-section-divider);border-radius:var(--pfx-editorial-form-radius);padding:var(--pfx-form-section-padding);max-width:100%;min-width:0;background:var(--pfx-form-section-surface-flat);box-shadow:none;transition:all .2s ease;position:relative}.praxis-dynamic-form.editorial-visual-context .form-section:not(.section-appearance-plain){border:var(--pfx-editorial-form-border-width) solid var(--pfx-editorial-form-border)!important;background:var(--pfx-editorial-form-surface)!important;color:var(--pfx-editorial-form-text);box-shadow:var(--editorial-card-shadow, none)}.praxis-dynamic-form.editorial-visual-context .form-section.section-appearance-step{background-color:var(--pfx-editorial-form-surface)!important;background-image:linear-gradient(180deg,color-mix(in srgb,var(--editorial-accent, var(--md-sys-color-primary)) 6%,transparent) 0%,transparent 132px)!important;background-repeat:no-repeat!important}.section-drop-wrapper>.form-section{margin-bottom:var(--pfx-section-gap, 20px)}.section-drop-wrapper:last-of-type>.form-section{margin-bottom:0}.praxis-dynamic-form>praxis-form-actions[data-actions-placement=afterSections]{margin-top:var(--pfx-actions-gap-top, var(--pfx-section-gap, 20px))}.section-title{margin:0 0 var(--pfx-section-title-mb, 12px) 0;font-family:var(--editorial-title-font-family, var(--editorial-body-font-family, inherit));font-size:var(--editorial-step-title-size, 1.12rem);font-weight:700;color:var(--pfx-form-label-strong)}.section-heading{position:relative;display:flex;align-items:flex-start;gap:12px;margin-bottom:18px;padding-bottom:var(--pfx-form-section-heading-divider-gap, 18px)}.section-heading:after{content:\"\";position:absolute;right:0;bottom:0;left:0;height:2px;pointer-events:none;background:linear-gradient(90deg,transparent 0%,color-mix(in srgb,var(--pfx-form-section-divider) 18%,transparent) 8%,var(--pfx-form-section-divider) 46%,var(--pfx-form-section-divider) 54%,color-mix(in srgb,var(--pfx-form-section-divider) 18%,transparent) 92%,transparent 100%);border-radius:999px;-webkit-mask-image:linear-gradient(90deg,transparent 0%,black 18%,black 82%,transparent 100%);mask-image:linear-gradient(90deg,transparent 0%,black 18%,black 82%,transparent 100%)}.section-heading.title-only{padding-bottom:var(--pfx-form-section-heading-title-only-divider-gap, 10px)}:host(.pfx-form-section-divider-inline-title) .section-heading.title-only{padding-bottom:var(--pfx-form-section-heading-title-only-inline-divider-gap, 0)}:host(.pfx-form-section-divider-inline-title) .section-heading.title-only:after{display:none}.section-heading.align-center{flex-direction:column;align-items:center;text-align:center}.section-heading.align-center .section-heading-text{display:grid;justify-items:center}.section-step-label{display:inline-flex;align-items:center;min-height:24px;padding:0 10px;margin:0 0 8px;border-radius:999px;background:color-mix(in srgb,var(--pfx-editorial-form-accent) 10%,transparent);color:color-mix(in srgb,var(--pfx-editorial-form-accent) 84%,var(--pfx-form-label-strong) 16%);font-size:.72rem;font-weight:800;font-family:var(--editorial-title-font-family, var(--editorial-body-font-family, inherit));letter-spacing:.08em;text-transform:uppercase}.section-heading-text{flex:1 1 auto;min-width:0}.section-heading-actions{display:inline-flex;align-items:center;align-self:flex-start;flex-wrap:wrap;gap:4px;margin-left:auto}.section-heading-actions.align-center{align-self:center;margin-left:0}.section-heading-action-btn{color:var(--pfx-form-label-muted)}.section-heading-action-btn.tone-primary{color:var(--md-sys-color-primary)}.section-heading-action-btn.tone-accent,.section-heading-action-btn.tone-secondary{color:var(--md-sys-color-tertiary)}.section-heading-action-btn.tone-warn,.section-heading-action-btn.tone-danger,.section-heading-action-btn.tone-error{color:var(--md-sys-color-error)}.section-heading-action-btn .mat-mdc-progress-spinner,.section-heading-action-btn mat-progress-spinner{--mdc-circular-progress-active-indicator-color: currentColor}.section-heading-action-btn.loading{opacity:.72;pointer-events:none}.section-heading-action-sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.section-collapse-btn{margin-left:4px;color:var(--pfx-form-label-muted)}.section-title.title-large{font:var(--mdc-typography-title-large, 500 22px/28px system-ui)}.section-title.title-medium{font:var(--mdc-typography-title-medium, 500 16px/24px system-ui)}.section-title.title-small{font:var(--mdc-typography-title-small, 500 14px/20px system-ui)}.section-title.headline-small{font:var(--mdc-typography-headline-small, 600 24px/32px system-ui)}.section-title.title-large,.section-title.title-medium,.section-title.title-small,.section-title.headline-small{font-family:var(--editorial-title-font-family, var(--editorial-body-font-family, inherit));font-weight:var(--editorial-title-weight, 600)}.section-description{margin:0;font-family:var(--editorial-body-font-family, inherit);font-size:.93rem;color:var(--pfx-form-label-muted);line-height:1.6}.section-description.body-large{font:var(--mdc-typography-body-large, 400 16px/24px system-ui)}.section-description.body-medium{font:var(--mdc-typography-body-medium, 400 14px/20px system-ui)}.section-description.body-small{font:var(--mdc-typography-body-small, 400 12px/16px system-ui)}.section-description.body-large,.section-description.body-medium,.section-description.body-small{font-family:var(--editorial-body-font-family, inherit);font-weight:var(--editorial-body-weight, 400)}.section-title.align-center,.section-description.align-center,.section-step-label.align-center{text-align:center}.praxis-dynamic-form .form-section.section-appearance-plain{border-color:transparent;border-width:0;border-radius:0;padding:0;background:transparent;box-shadow:none}.praxis-dynamic-form .form-section.section-appearance-plain.section-has-divider{padding-bottom:16px;border-bottom:1px solid var(--pfx-form-section-divider, var(--md-sys-color-outline-variant, #e0e2ec))}.praxis-dynamic-form .section-drop-wrapper:last-of-type>.form-section.section-appearance-plain.section-has-divider,.praxis-dynamic-form>.form-section.section-appearance-plain.section-has-divider:last-of-type{border-bottom:none;padding-bottom:0}.form-section.section-appearance-plain .section-heading{margin-bottom:14px}.form-section.section-appearance-step{border-radius:var(--pfx-editorial-form-radius);padding:var(--pfx-form-section-padding);background:var(--pfx-form-section-surface-flat);border-color:var(--pfx-form-section-divider);box-shadow:none}.praxis-dynamic-form.editorial-visual-context .form-section.section-appearance-step{border-radius:var(--editorial-card-radius, 20px);box-shadow:none}.form-section.section-appearance-step .section-heading{margin-bottom:22px;padding-bottom:var(--pfx-form-section-heading-divider-gap, 16px)}.form-section.section-appearance-step .section-heading.title-only{padding-bottom:var(--pfx-form-section-heading-title-only-divider-gap, 16px)}:host(.pfx-form-section-divider-inline-title) .form-section.section-appearance-step .section-heading.title-only{padding-bottom:var(--pfx-form-section-heading-title-only-inline-divider-gap, 0)}.form-section.section-appearance-step .section-title{font:var(--mdc-typography-title-large, 700 22px/28px system-ui);color:var(--pfx-form-label-strong);margin-bottom:8px}.form-section.section-appearance-step .section-description{color:var(--pfx-form-label-muted);max-width:60ch}.form-section.section-appearance-step .section-step-label{min-height:24px;padding:0 10px;margin-bottom:10px;box-shadow:none}.form-section.section-appearance-step .section-heading.align-center .section-description{max-width:52ch}.form-section.section-appearance-step .section-body{display:grid;gap:8px;padding-top:0}.form-section.section-appearance-step .form-row{margin-bottom:var(--pfx-field-gap, 1rem)}.form-section.section-appearance-step .form-column{gap:var(--pfx-field-gap, 12px)}.form-section .form-editorial-blocks{display:grid;gap:16px}.form-section .form-editorial-blocks[data-editorial-placement=beforeActions]{margin-top:24px;padding-top:18px;border-top:1px solid var(--pfx-form-section-divider)}.form-section.section-appearance-step .form-editorial-blocks[data-editorial-placement=beforeActions]{gap:18px}.form-section.section-appearance-step .form-editorial-blocks[data-editorial-placement=beforeActions]>*+*{margin-top:2px}.praxis-dynamic-form:not(.canvas-mode-enabled)>praxis-form-actions[data-actions-placement=afterSections]{margin-top:18px}.praxis-dynamic-form>.form-editorial-blocks[data-editorial-placement=after]{margin-top:6px}:host-context(.mdc-theme-dark) .form-section.section-appearance-step,:host-context(.theme-dark) .form-section.section-appearance-step{border-color:color-mix(in srgb,var(--pfx-editorial-form-border) 82%,transparent);box-shadow:none}:host-context(.mdc-theme-dark) .form-section.section-appearance-step .section-title,:host-context(.theme-dark) .form-section.section-appearance-step .section-title{color:color-mix(in srgb,var(--pfx-editorial-form-text) 96%,white)}:host-context(.mdc-theme-dark) .form-section.section-appearance-step .section-description,:host-context(.theme-dark) .form-section.section-appearance-step .section-description{color:color-mix(in srgb,var(--pfx-editorial-form-text-muted) 86%,var(--pfx-editorial-form-text) 14%)}:host-context(.mdc-theme-dark) .section-step-label,:host-context(.theme-dark) .section-step-label{background:color-mix(in srgb,var(--md-sys-color-primary-container) 54%,transparent);color:color-mix(in srgb,var(--md-sys-color-primary) 88%,white)}:host-context(.mdc-theme-dark) .form-section .form-editorial-blocks[data-editorial-placement=beforeActions],:host-context(.theme-dark) .form-section .form-editorial-blocks[data-editorial-placement=beforeActions]{border-top-color:color-mix(in srgb,var(--md-sys-color-outline-variant) 90%,transparent)}.inline-edit-btn{margin-left:6px;vertical-align:middle}.section-body.collapsed{border:1px dashed var(--md-sys-color-outline-variant);background:var(--md-sys-color-surface-container-low);border-radius:6px;padding:8px 10px}.section-collapsed-placeholder{display:flex;align-items:center;gap:8px;color:var(--md-sys-color-on-surface-variant);font-size:.95rem}.section-collapsed-placeholder mat-icon{font-size:20px;width:20px;height:20px}.form-row{display:flex;gap:1.1rem;margin-bottom:var(--pfx-field-gap, 1.1rem);max-width:100%;min-width:0;transition:all .2s ease;border-radius:6px;position:relative}.praxis-dynamic-form.pfx-mounting .form-row{opacity:0;transform:translateY(var(--pdx-form-mount-offset, 6px));animation:pdxFormMount var(--pdx-form-mount-duration, .16s) ease-out both;animation-delay:calc(var(--pfx-mount-index, 0) * var(--pdx-form-mount-stagger, 20ms))}@media(prefers-reduced-motion:reduce){.praxis-dynamic-form.pfx-mounting .form-row{animation:none;opacity:1;transform:none}}@keyframes pdxFormMount{to{opacity:1;transform:translateY(0)}}.praxis-dynamic-form .mat-mdc-form-field{width:100%;margin-bottom:var(--pfx-field-gap, 10px);font-family:inherit;--mdc-filled-text-field-container-color: var(--pfx-form-field-surface-rest);--mdc-filled-text-field-focus-active-indicator-color: var(--pfx-editorial-form-accent);--mdc-filled-text-field-active-indicator-color: var(--pfx-editorial-form-field-outline);--mdc-filled-text-field-hover-active-indicator-color: var(--pfx-editorial-form-accent);--mdc-filled-text-field-focus-label-text-color: var(--pfx-editorial-form-accent);--mdc-filled-text-field-label-text-color: var(--pfx-form-label-muted);--mdc-filled-text-field-input-text-color: var(--pfx-editorial-form-text);--mdc-filled-text-field-caret-color: var(--pfx-editorial-form-accent);--mdc-filled-text-field-input-text-placeholder-color: color-mix( in srgb, var(--pfx-editorial-form-text-muted) 82%, transparent );--mdc-outlined-text-field-outline-color: var(--pfx-editorial-form-field-outline);--mdc-outlined-text-field-hover-outline-color: var(--pfx-editorial-form-accent);--mdc-outlined-text-field-focus-outline-color: var(--pfx-editorial-form-accent);--mdc-outlined-text-field-focus-label-text-color: var(--pfx-editorial-form-accent);--mdc-outlined-text-field-label-text-color: var(--pfx-form-label-muted);--mdc-outlined-text-field-input-text-color: var(--pfx-editorial-form-text);--mdc-filled-text-field-container-shape: var(--pfx-editorial-form-field-radius);--mdc-outlined-text-field-container-shape: var(--pfx-editorial-form-field-radius);--mdc-filled-text-field-active-indicator-height: var(--pfx-editorial-form-field-border-width);--mdc-filled-text-field-focus-active-indicator-height: var(--pfx-editorial-form-field-border-width);--mdc-outlined-text-field-outline-width: var(--pfx-editorial-form-field-border-width);--mdc-outlined-text-field-focus-outline-width: var(--pfx-editorial-form-field-border-width);--mat-select-enabled-trigger-text-color: var(--pfx-editorial-form-text);--mat-select-enabled-arrow-color: var(--pfx-form-label-muted);--mat-form-field-enabled-select-arrow-color: var(--pfx-form-label-muted);--mat-form-field-focus-select-arrow-color: var(--pfx-editorial-form-accent);--mat-form-field-hover-state-layer-opacity: 0;--mat-form-field-focus-state-layer-opacity: 0}.praxis-dynamic-form.editorial-visual-context .mat-mdc-form-field{font-family:var(--editorial-body-font-family, inherit)}.praxis-dynamic-form .mat-mdc-text-field-wrapper,.praxis-dynamic-form .mdc-text-field{background:var(--pfx-form-field-surface-rest);border-radius:var(--pfx-editorial-form-field-radius);min-height:var(--pfx-form-field-min-height);transition:background-color .16s ease,box-shadow .16s ease,border-color .16s ease}.praxis-dynamic-form.editorial-visual-context .mat-mdc-text-field-wrapper,.praxis-dynamic-form.editorial-visual-context .mdc-text-field,.praxis-dynamic-form.editorial-visual-context .mdc-text-field--filled,.praxis-dynamic-form.editorial-visual-context .mdc-text-field--outlined{background-color:var(--pfx-form-field-surface-rest)!important;background:var(--pfx-form-field-surface-rest)!important}.praxis-dynamic-form .mat-mdc-form-field .mdc-floating-label,.praxis-dynamic-form .mat-mdc-form-field .mat-mdc-form-field-hint,.praxis-dynamic-form .mat-mdc-form-field .mat-mdc-form-field-error,.praxis-dynamic-form .mat-mdc-form-field .mat-mdc-form-field-required-marker,.praxis-dynamic-form .mat-mdc-form-field .mat-mdc-select-arrow,.praxis-dynamic-form .mat-mdc-form-field .mat-mdc-select-placeholder,.praxis-dynamic-form .mat-mdc-form-field .mat-mdc-form-field-icon-suffix,.praxis-dynamic-form .mat-mdc-form-field .mat-mdc-form-field-icon-prefix{color:var(--pfx-form-label-muted)}.praxis-dynamic-form .mat-mdc-input-element,.praxis-dynamic-form .mat-mdc-select-value-text,.praxis-dynamic-form .mat-mdc-form-field-infix,.praxis-dynamic-form .mat-mdc-select-min-line{color:var(--pfx-editorial-form-text)}.praxis-dynamic-form .mat-mdc-form-field:hover .mat-mdc-text-field-wrapper,.praxis-dynamic-form .mat-mdc-form-field:hover .mdc-text-field,.praxis-dynamic-form .mat-mdc-form-field.mat-focused .mat-mdc-text-field-wrapper,.praxis-dynamic-form .mat-mdc-form-field.mat-focused .mdc-text-field{background:var(--pfx-form-field-surface-focus)}.praxis-dynamic-form.editorial-visual-context .mat-mdc-input-element,.praxis-dynamic-form.editorial-visual-context .mat-mdc-select-value-text,.praxis-dynamic-form.editorial-visual-context .mat-mdc-form-field-infix,.praxis-dynamic-form.editorial-visual-context .mat-mdc-select-min-line,.praxis-dynamic-form.editorial-visual-context .mdc-text-field__input{color:var(--pfx-editorial-form-text)!important;-webkit-text-fill-color:var(--pfx-editorial-form-text)!important}.praxis-dynamic-form.editorial-visual-context .mat-mdc-form-field .mdc-floating-label,.praxis-dynamic-form.editorial-visual-context .mat-mdc-form-field .mat-mdc-form-field-hint,.praxis-dynamic-form.editorial-visual-context .mat-mdc-form-field .mat-mdc-form-field-error,.praxis-dynamic-form.editorial-visual-context .mat-mdc-form-field .mat-mdc-form-field-required-marker,.praxis-dynamic-form.editorial-visual-context .mat-mdc-form-field .mat-mdc-select-arrow,.praxis-dynamic-form.editorial-visual-context .mat-mdc-form-field .mat-mdc-select-placeholder,.praxis-dynamic-form.editorial-visual-context .mat-mdc-form-field .mat-mdc-form-field-icon-suffix,.praxis-dynamic-form.editorial-visual-context .mat-mdc-form-field .mat-mdc-form-field-icon-prefix{color:var(--pfx-editorial-form-text-muted)!important}.praxis-dynamic-form.editorial-visual-context .mat-mdc-floating-label,.praxis-dynamic-form.editorial-visual-context .mdc-floating-label,.praxis-dynamic-form.editorial-visual-context .mdc-text-field__input::placeholder{color:color-mix(in srgb,var(--pfx-editorial-form-text) 68%,transparent)!important}.praxis-dynamic-form.editorial-visual-context .mat-mdc-input-element::placeholder,.praxis-dynamic-form.editorial-visual-context textarea.mat-mdc-input-element::placeholder{color:color-mix(in srgb,var(--pfx-editorial-form-text) 58%,transparent)!important}.praxis-dynamic-form .mat-mdc-radio-button,.praxis-dynamic-form .mat-mdc-checkbox,.praxis-dynamic-form .mat-mdc-slide-toggle{--mdc-radio-selected-icon-color: var(--pfx-editorial-form-accent);--mdc-radio-selected-hover-icon-color: var(--pfx-editorial-form-accent);--mdc-radio-selected-focus-icon-color: var(--pfx-editorial-form-accent);--mdc-checkbox-selected-checkmark-color: var(--pfx-editorial-form-accent-text);--mdc-checkbox-selected-focus-icon-color: var(--pfx-editorial-form-accent);--mdc-checkbox-selected-hover-icon-color: var(--pfx-editorial-form-accent);--mdc-checkbox-selected-icon-color: var(--pfx-editorial-form-accent);--mdc-switch-selected-focus-state-layer-color: var(--pfx-editorial-form-accent);--mdc-switch-selected-handle-color: var(--pfx-editorial-form-accent);--mdc-switch-selected-track-color: color-mix(in srgb, var(--pfx-editorial-form-accent) 45%, #fff)}.praxis-dynamic-form [data-field-type=input],.praxis-dynamic-form [data-field-type=textarea],.praxis-dynamic-form [data-field-type=email],.praxis-dynamic-form [data-field-type=password],.praxis-dynamic-form [data-field-type=url],.praxis-dynamic-form [data-field-type=search],.praxis-dynamic-form [data-field-type=phone],.praxis-dynamic-form [data-field-type=numericTextBox],.praxis-dynamic-form [data-field-type=currency],.praxis-dynamic-form [data-field-type=cpfCnpj],.praxis-dynamic-form [data-field-type=date],.praxis-dynamic-form [data-field-type=dateInput],.praxis-dynamic-form [data-field-type=dateRange],.praxis-dynamic-form [data-field-type=dateTimeLocal],.praxis-dynamic-form [data-field-type=time],.praxis-dynamic-form [data-field-type=timePicker],.praxis-dynamic-form [data-field-type=timeRange],.praxis-dynamic-form [data-field-type=month],.praxis-dynamic-form [data-field-type=week],.praxis-dynamic-form [data-field-type=yearInput],.praxis-dynamic-form [data-field-type=select],.praxis-dynamic-form [data-field-type=multi-select],.praxis-dynamic-form [data-field-type=searchable-select],.praxis-dynamic-form [data-field-type=async-select],.praxis-dynamic-form [data-field-type=autocomplete],.praxis-dynamic-form [data-field-type=entityLookup],.praxis-dynamic-form [data-field-type=tree-select],.praxis-dynamic-form [data-field-type=multi-select-tree],.praxis-dynamic-form [data-field-type=priceRange],.praxis-dynamic-form [data-field-type=file-upload]{display:block;width:100%;min-width:0}.praxis-dynamic-form .mat-mdc-form-field-subscript-wrapper{min-height:var(--pfx-subscript-min-h, 22px)}.form-row:last-child{margin-bottom:0}.form-column{display:grid;grid-template-columns:minmax(0,1fr);align-content:start;gap:var(--pfx-field-gap, 10px);flex:1;max-width:100%;min-width:0;transition:all .2s ease;border-radius:4px;position:relative}.form-layout-rich-content{display:block;width:100%;max-width:100%;min-width:0;margin-bottom:var(--pfx-field-gap, 10px);color:var(--pfx-editorial-form-text-muted, var(--md-sys-color-on-surface-variant));font:var(--mdc-typography-body-medium, 400 14px/20px system-ui);overflow-wrap:anywhere}:host ::ng-deep .form-layout-rich-content .prx-rich-content-root{display:grid;gap:8px;min-width:0;max-width:100%}:host ::ng-deep .form-layout-rich-content .prx-rich-node{min-width:0;max-width:100%}:host ::ng-deep .form-layout-rich-content .prx-rich-text{color:inherit;line-height:20px}:host ::ng-deep .form-layout-rich-content .praxis-form-visual-block--note,:host ::ng-deep .form-layout-rich-content .praxis-rich-content-notice{border:1px solid color-mix(in srgb,var(--pfx-editorial-form-accent) 12%,var(--pfx-editorial-form-border) 88%);border-left:3px solid var(--pfx-editorial-form-accent);border-radius:8px;background:color-mix(in srgb,var(--pfx-editorial-form-accent-container) 12%,var(--pfx-editorial-form-surface-muted) 88%)}:host ::ng-deep .form-layout-rich-content .praxis-form-visual-block--note{display:grid;grid-template-columns:20px minmax(0,1fr);gap:10px;align-items:flex-start;padding:11px 12px}:host ::ng-deep .form-layout-rich-content .praxis-form-visual-block--note:before{content:\"info\";display:inline-flex;align-items:center;justify-content:center;width:20px;height:20px;color:var(--pfx-editorial-form-accent);font-family:Material Symbols Outlined;font-size:20px;font-weight:400;line-height:20px}:host ::ng-deep .form-layout-rich-content .praxis-form-visual-block--note .prx-rich-text{color:var(--pfx-editorial-form-text-muted)}:host ::ng-deep .form-layout-rich-content .praxis-rich-content-notice{padding:10px 12px;color:var(--pfx-editorial-form-text)}:host ::ng-deep .form-layout-rich-content .praxis-rich-content-notice .prx-rich-compose{align-items:flex-start;gap:10px}:host ::ng-deep .form-layout-rich-content .praxis-rich-content-notice .prx-rich-icon{color:var(--pfx-editorial-form-accent);font-size:20px;line-height:20px;margin-top:1px}:host ::ng-deep .form-layout-rich-content .praxis-rich-content-divider{display:grid;grid-template-columns:minmax(24px,1fr) auto minmax(24px,1fr);align-items:center;gap:10px;color:var(--pfx-editorial-form-text-muted);font:var(--mdc-typography-label-small, 600 12px/16px system-ui);text-transform:uppercase}:host ::ng-deep .form-layout-rich-content .praxis-rich-content-divider:before,:host ::ng-deep .form-layout-rich-content .praxis-rich-content-divider:after{content:\"\";height:1px;background:var(--pfx-editorial-form-border)}:host ::ng-deep .form-layout-rich-content .prx-rich-card{gap:6px;padding:12px 14px;border-color:var(--pfx-editorial-form-border);border-radius:8px;background:var(--pfx-editorial-form-surface-muted);color:var(--pfx-editorial-form-text);box-shadow:none}:host ::ng-deep .form-layout-rich-content .prx-rich-card-title{color:var(--pfx-editorial-form-text);font:var(--mdc-typography-title-small, 600 14px/20px system-ui)}:host ::ng-deep .form-layout-rich-content .prx-rich-card-subtitle,:host ::ng-deep .form-layout-rich-content .prx-rich-metric-caption{color:var(--pfx-editorial-form-text-muted)}:host ::ng-deep .form-layout-rich-content .prx-rich-card .prx-rich-text{color:var(--pfx-editorial-form-text-muted)}:host ::ng-deep .form-layout-rich-content .prx-rich-badge{background:var(--pfx-editorial-form-accent-container);color:var(--pfx-editorial-form-accent-container-text)}.form-row.grid-12{container-type:inline-size;container-name:praxis-form-row;display:grid;grid-template-columns:repeat(12,minmax(0,1fr));gap:var(--pfx-grid-gap, 16px)}.align-start{align-self:flex-start}.align-center{align-self:center}.align-end{align-self:flex-end}.align-stretch{align-self:stretch}.form-blocking-overlay{position:absolute;inset:0;background:transparent;color:var(--md-sys-color-on-surface);backdrop-filter:blur(2px) saturate(103%);-webkit-backdrop-filter:blur(2px) saturate(103%);display:flex;align-items:center;justify-content:center;flex-direction:column;gap:12px;z-index:10;pointer-events:all}@media(max-width:768px){.column-drop-wrapper,.row-drop-wrapper,.form-layout-rich-content,.praxis-dynamic-form .mat-mdc-form-field,.praxis-dynamic-form .mat-mdc-text-field-wrapper,.praxis-dynamic-form .mdc-text-field{max-width:100%;min-width:0}:host ::ng-deep .praxis-dynamic-form .pfx-field-shell,:host ::ng-deep .praxis-dynamic-form .pfx-field-shell-wrapper,:host ::ng-deep .praxis-dynamic-form .pfx-field-shell-host,:host ::ng-deep .praxis-dynamic-form .mat-mdc-form-field,:host ::ng-deep .praxis-dynamic-form .mat-mdc-text-field-wrapper,:host ::ng-deep .praxis-dynamic-form .mdc-text-field{width:100%;max-width:100%;min-width:0}.form-section{padding:clamp(.75rem,4vw,1rem)}.section-heading{gap:10px;margin-bottom:16px;padding-bottom:var(--pfx-form-section-heading-divider-gap, 14px)}.section-heading.title-only{padding-bottom:var(--pfx-form-section-heading-title-only-divider-gap, 8px)}}.section-title{display:flex;align-items:center;gap:8px}:host(.pfx-form-section-divider-inline-title) .section-heading.title-only .section-title{width:100%;min-width:0}:host(.pfx-form-section-divider-inline-title) .section-heading.title-only .section-title:after{content:\"\";display:block;flex:1 1 auto;min-width:var(--pfx-form-section-title-inline-divider-min-width, 48px);height:2px;margin-left:var(--pfx-form-section-title-inline-divider-gap, 12px);pointer-events:none;background:linear-gradient(90deg,var(--pfx-form-section-divider) 0%,var(--pfx-form-section-divider) 62%,color-mix(in srgb,var(--pfx-form-section-divider) 18%,transparent) 88%,transparent 100%);border-radius:999px;-webkit-mask-image:linear-gradient(90deg,black 0%,black 72%,transparent 100%);mask-image:linear-gradient(90deg,black 0%,black 72%,transparent 100%)}:host(.pfx-form-section-divider-inline-title) .section-heading.align-center .section-title:after{display:none}@media(max-width:640px){:host(.pfx-form-section-divider-inline-title) .section-heading.title-only{padding-bottom:var(--pfx-form-section-heading-title-only-divider-gap, 8px)}:host(.pfx-form-section-divider-inline-title) .section-heading.title-only:after{display:block}:host(.pfx-form-section-divider-inline-title) .section-heading.title-only .section-title{width:auto}:host(.pfx-form-section-divider-inline-title) .section-heading.title-only .section-title:after{display:none}}.section-title .section-title-icon{font-size:1.25em;line-height:1}.section-title-avatar{--_pfx-form-section-avatar-size: var(--pfx-form-section-avatar-size-md, var(--pfx-form-section-avatar-size, 32px));display:inline-flex;align-items:center;justify-content:center;width:var(--_pfx-form-section-avatar-size);height:var(--_pfx-form-section-avatar-size);border-radius:999px;flex:0 0 var(--_pfx-form-section-avatar-size);overflow:hidden}.section-title-avatar.size-sm{--_pfx-form-section-avatar-size: var(--pfx-form-section-avatar-size-sm, 24px)}.section-title-avatar.size-md{--_pfx-form-section-avatar-size: var(--pfx-form-section-avatar-size-md, var(--pfx-form-section-avatar-size, 32px))}.section-title-avatar.size-lg{--_pfx-form-section-avatar-size: var(--pfx-form-section-avatar-size-lg, 40px)}.section-title-avatar-image{object-fit:cover;border:1px solid color-mix(in srgb,var(--pfx-form-section-divider) 72%,transparent);background:var(--pfx-form-section-surface-flat)}.section-title-avatar-text,.section-title-avatar-placeholder{background:color-mix(in srgb,var(--pfx-editorial-form-accent) 14%,var(--pfx-form-section-surface-flat));color:color-mix(in srgb,var(--pfx-editorial-form-accent) 82%,var(--pfx-form-label-strong) 18%);font-size:calc(var(--_pfx-form-section-avatar-size) * .41);font-weight:800;letter-spacing:.04em;text-transform:uppercase}.section-title-avatar-placeholder mat-icon{font-size:calc(var(--_pfx-form-section-avatar-size) * .5625);width:calc(var(--_pfx-form-section-avatar-size) * .5625);height:calc(var(--_pfx-form-section-avatar-size) * .5625);line-height:calc(var(--_pfx-form-section-avatar-size) * .5625)}.section-title-avatar-sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.form-context-empty-state{display:grid;min-height:var(--pdx-form-context-empty-min-height, 0);place-items:center;padding:var(--pdx-form-context-empty-padding, 0)}.form-context-empty-state praxis-empty-state-card{display:block;width:min(100%,var(--pdx-form-context-empty-max-width, 32rem))}.prx-form-tabs{display:block;margin-bottom:16px;max-width:100%}.prx-form-tabs__tablist{display:flex;flex-wrap:wrap;align-items:center;gap:8px;max-width:100%}.prx-form-tabs__tablist--scrollable{flex-wrap:nowrap;overflow-x:auto;overflow-y:hidden;scrollbar-width:none;-webkit-overflow-scrolling:touch;padding:4px 2px}.prx-form-tabs__tablist--scrollable::-webkit-scrollbar{display:none}.prx-form-tabs__tab{display:inline-flex;align-items:center;gap:8px;min-width:0;padding:8px 14px;border-radius:999px;border:1px solid var(--md-sys-color-outline-variant, rgba(0, 0, 0, .12));background:color-mix(in srgb,var(--md-sys-color-surface, transparent) 40%,transparent);color:var(--md-sys-color-on-surface, #1d1b20);font-family:inherit;font-size:.84rem;font-weight:500;cursor:pointer;white-space:nowrap;flex-shrink:0;-webkit-user-select:none;user-select:none;transition:all .2s cubic-bezier(.2,0,0,1)}.prx-form-tabs__tab:hover:not(:disabled):not(.prx-form-tabs__tab--active){background:var(--md-sys-color-surface-container-high, rgba(0, 0, 0, .05));border-color:var(--md-sys-color-outline, rgba(0, 0, 0, .24));color:var(--md-sys-color-on-surface)}.prx-form-tabs__tab:focus-visible{outline:2px solid var(--md-sys-color-primary, #005ac1);outline-offset:2px}.prx-form-tabs__tab:disabled{cursor:not-allowed;opacity:.45}.prx-form-tabs__tab--active{background:var(--md-sys-color-primary-container, color-mix(in srgb, var(--md-sys-color-primary, #005ac1) 16%, var(--md-sys-color-surface-container-high, #2b2930)));color:var(--md-sys-color-on-primary-container, var(--md-sys-color-primary, #005ac1));border-color:transparent;font-weight:600;box-shadow:0 1px 3px #00000014}.prx-form-tabs__tab-icon{font-size:18px;width:18px;height:18px;display:inline-flex;align-items:center;justify-content:center}.prx-form-tabs__tab-badge{display:inline-flex;align-items:center;justify-content:center;padding:1px 7px;font-size:.72rem;font-weight:600;border-radius:999px;background:color-mix(in srgb,currentColor 14%,transparent)}.prx-form-tabs__tab-error-badge{display:inline-flex;align-items:center;justify-content:center;min-width:18px;height:18px;padding:0 5px;border-radius:999px;font-size:.7rem;font-weight:700;background:var(--md-sys-color-error, #ba1a1a);color:var(--md-sys-color-on-error, #ffffff);box-shadow:0 1px 2px #0003}.prx-form-tabs[data-appearance=underline]{border-bottom:1px solid var(--md-sys-color-outline-variant, #cac4d0)}.prx-form-tabs[data-appearance=underline] .prx-form-tabs__tablist{gap:16px;padding-bottom:0}.prx-form-tabs[data-appearance=underline] .prx-form-tabs__tab{border:none;border-radius:0;border-bottom:2px solid transparent;background:transparent;padding:8px 4px 10px;margin-bottom:-1px}.prx-form-tabs[data-appearance=underline] .prx-form-tabs__tab:hover:not(:disabled):not(.prx-form-tabs__tab--active){background:transparent;border-bottom-color:var(--md-sys-color-outline-variant, #cac4d0)}.prx-form-tabs[data-appearance=underline] .prx-form-tabs__tab--active{background:transparent;box-shadow:none;border-bottom-color:var(--md-sys-color-primary, #005ac1);color:var(--md-sys-color-primary, #005ac1)}.prx-form-tabs[data-appearance=buttons] .prx-form-tabs__tablist{background:var(--md-sys-color-surface-container, rgba(0, 0, 0, .04));border-radius:12px;padding:4px;gap:4px;border:1px solid var(--md-sys-color-outline-variant, rgba(0, 0, 0, .08))}.prx-form-tabs[data-appearance=buttons] .prx-form-tabs__tab{border:none;border-radius:8px;padding:6px 12px;background:transparent}.prx-form-tabs[data-appearance=buttons] .prx-form-tabs__tab:hover:not(:disabled):not(.prx-form-tabs__tab--active){background:color-mix(in srgb,currentColor 8%,transparent)}.prx-form-tabs[data-appearance=buttons] .prx-form-tabs__tab--active{background:var(--md-sys-color-surface, var(--mat-sys-surface));color:var(--md-sys-color-primary, #005ac1);box-shadow:0 1px 3px #0000001f}.section-drop-wrapper[hidden]{display:none!important}.form-loading-title,.entity-read-loading-text,.form-blocking-overlay p{color:var(--pdx-text-shimmer-base, var(--md-sys-color-on-surface-variant));font-weight:550;text-shadow:none}@supports (-webkit-background-clip: text) or (background-clip: text){.form-loading-title,.entity-read-loading-text,.form-blocking-overlay p{background-image:var(--pdx-text-shimmer-gradient, linear-gradient(105deg, color-mix(in oklab, var(--md-sys-color-on-surface-variant, #64748b) 78%, var(--md-sys-color-on-surface, #0f172a) 22%) 0%, color-mix(in oklab, var(--md-sys-color-on-surface-variant, #64748b) 78%, var(--md-sys-color-on-surface, #0f172a) 22%) 26%, color-mix(in oklab, var(--md-sys-color-tertiary, #6366f1) 66%, #a855f7 34%) 40%, var(--pdx-text-shimmer-peak, var(--md-sys-color-on-surface, #ffffff)) 50%, color-mix(in oklab, var(--md-sys-color-primary, #006a6a) 66%, #ec4899 34%) 60%, color-mix(in oklab, var(--md-sys-color-on-surface-variant, #64748b) 78%, var(--md-sys-color-on-surface, #0f172a) 22%) 74%, color-mix(in oklab, var(--md-sys-color-on-surface-variant, #64748b) 78%, var(--md-sys-color-on-surface, #0f172a) 22%) 100%));background-size:300% 100%;background-position:100% 50%;background-repeat:no-repeat;-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;color:transparent;animation:praxisFormTextShimmer var(--pdx-text-shimmer-duration, 2.6s) linear infinite;will-change:background-position}}@media(prefers-reduced-motion:reduce),(forced-colors:active),print{.form-loading-title,.entity-read-loading-text,.form-blocking-overlay p{animation:none!important;background-image:none!important;-webkit-text-fill-color:currentColor!important;color:var(--md-sys-color-primary)!important;will-change:auto}}@media(forced-colors:active){.form-loading-title,.entity-read-loading-text,.form-blocking-overlay p{color:CanvasText!important;-webkit-text-fill-color:CanvasText!important}}@keyframes praxisFormTextShimmer{0%{background-position:100% 50%}to{background-position:0% 50%}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: DynamicFieldLoaderDirective, selector: "[dynamicFieldLoader]", inputs: ["fields", "formGroup", "enableExternalControlBinding", "itemTemplate", "debugTrace", "debugTraceLabel", "readonlyMode", "disabledMode", "presentationMode", "visible", "canvasMode"], outputs: ["componentsCreated", "fieldCreated", "fieldDestroyed", "renderError", "canvasMouseEnter", "canvasMouseLeave", "canvasClick", "canvasFocus"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i3.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: i3.MatFabButton, selector: "button[mat-fab], a[mat-fab], button[matFab], a[matFab]", inputs: ["extended"], exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatProgressSpinnerModule }, { kind: "component", type: i17.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i5.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: MatDialogModule }, { kind: "ngmodule", type: MatSnackBarModule }, { kind: "ngmodule", type: MatBadgeModule }, { kind: "directive", type: i19.MatBadge, selector: "[matBadge]", inputs: ["matBadgeColor", "matBadgeOverlap", "matBadgeDisabled", "matBadgePosition", "matBadge", "matBadgeDescription", "matBadgeSize", "matBadgeHidden"] }, { kind: "component", type: PraxisIconButtonComponent, selector: "button[praxisIconButton]", inputs: ["praxisIconButton", "size", "appearance", "presentation", "pressed", "busy"] }, { kind: "directive", type: PraxisIconDirective, selector: "mat-icon[praxisIcon]", inputs: ["praxisIcon"] }, { kind: "component", type: CanvasToolbarComponent, selector: "praxis-canvas-toolbar", inputs: ["selectedElement"], outputs: ["editMetadata", "delete", "moveUp", "moveDown", "selectPath", "requestClose", "toggleReadonly", "toggleRequired", "toggleHidden", "toggleDisabled"] }, { kind: "component", type: PraxisFormActionsComponent, selector: "praxis-form-actions", inputs: ["actions", "editorialVisualContext", "isSubmitting", "formIsValid", "submitError", "invalidRequiredFieldLabels", "suppressInvalidSubmitHint", "formId", "actionOverrides"], outputs: ["action"] }, { kind: "component", type: EmptyStateCardComponent, selector: "praxis-empty-state-card", inputs: ["icon", "title", "description", "primaryAction", "secondaryActions", "inline", "tone", "variant", "alignment", "density", "iconContainer"] }, { kind: "component", type: PraxisAiAssistantShellComponent, selector: "praxis-ai-assistant-shell", inputs: ["labels", "mode", "state", "contextItems", "attachments", "messages", "quickReplies", "recommendedIntents", "prompt", "statusText", "errorText", "testIdPrefix", "panelTestId", "submitTestId", "applyTestId", "primaryAction", "secondaryActions", "governanceActions", "busy", "canSubmit", "canApply", "submitOnEnter", "showAttachAction", "enablePastedAttachments", "enableFileAttachments", "attachmentAccept", "attachmentMultiple", "voiceInputMode", "voiceLanguage", "draggable", "resizable", "minWidth", "minHeight", "margin", "layout"], outputs: ["promptChange", "submitPrompt", "apply", "retryTurn", "cancelTurn", "shellAction", "close", "attach", "attachmentsPasted", "attachmentsSelected", "removeAttachment", "messageAction", "editMessage", "resendMessage", "quickReply", "recommendedIntent", "layoutChange"] }, { kind: "component", type: PraxisRichContent, selector: "praxis-rich-content", inputs: ["document", "nodes", "context", "hostCapabilities", "layout", "rootClassName"], outputs: ["nodeAction"] }] });
22590
+ ], viewQueries: [{ propertyName: "formHost", first: true, predicate: ["formHost"], descendants: true }, { propertyName: "fieldLoaders", predicate: DynamicFieldLoaderDirective, descendants: true }], usesOnChanges: true, ngImport: i0, template: "@if (isLoading) {\n <!-- Loading State -->\n <div class=\"form-loading\" role=\"status\" aria-live=\"polite\" aria-label=\"Carregando formul\u00E1rio\">\n <div class=\"form-loading-header\">\n <mat-progress-spinner diameter=\"32\" aria-label=\"Carregando formul\u00E1rio\"></mat-progress-spinner>\n <div class=\"form-loading-copy\">\n <p class=\"form-loading-title\">Carregando formul\u00E1rio...</p>\n <p class=\"form-loading-subtitle\">Preparando campos e op\u00E7\u00F5es do cadastro.</p>\n </div>\n </div>\n <div class=\"form-loading-skeleton\" aria-hidden=\"true\">\n <span class=\"form-loading-line form-loading-line-title\"></span>\n <span class=\"form-loading-line\"></span>\n <span class=\"form-loading-line form-loading-line-short\"></span>\n <span class=\"form-loading-field\"></span>\n <span class=\"form-loading-field form-loading-field-wide\"></span>\n </div>\n </div>\n} @else if (initializationStatus === 'error') {\n <!-- Error State -->\n <div class=\"form-error\">\n <mat-icon color=\"warn\" [praxisIcon]=\"'error'\"></mat-icon>\n <h3>{{ getErrorTitle() }}</h3>\n <p>{{ currentErrorMessage }}</p>\n @if (isRecoverable) {\n <button mat-stroked-button (click)=\"retryInitialization()\">\n <mat-icon [praxisIcon]=\"'refresh'\"></mat-icon>\n Tentar Novamente\n </button>\n }\n <button mat-button (click)=\"showDetailedError()\" class=\"show-details\">\n Ver Detalhes T\u00E9cnicos\n </button>\n <!-- Permitir corre\u00E7\u00E3o do resourcePath diretamente do estado de erro -->\n <button mat-flat-button color=\"primary\" (click)=\"openQuickConnect()\" class=\"connect-action\">\n <mat-icon [praxisIcon]=\"'bolt'\"></mat-icon>\n Conectar a recurso\n </button>\n </div>\n} @else if (initializationStatus === 'success') {\n <!-- Inline banner for schema change (only when customization is enabled) -->\n @if (shouldShowOutdatedInline()) {\n <div class=\"pfx-form-info-banner\" role=\"status\" aria-live=\"polite\">\n <div class=\"text\">O schema do servidor mudou. Reconciliar agora?</div>\n <div class=\"actions\">\n <button mat-stroked-button color=\"primary\" (click)=\"openConfigEditor()\">\n <mat-icon [praxisIcon]=\"'sync'\"></mat-icon>\n Reconciliar\n </button>\n <button mat-button (click)=\"onSnoozeOutdated()\">Lembrar depois</button>\n <button mat-button (click)=\"onIgnoreOutdated()\">Ignorar</button>\n </div>\n </div>\n }\n\n <!-- Configuration Controls -->\n @if (shouldShowConfigControls && enableCustomization) {\n <div class=\"form-config-controls\">\n @if (showAiAssistant) {\n <button type=\"button\" praxisIconButton=\"auto_awesome\" size=\"dense\" (click)=\"openAiAssistant()\" [disabled]=\"isLoading\"\n [attr.data-testid]=\"aiAssistantTriggerTestId('config-controls')\"\n aria-label=\"Abrir copiloto semantico Praxis do formulario\"\n matTooltip=\"Abrir copiloto sem\u00E2ntico do formul\u00E1rio\">\n </button>\n }\n <button type=\"button\" praxisIconButton=\"settings\" size=\"dense\" (click)=\"openConfigEditor()\" [disabled]=\"isLoading\" class=\"config-button\"\n [matBadge]=\"schemaOutdated ? '!' : ''\" [matBadgeHidden]=\"!schemaOutdated\" matBadgeColor=\"warn\" matBadgeSize=\"small\"\n matBadgePosition=\"above after\"\n [attr.aria-label]=\"configControlLabel\" [matTooltip]=\"configControlLabel\">\n </button>\n <button type=\"button\" praxisIconButton=\"link_off\" size=\"dense\" (click)=\"disconnect()\"\n [attr.aria-label]=\"disconnectControlLabel\" [matTooltip]=\"disconnectControlLabel\"\n [disabled]=\"isLoading\">\n </button>\n </div>\n }\n\n <!-- Form Content -->\n @if (!resourcePath && !hasExplicitSchemaUrl() && !hasRenderableConfig()) {\n <praxis-empty-state-card\n icon=\"link\"\n [title]=\"'Conecte o formul\u00E1rio \u00E0 fonte de dados'\"\n [description]=\"'Informe a rota do recurso da API para gerar automaticamente os campos do formul\u00E1rio.'\"\n [primaryAction]=\"enableCustomization ? { label: 'Conectar \u00E0 fonte de dados', icon: 'bolt', action: openQuickConnect.bind(this) } : undefined\"\n ></praxis-empty-state-card>\n }\n @if (shouldShowContextEmptyState()) {\n <div class=\"form-context-empty-state\" role=\"status\" aria-live=\"polite\">\n <praxis-empty-state-card\n [icon]=\"emptyState?.icon || 'touch_app'\"\n [title]=\"emptyState!.title\"\n [description]=\"emptyState?.description\"\n [tone]=\"emptyState?.tone || 'primary'\"\n [variant]=\"emptyState?.variant || 'transparent'\"\n [alignment]=\"emptyState?.alignment || 'center'\"\n [density]=\"emptyState?.density || 'compact'\"\n [iconContainer]=\"emptyState?.iconContainer || 'circle'\"\n [inline]=\"true\"\n />\n </div>\n } @else {\n <div #entityReadRegion class=\"entity-read-region\" tabindex=\"-1\" role=\"region\" [attr.aria-label]=\"entityReadText('region')\">\n <span class=\"cdk-visually-hidden\" role=\"status\" aria-live=\"polite\" aria-atomic=\"true\">{{ entityReadStatusText() }}</span>\n @if (entityHydrationPending || entityReadFailed) {\n <div class=\"entity-read-feedback\" data-testid=\"form-entity-read-feedback\">\n @if (entityHydrationPending) {\n <mat-progress-spinner diameter=\"28\" mode=\"indeterminate\" aria-hidden=\"true\"></mat-progress-spinner>\n <p class=\"entity-read-loading-text\" aria-hidden=\"true\">{{ entityReadText('loading') }}</p>\n } @else {\n <mat-icon [praxisIcon]=\"'error_outline'\" aria-hidden=\"true\"></mat-icon>\n <p aria-hidden=\"true\">{{ entityReadText('error') }}</p>\n <button mat-stroked-button type=\"button\" (click)=\"retryEntityRead(entityReadRegion)\">{{ entityReadText('retry') }}</button>\n }\n </div>\n }\n <form #formHost (ngSubmit)=\"onSubmit()\" [attr.aria-busy]=\"submitting || entityHydrationPending ? 'true' : null\"\n [style.opacity]=\"entityHydrationPending || entityReadFailed ? '0' : null\"\n [style.transition]=\"entityHydrationPending || entityReadFailed ? 'none' : null\"\n [attr.inert]=\"entityHydrationPending || entityReadFailed ? '' : null\"\n [attr.aria-hidden]=\"entityHydrationPending || entityReadFailed ? 'true' : null\"\n [attr.aria-label]=\"'Formul\u00E1rio ' + (config.metadata?.version || '')\" [class.canvas-mode-enabled]=\"enableCustomization\"\n [class.presentation-mode]=\"effectivePresentation\"\n [class.praxis-dynamic-form--presentation]=\"effectivePresentation\"\n [class.readonly-mode]=\"effectiveReadonly\"\n [attr.data-presentation-preset]=\"effectivePresentation ? effectivePresentationPreset : null\"\n [class.praxis-dynamic-form--corporate-dossier]=\"isCorporateDossierPreset()\"\n [class.praxis-dynamic-form--editorial-card]=\"isEditorialCardPreset()\"\n [class.praxis-dynamic-form--compact-presentation]=\"isCompactPresentationPreset()\"\n [class.editorial-visual-context]=\"hasEditorialVisualContext()\"\n [class.pfx-mounting]=\"isMounting\" [formGroup]=\"form\"\n [ngClass]=\"{\n 'pres-compact': presentationVars.compact,\n 'pres-label-left': presentationVars.labelPosition === 'left',\n 'pres-label-above': presentationVars.labelPosition === 'above'\n }\" [style.--pfx-pres-label-align]=\"presentationVars.labelAlign\"\n [style.--pfx-pres-label-size]=\"presentationVars.labelSize\"\n [style.--pfx-pres-label-width]=\"presentationVars.labelWidth\"\n [style.--pfx-pres-row-gap]=\"presentationVars.density === 'compact' ? '6px' : (presentationVars.density === 'cozy' ? '8px' : '10px')\"\n [style.--pfx-pres-row-padding]=\"presentationVars.density === 'compact' ? '2px 0' : (presentationVars.density === 'cozy' ? '6px 0' : '8px 0')\"\n [style.--pfx-pres-value-align]=\"presentationVars.valueAlign\"\n [style.--pfx-pres-value-size]=\"presentationVars.valueSize\"\n [style.--pdx-form-mount-duration]=\"getMountDurationVar()\"\n [style.--pdx-form-mount-offset]=\"getMountOffsetVar()\"\n [style.--pdx-form-mount-stagger]=\"getMountStaggerVar()\"\n class=\"praxis-dynamic-form\">\n @if (enableCustomization && selectedElement) {\n <praxis-canvas-toolbar (editMetadata)=\"openSelectedElementEditor()\" (selectPath)=\"onSelectPath($event)\"\n (moveUp)=\"onToolbarMove('up')\" (moveDown)=\"onToolbarMove('down')\" (toggleReadonly)=\"onToolbarToggleReadonly()\"\n (toggleRequired)=\"onToolbarToggleRequired()\" (toggleHidden)=\"onToolbarToggleHidden()\"\n (toggleDisabled)=\"onToolbarToggleDisabled()\" (requestClose)=\"onToolbarRequestClose()\"\n [selectedElement]=\"selectedElement\"\n [style.transform]=\"toolbarTransform\"></praxis-canvas-toolbar>\n }\n\n @if (formBlocksBefore?.nodes?.length) {\n <section class=\"form-editorial-blocks form-editorial-blocks-before\" data-editorial-placement=\"before\">\n <praxis-rich-content\n [document]=\"formBlocksBeforeDocument\"\n [context]=\"getEditorialRichContentContext()\"\n [hostCapabilities]=\"richContentHostCapabilities\"\n ></praxis-rich-content>\n </section>\n }\n\n @if (actionPlacement === 'top' && !(effectivePresentation || effectiveReadonly)) {\n <praxis-form-actions data-actions-placement=\"top\" [actions]=\"effectiveActions\" [isSubmitting]=\"submitting\"\n [formIsValid]=\"effectiveFormIsValid\" [submitError]=\"submitError\" [formId]=\"formId\" [actionOverrides]=\"actionRuleProps\"\n [invalidRequiredFieldLabels]=\"invalidRequiredFieldLabels\"\n [suppressInvalidSubmitHint]=\"entityHydrationPending\"\n [editorialVisualContext]=\"hasEditorialVisualContext()\"\n (action)=\"onFormAction($event)\"></praxis-form-actions>\n }\n\n <!-- Tab Layout Navigation Bar -->\n @if (effectiveLayoutMode === 'tabs' && effectiveTabs.length > 1) {\n <nav class=\"prx-form-tabs\" [attr.data-appearance]=\"effectiveTabsAppearance\" role=\"tablist\" aria-label=\"Navega\u00E7\u00E3o em abas do formul\u00E1rio\">\n <div class=\"prx-form-tabs__tablist prx-form-tabs__tablist--scrollable\">\n @for (tab of effectiveTabs; track tab.id) {\n <button\n type=\"button\"\n role=\"tab\"\n class=\"prx-form-tabs__tab\"\n [class.prx-form-tabs__tab--active]=\"activeTabId === tab.id\"\n [attr.aria-selected]=\"activeTabId === tab.id\"\n [attr.aria-controls]=\"getTabAriaControls(tab)\"\n [attr.id]=\"'tab-' + tab.id\"\n [disabled]=\"tab.disabled\"\n [matTooltip]=\"tab.tooltip || null\"\n [matTooltipDisabled]=\"!tab.tooltip\"\n (click)=\"selectTab(tab.id)\"\n >\n @if (tab.icon) {\n <mat-icon class=\"prx-form-tabs__tab-icon\" [praxisIcon]=\"tab.icon\" aria-hidden=\"true\"></mat-icon>\n }\n <span class=\"prx-form-tabs__tab-label\">{{ tab.label }}</span>\n @if (tab.badge != null) {\n <span class=\"prx-form-tabs__tab-badge\">{{ tab.badge }}</span>\n }\n @if (getTabErrorCount(tab) > 0) {\n <span class=\"prx-form-tabs__tab-error-badge\" [attr.aria-label]=\"getTabErrorCount(tab) + ' erros na aba'\">\n {{ getTabErrorCount(tab) }}\n </span>\n }\n </button>\n }\n </div>\n </nav>\n }\n\n @for (section of (config.sections || []); track (section.id ?? $index); let sectionIndex = $index) {\n <div class=\"section-drop-wrapper\" [attr.data-section-id]=\"section.id\" [hidden]=\"!isSectionInActiveTab(section)\"\n [attr.role]=\"effectiveLayoutMode === 'tabs' ? 'tabpanel' : null\"\n [attr.id]=\"effectiveLayoutMode === 'tabs' ? ('section-tabpanel-' + section.id) : null\"\n [attr.aria-labelledby]=\"effectiveLayoutMode === 'tabs' ? ('tab-' + (getTabIdForSection(section) || section.id)) : null\">\n @if (isSectionVisible(section)) {\n <div #sectionEl class=\"form-section canvas-element\" data-canvas-type=\"section\" [attr.data-section-id]=\"section.id\"\n [attr.data-section-index]=\"sectionIndex\" (mouseenter)=\"onElementMouseEnter($event, 'section', section, sectionEl)\"\n (mouseleave)=\"onElementMouseLeave($event)\" (click)=\"onElementClick($event, 'section', section, sectionEl)\"\n [class.selected]=\"selectedElement?.domElement === sectionEl\"\n [class.hovered]=\"hoveredElement?.domElement === sectionEl && selectedElement?.domElement !== sectionEl\"\n [attr.data-section-appearance]=\"getSectionAppearance(section) || null\"\n [attr.data-section-divider]=\"isSectionDividerEnabled(section) ? 'true' : null\"\n [attr.data-presentation-preset]=\"effectivePresentation ? getSectionPresentationPreset(section) : null\"\n [class.form-section--corporate-dossier]=\"isSectionCorporateDossier(section)\"\n [class.form-section--editorial-card]=\"isSectionEditorialCard(section)\"\n [class.form-section--compact-presentation]=\"isSectionCompactPresentation(section)\"\n [style.marginBottom.px]=\"!isLastVisibleSection(section) ? getSectionGapBottom(section) : null\" [ngClass]=\"getSectionClasses(section)\"\n [ngStyle]=\"getSectionStyles(section)\">\n @if (!shouldHideSectionHeader(section)) {\n <div\n class=\"section-heading\"\n [class.align-center]=\"getSectionHeaderAlign(section) === 'center'\"\n [class.step-appearance]=\"getSectionAppearance(section) === 'step'\"\n [class.title-only]=\"isSectionHeaderTitleOnly(section)\"\n >\n <div class=\"section-heading-text\" [matTooltip]=\"getSectionHeaderTooltip(section) || null\"\n [matTooltipDisabled]=\"!getSectionHeaderTooltip(section)\">\n @if (getSectionStepLabel(section)) {\n <div class=\"section-step-label\" [class.align-center]=\"getSectionHeaderAlign(section) === 'center'\">\n {{ getSectionStepLabel(section) }}\n </div>\n }\n @if (getSectionTitle(section)) {\n <h3 class=\"section-title\" [class.title-large]=\"getSectionTitleStyle(section) === 'titleLarge'\"\n [class.title-medium]=\"getSectionTitleStyle(section) === 'titleMedium'\"\n [class.title-small]=\"getSectionTitleStyle(section) === 'titleSmall'\"\n [class.headline-small]=\"getSectionTitleStyle(section) === 'headlineSmall'\"\n [style.marginBottom.px]=\"getEffectiveSectionTitleGapBottom(section)\" [style.color]=\"getSectionTitleColor(section) || null\"\n [class.align-center]=\"getSectionHeaderAlign(section) === 'center'\"\n [attr.id]=\"sectionPanelId(section, sectionIndex) + '-title'\">\n @let sectionHeaderVisual = getSectionHeaderVisual(section);\n @let sectionHeaderAvatarSize = getSectionHeaderAvatarSize(section);\n @if (sectionHeaderVisual.kind === 'icon') {\n <mat-icon class=\"section-title-icon\" aria-hidden=\"true\" [praxisIcon]=\"sectionHeaderVisual.icon\"></mat-icon>\n }\n @if (sectionHeaderVisual.kind === 'image') {\n <img class=\"section-title-avatar section-title-avatar-image\" [class.size-sm]=\"sectionHeaderAvatarSize === 'sm'\"\n [class.size-md]=\"sectionHeaderAvatarSize === 'md'\" [class.size-lg]=\"sectionHeaderAvatarSize === 'lg'\"\n [src]=\"sectionHeaderVisual.src\" [alt]=\"sectionHeaderVisual.alt\" />\n }\n @if (sectionHeaderVisual.kind === 'initials') {\n <span class=\"section-title-avatar section-title-avatar-text\" [class.size-sm]=\"sectionHeaderAvatarSize === 'sm'\"\n [class.size-md]=\"sectionHeaderAvatarSize === 'md'\" [class.size-lg]=\"sectionHeaderAvatarSize === 'lg'\" aria-hidden=\"true\">\n {{ sectionHeaderVisual.text }}\n </span>\n @if (sectionHeaderVisual.ariaLabel) {\n <span class=\"section-title-avatar-sr-only\">{{ sectionHeaderVisual.ariaLabel }}</span>\n }\n }\n @if (sectionHeaderVisual.kind === 'placeholder') {\n <span class=\"section-title-avatar section-title-avatar-placeholder\" [class.size-sm]=\"sectionHeaderAvatarSize === 'sm'\"\n [class.size-md]=\"sectionHeaderAvatarSize === 'md'\" [class.size-lg]=\"sectionHeaderAvatarSize === 'lg'\" aria-hidden=\"true\">\n @if (sectionHeaderVisual.icon) {\n <mat-icon aria-hidden=\"true\" [praxisIcon]=\"sectionHeaderVisual.icon\"></mat-icon>\n }\n @if (sectionHeaderVisual.text) {\n <span>{{ sectionHeaderVisual.text }}</span>\n }\n </span>\n @if (sectionHeaderVisual.ariaLabel) {\n <span class=\"section-title-avatar-sr-only\">{{ sectionHeaderVisual.ariaLabel }}</span>\n }\n }\n {{ getSectionTitle(section) }}\n @if (enableCustomization) {\n <button type=\"button\" class=\"inline-edit-btn\" praxisIconButton=\"edit\" size=\"dense\" (click)=\"openSectionEditor(section, 'title')\"\n aria-label=\"Editar t\u00EDtulo da se\u00E7\u00E3o\" matTooltip=\"Editar t\u00EDtulo\">\n </button>\n }\n </h3>\n }\n @if (getSectionDescription(section)) {\n <p class=\"section-description\" [class.body-large]=\"getSectionDescriptionStyle(section) === 'bodyLarge'\"\n [class.body-medium]=\"getSectionDescriptionStyle(section) === 'bodyMedium'\"\n [class.body-small]=\"getSectionDescriptionStyle(section) === 'bodySmall'\"\n [style.marginBottom.px]=\"getSectionDescriptionGapBottom(section) ?? 8\" [style.color]=\"getSectionDescriptionColor(section) || null\"\n [class.align-center]=\"getSectionHeaderAlign(section) === 'center'\">\n {{ getSectionDescription(section) }}\n @if (enableCustomization) {\n <button type=\"button\" class=\"inline-edit-btn\" praxisIconButton=\"edit\" size=\"dense\"\n (click)=\"openSectionEditor(section, 'description')\" aria-label=\"Editar descri\u00E7\u00E3o da se\u00E7\u00E3o\"\n matTooltip=\"Editar descri\u00E7\u00E3o\">\n </button>\n }\n </p>\n }\n </div>\n @if (getSectionHeaderActions(section).length) {\n <div class=\"section-heading-actions\" [class.align-center]=\"getSectionHeaderAlign(section) === 'center'\">\n @for (action of getSectionHeaderActions(section); track action.id) {\n <button\n type=\"button\"\n class=\"section-heading-action-btn\"\n [praxisIconButton]=\"action.icon\"\n size=\"compact\"\n [busy]=\"action.loading\"\n [disabled]=\"isSectionHeaderActionDisabled(action)\"\n [matTooltip]=\"getSectionHeaderActionTooltip(action)\"\n [attr.aria-label]=\"action.label\"\n [attr.aria-busy]=\"action.loading ? 'true' : null\"\n [ngClass]=\"getSectionHeaderActionNgClass(action)\"\n [ngStyle]=\"getSectionHeaderActionStyles(action)\"\n (click)=\"onSectionHeaderActionClick(section, action, $event)\"\n >\n @if (action.loading) {\n <span class=\"section-heading-action-sr-only\">{{ getSectionHeaderActionLoadingLabel(action) }}</span>\n }\n </button>\n }\n </div>\n }\n @if (isSectionCollapsible(section)) {\n <button type=\"button\" class=\"section-collapse-btn\" [praxisIconButton]=\"isSectionCollapsed(section) ? 'expand_more' : 'expand_less'\" size=\"compact\"\n (click)=\"toggleSectionCollapse($event, section)\" [attr.aria-expanded]=\"!isSectionCollapsed(section)\"\n [attr.aria-controls]=\"sectionPanelId(section, sectionIndex)\"\n [attr.aria-label]=\"isSectionCollapsed(section) ? 'Expandir se\u00E7\u00E3o' : 'Recolher se\u00E7\u00E3o'\">\n </button>\n }\n </div>\n }\n\n <div class=\"section-body\" [class.collapsed]=\"isSectionCollapsed(section)\"\n [attr.id]=\"sectionPanelId(section, sectionIndex)\"\n [attr.role]=\"getSectionTitle(section) ? 'region' : null\"\n [attr.aria-labelledby]=\"getSectionTitle(section) ? sectionPanelId(section, sectionIndex) + '-title' : null\">\n @if (!isSectionCollapsed(section)) {\n @if (sectionIndex === 0) {\n @let targetSummary = getActionTargetRecordSummary();\n @if (targetSummary) {\n <div class=\"form-action-target-banner\" data-testid=\"form-action-target-banner\">\n <div class=\"form-action-target-banner__header\">\n <span class=\"form-action-target-banner__eyebrow\">{{ actionTargetSelectedRecordLabel }}</span>\n @if (targetSummary.id) {\n <span class=\"form-action-target-banner__id\">#{{ targetSummary.id }}</span>\n }\n @if (targetSummary.badges.length) {\n <div class=\"form-action-target-banner__badges\">\n @for (badge of targetSummary.badges; track badge.label) {\n <span\n class=\"form-action-target-banner__badge\"\n [attr.data-tone]=\"badge.tone\"\n >{{ badge.value }}</span>\n }\n </div>\n }\n </div>\n @if (targetSummary.title) {\n <div class=\"form-action-target-banner__title\">{{ targetSummary.title }}</div>\n }\n @if (targetSummary.subtitle) {\n <div class=\"form-action-target-banner__subtitle\">{{ targetSummary.subtitle }}</div>\n }\n </div>\n }\n }\n @for (row of section.rows; track (row.id ?? $index); let rowIndex = $index) {\n @if (isRowVisible(row)) {\n <div class=\"row-drop-wrapper\" [attr.data-section-id]=\"section.id\">\n <div #rowEl class=\"form-row grid-12 canvas-element\" data-canvas-type=\"row\" [attr.data-row-index]=\"rowIndex\"\n [attr.data-section-id]=\"section.id\" [attr.data-row-id]=\"row.id\" [style.--pfx-grid-gap.px]=\"getRowGap(row)\"\n [style.--pfx-field-gap.px]=\"getRowRowGap(row)\"\n [style.--pfx-mount-index]=\"rowIndex\"\n [style.marginBottom.px]=\"rowIndex < section.rows.length - 1 ? (getRowRowGap(row) ?? null) : null\"\n [ngClass]=\"getRowClasses(row)\" [ngStyle]=\"getRowStyles(row)\"\n (mouseenter)=\"onElementMouseEnter($event, 'row', row, rowEl)\" (mouseleave)=\"onElementMouseLeave($event)\"\n (click)=\"onElementClick($event, 'row', row, rowEl)\" [class.selected]=\"selectedElement?.domElement === rowEl\"\n [class.hovered]=\"hoveredElement?.domElement === rowEl && selectedElement?.domElement !== rowEl\">\n @for (column of row.columns; track (column.id ?? $index); let colIndex = $index) {\n @if (isColumnVisible(column)) {\n <div class=\"column-drop-wrapper\" [attr.data-section-id]=\"section.id\" [attr.data-row-id]=\"row.id\">\n <div #colEl class=\"form-column canvas-element\" [ngClass]=\"getColumnClasses(column, row)\"\n [style.padding.px]=\"getColumnPadding(column)\" [style.--pfx-field-gap.px]=\"getRowRowGap(row)\"\n [ngStyle]=\"getColumnStyles(column)\" [attr.data-testid]=\"column.testId || null\"\n [attr.data-row-gap]=\"getRowRowGap(row)\" data-canvas-type=\"column\" [attr.data-column-index]=\"colIndex\"\n [attr.data-row-index]=\"rowIndex\" [attr.data-section-id]=\"section.id\" [attr.data-row-id]=\"row.id\"\n [attr.data-column-id]=\"column.id\" (mouseenter)=\"onElementMouseEnter($event, 'column', column, colEl)\"\n (mouseleave)=\"onElementMouseLeave($event)\" (click)=\"onElementClick($event, 'column', column, colEl)\"\n [class.selected]=\"selectedElement?.domElement === colEl\"\n [class.hovered]=\"hoveredElement?.domElement === colEl && selectedElement?.domElement !== colEl\">\n @for (renderItem of getColumnRenderItems(column); track renderItem.id) {\n @if (renderItem.kind === 'fields') {\n <ng-container dynamicFieldLoader [fields]=\"getRenderableFieldsForLoader(renderItem.fields)\" [formGroup]=\"form\"\n [enableExternalControlBinding]=\"true\"\n [readonlyMode]=\"effectiveReadonly\"\n [disabledMode]=\"effectiveDisabledMode\"\n [presentationMode]=\"presentationForLoader\" [visible]=\"visibleGlobal === null ? null : visibleGlobal\"\n [canvasMode]=\"enableCustomization\" (canvasMouseEnter)=\"onFieldMouseEnter($event)\"\n (canvasMouseLeave)=\"onFieldMouseLeave($event)\" (canvasClick)=\"onFieldClick($event)\"\n (canvasFocus)=\"onFieldFocus($event)\"\n (renderError)=\"onFieldRenderError($event)\">\n </ng-container>\n } @else {\n <praxis-rich-content\n class=\"form-layout-rich-content\"\n [ngClass]=\"renderItem.className || null\"\n [ngStyle]=\"renderItem.style || null\"\n [document]=\"renderItem.document\"\n [layout]=\"renderItem.layout\"\n [rootClassName]=\"renderItem.rootClassName || ''\"\n [context]=\"getEditorialRichContentContext()\"\n [hostCapabilities]=\"richContentHostCapabilities\"\n ></praxis-rich-content>\n }\n }\n </div>\n </div>\n } }\n </div>\n </div>\n }\n }\n } @else {\n <div class=\"section-collapsed-placeholder\">\n <mat-icon aria-hidden=\"true\" [praxisIcon]=\"'unfold_more'\"></mat-icon>\n <span>{{ getSectionCollapsedSummary(section) }}</span>\n </div>\n }\n @if (isLastVisibleSection(section) && beforeActionsPlacement === 'insideLastSection' && formBlocksBeforeActions?.nodes?.length) {\n <section class=\"form-editorial-blocks form-editorial-blocks-before-actions\" data-editorial-placement=\"beforeActions\">\n <praxis-rich-content\n [document]=\"formBlocksBeforeActionsDocument\"\n [context]=\"getEditorialRichContentContext()\"\n [hostCapabilities]=\"richContentHostCapabilities\"\n ></praxis-rich-content>\n </section>\n }\n @if (actionPlacement === 'insideLastSection' && isLastVisibleSection(section) && !(effectivePresentation\n || effectiveReadonly)) {\n <praxis-form-actions data-actions-placement=\"insideLastSection\" [actions]=\"effectiveActions\"\n [isSubmitting]=\"submitting\" [formIsValid]=\"effectiveFormIsValid\" [submitError]=\"submitError\" [formId]=\"formId\"\n [actionOverrides]=\"actionRuleProps\" [invalidRequiredFieldLabels]=\"invalidRequiredFieldLabels\"\n [suppressInvalidSubmitHint]=\"entityHydrationPending\"\n [editorialVisualContext]=\"hasEditorialVisualContext()\"\n (action)=\"onFormAction($event)\"></praxis-form-actions>\n }\n </div>\n <!-- Overlay de bloqueio durante submiss\u00E3o -->\n @if (submitting) {\n <div class=\"form-blocking-overlay\" aria-live=\"polite\">\n <mat-progress-spinner\n diameter=\"40\"\n color=\"primary\"\n [attr.aria-label]=\"config.messages?.loading?.submit || 'Salvando formul\u00E1rio'\"\n ></mat-progress-spinner>\n <p>{{ config.messages?.loading?.submit || 'Salvando...' }}</p>\n </div>\n }\n </div>\n\n @if (enableCustomization && selectedElement?.domElement === sectionEl) {\n <div class=\"add-section-container\">\n <div class=\"add-section-line\"></div>\n <button mat-fab color=\"primary\" aria-label=\"Adicionar nova se\u00E7\u00E3o\" (click)=\"addNewSectionAfter(sectionIndex)\"\n matTooltip=\"Adicionar nova se\u00E7\u00E3o aqui\">\n <mat-icon [praxisIcon]=\"'add'\"></mat-icon>\n </button>\n <div class=\"add-section-line\"></div>\n </div>\n }\n }\n </div>\n }\n\n @if (beforeActionsPlacement !== 'insideLastSection' && formBlocksBeforeActions?.nodes?.length) {\n <section class=\"form-editorial-blocks form-editorial-blocks-before-actions\" data-editorial-placement=\"beforeActions\">\n <praxis-rich-content\n [document]=\"formBlocksBeforeActionsDocument\"\n [context]=\"getEditorialRichContentContext()\"\n [hostCapabilities]=\"richContentHostCapabilities\"\n ></praxis-rich-content>\n </section>\n }\n\n @if (actionPlacement === 'afterSections' && !(effectivePresentation || effectiveReadonly)) {\n <praxis-form-actions data-actions-placement=\"afterSections\" [actions]=\"effectiveActions\" [isSubmitting]=\"submitting\"\n [formIsValid]=\"effectiveFormIsValid\" [submitError]=\"submitError\" [formId]=\"formId\"\n [actionOverrides]=\"actionRuleProps\" [invalidRequiredFieldLabels]=\"invalidRequiredFieldLabels\"\n [suppressInvalidSubmitHint]=\"entityHydrationPending\"\n [editorialVisualContext]=\"hasEditorialVisualContext()\"\n (action)=\"onFormAction($event)\"></praxis-form-actions>\n }\n\n @if (formBlocksAfter?.nodes?.length) {\n <section class=\"form-editorial-blocks form-editorial-blocks-after\" data-editorial-placement=\"after\">\n <praxis-rich-content\n [document]=\"formBlocksAfterDocument\"\n [context]=\"getEditorialRichContentContext()\"\n [hostCapabilities]=\"richContentHostCapabilities\"\n ></praxis-rich-content>\n </section>\n }\n </form>\n </div>\n }\n @if (showAiAssistant && !enableCustomization && (mode === 'view' || mode === 'presentation' || mode === 'dossier') && !shouldShowContextEmptyState()) {\n <div class=\"ai-floating-assistant\">\n <button type=\"button\" praxisIconButton=\"auto_awesome\" size=\"compact\" (click)=\"openAiAssistant()\" [disabled]=\"isLoading || entityHydrationPending || entityReadFailed\"\n [attr.data-testid]=\"aiAssistantTriggerTestId('view-floating')\"\n aria-label=\"Abrir copiloto semantico Praxis do formulario\"\n matTooltip=\"Pedir ajuda sobre este formul\u00E1rio\">\n </button>\n </div>\n }\n @if (showAiAssistant && aiAssistantOpen && aiAssistantViewState) {\n <praxis-ai-assistant-shell\n [labels]=\"aiAssistantLabels\"\n [mode]=\"aiAssistantViewState.mode\"\n [state]=\"aiAssistantViewState.state\"\n [contextItems]=\"aiAssistantViewState.contextItems\"\n [attachments]=\"aiAssistantViewState.attachments\"\n [messages]=\"aiAssistantViewState.messages\"\n [quickReplies]=\"aiAssistantViewState.quickReplies\"\n [prompt]=\"aiAssistantPrompt\"\n [statusText]=\"aiAssistantViewState.statusText\"\n [errorText]=\"aiAssistantViewState.errorText\"\n [busy]=\"aiAssistantViewState.state === 'processing' || aiAssistantViewState.state === 'applying'\"\n [canApply]=\"aiAssistantViewState.canApply\"\n [layout]=\"aiAssistantLayout\"\n testIdPrefix=\"dynamic-form-ai-assistant\"\n panelTestId=\"dynamic-form-ai-assistant-panel\"\n submitTestId=\"dynamic-form-ai-assistant-submit\"\n applyTestId=\"dynamic-form-ai-assistant-apply\"\n (promptChange)=\"onAiAssistantPromptChange($event)\"\n (submitPrompt)=\"onAiAssistantSubmit($event)\"\n (apply)=\"onAiAssistantApply()\"\n (retryTurn)=\"onAiAssistantRetry()\"\n (cancelTurn)=\"onAiAssistantCancel()\"\n (quickReply)=\"onAiAssistantQuickReply($event)\"\n (editMessage)=\"onAiAssistantEditMessage($event)\"\n (resendMessage)=\"onAiAssistantResendMessage($event)\"\n (layoutChange)=\"onAiAssistantLayoutChange($event)\"\n (close)=\"closeAiAssistant()\"\n ></praxis-ai-assistant-shell>\n }\n }\n", styles: ["@charset \"UTF-8\";.span-xs-1{grid-column:span 1}.span-xs-2{grid-column:span 2}.span-xs-3{grid-column:span 3}.span-xs-4{grid-column:span 4}.span-xs-5{grid-column:span 5}.span-xs-6{grid-column:span 6}.span-xs-7{grid-column:span 7}.span-xs-8{grid-column:span 8}.span-xs-9{grid-column:span 9}.span-xs-10{grid-column:span 10}.span-xs-11{grid-column:span 11}.span-xs-12{grid-column:span 12}.offset-xs-0{margin-left:0%}.offset-xs-1{margin-left:calc(1 / 12 * 100%)}.offset-xs-2{margin-left:calc(2 / 12 * 100%)}.offset-xs-3{margin-left:25%}.offset-xs-4{margin-left:calc(4 / 12 * 100%)}.offset-xs-5{margin-left:calc(5 / 12 * 100%)}.offset-xs-6{margin-left:50%}.offset-xs-7{margin-left:calc(7 / 12 * 100%)}.offset-xs-8{margin-left:calc(8 / 12 * 100%)}.offset-xs-9{margin-left:75%}.offset-xs-10{margin-left:calc(10 / 12 * 100%)}.offset-xs-11{margin-left:calc(11 / 12 * 100%)}.order-xs--12{order:-12}.order-xs--11{order:-11}.order-xs--10{order:-10}.order-xs--9{order:-9}.order-xs--8{order:-8}.order-xs--7{order:-7}.order-xs--6{order:-6}.order-xs--5{order:-5}.order-xs--4{order:-4}.order-xs--3{order:-3}.order-xs--2{order:-2}.order-xs--1{order:-1}.order-xs-0{order:0}.order-xs-1{order:1}.order-xs-2{order:2}.order-xs-3{order:3}.order-xs-4{order:4}.order-xs-5{order:5}.order-xs-6{order:6}.order-xs-7{order:7}.order-xs-8{order:8}.order-xs-9{order:9}.order-xs-10{order:10}.order-xs-11{order:11}.order-xs-12{order:12}.hidden-xs{display:none}@container praxis-form-row (min-width: 600px){.span-sm-1{grid-column:span 1}.span-sm-2{grid-column:span 2}.span-sm-3{grid-column:span 3}.span-sm-4{grid-column:span 4}.span-sm-5{grid-column:span 5}.span-sm-6{grid-column:span 6}.span-sm-7{grid-column:span 7}.span-sm-8{grid-column:span 8}.span-sm-9{grid-column:span 9}.span-sm-10{grid-column:span 10}.span-sm-11{grid-column:span 11}.span-sm-12{grid-column:span 12}.offset-sm-0{margin-left:0%}.offset-sm-1{margin-left:calc(1 / 12 * 100%)}.offset-sm-2{margin-left:calc(2 / 12 * 100%)}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:calc(4 / 12 * 100%)}.offset-sm-5{margin-left:calc(5 / 12 * 100%)}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:calc(7 / 12 * 100%)}.offset-sm-8{margin-left:calc(8 / 12 * 100%)}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:calc(10 / 12 * 100%)}.offset-sm-11{margin-left:calc(11 / 12 * 100%)}.order-sm--12{order:-12}.order-sm--11{order:-11}.order-sm--10{order:-10}.order-sm--9{order:-9}.order-sm--8{order:-8}.order-sm--7{order:-7}.order-sm--6{order:-6}.order-sm--5{order:-5}.order-sm--4{order:-4}.order-sm--3{order:-3}.order-sm--2{order:-2}.order-sm--1{order:-1}.order-sm-0{order:0}.order-sm-1{order:1}.order-sm-2{order:2}.order-sm-3{order:3}.order-sm-4{order:4}.order-sm-5{order:5}.order-sm-6{order:6}.order-sm-7{order:7}.order-sm-8{order:8}.order-sm-9{order:9}.order-sm-10{order:10}.order-sm-11{order:11}.order-sm-12{order:12}.hidden-sm{display:none}}@container praxis-form-row (min-width: 900px){.span-md-1{grid-column:span 1}.span-md-2{grid-column:span 2}.span-md-3{grid-column:span 3}.span-md-4{grid-column:span 4}.span-md-5{grid-column:span 5}.span-md-6{grid-column:span 6}.span-md-7{grid-column:span 7}.span-md-8{grid-column:span 8}.span-md-9{grid-column:span 9}.span-md-10{grid-column:span 10}.span-md-11{grid-column:span 11}.span-md-12{grid-column:span 12}.offset-md-0{margin-left:0%}.offset-md-1{margin-left:calc(1 / 12 * 100%)}.offset-md-2{margin-left:calc(2 / 12 * 100%)}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:calc(4 / 12 * 100%)}.offset-md-5{margin-left:calc(5 / 12 * 100%)}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:calc(7 / 12 * 100%)}.offset-md-8{margin-left:calc(8 / 12 * 100%)}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:calc(10 / 12 * 100%)}.offset-md-11{margin-left:calc(11 / 12 * 100%)}.order-md--12{order:-12}.order-md--11{order:-11}.order-md--10{order:-10}.order-md--9{order:-9}.order-md--8{order:-8}.order-md--7{order:-7}.order-md--6{order:-6}.order-md--5{order:-5}.order-md--4{order:-4}.order-md--3{order:-3}.order-md--2{order:-2}.order-md--1{order:-1}.order-md-0{order:0}.order-md-1{order:1}.order-md-2{order:2}.order-md-3{order:3}.order-md-4{order:4}.order-md-5{order:5}.order-md-6{order:6}.order-md-7{order:7}.order-md-8{order:8}.order-md-9{order:9}.order-md-10{order:10}.order-md-11{order:11}.order-md-12{order:12}.hidden-md{display:none}}@container praxis-form-row (min-width: 1200px){.span-lg-1{grid-column:span 1}.span-lg-2{grid-column:span 2}.span-lg-3{grid-column:span 3}.span-lg-4{grid-column:span 4}.span-lg-5{grid-column:span 5}.span-lg-6{grid-column:span 6}.span-lg-7{grid-column:span 7}.span-lg-8{grid-column:span 8}.span-lg-9{grid-column:span 9}.span-lg-10{grid-column:span 10}.span-lg-11{grid-column:span 11}.span-lg-12{grid-column:span 12}.offset-lg-0{margin-left:0%}.offset-lg-1{margin-left:calc(1 / 12 * 100%)}.offset-lg-2{margin-left:calc(2 / 12 * 100%)}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:calc(4 / 12 * 100%)}.offset-lg-5{margin-left:calc(5 / 12 * 100%)}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:calc(7 / 12 * 100%)}.offset-lg-8{margin-left:calc(8 / 12 * 100%)}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:calc(10 / 12 * 100%)}.offset-lg-11{margin-left:calc(11 / 12 * 100%)}.order-lg--12{order:-12}.order-lg--11{order:-11}.order-lg--10{order:-10}.order-lg--9{order:-9}.order-lg--8{order:-8}.order-lg--7{order:-7}.order-lg--6{order:-6}.order-lg--5{order:-5}.order-lg--4{order:-4}.order-lg--3{order:-3}.order-lg--2{order:-2}.order-lg--1{order:-1}.order-lg-0{order:0}.order-lg-1{order:1}.order-lg-2{order:2}.order-lg-3{order:3}.order-lg-4{order:4}.order-lg-5{order:5}.order-lg-6{order:6}.order-lg-7{order:7}.order-lg-8{order:8}.order-lg-9{order:9}.order-lg-10{order:10}.order-lg-11{order:11}.order-lg-12{order:12}.hidden-lg{display:none}}@container praxis-form-row (min-width: 1536px){.span-xl-1{grid-column:span 1}.span-xl-2{grid-column:span 2}.span-xl-3{grid-column:span 3}.span-xl-4{grid-column:span 4}.span-xl-5{grid-column:span 5}.span-xl-6{grid-column:span 6}.span-xl-7{grid-column:span 7}.span-xl-8{grid-column:span 8}.span-xl-9{grid-column:span 9}.span-xl-10{grid-column:span 10}.span-xl-11{grid-column:span 11}.span-xl-12{grid-column:span 12}.offset-xl-0{margin-left:0%}.offset-xl-1{margin-left:calc(1 / 12 * 100%)}.offset-xl-2{margin-left:calc(2 / 12 * 100%)}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:calc(4 / 12 * 100%)}.offset-xl-5{margin-left:calc(5 / 12 * 100%)}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:calc(7 / 12 * 100%)}.offset-xl-8{margin-left:calc(8 / 12 * 100%)}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:calc(10 / 12 * 100%)}.offset-xl-11{margin-left:calc(11 / 12 * 100%)}.order-xl--12{order:-12}.order-xl--11{order:-11}.order-xl--10{order:-10}.order-xl--9{order:-9}.order-xl--8{order:-8}.order-xl--7{order:-7}.order-xl--6{order:-6}.order-xl--5{order:-5}.order-xl--4{order:-4}.order-xl--3{order:-3}.order-xl--2{order:-2}.order-xl--1{order:-1}.order-xl-0{order:0}.order-xl-1{order:1}.order-xl-2{order:2}.order-xl-3{order:3}.order-xl-4{order:4}.order-xl-5{order:5}.order-xl-6{order:6}.order-xl-7{order:7}.order-xl-8{order:8}.order-xl-9{order:9}.order-xl-10{order:10}.order-xl-11{order:11}.order-xl-12{order:12}.hidden-xl{display:none}}.canvas-mode-enabled{--canvas-hit: 14px}.canvas-mode-enabled .canvas-element{position:relative;z-index:0;border-radius:8px;outline:2px solid transparent;outline-offset:2px;transition:outline-color .2s ease,outline-style .2s ease}.canvas-mode-enabled .canvas-element:before{content:\"\";position:absolute;inset:calc(-1 * var(--canvas-hit));pointer-events:none;border-radius:inherit;background:transparent}.canvas-mode-enabled .canvas-element[data-canvas-type=section]{--outline-color: var(--md-sys-color-primary)}.canvas-mode-enabled .canvas-element[data-canvas-type=row]{--outline-color: var(--md-sys-color-secondary)}.canvas-mode-enabled .canvas-element[data-canvas-type=column],.canvas-mode-enabled .canvas-element[data-canvas-type=field]{--outline-color: var(--md-sys-color-tertiary)}.canvas-mode-enabled .canvas-element[data-canvas-type=actions]{--outline-color: var(--md-sys-color-primary)}.canvas-mode-enabled .canvas-element.hovered:not(.selected){outline-color:var(--outline-color, var(--md-sys-color-primary));outline-style:dashed}.canvas-mode-enabled .canvas-element.selected{outline-color:var(--outline-color, var(--md-sys-color-primary));outline-style:solid;box-shadow:0 0 0 2px var(--outline-color, var(--md-sys-color-primary))}.canvas-mode-enabled .canvas-element.hovered{z-index:var(--praxis-layer-authoring-hover, 300)}.canvas-mode-enabled .canvas-element.selected{z-index:var(--praxis-layer-authoring-selected, 320)}.section-drop-wrapper,.row-drop-wrapper,.column-drop-wrapper{display:contents}.add-section-container{display:flex;align-items:center;justify-content:center;padding:.5rem 0;margin:-.5rem 0;position:relative;z-index:var(--praxis-layer-authoring-insert, 280)}.add-section-container .add-section-line{flex-grow:1;height:1px;background:repeating-linear-gradient(90deg,var(--md-sys-color-outline-variant),var(--md-sys-color-outline-variant) 4px,transparent 4px,transparent 8px)}.add-section-container button{margin:0 1rem;transform:scale(.85)}:host{display:block;position:relative;--pfx-editorial-form-radius: var(--pfx-form-section-radius, 8px);--pfx-editorial-form-border: var( --pfx-form-stroke, var(--pdx-color-border-subtle, var(--md-sys-color-outline-variant)) );--pfx-editorial-form-surface: var( --pfx-form-section-surface, var(--pdx-color-surface, var(--md-sys-color-surface-container)) );--pfx-editorial-form-surface-muted: var( --pdx-color-surface-muted, var(--md-sys-color-surface-container-low) );--pfx-form-shell-surface: color-mix( in srgb, var(--pfx-editorial-form-surface) 36%, transparent );--pfx-form-section-divider: color-mix( in srgb, var(--pfx-editorial-form-border) 68%, transparent );--pfx-form-footer-surface: color-mix( in srgb, var(--pfx-editorial-form-surface) 70%, var(--pfx-editorial-form-surface-muted) 30% );--pfx-form-footer-border: color-mix( in srgb, var(--pfx-editorial-form-border) 76%, transparent );--pfx-form-shell-padding: clamp(.9rem, 1.4vw, 1.2rem)}.form-config-controls{position:relative;top:auto;margin:0;display:flex;align-items:center;gap:.35rem;z-index:60;background:color-mix(in srgb,var(--pfx-form-shell-surface) 88%,var(--md-sys-color-surface) 12%);padding:8px var(--pfx-form-shell-padding);border:1px solid var(--pfx-form-footer-border);border-bottom-color:color-mix(in srgb,var(--pfx-form-footer-border) 72%,transparent);border-radius:var(--pfx-editorial-form-radius) var(--pfx-editorial-form-radius) 0 0;-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);box-shadow:none;min-width:0;justify-content:flex-end;pointer-events:none;opacity:.96;transition:opacity .16s ease,border-color .16s ease}.form-config-controls>*{pointer-events:auto}.form-config-controls:hover,.form-config-controls:focus-within{opacity:1;border-color:color-mix(in srgb,var(--md-sys-color-primary) 26%,var(--md-sys-color-outline-variant) 74%)}.form-config-controls .praxis-icon-button{color:var(--md-sys-color-on-surface-variant)}.form-config-controls .praxis-icon-button:hover{color:var(--md-sys-color-primary)}.ai-floating-assistant{position:sticky;right:0;bottom:12px;margin-top:14px;margin-left:auto;width:fit-content;z-index:70;pointer-events:none}.ai-floating-assistant button{pointer-events:auto;display:inline-flex}.ai-floating-assistant .ai-trigger-btn{box-shadow:0 12px 28px #0f172a24}.config-button{color:var(--md-sys-color-primary)}.form-loading{display:flex;flex-direction:column;align-items:stretch;justify-content:center;padding:1.25rem;text-align:left;color:var(--md-sys-color-on-surface);gap:1rem;min-height:220px;border:1px solid color-mix(in srgb,var(--md-sys-color-primary) 14%,var(--md-sys-color-outline-variant) 86%);border-radius:8px;background:linear-gradient(135deg,color-mix(in srgb,var(--md-sys-color-primary) 8%,transparent),transparent 42%),color-mix(in srgb,var(--md-sys-color-surface-container-low) 78%,var(--md-sys-color-surface) 22%);box-shadow:0 12px 28px #0f172a14}.entity-read-region{position:relative;min-width:0}.entity-read-feedback{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:flex-start;gap:1rem;padding:2rem 1rem;box-sizing:border-box;text-align:center;color:var(--md-sys-color-on-surface)}.entity-read-feedback p{margin:0;max-width:40ch}.form-loading-header{display:flex;align-items:center;gap:.85rem}.form-loading-copy{min-width:0}.form-loading p{margin:0}.form-loading-title{font-weight:700;color:var(--md-sys-color-on-surface)}.form-loading-subtitle{margin-top:.2rem;font-size:.875rem;color:var(--md-sys-color-on-surface-variant)}.form-loading-skeleton{display:grid;gap:.7rem}.form-loading-line,.form-loading-field{display:block;overflow:hidden;position:relative;border-radius:6px;background:color-mix(in srgb,var(--md-sys-color-surface-container-high) 74%,var(--md-sys-color-primary) 6%)}.form-loading-line:after,.form-loading-field:after{content:\"\";position:absolute;inset:0;transform:translate(-100%);background:linear-gradient(90deg,transparent,color-mix(in srgb,var(--md-sys-color-primary) 16%,var(--md-sys-color-on-surface) 18%),transparent);animation:form-loading-shimmer 1.4s ease-in-out infinite}.form-loading-line{height:12px}.form-loading-line-title{width:min(42%,240px)}.form-loading-line-short{width:min(64%,360px)}.form-loading-field{height:44px}.form-loading-field-wide{height:72px}@keyframes form-loading-shimmer{to{transform:translate(100%)}}@media(prefers-reduced-motion:reduce){.form-loading-line:after,.form-loading-field:after{animation:none;transform:none;opacity:.28}}.form-error{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:3rem;text-align:center;color:var(--md-sys-color-error);gap:1rem;border:1px solid var(--md-sys-color-error);border-radius:8px;background-color:var(--md-sys-color-error-container);margin:1rem;box-shadow:0 12px 30px #7f1d1d1f}.form-error h3{margin:0;color:var(--md-sys-color-on-error-container)}.form-error p{margin:0;color:var(--md-sys-color-on-error-container);opacity:.8}.form-error button{margin-top:.5rem}.pfx-form-info-banner{margin-bottom:14px;padding:12px 14px;border-radius:16px;border:1px solid color-mix(in srgb,var(--md-sys-color-primary) 18%,var(--md-sys-color-outline-variant) 82%);background:color-mix(in srgb,var(--md-sys-color-primary-container) 24%,var(--md-sys-color-surface) 76%);color:var(--md-sys-color-on-surface);display:flex;align-items:flex-start;justify-content:space-between;gap:14px}.pfx-form-info-banner .text{font-size:.92rem;line-height:1.5;font-weight:600}.pfx-form-info-banner .actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:8px}.praxis-dynamic-form{display:flex;flex-direction:column;max-width:100%;min-width:0;transition:all .3s ease;position:relative;font-family:inherit;font-size:inherit;color:inherit;--pfx-editorial-form-surface: var( --pfx-form-section-surface, var(--md-sys-color-surface-container) );--pfx-editorial-form-surface-muted: var( --pdx-color-surface-muted, var(--md-sys-color-surface-container-low) );--pfx-editorial-form-border: var( --pfx-form-stroke, var(--pdx-color-border-subtle, var(--md-sys-color-outline-variant)) );--pfx-editorial-form-text: var( --pdx-color-text-primary, var(--md-sys-color-on-surface) );--pfx-editorial-form-text-muted: var( --pdx-color-text-secondary, var(--md-sys-color-on-surface-variant) );--pfx-editorial-form-field-surface: color-mix( in srgb, var(--pfx-editorial-form-surface-muted) 76%, var(--pfx-editorial-form-surface) 24% );--pfx-editorial-form-field-outline: color-mix( in srgb, var(--pfx-editorial-form-border) 88%, transparent );--pfx-editorial-form-accent: var( --pdx-color-primary, var(--md-sys-color-primary) );--pfx-editorial-form-accent-text: var(--md-sys-color-on-primary);--pfx-editorial-form-radius: var(--pfx-form-section-radius, 8px);--pfx-editorial-form-field-radius: var(--pfx-form-field-radius, 4px);--pfx-editorial-form-border-width: 1px;--pfx-editorial-form-field-border-width: 1px;--pfx-editorial-form-shadow: none;--pfx-form-shell-surface: color-mix( in srgb, var(--pfx-editorial-form-surface) 36%, transparent );--pfx-form-section-surface-flat: color-mix( in srgb, var(--pfx-editorial-form-surface) 78%, var(--pfx-editorial-form-surface-muted) 22% );--pfx-form-section-divider: color-mix( in srgb, var(--pfx-editorial-form-border) 68%, transparent );--pfx-form-label-strong: color-mix( in srgb, var(--pfx-editorial-form-text) 96%, white 4% );--pfx-form-label-muted: color-mix( in srgb, var(--pfx-editorial-form-text-muted) 92%, var(--pfx-editorial-form-text) 8% );--pfx-form-field-surface-rest: color-mix( in srgb, var(--pfx-editorial-form-field-surface) 82%, var(--pfx-editorial-form-surface) 18% );--pfx-form-field-surface-focus: color-mix( in srgb, var(--pfx-editorial-form-accent) 4%, var(--pfx-form-field-surface-rest) 96% );--pfx-form-field-min-height: 48px;--pfx-form-section-padding: clamp(1.1rem, 1.8vw, 1.5rem);--pfx-form-section-gap: 22px;--pdx-presentation-label-size: var(--pfx-pres-compact-label-size, .78rem);--pdx-presentation-value-size: var(--pfx-pres-compact-value-size, 1rem);--pdx-presentation-icon-size: var(--pfx-pres-icon-size, 18px);--pdx-presentation-row-gap: var(--pfx-pres-row-gap, .5rem);--pdx-presentation-column-gap: var(--pfx-pres-column-gap, .5rem);--pdx-presentation-section-gap: var(--pfx-pres-section-gap, .75rem);--pdx-presentation-label-width: var(--pfx-pres-label-width, 220px);--pdx-presentation-flag-height: var(--pfx-pres-boolean-min-height, 22px);--pdx-presentation-flag-radius: var(--pfx-pres-boolean-radius, 999px);--pdx-presentation-flag-padding: var(--pfx-pres-boolean-padding, 0 8px);--pdx-presentation-flag-active-color: var( --pfx-pres-boolean-active-color, var(--md-sys-color-primary) );--pdx-presentation-flag-active-bg: var( --pfx-pres-boolean-active-bg, color-mix(in srgb, var(--md-sys-color-primary) 14%, transparent) );--pdx-presentation-flag-inactive-color: var( --pfx-pres-boolean-inactive-color, var(--md-sys-color-on-surface-variant) );--pdx-presentation-flag-inactive-bg: var( --pfx-pres-boolean-inactive-bg, color-mix(in srgb, var(--md-sys-color-outline-variant) 34%, transparent) );--pfx-form-footer-surface: color-mix( in srgb, var(--pfx-editorial-form-surface) 70%, var(--pfx-editorial-form-surface-muted) 30% );--pfx-form-footer-border: color-mix( in srgb, var(--pfx-editorial-form-border) 76%, transparent )}.praxis-dynamic-form.canvas-mode-enabled{border:1px solid var(--pfx-form-footer-border);border-radius:var(--pfx-editorial-form-radius);background:linear-gradient(180deg,color-mix(in srgb,var(--pfx-form-shell-surface) 86%,transparent),color-mix(in srgb,var(--pfx-editorial-form-surface-muted) 42%,transparent));overflow:visible}.form-config-controls+.praxis-dynamic-form.canvas-mode-enabled{border-top:0;border-top-left-radius:0;border-top-right-radius:0}.praxis-dynamic-form.canvas-mode-enabled>.section-drop-wrapper,.praxis-dynamic-form.canvas-mode-enabled>.form-editorial-blocks{margin-inline:var(--pfx-form-shell-padding)}.praxis-dynamic-form.canvas-mode-enabled>.section-drop-wrapper:first-of-type,.praxis-dynamic-form.canvas-mode-enabled>.form-editorial-blocks:first-child{margin-top:var(--pfx-form-shell-padding)}.praxis-dynamic-form.canvas-mode-enabled>praxis-form-actions[data-actions-placement=afterSections]{display:block;margin-top:var(--pfx-form-shell-padding)}.praxis-dynamic-form.editorial-visual-context{--_pfx-editorial-host-text: var( --editorial-text-primary, var(--foreground, var(--mat-sys-on-surface, #1d1b20)) );--_pfx-editorial-host-text-muted: var( --editorial-text-secondary, var( --muted-foreground, color-mix(in srgb, var(--_pfx-editorial-host-text) 64%, transparent) ) );--_pfx-editorial-host-surface: var( --editorial-surface-primary, var(--card, var(--mat-sys-surface-container, #ffffff)) );--_pfx-editorial-host-surface-muted: var( --editorial-surface-secondary, var(--surface-dim, var(--muted, var(--mat-sys-surface-container-low, #f7f2fa))) );--_pfx-editorial-host-border: var( --editorial-border-color, var(--border, var(--mat-sys-outline-variant, #cac4d0)) );--_pfx-editorial-host-accent: var( --editorial-cta-primary, var(--editorial-accent, var(--primary, var(--mat-sys-primary, #6750a4))) );--_pfx-editorial-host-accent-text: var( --editorial-cta-primary-text, var( --editorial-accent-contrast, var(--primary-foreground, var(--mat-sys-on-primary, #ffffff)) ) );--_pfx-editorial-host-accent-container: var( --primary-container, color-mix(in srgb, var(--_pfx-editorial-host-accent) 16%, var(--_pfx-editorial-host-surface) 84%) );--_pfx-editorial-host-accent-container-text: var( --primary-container-fg, var(--_pfx-editorial-host-accent) );font-family:var(--editorial-body-font-family, inherit);font-size:var(--editorial-body-size, 1rem);color:var(--_pfx-editorial-host-text);--pfx-editorial-form-surface: var( --editorial-surface-primary, var(--pfx-form-section-surface, var(--_pfx-editorial-host-surface)) );--pfx-editorial-form-surface-muted: var( --editorial-surface-secondary, var(--_pfx-editorial-host-surface-muted) );--pfx-editorial-form-border: var( --editorial-border-color, var(--pfx-form-stroke, var(--_pfx-editorial-host-border)) );--pfx-editorial-form-text: var( --editorial-text-primary, var(--_pfx-editorial-host-text) );--pfx-editorial-form-text-muted: var( --editorial-text-secondary, color-mix( in srgb, var(--_pfx-editorial-host-text-muted) 86%, var(--_pfx-editorial-host-text) 14% ) );--pfx-editorial-form-accent: var( --editorial-cta-primary, var(--editorial-accent, var(--_pfx-editorial-host-accent)) );--pfx-editorial-form-accent-text: var( --editorial-cta-primary-text, var(--editorial-accent-contrast, var(--_pfx-editorial-host-accent-text)) );--pfx-editorial-form-accent-container: var(--_pfx-editorial-host-accent-container);--pfx-editorial-form-accent-container-text: var(--_pfx-editorial-host-accent-container-text);--pfx-editorial-form-radius: var(--editorial-card-radius, 18px);--pfx-editorial-form-field-radius: var( --editorial-field-radius, var(--editorial-card-radius, 14px) );--pfx-editorial-form-border-width: var(--editorial-card-border-width, 1px);--pfx-editorial-form-field-border-width: var(--editorial-field-border-width, 1px);--pfx-editorial-form-shadow: var(--editorial-card-shadow, none);--md-sys-color-surface: var( --pfx-editorial-form-surface, var(--md-sys-color-surface) );--md-sys-color-surface-container: var( --pfx-editorial-form-surface, var(--md-sys-color-surface-container) );--md-sys-color-surface-container-low: var( --pfx-editorial-form-surface-muted, var(--md-sys-color-surface-container-low) );--md-sys-color-surface-variant: var( --pfx-editorial-form-field-surface, var(--md-sys-color-surface-variant) );--md-sys-color-outline: var( --pfx-editorial-form-field-outline, var(--md-sys-color-outline) );--md-sys-color-outline-variant: var( --pfx-editorial-form-border, var(--md-sys-color-outline-variant) );--md-sys-color-on-surface: var( --editorial-text-primary, inherit );--md-sys-color-on-surface-variant: var( --editorial-text-secondary, inherit );--md-sys-color-primary: var( --pfx-editorial-form-accent, var(--md-sys-color-primary) );--md-sys-color-primary-container: var( --pfx-editorial-form-accent-container, var(--md-sys-color-primary-container) );--md-sys-color-on-primary-container: var( --pfx-editorial-form-accent-container-text, var(--md-sys-color-on-primary-container) );--md-sys-color-on-primary: var( --pfx-editorial-form-accent-text, var(--md-sys-color-on-primary) );--md-sys-color-on-surface-rgb: var( --editorial-text-primary-rgb, inherit );--mat-sys-on-surface: var( --editorial-text-primary, inherit );--mat-sys-on-surface-variant: var( --editorial-text-secondary, inherit );--mat-sys-on-surface-rgb: var( --editorial-text-primary-rgb, inherit );color:inherit;color-scheme:light}.praxis-dynamic-form.presentation-mode .form-row,.praxis-dynamic-form.readonly-mode .form-row{gap:var(--pdx-presentation-column-gap);margin-bottom:var(--pdx-presentation-row-gap)}.praxis-dynamic-form.presentation-mode{--pfx-pres-on-surface: var( --pdx-color-text-primary, var(--pfx-editorial-form-text, var(--pfx-form-label-strong, currentColor)) );--pfx-pres-on-surface-variant: var( --pdx-color-text-secondary, var( --pfx-editorial-form-text-muted, var( --pfx-form-label-muted, color-mix(in srgb, var(--pfx-pres-on-surface) 78%, transparent) ) ) )}.praxis-dynamic-form.presentation-mode .form-section,.praxis-dynamic-form.readonly-mode .form-section{padding:var(--pdx-presentation-section-gap) .875rem}.praxis-dynamic-form.pres-compact .form-row{gap:var(--pdx-presentation-column-gap, .35rem);margin-bottom:var(--pdx-presentation-row-gap, .35rem)}.praxis-dynamic-form.pres-compact .form-section{padding:var(--pdx-presentation-section-gap, .5rem) .75rem}.praxis-dynamic-form.pres-label-left .praxis-presentation{display:grid;grid-template-columns:minmax(0,var(--pfx-presentation-label-w, var(--pdx-presentation-label-width))) minmax(0,1fr);align-items:baseline;column-gap:var(--pdx-presentation-column-gap, 10px)}.praxis-dynamic-form.pres-label-left .praxis-presentation__label{text-align:right;margin-bottom:0}@media(max-width:480px){.praxis-dynamic-form.pres-label-left .praxis-presentation{grid-template-columns:minmax(0,1fr);row-gap:4px}.praxis-dynamic-form.pres-label-left .praxis-presentation__label{text-align:start}}.praxis-dynamic-form.praxis-dynamic-form--corporate-dossier .form-section:not(.section-appearance-plain),.praxis-dynamic-form .form-section.form-section--corporate-dossier:not(.section-appearance-plain),.praxis-dynamic-form .form-section[data-presentation-preset=corporate-dossier]:not(.section-appearance-plain){background:var(--md-sys-color-surface-container-low, #f8f9fa);border:1px solid var(--md-sys-color-outline-variant, #e0e2ec);border-radius:16px;padding:16px 20px;box-shadow:0 1px 3px #0000000a}.praxis-dynamic-form.praxis-dynamic-form--corporate-dossier .form-section .section-heading,.praxis-dynamic-form .form-section.form-section--corporate-dossier .section-heading,.praxis-dynamic-form .form-section[data-presentation-preset=corporate-dossier] .section-heading{margin-bottom:12px;padding-bottom:8px;border-bottom:1px solid var(--md-sys-color-outline-variant, #e0e2ec)}.praxis-dynamic-form.praxis-dynamic-form--corporate-dossier .form-section .section-title,.praxis-dynamic-form .form-section.form-section--corporate-dossier .section-title,.praxis-dynamic-form .form-section[data-presentation-preset=corporate-dossier] .section-title{font-size:.88rem;font-weight:700;letter-spacing:.05em;text-transform:uppercase;color:var(--md-sys-color-primary, #005ac1)}:host ::ng-deep .praxis-dynamic-form--corporate-dossier .praxis-presentation,:host ::ng-deep .form-section--corporate-dossier .praxis-presentation,:host ::ng-deep [data-presentation-preset=corporate-dossier] .praxis-presentation{padding:8px 0;border-bottom:1px dashed var(--md-sys-color-outline-variant, rgba(0, 0, 0, .08))}:host ::ng-deep .praxis-dynamic-form--corporate-dossier .form-row:last-child .praxis-presentation,:host ::ng-deep .praxis-dynamic-form--corporate-dossier .praxis-presentation:last-child,:host ::ng-deep .form-section--corporate-dossier .form-row:last-child .praxis-presentation,:host ::ng-deep .form-section--corporate-dossier .praxis-presentation:last-child,:host ::ng-deep [data-presentation-preset=corporate-dossier] .form-row:last-child .praxis-presentation,:host ::ng-deep [data-presentation-preset=corporate-dossier] .praxis-presentation:last-child{border-bottom:none}:host ::ng-deep .praxis-dynamic-form--corporate-dossier .praxis-presentation__label,:host ::ng-deep .form-section--corporate-dossier .praxis-presentation__label,:host ::ng-deep [data-presentation-preset=corporate-dossier] .praxis-presentation__label{font-size:.74rem;font-weight:600;text-transform:uppercase;letter-spacing:.05em;color:var(--md-sys-color-on-surface-variant, #44474f);margin-bottom:3px}:host ::ng-deep .praxis-dynamic-form--corporate-dossier .praxis-presentation__value,:host ::ng-deep .form-section--corporate-dossier .praxis-presentation__value,:host ::ng-deep [data-presentation-preset=corporate-dossier] .praxis-presentation__value{font-size:.95rem;font-weight:600;color:var(--md-sys-color-on-surface, #1a1c1e);line-height:1.4}.praxis-dynamic-form.praxis-dynamic-form--editorial-card .form-section:not(.section-appearance-plain),.praxis-dynamic-form .form-section.form-section--editorial-card:not(.section-appearance-plain),.praxis-dynamic-form .form-section[data-presentation-preset=editorial-card]:not(.section-appearance-plain){background:var(--pfx-editorial-form-surface, var(--md-sys-color-surface-container-low, var(--mat-sys-surface-container-low)));border:1px solid var(--pfx-editorial-form-border, var(--md-sys-color-outline-variant, #e0e2ec));border-radius:20px;padding:24px;box-shadow:0 2px 8px #0000000d}.praxis-dynamic-form.praxis-dynamic-form--editorial-card .form-section .section-heading,.praxis-dynamic-form .form-section.form-section--editorial-card .section-heading,.praxis-dynamic-form .form-section[data-presentation-preset=editorial-card] .section-heading{margin-bottom:16px;padding-bottom:10px;border-bottom:1px solid color-mix(in srgb,var(--md-sys-color-outline-variant, #e0e2ec) 40%,transparent)}.praxis-dynamic-form.praxis-dynamic-form--editorial-card .form-section .section-title,.praxis-dynamic-form .form-section.form-section--editorial-card .section-title,.praxis-dynamic-form .form-section[data-presentation-preset=editorial-card] .section-title{font-size:1.15rem;font-weight:700;color:var(--pfx-editorial-form-accent, var(--md-sys-color-primary, #005ac1))}:host ::ng-deep .praxis-dynamic-form--editorial-card .praxis-presentation,:host ::ng-deep .form-section--editorial-card .praxis-presentation,:host ::ng-deep [data-presentation-preset=editorial-card] .praxis-presentation{padding:10px 0;border-bottom:1px solid color-mix(in srgb,var(--md-sys-color-outline-variant, #e0e2ec) 35%,transparent)}:host ::ng-deep .praxis-dynamic-form--editorial-card .form-row:last-child .praxis-presentation,:host ::ng-deep .praxis-dynamic-form--editorial-card .praxis-presentation:last-child,:host ::ng-deep .form-section--editorial-card .form-row:last-child .praxis-presentation,:host ::ng-deep .form-section--editorial-card .praxis-presentation:last-child,:host ::ng-deep [data-presentation-preset=editorial-card] .form-row:last-child .praxis-presentation,:host ::ng-deep [data-presentation-preset=editorial-card] .praxis-presentation:last-child{border-bottom:none}:host ::ng-deep .praxis-dynamic-form--editorial-card .praxis-presentation__label,:host ::ng-deep .form-section--editorial-card .praxis-presentation__label,:host ::ng-deep [data-presentation-preset=editorial-card] .praxis-presentation__label{font-size:.8rem;font-weight:500;color:var(--pfx-editorial-form-text-muted, var(--md-sys-color-on-surface-variant, #44474f));margin-bottom:4px}:host ::ng-deep .praxis-dynamic-form--editorial-card .praxis-presentation__value,:host ::ng-deep .form-section--editorial-card .praxis-presentation__value,:host ::ng-deep [data-presentation-preset=editorial-card] .praxis-presentation__value{font-size:1rem;font-weight:600;color:var(--pfx-editorial-form-text, var(--md-sys-color-on-surface, #1a1c1e));line-height:1.5}.praxis-dynamic-form.praxis-dynamic-form--compact-presentation .form-section:not(.section-appearance-plain),.praxis-dynamic-form .form-section.form-section--compact-presentation:not(.section-appearance-plain),.praxis-dynamic-form .form-section[data-presentation-preset=compact-presentation]:not(.section-appearance-plain){background:transparent;border:1px solid color-mix(in srgb,var(--md-sys-color-outline-variant, #e0e2ec) 50%,transparent);border-radius:8px;padding:10px 14px;box-shadow:none}.praxis-dynamic-form.praxis-dynamic-form--compact-presentation .form-section .section-heading,.praxis-dynamic-form .form-section.form-section--compact-presentation .section-heading,.praxis-dynamic-form .form-section[data-presentation-preset=compact-presentation] .section-heading{margin-bottom:8px;padding-bottom:4px;border-bottom:1px solid color-mix(in srgb,var(--md-sys-color-outline-variant, #e0e2ec) 25%,transparent)}.praxis-dynamic-form.praxis-dynamic-form--compact-presentation .form-section .section-title,.praxis-dynamic-form .form-section.form-section--compact-presentation .section-title,.praxis-dynamic-form .form-section[data-presentation-preset=compact-presentation] .section-title{font-size:.82rem;font-weight:700;letter-spacing:.03em;text-transform:uppercase;color:var(--md-sys-color-on-surface-variant, #44474f)}:host ::ng-deep .praxis-dynamic-form--compact-presentation .praxis-presentation,:host ::ng-deep .form-section--compact-presentation .praxis-presentation,:host ::ng-deep [data-presentation-preset=compact-presentation] .praxis-presentation{padding:4px 0;border-bottom:none}:host ::ng-deep .praxis-dynamic-form--compact-presentation .praxis-presentation__label,:host ::ng-deep .form-section--compact-presentation .praxis-presentation__label,:host ::ng-deep [data-presentation-preset=compact-presentation] .praxis-presentation__label{font-size:.72rem;font-weight:600;color:var(--md-sys-color-on-surface-variant, #44474f);margin-bottom:2px}:host ::ng-deep .praxis-dynamic-form--compact-presentation .praxis-presentation__value,:host ::ng-deep .form-section--compact-presentation .praxis-presentation__value,:host ::ng-deep [data-presentation-preset=compact-presentation] .praxis-presentation__value{font-size:.88rem;font-weight:500;color:var(--md-sys-color-on-surface, #1a1c1e);line-height:1.35}:host-context(.mdc-theme-dark) .praxis-dynamic-form.praxis-dynamic-form--corporate-dossier .form-section:not(.section-appearance-plain),:host-context(.mdc-theme-dark) .praxis-dynamic-form .form-section.form-section--corporate-dossier:not(.section-appearance-plain),:host-context(.mdc-theme-dark) .praxis-dynamic-form .form-section[data-presentation-preset=corporate-dossier]:not(.section-appearance-plain),:host-context(.theme-dark) .praxis-dynamic-form.praxis-dynamic-form--corporate-dossier .form-section:not(.section-appearance-plain),:host-context(.theme-dark) .praxis-dynamic-form .form-section.form-section--corporate-dossier:not(.section-appearance-plain),:host-context(.theme-dark) .praxis-dynamic-form .form-section[data-presentation-preset=corporate-dossier]:not(.section-appearance-plain){background:var(--md-sys-color-surface-container-low);border-color:color-mix(in srgb,var(--md-sys-color-outline-variant) 70%,transparent);box-shadow:0 2px 8px #0000004d}:host-context(.mdc-theme-dark) .praxis-dynamic-form.praxis-dynamic-form--editorial-card .form-section:not(.section-appearance-plain),:host-context(.mdc-theme-dark) .praxis-dynamic-form .form-section.form-section--editorial-card:not(.section-appearance-plain),:host-context(.mdc-theme-dark) .praxis-dynamic-form .form-section[data-presentation-preset=editorial-card]:not(.section-appearance-plain),:host-context(.theme-dark) .praxis-dynamic-form.praxis-dynamic-form--editorial-card .form-section:not(.section-appearance-plain),:host-context(.theme-dark) .praxis-dynamic-form .form-section.form-section--editorial-card:not(.section-appearance-plain),:host-context(.theme-dark) .praxis-dynamic-form .form-section[data-presentation-preset=editorial-card]:not(.section-appearance-plain){background:var(--pfx-editorial-form-surface, var(--md-sys-color-surface-container-low));border-color:color-mix(in srgb,var(--md-sys-color-outline-variant) 70%,transparent);box-shadow:0 4px 16px #0006}.form-section{border:1px solid var(--pfx-form-section-divider);border-radius:var(--pfx-editorial-form-radius);padding:var(--pfx-form-section-padding);max-width:100%;min-width:0;background:var(--pfx-form-section-surface-flat);box-shadow:none;transition:all .2s ease;position:relative}.praxis-dynamic-form.editorial-visual-context .form-section:not(.section-appearance-plain){border:var(--pfx-editorial-form-border-width) solid var(--pfx-editorial-form-border)!important;background:var(--pfx-editorial-form-surface)!important;color:var(--pfx-editorial-form-text);box-shadow:var(--editorial-card-shadow, none)}.praxis-dynamic-form.editorial-visual-context .form-section.section-appearance-step{background-color:var(--pfx-editorial-form-surface)!important;background-image:linear-gradient(180deg,color-mix(in srgb,var(--editorial-accent, var(--md-sys-color-primary)) 6%,transparent) 0%,transparent 132px)!important;background-repeat:no-repeat!important}.section-drop-wrapper>.form-section{margin-bottom:var(--pfx-section-gap, 20px)}.section-drop-wrapper:last-of-type>.form-section{margin-bottom:0}.praxis-dynamic-form>praxis-form-actions[data-actions-placement=afterSections]{margin-top:var(--pfx-actions-gap-top, var(--pfx-section-gap, 20px))}.section-title{margin:0 0 var(--pfx-section-title-mb, 12px) 0;font-family:var(--editorial-title-font-family, var(--editorial-body-font-family, inherit));font-size:var(--editorial-step-title-size, 1.12rem);font-weight:700;color:var(--pfx-form-label-strong)}.section-heading{position:relative;display:flex;align-items:flex-start;gap:12px;margin-bottom:18px;padding-bottom:var(--pfx-form-section-heading-divider-gap, 18px)}.section-heading:after{content:\"\";position:absolute;right:0;bottom:0;left:0;height:2px;pointer-events:none;background:linear-gradient(90deg,transparent 0%,color-mix(in srgb,var(--pfx-form-section-divider) 18%,transparent) 8%,var(--pfx-form-section-divider) 46%,var(--pfx-form-section-divider) 54%,color-mix(in srgb,var(--pfx-form-section-divider) 18%,transparent) 92%,transparent 100%);border-radius:999px;-webkit-mask-image:linear-gradient(90deg,transparent 0%,black 18%,black 82%,transparent 100%);mask-image:linear-gradient(90deg,transparent 0%,black 18%,black 82%,transparent 100%)}.section-heading.title-only{padding-bottom:var(--pfx-form-section-heading-title-only-divider-gap, 10px)}:host(.pfx-form-section-divider-inline-title) .section-heading.title-only{padding-bottom:var(--pfx-form-section-heading-title-only-inline-divider-gap, 0)}:host(.pfx-form-section-divider-inline-title) .section-heading.title-only:after{display:none}.section-heading.align-center{flex-direction:column;align-items:center;text-align:center}.section-heading.align-center .section-heading-text{display:grid;justify-items:center}.section-step-label{display:inline-flex;align-items:center;min-height:24px;padding:0 10px;margin:0 0 8px;border-radius:999px;background:color-mix(in srgb,var(--pfx-editorial-form-accent) 10%,transparent);color:color-mix(in srgb,var(--pfx-editorial-form-accent) 84%,var(--pfx-form-label-strong) 16%);font-size:.72rem;font-weight:800;font-family:var(--editorial-title-font-family, var(--editorial-body-font-family, inherit));letter-spacing:.08em;text-transform:uppercase}.section-heading-text{flex:1 1 auto;min-width:0}.section-heading-actions{display:inline-flex;align-items:center;align-self:flex-start;flex-wrap:wrap;gap:4px;margin-left:auto}.section-heading-actions.align-center{align-self:center;margin-left:0}.section-heading-action-btn{color:var(--pfx-form-label-muted)}.section-heading-action-btn.tone-primary{color:var(--md-sys-color-primary)}.section-heading-action-btn.tone-accent,.section-heading-action-btn.tone-secondary{color:var(--md-sys-color-tertiary)}.section-heading-action-btn.tone-warn,.section-heading-action-btn.tone-danger,.section-heading-action-btn.tone-error{color:var(--md-sys-color-error)}.section-heading-action-btn .mat-mdc-progress-spinner,.section-heading-action-btn mat-progress-spinner{--mdc-circular-progress-active-indicator-color: currentColor}.section-heading-action-btn.loading{opacity:.72;pointer-events:none}.section-heading-action-sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.section-collapse-btn{margin-left:4px;color:var(--pfx-form-label-muted)}.section-title.title-large{font:var(--mdc-typography-title-large, 500 22px/28px system-ui)}.section-title.title-medium{font:var(--mdc-typography-title-medium, 500 16px/24px system-ui)}.section-title.title-small{font:var(--mdc-typography-title-small, 500 14px/20px system-ui)}.section-title.headline-small{font:var(--mdc-typography-headline-small, 600 24px/32px system-ui)}.section-title.title-large,.section-title.title-medium,.section-title.title-small,.section-title.headline-small{font-family:var(--editorial-title-font-family, var(--editorial-body-font-family, inherit));font-weight:var(--editorial-title-weight, 600)}.section-description{margin:0;font-family:var(--editorial-body-font-family, inherit);font-size:.93rem;color:var(--pfx-form-label-muted);line-height:1.6}.section-description.body-large{font:var(--mdc-typography-body-large, 400 16px/24px system-ui)}.section-description.body-medium{font:var(--mdc-typography-body-medium, 400 14px/20px system-ui)}.section-description.body-small{font:var(--mdc-typography-body-small, 400 12px/16px system-ui)}.section-description.body-large,.section-description.body-medium,.section-description.body-small{font-family:var(--editorial-body-font-family, inherit);font-weight:var(--editorial-body-weight, 400)}.section-title.align-center,.section-description.align-center,.section-step-label.align-center{text-align:center}.praxis-dynamic-form .form-section.section-appearance-plain{border-color:transparent;border-width:0;border-radius:0;padding:0;background:transparent;box-shadow:none}.praxis-dynamic-form .form-section.section-appearance-plain.section-has-divider{padding-bottom:16px;border-bottom:1px solid var(--pfx-form-section-divider, var(--md-sys-color-outline-variant, #e0e2ec))}.praxis-dynamic-form .section-drop-wrapper:last-of-type>.form-section.section-appearance-plain.section-has-divider,.praxis-dynamic-form>.form-section.section-appearance-plain.section-has-divider:last-of-type{border-bottom:none;padding-bottom:0}.form-section.section-appearance-plain .section-heading{margin-bottom:14px}.form-section.section-appearance-step{border-radius:var(--pfx-editorial-form-radius);padding:var(--pfx-form-section-padding);background:var(--pfx-form-section-surface-flat);border-color:var(--pfx-form-section-divider);box-shadow:none}.praxis-dynamic-form.editorial-visual-context .form-section.section-appearance-step{border-radius:var(--editorial-card-radius, 20px);box-shadow:none}.form-section.section-appearance-step .section-heading{margin-bottom:22px;padding-bottom:var(--pfx-form-section-heading-divider-gap, 16px)}.form-section.section-appearance-step .section-heading.title-only{padding-bottom:var(--pfx-form-section-heading-title-only-divider-gap, 16px)}:host(.pfx-form-section-divider-inline-title) .form-section.section-appearance-step .section-heading.title-only{padding-bottom:var(--pfx-form-section-heading-title-only-inline-divider-gap, 0)}.form-section.section-appearance-step .section-title{font:var(--mdc-typography-title-large, 700 22px/28px system-ui);color:var(--pfx-form-label-strong);margin-bottom:8px}.form-section.section-appearance-step .section-description{color:var(--pfx-form-label-muted);max-width:60ch}.form-section.section-appearance-step .section-step-label{min-height:24px;padding:0 10px;margin-bottom:10px;box-shadow:none}.form-section.section-appearance-step .section-heading.align-center .section-description{max-width:52ch}.form-section.section-appearance-step .section-body{display:grid;gap:8px;padding-top:0}.form-section.section-appearance-step .form-row{margin-bottom:var(--pfx-field-gap, 1rem)}.form-section.section-appearance-step .form-column{gap:var(--pfx-field-gap, 12px)}.form-section .form-editorial-blocks{display:grid;gap:16px}.form-section .form-editorial-blocks[data-editorial-placement=beforeActions]{margin-top:24px;padding-top:18px;border-top:1px solid var(--pfx-form-section-divider)}.form-section.section-appearance-step .form-editorial-blocks[data-editorial-placement=beforeActions]{gap:18px}.form-section.section-appearance-step .form-editorial-blocks[data-editorial-placement=beforeActions]>*+*{margin-top:2px}.praxis-dynamic-form:not(.canvas-mode-enabled)>praxis-form-actions[data-actions-placement=afterSections]{margin-top:18px}.praxis-dynamic-form>.form-editorial-blocks[data-editorial-placement=after]{margin-top:6px}:host-context(.mdc-theme-dark) .form-section.section-appearance-step,:host-context(.theme-dark) .form-section.section-appearance-step{border-color:color-mix(in srgb,var(--pfx-editorial-form-border) 82%,transparent);box-shadow:none}:host-context(.mdc-theme-dark) .form-section.section-appearance-step .section-title,:host-context(.theme-dark) .form-section.section-appearance-step .section-title{color:color-mix(in srgb,var(--pfx-editorial-form-text) 96%,white)}:host-context(.mdc-theme-dark) .form-section.section-appearance-step .section-description,:host-context(.theme-dark) .form-section.section-appearance-step .section-description{color:color-mix(in srgb,var(--pfx-editorial-form-text-muted) 86%,var(--pfx-editorial-form-text) 14%)}:host-context(.mdc-theme-dark) .section-step-label,:host-context(.theme-dark) .section-step-label{background:color-mix(in srgb,var(--md-sys-color-primary-container) 54%,transparent);color:color-mix(in srgb,var(--md-sys-color-primary) 88%,white)}:host-context(.mdc-theme-dark) .form-section .form-editorial-blocks[data-editorial-placement=beforeActions],:host-context(.theme-dark) .form-section .form-editorial-blocks[data-editorial-placement=beforeActions]{border-top-color:color-mix(in srgb,var(--md-sys-color-outline-variant) 90%,transparent)}.inline-edit-btn{margin-left:6px;vertical-align:middle}.section-body.collapsed{border:1px dashed var(--md-sys-color-outline-variant);background:var(--md-sys-color-surface-container-low);border-radius:6px;padding:8px 10px}.section-collapsed-placeholder{display:flex;align-items:center;gap:8px;color:var(--md-sys-color-on-surface-variant);font-size:.95rem}.section-collapsed-placeholder mat-icon{font-size:20px;width:20px;height:20px}.form-row{display:flex;gap:1.1rem;margin-bottom:var(--pfx-field-gap, 1.1rem);max-width:100%;min-width:0;transition:all .2s ease;border-radius:6px;position:relative}.praxis-dynamic-form.pfx-mounting .form-row{opacity:0;transform:translateY(var(--pdx-form-mount-offset, 6px));animation:pdxFormMount var(--pdx-form-mount-duration, .16s) ease-out both;animation-delay:calc(var(--pfx-mount-index, 0) * var(--pdx-form-mount-stagger, 20ms))}@media(prefers-reduced-motion:reduce){.praxis-dynamic-form.pfx-mounting .form-row{animation:none;opacity:1;transform:none}}@keyframes pdxFormMount{to{opacity:1;transform:translateY(0)}}.praxis-dynamic-form .mat-mdc-form-field{width:100%;margin-bottom:var(--pfx-field-gap, 10px);font-family:inherit;--mdc-filled-text-field-container-color: var(--pfx-form-field-surface-rest);--mdc-filled-text-field-focus-active-indicator-color: var(--pfx-editorial-form-accent);--mdc-filled-text-field-active-indicator-color: var(--pfx-editorial-form-field-outline);--mdc-filled-text-field-hover-active-indicator-color: var(--pfx-editorial-form-accent);--mdc-filled-text-field-focus-label-text-color: var(--pfx-editorial-form-accent);--mdc-filled-text-field-label-text-color: var(--pfx-form-label-muted);--mdc-filled-text-field-input-text-color: var(--pfx-editorial-form-text);--mdc-filled-text-field-caret-color: var(--pfx-editorial-form-accent);--mdc-filled-text-field-input-text-placeholder-color: color-mix( in srgb, var(--pfx-editorial-form-text-muted) 82%, transparent );--mdc-outlined-text-field-outline-color: var(--pfx-editorial-form-field-outline);--mdc-outlined-text-field-hover-outline-color: var(--pfx-editorial-form-accent);--mdc-outlined-text-field-focus-outline-color: var(--pfx-editorial-form-accent);--mdc-outlined-text-field-focus-label-text-color: var(--pfx-editorial-form-accent);--mdc-outlined-text-field-label-text-color: var(--pfx-form-label-muted);--mdc-outlined-text-field-input-text-color: var(--pfx-editorial-form-text);--mdc-filled-text-field-container-shape: var(--pfx-editorial-form-field-radius);--mdc-outlined-text-field-container-shape: var(--pfx-editorial-form-field-radius);--mdc-filled-text-field-active-indicator-height: var(--pfx-editorial-form-field-border-width);--mdc-filled-text-field-focus-active-indicator-height: var(--pfx-editorial-form-field-border-width);--mdc-outlined-text-field-outline-width: var(--pfx-editorial-form-field-border-width);--mdc-outlined-text-field-focus-outline-width: var(--pfx-editorial-form-field-border-width);--mat-select-enabled-trigger-text-color: var(--pfx-editorial-form-text);--mat-select-enabled-arrow-color: var(--pfx-form-label-muted);--mat-form-field-enabled-select-arrow-color: var(--pfx-form-label-muted);--mat-form-field-focus-select-arrow-color: var(--pfx-editorial-form-accent);--mat-form-field-hover-state-layer-opacity: 0;--mat-form-field-focus-state-layer-opacity: 0}.praxis-dynamic-form.editorial-visual-context .mat-mdc-form-field{font-family:var(--editorial-body-font-family, inherit)}.praxis-dynamic-form .mat-mdc-text-field-wrapper,.praxis-dynamic-form .mdc-text-field{background:var(--pfx-form-field-surface-rest);border-radius:var(--pfx-editorial-form-field-radius);min-height:var(--pfx-form-field-min-height);transition:background-color .16s ease,box-shadow .16s ease,border-color .16s ease}.praxis-dynamic-form.editorial-visual-context .mat-mdc-text-field-wrapper,.praxis-dynamic-form.editorial-visual-context .mdc-text-field,.praxis-dynamic-form.editorial-visual-context .mdc-text-field--filled,.praxis-dynamic-form.editorial-visual-context .mdc-text-field--outlined{background-color:var(--pfx-form-field-surface-rest)!important;background:var(--pfx-form-field-surface-rest)!important}.praxis-dynamic-form .mat-mdc-form-field .mdc-floating-label,.praxis-dynamic-form .mat-mdc-form-field .mat-mdc-form-field-hint,.praxis-dynamic-form .mat-mdc-form-field .mat-mdc-form-field-error,.praxis-dynamic-form .mat-mdc-form-field .mat-mdc-form-field-required-marker,.praxis-dynamic-form .mat-mdc-form-field .mat-mdc-select-arrow,.praxis-dynamic-form .mat-mdc-form-field .mat-mdc-select-placeholder,.praxis-dynamic-form .mat-mdc-form-field .mat-mdc-form-field-icon-suffix,.praxis-dynamic-form .mat-mdc-form-field .mat-mdc-form-field-icon-prefix{color:var(--pfx-form-label-muted)}.praxis-dynamic-form .mat-mdc-input-element,.praxis-dynamic-form .mat-mdc-select-value-text,.praxis-dynamic-form .mat-mdc-form-field-infix,.praxis-dynamic-form .mat-mdc-select-min-line{color:var(--pfx-editorial-form-text)}.praxis-dynamic-form .mat-mdc-form-field:hover .mat-mdc-text-field-wrapper,.praxis-dynamic-form .mat-mdc-form-field:hover .mdc-text-field,.praxis-dynamic-form .mat-mdc-form-field.mat-focused .mat-mdc-text-field-wrapper,.praxis-dynamic-form .mat-mdc-form-field.mat-focused .mdc-text-field{background:var(--pfx-form-field-surface-focus)}.praxis-dynamic-form.editorial-visual-context .mat-mdc-input-element,.praxis-dynamic-form.editorial-visual-context .mat-mdc-select-value-text,.praxis-dynamic-form.editorial-visual-context .mat-mdc-form-field-infix,.praxis-dynamic-form.editorial-visual-context .mat-mdc-select-min-line,.praxis-dynamic-form.editorial-visual-context .mdc-text-field__input{color:var(--pfx-editorial-form-text)!important;-webkit-text-fill-color:var(--pfx-editorial-form-text)!important}.praxis-dynamic-form.editorial-visual-context .mat-mdc-form-field .mdc-floating-label,.praxis-dynamic-form.editorial-visual-context .mat-mdc-form-field .mat-mdc-form-field-hint,.praxis-dynamic-form.editorial-visual-context .mat-mdc-form-field .mat-mdc-form-field-error,.praxis-dynamic-form.editorial-visual-context .mat-mdc-form-field .mat-mdc-form-field-required-marker,.praxis-dynamic-form.editorial-visual-context .mat-mdc-form-field .mat-mdc-select-arrow,.praxis-dynamic-form.editorial-visual-context .mat-mdc-form-field .mat-mdc-select-placeholder,.praxis-dynamic-form.editorial-visual-context .mat-mdc-form-field .mat-mdc-form-field-icon-suffix,.praxis-dynamic-form.editorial-visual-context .mat-mdc-form-field .mat-mdc-form-field-icon-prefix{color:var(--pfx-editorial-form-text-muted)!important}.praxis-dynamic-form.editorial-visual-context .mat-mdc-floating-label,.praxis-dynamic-form.editorial-visual-context .mdc-floating-label,.praxis-dynamic-form.editorial-visual-context .mdc-text-field__input::placeholder{color:color-mix(in srgb,var(--pfx-editorial-form-text) 68%,transparent)!important}.praxis-dynamic-form.editorial-visual-context .mat-mdc-input-element::placeholder,.praxis-dynamic-form.editorial-visual-context textarea.mat-mdc-input-element::placeholder{color:color-mix(in srgb,var(--pfx-editorial-form-text) 58%,transparent)!important}.praxis-dynamic-form .mat-mdc-radio-button,.praxis-dynamic-form .mat-mdc-checkbox,.praxis-dynamic-form .mat-mdc-slide-toggle{--mdc-radio-selected-icon-color: var(--pfx-editorial-form-accent);--mdc-radio-selected-hover-icon-color: var(--pfx-editorial-form-accent);--mdc-radio-selected-focus-icon-color: var(--pfx-editorial-form-accent);--mdc-checkbox-selected-checkmark-color: var(--pfx-editorial-form-accent-text);--mdc-checkbox-selected-focus-icon-color: var(--pfx-editorial-form-accent);--mdc-checkbox-selected-hover-icon-color: var(--pfx-editorial-form-accent);--mdc-checkbox-selected-icon-color: var(--pfx-editorial-form-accent);--mdc-switch-selected-focus-state-layer-color: var(--pfx-editorial-form-accent);--mdc-switch-selected-handle-color: var(--pfx-editorial-form-accent);--mdc-switch-selected-track-color: color-mix(in srgb, var(--pfx-editorial-form-accent) 45%, #fff)}.praxis-dynamic-form [data-field-type=input],.praxis-dynamic-form [data-field-type=textarea],.praxis-dynamic-form [data-field-type=email],.praxis-dynamic-form [data-field-type=password],.praxis-dynamic-form [data-field-type=url],.praxis-dynamic-form [data-field-type=search],.praxis-dynamic-form [data-field-type=phone],.praxis-dynamic-form [data-field-type=numericTextBox],.praxis-dynamic-form [data-field-type=currency],.praxis-dynamic-form [data-field-type=cpfCnpj],.praxis-dynamic-form [data-field-type=date],.praxis-dynamic-form [data-field-type=dateInput],.praxis-dynamic-form [data-field-type=dateRange],.praxis-dynamic-form [data-field-type=dateTimeLocal],.praxis-dynamic-form [data-field-type=time],.praxis-dynamic-form [data-field-type=timePicker],.praxis-dynamic-form [data-field-type=timeRange],.praxis-dynamic-form [data-field-type=month],.praxis-dynamic-form [data-field-type=week],.praxis-dynamic-form [data-field-type=yearInput],.praxis-dynamic-form [data-field-type=select],.praxis-dynamic-form [data-field-type=multi-select],.praxis-dynamic-form [data-field-type=searchable-select],.praxis-dynamic-form [data-field-type=async-select],.praxis-dynamic-form [data-field-type=autocomplete],.praxis-dynamic-form [data-field-type=entityLookup],.praxis-dynamic-form [data-field-type=tree-select],.praxis-dynamic-form [data-field-type=multi-select-tree],.praxis-dynamic-form [data-field-type=priceRange],.praxis-dynamic-form [data-field-type=file-upload]{display:block;width:100%;min-width:0}.praxis-dynamic-form .mat-mdc-form-field-subscript-wrapper{min-height:var(--pfx-subscript-min-h, 22px)}.form-row:last-child{margin-bottom:0}.form-column{display:grid;grid-template-columns:minmax(0,1fr);align-content:start;gap:var(--pfx-field-gap, 10px);flex:1;max-width:100%;min-width:0;transition:all .2s ease;border-radius:4px;position:relative}.form-layout-rich-content{display:block;width:100%;max-width:100%;min-width:0;margin-bottom:var(--pfx-field-gap, 10px);color:var(--pfx-editorial-form-text-muted, var(--md-sys-color-on-surface-variant));font:var(--mdc-typography-body-medium, 400 14px/20px system-ui);overflow-wrap:anywhere}:host ::ng-deep .form-layout-rich-content .prx-rich-content-root{display:grid;gap:8px;min-width:0;max-width:100%}:host ::ng-deep .form-layout-rich-content .prx-rich-node{min-width:0;max-width:100%}:host ::ng-deep .form-layout-rich-content .prx-rich-text{color:inherit;line-height:20px}:host ::ng-deep .form-layout-rich-content .praxis-form-visual-block--note,:host ::ng-deep .form-layout-rich-content .praxis-rich-content-notice{border:1px solid color-mix(in srgb,var(--pfx-editorial-form-accent) 12%,var(--pfx-editorial-form-border) 88%);border-left:3px solid var(--pfx-editorial-form-accent);border-radius:8px;background:color-mix(in srgb,var(--pfx-editorial-form-accent-container) 12%,var(--pfx-editorial-form-surface-muted) 88%)}:host ::ng-deep .form-layout-rich-content .praxis-form-visual-block--note{display:grid;grid-template-columns:20px minmax(0,1fr);gap:10px;align-items:flex-start;padding:11px 12px}:host ::ng-deep .form-layout-rich-content .praxis-form-visual-block--note:before{content:\"info\";display:inline-flex;align-items:center;justify-content:center;width:20px;height:20px;color:var(--pfx-editorial-form-accent);font-family:Material Symbols Outlined;font-size:20px;font-weight:400;line-height:20px}:host ::ng-deep .form-layout-rich-content .praxis-form-visual-block--note .prx-rich-text{color:var(--pfx-editorial-form-text-muted)}:host ::ng-deep .form-layout-rich-content .praxis-rich-content-notice{padding:10px 12px;color:var(--pfx-editorial-form-text)}:host ::ng-deep .form-layout-rich-content .praxis-rich-content-notice .prx-rich-compose{align-items:flex-start;gap:10px}:host ::ng-deep .form-layout-rich-content .praxis-rich-content-notice .prx-rich-icon{color:var(--pfx-editorial-form-accent);font-size:20px;line-height:20px;margin-top:1px}:host ::ng-deep .form-layout-rich-content .praxis-rich-content-divider{display:grid;grid-template-columns:minmax(24px,1fr) auto minmax(24px,1fr);align-items:center;gap:10px;color:var(--pfx-editorial-form-text-muted);font:var(--mdc-typography-label-small, 600 12px/16px system-ui);text-transform:uppercase}:host ::ng-deep .form-layout-rich-content .praxis-rich-content-divider:before,:host ::ng-deep .form-layout-rich-content .praxis-rich-content-divider:after{content:\"\";height:1px;background:var(--pfx-editorial-form-border)}:host ::ng-deep .form-layout-rich-content .prx-rich-card{gap:6px;padding:12px 14px;border-color:var(--pfx-editorial-form-border);border-radius:8px;background:var(--pfx-editorial-form-surface-muted);color:var(--pfx-editorial-form-text);box-shadow:none}:host ::ng-deep .form-layout-rich-content .prx-rich-card-title{color:var(--pfx-editorial-form-text);font:var(--mdc-typography-title-small, 600 14px/20px system-ui)}:host ::ng-deep .form-layout-rich-content .prx-rich-card-subtitle,:host ::ng-deep .form-layout-rich-content .prx-rich-metric-caption{color:var(--pfx-editorial-form-text-muted)}:host ::ng-deep .form-layout-rich-content .prx-rich-card .prx-rich-text{color:var(--pfx-editorial-form-text-muted)}:host ::ng-deep .form-layout-rich-content .prx-rich-badge{background:var(--pfx-editorial-form-accent-container);color:var(--pfx-editorial-form-accent-container-text)}.form-row.grid-12{container-type:inline-size;container-name:praxis-form-row;display:grid;grid-template-columns:repeat(12,minmax(0,1fr));gap:var(--pfx-grid-gap, 16px)}.align-start{align-self:flex-start}.align-center{align-self:center}.align-end{align-self:flex-end}.align-stretch{align-self:stretch}.form-blocking-overlay{position:absolute;inset:0;background:transparent;color:var(--md-sys-color-on-surface);backdrop-filter:blur(2px) saturate(103%);-webkit-backdrop-filter:blur(2px) saturate(103%);display:flex;align-items:center;justify-content:center;flex-direction:column;gap:12px;z-index:10;pointer-events:all}@media(max-width:768px){.column-drop-wrapper,.row-drop-wrapper,.form-layout-rich-content,.praxis-dynamic-form .mat-mdc-form-field,.praxis-dynamic-form .mat-mdc-text-field-wrapper,.praxis-dynamic-form .mdc-text-field{max-width:100%;min-width:0}:host ::ng-deep .praxis-dynamic-form .pfx-field-shell,:host ::ng-deep .praxis-dynamic-form .pfx-field-shell-wrapper,:host ::ng-deep .praxis-dynamic-form .pfx-field-shell-host,:host ::ng-deep .praxis-dynamic-form .mat-mdc-form-field,:host ::ng-deep .praxis-dynamic-form .mat-mdc-text-field-wrapper,:host ::ng-deep .praxis-dynamic-form .mdc-text-field{width:100%;max-width:100%;min-width:0}.form-section{padding:clamp(.75rem,4vw,1rem)}.section-heading{gap:10px;margin-bottom:16px;padding-bottom:var(--pfx-form-section-heading-divider-gap, 14px)}.section-heading.title-only{padding-bottom:var(--pfx-form-section-heading-title-only-divider-gap, 8px)}}.section-title{display:flex;align-items:center;gap:8px}:host(.pfx-form-section-divider-inline-title) .section-heading.title-only .section-title{width:100%;min-width:0}:host(.pfx-form-section-divider-inline-title) .section-heading.title-only .section-title:after{content:\"\";display:block;flex:1 1 auto;min-width:var(--pfx-form-section-title-inline-divider-min-width, 48px);height:2px;margin-left:var(--pfx-form-section-title-inline-divider-gap, 12px);pointer-events:none;background:linear-gradient(90deg,var(--pfx-form-section-divider) 0%,var(--pfx-form-section-divider) 62%,color-mix(in srgb,var(--pfx-form-section-divider) 18%,transparent) 88%,transparent 100%);border-radius:999px;-webkit-mask-image:linear-gradient(90deg,black 0%,black 72%,transparent 100%);mask-image:linear-gradient(90deg,black 0%,black 72%,transparent 100%)}:host(.pfx-form-section-divider-inline-title) .section-heading.align-center .section-title:after{display:none}@media(max-width:640px){:host(.pfx-form-section-divider-inline-title) .section-heading.title-only{padding-bottom:var(--pfx-form-section-heading-title-only-divider-gap, 8px)}:host(.pfx-form-section-divider-inline-title) .section-heading.title-only:after{display:block}:host(.pfx-form-section-divider-inline-title) .section-heading.title-only .section-title{width:auto}:host(.pfx-form-section-divider-inline-title) .section-heading.title-only .section-title:after{display:none}}.section-title .section-title-icon{font-size:1.25em;line-height:1}.section-title-avatar{--_pfx-form-section-avatar-size: var(--pfx-form-section-avatar-size-md, var(--pfx-form-section-avatar-size, 32px));display:inline-flex;align-items:center;justify-content:center;width:var(--_pfx-form-section-avatar-size);height:var(--_pfx-form-section-avatar-size);border-radius:999px;flex:0 0 var(--_pfx-form-section-avatar-size);overflow:hidden}.section-title-avatar.size-sm{--_pfx-form-section-avatar-size: var(--pfx-form-section-avatar-size-sm, 24px)}.section-title-avatar.size-md{--_pfx-form-section-avatar-size: var(--pfx-form-section-avatar-size-md, var(--pfx-form-section-avatar-size, 32px))}.section-title-avatar.size-lg{--_pfx-form-section-avatar-size: var(--pfx-form-section-avatar-size-lg, 40px)}.section-title-avatar-image{object-fit:cover;border:1px solid color-mix(in srgb,var(--pfx-form-section-divider) 72%,transparent);background:var(--pfx-form-section-surface-flat)}.section-title-avatar-text,.section-title-avatar-placeholder{background:color-mix(in srgb,var(--pfx-editorial-form-accent) 14%,var(--pfx-form-section-surface-flat));color:color-mix(in srgb,var(--pfx-editorial-form-accent) 82%,var(--pfx-form-label-strong) 18%);font-size:calc(var(--_pfx-form-section-avatar-size) * .41);font-weight:800;letter-spacing:.04em;text-transform:uppercase}.section-title-avatar-placeholder mat-icon{font-size:calc(var(--_pfx-form-section-avatar-size) * .5625);width:calc(var(--_pfx-form-section-avatar-size) * .5625);height:calc(var(--_pfx-form-section-avatar-size) * .5625);line-height:calc(var(--_pfx-form-section-avatar-size) * .5625)}.section-title-avatar-sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.form-context-empty-state{display:grid;min-height:var(--pdx-form-context-empty-min-height, 0);place-items:center;padding:var(--pdx-form-context-empty-padding, 0)}.form-context-empty-state praxis-empty-state-card{display:block;width:min(100%,var(--pdx-form-context-empty-max-width, 32rem))}.prx-form-tabs{display:block;margin-bottom:16px;max-width:100%}.prx-form-tabs__tablist{display:flex;flex-wrap:wrap;align-items:center;gap:8px;max-width:100%}.prx-form-tabs__tablist--scrollable{flex-wrap:nowrap;overflow-x:auto;overflow-y:hidden;scrollbar-width:none;-webkit-overflow-scrolling:touch;padding:4px 2px}.prx-form-tabs__tablist--scrollable::-webkit-scrollbar{display:none}.prx-form-tabs__tab{display:inline-flex;align-items:center;gap:8px;min-width:0;padding:8px 14px;border-radius:999px;border:1px solid var(--md-sys-color-outline-variant, rgba(0, 0, 0, .12));background:color-mix(in srgb,var(--md-sys-color-surface, transparent) 40%,transparent);color:var(--md-sys-color-on-surface, #1d1b20);font-family:inherit;font-size:.84rem;font-weight:500;cursor:pointer;white-space:nowrap;flex-shrink:0;-webkit-user-select:none;user-select:none;transition:all .2s cubic-bezier(.2,0,0,1)}.prx-form-tabs__tab:hover:not(:disabled):not(.prx-form-tabs__tab--active){background:var(--md-sys-color-surface-container-high, rgba(0, 0, 0, .05));border-color:var(--md-sys-color-outline, rgba(0, 0, 0, .24));color:var(--md-sys-color-on-surface)}.prx-form-tabs__tab:focus-visible{outline:2px solid var(--md-sys-color-primary, #005ac1);outline-offset:2px}.prx-form-tabs__tab:disabled{cursor:not-allowed;opacity:.45}.prx-form-tabs__tab--active{background:var(--md-sys-color-primary-container, color-mix(in srgb, var(--md-sys-color-primary, #005ac1) 16%, var(--md-sys-color-surface-container-high, #2b2930)));color:var(--md-sys-color-on-primary-container, var(--md-sys-color-primary, #005ac1));border-color:transparent;font-weight:600;box-shadow:0 1px 3px #00000014}.prx-form-tabs__tab-icon{font-size:18px;width:18px;height:18px;display:inline-flex;align-items:center;justify-content:center}.prx-form-tabs__tab-badge{display:inline-flex;align-items:center;justify-content:center;padding:1px 7px;font-size:.72rem;font-weight:600;border-radius:999px;background:color-mix(in srgb,currentColor 14%,transparent)}.prx-form-tabs__tab-error-badge{display:inline-flex;align-items:center;justify-content:center;min-width:18px;height:18px;padding:0 5px;border-radius:999px;font-size:.7rem;font-weight:700;background:var(--md-sys-color-error, #ba1a1a);color:var(--md-sys-color-on-error, #ffffff);box-shadow:0 1px 2px #0003}.prx-form-tabs[data-appearance=underline]{border-bottom:1px solid var(--md-sys-color-outline-variant, #cac4d0)}.prx-form-tabs[data-appearance=underline] .prx-form-tabs__tablist{gap:16px;padding-bottom:0}.prx-form-tabs[data-appearance=underline] .prx-form-tabs__tab{border:none;border-radius:0;border-bottom:2px solid transparent;background:transparent;padding:8px 4px 10px;margin-bottom:-1px}.prx-form-tabs[data-appearance=underline] .prx-form-tabs__tab:hover:not(:disabled):not(.prx-form-tabs__tab--active){background:transparent;border-bottom-color:var(--md-sys-color-outline-variant, #cac4d0)}.prx-form-tabs[data-appearance=underline] .prx-form-tabs__tab--active{background:transparent;box-shadow:none;border-bottom-color:var(--md-sys-color-primary, #005ac1);color:var(--md-sys-color-primary, #005ac1)}.prx-form-tabs[data-appearance=buttons] .prx-form-tabs__tablist{background:var(--md-sys-color-surface-container, rgba(0, 0, 0, .04));border-radius:12px;padding:4px;gap:4px;border:1px solid var(--md-sys-color-outline-variant, rgba(0, 0, 0, .08))}.prx-form-tabs[data-appearance=buttons] .prx-form-tabs__tab{border:none;border-radius:8px;padding:6px 12px;background:transparent}.prx-form-tabs[data-appearance=buttons] .prx-form-tabs__tab:hover:not(:disabled):not(.prx-form-tabs__tab--active){background:color-mix(in srgb,currentColor 8%,transparent)}.prx-form-tabs[data-appearance=buttons] .prx-form-tabs__tab--active{background:var(--md-sys-color-surface, var(--mat-sys-surface));color:var(--md-sys-color-primary, #005ac1);box-shadow:0 1px 3px #0000001f}.section-drop-wrapper[hidden]{display:none!important}.form-loading-title,.entity-read-loading-text,.form-blocking-overlay p{color:var(--pdx-text-shimmer-base, var(--md-sys-color-on-surface-variant));font-weight:550;text-shadow:none}@supports (-webkit-background-clip: text) or (background-clip: text){.form-loading-title,.entity-read-loading-text,.form-blocking-overlay p{background-image:var(--pdx-text-shimmer-gradient, linear-gradient(105deg, color-mix(in oklab, var(--md-sys-color-on-surface-variant, #64748b) 78%, var(--md-sys-color-on-surface, #0f172a) 22%) 0%, color-mix(in oklab, var(--md-sys-color-on-surface-variant, #64748b) 78%, var(--md-sys-color-on-surface, #0f172a) 22%) 26%, color-mix(in oklab, var(--md-sys-color-tertiary, #6366f1) 66%, #a855f7 34%) 40%, var(--pdx-text-shimmer-peak, var(--md-sys-color-on-surface, #ffffff)) 50%, color-mix(in oklab, var(--md-sys-color-primary, #006a6a) 66%, #ec4899 34%) 60%, color-mix(in oklab, var(--md-sys-color-on-surface-variant, #64748b) 78%, var(--md-sys-color-on-surface, #0f172a) 22%) 74%, color-mix(in oklab, var(--md-sys-color-on-surface-variant, #64748b) 78%, var(--md-sys-color-on-surface, #0f172a) 22%) 100%));background-size:300% 100%;background-position:100% 50%;background-repeat:no-repeat;-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;color:transparent;animation:praxisFormTextShimmer var(--pdx-text-shimmer-duration, 2.6s) linear infinite;will-change:background-position}}@media(prefers-reduced-motion:reduce),(forced-colors:active),print{.form-loading-title,.entity-read-loading-text,.form-blocking-overlay p{animation:none!important;background-image:none!important;-webkit-text-fill-color:currentColor!important;color:var(--md-sys-color-primary)!important;will-change:auto}}@media(forced-colors:active){.form-loading-title,.entity-read-loading-text,.form-blocking-overlay p{color:CanvasText!important;-webkit-text-fill-color:CanvasText!important}}@keyframes praxisFormTextShimmer{0%{background-position:100% 50%}to{background-position:0% 50%}}.form-action-target-banner{display:flex;flex-direction:column;gap:6px;margin-bottom:18px;padding:12px 14px;border-radius:8px;border-left:3px solid var(--md-sys-color-primary);background:color-mix(in srgb,var(--md-sys-color-primary) 7%,var(--md-sys-color-surface-container-low, var(--md-sys-color-surface)))}.form-action-target-banner__header{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.form-action-target-banner__eyebrow{font-size:.6875rem;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--md-sys-color-primary)}.form-action-target-banner__id{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;font-size:.75rem;font-weight:600;padding:1px 6px;border-radius:4px;background:color-mix(in srgb,var(--md-sys-color-on-surface) 8%,transparent);color:var(--md-sys-color-on-surface-variant)}.form-action-target-banner__badges{display:inline-flex;flex-wrap:wrap;align-items:center;gap:6px;margin-left:auto}.form-action-target-banner__badge{display:inline-flex;align-items:center;padding:2px 8px;border-radius:999px;font-size:.6875rem;font-weight:600;letter-spacing:.02em;background:color-mix(in srgb,var(--md-sys-color-on-surface) 10%,transparent);color:var(--md-sys-color-on-surface)}.form-action-target-banner__badge[data-tone=info]{background:color-mix(in srgb,var(--md-sys-color-primary) 16%,transparent);color:var(--md-sys-color-primary)}.form-action-target-banner__badge[data-tone=success]{background:#10b98129;color:#059669}.form-action-target-banner__badge[data-tone=warning]{background:#f59e0b2e;color:#d97706}.form-action-target-banner__badge[data-tone=danger]{background:color-mix(in srgb,var(--md-sys-color-error) 16%,transparent);color:var(--md-sys-color-error)}.form-action-target-banner__title{font-size:.95rem;font-weight:650;line-height:1.3;color:var(--md-sys-color-on-surface)}.form-action-target-banner__subtitle{font-size:.8125rem;line-height:1.4;color:var(--md-sys-color-on-surface-variant);display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.form-context-empty-state{min-height:320px;display:flex;align-items:center;justify-content:center;padding:24px 20px;border-radius:16px;border:1px dashed color-mix(in srgb,var(--md-sys-color-outline-variant, #444746) 45%,transparent);background:color-mix(in srgb,var(--md-sys-color-surface-container-low, var(--md-sys-color-surface)) 72%,transparent);box-sizing:border-box}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: DynamicFieldLoaderDirective, selector: "[dynamicFieldLoader]", inputs: ["fields", "formGroup", "enableExternalControlBinding", "itemTemplate", "debugTrace", "debugTraceLabel", "readonlyMode", "disabledMode", "presentationMode", "visible", "canvasMode"], outputs: ["componentsCreated", "fieldCreated", "fieldDestroyed", "renderError", "canvasMouseEnter", "canvasMouseLeave", "canvasClick", "canvasFocus"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i3.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: i3.MatFabButton, selector: "button[mat-fab], a[mat-fab], button[matFab], a[matFab]", inputs: ["extended"], exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatProgressSpinnerModule }, { kind: "component", type: i17.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i5.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: MatDialogModule }, { kind: "ngmodule", type: MatSnackBarModule }, { kind: "ngmodule", type: MatBadgeModule }, { kind: "directive", type: i19.MatBadge, selector: "[matBadge]", inputs: ["matBadgeColor", "matBadgeOverlap", "matBadgeDisabled", "matBadgePosition", "matBadge", "matBadgeDescription", "matBadgeSize", "matBadgeHidden"] }, { kind: "component", type: PraxisIconButtonComponent, selector: "button[praxisIconButton]", inputs: ["praxisIconButton", "size", "appearance", "presentation", "pressed", "busy"] }, { kind: "directive", type: PraxisIconDirective, selector: "mat-icon[praxisIcon]", inputs: ["praxisIcon"] }, { kind: "component", type: CanvasToolbarComponent, selector: "praxis-canvas-toolbar", inputs: ["selectedElement"], outputs: ["editMetadata", "delete", "moveUp", "moveDown", "selectPath", "requestClose", "toggleReadonly", "toggleRequired", "toggleHidden", "toggleDisabled"] }, { kind: "component", type: PraxisFormActionsComponent, selector: "praxis-form-actions", inputs: ["actions", "editorialVisualContext", "isSubmitting", "formIsValid", "submitError", "invalidRequiredFieldLabels", "suppressInvalidSubmitHint", "formId", "actionOverrides"], outputs: ["action"] }, { kind: "component", type: EmptyStateCardComponent, selector: "praxis-empty-state-card", inputs: ["icon", "title", "description", "primaryAction", "secondaryActions", "inline", "tone", "variant", "alignment", "density", "iconContainer"] }, { kind: "component", type: PraxisAiAssistantShellComponent, selector: "praxis-ai-assistant-shell", inputs: ["labels", "mode", "state", "contextItems", "attachments", "messages", "quickReplies", "recommendedIntents", "prompt", "statusText", "errorText", "testIdPrefix", "panelTestId", "submitTestId", "applyTestId", "primaryAction", "secondaryActions", "governanceActions", "busy", "canSubmit", "canApply", "submitOnEnter", "showAttachAction", "enablePastedAttachments", "enableFileAttachments", "attachmentAccept", "attachmentMultiple", "voiceInputMode", "voiceLanguage", "draggable", "resizable", "minWidth", "minHeight", "margin", "layout"], outputs: ["promptChange", "submitPrompt", "apply", "retryTurn", "cancelTurn", "shellAction", "close", "attach", "attachmentsPasted", "attachmentsSelected", "removeAttachment", "messageAction", "editMessage", "resendMessage", "quickReply", "recommendedIntent", "layoutChange"] }, { kind: "component", type: PraxisRichContent, selector: "praxis-rich-content", inputs: ["document", "nodes", "context", "hostCapabilities", "layout", "rootClassName"], outputs: ["nodeAction"] }] });
22194
22591
  }
22195
22592
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: PraxisDynamicForm, decorators: [{
22196
22593
  type: Component,
@@ -22216,7 +22613,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
22216
22613
  EmptyStateCardComponent,
22217
22614
  PraxisAiAssistantShellComponent,
22218
22615
  PraxisRichContent,
22219
- ], template: "@if (isLoading) {\n <!-- Loading State -->\n <div class=\"form-loading\" role=\"status\" aria-live=\"polite\" aria-label=\"Carregando formul\u00E1rio\">\n <div class=\"form-loading-header\">\n <mat-progress-spinner diameter=\"32\" aria-label=\"Carregando formul\u00E1rio\"></mat-progress-spinner>\n <div class=\"form-loading-copy\">\n <p class=\"form-loading-title\">Carregando formul\u00E1rio...</p>\n <p class=\"form-loading-subtitle\">Preparando campos e op\u00E7\u00F5es do cadastro.</p>\n </div>\n </div>\n <div class=\"form-loading-skeleton\" aria-hidden=\"true\">\n <span class=\"form-loading-line form-loading-line-title\"></span>\n <span class=\"form-loading-line\"></span>\n <span class=\"form-loading-line form-loading-line-short\"></span>\n <span class=\"form-loading-field\"></span>\n <span class=\"form-loading-field form-loading-field-wide\"></span>\n </div>\n </div>\n} @else if (initializationStatus === 'error') {\n <!-- Error State -->\n <div class=\"form-error\">\n <mat-icon color=\"warn\" [praxisIcon]=\"'error'\"></mat-icon>\n <h3>{{ getErrorTitle() }}</h3>\n <p>{{ currentErrorMessage }}</p>\n @if (isRecoverable) {\n <button mat-stroked-button (click)=\"retryInitialization()\">\n <mat-icon [praxisIcon]=\"'refresh'\"></mat-icon>\n Tentar Novamente\n </button>\n }\n <button mat-button (click)=\"showDetailedError()\" class=\"show-details\">\n Ver Detalhes T\u00E9cnicos\n </button>\n <!-- Permitir corre\u00E7\u00E3o do resourcePath diretamente do estado de erro -->\n <button mat-flat-button color=\"primary\" (click)=\"openQuickConnect()\" class=\"connect-action\">\n <mat-icon [praxisIcon]=\"'bolt'\"></mat-icon>\n Conectar a recurso\n </button>\n </div>\n} @else if (initializationStatus === 'success') {\n <!-- Inline banner for schema change (only when customization is enabled) -->\n @if (shouldShowOutdatedInline()) {\n <div class=\"pfx-form-info-banner\" role=\"status\" aria-live=\"polite\">\n <div class=\"text\">O schema do servidor mudou. Reconciliar agora?</div>\n <div class=\"actions\">\n <button mat-stroked-button color=\"primary\" (click)=\"openConfigEditor()\">\n <mat-icon [praxisIcon]=\"'sync'\"></mat-icon>\n Reconciliar\n </button>\n <button mat-button (click)=\"onSnoozeOutdated()\">Lembrar depois</button>\n <button mat-button (click)=\"onIgnoreOutdated()\">Ignorar</button>\n </div>\n </div>\n }\n\n <!-- Configuration Controls -->\n @if (shouldShowConfigControls && enableCustomization) {\n <div class=\"form-config-controls\">\n @if (showAiAssistant) {\n <button type=\"button\" praxisIconButton=\"auto_awesome\" size=\"dense\" (click)=\"openAiAssistant()\" [disabled]=\"isLoading\"\n [attr.data-testid]=\"aiAssistantTriggerTestId('config-controls')\"\n aria-label=\"Abrir copiloto semantico Praxis do formulario\"\n matTooltip=\"Abrir copiloto sem\u00E2ntico do formul\u00E1rio\">\n </button>\n }\n <button type=\"button\" praxisIconButton=\"settings\" size=\"dense\" (click)=\"openConfigEditor()\" [disabled]=\"isLoading\" class=\"config-button\"\n [matBadge]=\"schemaOutdated ? '!' : ''\" [matBadgeHidden]=\"!schemaOutdated\" matBadgeColor=\"warn\" matBadgeSize=\"small\"\n matBadgePosition=\"above after\"\n [attr.aria-label]=\"configControlLabel\" [matTooltip]=\"configControlLabel\">\n </button>\n <button type=\"button\" praxisIconButton=\"link_off\" size=\"dense\" (click)=\"disconnect()\"\n [attr.aria-label]=\"disconnectControlLabel\" [matTooltip]=\"disconnectControlLabel\"\n [disabled]=\"isLoading\">\n </button>\n </div>\n }\n\n <!-- Form Content -->\n @if (!resourcePath && !hasExplicitSchemaUrl() && !hasRenderableConfig()) {\n <praxis-empty-state-card\n icon=\"link\"\n [title]=\"'Conecte o formul\u00E1rio \u00E0 fonte de dados'\"\n [description]=\"'Informe a rota do recurso da API para gerar automaticamente os campos do formul\u00E1rio.'\"\n [primaryAction]=\"enableCustomization ? { label: 'Conectar \u00E0 fonte de dados', icon: 'bolt', action: openQuickConnect.bind(this) } : undefined\"\n ></praxis-empty-state-card>\n }\n @if (shouldShowContextEmptyState()) {\n <div class=\"form-context-empty-state\" role=\"status\" aria-live=\"polite\">\n <praxis-empty-state-card\n [icon]=\"emptyState?.icon || 'touch_app'\"\n [title]=\"emptyState!.title\"\n [description]=\"emptyState?.description\"\n [tone]=\"emptyState?.tone || 'primary'\"\n [variant]=\"emptyState?.variant || 'transparent'\"\n [alignment]=\"emptyState?.alignment || 'center'\"\n [density]=\"emptyState?.density || 'compact'\"\n [iconContainer]=\"emptyState?.iconContainer || 'circle'\"\n [inline]=\"true\"\n />\n </div>\n } @else {\n <div #entityReadRegion class=\"entity-read-region\" tabindex=\"-1\" role=\"region\" [attr.aria-label]=\"entityReadText('region')\">\n <span class=\"cdk-visually-hidden\" role=\"status\" aria-live=\"polite\" aria-atomic=\"true\">{{ entityReadStatusText() }}</span>\n @if (entityHydrationPending || entityReadFailed) {\n <div class=\"entity-read-feedback\" data-testid=\"form-entity-read-feedback\">\n @if (entityHydrationPending) {\n <mat-progress-spinner diameter=\"28\" mode=\"indeterminate\" aria-hidden=\"true\"></mat-progress-spinner>\n <p class=\"entity-read-loading-text\" aria-hidden=\"true\">{{ entityReadText('loading') }}</p>\n } @else {\n <mat-icon [praxisIcon]=\"'error_outline'\" aria-hidden=\"true\"></mat-icon>\n <p aria-hidden=\"true\">{{ entityReadText('error') }}</p>\n <button mat-stroked-button type=\"button\" (click)=\"retryEntityRead(entityReadRegion)\">{{ entityReadText('retry') }}</button>\n }\n </div>\n }\n <form #formHost (ngSubmit)=\"onSubmit()\" [attr.aria-busy]=\"submitting || entityHydrationPending ? 'true' : null\"\n [style.opacity]=\"entityHydrationPending || entityReadFailed ? '0' : null\"\n [style.transition]=\"entityHydrationPending || entityReadFailed ? 'none' : null\"\n [attr.inert]=\"entityHydrationPending || entityReadFailed ? '' : null\"\n [attr.aria-hidden]=\"entityHydrationPending || entityReadFailed ? 'true' : null\"\n [attr.aria-label]=\"'Formul\u00E1rio ' + (config.metadata?.version || '')\" [class.canvas-mode-enabled]=\"enableCustomization\"\n [class.presentation-mode]=\"effectivePresentation\"\n [class.praxis-dynamic-form--presentation]=\"effectivePresentation\"\n [class.readonly-mode]=\"effectiveReadonly\"\n [attr.data-presentation-preset]=\"effectivePresentation ? effectivePresentationPreset : null\"\n [class.praxis-dynamic-form--corporate-dossier]=\"isCorporateDossierPreset()\"\n [class.praxis-dynamic-form--editorial-card]=\"isEditorialCardPreset()\"\n [class.praxis-dynamic-form--compact-presentation]=\"isCompactPresentationPreset()\"\n [class.editorial-visual-context]=\"hasEditorialVisualContext()\"\n [class.pfx-mounting]=\"isMounting\" [formGroup]=\"form\"\n [ngClass]=\"{\n 'pres-compact': presentationVars.compact,\n 'pres-label-left': presentationVars.labelPosition === 'left',\n 'pres-label-above': presentationVars.labelPosition === 'above'\n }\" [style.--pfx-pres-label-align]=\"presentationVars.labelAlign\"\n [style.--pfx-pres-label-size]=\"presentationVars.labelSize\"\n [style.--pfx-pres-label-width]=\"presentationVars.labelWidth\"\n [style.--pfx-pres-row-gap]=\"presentationVars.density === 'compact' ? '6px' : (presentationVars.density === 'cozy' ? '8px' : '10px')\"\n [style.--pfx-pres-row-padding]=\"presentationVars.density === 'compact' ? '2px 0' : (presentationVars.density === 'cozy' ? '6px 0' : '8px 0')\"\n [style.--pfx-pres-value-align]=\"presentationVars.valueAlign\"\n [style.--pfx-pres-value-size]=\"presentationVars.valueSize\"\n [style.--pdx-form-mount-duration]=\"getMountDurationVar()\"\n [style.--pdx-form-mount-offset]=\"getMountOffsetVar()\"\n [style.--pdx-form-mount-stagger]=\"getMountStaggerVar()\"\n class=\"praxis-dynamic-form\">\n @if (enableCustomization && selectedElement) {\n <praxis-canvas-toolbar (editMetadata)=\"openSelectedElementEditor()\" (selectPath)=\"onSelectPath($event)\"\n (moveUp)=\"onToolbarMove('up')\" (moveDown)=\"onToolbarMove('down')\" (toggleReadonly)=\"onToolbarToggleReadonly()\"\n (toggleRequired)=\"onToolbarToggleRequired()\" (toggleHidden)=\"onToolbarToggleHidden()\"\n (toggleDisabled)=\"onToolbarToggleDisabled()\" (requestClose)=\"onToolbarRequestClose()\"\n [selectedElement]=\"selectedElement\"\n [style.transform]=\"toolbarTransform\"></praxis-canvas-toolbar>\n }\n\n @if (formBlocksBefore?.nodes?.length) {\n <section class=\"form-editorial-blocks form-editorial-blocks-before\" data-editorial-placement=\"before\">\n <praxis-rich-content\n [document]=\"formBlocksBeforeDocument\"\n [context]=\"getEditorialRichContentContext()\"\n [hostCapabilities]=\"richContentHostCapabilities\"\n ></praxis-rich-content>\n </section>\n }\n\n @if (actionPlacement === 'top' && !(effectivePresentation || effectiveReadonly)) {\n <praxis-form-actions data-actions-placement=\"top\" [actions]=\"effectiveActions\" [isSubmitting]=\"submitting\"\n [formIsValid]=\"effectiveFormIsValid\" [submitError]=\"submitError\" [formId]=\"formId\" [actionOverrides]=\"actionRuleProps\"\n [invalidRequiredFieldLabels]=\"invalidRequiredFieldLabels\"\n [suppressInvalidSubmitHint]=\"entityHydrationPending\"\n [editorialVisualContext]=\"hasEditorialVisualContext()\"\n (action)=\"onFormAction($event)\"></praxis-form-actions>\n }\n\n <!-- Tab Layout Navigation Bar -->\n @if (effectiveLayoutMode === 'tabs' && effectiveTabs.length > 1) {\n <nav class=\"prx-form-tabs\" [attr.data-appearance]=\"effectiveTabsAppearance\" role=\"tablist\" aria-label=\"Navega\u00E7\u00E3o em abas do formul\u00E1rio\">\n <div class=\"prx-form-tabs__tablist prx-form-tabs__tablist--scrollable\">\n @for (tab of effectiveTabs; track tab.id) {\n <button\n type=\"button\"\n role=\"tab\"\n class=\"prx-form-tabs__tab\"\n [class.prx-form-tabs__tab--active]=\"activeTabId === tab.id\"\n [attr.aria-selected]=\"activeTabId === tab.id\"\n [attr.aria-controls]=\"getTabAriaControls(tab)\"\n [attr.id]=\"'tab-' + tab.id\"\n [disabled]=\"tab.disabled\"\n [matTooltip]=\"tab.tooltip || null\"\n [matTooltipDisabled]=\"!tab.tooltip\"\n (click)=\"selectTab(tab.id)\"\n >\n @if (tab.icon) {\n <mat-icon class=\"prx-form-tabs__tab-icon\" [praxisIcon]=\"tab.icon\" aria-hidden=\"true\"></mat-icon>\n }\n <span class=\"prx-form-tabs__tab-label\">{{ tab.label }}</span>\n @if (tab.badge != null) {\n <span class=\"prx-form-tabs__tab-badge\">{{ tab.badge }}</span>\n }\n @if (getTabErrorCount(tab) > 0) {\n <span class=\"prx-form-tabs__tab-error-badge\" [attr.aria-label]=\"getTabErrorCount(tab) + ' erros na aba'\">\n {{ getTabErrorCount(tab) }}\n </span>\n }\n </button>\n }\n </div>\n </nav>\n }\n\n @for (section of (config.sections || []); track (section.id ?? $index); let sectionIndex = $index) {\n <div class=\"section-drop-wrapper\" [attr.data-section-id]=\"section.id\" [hidden]=\"!isSectionInActiveTab(section)\"\n [attr.role]=\"effectiveLayoutMode === 'tabs' ? 'tabpanel' : null\"\n [attr.id]=\"effectiveLayoutMode === 'tabs' ? ('section-tabpanel-' + section.id) : null\"\n [attr.aria-labelledby]=\"effectiveLayoutMode === 'tabs' ? ('tab-' + (getTabIdForSection(section) || section.id)) : null\">\n @if (isSectionVisible(section)) {\n <div #sectionEl class=\"form-section canvas-element\" data-canvas-type=\"section\" [attr.data-section-id]=\"section.id\"\n [attr.data-section-index]=\"sectionIndex\" (mouseenter)=\"onElementMouseEnter($event, 'section', section, sectionEl)\"\n (mouseleave)=\"onElementMouseLeave($event)\" (click)=\"onElementClick($event, 'section', section, sectionEl)\"\n [class.selected]=\"selectedElement?.domElement === sectionEl\"\n [class.hovered]=\"hoveredElement?.domElement === sectionEl && selectedElement?.domElement !== sectionEl\"\n [attr.data-section-appearance]=\"getSectionAppearance(section) || null\"\n [attr.data-section-divider]=\"isSectionDividerEnabled(section) ? 'true' : null\"\n [attr.data-presentation-preset]=\"effectivePresentation ? getSectionPresentationPreset(section) : null\"\n [class.form-section--corporate-dossier]=\"isSectionCorporateDossier(section)\"\n [class.form-section--editorial-card]=\"isSectionEditorialCard(section)\"\n [class.form-section--compact-presentation]=\"isSectionCompactPresentation(section)\"\n [style.marginBottom.px]=\"!isLastVisibleSection(section) ? getSectionGapBottom(section) : null\" [ngClass]=\"getSectionClasses(section)\"\n [ngStyle]=\"getSectionStyles(section)\">\n @if (!shouldHideSectionHeader(section)) {\n <div\n class=\"section-heading\"\n [class.align-center]=\"getSectionHeaderAlign(section) === 'center'\"\n [class.step-appearance]=\"getSectionAppearance(section) === 'step'\"\n [class.title-only]=\"isSectionHeaderTitleOnly(section)\"\n >\n <div class=\"section-heading-text\" [matTooltip]=\"getSectionHeaderTooltip(section) || null\"\n [matTooltipDisabled]=\"!getSectionHeaderTooltip(section)\">\n @if (getSectionStepLabel(section)) {\n <div class=\"section-step-label\" [class.align-center]=\"getSectionHeaderAlign(section) === 'center'\">\n {{ getSectionStepLabel(section) }}\n </div>\n }\n @if (getSectionTitle(section)) {\n <h3 class=\"section-title\" [class.title-large]=\"getSectionTitleStyle(section) === 'titleLarge'\"\n [class.title-medium]=\"getSectionTitleStyle(section) === 'titleMedium'\"\n [class.title-small]=\"getSectionTitleStyle(section) === 'titleSmall'\"\n [class.headline-small]=\"getSectionTitleStyle(section) === 'headlineSmall'\"\n [style.marginBottom.px]=\"getEffectiveSectionTitleGapBottom(section)\" [style.color]=\"getSectionTitleColor(section) || null\"\n [class.align-center]=\"getSectionHeaderAlign(section) === 'center'\"\n [attr.id]=\"sectionPanelId(section, sectionIndex) + '-title'\">\n @let sectionHeaderVisual = getSectionHeaderVisual(section);\n @let sectionHeaderAvatarSize = getSectionHeaderAvatarSize(section);\n @if (sectionHeaderVisual.kind === 'icon') {\n <mat-icon class=\"section-title-icon\" aria-hidden=\"true\" [praxisIcon]=\"sectionHeaderVisual.icon\"></mat-icon>\n }\n @if (sectionHeaderVisual.kind === 'image') {\n <img class=\"section-title-avatar section-title-avatar-image\" [class.size-sm]=\"sectionHeaderAvatarSize === 'sm'\"\n [class.size-md]=\"sectionHeaderAvatarSize === 'md'\" [class.size-lg]=\"sectionHeaderAvatarSize === 'lg'\"\n [src]=\"sectionHeaderVisual.src\" [alt]=\"sectionHeaderVisual.alt\" />\n }\n @if (sectionHeaderVisual.kind === 'initials') {\n <span class=\"section-title-avatar section-title-avatar-text\" [class.size-sm]=\"sectionHeaderAvatarSize === 'sm'\"\n [class.size-md]=\"sectionHeaderAvatarSize === 'md'\" [class.size-lg]=\"sectionHeaderAvatarSize === 'lg'\" aria-hidden=\"true\">\n {{ sectionHeaderVisual.text }}\n </span>\n @if (sectionHeaderVisual.ariaLabel) {\n <span class=\"section-title-avatar-sr-only\">{{ sectionHeaderVisual.ariaLabel }}</span>\n }\n }\n @if (sectionHeaderVisual.kind === 'placeholder') {\n <span class=\"section-title-avatar section-title-avatar-placeholder\" [class.size-sm]=\"sectionHeaderAvatarSize === 'sm'\"\n [class.size-md]=\"sectionHeaderAvatarSize === 'md'\" [class.size-lg]=\"sectionHeaderAvatarSize === 'lg'\" aria-hidden=\"true\">\n @if (sectionHeaderVisual.icon) {\n <mat-icon aria-hidden=\"true\" [praxisIcon]=\"sectionHeaderVisual.icon\"></mat-icon>\n }\n @if (sectionHeaderVisual.text) {\n <span>{{ sectionHeaderVisual.text }}</span>\n }\n </span>\n @if (sectionHeaderVisual.ariaLabel) {\n <span class=\"section-title-avatar-sr-only\">{{ sectionHeaderVisual.ariaLabel }}</span>\n }\n }\n {{ getSectionTitle(section) }}\n @if (enableCustomization) {\n <button type=\"button\" class=\"inline-edit-btn\" praxisIconButton=\"edit\" size=\"dense\" (click)=\"openSectionEditor(section, 'title')\"\n aria-label=\"Editar t\u00EDtulo da se\u00E7\u00E3o\" matTooltip=\"Editar t\u00EDtulo\">\n </button>\n }\n </h3>\n }\n @if (getSectionDescription(section)) {\n <p class=\"section-description\" [class.body-large]=\"getSectionDescriptionStyle(section) === 'bodyLarge'\"\n [class.body-medium]=\"getSectionDescriptionStyle(section) === 'bodyMedium'\"\n [class.body-small]=\"getSectionDescriptionStyle(section) === 'bodySmall'\"\n [style.marginBottom.px]=\"getSectionDescriptionGapBottom(section) ?? 8\" [style.color]=\"getSectionDescriptionColor(section) || null\"\n [class.align-center]=\"getSectionHeaderAlign(section) === 'center'\">\n {{ getSectionDescription(section) }}\n @if (enableCustomization) {\n <button type=\"button\" class=\"inline-edit-btn\" praxisIconButton=\"edit\" size=\"dense\"\n (click)=\"openSectionEditor(section, 'description')\" aria-label=\"Editar descri\u00E7\u00E3o da se\u00E7\u00E3o\"\n matTooltip=\"Editar descri\u00E7\u00E3o\">\n </button>\n }\n </p>\n }\n </div>\n @if (getSectionHeaderActions(section).length) {\n <div class=\"section-heading-actions\" [class.align-center]=\"getSectionHeaderAlign(section) === 'center'\">\n @for (action of getSectionHeaderActions(section); track action.id) {\n <button\n type=\"button\"\n class=\"section-heading-action-btn\"\n [praxisIconButton]=\"action.icon\"\n size=\"compact\"\n [busy]=\"action.loading\"\n [disabled]=\"isSectionHeaderActionDisabled(action)\"\n [matTooltip]=\"getSectionHeaderActionTooltip(action)\"\n [attr.aria-label]=\"action.label\"\n [attr.aria-busy]=\"action.loading ? 'true' : null\"\n [ngClass]=\"getSectionHeaderActionNgClass(action)\"\n [ngStyle]=\"getSectionHeaderActionStyles(action)\"\n (click)=\"onSectionHeaderActionClick(section, action, $event)\"\n >\n @if (action.loading) {\n <span class=\"section-heading-action-sr-only\">{{ getSectionHeaderActionLoadingLabel(action) }}</span>\n }\n </button>\n }\n </div>\n }\n @if (isSectionCollapsible(section)) {\n <button type=\"button\" class=\"section-collapse-btn\" [praxisIconButton]=\"isSectionCollapsed(section) ? 'expand_more' : 'expand_less'\" size=\"compact\"\n (click)=\"toggleSectionCollapse($event, section)\" [attr.aria-expanded]=\"!isSectionCollapsed(section)\"\n [attr.aria-controls]=\"sectionPanelId(section, sectionIndex)\"\n [attr.aria-label]=\"isSectionCollapsed(section) ? 'Expandir se\u00E7\u00E3o' : 'Recolher se\u00E7\u00E3o'\">\n </button>\n }\n </div>\n }\n\n <div class=\"section-body\" [class.collapsed]=\"isSectionCollapsed(section)\"\n [attr.id]=\"sectionPanelId(section, sectionIndex)\"\n [attr.role]=\"getSectionTitle(section) ? 'region' : null\"\n [attr.aria-labelledby]=\"getSectionTitle(section) ? sectionPanelId(section, sectionIndex) + '-title' : null\">\n @if (!isSectionCollapsed(section)) {\n @for (row of section.rows; track (row.id ?? $index); let rowIndex = $index) {\n @if (isRowVisible(row)) {\n <div class=\"row-drop-wrapper\" [attr.data-section-id]=\"section.id\">\n <div #rowEl class=\"form-row grid-12 canvas-element\" data-canvas-type=\"row\" [attr.data-row-index]=\"rowIndex\"\n [attr.data-section-id]=\"section.id\" [attr.data-row-id]=\"row.id\" [style.--pfx-grid-gap.px]=\"getRowGap(row)\"\n [style.--pfx-field-gap.px]=\"getRowRowGap(row)\"\n [style.--pfx-mount-index]=\"rowIndex\"\n [style.marginBottom.px]=\"rowIndex < section.rows.length - 1 ? (getRowRowGap(row) ?? null) : null\"\n [ngClass]=\"getRowClasses(row)\" [ngStyle]=\"getRowStyles(row)\"\n (mouseenter)=\"onElementMouseEnter($event, 'row', row, rowEl)\" (mouseleave)=\"onElementMouseLeave($event)\"\n (click)=\"onElementClick($event, 'row', row, rowEl)\" [class.selected]=\"selectedElement?.domElement === rowEl\"\n [class.hovered]=\"hoveredElement?.domElement === rowEl && selectedElement?.domElement !== rowEl\">\n @for (column of row.columns; track (column.id ?? $index); let colIndex = $index) {\n @if (isColumnVisible(column)) {\n <div class=\"column-drop-wrapper\" [attr.data-section-id]=\"section.id\" [attr.data-row-id]=\"row.id\">\n <div #colEl class=\"form-column canvas-element\" [ngClass]=\"getColumnClasses(column, row)\"\n [style.padding.px]=\"getColumnPadding(column)\" [style.--pfx-field-gap.px]=\"getRowRowGap(row)\"\n [ngStyle]=\"getColumnStyles(column)\" [attr.data-testid]=\"column.testId || null\"\n [attr.data-row-gap]=\"getRowRowGap(row)\" data-canvas-type=\"column\" [attr.data-column-index]=\"colIndex\"\n [attr.data-row-index]=\"rowIndex\" [attr.data-section-id]=\"section.id\" [attr.data-row-id]=\"row.id\"\n [attr.data-column-id]=\"column.id\" (mouseenter)=\"onElementMouseEnter($event, 'column', column, colEl)\"\n (mouseleave)=\"onElementMouseLeave($event)\" (click)=\"onElementClick($event, 'column', column, colEl)\"\n [class.selected]=\"selectedElement?.domElement === colEl\"\n [class.hovered]=\"hoveredElement?.domElement === colEl && selectedElement?.domElement !== colEl\">\n @for (renderItem of getColumnRenderItems(column); track renderItem.id) {\n @if (renderItem.kind === 'fields') {\n <ng-container dynamicFieldLoader [fields]=\"getRenderableFieldsForLoader(renderItem.fields)\" [formGroup]=\"form\"\n [enableExternalControlBinding]=\"true\"\n [readonlyMode]=\"effectiveReadonly\"\n [disabledMode]=\"effectiveDisabledMode\"\n [presentationMode]=\"presentationForLoader\" [visible]=\"visibleGlobal === null ? null : visibleGlobal\"\n [canvasMode]=\"enableCustomization\" (canvasMouseEnter)=\"onFieldMouseEnter($event)\"\n (canvasMouseLeave)=\"onFieldMouseLeave($event)\" (canvasClick)=\"onFieldClick($event)\"\n (canvasFocus)=\"onFieldFocus($event)\"\n (renderError)=\"onFieldRenderError($event)\">\n </ng-container>\n } @else {\n <praxis-rich-content\n class=\"form-layout-rich-content\"\n [ngClass]=\"renderItem.className || null\"\n [ngStyle]=\"renderItem.style || null\"\n [document]=\"renderItem.document\"\n [layout]=\"renderItem.layout\"\n [rootClassName]=\"renderItem.rootClassName || ''\"\n [context]=\"getEditorialRichContentContext()\"\n [hostCapabilities]=\"richContentHostCapabilities\"\n ></praxis-rich-content>\n }\n }\n </div>\n </div>\n } }\n </div>\n </div>\n }\n }\n } @else {\n <div class=\"section-collapsed-placeholder\">\n <mat-icon aria-hidden=\"true\" [praxisIcon]=\"'unfold_more'\"></mat-icon>\n <span>{{ getSectionCollapsedSummary(section) }}</span>\n </div>\n }\n @if (isLastVisibleSection(section) && beforeActionsPlacement === 'insideLastSection' && formBlocksBeforeActions?.nodes?.length) {\n <section class=\"form-editorial-blocks form-editorial-blocks-before-actions\" data-editorial-placement=\"beforeActions\">\n <praxis-rich-content\n [document]=\"formBlocksBeforeActionsDocument\"\n [context]=\"getEditorialRichContentContext()\"\n [hostCapabilities]=\"richContentHostCapabilities\"\n ></praxis-rich-content>\n </section>\n }\n @if (actionPlacement === 'insideLastSection' && isLastVisibleSection(section) && !(effectivePresentation\n || effectiveReadonly)) {\n <praxis-form-actions data-actions-placement=\"insideLastSection\" [actions]=\"effectiveActions\"\n [isSubmitting]=\"submitting\" [formIsValid]=\"effectiveFormIsValid\" [submitError]=\"submitError\" [formId]=\"formId\"\n [actionOverrides]=\"actionRuleProps\" [invalidRequiredFieldLabels]=\"invalidRequiredFieldLabels\"\n [suppressInvalidSubmitHint]=\"entityHydrationPending\"\n [editorialVisualContext]=\"hasEditorialVisualContext()\"\n (action)=\"onFormAction($event)\"></praxis-form-actions>\n }\n </div>\n <!-- Overlay de bloqueio durante submiss\u00E3o -->\n @if (submitting) {\n <div class=\"form-blocking-overlay\" aria-live=\"polite\">\n <mat-progress-spinner\n diameter=\"40\"\n color=\"primary\"\n [attr.aria-label]=\"config.messages?.loading?.submit || 'Salvando formul\u00E1rio'\"\n ></mat-progress-spinner>\n <p>{{ config.messages?.loading?.submit || 'Salvando...' }}</p>\n </div>\n }\n </div>\n\n @if (enableCustomization && selectedElement?.domElement === sectionEl) {\n <div class=\"add-section-container\">\n <div class=\"add-section-line\"></div>\n <button mat-fab color=\"primary\" aria-label=\"Adicionar nova se\u00E7\u00E3o\" (click)=\"addNewSectionAfter(sectionIndex)\"\n matTooltip=\"Adicionar nova se\u00E7\u00E3o aqui\">\n <mat-icon [praxisIcon]=\"'add'\"></mat-icon>\n </button>\n <div class=\"add-section-line\"></div>\n </div>\n }\n }\n </div>\n }\n\n @if (beforeActionsPlacement !== 'insideLastSection' && formBlocksBeforeActions?.nodes?.length) {\n <section class=\"form-editorial-blocks form-editorial-blocks-before-actions\" data-editorial-placement=\"beforeActions\">\n <praxis-rich-content\n [document]=\"formBlocksBeforeActionsDocument\"\n [context]=\"getEditorialRichContentContext()\"\n [hostCapabilities]=\"richContentHostCapabilities\"\n ></praxis-rich-content>\n </section>\n }\n\n @if (actionPlacement === 'afterSections' && !(effectivePresentation || effectiveReadonly)) {\n <praxis-form-actions data-actions-placement=\"afterSections\" [actions]=\"effectiveActions\" [isSubmitting]=\"submitting\"\n [formIsValid]=\"effectiveFormIsValid\" [submitError]=\"submitError\" [formId]=\"formId\"\n [actionOverrides]=\"actionRuleProps\" [invalidRequiredFieldLabels]=\"invalidRequiredFieldLabels\"\n [suppressInvalidSubmitHint]=\"entityHydrationPending\"\n [editorialVisualContext]=\"hasEditorialVisualContext()\"\n (action)=\"onFormAction($event)\"></praxis-form-actions>\n }\n\n @if (formBlocksAfter?.nodes?.length) {\n <section class=\"form-editorial-blocks form-editorial-blocks-after\" data-editorial-placement=\"after\">\n <praxis-rich-content\n [document]=\"formBlocksAfterDocument\"\n [context]=\"getEditorialRichContentContext()\"\n [hostCapabilities]=\"richContentHostCapabilities\"\n ></praxis-rich-content>\n </section>\n }\n </form>\n </div>\n }\n @if (showAiAssistant && !enableCustomization && (mode === 'view' || mode === 'presentation' || mode === 'dossier') && !shouldShowContextEmptyState()) {\n <div class=\"ai-floating-assistant\">\n <button type=\"button\" praxisIconButton=\"auto_awesome\" size=\"compact\" (click)=\"openAiAssistant()\" [disabled]=\"isLoading || entityHydrationPending || entityReadFailed\"\n [attr.data-testid]=\"aiAssistantTriggerTestId('view-floating')\"\n aria-label=\"Abrir copiloto semantico Praxis do formulario\"\n matTooltip=\"Pedir ajuda sobre este formul\u00E1rio\">\n </button>\n </div>\n }\n @if (showAiAssistant && aiAssistantOpen && aiAssistantViewState) {\n <praxis-ai-assistant-shell\n [labels]=\"aiAssistantLabels\"\n [mode]=\"aiAssistantViewState.mode\"\n [state]=\"aiAssistantViewState.state\"\n [contextItems]=\"aiAssistantViewState.contextItems\"\n [attachments]=\"aiAssistantViewState.attachments\"\n [messages]=\"aiAssistantViewState.messages\"\n [quickReplies]=\"aiAssistantViewState.quickReplies\"\n [prompt]=\"aiAssistantPrompt\"\n [statusText]=\"aiAssistantViewState.statusText\"\n [errorText]=\"aiAssistantViewState.errorText\"\n [busy]=\"aiAssistantViewState.state === 'processing' || aiAssistantViewState.state === 'applying'\"\n [canApply]=\"aiAssistantViewState.canApply\"\n [layout]=\"aiAssistantLayout\"\n testIdPrefix=\"dynamic-form-ai-assistant\"\n panelTestId=\"dynamic-form-ai-assistant-panel\"\n submitTestId=\"dynamic-form-ai-assistant-submit\"\n applyTestId=\"dynamic-form-ai-assistant-apply\"\n (promptChange)=\"onAiAssistantPromptChange($event)\"\n (submitPrompt)=\"onAiAssistantSubmit($event)\"\n (apply)=\"onAiAssistantApply()\"\n (retryTurn)=\"onAiAssistantRetry()\"\n (cancelTurn)=\"onAiAssistantCancel()\"\n (quickReply)=\"onAiAssistantQuickReply($event)\"\n (editMessage)=\"onAiAssistantEditMessage($event)\"\n (resendMessage)=\"onAiAssistantResendMessage($event)\"\n (layoutChange)=\"onAiAssistantLayoutChange($event)\"\n (close)=\"closeAiAssistant()\"\n ></praxis-ai-assistant-shell>\n }\n }\n", styles: ["@charset \"UTF-8\";.span-xs-1{grid-column:span 1}.span-xs-2{grid-column:span 2}.span-xs-3{grid-column:span 3}.span-xs-4{grid-column:span 4}.span-xs-5{grid-column:span 5}.span-xs-6{grid-column:span 6}.span-xs-7{grid-column:span 7}.span-xs-8{grid-column:span 8}.span-xs-9{grid-column:span 9}.span-xs-10{grid-column:span 10}.span-xs-11{grid-column:span 11}.span-xs-12{grid-column:span 12}.offset-xs-0{margin-left:0%}.offset-xs-1{margin-left:calc(1 / 12 * 100%)}.offset-xs-2{margin-left:calc(2 / 12 * 100%)}.offset-xs-3{margin-left:25%}.offset-xs-4{margin-left:calc(4 / 12 * 100%)}.offset-xs-5{margin-left:calc(5 / 12 * 100%)}.offset-xs-6{margin-left:50%}.offset-xs-7{margin-left:calc(7 / 12 * 100%)}.offset-xs-8{margin-left:calc(8 / 12 * 100%)}.offset-xs-9{margin-left:75%}.offset-xs-10{margin-left:calc(10 / 12 * 100%)}.offset-xs-11{margin-left:calc(11 / 12 * 100%)}.order-xs--12{order:-12}.order-xs--11{order:-11}.order-xs--10{order:-10}.order-xs--9{order:-9}.order-xs--8{order:-8}.order-xs--7{order:-7}.order-xs--6{order:-6}.order-xs--5{order:-5}.order-xs--4{order:-4}.order-xs--3{order:-3}.order-xs--2{order:-2}.order-xs--1{order:-1}.order-xs-0{order:0}.order-xs-1{order:1}.order-xs-2{order:2}.order-xs-3{order:3}.order-xs-4{order:4}.order-xs-5{order:5}.order-xs-6{order:6}.order-xs-7{order:7}.order-xs-8{order:8}.order-xs-9{order:9}.order-xs-10{order:10}.order-xs-11{order:11}.order-xs-12{order:12}.hidden-xs{display:none}@container praxis-form-row (min-width: 600px){.span-sm-1{grid-column:span 1}.span-sm-2{grid-column:span 2}.span-sm-3{grid-column:span 3}.span-sm-4{grid-column:span 4}.span-sm-5{grid-column:span 5}.span-sm-6{grid-column:span 6}.span-sm-7{grid-column:span 7}.span-sm-8{grid-column:span 8}.span-sm-9{grid-column:span 9}.span-sm-10{grid-column:span 10}.span-sm-11{grid-column:span 11}.span-sm-12{grid-column:span 12}.offset-sm-0{margin-left:0%}.offset-sm-1{margin-left:calc(1 / 12 * 100%)}.offset-sm-2{margin-left:calc(2 / 12 * 100%)}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:calc(4 / 12 * 100%)}.offset-sm-5{margin-left:calc(5 / 12 * 100%)}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:calc(7 / 12 * 100%)}.offset-sm-8{margin-left:calc(8 / 12 * 100%)}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:calc(10 / 12 * 100%)}.offset-sm-11{margin-left:calc(11 / 12 * 100%)}.order-sm--12{order:-12}.order-sm--11{order:-11}.order-sm--10{order:-10}.order-sm--9{order:-9}.order-sm--8{order:-8}.order-sm--7{order:-7}.order-sm--6{order:-6}.order-sm--5{order:-5}.order-sm--4{order:-4}.order-sm--3{order:-3}.order-sm--2{order:-2}.order-sm--1{order:-1}.order-sm-0{order:0}.order-sm-1{order:1}.order-sm-2{order:2}.order-sm-3{order:3}.order-sm-4{order:4}.order-sm-5{order:5}.order-sm-6{order:6}.order-sm-7{order:7}.order-sm-8{order:8}.order-sm-9{order:9}.order-sm-10{order:10}.order-sm-11{order:11}.order-sm-12{order:12}.hidden-sm{display:none}}@container praxis-form-row (min-width: 900px){.span-md-1{grid-column:span 1}.span-md-2{grid-column:span 2}.span-md-3{grid-column:span 3}.span-md-4{grid-column:span 4}.span-md-5{grid-column:span 5}.span-md-6{grid-column:span 6}.span-md-7{grid-column:span 7}.span-md-8{grid-column:span 8}.span-md-9{grid-column:span 9}.span-md-10{grid-column:span 10}.span-md-11{grid-column:span 11}.span-md-12{grid-column:span 12}.offset-md-0{margin-left:0%}.offset-md-1{margin-left:calc(1 / 12 * 100%)}.offset-md-2{margin-left:calc(2 / 12 * 100%)}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:calc(4 / 12 * 100%)}.offset-md-5{margin-left:calc(5 / 12 * 100%)}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:calc(7 / 12 * 100%)}.offset-md-8{margin-left:calc(8 / 12 * 100%)}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:calc(10 / 12 * 100%)}.offset-md-11{margin-left:calc(11 / 12 * 100%)}.order-md--12{order:-12}.order-md--11{order:-11}.order-md--10{order:-10}.order-md--9{order:-9}.order-md--8{order:-8}.order-md--7{order:-7}.order-md--6{order:-6}.order-md--5{order:-5}.order-md--4{order:-4}.order-md--3{order:-3}.order-md--2{order:-2}.order-md--1{order:-1}.order-md-0{order:0}.order-md-1{order:1}.order-md-2{order:2}.order-md-3{order:3}.order-md-4{order:4}.order-md-5{order:5}.order-md-6{order:6}.order-md-7{order:7}.order-md-8{order:8}.order-md-9{order:9}.order-md-10{order:10}.order-md-11{order:11}.order-md-12{order:12}.hidden-md{display:none}}@container praxis-form-row (min-width: 1200px){.span-lg-1{grid-column:span 1}.span-lg-2{grid-column:span 2}.span-lg-3{grid-column:span 3}.span-lg-4{grid-column:span 4}.span-lg-5{grid-column:span 5}.span-lg-6{grid-column:span 6}.span-lg-7{grid-column:span 7}.span-lg-8{grid-column:span 8}.span-lg-9{grid-column:span 9}.span-lg-10{grid-column:span 10}.span-lg-11{grid-column:span 11}.span-lg-12{grid-column:span 12}.offset-lg-0{margin-left:0%}.offset-lg-1{margin-left:calc(1 / 12 * 100%)}.offset-lg-2{margin-left:calc(2 / 12 * 100%)}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:calc(4 / 12 * 100%)}.offset-lg-5{margin-left:calc(5 / 12 * 100%)}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:calc(7 / 12 * 100%)}.offset-lg-8{margin-left:calc(8 / 12 * 100%)}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:calc(10 / 12 * 100%)}.offset-lg-11{margin-left:calc(11 / 12 * 100%)}.order-lg--12{order:-12}.order-lg--11{order:-11}.order-lg--10{order:-10}.order-lg--9{order:-9}.order-lg--8{order:-8}.order-lg--7{order:-7}.order-lg--6{order:-6}.order-lg--5{order:-5}.order-lg--4{order:-4}.order-lg--3{order:-3}.order-lg--2{order:-2}.order-lg--1{order:-1}.order-lg-0{order:0}.order-lg-1{order:1}.order-lg-2{order:2}.order-lg-3{order:3}.order-lg-4{order:4}.order-lg-5{order:5}.order-lg-6{order:6}.order-lg-7{order:7}.order-lg-8{order:8}.order-lg-9{order:9}.order-lg-10{order:10}.order-lg-11{order:11}.order-lg-12{order:12}.hidden-lg{display:none}}@container praxis-form-row (min-width: 1536px){.span-xl-1{grid-column:span 1}.span-xl-2{grid-column:span 2}.span-xl-3{grid-column:span 3}.span-xl-4{grid-column:span 4}.span-xl-5{grid-column:span 5}.span-xl-6{grid-column:span 6}.span-xl-7{grid-column:span 7}.span-xl-8{grid-column:span 8}.span-xl-9{grid-column:span 9}.span-xl-10{grid-column:span 10}.span-xl-11{grid-column:span 11}.span-xl-12{grid-column:span 12}.offset-xl-0{margin-left:0%}.offset-xl-1{margin-left:calc(1 / 12 * 100%)}.offset-xl-2{margin-left:calc(2 / 12 * 100%)}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:calc(4 / 12 * 100%)}.offset-xl-5{margin-left:calc(5 / 12 * 100%)}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:calc(7 / 12 * 100%)}.offset-xl-8{margin-left:calc(8 / 12 * 100%)}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:calc(10 / 12 * 100%)}.offset-xl-11{margin-left:calc(11 / 12 * 100%)}.order-xl--12{order:-12}.order-xl--11{order:-11}.order-xl--10{order:-10}.order-xl--9{order:-9}.order-xl--8{order:-8}.order-xl--7{order:-7}.order-xl--6{order:-6}.order-xl--5{order:-5}.order-xl--4{order:-4}.order-xl--3{order:-3}.order-xl--2{order:-2}.order-xl--1{order:-1}.order-xl-0{order:0}.order-xl-1{order:1}.order-xl-2{order:2}.order-xl-3{order:3}.order-xl-4{order:4}.order-xl-5{order:5}.order-xl-6{order:6}.order-xl-7{order:7}.order-xl-8{order:8}.order-xl-9{order:9}.order-xl-10{order:10}.order-xl-11{order:11}.order-xl-12{order:12}.hidden-xl{display:none}}.canvas-mode-enabled{--canvas-hit: 14px}.canvas-mode-enabled .canvas-element{position:relative;z-index:0;border-radius:8px;outline:2px solid transparent;outline-offset:2px;transition:outline-color .2s ease,outline-style .2s ease}.canvas-mode-enabled .canvas-element:before{content:\"\";position:absolute;inset:calc(-1 * var(--canvas-hit));pointer-events:none;border-radius:inherit;background:transparent}.canvas-mode-enabled .canvas-element[data-canvas-type=section]{--outline-color: var(--md-sys-color-primary)}.canvas-mode-enabled .canvas-element[data-canvas-type=row]{--outline-color: var(--md-sys-color-secondary)}.canvas-mode-enabled .canvas-element[data-canvas-type=column],.canvas-mode-enabled .canvas-element[data-canvas-type=field]{--outline-color: var(--md-sys-color-tertiary)}.canvas-mode-enabled .canvas-element[data-canvas-type=actions]{--outline-color: var(--md-sys-color-primary)}.canvas-mode-enabled .canvas-element.hovered:not(.selected){outline-color:var(--outline-color, var(--md-sys-color-primary));outline-style:dashed}.canvas-mode-enabled .canvas-element.selected{outline-color:var(--outline-color, var(--md-sys-color-primary));outline-style:solid;box-shadow:0 0 0 2px var(--outline-color, var(--md-sys-color-primary))}.canvas-mode-enabled .canvas-element.hovered{z-index:var(--praxis-layer-authoring-hover, 300)}.canvas-mode-enabled .canvas-element.selected{z-index:var(--praxis-layer-authoring-selected, 320)}.section-drop-wrapper,.row-drop-wrapper,.column-drop-wrapper{display:contents}.add-section-container{display:flex;align-items:center;justify-content:center;padding:.5rem 0;margin:-.5rem 0;position:relative;z-index:var(--praxis-layer-authoring-insert, 280)}.add-section-container .add-section-line{flex-grow:1;height:1px;background:repeating-linear-gradient(90deg,var(--md-sys-color-outline-variant),var(--md-sys-color-outline-variant) 4px,transparent 4px,transparent 8px)}.add-section-container button{margin:0 1rem;transform:scale(.85)}:host{display:block;position:relative;--pfx-editorial-form-radius: var(--pfx-form-section-radius, 8px);--pfx-editorial-form-border: var( --pfx-form-stroke, var(--pdx-color-border-subtle, var(--md-sys-color-outline-variant)) );--pfx-editorial-form-surface: var( --pfx-form-section-surface, var(--pdx-color-surface, var(--md-sys-color-surface-container)) );--pfx-editorial-form-surface-muted: var( --pdx-color-surface-muted, var(--md-sys-color-surface-container-low) );--pfx-form-shell-surface: color-mix( in srgb, var(--pfx-editorial-form-surface) 36%, transparent );--pfx-form-section-divider: color-mix( in srgb, var(--pfx-editorial-form-border) 68%, transparent );--pfx-form-footer-surface: color-mix( in srgb, var(--pfx-editorial-form-surface) 70%, var(--pfx-editorial-form-surface-muted) 30% );--pfx-form-footer-border: color-mix( in srgb, var(--pfx-editorial-form-border) 76%, transparent );--pfx-form-shell-padding: clamp(.9rem, 1.4vw, 1.2rem)}.form-config-controls{position:relative;top:auto;margin:0;display:flex;align-items:center;gap:.35rem;z-index:60;background:color-mix(in srgb,var(--pfx-form-shell-surface) 88%,var(--md-sys-color-surface) 12%);padding:8px var(--pfx-form-shell-padding);border:1px solid var(--pfx-form-footer-border);border-bottom-color:color-mix(in srgb,var(--pfx-form-footer-border) 72%,transparent);border-radius:var(--pfx-editorial-form-radius) var(--pfx-editorial-form-radius) 0 0;-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);box-shadow:none;min-width:0;justify-content:flex-end;pointer-events:none;opacity:.96;transition:opacity .16s ease,border-color .16s ease}.form-config-controls>*{pointer-events:auto}.form-config-controls:hover,.form-config-controls:focus-within{opacity:1;border-color:color-mix(in srgb,var(--md-sys-color-primary) 26%,var(--md-sys-color-outline-variant) 74%)}.form-config-controls .praxis-icon-button{color:var(--md-sys-color-on-surface-variant)}.form-config-controls .praxis-icon-button:hover{color:var(--md-sys-color-primary)}.ai-floating-assistant{position:sticky;right:0;bottom:12px;margin-top:14px;margin-left:auto;width:fit-content;z-index:70;pointer-events:none}.ai-floating-assistant button{pointer-events:auto;display:inline-flex}.ai-floating-assistant .ai-trigger-btn{box-shadow:0 12px 28px #0f172a24}.config-button{color:var(--md-sys-color-primary)}.form-loading{display:flex;flex-direction:column;align-items:stretch;justify-content:center;padding:1.25rem;text-align:left;color:var(--md-sys-color-on-surface);gap:1rem;min-height:220px;border:1px solid color-mix(in srgb,var(--md-sys-color-primary) 14%,var(--md-sys-color-outline-variant) 86%);border-radius:8px;background:linear-gradient(135deg,color-mix(in srgb,var(--md-sys-color-primary) 8%,transparent),transparent 42%),color-mix(in srgb,var(--md-sys-color-surface-container-low) 78%,var(--md-sys-color-surface) 22%);box-shadow:0 12px 28px #0f172a14}.entity-read-region{position:relative;min-width:0}.entity-read-feedback{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:flex-start;gap:1rem;padding:2rem 1rem;box-sizing:border-box;text-align:center;color:var(--md-sys-color-on-surface)}.entity-read-feedback p{margin:0;max-width:40ch}.form-loading-header{display:flex;align-items:center;gap:.85rem}.form-loading-copy{min-width:0}.form-loading p{margin:0}.form-loading-title{font-weight:700;color:var(--md-sys-color-on-surface)}.form-loading-subtitle{margin-top:.2rem;font-size:.875rem;color:var(--md-sys-color-on-surface-variant)}.form-loading-skeleton{display:grid;gap:.7rem}.form-loading-line,.form-loading-field{display:block;overflow:hidden;position:relative;border-radius:6px;background:color-mix(in srgb,var(--md-sys-color-surface-container-high) 74%,var(--md-sys-color-primary) 6%)}.form-loading-line:after,.form-loading-field:after{content:\"\";position:absolute;inset:0;transform:translate(-100%);background:linear-gradient(90deg,transparent,color-mix(in srgb,var(--md-sys-color-primary) 16%,var(--md-sys-color-on-surface) 18%),transparent);animation:form-loading-shimmer 1.4s ease-in-out infinite}.form-loading-line{height:12px}.form-loading-line-title{width:min(42%,240px)}.form-loading-line-short{width:min(64%,360px)}.form-loading-field{height:44px}.form-loading-field-wide{height:72px}@keyframes form-loading-shimmer{to{transform:translate(100%)}}@media(prefers-reduced-motion:reduce){.form-loading-line:after,.form-loading-field:after{animation:none;transform:none;opacity:.28}}.form-error{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:3rem;text-align:center;color:var(--md-sys-color-error);gap:1rem;border:1px solid var(--md-sys-color-error);border-radius:8px;background-color:var(--md-sys-color-error-container);margin:1rem;box-shadow:0 12px 30px #7f1d1d1f}.form-error h3{margin:0;color:var(--md-sys-color-on-error-container)}.form-error p{margin:0;color:var(--md-sys-color-on-error-container);opacity:.8}.form-error button{margin-top:.5rem}.pfx-form-info-banner{margin-bottom:14px;padding:12px 14px;border-radius:16px;border:1px solid color-mix(in srgb,var(--md-sys-color-primary) 18%,var(--md-sys-color-outline-variant) 82%);background:color-mix(in srgb,var(--md-sys-color-primary-container) 24%,var(--md-sys-color-surface) 76%);color:var(--md-sys-color-on-surface);display:flex;align-items:flex-start;justify-content:space-between;gap:14px}.pfx-form-info-banner .text{font-size:.92rem;line-height:1.5;font-weight:600}.pfx-form-info-banner .actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:8px}.praxis-dynamic-form{display:flex;flex-direction:column;max-width:100%;min-width:0;transition:all .3s ease;position:relative;font-family:inherit;font-size:inherit;color:inherit;--pfx-editorial-form-surface: var( --pfx-form-section-surface, var(--md-sys-color-surface-container) );--pfx-editorial-form-surface-muted: var( --pdx-color-surface-muted, var(--md-sys-color-surface-container-low) );--pfx-editorial-form-border: var( --pfx-form-stroke, var(--pdx-color-border-subtle, var(--md-sys-color-outline-variant)) );--pfx-editorial-form-text: var( --pdx-color-text-primary, var(--md-sys-color-on-surface) );--pfx-editorial-form-text-muted: var( --pdx-color-text-secondary, var(--md-sys-color-on-surface-variant) );--pfx-editorial-form-field-surface: color-mix( in srgb, var(--pfx-editorial-form-surface-muted) 76%, var(--pfx-editorial-form-surface) 24% );--pfx-editorial-form-field-outline: color-mix( in srgb, var(--pfx-editorial-form-border) 88%, transparent );--pfx-editorial-form-accent: var( --pdx-color-primary, var(--md-sys-color-primary) );--pfx-editorial-form-accent-text: var(--md-sys-color-on-primary);--pfx-editorial-form-radius: var(--pfx-form-section-radius, 8px);--pfx-editorial-form-field-radius: var(--pfx-form-field-radius, 4px);--pfx-editorial-form-border-width: 1px;--pfx-editorial-form-field-border-width: 1px;--pfx-editorial-form-shadow: none;--pfx-form-shell-surface: color-mix( in srgb, var(--pfx-editorial-form-surface) 36%, transparent );--pfx-form-section-surface-flat: color-mix( in srgb, var(--pfx-editorial-form-surface) 78%, var(--pfx-editorial-form-surface-muted) 22% );--pfx-form-section-divider: color-mix( in srgb, var(--pfx-editorial-form-border) 68%, transparent );--pfx-form-label-strong: color-mix( in srgb, var(--pfx-editorial-form-text) 96%, white 4% );--pfx-form-label-muted: color-mix( in srgb, var(--pfx-editorial-form-text-muted) 92%, var(--pfx-editorial-form-text) 8% );--pfx-form-field-surface-rest: color-mix( in srgb, var(--pfx-editorial-form-field-surface) 82%, var(--pfx-editorial-form-surface) 18% );--pfx-form-field-surface-focus: color-mix( in srgb, var(--pfx-editorial-form-accent) 4%, var(--pfx-form-field-surface-rest) 96% );--pfx-form-field-min-height: 48px;--pfx-form-section-padding: clamp(1.1rem, 1.8vw, 1.5rem);--pfx-form-section-gap: 22px;--pdx-presentation-label-size: var(--pfx-pres-compact-label-size, .78rem);--pdx-presentation-value-size: var(--pfx-pres-compact-value-size, 1rem);--pdx-presentation-icon-size: var(--pfx-pres-icon-size, 18px);--pdx-presentation-row-gap: var(--pfx-pres-row-gap, .5rem);--pdx-presentation-column-gap: var(--pfx-pres-column-gap, .5rem);--pdx-presentation-section-gap: var(--pfx-pres-section-gap, .75rem);--pdx-presentation-label-width: var(--pfx-pres-label-width, 220px);--pdx-presentation-flag-height: var(--pfx-pres-boolean-min-height, 22px);--pdx-presentation-flag-radius: var(--pfx-pres-boolean-radius, 999px);--pdx-presentation-flag-padding: var(--pfx-pres-boolean-padding, 0 8px);--pdx-presentation-flag-active-color: var( --pfx-pres-boolean-active-color, var(--md-sys-color-primary) );--pdx-presentation-flag-active-bg: var( --pfx-pres-boolean-active-bg, color-mix(in srgb, var(--md-sys-color-primary) 14%, transparent) );--pdx-presentation-flag-inactive-color: var( --pfx-pres-boolean-inactive-color, var(--md-sys-color-on-surface-variant) );--pdx-presentation-flag-inactive-bg: var( --pfx-pres-boolean-inactive-bg, color-mix(in srgb, var(--md-sys-color-outline-variant) 34%, transparent) );--pfx-form-footer-surface: color-mix( in srgb, var(--pfx-editorial-form-surface) 70%, var(--pfx-editorial-form-surface-muted) 30% );--pfx-form-footer-border: color-mix( in srgb, var(--pfx-editorial-form-border) 76%, transparent )}.praxis-dynamic-form.canvas-mode-enabled{border:1px solid var(--pfx-form-footer-border);border-radius:var(--pfx-editorial-form-radius);background:linear-gradient(180deg,color-mix(in srgb,var(--pfx-form-shell-surface) 86%,transparent),color-mix(in srgb,var(--pfx-editorial-form-surface-muted) 42%,transparent));overflow:visible}.form-config-controls+.praxis-dynamic-form.canvas-mode-enabled{border-top:0;border-top-left-radius:0;border-top-right-radius:0}.praxis-dynamic-form.canvas-mode-enabled>.section-drop-wrapper,.praxis-dynamic-form.canvas-mode-enabled>.form-editorial-blocks{margin-inline:var(--pfx-form-shell-padding)}.praxis-dynamic-form.canvas-mode-enabled>.section-drop-wrapper:first-of-type,.praxis-dynamic-form.canvas-mode-enabled>.form-editorial-blocks:first-child{margin-top:var(--pfx-form-shell-padding)}.praxis-dynamic-form.canvas-mode-enabled>praxis-form-actions[data-actions-placement=afterSections]{display:block;margin-top:var(--pfx-form-shell-padding)}.praxis-dynamic-form.editorial-visual-context{--_pfx-editorial-host-text: var( --editorial-text-primary, var(--foreground, var(--mat-sys-on-surface, #1d1b20)) );--_pfx-editorial-host-text-muted: var( --editorial-text-secondary, var( --muted-foreground, color-mix(in srgb, var(--_pfx-editorial-host-text) 64%, transparent) ) );--_pfx-editorial-host-surface: var( --editorial-surface-primary, var(--card, var(--mat-sys-surface-container, #ffffff)) );--_pfx-editorial-host-surface-muted: var( --editorial-surface-secondary, var(--surface-dim, var(--muted, var(--mat-sys-surface-container-low, #f7f2fa))) );--_pfx-editorial-host-border: var( --editorial-border-color, var(--border, var(--mat-sys-outline-variant, #cac4d0)) );--_pfx-editorial-host-accent: var( --editorial-cta-primary, var(--editorial-accent, var(--primary, var(--mat-sys-primary, #6750a4))) );--_pfx-editorial-host-accent-text: var( --editorial-cta-primary-text, var( --editorial-accent-contrast, var(--primary-foreground, var(--mat-sys-on-primary, #ffffff)) ) );--_pfx-editorial-host-accent-container: var( --primary-container, color-mix(in srgb, var(--_pfx-editorial-host-accent) 16%, var(--_pfx-editorial-host-surface) 84%) );--_pfx-editorial-host-accent-container-text: var( --primary-container-fg, var(--_pfx-editorial-host-accent) );font-family:var(--editorial-body-font-family, inherit);font-size:var(--editorial-body-size, 1rem);color:var(--_pfx-editorial-host-text);--pfx-editorial-form-surface: var( --editorial-surface-primary, var(--pfx-form-section-surface, var(--_pfx-editorial-host-surface)) );--pfx-editorial-form-surface-muted: var( --editorial-surface-secondary, var(--_pfx-editorial-host-surface-muted) );--pfx-editorial-form-border: var( --editorial-border-color, var(--pfx-form-stroke, var(--_pfx-editorial-host-border)) );--pfx-editorial-form-text: var( --editorial-text-primary, var(--_pfx-editorial-host-text) );--pfx-editorial-form-text-muted: var( --editorial-text-secondary, color-mix( in srgb, var(--_pfx-editorial-host-text-muted) 86%, var(--_pfx-editorial-host-text) 14% ) );--pfx-editorial-form-accent: var( --editorial-cta-primary, var(--editorial-accent, var(--_pfx-editorial-host-accent)) );--pfx-editorial-form-accent-text: var( --editorial-cta-primary-text, var(--editorial-accent-contrast, var(--_pfx-editorial-host-accent-text)) );--pfx-editorial-form-accent-container: var(--_pfx-editorial-host-accent-container);--pfx-editorial-form-accent-container-text: var(--_pfx-editorial-host-accent-container-text);--pfx-editorial-form-radius: var(--editorial-card-radius, 18px);--pfx-editorial-form-field-radius: var( --editorial-field-radius, var(--editorial-card-radius, 14px) );--pfx-editorial-form-border-width: var(--editorial-card-border-width, 1px);--pfx-editorial-form-field-border-width: var(--editorial-field-border-width, 1px);--pfx-editorial-form-shadow: var(--editorial-card-shadow, none);--md-sys-color-surface: var( --pfx-editorial-form-surface, var(--md-sys-color-surface) );--md-sys-color-surface-container: var( --pfx-editorial-form-surface, var(--md-sys-color-surface-container) );--md-sys-color-surface-container-low: var( --pfx-editorial-form-surface-muted, var(--md-sys-color-surface-container-low) );--md-sys-color-surface-variant: var( --pfx-editorial-form-field-surface, var(--md-sys-color-surface-variant) );--md-sys-color-outline: var( --pfx-editorial-form-field-outline, var(--md-sys-color-outline) );--md-sys-color-outline-variant: var( --pfx-editorial-form-border, var(--md-sys-color-outline-variant) );--md-sys-color-on-surface: var( --editorial-text-primary, inherit );--md-sys-color-on-surface-variant: var( --editorial-text-secondary, inherit );--md-sys-color-primary: var( --pfx-editorial-form-accent, var(--md-sys-color-primary) );--md-sys-color-primary-container: var( --pfx-editorial-form-accent-container, var(--md-sys-color-primary-container) );--md-sys-color-on-primary-container: var( --pfx-editorial-form-accent-container-text, var(--md-sys-color-on-primary-container) );--md-sys-color-on-primary: var( --pfx-editorial-form-accent-text, var(--md-sys-color-on-primary) );--md-sys-color-on-surface-rgb: var( --editorial-text-primary-rgb, inherit );--mat-sys-on-surface: var( --editorial-text-primary, inherit );--mat-sys-on-surface-variant: var( --editorial-text-secondary, inherit );--mat-sys-on-surface-rgb: var( --editorial-text-primary-rgb, inherit );color:inherit;color-scheme:light}.praxis-dynamic-form.presentation-mode .form-row,.praxis-dynamic-form.readonly-mode .form-row{gap:var(--pdx-presentation-column-gap);margin-bottom:var(--pdx-presentation-row-gap)}.praxis-dynamic-form.presentation-mode{--pfx-pres-on-surface: var( --pdx-color-text-primary, var(--pfx-editorial-form-text, var(--pfx-form-label-strong, currentColor)) );--pfx-pres-on-surface-variant: var( --pdx-color-text-secondary, var( --pfx-editorial-form-text-muted, var( --pfx-form-label-muted, color-mix(in srgb, var(--pfx-pres-on-surface) 78%, transparent) ) ) )}.praxis-dynamic-form.presentation-mode .form-section,.praxis-dynamic-form.readonly-mode .form-section{padding:var(--pdx-presentation-section-gap) .875rem}.praxis-dynamic-form.pres-compact .form-row{gap:var(--pdx-presentation-column-gap, .35rem);margin-bottom:var(--pdx-presentation-row-gap, .35rem)}.praxis-dynamic-form.pres-compact .form-section{padding:var(--pdx-presentation-section-gap, .5rem) .75rem}.praxis-dynamic-form.pres-label-left .praxis-presentation{display:grid;grid-template-columns:minmax(0,var(--pfx-presentation-label-w, var(--pdx-presentation-label-width))) minmax(0,1fr);align-items:baseline;column-gap:var(--pdx-presentation-column-gap, 10px)}.praxis-dynamic-form.pres-label-left .praxis-presentation__label{text-align:right;margin-bottom:0}@media(max-width:480px){.praxis-dynamic-form.pres-label-left .praxis-presentation{grid-template-columns:minmax(0,1fr);row-gap:4px}.praxis-dynamic-form.pres-label-left .praxis-presentation__label{text-align:start}}.praxis-dynamic-form.praxis-dynamic-form--corporate-dossier .form-section:not(.section-appearance-plain),.praxis-dynamic-form .form-section.form-section--corporate-dossier:not(.section-appearance-plain),.praxis-dynamic-form .form-section[data-presentation-preset=corporate-dossier]:not(.section-appearance-plain){background:var(--md-sys-color-surface-container-low, #f8f9fa);border:1px solid var(--md-sys-color-outline-variant, #e0e2ec);border-radius:16px;padding:16px 20px;box-shadow:0 1px 3px #0000000a}.praxis-dynamic-form.praxis-dynamic-form--corporate-dossier .form-section .section-heading,.praxis-dynamic-form .form-section.form-section--corporate-dossier .section-heading,.praxis-dynamic-form .form-section[data-presentation-preset=corporate-dossier] .section-heading{margin-bottom:12px;padding-bottom:8px;border-bottom:1px solid var(--md-sys-color-outline-variant, #e0e2ec)}.praxis-dynamic-form.praxis-dynamic-form--corporate-dossier .form-section .section-title,.praxis-dynamic-form .form-section.form-section--corporate-dossier .section-title,.praxis-dynamic-form .form-section[data-presentation-preset=corporate-dossier] .section-title{font-size:.88rem;font-weight:700;letter-spacing:.05em;text-transform:uppercase;color:var(--md-sys-color-primary, #005ac1)}:host ::ng-deep .praxis-dynamic-form--corporate-dossier .praxis-presentation,:host ::ng-deep .form-section--corporate-dossier .praxis-presentation,:host ::ng-deep [data-presentation-preset=corporate-dossier] .praxis-presentation{padding:8px 0;border-bottom:1px dashed var(--md-sys-color-outline-variant, rgba(0, 0, 0, .08))}:host ::ng-deep .praxis-dynamic-form--corporate-dossier .form-row:last-child .praxis-presentation,:host ::ng-deep .praxis-dynamic-form--corporate-dossier .praxis-presentation:last-child,:host ::ng-deep .form-section--corporate-dossier .form-row:last-child .praxis-presentation,:host ::ng-deep .form-section--corporate-dossier .praxis-presentation:last-child,:host ::ng-deep [data-presentation-preset=corporate-dossier] .form-row:last-child .praxis-presentation,:host ::ng-deep [data-presentation-preset=corporate-dossier] .praxis-presentation:last-child{border-bottom:none}:host ::ng-deep .praxis-dynamic-form--corporate-dossier .praxis-presentation__label,:host ::ng-deep .form-section--corporate-dossier .praxis-presentation__label,:host ::ng-deep [data-presentation-preset=corporate-dossier] .praxis-presentation__label{font-size:.74rem;font-weight:600;text-transform:uppercase;letter-spacing:.05em;color:var(--md-sys-color-on-surface-variant, #44474f);margin-bottom:3px}:host ::ng-deep .praxis-dynamic-form--corporate-dossier .praxis-presentation__value,:host ::ng-deep .form-section--corporate-dossier .praxis-presentation__value,:host ::ng-deep [data-presentation-preset=corporate-dossier] .praxis-presentation__value{font-size:.95rem;font-weight:600;color:var(--md-sys-color-on-surface, #1a1c1e);line-height:1.4}.praxis-dynamic-form.praxis-dynamic-form--editorial-card .form-section:not(.section-appearance-plain),.praxis-dynamic-form .form-section.form-section--editorial-card:not(.section-appearance-plain),.praxis-dynamic-form .form-section[data-presentation-preset=editorial-card]:not(.section-appearance-plain){background:var(--pfx-editorial-form-surface, var(--md-sys-color-surface-container-low, var(--mat-sys-surface-container-low)));border:1px solid var(--pfx-editorial-form-border, var(--md-sys-color-outline-variant, #e0e2ec));border-radius:20px;padding:24px;box-shadow:0 2px 8px #0000000d}.praxis-dynamic-form.praxis-dynamic-form--editorial-card .form-section .section-heading,.praxis-dynamic-form .form-section.form-section--editorial-card .section-heading,.praxis-dynamic-form .form-section[data-presentation-preset=editorial-card] .section-heading{margin-bottom:16px;padding-bottom:10px;border-bottom:1px solid color-mix(in srgb,var(--md-sys-color-outline-variant, #e0e2ec) 40%,transparent)}.praxis-dynamic-form.praxis-dynamic-form--editorial-card .form-section .section-title,.praxis-dynamic-form .form-section.form-section--editorial-card .section-title,.praxis-dynamic-form .form-section[data-presentation-preset=editorial-card] .section-title{font-size:1.15rem;font-weight:700;color:var(--pfx-editorial-form-accent, var(--md-sys-color-primary, #005ac1))}:host ::ng-deep .praxis-dynamic-form--editorial-card .praxis-presentation,:host ::ng-deep .form-section--editorial-card .praxis-presentation,:host ::ng-deep [data-presentation-preset=editorial-card] .praxis-presentation{padding:10px 0;border-bottom:1px solid color-mix(in srgb,var(--md-sys-color-outline-variant, #e0e2ec) 35%,transparent)}:host ::ng-deep .praxis-dynamic-form--editorial-card .form-row:last-child .praxis-presentation,:host ::ng-deep .praxis-dynamic-form--editorial-card .praxis-presentation:last-child,:host ::ng-deep .form-section--editorial-card .form-row:last-child .praxis-presentation,:host ::ng-deep .form-section--editorial-card .praxis-presentation:last-child,:host ::ng-deep [data-presentation-preset=editorial-card] .form-row:last-child .praxis-presentation,:host ::ng-deep [data-presentation-preset=editorial-card] .praxis-presentation:last-child{border-bottom:none}:host ::ng-deep .praxis-dynamic-form--editorial-card .praxis-presentation__label,:host ::ng-deep .form-section--editorial-card .praxis-presentation__label,:host ::ng-deep [data-presentation-preset=editorial-card] .praxis-presentation__label{font-size:.8rem;font-weight:500;color:var(--pfx-editorial-form-text-muted, var(--md-sys-color-on-surface-variant, #44474f));margin-bottom:4px}:host ::ng-deep .praxis-dynamic-form--editorial-card .praxis-presentation__value,:host ::ng-deep .form-section--editorial-card .praxis-presentation__value,:host ::ng-deep [data-presentation-preset=editorial-card] .praxis-presentation__value{font-size:1rem;font-weight:600;color:var(--pfx-editorial-form-text, var(--md-sys-color-on-surface, #1a1c1e));line-height:1.5}.praxis-dynamic-form.praxis-dynamic-form--compact-presentation .form-section:not(.section-appearance-plain),.praxis-dynamic-form .form-section.form-section--compact-presentation:not(.section-appearance-plain),.praxis-dynamic-form .form-section[data-presentation-preset=compact-presentation]:not(.section-appearance-plain){background:transparent;border:1px solid color-mix(in srgb,var(--md-sys-color-outline-variant, #e0e2ec) 50%,transparent);border-radius:8px;padding:10px 14px;box-shadow:none}.praxis-dynamic-form.praxis-dynamic-form--compact-presentation .form-section .section-heading,.praxis-dynamic-form .form-section.form-section--compact-presentation .section-heading,.praxis-dynamic-form .form-section[data-presentation-preset=compact-presentation] .section-heading{margin-bottom:8px;padding-bottom:4px;border-bottom:1px solid color-mix(in srgb,var(--md-sys-color-outline-variant, #e0e2ec) 25%,transparent)}.praxis-dynamic-form.praxis-dynamic-form--compact-presentation .form-section .section-title,.praxis-dynamic-form .form-section.form-section--compact-presentation .section-title,.praxis-dynamic-form .form-section[data-presentation-preset=compact-presentation] .section-title{font-size:.82rem;font-weight:700;letter-spacing:.03em;text-transform:uppercase;color:var(--md-sys-color-on-surface-variant, #44474f)}:host ::ng-deep .praxis-dynamic-form--compact-presentation .praxis-presentation,:host ::ng-deep .form-section--compact-presentation .praxis-presentation,:host ::ng-deep [data-presentation-preset=compact-presentation] .praxis-presentation{padding:4px 0;border-bottom:none}:host ::ng-deep .praxis-dynamic-form--compact-presentation .praxis-presentation__label,:host ::ng-deep .form-section--compact-presentation .praxis-presentation__label,:host ::ng-deep [data-presentation-preset=compact-presentation] .praxis-presentation__label{font-size:.72rem;font-weight:600;color:var(--md-sys-color-on-surface-variant, #44474f);margin-bottom:2px}:host ::ng-deep .praxis-dynamic-form--compact-presentation .praxis-presentation__value,:host ::ng-deep .form-section--compact-presentation .praxis-presentation__value,:host ::ng-deep [data-presentation-preset=compact-presentation] .praxis-presentation__value{font-size:.88rem;font-weight:500;color:var(--md-sys-color-on-surface, #1a1c1e);line-height:1.35}:host-context(.mdc-theme-dark) .praxis-dynamic-form.praxis-dynamic-form--corporate-dossier .form-section:not(.section-appearance-plain),:host-context(.mdc-theme-dark) .praxis-dynamic-form .form-section.form-section--corporate-dossier:not(.section-appearance-plain),:host-context(.mdc-theme-dark) .praxis-dynamic-form .form-section[data-presentation-preset=corporate-dossier]:not(.section-appearance-plain),:host-context(.theme-dark) .praxis-dynamic-form.praxis-dynamic-form--corporate-dossier .form-section:not(.section-appearance-plain),:host-context(.theme-dark) .praxis-dynamic-form .form-section.form-section--corporate-dossier:not(.section-appearance-plain),:host-context(.theme-dark) .praxis-dynamic-form .form-section[data-presentation-preset=corporate-dossier]:not(.section-appearance-plain){background:var(--md-sys-color-surface-container-low);border-color:color-mix(in srgb,var(--md-sys-color-outline-variant) 70%,transparent);box-shadow:0 2px 8px #0000004d}:host-context(.mdc-theme-dark) .praxis-dynamic-form.praxis-dynamic-form--editorial-card .form-section:not(.section-appearance-plain),:host-context(.mdc-theme-dark) .praxis-dynamic-form .form-section.form-section--editorial-card:not(.section-appearance-plain),:host-context(.mdc-theme-dark) .praxis-dynamic-form .form-section[data-presentation-preset=editorial-card]:not(.section-appearance-plain),:host-context(.theme-dark) .praxis-dynamic-form.praxis-dynamic-form--editorial-card .form-section:not(.section-appearance-plain),:host-context(.theme-dark) .praxis-dynamic-form .form-section.form-section--editorial-card:not(.section-appearance-plain),:host-context(.theme-dark) .praxis-dynamic-form .form-section[data-presentation-preset=editorial-card]:not(.section-appearance-plain){background:var(--pfx-editorial-form-surface, var(--md-sys-color-surface-container-low));border-color:color-mix(in srgb,var(--md-sys-color-outline-variant) 70%,transparent);box-shadow:0 4px 16px #0006}.form-section{border:1px solid var(--pfx-form-section-divider);border-radius:var(--pfx-editorial-form-radius);padding:var(--pfx-form-section-padding);max-width:100%;min-width:0;background:var(--pfx-form-section-surface-flat);box-shadow:none;transition:all .2s ease;position:relative}.praxis-dynamic-form.editorial-visual-context .form-section:not(.section-appearance-plain){border:var(--pfx-editorial-form-border-width) solid var(--pfx-editorial-form-border)!important;background:var(--pfx-editorial-form-surface)!important;color:var(--pfx-editorial-form-text);box-shadow:var(--editorial-card-shadow, none)}.praxis-dynamic-form.editorial-visual-context .form-section.section-appearance-step{background-color:var(--pfx-editorial-form-surface)!important;background-image:linear-gradient(180deg,color-mix(in srgb,var(--editorial-accent, var(--md-sys-color-primary)) 6%,transparent) 0%,transparent 132px)!important;background-repeat:no-repeat!important}.section-drop-wrapper>.form-section{margin-bottom:var(--pfx-section-gap, 20px)}.section-drop-wrapper:last-of-type>.form-section{margin-bottom:0}.praxis-dynamic-form>praxis-form-actions[data-actions-placement=afterSections]{margin-top:var(--pfx-actions-gap-top, var(--pfx-section-gap, 20px))}.section-title{margin:0 0 var(--pfx-section-title-mb, 12px) 0;font-family:var(--editorial-title-font-family, var(--editorial-body-font-family, inherit));font-size:var(--editorial-step-title-size, 1.12rem);font-weight:700;color:var(--pfx-form-label-strong)}.section-heading{position:relative;display:flex;align-items:flex-start;gap:12px;margin-bottom:18px;padding-bottom:var(--pfx-form-section-heading-divider-gap, 18px)}.section-heading:after{content:\"\";position:absolute;right:0;bottom:0;left:0;height:2px;pointer-events:none;background:linear-gradient(90deg,transparent 0%,color-mix(in srgb,var(--pfx-form-section-divider) 18%,transparent) 8%,var(--pfx-form-section-divider) 46%,var(--pfx-form-section-divider) 54%,color-mix(in srgb,var(--pfx-form-section-divider) 18%,transparent) 92%,transparent 100%);border-radius:999px;-webkit-mask-image:linear-gradient(90deg,transparent 0%,black 18%,black 82%,transparent 100%);mask-image:linear-gradient(90deg,transparent 0%,black 18%,black 82%,transparent 100%)}.section-heading.title-only{padding-bottom:var(--pfx-form-section-heading-title-only-divider-gap, 10px)}:host(.pfx-form-section-divider-inline-title) .section-heading.title-only{padding-bottom:var(--pfx-form-section-heading-title-only-inline-divider-gap, 0)}:host(.pfx-form-section-divider-inline-title) .section-heading.title-only:after{display:none}.section-heading.align-center{flex-direction:column;align-items:center;text-align:center}.section-heading.align-center .section-heading-text{display:grid;justify-items:center}.section-step-label{display:inline-flex;align-items:center;min-height:24px;padding:0 10px;margin:0 0 8px;border-radius:999px;background:color-mix(in srgb,var(--pfx-editorial-form-accent) 10%,transparent);color:color-mix(in srgb,var(--pfx-editorial-form-accent) 84%,var(--pfx-form-label-strong) 16%);font-size:.72rem;font-weight:800;font-family:var(--editorial-title-font-family, var(--editorial-body-font-family, inherit));letter-spacing:.08em;text-transform:uppercase}.section-heading-text{flex:1 1 auto;min-width:0}.section-heading-actions{display:inline-flex;align-items:center;align-self:flex-start;flex-wrap:wrap;gap:4px;margin-left:auto}.section-heading-actions.align-center{align-self:center;margin-left:0}.section-heading-action-btn{color:var(--pfx-form-label-muted)}.section-heading-action-btn.tone-primary{color:var(--md-sys-color-primary)}.section-heading-action-btn.tone-accent,.section-heading-action-btn.tone-secondary{color:var(--md-sys-color-tertiary)}.section-heading-action-btn.tone-warn,.section-heading-action-btn.tone-danger,.section-heading-action-btn.tone-error{color:var(--md-sys-color-error)}.section-heading-action-btn .mat-mdc-progress-spinner,.section-heading-action-btn mat-progress-spinner{--mdc-circular-progress-active-indicator-color: currentColor}.section-heading-action-btn.loading{opacity:.72;pointer-events:none}.section-heading-action-sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.section-collapse-btn{margin-left:4px;color:var(--pfx-form-label-muted)}.section-title.title-large{font:var(--mdc-typography-title-large, 500 22px/28px system-ui)}.section-title.title-medium{font:var(--mdc-typography-title-medium, 500 16px/24px system-ui)}.section-title.title-small{font:var(--mdc-typography-title-small, 500 14px/20px system-ui)}.section-title.headline-small{font:var(--mdc-typography-headline-small, 600 24px/32px system-ui)}.section-title.title-large,.section-title.title-medium,.section-title.title-small,.section-title.headline-small{font-family:var(--editorial-title-font-family, var(--editorial-body-font-family, inherit));font-weight:var(--editorial-title-weight, 600)}.section-description{margin:0;font-family:var(--editorial-body-font-family, inherit);font-size:.93rem;color:var(--pfx-form-label-muted);line-height:1.6}.section-description.body-large{font:var(--mdc-typography-body-large, 400 16px/24px system-ui)}.section-description.body-medium{font:var(--mdc-typography-body-medium, 400 14px/20px system-ui)}.section-description.body-small{font:var(--mdc-typography-body-small, 400 12px/16px system-ui)}.section-description.body-large,.section-description.body-medium,.section-description.body-small{font-family:var(--editorial-body-font-family, inherit);font-weight:var(--editorial-body-weight, 400)}.section-title.align-center,.section-description.align-center,.section-step-label.align-center{text-align:center}.praxis-dynamic-form .form-section.section-appearance-plain{border-color:transparent;border-width:0;border-radius:0;padding:0;background:transparent;box-shadow:none}.praxis-dynamic-form .form-section.section-appearance-plain.section-has-divider{padding-bottom:16px;border-bottom:1px solid var(--pfx-form-section-divider, var(--md-sys-color-outline-variant, #e0e2ec))}.praxis-dynamic-form .section-drop-wrapper:last-of-type>.form-section.section-appearance-plain.section-has-divider,.praxis-dynamic-form>.form-section.section-appearance-plain.section-has-divider:last-of-type{border-bottom:none;padding-bottom:0}.form-section.section-appearance-plain .section-heading{margin-bottom:14px}.form-section.section-appearance-step{border-radius:var(--pfx-editorial-form-radius);padding:var(--pfx-form-section-padding);background:var(--pfx-form-section-surface-flat);border-color:var(--pfx-form-section-divider);box-shadow:none}.praxis-dynamic-form.editorial-visual-context .form-section.section-appearance-step{border-radius:var(--editorial-card-radius, 20px);box-shadow:none}.form-section.section-appearance-step .section-heading{margin-bottom:22px;padding-bottom:var(--pfx-form-section-heading-divider-gap, 16px)}.form-section.section-appearance-step .section-heading.title-only{padding-bottom:var(--pfx-form-section-heading-title-only-divider-gap, 16px)}:host(.pfx-form-section-divider-inline-title) .form-section.section-appearance-step .section-heading.title-only{padding-bottom:var(--pfx-form-section-heading-title-only-inline-divider-gap, 0)}.form-section.section-appearance-step .section-title{font:var(--mdc-typography-title-large, 700 22px/28px system-ui);color:var(--pfx-form-label-strong);margin-bottom:8px}.form-section.section-appearance-step .section-description{color:var(--pfx-form-label-muted);max-width:60ch}.form-section.section-appearance-step .section-step-label{min-height:24px;padding:0 10px;margin-bottom:10px;box-shadow:none}.form-section.section-appearance-step .section-heading.align-center .section-description{max-width:52ch}.form-section.section-appearance-step .section-body{display:grid;gap:8px;padding-top:0}.form-section.section-appearance-step .form-row{margin-bottom:var(--pfx-field-gap, 1rem)}.form-section.section-appearance-step .form-column{gap:var(--pfx-field-gap, 12px)}.form-section .form-editorial-blocks{display:grid;gap:16px}.form-section .form-editorial-blocks[data-editorial-placement=beforeActions]{margin-top:24px;padding-top:18px;border-top:1px solid var(--pfx-form-section-divider)}.form-section.section-appearance-step .form-editorial-blocks[data-editorial-placement=beforeActions]{gap:18px}.form-section.section-appearance-step .form-editorial-blocks[data-editorial-placement=beforeActions]>*+*{margin-top:2px}.praxis-dynamic-form:not(.canvas-mode-enabled)>praxis-form-actions[data-actions-placement=afterSections]{margin-top:18px}.praxis-dynamic-form>.form-editorial-blocks[data-editorial-placement=after]{margin-top:6px}:host-context(.mdc-theme-dark) .form-section.section-appearance-step,:host-context(.theme-dark) .form-section.section-appearance-step{border-color:color-mix(in srgb,var(--pfx-editorial-form-border) 82%,transparent);box-shadow:none}:host-context(.mdc-theme-dark) .form-section.section-appearance-step .section-title,:host-context(.theme-dark) .form-section.section-appearance-step .section-title{color:color-mix(in srgb,var(--pfx-editorial-form-text) 96%,white)}:host-context(.mdc-theme-dark) .form-section.section-appearance-step .section-description,:host-context(.theme-dark) .form-section.section-appearance-step .section-description{color:color-mix(in srgb,var(--pfx-editorial-form-text-muted) 86%,var(--pfx-editorial-form-text) 14%)}:host-context(.mdc-theme-dark) .section-step-label,:host-context(.theme-dark) .section-step-label{background:color-mix(in srgb,var(--md-sys-color-primary-container) 54%,transparent);color:color-mix(in srgb,var(--md-sys-color-primary) 88%,white)}:host-context(.mdc-theme-dark) .form-section .form-editorial-blocks[data-editorial-placement=beforeActions],:host-context(.theme-dark) .form-section .form-editorial-blocks[data-editorial-placement=beforeActions]{border-top-color:color-mix(in srgb,var(--md-sys-color-outline-variant) 90%,transparent)}.inline-edit-btn{margin-left:6px;vertical-align:middle}.section-body.collapsed{border:1px dashed var(--md-sys-color-outline-variant);background:var(--md-sys-color-surface-container-low);border-radius:6px;padding:8px 10px}.section-collapsed-placeholder{display:flex;align-items:center;gap:8px;color:var(--md-sys-color-on-surface-variant);font-size:.95rem}.section-collapsed-placeholder mat-icon{font-size:20px;width:20px;height:20px}.form-row{display:flex;gap:1.1rem;margin-bottom:var(--pfx-field-gap, 1.1rem);max-width:100%;min-width:0;transition:all .2s ease;border-radius:6px;position:relative}.praxis-dynamic-form.pfx-mounting .form-row{opacity:0;transform:translateY(var(--pdx-form-mount-offset, 6px));animation:pdxFormMount var(--pdx-form-mount-duration, .16s) ease-out both;animation-delay:calc(var(--pfx-mount-index, 0) * var(--pdx-form-mount-stagger, 20ms))}@media(prefers-reduced-motion:reduce){.praxis-dynamic-form.pfx-mounting .form-row{animation:none;opacity:1;transform:none}}@keyframes pdxFormMount{to{opacity:1;transform:translateY(0)}}.praxis-dynamic-form .mat-mdc-form-field{width:100%;margin-bottom:var(--pfx-field-gap, 10px);font-family:inherit;--mdc-filled-text-field-container-color: var(--pfx-form-field-surface-rest);--mdc-filled-text-field-focus-active-indicator-color: var(--pfx-editorial-form-accent);--mdc-filled-text-field-active-indicator-color: var(--pfx-editorial-form-field-outline);--mdc-filled-text-field-hover-active-indicator-color: var(--pfx-editorial-form-accent);--mdc-filled-text-field-focus-label-text-color: var(--pfx-editorial-form-accent);--mdc-filled-text-field-label-text-color: var(--pfx-form-label-muted);--mdc-filled-text-field-input-text-color: var(--pfx-editorial-form-text);--mdc-filled-text-field-caret-color: var(--pfx-editorial-form-accent);--mdc-filled-text-field-input-text-placeholder-color: color-mix( in srgb, var(--pfx-editorial-form-text-muted) 82%, transparent );--mdc-outlined-text-field-outline-color: var(--pfx-editorial-form-field-outline);--mdc-outlined-text-field-hover-outline-color: var(--pfx-editorial-form-accent);--mdc-outlined-text-field-focus-outline-color: var(--pfx-editorial-form-accent);--mdc-outlined-text-field-focus-label-text-color: var(--pfx-editorial-form-accent);--mdc-outlined-text-field-label-text-color: var(--pfx-form-label-muted);--mdc-outlined-text-field-input-text-color: var(--pfx-editorial-form-text);--mdc-filled-text-field-container-shape: var(--pfx-editorial-form-field-radius);--mdc-outlined-text-field-container-shape: var(--pfx-editorial-form-field-radius);--mdc-filled-text-field-active-indicator-height: var(--pfx-editorial-form-field-border-width);--mdc-filled-text-field-focus-active-indicator-height: var(--pfx-editorial-form-field-border-width);--mdc-outlined-text-field-outline-width: var(--pfx-editorial-form-field-border-width);--mdc-outlined-text-field-focus-outline-width: var(--pfx-editorial-form-field-border-width);--mat-select-enabled-trigger-text-color: var(--pfx-editorial-form-text);--mat-select-enabled-arrow-color: var(--pfx-form-label-muted);--mat-form-field-enabled-select-arrow-color: var(--pfx-form-label-muted);--mat-form-field-focus-select-arrow-color: var(--pfx-editorial-form-accent);--mat-form-field-hover-state-layer-opacity: 0;--mat-form-field-focus-state-layer-opacity: 0}.praxis-dynamic-form.editorial-visual-context .mat-mdc-form-field{font-family:var(--editorial-body-font-family, inherit)}.praxis-dynamic-form .mat-mdc-text-field-wrapper,.praxis-dynamic-form .mdc-text-field{background:var(--pfx-form-field-surface-rest);border-radius:var(--pfx-editorial-form-field-radius);min-height:var(--pfx-form-field-min-height);transition:background-color .16s ease,box-shadow .16s ease,border-color .16s ease}.praxis-dynamic-form.editorial-visual-context .mat-mdc-text-field-wrapper,.praxis-dynamic-form.editorial-visual-context .mdc-text-field,.praxis-dynamic-form.editorial-visual-context .mdc-text-field--filled,.praxis-dynamic-form.editorial-visual-context .mdc-text-field--outlined{background-color:var(--pfx-form-field-surface-rest)!important;background:var(--pfx-form-field-surface-rest)!important}.praxis-dynamic-form .mat-mdc-form-field .mdc-floating-label,.praxis-dynamic-form .mat-mdc-form-field .mat-mdc-form-field-hint,.praxis-dynamic-form .mat-mdc-form-field .mat-mdc-form-field-error,.praxis-dynamic-form .mat-mdc-form-field .mat-mdc-form-field-required-marker,.praxis-dynamic-form .mat-mdc-form-field .mat-mdc-select-arrow,.praxis-dynamic-form .mat-mdc-form-field .mat-mdc-select-placeholder,.praxis-dynamic-form .mat-mdc-form-field .mat-mdc-form-field-icon-suffix,.praxis-dynamic-form .mat-mdc-form-field .mat-mdc-form-field-icon-prefix{color:var(--pfx-form-label-muted)}.praxis-dynamic-form .mat-mdc-input-element,.praxis-dynamic-form .mat-mdc-select-value-text,.praxis-dynamic-form .mat-mdc-form-field-infix,.praxis-dynamic-form .mat-mdc-select-min-line{color:var(--pfx-editorial-form-text)}.praxis-dynamic-form .mat-mdc-form-field:hover .mat-mdc-text-field-wrapper,.praxis-dynamic-form .mat-mdc-form-field:hover .mdc-text-field,.praxis-dynamic-form .mat-mdc-form-field.mat-focused .mat-mdc-text-field-wrapper,.praxis-dynamic-form .mat-mdc-form-field.mat-focused .mdc-text-field{background:var(--pfx-form-field-surface-focus)}.praxis-dynamic-form.editorial-visual-context .mat-mdc-input-element,.praxis-dynamic-form.editorial-visual-context .mat-mdc-select-value-text,.praxis-dynamic-form.editorial-visual-context .mat-mdc-form-field-infix,.praxis-dynamic-form.editorial-visual-context .mat-mdc-select-min-line,.praxis-dynamic-form.editorial-visual-context .mdc-text-field__input{color:var(--pfx-editorial-form-text)!important;-webkit-text-fill-color:var(--pfx-editorial-form-text)!important}.praxis-dynamic-form.editorial-visual-context .mat-mdc-form-field .mdc-floating-label,.praxis-dynamic-form.editorial-visual-context .mat-mdc-form-field .mat-mdc-form-field-hint,.praxis-dynamic-form.editorial-visual-context .mat-mdc-form-field .mat-mdc-form-field-error,.praxis-dynamic-form.editorial-visual-context .mat-mdc-form-field .mat-mdc-form-field-required-marker,.praxis-dynamic-form.editorial-visual-context .mat-mdc-form-field .mat-mdc-select-arrow,.praxis-dynamic-form.editorial-visual-context .mat-mdc-form-field .mat-mdc-select-placeholder,.praxis-dynamic-form.editorial-visual-context .mat-mdc-form-field .mat-mdc-form-field-icon-suffix,.praxis-dynamic-form.editorial-visual-context .mat-mdc-form-field .mat-mdc-form-field-icon-prefix{color:var(--pfx-editorial-form-text-muted)!important}.praxis-dynamic-form.editorial-visual-context .mat-mdc-floating-label,.praxis-dynamic-form.editorial-visual-context .mdc-floating-label,.praxis-dynamic-form.editorial-visual-context .mdc-text-field__input::placeholder{color:color-mix(in srgb,var(--pfx-editorial-form-text) 68%,transparent)!important}.praxis-dynamic-form.editorial-visual-context .mat-mdc-input-element::placeholder,.praxis-dynamic-form.editorial-visual-context textarea.mat-mdc-input-element::placeholder{color:color-mix(in srgb,var(--pfx-editorial-form-text) 58%,transparent)!important}.praxis-dynamic-form .mat-mdc-radio-button,.praxis-dynamic-form .mat-mdc-checkbox,.praxis-dynamic-form .mat-mdc-slide-toggle{--mdc-radio-selected-icon-color: var(--pfx-editorial-form-accent);--mdc-radio-selected-hover-icon-color: var(--pfx-editorial-form-accent);--mdc-radio-selected-focus-icon-color: var(--pfx-editorial-form-accent);--mdc-checkbox-selected-checkmark-color: var(--pfx-editorial-form-accent-text);--mdc-checkbox-selected-focus-icon-color: var(--pfx-editorial-form-accent);--mdc-checkbox-selected-hover-icon-color: var(--pfx-editorial-form-accent);--mdc-checkbox-selected-icon-color: var(--pfx-editorial-form-accent);--mdc-switch-selected-focus-state-layer-color: var(--pfx-editorial-form-accent);--mdc-switch-selected-handle-color: var(--pfx-editorial-form-accent);--mdc-switch-selected-track-color: color-mix(in srgb, var(--pfx-editorial-form-accent) 45%, #fff)}.praxis-dynamic-form [data-field-type=input],.praxis-dynamic-form [data-field-type=textarea],.praxis-dynamic-form [data-field-type=email],.praxis-dynamic-form [data-field-type=password],.praxis-dynamic-form [data-field-type=url],.praxis-dynamic-form [data-field-type=search],.praxis-dynamic-form [data-field-type=phone],.praxis-dynamic-form [data-field-type=numericTextBox],.praxis-dynamic-form [data-field-type=currency],.praxis-dynamic-form [data-field-type=cpfCnpj],.praxis-dynamic-form [data-field-type=date],.praxis-dynamic-form [data-field-type=dateInput],.praxis-dynamic-form [data-field-type=dateRange],.praxis-dynamic-form [data-field-type=dateTimeLocal],.praxis-dynamic-form [data-field-type=time],.praxis-dynamic-form [data-field-type=timePicker],.praxis-dynamic-form [data-field-type=timeRange],.praxis-dynamic-form [data-field-type=month],.praxis-dynamic-form [data-field-type=week],.praxis-dynamic-form [data-field-type=yearInput],.praxis-dynamic-form [data-field-type=select],.praxis-dynamic-form [data-field-type=multi-select],.praxis-dynamic-form [data-field-type=searchable-select],.praxis-dynamic-form [data-field-type=async-select],.praxis-dynamic-form [data-field-type=autocomplete],.praxis-dynamic-form [data-field-type=entityLookup],.praxis-dynamic-form [data-field-type=tree-select],.praxis-dynamic-form [data-field-type=multi-select-tree],.praxis-dynamic-form [data-field-type=priceRange],.praxis-dynamic-form [data-field-type=file-upload]{display:block;width:100%;min-width:0}.praxis-dynamic-form .mat-mdc-form-field-subscript-wrapper{min-height:var(--pfx-subscript-min-h, 22px)}.form-row:last-child{margin-bottom:0}.form-column{display:grid;grid-template-columns:minmax(0,1fr);align-content:start;gap:var(--pfx-field-gap, 10px);flex:1;max-width:100%;min-width:0;transition:all .2s ease;border-radius:4px;position:relative}.form-layout-rich-content{display:block;width:100%;max-width:100%;min-width:0;margin-bottom:var(--pfx-field-gap, 10px);color:var(--pfx-editorial-form-text-muted, var(--md-sys-color-on-surface-variant));font:var(--mdc-typography-body-medium, 400 14px/20px system-ui);overflow-wrap:anywhere}:host ::ng-deep .form-layout-rich-content .prx-rich-content-root{display:grid;gap:8px;min-width:0;max-width:100%}:host ::ng-deep .form-layout-rich-content .prx-rich-node{min-width:0;max-width:100%}:host ::ng-deep .form-layout-rich-content .prx-rich-text{color:inherit;line-height:20px}:host ::ng-deep .form-layout-rich-content .praxis-form-visual-block--note,:host ::ng-deep .form-layout-rich-content .praxis-rich-content-notice{border:1px solid color-mix(in srgb,var(--pfx-editorial-form-accent) 12%,var(--pfx-editorial-form-border) 88%);border-left:3px solid var(--pfx-editorial-form-accent);border-radius:8px;background:color-mix(in srgb,var(--pfx-editorial-form-accent-container) 12%,var(--pfx-editorial-form-surface-muted) 88%)}:host ::ng-deep .form-layout-rich-content .praxis-form-visual-block--note{display:grid;grid-template-columns:20px minmax(0,1fr);gap:10px;align-items:flex-start;padding:11px 12px}:host ::ng-deep .form-layout-rich-content .praxis-form-visual-block--note:before{content:\"info\";display:inline-flex;align-items:center;justify-content:center;width:20px;height:20px;color:var(--pfx-editorial-form-accent);font-family:Material Symbols Outlined;font-size:20px;font-weight:400;line-height:20px}:host ::ng-deep .form-layout-rich-content .praxis-form-visual-block--note .prx-rich-text{color:var(--pfx-editorial-form-text-muted)}:host ::ng-deep .form-layout-rich-content .praxis-rich-content-notice{padding:10px 12px;color:var(--pfx-editorial-form-text)}:host ::ng-deep .form-layout-rich-content .praxis-rich-content-notice .prx-rich-compose{align-items:flex-start;gap:10px}:host ::ng-deep .form-layout-rich-content .praxis-rich-content-notice .prx-rich-icon{color:var(--pfx-editorial-form-accent);font-size:20px;line-height:20px;margin-top:1px}:host ::ng-deep .form-layout-rich-content .praxis-rich-content-divider{display:grid;grid-template-columns:minmax(24px,1fr) auto minmax(24px,1fr);align-items:center;gap:10px;color:var(--pfx-editorial-form-text-muted);font:var(--mdc-typography-label-small, 600 12px/16px system-ui);text-transform:uppercase}:host ::ng-deep .form-layout-rich-content .praxis-rich-content-divider:before,:host ::ng-deep .form-layout-rich-content .praxis-rich-content-divider:after{content:\"\";height:1px;background:var(--pfx-editorial-form-border)}:host ::ng-deep .form-layout-rich-content .prx-rich-card{gap:6px;padding:12px 14px;border-color:var(--pfx-editorial-form-border);border-radius:8px;background:var(--pfx-editorial-form-surface-muted);color:var(--pfx-editorial-form-text);box-shadow:none}:host ::ng-deep .form-layout-rich-content .prx-rich-card-title{color:var(--pfx-editorial-form-text);font:var(--mdc-typography-title-small, 600 14px/20px system-ui)}:host ::ng-deep .form-layout-rich-content .prx-rich-card-subtitle,:host ::ng-deep .form-layout-rich-content .prx-rich-metric-caption{color:var(--pfx-editorial-form-text-muted)}:host ::ng-deep .form-layout-rich-content .prx-rich-card .prx-rich-text{color:var(--pfx-editorial-form-text-muted)}:host ::ng-deep .form-layout-rich-content .prx-rich-badge{background:var(--pfx-editorial-form-accent-container);color:var(--pfx-editorial-form-accent-container-text)}.form-row.grid-12{container-type:inline-size;container-name:praxis-form-row;display:grid;grid-template-columns:repeat(12,minmax(0,1fr));gap:var(--pfx-grid-gap, 16px)}.align-start{align-self:flex-start}.align-center{align-self:center}.align-end{align-self:flex-end}.align-stretch{align-self:stretch}.form-blocking-overlay{position:absolute;inset:0;background:transparent;color:var(--md-sys-color-on-surface);backdrop-filter:blur(2px) saturate(103%);-webkit-backdrop-filter:blur(2px) saturate(103%);display:flex;align-items:center;justify-content:center;flex-direction:column;gap:12px;z-index:10;pointer-events:all}@media(max-width:768px){.column-drop-wrapper,.row-drop-wrapper,.form-layout-rich-content,.praxis-dynamic-form .mat-mdc-form-field,.praxis-dynamic-form .mat-mdc-text-field-wrapper,.praxis-dynamic-form .mdc-text-field{max-width:100%;min-width:0}:host ::ng-deep .praxis-dynamic-form .pfx-field-shell,:host ::ng-deep .praxis-dynamic-form .pfx-field-shell-wrapper,:host ::ng-deep .praxis-dynamic-form .pfx-field-shell-host,:host ::ng-deep .praxis-dynamic-form .mat-mdc-form-field,:host ::ng-deep .praxis-dynamic-form .mat-mdc-text-field-wrapper,:host ::ng-deep .praxis-dynamic-form .mdc-text-field{width:100%;max-width:100%;min-width:0}.form-section{padding:clamp(.75rem,4vw,1rem)}.section-heading{gap:10px;margin-bottom:16px;padding-bottom:var(--pfx-form-section-heading-divider-gap, 14px)}.section-heading.title-only{padding-bottom:var(--pfx-form-section-heading-title-only-divider-gap, 8px)}}.section-title{display:flex;align-items:center;gap:8px}:host(.pfx-form-section-divider-inline-title) .section-heading.title-only .section-title{width:100%;min-width:0}:host(.pfx-form-section-divider-inline-title) .section-heading.title-only .section-title:after{content:\"\";display:block;flex:1 1 auto;min-width:var(--pfx-form-section-title-inline-divider-min-width, 48px);height:2px;margin-left:var(--pfx-form-section-title-inline-divider-gap, 12px);pointer-events:none;background:linear-gradient(90deg,var(--pfx-form-section-divider) 0%,var(--pfx-form-section-divider) 62%,color-mix(in srgb,var(--pfx-form-section-divider) 18%,transparent) 88%,transparent 100%);border-radius:999px;-webkit-mask-image:linear-gradient(90deg,black 0%,black 72%,transparent 100%);mask-image:linear-gradient(90deg,black 0%,black 72%,transparent 100%)}:host(.pfx-form-section-divider-inline-title) .section-heading.align-center .section-title:after{display:none}@media(max-width:640px){:host(.pfx-form-section-divider-inline-title) .section-heading.title-only{padding-bottom:var(--pfx-form-section-heading-title-only-divider-gap, 8px)}:host(.pfx-form-section-divider-inline-title) .section-heading.title-only:after{display:block}:host(.pfx-form-section-divider-inline-title) .section-heading.title-only .section-title{width:auto}:host(.pfx-form-section-divider-inline-title) .section-heading.title-only .section-title:after{display:none}}.section-title .section-title-icon{font-size:1.25em;line-height:1}.section-title-avatar{--_pfx-form-section-avatar-size: var(--pfx-form-section-avatar-size-md, var(--pfx-form-section-avatar-size, 32px));display:inline-flex;align-items:center;justify-content:center;width:var(--_pfx-form-section-avatar-size);height:var(--_pfx-form-section-avatar-size);border-radius:999px;flex:0 0 var(--_pfx-form-section-avatar-size);overflow:hidden}.section-title-avatar.size-sm{--_pfx-form-section-avatar-size: var(--pfx-form-section-avatar-size-sm, 24px)}.section-title-avatar.size-md{--_pfx-form-section-avatar-size: var(--pfx-form-section-avatar-size-md, var(--pfx-form-section-avatar-size, 32px))}.section-title-avatar.size-lg{--_pfx-form-section-avatar-size: var(--pfx-form-section-avatar-size-lg, 40px)}.section-title-avatar-image{object-fit:cover;border:1px solid color-mix(in srgb,var(--pfx-form-section-divider) 72%,transparent);background:var(--pfx-form-section-surface-flat)}.section-title-avatar-text,.section-title-avatar-placeholder{background:color-mix(in srgb,var(--pfx-editorial-form-accent) 14%,var(--pfx-form-section-surface-flat));color:color-mix(in srgb,var(--pfx-editorial-form-accent) 82%,var(--pfx-form-label-strong) 18%);font-size:calc(var(--_pfx-form-section-avatar-size) * .41);font-weight:800;letter-spacing:.04em;text-transform:uppercase}.section-title-avatar-placeholder mat-icon{font-size:calc(var(--_pfx-form-section-avatar-size) * .5625);width:calc(var(--_pfx-form-section-avatar-size) * .5625);height:calc(var(--_pfx-form-section-avatar-size) * .5625);line-height:calc(var(--_pfx-form-section-avatar-size) * .5625)}.section-title-avatar-sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.form-context-empty-state{display:grid;min-height:var(--pdx-form-context-empty-min-height, 0);place-items:center;padding:var(--pdx-form-context-empty-padding, 0)}.form-context-empty-state praxis-empty-state-card{display:block;width:min(100%,var(--pdx-form-context-empty-max-width, 32rem))}.prx-form-tabs{display:block;margin-bottom:16px;max-width:100%}.prx-form-tabs__tablist{display:flex;flex-wrap:wrap;align-items:center;gap:8px;max-width:100%}.prx-form-tabs__tablist--scrollable{flex-wrap:nowrap;overflow-x:auto;overflow-y:hidden;scrollbar-width:none;-webkit-overflow-scrolling:touch;padding:4px 2px}.prx-form-tabs__tablist--scrollable::-webkit-scrollbar{display:none}.prx-form-tabs__tab{display:inline-flex;align-items:center;gap:8px;min-width:0;padding:8px 14px;border-radius:999px;border:1px solid var(--md-sys-color-outline-variant, rgba(0, 0, 0, .12));background:color-mix(in srgb,var(--md-sys-color-surface, transparent) 40%,transparent);color:var(--md-sys-color-on-surface, #1d1b20);font-family:inherit;font-size:.84rem;font-weight:500;cursor:pointer;white-space:nowrap;flex-shrink:0;-webkit-user-select:none;user-select:none;transition:all .2s cubic-bezier(.2,0,0,1)}.prx-form-tabs__tab:hover:not(:disabled):not(.prx-form-tabs__tab--active){background:var(--md-sys-color-surface-container-high, rgba(0, 0, 0, .05));border-color:var(--md-sys-color-outline, rgba(0, 0, 0, .24));color:var(--md-sys-color-on-surface)}.prx-form-tabs__tab:focus-visible{outline:2px solid var(--md-sys-color-primary, #005ac1);outline-offset:2px}.prx-form-tabs__tab:disabled{cursor:not-allowed;opacity:.45}.prx-form-tabs__tab--active{background:var(--md-sys-color-primary-container, color-mix(in srgb, var(--md-sys-color-primary, #005ac1) 16%, var(--md-sys-color-surface-container-high, #2b2930)));color:var(--md-sys-color-on-primary-container, var(--md-sys-color-primary, #005ac1));border-color:transparent;font-weight:600;box-shadow:0 1px 3px #00000014}.prx-form-tabs__tab-icon{font-size:18px;width:18px;height:18px;display:inline-flex;align-items:center;justify-content:center}.prx-form-tabs__tab-badge{display:inline-flex;align-items:center;justify-content:center;padding:1px 7px;font-size:.72rem;font-weight:600;border-radius:999px;background:color-mix(in srgb,currentColor 14%,transparent)}.prx-form-tabs__tab-error-badge{display:inline-flex;align-items:center;justify-content:center;min-width:18px;height:18px;padding:0 5px;border-radius:999px;font-size:.7rem;font-weight:700;background:var(--md-sys-color-error, #ba1a1a);color:var(--md-sys-color-on-error, #ffffff);box-shadow:0 1px 2px #0003}.prx-form-tabs[data-appearance=underline]{border-bottom:1px solid var(--md-sys-color-outline-variant, #cac4d0)}.prx-form-tabs[data-appearance=underline] .prx-form-tabs__tablist{gap:16px;padding-bottom:0}.prx-form-tabs[data-appearance=underline] .prx-form-tabs__tab{border:none;border-radius:0;border-bottom:2px solid transparent;background:transparent;padding:8px 4px 10px;margin-bottom:-1px}.prx-form-tabs[data-appearance=underline] .prx-form-tabs__tab:hover:not(:disabled):not(.prx-form-tabs__tab--active){background:transparent;border-bottom-color:var(--md-sys-color-outline-variant, #cac4d0)}.prx-form-tabs[data-appearance=underline] .prx-form-tabs__tab--active{background:transparent;box-shadow:none;border-bottom-color:var(--md-sys-color-primary, #005ac1);color:var(--md-sys-color-primary, #005ac1)}.prx-form-tabs[data-appearance=buttons] .prx-form-tabs__tablist{background:var(--md-sys-color-surface-container, rgba(0, 0, 0, .04));border-radius:12px;padding:4px;gap:4px;border:1px solid var(--md-sys-color-outline-variant, rgba(0, 0, 0, .08))}.prx-form-tabs[data-appearance=buttons] .prx-form-tabs__tab{border:none;border-radius:8px;padding:6px 12px;background:transparent}.prx-form-tabs[data-appearance=buttons] .prx-form-tabs__tab:hover:not(:disabled):not(.prx-form-tabs__tab--active){background:color-mix(in srgb,currentColor 8%,transparent)}.prx-form-tabs[data-appearance=buttons] .prx-form-tabs__tab--active{background:var(--md-sys-color-surface, var(--mat-sys-surface));color:var(--md-sys-color-primary, #005ac1);box-shadow:0 1px 3px #0000001f}.section-drop-wrapper[hidden]{display:none!important}.form-loading-title,.entity-read-loading-text,.form-blocking-overlay p{color:var(--pdx-text-shimmer-base, var(--md-sys-color-on-surface-variant));font-weight:550;text-shadow:none}@supports (-webkit-background-clip: text) or (background-clip: text){.form-loading-title,.entity-read-loading-text,.form-blocking-overlay p{background-image:var(--pdx-text-shimmer-gradient, linear-gradient(105deg, color-mix(in oklab, var(--md-sys-color-on-surface-variant, #64748b) 78%, var(--md-sys-color-on-surface, #0f172a) 22%) 0%, color-mix(in oklab, var(--md-sys-color-on-surface-variant, #64748b) 78%, var(--md-sys-color-on-surface, #0f172a) 22%) 26%, color-mix(in oklab, var(--md-sys-color-tertiary, #6366f1) 66%, #a855f7 34%) 40%, var(--pdx-text-shimmer-peak, var(--md-sys-color-on-surface, #ffffff)) 50%, color-mix(in oklab, var(--md-sys-color-primary, #006a6a) 66%, #ec4899 34%) 60%, color-mix(in oklab, var(--md-sys-color-on-surface-variant, #64748b) 78%, var(--md-sys-color-on-surface, #0f172a) 22%) 74%, color-mix(in oklab, var(--md-sys-color-on-surface-variant, #64748b) 78%, var(--md-sys-color-on-surface, #0f172a) 22%) 100%));background-size:300% 100%;background-position:100% 50%;background-repeat:no-repeat;-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;color:transparent;animation:praxisFormTextShimmer var(--pdx-text-shimmer-duration, 2.6s) linear infinite;will-change:background-position}}@media(prefers-reduced-motion:reduce),(forced-colors:active),print{.form-loading-title,.entity-read-loading-text,.form-blocking-overlay p{animation:none!important;background-image:none!important;-webkit-text-fill-color:currentColor!important;color:var(--md-sys-color-primary)!important;will-change:auto}}@media(forced-colors:active){.form-loading-title,.entity-read-loading-text,.form-blocking-overlay p{color:CanvasText!important;-webkit-text-fill-color:CanvasText!important}}@keyframes praxisFormTextShimmer{0%{background-position:100% 50%}to{background-position:0% 50%}}\n"] }]
22616
+ ], template: "@if (isLoading) {\n <!-- Loading State -->\n <div class=\"form-loading\" role=\"status\" aria-live=\"polite\" aria-label=\"Carregando formul\u00E1rio\">\n <div class=\"form-loading-header\">\n <mat-progress-spinner diameter=\"32\" aria-label=\"Carregando formul\u00E1rio\"></mat-progress-spinner>\n <div class=\"form-loading-copy\">\n <p class=\"form-loading-title\">Carregando formul\u00E1rio...</p>\n <p class=\"form-loading-subtitle\">Preparando campos e op\u00E7\u00F5es do cadastro.</p>\n </div>\n </div>\n <div class=\"form-loading-skeleton\" aria-hidden=\"true\">\n <span class=\"form-loading-line form-loading-line-title\"></span>\n <span class=\"form-loading-line\"></span>\n <span class=\"form-loading-line form-loading-line-short\"></span>\n <span class=\"form-loading-field\"></span>\n <span class=\"form-loading-field form-loading-field-wide\"></span>\n </div>\n </div>\n} @else if (initializationStatus === 'error') {\n <!-- Error State -->\n <div class=\"form-error\">\n <mat-icon color=\"warn\" [praxisIcon]=\"'error'\"></mat-icon>\n <h3>{{ getErrorTitle() }}</h3>\n <p>{{ currentErrorMessage }}</p>\n @if (isRecoverable) {\n <button mat-stroked-button (click)=\"retryInitialization()\">\n <mat-icon [praxisIcon]=\"'refresh'\"></mat-icon>\n Tentar Novamente\n </button>\n }\n <button mat-button (click)=\"showDetailedError()\" class=\"show-details\">\n Ver Detalhes T\u00E9cnicos\n </button>\n <!-- Permitir corre\u00E7\u00E3o do resourcePath diretamente do estado de erro -->\n <button mat-flat-button color=\"primary\" (click)=\"openQuickConnect()\" class=\"connect-action\">\n <mat-icon [praxisIcon]=\"'bolt'\"></mat-icon>\n Conectar a recurso\n </button>\n </div>\n} @else if (initializationStatus === 'success') {\n <!-- Inline banner for schema change (only when customization is enabled) -->\n @if (shouldShowOutdatedInline()) {\n <div class=\"pfx-form-info-banner\" role=\"status\" aria-live=\"polite\">\n <div class=\"text\">O schema do servidor mudou. Reconciliar agora?</div>\n <div class=\"actions\">\n <button mat-stroked-button color=\"primary\" (click)=\"openConfigEditor()\">\n <mat-icon [praxisIcon]=\"'sync'\"></mat-icon>\n Reconciliar\n </button>\n <button mat-button (click)=\"onSnoozeOutdated()\">Lembrar depois</button>\n <button mat-button (click)=\"onIgnoreOutdated()\">Ignorar</button>\n </div>\n </div>\n }\n\n <!-- Configuration Controls -->\n @if (shouldShowConfigControls && enableCustomization) {\n <div class=\"form-config-controls\">\n @if (showAiAssistant) {\n <button type=\"button\" praxisIconButton=\"auto_awesome\" size=\"dense\" (click)=\"openAiAssistant()\" [disabled]=\"isLoading\"\n [attr.data-testid]=\"aiAssistantTriggerTestId('config-controls')\"\n aria-label=\"Abrir copiloto semantico Praxis do formulario\"\n matTooltip=\"Abrir copiloto sem\u00E2ntico do formul\u00E1rio\">\n </button>\n }\n <button type=\"button\" praxisIconButton=\"settings\" size=\"dense\" (click)=\"openConfigEditor()\" [disabled]=\"isLoading\" class=\"config-button\"\n [matBadge]=\"schemaOutdated ? '!' : ''\" [matBadgeHidden]=\"!schemaOutdated\" matBadgeColor=\"warn\" matBadgeSize=\"small\"\n matBadgePosition=\"above after\"\n [attr.aria-label]=\"configControlLabel\" [matTooltip]=\"configControlLabel\">\n </button>\n <button type=\"button\" praxisIconButton=\"link_off\" size=\"dense\" (click)=\"disconnect()\"\n [attr.aria-label]=\"disconnectControlLabel\" [matTooltip]=\"disconnectControlLabel\"\n [disabled]=\"isLoading\">\n </button>\n </div>\n }\n\n <!-- Form Content -->\n @if (!resourcePath && !hasExplicitSchemaUrl() && !hasRenderableConfig()) {\n <praxis-empty-state-card\n icon=\"link\"\n [title]=\"'Conecte o formul\u00E1rio \u00E0 fonte de dados'\"\n [description]=\"'Informe a rota do recurso da API para gerar automaticamente os campos do formul\u00E1rio.'\"\n [primaryAction]=\"enableCustomization ? { label: 'Conectar \u00E0 fonte de dados', icon: 'bolt', action: openQuickConnect.bind(this) } : undefined\"\n ></praxis-empty-state-card>\n }\n @if (shouldShowContextEmptyState()) {\n <div class=\"form-context-empty-state\" role=\"status\" aria-live=\"polite\">\n <praxis-empty-state-card\n [icon]=\"emptyState?.icon || 'touch_app'\"\n [title]=\"emptyState!.title\"\n [description]=\"emptyState?.description\"\n [tone]=\"emptyState?.tone || 'primary'\"\n [variant]=\"emptyState?.variant || 'transparent'\"\n [alignment]=\"emptyState?.alignment || 'center'\"\n [density]=\"emptyState?.density || 'compact'\"\n [iconContainer]=\"emptyState?.iconContainer || 'circle'\"\n [inline]=\"true\"\n />\n </div>\n } @else {\n <div #entityReadRegion class=\"entity-read-region\" tabindex=\"-1\" role=\"region\" [attr.aria-label]=\"entityReadText('region')\">\n <span class=\"cdk-visually-hidden\" role=\"status\" aria-live=\"polite\" aria-atomic=\"true\">{{ entityReadStatusText() }}</span>\n @if (entityHydrationPending || entityReadFailed) {\n <div class=\"entity-read-feedback\" data-testid=\"form-entity-read-feedback\">\n @if (entityHydrationPending) {\n <mat-progress-spinner diameter=\"28\" mode=\"indeterminate\" aria-hidden=\"true\"></mat-progress-spinner>\n <p class=\"entity-read-loading-text\" aria-hidden=\"true\">{{ entityReadText('loading') }}</p>\n } @else {\n <mat-icon [praxisIcon]=\"'error_outline'\" aria-hidden=\"true\"></mat-icon>\n <p aria-hidden=\"true\">{{ entityReadText('error') }}</p>\n <button mat-stroked-button type=\"button\" (click)=\"retryEntityRead(entityReadRegion)\">{{ entityReadText('retry') }}</button>\n }\n </div>\n }\n <form #formHost (ngSubmit)=\"onSubmit()\" [attr.aria-busy]=\"submitting || entityHydrationPending ? 'true' : null\"\n [style.opacity]=\"entityHydrationPending || entityReadFailed ? '0' : null\"\n [style.transition]=\"entityHydrationPending || entityReadFailed ? 'none' : null\"\n [attr.inert]=\"entityHydrationPending || entityReadFailed ? '' : null\"\n [attr.aria-hidden]=\"entityHydrationPending || entityReadFailed ? 'true' : null\"\n [attr.aria-label]=\"'Formul\u00E1rio ' + (config.metadata?.version || '')\" [class.canvas-mode-enabled]=\"enableCustomization\"\n [class.presentation-mode]=\"effectivePresentation\"\n [class.praxis-dynamic-form--presentation]=\"effectivePresentation\"\n [class.readonly-mode]=\"effectiveReadonly\"\n [attr.data-presentation-preset]=\"effectivePresentation ? effectivePresentationPreset : null\"\n [class.praxis-dynamic-form--corporate-dossier]=\"isCorporateDossierPreset()\"\n [class.praxis-dynamic-form--editorial-card]=\"isEditorialCardPreset()\"\n [class.praxis-dynamic-form--compact-presentation]=\"isCompactPresentationPreset()\"\n [class.editorial-visual-context]=\"hasEditorialVisualContext()\"\n [class.pfx-mounting]=\"isMounting\" [formGroup]=\"form\"\n [ngClass]=\"{\n 'pres-compact': presentationVars.compact,\n 'pres-label-left': presentationVars.labelPosition === 'left',\n 'pres-label-above': presentationVars.labelPosition === 'above'\n }\" [style.--pfx-pres-label-align]=\"presentationVars.labelAlign\"\n [style.--pfx-pres-label-size]=\"presentationVars.labelSize\"\n [style.--pfx-pres-label-width]=\"presentationVars.labelWidth\"\n [style.--pfx-pres-row-gap]=\"presentationVars.density === 'compact' ? '6px' : (presentationVars.density === 'cozy' ? '8px' : '10px')\"\n [style.--pfx-pres-row-padding]=\"presentationVars.density === 'compact' ? '2px 0' : (presentationVars.density === 'cozy' ? '6px 0' : '8px 0')\"\n [style.--pfx-pres-value-align]=\"presentationVars.valueAlign\"\n [style.--pfx-pres-value-size]=\"presentationVars.valueSize\"\n [style.--pdx-form-mount-duration]=\"getMountDurationVar()\"\n [style.--pdx-form-mount-offset]=\"getMountOffsetVar()\"\n [style.--pdx-form-mount-stagger]=\"getMountStaggerVar()\"\n class=\"praxis-dynamic-form\">\n @if (enableCustomization && selectedElement) {\n <praxis-canvas-toolbar (editMetadata)=\"openSelectedElementEditor()\" (selectPath)=\"onSelectPath($event)\"\n (moveUp)=\"onToolbarMove('up')\" (moveDown)=\"onToolbarMove('down')\" (toggleReadonly)=\"onToolbarToggleReadonly()\"\n (toggleRequired)=\"onToolbarToggleRequired()\" (toggleHidden)=\"onToolbarToggleHidden()\"\n (toggleDisabled)=\"onToolbarToggleDisabled()\" (requestClose)=\"onToolbarRequestClose()\"\n [selectedElement]=\"selectedElement\"\n [style.transform]=\"toolbarTransform\"></praxis-canvas-toolbar>\n }\n\n @if (formBlocksBefore?.nodes?.length) {\n <section class=\"form-editorial-blocks form-editorial-blocks-before\" data-editorial-placement=\"before\">\n <praxis-rich-content\n [document]=\"formBlocksBeforeDocument\"\n [context]=\"getEditorialRichContentContext()\"\n [hostCapabilities]=\"richContentHostCapabilities\"\n ></praxis-rich-content>\n </section>\n }\n\n @if (actionPlacement === 'top' && !(effectivePresentation || effectiveReadonly)) {\n <praxis-form-actions data-actions-placement=\"top\" [actions]=\"effectiveActions\" [isSubmitting]=\"submitting\"\n [formIsValid]=\"effectiveFormIsValid\" [submitError]=\"submitError\" [formId]=\"formId\" [actionOverrides]=\"actionRuleProps\"\n [invalidRequiredFieldLabels]=\"invalidRequiredFieldLabels\"\n [suppressInvalidSubmitHint]=\"entityHydrationPending\"\n [editorialVisualContext]=\"hasEditorialVisualContext()\"\n (action)=\"onFormAction($event)\"></praxis-form-actions>\n }\n\n <!-- Tab Layout Navigation Bar -->\n @if (effectiveLayoutMode === 'tabs' && effectiveTabs.length > 1) {\n <nav class=\"prx-form-tabs\" [attr.data-appearance]=\"effectiveTabsAppearance\" role=\"tablist\" aria-label=\"Navega\u00E7\u00E3o em abas do formul\u00E1rio\">\n <div class=\"prx-form-tabs__tablist prx-form-tabs__tablist--scrollable\">\n @for (tab of effectiveTabs; track tab.id) {\n <button\n type=\"button\"\n role=\"tab\"\n class=\"prx-form-tabs__tab\"\n [class.prx-form-tabs__tab--active]=\"activeTabId === tab.id\"\n [attr.aria-selected]=\"activeTabId === tab.id\"\n [attr.aria-controls]=\"getTabAriaControls(tab)\"\n [attr.id]=\"'tab-' + tab.id\"\n [disabled]=\"tab.disabled\"\n [matTooltip]=\"tab.tooltip || null\"\n [matTooltipDisabled]=\"!tab.tooltip\"\n (click)=\"selectTab(tab.id)\"\n >\n @if (tab.icon) {\n <mat-icon class=\"prx-form-tabs__tab-icon\" [praxisIcon]=\"tab.icon\" aria-hidden=\"true\"></mat-icon>\n }\n <span class=\"prx-form-tabs__tab-label\">{{ tab.label }}</span>\n @if (tab.badge != null) {\n <span class=\"prx-form-tabs__tab-badge\">{{ tab.badge }}</span>\n }\n @if (getTabErrorCount(tab) > 0) {\n <span class=\"prx-form-tabs__tab-error-badge\" [attr.aria-label]=\"getTabErrorCount(tab) + ' erros na aba'\">\n {{ getTabErrorCount(tab) }}\n </span>\n }\n </button>\n }\n </div>\n </nav>\n }\n\n @for (section of (config.sections || []); track (section.id ?? $index); let sectionIndex = $index) {\n <div class=\"section-drop-wrapper\" [attr.data-section-id]=\"section.id\" [hidden]=\"!isSectionInActiveTab(section)\"\n [attr.role]=\"effectiveLayoutMode === 'tabs' ? 'tabpanel' : null\"\n [attr.id]=\"effectiveLayoutMode === 'tabs' ? ('section-tabpanel-' + section.id) : null\"\n [attr.aria-labelledby]=\"effectiveLayoutMode === 'tabs' ? ('tab-' + (getTabIdForSection(section) || section.id)) : null\">\n @if (isSectionVisible(section)) {\n <div #sectionEl class=\"form-section canvas-element\" data-canvas-type=\"section\" [attr.data-section-id]=\"section.id\"\n [attr.data-section-index]=\"sectionIndex\" (mouseenter)=\"onElementMouseEnter($event, 'section', section, sectionEl)\"\n (mouseleave)=\"onElementMouseLeave($event)\" (click)=\"onElementClick($event, 'section', section, sectionEl)\"\n [class.selected]=\"selectedElement?.domElement === sectionEl\"\n [class.hovered]=\"hoveredElement?.domElement === sectionEl && selectedElement?.domElement !== sectionEl\"\n [attr.data-section-appearance]=\"getSectionAppearance(section) || null\"\n [attr.data-section-divider]=\"isSectionDividerEnabled(section) ? 'true' : null\"\n [attr.data-presentation-preset]=\"effectivePresentation ? getSectionPresentationPreset(section) : null\"\n [class.form-section--corporate-dossier]=\"isSectionCorporateDossier(section)\"\n [class.form-section--editorial-card]=\"isSectionEditorialCard(section)\"\n [class.form-section--compact-presentation]=\"isSectionCompactPresentation(section)\"\n [style.marginBottom.px]=\"!isLastVisibleSection(section) ? getSectionGapBottom(section) : null\" [ngClass]=\"getSectionClasses(section)\"\n [ngStyle]=\"getSectionStyles(section)\">\n @if (!shouldHideSectionHeader(section)) {\n <div\n class=\"section-heading\"\n [class.align-center]=\"getSectionHeaderAlign(section) === 'center'\"\n [class.step-appearance]=\"getSectionAppearance(section) === 'step'\"\n [class.title-only]=\"isSectionHeaderTitleOnly(section)\"\n >\n <div class=\"section-heading-text\" [matTooltip]=\"getSectionHeaderTooltip(section) || null\"\n [matTooltipDisabled]=\"!getSectionHeaderTooltip(section)\">\n @if (getSectionStepLabel(section)) {\n <div class=\"section-step-label\" [class.align-center]=\"getSectionHeaderAlign(section) === 'center'\">\n {{ getSectionStepLabel(section) }}\n </div>\n }\n @if (getSectionTitle(section)) {\n <h3 class=\"section-title\" [class.title-large]=\"getSectionTitleStyle(section) === 'titleLarge'\"\n [class.title-medium]=\"getSectionTitleStyle(section) === 'titleMedium'\"\n [class.title-small]=\"getSectionTitleStyle(section) === 'titleSmall'\"\n [class.headline-small]=\"getSectionTitleStyle(section) === 'headlineSmall'\"\n [style.marginBottom.px]=\"getEffectiveSectionTitleGapBottom(section)\" [style.color]=\"getSectionTitleColor(section) || null\"\n [class.align-center]=\"getSectionHeaderAlign(section) === 'center'\"\n [attr.id]=\"sectionPanelId(section, sectionIndex) + '-title'\">\n @let sectionHeaderVisual = getSectionHeaderVisual(section);\n @let sectionHeaderAvatarSize = getSectionHeaderAvatarSize(section);\n @if (sectionHeaderVisual.kind === 'icon') {\n <mat-icon class=\"section-title-icon\" aria-hidden=\"true\" [praxisIcon]=\"sectionHeaderVisual.icon\"></mat-icon>\n }\n @if (sectionHeaderVisual.kind === 'image') {\n <img class=\"section-title-avatar section-title-avatar-image\" [class.size-sm]=\"sectionHeaderAvatarSize === 'sm'\"\n [class.size-md]=\"sectionHeaderAvatarSize === 'md'\" [class.size-lg]=\"sectionHeaderAvatarSize === 'lg'\"\n [src]=\"sectionHeaderVisual.src\" [alt]=\"sectionHeaderVisual.alt\" />\n }\n @if (sectionHeaderVisual.kind === 'initials') {\n <span class=\"section-title-avatar section-title-avatar-text\" [class.size-sm]=\"sectionHeaderAvatarSize === 'sm'\"\n [class.size-md]=\"sectionHeaderAvatarSize === 'md'\" [class.size-lg]=\"sectionHeaderAvatarSize === 'lg'\" aria-hidden=\"true\">\n {{ sectionHeaderVisual.text }}\n </span>\n @if (sectionHeaderVisual.ariaLabel) {\n <span class=\"section-title-avatar-sr-only\">{{ sectionHeaderVisual.ariaLabel }}</span>\n }\n }\n @if (sectionHeaderVisual.kind === 'placeholder') {\n <span class=\"section-title-avatar section-title-avatar-placeholder\" [class.size-sm]=\"sectionHeaderAvatarSize === 'sm'\"\n [class.size-md]=\"sectionHeaderAvatarSize === 'md'\" [class.size-lg]=\"sectionHeaderAvatarSize === 'lg'\" aria-hidden=\"true\">\n @if (sectionHeaderVisual.icon) {\n <mat-icon aria-hidden=\"true\" [praxisIcon]=\"sectionHeaderVisual.icon\"></mat-icon>\n }\n @if (sectionHeaderVisual.text) {\n <span>{{ sectionHeaderVisual.text }}</span>\n }\n </span>\n @if (sectionHeaderVisual.ariaLabel) {\n <span class=\"section-title-avatar-sr-only\">{{ sectionHeaderVisual.ariaLabel }}</span>\n }\n }\n {{ getSectionTitle(section) }}\n @if (enableCustomization) {\n <button type=\"button\" class=\"inline-edit-btn\" praxisIconButton=\"edit\" size=\"dense\" (click)=\"openSectionEditor(section, 'title')\"\n aria-label=\"Editar t\u00EDtulo da se\u00E7\u00E3o\" matTooltip=\"Editar t\u00EDtulo\">\n </button>\n }\n </h3>\n }\n @if (getSectionDescription(section)) {\n <p class=\"section-description\" [class.body-large]=\"getSectionDescriptionStyle(section) === 'bodyLarge'\"\n [class.body-medium]=\"getSectionDescriptionStyle(section) === 'bodyMedium'\"\n [class.body-small]=\"getSectionDescriptionStyle(section) === 'bodySmall'\"\n [style.marginBottom.px]=\"getSectionDescriptionGapBottom(section) ?? 8\" [style.color]=\"getSectionDescriptionColor(section) || null\"\n [class.align-center]=\"getSectionHeaderAlign(section) === 'center'\">\n {{ getSectionDescription(section) }}\n @if (enableCustomization) {\n <button type=\"button\" class=\"inline-edit-btn\" praxisIconButton=\"edit\" size=\"dense\"\n (click)=\"openSectionEditor(section, 'description')\" aria-label=\"Editar descri\u00E7\u00E3o da se\u00E7\u00E3o\"\n matTooltip=\"Editar descri\u00E7\u00E3o\">\n </button>\n }\n </p>\n }\n </div>\n @if (getSectionHeaderActions(section).length) {\n <div class=\"section-heading-actions\" [class.align-center]=\"getSectionHeaderAlign(section) === 'center'\">\n @for (action of getSectionHeaderActions(section); track action.id) {\n <button\n type=\"button\"\n class=\"section-heading-action-btn\"\n [praxisIconButton]=\"action.icon\"\n size=\"compact\"\n [busy]=\"action.loading\"\n [disabled]=\"isSectionHeaderActionDisabled(action)\"\n [matTooltip]=\"getSectionHeaderActionTooltip(action)\"\n [attr.aria-label]=\"action.label\"\n [attr.aria-busy]=\"action.loading ? 'true' : null\"\n [ngClass]=\"getSectionHeaderActionNgClass(action)\"\n [ngStyle]=\"getSectionHeaderActionStyles(action)\"\n (click)=\"onSectionHeaderActionClick(section, action, $event)\"\n >\n @if (action.loading) {\n <span class=\"section-heading-action-sr-only\">{{ getSectionHeaderActionLoadingLabel(action) }}</span>\n }\n </button>\n }\n </div>\n }\n @if (isSectionCollapsible(section)) {\n <button type=\"button\" class=\"section-collapse-btn\" [praxisIconButton]=\"isSectionCollapsed(section) ? 'expand_more' : 'expand_less'\" size=\"compact\"\n (click)=\"toggleSectionCollapse($event, section)\" [attr.aria-expanded]=\"!isSectionCollapsed(section)\"\n [attr.aria-controls]=\"sectionPanelId(section, sectionIndex)\"\n [attr.aria-label]=\"isSectionCollapsed(section) ? 'Expandir se\u00E7\u00E3o' : 'Recolher se\u00E7\u00E3o'\">\n </button>\n }\n </div>\n }\n\n <div class=\"section-body\" [class.collapsed]=\"isSectionCollapsed(section)\"\n [attr.id]=\"sectionPanelId(section, sectionIndex)\"\n [attr.role]=\"getSectionTitle(section) ? 'region' : null\"\n [attr.aria-labelledby]=\"getSectionTitle(section) ? sectionPanelId(section, sectionIndex) + '-title' : null\">\n @if (!isSectionCollapsed(section)) {\n @if (sectionIndex === 0) {\n @let targetSummary = getActionTargetRecordSummary();\n @if (targetSummary) {\n <div class=\"form-action-target-banner\" data-testid=\"form-action-target-banner\">\n <div class=\"form-action-target-banner__header\">\n <span class=\"form-action-target-banner__eyebrow\">{{ actionTargetSelectedRecordLabel }}</span>\n @if (targetSummary.id) {\n <span class=\"form-action-target-banner__id\">#{{ targetSummary.id }}</span>\n }\n @if (targetSummary.badges.length) {\n <div class=\"form-action-target-banner__badges\">\n @for (badge of targetSummary.badges; track badge.label) {\n <span\n class=\"form-action-target-banner__badge\"\n [attr.data-tone]=\"badge.tone\"\n >{{ badge.value }}</span>\n }\n </div>\n }\n </div>\n @if (targetSummary.title) {\n <div class=\"form-action-target-banner__title\">{{ targetSummary.title }}</div>\n }\n @if (targetSummary.subtitle) {\n <div class=\"form-action-target-banner__subtitle\">{{ targetSummary.subtitle }}</div>\n }\n </div>\n }\n }\n @for (row of section.rows; track (row.id ?? $index); let rowIndex = $index) {\n @if (isRowVisible(row)) {\n <div class=\"row-drop-wrapper\" [attr.data-section-id]=\"section.id\">\n <div #rowEl class=\"form-row grid-12 canvas-element\" data-canvas-type=\"row\" [attr.data-row-index]=\"rowIndex\"\n [attr.data-section-id]=\"section.id\" [attr.data-row-id]=\"row.id\" [style.--pfx-grid-gap.px]=\"getRowGap(row)\"\n [style.--pfx-field-gap.px]=\"getRowRowGap(row)\"\n [style.--pfx-mount-index]=\"rowIndex\"\n [style.marginBottom.px]=\"rowIndex < section.rows.length - 1 ? (getRowRowGap(row) ?? null) : null\"\n [ngClass]=\"getRowClasses(row)\" [ngStyle]=\"getRowStyles(row)\"\n (mouseenter)=\"onElementMouseEnter($event, 'row', row, rowEl)\" (mouseleave)=\"onElementMouseLeave($event)\"\n (click)=\"onElementClick($event, 'row', row, rowEl)\" [class.selected]=\"selectedElement?.domElement === rowEl\"\n [class.hovered]=\"hoveredElement?.domElement === rowEl && selectedElement?.domElement !== rowEl\">\n @for (column of row.columns; track (column.id ?? $index); let colIndex = $index) {\n @if (isColumnVisible(column)) {\n <div class=\"column-drop-wrapper\" [attr.data-section-id]=\"section.id\" [attr.data-row-id]=\"row.id\">\n <div #colEl class=\"form-column canvas-element\" [ngClass]=\"getColumnClasses(column, row)\"\n [style.padding.px]=\"getColumnPadding(column)\" [style.--pfx-field-gap.px]=\"getRowRowGap(row)\"\n [ngStyle]=\"getColumnStyles(column)\" [attr.data-testid]=\"column.testId || null\"\n [attr.data-row-gap]=\"getRowRowGap(row)\" data-canvas-type=\"column\" [attr.data-column-index]=\"colIndex\"\n [attr.data-row-index]=\"rowIndex\" [attr.data-section-id]=\"section.id\" [attr.data-row-id]=\"row.id\"\n [attr.data-column-id]=\"column.id\" (mouseenter)=\"onElementMouseEnter($event, 'column', column, colEl)\"\n (mouseleave)=\"onElementMouseLeave($event)\" (click)=\"onElementClick($event, 'column', column, colEl)\"\n [class.selected]=\"selectedElement?.domElement === colEl\"\n [class.hovered]=\"hoveredElement?.domElement === colEl && selectedElement?.domElement !== colEl\">\n @for (renderItem of getColumnRenderItems(column); track renderItem.id) {\n @if (renderItem.kind === 'fields') {\n <ng-container dynamicFieldLoader [fields]=\"getRenderableFieldsForLoader(renderItem.fields)\" [formGroup]=\"form\"\n [enableExternalControlBinding]=\"true\"\n [readonlyMode]=\"effectiveReadonly\"\n [disabledMode]=\"effectiveDisabledMode\"\n [presentationMode]=\"presentationForLoader\" [visible]=\"visibleGlobal === null ? null : visibleGlobal\"\n [canvasMode]=\"enableCustomization\" (canvasMouseEnter)=\"onFieldMouseEnter($event)\"\n (canvasMouseLeave)=\"onFieldMouseLeave($event)\" (canvasClick)=\"onFieldClick($event)\"\n (canvasFocus)=\"onFieldFocus($event)\"\n (renderError)=\"onFieldRenderError($event)\">\n </ng-container>\n } @else {\n <praxis-rich-content\n class=\"form-layout-rich-content\"\n [ngClass]=\"renderItem.className || null\"\n [ngStyle]=\"renderItem.style || null\"\n [document]=\"renderItem.document\"\n [layout]=\"renderItem.layout\"\n [rootClassName]=\"renderItem.rootClassName || ''\"\n [context]=\"getEditorialRichContentContext()\"\n [hostCapabilities]=\"richContentHostCapabilities\"\n ></praxis-rich-content>\n }\n }\n </div>\n </div>\n } }\n </div>\n </div>\n }\n }\n } @else {\n <div class=\"section-collapsed-placeholder\">\n <mat-icon aria-hidden=\"true\" [praxisIcon]=\"'unfold_more'\"></mat-icon>\n <span>{{ getSectionCollapsedSummary(section) }}</span>\n </div>\n }\n @if (isLastVisibleSection(section) && beforeActionsPlacement === 'insideLastSection' && formBlocksBeforeActions?.nodes?.length) {\n <section class=\"form-editorial-blocks form-editorial-blocks-before-actions\" data-editorial-placement=\"beforeActions\">\n <praxis-rich-content\n [document]=\"formBlocksBeforeActionsDocument\"\n [context]=\"getEditorialRichContentContext()\"\n [hostCapabilities]=\"richContentHostCapabilities\"\n ></praxis-rich-content>\n </section>\n }\n @if (actionPlacement === 'insideLastSection' && isLastVisibleSection(section) && !(effectivePresentation\n || effectiveReadonly)) {\n <praxis-form-actions data-actions-placement=\"insideLastSection\" [actions]=\"effectiveActions\"\n [isSubmitting]=\"submitting\" [formIsValid]=\"effectiveFormIsValid\" [submitError]=\"submitError\" [formId]=\"formId\"\n [actionOverrides]=\"actionRuleProps\" [invalidRequiredFieldLabels]=\"invalidRequiredFieldLabels\"\n [suppressInvalidSubmitHint]=\"entityHydrationPending\"\n [editorialVisualContext]=\"hasEditorialVisualContext()\"\n (action)=\"onFormAction($event)\"></praxis-form-actions>\n }\n </div>\n <!-- Overlay de bloqueio durante submiss\u00E3o -->\n @if (submitting) {\n <div class=\"form-blocking-overlay\" aria-live=\"polite\">\n <mat-progress-spinner\n diameter=\"40\"\n color=\"primary\"\n [attr.aria-label]=\"config.messages?.loading?.submit || 'Salvando formul\u00E1rio'\"\n ></mat-progress-spinner>\n <p>{{ config.messages?.loading?.submit || 'Salvando...' }}</p>\n </div>\n }\n </div>\n\n @if (enableCustomization && selectedElement?.domElement === sectionEl) {\n <div class=\"add-section-container\">\n <div class=\"add-section-line\"></div>\n <button mat-fab color=\"primary\" aria-label=\"Adicionar nova se\u00E7\u00E3o\" (click)=\"addNewSectionAfter(sectionIndex)\"\n matTooltip=\"Adicionar nova se\u00E7\u00E3o aqui\">\n <mat-icon [praxisIcon]=\"'add'\"></mat-icon>\n </button>\n <div class=\"add-section-line\"></div>\n </div>\n }\n }\n </div>\n }\n\n @if (beforeActionsPlacement !== 'insideLastSection' && formBlocksBeforeActions?.nodes?.length) {\n <section class=\"form-editorial-blocks form-editorial-blocks-before-actions\" data-editorial-placement=\"beforeActions\">\n <praxis-rich-content\n [document]=\"formBlocksBeforeActionsDocument\"\n [context]=\"getEditorialRichContentContext()\"\n [hostCapabilities]=\"richContentHostCapabilities\"\n ></praxis-rich-content>\n </section>\n }\n\n @if (actionPlacement === 'afterSections' && !(effectivePresentation || effectiveReadonly)) {\n <praxis-form-actions data-actions-placement=\"afterSections\" [actions]=\"effectiveActions\" [isSubmitting]=\"submitting\"\n [formIsValid]=\"effectiveFormIsValid\" [submitError]=\"submitError\" [formId]=\"formId\"\n [actionOverrides]=\"actionRuleProps\" [invalidRequiredFieldLabels]=\"invalidRequiredFieldLabels\"\n [suppressInvalidSubmitHint]=\"entityHydrationPending\"\n [editorialVisualContext]=\"hasEditorialVisualContext()\"\n (action)=\"onFormAction($event)\"></praxis-form-actions>\n }\n\n @if (formBlocksAfter?.nodes?.length) {\n <section class=\"form-editorial-blocks form-editorial-blocks-after\" data-editorial-placement=\"after\">\n <praxis-rich-content\n [document]=\"formBlocksAfterDocument\"\n [context]=\"getEditorialRichContentContext()\"\n [hostCapabilities]=\"richContentHostCapabilities\"\n ></praxis-rich-content>\n </section>\n }\n </form>\n </div>\n }\n @if (showAiAssistant && !enableCustomization && (mode === 'view' || mode === 'presentation' || mode === 'dossier') && !shouldShowContextEmptyState()) {\n <div class=\"ai-floating-assistant\">\n <button type=\"button\" praxisIconButton=\"auto_awesome\" size=\"compact\" (click)=\"openAiAssistant()\" [disabled]=\"isLoading || entityHydrationPending || entityReadFailed\"\n [attr.data-testid]=\"aiAssistantTriggerTestId('view-floating')\"\n aria-label=\"Abrir copiloto semantico Praxis do formulario\"\n matTooltip=\"Pedir ajuda sobre este formul\u00E1rio\">\n </button>\n </div>\n }\n @if (showAiAssistant && aiAssistantOpen && aiAssistantViewState) {\n <praxis-ai-assistant-shell\n [labels]=\"aiAssistantLabels\"\n [mode]=\"aiAssistantViewState.mode\"\n [state]=\"aiAssistantViewState.state\"\n [contextItems]=\"aiAssistantViewState.contextItems\"\n [attachments]=\"aiAssistantViewState.attachments\"\n [messages]=\"aiAssistantViewState.messages\"\n [quickReplies]=\"aiAssistantViewState.quickReplies\"\n [prompt]=\"aiAssistantPrompt\"\n [statusText]=\"aiAssistantViewState.statusText\"\n [errorText]=\"aiAssistantViewState.errorText\"\n [busy]=\"aiAssistantViewState.state === 'processing' || aiAssistantViewState.state === 'applying'\"\n [canApply]=\"aiAssistantViewState.canApply\"\n [layout]=\"aiAssistantLayout\"\n testIdPrefix=\"dynamic-form-ai-assistant\"\n panelTestId=\"dynamic-form-ai-assistant-panel\"\n submitTestId=\"dynamic-form-ai-assistant-submit\"\n applyTestId=\"dynamic-form-ai-assistant-apply\"\n (promptChange)=\"onAiAssistantPromptChange($event)\"\n (submitPrompt)=\"onAiAssistantSubmit($event)\"\n (apply)=\"onAiAssistantApply()\"\n (retryTurn)=\"onAiAssistantRetry()\"\n (cancelTurn)=\"onAiAssistantCancel()\"\n (quickReply)=\"onAiAssistantQuickReply($event)\"\n (editMessage)=\"onAiAssistantEditMessage($event)\"\n (resendMessage)=\"onAiAssistantResendMessage($event)\"\n (layoutChange)=\"onAiAssistantLayoutChange($event)\"\n (close)=\"closeAiAssistant()\"\n ></praxis-ai-assistant-shell>\n }\n }\n", styles: ["@charset \"UTF-8\";.span-xs-1{grid-column:span 1}.span-xs-2{grid-column:span 2}.span-xs-3{grid-column:span 3}.span-xs-4{grid-column:span 4}.span-xs-5{grid-column:span 5}.span-xs-6{grid-column:span 6}.span-xs-7{grid-column:span 7}.span-xs-8{grid-column:span 8}.span-xs-9{grid-column:span 9}.span-xs-10{grid-column:span 10}.span-xs-11{grid-column:span 11}.span-xs-12{grid-column:span 12}.offset-xs-0{margin-left:0%}.offset-xs-1{margin-left:calc(1 / 12 * 100%)}.offset-xs-2{margin-left:calc(2 / 12 * 100%)}.offset-xs-3{margin-left:25%}.offset-xs-4{margin-left:calc(4 / 12 * 100%)}.offset-xs-5{margin-left:calc(5 / 12 * 100%)}.offset-xs-6{margin-left:50%}.offset-xs-7{margin-left:calc(7 / 12 * 100%)}.offset-xs-8{margin-left:calc(8 / 12 * 100%)}.offset-xs-9{margin-left:75%}.offset-xs-10{margin-left:calc(10 / 12 * 100%)}.offset-xs-11{margin-left:calc(11 / 12 * 100%)}.order-xs--12{order:-12}.order-xs--11{order:-11}.order-xs--10{order:-10}.order-xs--9{order:-9}.order-xs--8{order:-8}.order-xs--7{order:-7}.order-xs--6{order:-6}.order-xs--5{order:-5}.order-xs--4{order:-4}.order-xs--3{order:-3}.order-xs--2{order:-2}.order-xs--1{order:-1}.order-xs-0{order:0}.order-xs-1{order:1}.order-xs-2{order:2}.order-xs-3{order:3}.order-xs-4{order:4}.order-xs-5{order:5}.order-xs-6{order:6}.order-xs-7{order:7}.order-xs-8{order:8}.order-xs-9{order:9}.order-xs-10{order:10}.order-xs-11{order:11}.order-xs-12{order:12}.hidden-xs{display:none}@container praxis-form-row (min-width: 600px){.span-sm-1{grid-column:span 1}.span-sm-2{grid-column:span 2}.span-sm-3{grid-column:span 3}.span-sm-4{grid-column:span 4}.span-sm-5{grid-column:span 5}.span-sm-6{grid-column:span 6}.span-sm-7{grid-column:span 7}.span-sm-8{grid-column:span 8}.span-sm-9{grid-column:span 9}.span-sm-10{grid-column:span 10}.span-sm-11{grid-column:span 11}.span-sm-12{grid-column:span 12}.offset-sm-0{margin-left:0%}.offset-sm-1{margin-left:calc(1 / 12 * 100%)}.offset-sm-2{margin-left:calc(2 / 12 * 100%)}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:calc(4 / 12 * 100%)}.offset-sm-5{margin-left:calc(5 / 12 * 100%)}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:calc(7 / 12 * 100%)}.offset-sm-8{margin-left:calc(8 / 12 * 100%)}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:calc(10 / 12 * 100%)}.offset-sm-11{margin-left:calc(11 / 12 * 100%)}.order-sm--12{order:-12}.order-sm--11{order:-11}.order-sm--10{order:-10}.order-sm--9{order:-9}.order-sm--8{order:-8}.order-sm--7{order:-7}.order-sm--6{order:-6}.order-sm--5{order:-5}.order-sm--4{order:-4}.order-sm--3{order:-3}.order-sm--2{order:-2}.order-sm--1{order:-1}.order-sm-0{order:0}.order-sm-1{order:1}.order-sm-2{order:2}.order-sm-3{order:3}.order-sm-4{order:4}.order-sm-5{order:5}.order-sm-6{order:6}.order-sm-7{order:7}.order-sm-8{order:8}.order-sm-9{order:9}.order-sm-10{order:10}.order-sm-11{order:11}.order-sm-12{order:12}.hidden-sm{display:none}}@container praxis-form-row (min-width: 900px){.span-md-1{grid-column:span 1}.span-md-2{grid-column:span 2}.span-md-3{grid-column:span 3}.span-md-4{grid-column:span 4}.span-md-5{grid-column:span 5}.span-md-6{grid-column:span 6}.span-md-7{grid-column:span 7}.span-md-8{grid-column:span 8}.span-md-9{grid-column:span 9}.span-md-10{grid-column:span 10}.span-md-11{grid-column:span 11}.span-md-12{grid-column:span 12}.offset-md-0{margin-left:0%}.offset-md-1{margin-left:calc(1 / 12 * 100%)}.offset-md-2{margin-left:calc(2 / 12 * 100%)}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:calc(4 / 12 * 100%)}.offset-md-5{margin-left:calc(5 / 12 * 100%)}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:calc(7 / 12 * 100%)}.offset-md-8{margin-left:calc(8 / 12 * 100%)}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:calc(10 / 12 * 100%)}.offset-md-11{margin-left:calc(11 / 12 * 100%)}.order-md--12{order:-12}.order-md--11{order:-11}.order-md--10{order:-10}.order-md--9{order:-9}.order-md--8{order:-8}.order-md--7{order:-7}.order-md--6{order:-6}.order-md--5{order:-5}.order-md--4{order:-4}.order-md--3{order:-3}.order-md--2{order:-2}.order-md--1{order:-1}.order-md-0{order:0}.order-md-1{order:1}.order-md-2{order:2}.order-md-3{order:3}.order-md-4{order:4}.order-md-5{order:5}.order-md-6{order:6}.order-md-7{order:7}.order-md-8{order:8}.order-md-9{order:9}.order-md-10{order:10}.order-md-11{order:11}.order-md-12{order:12}.hidden-md{display:none}}@container praxis-form-row (min-width: 1200px){.span-lg-1{grid-column:span 1}.span-lg-2{grid-column:span 2}.span-lg-3{grid-column:span 3}.span-lg-4{grid-column:span 4}.span-lg-5{grid-column:span 5}.span-lg-6{grid-column:span 6}.span-lg-7{grid-column:span 7}.span-lg-8{grid-column:span 8}.span-lg-9{grid-column:span 9}.span-lg-10{grid-column:span 10}.span-lg-11{grid-column:span 11}.span-lg-12{grid-column:span 12}.offset-lg-0{margin-left:0%}.offset-lg-1{margin-left:calc(1 / 12 * 100%)}.offset-lg-2{margin-left:calc(2 / 12 * 100%)}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:calc(4 / 12 * 100%)}.offset-lg-5{margin-left:calc(5 / 12 * 100%)}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:calc(7 / 12 * 100%)}.offset-lg-8{margin-left:calc(8 / 12 * 100%)}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:calc(10 / 12 * 100%)}.offset-lg-11{margin-left:calc(11 / 12 * 100%)}.order-lg--12{order:-12}.order-lg--11{order:-11}.order-lg--10{order:-10}.order-lg--9{order:-9}.order-lg--8{order:-8}.order-lg--7{order:-7}.order-lg--6{order:-6}.order-lg--5{order:-5}.order-lg--4{order:-4}.order-lg--3{order:-3}.order-lg--2{order:-2}.order-lg--1{order:-1}.order-lg-0{order:0}.order-lg-1{order:1}.order-lg-2{order:2}.order-lg-3{order:3}.order-lg-4{order:4}.order-lg-5{order:5}.order-lg-6{order:6}.order-lg-7{order:7}.order-lg-8{order:8}.order-lg-9{order:9}.order-lg-10{order:10}.order-lg-11{order:11}.order-lg-12{order:12}.hidden-lg{display:none}}@container praxis-form-row (min-width: 1536px){.span-xl-1{grid-column:span 1}.span-xl-2{grid-column:span 2}.span-xl-3{grid-column:span 3}.span-xl-4{grid-column:span 4}.span-xl-5{grid-column:span 5}.span-xl-6{grid-column:span 6}.span-xl-7{grid-column:span 7}.span-xl-8{grid-column:span 8}.span-xl-9{grid-column:span 9}.span-xl-10{grid-column:span 10}.span-xl-11{grid-column:span 11}.span-xl-12{grid-column:span 12}.offset-xl-0{margin-left:0%}.offset-xl-1{margin-left:calc(1 / 12 * 100%)}.offset-xl-2{margin-left:calc(2 / 12 * 100%)}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:calc(4 / 12 * 100%)}.offset-xl-5{margin-left:calc(5 / 12 * 100%)}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:calc(7 / 12 * 100%)}.offset-xl-8{margin-left:calc(8 / 12 * 100%)}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:calc(10 / 12 * 100%)}.offset-xl-11{margin-left:calc(11 / 12 * 100%)}.order-xl--12{order:-12}.order-xl--11{order:-11}.order-xl--10{order:-10}.order-xl--9{order:-9}.order-xl--8{order:-8}.order-xl--7{order:-7}.order-xl--6{order:-6}.order-xl--5{order:-5}.order-xl--4{order:-4}.order-xl--3{order:-3}.order-xl--2{order:-2}.order-xl--1{order:-1}.order-xl-0{order:0}.order-xl-1{order:1}.order-xl-2{order:2}.order-xl-3{order:3}.order-xl-4{order:4}.order-xl-5{order:5}.order-xl-6{order:6}.order-xl-7{order:7}.order-xl-8{order:8}.order-xl-9{order:9}.order-xl-10{order:10}.order-xl-11{order:11}.order-xl-12{order:12}.hidden-xl{display:none}}.canvas-mode-enabled{--canvas-hit: 14px}.canvas-mode-enabled .canvas-element{position:relative;z-index:0;border-radius:8px;outline:2px solid transparent;outline-offset:2px;transition:outline-color .2s ease,outline-style .2s ease}.canvas-mode-enabled .canvas-element:before{content:\"\";position:absolute;inset:calc(-1 * var(--canvas-hit));pointer-events:none;border-radius:inherit;background:transparent}.canvas-mode-enabled .canvas-element[data-canvas-type=section]{--outline-color: var(--md-sys-color-primary)}.canvas-mode-enabled .canvas-element[data-canvas-type=row]{--outline-color: var(--md-sys-color-secondary)}.canvas-mode-enabled .canvas-element[data-canvas-type=column],.canvas-mode-enabled .canvas-element[data-canvas-type=field]{--outline-color: var(--md-sys-color-tertiary)}.canvas-mode-enabled .canvas-element[data-canvas-type=actions]{--outline-color: var(--md-sys-color-primary)}.canvas-mode-enabled .canvas-element.hovered:not(.selected){outline-color:var(--outline-color, var(--md-sys-color-primary));outline-style:dashed}.canvas-mode-enabled .canvas-element.selected{outline-color:var(--outline-color, var(--md-sys-color-primary));outline-style:solid;box-shadow:0 0 0 2px var(--outline-color, var(--md-sys-color-primary))}.canvas-mode-enabled .canvas-element.hovered{z-index:var(--praxis-layer-authoring-hover, 300)}.canvas-mode-enabled .canvas-element.selected{z-index:var(--praxis-layer-authoring-selected, 320)}.section-drop-wrapper,.row-drop-wrapper,.column-drop-wrapper{display:contents}.add-section-container{display:flex;align-items:center;justify-content:center;padding:.5rem 0;margin:-.5rem 0;position:relative;z-index:var(--praxis-layer-authoring-insert, 280)}.add-section-container .add-section-line{flex-grow:1;height:1px;background:repeating-linear-gradient(90deg,var(--md-sys-color-outline-variant),var(--md-sys-color-outline-variant) 4px,transparent 4px,transparent 8px)}.add-section-container button{margin:0 1rem;transform:scale(.85)}:host{display:block;position:relative;--pfx-editorial-form-radius: var(--pfx-form-section-radius, 8px);--pfx-editorial-form-border: var( --pfx-form-stroke, var(--pdx-color-border-subtle, var(--md-sys-color-outline-variant)) );--pfx-editorial-form-surface: var( --pfx-form-section-surface, var(--pdx-color-surface, var(--md-sys-color-surface-container)) );--pfx-editorial-form-surface-muted: var( --pdx-color-surface-muted, var(--md-sys-color-surface-container-low) );--pfx-form-shell-surface: color-mix( in srgb, var(--pfx-editorial-form-surface) 36%, transparent );--pfx-form-section-divider: color-mix( in srgb, var(--pfx-editorial-form-border) 68%, transparent );--pfx-form-footer-surface: color-mix( in srgb, var(--pfx-editorial-form-surface) 70%, var(--pfx-editorial-form-surface-muted) 30% );--pfx-form-footer-border: color-mix( in srgb, var(--pfx-editorial-form-border) 76%, transparent );--pfx-form-shell-padding: clamp(.9rem, 1.4vw, 1.2rem)}.form-config-controls{position:relative;top:auto;margin:0;display:flex;align-items:center;gap:.35rem;z-index:60;background:color-mix(in srgb,var(--pfx-form-shell-surface) 88%,var(--md-sys-color-surface) 12%);padding:8px var(--pfx-form-shell-padding);border:1px solid var(--pfx-form-footer-border);border-bottom-color:color-mix(in srgb,var(--pfx-form-footer-border) 72%,transparent);border-radius:var(--pfx-editorial-form-radius) var(--pfx-editorial-form-radius) 0 0;-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);box-shadow:none;min-width:0;justify-content:flex-end;pointer-events:none;opacity:.96;transition:opacity .16s ease,border-color .16s ease}.form-config-controls>*{pointer-events:auto}.form-config-controls:hover,.form-config-controls:focus-within{opacity:1;border-color:color-mix(in srgb,var(--md-sys-color-primary) 26%,var(--md-sys-color-outline-variant) 74%)}.form-config-controls .praxis-icon-button{color:var(--md-sys-color-on-surface-variant)}.form-config-controls .praxis-icon-button:hover{color:var(--md-sys-color-primary)}.ai-floating-assistant{position:sticky;right:0;bottom:12px;margin-top:14px;margin-left:auto;width:fit-content;z-index:70;pointer-events:none}.ai-floating-assistant button{pointer-events:auto;display:inline-flex}.ai-floating-assistant .ai-trigger-btn{box-shadow:0 12px 28px #0f172a24}.config-button{color:var(--md-sys-color-primary)}.form-loading{display:flex;flex-direction:column;align-items:stretch;justify-content:center;padding:1.25rem;text-align:left;color:var(--md-sys-color-on-surface);gap:1rem;min-height:220px;border:1px solid color-mix(in srgb,var(--md-sys-color-primary) 14%,var(--md-sys-color-outline-variant) 86%);border-radius:8px;background:linear-gradient(135deg,color-mix(in srgb,var(--md-sys-color-primary) 8%,transparent),transparent 42%),color-mix(in srgb,var(--md-sys-color-surface-container-low) 78%,var(--md-sys-color-surface) 22%);box-shadow:0 12px 28px #0f172a14}.entity-read-region{position:relative;min-width:0}.entity-read-feedback{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:flex-start;gap:1rem;padding:2rem 1rem;box-sizing:border-box;text-align:center;color:var(--md-sys-color-on-surface)}.entity-read-feedback p{margin:0;max-width:40ch}.form-loading-header{display:flex;align-items:center;gap:.85rem}.form-loading-copy{min-width:0}.form-loading p{margin:0}.form-loading-title{font-weight:700;color:var(--md-sys-color-on-surface)}.form-loading-subtitle{margin-top:.2rem;font-size:.875rem;color:var(--md-sys-color-on-surface-variant)}.form-loading-skeleton{display:grid;gap:.7rem}.form-loading-line,.form-loading-field{display:block;overflow:hidden;position:relative;border-radius:6px;background:color-mix(in srgb,var(--md-sys-color-surface-container-high) 74%,var(--md-sys-color-primary) 6%)}.form-loading-line:after,.form-loading-field:after{content:\"\";position:absolute;inset:0;transform:translate(-100%);background:linear-gradient(90deg,transparent,color-mix(in srgb,var(--md-sys-color-primary) 16%,var(--md-sys-color-on-surface) 18%),transparent);animation:form-loading-shimmer 1.4s ease-in-out infinite}.form-loading-line{height:12px}.form-loading-line-title{width:min(42%,240px)}.form-loading-line-short{width:min(64%,360px)}.form-loading-field{height:44px}.form-loading-field-wide{height:72px}@keyframes form-loading-shimmer{to{transform:translate(100%)}}@media(prefers-reduced-motion:reduce){.form-loading-line:after,.form-loading-field:after{animation:none;transform:none;opacity:.28}}.form-error{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:3rem;text-align:center;color:var(--md-sys-color-error);gap:1rem;border:1px solid var(--md-sys-color-error);border-radius:8px;background-color:var(--md-sys-color-error-container);margin:1rem;box-shadow:0 12px 30px #7f1d1d1f}.form-error h3{margin:0;color:var(--md-sys-color-on-error-container)}.form-error p{margin:0;color:var(--md-sys-color-on-error-container);opacity:.8}.form-error button{margin-top:.5rem}.pfx-form-info-banner{margin-bottom:14px;padding:12px 14px;border-radius:16px;border:1px solid color-mix(in srgb,var(--md-sys-color-primary) 18%,var(--md-sys-color-outline-variant) 82%);background:color-mix(in srgb,var(--md-sys-color-primary-container) 24%,var(--md-sys-color-surface) 76%);color:var(--md-sys-color-on-surface);display:flex;align-items:flex-start;justify-content:space-between;gap:14px}.pfx-form-info-banner .text{font-size:.92rem;line-height:1.5;font-weight:600}.pfx-form-info-banner .actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:8px}.praxis-dynamic-form{display:flex;flex-direction:column;max-width:100%;min-width:0;transition:all .3s ease;position:relative;font-family:inherit;font-size:inherit;color:inherit;--pfx-editorial-form-surface: var( --pfx-form-section-surface, var(--md-sys-color-surface-container) );--pfx-editorial-form-surface-muted: var( --pdx-color-surface-muted, var(--md-sys-color-surface-container-low) );--pfx-editorial-form-border: var( --pfx-form-stroke, var(--pdx-color-border-subtle, var(--md-sys-color-outline-variant)) );--pfx-editorial-form-text: var( --pdx-color-text-primary, var(--md-sys-color-on-surface) );--pfx-editorial-form-text-muted: var( --pdx-color-text-secondary, var(--md-sys-color-on-surface-variant) );--pfx-editorial-form-field-surface: color-mix( in srgb, var(--pfx-editorial-form-surface-muted) 76%, var(--pfx-editorial-form-surface) 24% );--pfx-editorial-form-field-outline: color-mix( in srgb, var(--pfx-editorial-form-border) 88%, transparent );--pfx-editorial-form-accent: var( --pdx-color-primary, var(--md-sys-color-primary) );--pfx-editorial-form-accent-text: var(--md-sys-color-on-primary);--pfx-editorial-form-radius: var(--pfx-form-section-radius, 8px);--pfx-editorial-form-field-radius: var(--pfx-form-field-radius, 4px);--pfx-editorial-form-border-width: 1px;--pfx-editorial-form-field-border-width: 1px;--pfx-editorial-form-shadow: none;--pfx-form-shell-surface: color-mix( in srgb, var(--pfx-editorial-form-surface) 36%, transparent );--pfx-form-section-surface-flat: color-mix( in srgb, var(--pfx-editorial-form-surface) 78%, var(--pfx-editorial-form-surface-muted) 22% );--pfx-form-section-divider: color-mix( in srgb, var(--pfx-editorial-form-border) 68%, transparent );--pfx-form-label-strong: color-mix( in srgb, var(--pfx-editorial-form-text) 96%, white 4% );--pfx-form-label-muted: color-mix( in srgb, var(--pfx-editorial-form-text-muted) 92%, var(--pfx-editorial-form-text) 8% );--pfx-form-field-surface-rest: color-mix( in srgb, var(--pfx-editorial-form-field-surface) 82%, var(--pfx-editorial-form-surface) 18% );--pfx-form-field-surface-focus: color-mix( in srgb, var(--pfx-editorial-form-accent) 4%, var(--pfx-form-field-surface-rest) 96% );--pfx-form-field-min-height: 48px;--pfx-form-section-padding: clamp(1.1rem, 1.8vw, 1.5rem);--pfx-form-section-gap: 22px;--pdx-presentation-label-size: var(--pfx-pres-compact-label-size, .78rem);--pdx-presentation-value-size: var(--pfx-pres-compact-value-size, 1rem);--pdx-presentation-icon-size: var(--pfx-pres-icon-size, 18px);--pdx-presentation-row-gap: var(--pfx-pres-row-gap, .5rem);--pdx-presentation-column-gap: var(--pfx-pres-column-gap, .5rem);--pdx-presentation-section-gap: var(--pfx-pres-section-gap, .75rem);--pdx-presentation-label-width: var(--pfx-pres-label-width, 220px);--pdx-presentation-flag-height: var(--pfx-pres-boolean-min-height, 22px);--pdx-presentation-flag-radius: var(--pfx-pres-boolean-radius, 999px);--pdx-presentation-flag-padding: var(--pfx-pres-boolean-padding, 0 8px);--pdx-presentation-flag-active-color: var( --pfx-pres-boolean-active-color, var(--md-sys-color-primary) );--pdx-presentation-flag-active-bg: var( --pfx-pres-boolean-active-bg, color-mix(in srgb, var(--md-sys-color-primary) 14%, transparent) );--pdx-presentation-flag-inactive-color: var( --pfx-pres-boolean-inactive-color, var(--md-sys-color-on-surface-variant) );--pdx-presentation-flag-inactive-bg: var( --pfx-pres-boolean-inactive-bg, color-mix(in srgb, var(--md-sys-color-outline-variant) 34%, transparent) );--pfx-form-footer-surface: color-mix( in srgb, var(--pfx-editorial-form-surface) 70%, var(--pfx-editorial-form-surface-muted) 30% );--pfx-form-footer-border: color-mix( in srgb, var(--pfx-editorial-form-border) 76%, transparent )}.praxis-dynamic-form.canvas-mode-enabled{border:1px solid var(--pfx-form-footer-border);border-radius:var(--pfx-editorial-form-radius);background:linear-gradient(180deg,color-mix(in srgb,var(--pfx-form-shell-surface) 86%,transparent),color-mix(in srgb,var(--pfx-editorial-form-surface-muted) 42%,transparent));overflow:visible}.form-config-controls+.praxis-dynamic-form.canvas-mode-enabled{border-top:0;border-top-left-radius:0;border-top-right-radius:0}.praxis-dynamic-form.canvas-mode-enabled>.section-drop-wrapper,.praxis-dynamic-form.canvas-mode-enabled>.form-editorial-blocks{margin-inline:var(--pfx-form-shell-padding)}.praxis-dynamic-form.canvas-mode-enabled>.section-drop-wrapper:first-of-type,.praxis-dynamic-form.canvas-mode-enabled>.form-editorial-blocks:first-child{margin-top:var(--pfx-form-shell-padding)}.praxis-dynamic-form.canvas-mode-enabled>praxis-form-actions[data-actions-placement=afterSections]{display:block;margin-top:var(--pfx-form-shell-padding)}.praxis-dynamic-form.editorial-visual-context{--_pfx-editorial-host-text: var( --editorial-text-primary, var(--foreground, var(--mat-sys-on-surface, #1d1b20)) );--_pfx-editorial-host-text-muted: var( --editorial-text-secondary, var( --muted-foreground, color-mix(in srgb, var(--_pfx-editorial-host-text) 64%, transparent) ) );--_pfx-editorial-host-surface: var( --editorial-surface-primary, var(--card, var(--mat-sys-surface-container, #ffffff)) );--_pfx-editorial-host-surface-muted: var( --editorial-surface-secondary, var(--surface-dim, var(--muted, var(--mat-sys-surface-container-low, #f7f2fa))) );--_pfx-editorial-host-border: var( --editorial-border-color, var(--border, var(--mat-sys-outline-variant, #cac4d0)) );--_pfx-editorial-host-accent: var( --editorial-cta-primary, var(--editorial-accent, var(--primary, var(--mat-sys-primary, #6750a4))) );--_pfx-editorial-host-accent-text: var( --editorial-cta-primary-text, var( --editorial-accent-contrast, var(--primary-foreground, var(--mat-sys-on-primary, #ffffff)) ) );--_pfx-editorial-host-accent-container: var( --primary-container, color-mix(in srgb, var(--_pfx-editorial-host-accent) 16%, var(--_pfx-editorial-host-surface) 84%) );--_pfx-editorial-host-accent-container-text: var( --primary-container-fg, var(--_pfx-editorial-host-accent) );font-family:var(--editorial-body-font-family, inherit);font-size:var(--editorial-body-size, 1rem);color:var(--_pfx-editorial-host-text);--pfx-editorial-form-surface: var( --editorial-surface-primary, var(--pfx-form-section-surface, var(--_pfx-editorial-host-surface)) );--pfx-editorial-form-surface-muted: var( --editorial-surface-secondary, var(--_pfx-editorial-host-surface-muted) );--pfx-editorial-form-border: var( --editorial-border-color, var(--pfx-form-stroke, var(--_pfx-editorial-host-border)) );--pfx-editorial-form-text: var( --editorial-text-primary, var(--_pfx-editorial-host-text) );--pfx-editorial-form-text-muted: var( --editorial-text-secondary, color-mix( in srgb, var(--_pfx-editorial-host-text-muted) 86%, var(--_pfx-editorial-host-text) 14% ) );--pfx-editorial-form-accent: var( --editorial-cta-primary, var(--editorial-accent, var(--_pfx-editorial-host-accent)) );--pfx-editorial-form-accent-text: var( --editorial-cta-primary-text, var(--editorial-accent-contrast, var(--_pfx-editorial-host-accent-text)) );--pfx-editorial-form-accent-container: var(--_pfx-editorial-host-accent-container);--pfx-editorial-form-accent-container-text: var(--_pfx-editorial-host-accent-container-text);--pfx-editorial-form-radius: var(--editorial-card-radius, 18px);--pfx-editorial-form-field-radius: var( --editorial-field-radius, var(--editorial-card-radius, 14px) );--pfx-editorial-form-border-width: var(--editorial-card-border-width, 1px);--pfx-editorial-form-field-border-width: var(--editorial-field-border-width, 1px);--pfx-editorial-form-shadow: var(--editorial-card-shadow, none);--md-sys-color-surface: var( --pfx-editorial-form-surface, var(--md-sys-color-surface) );--md-sys-color-surface-container: var( --pfx-editorial-form-surface, var(--md-sys-color-surface-container) );--md-sys-color-surface-container-low: var( --pfx-editorial-form-surface-muted, var(--md-sys-color-surface-container-low) );--md-sys-color-surface-variant: var( --pfx-editorial-form-field-surface, var(--md-sys-color-surface-variant) );--md-sys-color-outline: var( --pfx-editorial-form-field-outline, var(--md-sys-color-outline) );--md-sys-color-outline-variant: var( --pfx-editorial-form-border, var(--md-sys-color-outline-variant) );--md-sys-color-on-surface: var( --editorial-text-primary, inherit );--md-sys-color-on-surface-variant: var( --editorial-text-secondary, inherit );--md-sys-color-primary: var( --pfx-editorial-form-accent, var(--md-sys-color-primary) );--md-sys-color-primary-container: var( --pfx-editorial-form-accent-container, var(--md-sys-color-primary-container) );--md-sys-color-on-primary-container: var( --pfx-editorial-form-accent-container-text, var(--md-sys-color-on-primary-container) );--md-sys-color-on-primary: var( --pfx-editorial-form-accent-text, var(--md-sys-color-on-primary) );--md-sys-color-on-surface-rgb: var( --editorial-text-primary-rgb, inherit );--mat-sys-on-surface: var( --editorial-text-primary, inherit );--mat-sys-on-surface-variant: var( --editorial-text-secondary, inherit );--mat-sys-on-surface-rgb: var( --editorial-text-primary-rgb, inherit );color:inherit;color-scheme:light}.praxis-dynamic-form.presentation-mode .form-row,.praxis-dynamic-form.readonly-mode .form-row{gap:var(--pdx-presentation-column-gap);margin-bottom:var(--pdx-presentation-row-gap)}.praxis-dynamic-form.presentation-mode{--pfx-pres-on-surface: var( --pdx-color-text-primary, var(--pfx-editorial-form-text, var(--pfx-form-label-strong, currentColor)) );--pfx-pres-on-surface-variant: var( --pdx-color-text-secondary, var( --pfx-editorial-form-text-muted, var( --pfx-form-label-muted, color-mix(in srgb, var(--pfx-pres-on-surface) 78%, transparent) ) ) )}.praxis-dynamic-form.presentation-mode .form-section,.praxis-dynamic-form.readonly-mode .form-section{padding:var(--pdx-presentation-section-gap) .875rem}.praxis-dynamic-form.pres-compact .form-row{gap:var(--pdx-presentation-column-gap, .35rem);margin-bottom:var(--pdx-presentation-row-gap, .35rem)}.praxis-dynamic-form.pres-compact .form-section{padding:var(--pdx-presentation-section-gap, .5rem) .75rem}.praxis-dynamic-form.pres-label-left .praxis-presentation{display:grid;grid-template-columns:minmax(0,var(--pfx-presentation-label-w, var(--pdx-presentation-label-width))) minmax(0,1fr);align-items:baseline;column-gap:var(--pdx-presentation-column-gap, 10px)}.praxis-dynamic-form.pres-label-left .praxis-presentation__label{text-align:right;margin-bottom:0}@media(max-width:480px){.praxis-dynamic-form.pres-label-left .praxis-presentation{grid-template-columns:minmax(0,1fr);row-gap:4px}.praxis-dynamic-form.pres-label-left .praxis-presentation__label{text-align:start}}.praxis-dynamic-form.praxis-dynamic-form--corporate-dossier .form-section:not(.section-appearance-plain),.praxis-dynamic-form .form-section.form-section--corporate-dossier:not(.section-appearance-plain),.praxis-dynamic-form .form-section[data-presentation-preset=corporate-dossier]:not(.section-appearance-plain){background:var(--md-sys-color-surface-container-low, #f8f9fa);border:1px solid var(--md-sys-color-outline-variant, #e0e2ec);border-radius:16px;padding:16px 20px;box-shadow:0 1px 3px #0000000a}.praxis-dynamic-form.praxis-dynamic-form--corporate-dossier .form-section .section-heading,.praxis-dynamic-form .form-section.form-section--corporate-dossier .section-heading,.praxis-dynamic-form .form-section[data-presentation-preset=corporate-dossier] .section-heading{margin-bottom:12px;padding-bottom:8px;border-bottom:1px solid var(--md-sys-color-outline-variant, #e0e2ec)}.praxis-dynamic-form.praxis-dynamic-form--corporate-dossier .form-section .section-title,.praxis-dynamic-form .form-section.form-section--corporate-dossier .section-title,.praxis-dynamic-form .form-section[data-presentation-preset=corporate-dossier] .section-title{font-size:.88rem;font-weight:700;letter-spacing:.05em;text-transform:uppercase;color:var(--md-sys-color-primary, #005ac1)}:host ::ng-deep .praxis-dynamic-form--corporate-dossier .praxis-presentation,:host ::ng-deep .form-section--corporate-dossier .praxis-presentation,:host ::ng-deep [data-presentation-preset=corporate-dossier] .praxis-presentation{padding:8px 0;border-bottom:1px dashed var(--md-sys-color-outline-variant, rgba(0, 0, 0, .08))}:host ::ng-deep .praxis-dynamic-form--corporate-dossier .form-row:last-child .praxis-presentation,:host ::ng-deep .praxis-dynamic-form--corporate-dossier .praxis-presentation:last-child,:host ::ng-deep .form-section--corporate-dossier .form-row:last-child .praxis-presentation,:host ::ng-deep .form-section--corporate-dossier .praxis-presentation:last-child,:host ::ng-deep [data-presentation-preset=corporate-dossier] .form-row:last-child .praxis-presentation,:host ::ng-deep [data-presentation-preset=corporate-dossier] .praxis-presentation:last-child{border-bottom:none}:host ::ng-deep .praxis-dynamic-form--corporate-dossier .praxis-presentation__label,:host ::ng-deep .form-section--corporate-dossier .praxis-presentation__label,:host ::ng-deep [data-presentation-preset=corporate-dossier] .praxis-presentation__label{font-size:.74rem;font-weight:600;text-transform:uppercase;letter-spacing:.05em;color:var(--md-sys-color-on-surface-variant, #44474f);margin-bottom:3px}:host ::ng-deep .praxis-dynamic-form--corporate-dossier .praxis-presentation__value,:host ::ng-deep .form-section--corporate-dossier .praxis-presentation__value,:host ::ng-deep [data-presentation-preset=corporate-dossier] .praxis-presentation__value{font-size:.95rem;font-weight:600;color:var(--md-sys-color-on-surface, #1a1c1e);line-height:1.4}.praxis-dynamic-form.praxis-dynamic-form--editorial-card .form-section:not(.section-appearance-plain),.praxis-dynamic-form .form-section.form-section--editorial-card:not(.section-appearance-plain),.praxis-dynamic-form .form-section[data-presentation-preset=editorial-card]:not(.section-appearance-plain){background:var(--pfx-editorial-form-surface, var(--md-sys-color-surface-container-low, var(--mat-sys-surface-container-low)));border:1px solid var(--pfx-editorial-form-border, var(--md-sys-color-outline-variant, #e0e2ec));border-radius:20px;padding:24px;box-shadow:0 2px 8px #0000000d}.praxis-dynamic-form.praxis-dynamic-form--editorial-card .form-section .section-heading,.praxis-dynamic-form .form-section.form-section--editorial-card .section-heading,.praxis-dynamic-form .form-section[data-presentation-preset=editorial-card] .section-heading{margin-bottom:16px;padding-bottom:10px;border-bottom:1px solid color-mix(in srgb,var(--md-sys-color-outline-variant, #e0e2ec) 40%,transparent)}.praxis-dynamic-form.praxis-dynamic-form--editorial-card .form-section .section-title,.praxis-dynamic-form .form-section.form-section--editorial-card .section-title,.praxis-dynamic-form .form-section[data-presentation-preset=editorial-card] .section-title{font-size:1.15rem;font-weight:700;color:var(--pfx-editorial-form-accent, var(--md-sys-color-primary, #005ac1))}:host ::ng-deep .praxis-dynamic-form--editorial-card .praxis-presentation,:host ::ng-deep .form-section--editorial-card .praxis-presentation,:host ::ng-deep [data-presentation-preset=editorial-card] .praxis-presentation{padding:10px 0;border-bottom:1px solid color-mix(in srgb,var(--md-sys-color-outline-variant, #e0e2ec) 35%,transparent)}:host ::ng-deep .praxis-dynamic-form--editorial-card .form-row:last-child .praxis-presentation,:host ::ng-deep .praxis-dynamic-form--editorial-card .praxis-presentation:last-child,:host ::ng-deep .form-section--editorial-card .form-row:last-child .praxis-presentation,:host ::ng-deep .form-section--editorial-card .praxis-presentation:last-child,:host ::ng-deep [data-presentation-preset=editorial-card] .form-row:last-child .praxis-presentation,:host ::ng-deep [data-presentation-preset=editorial-card] .praxis-presentation:last-child{border-bottom:none}:host ::ng-deep .praxis-dynamic-form--editorial-card .praxis-presentation__label,:host ::ng-deep .form-section--editorial-card .praxis-presentation__label,:host ::ng-deep [data-presentation-preset=editorial-card] .praxis-presentation__label{font-size:.8rem;font-weight:500;color:var(--pfx-editorial-form-text-muted, var(--md-sys-color-on-surface-variant, #44474f));margin-bottom:4px}:host ::ng-deep .praxis-dynamic-form--editorial-card .praxis-presentation__value,:host ::ng-deep .form-section--editorial-card .praxis-presentation__value,:host ::ng-deep [data-presentation-preset=editorial-card] .praxis-presentation__value{font-size:1rem;font-weight:600;color:var(--pfx-editorial-form-text, var(--md-sys-color-on-surface, #1a1c1e));line-height:1.5}.praxis-dynamic-form.praxis-dynamic-form--compact-presentation .form-section:not(.section-appearance-plain),.praxis-dynamic-form .form-section.form-section--compact-presentation:not(.section-appearance-plain),.praxis-dynamic-form .form-section[data-presentation-preset=compact-presentation]:not(.section-appearance-plain){background:transparent;border:1px solid color-mix(in srgb,var(--md-sys-color-outline-variant, #e0e2ec) 50%,transparent);border-radius:8px;padding:10px 14px;box-shadow:none}.praxis-dynamic-form.praxis-dynamic-form--compact-presentation .form-section .section-heading,.praxis-dynamic-form .form-section.form-section--compact-presentation .section-heading,.praxis-dynamic-form .form-section[data-presentation-preset=compact-presentation] .section-heading{margin-bottom:8px;padding-bottom:4px;border-bottom:1px solid color-mix(in srgb,var(--md-sys-color-outline-variant, #e0e2ec) 25%,transparent)}.praxis-dynamic-form.praxis-dynamic-form--compact-presentation .form-section .section-title,.praxis-dynamic-form .form-section.form-section--compact-presentation .section-title,.praxis-dynamic-form .form-section[data-presentation-preset=compact-presentation] .section-title{font-size:.82rem;font-weight:700;letter-spacing:.03em;text-transform:uppercase;color:var(--md-sys-color-on-surface-variant, #44474f)}:host ::ng-deep .praxis-dynamic-form--compact-presentation .praxis-presentation,:host ::ng-deep .form-section--compact-presentation .praxis-presentation,:host ::ng-deep [data-presentation-preset=compact-presentation] .praxis-presentation{padding:4px 0;border-bottom:none}:host ::ng-deep .praxis-dynamic-form--compact-presentation .praxis-presentation__label,:host ::ng-deep .form-section--compact-presentation .praxis-presentation__label,:host ::ng-deep [data-presentation-preset=compact-presentation] .praxis-presentation__label{font-size:.72rem;font-weight:600;color:var(--md-sys-color-on-surface-variant, #44474f);margin-bottom:2px}:host ::ng-deep .praxis-dynamic-form--compact-presentation .praxis-presentation__value,:host ::ng-deep .form-section--compact-presentation .praxis-presentation__value,:host ::ng-deep [data-presentation-preset=compact-presentation] .praxis-presentation__value{font-size:.88rem;font-weight:500;color:var(--md-sys-color-on-surface, #1a1c1e);line-height:1.35}:host-context(.mdc-theme-dark) .praxis-dynamic-form.praxis-dynamic-form--corporate-dossier .form-section:not(.section-appearance-plain),:host-context(.mdc-theme-dark) .praxis-dynamic-form .form-section.form-section--corporate-dossier:not(.section-appearance-plain),:host-context(.mdc-theme-dark) .praxis-dynamic-form .form-section[data-presentation-preset=corporate-dossier]:not(.section-appearance-plain),:host-context(.theme-dark) .praxis-dynamic-form.praxis-dynamic-form--corporate-dossier .form-section:not(.section-appearance-plain),:host-context(.theme-dark) .praxis-dynamic-form .form-section.form-section--corporate-dossier:not(.section-appearance-plain),:host-context(.theme-dark) .praxis-dynamic-form .form-section[data-presentation-preset=corporate-dossier]:not(.section-appearance-plain){background:var(--md-sys-color-surface-container-low);border-color:color-mix(in srgb,var(--md-sys-color-outline-variant) 70%,transparent);box-shadow:0 2px 8px #0000004d}:host-context(.mdc-theme-dark) .praxis-dynamic-form.praxis-dynamic-form--editorial-card .form-section:not(.section-appearance-plain),:host-context(.mdc-theme-dark) .praxis-dynamic-form .form-section.form-section--editorial-card:not(.section-appearance-plain),:host-context(.mdc-theme-dark) .praxis-dynamic-form .form-section[data-presentation-preset=editorial-card]:not(.section-appearance-plain),:host-context(.theme-dark) .praxis-dynamic-form.praxis-dynamic-form--editorial-card .form-section:not(.section-appearance-plain),:host-context(.theme-dark) .praxis-dynamic-form .form-section.form-section--editorial-card:not(.section-appearance-plain),:host-context(.theme-dark) .praxis-dynamic-form .form-section[data-presentation-preset=editorial-card]:not(.section-appearance-plain){background:var(--pfx-editorial-form-surface, var(--md-sys-color-surface-container-low));border-color:color-mix(in srgb,var(--md-sys-color-outline-variant) 70%,transparent);box-shadow:0 4px 16px #0006}.form-section{border:1px solid var(--pfx-form-section-divider);border-radius:var(--pfx-editorial-form-radius);padding:var(--pfx-form-section-padding);max-width:100%;min-width:0;background:var(--pfx-form-section-surface-flat);box-shadow:none;transition:all .2s ease;position:relative}.praxis-dynamic-form.editorial-visual-context .form-section:not(.section-appearance-plain){border:var(--pfx-editorial-form-border-width) solid var(--pfx-editorial-form-border)!important;background:var(--pfx-editorial-form-surface)!important;color:var(--pfx-editorial-form-text);box-shadow:var(--editorial-card-shadow, none)}.praxis-dynamic-form.editorial-visual-context .form-section.section-appearance-step{background-color:var(--pfx-editorial-form-surface)!important;background-image:linear-gradient(180deg,color-mix(in srgb,var(--editorial-accent, var(--md-sys-color-primary)) 6%,transparent) 0%,transparent 132px)!important;background-repeat:no-repeat!important}.section-drop-wrapper>.form-section{margin-bottom:var(--pfx-section-gap, 20px)}.section-drop-wrapper:last-of-type>.form-section{margin-bottom:0}.praxis-dynamic-form>praxis-form-actions[data-actions-placement=afterSections]{margin-top:var(--pfx-actions-gap-top, var(--pfx-section-gap, 20px))}.section-title{margin:0 0 var(--pfx-section-title-mb, 12px) 0;font-family:var(--editorial-title-font-family, var(--editorial-body-font-family, inherit));font-size:var(--editorial-step-title-size, 1.12rem);font-weight:700;color:var(--pfx-form-label-strong)}.section-heading{position:relative;display:flex;align-items:flex-start;gap:12px;margin-bottom:18px;padding-bottom:var(--pfx-form-section-heading-divider-gap, 18px)}.section-heading:after{content:\"\";position:absolute;right:0;bottom:0;left:0;height:2px;pointer-events:none;background:linear-gradient(90deg,transparent 0%,color-mix(in srgb,var(--pfx-form-section-divider) 18%,transparent) 8%,var(--pfx-form-section-divider) 46%,var(--pfx-form-section-divider) 54%,color-mix(in srgb,var(--pfx-form-section-divider) 18%,transparent) 92%,transparent 100%);border-radius:999px;-webkit-mask-image:linear-gradient(90deg,transparent 0%,black 18%,black 82%,transparent 100%);mask-image:linear-gradient(90deg,transparent 0%,black 18%,black 82%,transparent 100%)}.section-heading.title-only{padding-bottom:var(--pfx-form-section-heading-title-only-divider-gap, 10px)}:host(.pfx-form-section-divider-inline-title) .section-heading.title-only{padding-bottom:var(--pfx-form-section-heading-title-only-inline-divider-gap, 0)}:host(.pfx-form-section-divider-inline-title) .section-heading.title-only:after{display:none}.section-heading.align-center{flex-direction:column;align-items:center;text-align:center}.section-heading.align-center .section-heading-text{display:grid;justify-items:center}.section-step-label{display:inline-flex;align-items:center;min-height:24px;padding:0 10px;margin:0 0 8px;border-radius:999px;background:color-mix(in srgb,var(--pfx-editorial-form-accent) 10%,transparent);color:color-mix(in srgb,var(--pfx-editorial-form-accent) 84%,var(--pfx-form-label-strong) 16%);font-size:.72rem;font-weight:800;font-family:var(--editorial-title-font-family, var(--editorial-body-font-family, inherit));letter-spacing:.08em;text-transform:uppercase}.section-heading-text{flex:1 1 auto;min-width:0}.section-heading-actions{display:inline-flex;align-items:center;align-self:flex-start;flex-wrap:wrap;gap:4px;margin-left:auto}.section-heading-actions.align-center{align-self:center;margin-left:0}.section-heading-action-btn{color:var(--pfx-form-label-muted)}.section-heading-action-btn.tone-primary{color:var(--md-sys-color-primary)}.section-heading-action-btn.tone-accent,.section-heading-action-btn.tone-secondary{color:var(--md-sys-color-tertiary)}.section-heading-action-btn.tone-warn,.section-heading-action-btn.tone-danger,.section-heading-action-btn.tone-error{color:var(--md-sys-color-error)}.section-heading-action-btn .mat-mdc-progress-spinner,.section-heading-action-btn mat-progress-spinner{--mdc-circular-progress-active-indicator-color: currentColor}.section-heading-action-btn.loading{opacity:.72;pointer-events:none}.section-heading-action-sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.section-collapse-btn{margin-left:4px;color:var(--pfx-form-label-muted)}.section-title.title-large{font:var(--mdc-typography-title-large, 500 22px/28px system-ui)}.section-title.title-medium{font:var(--mdc-typography-title-medium, 500 16px/24px system-ui)}.section-title.title-small{font:var(--mdc-typography-title-small, 500 14px/20px system-ui)}.section-title.headline-small{font:var(--mdc-typography-headline-small, 600 24px/32px system-ui)}.section-title.title-large,.section-title.title-medium,.section-title.title-small,.section-title.headline-small{font-family:var(--editorial-title-font-family, var(--editorial-body-font-family, inherit));font-weight:var(--editorial-title-weight, 600)}.section-description{margin:0;font-family:var(--editorial-body-font-family, inherit);font-size:.93rem;color:var(--pfx-form-label-muted);line-height:1.6}.section-description.body-large{font:var(--mdc-typography-body-large, 400 16px/24px system-ui)}.section-description.body-medium{font:var(--mdc-typography-body-medium, 400 14px/20px system-ui)}.section-description.body-small{font:var(--mdc-typography-body-small, 400 12px/16px system-ui)}.section-description.body-large,.section-description.body-medium,.section-description.body-small{font-family:var(--editorial-body-font-family, inherit);font-weight:var(--editorial-body-weight, 400)}.section-title.align-center,.section-description.align-center,.section-step-label.align-center{text-align:center}.praxis-dynamic-form .form-section.section-appearance-plain{border-color:transparent;border-width:0;border-radius:0;padding:0;background:transparent;box-shadow:none}.praxis-dynamic-form .form-section.section-appearance-plain.section-has-divider{padding-bottom:16px;border-bottom:1px solid var(--pfx-form-section-divider, var(--md-sys-color-outline-variant, #e0e2ec))}.praxis-dynamic-form .section-drop-wrapper:last-of-type>.form-section.section-appearance-plain.section-has-divider,.praxis-dynamic-form>.form-section.section-appearance-plain.section-has-divider:last-of-type{border-bottom:none;padding-bottom:0}.form-section.section-appearance-plain .section-heading{margin-bottom:14px}.form-section.section-appearance-step{border-radius:var(--pfx-editorial-form-radius);padding:var(--pfx-form-section-padding);background:var(--pfx-form-section-surface-flat);border-color:var(--pfx-form-section-divider);box-shadow:none}.praxis-dynamic-form.editorial-visual-context .form-section.section-appearance-step{border-radius:var(--editorial-card-radius, 20px);box-shadow:none}.form-section.section-appearance-step .section-heading{margin-bottom:22px;padding-bottom:var(--pfx-form-section-heading-divider-gap, 16px)}.form-section.section-appearance-step .section-heading.title-only{padding-bottom:var(--pfx-form-section-heading-title-only-divider-gap, 16px)}:host(.pfx-form-section-divider-inline-title) .form-section.section-appearance-step .section-heading.title-only{padding-bottom:var(--pfx-form-section-heading-title-only-inline-divider-gap, 0)}.form-section.section-appearance-step .section-title{font:var(--mdc-typography-title-large, 700 22px/28px system-ui);color:var(--pfx-form-label-strong);margin-bottom:8px}.form-section.section-appearance-step .section-description{color:var(--pfx-form-label-muted);max-width:60ch}.form-section.section-appearance-step .section-step-label{min-height:24px;padding:0 10px;margin-bottom:10px;box-shadow:none}.form-section.section-appearance-step .section-heading.align-center .section-description{max-width:52ch}.form-section.section-appearance-step .section-body{display:grid;gap:8px;padding-top:0}.form-section.section-appearance-step .form-row{margin-bottom:var(--pfx-field-gap, 1rem)}.form-section.section-appearance-step .form-column{gap:var(--pfx-field-gap, 12px)}.form-section .form-editorial-blocks{display:grid;gap:16px}.form-section .form-editorial-blocks[data-editorial-placement=beforeActions]{margin-top:24px;padding-top:18px;border-top:1px solid var(--pfx-form-section-divider)}.form-section.section-appearance-step .form-editorial-blocks[data-editorial-placement=beforeActions]{gap:18px}.form-section.section-appearance-step .form-editorial-blocks[data-editorial-placement=beforeActions]>*+*{margin-top:2px}.praxis-dynamic-form:not(.canvas-mode-enabled)>praxis-form-actions[data-actions-placement=afterSections]{margin-top:18px}.praxis-dynamic-form>.form-editorial-blocks[data-editorial-placement=after]{margin-top:6px}:host-context(.mdc-theme-dark) .form-section.section-appearance-step,:host-context(.theme-dark) .form-section.section-appearance-step{border-color:color-mix(in srgb,var(--pfx-editorial-form-border) 82%,transparent);box-shadow:none}:host-context(.mdc-theme-dark) .form-section.section-appearance-step .section-title,:host-context(.theme-dark) .form-section.section-appearance-step .section-title{color:color-mix(in srgb,var(--pfx-editorial-form-text) 96%,white)}:host-context(.mdc-theme-dark) .form-section.section-appearance-step .section-description,:host-context(.theme-dark) .form-section.section-appearance-step .section-description{color:color-mix(in srgb,var(--pfx-editorial-form-text-muted) 86%,var(--pfx-editorial-form-text) 14%)}:host-context(.mdc-theme-dark) .section-step-label,:host-context(.theme-dark) .section-step-label{background:color-mix(in srgb,var(--md-sys-color-primary-container) 54%,transparent);color:color-mix(in srgb,var(--md-sys-color-primary) 88%,white)}:host-context(.mdc-theme-dark) .form-section .form-editorial-blocks[data-editorial-placement=beforeActions],:host-context(.theme-dark) .form-section .form-editorial-blocks[data-editorial-placement=beforeActions]{border-top-color:color-mix(in srgb,var(--md-sys-color-outline-variant) 90%,transparent)}.inline-edit-btn{margin-left:6px;vertical-align:middle}.section-body.collapsed{border:1px dashed var(--md-sys-color-outline-variant);background:var(--md-sys-color-surface-container-low);border-radius:6px;padding:8px 10px}.section-collapsed-placeholder{display:flex;align-items:center;gap:8px;color:var(--md-sys-color-on-surface-variant);font-size:.95rem}.section-collapsed-placeholder mat-icon{font-size:20px;width:20px;height:20px}.form-row{display:flex;gap:1.1rem;margin-bottom:var(--pfx-field-gap, 1.1rem);max-width:100%;min-width:0;transition:all .2s ease;border-radius:6px;position:relative}.praxis-dynamic-form.pfx-mounting .form-row{opacity:0;transform:translateY(var(--pdx-form-mount-offset, 6px));animation:pdxFormMount var(--pdx-form-mount-duration, .16s) ease-out both;animation-delay:calc(var(--pfx-mount-index, 0) * var(--pdx-form-mount-stagger, 20ms))}@media(prefers-reduced-motion:reduce){.praxis-dynamic-form.pfx-mounting .form-row{animation:none;opacity:1;transform:none}}@keyframes pdxFormMount{to{opacity:1;transform:translateY(0)}}.praxis-dynamic-form .mat-mdc-form-field{width:100%;margin-bottom:var(--pfx-field-gap, 10px);font-family:inherit;--mdc-filled-text-field-container-color: var(--pfx-form-field-surface-rest);--mdc-filled-text-field-focus-active-indicator-color: var(--pfx-editorial-form-accent);--mdc-filled-text-field-active-indicator-color: var(--pfx-editorial-form-field-outline);--mdc-filled-text-field-hover-active-indicator-color: var(--pfx-editorial-form-accent);--mdc-filled-text-field-focus-label-text-color: var(--pfx-editorial-form-accent);--mdc-filled-text-field-label-text-color: var(--pfx-form-label-muted);--mdc-filled-text-field-input-text-color: var(--pfx-editorial-form-text);--mdc-filled-text-field-caret-color: var(--pfx-editorial-form-accent);--mdc-filled-text-field-input-text-placeholder-color: color-mix( in srgb, var(--pfx-editorial-form-text-muted) 82%, transparent );--mdc-outlined-text-field-outline-color: var(--pfx-editorial-form-field-outline);--mdc-outlined-text-field-hover-outline-color: var(--pfx-editorial-form-accent);--mdc-outlined-text-field-focus-outline-color: var(--pfx-editorial-form-accent);--mdc-outlined-text-field-focus-label-text-color: var(--pfx-editorial-form-accent);--mdc-outlined-text-field-label-text-color: var(--pfx-form-label-muted);--mdc-outlined-text-field-input-text-color: var(--pfx-editorial-form-text);--mdc-filled-text-field-container-shape: var(--pfx-editorial-form-field-radius);--mdc-outlined-text-field-container-shape: var(--pfx-editorial-form-field-radius);--mdc-filled-text-field-active-indicator-height: var(--pfx-editorial-form-field-border-width);--mdc-filled-text-field-focus-active-indicator-height: var(--pfx-editorial-form-field-border-width);--mdc-outlined-text-field-outline-width: var(--pfx-editorial-form-field-border-width);--mdc-outlined-text-field-focus-outline-width: var(--pfx-editorial-form-field-border-width);--mat-select-enabled-trigger-text-color: var(--pfx-editorial-form-text);--mat-select-enabled-arrow-color: var(--pfx-form-label-muted);--mat-form-field-enabled-select-arrow-color: var(--pfx-form-label-muted);--mat-form-field-focus-select-arrow-color: var(--pfx-editorial-form-accent);--mat-form-field-hover-state-layer-opacity: 0;--mat-form-field-focus-state-layer-opacity: 0}.praxis-dynamic-form.editorial-visual-context .mat-mdc-form-field{font-family:var(--editorial-body-font-family, inherit)}.praxis-dynamic-form .mat-mdc-text-field-wrapper,.praxis-dynamic-form .mdc-text-field{background:var(--pfx-form-field-surface-rest);border-radius:var(--pfx-editorial-form-field-radius);min-height:var(--pfx-form-field-min-height);transition:background-color .16s ease,box-shadow .16s ease,border-color .16s ease}.praxis-dynamic-form.editorial-visual-context .mat-mdc-text-field-wrapper,.praxis-dynamic-form.editorial-visual-context .mdc-text-field,.praxis-dynamic-form.editorial-visual-context .mdc-text-field--filled,.praxis-dynamic-form.editorial-visual-context .mdc-text-field--outlined{background-color:var(--pfx-form-field-surface-rest)!important;background:var(--pfx-form-field-surface-rest)!important}.praxis-dynamic-form .mat-mdc-form-field .mdc-floating-label,.praxis-dynamic-form .mat-mdc-form-field .mat-mdc-form-field-hint,.praxis-dynamic-form .mat-mdc-form-field .mat-mdc-form-field-error,.praxis-dynamic-form .mat-mdc-form-field .mat-mdc-form-field-required-marker,.praxis-dynamic-form .mat-mdc-form-field .mat-mdc-select-arrow,.praxis-dynamic-form .mat-mdc-form-field .mat-mdc-select-placeholder,.praxis-dynamic-form .mat-mdc-form-field .mat-mdc-form-field-icon-suffix,.praxis-dynamic-form .mat-mdc-form-field .mat-mdc-form-field-icon-prefix{color:var(--pfx-form-label-muted)}.praxis-dynamic-form .mat-mdc-input-element,.praxis-dynamic-form .mat-mdc-select-value-text,.praxis-dynamic-form .mat-mdc-form-field-infix,.praxis-dynamic-form .mat-mdc-select-min-line{color:var(--pfx-editorial-form-text)}.praxis-dynamic-form .mat-mdc-form-field:hover .mat-mdc-text-field-wrapper,.praxis-dynamic-form .mat-mdc-form-field:hover .mdc-text-field,.praxis-dynamic-form .mat-mdc-form-field.mat-focused .mat-mdc-text-field-wrapper,.praxis-dynamic-form .mat-mdc-form-field.mat-focused .mdc-text-field{background:var(--pfx-form-field-surface-focus)}.praxis-dynamic-form.editorial-visual-context .mat-mdc-input-element,.praxis-dynamic-form.editorial-visual-context .mat-mdc-select-value-text,.praxis-dynamic-form.editorial-visual-context .mat-mdc-form-field-infix,.praxis-dynamic-form.editorial-visual-context .mat-mdc-select-min-line,.praxis-dynamic-form.editorial-visual-context .mdc-text-field__input{color:var(--pfx-editorial-form-text)!important;-webkit-text-fill-color:var(--pfx-editorial-form-text)!important}.praxis-dynamic-form.editorial-visual-context .mat-mdc-form-field .mdc-floating-label,.praxis-dynamic-form.editorial-visual-context .mat-mdc-form-field .mat-mdc-form-field-hint,.praxis-dynamic-form.editorial-visual-context .mat-mdc-form-field .mat-mdc-form-field-error,.praxis-dynamic-form.editorial-visual-context .mat-mdc-form-field .mat-mdc-form-field-required-marker,.praxis-dynamic-form.editorial-visual-context .mat-mdc-form-field .mat-mdc-select-arrow,.praxis-dynamic-form.editorial-visual-context .mat-mdc-form-field .mat-mdc-select-placeholder,.praxis-dynamic-form.editorial-visual-context .mat-mdc-form-field .mat-mdc-form-field-icon-suffix,.praxis-dynamic-form.editorial-visual-context .mat-mdc-form-field .mat-mdc-form-field-icon-prefix{color:var(--pfx-editorial-form-text-muted)!important}.praxis-dynamic-form.editorial-visual-context .mat-mdc-floating-label,.praxis-dynamic-form.editorial-visual-context .mdc-floating-label,.praxis-dynamic-form.editorial-visual-context .mdc-text-field__input::placeholder{color:color-mix(in srgb,var(--pfx-editorial-form-text) 68%,transparent)!important}.praxis-dynamic-form.editorial-visual-context .mat-mdc-input-element::placeholder,.praxis-dynamic-form.editorial-visual-context textarea.mat-mdc-input-element::placeholder{color:color-mix(in srgb,var(--pfx-editorial-form-text) 58%,transparent)!important}.praxis-dynamic-form .mat-mdc-radio-button,.praxis-dynamic-form .mat-mdc-checkbox,.praxis-dynamic-form .mat-mdc-slide-toggle{--mdc-radio-selected-icon-color: var(--pfx-editorial-form-accent);--mdc-radio-selected-hover-icon-color: var(--pfx-editorial-form-accent);--mdc-radio-selected-focus-icon-color: var(--pfx-editorial-form-accent);--mdc-checkbox-selected-checkmark-color: var(--pfx-editorial-form-accent-text);--mdc-checkbox-selected-focus-icon-color: var(--pfx-editorial-form-accent);--mdc-checkbox-selected-hover-icon-color: var(--pfx-editorial-form-accent);--mdc-checkbox-selected-icon-color: var(--pfx-editorial-form-accent);--mdc-switch-selected-focus-state-layer-color: var(--pfx-editorial-form-accent);--mdc-switch-selected-handle-color: var(--pfx-editorial-form-accent);--mdc-switch-selected-track-color: color-mix(in srgb, var(--pfx-editorial-form-accent) 45%, #fff)}.praxis-dynamic-form [data-field-type=input],.praxis-dynamic-form [data-field-type=textarea],.praxis-dynamic-form [data-field-type=email],.praxis-dynamic-form [data-field-type=password],.praxis-dynamic-form [data-field-type=url],.praxis-dynamic-form [data-field-type=search],.praxis-dynamic-form [data-field-type=phone],.praxis-dynamic-form [data-field-type=numericTextBox],.praxis-dynamic-form [data-field-type=currency],.praxis-dynamic-form [data-field-type=cpfCnpj],.praxis-dynamic-form [data-field-type=date],.praxis-dynamic-form [data-field-type=dateInput],.praxis-dynamic-form [data-field-type=dateRange],.praxis-dynamic-form [data-field-type=dateTimeLocal],.praxis-dynamic-form [data-field-type=time],.praxis-dynamic-form [data-field-type=timePicker],.praxis-dynamic-form [data-field-type=timeRange],.praxis-dynamic-form [data-field-type=month],.praxis-dynamic-form [data-field-type=week],.praxis-dynamic-form [data-field-type=yearInput],.praxis-dynamic-form [data-field-type=select],.praxis-dynamic-form [data-field-type=multi-select],.praxis-dynamic-form [data-field-type=searchable-select],.praxis-dynamic-form [data-field-type=async-select],.praxis-dynamic-form [data-field-type=autocomplete],.praxis-dynamic-form [data-field-type=entityLookup],.praxis-dynamic-form [data-field-type=tree-select],.praxis-dynamic-form [data-field-type=multi-select-tree],.praxis-dynamic-form [data-field-type=priceRange],.praxis-dynamic-form [data-field-type=file-upload]{display:block;width:100%;min-width:0}.praxis-dynamic-form .mat-mdc-form-field-subscript-wrapper{min-height:var(--pfx-subscript-min-h, 22px)}.form-row:last-child{margin-bottom:0}.form-column{display:grid;grid-template-columns:minmax(0,1fr);align-content:start;gap:var(--pfx-field-gap, 10px);flex:1;max-width:100%;min-width:0;transition:all .2s ease;border-radius:4px;position:relative}.form-layout-rich-content{display:block;width:100%;max-width:100%;min-width:0;margin-bottom:var(--pfx-field-gap, 10px);color:var(--pfx-editorial-form-text-muted, var(--md-sys-color-on-surface-variant));font:var(--mdc-typography-body-medium, 400 14px/20px system-ui);overflow-wrap:anywhere}:host ::ng-deep .form-layout-rich-content .prx-rich-content-root{display:grid;gap:8px;min-width:0;max-width:100%}:host ::ng-deep .form-layout-rich-content .prx-rich-node{min-width:0;max-width:100%}:host ::ng-deep .form-layout-rich-content .prx-rich-text{color:inherit;line-height:20px}:host ::ng-deep .form-layout-rich-content .praxis-form-visual-block--note,:host ::ng-deep .form-layout-rich-content .praxis-rich-content-notice{border:1px solid color-mix(in srgb,var(--pfx-editorial-form-accent) 12%,var(--pfx-editorial-form-border) 88%);border-left:3px solid var(--pfx-editorial-form-accent);border-radius:8px;background:color-mix(in srgb,var(--pfx-editorial-form-accent-container) 12%,var(--pfx-editorial-form-surface-muted) 88%)}:host ::ng-deep .form-layout-rich-content .praxis-form-visual-block--note{display:grid;grid-template-columns:20px minmax(0,1fr);gap:10px;align-items:flex-start;padding:11px 12px}:host ::ng-deep .form-layout-rich-content .praxis-form-visual-block--note:before{content:\"info\";display:inline-flex;align-items:center;justify-content:center;width:20px;height:20px;color:var(--pfx-editorial-form-accent);font-family:Material Symbols Outlined;font-size:20px;font-weight:400;line-height:20px}:host ::ng-deep .form-layout-rich-content .praxis-form-visual-block--note .prx-rich-text{color:var(--pfx-editorial-form-text-muted)}:host ::ng-deep .form-layout-rich-content .praxis-rich-content-notice{padding:10px 12px;color:var(--pfx-editorial-form-text)}:host ::ng-deep .form-layout-rich-content .praxis-rich-content-notice .prx-rich-compose{align-items:flex-start;gap:10px}:host ::ng-deep .form-layout-rich-content .praxis-rich-content-notice .prx-rich-icon{color:var(--pfx-editorial-form-accent);font-size:20px;line-height:20px;margin-top:1px}:host ::ng-deep .form-layout-rich-content .praxis-rich-content-divider{display:grid;grid-template-columns:minmax(24px,1fr) auto minmax(24px,1fr);align-items:center;gap:10px;color:var(--pfx-editorial-form-text-muted);font:var(--mdc-typography-label-small, 600 12px/16px system-ui);text-transform:uppercase}:host ::ng-deep .form-layout-rich-content .praxis-rich-content-divider:before,:host ::ng-deep .form-layout-rich-content .praxis-rich-content-divider:after{content:\"\";height:1px;background:var(--pfx-editorial-form-border)}:host ::ng-deep .form-layout-rich-content .prx-rich-card{gap:6px;padding:12px 14px;border-color:var(--pfx-editorial-form-border);border-radius:8px;background:var(--pfx-editorial-form-surface-muted);color:var(--pfx-editorial-form-text);box-shadow:none}:host ::ng-deep .form-layout-rich-content .prx-rich-card-title{color:var(--pfx-editorial-form-text);font:var(--mdc-typography-title-small, 600 14px/20px system-ui)}:host ::ng-deep .form-layout-rich-content .prx-rich-card-subtitle,:host ::ng-deep .form-layout-rich-content .prx-rich-metric-caption{color:var(--pfx-editorial-form-text-muted)}:host ::ng-deep .form-layout-rich-content .prx-rich-card .prx-rich-text{color:var(--pfx-editorial-form-text-muted)}:host ::ng-deep .form-layout-rich-content .prx-rich-badge{background:var(--pfx-editorial-form-accent-container);color:var(--pfx-editorial-form-accent-container-text)}.form-row.grid-12{container-type:inline-size;container-name:praxis-form-row;display:grid;grid-template-columns:repeat(12,minmax(0,1fr));gap:var(--pfx-grid-gap, 16px)}.align-start{align-self:flex-start}.align-center{align-self:center}.align-end{align-self:flex-end}.align-stretch{align-self:stretch}.form-blocking-overlay{position:absolute;inset:0;background:transparent;color:var(--md-sys-color-on-surface);backdrop-filter:blur(2px) saturate(103%);-webkit-backdrop-filter:blur(2px) saturate(103%);display:flex;align-items:center;justify-content:center;flex-direction:column;gap:12px;z-index:10;pointer-events:all}@media(max-width:768px){.column-drop-wrapper,.row-drop-wrapper,.form-layout-rich-content,.praxis-dynamic-form .mat-mdc-form-field,.praxis-dynamic-form .mat-mdc-text-field-wrapper,.praxis-dynamic-form .mdc-text-field{max-width:100%;min-width:0}:host ::ng-deep .praxis-dynamic-form .pfx-field-shell,:host ::ng-deep .praxis-dynamic-form .pfx-field-shell-wrapper,:host ::ng-deep .praxis-dynamic-form .pfx-field-shell-host,:host ::ng-deep .praxis-dynamic-form .mat-mdc-form-field,:host ::ng-deep .praxis-dynamic-form .mat-mdc-text-field-wrapper,:host ::ng-deep .praxis-dynamic-form .mdc-text-field{width:100%;max-width:100%;min-width:0}.form-section{padding:clamp(.75rem,4vw,1rem)}.section-heading{gap:10px;margin-bottom:16px;padding-bottom:var(--pfx-form-section-heading-divider-gap, 14px)}.section-heading.title-only{padding-bottom:var(--pfx-form-section-heading-title-only-divider-gap, 8px)}}.section-title{display:flex;align-items:center;gap:8px}:host(.pfx-form-section-divider-inline-title) .section-heading.title-only .section-title{width:100%;min-width:0}:host(.pfx-form-section-divider-inline-title) .section-heading.title-only .section-title:after{content:\"\";display:block;flex:1 1 auto;min-width:var(--pfx-form-section-title-inline-divider-min-width, 48px);height:2px;margin-left:var(--pfx-form-section-title-inline-divider-gap, 12px);pointer-events:none;background:linear-gradient(90deg,var(--pfx-form-section-divider) 0%,var(--pfx-form-section-divider) 62%,color-mix(in srgb,var(--pfx-form-section-divider) 18%,transparent) 88%,transparent 100%);border-radius:999px;-webkit-mask-image:linear-gradient(90deg,black 0%,black 72%,transparent 100%);mask-image:linear-gradient(90deg,black 0%,black 72%,transparent 100%)}:host(.pfx-form-section-divider-inline-title) .section-heading.align-center .section-title:after{display:none}@media(max-width:640px){:host(.pfx-form-section-divider-inline-title) .section-heading.title-only{padding-bottom:var(--pfx-form-section-heading-title-only-divider-gap, 8px)}:host(.pfx-form-section-divider-inline-title) .section-heading.title-only:after{display:block}:host(.pfx-form-section-divider-inline-title) .section-heading.title-only .section-title{width:auto}:host(.pfx-form-section-divider-inline-title) .section-heading.title-only .section-title:after{display:none}}.section-title .section-title-icon{font-size:1.25em;line-height:1}.section-title-avatar{--_pfx-form-section-avatar-size: var(--pfx-form-section-avatar-size-md, var(--pfx-form-section-avatar-size, 32px));display:inline-flex;align-items:center;justify-content:center;width:var(--_pfx-form-section-avatar-size);height:var(--_pfx-form-section-avatar-size);border-radius:999px;flex:0 0 var(--_pfx-form-section-avatar-size);overflow:hidden}.section-title-avatar.size-sm{--_pfx-form-section-avatar-size: var(--pfx-form-section-avatar-size-sm, 24px)}.section-title-avatar.size-md{--_pfx-form-section-avatar-size: var(--pfx-form-section-avatar-size-md, var(--pfx-form-section-avatar-size, 32px))}.section-title-avatar.size-lg{--_pfx-form-section-avatar-size: var(--pfx-form-section-avatar-size-lg, 40px)}.section-title-avatar-image{object-fit:cover;border:1px solid color-mix(in srgb,var(--pfx-form-section-divider) 72%,transparent);background:var(--pfx-form-section-surface-flat)}.section-title-avatar-text,.section-title-avatar-placeholder{background:color-mix(in srgb,var(--pfx-editorial-form-accent) 14%,var(--pfx-form-section-surface-flat));color:color-mix(in srgb,var(--pfx-editorial-form-accent) 82%,var(--pfx-form-label-strong) 18%);font-size:calc(var(--_pfx-form-section-avatar-size) * .41);font-weight:800;letter-spacing:.04em;text-transform:uppercase}.section-title-avatar-placeholder mat-icon{font-size:calc(var(--_pfx-form-section-avatar-size) * .5625);width:calc(var(--_pfx-form-section-avatar-size) * .5625);height:calc(var(--_pfx-form-section-avatar-size) * .5625);line-height:calc(var(--_pfx-form-section-avatar-size) * .5625)}.section-title-avatar-sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.form-context-empty-state{display:grid;min-height:var(--pdx-form-context-empty-min-height, 0);place-items:center;padding:var(--pdx-form-context-empty-padding, 0)}.form-context-empty-state praxis-empty-state-card{display:block;width:min(100%,var(--pdx-form-context-empty-max-width, 32rem))}.prx-form-tabs{display:block;margin-bottom:16px;max-width:100%}.prx-form-tabs__tablist{display:flex;flex-wrap:wrap;align-items:center;gap:8px;max-width:100%}.prx-form-tabs__tablist--scrollable{flex-wrap:nowrap;overflow-x:auto;overflow-y:hidden;scrollbar-width:none;-webkit-overflow-scrolling:touch;padding:4px 2px}.prx-form-tabs__tablist--scrollable::-webkit-scrollbar{display:none}.prx-form-tabs__tab{display:inline-flex;align-items:center;gap:8px;min-width:0;padding:8px 14px;border-radius:999px;border:1px solid var(--md-sys-color-outline-variant, rgba(0, 0, 0, .12));background:color-mix(in srgb,var(--md-sys-color-surface, transparent) 40%,transparent);color:var(--md-sys-color-on-surface, #1d1b20);font-family:inherit;font-size:.84rem;font-weight:500;cursor:pointer;white-space:nowrap;flex-shrink:0;-webkit-user-select:none;user-select:none;transition:all .2s cubic-bezier(.2,0,0,1)}.prx-form-tabs__tab:hover:not(:disabled):not(.prx-form-tabs__tab--active){background:var(--md-sys-color-surface-container-high, rgba(0, 0, 0, .05));border-color:var(--md-sys-color-outline, rgba(0, 0, 0, .24));color:var(--md-sys-color-on-surface)}.prx-form-tabs__tab:focus-visible{outline:2px solid var(--md-sys-color-primary, #005ac1);outline-offset:2px}.prx-form-tabs__tab:disabled{cursor:not-allowed;opacity:.45}.prx-form-tabs__tab--active{background:var(--md-sys-color-primary-container, color-mix(in srgb, var(--md-sys-color-primary, #005ac1) 16%, var(--md-sys-color-surface-container-high, #2b2930)));color:var(--md-sys-color-on-primary-container, var(--md-sys-color-primary, #005ac1));border-color:transparent;font-weight:600;box-shadow:0 1px 3px #00000014}.prx-form-tabs__tab-icon{font-size:18px;width:18px;height:18px;display:inline-flex;align-items:center;justify-content:center}.prx-form-tabs__tab-badge{display:inline-flex;align-items:center;justify-content:center;padding:1px 7px;font-size:.72rem;font-weight:600;border-radius:999px;background:color-mix(in srgb,currentColor 14%,transparent)}.prx-form-tabs__tab-error-badge{display:inline-flex;align-items:center;justify-content:center;min-width:18px;height:18px;padding:0 5px;border-radius:999px;font-size:.7rem;font-weight:700;background:var(--md-sys-color-error, #ba1a1a);color:var(--md-sys-color-on-error, #ffffff);box-shadow:0 1px 2px #0003}.prx-form-tabs[data-appearance=underline]{border-bottom:1px solid var(--md-sys-color-outline-variant, #cac4d0)}.prx-form-tabs[data-appearance=underline] .prx-form-tabs__tablist{gap:16px;padding-bottom:0}.prx-form-tabs[data-appearance=underline] .prx-form-tabs__tab{border:none;border-radius:0;border-bottom:2px solid transparent;background:transparent;padding:8px 4px 10px;margin-bottom:-1px}.prx-form-tabs[data-appearance=underline] .prx-form-tabs__tab:hover:not(:disabled):not(.prx-form-tabs__tab--active){background:transparent;border-bottom-color:var(--md-sys-color-outline-variant, #cac4d0)}.prx-form-tabs[data-appearance=underline] .prx-form-tabs__tab--active{background:transparent;box-shadow:none;border-bottom-color:var(--md-sys-color-primary, #005ac1);color:var(--md-sys-color-primary, #005ac1)}.prx-form-tabs[data-appearance=buttons] .prx-form-tabs__tablist{background:var(--md-sys-color-surface-container, rgba(0, 0, 0, .04));border-radius:12px;padding:4px;gap:4px;border:1px solid var(--md-sys-color-outline-variant, rgba(0, 0, 0, .08))}.prx-form-tabs[data-appearance=buttons] .prx-form-tabs__tab{border:none;border-radius:8px;padding:6px 12px;background:transparent}.prx-form-tabs[data-appearance=buttons] .prx-form-tabs__tab:hover:not(:disabled):not(.prx-form-tabs__tab--active){background:color-mix(in srgb,currentColor 8%,transparent)}.prx-form-tabs[data-appearance=buttons] .prx-form-tabs__tab--active{background:var(--md-sys-color-surface, var(--mat-sys-surface));color:var(--md-sys-color-primary, #005ac1);box-shadow:0 1px 3px #0000001f}.section-drop-wrapper[hidden]{display:none!important}.form-loading-title,.entity-read-loading-text,.form-blocking-overlay p{color:var(--pdx-text-shimmer-base, var(--md-sys-color-on-surface-variant));font-weight:550;text-shadow:none}@supports (-webkit-background-clip: text) or (background-clip: text){.form-loading-title,.entity-read-loading-text,.form-blocking-overlay p{background-image:var(--pdx-text-shimmer-gradient, linear-gradient(105deg, color-mix(in oklab, var(--md-sys-color-on-surface-variant, #64748b) 78%, var(--md-sys-color-on-surface, #0f172a) 22%) 0%, color-mix(in oklab, var(--md-sys-color-on-surface-variant, #64748b) 78%, var(--md-sys-color-on-surface, #0f172a) 22%) 26%, color-mix(in oklab, var(--md-sys-color-tertiary, #6366f1) 66%, #a855f7 34%) 40%, var(--pdx-text-shimmer-peak, var(--md-sys-color-on-surface, #ffffff)) 50%, color-mix(in oklab, var(--md-sys-color-primary, #006a6a) 66%, #ec4899 34%) 60%, color-mix(in oklab, var(--md-sys-color-on-surface-variant, #64748b) 78%, var(--md-sys-color-on-surface, #0f172a) 22%) 74%, color-mix(in oklab, var(--md-sys-color-on-surface-variant, #64748b) 78%, var(--md-sys-color-on-surface, #0f172a) 22%) 100%));background-size:300% 100%;background-position:100% 50%;background-repeat:no-repeat;-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;color:transparent;animation:praxisFormTextShimmer var(--pdx-text-shimmer-duration, 2.6s) linear infinite;will-change:background-position}}@media(prefers-reduced-motion:reduce),(forced-colors:active),print{.form-loading-title,.entity-read-loading-text,.form-blocking-overlay p{animation:none!important;background-image:none!important;-webkit-text-fill-color:currentColor!important;color:var(--md-sys-color-primary)!important;will-change:auto}}@media(forced-colors:active){.form-loading-title,.entity-read-loading-text,.form-blocking-overlay p{color:CanvasText!important;-webkit-text-fill-color:CanvasText!important}}@keyframes praxisFormTextShimmer{0%{background-position:100% 50%}to{background-position:0% 50%}}.form-action-target-banner{display:flex;flex-direction:column;gap:6px;margin-bottom:18px;padding:12px 14px;border-radius:8px;border-left:3px solid var(--md-sys-color-primary);background:color-mix(in srgb,var(--md-sys-color-primary) 7%,var(--md-sys-color-surface-container-low, var(--md-sys-color-surface)))}.form-action-target-banner__header{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.form-action-target-banner__eyebrow{font-size:.6875rem;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--md-sys-color-primary)}.form-action-target-banner__id{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;font-size:.75rem;font-weight:600;padding:1px 6px;border-radius:4px;background:color-mix(in srgb,var(--md-sys-color-on-surface) 8%,transparent);color:var(--md-sys-color-on-surface-variant)}.form-action-target-banner__badges{display:inline-flex;flex-wrap:wrap;align-items:center;gap:6px;margin-left:auto}.form-action-target-banner__badge{display:inline-flex;align-items:center;padding:2px 8px;border-radius:999px;font-size:.6875rem;font-weight:600;letter-spacing:.02em;background:color-mix(in srgb,var(--md-sys-color-on-surface) 10%,transparent);color:var(--md-sys-color-on-surface)}.form-action-target-banner__badge[data-tone=info]{background:color-mix(in srgb,var(--md-sys-color-primary) 16%,transparent);color:var(--md-sys-color-primary)}.form-action-target-banner__badge[data-tone=success]{background:#10b98129;color:#059669}.form-action-target-banner__badge[data-tone=warning]{background:#f59e0b2e;color:#d97706}.form-action-target-banner__badge[data-tone=danger]{background:color-mix(in srgb,var(--md-sys-color-error) 16%,transparent);color:var(--md-sys-color-error)}.form-action-target-banner__title{font-size:.95rem;font-weight:650;line-height:1.3;color:var(--md-sys-color-on-surface)}.form-action-target-banner__subtitle{font-size:.8125rem;line-height:1.4;color:var(--md-sys-color-on-surface-variant);display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.form-context-empty-state{min-height:320px;display:flex;align-items:center;justify-content:center;padding:24px 20px;border-radius:16px;border:1px dashed color-mix(in srgb,var(--md-sys-color-outline-variant, #444746) 45%,transparent);background:color-mix(in srgb,var(--md-sys-color-surface-container-low, var(--md-sys-color-surface)) 72%,transparent);box-sizing:border-box}\n"] }]
22220
22617
  }], ctorParameters: () => [{ type: i1.GenericCrudService }, { type: i2.HttpClient }, { type: i1$3.FormBuilder }, { type: i0.ChangeDetectorRef }, { type: FormLayoutService }, { type: FormContextService }, { type: FormRulesService }, { type: i7.SettingsPanelService }, { type: i2$1.MatDialog }, { type: undefined, decorators: [{
22221
22618
  type: Inject,
22222
22619
  args: [ASYNC_CONFIG_STORAGE]
@@ -34250,9 +34647,9 @@ function stableStringify(value) {
34250
34647
  }
34251
34648
 
34252
34649
  var index = /*#__PURE__*/Object.freeze({
34253
- __proto__: null,
34254
- PraxisDynamicFormConfigEditor: PraxisDynamicFormConfigEditor,
34255
- stripLegacyFieldMetadata: stripLegacyFieldMetadata
34650
+ __proto__: null,
34651
+ PraxisDynamicFormConfigEditor: PraxisDynamicFormConfigEditor,
34652
+ stripLegacyFieldMetadata: stripLegacyFieldMetadata
34256
34653
  });
34257
34654
 
34258
34655
  class PraxisFilterForm {
@@ -34280,7 +34677,8 @@ class PraxisFilterForm {
34280
34677
  statusChangesSub;
34281
34678
  schemaSub;
34282
34679
  hydratedFieldMetadata = [];
34283
- lastHydratedResourceKey = '';
34680
+ schemaHydrationPending = false;
34681
+ schemaHydrationFailed = false;
34284
34682
  columnFieldsCache = new WeakMap();
34285
34683
  singleFieldCache = new WeakMap();
34286
34684
  crudService = (() => {
@@ -34315,7 +34713,8 @@ class PraxisFilterForm {
34315
34713
  if (hasConfiguredFields) {
34316
34714
  this.schemaSub?.unsubscribe();
34317
34715
  this.hydratedFieldMetadata = [];
34318
- this.lastHydratedResourceKey = '';
34716
+ this.schemaHydrationPending = false;
34717
+ this.schemaHydrationFailed = false;
34319
34718
  }
34320
34719
  if ('config' in changes && this.config?.fieldMetadata) {
34321
34720
  this.buildForm();
@@ -34338,9 +34737,10 @@ class PraxisFilterForm {
34338
34737
  (this.config?.resourcePath ?? '')).trim();
34339
34738
  if (!rp) {
34340
34739
  this.schemaSub?.unsubscribe();
34740
+ this.schemaHydrationPending = false;
34741
+ this.schemaHydrationFailed = false;
34341
34742
  if (this.hydratedFieldMetadata.length > 0) {
34342
34743
  this.hydratedFieldMetadata = [];
34343
- this.lastHydratedResourceKey = '';
34344
34744
  this.buildForm();
34345
34745
  }
34346
34746
  return;
@@ -34351,19 +34751,10 @@ class PraxisFilterForm {
34351
34751
  ...(this.apiUrlEntry ? { apiUrlEntry: this.apiUrlEntry } : {}),
34352
34752
  }
34353
34753
  : undefined;
34354
- const hydrationKey = JSON.stringify({
34355
- rp,
34356
- endpointKey: this.endpointKey ?? null,
34357
- apiUrlEntry: this.apiUrlEntry ?? null,
34358
- });
34359
- if (this.lastHydratedResourceKey === hydrationKey && this.hydratedFieldMetadata.length > 0) {
34360
- return;
34361
- }
34362
34754
  const canLoadViaDiscovery = typeof this.resourceDiscovery?.getResourceFilterSchemaFields === 'function' &&
34363
34755
  (typeof this.resourceDiscovery.canResolveSchemas !== 'function' ||
34364
34756
  this.resourceDiscovery.canResolveSchemas(discoveryOptions));
34365
- const canLoadViaCrud = typeof this.crudService?.getFilterSchema === 'function' ||
34366
- typeof this.crudService?.getSchema === 'function';
34757
+ const canLoadViaCrud = typeof this.crudService?.getFilterSchema === 'function';
34367
34758
  if (!canLoadViaCrud && !canLoadViaDiscovery) {
34368
34759
  return;
34369
34760
  }
@@ -34381,43 +34772,48 @@ class PraxisFilterForm {
34381
34772
  this.crudService.configure?.(rp);
34382
34773
  }
34383
34774
  return typeof this.crudService.getFilterSchema === 'function'
34384
- ? this.crudService.getFilterSchema()
34385
- : this.crudService.getSchema();
34775
+ ? this.crudService.getFilterSchema({ cache: false })
34776
+ : throwError(() => new Error('A request filter schema source is required.'));
34386
34777
  };
34387
34778
  const isCatalogResourceKey = !rp.includes('/') && rp.includes('.');
34779
+ const isUnavailable = (error) => !!error && typeof error === 'object' && 'status' in error &&
34780
+ [404, 405, 501].includes(Number(error.status));
34388
34781
  let source$;
34389
34782
  if (isCatalogResourceKey && canLoadViaDiscovery) {
34390
- source$ = loadFromDiscovery().pipe(defaultIfEmpty([]), switchMap$1((defs) => Array.isArray(defs) && defs.length === 0 && canLoadViaCrud
34391
- ? loadFromCrud()
34392
- : of(defs)), catchError$1(() => (canLoadViaCrud ? loadFromCrud() : of([]))));
34783
+ source$ = defer(loadFromDiscovery).pipe(catchError$1(error => canLoadViaCrud && isUnavailable(error) ? defer(loadFromCrud) : throwError(() => error)));
34393
34784
  }
34394
34785
  else if (canLoadViaCrud) {
34395
- source$ = loadFromCrud().pipe(defaultIfEmpty([]), switchMap$1((defs) => Array.isArray(defs) && defs.length === 0 && canLoadViaDiscovery
34396
- ? loadFromDiscovery()
34397
- : of(defs)), catchError$1(() => (canLoadViaDiscovery ? loadFromDiscovery() : of([]))));
34786
+ source$ = defer(loadFromCrud).pipe(catchError$1(error => canLoadViaDiscovery && isUnavailable(error) ? defer(loadFromDiscovery) : throwError(() => error)));
34398
34787
  }
34399
34788
  else {
34400
- source$ = loadFromDiscovery();
34789
+ source$ = defer(loadFromDiscovery);
34401
34790
  }
34402
34791
  this.schemaSub?.unsubscribe();
34792
+ this.schemaHydrationPending = true;
34793
+ this.schemaHydrationFailed = false;
34794
+ this.validityChange.emit(false);
34403
34795
  this.schemaSub = source$
34404
- .pipe(take$1(1), catchError$1(() => of([])))
34405
- .subscribe((defs) => {
34406
- if (!Array.isArray(defs) || defs.length === 0) {
34407
- return;
34408
- }
34409
- if (Array.isArray(this.config?.fieldMetadata) && this.config.fieldMetadata.length > 0) {
34410
- return;
34411
- }
34412
- const metadata = mapFieldDefinitionsToMetadata(defs);
34413
- if (!metadata.length) {
34414
- return;
34415
- }
34416
- this.hydratedFieldMetadata = metadata;
34417
- this.lastHydratedResourceKey = hydrationKey;
34418
- this.buildForm();
34419
- this.cdr?.markForCheck();
34420
- });
34796
+ .pipe(defaultIfEmpty([]), take$1(1))
34797
+ .subscribe({ next: (defs) => {
34798
+ this.schemaHydrationPending = false;
34799
+ if (!Array.isArray(defs)) {
34800
+ this.schemaHydrationFailed = true;
34801
+ this.validityChange.emit(false);
34802
+ return;
34803
+ }
34804
+ if (Array.isArray(this.config?.fieldMetadata) && this.config.fieldMetadata.length > 0) {
34805
+ return;
34806
+ }
34807
+ const metadata = mapFieldDefinitionsToMetadata(defs);
34808
+ this.hydratedFieldMetadata = metadata;
34809
+ this.buildForm();
34810
+ this.cdr?.markForCheck();
34811
+ }, error: () => {
34812
+ this.schemaHydrationPending = false;
34813
+ this.schemaHydrationFailed = true;
34814
+ this.validityChange.emit(false);
34815
+ this.cdr?.markForCheck();
34816
+ } });
34421
34817
  }
34422
34818
  buildForm() {
34423
34819
  this.valueChangesSub?.unsubscribe();
@@ -34431,34 +34827,85 @@ class PraxisFilterForm {
34431
34827
  this.form.patchValue(this.buildRestorableValues(fields, previous));
34432
34828
  this.formReady.emit({ formGroup: this.form });
34433
34829
  // Emitir estado inicial de validade e assinar mudanças
34434
- this.validityChange.emit(this.form.valid);
34830
+ this.validityChange.emit(this.isFilterReady());
34435
34831
  this.statusChangesSub = this.form.statusChanges.subscribe(() => {
34436
- this.validityChange.emit(this.form.valid);
34832
+ this.validityChange.emit(this.isFilterReady());
34437
34833
  });
34438
34834
  this.valueChangesSub = this.form.valueChanges.subscribe((val) => {
34439
- this.valueChange.emit({ formData: val || {} });
34835
+ if (!this.isFilterReady()) {
34836
+ this.validityChange.emit(false);
34837
+ return;
34838
+ }
34839
+ const formData = this.projectFilterValues(val || {});
34840
+ if (formData === null) {
34841
+ this.validityChange.emit(false);
34842
+ return;
34843
+ }
34844
+ this.valueChange.emit({ formData });
34440
34845
  });
34441
34846
  }
34442
34847
  buildRestorableValues(fields, previous) {
34443
34848
  return fields.reduce((acc, field) => {
34444
- if (!this.form.contains(field.name)) {
34849
+ if (!this.form.get(field.name)) {
34445
34850
  return acc;
34446
34851
  }
34447
34852
  if (this.hasExplicitDefaultValue(field)) {
34448
34853
  return acc;
34449
34854
  }
34450
- if (!(field.name in previous)) {
34855
+ if (!hasNestedPath(previous, field.name)) {
34451
34856
  return acc;
34452
34857
  }
34453
- acc[field.name] = previous[field.name];
34454
- return acc;
34858
+ const value = getNestedPath(previous, field.name);
34859
+ if (!field.name.includes('.')) {
34860
+ acc[field.name] = value;
34861
+ return acc;
34862
+ }
34863
+ return setNestedPath(acc, field.name, value);
34455
34864
  }, {});
34456
34865
  }
34457
34866
  hasExplicitDefaultValue(field) {
34458
34867
  return Object.prototype.hasOwnProperty.call(field, 'defaultValue');
34459
34868
  }
34460
34869
  onFormSubmit() {
34461
- this.submit.emit({ formData: this.form.getRawValue() });
34870
+ if (this.schemaHydrationPending || this.schemaHydrationFailed)
34871
+ return;
34872
+ if (this.form.invalid || this.form.pending) {
34873
+ this.form.markAllAsTouched();
34874
+ return;
34875
+ }
34876
+ const formData = this.projectFilterValues(this.form.getRawValue());
34877
+ if (formData === null) {
34878
+ this.validityChange.emit(false);
34879
+ this.form.markAllAsTouched();
34880
+ return;
34881
+ }
34882
+ this.submit.emit({ formData });
34883
+ }
34884
+ isFilterReady() {
34885
+ return !this.schemaHydrationPending && !this.schemaHydrationFailed &&
34886
+ !this.form.invalid && !this.form.pending && this.projectFilterValues(this.form.getRawValue()) !== null;
34887
+ }
34888
+ projectFilterValues(value) {
34889
+ let payload = { ...value };
34890
+ for (const field of this.fieldMetadata) {
34891
+ if (field.submitPolicy === 'omit') {
34892
+ if (field.name.includes('.'))
34893
+ payload = deleteNestedPath(payload, field.name);
34894
+ else
34895
+ delete payload[field.name];
34896
+ continue;
34897
+ }
34898
+ if (field.items && hasNestedPath(payload, field.name)) {
34899
+ const normalized = normalizeScalarArrayValue(getNestedPath(payload, field.name), field.items);
34900
+ if (!normalized.valid)
34901
+ return null;
34902
+ if (field.name.includes('.'))
34903
+ payload = setNestedPath(payload, field.name, normalized.value);
34904
+ else
34905
+ payload[field.name] = normalized.value;
34906
+ }
34907
+ }
34908
+ return payload;
34462
34909
  }
34463
34910
  getColumnFields(column) {
34464
34911
  const cached = this.columnFieldsCache.get(column);
@@ -35070,8 +35517,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
35070
35517
  }] } });
35071
35518
 
35072
35519
  var praxisFilterFormWidgetConfigEditor = /*#__PURE__*/Object.freeze({
35073
- __proto__: null,
35074
- PraxisFilterFormWidgetConfigEditor: PraxisFilterFormWidgetConfigEditor
35520
+ __proto__: null,
35521
+ PraxisFilterFormWidgetConfigEditor: PraxisFilterFormWidgetConfigEditor
35075
35522
  });
35076
35523
 
35077
35524
  /** Project explicit editor changes over authored input, preserving deletions and transient defaults. */
@@ -35719,8 +36166,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
35719
36166
  }] } });
35720
36167
 
35721
36168
  var praxisDynamicFormWidgetConfigEditor = /*#__PURE__*/Object.freeze({
35722
- __proto__: null,
35723
- PraxisDynamicFormWidgetConfigEditor: PraxisDynamicFormWidgetConfigEditor
36169
+ __proto__: null,
36170
+ PraxisDynamicFormWidgetConfigEditor: PraxisDynamicFormWidgetConfigEditor
35724
36171
  });
35725
36172
 
35726
36173
  // Owner-qualified dictionary keys work through the registry's existing editorial
@@ -36031,7 +36478,9 @@ const PRAXIS_DYNAMIC_FORM_COMPONENT_METADATA = {
36031
36478
  description: 'Configuracao completa do formulario (layout, metadados, acoes, regras e headers de secao com `sectionHeader` para icone/avatar dinamico e `headerActions` para acoes contextuais).',
36032
36479
  },
36033
36480
  { name: 'actions', type: "FormConfig['actions'] | null", label: 'Ações', description: 'Overrides de apresentação da barra de ações fornecidos pelo host; preservam schema, método e endpoint canônicos.' },
36034
- { name: 'schemaSource', type: "'resource' | 'filter'", default: 'resource', description: 'Fonte do schema de campos' },
36481
+ { name: 'schemaSource', type: "'resource' | 'filter' | 'action'", default: 'resource', description: 'Fonte do schema de campos' },
36482
+ { name: 'actionId', type: 'string | null', description: 'Identificador canônico da ação de workflow ou comando governado associado ao formulário' },
36483
+ { name: 'operationId', type: 'string | null', description: 'OperationId canônico publicado pelo catálogo de ações ou surfaces para execução do comando' },
36035
36484
  { name: 'schemaUrl', type: 'string | null', description: 'Schema canonico explicito publicado pelo backend (ex.: surfaces/capabilities)' },
36036
36485
  { name: 'readUrl', type: 'string | null', description: 'URL canonica de leitura publicada por surfaces VIEW/READ_PROJECTION' },
36037
36486
  { name: 'apiEndpointKey', type: 'ApiEndpoint | string | null', description: 'Endpoint canonico usado para resolver schemaUrl, readUrl e submitUrl relativos em hosts destacados' },
@@ -39118,8 +39567,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
39118
39567
  }] } });
39119
39568
 
39120
39569
  var sectionEditor_component = /*#__PURE__*/Object.freeze({
39121
- __proto__: null,
39122
- SectionEditorComponent: SectionEditorComponent
39570
+ __proto__: null,
39571
+ SectionEditorComponent: SectionEditorComponent
39123
39572
  });
39124
39573
 
39125
39574
  class RowEditorComponent {
@@ -39492,8 +39941,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
39492
39941
  }] }] });
39493
39942
 
39494
39943
  var rowEditor_component = /*#__PURE__*/Object.freeze({
39495
- __proto__: null,
39496
- RowEditorComponent: RowEditorComponent
39944
+ __proto__: null,
39945
+ RowEditorComponent: RowEditorComponent
39497
39946
  });
39498
39947
 
39499
39948
  class ColumnEditorComponent {
@@ -40201,8 +40650,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
40201
40650
  }] }] });
40202
40651
 
40203
40652
  var columnEditor_component = /*#__PURE__*/Object.freeze({
40204
- __proto__: null,
40205
- ColumnEditorComponent: ColumnEditorComponent
40653
+ __proto__: null,
40654
+ ColumnEditorComponent: ColumnEditorComponent
40206
40655
  });
40207
40656
 
40208
40657
  class FieldEditorComponent {
@@ -41196,4 +41645,4 @@ function nativePath(value) {
41196
41645
  * Generated bundle index. Do not edit.
41197
41646
  */
41198
41647
 
41199
- export { ActionsEditorComponent, CORPORATE_PRESENTATION_FORMAT_GALLERY, CanvasStateService, CanvasToolbarComponent, ColumnEditorComponent, DYNAMIC_FORM_GOVERNED_PAGE_PREVIEW_ADAPTER, DomainRuleFormRulesService, DynamicFormLayoutService, DynamicFormSchemaCacheService, ERGADM00034_COMPACT_PRESENTATION_EXAMPLE, Ergadm00034CompactPresentationExampleComponent, FORM_AI_CAPABILITIES, FORM_COMPONENT_AI_CAPABILITIES, FieldConfiguratorComponent, FieldEditorComponent, FormConfigService, FormContextService, FormLayoutService, FormRulesService, JsonConfigEditorComponent, LayoutColorToken, LayoutEditorComponent, LayoutPrefsService, PRAXIS_DYNAMIC_FORM_AUTHORING_MANIFEST, PRAXIS_DYNAMIC_FORM_COMPONENT_METADATA, PRAXIS_FILTER_FORM_AUTHORING_MANIFEST, PRAXIS_FILTER_FORM_AUTHORING_PROJECTION, PRAXIS_FILTER_FORM_COMPONENT_METADATA, PraxisDynamicForm, PraxisDynamicFormConfigEditor, PraxisDynamicFormWidgetConfigEditor, PraxisFilterForm, PraxisFilterFormWidgetConfigEditor, PraxisFormActionsComponent, RowConfiguratorComponent, RowEditorComponent, SETTINGS_PANEL_DYNAMIC_FORM_PROVIDER, SectionEditorComponent, TASK_PRESETS, applyVisibilityRules, buildCorporatePresentationFormatGalleryConfig, buildDynamicFormApplyPlan, buildDynamicFormRuleAuthoringContext, buildErgadm00034CompactPresentationConfig, createDynamicFormAuthoringDocument, decodeDynamicFormPageInputs, encodeDynamicFormPageInputs, formLayoutRulesToBuilderState, getFormAiCatalog, getFormCapabilities, getFormEnum, isRuleSatisfied, materializeDynamicFormPageRuntimeInputs, normalizeDateArrays, normalizeDynamicFormAuthoringDocument, parseLegacyOrDynamicFormDocument, projectDynamicFormPageEditorChanges, providePraxisDynamicFormMetadata, providePraxisFilterFormMetadata, provideSettingsPanelDynamicForm, ruleBuilderStateToFormLayoutRules, serializeDynamicFormAuthoringDocument, stripLegacyFieldMetadata, toCanonicalDynamicFormConfig, validateDynamicFormAuthoringDocument, validateDynamicFormAuthoringInput, validateDynamicFormPageWidget };
41648
+ export { ActionsEditorComponent, CORPORATE_PRESENTATION_FORMAT_GALLERY, CanvasStateService, CanvasToolbarComponent, ColumnEditorComponent, DYNAMIC_FORM_GOVERNED_PAGE_PREVIEW_ADAPTER, DomainRuleFormRulesService, DynamicFormLayoutService, DynamicFormSchemaCacheService, ERGADM00034_COMPACT_PRESENTATION_EXAMPLE, Ergadm00034CompactPresentationExampleComponent, FORM_AI_CAPABILITIES, FORM_COMPONENT_AI_CAPABILITIES, FieldConfiguratorComponent, FieldEditorComponent, FormConfigService, FormContextService, FormLayoutService, FormRulesService, JsonConfigEditorComponent, LayoutColorToken, LayoutEditorComponent, LayoutPrefsService, PRAXIS_DYNAMIC_FORM_AUTHORING_MANIFEST, PRAXIS_DYNAMIC_FORM_COMPONENT_METADATA, PRAXIS_FILTER_FORM_AUTHORING_MANIFEST, PRAXIS_FILTER_FORM_AUTHORING_PROJECTION, PRAXIS_FILTER_FORM_COMPONENT_METADATA, PraxisDynamicForm, PraxisDynamicFormConfigEditor, PraxisDynamicFormWidgetConfigEditor, PraxisFilterForm, PraxisFilterFormWidgetConfigEditor, PraxisFormActionsComponent, RowConfiguratorComponent, RowEditorComponent, SETTINGS_PANEL_DYNAMIC_FORM_PROVIDER, SectionEditorComponent, TASK_PRESETS, applyVisibilityRules, buildCorporatePresentationFormatGalleryConfig, buildDynamicFormApplyPlan, buildDynamicFormRuleAuthoringContext, buildErgadm00034CompactPresentationConfig, createDynamicFormAuthoringDocument, decodeDynamicFormPageInputs, encodeDynamicFormPageInputs, formLayoutRulesToBuilderState, getFormAiCatalog, getFormCapabilities, getFormEnum, isRuleSatisfied, materializeDynamicFormPageRuntimeInputs, normalizeDateArrays, normalizeDynamicFormAuthoringDocument, normalizeTemporalFieldValues, parseLegacyOrDynamicFormDocument, projectDynamicFormPageEditorChanges, providePraxisDynamicFormMetadata, providePraxisFilterFormMetadata, provideSettingsPanelDynamicForm, ruleBuilderStateToFormLayoutRules, serializeDynamicFormAuthoringDocument, stripLegacyFieldMetadata, toCanonicalDynamicFormConfig, validateDynamicFormAuthoringDocument, validateDynamicFormAuthoringInput, validateDynamicFormPageWidget };