PluginProbe
MxChat – AI Chatbot & Content Generation for WordPress / 3.2.23
MxChat – AI Chatbot & Content Generation for WordPress v3.2.23
3.2.25 3.2.24 3.2.23 3.2.22 3.2.21 3.2.20 3.2.19 3.2.18 3.2.17 3.2.16 3.2.15 3.2.14 3.2.12 3.2.13 3.2.11 3.2.10 3.2.9 3.2.8 3.2.7 3.2.6 3.2.5 3.2.4 3.2.3 3.2.2 3.2.1 All 156 releases
← All changes | css/knowledge-style.css +139 -27 3.2.15 → 3.2.23 View file →
@@ -610,8 +610,19 @@
610 610 input:checked + .mxchat-toggle-slider:before {
611 611 transform: translateX(26px);
612 612 }
613 613
614 +/* Group-level ACF toggle, mixed state: some fields in the group are excluded.
615 + Knob parks mid-track on a washed-out tint of the brand gradient until the
616 + owner picks a side (plan bf57e0). */
617 +input:indeterminate + .mxchat-toggle-slider {
618 + background: linear-gradient(135deg, #e3b8dd, #b9b6e8);
619 +}
620 +
621 +input:indeterminate + .mxchat-toggle-slider:before {
622 + transform: translateX(13px);
623 +}
624 +
614 625 .mxchat-toggle-label {
615 626 font-size: 14px;
616 627 color: #333;
617 628 }
@@ -1211,8 +1222,12 @@
1211 1222 .rtl input:checked + .mxchat-toggle-slider:before {
1212 1223 transform: translateX(-26px);
1213 1224 }
1214 1225
1226 +.rtl input:indeterminate + .mxchat-toggle-slider:before {
1227 + transform: translateX(-13px);
1228 +}
1229 +
1215 1230 .rtl .mxchat-error-notice {
1216 1231 border-left: none;
1217 1232 border-right: 3px solid #f44336;
1218 1233 }
@@ -1280,20 +1295,36 @@
1280 1295
1281 1296 .mxchat-kb-modal-content {
1282 1297 position: relative;
1283 1298 background-color: #fff;
1284 - margin: 50px auto;
1299 + margin: 24px auto;
1285 1300 padding: 0;
1286 1301 border-radius: 8px;
1287 1302 box-shadow: 0 4px 20px rgba(0, 0, 0, 0.3);
1288 1303 width: 90%;
1289 1304 max-width: 1000px;
1305 + /* The box is the ONLY place height is constrained; children flex within it.
1306 + dvh tracks the real visible viewport on mobile (vh line = older-browser fallback). */
1290 1307 max-height: 85vh;
1308 + max-height: min(85vh, calc(100dvh - 48px));
1291 1309 display: flex;
1292 1310 flex-direction: column;
1293 1311 animation: mxchat-kb-modal-appear 0.3s ease-out;
1294 1312 }
1295 1313
1314 +/* Fixed chrome rows never grow or shrink — the results list is the only scroller. */
1315 +.mxchat-kb-modal-header,
1316 +.mxchat-kb-modal-filters,
1317 +.mxchat-kb-selection-header,
1318 +.mxchat-kb-modal-footer {
1319 + flex: 0 0 auto;
1320 +}
1321 +
1322 +/* The footer holds the primary actions — it can never be squeezed out of the box. */
1323 +.mxchat-kb-modal-footer {
1324 + flex-shrink: 0;
1325 +}
1326 +
1296 1327 @keyframes mxchat-kb-modal-appear {
1297 1328 from {
1298 1329 opacity: 0;
1299 1330 transform: translateY(-30px);
@@ -1401,8 +1432,36 @@
1401 1432 outline: none;
1402 1433 box-shadow: 0 0 0 1px #7873f5;
1403 1434 }
1404 1435
1436 +/* Contextual note under the modal filter strip — only rendered for content types
1437 + that need one (currently Media). Continues the filter strip's own surface so it
1438 + reads as part of it rather than as a banner dropped on top. */
1439 +.mxchat-kb-filter-note {
1440 + display: flex;
1441 + align-items: center;
1442 + gap: 8px;
1443 + padding: 10px 20px;
1444 + background-color: #f8f9fa;
1445 + border-bottom: 1px solid #e5e5e5;
1446 + color: #555;
1447 + font-size: 13px;
1448 + line-height: 1.4;
1449 +}
1450 +
1451 +/* An author-level display value outranks the browser default for [hidden], so the
1452 + hidden state has to be restated here or the note would never hide. */
1453 +.mxchat-kb-filter-note[hidden] {
1454 + display: none;
1455 +}
1456 +
1457 +.mxchat-kb-filter-note-icon {
1458 + width: 16px;
1459 + height: 16px;
1460 + flex-shrink: 0;
1461 + color: #7873f5;
1462 +}
1463 +
1405 1464 /* Special style for the "processed" filter */
1406 1465 #mxchat-kb-processed-filter {
1407 1466 border-left: 3px solid #1e88e5;
1408 1467 }
@@ -1407,12 +1466,15 @@
1407 1466 border-left: 3px solid #1e88e5;
1408 1467 }
1409 1468
1410 1469 .mxchat-kb-content-selection {
1411 - overflow-y: auto;
1412 - flex: 1;
1413 - min-height: 300px;
1414 - max-height: calc(85vh - 200px);
1470 + /* Flexible middle region: header row stays put, the list below scrolls.
1471 + min-height: 0 is load-bearing — without it flex refuses to shrink this
1472 + column and the footer gets pushed out of the box (the mobile bug). */
1473 + flex: 1 1 auto;
1474 + min-height: 0;
1475 + display: flex;
1476 + flex-direction: column;
1415 1477 }
1416 1478
1417 1479 .mxchat-kb-selection-header {
1418 1480 display: flex;
@@ -1440,8 +1502,12 @@
1440 1502 }
1441 1503
1442 1504 .mxchat-kb-content-list {
1443 1505 padding: 0;
1506 + /* The one and only scroller inside the modal. */
1507 + flex: 1 1 auto;
1508 + min-height: 0;
1509 + overflow-y: auto;
1444 1510 }
1445 1511
1446 1512 .mxchat-kb-content-item {
1447 1513 display: flex;
@@ -1470,19 +1536,23 @@
1470 1536 align-items: flex-start;
1471 1537 padding-top: 3px;
1472 1538 }
1473 1539
1540 +/* Native control, brand-tinted — identical to the "select all" checkbox above the
1541 + list, which carries no custom styling at all and renders correctly.
1542 + Do NOT re-add width / height / border / border-radius / background here. WP admin
1543 + draws the tick as a 21px dashicon positioned with negative margins for its OWN
1544 + default box, so forcing a custom box makes the tick overflow it. That mismatch
1545 + shipped for a long time but was invisible while the tick was white-on-white. */
1474 1546 .mxchat-kb-content-checkbox input[type="checkbox"] {
1475 - width: 18px;
1476 - height: 18px;
1477 - border: 1px solid #8c8f94;
1478 - border-radius: 3px;
1479 - background: #fff;
1480 1547 margin: 0;
1548 + cursor: pointer;
1549 + accent-color: var(--mxch-primary, #7873f5);
1481 1550 }
1482 1551
1483 -.mxchat-kb-content-checkbox input[type="checkbox"]:checked {
1484 - border-color: #7873f5;
1552 +.mxchat-kb-content-checkbox input[type="checkbox"]:focus-visible {
1553 + outline: 2px solid var(--mxch-primary, #7873f5);
1554 + outline-offset: 2px;
1485 1555 }
1486 1556
1487 1557 .mxchat-kb-content-details {
1488 1558 flex: 1;
@@ -1854,38 +1924,70 @@
1854 1924
1855 1925 /* Modal responsive adjustments */
1856 1926 .mxchat-kb-modal-content {
1857 1927 width: 95%;
1858 - max-height: 90vh;
1859 - margin: 20px auto;
1928 + /* dvh = real visible viewport (mobile vh includes the URL-bar region);
1929 + vh line is the older-browser fallback. */
1930 + max-height: calc(100vh - 24px);
1931 + max-height: calc(100dvh - 24px);
1932 + margin: 12px auto;
1933 + /* Last-resort scroll: on extreme-short viewports (landscape phones)
1934 + the compacted chrome + the list's floor can still exceed the box —
1935 + scroll inside the box rather than clipping the footer. */
1936 + overflow-y: auto;
1860 1937 }
1861 -
1938 +
1939 + /* Compact the fixed chrome on mobile — stacked filters + a stacked footer
1940 + are tall, and every saved pixel goes to the content list. */
1941 + .mxchat-kb-modal-header {
1942 + padding: 12px 16px;
1943 + }
1944 +
1945 + .mxchat-kb-modal-header h3 {
1946 + font-size: 16px;
1947 + }
1948 +
1862 1949 .mxchat-kb-modal-filters {
1863 1950 flex-direction: column;
1864 1951 align-items: stretch;
1952 + padding: 10px 16px;
1953 + gap: 8px;
1865 1954 }
1866 -
1955 +
1867 1956 .mxchat-kb-search-group {
1868 1957 max-width: none;
1869 1958 }
1870 -
1959 +
1871 1960 .mxchat-kb-filter-group {
1872 1961 flex-direction: column;
1962 + gap: 8px;
1873 1963 }
1874 -
1875 - .mxchat-kb-content-selection {
1876 - max-height: calc(90vh - 250px);
1964 +
1965 + .mxchat-kb-filter-group select {
1966 + padding: 6px 30px 6px 10px;
1877 1967 }
1878 -
1968 +
1879 1969 .mxchat-kb-selection-header {
1880 1970 flex-direction: column;
1881 1971 align-items: flex-start;
1882 - gap: 10px;
1972 + gap: 6px;
1973 + padding: 10px 16px;
1883 1974 }
1884 -
1975 +
1976 + /* Guarantee a usable slice of visible rows — reachable buttons are no
1977 + help if there is nothing to select above them. */
1978 + .mxchat-kb-content-list {
1979 + min-height: 96px;
1980 + }
1981 +
1982 + .mxchat-kb-content-item {
1983 + padding: 10px 16px;
1984 + }
1985 +
1885 1986 .mxchat-kb-modal-footer {
1886 1987 flex-direction: column;
1887 - gap: 10px;
1988 + gap: 8px;
1989 + padding: 10px 16px;
1888 1990 }
1889 1991
1890 1992 .mxchat-kb-modal-footer .mxchat-kb-pagination {
1891 1993 width: 100%;
@@ -3755,13 +3857,18 @@
3755 3857 }
3756 3858
3757 3859 .mxchat-kb-edit-modal-content {
3758 3860 max-width: 760px;
3861 + /* Same viewport-safe cap as the content-selector modal (vh = fallback). */
3759 3862 max-height: 90vh;
3863 + max-height: min(90vh, calc(100dvh - 24px));
3760 3864 }
3761 3865
3762 3866 .mxchat-kb-edit-body {
3763 - flex: 1;
3867 + flex: 1 1 auto;
3868 + /* min-height: 0 lets the body shrink inside the capped modal box so the
3869 + footer (Save/Cancel) can never be pushed below the viewport. */
3870 + min-height: 0;
3764 3871 display: flex;
3765 3872 flex-direction: column;
3766 3873 padding: 20px;
3767 3874 overflow: hidden;
@@ -3814,8 +3921,10 @@
3814 3921 justify-content: space-between;
3815 3922 padding: 14px 20px;
3816 3923 border-top: 1px solid #e5e5e5;
3817 3924 gap: 12px;
3925 + /* Action row can never be squeezed out of the box. */
3926 + flex-shrink: 0;
3818 3927 }
3819 3928
3820 3929 .mxchat-kb-edit-notice {
3821 3930 flex: 1;
@@ -3835,9 +3944,11 @@
3835 3944 match-card / chunk-detail components (admin-testing-tab.css, scoped under
3836 3945 .mxch-testing-results) so it looks native; this block only adds the modal
3837 3946 body scroll + the chunk-text container the Testing tab doesn't have. */
3838 3947 .mxchat-kb-inspect-body {
3839 - flex: 1;
3948 + flex: 1 1 auto;
3949 + /* Same footer-pushout guard as the edit modal. */
3950 + min-height: 0;
3840 3951 display: flex;
3841 3952 flex-direction: column;
3842 3953 padding: 20px;
3843 3954 overflow-y: auto;
@@ -3875,9 +3986,10 @@
3875 3986 .mxchat-kb-edit-modal-content {
3876 3987 width: 96%;
3877 3988 max-width: 96%;
3878 3989 margin: 10px auto;
3879 - max-height: 95vh;
3990 + max-height: calc(100vh - 20px);
3991 + max-height: calc(100dvh - 20px);
3880 3992 }
3881 3993 .mxchat-kb-edit-body {
3882 3994 padding: 14px;
3883 3995 }