platformcommons-web-lib 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (208) hide show
  1. package/commons-shared-web-ui-1.0.0.tgz +0 -0
  2. package/documentation/alert.md +123 -0
  3. package/documentation/button-dropdown.md +126 -0
  4. package/documentation/button.md +184 -0
  5. package/documentation/cards-usage-guidelines.md +131 -0
  6. package/documentation/configurable-form.md +605 -0
  7. package/documentation/confirmation-modal.md +250 -0
  8. package/documentation/filter-sidebar.md +178 -0
  9. package/documentation/filter-table-selector.md +228 -0
  10. package/documentation/form-builder.md +597 -0
  11. package/documentation/form-components.md +384 -0
  12. package/documentation/nav.md +427 -0
  13. package/documentation/pagination.md +181 -0
  14. package/documentation/side-nav-documentation.md +169 -0
  15. package/documentation/smart-form.md +2177 -0
  16. package/documentation/smart-table.md +1198 -0
  17. package/documentation/snackbar.md +118 -0
  18. package/documentation/style-externalization.md +88 -0
  19. package/documentation/summary-card.md +279 -0
  20. package/ng-package.json +28 -0
  21. package/package.json +54 -0
  22. package/src/lib/modules/alert/alert.models.ts +6 -0
  23. package/src/lib/modules/alert/alert.module.ts +16 -0
  24. package/src/lib/modules/alert/alert.theme.scss +85 -0
  25. package/src/lib/modules/alert/components/alert/alert.component.html +27 -0
  26. package/src/lib/modules/alert/components/alert/alert.component.scss +92 -0
  27. package/src/lib/modules/alert/components/alert/alert.component.ts +81 -0
  28. package/src/lib/modules/button/button.models.ts +13 -0
  29. package/src/lib/modules/button/button.module.ts +16 -0
  30. package/src/lib/modules/button/button.theme.scss +121 -0
  31. package/src/lib/modules/button/components/button/button.component.html +22 -0
  32. package/src/lib/modules/button/components/button/button.component.scss +88 -0
  33. package/src/lib/modules/button/components/button/button.component.ts +67 -0
  34. package/src/lib/modules/button-dropdown/button-dropdown.models.ts +26 -0
  35. package/src/lib/modules/button-dropdown/button-dropdown.module.ts +22 -0
  36. package/src/lib/modules/button-dropdown/button-dropdown.theme.scss +87 -0
  37. package/src/lib/modules/button-dropdown/components/button-dropdown/button-dropdown.component.html +41 -0
  38. package/src/lib/modules/button-dropdown/components/button-dropdown/button-dropdown.component.scss +135 -0
  39. package/src/lib/modules/button-dropdown/components/button-dropdown/button-dropdown.component.ts +160 -0
  40. package/src/lib/modules/configurable-form/component/configurable-form.component.html +294 -0
  41. package/src/lib/modules/configurable-form/component/configurable-form.component.scss +503 -0
  42. package/src/lib/modules/configurable-form/component/configurable-form.component.ts +628 -0
  43. package/src/lib/modules/configurable-form/configurable-form.examples.ts +154 -0
  44. package/src/lib/modules/configurable-form/configurable-form.model.ts +131 -0
  45. package/src/lib/modules/configurable-form/configurable-form.module.ts +19 -0
  46. package/src/lib/modules/configurable-form/configurable-form.theme.scss +78 -0
  47. package/src/lib/modules/confirmation-modal/components/confirmation-modal/confirmation-modal.component.html +77 -0
  48. package/src/lib/modules/confirmation-modal/components/confirmation-modal/confirmation-modal.component.scss +395 -0
  49. package/src/lib/modules/confirmation-modal/components/confirmation-modal/confirmation-modal.component.ts +266 -0
  50. package/src/lib/modules/confirmation-modal/confirmation-modal.models.ts +71 -0
  51. package/src/lib/modules/confirmation-modal/confirmation-modal.module.ts +20 -0
  52. package/src/lib/modules/confirmation-modal/confirmation-modal.theme.scss +87 -0
  53. package/src/lib/modules/filter/components/filter/filter.component.html +131 -0
  54. package/src/lib/modules/filter/components/filter/filter.component.scss +245 -0
  55. package/src/lib/modules/filter/components/filter/filter.component.ts +216 -0
  56. package/src/lib/modules/filter/filter.models.ts +88 -0
  57. package/src/lib/modules/filter/filter.module.ts +24 -0
  58. package/src/lib/modules/filter/filter.theme.scss +92 -0
  59. package/src/lib/modules/filter-sidebar/components/filter-sidebar/filter-sidebar.component.html +112 -0
  60. package/src/lib/modules/filter-sidebar/components/filter-sidebar/filter-sidebar.component.scss +186 -0
  61. package/src/lib/modules/filter-sidebar/components/filter-sidebar/filter-sidebar.component.ts +163 -0
  62. package/src/lib/modules/filter-sidebar/filter-sidebar.models.ts +95 -0
  63. package/src/lib/modules/filter-sidebar/filter-sidebar.module.ts +24 -0
  64. package/src/lib/modules/filter-sidebar/filter-sidebar.theme.scss +38 -0
  65. package/src/lib/modules/filter-table-selector/components/filter-table-selector/filter-table-selector.component.html +73 -0
  66. package/src/lib/modules/filter-table-selector/components/filter-table-selector/filter-table-selector.component.scss +321 -0
  67. package/src/lib/modules/filter-table-selector/components/filter-table-selector/filter-table-selector.component.ts +361 -0
  68. package/src/lib/modules/filter-table-selector/filter-table-selector.models.ts +91 -0
  69. package/src/lib/modules/filter-table-selector/filter-table-selector.module.ts +22 -0
  70. package/src/lib/modules/filter-table-selector/filter-table-selector.theme.scss +36 -0
  71. package/src/lib/modules/form-builder/components/field-configurator/configurator-config-panel/configurator-config-panel.component.html +63 -0
  72. package/src/lib/modules/form-builder/components/field-configurator/configurator-config-panel/configurator-config-panel.component.scss +496 -0
  73. package/src/lib/modules/form-builder/components/field-configurator/configurator-config-panel/configurator-config-panel.component.ts +445 -0
  74. package/src/lib/modules/form-builder/components/field-configurator/configurator-tree/configurator-tree.component.html +75 -0
  75. package/src/lib/modules/form-builder/components/field-configurator/configurator-tree/configurator-tree.component.scss +210 -0
  76. package/src/lib/modules/form-builder/components/field-configurator/configurator-tree/configurator-tree.component.ts +55 -0
  77. package/src/lib/modules/form-builder/components/field-configurator/field-configurator.component.html +25 -0
  78. package/src/lib/modules/form-builder/components/field-configurator/field-configurator.component.scss +82 -0
  79. package/src/lib/modules/form-builder/components/field-configurator/field-configurator.component.ts +95 -0
  80. package/src/lib/modules/form-builder/components/field-selection/field-selection.component.html +20 -0
  81. package/src/lib/modules/form-builder/components/field-selection/field-selection.component.scss +37 -0
  82. package/src/lib/modules/form-builder/components/field-selection/field-selection.component.ts +94 -0
  83. package/src/lib/modules/form-builder/components/field-selection/group-node/group-node.component.html +46 -0
  84. package/src/lib/modules/form-builder/components/field-selection/group-node/group-node.component.scss +102 -0
  85. package/src/lib/modules/form-builder/components/field-selection/group-node/group-node.component.ts +50 -0
  86. package/src/lib/modules/form-builder/components/field-selection/selection-field-node/selection-field-node.component.html +35 -0
  87. package/src/lib/modules/form-builder/components/field-selection/selection-field-node/selection-field-node.component.scss +67 -0
  88. package/src/lib/modules/form-builder/components/field-selection/selection-field-node/selection-field-node.component.ts +34 -0
  89. package/src/lib/modules/form-builder/components/field-selection/selection-section-node/selection-section-node.component.html +68 -0
  90. package/src/lib/modules/form-builder/components/field-selection/selection-section-node/selection-section-node.component.scss +113 -0
  91. package/src/lib/modules/form-builder/components/field-selection/selection-section-node/selection-section-node.component.ts +74 -0
  92. package/src/lib/modules/form-builder/configs/field-type-schema.map.ts +533 -0
  93. package/src/lib/modules/form-builder/form-builder.module.ts +36 -0
  94. package/src/lib/modules/form-builder/form-builder.theme.scss +212 -0
  95. package/src/lib/modules/form-builder/index.ts +9 -0
  96. package/src/lib/modules/form-builder/models/builder.models.ts +7 -0
  97. package/src/lib/modules/form-builder/models/field-configurator.models.ts +38 -0
  98. package/src/lib/modules/form-builder/models/field-selection.models.ts +51 -0
  99. package/src/lib/modules/form-builder/services/field-configurator.service.ts +258 -0
  100. package/src/lib/modules/form-builder/services/field-selection.service.ts +300 -0
  101. package/src/lib/modules/form-builder/services/form-schema-tree.service.ts +652 -0
  102. package/src/lib/modules/form-builder/tokens/builder.tokens.ts +10 -0
  103. package/src/lib/modules/form-builder/utils/constants.ts +43 -0
  104. package/src/lib/modules/form-components/components/checkbox/_theme.scss +63 -0
  105. package/src/lib/modules/form-components/components/checkbox/checkbox.component.html +29 -0
  106. package/src/lib/modules/form-components/components/checkbox/checkbox.component.scss +111 -0
  107. package/src/lib/modules/form-components/components/checkbox/checkbox.component.ts +207 -0
  108. package/src/lib/modules/form-components/components/checkbox/checkbox.models.ts +35 -0
  109. package/src/lib/modules/form-components/components/datepicker/_theme.scss +82 -0
  110. package/src/lib/modules/form-components/components/datepicker/datepicker.component.html +42 -0
  111. package/src/lib/modules/form-components/components/datepicker/datepicker.component.scss +115 -0
  112. package/src/lib/modules/form-components/components/datepicker/datepicker.component.ts +267 -0
  113. package/src/lib/modules/form-components/components/datepicker/datepicker.models.ts +45 -0
  114. package/src/lib/modules/form-components/components/dropdown/_theme.scss +91 -0
  115. package/src/lib/modules/form-components/components/dropdown/dropdown.component.html +74 -0
  116. package/src/lib/modules/form-components/components/dropdown/dropdown.component.scss +252 -0
  117. package/src/lib/modules/form-components/components/dropdown/dropdown.component.ts +377 -0
  118. package/src/lib/modules/form-components/components/dropdown/dropdown.models.ts +53 -0
  119. package/src/lib/modules/form-components/components/input/_theme.scss +77 -0
  120. package/src/lib/modules/form-components/components/input/input.component.html +51 -0
  121. package/src/lib/modules/form-components/components/input/input.component.scss +128 -0
  122. package/src/lib/modules/form-components/components/input/input.component.ts +250 -0
  123. package/src/lib/modules/form-components/components/input/input.models.ts +55 -0
  124. package/src/lib/modules/form-components/components/radio/_theme.scss +61 -0
  125. package/src/lib/modules/form-components/components/radio/radio.component.html +22 -0
  126. package/src/lib/modules/form-components/components/radio/radio.component.scss +107 -0
  127. package/src/lib/modules/form-components/components/radio/radio.component.ts +181 -0
  128. package/src/lib/modules/form-components/components/radio/radio.models.ts +39 -0
  129. package/src/lib/modules/form-components/components/search/_theme.scss +73 -0
  130. package/src/lib/modules/form-components/components/search/search.component.html +15 -0
  131. package/src/lib/modules/form-components/components/search/search.component.scss +87 -0
  132. package/src/lib/modules/form-components/components/search/search.component.ts +213 -0
  133. package/src/lib/modules/form-components/components/search/search.models.ts +40 -0
  134. package/src/lib/modules/form-components/components/toggle/_theme.scss +45 -0
  135. package/src/lib/modules/form-components/components/toggle/toggle.component.html +15 -0
  136. package/src/lib/modules/form-components/components/toggle/toggle.component.scss +81 -0
  137. package/src/lib/modules/form-components/components/toggle/toggle.component.ts +166 -0
  138. package/src/lib/modules/form-components/components/toggle/toggle.models.ts +27 -0
  139. package/src/lib/modules/form-components/directives/click-outside.directive.ts +22 -0
  140. package/src/lib/modules/form-components/form-components.module.ts +41 -0
  141. package/src/lib/modules/form-components/form-components.theme.scss +25 -0
  142. package/src/lib/modules/material/material.module.ts +94 -0
  143. package/src/lib/modules/nav/components/nav/nav.component.html +34 -0
  144. package/src/lib/modules/nav/components/nav/nav.component.scss +171 -0
  145. package/src/lib/modules/nav/components/nav/nav.component.ts +82 -0
  146. package/src/lib/modules/nav/nav.models.ts +31 -0
  147. package/src/lib/modules/nav/nav.module.ts +17 -0
  148. package/src/lib/modules/nav/nav.theme.scss +86 -0
  149. package/src/lib/modules/pagination/components/pagination/pagination.component.html +52 -0
  150. package/src/lib/modules/pagination/components/pagination/pagination.component.scss +155 -0
  151. package/src/lib/modules/pagination/components/pagination/pagination.component.ts +109 -0
  152. package/src/lib/modules/pagination/pagination.module.ts +17 -0
  153. package/src/lib/modules/pagination/pagination.theme.scss +66 -0
  154. package/src/lib/modules/side-nav/components/side-nav/side-nav.component.html +56 -0
  155. package/src/lib/modules/side-nav/components/side-nav/side-nav.component.scss +342 -0
  156. package/src/lib/modules/side-nav/components/side-nav/side-nav.component.ts +135 -0
  157. package/src/lib/modules/side-nav/side-nav.models.ts +38 -0
  158. package/src/lib/modules/side-nav/side-nav.module.ts +16 -0
  159. package/src/lib/modules/side-nav/side-nav.theme.scss +111 -0
  160. package/src/lib/modules/smart-form/components/form-field/form-field.component.html +1109 -0
  161. package/src/lib/modules/smart-form/components/form-field/form-field.component.scss +1860 -0
  162. package/src/lib/modules/smart-form/components/form-field/form-field.component.ts +2232 -0
  163. package/src/lib/modules/smart-form/components/form-section/form-section.component.html +64 -0
  164. package/src/lib/modules/smart-form/components/form-section/form-section.component.scss +209 -0
  165. package/src/lib/modules/smart-form/components/form-section/form-section.component.ts +119 -0
  166. package/src/lib/modules/smart-form/components/smart-form/smart-form.component.html +253 -0
  167. package/src/lib/modules/smart-form/components/smart-form/smart-form.component.scss +689 -0
  168. package/src/lib/modules/smart-form/components/smart-form/smart-form.component.ts +1087 -0
  169. package/src/lib/modules/smart-form/index.ts +10 -0
  170. package/src/lib/modules/smart-form/models/form-schema.model.ts +700 -0
  171. package/src/lib/modules/smart-form/models/hierarchy-config.model.ts +21 -0
  172. package/src/lib/modules/smart-form/services/expression.service.ts +75 -0
  173. package/src/lib/modules/smart-form/services/smart-form-controller.service.ts +65 -0
  174. package/src/lib/modules/smart-form/smart-form.examples.ts +1324 -0
  175. package/src/lib/modules/smart-form/smart-form.module.ts +36 -0
  176. package/src/lib/modules/smart-form/smart-form.theme.scss +890 -0
  177. package/src/lib/modules/smart-form/utils/translation.utils.ts +82 -0
  178. package/src/lib/modules/smart-form/utils/trusted-url.pipe.ts +25 -0
  179. package/src/lib/modules/smart-form/utils/validation.utils.ts +98 -0
  180. package/src/lib/modules/smart-table/components/smart-table/smart-table.component.html +283 -0
  181. package/src/lib/modules/smart-table/components/smart-table/smart-table.component.scss +685 -0
  182. package/src/lib/modules/smart-table/components/smart-table/smart-table.component.ts +1118 -0
  183. package/src/lib/modules/smart-table/models/table-config.model.ts +202 -0
  184. package/src/lib/modules/smart-table/smart-table.module.ts +30 -0
  185. package/src/lib/modules/smart-table/smart-table.theme.scss +335 -0
  186. package/src/lib/modules/smart-table/utils/safe-html.pipe.ts +22 -0
  187. package/src/lib/modules/smart-table/utils/smart-table.utils.ts +18 -0
  188. package/src/lib/modules/snackbar/components/snackbar.component.html +41 -0
  189. package/src/lib/modules/snackbar/components/snackbar.component.scss +99 -0
  190. package/src/lib/modules/snackbar/components/snackbar.component.ts +18 -0
  191. package/src/lib/modules/snackbar/models/snackbar.models.ts +10 -0
  192. package/src/lib/modules/snackbar/services/snackbar.service.ts +40 -0
  193. package/src/lib/modules/snackbar/snackbar.module.ts +11 -0
  194. package/src/lib/modules/snackbar/snackbar.theme.scss +93 -0
  195. package/src/lib/modules/summary-card/components/summary-card/summary-card.component.html +47 -0
  196. package/src/lib/modules/summary-card/components/summary-card/summary-card.component.scss +199 -0
  197. package/src/lib/modules/summary-card/components/summary-card/summary-card.component.ts +126 -0
  198. package/src/lib/modules/summary-card/summary-card.module.ts +18 -0
  199. package/src/lib/modules/summary-card/summary-card.theme.scss +176 -0
  200. package/src/lib/shared-ui.module.ts +44 -0
  201. package/src/lib/styles/global.scss +152 -0
  202. package/src/lib/styles/utilities.scss +250 -0
  203. package/src/lib/utils/constants.ts +11 -0
  204. package/src/lib/utils/storage.utils.ts +37 -0
  205. package/src/lib/utils/string.utils.ts +23 -0
  206. package/src/lib/utils/translation.utils.ts +87 -0
  207. package/src/public-api.ts +104 -0
  208. package/tsconfig.lib.json +15 -0
@@ -0,0 +1,1860 @@
1
+ @import '../../../../styles/utilities.scss';
2
+
3
+ .form-field {
4
+ font-family: var(--cc-sf-font-family, 'Poppins', sans-serif) !important;
5
+ }
6
+
7
+ /* Base Variable Fallbacks (mapping to global.scss tokens) */
8
+ :host {
9
+ --cc-sf-input-border: #D1D5DB;
10
+ --cc-sf-input-bg: #ffffff;
11
+ --cc-sf-input-radius: 9px;
12
+ --cc-sf-input-height: 44px;
13
+ --cc-sf-label-color: #111827;
14
+ --cc-sf-hint-color: #9CA3AF;
15
+ --cc-sf-error-border: #EF4444;
16
+ --cc-sf-error-bg: #FFF5F5;
17
+ /* Indigo accent for focus rings */
18
+ --cc-sf-accent-color: #6366F1;
19
+ --cc-sf-input-focus-border: #6366F1;
20
+ --cc-sf-input-hover-border: #A5B4FC;
21
+ --cc-sf-input-placeholder: #C4C9D4;
22
+ --cc-sf-input-disabled-bg: #F8F9FB;
23
+ --cc-sf-input-disabled-border: #E5E7EB;
24
+ --cc-sf-switch-track-on: #6366F1;
25
+ --cc-sf-switch-track-off: #D1D5DB;
26
+ --cc-sf-switch-thumb: #ffffff;
27
+ --cc-sf-selected-color: #6366F1;
28
+ }
29
+
30
+ .form-row {
31
+ gap: var(--cc-sf-grid-gap, 16px);
32
+
33
+ &.horizontal {
34
+ display: flex;
35
+ flex-direction: row;
36
+
37
+ >* {
38
+ flex: 1;
39
+ }
40
+ }
41
+
42
+ &:not(.horizontal) {
43
+ flex-direction: column;
44
+ }
45
+
46
+ &.grid-row {
47
+ display: grid;
48
+ grid-template-columns: repeat(12, 1fr);
49
+ gap: var(--cc-sf-grid-gap, 16px);
50
+ align-items: start;
51
+
52
+ @media (max-width: 640px) {
53
+ grid-template-columns: 1fr;
54
+
55
+ .row-field {
56
+ grid-column: span 12 !important;
57
+ }
58
+ }
59
+ }
60
+ }
61
+
62
+ .field-label {
63
+ font-size: 0.75rem;
64
+ font-weight: 600;
65
+ line-height: 1;
66
+ letter-spacing: .04em;
67
+ text-transform: uppercase;
68
+ color: #6B7280;
69
+ }
70
+
71
+ .field-input,
72
+ input.matInput,
73
+ .mat-mdc-input-element {
74
+ display: block;
75
+ width: 100%;
76
+ height: var(--cc-sf-input-height) !important;
77
+ padding: 0 14px !important;
78
+ font-family: inherit;
79
+ font-size: 0.9rem;
80
+ color: var(--cc-sf-label-color);
81
+ background-color: var(--cc-sf-input-bg) !important;
82
+ border: 1.5px solid var(--cc-sf-input-border) !important;
83
+ border-radius: var(--cc-sf-input-radius) !important;
84
+ box-sizing: border-box;
85
+ box-shadow: 0 1px 2px rgba(0, 0, 0, .04) !important;
86
+ transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);
87
+
88
+ &::placeholder {
89
+ font-weight: 400;
90
+ font-size: 14px;
91
+ color: var(--cc-sf-input-placeholder);
92
+ }
93
+ }
94
+
95
+ .field-input {
96
+ opacity: var(--cc-sf-input-opacity, 1);
97
+ line-height: var(--cc-sf-input-line-height, 1.5);
98
+ transition: var(--cc-sf-input-transition, all 0.2s ease);
99
+
100
+ &::placeholder {
101
+ font-weight: var(--cc-sf-placeholder-weight, 400);
102
+ font-size: var(--cc-sf-placeholder-size, 14px);
103
+ line-height: var(--cc-sf-placeholder-line-height, 100%);
104
+ color: var(--cc-sf-input-placeholder);
105
+ }
106
+
107
+ &:hover:not(:disabled):not([readonly]) {
108
+ border-color: var(--cc-sf-input-hover-border) !important;
109
+ box-shadow: 0 1px 4px rgba(99, 102, 241, .08) !important;
110
+ }
111
+
112
+ &:focus {
113
+ outline: none;
114
+ border-color: var(--cc-sf-input-focus-border) !important;
115
+ box-shadow:
116
+ 0 0 0 3px rgba(99, 102, 241, .14),
117
+ 0 1px 4px rgba(99, 102, 241, .1) !important;
118
+ background-color: #FEFEFF !important;
119
+ }
120
+
121
+ &:disabled,
122
+ &[readonly] {
123
+ background-color: var(--cc-sf-input-disabled-bg) !important;
124
+ color: #9CA3AF !important;
125
+ cursor: not-allowed;
126
+ border-color: var(--cc-sf-input-disabled-border) !important;
127
+ box-shadow: none !important;
128
+ }
129
+
130
+ &.is-invalid {
131
+ border-color: var(--cc-sf-error-border) !important;
132
+ background-color: var(--cc-sf-error-bg) !important;
133
+
134
+ &:focus {
135
+ box-shadow:
136
+ 0 0 0 3px rgba(239, 68, 68, .12),
137
+ 0 1px 4px rgba(239, 68, 68, .1) !important;
138
+ }
139
+ }
140
+
141
+ &.textarea {
142
+ resize: vertical;
143
+ min-height: 100px;
144
+ height: auto;
145
+ padding: 12px 16px !important;
146
+ }
147
+ }
148
+
149
+ input[type="time"].time-input {
150
+ cursor: pointer;
151
+
152
+ &::-webkit-calendar-picker-indicator {
153
+ cursor: pointer;
154
+ opacity: 0.7;
155
+ filter: invert(30%);
156
+
157
+ &:hover {
158
+ opacity: 1;
159
+ }
160
+ }
161
+ }
162
+
163
+ select.field-input {
164
+ appearance: none;
165
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3E%3Cpath stroke='%236B7280' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='M6 8l4 4 4-4'/%3E%3C/svg%3E");
166
+ background-position: right 0.5rem center;
167
+ background-repeat: no-repeat;
168
+ background-size: 1.5em 1.5em;
169
+ padding-right: 2.5rem;
170
+ cursor: pointer;
171
+
172
+ &:disabled {
173
+ cursor: not-allowed;
174
+ }
175
+ }
176
+
177
+ // ── Multiple-select custom dropdown ─────────────────────────────────────────
178
+ .multi-select-wrapper {
179
+ position: relative;
180
+
181
+ .multi-select-trigger {
182
+ min-height: var(--cc-sf-input-height, 44px);
183
+ height: auto;
184
+ user-select: none;
185
+
186
+ &.ms-open {
187
+ border-color: var(--cc-sf-input-focus-border, #6366F1) !important;
188
+ box-shadow: 0 0 0 3px rgba(99, 102, 241, .14), 0 1px 4px rgba(99, 102, 241, .1) !important;
189
+ }
190
+
191
+ .multi-select-value {
192
+ flex: 1;
193
+ color: var(--cc-sf-label-color, #111827);
194
+ white-space: nowrap;
195
+ overflow: hidden;
196
+ text-overflow: ellipsis;
197
+ }
198
+
199
+ .multi-select-placeholder {
200
+ flex: 1;
201
+ font-weight: 400;
202
+ font-size: 14px;
203
+ color: var(--cc-sf-input-placeholder, #C4C9D4);
204
+ }
205
+
206
+ .multi-select-arrow {
207
+ font-size: 20px;
208
+ width: 20px;
209
+ height: 20px;
210
+ line-height: 20px;
211
+ color: #6B7280;
212
+ flex-shrink: 0;
213
+ }
214
+ }
215
+
216
+ .multi-select-panel {
217
+ position: absolute;
218
+ top: calc(100% + 4px);
219
+ left: 0;
220
+ right: 0;
221
+ background: #ffffff;
222
+ border: 1.5px solid var(--cc-sf-input-border, #D1D5DB);
223
+ border-radius: var(--cc-sf-input-radius, 9px);
224
+ box-shadow: 0 8px 24px rgba(0, 0, 0, 0.10), 0 2px 6px rgba(0, 0, 0, 0.06);
225
+ z-index: 1050;
226
+ max-height: 240px;
227
+ overflow-y: auto;
228
+
229
+ &::-webkit-scrollbar { width: 4px; }
230
+ &::-webkit-scrollbar-thumb {
231
+ background: #D1D5DB;
232
+ border-radius: 2px;
233
+ }
234
+ }
235
+
236
+ .multi-select-option {
237
+ padding: 8px 12px;
238
+ border-bottom: 1px solid #F3F4F6;
239
+ transition: background 0.1s;
240
+
241
+ &:last-of-type { border-bottom: none; }
242
+
243
+ &:hover { background: #F9FAFB; }
244
+
245
+ input[type='checkbox'] {
246
+ flex-shrink: 0;
247
+ cursor: pointer;
248
+ accent-color: var(--cc-sf-selected-color, #6366F1);
249
+ width: 15px;
250
+ height: 15px;
251
+ }
252
+ }
253
+
254
+ .multi-select-empty {
255
+ padding: 12px;
256
+ text-align: center;
257
+ }
258
+
259
+ &.is-invalid .multi-select-trigger {
260
+ border-color: var(--cc-sf-error-border, #EF4444) !important;
261
+ background-color: var(--cc-sf-error-bg, #FFF5F5) !important;
262
+ }
263
+ }
264
+
265
+ .char-count-hint {
266
+ font-style: normal;
267
+ line-height: 100%;
268
+ letter-spacing: 0.02em;
269
+ margin-top: 0.4rem;
270
+ }
271
+
272
+ .radio-group,
273
+ .checkbox-group {
274
+ &.layout-column {
275
+ display: grid !important;
276
+ grid-template-columns: repeat(12, 1fr);
277
+ gap: 16px;
278
+ width: 100%;
279
+ }
280
+
281
+ &.layout-row {
282
+ flex-direction: column !important;
283
+ gap: 12px;
284
+ width: 100%;
285
+ }
286
+ }
287
+
288
+ .radio-label,
289
+ .checkbox-label {
290
+ input {
291
+ cursor: pointer;
292
+ accent-color: var(--cc-sf-chip-selected-bg, #F05A28);
293
+ }
294
+
295
+ &.card-item {
296
+ display: flex !important;
297
+ flex-direction: row-reverse !important;
298
+ justify-content: space-between !important;
299
+ align-items: center !important;
300
+ border: 1px solid var(--cc-sf-input-disabled-border, #E5E7EB);
301
+ border-radius: 12px;
302
+ padding: 16px 20px;
303
+ box-sizing: border-box;
304
+ transition: all 0.2s ease;
305
+ background: var(--cc-sf-input-bg, #ffffff);
306
+ margin-bottom: 0px;
307
+
308
+ input {
309
+ margin-left: 16px;
310
+ }
311
+
312
+ &.selected {
313
+ border-color: var(--cc-sf-selected-color);
314
+ background-color: rgba(240, 90, 40, 0.05); // Keep light tint
315
+ }
316
+
317
+ .option-content {
318
+ .label-text {
319
+ font-weight: var(--cc-sf-label-weight, 500);
320
+ }
321
+ }
322
+ }
323
+ }
324
+
325
+ .checkbox-single {
326
+ .checkbox-label {
327
+ font-weight: var(--cc-sf-label-weight, 500);
328
+ }
329
+ }
330
+
331
+ .chip-label {
332
+ transition: var(--cc-sf-input-transition, all 0.2s ease);
333
+
334
+ &:hover {
335
+ background: var(--cc-sf-chip-hover-bg, #F3F4F6);
336
+ }
337
+
338
+ &.selected {
339
+ background: var(--cc-sf-selected-color);
340
+ color: var(--cc-sf-chip-selected-color, #ffffff);
341
+ border-color: var(--cc-sf-selected-color);
342
+ }
343
+ }
344
+
345
+ .switch {
346
+ width: 50px;
347
+ height: 24px;
348
+ display: inline-block;
349
+
350
+ input {
351
+ opacity: 0;
352
+ width: 0;
353
+ height: 0;
354
+ position: absolute;
355
+
356
+ &:checked+.slider {
357
+ background-color: var(--cc-sf-switch-track-on) !important;
358
+
359
+ &::before {
360
+ transform: translateX(26px);
361
+ }
362
+ }
363
+ }
364
+
365
+ .slider {
366
+ top: 0;
367
+ left: 0;
368
+ right: 0;
369
+ bottom: 0;
370
+ transition: 0.4s;
371
+ background-color: var(--cc-sf-switch-track-off);
372
+ border-radius: 24px;
373
+
374
+ &::before {
375
+ position: absolute;
376
+ content: "";
377
+ height: 18px;
378
+ width: 18px;
379
+ left: 3px;
380
+ bottom: 3px;
381
+ background-color: var(--cc-sf-switch-thumb);
382
+ transition: 0.4s;
383
+ border-radius: 50%;
384
+ }
385
+ }
386
+ }
387
+
388
+ .rating-group {
389
+ .star {
390
+ transition: var(--cc-sf-input-transition, all 0.2s ease);
391
+
392
+ mat-icon {
393
+ font-size: var(--cc-sf-star-size, 28px);
394
+ width: var(--cc-sf-star-size, 28px);
395
+ height: var(--cc-sf-star-size, 28px);
396
+ line-height: var(--cc-sf-star-size, 28px);
397
+ color: var(--cc-sf-star-empty, #D1D5DB);
398
+ transition: var(--cc-sf-input-transition, all 0.2s ease);
399
+ }
400
+
401
+ &.filled mat-icon,
402
+ &.half mat-icon {
403
+ color: var(--cc-sf-star-filled, #F59E0B);
404
+ }
405
+
406
+ &:hover mat-icon {
407
+ color: var(--cc-sf-star-filled, #F59E0B);
408
+ }
409
+ }
410
+ }
411
+
412
+ .password-wrapper {
413
+ .password-toggle {
414
+ right: 0.625rem;
415
+ top: 50%;
416
+ transform: translateY(-50%);
417
+ line-height: 1;
418
+ transition: color var(--cc-sf-input-transition, 0.2s ease);
419
+
420
+ mat-icon.eye-icon {
421
+ font-size: 1.125rem;
422
+ width: 1.125rem;
423
+ height: 1.125rem;
424
+ line-height: 1.125rem;
425
+ }
426
+
427
+ &:hover {
428
+ color: var(--cc-sf-label-color, #374151);
429
+ }
430
+
431
+ &:focus {
432
+ outline: none;
433
+ }
434
+ }
435
+ }
436
+
437
+ .group-section-wrapper {
438
+ // Flat — no card shell; card border/shadow removed
439
+
440
+ // ── Section heading: left accent bar ────────────────────────────────────────
441
+ .group-label {
442
+ font-size: var(--cc-sf-section-label-size, 1rem);
443
+ font-weight: var(--cc-sf-section-label-weight, 600);
444
+ color: var(--cc-sf-section-label-color, #1F2937);
445
+ margin: 0 0 16px 0;
446
+ padding-left: 12px;
447
+ padding-top: 2px;
448
+ padding-bottom: 2px;
449
+ border-left: var(--cc-sf-section-header-accent-width, 4px) solid var(--cc-sf-section-header-accent-color, #3B82F6);
450
+ line-height: 1.4;
451
+ }
452
+
453
+ .group-fields {
454
+ &.sf-grid {
455
+ display: grid;
456
+ grid-template-columns: repeat(12, 1fr);
457
+ gap: var(--cc-sf-grid-gap, 16px);
458
+ align-items: start;
459
+
460
+ @media (max-width: 640px) {
461
+ grid-template-columns: 1fr;
462
+
463
+ .sf-col {
464
+ grid-column: span 12 !important;
465
+ }
466
+ }
467
+ }
468
+ }
469
+
470
+ // ── Standard GROUP accordion instance ────────────────────────────────────────
471
+ .group-accordion-instance {
472
+ border: var(--cc-sf-instance-border, 1px solid #E5E7EB);
473
+ border-radius: var(--cc-sf-section-border-radius-inner, 8px);
474
+ margin-bottom: 8px;
475
+ overflow: hidden;
476
+ transition: border-color 0.2s ease;
477
+
478
+ &:last-of-type {
479
+ margin-bottom: 0;
480
+ }
481
+
482
+ .group-accordion-header {
483
+ display: flex;
484
+ justify-content: space-between;
485
+ align-items: center;
486
+ padding: 10px 14px;
487
+ background: var(--cc-sf-repeater-accordion-header-bg, #F9FAFB);
488
+ cursor: pointer;
489
+ user-select: none;
490
+ transition: background 0.15s ease;
491
+
492
+ &:hover {
493
+ background: var(--cc-sf-repeater-accordion-active-bg, #EFF6FF);
494
+ }
495
+
496
+ .instance-badge {
497
+ width: 22px;
498
+ height: 22px;
499
+ border-radius: 50%;
500
+ background: var(--cc-sf-repeater-badge-bg, #E5E7EB);
501
+ color: var(--cc-sf-repeater-badge-color, #374151);
502
+ font-size: 0.75rem;
503
+ font-weight: 600;
504
+ display: flex;
505
+ align-items: center;
506
+ justify-content: center;
507
+ flex-shrink: 0;
508
+ }
509
+
510
+ .instance-title {
511
+ font-size: var(--cc-sf-instance-num-size, 0.8125rem);
512
+ font-weight: 600;
513
+ color: var(--cc-sf-repeater-accordion-header-color, #1F2937);
514
+ }
515
+
516
+ .accordion-remove-btn {
517
+ background: none;
518
+ border: none;
519
+ cursor: pointer;
520
+ color: var(--cc-sf-btn-remove-color, #E53E3E);
521
+ padding: 4px;
522
+ border-radius: 4px;
523
+ line-height: 1;
524
+ display: flex;
525
+ align-items: center;
526
+ transition: background 0.15s ease;
527
+
528
+ mat-icon {
529
+ font-size: 1.1rem;
530
+ width: 1.1rem;
531
+ height: 1.1rem;
532
+ line-height: 1.1rem;
533
+ }
534
+
535
+ &:hover {
536
+ background: var(--cc-sf-btn-remove-hover-bg, #FED7D7);
537
+ }
538
+ }
539
+
540
+ .accordion-chevron {
541
+ font-size: 1.25rem;
542
+ width: 1.25rem;
543
+ height: 1.25rem;
544
+ line-height: 1.25rem;
545
+ color: var(--cc-sf-instance-num-color, #4B5563);
546
+ }
547
+ }
548
+
549
+ .group-accordion-body {
550
+ padding: var(--cc-sf-instance-padding, 16px);
551
+ background: var(--cc-sf-instance-bg, #F9FAFB);
552
+ border-top: var(--cc-sf-instance-divider, 1px dashed #D1D5DB);
553
+ }
554
+ }
555
+
556
+ // ── Full-width dashed Add button ─────────────────────────────────────────────
557
+ .btn-add-group {
558
+ display: flex;
559
+ align-items: center;
560
+ justify-content: center;
561
+ gap: 6px;
562
+ width: 100%;
563
+ padding: 10px 20px;
564
+ margin-top: 12px;
565
+ background: var(--cc-sf-btn-add-bg, transparent);
566
+ color: var(--cc-sf-btn-add-color, #3B82F6);
567
+ border: var(--cc-sf-btn-add-border, 1px dashed #CBD5E1);
568
+ border-radius: var(--cc-sf-btn-add-radius, 6px);
569
+ cursor: pointer;
570
+ font-family: inherit;
571
+ font-size: var(--cc-sf-btn-font-size, 0.875rem);
572
+ font-weight: var(--cc-sf-btn-font-weight, 600);
573
+ transition: var(--cc-sf-btn-transition, all 0.2s ease);
574
+
575
+ mat-icon {
576
+ font-size: 1.1rem;
577
+ width: 1.1rem;
578
+ height: 1.1rem;
579
+ line-height: 1.1rem;
580
+ }
581
+
582
+ &:hover {
583
+ background: var(--cc-sf-btn-add-hover-bg, #EFF6FF);
584
+ border-color: var(--cc-sf-btn-add-hover-border, #BFDBFE);
585
+ }
586
+ }
587
+
588
+ .group-instance {
589
+ &:last-child {
590
+ margin-bottom: 0;
591
+ }
592
+ }
593
+
594
+ &.multi-save-active {
595
+ border: none;
596
+ box-shadow: none;
597
+ padding: 0;
598
+ background: transparent;
599
+
600
+ .multi-save-header {
601
+ .btn-add-multi {
602
+ ::ng-deep button {
603
+ color: var(--ms-btn-add-color, #3B82F6);
604
+ font-weight: 600;
605
+ font-size: 0.875rem;
606
+ padding: 8px 12px;
607
+
608
+ &:hover {
609
+ color: var(--ms-btn-add-hover, #2563EB);
610
+ background-color: var(--cc-sf-btn-add-hover-bg, #EFF6FF);
611
+ }
612
+ }
613
+ }
614
+ }
615
+
616
+ .group-instance {
617
+ // box-shadow: var(--ms-card-shadow, 0 1px 4px rgba(0, 0, 0, 0.05));
618
+
619
+ // &.is-editing {
620
+ // padding: 24px;
621
+ // }
622
+
623
+ &.is-card {
624
+ cursor: pointer;
625
+ transition: all 0.2s ease-in-out;
626
+
627
+ &:hover {
628
+ box-shadow: var(--ms-card-shadow-hover, 0 8px 24px rgba(0, 0, 0, 0.08));
629
+ border-color: var(--cc-sf-input-focus-border, #3B82F6);
630
+ }
631
+
632
+ .card-view {
633
+ .card-content {
634
+ .card-title {
635
+ white-space: nowrap;
636
+ text-overflow: ellipsis;
637
+ }
638
+
639
+ .card-desc {
640
+ line-height: 1.4;
641
+ display: -webkit-box;
642
+ -webkit-line-clamp: 1;
643
+ line-clamp: 1;
644
+ -webkit-box-orient: vertical;
645
+ }
646
+ }
647
+
648
+ &.is-expanded {
649
+ .card-content .card-desc {
650
+ -webkit-line-clamp: unset;
651
+ line-clamp: unset;
652
+ }
653
+ }
654
+
655
+ .card-actions {
656
+ mat-icon {
657
+ font-size: 22px;
658
+ width: 22px;
659
+ height: 22px;
660
+ color: var(--cc-sf-hint-color, #9CA3AF);
661
+ transition: color 0.2s;
662
+
663
+ &.icon-delete:hover {
664
+ color: var(--cc-sf-error-border, #DC2626);
665
+ }
666
+
667
+ &.icon-edit:hover {
668
+ color: var(--cc-sf-input-focus-border, #3B82F6);
669
+ }
670
+
671
+ &.icon-expand {
672
+ color: var(--cc-sf-input-disabled-border, #E5E7EB);
673
+ }
674
+ }
675
+ }
676
+ }
677
+ }
678
+ }
679
+ }
680
+ }
681
+
682
+ .btn-remove {
683
+ transition: var(--cc-sf-btn-transition, all 0.2s ease);
684
+
685
+ mat-icon {
686
+ font-size: 1rem;
687
+ width: 1rem;
688
+ height: 1rem;
689
+ line-height: 1rem;
690
+ }
691
+
692
+ &:hover {
693
+ background: var(--cc-sf-btn-remove-hover-bg, #FED7D7);
694
+ }
695
+ }
696
+
697
+ .btn-add-group {
698
+ font-weight: var(--cc-sf-btn-font-weight, 600);
699
+ transition: var(--cc-sf-btn-transition, all 0.2s ease);
700
+
701
+ mat-icon {
702
+ font-size: 1.1rem;
703
+ width: 1.1rem;
704
+ height: 1.1rem;
705
+ line-height: 1.1rem;
706
+ }
707
+
708
+ &:hover {
709
+ background: var(--cc-sf-btn-add-hover-bg, #EFF6FF);
710
+ border-color: var(--cc-sf-btn-add-hover-border, #BFDBFE);
711
+ }
712
+ }
713
+
714
+ .upload-drop-zone {
715
+ background-color: var(--cc-sf-dropzone-bg, #F8FAFC);
716
+ border: var(--cc-sf-dropzone-border, 1.5px dashed #CBD5E1);
717
+ border-radius: var(--cc-sf-dropzone-radius, 12px);
718
+ transition: background-color 0.2s ease, border-color 0.2s ease;
719
+
720
+ &:hover {
721
+ background-color: var(--cc-sf-dropzone-hover-bg, #EFF6FF);
722
+ border-color: var(--cc-sf-dropzone-hover-border, #93C5FD);
723
+ }
724
+
725
+ &.drag-over {
726
+ background-color: var(--cc-sf-dropzone-hover-bg, #EFF6FF);
727
+ border-color: var(--cc-sf-dropzone-over-border, #3B82F6);
728
+ box-shadow: var(--cc-sf-dropzone-over-shadow, 0 0 0 4px rgba(59, 130, 246, 0.12));
729
+ }
730
+
731
+ &.is-invalid {
732
+ border-color: var(--cc-sf-error-border, #DC2626);
733
+ background-color: var(--cc-sf-error-bg, #FEF2F2);
734
+ }
735
+ }
736
+
737
+ .upload-icon-wrap {
738
+ .dropzone-icon-pill {
739
+ width: 52px;
740
+ height: 52px;
741
+ border-radius: 50%;
742
+ background: var(--cc-sf-dropzone-icon-bg, rgba(59, 130, 246, 0.10));
743
+ }
744
+
745
+ mat-icon.upload-cloud-icon {
746
+ font-size: 28px;
747
+ width: 28px;
748
+ height: 28px;
749
+ line-height: 28px;
750
+ color: var(--cc-sf-accent-color, #3B82F6);
751
+ }
752
+ }
753
+
754
+ .upload-main-text {
755
+ color: var(--cc-sf-label-color, #1E293B);
756
+ }
757
+
758
+ .upload-sub-text {
759
+ color: var(--cc-sf-hint-color, #64748B);
760
+ }
761
+
762
+ .upload-link {
763
+ color: var(--cc-sf-dropzone-link-color, #3B82F6);
764
+ font-weight: 500;
765
+ }
766
+
767
+ .upload-formats {
768
+ color: var(--cc-sf-dropzone-link-color, #3B82F6);
769
+ }
770
+
771
+ .upload-size-badge {
772
+ display: inline-block;
773
+ padding: 2px 8px;
774
+ border-radius: 20px;
775
+ background: var(--cc-sf-input-disabled-bg, #F3F4F6);
776
+ color: var(--cc-sf-hint-color, #6B7280);
777
+ font-weight: 500;
778
+ }
779
+
780
+ .uploaded-item {
781
+ background: var(--cc-sf-uploaded-item-bg, #ffffff);
782
+ border: var(--cc-sf-uploaded-item-border, 1px solid #E2E8F0);
783
+ border-radius: var(--cc-sf-uploaded-item-radius, 8px);
784
+ transition: box-shadow 0.15s ease;
785
+
786
+ &:hover {
787
+ box-shadow: 0 2px 6px rgba(0, 0, 0, 0.06);
788
+ }
789
+
790
+ mat-icon.file-type-icon {
791
+ font-size: 20px;
792
+ width: 20px;
793
+ height: 20px;
794
+ line-height: 20px;
795
+ flex-shrink: 0;
796
+ color: var(--cc-sf-hint-color, #64748B);
797
+ }
798
+
799
+ .file-thumb {
800
+ width: 36px;
801
+ height: 36px;
802
+ object-fit: cover;
803
+ flex-shrink: 0;
804
+ }
805
+
806
+ .file-info {
807
+ min-width: 0;
808
+ gap: 2px;
809
+
810
+ .file-name {
811
+ white-space: nowrap;
812
+ text-overflow: ellipsis;
813
+ }
814
+ }
815
+
816
+ .file-remove-btn {
817
+ flex-shrink: 0;
818
+ width: 32px;
819
+ height: 32px;
820
+ background: none;
821
+ border: none;
822
+ cursor: pointer;
823
+ color: var(--cc-sf-uploaded-remove-color, #94A3B8);
824
+ padding: 0;
825
+ display: flex;
826
+ align-items: center;
827
+ justify-content: center;
828
+ transition: color 0.15s ease, background 0.15s ease;
829
+
830
+ mat-icon {
831
+ font-size: 1.1rem;
832
+ width: 1.1rem;
833
+ height: 1.1rem;
834
+ line-height: 1.1rem;
835
+ }
836
+
837
+ &:hover:not(:disabled) {
838
+ color: var(--cc-sf-uploaded-remove-hover-color, #DC2626);
839
+ background: var(--cc-sf-uploaded-remove-hover-bg, #FEF2F2);
840
+ }
841
+
842
+ &:disabled {
843
+ opacity: 0.4;
844
+ cursor: not-allowed;
845
+ }
846
+ }
847
+
848
+ &.uploading {
849
+ background: var(--cc-sf-uploaded-uploading-bg, #F8FAFC);
850
+ border-color: var(--cc-sf-uploaded-uploading-border, #CBD5E1);
851
+ opacity: 0.85;
852
+ }
853
+ }
854
+
855
+ .upload-spinner {
856
+ width: 20px;
857
+ height: 20px;
858
+ flex-shrink: 0;
859
+ border-top-color: var(--cc-sf-accent-color, #3B82F6);
860
+ animation: cc-spin 0.7s linear infinite;
861
+ }
862
+
863
+ @keyframes cc-spin {
864
+ to {
865
+ transform: rotate(360deg);
866
+ }
867
+ }
868
+
869
+ .uploading-label {
870
+ font-style: italic;
871
+ }
872
+
873
+ .input-group {
874
+ align-items: stretch;
875
+
876
+ .field-input {
877
+ flex: 1;
878
+ width: auto; // Allow flex to control width
879
+
880
+ .input-prefix+& {
881
+ border-top-left-radius: 0;
882
+ border-bottom-left-radius: 0;
883
+ }
884
+ }
885
+
886
+ .field-input:has(+ .input-suffix) {
887
+ border-top-right-radius: 0;
888
+ border-bottom-right-radius: 0;
889
+ }
890
+
891
+ .field-input.has-icon-right {
892
+ padding-right: 3rem;
893
+ }
894
+
895
+ &.readonly {
896
+ .field-input {
897
+ cursor: default;
898
+ }
899
+ }
900
+ }
901
+
902
+ .input-prefix,
903
+ .input-suffix {
904
+ display: flex !important;
905
+ align-items: center;
906
+ white-space: nowrap;
907
+ padding: 0 14px;
908
+ background-color: var(--cc-sf-input-disabled-bg);
909
+ border: 1px solid var(--cc-sf-input-border);
910
+ font-size: 0.875rem;
911
+ color: var(--cc-sf-hint-color);
912
+ user-select: none;
913
+ }
914
+
915
+ .input-prefix {
916
+ border-right: none;
917
+ border-top-left-radius: var(--cc-sf-input-radius, 8px);
918
+ border-bottom-left-radius: var(--cc-sf-input-radius, 8px);
919
+ }
920
+
921
+ .input-suffix {
922
+ border-left: none;
923
+ border-top-right-radius: var(--cc-sf-input-radius, 8px);
924
+ border-bottom-right-radius: var(--cc-sf-input-radius, 8px);
925
+ }
926
+
927
+ .readonly-icons {
928
+ right: 0.875rem;
929
+ top: 50%;
930
+ transform: translateY(-50%);
931
+
932
+ mat-icon.lock-icon {
933
+ font-size: 1rem;
934
+ width: 1rem;
935
+ height: 1rem;
936
+ line-height: 1rem;
937
+ opacity: 0.5;
938
+ color: var(--cc-sf-hint-color, #6B7280);
939
+ }
940
+ }
941
+
942
+ .suffix-action-icons {
943
+ right: 0.875rem;
944
+ top: 50%;
945
+ transform: translateY(-50%);
946
+ z-index: 1;
947
+ pointer-events: auto;
948
+
949
+ mat-icon.suffix-action-icon {
950
+ font-size: 1.125rem;
951
+ width: 1.125rem;
952
+ height: 1.125rem;
953
+ line-height: 1.125rem;
954
+ color: var(--cc-sf-hint-color, #6B7280);
955
+ cursor: pointer;
956
+ transition: color 0.2s ease, transform 0.15s ease;
957
+
958
+ &:hover {
959
+ color: var(--cc-sf-text-color, #202124);
960
+ transform: scale(1.15);
961
+ }
962
+ }
963
+ }
964
+
965
+ .date-icon-wrapper {
966
+ right: 0.5rem;
967
+ top: 50%;
968
+ transform: translateY(-50%);
969
+ pointer-events: auto;
970
+
971
+ .mat-icon-button {
972
+ width: 32px;
973
+ height: 32px;
974
+ line-height: 32px;
975
+ }
976
+ }
977
+
978
+ .subfields-group-wrapper {
979
+ .subfields-row {
980
+ transition: all 0.2s ease;
981
+
982
+ &.is-invalid {
983
+ .subfield-item ::ng-deep .field-input {
984
+ border-color: var(--cc-sf-error-border, #DC2626);
985
+ background-color: var(--cc-sf-error-bg, #FEF2F2);
986
+ }
987
+ }
988
+
989
+ .subfield-item {
990
+ min-width: 0;
991
+
992
+ ::ng-deep .field-label {
993
+ font-size: 0.75rem !important;
994
+ margin-bottom: 4px !important;
995
+ font-weight: 500 !important;
996
+ color: var(--cc-sf-hint-color, #6B7280) !important;
997
+ }
998
+ }
999
+
1000
+ .subfield-separator {
1001
+ font-weight: bold;
1002
+ }
1003
+ }
1004
+ }
1005
+
1006
+ .autocomplete-wrapper {
1007
+ .ac-input {
1008
+ padding-left: 40px !important;
1009
+ }
1010
+
1011
+ .ac-search-icon {
1012
+ left: 0.75rem;
1013
+ width: 1.1rem;
1014
+ height: 1.1rem;
1015
+ line-height: 1.1rem;
1016
+ z-index: 1;
1017
+ transition: color var(--cc-sf-input-transition, 0.2s ease);
1018
+ }
1019
+
1020
+ .ac-clear-btn {
1021
+ right: 0.6rem;
1022
+ transition: color 0.15s ease, background 0.15s ease;
1023
+
1024
+ mat-icon {
1025
+ font-size: 1rem;
1026
+ width: 1rem;
1027
+ height: 1rem;
1028
+ line-height: 1rem;
1029
+ }
1030
+
1031
+ &:hover {
1032
+ color: var(--cc-sf-label-color, #374151);
1033
+ background: var(--cc-sf-input-disabled-bg, #F3F4F6);
1034
+ }
1035
+
1036
+ &:focus {
1037
+ outline: none;
1038
+ }
1039
+ }
1040
+
1041
+ &:focus-within .ac-search-icon {
1042
+ color: var(--cc-sf-accent-color, #3B82F6);
1043
+ }
1044
+
1045
+ &.is-invalid .ac-input {
1046
+ border-color: var(--cc-sf-error-border) !important;
1047
+ background-color: var(--cc-sf-error-bg);
1048
+ }
1049
+
1050
+ &.readonly .ac-input {
1051
+ background-color: var(--cc-sf-input-disabled-bg);
1052
+ color: var(--cc-sf-input-disabled-color, #6B7280);
1053
+ cursor: not-allowed;
1054
+ border-color: var(--cc-sf-input-disabled-border) !important;
1055
+ }
1056
+ }
1057
+
1058
+ .ac-no-results {
1059
+ font-style: italic;
1060
+ }
1061
+
1062
+ // ── mat-autocomplete panel global fix ───────────────────────────────────────
1063
+ // The CDK overlay is appended to <body> so it is outside component scope.
1064
+ // ::ng-deep is required to pierce view encapsulation for the panel.
1065
+ ::ng-deep {
1066
+
1067
+ .mat-mdc-autocomplete-panel,
1068
+ .mat-autocomplete-panel {
1069
+ background: var(--cc-sf-input-bg, #ffffff) !important;
1070
+ border-radius: var(--cc-sf-input-radius, 9px) !important;
1071
+ border: 1px solid var(--cc-sf-input-disabled-border, #E5E7EB) !important;
1072
+ box-shadow: 0 8px 24px rgba(0, 0, 0, 0.10), 0 2px 6px rgba(0, 0, 0, 0.06) !important;
1073
+ padding: 4px 0 !important;
1074
+ min-width: 200px;
1075
+
1076
+ mat-option,
1077
+ .mat-mdc-option,
1078
+ .mat-option {
1079
+ background: var(--cc-sf-input-bg, #ffffff) !important;
1080
+ color: var(--cc-sf-label-color, #111827) !important;
1081
+ font-size: 0.875rem !important;
1082
+ padding: 10px 16px !important;
1083
+ min-height: 40px !important;
1084
+ line-height: 1.4 !important;
1085
+ // Column direction so displayMeta fields stack below the label
1086
+ display: flex !important;
1087
+ flex-direction: column !important;
1088
+ align-items: flex-start !important;
1089
+ transition: background var(--cc-sf-input-transition, 0.2s ease) !important;
1090
+
1091
+ &:hover:not(.mat-option-disabled):not([disabled]) {
1092
+ background: var(--cc-sf-input-disabled-bg, #F3F4F6) !important;
1093
+ }
1094
+
1095
+ &.mat-selected:not(.mat-option-multiple),
1096
+ &.mdc-list-item--selected {
1097
+ background: var(--cc-sf-dropzone-hover-bg, #EFF6FF) !important;
1098
+ color: var(--cc-sf-selected-color, #6366F1) !important;
1099
+ font-weight: 600 !important;
1100
+ }
1101
+
1102
+ // ── Dynamic display fields rendered below the option label ────────────
1103
+ .ac-option-label {
1104
+ font-weight: 500;
1105
+ color: var(--cc-sf-label-color, #111827);
1106
+ font-size: 0.875rem;
1107
+ display: block;
1108
+ }
1109
+
1110
+ .ac-display-fields {
1111
+ align-items: center;
1112
+ line-height: 1;
1113
+ }
1114
+
1115
+ .ac-df-item {
1116
+ display: inline-flex;
1117
+ align-items: center;
1118
+ font-size: 0.72rem;
1119
+ color: var(--cc-sf-hint-color, #6B7280);
1120
+ gap: 3px;
1121
+ }
1122
+
1123
+ // Chip style: used for email and phone entries
1124
+ .ac-df-chip {
1125
+ background: var(--cc-sf-input-disabled-bg, #F3F4F6);
1126
+ border-radius: 4px;
1127
+ padding: 2px 6px;
1128
+ }
1129
+
1130
+ // Plain text style
1131
+ .ac-df-text {
1132
+ color: var(--cc-sf-hint-color, #6B7280);
1133
+ }
1134
+
1135
+ // Avatar image
1136
+ .ac-df-image {
1137
+ // No background chip for images
1138
+ }
1139
+
1140
+ .ac-df-avatar {
1141
+ width: 24px;
1142
+ height: 24px;
1143
+ border-radius: 50%;
1144
+ object-fit: cover;
1145
+ border: 1px solid var(--cc-sf-input-border, #D1D5DB);
1146
+ vertical-align: middle;
1147
+ }
1148
+
1149
+ .ac-df-label {
1150
+ font-weight: 600;
1151
+ color: var(--cc-sf-hint-color, #9CA3AF);
1152
+ margin-right: 2px;
1153
+ }
1154
+
1155
+ .ac-df-icon {
1156
+ font-size: 11px;
1157
+ width: 11px;
1158
+ height: 11px;
1159
+ line-height: 11px;
1160
+ color: var(--cc-sf-hint-color, #9CA3AF);
1161
+ flex-shrink: 0;
1162
+ }
1163
+ }
1164
+ }
1165
+ }
1166
+
1167
+ .mu-layout {
1168
+ grid-template-columns: 1fr 1fr;
1169
+ gap: 32px;
1170
+
1171
+ @media (max-width: 768px) {
1172
+ grid-template-columns: 1fr;
1173
+ }
1174
+ }
1175
+
1176
+ .mu-title {
1177
+ font-weight: 700;
1178
+ line-height: 1.3;
1179
+ }
1180
+
1181
+ .mu-badge {
1182
+ white-space: nowrap;
1183
+ flex-shrink: 0;
1184
+ }
1185
+
1186
+ .mu-description {
1187
+ line-height: 1.6;
1188
+ }
1189
+
1190
+ .mu-feature-item {
1191
+ .mu-check {
1192
+ width: 16px;
1193
+ height: 16px;
1194
+ line-height: 16px;
1195
+ flex-shrink: 0;
1196
+ }
1197
+ }
1198
+
1199
+ .mu-right {
1200
+ min-height: 260px;
1201
+ }
1202
+
1203
+ .mu-right-empty {
1204
+ min-height: 250px;
1205
+ max-width: 400px;
1206
+ box-shadow: 0 2px 10px rgba(0, 0, 0, 0.05);
1207
+ transition: box-shadow 0.2s ease;
1208
+
1209
+ &:hover {
1210
+ cursor: pointer;
1211
+ box-shadow: 0 4px 16px rgba(0, 0, 0, 0.1);
1212
+ }
1213
+
1214
+ .mu-right-empty-icon {
1215
+ width: 52px;
1216
+ height: 52px;
1217
+ line-height: 52px;
1218
+ opacity: 0.3;
1219
+ }
1220
+
1221
+ p {
1222
+ margin: 0;
1223
+ font-size: 0.85rem;
1224
+ }
1225
+ }
1226
+
1227
+ .media-add-container {
1228
+ display: inline-block;
1229
+
1230
+ ::ng-deep button {
1231
+ display: flex;
1232
+ align-items: center;
1233
+ gap: 6px;
1234
+
1235
+ .menu-chevron {
1236
+ width: 18px;
1237
+ height: 18px;
1238
+ line-height: 18px;
1239
+ transition: transform 0.2s ease;
1240
+ }
1241
+ }
1242
+ }
1243
+
1244
+ .media-dropdown {
1245
+ top: calc(100% + 6px);
1246
+ left: 0;
1247
+ z-index: 200;
1248
+ min-width: 240px;
1249
+ box-shadow: var(--mu-dropdown-shadow, 0 8px 32px rgba(0, 0, 0, 0.12));
1250
+ animation: mu-fade-in 0.15s ease;
1251
+ }
1252
+
1253
+ @keyframes mu-fade-in {
1254
+ from {
1255
+ opacity: 0;
1256
+ transform: translateY(-6px);
1257
+ }
1258
+
1259
+ to {
1260
+ opacity: 1;
1261
+ transform: translateY(0);
1262
+ }
1263
+ }
1264
+
1265
+ .media-dropdown-item {
1266
+ transition: background 0.15s ease;
1267
+
1268
+ &:last-child {
1269
+ border-bottom: none;
1270
+ }
1271
+
1272
+ &:hover {
1273
+ background: var(--cc-sf-dropzone-hover-bg, #F0F9FF);
1274
+ }
1275
+ }
1276
+
1277
+ .media-drop-icon {
1278
+ width: 36px;
1279
+ height: 36px;
1280
+ flex-shrink: 0;
1281
+
1282
+ mat-icon {
1283
+ font-size: 20px;
1284
+ width: 20px;
1285
+ height: 20px;
1286
+ line-height: 20px;
1287
+ }
1288
+
1289
+ &--video {
1290
+ background: var(--mu-icon-video-bg, #FFF0F0);
1291
+ color: var(--mu-icon-video-color, #EF4444);
1292
+ }
1293
+
1294
+ &--device {
1295
+ background: var(--mu-icon-device-bg, #EFF6FF);
1296
+ color: var(--mu-icon-device-color, #3B82F6);
1297
+ }
1298
+
1299
+ &--library {
1300
+ background: var(--mu-icon-library-bg, #F0FDF4);
1301
+ color: var(--mu-icon-library-color, #22C55E);
1302
+ }
1303
+ }
1304
+
1305
+ .media-drop-text {
1306
+ gap: 2px;
1307
+ }
1308
+
1309
+ .youtube-input-panel {
1310
+ animation: mu-fade-in 0.18s ease;
1311
+ }
1312
+
1313
+ .youtube-panel-label {
1314
+ mat-icon {
1315
+ font-size: 18px;
1316
+ width: 18px;
1317
+ height: 18px;
1318
+ line-height: 18px;
1319
+ color: var(--mu-icon-video-color, #EF4444);
1320
+ }
1321
+ }
1322
+
1323
+ .youtube-input-row {
1324
+ align-items: stretch;
1325
+ }
1326
+
1327
+ .media-menu-backdrop {
1328
+ position: fixed;
1329
+ inset: 0;
1330
+ z-index: 100;
1331
+ }
1332
+
1333
+ .media-upload-status {
1334
+ animation: mu-fade-in 0.2s ease;
1335
+
1336
+ .status-icon {
1337
+ width: 18px;
1338
+ height: 18px;
1339
+ line-height: 18px;
1340
+ }
1341
+ }
1342
+
1343
+ .media-carousel-main {
1344
+ max-width: 400px;
1345
+ height: var(--mu-carousel-height, 250px);
1346
+ }
1347
+
1348
+ .carousel-viewer {
1349
+ inset: 0;
1350
+
1351
+ .carousel-image {
1352
+ object-fit: cover;
1353
+ }
1354
+
1355
+ .carousel-spinner {
1356
+ width: 36px;
1357
+ height: 36px;
1358
+ border-top-color: var(--cc-sf-accent-color, #3B82F6);
1359
+ animation: cc-spin 0.7s linear infinite;
1360
+ }
1361
+ }
1362
+
1363
+ .carousel-nav {
1364
+ top: 50%;
1365
+ transform: translateY(-50%);
1366
+ z-index: 10;
1367
+ width: 40px;
1368
+ height: 40px;
1369
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.2);
1370
+ transition: background 0.2s ease, opacity 0.2s ease;
1371
+ backdrop-filter: blur(4px);
1372
+
1373
+ mat-icon {
1374
+ font-size: 22px;
1375
+ width: 22px;
1376
+ height: 22px;
1377
+ line-height: 22px;
1378
+ color: #1E293B;
1379
+ }
1380
+
1381
+ &:hover:not(:disabled) {
1382
+ background: rgba(255, 255, 255, 1);
1383
+ }
1384
+
1385
+ &:disabled {
1386
+ opacity: 0.3;
1387
+ cursor: not-allowed;
1388
+ }
1389
+
1390
+ &--prev {
1391
+ left: 12px;
1392
+ }
1393
+
1394
+ &--next {
1395
+ right: 12px;
1396
+ }
1397
+ }
1398
+
1399
+ .carousel-remove-btn {
1400
+ top: 10px;
1401
+ right: 10px;
1402
+ z-index: 10;
1403
+ width: 32px;
1404
+ height: 32px;
1405
+ transition: background 0.2s ease;
1406
+
1407
+ mat-icon {
1408
+ font-size: 18px;
1409
+ width: 18px;
1410
+ height: 18px;
1411
+ line-height: 18px;
1412
+ color: #ffffff;
1413
+ }
1414
+
1415
+ &:hover:not(:disabled) {
1416
+ background: rgba(220, 38, 38, 0.85);
1417
+ }
1418
+
1419
+ &:disabled {
1420
+ opacity: 0.4;
1421
+ cursor: not-allowed;
1422
+ }
1423
+ }
1424
+
1425
+ .carousel-dots {
1426
+ bottom: 10px;
1427
+ left: 50%;
1428
+ transform: translateX(-50%);
1429
+ z-index: 10;
1430
+ }
1431
+
1432
+ .carousel-dot {
1433
+ width: 8px;
1434
+ height: 8px;
1435
+ transition: background 0.2s ease, transform 0.2s ease;
1436
+
1437
+ &.active {
1438
+ background: #ffffff;
1439
+ transform: scale(1.3);
1440
+ }
1441
+ }
1442
+
1443
+ .media-thumbnail-strip {
1444
+ max-width: 400px;
1445
+ overflow-x: auto;
1446
+
1447
+ &::-webkit-scrollbar {
1448
+ height: 4px;
1449
+ }
1450
+
1451
+ &::-webkit-scrollbar-thumb {
1452
+ background: var(--cc-sf-input-disabled-border, #D1D5DB);
1453
+ border-radius: 2px;
1454
+ }
1455
+ }
1456
+
1457
+ .media-thumb {
1458
+ flex-shrink: 0;
1459
+ width: 72px;
1460
+ height: 52px;
1461
+ transition: border-color 0.2s ease, transform 0.15s ease;
1462
+
1463
+ &.active {
1464
+ border-color: var(--mu-thumb-active-border, var(--cc-sf-accent-color, #3B82F6));
1465
+ transform: scale(1.04);
1466
+ }
1467
+
1468
+ &:hover:not(.active) {
1469
+ border-color: var(--cc-sf-input-hover-border, #9CA3AF);
1470
+ }
1471
+
1472
+ .thumb-img {
1473
+ object-fit: cover;
1474
+ }
1475
+
1476
+ .thumb-yt-placeholder {
1477
+ mat-icon {
1478
+ font-size: 28px;
1479
+ width: 28px;
1480
+ height: 28px;
1481
+ line-height: 28px;
1482
+ }
1483
+ }
1484
+
1485
+ .thumb-uploading {
1486
+ .thumb-spinner {
1487
+ width: 20px;
1488
+ height: 20px;
1489
+ border-top-color: var(--cc-sf-accent-color, #3B82F6);
1490
+ animation: cc-spin 0.7s linear infinite;
1491
+ }
1492
+ }
1493
+ }
1494
+
1495
+ // ── Portal Modal Styles (rendered in document.body) ───────────────
1496
+
1497
+ .media-library-portal-host {
1498
+ position: fixed;
1499
+ inset: 0;
1500
+ z-index: 9999;
1501
+ display: flex;
1502
+ align-items: center;
1503
+ justify-content: center;
1504
+ visibility: hidden;
1505
+ opacity: 0;
1506
+ pointer-events: none;
1507
+ transition: opacity 0.2s ease, visibility 0.2s ease;
1508
+
1509
+ &.is-open {
1510
+ visibility: visible;
1511
+ opacity: 1;
1512
+ pointer-events: auto;
1513
+
1514
+ .media-library-modal {
1515
+ transform: scale(1) translateY(0);
1516
+ }
1517
+ }
1518
+ }
1519
+
1520
+ .media-library-overlay {
1521
+ position: absolute;
1522
+ inset: 0;
1523
+ background: rgba(0, 0, 0, 0.5);
1524
+ backdrop-filter: blur(2px);
1525
+ }
1526
+
1527
+ .media-library-modal {
1528
+ position: relative;
1529
+ z-index: 10000;
1530
+ width: 90vw;
1531
+ max-width: 900px;
1532
+ max-height: 90vh;
1533
+ background: #ffffff;
1534
+ border-radius: 16px;
1535
+ box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04);
1536
+ transform: scale(0.95) translateY(10px);
1537
+ transition: transform 0.3s cubic-bezier(0.175, 0.885, 0.32, 1.275);
1538
+ }
1539
+
1540
+
1541
+ .library-modal-header {
1542
+ flex-shrink: 0;
1543
+ }
1544
+
1545
+ .library-modal-title {
1546
+ font-weight: 700;
1547
+ }
1548
+
1549
+ .library-modal-subtitle {
1550
+ line-height: 1.5;
1551
+ max-width: 600px;
1552
+ }
1553
+
1554
+ .library-close-btn {
1555
+ width: 32px;
1556
+ height: 32px;
1557
+ transition: background 0.15s ease, color 0.15s ease;
1558
+
1559
+ mat-icon {
1560
+ font-size: 20px;
1561
+ width: 20px;
1562
+ height: 20px;
1563
+ line-height: 20px;
1564
+ }
1565
+
1566
+ &:hover {
1567
+ background: var(--cc-sf-input-disabled-bg, #F3F4F6);
1568
+ color: var(--cc-sf-label-color, #374151);
1569
+ }
1570
+ }
1571
+
1572
+ .library-loading,
1573
+ .library-empty {
1574
+ mat-icon {
1575
+ font-size: 40px;
1576
+ width: 40px;
1577
+ height: 40px;
1578
+ line-height: 40px;
1579
+ opacity: 0.5;
1580
+ }
1581
+ }
1582
+
1583
+ .lib-spinner {
1584
+ width: 36px;
1585
+ height: 36px;
1586
+ border-top-color: var(--cc-sf-accent-color, #3B82F6);
1587
+ animation: cc-spin 0.7s linear infinite;
1588
+ }
1589
+
1590
+ .library-error {
1591
+ flex-shrink: 0;
1592
+
1593
+ mat-icon {
1594
+ font-size: 20px;
1595
+ width: 20px;
1596
+ height: 20px;
1597
+ line-height: 20px;
1598
+ }
1599
+ }
1600
+
1601
+ .library-grid {
1602
+ grid-template-columns: repeat(5, 1fr);
1603
+ max-height: 50vh;
1604
+ overflow-y: auto;
1605
+
1606
+ &::-webkit-scrollbar {
1607
+ width: 8px;
1608
+ }
1609
+
1610
+ &::-webkit-scrollbar-track {
1611
+ background: #F1F1F1;
1612
+ }
1613
+
1614
+ &::-webkit-scrollbar-thumb {
1615
+ background: #C1C1C1;
1616
+ border-radius: 10px;
1617
+ border: 2px solid #F1F1F1;
1618
+ }
1619
+ }
1620
+
1621
+ .library-grid-item {
1622
+ aspect-ratio: 1 / 1;
1623
+ transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
1624
+ box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);
1625
+
1626
+ &:hover {
1627
+ transform: translateY(-4px) scale(1.02);
1628
+ box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04);
1629
+ }
1630
+
1631
+ &.selected {
1632
+ border-color: var(--cc-sf-accent-color, #3B82F6);
1633
+
1634
+ .library-grid-img {
1635
+ opacity: 0.7;
1636
+ }
1637
+ }
1638
+
1639
+ &:hover .library-overlay-hover {
1640
+ opacity: 1;
1641
+ }
1642
+ }
1643
+
1644
+ .library-grid-img {
1645
+ object-fit: cover;
1646
+ }
1647
+
1648
+ .library-overlay-hover {
1649
+ inset: 0;
1650
+ opacity: 0;
1651
+ transition: opacity 0.15s ease;
1652
+ }
1653
+
1654
+ .library-check {
1655
+ top: 6px;
1656
+ right: 6px;
1657
+ width: 22px;
1658
+ height: 22px;
1659
+ box-shadow: 0 1px 4px rgba(0, 0, 0, 0.15);
1660
+
1661
+ mat-icon {
1662
+ font-size: 18px;
1663
+ width: 18px;
1664
+ height: 18px;
1665
+ line-height: 18px;
1666
+ }
1667
+ }
1668
+
1669
+ .library-modal-footer {
1670
+ flex-shrink: 0;
1671
+
1672
+ .library-footer-actions {
1673
+ ::ng-deep .cc-btn-primary {
1674
+ background-color: var(--cc-sf-accent-color, #3B82F6) !important;
1675
+ border-color: var(--cc-sf-accent-color, #3B82F6) !important;
1676
+ color: #ffffff !important;
1677
+ font-weight: 600;
1678
+ padding-left: 32px;
1679
+ padding-right: 32px;
1680
+
1681
+ &:hover {
1682
+ background-color: var(--cc-sf-btn-primary-hover-bg, #2563EB) !important;
1683
+ }
1684
+
1685
+ &:disabled {
1686
+ background-color: #93C5FD !important;
1687
+ cursor: not-allowed;
1688
+ }
1689
+ }
1690
+
1691
+ ::ng-deep .cc-btn-outline {
1692
+ font-weight: 600;
1693
+ padding-left: 24px;
1694
+ padding-right: 24px;
1695
+ border-color: #D1D5DB;
1696
+ color: #374151;
1697
+
1698
+ &:hover {
1699
+ background-color: #F9FAFB;
1700
+ }
1701
+ }
1702
+ }
1703
+ }
1704
+
1705
+ .location-subtitle {
1706
+ line-height: 1.5;
1707
+ }
1708
+
1709
+ .loc-tab-btn {
1710
+ ::ng-deep button {
1711
+ width: 100%;
1712
+
1713
+ &:not(.cc-btn-warning) {
1714
+ background-color: var(--cc-sf-input-bg, #ffffff) !important;
1715
+ color: var(--cc-sf-label-color, #000000) !important;
1716
+ border: 1px solid var(--cc-sf-input-disabled-border, #E5E7EB);
1717
+
1718
+ &:hover {
1719
+ background-color: var(--cc-sf-input-disabled-bg, #F3F4F6) !important;
1720
+ }
1721
+ }
1722
+ }
1723
+ }
1724
+
1725
+ .loc-venue-item {
1726
+ transition: box-shadow 0.15s ease, border-color 0.15s ease;
1727
+
1728
+ &:hover {
1729
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);
1730
+ border-color: var(--cc-sf-input-hover-border, #9CA3AF);
1731
+ }
1732
+ }
1733
+
1734
+ .loc-venue-search-icon {
1735
+ width: 18px;
1736
+ height: 18px;
1737
+ line-height: 18px;
1738
+ flex-shrink: 0;
1739
+ }
1740
+
1741
+ .loc-venue-text {
1742
+ white-space: nowrap;
1743
+ text-overflow: ellipsis;
1744
+ }
1745
+
1746
+ .loc-action-btn {
1747
+ transition: background 0.15s ease, color 0.15s ease;
1748
+ flex-shrink: 0;
1749
+
1750
+ mat-icon {
1751
+ font-size: 18px;
1752
+ width: 18px;
1753
+ height: 18px;
1754
+ line-height: 18px;
1755
+ }
1756
+
1757
+ &.loc-delete-btn {
1758
+ color: var(--loc-delete-color, #E53E3E);
1759
+
1760
+ &:hover {
1761
+ background: var(--cc-sf-error-bg, #FEF2F2);
1762
+ }
1763
+ }
1764
+
1765
+ &.loc-edit-btn {
1766
+ color: var(--cc-sf-hint-color, #9CA3AF);
1767
+
1768
+ &:hover {
1769
+ color: var(--cc-sf-input-focus-border, #3B82F6);
1770
+ background: var(--cc-sf-dropzone-hover-bg, #EFF6FF);
1771
+ }
1772
+ }
1773
+ }
1774
+
1775
+ .loc-search-icon {
1776
+ left: 0.75rem;
1777
+ width: 1.1rem;
1778
+ height: 1.1rem;
1779
+ line-height: 1.1rem;
1780
+ z-index: 1;
1781
+ }
1782
+
1783
+ .loc-suggestions-panel {
1784
+ top: calc(100% + 4px);
1785
+ left: 0;
1786
+ right: 0;
1787
+ z-index: 300;
1788
+ box-shadow: 0 8px 24px rgba(0, 0, 0, 0.10);
1789
+ animation: mu-fade-in 0.15s ease;
1790
+ max-height: 260px;
1791
+ overflow-y: auto;
1792
+ }
1793
+
1794
+ .loc-suggestion-item {
1795
+ transition: background 0.12s ease;
1796
+
1797
+ &:hover,
1798
+ &:focus {
1799
+ background: var(--loc-suggestion-hover-bg, #F0F9FF);
1800
+ }
1801
+
1802
+ &:not(:last-child) {
1803
+ border-bottom: 1px solid var(--cc-sf-input-disabled-border, #F3F4F6);
1804
+ }
1805
+ }
1806
+
1807
+ .loc-suggestion-icon {
1808
+ width: 18px;
1809
+ height: 18px;
1810
+ line-height: 18px;
1811
+ flex-shrink: 0;
1812
+ }
1813
+
1814
+ .loc-suggestion-text {
1815
+ white-space: nowrap;
1816
+ text-overflow: ellipsis;
1817
+ }
1818
+
1819
+ .loc-add-btn {
1820
+ transition: opacity 0.15s ease;
1821
+
1822
+ mat-icon {
1823
+ font-size: 20px;
1824
+ width: 20px;
1825
+ height: 20px;
1826
+ line-height: 20px;
1827
+ }
1828
+
1829
+ &:hover {
1830
+ opacity: 0.8;
1831
+ }
1832
+ }
1833
+
1834
+ .loc-map-container {
1835
+ box-shadow: 0 2px 10px rgba(0, 0, 0, 0.06);
1836
+ }
1837
+
1838
+ .loc-tba-panel {
1839
+ min-height: 120px;
1840
+ }
1841
+
1842
+ .loc-tba-icon {
1843
+ width: 40px;
1844
+ height: 40px;
1845
+ line-height: 40px;
1846
+ opacity: 0.6;
1847
+ }
1848
+
1849
+ .loc-tba-text {
1850
+ line-height: 1.6;
1851
+ max-width: 360px;
1852
+ }
1853
+
1854
+ .radio-label {
1855
+ display: flex !important;
1856
+
1857
+ .option-content {
1858
+ padding-left: 10px;
1859
+ }
1860
+ }