| @@ -266,14 +266,8 @@ | ||
| 266 | 266 | border: 1px solid #e5e5e5; |
| 267 | 267 | text-align: center; |
| 268 | 268 | } |
| 269 | 269 | |
| 270 | -/* YouTube import: multi-line radio/description stack reads left-aligned, | |
| 271 | - unlike the single-row URL forms the centered default was made for. */ | |
| 272 | -#mxchat-youtube-input-area { | |
| 273 | - text-align: left; | |
| 274 | -} | |
| 275 | - | |
| 276 | 270 | /* PDF Upload Area */ |
| 277 | 271 | #mxchat-pdf-upload-area input[type="file"] { |
| 278 | 272 | margin-bottom: 12px; |
| 279 | 273 | } |
| @@ -610,19 +604,8 @@ | ||
| 610 | 604 | input:checked + .mxchat-toggle-slider:before { |
| 611 | 605 | transform: translateX(26px); |
| 612 | 606 | } |
| 613 | 607 | |
| 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 | - | |
| 625 | 608 | .mxchat-toggle-label { |
| 626 | 609 | font-size: 14px; |
| 627 | 610 | color: #333; |
| 628 | 611 | } |
| @@ -1222,12 +1205,8 @@ | ||
| 1222 | 1205 | .rtl input:checked + .mxchat-toggle-slider:before { |
| 1223 | 1206 | transform: translateX(-26px); |
| 1224 | 1207 | } |
| 1225 | 1208 | |
| 1226 | -.rtl input:indeterminate + .mxchat-toggle-slider:before { | |
| 1227 | - transform: translateX(-13px); | |
| 1228 | -} | |
| 1229 | - | |
| 1230 | 1209 | .rtl .mxchat-error-notice { |
| 1231 | 1210 | border-left: none; |
| 1232 | 1211 | border-right: 3px solid #f44336; |
| 1233 | 1212 | } |
| @@ -1295,36 +1274,20 @@ | ||
| 1295 | 1274 | |
| 1296 | 1275 | .mxchat-kb-modal-content { |
| 1297 | 1276 | position: relative; |
| 1298 | 1277 | background-color: #fff; |
| 1299 | - margin: 24px auto; | |
| 1278 | + margin: 50px auto; | |
| 1300 | 1279 | padding: 0; |
| 1301 | 1280 | border-radius: 8px; |
| 1302 | 1281 | box-shadow: 0 4px 20px rgba(0, 0, 0, 0.3); |
| 1303 | 1282 | width: 90%; |
| 1304 | 1283 | 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). */ | |
| 1307 | 1284 | max-height: 85vh; |
| 1308 | - max-height: min(85vh, calc(100dvh - 48px)); | |
| 1309 | 1285 | display: flex; |
| 1310 | 1286 | flex-direction: column; |
| 1311 | 1287 | animation: mxchat-kb-modal-appear 0.3s ease-out; |
| 1312 | 1288 | } |
| 1313 | 1289 | |
| 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 | - | |
| 1327 | 1290 | @keyframes mxchat-kb-modal-appear { |
| 1328 | 1291 | from { |
| 1329 | 1292 | opacity: 0; |
| 1330 | 1293 | transform: translateY(-30px); |
| @@ -1438,15 +1401,12 @@ | ||
| 1438 | 1401 | border-left: 3px solid #1e88e5; |
| 1439 | 1402 | } |
| 1440 | 1403 | |
| 1441 | 1404 | .mxchat-kb-content-selection { |
| 1442 | - /* Flexible middle region: header row stays put, the list below scrolls. | |
| 1443 | - min-height: 0 is load-bearing — without it flex refuses to shrink this | |
| 1444 | - column and the footer gets pushed out of the box (the mobile bug). */ | |
| 1445 | - flex: 1 1 auto; | |
| 1446 | - min-height: 0; | |
| 1447 | - display: flex; | |
| 1448 | - flex-direction: column; | |
| 1405 | + overflow-y: auto; | |
| 1406 | + flex: 1; | |
| 1407 | + min-height: 300px; | |
| 1408 | + max-height: calc(85vh - 200px); | |
| 1449 | 1409 | } |
| 1450 | 1410 | |
| 1451 | 1411 | .mxchat-kb-selection-header { |
| 1452 | 1412 | display: flex; |
| @@ -1474,12 +1434,8 @@ | ||
| 1474 | 1434 | } |
| 1475 | 1435 | |
| 1476 | 1436 | .mxchat-kb-content-list { |
| 1477 | 1437 | padding: 0; |
| 1478 | - /* The one and only scroller inside the modal. */ | |
| 1479 | - flex: 1 1 auto; | |
| 1480 | - min-height: 0; | |
| 1481 | - overflow-y: auto; | |
| 1482 | 1438 | } |
| 1483 | 1439 | |
| 1484 | 1440 | .mxchat-kb-content-item { |
| 1485 | 1441 | display: flex; |
| @@ -1508,23 +1464,19 @@ | ||
| 1508 | 1464 | align-items: flex-start; |
| 1509 | 1465 | padding-top: 3px; |
| 1510 | 1466 | } |
| 1511 | 1467 | |
| 1512 | -/* Native control, brand-tinted — identical to the "select all" checkbox above the | |
| 1513 | - list, which carries no custom styling at all and renders correctly. | |
| 1514 | - Do NOT re-add width / height / border / border-radius / background here. WP admin | |
| 1515 | - draws the tick as a 21px dashicon positioned with negative margins for its OWN | |
| 1516 | - default box, so forcing a custom box makes the tick overflow it. That mismatch | |
| 1517 | - shipped for a long time but was invisible while the tick was white-on-white. */ | |
| 1518 | 1468 | .mxchat-kb-content-checkbox input[type="checkbox"] { |
| 1469 | + width: 18px; | |
| 1470 | + height: 18px; | |
| 1471 | + border: 1px solid #8c8f94; | |
| 1472 | + border-radius: 3px; | |
| 1473 | + background: #fff; | |
| 1519 | 1474 | margin: 0; |
| 1520 | - cursor: pointer; | |
| 1521 | - accent-color: var(--mxch-primary, #7873f5); | |
| 1522 | 1475 | } |
| 1523 | 1476 | |
| 1524 | -.mxchat-kb-content-checkbox input[type="checkbox"]:focus-visible { | |
| 1525 | - outline: 2px solid var(--mxch-primary, #7873f5); | |
| 1526 | - outline-offset: 2px; | |
| 1477 | +.mxchat-kb-content-checkbox input[type="checkbox"]:checked { | |
| 1478 | + border-color: #7873f5; | |
| 1527 | 1479 | } |
| 1528 | 1480 | |
| 1529 | 1481 | .mxchat-kb-content-details { |
| 1530 | 1482 | flex: 1; |
| @@ -1896,70 +1848,38 @@ | ||
| 1896 | 1848 | |
| 1897 | 1849 | /* Modal responsive adjustments */ |
| 1898 | 1850 | .mxchat-kb-modal-content { |
| 1899 | 1851 | width: 95%; |
| 1900 | - /* dvh = real visible viewport (mobile vh includes the URL-bar region); | |
| 1901 | - vh line is the older-browser fallback. */ | |
| 1902 | - max-height: calc(100vh - 24px); | |
| 1903 | - max-height: calc(100dvh - 24px); | |
| 1904 | - margin: 12px auto; | |
| 1905 | - /* Last-resort scroll: on extreme-short viewports (landscape phones) | |
| 1906 | - the compacted chrome + the list's floor can still exceed the box — | |
| 1907 | - scroll inside the box rather than clipping the footer. */ | |
| 1908 | - overflow-y: auto; | |
| 1852 | + max-height: 90vh; | |
| 1853 | + margin: 20px auto; | |
| 1909 | 1854 | } |
| 1910 | - | |
| 1911 | - /* Compact the fixed chrome on mobile — stacked filters + a stacked footer | |
| 1912 | - are tall, and every saved pixel goes to the content list. */ | |
| 1913 | - .mxchat-kb-modal-header { | |
| 1914 | - padding: 12px 16px; | |
| 1915 | - } | |
| 1916 | - | |
| 1917 | - .mxchat-kb-modal-header h3 { | |
| 1918 | - font-size: 16px; | |
| 1919 | - } | |
| 1920 | - | |
| 1855 | + | |
| 1921 | 1856 | .mxchat-kb-modal-filters { |
| 1922 | 1857 | flex-direction: column; |
| 1923 | 1858 | align-items: stretch; |
| 1924 | - padding: 10px 16px; | |
| 1925 | - gap: 8px; | |
| 1926 | 1859 | } |
| 1927 | - | |
| 1860 | + | |
| 1928 | 1861 | .mxchat-kb-search-group { |
| 1929 | 1862 | max-width: none; |
| 1930 | 1863 | } |
| 1931 | - | |
| 1864 | + | |
| 1932 | 1865 | .mxchat-kb-filter-group { |
| 1933 | 1866 | flex-direction: column; |
| 1934 | - gap: 8px; | |
| 1935 | 1867 | } |
| 1936 | - | |
| 1937 | - .mxchat-kb-filter-group select { | |
| 1938 | - padding: 6px 30px 6px 10px; | |
| 1868 | + | |
| 1869 | + .mxchat-kb-content-selection { | |
| 1870 | + max-height: calc(90vh - 250px); | |
| 1939 | 1871 | } |
| 1940 | - | |
| 1872 | + | |
| 1941 | 1873 | .mxchat-kb-selection-header { |
| 1942 | 1874 | flex-direction: column; |
| 1943 | 1875 | align-items: flex-start; |
| 1944 | - gap: 6px; | |
| 1945 | - padding: 10px 16px; | |
| 1876 | + gap: 10px; | |
| 1946 | 1877 | } |
| 1947 | - | |
| 1948 | - /* Guarantee a usable slice of visible rows — reachable buttons are no | |
| 1949 | - help if there is nothing to select above them. */ | |
| 1950 | - .mxchat-kb-content-list { | |
| 1951 | - min-height: 96px; | |
| 1952 | - } | |
| 1953 | - | |
| 1954 | - .mxchat-kb-content-item { | |
| 1955 | - padding: 10px 16px; | |
| 1956 | - } | |
| 1957 | - | |
| 1878 | + | |
| 1958 | 1879 | .mxchat-kb-modal-footer { |
| 1959 | 1880 | flex-direction: column; |
| 1960 | - gap: 8px; | |
| 1961 | - padding: 10px 16px; | |
| 1881 | + gap: 10px; | |
| 1962 | 1882 | } |
| 1963 | 1883 | |
| 1964 | 1884 | .mxchat-kb-modal-footer .mxchat-kb-pagination { |
| 1965 | 1885 | width: 100%; |
| @@ -3829,18 +3749,13 @@ | ||
| 3829 | 3749 | } |
| 3830 | 3750 | |
| 3831 | 3751 | .mxchat-kb-edit-modal-content { |
| 3832 | 3752 | max-width: 760px; |
| 3833 | - /* Same viewport-safe cap as the content-selector modal (vh = fallback). */ | |
| 3834 | 3753 | max-height: 90vh; |
| 3835 | - max-height: min(90vh, calc(100dvh - 24px)); | |
| 3836 | 3754 | } |
| 3837 | 3755 | |
| 3838 | 3756 | .mxchat-kb-edit-body { |
| 3839 | - flex: 1 1 auto; | |
| 3840 | - /* min-height: 0 lets the body shrink inside the capped modal box so the | |
| 3841 | - footer (Save/Cancel) can never be pushed below the viewport. */ | |
| 3842 | - min-height: 0; | |
| 3757 | + flex: 1; | |
| 3843 | 3758 | display: flex; |
| 3844 | 3759 | flex-direction: column; |
| 3845 | 3760 | padding: 20px; |
| 3846 | 3761 | overflow: hidden; |
| @@ -3893,10 +3808,8 @@ | ||
| 3893 | 3808 | justify-content: space-between; |
| 3894 | 3809 | padding: 14px 20px; |
| 3895 | 3810 | border-top: 1px solid #e5e5e5; |
| 3896 | 3811 | gap: 12px; |
| 3897 | - /* Action row can never be squeezed out of the box. */ | |
| 3898 | - flex-shrink: 0; | |
| 3899 | 3812 | } |
| 3900 | 3813 | |
| 3901 | 3814 | .mxchat-kb-edit-notice { |
| 3902 | 3815 | flex: 1; |
| @@ -3910,45 +3823,8 @@ | ||
| 3910 | 3823 | gap: 8px; |
| 3911 | 3824 | flex-shrink: 0; |
| 3912 | 3825 | } |
| 3913 | 3826 | |
| 3914 | -/* ── Knowledge Inspector modal (plan-d8cb4b) ────────────────────────── | |
| 3915 | - Read-only "View indexed content" viewer. Reuses the Testing tab's | |
| 3916 | - match-card / chunk-detail components (admin-testing-tab.css, scoped under | |
| 3917 | - .mxch-testing-results) so it looks native; this block only adds the modal | |
| 3918 | - body scroll + the chunk-text container the Testing tab doesn't have. */ | |
| 3919 | -.mxchat-kb-inspect-body { | |
| 3920 | - flex: 1 1 auto; | |
| 3921 | - /* Same footer-pushout guard as the edit modal. */ | |
| 3922 | - min-height: 0; | |
| 3923 | - display: flex; | |
| 3924 | - flex-direction: column; | |
| 3925 | - padding: 20px; | |
| 3926 | - overflow-y: auto; | |
| 3927 | - gap: 12px; | |
| 3928 | -} | |
| 3929 | -/* The modal body is the scroll container — let the inner results grow naturally | |
| 3930 | - instead of the Testing tab's own 400px inner scroll (avoids a double scrollbar). */ | |
| 3931 | -.mxchat-kb-inspect-body .mxch-testing-results { | |
| 3932 | - max-height: none; | |
| 3933 | - overflow: visible; | |
| 3934 | -} | |
| 3935 | -.mxch-kb-inspect-chunk-text { | |
| 3936 | - margin: 8px 0 0; | |
| 3937 | - padding: 12px 14px; | |
| 3938 | - background: #f8fafc; | |
| 3939 | - border: 1px solid #e2e8f0; | |
| 3940 | - border-radius: 6px; | |
| 3941 | - max-height: 260px; | |
| 3942 | - overflow-y: auto; | |
| 3943 | - white-space: pre-wrap; | |
| 3944 | - word-break: break-word; | |
| 3945 | - font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif; | |
| 3946 | - font-size: 13px; | |
| 3947 | - line-height: 1.6; | |
| 3948 | - color: var(--mxch-text-primary, #334155); | |
| 3949 | -} | |
| 3950 | - | |
| 3951 | 3827 | .mxchat-kb-edit-save-spinner { |
| 3952 | 3828 | display: inline-flex; |
| 3953 | 3829 | align-items: center; |
| 3954 | 3830 | gap: 6px; |
| @@ -3958,10 +3834,9 @@ | ||
| 3958 | 3834 | .mxchat-kb-edit-modal-content { |
| 3959 | 3835 | width: 96%; |
| 3960 | 3836 | max-width: 96%; |
| 3961 | 3837 | margin: 10px auto; |
| 3962 | - max-height: calc(100vh - 20px); | |
| 3963 | - max-height: calc(100dvh - 20px); | |
| 3838 | + max-height: 95vh; | |
| 3964 | 3839 | } |
| 3965 | 3840 | .mxchat-kb-edit-body { |
| 3966 | 3841 | padding: 14px; |
| 3967 | 3842 | } |
| @@ -3979,105 +3854,5 @@ | ||
| 3979 | 3854 | .mxchat-kb-edit-actions .mxch-btn { |
| 3980 | 3855 | flex: 1; |
| 3981 | 3856 | text-align: center; |
| 3982 | 3857 | } |
| 3983 | -} | |
| 3984 | -/* ========================================================================== | |
| 3985 | - Custom Meta-key discovery picker (plan-mxchat-20260709-fe8e4e) | |
| 3986 | - Canon-token chip picker mirroring the ACF discovery UX for non-ACF meta. | |
| 3987 | - ========================================================================== */ | |
| 3988 | -.mxchat-meta-scan-controls { | |
| 3989 | - display: flex; | |
| 3990 | - align-items: center; | |
| 3991 | - flex-wrap: wrap; | |
| 3992 | - gap: 12px; | |
| 3993 | - margin-bottom: 12px; | |
| 3994 | -} | |
| 3995 | -#mxchat-scan-meta-btn { | |
| 3996 | - display: inline-flex; | |
| 3997 | - align-items: center; | |
| 3998 | - gap: 8px; | |
| 3999 | -} | |
| 4000 | -.mxchat-meta-scan-internal { | |
| 4001 | - display: inline-flex; | |
| 4002 | - align-items: center; | |
| 4003 | - gap: 6px; | |
| 4004 | - font-size: 13px; | |
| 4005 | - color: var(--mxch-text-secondary, #64748b); | |
| 4006 | - cursor: pointer; | |
| 4007 | -} | |
| 4008 | -.mxchat-meta-scan-loading, | |
| 4009 | -.mxchat-meta-scan-empty { | |
| 4010 | - font-size: 13px; | |
| 4011 | - color: var(--mxch-text-secondary, #64748b); | |
| 4012 | - margin: 8px 0 0; | |
| 4013 | -} | |
| 4014 | -.mxchat-meta-chip-grid { | |
| 4015 | - display: grid; | |
| 4016 | - grid-template-columns: repeat(auto-fill, minmax(240px, 1fr)); | |
| 4017 | - gap: 10px; | |
| 4018 | - margin-top: 12px; | |
| 4019 | -} | |
| 4020 | -.mxchat-meta-chip { | |
| 4021 | - display: flex; | |
| 4022 | - flex-direction: column; | |
| 4023 | - align-items: flex-start; | |
| 4024 | - gap: 4px; | |
| 4025 | - text-align: left; | |
| 4026 | - width: 100%; | |
| 4027 | - padding: 10px 12px; | |
| 4028 | - background: var(--mxch-card-bg, #fff); | |
| 4029 | - border: 1px solid var(--mxch-card-border, #e2e8f0); | |
| 4030 | - border-radius: var(--mxch-radius-md, 8px); | |
| 4031 | - cursor: pointer; | |
| 4032 | - transition: border-color 0.15s ease, box-shadow 0.15s ease, background 0.15s ease; | |
| 4033 | -} | |
| 4034 | -.mxchat-meta-chip:hover { | |
| 4035 | - border-color: var(--mxch-primary, #7873f5); | |
| 4036 | - box-shadow: 0 1px 4px rgba(120, 115, 245, 0.15); | |
| 4037 | -} | |
| 4038 | -.mxchat-meta-chip-main { | |
| 4039 | - display: flex; | |
| 4040 | - align-items: baseline; | |
| 4041 | - flex-wrap: wrap; | |
| 4042 | - gap: 8px; | |
| 4043 | -} | |
| 4044 | -.mxchat-meta-chip-name { | |
| 4045 | - font-weight: 600; | |
| 4046 | - color: var(--mxch-text-primary, #1a1a2e); | |
| 4047 | - font-size: 13px; | |
| 4048 | -} | |
| 4049 | -.mxchat-meta-chip-key { | |
| 4050 | - font-family: monospace; | |
| 4051 | - font-size: 11px; | |
| 4052 | - color: var(--mxch-text-muted, #94a3b8); | |
| 4053 | - background: #f1f5f9; | |
| 4054 | - padding: 1px 6px; | |
| 4055 | - border-radius: 4px; | |
| 4056 | -} | |
| 4057 | -.mxchat-meta-chip-meta { | |
| 4058 | - font-size: 11px; | |
| 4059 | - color: var(--mxch-text-muted, #94a3b8); | |
| 4060 | - white-space: nowrap; | |
| 4061 | - overflow: hidden; | |
| 4062 | - text-overflow: ellipsis; | |
| 4063 | - max-width: 100%; | |
| 4064 | -} | |
| 4065 | -.mxchat-meta-chip-tick { | |
| 4066 | - font-size: 11px; | |
| 4067 | - font-weight: 600; | |
| 4068 | - color: var(--mxch-primary, #7873f5); | |
| 4069 | - margin-top: 2px; | |
| 4070 | -} | |
| 4071 | -.mxchat-meta-chip.is-added { | |
| 4072 | - border-color: var(--mxch-success, #10b981); | |
| 4073 | - background: rgba(16, 185, 129, 0.06); | |
| 4074 | - cursor: default; | |
| 4075 | -} | |
| 4076 | -.mxchat-meta-chip.is-added .mxchat-meta-chip-tick { | |
| 4077 | - color: var(--mxch-success, #10b981); | |
| 4078 | -} | |
| 4079 | -@media (max-width: 782px) { | |
| 4080 | - .mxchat-meta-chip-grid { | |
| 4081 | - grid-template-columns: 1fr; | |
| 4082 | - } | |
| 4083 | -} | |
| 3858 | +} | |