Address Moodle Marketplace review for mod_meetletacbfree 1.1.3.

Migrate legacy ajax/JS to external services and AMD, enable TLS verification, scope admin CSS with RTLCSS-safe rules, and fix README/lang/boilerplate gaps.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-09-20 12:41:47 +03:30
parent 91334a46b5
commit be252e49e2
33 changed files with 1281 additions and 1023 deletions
+537 -22
View File
@@ -1185,11 +1185,13 @@
background: #c0392b;
border-color: #c0392b;
}
/* rtl:begin:ignore */
html[dir="rtl"] .meetlet-modal--confirm .meetlet-modal__title,
html[dir="rtl"] .meetlet-modal--confirm .meetlet-modal__body,
html[dir="rtl"] .meetlet-modal--confirm .meetlet-modal__lead {
text-align: right;
}
/* rtl:end:ignore */
/* Marker class on html; lock scroll on body only — overflow+height on html resets scroll position. */
html.meetlet-modal-open body {
overflow: hidden;
@@ -1349,7 +1351,7 @@ html.meetlet-modal-open body {
transition: background .18s ease;
overflow: hidden;
box-sizing: border-box;
direction: ltr; /* Keep thumb travel physical LTR; icons stay readable. */
/* rtl:ignore */ direction: ltr; /* Keep thumb travel physical LTR; icons stay readable. */
}
.meetlet-switch__thumb {
position: absolute;
@@ -1405,20 +1407,20 @@ html.meetlet-modal-open body {
.meetlet-access-cell .meetlet-switch {
justify-content: center;
}
.path-admin #adminsettings .form-item:has(.meetlet-switch) {
.meetlet-admin-settings .form-item:has(.meetlet-switch) {
align-items: flex-start;
}
.path-admin #adminsettings .form-item:has(.meetlet-switch) > .form-setting {
.meetlet-admin-settings .form-item:has(.meetlet-switch) > .form-setting {
display: flex;
flex-direction: column;
/* Toward the label column: left in LTR, right in RTL. */
align-items: start;
}
.path-admin #adminsettings .form-item:has(.meetlet-switch) > .form-label,
.path-admin #adminsettings .form-item:has(.meetlet-switch) > .form-setting {
.meetlet-admin-settings .form-item:has(.meetlet-switch) > .form-label,
.meetlet-admin-settings .form-item:has(.meetlet-switch) > .form-setting {
padding-top: .4rem;
}
.path-admin #adminsettings .form-item:has(.meetlet-switch) .form-label > label {
.meetlet-admin-settings .form-item:has(.meetlet-switch) .form-label > label {
margin: 0;
padding: 0;
line-height: 22px;
@@ -1426,9 +1428,9 @@ html.meetlet-modal-open body {
align-items: center;
min-height: 22px;
}
.path-admin #adminsettings .form-item:has(.meetlet-switch) .form-check,
.path-admin #adminsettings .form-item:has(.meetlet-switch) .checkbox,
.path-admin #adminsettings .form-item:has(.meetlet-switch) .form-checkbox {
.meetlet-admin-settings .form-item:has(.meetlet-switch) .form-check,
.meetlet-admin-settings .form-item:has(.meetlet-switch) .checkbox,
.meetlet-admin-settings .form-item:has(.meetlet-switch) .form-checkbox {
display: inline-flex;
flex-direction: row;
align-items: center;
@@ -1441,14 +1443,16 @@ html.meetlet-modal-open body {
width: auto;
max-width: 100%;
}
html[dir="rtl"] .path-admin #adminsettings .form-item:has(.meetlet-switch) .form-check,
html[dir="rtl"] .path-admin #adminsettings .form-item:has(.meetlet-switch) .checkbox,
html[dir="rtl"] .path-admin #adminsettings .form-item:has(.meetlet-switch) .form-checkbox {
/* rtl:begin:ignore */
html[dir="rtl"] .meetlet-admin-settings .form-item:has(.meetlet-switch) .form-check,
html[dir="rtl"] .meetlet-admin-settings .form-item:has(.meetlet-switch) .checkbox,
html[dir="rtl"] .meetlet-admin-settings .form-item:has(.meetlet-switch) .form-checkbox {
/* Keep switch on the label side (visual right), same as pre-compact layout. */
flex-direction: row-reverse;
justify-content: flex-end;
text-align: right;
}
/* rtl:end:ignore */
/* Site admin: Moodle role → Adobe Connect role mapping (chip radios). */
.meetlet-rolemapping-table .meetlet-rolemapping-cell {
@@ -1637,19 +1641,19 @@ html[dir="rtl"] .path-admin #adminsettings .form-item:has(.meetlet-switch) .form
}
/* Cron & video-delivery dashboard (plugin settings) */
.path-admin #adminsettings .form-item:has(#meetlet-cronmon) {
.meetlet-admin-settings .form-item:has(#meetlet-cronmon) {
display: block;
padding: 0;
border: 0;
background: transparent;
}
.path-admin #adminsettings .form-item:has(#meetlet-cronmon) > .form-label,
.path-admin #adminsettings .form-item:has(#meetlet-cronmon) .form-description,
.path-admin #adminsettings .form-item:has(#meetlet-cronmon) .form-defaultinfo,
.path-admin #adminsettings .form-item:has(#meetlet-cronmon) .form-setting > .form-shortname {
.meetlet-admin-settings .form-item:has(#meetlet-cronmon) > .form-label,
.meetlet-admin-settings .form-item:has(#meetlet-cronmon) .form-description,
.meetlet-admin-settings .form-item:has(#meetlet-cronmon) .form-defaultinfo,
.meetlet-admin-settings .form-item:has(#meetlet-cronmon) .form-setting > .form-shortname {
display: none !important;
}
.path-admin #adminsettings .form-item:has(#meetlet-cronmon) > .form-setting {
.meetlet-admin-settings .form-item:has(#meetlet-cronmon) > .form-setting {
max-width: none;
width: 100%;
float: none;
@@ -2049,20 +2053,26 @@ html[dir="rtl"] .path-admin #adminsettings .form-item:has(.meetlet-switch) .form
}
}
html[dir="rtl"] .path-admin #adminsettings #id_s_meetletacbfree_agent_dispatch,
html[dir="rtl"] .path-admin #adminsettings select[name="s_meetletacbfree_agent_dispatch"] {
/* rtl:begin:ignore */
html[dir="rtl"] .meetlet-admin-settings #id_s_meetletacbfree_agent_dispatch,
html[dir="rtl"] .meetlet-admin-settings select[name="s_meetletacbfree_agent_dispatch"] {
direction: rtl;
text-align: right;
}
html[dir="rtl"] .path-admin #adminsettings #id_s_meetletacbfree_agent_dispatch option,
html[dir="rtl"] .path-admin #adminsettings select[name="s_meetletacbfree_agent_dispatch"] option {
/* rtl:end:ignore */
/* rtl:begin:ignore */
html[dir="rtl"] .meetlet-admin-settings #id_s_meetletacbfree_agent_dispatch option,
html[dir="rtl"] .meetlet-admin-settings select[name="s_meetletacbfree_agent_dispatch"] option {
direction: rtl;
text-align: right;
}
/* rtl:end:ignore */
/* rtl:begin:ignore */
html[dir="rtl"] .path-admin .meetlet-hourpicker,
html[dir="rtl"] .path-admin .meetlet-hourpresets {
direction: rtl;
}
/* rtl:end:ignore */
.meetlet-gate-msg {
white-space: pre-wrap;
@@ -2200,3 +2210,508 @@ html[dir="rtl"] .path-admin .meetlet-hourpresets {
.activityiconcontainer .activityicon[src*="mod/meetletacbfree"] {
filter: none !important;
}
/* ===== MeetLet admin settings (scoped under .meetlet-admin-settings) ===== */
.meetlet-admin-settings .settingsform > h2 {
display: none;
}
.meetlet-admin-settings .meetlet-settings-hero {
display:flex; gap:1rem; align-items:center;
padding:1.15rem 1.25rem; margin:0 0 1rem;
border-radius:16px;
background:
radial-gradient(700px 180px at 100% 0%, rgba(82,204,163,.22), transparent 55%),
linear-gradient(135deg, #00261a 0%, #0a3d2e 60%, #145c45 100%);
color:#fff;
border:1px solid rgba(82,204,163,.25);
}
.meetlet-admin-settings .meetlet-settings-hero img {
width:56px; height:56px; object-fit:contain;
background:rgba(255,255,255,.95); border-radius:12px; padding:6px;
}
.meetlet-admin-settings .meetlet-settings-hero h3 {
margin:0 0 .2rem; font-size:1.2rem; font-weight:700; color:#fff;
display:flex; flex-wrap:wrap; align-items:center; gap:.45rem .55rem;
}
/* rtl:begin:ignore */
.meetlet-admin-settings .meetlet-settings-hero .meetlet-settings-version {
display:inline-block;
flex:0 0 auto;
align-self:center;
margin-inline-start:auto;
padding:.12rem .55rem;
font-size:.72rem; font-weight:650; line-height:1.35;
letter-spacing:.02em;
border-radius:999px;
background:rgba(82,204,163,.18);
border:1px solid rgba(82,204,163,.35);
color:#b8f5df;
white-space:nowrap;
direction:ltr;
unicode-bidi:isolate;
}
/* rtl:end:ignore */
.meetlet-admin-settings .meetlet-settings-hero p {
margin:0; opacity:.85; color:#e6faf3;
white-space:nowrap;
max-width:none;
}
.meetlet-admin-settings .meetlet-settings-copy {
min-width:0; flex:1 1 auto;
}
@media (max-width: 900px) {
.meetlet-admin-settings .meetlet-settings-hero p {
white-space:normal;
}
}
.meetlet-admin-settings .nav-tabs {
border-bottom:2px solid #cfe8de;
gap:.2rem;
}
.meetlet-admin-settings .nav-tabs .nav-link {
border:0 !important;
border-radius:6px !important;
padding:.45rem .9rem;
color:#00261a;
font-weight:650;
box-shadow:none !important;
outline:none !important;
}
.meetlet-admin-settings .nav-tabs .nav-link:hover {
background:#e6faf3; color:#00261a;
}
.meetlet-admin-settings .nav-tabs .nav-link.active {
background:#52cca3; color:#00261a;
}
.meetlet-admin-settings .nav-tabs .nav-link:focus,
.meetlet-admin-settings .nav-tabs .nav-link:focus-visible,
.meetlet-admin-settings .nav-tabs .nav-link:active {
outline:none !important;
box-shadow:none !important;
border:0 !important;
}
.meetlet-admin-settings .meetlet-feature-group {
margin:1rem 0 .35rem;
padding:1rem 1.1rem .35rem;
border:1px solid #cfe8de;
border-radius:12px;
background:linear-gradient(180deg, #f3fbf8 0%, #ffffff 55%);
}
.meetlet-admin-settings .meetlet-feature-group h4 {
margin:0 0 .25rem; color:#00261a; font-size:1.02rem; font-weight:700;
}
.meetlet-admin-settings .meetlet-feature-group p {
margin:0 0 .5rem; color:#4a6b5f; font-size:.9rem;
}
.meetlet-admin-settings .meetlet-settings-card {
background:#fff; border:1px solid #cfe8de; border-radius:14px;
padding:1rem 1.15rem; margin:.35rem 0 1rem;
}
.meetlet-admin-settings .meetlet-license-badge {
font-weight: 700;
border-radius: 999px;
padding: .35rem .65rem;
}
.meetlet-admin-settings .meetlet-license-badge--active {
background: var(--ml-green, #52cca3);
color: var(--ml-green-deep, #00261a);
}
.meetlet-admin-settings .meetlet-license-badge--inactive {
background: #fff4d6;
color: #5a4700;
}
.meetlet-admin-settings #meetlet-license-modal.meetlet-modal,
.meetlet-admin-settings #meetlet-registration-modal.meetlet-modal,
.meetlet-admin-settings #meetlet-cronmon-modal.meetlet-modal,
.meetlet-admin-settings #meetlet-access-reset-modal.meetlet-modal {
z-index: 20000 !important;
}
.meetlet-admin-settings .meetlet-access-reset-toolbar {
display: flex;
justify-content: flex-end;
margin: 0 0 .65rem;
}
/* Cron videos ops cell: no extra cell/wrapper border (icon buttons keep theirs). */
.meetlet-admin-settings .meetlet-cronmon__table td.meetlet-cronmon__dl {
border-left: 0 !important;
border-right: 0 !important;
border-top: 0 !important;
background: transparent !important;
box-shadow: none !important;
}
.meetlet-admin-settings .meetlet-cronmon__dl .meetlet-iconactions {
border: 0 !important;
background: transparent !important;
box-shadow: none !important;
padding: 0 !important;
margin: 0 !important;
}
.meetlet-admin-settings .meetlet-modal--confirm .meetlet-modal__dialog {
width: min(480px, 100%);
max-height: min(86vh, 640px);
overflow: hidden;
display: flex;
flex-direction: column;
}
.meetlet-admin-settings .meetlet-modal--confirm .meetlet-modal__head {
padding: 1.2rem 1.15rem 1rem;
border-radius: 18px 18px 0 0;
}
.meetlet-admin-settings .meetlet-modal__lead {
margin: 0 0 .85rem;
font-size: 1rem;
font-weight: 650;
line-height: 1.65;
color: #00261a;
}
.meetlet-admin-settings .meetlet-modal__callout {
margin: 0 0 .9rem;
padding: .85rem 1rem .7rem;
border-radius: 12px;
border: 1px solid #e6c56a;
background: #fff8e6;
color: #5a4700;
}
.meetlet-admin-settings .meetlet-modal__callout-title {
margin: 0 0 .4rem;
font-weight: 700;
}
.meetlet-admin-settings .meetlet-modal__limits {
margin: 0 0 .55rem;
padding-inline-start: 1.2rem;
}
.meetlet-admin-settings .meetlet-modal__keep {
margin: 0;
color: #334942;
line-height: 1.65;
}
.meetlet-admin-settings .meetlet-modal__foot {
display: flex;
justify-content: flex-end;
align-items: center;
gap: .6rem;
flex-wrap: wrap;
padding: .9rem 1.15rem 1.05rem;
border-top: 1px solid #cfe8de;
background: linear-gradient(180deg, #f7fcfa 0%, #ffffff 70%);
}
.meetlet-admin-settings .meetlet-modal__foot .btn {
border-radius: 10px;
font-weight: 700;
padding: .5rem 1.15rem;
}
.meetlet-admin-settings .meetlet-modal__foot .btn-success {
background: #52cca3 !important;
border-color: #3db892 !important;
color: #00261a !important;
}
.meetlet-admin-settings .meetlet-modal__foot .btn-outline-danger {
color: #a33b3b !important;
border-color: #d9a0a0 !important;
background: #fff !important;
}
.meetlet-admin-settings .meetlet-modal__foot .btn-outline-danger:hover,
.meetlet-admin-settings .meetlet-modal__foot .btn-outline-danger:focus {
color: #fff !important;
background: #c0392b !important;
border-color: #c0392b !important;
}
.meetlet-admin-settings .meetlet-about {
display:grid; gap:1.1rem;
}
.meetlet-admin-settings .meetlet-about__brand {
display:flex; justify-content:center; align-items:center;
padding:1.35rem 1.2rem;
border-radius:14px;
background:#f0f2f4;
border:1px solid #e2e6ea;
}
.meetlet-admin-settings .meetlet-about__brand img {
max-width:240px; width:100%; height:auto; display:block; margin:0 auto;
}
.meetlet-admin-settings .meetlet-about h4 { margin:0 0 .55rem; color:#00261a; }
.meetlet-admin-settings .meetlet-about p {
margin:0 0 .85rem; color:#334942; line-height:1.75; text-align:start;
}
.meetlet-admin-settings .meetlet-guide { display:grid; gap:1rem; }
.meetlet-admin-settings .meetlet-guide__heading { margin:0; color:#00261a; font-size:1.15rem; }
.meetlet-admin-settings .meetlet-guide__intro {
margin:0; color:#334942; line-height:1.7;
}
.meetlet-admin-settings .meetlet-guide__callout {
padding:.85rem 1rem; border-radius:10px; line-height:1.65;
border:1px solid #e6c56a; background:#fff8e6; color:#5a4700;
}
.meetlet-admin-settings .meetlet-guide__section {
padding:1rem 1.05rem; border-radius:12px;
border:1px solid #cfe8de; background:#f7fcfa;
}
.meetlet-admin-settings .meetlet-guide__section--current { background:#fff; }
.meetlet-admin-settings .meetlet-guide__section h4 {
margin:0 0 .55rem; color:#00261a; font-size:1.02rem; font-weight:700;
}
.meetlet-admin-settings .meetlet-guide__section h5 {
margin:.85rem 0 .35rem; color:#0a3d2e; font-size:.95rem; font-weight:700;
}
.meetlet-admin-settings .meetlet-guide__body,
.meetlet-admin-settings .meetlet-guide__body p,
.meetlet-admin-settings .meetlet-guide__body li {
color:#334942; line-height:1.7;
}
.meetlet-admin-settings .meetlet-guide__body p { margin:0 0 .55rem; }
.meetlet-admin-settings .meetlet-guide__body ol,
.meetlet-admin-settings .meetlet-guide__body ul { margin:0 0 .35rem; padding-inline-start:1.25rem; }
.meetlet-admin-settings .meetlet-guide__body li { margin:0 0 .35rem; }
.meetlet-admin-settings .meetlet-guide__body code,
.meetlet-admin-settings .meetlet-guide__table code {
font-size:.88em; padding:.05rem .3rem; border-radius:4px;
background:#e6faf3; color:#00261a;
}
.meetlet-admin-settings .meetlet-guide__table {
width:100%; margin:.35rem 0 0; border-collapse:collapse;
}
.meetlet-admin-settings .meetlet-guide__table th,
.meetlet-admin-settings .meetlet-guide__table td {
padding:.45rem .55rem; border:1px solid #cfe8de; vertical-align:top;
text-align:start;
}
.meetlet-admin-settings .meetlet-guide__table thead th,
.meetlet-admin-settings .meetlet-guide__table tbody th {
background:#e6faf3; color:#00261a; font-weight:650;
}
/* rtl:begin:ignore */
.meetlet-admin-settings .meetlet-guide__code {
margin:.35rem 0 0; padding:.75rem .9rem; overflow-x:auto;
border-radius:10px; border:1px solid #cfe8de;
background:#0a3d2e; color:#e6faf3;
font-size:.82rem; line-height:1.45; direction:ltr; text-align:left;
white-space:pre;
}
/* rtl:end:ignore */
.meetlet-admin-settings .meetlet-guide__code-cell code {
font-weight:800; letter-spacing:.02em; direction:ltr; unicode-bidi:isolate;
}
.meetlet-admin-settings .meetlet-guide__table td ol,
.meetlet-admin-settings .meetlet-guide__table td ul {
margin:.15rem 0 0; padding-inline-start:1.15rem;
}
.meetlet-admin-settings .meetlet-guide__table td li { margin:0 0 .25rem; }
.meetlet-admin-settings .meetlet-hourpicker { max-width: 42rem; }
.meetlet-admin-settings .meetlet-hourpicker.is-dimmed,
.meetlet-admin-settings .form-item.is-dimmed {
opacity: .45;
pointer-events: none;
}
.meetlet-admin-settings .meetlet-hourpicker__tz {
margin: 0 0 .55rem; color:#4a6b5f; font-size:.88rem;
}
.meetlet-admin-settings .meetlet-hourpresets {
display:flex; flex-wrap:wrap; gap:.4rem; margin:0 0 .65rem;
}
.meetlet-admin-settings .meetlet-hourpreset {
border:1px solid #9fdcc4; background:#fff; color:#00261a;
border-radius:999px; padding:.28rem .7rem; font-size:.8rem; font-weight:650;
cursor:pointer;
}
.meetlet-admin-settings .meetlet-hourpreset:hover { background:#e6faf3; }
.meetlet-admin-settings .meetlet-hourpreset--ghost { border-color:#cfe8de; color:#4a6b5f; }
.meetlet-admin-settings .meetlet-hourgrid {
display:grid; grid-template-columns:repeat(8, minmax(0,1fr)); gap:.35rem;
}
.meetlet-admin-settings .meetlet-hourchip {
border:1px solid #cfe8de; background:#f7fcfa; color:#00261a;
border-radius:10px; padding:.45rem 0; font-size:.82rem; font-weight:750;
cursor:pointer;
}
.meetlet-admin-settings .meetlet-hourchip.is-on {
background:#52cca3; border-color:#0d9f6e; color:#00261a;
}
.meetlet-admin-settings .meetlet-hourchip.is-now { box-shadow:0 0 0 2px rgba(13,159,110,.35); }
@media (max-width: 720px) {
.meetlet-admin-settings .meetlet-hourgrid { grid-template-columns:repeat(6, minmax(0,1fr)); }
}
.meetlet-admin-settings .meetlet-about__cta-wrap {
display:flex; justify-content:center; margin-top:.35rem; padding-top:.35rem;
}
.meetlet-admin-settings .meetlet-about__cta {
display:inline-flex; align-items:center; justify-content:center;
min-width:220px; padding:.7rem 1.35rem; border-radius:10px;
background:#52cca3; color:#00261a !important;
text-decoration:none !important; font-weight:700;
border:1px solid #3db892;
box-shadow:0 6px 16px rgba(0,38,26,.08);
}
.meetlet-admin-settings .meetlet-about__cta:hover {
background:#6fd9b5; color:#00261a !important;
}
.meetlet-admin-settings .meetlet-settings-btn {
display:inline-flex; align-items:center; justify-content:center; gap:.45rem;
padding:.6rem 1.15rem; border-radius:10px; border:0; cursor:pointer;
background:#52cca3; color:#00261a !important;
text-decoration:none !important; font-weight:700;
}
.meetlet-admin-settings .meetlet-settings-btn:hover { background:#6fd9b5; color:#00261a !important; }
.meetlet-admin-settings .meetlet-settings-btn:disabled { opacity:.65; cursor:wait; }
.meetlet-admin-settings .meetlet-settings-btn svg {
width:1.1rem; height:1.1rem; flex:0 0 auto; display:block;
}
.meetlet-admin-settings .meetlet-license-actions {
display:flex; flex-wrap:wrap; gap:.55rem; align-items:center;
}
.meetlet-admin-settings .meetlet-license-actions .btn {
display:inline-flex; align-items:center; justify-content:center; gap:.45rem;
}
.meetlet-admin-settings .meetlet-license-actions .btn svg {
width:1.05rem; height:1.05rem; flex:0 0 auto; display:block;
}
.meetlet-admin-settings .meetlet-license-btn--free {
background: linear-gradient(180deg, #e6faf3 0%, #d4f5ea 100%) !important;
border: 2px solid #52cca3 !important;
color: #00261a !important;
border-radius: 10px !important;
font-weight: 700 !important;
padding: .6rem 1.15rem !important;
box-shadow: 0 4px 12px rgba(82, 204, 163, 0.18) !important;
}
.meetlet-admin-settings .meetlet-license-btn--free:hover,
.meetlet-admin-settings .meetlet-license-btn--free:focus {
background: linear-gradient(180deg, #6fd9b5 0%, #52cca3 100%) !important;
border-color: #3db892 !important;
color: #00261a !important;
box-shadow: 0 6px 16px rgba(82, 204, 163, 0.28) !important;
}
.meetlet-admin-settings .meetlet-conntest { max-width:none; margin:0; }
.meetlet-admin-settings .meetlet-conntest__actions {
display:flex; flex-wrap:wrap; gap:.75rem; align-items:center;
margin:.85rem 0 1rem;
}
.meetlet-admin-settings .meetlet-conntest__status { color:#4a6b5f; font-size:.9rem; }
.meetlet-admin-settings .meetlet-conntest__progress {
margin:0 0 1rem; padding:.85rem 1rem;
border:1px solid #cfe8de; border-radius:12px; background:#f7fcfa;
}
.meetlet-admin-settings .meetlet-conntest__progress-label {
display:flex; justify-content:space-between; gap:.75rem;
margin:0 0 .45rem; color:#00261a; font-weight:650; font-size:.92rem;
}
.meetlet-admin-settings .meetlet-conntest__progress-track {
height:10px; border-radius:999px; background:#d9eee5; overflow:hidden;
}
.meetlet-admin-settings .meetlet-conntest__progress-fill {
height:100%; width:0; border-radius:999px;
background:linear-gradient(90deg, #2f9f7a, #52cca3);
transition:width .28s ease;
}
.meetlet-admin-settings .meetlet-conntest__num {
min-width:1.7rem; height:1.7rem; border-radius:8px;
display:inline-flex; align-items:center; justify-content:center;
background:#e6faf3; color:#00261a; font-weight:750; font-size:.85rem;
}
.meetlet-admin-settings .meetlet-conntest__card--pending { opacity:.78; background:#fbfefe; }
.meetlet-admin-settings .meetlet-conntest__card--running {
border-color:#e6b422;
box-shadow:0 0 0 2px rgba(230,180,34,.22);
background:#fff8e6;
}
.meetlet-admin-settings .meetlet-conntest__card--running .meetlet-conntest__num {
background:#ffe08a; color:#5c4700;
}
.meetlet-admin-settings .meetlet-conntest__card--ok {
border-color:#9fdcc4; background:#f3fbf8;
}
.meetlet-admin-settings .meetlet-conntest__card--fail {
border-color:#ead3d0; background:#fff8f7;
}
.meetlet-admin-settings .meetlet-conntest__card--skipped { opacity:.55; }
.meetlet-admin-settings .meetlet-dot--pending { background:#9bb7ac; box-shadow:0 0 0 4px rgba(155,183,172,.18); }
.meetlet-admin-settings .meetlet-dot--running {
background:#e6b422; box-shadow:0 0 0 4px rgba(230,180,34,.28);
animation:meetletPulse 1s ease-in-out infinite;
}
.meetlet-admin-settings .meetlet-dot--skipped { background:#b7c4be; box-shadow:none; }
.meetlet-admin-settings .meetlet-pill--pending { background:#e8efec; color:#456257; }
.meetlet-admin-settings .meetlet-pill--running { background:#ffe08a; color:#5c4700; }
.meetlet-admin-settings .meetlet-pill--skipped { background:#eef1f0; color:#667a72; }
@keyframes meetletPulse {
0%, 100% { transform:scale(1); opacity:1; }
50% { transform:scale(1.15); opacity:.75; }
}
.meetlet-admin-settings form.settingsform {
padding-bottom:1rem;
}
/* Single save row: spacing only — no stacked border/gradient bands. */
.meetlet-admin-settings .settingsform > .row:has(.btn-primary),
.meetlet-admin-settings .form-buttons,
.meetlet-admin-settings .btns-group {
margin-top:1.25rem !important;
padding:0;
border:0;
background:transparent;
border-radius:0;
}
.meetlet-admin-settings .meetlet-savebar {
margin-top: 1.25rem !important;
margin-right: 0 !important;
margin-left: 0 !important;
margin-inline: 0 !important;
flex: 0 0 100% !important;
max-width: 100% !important;
width: 100% !important;
padding: .35rem 0 !important;
border: 0 !important;
background: transparent !important;
border-radius: 0 !important;
}
@media (min-width: 576px) {
.meetlet-admin-settings .meetlet-savebar.offset-sm-3,
.meetlet-admin-settings .meetlet-savebar {
margin-right: 0 !important;
margin-left: 0 !important;
}
}
.meetlet-admin-settings .btn-primary,
.meetlet-admin-settings input[type="submit"].btn-primary,
.meetlet-admin-settings button[type="submit"].btn-primary,
.meetlet-admin-settings .meetlet-btn-with-icon.btn-primary {
background:#52cca3 !important;
border-color:#3db892 !important;
color:#00261a !important;
font-weight:700 !important;
border-radius:10px !important;
padding:.55rem 1.35rem !important;
box-shadow:none !important;
}
.meetlet-admin-settings .btn-primary:hover,
.meetlet-admin-settings input[type="submit"].btn-primary:hover,
.meetlet-admin-settings button[type="submit"].btn-primary:hover {
background:#6fd9b5 !important;
border-color:#52cca3 !important;
color:#00261a !important;
}
.meetlet-admin-settings .meetlet-btn-with-icon {
display:inline-flex !important;
align-items:center;
justify-content:center;
gap:.45rem;
}
.meetlet-admin-settings .meetlet-btn-with-icon svg {
width:1.1rem;
height:1.1rem;
flex:0 0 auto;
display:block;
}
.meetlet-admin-settings .meetlet-btn-with-icon__label {
line-height:1.2;
}
.meetlet-admin-settings .meetlet-server-group {
margin:1.1rem 0 .4rem; padding:1rem 1.1rem .2rem;
border:1px solid #cfe8de; border-radius:12px;
background:linear-gradient(180deg, #f3fbf8 0%, #ffffff 60%);
}
.meetlet-admin-settings .meetlet-server-group h4 {
margin:0 0 .25rem; color:#00261a; font-size:1.02rem; font-weight:700;
}
.meetlet-admin-settings .meetlet-server-group p {
margin:0 0 .55rem; color:#4a6b5f; font-size:.9rem; line-height:1.55;
}