@magicfeedback/popup-sdk 1.5.0 → 1.6.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.
@@ -182,7 +182,1775 @@ var init_font = __esm({
182
182
  var style_default;
183
183
  var init_style = __esm({
184
184
  "src/assets/style.css"() {
185
- style_default = '.magicfeedback-container {\n width: 100%;\n}\n\n\n.magicfeedback-success-message,\n.magicfeedback-info-message,\n.magicfeedback-start-message,\n.magicfeedback-container{\n animation-duration: 0.5s;\n animation-name: animate-fade;\n animation-delay: 0.25s;\n animation-fill-mode: backwards;\n\n font-style: normal;\n text-align: justify;\n font-weight: 400;\n font-size: 1.2rem;\n color: #475569;\n line-height: 1.5;\n}\n\n@keyframes animate-fade {\n 0% { opacity: 0; }\n 100% { opacity: 1; }\n}\n\n.magicfeedback-form {\n display: flex;\n flex-direction: column;\n justify-content: flex-start;\n align-items: center;\n width: 100%;\n}\n.magicfeedback-questions {\n display: flex;\n flex-direction: column;\n justify-content: flex-start;\n align-items: flex-start;\n width: 100%;\n}\n\n.magicfeedback-div {\n display: flex;\n flex-direction: column;\n justify-content: flex-start;\n align-items: flex-start;\n margin-bottom: 10px;\n width: 100%;\n}\n\n.magicfeedback-label {\n margin-bottom: 25px;\n margin-top: 20px;\n font-weight: 400;\n font-family: inherit;\n font-size: 1.2rem;\n color: #212529;\n text-align: start;\n word-wrap: break-word;\n white-space: normal;\n\n}\n\n.magicfeedback-checkbox {\n display: flex;\n flex-direction: column;\n flex-wrap: wrap;\n width: 100%;\n}\n\n.magicfeedback-checkbox-container {\n display: flex;\n flex-direction: row;\n justify-content: flex-start;\n align-items: center;\n margin-bottom: 5px;\n margin-top: 5px;\n}\n\n/* Cualificado con `div`: @magicfeedback/native reutiliza la clase "magicfeedback-radio"\n tambi\xE9n en el <input> de cada opci\xF3n (rating), y sin el tag este selector lo capturaba\n tambi\xE9n, rompiendo su tama\xF1o (el input pasaba a display:flex; width:100%). */\ndiv.magicfeedback-radio {\n display: flex;\n flex-direction: column;\n justify-content: flex-start;\n flex-wrap: wrap;\n width: 100%;\n margin-right: 5px;\n padding: 5px;\n box-sizing: border-box;\n}\n\n.magicfeedback-checkbox-container,\n.magicfeedback-radio-container {\n display: flex;\n flex-direction: row;\n justify-content: flex-start;\n align-items: center;\n margin: 5px;\n padding: 5px 0;\n background-color: #fff;\n border-radius: 5px;\n box-shadow: 0 0 3px #ccc;\n}\n\n.deepdots-popup input::-webkit-outer-spin-button,\n.deepdots-popup input::-webkit-inner-spin-button {\n -webkit-appearance: none;\n -moz-appearance: textfield;\n}\n\n.magicfeedback-checkbox input[type="checkbox"] {\n margin-right: 5px;\n margin-left: 5px;\n width: 20px;\n height: 20px;\n cursor: pointer;\n}\n\n\n.magicfeedback-checkbox label,\n.magicfeedback-radio-container label {\n margin-left: 5px;\n font-weight: 400;\n font-family: inherit;\n font-size: 16px;\n color: #212529;\n text-align: start;\n width: 100%;\n}\n\n.deepdots-popup p {\n margin-bottom: 0px;\n font-size: 12px;\n}\n\n.deepdots-popup h2 {\n line-height: 1.66;\n margin: 0;\n padding: 0;\n font-weight: 900;\n color: #222;\n font-family: var(--deepdots-font, \'Montserrat\');\n font-size: 18px;\n text-transform: uppercase;\n text-align: center;\n margin-bottom: 40px;\n}\n\n/* Los controles de formulario no heredan font-family por defecto: cuando hay\n fuente custom (clase deepdots-has-font), los forzamos a usar la del contenedor. */\n.deepdots-popup.deepdots-has-font button,\n.deepdots-popup.deepdots-has-font input,\n.deepdots-popup.deepdots-has-font textarea,\n.deepdots-popup.deepdots-has-font select {\n font-family: var(--deepdots-font, inherit);\n}\n\n.deepdots-popup h6 {\n margin-bottom: 1rem;\n}\n\n.deepdots-popup input[type="date"],\n.deepdots-popup input[type="text"],\n.deepdots-popup input[type="number"],\n.deepdots-popup input[type="email"],\n.deepdots-popup input[type="password"],\n.deepdots-popup textarea,\n.deepdots-popup select {\n box-sizing: border-box;\n padding: 10px;\n margin: 10px 0;\n width: 100%;\n border: 2px solid #ccc; /* Default border color - you can customize this */\n border-radius: 5px;\n font-size: 18px;\n outline: none;\n transition: border-color 0.3s ease;\n min-height: 50px;\n font-family: inherit;\n -webkit-appearance: none;\n}\n\n.deepdots-popup select {\n background-image: linear-gradient(45deg, transparent 50%, gray 50%),\n linear-gradient(135deg, gray 50%, transparent 50%),\n linear-gradient(to right, #ccc, #ccc);\n background-position: calc(100% - 20px) calc(1em + 2px),\n calc(100% - 15px) calc(1em + 2px),\n calc(100% - 2.5em) 0.5em;\n background-size: 5px 5px,\n 5px 5px,\n 1px 1.5em;\n background-repeat: no-repeat;\n}\n\n.magicfeedback-boolean-container {\n display: flex;\n flex-direction: row;\n justify-content: flex-start;\n align-items: center;\n margin: 10px 0;\n width: 100%;\n}\n\n.magicfeedback-boolean-container label {\n margin-left: 10px;\n font-weight: 400;\n font-size: 16px;\n width: 100%;\n padding-top: 5px;\n}\n\n.magicfeedback-boolean-option {\n margin-right: 10px;\n margin-left: 10px;\n width: 100%;\n height: 38px;\n border-radius: 8px;\n font-size: 16px;\n cursor: pointer;\n border: 1px solid #ced4da !important;\n}\n\n.magicfeedback-boolean-option label {\n font-weight: 400;\n font-size: 16px;\n color: #475569;\n cursor: pointer;\n width: 100%;\n height: 100%;\n display: flex;\n justify-content: center;\n align-items: center;\n border-radius: inherit;\n}\n\n.magicfeedback-boolean-option input[type=radio] + label:hover {\n color: #007bff;\n}\n\n.magicfeedback-boolean-option input[type=radio]:checked + label {\n color: #007bff;\n background-color: #cadff8;\n}\n\n/* Tama\xF1o expl\xEDcito y sin padding: un radio nativo con `padding: 20px` y solo `width` (sin\n `height`) se dibujaba enorme en WebKit, que s\xED aplica el padding al control. Se ve\xEDa en\n iOS (WebView de React Native y Safari) y no en Chrome. `flex: 0 0 auto` evita que el\n contenedor flex de la opci\xF3n lo estire. */\n.deepdots-popup input[type="radio"] {\n padding: 0;\n margin: 10px 0 10px 15px;\n width: 20px;\n height: 20px;\n min-width: 20px;\n flex: 0 0 auto;\n background-color: #fff;\n box-shadow: none;\n}\n\n/* Style for focused input/select */\n.deepdots-popup input:focus, .deepdots-popup select:focus {\n border-color: #4CAF50; /* Highlight color when focused - you can customize this */\n}\n\n/* Style for invalid input (example: validation error) */\n.deepdots-popup input.error, .deepdots-popup select.error {\n border-color: #ff3333; /* Red color for error state - you can customize this */\n}\n\n.magicfeedback-action-container {\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n align-items: center;\n margin-top: 10px;\n width: 100%;\n}\n\n.magicfeedback-action-container .magicfeedback-submit {\n cursor: pointer;\n padding: 10px;\n margin: 10px 0;\n width: 100px;\n border-radius: 8px;\n font-size: 16px;\n outline: none;\n transition: border-color 0.3s ease;\n background-color: #1E293B;\n color: white;\n}\n\n.magicfeedback-action-container .magicfeedback-back {\n cursor: pointer;\n padding: 10px;\n margin: 10px 0;\n width: 100px;\n border: 0;\n border-radius: 8px;\n font-size: 16px;\n outline: none;\n transition: border-color 0.3s ease;\n background-color: transparent;\n color: #212529;\n}\n\n\n\n/* Rating styles */\n.magicfeedback-rating {\n width: 100%;\n}\n\n.magicfeedback-rating-container {\n display: flex;\n flex-direction: row;\n justify-content: space-around;\n flex-wrap: wrap;\n align-items: center;\n\n margin: 15px 5px;\n padding: 0;\n\n list-style: none;\n font-size: 1.5rem;\n cursor: pointer;\n user-select: none;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n}\n\n.magicfeedback-rating-placeholder-value,\n.magicfeedback-rating-placeholder{\n text-align: center;\n align-content: center;\n justify-content: center;\n text-wrap: wrap;\n}\n\n.magicfeedback-rating-option {\n margin: 0 0.5rem;\n padding: 0;\n}\n\n@media (max-width: 1024px) {\n .magicfeedback-rating-option {\n margin: 10px 0;\n padding: 0;\n width: 20%;\n display: flex;\n justify-content: center;\n }\n\n .magicfeedback-rating-placeholder-value {\n font-size: 0.75rem;\n margin-bottom: 1px;\n }\n .magicfeedback-rating-placeholder{\n justify-content: center;\n }\n\n .magicfeedback-rating-container {\n flex-wrap: wrap;\n justify-content: flex-start;\n }\n}\n\n\n.magicfeedback-rating-option-label-container {\n display: flex;\n flex-direction: column;\n}\n\n\n.magicfeedback-rating-option-label-container label {\n display: inline-block;\n text-align: center;\n margin-bottom: 0;\n font-weight: 600;\n font-size: 18px;\n color: #475569;\n}\n\n.magicfeedback-rating-option-label-container input[type=radio] {\n position: absolute;\n opacity: 0;\n width: 0;\n height: 0;\n}\n\n/* IMAGE STYLES */\n.magicfeedback-rating-option-label-container input[type=radio] + img {\n cursor: pointer;\n height: 48px;\n width: 48px;\n}\n\n/* LABEL STYLES */\n.magicfeedback-rating-option-label-container input[type=radio] + label {\n cursor: pointer;\n}\n\n/* CHECKED STYLES */\n.magicfeedback-rating-option-label-container input[type=radio]:checked + img {\n box-shadow: #007bff 0px 1px 4px, #007BFFA0 0px 0px 0px 2px;\n border-radius: 50%;\n}\n\n.magicfeedback-rating-number {\n width: 100%;\n}\n.magicfeedback-rating-container,\n.magicfeedback-rating-number-container {\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n align-items: center;\n\n margin: 15px 0;\n padding: 0;\n\n list-style: none;\n font-size: 1.5rem;\n cursor: pointer;\n user-select: none;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n}\n\n/* Cuando hay placeholders (Very bad / Very good), el placeholder ocupa\n el 100% de la primera l\xEDnea y los boxes bajan a la siguiente */\n.magicfeedback-rating-number-container--with-placeholder {\n flex-wrap: wrap;\n align-items: flex-start;\n}\n\n.magicfeedback-rating-number-container--with-placeholder .magicfeedback-rating-placeholder {\n width: 100%;\n margin-bottom: 8px;\n}\n\n.magicfeedback-rating-number-container--with-placeholder .magicfeedback-rating-number-option {\n width: auto;\n flex: 1;\n}\n\n.magicfeedback-rating-number-option {\n display: flex;\n flex-direction: row;\n justify-content: flex-start;\n align-items: center;\n margin: 5px;\n padding: 0;\n list-style: none;\n font-size: 1.5rem;\n cursor: pointer;\n user-select: none;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n width: 100%;\n}\n\n.magicfeedback-rating-number-option-row{\n max-width: 100% !important;\n}\n\n.magicfeedback-rating-number-top-placeholder,\n.magicfeedback-rating-number-bottom-placeholder{\n text-align: center !important;\n align-content: center;\n justify-content: center;\n text-wrap: wrap;\n\n font-size: 15px;\n color: #475569;\n\n width: 100%;\n margin: auto;\n}\n\n@media (min-width: 650px) {\n .magicfeedback-rating-number-option-row +.magicfeedback-rating-number-container-ltr:first-child,\n .magicfeedback-rating-number-option-row + +.magicfeedback-rating-number-container-rtl:last-child {\n margin-left: 0;\n width: calc(100% - 10px);\n }\n\n .magicfeedback-rating-number-option-row +.magicfeedback-rating-number-container-rtl:first-child,\n .magicfeedback-rating-number-option-row + +.magicfeedback-rating-number-container-ltr:last-child {\n margin-right: 0;\n width: calc(100% - 10px);\n }\n}\n\n\n.magicfeedback-rating-number-option-label-container {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n width: 100%;\n height: 100%;\n}\n\n.magicfeedback-rating-number-option-label-container label {\n display: flex;\n align-items: center;\n justify-content: center;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n margin: 0 10px;\n font-weight: 600;\n font-size: 14px;\n color: #475569;\n cursor: pointer;\n width: 100%;\n height: 100%;\n min-height: 50px;\n text-align: center;\n padding: 0;\n border-radius: 4px;\n border: 1px solid #ced4da;\n background-color: rgba(246, 246, 246, 0.3);\n transition: background-color 0.15s ease-in-out;\n}\n\n.magicfeedback-rating-number-option-label-container input[type=radio] {\n position: absolute;\n opacity: 0;\n width: 0;\n height: 0;\n}\n\n.magicfeedback-rating-number-option-label-container input[type=radio] + label {\n cursor: pointer;\n}\n\n.magicfeedback-rating-number-option-label-container input[type=radio] + label:hover,\n.magicfeedback-rating-number-option-label-container input[type=radio]:checked + label {\n color: #007bff;\n border: 1px solid #007bff;\n background-color: rgba(86, 168, 253, 0.29);\n}\n\n.magicfeedback-rating-number-container-column{\n align-items: flex-start !important;\n}\n\n@media (max-width: 650px) {\n .magicfeedback-rating-number-container-ltr {\n justify-content: center;\n flex-wrap: wrap;\n }\n\n .magicfeedback-rating-number-container-rtl {\n justify-content: center;\n flex-wrap: wrap-reverse;\n }\n\n .magicfeedback-rating-number-option {\n max-width: 100%;\n height: 55px;\n margin: 5px 0;\n }\n}\n\n.magicfeedback-rating-star {\n width: 100%;\n}\n\n.magicfeedback-rating-star-container {\n display: flex !important;\n flex-direction: row !important;\n justify-content: center !important;\n align-items: center !important;\n flex-wrap: wrap;\n margin: 15px 5px;\n padding: 0;\n list-style: none;\n font-size: 1.5rem;\n cursor: pointer;\n user-select: none;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n}\n\n.magicfeedback-rating-star-option:not(:checked) > .rating__star {\n float: right;\n width: 1em;\n overflow: hidden;\n white-space: nowrap;\n cursor: pointer;\n font-size: 30px;\n color: #ccc;\n margin: 0 10px;\n}\n\n.magicfeedback-rating-star-option:not(:checked) > .rating__star:hover,\n.magicfeedback-rating-star-option:not(:checked) > .rating__star:hover ~ span {\n color: #deb217 !important;\n}\n\n.magicfeedback-rating-star-selected {\n color: #ffc700 !important;\n}\n\n\n/* Style for multiple choice image */\n.magicfeedback-image-option-label-container:hover {\n cursor: pointer;\n border: 0 !important;\n}\n\n.magicfeedback-image-option-label-container input[type=radio]:checked + img,\n.magicfeedback-image-option-label-container input[type=checkbox]:checked + img {\n border: 1px solid #007bff !important;\n box-shadow: 0 0 3px #007bff !important;\n}\n\n.magicfeedback-image-option-label-container input[type=radio] + img,\n.magicfeedback-image-option-label-container input[type=checkbox] + img {\n border: 1px solid transparent !important;\n}\n\n.magicfeedback-image-option-label-container{\n margin: 10px !important;\n height: calc(100% - 20px) !important;\n width: calc(100% - 20px) !important;\n}\n\n.magicfeedback-multiple-choice-image-option {\n display: flex;\n height: auto !important;\n box-shadow: 0 0 3px #ccc;\n}\n\n.magicfeedback-multiple-choice-image-label {\n font-size: 1rem;\n}\n\n.magicfeedback-consent-container {\n display: flex;\n flex-direction: row;\n justify-content: flex-start;\n align-items: center;\n margin: 10px 0;\n width: 100%;\n}\n\n.magicfeedback-consent-container label {\n margin-left: 10px;\n}\n\n.magicfeedback-start-message-container {\n /* ... add your start message container styles here ... */\n}\n\n.magicfeedback-success-message,\n.magicfeedback-info-message,\n.magicfeedback-start-message {\n margin: 35px 5px;\n}\n\n.magicfeedback-success-message p,\n.magicfeedback-info-message p,\n.magicfeedback-start-message p {\n font-style: normal;\n text-align: start;\n font-weight: 400;\n font-size: 16px;\n color: #475569;\n line-height: 1.5;\n}\n\n.magicfeedback-success-message img,\n.magicfeedback-info-message img,\n.magicfeedback-start-message img {\n width: 400px;\n max-width: 80%;\n height: auto;\n margin: 10px auto;\n}\n\n.magicfeedback-counter,\n.magicfeedback-point-system-total {\n margin: 10px 0 0 0 !important;\n display: flex !important;\n justify-content: right !important;\n align-items: center !important;\n width: 100%;\n}\n\n.magicfeedback-skip-container {\n background-color: transparent !important;\n border: 0 !important;\n color: #999999FF !important;\n padding: 0 !important;\n margin: 0 !important;\n cursor: pointer !important;\n font-size: 0.5em !important;\n font-weight: 400 !important;\n box-shadow: 0 0 0 !important;\n\n &:hover {\n color: #0066ff;\n }\n}\n\n.magicfeedback-skip-container input[type=checkbox] {\n border-color: #999999FF !important;\n border: 0 !important;\n cursor: pointer !important;\n\n}\n\n.magicfeedback-multi-question-matrix,\n.magicfeedback-point-system,\n.magicfeedback-priority-list {\n width: 100% !important;\n}\n\n.magicfeedback-multi-question-matrix-container,\n.magicfeedback-point-system-container,\n.magicfeedback-priority-list-container {\n width: 100% !important;\n overflow-x: auto;\n}\n\n.magicfeedback-point-system-list,\n.magicfeedback-priority-list-list,\n.magicfeedback-multi-question-matrix-table {\n width: 100% !important;\n padding: 0 !important;\n overflow-x: auto;\n}\n\n.magicfeedback-multi-question-matrix {\n position: relative !important;\n}\n\n.magicfeedback-multi-question-matrix-container {\n overflow: auto !important;\n padding-bottom: 10px;\n}\n\n.magicfeedback-multi-question-matrix-label{\n text-align: left !important;\n}\n.magicfeedback-priority-list-item {\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n align-items: center;\n padding: 10px 0 10px 10px;\n\n border: 1px solid #ced4da;\n border-radius: 5px;\n margin: 10px 0 !important;\n}\n\n.magicfeedback-point-system-item {\n height: 45px;\n margin: 5px 0 !important;\n}\n\n.magicfeedback-point-system-item label,\n.magicfeedback-priority-list-item-label {\n font-family: inherit;\n font-size: 18px !important;\n color: #212529;\n text-align: start;\n word-wrap: break-word;\n white-space: normal;\n padding: 0 10px 0 0;\n}\n\n.magicfeedback-point-system-input-container {\n padding: 0 10px 0 0;\n border-radius: 5px;\n font-size: 14px;\n border: 1px solid #ced4da;\n height: 42px;\n margin: auto 0;\n}\n\n.magicfeedback-multi-question-matrix-table thead {\n margin-bottom: 20px;\n}\n\n.magicfeedback-multi-question-matrix-table th{\n text-align: center;\n font-weight: 400 !important;\n font-size: 1rem !important;\n padding: 0 10px !important;\n}\n\n.magicfeedback-multi-question-matrix-table th,\n.magicfeedback-multi-question-matrix-table td label,\n.magicfeedback-priority-list-arrow-up,\n.magicfeedback-priority-list-arrow-down {\n font-style: normal !important;\n font-weight: 400 !important;\n font-size: 1rem !important;\n color: #475569 !important;\n cursor: pointer !important;\n margin: 0 !important;\n line-height: inherit;\n}\n\n.magicfeedback-multi-question-matrix-table tr {\n align-items: center;\n margin: 5px 0;\n}\n\n.magicfeedback-multi-question-matrix-row-tr{\n border-radius: 5px;\n margin: 10px 0 !important;\n}\n\n.magicfeedback-multi-question-matrix-row-tr:nth-child(odd) {\n background-color: #f1f6f6; /* Light gray background for odd rows */\n}\n\n.magicfeedback-multi-question-matrix-row-tr:nth-child(even) {\n background-color: #ffffff; /* White background for even rows */\n}\n\n.magicfeedback-multi-question-matrix-row-label {\n text-align: left !important;\n}\n\n.magicfeedback-point-system-item span {\n color: #475569 !important;\n}\n\n.magicfeedback-point-system-item input {\n padding: 0;\n margin: 0 !important;\n width: auto !important;\n min-width: 100px !important;\n height: auto !important;\n min-height: 42px;\n cursor: pointer;\n font-size: 14px;\n text-align: center !important;\n}\n\n.magicfeedback-multi-question-matrix-table input {\n margin: auto !important;\n padding: 20px !important;\n width: 100% !important;\n height: 15px;\n border: 1px solid #ced4da;\n cursor: pointer;\n}\n\n.magicfeedback-image{\n max-height: 400px !important;\n height: auto !important;\n max-width: 100% !important;\n margin: 10px auto !important;\n}\n\n.magicfeedback-error{\n margin-top: 5px;\n}';
185
+ style_default = `/**
186
+ * NO EDITAR A MANO \u2014 generado por scripts/vendor-survey-css.mjs
187
+ *
188
+ * Copia de @magicfeedback/native@2.2.8 \u2192 dist/styles/magicfeedback-default.css
189
+ * (la hoja can\xF3nica del paquete, la que apunta su campo "style"), con estos cambios locales:
190
+ *
191
+ * 1. Sin el @import de Google Fonts (Nunito): no queremos una petici\xF3n externa desde la
192
+ * p\xE1gina del host, y la tipograf\xEDa la decide el popup.
193
+ * 2. .magicfeedback-container hereda la fuente del popup (var(--deepdots-font, inherit)).
194
+ * 3. Los selectores desnudos (h2, p, input, textarea, select, ::placeholder, .error) van
195
+ * acotados a .deepdots-popup: este CSS se inyecta en el <head> del host y sin acotar
196
+ * repintar\xEDa su web.
197
+ * 4. El grupo .magicfeedback-radio se cualifica como div.magicfeedback-radio (la clase acaba
198
+ * tambi\xE9n en el <input> del boolean).
199
+ * 5. Al final, un bloque de reglas propias del popup (fuente en los controles y padding del
200
+ * radio nativo).
201
+ *
202
+ * Las variables --mf-* se dejan en :root a prop\xF3sito: el modal del priority-list se portea a
203
+ * <body>, fuera de .deepdots-popup, y ah\xED las necesita.
204
+ *
205
+ * Para subir de versi\xF3n: npm i @magicfeedback/native@<v> && node scripts/vendor-survey-css.mjs
206
+ */
207
+
208
+ /**
209
+ * @magicfeedback/native - Default Styles
210
+ * Clean, minimal, and elegant survey rendering
211
+ */
212
+
213
+ /* @import de Google Fonts (Nunito) eliminado al vendorizar: la fuente la pone el popup. */
214
+
215
+ /* ========================================
216
+ CSS VARIABLES - Design SYSTEM
217
+ ======================================== */
218
+ :root {
219
+ /* Colors - Minimal Pastel */
220
+ /* --mf-primary is the one source of truth for brand/accent color \u2014
221
+ every token below derives from it via color-mix() (or references
222
+ it directly) so changing this single value, here or via a
223
+ per-integration override, keeps hover/light/border states in
224
+ sync automatically instead of going stale independently. Scoped
225
+ to genuinely interactive/accent surfaces (buttons, selected
226
+ chips, focus rings) \u2014 general body text stays on its own neutral
227
+ scale below, not tied to the brand color. */
228
+ --mf-primary: #5d7bad;
229
+ --mf-primary-hover: color-mix(in srgb, var(--mf-primary) 85%, black);
230
+ --mf-primary-light: color-mix(in srgb, var(--mf-primary) 15%, white);
231
+ /* a translucent tint \u2014 mixed with transparent (opacity), not white,
232
+ so it reads as a soft shadow of the brand color rather than a
233
+ pastel of it. */
234
+ --mf-primary-border: color-mix(in srgb, var(--mf-primary) 35%, transparent);
235
+
236
+ --mf-text-primary: #1E293B;
237
+ --mf-text-secondary: #475569;
238
+ --mf-text-muted: #94A3B8;
239
+
240
+ --mf-bg-primary: #F8FAFC;
241
+ --mf-bg-secondary: #FFFFFF;
242
+ --mf-bg-hover: #EEF2F6;
243
+
244
+ --mf-border: #E2E8F0;
245
+ --mf-border-focus: var(--mf-primary);
246
+
247
+ --mf-success: #16A34A;
248
+ --mf-error: #EF4444;
249
+ --mf-warning: #F59E0B;
250
+
251
+ --mf-surface: #FFFFFF;
252
+ --mf-surface-alt: #F1F5F9;
253
+ --mf-accent: #38BDF8;
254
+
255
+ /* Spacing */
256
+ --mf-space-xs: 0.25rem;
257
+ --mf-space-sm: 0.5rem;
258
+ --mf-space-md: 0.75rem;
259
+ --mf-space-lg: 1rem;
260
+ --mf-space-xl: 1.5rem;
261
+
262
+ /* Border Radius */
263
+ --mf-radius-sm: 0.5rem;
264
+ --mf-radius-md: 0.75rem;
265
+ --mf-radius-lg: 1.25rem;
266
+ --mf-radius-full: 9999px;
267
+
268
+ /* Shadows */
269
+ --mf-shadow-sm: 0 1px 2px 0 rgba(15, 23, 42, 0.06);
270
+ --mf-shadow-md: 0 8px 20px rgba(15, 23, 42, 0.08);
271
+ --mf-shadow-lg: 0 16px 30px rgba(15, 23, 42, 0.12);
272
+ --mf-shadow-focus: 0 0 0 3px rgba(30, 41, 59, 0.15);
273
+ --mf-shadow-card: 0 18px 40px rgba(15, 23, 42, 0.08);
274
+
275
+ /* Typography */
276
+ --mf-font-sans: "Nunito", "Quicksand", "Avenir Next", "Trebuchet MS", sans-serif;
277
+ --mf-font-size-sm: 0.875rem;
278
+ --mf-font-size-base: 1rem;
279
+ --mf-font-size-lg: 1.125rem;
280
+ --mf-font-size-xl: 1.25rem;
281
+ --mf-line-height: 1.6;
282
+
283
+ /* Font Weights */
284
+ --mf-font-weight-normal: 400;
285
+ --mf-font-weight-medium: 500;
286
+ --mf-font-weight-semibold: 600;
287
+ --mf-font-weight-bold: 700;
288
+ --mf-font-weight-extrabold: 800;
289
+
290
+ /* Transitions */
291
+ --mf-transition: all 0.2s ease;
292
+ --mf-transition-fast: all 0.15s ease;
293
+ }
294
+
295
+ /* ========================================
296
+ ANIMATIONS
297
+ ======================================== */
298
+ @keyframes mf-fade-in {
299
+ from {
300
+ opacity: 0;
301
+ transform: translateY(8px);
302
+ }
303
+ to {
304
+ opacity: 1;
305
+ transform: translateY(0);
306
+ }
307
+ }
308
+
309
+ @keyframes mf-slide-in {
310
+ from {
311
+ opacity: 0;
312
+ transform: translateX(-16px);
313
+ }
314
+ to {
315
+ opacity: 1;
316
+ transform: translateX(0);
317
+ }
318
+ }
319
+
320
+ @keyframes mf-scale-in {
321
+ from {
322
+ opacity: 0;
323
+ transform: scale(0.95);
324
+ }
325
+ to {
326
+ opacity: 1;
327
+ transform: scale(1);
328
+ }
329
+ }
330
+
331
+ @keyframes mf-pulse {
332
+ 0%,
333
+ 100% {
334
+ opacity: 1;
335
+ }
336
+ 50% {
337
+ opacity: 0.8;
338
+ }
339
+ }
340
+
341
+ /* ========================================
342
+ BASE CONTAINER
343
+ ======================================== */
344
+ .magicfeedback-container {
345
+ /* Local: hereda la fuente del popup; --deepdots-font viene de PopupStyle.font. */
346
+ font-family: var(--deepdots-font, inherit);
347
+ color: var(--mf-text-primary);
348
+ line-height: var(--mf-line-height);
349
+ animation: mf-fade-in 0.4s ease-out;
350
+ border-radius: var(--mf-radius-lg);
351
+ }
352
+
353
+ /* ========================================
354
+ MESSAGES
355
+ ======================================== */
356
+ .magicfeedback-success-message,
357
+ .magicfeedback-info-message,
358
+ .magicfeedback-start-message {
359
+ padding: var(--mf-space-lg);
360
+ margin: var(--mf-space-lg) 0;
361
+ animation: mf-scale-in 0.3s ease-out;
362
+ }
363
+
364
+ /* .magicfeedback-info-message/-start-message are set via innerHTML (see
365
+ renderInfoPage.ts / questions.service.ts's renderStartMessage) \u2014 whatever
366
+ rich text a survey author writes lands here as real HTML, not just the
367
+ <p>/<img> pair this used to style. Covering the rest of what a rich-text
368
+ editor commonly outputs (headings, lists, links, emphasis, quotes, code,
369
+ rules) keeps that content on the same type scale and palette as the rest
370
+ of the widget instead of falling back to unstyled browser defaults. */
371
+ .magicfeedback-success-message > :first-child,
372
+ .magicfeedback-info-message > :first-child,
373
+ .magicfeedback-start-message > :first-child {
374
+ margin-top: 0;
375
+ }
376
+
377
+ .magicfeedback-success-message > :last-child,
378
+ .magicfeedback-info-message > :last-child,
379
+ .magicfeedback-start-message > :last-child {
380
+ margin-bottom: 0;
381
+ }
382
+
383
+ .magicfeedback-success-message p,
384
+ .magicfeedback-info-message p,
385
+ .magicfeedback-start-message p {
386
+ font-size: var(--mf-font-size-base);
387
+ color: var(--mf-text-secondary);
388
+ margin: 0 0 var(--mf-space-md);
389
+ line-height: var(--mf-line-height);
390
+ }
391
+
392
+ .magicfeedback-info-message h1,
393
+ .magicfeedback-info-message h2,
394
+ .magicfeedback-info-message h3,
395
+ .magicfeedback-info-message h4,
396
+ .magicfeedback-info-message h5,
397
+ .magicfeedback-info-message h6,
398
+ .magicfeedback-start-message h1,
399
+ .magicfeedback-start-message h2,
400
+ .magicfeedback-start-message h3,
401
+ .magicfeedback-start-message h4,
402
+ .magicfeedback-start-message h5,
403
+ .magicfeedback-start-message h6 {
404
+ color: var(--mf-text-primary);
405
+ font-weight: var(--mf-font-weight-bold);
406
+ line-height: 1.3;
407
+ margin: var(--mf-space-lg) 0 var(--mf-space-sm);
408
+ text-align: left;
409
+ }
410
+
411
+ .magicfeedback-info-message h1, .magicfeedback-start-message h1 { font-size: var(--mf-font-size-xl); }
412
+ .magicfeedback-info-message h2, .magicfeedback-start-message h2 { font-size: var(--mf-font-size-lg); }
413
+ .magicfeedback-info-message h3,
414
+ .magicfeedback-info-message h4,
415
+ .magicfeedback-info-message h5,
416
+ .magicfeedback-info-message h6,
417
+ .magicfeedback-start-message h3,
418
+ .magicfeedback-start-message h4,
419
+ .magicfeedback-start-message h5,
420
+ .magicfeedback-start-message h6 { font-size: var(--mf-font-size-base); }
421
+
422
+ .magicfeedback-info-message strong,
423
+ .magicfeedback-info-message b,
424
+ .magicfeedback-start-message strong,
425
+ .magicfeedback-start-message b {
426
+ font-weight: var(--mf-font-weight-bold);
427
+ color: var(--mf-text-primary);
428
+ }
429
+
430
+ .magicfeedback-info-message a,
431
+ .magicfeedback-start-message a {
432
+ color: var(--mf-primary);
433
+ text-decoration: underline;
434
+ text-underline-offset: 2px;
435
+ }
436
+
437
+ .magicfeedback-info-message a:hover,
438
+ .magicfeedback-start-message a:hover {
439
+ color: var(--mf-primary-hover);
440
+ }
441
+
442
+ .magicfeedback-info-message ul,
443
+ .magicfeedback-info-message ol,
444
+ .magicfeedback-start-message ul,
445
+ .magicfeedback-start-message ol {
446
+ margin: 0 0 var(--mf-space-md);
447
+ padding-left: var(--mf-space-xl);
448
+ color: var(--mf-text-secondary);
449
+ line-height: var(--mf-line-height);
450
+ }
451
+
452
+ .magicfeedback-info-message li + li,
453
+ .magicfeedback-start-message li + li {
454
+ margin-top: var(--mf-space-xs);
455
+ }
456
+
457
+ .magicfeedback-info-message blockquote,
458
+ .magicfeedback-start-message blockquote {
459
+ margin: 0 0 var(--mf-space-md);
460
+ padding: var(--mf-space-sm) var(--mf-space-md);
461
+ border-left: 3px solid var(--mf-primary-border);
462
+ color: var(--mf-text-secondary);
463
+ font-style: italic;
464
+ }
465
+
466
+ .magicfeedback-info-message code,
467
+ .magicfeedback-start-message code {
468
+ font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
469
+ font-size: 0.9em;
470
+ background: var(--mf-bg-hover);
471
+ padding: 0.15em 0.4em;
472
+ border-radius: var(--mf-radius-sm);
473
+ }
474
+
475
+ .magicfeedback-info-message pre,
476
+ .magicfeedback-start-message pre {
477
+ margin: 0 0 var(--mf-space-md);
478
+ padding: var(--mf-space-md);
479
+ background: var(--mf-bg-hover);
480
+ border-radius: var(--mf-radius-md);
481
+ overflow-x: auto;
482
+ }
483
+
484
+ .magicfeedback-info-message pre code,
485
+ .magicfeedback-start-message pre code {
486
+ background: none;
487
+ padding: 0;
488
+ }
489
+
490
+ .magicfeedback-info-message hr,
491
+ .magicfeedback-start-message hr {
492
+ border: none;
493
+ border-top: 1px solid var(--mf-border);
494
+ margin: var(--mf-space-lg) 0;
495
+ }
496
+
497
+ .magicfeedback-success-message img,
498
+ .magicfeedback-info-message img,
499
+ .magicfeedback-start-message img {
500
+ max-width: 100%;
501
+ height: auto;
502
+ margin: var(--mf-space-lg) auto;
503
+ display: block;
504
+ border-radius: var(--mf-radius-md);
505
+ }
506
+
507
+ .magicfeedback-image {
508
+ max-height: 400px;
509
+ height: auto;
510
+ max-width: 100%;
511
+ margin: var(--mf-space-lg) auto;
512
+ display: block;
513
+ border-radius: var(--mf-radius-md);
514
+ }
515
+
516
+ /* ========================================
517
+ FORM STRUCTURE
518
+ ======================================== */
519
+ .magicfeedback-form {
520
+ display: flex;
521
+ flex-direction: column;
522
+ gap: var(--mf-space-lg);
523
+ padding: clamp(16px, 2.5vw, 28px);
524
+ }
525
+
526
+ .magicfeedback-questions {
527
+ display: flex;
528
+ flex-direction: column;
529
+ gap: var(--mf-space-xl);
530
+ width: 100%;
531
+ }
532
+
533
+ .magicfeedback-div {
534
+ display: flex;
535
+ flex-direction: column;
536
+ gap: var(--mf-space-sm);
537
+ animation: mf-slide-in 0.3s ease-out;
538
+ background: var(--mf-bg-secondary);
539
+ border-radius: var(--mf-radius-md);
540
+ }
541
+
542
+ /* ========================================
543
+ LABELS & TYPOGRAPHY
544
+ ======================================== */
545
+ .magicfeedback-label {
546
+ font-size: var(--mf-font-size-lg);
547
+ font-weight: var(--mf-font-weight-bold);
548
+ color: var(--mf-text-primary);
549
+ line-height: var(--mf-line-height);
550
+ text-align: left;
551
+ letter-spacing: -0.01em;
552
+ }
553
+
554
+ .magicfeedback-sublabel {
555
+ font-size: var(--mf-font-size-base);
556
+ font-weight: var(--mf-font-weight-normal);
557
+ color: var(--mf-text-secondary);
558
+ margin-bottom: var(--mf-space-sm);
559
+ }
560
+
561
+ .deepdots-popup h2 {
562
+ font-size: var(--mf-font-size-xl);
563
+ font-weight: 600;
564
+ color: var(--mf-text-primary);
565
+ margin: 0 0 var(--mf-space-xl) 0;
566
+ text-align: center;
567
+ letter-spacing: -0.01em;
568
+ }
569
+
570
+ .deepdots-popup p {
571
+ margin: 0;
572
+ font-size: var(--mf-font-size-sm);
573
+ color: var(--mf-text-secondary);
574
+ }
575
+
576
+ /* ========================================
577
+ FORM INPUTS
578
+ ======================================== */
579
+ .deepdots-popup input[type="date"],
580
+ .deepdots-popup input[type="text"],
581
+ .deepdots-popup input[type="number"],
582
+ .deepdots-popup input[type="email"],
583
+ .deepdots-popup input[type="password"],
584
+ .deepdots-popup textarea,
585
+ .deepdots-popup select {
586
+ padding: 0.75rem 0.9rem;
587
+ font-size: var(--mf-font-size-base);
588
+ font-family: inherit;
589
+ color: var(--mf-text-primary);
590
+ background-color: var(--mf-surface);
591
+ border: 2px solid var(--mf-border);
592
+ border-radius: var(--mf-radius-md);
593
+ outline: none;
594
+ transition: var(--mf-transition);
595
+ -webkit-appearance: none;
596
+ appearance: none;
597
+ box-shadow: var(--mf-shadow-sm);
598
+ }
599
+
600
+ .deepdots-popup textarea {
601
+ min-height: 100px;
602
+ resize: vertical;
603
+ }
604
+
605
+ .deepdots-popup input::placeholder,
606
+ .deepdots-popup textarea::placeholder {
607
+ color: var(--mf-text-muted);
608
+ }
609
+
610
+ /* Remove number input spinners */
611
+ .deepdots-popup input::-webkit-outer-spin-button,
612
+ .deepdots-popup input::-webkit-inner-spin-button {
613
+ -webkit-appearance: none;
614
+ margin: 0;
615
+ }
616
+
617
+ .deepdots-popup input[type="number"] {
618
+ /* -moz-appearance: textfield; removed for lint compatibility */
619
+ }
620
+
621
+ /* Custom Select Arrow */
622
+ .deepdots-popup select {
623
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%2364748b' d='M6 9L1 4h10z'/%3E%3C/svg%3E");
624
+ background-repeat: no-repeat;
625
+ background-position: right var(--mf-space-md) center;
626
+ padding-right: var(--mf-space-xl);
627
+ }
628
+
629
+ /* Error State */
630
+ .deepdots-popup input.error,
631
+ .deepdots-popup select.error,
632
+ .deepdots-popup textarea.error {
633
+ border-color: var(--mf-error);
634
+ }
635
+
636
+ .magicfeedback-error {
637
+ margin-top: var(--mf-space-xs);
638
+ font-size: var(--mf-font-size-sm);
639
+ color: var(--mf-error);
640
+ }
641
+
642
+ /* ========================================
643
+ CHECKBOX & RADIO OPTIONS
644
+ ======================================== */
645
+ .magicfeedback-checkbox,
646
+ div.magicfeedback-radio {
647
+ display: flex;
648
+ flex-direction: column;
649
+ gap: var(--mf-space-sm);
650
+ width: 100%;
651
+ }
652
+
653
+ .magicfeedback-checkbox-container,
654
+ .magicfeedback-radio-container {
655
+ display: flex;
656
+ align-items: center;
657
+ gap: var(--mf-space-sm);
658
+ padding: var(--mf-space-md);
659
+ border: 1.5px solid var(--mf-border);
660
+ border-radius: var(--mf-radius-md);
661
+ cursor: pointer;
662
+ transition: var(--mf-transition-fast);
663
+ }
664
+
665
+ .magicfeedback-checkbox-container:hover,
666
+ .magicfeedback-radio-container:hover {
667
+ background-color: var(--mf-bg-hover);
668
+ border-color: var(--mf-primary);
669
+ }
670
+
671
+ .magicfeedback-checkbox-container:has(input:checked),
672
+ .magicfeedback-radio-container:has(input:checked) {
673
+ background-color: var(--mf-primary-light);
674
+ border-color: var(--mf-primary);
675
+ }
676
+
677
+ .magicfeedback-checkbox input[type="checkbox"],
678
+ .magicfeedback-radio-container input[type="radio"] {
679
+ width: 18px;
680
+ height: 18px;
681
+ margin: 0;
682
+ cursor: pointer;
683
+ flex-shrink: 0;
684
+ accent-color: var(--mf-primary);
685
+ }
686
+
687
+ .magicfeedback-checkbox label,
688
+ .magicfeedback-radio-container label {
689
+ font-size: var(--mf-font-size-base);
690
+ text-align: left;
691
+ color: var(--mf-text-primary);
692
+ cursor: pointer;
693
+ margin: 0;
694
+ flex: 1;
695
+ }
696
+
697
+ /* ========================================
698
+ BOOLEAN OPTIONS
699
+ ======================================== */
700
+ .magicfeedback-boolean-container {
701
+ display: flex;
702
+ gap: var(--mf-space-md);
703
+ width: 100%;
704
+ }
705
+
706
+ .magicfeedback-boolean-option {
707
+ flex: 1;
708
+ position: relative;
709
+ }
710
+
711
+ .magicfeedback-boolean-option input[type="radio"] {
712
+ position: absolute;
713
+ opacity: 0;
714
+ width: 0;
715
+ height: 0;
716
+ }
717
+
718
+ .magicfeedback-boolean-option label {
719
+ display: flex;
720
+ align-items: center;
721
+ justify-content: center;
722
+ padding: var(--mf-space-md);
723
+ font-size: var(--mf-font-size-base);
724
+ font-weight: 500;
725
+ color: var(--mf-text-secondary);
726
+ border: 1.5px solid var(--mf-border);
727
+ border-radius: var(--mf-radius-md);
728
+ cursor: pointer;
729
+ transition: var(--mf-transition-fast);
730
+ margin: 0;
731
+ width: -webkit-fill-available;
732
+ height: inherit;
733
+ }
734
+
735
+ .magicfeedback-boolean-option label:hover {
736
+ background-color: var(--mf-bg-hover);
737
+ border-color: var(--mf-primary);
738
+ }
739
+
740
+ .magicfeedback-boolean-option input[type="radio"]:checked + label {
741
+ color: var(--mf-primary);
742
+ background-color: var(--mf-primary-light);
743
+ border-color: var(--mf-primary);
744
+ font-weight: 600;
745
+ }
746
+
747
+ /* ========================================
748
+ RATING SYSTEMS
749
+ ======================================== */
750
+ .magicfeedback-rating,
751
+ .magicfeedback-rating-number,
752
+ .magicfeedback-rating-star {
753
+ width: 100%;
754
+ }
755
+
756
+ .magicfeedback-rating-container,
757
+ .magicfeedback-rating-number-container,
758
+ .magicfeedback-rating-star-container {
759
+ display: flex;
760
+ flex-wrap: wrap;
761
+ gap: var(--mf-space-sm);
762
+ justify-content: center;
763
+ align-items: center;
764
+ padding: var(--mf-space-md) 0;
765
+ list-style: none;
766
+ margin: 0;
767
+ }
768
+
769
+ /* Caption line below the row \u2014 min on one side, max on the other (swapped
770
+ for order: "rtl") \u2014 same simple, non-responsive pattern as the
771
+ rating-number row caption. Used by rating-star and rating-emoji. */
772
+ .magicfeedback-rating-placeholder {
773
+ display: flex;
774
+ justify-content: space-between;
775
+ gap: var(--mf-space-md);
776
+ width: 100%;
777
+ margin-top: var(--mf-space-sm);
778
+ font-size: var(--mf-font-size-sm);
779
+ font-weight: var(--mf-font-weight-semibold);
780
+ color: var(--mf-text-secondary);
781
+ }
782
+
783
+ .magicfeedback-rating-placeholder-value {
784
+ overflow-wrap: anywhere;
785
+ }
786
+
787
+ .magicfeedback-rating-placeholder-value:last-child {
788
+ text-align: right;
789
+ }
790
+
791
+ /* Rating with Images */
792
+ .magicfeedback-rating-option-label-container input[type="radio"] {
793
+ position: absolute;
794
+ opacity: 0;
795
+ width: 0;
796
+ height: 0;
797
+ }
798
+
799
+ .magicfeedback-rating-option-label-container img {
800
+ width: 56px;
801
+ height: 56px;
802
+ cursor: pointer;
803
+ transition: var(--mf-transition-fast);
804
+ border-radius: var(--mf-radius-full);
805
+ border: 2px solid transparent;
806
+ }
807
+
808
+ .magicfeedback-rating-option-label-container img:hover {
809
+ transform: scale(1.1);
810
+ border-color: var(--mf-primary);
811
+ }
812
+
813
+ .magicfeedback-rating-option-label-container input[type="radio"]:checked + img {
814
+ border-color: var(--mf-primary);
815
+ box-shadow: 0 0 0 3px var(--mf-primary-light);
816
+ }
817
+
818
+ .magicfeedback-rating-option-label-container label {
819
+ display: block;
820
+ text-align: center;
821
+ font-size: var(--mf-font-size-sm);
822
+ color: var(--mf-text-secondary);
823
+ margin-top: var(--mf-space-xs);
824
+ cursor: pointer;
825
+ }
826
+
827
+ /* Rating Numbers \u2014 each option is its own outlined chip in the survey's
828
+ primary color, with a gap between them. Row and column use the same
829
+ chip; column additionally has room to show each option's own text
830
+ plainly next to its number. */
831
+
832
+ /* Every size here is width:100%/flex:1 combined with the chip's own
833
+ padding and border. Without border-box, the browser's default
834
+ content-box adds that padding/border on TOP of the declared size, so
835
+ the chip quietly overflows past its flex slot \u2014 reading as "not quite
836
+ full width" or, worse, pushing into the next chip. */
837
+ .magicfeedback-rating-number-container,
838
+ .magicfeedback-rating-number-option,
839
+ .magicfeedback-rating-number-option-label-container,
840
+ .magicfeedback-rating-number-value {
841
+ box-sizing: border-box;
842
+ }
843
+
844
+ /* The shared rating-container rule (above, reused by star rating) sets
845
+ align-items:center for its row-of-chips layout \u2014 in a stacked column
846
+ that still nudges a 100%-wide chip inward instead of a true 0 offset.
847
+ Force stretch so every chip fills the exact same width, flush on
848
+ both sides. */
849
+ .magicfeedback-rating-number-container-column,
850
+ .magicfeedback-rating-number-container-column-reverse {
851
+ align-items: stretch;
852
+ }
853
+
854
+ /* Caption line below the row \u2014 the single place min/max labels live
855
+ for row mode, shared by mobile and desktop. */
856
+ .magicfeedback-rating-number-scale-labels {
857
+ display: flex;
858
+ justify-content: space-between;
859
+ gap: var(--mf-space-md);
860
+ margin-top: var(--mf-space-sm);
861
+ font-size: var(--mf-font-size-sm);
862
+ font-weight: var(--mf-font-weight-semibold);
863
+ color: var(--mf-text-secondary);
864
+ }
865
+
866
+ .magicfeedback-rating-number-scale-label {
867
+ overflow-wrap: anywhere;
868
+ }
869
+
870
+ .magicfeedback-rating-number-scale-label:last-child {
871
+ text-align: right;
872
+ }
873
+
874
+ /* Column, no per-option text: each row is its own separated chip, so
875
+ the min/max labels bookend the stack from outside it \u2014 one line
876
+ above the first chip, one below the last. Margin goes on whichever
877
+ side actually faces the list \u2014 the "before" label (always the first
878
+ child) gets space below it, the "after" one (always right after the
879
+ container, extra option row or not) gets space above it \u2014 so both
880
+ sit the same distance from the chips regardless of which one it is. */
881
+ .magicfeedback-rating-number-scale-label-block {
882
+ font-size: var(--mf-font-size-sm);
883
+ font-weight: var(--mf-font-weight-semibold);
884
+ color: var(--mf-text-secondary);
885
+ text-align: center;
886
+ }
887
+
888
+ .magicfeedback-rating-number-scale-label-block:first-child {
889
+ margin-bottom: var(--mf-space-sm);
890
+ }
891
+
892
+ .magicfeedback-rating-number-container + .magicfeedback-rating-number-scale-label-block {
893
+ margin-top: var(--mf-space-sm);
894
+ }
895
+
896
+ .magicfeedback-rating-number-option {
897
+ display: flex;
898
+ }
899
+
900
+ .magicfeedback-rating-number-option-label-container {
901
+ position: relative;
902
+ width: 100%;
903
+ display: flex;
904
+ cursor: pointer;
905
+ }
906
+
907
+ .magicfeedback-rating-number-option-label-container input[type="radio"] {
908
+ position: absolute;
909
+ opacity: 0;
910
+ width: 0;
911
+ height: 0;
912
+ }
913
+
914
+ .magicfeedback-rating-number-value {
915
+ display: flex;
916
+ align-items: center;
917
+ justify-content: center;
918
+ width: 100%;
919
+ transition: var(--mf-transition-fast);
920
+ color: var(--mf-text-secondary);
921
+ font-weight: var(--mf-font-weight-semibold);
922
+ }
923
+
924
+ /* Row: individual outlined chips in the survey's own primary color \u2014
925
+ var(--mf-primary) so whatever brand color a given survey sets carries
926
+ through automatically, no color hardcoded here. */
927
+ .magicfeedback-rating-number-container-row,
928
+ .magicfeedback-rating-number-container-row-reverse {
929
+ flex-wrap: nowrap;
930
+ gap: var(--mf-space-sm);
931
+ }
932
+
933
+ .magicfeedback-rating-number-option-row,
934
+ .magicfeedback-rating-number-option-row-reverse {
935
+ flex: 1 1 0;
936
+ min-width: 0;
937
+ }
938
+
939
+ .magicfeedback-rating-number-option-row .magicfeedback-rating-number-value,
940
+ .magicfeedback-rating-number-option-row-reverse .magicfeedback-rating-number-value {
941
+ min-height: 56px;
942
+ padding: var(--mf-space-sm);
943
+ border: 2px solid var(--mf-primary-border);
944
+ border-radius: var(--mf-radius-md);
945
+ background: var(--mf-bg-secondary);
946
+ color: var(--mf-primary);
947
+ font-size: var(--mf-font-size-lg);
948
+ font-weight: var(--mf-font-weight-bold);
949
+ }
950
+
951
+ /* More than 6 options (e.g. a 0-10 NPS scale): still one row, never
952
+ wraps \u2014 but scaled down on purpose, so it reads as a compact chip
953
+ rather than the same 56px button stretched thin. */
954
+ .magicfeedback-rating-number-container-row--dense .magicfeedback-rating-number-option-row .magicfeedback-rating-number-value,
955
+ .magicfeedback-rating-number-container-row--dense .magicfeedback-rating-number-option-row-reverse .magicfeedback-rating-number-value {
956
+ min-height: 36px;
957
+ padding: var(--mf-space-xs);
958
+ border-radius: var(--mf-radius-sm);
959
+ font-size: 0.8rem;
960
+ }
961
+
962
+ .magicfeedback-rating-number-option-row .magicfeedback-rating-number-option-label-container:hover .magicfeedback-rating-number-value,
963
+ .magicfeedback-rating-number-option-row-reverse .magicfeedback-rating-number-option-label-container:hover .magicfeedback-rating-number-value {
964
+ background: var(--mf-primary-light);
965
+ }
966
+
967
+ .magicfeedback-rating-number-option-row .magicfeedback-rating-number-option-label-container input[type="radio"]:checked + .magicfeedback-rating-number-value,
968
+ .magicfeedback-rating-number-option-row-reverse .magicfeedback-rating-number-option-label-container input[type="radio"]:checked + .magicfeedback-rating-number-value {
969
+ color: #fff;
970
+ background-color: var(--mf-primary);
971
+ box-shadow: var(--mf-shadow-md);
972
+ }
973
+
974
+ /* Extra option: always its own row below the scale, and styled like every
975
+ other chip now \u2014 "doesn't apply" is still not a point on the 1..N
976
+ continuum, but it no longer needs a different border style to say so. */
977
+ .magicfeedback-rating-number-extra-row {
978
+ display: flex;
979
+ justify-content: center;
980
+ margin-top: var(--mf-space-sm);
981
+ }
982
+
983
+ .magicfeedback-rating-number-option--extra {
984
+ flex: 0 1 auto;
985
+ }
986
+
987
+ .magicfeedback-rating-number-option--extra .magicfeedback-rating-number-option-label-container {
988
+ width: auto;
989
+ }
990
+
991
+ .magicfeedback-rating-number-option--extra .magicfeedback-rating-number-value {
992
+ min-height: 36px;
993
+ padding: 0 var(--mf-space-md);
994
+ border: 2px solid var(--mf-primary-border);
995
+ border-radius: var(--mf-radius-md);
996
+ background: var(--mf-bg-secondary);
997
+ color: var(--mf-primary);
998
+ font-size: var(--mf-font-size-sm);
999
+ }
1000
+
1001
+ .magicfeedback-rating-number-option--extra .magicfeedback-rating-number-option-label-container:hover .magicfeedback-rating-number-value {
1002
+ background: var(--mf-primary-light);
1003
+ }
1004
+
1005
+ .magicfeedback-rating-number-option--extra .magicfeedback-rating-number-option-label-container input[type="radio"]:checked + .magicfeedback-rating-number-value {
1006
+ color: #fff;
1007
+ background-color: var(--mf-primary);
1008
+ box-shadow: var(--mf-shadow-md);
1009
+ }
1010
+
1011
+ /* Column: the same separated chips as row, just stacked \u2014 each option is
1012
+ its own outlined chip with a gap between them, not one shared box. */
1013
+ .magicfeedback-rating-number-container-column,
1014
+ .magicfeedback-rating-number-container-column-reverse {
1015
+ gap: var(--mf-space-sm);
1016
+ }
1017
+
1018
+ .magicfeedback-rating-number-option-column,
1019
+ .magicfeedback-rating-number-option-column-reverse {
1020
+ width: 100%;
1021
+ }
1022
+
1023
+ .magicfeedback-rating-number-option-column .magicfeedback-rating-number-value,
1024
+ .magicfeedback-rating-number-option-column-reverse .magicfeedback-rating-number-value {
1025
+ justify-content: flex-start;
1026
+ gap: var(--mf-space-sm);
1027
+ min-height: 48px;
1028
+ padding: var(--mf-space-sm) var(--mf-space-md);
1029
+ border: 2px solid var(--mf-primary-border);
1030
+ border-radius: var(--mf-radius-md);
1031
+ background: var(--mf-bg-secondary);
1032
+ color: var(--mf-primary);
1033
+ }
1034
+
1035
+ .magicfeedback-rating-number-option-column .magicfeedback-rating-number-option-label-container:hover .magicfeedback-rating-number-value,
1036
+ .magicfeedback-rating-number-option-column-reverse .magicfeedback-rating-number-option-label-container:hover .magicfeedback-rating-number-value {
1037
+ background: var(--mf-primary-light);
1038
+ }
1039
+
1040
+ .magicfeedback-rating-number-option-column .magicfeedback-rating-number-option-label-container input[type="radio"]:checked + .magicfeedback-rating-number-value,
1041
+ .magicfeedback-rating-number-option-column-reverse .magicfeedback-rating-number-option-label-container input[type="radio"]:checked + .magicfeedback-rating-number-value {
1042
+ color: #fff;
1043
+ background-color: var(--mf-primary);
1044
+ box-shadow: var(--mf-shadow-md);
1045
+ }
1046
+
1047
+ .magicfeedback-rating-number-value-num {
1048
+ font-weight: var(--mf-font-weight-bold);
1049
+ }
1050
+
1051
+ /* Column with per-option text: a min-width so "1".."9" and "10" line up,
1052
+ with the label text starting at the same x. Skipped entirely when the
1053
+ column has no per-option text at all (--bare below) \u2014 with nothing to
1054
+ align against, the same left-shift bug from row mode would resurface. */
1055
+ .magicfeedback-rating-number-container-column:not(.magicfeedback-rating-number-container-column--bare) .magicfeedback-rating-number-value-num,
1056
+ .magicfeedback-rating-number-container-column-reverse:not(.magicfeedback-rating-number-container-column--bare) .magicfeedback-rating-number-value-num {
1057
+ flex: none;
1058
+ min-width: 1.4em;
1059
+ }
1060
+
1061
+ /* Column, no per-option text at all (only min/max, or nothing): a bare
1062
+ numbered list has nothing to left-align against, so center each
1063
+ number instead of stranding it on the left with blank space beside it. */
1064
+ .magicfeedback-rating-number-container-column--bare .magicfeedback-rating-number-value {
1065
+ justify-content: center;
1066
+ }
1067
+
1068
+ .magicfeedback-rating-number-value-label {
1069
+ font-weight: var(--mf-font-weight-medium);
1070
+ }
1071
+
1072
+ .magicfeedback-rating-number-option-column .magicfeedback-rating-number-option-label-container input[type="radio"]:checked + .magicfeedback-rating-number-value,
1073
+ .magicfeedback-rating-number-option-column-reverse .magicfeedback-rating-number-option-label-container input[type="radio"]:checked + .magicfeedback-rating-number-value {
1074
+ color: #fff;
1075
+ background-color: var(--mf-primary);
1076
+ }
1077
+
1078
+ /* Star Rating */
1079
+ .magicfeedback-rating-star-container {
1080
+ justify-content: center;
1081
+ }
1082
+
1083
+ .magicfeedback-rating-star-option:not(:checked) > .rating__star {
1084
+ font-size: 40px;
1085
+ color: var(--mf-border);
1086
+ cursor: pointer;
1087
+ margin: 0 var(--mf-space-xs);
1088
+ transition: var(--mf-transition-fast);
1089
+ }
1090
+
1091
+ .magicfeedback-rating-star-option:not(:checked) > .rating__star:hover,
1092
+ .magicfeedback-rating-star-option:not(:checked) > .rating__star:hover ~ span {
1093
+ color: #fbbf24;
1094
+ transform: scale(1.1);
1095
+ }
1096
+
1097
+ .magicfeedback-rating-star-selected {
1098
+ color: #fbbf24 !important;
1099
+ }
1100
+
1101
+ /* ========================================
1102
+ MULTIPLE CHOICE WITH IMAGES
1103
+ ======================================== */
1104
+ .magicfeedback-multiple-choice-image-option {
1105
+ display: flex;
1106
+ border-radius: var(--mf-radius-md);
1107
+ overflow: hidden;
1108
+ transition: var(--mf-transition-fast);
1109
+ }
1110
+
1111
+ .magicfeedback-image-option-label-container {
1112
+ cursor: pointer;
1113
+ border-radius: var(--mf-radius-md);
1114
+ overflow: hidden;
1115
+ transition: var(--mf-transition-fast);
1116
+ }
1117
+
1118
+ .magicfeedback-image-option-label-container input[type="radio"],
1119
+ .magicfeedback-image-option-label-container input[type="checkbox"] {
1120
+ position: absolute;
1121
+ opacity: 0;
1122
+ width: 0;
1123
+ height: 0;
1124
+ }
1125
+
1126
+ .magicfeedback-image-option-label-container img {
1127
+ width: 100%;
1128
+ height: auto;
1129
+ display: block;
1130
+ border: 2px solid var(--mf-border);
1131
+ border-radius: var(--mf-radius-md);
1132
+ transition: var(--mf-transition-fast);
1133
+ }
1134
+
1135
+ .magicfeedback-image-option-label-container:hover img {
1136
+ border-color: var(--mf-primary);
1137
+ box-shadow: var(--mf-shadow-md);
1138
+ }
1139
+
1140
+ .magicfeedback-image-option-label-container input:checked + img {
1141
+ border-color: var(--mf-primary);
1142
+ box-shadow: 0 0 0 3px var(--mf-primary-light);
1143
+ }
1144
+
1145
+ /* ========================================
1146
+ MATRIX QUESTIONS
1147
+ ======================================== */
1148
+ .magicfeedback-multi-question-matrix-container {
1149
+ width: 100%;
1150
+ overflow-x: auto;
1151
+ border-radius: var(--mf-radius-md);
1152
+ }
1153
+
1154
+ .magicfeedback-multi-question-matrix-table {
1155
+ width: 100%;
1156
+ border-collapse: separate;
1157
+ border-spacing: 0 var(--mf-space-xs);
1158
+ }
1159
+
1160
+ .magicfeedback-multi-question-matrix-table th {
1161
+ padding: var(--mf-space-md);
1162
+ text-align: center;
1163
+ font-size: var(--mf-font-size-sm);
1164
+ font-weight: 500;
1165
+ color: var(--mf-text-secondary);
1166
+ }
1167
+
1168
+ .magicfeedback-multi-question-matrix-row-tr {
1169
+ background-color: var(--mf-bg-primary);
1170
+ border-radius: var(--mf-radius-md);
1171
+ transition: var(--mf-transition-fast);
1172
+ }
1173
+
1174
+ .magicfeedback-multi-question-matrix-row-tr:nth-child(even) {
1175
+ background-color: var(--mf-bg-secondary);
1176
+ }
1177
+
1178
+ .magicfeedback-multi-question-matrix-row-tr:hover {
1179
+ background-color: var(--mf-bg-hover);
1180
+ box-shadow: var(--mf-shadow-sm);
1181
+ }
1182
+
1183
+ .magicfeedback-multi-question-matrix-table td {
1184
+ padding: var(--mf-space-md);
1185
+ text-align: center;
1186
+ }
1187
+
1188
+ .magicfeedback-multi-question-matrix-label {
1189
+ text-align: left;
1190
+ font-size: var(--mf-font-size-base);
1191
+ color: var(--mf-text-primary);
1192
+ }
1193
+
1194
+ .magicfeedback-multi-question-matrix-table input[type="radio"] {
1195
+ width: 20px;
1196
+ height: 20px;
1197
+ cursor: pointer;
1198
+ accent-color: var(--mf-primary);
1199
+ }
1200
+
1201
+ /* ========================================
1202
+ PRIORITY LIST
1203
+ ======================================== */
1204
+ .magicfeedback-priority-list-item {
1205
+ display: flex;
1206
+ align-items: center;
1207
+ justify-content: space-between;
1208
+ padding: var(--mf-space-md);
1209
+ margin: var(--mf-space-sm) 0;
1210
+ background-color: var(--mf-bg-primary);
1211
+ border: 1.5px solid var(--mf-border);
1212
+ border-radius: var(--mf-radius-md);
1213
+ transition: var(--mf-transition-fast);
1214
+ }
1215
+
1216
+ .magicfeedback-priority-list-item:hover {
1217
+ box-shadow: var(--mf-shadow-sm);
1218
+ border-color: var(--mf-primary);
1219
+ }
1220
+
1221
+ .magicfeedback-priority-list-item-label {
1222
+ flex: 1;
1223
+ font-size: var(--mf-font-size-base);
1224
+ text-align: left;
1225
+ color: var(--mf-text-primary);
1226
+ margin: 0;
1227
+ }
1228
+
1229
+ .magicfeedback-priority-list-arrow-up,
1230
+ .magicfeedback-priority-list-arrow-down {
1231
+ padding: var(--mf-space-xs);
1232
+ font-size: var(--mf-font-size-lg);
1233
+ color: var(--mf-text-secondary);
1234
+ cursor: pointer;
1235
+ transition: var(--mf-transition-fast);
1236
+ user-select: none;
1237
+ }
1238
+
1239
+ .magicfeedback-priority-list-arrow-up:hover,
1240
+ .magicfeedback-priority-list-arrow-down:hover {
1241
+ color: var(--mf-primary);
1242
+ transform: scale(1.2);
1243
+ }
1244
+
1245
+ /* ========================================
1246
+ POINT SYSTEM
1247
+ ======================================== */
1248
+ .magicfeedback-point-system-item {
1249
+ display: flex;
1250
+ align-items: center;
1251
+ justify-content: space-between;
1252
+ padding: var(--mf-space-md);
1253
+ margin: var(--mf-space-sm) 0;
1254
+ background-color: var(--mf-bg-primary);
1255
+ border: 1.5px solid var(--mf-border);
1256
+ border-radius: var(--mf-radius-md);
1257
+ min-height: 45px;
1258
+ }
1259
+
1260
+ .magicfeedback-point-system-item label {
1261
+ flex: 1;
1262
+ font-size: var(--mf-font-size-base);
1263
+ color: var(--mf-text-primary);
1264
+ margin: 0;
1265
+ }
1266
+
1267
+ .magicfeedback-point-system-input-container {
1268
+ display: flex;
1269
+ align-items: center;
1270
+ gap: var(--mf-space-sm);
1271
+ }
1272
+
1273
+ .magicfeedback-point-system-item input {
1274
+ width: 80px;
1275
+ min-width: 80px;
1276
+ padding: var(--mf-space-sm);
1277
+ text-align: center;
1278
+ font-size: var(--mf-font-size-base);
1279
+ border: 1.5px solid var(--mf-border);
1280
+ border-radius: var(--mf-radius-md);
1281
+ margin: 0;
1282
+ }
1283
+
1284
+ .magicfeedback-point-system-total {
1285
+ display: flex;
1286
+ justify-content: flex-end;
1287
+ margin-top: var(--mf-space-md);
1288
+ font-size: var(--mf-font-size-base);
1289
+ font-weight: 600;
1290
+ color: var(--mf-text-primary);
1291
+ }
1292
+
1293
+ /* ========================================
1294
+ CONSENT
1295
+ ======================================== */
1296
+ .magicfeedback-consent-container {
1297
+ display: flex;
1298
+ flex-direction: row;
1299
+ align-items: center;
1300
+ gap: var(--mf-space-sm);
1301
+ padding: var(--mf-space-md);
1302
+ background-color: var(--mf-bg-secondary);
1303
+ border-radius: var(--mf-radius-md);
1304
+ margin: var(--mf-space-md) 0;
1305
+ }
1306
+
1307
+ .magicfeedback-consent-container input[type="checkbox"] {
1308
+ margin-top: 2px;
1309
+ flex-shrink: 0;
1310
+ accent-color: var(--mf-primary);
1311
+ }
1312
+
1313
+ .magicfeedback-consent-container label {
1314
+ flex: 1;
1315
+ font-size: var(--mf-font-size-sm);
1316
+ text-align: left;
1317
+ color: var(--mf-text-secondary);
1318
+ line-height: var(--mf-line-height);
1319
+ cursor: pointer;
1320
+ margin-bottom: 0;
1321
+ }
1322
+
1323
+ /* ========================================
1324
+ ACTION BUTTONS
1325
+ ======================================== */
1326
+ .magicfeedback-action-container {
1327
+ display: flex;
1328
+ align-items: center;
1329
+ justify-content: space-between;
1330
+ gap: var(--mf-space-md);
1331
+ margin-top: var(--mf-space-xl);
1332
+ padding-top: var(--mf-space-lg);
1333
+ border-top: 1px solid var(--mf-border);
1334
+ }
1335
+
1336
+ .magicfeedback-submit {
1337
+ padding: 0.8rem 1.6rem;
1338
+ font-size: var(--mf-font-size-base);
1339
+ font-weight: 800;
1340
+ color: #FFFFFF;
1341
+ background-color: var(--mf-primary);
1342
+ border: 2px solid var(--mf-primary);
1343
+ border-radius: var(--mf-radius-full);
1344
+ cursor: pointer;
1345
+ transition: var(--mf-transition-fast);
1346
+ box-shadow: var(--mf-shadow-md);
1347
+ }
1348
+
1349
+ .magicfeedback-submit:hover {
1350
+ background-color: var(--mf-primary-hover);
1351
+ box-shadow: var(--mf-shadow-lg);
1352
+ transform: translateY(-2px);
1353
+ }
1354
+
1355
+ .magicfeedback-submit:active {
1356
+ transform: translateY(0);
1357
+ box-shadow: var(--mf-shadow-sm);
1358
+ }
1359
+
1360
+ .magicfeedback-submit:disabled {
1361
+ opacity: 0.5;
1362
+ cursor: not-allowed;
1363
+ transform: none;
1364
+ }
1365
+
1366
+ .magicfeedback-back {
1367
+ padding: 0.65rem 1rem;
1368
+ font-size: var(--mf-font-size-base);
1369
+ font-weight: 700;
1370
+ color: var(--mf-primary);
1371
+ background-color: var(--mf-bg-secondary);
1372
+ border: 2px solid var(--mf-border);
1373
+ border-radius: var(--mf-radius-full);
1374
+ cursor: pointer;
1375
+ transition: var(--mf-transition-fast);
1376
+ }
1377
+
1378
+ .magicfeedback-back:hover {
1379
+ border-color: var(--mf-primary);
1380
+ background-color: var(--mf-bg-hover);
1381
+ }
1382
+
1383
+ /* ========================================
1384
+ SKIP & COUNTER
1385
+ ======================================== */
1386
+ .magicfeedback-skip-container {
1387
+ display: flex;
1388
+ align-items: center;
1389
+ gap: var(--mf-space-xs);
1390
+ padding: 0;
1391
+ margin: 0;
1392
+ font-size: var(--mf-font-size-sm);
1393
+ color: var(--mf-text-muted);
1394
+ background: transparent;
1395
+ border: none;
1396
+ cursor: pointer;
1397
+ transition: var(--mf-transition-fast);
1398
+ }
1399
+
1400
+ .magicfeedback-skip-container:hover {
1401
+ color: var(--mf-primary);
1402
+ }
1403
+
1404
+ .magicfeedback-skip-container input[type="checkbox"] {
1405
+ margin: 0;
1406
+ cursor: pointer;
1407
+ accent-color: var(--mf-primary);
1408
+ }
1409
+
1410
+ .magicfeedback-counter {
1411
+ display: flex;
1412
+ justify-content: flex-end;
1413
+ margin-top: var(--mf-space-md);
1414
+ font-size: var(--mf-font-size-sm);
1415
+ color: var(--mf-text-muted);
1416
+ }
1417
+
1418
+ /* ========================================
1419
+ MODAL STYLES
1420
+ ======================================== */
1421
+ /* Modal backdrop */
1422
+ .magicfeedback-modal-backdrop {
1423
+ position: fixed;
1424
+ top: 0;
1425
+ left: 0;
1426
+ width: 100vw;
1427
+ height: 100vh;
1428
+ background: rgba(0,0,0,0.4);
1429
+ display: none; /* toggled to flex when open */
1430
+ align-items: center;
1431
+ justify-content: center;
1432
+ z-index: 9999;
1433
+ }
1434
+
1435
+ /* Modal container */
1436
+ .magicfeedback-modal {
1437
+ background: #fff;
1438
+ border-radius: 8px;
1439
+ box-shadow: 0 8px 24px rgba(0,0,0,0.2);
1440
+ max-width: 520px;
1441
+ width: 90%;
1442
+ max-height: 80vh;
1443
+ /* Flex column so the options list scrolls while the actions footer
1444
+ (counter + confirm button) stays pinned and always visible. */
1445
+ display: flex;
1446
+ flex-direction: column;
1447
+ overflow: hidden;
1448
+ padding: 16px;
1449
+ position: relative;
1450
+ /* Portalled to document.body (see renderPriorityList.ts) to escape the
1451
+ host page's overflow/z-index \u2014 so it never inherits
1452
+ .magicfeedback-container's neutral text color and instead inherits
1453
+ whatever color the host page's own <body> happens to set. Needs its
1454
+ own explicit baseline rather than relying on that inheritance. */
1455
+ color: var(--mf-text-primary);
1456
+ }
1457
+
1458
+ /* Modal actions */
1459
+ .magicfeedback-modal-actions {
1460
+ display: flex;
1461
+ justify-content: flex-end;
1462
+ gap: 8px;
1463
+ margin-top: 12px;
1464
+ flex-shrink: 0;
1465
+ }
1466
+
1467
+ .magicfeedback-modal-counter {
1468
+ margin-right: auto;
1469
+ display: flex;
1470
+ align-items: center;
1471
+ font-size: 14px;
1472
+ color: var(--mf-text-secondary);
1473
+ }
1474
+
1475
+ /* Modal list */
1476
+ .magicfeedback-modal-list {
1477
+ display: flex;
1478
+ flex-direction: column;
1479
+ gap: 8px;
1480
+ /* Scrollable area; footer stays fixed below it. */
1481
+ flex: 1 1 auto;
1482
+ overflow-y: auto;
1483
+ min-height: 0;
1484
+ }
1485
+
1486
+ .magicfeedback-modal-row {
1487
+ display: flex;
1488
+ align-items: center;
1489
+ gap: 10px;
1490
+ cursor: pointer;
1491
+ }
1492
+
1493
+ /* Priority list header */
1494
+ .magicfeedback-priority-list-header {
1495
+ display: flex;
1496
+ align-items: center;
1497
+ justify-content: space-between;
1498
+ gap: 12px;
1499
+ margin-bottom: 8px;
1500
+ }
1501
+
1502
+ .magicfeedback-priority-list-reorder {
1503
+ margin-top: 8px;
1504
+ }
1505
+
1506
+ .magicfeedback-priority-list-list {
1507
+ padding: 0;
1508
+ list-style: none;
1509
+ }
1510
+
1511
+ .magicfeedback-priority-list-item {
1512
+ display: flex;
1513
+ justify-content: space-between;
1514
+ align-items: center;
1515
+ margin: 5px 0;
1516
+ }
1517
+
1518
+ .magicfeedback-priority-list-item-label {
1519
+ font-size: 15px;
1520
+ }
1521
+
1522
+ .magicfeedback-priority-list-arrows {
1523
+ display: flex;
1524
+ align-items: center;
1525
+ gap: 6px;
1526
+ }
1527
+
1528
+ /* Buttons */
1529
+ .magicfeedback-button {
1530
+ appearance: none;
1531
+ border: 2px solid var(--mf-border);
1532
+ border-radius: var(--mf-radius-full);
1533
+ background: var(--mf-bg-secondary);
1534
+ color: var(--mf-text-primary);
1535
+ padding: 0.6rem 1rem;
1536
+ font-size: 14px;
1537
+ font-weight: 700;
1538
+ cursor: pointer;
1539
+ box-shadow: var(--mf-shadow-sm);
1540
+ }
1541
+
1542
+ .magicfeedback-button:hover {
1543
+ background: var(--mf-bg-hover);
1544
+ border-color: var(--mf-primary);
1545
+ }
1546
+
1547
+ .magicfeedback-button:active {
1548
+ transform: translateY(1px);
1549
+ }
1550
+
1551
+ .magicfeedback-button-primary {
1552
+ border-color: var(--mf-primary);
1553
+ background: var(--mf-primary);
1554
+ color: #fff;
1555
+ box-shadow: var(--mf-shadow-md);
1556
+ }
1557
+
1558
+ .magicfeedback-button-primary:hover {
1559
+ background: var(--mf-primary-hover);
1560
+ }
1561
+
1562
+ .magicfeedback-button-primary:active {
1563
+ background: var(--mf-primary-hover);
1564
+ }
1565
+
1566
+ /* Warning flash */
1567
+ .magicfeedback-warning {
1568
+ color: #C70039;
1569
+ }
1570
+
1571
+ /* Start message button */
1572
+ .magicfeedback-start-message-button {
1573
+ appearance: none;
1574
+ border: 2px solid var(--mf-primary);
1575
+ border-radius: var(--mf-radius-full);
1576
+ background: var(--mf-primary);
1577
+ color: #fff;
1578
+ padding: 0.8rem 1.4rem;
1579
+ font-size: 15px;
1580
+ font-weight: 800;
1581
+ cursor: pointer;
1582
+ box-shadow: var(--mf-shadow-md);
1583
+ }
1584
+
1585
+ .magicfeedback-start-message-button:hover {
1586
+ background: var(--mf-primary-hover);
1587
+ }
1588
+
1589
+ /* ========================================
1590
+ RESPONSIVE DESIGN
1591
+ ======================================== */
1592
+ @media (max-width: 768px) {
1593
+ :root {
1594
+ --mf-space-lg: 1.25rem;
1595
+ --mf-space-xl: 1.5rem;
1596
+ }
1597
+
1598
+ .magicfeedback-container {
1599
+ padding: 12px;
1600
+ border-radius: var(--mf-radius-md);
1601
+ }
1602
+
1603
+ .magicfeedback-form {
1604
+ padding: 14px;
1605
+ border-radius: var(--mf-radius-md);
1606
+ }
1607
+
1608
+ .magicfeedback-div {
1609
+ padding: 12px;
1610
+ gap: var(--mf-space-lg)
1611
+ }
1612
+
1613
+ .magicfeedback-label {
1614
+ font-size: var(--mf-font-size-base);
1615
+ }
1616
+
1617
+ .deepdots-popup input[type="date"],
1618
+ .deepdots-popup input[type="text"],
1619
+ .deepdots-popup input[type="number"],
1620
+ .deepdots-popup input[type="email"],
1621
+ .deepdots-popup input[type="password"],
1622
+ .deepdots-popup textarea,
1623
+ .deepdots-popup select {
1624
+ padding: 0.85rem 0.95rem;
1625
+ font-size: 1rem;
1626
+ min-height: 46px;
1627
+ }
1628
+
1629
+ /*
1630
+ .magicfeedback-radio-container,
1631
+ .magicfeedback-checkbox-container,
1632
+ .magicfeedback-boolean-container,
1633
+ .magicfeedback-consent-container {
1634
+ width: 100%;
1635
+ }
1636
+ */
1637
+
1638
+ .magicfeedback-radio-container,
1639
+ .magicfeedback-checkbox-container {
1640
+ padding: 10px 12px;
1641
+ border-radius: var(--mf-radius-md);
1642
+ border: 1px solid var(--mf-border);
1643
+ gap: 10px;
1644
+ }
1645
+
1646
+ .magicfeedback-rating-container,
1647
+ .magicfeedback-rating-number-container,
1648
+ .magicfeedback-rating-star-container {
1649
+ gap: 10px;
1650
+ }
1651
+
1652
+ .magicfeedback-boolean-container {
1653
+ flex-direction: column;
1654
+ gap: 10px;
1655
+ }
1656
+
1657
+ .magicfeedback-rating-number-container-row,
1658
+ .magicfeedback-rating-number-container-row-reverse {
1659
+ gap: 6px;
1660
+ }
1661
+
1662
+ .magicfeedback-rating-number-option-row .magicfeedback-rating-number-value,
1663
+ .magicfeedback-rating-number-option-row-reverse .magicfeedback-rating-number-value {
1664
+ min-height: 44px;
1665
+ padding: var(--mf-space-xs);
1666
+ font-size: 0.9rem;
1667
+ }
1668
+
1669
+ .magicfeedback-action-container {
1670
+ flex-direction: column-reverse;
1671
+ }
1672
+
1673
+ .magicfeedback-submit,
1674
+ .magicfeedback-back {
1675
+ width: 100%;
1676
+ text-align: center;
1677
+ min-height: 48px;
1678
+ }
1679
+ }
1680
+
1681
+ /* ========================================
1682
+ ACCESSIBILITY
1683
+ ======================================== */
1684
+ @media (prefers-reduced-motion: reduce) {
1685
+ *,
1686
+ *::before,
1687
+ *::after {
1688
+ animation-duration: 0.01ms !important;
1689
+ animation-iteration-count: 1 !important;
1690
+ transition-duration: 0.01ms !important;
1691
+ }
1692
+ }
1693
+
1694
+
1695
+ /* ========================================
1696
+ UTILITY CLASSES
1697
+ ======================================== */
1698
+ .magicfeedback-visually-hidden {
1699
+ position: absolute;
1700
+ width: 1px;
1701
+ height: 1px;
1702
+ padding: 0;
1703
+ margin: -1px;
1704
+ overflow: hidden;
1705
+ clip: rect(0, 0, 0, 0);
1706
+ white-space: nowrap;
1707
+ border-width: 0;
1708
+ }
1709
+
1710
+ .magicfeedback-modal-close {
1711
+ position: absolute;
1712
+ top: 8px;
1713
+ right: 8px;
1714
+ background: transparent;
1715
+ border: none;
1716
+ font-size: 20px;
1717
+ line-height: 1;
1718
+ cursor: pointer;
1719
+ color: #666;
1720
+ }
1721
+
1722
+ .magicfeedback-modal-close:hover,
1723
+ .magicfeedback-modal-close:focus {
1724
+ color: #000;
1725
+ outline: none;
1726
+ }
1727
+
1728
+ /* ========================================
1729
+ FILE / IMAGE UPLOAD
1730
+ ======================================== */
1731
+ .magicfeedback-upload {
1732
+ display: flex;
1733
+ flex-direction: column;
1734
+ gap: var(--mf-space-md);
1735
+ width: 100%;
1736
+ margin: 10px 0;
1737
+ }
1738
+
1739
+ /* The native input is an invisible, focusable overlay covering the dropzone. */
1740
+ .magicfeedback-upload-native {
1741
+ position: absolute;
1742
+ inset: 0;
1743
+ width: 100%;
1744
+ height: 100%;
1745
+ margin: 0;
1746
+ padding: 0;
1747
+ opacity: 0;
1748
+ cursor: pointer;
1749
+ z-index: 2;
1750
+ }
1751
+
1752
+ .magicfeedback-upload-dropzone {
1753
+ position: relative;
1754
+ display: flex;
1755
+ flex-direction: column;
1756
+ align-items: center;
1757
+ justify-content: center;
1758
+ gap: var(--mf-space-sm);
1759
+ box-sizing: border-box;
1760
+ width: 100%;
1761
+ min-height: 150px;
1762
+ padding: var(--mf-space-xl);
1763
+ text-align: center;
1764
+ border: 2px dashed var(--mf-border);
1765
+ border-radius: var(--mf-radius-md);
1766
+ background-color: var(--mf-surface-alt);
1767
+ cursor: pointer;
1768
+ transition: var(--mf-transition);
1769
+ }
1770
+
1771
+ .magicfeedback-upload-dropzone:hover {
1772
+ border-color: var(--mf-primary);
1773
+ background-color: var(--mf-bg-hover);
1774
+ }
1775
+
1776
+ .magicfeedback-upload-dropzone:focus-within {
1777
+ border-color: var(--mf-primary);
1778
+ box-shadow: var(--mf-shadow-focus);
1779
+ }
1780
+
1781
+ .magicfeedback-upload-dropzone.is-dragover {
1782
+ border-color: var(--mf-primary);
1783
+ border-style: solid;
1784
+ background-color: var(--mf-primary-light);
1785
+ box-shadow: var(--mf-shadow-focus);
1786
+ }
1787
+
1788
+ .magicfeedback-upload-icon {
1789
+ display: inline-flex;
1790
+ align-items: center;
1791
+ justify-content: center;
1792
+ width: 46px;
1793
+ height: 46px;
1794
+ color: var(--mf-primary);
1795
+ background-color: var(--mf-surface);
1796
+ border-radius: var(--mf-radius-full);
1797
+ box-shadow: var(--mf-shadow-sm);
1798
+ pointer-events: none;
1799
+ }
1800
+
1801
+ .magicfeedback-upload-icon svg {
1802
+ width: 24px;
1803
+ height: 24px;
1804
+ }
1805
+
1806
+ .magicfeedback-upload-cta {
1807
+ font-family: inherit;
1808
+ font-weight: var(--mf-font-weight-semibold);
1809
+ font-size: var(--mf-font-size-base);
1810
+ color: var(--mf-text-primary);
1811
+ pointer-events: none;
1812
+ }
1813
+
1814
+ .magicfeedback-upload-hint {
1815
+ font-family: inherit;
1816
+ font-size: var(--mf-font-size-sm);
1817
+ color: var(--mf-text-muted);
1818
+ pointer-events: none;
1819
+ }
1820
+
1821
+ .magicfeedback-upload-list {
1822
+ display: flex;
1823
+ flex-direction: column;
1824
+ gap: var(--mf-space-sm);
1825
+ width: 100%;
1826
+ margin: 0;
1827
+ padding: 0;
1828
+ list-style: none;
1829
+ }
1830
+
1831
+ .magicfeedback-upload-list:empty {
1832
+ display: none;
1833
+ }
1834
+
1835
+ .magicfeedback-upload-file-item {
1836
+ display: flex;
1837
+ align-items: center;
1838
+ gap: var(--mf-space-md);
1839
+ padding: var(--mf-space-sm) var(--mf-space-md);
1840
+ background-color: var(--mf-surface);
1841
+ border: 1px solid var(--mf-border);
1842
+ border-radius: var(--mf-radius-sm);
1843
+ box-shadow: var(--mf-shadow-sm);
1844
+ animation: mf-scale-in 0.2s ease-out;
1845
+ }
1846
+
1847
+ .magicfeedback-upload-thumb {
1848
+ flex: 0 0 auto;
1849
+ display: inline-flex;
1850
+ align-items: center;
1851
+ justify-content: center;
1852
+ width: 40px;
1853
+ height: 40px;
1854
+ overflow: hidden;
1855
+ color: var(--mf-text-secondary);
1856
+ background-color: var(--mf-surface-alt);
1857
+ border-radius: var(--mf-radius-sm);
1858
+ }
1859
+
1860
+ .magicfeedback-upload-thumb img {
1861
+ width: 100%;
1862
+ height: 100%;
1863
+ object-fit: cover;
1864
+ }
1865
+
1866
+ .magicfeedback-upload-thumb svg {
1867
+ width: 20px;
1868
+ height: 20px;
1869
+ }
1870
+
1871
+ .magicfeedback-upload-file-info {
1872
+ display: flex;
1873
+ flex-direction: column;
1874
+ flex: 1 1 auto;
1875
+ min-width: 0;
1876
+ text-align: start;
1877
+ }
1878
+
1879
+ .magicfeedback-upload-file-name {
1880
+ font-family: inherit;
1881
+ font-size: var(--mf-font-size-sm);
1882
+ font-weight: var(--mf-font-weight-semibold);
1883
+ color: var(--mf-text-primary);
1884
+ white-space: nowrap;
1885
+ overflow: hidden;
1886
+ text-overflow: ellipsis;
1887
+ }
1888
+
1889
+ .magicfeedback-upload-file-size {
1890
+ font-family: inherit;
1891
+ font-size: 0.75rem;
1892
+ color: var(--mf-text-muted);
1893
+ }
1894
+
1895
+ .magicfeedback-upload-remove {
1896
+ flex: 0 0 auto;
1897
+ display: inline-flex;
1898
+ align-items: center;
1899
+ justify-content: center;
1900
+ width: 30px;
1901
+ height: 30px;
1902
+ padding: 0;
1903
+ color: var(--mf-text-muted);
1904
+ background-color: transparent;
1905
+ border: none;
1906
+ border-radius: var(--mf-radius-full);
1907
+ cursor: pointer;
1908
+ transition: var(--mf-transition-fast);
1909
+ }
1910
+
1911
+ .magicfeedback-upload-remove:hover,
1912
+ .magicfeedback-upload-remove:focus-visible {
1913
+ color: var(--mf-error);
1914
+ background-color: var(--mf-primary-light);
1915
+ outline: none;
1916
+ }
1917
+
1918
+ .magicfeedback-upload-remove svg {
1919
+ width: 16px;
1920
+ height: 16px;
1921
+ }
1922
+
1923
+ .magicfeedback-upload-error {
1924
+ display: none;
1925
+ font-family: inherit;
1926
+ font-size: var(--mf-font-size-sm);
1927
+ color: var(--mf-error);
1928
+ }
1929
+
1930
+ .magicfeedback-upload-error.is-visible {
1931
+ display: block;
1932
+ }
1933
+
1934
+ /* ========================================
1935
+ LOCAL \u2014 reglas del popup, no vienen del paquete
1936
+ ======================================== */
1937
+
1938
+ /* Los controles de formulario no heredan font-family: cuando el popup trae fuente propia
1939
+ (clase deepdots-has-font), se les fuerza la del contenedor. */
1940
+ .deepdots-popup.deepdots-has-font button,
1941
+ .deepdots-popup.deepdots-has-font input,
1942
+ .deepdots-popup.deepdots-has-font textarea,
1943
+ .deepdots-popup.deepdots-has-font select {
1944
+ font-family: var(--deepdots-font, inherit);
1945
+ }
1946
+
1947
+ /* WebKit s\xED aplica el padding al radio nativo: con padding el control se dibuja enorme (se vio
1948
+ en iOS, WebView de RN y Safari, no en Chrome). El paquete ya no lo pone, pero la regla es
1949
+ barata y evita que vuelva. */
1950
+ .deepdots-popup input[type="radio"] {
1951
+ padding: 0;
1952
+ }
1953
+ `;
186
1954
  }
187
1955
  });
188
1956
 
@@ -207,6 +1975,47 @@ var init_logger = __esm({
207
1975
  }
208
1976
  });
209
1977
 
1978
+ // src/ui/logo.ts
1979
+ function insertPopupLogo(parent, anchor, style, id) {
1980
+ if (!style?.logo) return null;
1981
+ if (parent.ownerDocument.getElementById(id)) return null;
1982
+ const img = parent.ownerDocument.createElement("img");
1983
+ img.id = id;
1984
+ img.src = style.logo;
1985
+ img.alt = "Logo";
1986
+ img.style.cssText = BASE_CSS;
1987
+ if (style.logoSize && MAX_HEIGHT[style.logoSize]) {
1988
+ img.style.maxHeight = MAX_HEIGHT[style.logoSize];
1989
+ }
1990
+ switch (style.logoPosition) {
1991
+ case "left":
1992
+ img.style.margin = "12px 16px 0 0";
1993
+ img.style.marginLeft = "0";
1994
+ break;
1995
+ case "right":
1996
+ img.style.margin = "12px 0 0 16px";
1997
+ img.style.marginLeft = "auto";
1998
+ break;
1999
+ case "center":
2000
+ img.style.margin = "12px auto 0 auto";
2001
+ break;
2002
+ }
2003
+ parent.insertBefore(img, anchor);
2004
+ return img;
2005
+ }
2006
+ var BASE_CSS, MAX_HEIGHT;
2007
+ var init_logo = __esm({
2008
+ "src/ui/logo.ts"() {
2009
+ "use strict";
2010
+ BASE_CSS = "max-height:40px; max-width:100%; object-fit:contain; display:block; margin:12px 0 0 0;";
2011
+ MAX_HEIGHT = {
2012
+ small: "30px",
2013
+ medium: "50px",
2014
+ large: "70px"
2015
+ };
2016
+ }
2017
+ });
2018
+
210
2019
  // src/ui/renderPopup.ts
211
2020
  var renderPopup_exports = {};
212
2021
  __export(renderPopup_exports, {
@@ -313,7 +2122,6 @@ async function renderPopup(container, surveyId, productId, actions, emit, onClos
313
2122
  // oscuros con texto blanco sobre el fondo claro del popup.
314
2123
  colorScheme: isDark ? "dark" : "light",
315
2124
  textPrimary: isDark ? "#f0f0f0" : "#111",
316
- closeBtnHoverBg: isDark ? "rgba(255,255,255,0.10)" : "rgba(0,0,0,0.06)",
317
2125
  closeBtnHoverColor: isDark ? "#fff" : "#000000",
318
2126
  textMuted: isDark ? "#9ca3af" : "#6b7280",
319
2127
  progressTrack: isDark ? "#3f3f46" : "#e5e7eb"
@@ -374,8 +2182,8 @@ async function renderPopup(container, surveyId, productId, actions, emit, onClos
374
2182
  closeBtn.type = "button";
375
2183
  closeBtn.setAttribute("aria-label", "Close popup");
376
2184
  closeBtn.innerHTML = `
377
- <svg width="28" height="28" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
378
- <path d="M6 6L18 18M6 18L18 6" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
2185
+ <svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
2186
+ <path d="M5 5L19 19M5 19L19 5" stroke="currentColor" stroke-width="1.5" stroke-linecap="butt"/>
379
2187
  </svg>
380
2188
  `;
381
2189
  closeBtn.style.cssText = `
@@ -390,17 +2198,15 @@ async function renderPopup(container, surveyId, productId, actions, emit, onClos
390
2198
  cursor:pointer;
391
2199
  color:${theme.textPrimary};
392
2200
  padding:4px;
393
- transition: color .15s ease, transform .15s ease, background .15s ease;
2201
+ transition: color .15s ease, transform .15s ease;
394
2202
  box-shadow: none !important;
395
2203
  `;
396
2204
  closeBtn.onmouseenter = () => {
397
2205
  closeBtn.style.color = theme.closeBtnHoverColor;
398
- closeBtn.style.background = theme.closeBtnHoverBg;
399
2206
  closeBtn.style.transform = "scale(1.06)";
400
2207
  };
401
2208
  closeBtn.onmouseleave = () => {
402
2209
  closeBtn.style.color = theme.textPrimary;
403
- closeBtn.style.background = "transparent";
404
2210
  closeBtn.style.transform = "scale(1)";
405
2211
  };
406
2212
  closeBtn.onclick = () => {
@@ -790,47 +2596,7 @@ async function renderPopup(container, surveyId, productId, actions, emit, onClos
790
2596
  backButton.style.color = s.buttonSecondaryColor;
791
2597
  backButton.style.border = "none";
792
2598
  }
793
- if (s.logo) {
794
- if (!document.getElementById("deepdots-popup-logo")) {
795
- const logoImg = document.createElement("img");
796
- logoImg.id = "deepdots-popup-logo";
797
- logoImg.src = s.logo;
798
- logoImg.alt = "Logo";
799
- logoImg.style.cssText = "max-height:40px; max-width:100%; object-fit:contain;";
800
- if (s.logoSize) {
801
- switch (s.logoSize) {
802
- case "small":
803
- logoImg.style.maxHeight = "30px";
804
- break;
805
- case "medium":
806
- logoImg.style.maxHeight = "50px";
807
- break;
808
- case "large":
809
- logoImg.style.maxHeight = "70px";
810
- break;
811
- }
812
- }
813
- if (s.logoPosition) {
814
- switch (s.logoPosition) {
815
- case "left":
816
- logoImg.style.margin = "0 16px 42px 0";
817
- logoImg.style.display = "block";
818
- logoImg.style.marginLeft = "0";
819
- break;
820
- case "right":
821
- logoImg.style.margin = "0 0 42px 16px";
822
- logoImg.style.display = "block";
823
- logoImg.style.marginLeft = "auto";
824
- break;
825
- case "center":
826
- logoImg.style.margin = "0 auto 42px auto";
827
- logoImg.style.display = "block";
828
- break;
829
- }
830
- }
831
- containerContent.insertBefore(logoImg, main);
832
- }
833
- }
2599
+ insertPopupLogo(popup, progressEl, s, "deepdots-popup-logo");
834
2600
  if (s.startMessage && s.startMessage !== "") {
835
2601
  sdkLog(s.startMessage);
836
2602
  onStartPage = true;
@@ -901,6 +2667,7 @@ var init_renderPopup = __esm({
901
2667
  "use strict";
902
2668
  init_tracking_manager();
903
2669
  init_font();
2670
+ init_logo();
904
2671
  init_logger();
905
2672
  import_native = __toESM(require("@magicfeedback/native"));
906
2673
  init_style();
@@ -1128,7 +2895,7 @@ function jsonForScript(value) {
1128
2895
  }
1129
2896
  function buildSurveyHtml(opts) {
1130
2897
  const env = opts.env === "development" ? "dev" : "prod";
1131
- const version = opts.version ?? "2.2.4";
2898
+ const version = opts.version ?? "2.2.8";
1132
2899
  const cdn = `https://cdn.jsdelivr.net/npm/@magicfeedback/native@${version}/dist/magicfeedback-sdk.browser.js`;
1133
2900
  const sid = jsonForScript(opts.surveyId);
1134
2901
  const pid = jsonForScript(opts.productId);
@@ -1205,7 +2972,7 @@ body{display:${bodyDisplay};justify-content:${pos.justifyContent};align-items:${
1205
2972
  #dd-form-wrapper{width:100%;flex:1 1 auto}
1206
2973
  #mf{width:100%;box-sizing:border-box;visibility:hidden}
1207
2974
  .deepdots-popup-main *{max-width:100%;box-sizing:border-box}
1208
- #dd-logo{max-height:40px;max-width:100%;object-fit:contain}
2975
+ #dd-logo{max-height:40px;max-width:100%;object-fit:contain;display:block;margin:12px 0 0 0}
1209
2976
  .deepdots-error-hint{display:none;margin:12px 0 0 0;padding:10px 12px;border-radius:6px;background:#FEF3C7;color:#92400E;border:1px solid #FCD34D;font-size:13px}
1210
2977
  /* Pantalla final: el HTML del editor de la plataforma (imagen + texto), centrado. */
1211
2978
  .deepdots-success{display:none;width:100%;text-align:center;padding:24px 0;color:${textPrimary}}
@@ -1238,8 +3005,8 @@ ${customCss}
1238
3005
  <div class="deepdots-popup-header">
1239
3006
  <h2 id="dd-title" class="deepdots-popup-title" hidden></h2>
1240
3007
  <button type="button" id="dd-close" aria-label="Close popup">
1241
- <svg width="28" height="28" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
1242
- <path d="M6 6L18 18M6 18L18 6" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
3008
+ <svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
3009
+ <path d="M5 5L19 19M5 19L19 5" stroke="currentColor" stroke-width="1.5" stroke-linecap="butt"/>
1243
3010
  </svg>
1244
3011
  </button>
1245
3012
  </div>
@@ -1463,10 +3230,12 @@ ${customCss}
1463
3230
  if(s.logoSize==='small'){ logoImg.style.maxHeight='30px'; }
1464
3231
  else if(s.logoSize==='medium'){ logoImg.style.maxHeight='50px'; }
1465
3232
  else if(s.logoSize==='large'){ logoImg.style.maxHeight='70px'; }
1466
- if(s.logoPosition==='left'){ logoImg.style.margin='0 16px 20px 0'; logoImg.style.display='block'; logoImg.style.marginLeft='0'; }
1467
- else if(s.logoPosition==='right'){ logoImg.style.margin='0 0 20px 16px'; logoImg.style.display='block'; logoImg.style.marginLeft='auto'; }
1468
- else if(s.logoPosition==='center'){ logoImg.style.margin='0 auto 20px auto'; logoImg.style.display='block'; }
1469
- main.insertBefore(logoImg, document.getElementById('dd-form-wrapper'));
3233
+ if(s.logoPosition==='left'){ logoImg.style.margin='12px 16px 0 0'; logoImg.style.marginLeft='0'; }
3234
+ else if(s.logoPosition==='right'){ logoImg.style.margin='12px 0 0 16px'; logoImg.style.marginLeft='auto'; }
3235
+ else if(s.logoPosition==='center'){ logoImg.style.margin='12px auto 0 auto'; }
3236
+ // Encima de la barra de progreso, como hermano del header (espejo de ui/logo.ts en
3237
+ // web). Fuera de #dd-main, as\xED el logo no se va con el scroll del formulario.
3238
+ popup.insertBefore(logoImg, progressEl);
1470
3239
  }
1471
3240
  if(s.startMessage && s.startMessage!==''){ onStartPage=true; updateButtons('start'); }
1472
3241
  else { updateButtons('in_progress_first'); }