Files
community-landing/assets/stylesheets/community_landing/admin.css
2026-03-08 11:53:11 -04:00

452 lines
15 KiB
CSS

/* ═══════════════════════════════════════════════════════════════════
Community Landing — Admin Settings Panel Styles v2.4.0
Tab navigation + fallback separators + bg-pair layout
═══════════════════════════════════════════════════════════════════ */
/* ── Tab-hidden class (used instead of inline display:none) ── */
.cl-tab-hidden {
display: none !important;
}
/* ── Injected tabs inside native Discourse nav bar ──
Native structure: <ul class="nav-pills d-nav-submenu__tabs">
<li class="admin-plugin-config-page__top-nav-item"><a>Settings</a></li>
<li class="admin-plugin-config-page__top-nav-item cl-admin-tab"><a>Hero</a></li>
</ul> */
.d-nav-submenu__tabs li.cl-admin-tab {
cursor: pointer;
}
.d-nav-submenu__tabs li.cl-admin-tab a {
cursor: pointer;
}
/* Dimmed state when Discourse filter/search is active */
.d-nav-submenu__tabs.cl-filter-active > li {
opacity: 0.4;
}
.d-nav-submenu__tabs.cl-filter-active > li.active {
opacity: 1;
border-bottom-color: transparent;
}
/* ── Standalone tab bar (fallback for older Discourse without native nav) ── */
.cl-admin-tabs {
display: flex;
flex-wrap: wrap;
gap: 0;
margin: 0 0 20px 0;
padding: 0;
border-bottom: 1px solid var(--primary-low, rgba(0, 0, 0, 0.1));
}
.cl-admin-tabs .cl-admin-tab {
padding: 10px 14px;
border: none;
background: none;
color: var(--primary-medium, #888);
font-size: 13px;
font-weight: 600;
cursor: pointer;
border-bottom: 2px solid transparent;
margin-bottom: -1px;
transition: color 0.15s ease, border-color 0.15s ease, opacity 0.15s ease;
}
.cl-admin-tabs .cl-admin-tab:hover {
color: var(--primary, #333);
}
.cl-admin-tabs .cl-admin-tab.active {
color: var(--tertiary, #0088cc);
border-bottom-color: var(--tertiary, #0088cc);
}
.cl-admin-tabs.filter-active .cl-admin-tab {
opacity: 0.4;
}
.cl-admin-tabs.filter-active .cl-admin-tab.active {
border-bottom-color: transparent;
}
html.dark-scheme .cl-admin-tabs {
border-bottom-color: rgba(255, 255, 255, 0.1);
}
html.dark-scheme .cl-admin-tabs .cl-admin-tab:hover {
color: var(--primary, #ddd);
}
/* ── Merged dark/light color pairs (CSS-only, no DOM moves) ── */
.cl-tabs-active .row.setting.cl-merged-dark {
float: left;
width: calc(50% - 8px);
margin-right: 16px;
padding-bottom: 0 !important;
margin-bottom: 0 !important;
}
.cl-tabs-active .row.setting.cl-merged-light {
float: left;
width: calc(50% - 8px);
padding-bottom: 0 !important;
margin-bottom: 20px !important;
}
/* Hide the light row's label + description — dark row's label covers both */
.cl-tabs-active .row.setting.cl-merged-light > .setting-label {
display: none;
}
.cl-tabs-active .row.setting.cl-merged-light .desc {
display: none;
}
/* Light row's value area fills the full width since label is hidden */
.cl-tabs-active .row.setting.cl-merged-light > .setting-value {
width: 100%;
float: none;
}
/* Dark row: label + value stack vertically inside the half-width */
.cl-tabs-active .row.setting.cl-merged-dark > .setting-label {
float: none;
width: 100%;
margin-bottom: 4px;
}
.cl-tabs-active .row.setting.cl-merged-dark > .setting-value {
float: none;
width: 100%;
padding-right: 0;
}
/* Controls (reset/undo) inside merged rows — inline after the color picker */
.cl-tabs-active .row.setting.cl-merged-dark > .setting-controls,
.cl-tabs-active .row.setting.cl-merged-light > .setting-controls {
float: none;
display: inline-block;
margin-top: 4px;
}
/* Clearfix after the light row to restore normal flow */
.cl-tabs-active .row.setting.cl-merged-light::after {
content: "";
display: block;
clear: both;
}
/* Insert a clear break after each pair to prevent stacking issues */
.cl-tabs-active .row.setting.cl-merged-light + .row.setting:not(.cl-merged-light) {
clear: both;
}
/* Also clear when a merged-light is followed by anything else */
.cl-tabs-active .cl-merged-light + *:not(.cl-merged-light):not(.cl-tab-hidden) {
clear: both;
}
.cl-color-col__label {
display: block;
font-size: var(--font-down-1);
font-weight: 600;
color: var(--primary-medium);
margin-bottom: 4px;
text-transform: uppercase;
letter-spacing: 0.04em;
}
@media (max-width: 767px) {
.cl-tabs-active .row.setting.cl-merged-dark,
.cl-tabs-active .row.setting.cl-merged-light {
float: none;
width: 100%;
margin-right: 0;
}
.cl-tabs-active .row.setting.cl-merged-light > .setting-label {
display: none;
}
}
/* ── Disabled-section notice banner ── */
.cl-disabled-notice {
display: flex;
align-items: center;
gap: 10px;
padding: 12px 16px;
margin: 12px 0 4px;
border-radius: 6px;
background: var(--highlight-bg, rgba(255, 191, 0, 0.08));
border: 1px solid var(--highlight-medium, rgba(255, 191, 0, 0.25));
color: var(--primary-high, #333);
font-size: var(--font-down-1);
line-height: 1.4;
}
.cl-disabled-notice svg {
color: var(--highlight-high, #e0a800);
}
.cl-disabled-notice strong {
font-weight: 700;
}
/* Dim sub-settings when the section is disabled */
.cl-tabs-active .row.setting.cl-disabled-dim {
opacity: 0.35;
pointer-events: none;
user-select: none;
}
/* ── When tabs are active, remove separator borders ── */
.cl-tabs-active .row.setting[data-setting] {
border-top: none !important;
margin-top: 0 !important;
padding-top: 0 !important;
}
/* ── Fallback: Separator borders when tabs are NOT active ──
(e.g. if JS fails to load or on older Discourse) */
/* All plugin settings spacing */
.admin-detail:not(.cl-tabs-active) .row.setting[data-setting="community_landing_enabled"],
.admin-detail:not(.cl-tabs-active) .row.setting[data-setting="section_order"],
.admin-detail:not(.cl-tabs-active) .row.setting[data-setting="custom_css"],
.admin-detail:not(.cl-tabs-active) .row.setting[data-setting^="meta_"],
.admin-detail:not(.cl-tabs-active) .row.setting[data-setting="og_image_url"],
.admin-detail:not(.cl-tabs-active) .row.setting[data-setting="favicon_url"],
.admin-detail:not(.cl-tabs-active) .row.setting[data-setting="json_ld_enabled"],
.admin-detail:not(.cl-tabs-active) .row.setting[data-setting^="logo_"],
.admin-detail:not(.cl-tabs-active) .row.setting[data-setting^="accent_"],
.admin-detail:not(.cl-tabs-active) .row.setting[data-setting="dark_bg_color"],
.admin-detail:not(.cl-tabs-active) .row.setting[data-setting="light_bg_color"],
.admin-detail:not(.cl-tabs-active) .row.setting[data-setting^="scroll_"],
.admin-detail:not(.cl-tabs-active) .row.setting[data-setting^="navbar_"],
.admin-detail:not(.cl-tabs-active) .row.setting[data-setting^="hero_"],
.admin-detail:not(.cl-tabs-active) .row.setting[data-setting^="stats_"],
.admin-detail:not(.cl-tabs-active) .row.setting[data-setting^="stat_"],
.admin-detail:not(.cl-tabs-active) .row.setting[data-setting^="about_"],
.admin-detail:not(.cl-tabs-active) .row.setting[data-setting^="topics_"],
.admin-detail:not(.cl-tabs-active) .row.setting[data-setting^="contributors_"],
.admin-detail:not(.cl-tabs-active) .row.setting[data-setting^="participation_"],
.admin-detail:not(.cl-tabs-active) .row.setting[data-setting^="groups_"],
.admin-detail:not(.cl-tabs-active) .row.setting[data-setting^="faq_"],
.admin-detail:not(.cl-tabs-active) .row.setting[data-setting="show_app_ctas"],
.admin-detail:not(.cl-tabs-active) .row.setting[data-setting^="ios_"],
.admin-detail:not(.cl-tabs-active) .row.setting[data-setting^="android_"],
.admin-detail:not(.cl-tabs-active) .row.setting[data-setting^="app_"],
.admin-detail:not(.cl-tabs-active) .row.setting[data-setting^="social_"],
.admin-detail:not(.cl-tabs-active) .row.setting[data-setting^="footer_"],
.admin-detail:not(.cl-tabs-active) .row.setting[data-setting^="google_"],
.admin-detail:not(.cl-tabs-active) .row.setting[data-setting^="title_font"],
.admin-detail:not(.cl-tabs-active) .row.setting[data-setting="fontawesome_enabled"] {
margin-bottom: 20px;
}
/* Section separator borders (fallback only) */
.admin-detail:not(.cl-tabs-active) .row.setting[data-setting="section_order"],
.admin-detail:not(.cl-tabs-active) .row.setting[data-setting="custom_css"],
.admin-detail:not(.cl-tabs-active) .row.setting[data-setting="meta_description"],
.admin-detail:not(.cl-tabs-active) .row.setting[data-setting="logo_dark_url"],
.admin-detail:not(.cl-tabs-active) .row.setting[data-setting="accent_color"],
.admin-detail:not(.cl-tabs-active) .row.setting[data-setting="scroll_animation"],
.admin-detail:not(.cl-tabs-active) .row.setting[data-setting="google_font_name"],
.admin-detail:not(.cl-tabs-active) .row.setting[data-setting="fontawesome_enabled"],
.admin-detail:not(.cl-tabs-active) .row.setting[data-setting="social_twitter_url"],
.admin-detail:not(.cl-tabs-active) .row.setting[data-setting="navbar_signin_label"],
.admin-detail:not(.cl-tabs-active) .row.setting[data-setting="hero_title"],
.admin-detail:not(.cl-tabs-active) .row.setting[data-setting="stats_enabled"],
.admin-detail:not(.cl-tabs-active) .row.setting[data-setting="about_enabled"],
.admin-detail:not(.cl-tabs-active) .row.setting[data-setting="participation_enabled"],
.admin-detail:not(.cl-tabs-active) .row.setting[data-setting="topics_enabled"],
.admin-detail:not(.cl-tabs-active) .row.setting[data-setting="groups_enabled"],
.admin-detail:not(.cl-tabs-active) .row.setting[data-setting="faq_enabled"],
.admin-detail:not(.cl-tabs-active) .row.setting[data-setting="show_app_ctas"],
.admin-detail:not(.cl-tabs-active) .row.setting[data-setting="footer_description"] {
border-top: 2px solid rgba(0, 0, 0, 0.12);
margin-top: 28px;
padding-top: 24px;
}
/* Dark mode separators (fallback only) */
html.dark-scheme .admin-detail:not(.cl-tabs-active) .row.setting[data-setting="section_order"],
html.dark-scheme .admin-detail:not(.cl-tabs-active) .row.setting[data-setting="custom_css"],
html.dark-scheme .admin-detail:not(.cl-tabs-active) .row.setting[data-setting="meta_description"],
html.dark-scheme .admin-detail:not(.cl-tabs-active) .row.setting[data-setting="logo_dark_url"],
html.dark-scheme .admin-detail:not(.cl-tabs-active) .row.setting[data-setting="accent_color"],
html.dark-scheme .admin-detail:not(.cl-tabs-active) .row.setting[data-setting="scroll_animation"],
html.dark-scheme .admin-detail:not(.cl-tabs-active) .row.setting[data-setting="google_font_name"],
html.dark-scheme .admin-detail:not(.cl-tabs-active) .row.setting[data-setting="fontawesome_enabled"],
html.dark-scheme .admin-detail:not(.cl-tabs-active) .row.setting[data-setting="social_twitter_url"],
html.dark-scheme .admin-detail:not(.cl-tabs-active) .row.setting[data-setting="navbar_signin_label"],
html.dark-scheme .admin-detail:not(.cl-tabs-active) .row.setting[data-setting="hero_title"],
html.dark-scheme .admin-detail:not(.cl-tabs-active) .row.setting[data-setting="stats_enabled"],
html.dark-scheme .admin-detail:not(.cl-tabs-active) .row.setting[data-setting="about_enabled"],
html.dark-scheme .admin-detail:not(.cl-tabs-active) .row.setting[data-setting="participation_enabled"],
html.dark-scheme .admin-detail:not(.cl-tabs-active) .row.setting[data-setting="topics_enabled"],
html.dark-scheme .admin-detail:not(.cl-tabs-active) .row.setting[data-setting="groups_enabled"],
html.dark-scheme .admin-detail:not(.cl-tabs-active) .row.setting[data-setting="faq_enabled"],
html.dark-scheme .admin-detail:not(.cl-tabs-active) .row.setting[data-setting="show_app_ctas"],
html.dark-scheme .admin-detail:not(.cl-tabs-active) .row.setting[data-setting="footer_description"] {
border-top-color: rgba(255, 255, 255, 0.12);
}
/* ── Settings row distribution (match Discourse native layout) ── */
.cl-tabs-active .row.setting {
padding-bottom: 20px;
}
/* Clearfix without overflow:hidden (avoids clipping dropdowns/color pickers) */
.cl-tabs-active .row.setting::after {
content: "";
display: table;
clear: both;
}
.cl-tabs-active .row.setting .setting-label {
float: left;
width: 17.6576%;
margin-right: 12px;
}
.cl-tabs-active .row.setting .setting-label h3 {
font-size: var(--font-0);
font-weight: normal;
}
.cl-tabs-active .row.setting .setting-label .history-icon {
opacity: 0;
transition: opacity 0.3s;
color: var(--primary-medium);
}
.cl-tabs-active .row.setting .setting-label:hover .history-icon {
opacity: 1;
}
.cl-tabs-active .row.setting .setting-value {
float: left;
width: 53%;
padding-right: 20px;
}
.cl-tabs-active .row.setting .setting-value input[type="checkbox"],
.cl-tabs-active .row.setting .setting-value input[type="radio"] {
flex: 0 0 auto;
}
.cl-tabs-active .row.setting .setting-value .select-kit {
width: 100% !important;
}
.cl-tabs-active .row.setting .setting-value .category-selector {
width: 95%;
}
.cl-tabs-active .row.setting .setting-value .input-setting-string,
.cl-tabs-active .row.setting .setting-value .input-setting-integer,
.cl-tabs-active .row.setting .setting-value .input-setting-textarea {
width: 100%;
}
.cl-tabs-active .row.setting .setting-value .input-setting-textarea {
height: 150px;
}
.cl-tabs-active .row.setting .setting-value .input-setting-list {
padding: 1px;
background-color: var(--secondary);
border: 1px solid var(--input-border-color);
border-radius: 3px;
transition: border linear 0.2s, box-shadow linear 0.2s;
}
.cl-tabs-active .row.setting .setting-controls {
float: left;
}
.cl-tabs-active .row.setting .desc,
.cl-tabs-active .row.setting .cl-desc,
.cl-tabs-active .row.setting .validation-error {
padding-top: 3px;
font-size: var(--font-down-1);
line-height: var(--line-height-large);
}
.cl-tabs-active .row.setting .desc,
.cl-tabs-active .row.setting .cl-desc {
color: var(--primary-medium);
}
.cl-tabs-active .row.setting .validation-error {
color: var(--danger);
}
.cl-tabs-active .row.setting .setting-theme-warning {
font-size: var(--font-down-1);
color: var(--primary-medium);
}
/* Overridden settings indicator (yellow dot) */
.cl-tabs-active .row.setting.overridden .values input {
background-color: var(--highlight-bg);
}
.cl-tabs-active .row.setting.overridden h3 {
position: relative;
}
.cl-tabs-active .row.setting.overridden h3::before {
content: "";
position: absolute;
top: 0.5rem;
left: -1rem;
width: 0.5rem;
height: 0.5rem;
border-radius: 100%;
background-color: var(--highlight-high);
}
.cl-tabs-active .row.setting.overridden.string input[type="text"],
.cl-tabs-active .row.setting.overridden.string input[type="password"],
.cl-tabs-active .row.setting.overridden.string textarea {
background-color: var(--highlight-bg);
}
@media (max-width: 767px) {
.cl-tabs-active .row.setting .setting-label {
float: none;
width: 100%;
margin-right: 0;
margin-left: 0;
}
.cl-tabs-active .row.setting .setting-label h3 {
margin-bottom: 6px;
}
.cl-tabs-active .row.setting .setting-value {
width: 100%;
padding-right: 0;
}
.cl-tabs-active .row.setting .setting-value .input-setting-list {
width: 100%;
}
.cl-tabs-active .row.setting .setting-value .select-kit {
width: 100% !important;
}
}