2026-02-04 10:00:40 -05:00
|
|
|
/* =============================================================================
|
|
|
|
|
OTS SIGNAGE DARK THEME (REBUILT)
|
|
|
|
|
February 4, 2026
|
|
|
|
|
============================================================================= */
|
2026-02-04 07:17:33 -05:00
|
|
|
|
|
|
|
|
:root {
|
|
|
|
|
color-scheme: dark;
|
2026-02-04 10:00:40 -05:00
|
|
|
|
|
|
|
|
--ots-bg: #0b111a;
|
|
|
|
|
--ots-surface: #141c2b;
|
|
|
|
|
--ots-surface-2: #1b2436;
|
|
|
|
|
--ots-surface-3: #222c3f;
|
|
|
|
|
--ots-border: #2c3a54;
|
|
|
|
|
--ots-border-soft: #243047;
|
|
|
|
|
--ots-text: #e6eefb;
|
|
|
|
|
--ots-text-muted: #a9b6cc;
|
|
|
|
|
--ots-text-faint: #7f8aa3;
|
|
|
|
|
--ots-primary: #4f8cff;
|
|
|
|
|
--ots-primary-2: #2f6bff;
|
|
|
|
|
--ots-success: #2ad4a4;
|
|
|
|
|
--ots-warning: #f4b860;
|
|
|
|
|
--ots-danger: #ff6b6b;
|
|
|
|
|
--ots-info: #5ec0ff;
|
|
|
|
|
|
|
|
|
|
--ots-shadow-lg: 0 14px 30px rgba(0, 0, 0, 0.35);
|
|
|
|
|
--ots-shadow-md: 0 8px 18px rgba(0, 0, 0, 0.25);
|
|
|
|
|
--ots-shadow-sm: 0 3px 8px rgba(0, 0, 0, 0.2);
|
|
|
|
|
|
|
|
|
|
--ots-radius-sm: 6px;
|
|
|
|
|
--ots-radius-md: 10px;
|
|
|
|
|
--ots-radius-lg: 14px;
|
|
|
|
|
|
|
|
|
|
--ots-transition: 160ms ease;
|
2026-02-09 18:47:14 -05:00
|
|
|
|
|
|
|
|
/* Modal pop-ups */
|
|
|
|
|
--modal-backdrop-bg: rgba(2, 6, 23, 0.55);
|
|
|
|
|
--modal-backdrop-blur: 6px;
|
|
|
|
|
--modal-bg: #141c2b;
|
|
|
|
|
--modal-border: #2c3a54;
|
|
|
|
|
--modal-radius: 16px;
|
|
|
|
|
--modal-shadow: 0 24px 64px rgba(0, 0, 0, 0.45), 0 0 0 1px rgba(255, 255, 255, 0.04);
|
|
|
|
|
--modal-header-bg: #0f172a;
|
|
|
|
|
--modal-header-border: #2c3a54;
|
|
|
|
|
--modal-header-text: #f1f5f9;
|
|
|
|
|
--modal-body-bg: #141c2b;
|
|
|
|
|
--modal-body-text: #e2e8f0;
|
|
|
|
|
--modal-footer-bg: #0f172a;
|
|
|
|
|
--modal-footer-border: #2c3a54;
|
|
|
|
|
--modal-close-color: #64748b;
|
|
|
|
|
--modal-close-hover: #f1f5f9;
|
|
|
|
|
--modal-input-bg: #0b111a;
|
|
|
|
|
--modal-input-border: #2c3a54;
|
|
|
|
|
--modal-input-text: #e6eefb;
|
|
|
|
|
--modal-input-focus-border: #4f8cff;
|
|
|
|
|
--modal-input-focus-ring: rgba(79, 140, 255, 0.2);
|
2026-02-04 10:00:40 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* =============================================================================
|
|
|
|
|
GLOBAL
|
|
|
|
|
============================================================================= */
|
2026-02-04 07:17:33 -05:00
|
|
|
|
|
|
|
|
html,
|
|
|
|
|
body {
|
2026-02-04 10:00:40 -05:00
|
|
|
background: var(--ots-bg);
|
|
|
|
|
color: var(--ots-text);
|
2026-02-04 07:17:33 -05:00
|
|
|
}
|
|
|
|
|
|
2026-02-04 10:00:40 -05:00
|
|
|
body {
|
|
|
|
|
font-family: "Inter", "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
|
|
|
|
|
-webkit-font-smoothing: antialiased;
|
|
|
|
|
text-rendering: optimizeLegibility;
|
2026-02-04 07:17:33 -05:00
|
|
|
}
|
|
|
|
|
|
2026-02-04 10:00:40 -05:00
|
|
|
a,
|
|
|
|
|
.nav-link,
|
|
|
|
|
.sidebar a {
|
|
|
|
|
color: var(--ots-text);
|
2026-02-04 07:17:33 -05:00
|
|
|
text-decoration: none;
|
2026-02-04 10:00:40 -05:00
|
|
|
transition: color var(--ots-transition), background var(--ots-transition);
|
2026-02-04 07:17:33 -05:00
|
|
|
}
|
|
|
|
|
|
2026-02-04 10:00:40 -05:00
|
|
|
a:hover,
|
|
|
|
|
.nav-link:hover,
|
|
|
|
|
.sidebar a:hover {
|
|
|
|
|
color: var(--ots-primary);
|
2026-02-04 07:17:33 -05:00
|
|
|
}
|
|
|
|
|
|
2026-02-04 10:00:40 -05:00
|
|
|
h1,
|
|
|
|
|
h2,
|
|
|
|
|
h3,
|
|
|
|
|
h4,
|
|
|
|
|
h5,
|
|
|
|
|
h6 {
|
|
|
|
|
color: var(--ots-text);
|
2026-02-04 07:17:33 -05:00
|
|
|
font-weight: 600;
|
|
|
|
|
}
|
|
|
|
|
|
2026-02-04 10:00:40 -05:00
|
|
|
small,
|
|
|
|
|
.text-muted {
|
|
|
|
|
color: var(--ots-text-muted) !important;
|
2026-02-04 07:17:33 -05:00
|
|
|
}
|
|
|
|
|
|
2026-02-04 10:00:40 -05:00
|
|
|
hr {
|
|
|
|
|
border-color: var(--ots-border);
|
2026-02-04 07:17:33 -05:00
|
|
|
}
|
|
|
|
|
|
2026-02-04 10:00:40 -05:00
|
|
|
/* =============================================================================
|
|
|
|
|
LAYOUT WRAPPERS
|
|
|
|
|
============================================================================= */
|
2026-02-04 07:17:33 -05:00
|
|
|
|
2026-02-04 10:00:40 -05:00
|
|
|
#page-wrapper,
|
|
|
|
|
#content-wrapper,
|
|
|
|
|
.page-content {
|
|
|
|
|
background: var(--ots-bg);
|
2026-02-04 07:17:33 -05:00
|
|
|
}
|
|
|
|
|
|
2026-02-04 10:00:40 -05:00
|
|
|
.page-content {
|
|
|
|
|
padding-top: 24px;
|
2026-02-04 07:17:33 -05:00
|
|
|
}
|
|
|
|
|
|
2026-02-04 10:00:40 -05:00
|
|
|
/* =============================================================================
|
|
|
|
|
NAVBAR / TOPBAR
|
|
|
|
|
============================================================================= */
|
2026-02-04 07:17:33 -05:00
|
|
|
|
2026-02-04 10:00:40 -05:00
|
|
|
.navbar,
|
|
|
|
|
.navbar-default {
|
|
|
|
|
background: var(--ots-surface-2);
|
|
|
|
|
border: 1px solid var(--ots-border);
|
|
|
|
|
box-shadow: var(--ots-shadow-sm);
|
2026-02-04 07:17:33 -05:00
|
|
|
}
|
|
|
|
|
|
2026-02-09 18:47:14 -05:00
|
|
|
/* Horizontal nav mode: remove sidebar margins from #content-wrapper */
|
|
|
|
|
.navbar.navbar-expand-lg ~ #content-wrapper {
|
|
|
|
|
margin-left: 0 !important;
|
|
|
|
|
width: 100% !important;
|
|
|
|
|
max-width: 100% !important;
|
|
|
|
|
padding-left: 20px !important;
|
|
|
|
|
padding-right: 20px !important;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.navbar.navbar-expand-lg ~ #content-wrapper .page-content {
|
|
|
|
|
padding-left: 0 !important;
|
|
|
|
|
padding-right: 0 !important;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.navbar.navbar-expand-lg ~ #content-wrapper .page-content .row {
|
|
|
|
|
margin-left: 0 !important;
|
|
|
|
|
margin-right: 0 !important;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.navbar.navbar-expand-lg ~ #content-wrapper .page-content [class*="col-"] {
|
|
|
|
|
padding-left: 0 !important;
|
|
|
|
|
padding-right: 0 !important;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.navbar.navbar-expand-lg ~ #content-wrapper .page-content > .row > .col-sm-12 {
|
|
|
|
|
padding-left: 0 !important;
|
|
|
|
|
padding-right: 0 !important;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.navbar.navbar-expand-lg ~ #content-wrapper,
|
|
|
|
|
.navbar.navbar-expand-lg ~ #content-wrapper .page-content {
|
|
|
|
|
background: var(--ots-bg) !important;
|
|
|
|
|
color: var(--ots-text) !important;
|
|
|
|
|
}
|
|
|
|
|
|
2026-02-04 10:00:40 -05:00
|
|
|
.navbar-brand,
|
|
|
|
|
.navbar-brand .xibo-logo {
|
|
|
|
|
color: var(--ots-text);
|
2026-02-04 07:17:33 -05:00
|
|
|
}
|
|
|
|
|
|
2026-02-04 10:00:40 -05:00
|
|
|
.navbar-nav > li > a,
|
|
|
|
|
.navbar-nav > .active > a,
|
|
|
|
|
.navbar-nav > .open > a {
|
|
|
|
|
color: var(--ots-text) !important;
|
|
|
|
|
background: transparent !important;
|
2026-02-04 07:17:33 -05:00
|
|
|
}
|
|
|
|
|
|
2026-02-04 10:00:40 -05:00
|
|
|
.navbar-nav > li > a:hover {
|
|
|
|
|
color: var(--ots-primary) !important;
|
2026-02-04 07:17:33 -05:00
|
|
|
}
|
|
|
|
|
|
2026-02-04 10:00:40 -05:00
|
|
|
.navbar-toggler,
|
|
|
|
|
.navbar-toggler-side {
|
|
|
|
|
color: var(--ots-text);
|
|
|
|
|
border: 1px solid var(--ots-border);
|
2026-02-04 07:17:33 -05:00
|
|
|
}
|
|
|
|
|
|
2026-02-04 10:00:40 -05:00
|
|
|
/* Topbar nav refinements (dark) */
|
|
|
|
|
.ots-topbar.navbar-nav {
|
|
|
|
|
background: transparent;
|
|
|
|
|
border: 0;
|
2026-02-04 07:17:33 -05:00
|
|
|
padding: 0;
|
|
|
|
|
margin: 0;
|
2026-02-04 10:00:40 -05:00
|
|
|
gap: 6px;
|
|
|
|
|
height: auto;
|
2026-02-04 07:17:33 -05:00
|
|
|
align-items: center;
|
|
|
|
|
}
|
|
|
|
|
|
2026-02-04 10:00:40 -05:00
|
|
|
.ots-topbar .nav-link {
|
|
|
|
|
display: inline-flex;
|
2026-02-04 07:17:33 -05:00
|
|
|
align-items: center;
|
2026-02-04 10:00:40 -05:00
|
|
|
gap: 8px;
|
2026-02-04 07:17:33 -05:00
|
|
|
padding: 8px 12px;
|
2026-02-04 10:00:40 -05:00
|
|
|
border-radius: 10px;
|
|
|
|
|
color: var(--ots-text);
|
2026-02-04 07:17:33 -05:00
|
|
|
font-weight: 600;
|
2026-02-04 10:00:40 -05:00
|
|
|
transition: background var(--ots-transition), color var(--ots-transition);
|
2026-02-04 07:17:33 -05:00
|
|
|
}
|
|
|
|
|
|
2026-02-04 10:00:40 -05:00
|
|
|
.ots-topbar .nav-link:hover,
|
|
|
|
|
.ots-topbar .nav-item.open .nav-link,
|
|
|
|
|
.ots-topbar .nav-item.active .nav-link {
|
|
|
|
|
background: rgba(79, 140, 255, 0.18);
|
|
|
|
|
color: var(--ots-primary);
|
2026-02-04 07:17:33 -05:00
|
|
|
}
|
|
|
|
|
|
2026-02-04 10:00:40 -05:00
|
|
|
.ots-topbar .dropdown-menu {
|
|
|
|
|
border-radius: 12px;
|
|
|
|
|
padding: 8px;
|
|
|
|
|
box-shadow: var(--ots-shadow-md);
|
2026-02-04 07:17:33 -05:00
|
|
|
}
|
|
|
|
|
|
2026-02-04 10:00:40 -05:00
|
|
|
.ots-topbar .dropdown-item,
|
|
|
|
|
.ots-topbar .dropdown-menu a {
|
2026-02-04 07:17:33 -05:00
|
|
|
display: flex;
|
|
|
|
|
align-items: center;
|
|
|
|
|
gap: 8px;
|
|
|
|
|
border-radius: 8px;
|
2026-02-04 10:00:40 -05:00
|
|
|
padding: 8px 10px;
|
2026-02-04 07:17:33 -05:00
|
|
|
}
|
|
|
|
|
|
2026-02-04 10:00:40 -05:00
|
|
|
.ots-topbar-icon {
|
|
|
|
|
width: 16px;
|
2026-02-04 07:17:33 -05:00
|
|
|
text-align: center;
|
2026-02-04 10:00:40 -05:00
|
|
|
opacity: 0.85;
|
|
|
|
|
font-size: 13px;
|
2026-02-04 07:17:33 -05:00
|
|
|
}
|
|
|
|
|
|
2026-02-04 10:00:40 -05:00
|
|
|
/* =============================================================================
|
|
|
|
|
SIDEBAR
|
|
|
|
|
============================================================================= */
|
2026-02-04 07:17:33 -05:00
|
|
|
|
2026-02-04 10:00:40 -05:00
|
|
|
#sidebar-wrapper {
|
|
|
|
|
background: var(--ots-surface);
|
|
|
|
|
border-right: 1px solid var(--ots-border);
|
2026-02-04 15:26:44 -05:00
|
|
|
display: flex;
|
|
|
|
|
flex-direction: column;
|
|
|
|
|
height: 100vh;
|
|
|
|
|
overflow: hidden;
|
2026-02-04 07:17:33 -05:00
|
|
|
}
|
|
|
|
|
|
2026-02-04 10:00:40 -05:00
|
|
|
/* OTS sidebar override marker */
|
|
|
|
|
.ots-sidebar-wrapper {
|
2026-02-04 15:26:44 -05:00
|
|
|
display: flex;
|
|
|
|
|
flex-direction: column;
|
|
|
|
|
height: 100vh;
|
|
|
|
|
background: var(--ots-surface);
|
2026-02-04 07:17:33 -05:00
|
|
|
}
|
|
|
|
|
|
2026-02-04 15:26:44 -05:00
|
|
|
/* Sidebar Header */
|
|
|
|
|
.ots-sidebar-header {
|
2026-02-04 07:17:33 -05:00
|
|
|
display: flex;
|
|
|
|
|
align-items: center;
|
2026-02-04 15:26:44 -05:00
|
|
|
gap: 12px;
|
|
|
|
|
padding: 16px;
|
|
|
|
|
border-bottom: 1px solid var(--ots-border);
|
|
|
|
|
background: var(--ots-surface);
|
2026-02-04 07:17:33 -05:00
|
|
|
}
|
|
|
|
|
|
2026-02-04 15:26:44 -05:00
|
|
|
.ots-brand-logo {
|
|
|
|
|
width: 40px;
|
|
|
|
|
height: 40px;
|
|
|
|
|
display: flex;
|
|
|
|
|
align-items: center;
|
|
|
|
|
justify-content: center;
|
|
|
|
|
background: rgba(79, 140, 255, 0.15);
|
|
|
|
|
border: 1px solid rgba(79, 140, 255, 0.3);
|
|
|
|
|
border-radius: 6px;
|
|
|
|
|
font-size: 18px;
|
|
|
|
|
color: var(--ots-primary);
|
|
|
|
|
flex-shrink: 0;
|
2026-02-04 07:17:33 -05:00
|
|
|
}
|
|
|
|
|
|
2026-02-04 15:26:44 -05:00
|
|
|
.ots-brand-text {
|
2026-02-04 10:00:40 -05:00
|
|
|
flex: 1;
|
|
|
|
|
min-width: 0;
|
2026-02-04 07:17:33 -05:00
|
|
|
}
|
|
|
|
|
|
2026-02-04 15:26:44 -05:00
|
|
|
.ots-brand-name {
|
|
|
|
|
display: block;
|
|
|
|
|
font-size: 14px;
|
|
|
|
|
font-weight: 600;
|
|
|
|
|
color: var(--ots-text);
|
|
|
|
|
letter-spacing: 0.5px;
|
2026-02-04 07:17:33 -05:00
|
|
|
}
|
|
|
|
|
|
2026-02-04 15:26:44 -05:00
|
|
|
.ots-sidebar-close {
|
|
|
|
|
background: none;
|
|
|
|
|
border: none;
|
|
|
|
|
color: var(--ots-text-secondary);
|
|
|
|
|
cursor: pointer;
|
|
|
|
|
padding: 4px;
|
|
|
|
|
display: flex;
|
|
|
|
|
align-items: center;
|
|
|
|
|
justify-content: center;
|
|
|
|
|
transition: color var(--ots-transition);
|
|
|
|
|
flex-shrink: 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.ots-sidebar-close:hover {
|
|
|
|
|
color: var(--ots-text);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Sidebar Content */
|
|
|
|
|
.ots-sidebar {
|
|
|
|
|
flex: 1;
|
|
|
|
|
list-style: none;
|
|
|
|
|
margin: 0;
|
|
|
|
|
padding: 12px 0;
|
|
|
|
|
overflow-y: auto;
|
|
|
|
|
overflow-x: hidden;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.ots-sidebar li {
|
|
|
|
|
margin: 0;
|
|
|
|
|
padding: 0;
|
|
|
|
|
}
|
|
|
|
|
|
2026-02-05 09:04:06 -05:00
|
|
|
/* Dark-mode repair overrides: ensure sidebar doesn't draw a vertical divider */
|
|
|
|
|
#sidebar-wrapper,
|
|
|
|
|
.ots-sidebar {
|
|
|
|
|
border-right: none !important;
|
|
|
|
|
box-shadow: none !important;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Hide pseudo-elements that might draw a divider */
|
|
|
|
|
.ots-sidebar::before,
|
|
|
|
|
.ots-sidebar::after,
|
|
|
|
|
#sidebar-wrapper::before,
|
|
|
|
|
#sidebar-wrapper::after,
|
|
|
|
|
#page-wrapper::before,
|
|
|
|
|
#page-wrapper::after {
|
|
|
|
|
content: none !important;
|
|
|
|
|
display: none !important;
|
|
|
|
|
background: transparent !important;
|
|
|
|
|
box-shadow: none !important;
|
|
|
|
|
}
|
|
|
|
|
|
2026-02-04 15:26:44 -05:00
|
|
|
/* Sidebar Main Item */
|
|
|
|
|
.ots-sidebar li.sidebar-main > a {
|
|
|
|
|
display: flex;
|
|
|
|
|
align-items: center;
|
|
|
|
|
gap: 12px;
|
|
|
|
|
margin: 0 8px;
|
2026-02-04 10:00:40 -05:00
|
|
|
padding: 10px 12px;
|
2026-02-04 15:26:44 -05:00
|
|
|
border-radius: 6px;
|
|
|
|
|
color: var(--ots-text);
|
|
|
|
|
text-decoration: none;
|
|
|
|
|
transition: background var(--ots-transition), color var(--ots-transition);
|
|
|
|
|
font-size: 14px;
|
|
|
|
|
font-weight: 500;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.ots-sidebar li.sidebar-main > a:hover {
|
|
|
|
|
background: rgba(79, 140, 255, 0.12);
|
|
|
|
|
color: var(--ots-primary);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.ots-sidebar li.sidebar-main > a.active {
|
|
|
|
|
background: rgba(79, 140, 255, 0.2);
|
|
|
|
|
color: var(--ots-primary);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Sidebar Section (Collapsible) */
|
|
|
|
|
.ots-sidebar li.sidebar-section > a.sidebar-section-toggle {
|
|
|
|
|
display: flex;
|
|
|
|
|
align-items: center;
|
|
|
|
|
gap: 12px;
|
|
|
|
|
margin: 0 8px;
|
|
|
|
|
padding: 10px 12px;
|
|
|
|
|
border-radius: 6px;
|
|
|
|
|
color: var(--ots-text);
|
|
|
|
|
text-decoration: none;
|
2026-02-04 10:00:40 -05:00
|
|
|
transition: background var(--ots-transition), color var(--ots-transition);
|
2026-02-04 15:26:44 -05:00
|
|
|
font-size: 14px;
|
|
|
|
|
font-weight: 500;
|
|
|
|
|
cursor: pointer;
|
|
|
|
|
background: none;
|
|
|
|
|
border: none;
|
|
|
|
|
text-align: left;
|
|
|
|
|
width: calc(100% - 16px);
|
2026-02-04 07:17:33 -05:00
|
|
|
}
|
|
|
|
|
|
2026-02-04 15:26:44 -05:00
|
|
|
.ots-sidebar li.sidebar-section > a.sidebar-section-toggle:hover {
|
2026-02-04 10:00:40 -05:00
|
|
|
background: rgba(79, 140, 255, 0.12);
|
|
|
|
|
color: var(--ots-primary);
|
2026-02-04 07:17:33 -05:00
|
|
|
}
|
|
|
|
|
|
2026-02-04 15:26:44 -05:00
|
|
|
.ots-sidebar li.sidebar-section > a.sidebar-section-toggle.active {
|
|
|
|
|
background: rgba(79, 140, 255, 0.12);
|
|
|
|
|
color: var(--ots-primary);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.ots-section-toggle-icon {
|
|
|
|
|
margin-left: auto;
|
|
|
|
|
font-size: 12px;
|
|
|
|
|
transition: transform var(--ots-transition);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.ots-sidebar li.sidebar-section > a.sidebar-section-toggle.active .ots-section-toggle-icon {
|
|
|
|
|
transform: rotate(180deg);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Sidebar Subsection */
|
|
|
|
|
.ots-sidebar .sidebar-subsection {
|
|
|
|
|
list-style: none;
|
|
|
|
|
margin: 0;
|
|
|
|
|
padding: 4px 0;
|
|
|
|
|
display: none;
|
|
|
|
|
background: rgba(79, 140, 255, 0.05);
|
2026-02-04 07:17:33 -05:00
|
|
|
}
|
|
|
|
|
|
2026-02-04 15:26:44 -05:00
|
|
|
.ots-sidebar .sidebar-subsection.active {
|
2026-02-04 10:00:40 -05:00
|
|
|
display: block;
|
2026-02-04 15:26:44 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.ots-sidebar .sidebar-subsection li {
|
|
|
|
|
margin: 0;
|
|
|
|
|
padding: 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Sidebar List Item */
|
|
|
|
|
.ots-sidebar li.sidebar-list > a {
|
|
|
|
|
display: flex;
|
|
|
|
|
align-items: center;
|
|
|
|
|
gap: 12px;
|
|
|
|
|
margin: 2px 12px 2px 28px;
|
|
|
|
|
padding: 8px 12px;
|
|
|
|
|
border-radius: 4px;
|
|
|
|
|
color: var(--ots-text-secondary);
|
|
|
|
|
text-decoration: none;
|
|
|
|
|
transition: background var(--ots-transition), color var(--ots-transition);
|
|
|
|
|
font-size: 13px;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.ots-sidebar li.sidebar-list > a:hover {
|
|
|
|
|
background: rgba(79, 140, 255, 0.12);
|
|
|
|
|
color: var(--ots-primary);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.ots-sidebar li.sidebar-list > a.active {
|
|
|
|
|
background: rgba(79, 140, 255, 0.15);
|
|
|
|
|
color: var(--ots-primary);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Navigation Icons and Text */
|
2026-02-06 23:57:16 -05:00
|
|
|
|
|
|
|
|
/* ==========================================================================
|
|
|
|
|
FORCE DARK BACKGROUND FALLBACKS
|
|
|
|
|
Ensure no white areas appear when scrolling or when elements overflow.
|
|
|
|
|
This uses high-specificity selectors and !important to override stray
|
|
|
|
|
light-background rules from other stylesheets.
|
|
|
|
|
========================================================================== */
|
|
|
|
|
|
|
|
|
|
html, body, #page-wrapper, .ots-main, .ots-content, .page-content, .container {
|
|
|
|
|
background-color: var(--color-background) !important;
|
|
|
|
|
background: none !important;
|
|
|
|
|
color: var(--color-text-primary) !important;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Remove or neutralise any pseudo-elements that may paint a light background */
|
|
|
|
|
html::before, html::after, body::before, body::after, #page-wrapper::before, #page-wrapper::after {
|
|
|
|
|
background: transparent !important;
|
|
|
|
|
content: none !important;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Ensure fixed/backdrop layers are dark where appropriate */
|
|
|
|
|
.modal-backdrop,
|
|
|
|
|
.modal,
|
|
|
|
|
.modal-open,
|
|
|
|
|
.ots-shell,
|
|
|
|
|
.ots-footer {
|
|
|
|
|
background-color: var(--color-background) !important;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Defensive: override any explicit white panel backgrounds that leak outside their container */
|
Refactor dashboard card classes to use 'content-card' instead of 'dashboard-card'
- Updated various views to replace 'dashboard-card' with 'content-card' for consistency in styling.
- Modified filter and table card classes across multiple pages including applications, campaigns, commands, datasets, dayparts, displays, display groups, display profiles, fonts, layouts, libraries, menu boards, modules, player software, playlists, resolutions, schedules, settings, sync groups, tags, tasks, templates, transitions, users, and user groups.
2026-02-11 09:17:45 -05:00
|
|
|
.card, .panel, .panel-body, .dashboard-card, .content-card, .ots-sidebar li.sidebar-list.active > a {
|
2026-02-06 23:57:16 -05:00
|
|
|
background-color: var(--color-surface) !important;
|
|
|
|
|
color: var(--color-text-primary) !important;
|
|
|
|
|
}
|
2026-02-04 15:26:44 -05:00
|
|
|
.ots-nav-icon {
|
|
|
|
|
width: 16px;
|
|
|
|
|
height: 16px;
|
|
|
|
|
display: flex;
|
|
|
|
|
align-items: center;
|
|
|
|
|
justify-content: center;
|
|
|
|
|
text-align: center;
|
|
|
|
|
opacity: 0.85;
|
|
|
|
|
font-size: 14px;
|
|
|
|
|
flex-shrink: 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.ots-nav-text {
|
|
|
|
|
flex: 1;
|
|
|
|
|
min-width: 0;
|
|
|
|
|
white-space: nowrap;
|
|
|
|
|
overflow: hidden;
|
|
|
|
|
text-overflow: ellipsis;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Sidebar Spacer */
|
|
|
|
|
.sidebar-spacer {
|
|
|
|
|
height: 12px;
|
|
|
|
|
margin-top: auto;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Sidebar Footer */
|
|
|
|
|
.ots-sidebar-footer {
|
|
|
|
|
display: flex;
|
|
|
|
|
align-items: center;
|
|
|
|
|
gap: 12px;
|
|
|
|
|
padding: 12px 16px;
|
|
|
|
|
border-top: 1px solid var(--ots-border);
|
|
|
|
|
background: var(--ots-surface);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.ots-user-section {
|
|
|
|
|
flex: 1;
|
|
|
|
|
min-width: 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.ots-user-role {
|
|
|
|
|
font-size: 11px;
|
|
|
|
|
color: var(--ots-text-secondary);
|
|
|
|
|
text-transform: uppercase;
|
|
|
|
|
letter-spacing: 0.5px;
|
|
|
|
|
margin-bottom: 2px;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.ots-user-name {
|
|
|
|
|
font-size: 13px;
|
|
|
|
|
font-weight: 500;
|
2026-02-04 10:00:40 -05:00
|
|
|
color: var(--ots-text);
|
2026-02-04 15:26:44 -05:00
|
|
|
white-space: nowrap;
|
|
|
|
|
overflow: hidden;
|
|
|
|
|
text-overflow: ellipsis;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.ots-user-profile-link {
|
|
|
|
|
display: flex;
|
|
|
|
|
align-items: center;
|
|
|
|
|
justify-content: center;
|
|
|
|
|
width: 32px;
|
|
|
|
|
height: 32px;
|
|
|
|
|
border-radius: 4px;
|
|
|
|
|
color: var(--ots-text-secondary);
|
|
|
|
|
text-decoration: none;
|
|
|
|
|
transition: background var(--ots-transition), color var(--ots-transition);
|
|
|
|
|
font-size: 16px;
|
|
|
|
|
flex-shrink: 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.ots-user-profile-link:hover {
|
|
|
|
|
background: rgba(79, 140, 255, 0.12);
|
|
|
|
|
color: var(--ots-primary);
|
2026-02-04 07:17:33 -05:00
|
|
|
}
|
|
|
|
|
|
2026-02-04 10:00:40 -05:00
|
|
|
#sidebar-wrapper .sidebar-main a:hover,
|
|
|
|
|
#sidebar-wrapper .sidebar-list a:hover {
|
|
|
|
|
background: rgba(79, 140, 255, 0.12);
|
|
|
|
|
color: var(--ots-primary);
|
2026-02-04 07:17:33 -05:00
|
|
|
}
|
|
|
|
|
|
2026-02-04 10:00:40 -05:00
|
|
|
#sidebar-wrapper .sidebar-title a {
|
|
|
|
|
padding: 12px 18px 6px;
|
|
|
|
|
color: var(--ots-text-faint);
|
|
|
|
|
font-size: 11px;
|
|
|
|
|
letter-spacing: 0.08em;
|
|
|
|
|
text-transform: uppercase;
|
2026-02-04 07:17:33 -05:00
|
|
|
}
|
|
|
|
|
|
2026-02-04 10:00:40 -05:00
|
|
|
/* =============================================================================
|
|
|
|
|
WIDGETS / CARDS
|
|
|
|
|
============================================================================= */
|
2026-02-04 07:17:33 -05:00
|
|
|
|
2026-02-04 10:00:40 -05:00
|
|
|
.widget,
|
|
|
|
|
.card,
|
|
|
|
|
.panel,
|
|
|
|
|
.modal-content {
|
|
|
|
|
background: var(--ots-surface-2);
|
|
|
|
|
border: 1px solid var(--ots-border);
|
|
|
|
|
border-radius: var(--ots-radius-md);
|
|
|
|
|
box-shadow: var(--ots-shadow-sm);
|
2026-02-04 07:17:33 -05:00
|
|
|
}
|
|
|
|
|
|
2026-02-04 10:00:40 -05:00
|
|
|
.widget-title,
|
|
|
|
|
.panel-heading,
|
|
|
|
|
.card-header,
|
|
|
|
|
.modal-header {
|
|
|
|
|
background: var(--ots-surface-3);
|
|
|
|
|
border-bottom: 1px solid var(--ots-border);
|
|
|
|
|
color: var(--ots-text);
|
2026-02-04 07:17:33 -05:00
|
|
|
}
|
|
|
|
|
|
2026-02-04 10:00:40 -05:00
|
|
|
.widget-body,
|
|
|
|
|
.panel-body,
|
|
|
|
|
.card-body,
|
|
|
|
|
.modal-body {
|
|
|
|
|
color: var(--ots-text);
|
2026-02-04 07:17:33 -05:00
|
|
|
}
|
|
|
|
|
|
2026-02-04 10:00:40 -05:00
|
|
|
/* =============================================================================
|
|
|
|
|
BUTTONS
|
|
|
|
|
============================================================================= */
|
2026-02-04 07:17:33 -05:00
|
|
|
|
2026-02-04 10:00:40 -05:00
|
|
|
.btn,
|
|
|
|
|
button,
|
|
|
|
|
input[type="button"],
|
|
|
|
|
input[type="submit"] {
|
|
|
|
|
border-radius: var(--ots-radius-sm);
|
|
|
|
|
border: 1px solid transparent;
|
|
|
|
|
transition: background var(--ots-transition), border var(--ots-transition), color var(--ots-transition);
|
2026-02-04 07:17:33 -05:00
|
|
|
}
|
|
|
|
|
|
2026-02-04 10:00:40 -05:00
|
|
|
.btn-default,
|
|
|
|
|
.btn-secondary {
|
|
|
|
|
background: var(--ots-surface-3);
|
|
|
|
|
color: var(--ots-text);
|
|
|
|
|
border-color: var(--ots-border);
|
2026-02-04 07:17:33 -05:00
|
|
|
}
|
|
|
|
|
|
2026-02-04 10:00:40 -05:00
|
|
|
.btn-default:hover,
|
|
|
|
|
.btn-secondary:hover {
|
|
|
|
|
background: var(--ots-surface-2);
|
|
|
|
|
border-color: var(--ots-primary);
|
|
|
|
|
color: var(--ots-primary);
|
2026-02-04 07:17:33 -05:00
|
|
|
}
|
|
|
|
|
|
2026-02-04 10:00:40 -05:00
|
|
|
.btn-primary {
|
|
|
|
|
background: var(--ots-primary);
|
|
|
|
|
border-color: var(--ots-primary-2);
|
|
|
|
|
color: #0b1020;
|
2026-02-04 07:17:33 -05:00
|
|
|
}
|
|
|
|
|
|
2026-02-04 10:00:40 -05:00
|
|
|
.btn-primary:hover {
|
|
|
|
|
background: var(--ots-primary-2);
|
|
|
|
|
border-color: var(--ots-primary-2);
|
|
|
|
|
color: #0b1020;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.btn-success {
|
|
|
|
|
background: var(--ots-success);
|
|
|
|
|
border-color: var(--ots-success);
|
|
|
|
|
color: #041410;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.btn-warning {
|
|
|
|
|
background: var(--ots-warning);
|
|
|
|
|
border-color: var(--ots-warning);
|
|
|
|
|
color: #1c1200;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.btn-danger {
|
|
|
|
|
background: var(--ots-danger);
|
|
|
|
|
border-color: var(--ots-danger);
|
|
|
|
|
color: #220707;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.btn-info {
|
|
|
|
|
background: var(--ots-info);
|
|
|
|
|
border-color: var(--ots-info);
|
|
|
|
|
color: #07101a;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* =============================================================================
|
|
|
|
|
FORMS
|
|
|
|
|
============================================================================= */
|
|
|
|
|
|
|
|
|
|
.form-control,
|
|
|
|
|
input[type="text"],
|
|
|
|
|
input[type="search"],
|
|
|
|
|
input[type="email"],
|
|
|
|
|
input[type="password"],
|
|
|
|
|
select,
|
|
|
|
|
textarea {
|
|
|
|
|
background: var(--ots-surface);
|
|
|
|
|
color: var(--ots-text);
|
|
|
|
|
border: 1px solid var(--ots-border);
|
|
|
|
|
border-radius: var(--ots-radius-sm);
|
|
|
|
|
box-shadow: none;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.form-control:focus,
|
|
|
|
|
input[type="text"]:focus,
|
|
|
|
|
input[type="search"]:focus,
|
|
|
|
|
input[type="email"]:focus,
|
|
|
|
|
input[type="password"]:focus,
|
|
|
|
|
select:focus,
|
|
|
|
|
textarea:focus {
|
|
|
|
|
border-color: var(--ots-primary);
|
|
|
|
|
box-shadow: 0 0 0 2px rgba(79, 140, 255, 0.2);
|
|
|
|
|
outline: none;
|
2026-02-04 07:17:33 -05:00
|
|
|
}
|
|
|
|
|
|
2026-02-04 10:00:40 -05:00
|
|
|
.input-group-addon {
|
|
|
|
|
background: var(--ots-surface-3);
|
|
|
|
|
border: 1px solid var(--ots-border);
|
|
|
|
|
color: var(--ots-text-muted);
|
2026-02-04 07:17:33 -05:00
|
|
|
}
|
|
|
|
|
|
2026-02-04 10:00:40 -05:00
|
|
|
/* =============================================================================
|
|
|
|
|
TABLES / DATATABLES
|
|
|
|
|
============================================================================= */
|
2026-02-04 07:17:33 -05:00
|
|
|
|
2026-02-04 10:00:40 -05:00
|
|
|
.table,
|
|
|
|
|
.table > thead > tr > th,
|
|
|
|
|
.table > tbody > tr > td {
|
|
|
|
|
color: var(--ots-text);
|
|
|
|
|
border-color: var(--ots-border);
|
2026-02-04 07:17:33 -05:00
|
|
|
}
|
|
|
|
|
|
2026-02-04 10:00:40 -05:00
|
|
|
.table-striped > tbody > tr:nth-of-type(odd) {
|
|
|
|
|
background: rgba(79, 140, 255, 0.04);
|
2026-02-04 07:17:33 -05:00
|
|
|
}
|
|
|
|
|
|
2026-02-04 10:00:40 -05:00
|
|
|
.table-hover > tbody > tr:hover {
|
|
|
|
|
background: rgba(79, 140, 255, 0.08);
|
2026-02-04 07:17:33 -05:00
|
|
|
}
|
|
|
|
|
|
2026-02-04 10:00:40 -05:00
|
|
|
.dataTables_wrapper .dataTables_length,
|
|
|
|
|
.dataTables_wrapper .dataTables_filter,
|
|
|
|
|
.dataTables_wrapper .dataTables_info,
|
|
|
|
|
.dataTables_wrapper .dataTables_paginate {
|
|
|
|
|
color: var(--ots-text-muted) !important;
|
2026-02-04 07:17:33 -05:00
|
|
|
}
|
|
|
|
|
|
2026-02-04 10:00:40 -05:00
|
|
|
.dataTables_wrapper .dataTables_filter input,
|
|
|
|
|
.dataTables_wrapper .dataTables_length select {
|
|
|
|
|
background: var(--ots-surface) !important;
|
|
|
|
|
color: var(--ots-text) !important;
|
|
|
|
|
border: 1px solid var(--ots-border) !important;
|
2026-02-04 07:17:33 -05:00
|
|
|
}
|
|
|
|
|
|
2026-02-04 10:00:40 -05:00
|
|
|
.dataTables_wrapper table {
|
|
|
|
|
color: var(--ots-text);
|
2026-02-04 07:17:33 -05:00
|
|
|
}
|
|
|
|
|
|
2026-02-04 10:00:40 -05:00
|
|
|
/* =============================================================================
|
|
|
|
|
DROPDOWNS / MENUS
|
|
|
|
|
============================================================================= */
|
2026-02-04 07:17:33 -05:00
|
|
|
|
2026-02-04 10:00:40 -05:00
|
|
|
.dropdown-menu {
|
|
|
|
|
background: var(--ots-surface-2);
|
|
|
|
|
border: 1px solid var(--ots-border);
|
|
|
|
|
box-shadow: var(--ots-shadow-md);
|
2026-02-04 07:17:33 -05:00
|
|
|
}
|
|
|
|
|
|
2026-02-04 10:00:40 -05:00
|
|
|
.dropdown-item,
|
|
|
|
|
.dropdown-menu > li > a {
|
|
|
|
|
color: var(--ots-text);
|
2026-02-04 07:17:33 -05:00
|
|
|
}
|
|
|
|
|
|
2026-02-04 10:00:40 -05:00
|
|
|
.dropdown-item:hover,
|
|
|
|
|
.dropdown-menu > li > a:hover {
|
|
|
|
|
background: rgba(79, 140, 255, 0.12);
|
|
|
|
|
color: var(--ots-primary);
|
2026-02-04 07:17:33 -05:00
|
|
|
}
|
|
|
|
|
|
2026-02-04 10:00:40 -05:00
|
|
|
/* =============================================================================
|
|
|
|
|
ALERTS / BADGES
|
|
|
|
|
============================================================================= */
|
2026-02-04 07:17:33 -05:00
|
|
|
|
2026-02-04 10:00:40 -05:00
|
|
|
.alert {
|
|
|
|
|
border-radius: var(--ots-radius-sm);
|
|
|
|
|
border: 1px solid var(--ots-border);
|
2026-02-04 07:17:33 -05:00
|
|
|
}
|
|
|
|
|
|
2026-02-04 10:00:40 -05:00
|
|
|
.alert-success {
|
|
|
|
|
background: rgba(42, 212, 164, 0.15);
|
|
|
|
|
color: var(--ots-success);
|
2026-02-04 07:17:33 -05:00
|
|
|
}
|
|
|
|
|
|
2026-02-04 10:00:40 -05:00
|
|
|
.alert-warning {
|
|
|
|
|
background: rgba(244, 184, 96, 0.15);
|
|
|
|
|
color: var(--ots-warning);
|
2026-02-04 07:17:33 -05:00
|
|
|
}
|
|
|
|
|
|
2026-02-04 10:00:40 -05:00
|
|
|
.alert-danger {
|
|
|
|
|
background: rgba(255, 107, 107, 0.15);
|
|
|
|
|
color: var(--ots-danger);
|
2026-02-04 07:17:33 -05:00
|
|
|
}
|
|
|
|
|
|
2026-02-04 10:00:40 -05:00
|
|
|
.alert-info {
|
|
|
|
|
background: rgba(94, 192, 255, 0.15);
|
|
|
|
|
color: var(--ots-info);
|
2026-02-04 07:17:33 -05:00
|
|
|
}
|
|
|
|
|
|
2026-02-04 10:00:40 -05:00
|
|
|
.badge,
|
|
|
|
|
.label {
|
|
|
|
|
background: var(--ots-surface-3);
|
|
|
|
|
color: var(--ots-text);
|
|
|
|
|
border: 1px solid var(--ots-border);
|
2026-02-04 07:17:33 -05:00
|
|
|
}
|
|
|
|
|
|
2026-02-04 10:00:40 -05:00
|
|
|
/* =============================================================================
|
|
|
|
|
TABS / PAGINATION
|
|
|
|
|
============================================================================= */
|
2026-02-04 07:17:33 -05:00
|
|
|
|
2026-02-04 10:00:40 -05:00
|
|
|
.nav-tabs {
|
|
|
|
|
border-bottom: 1px solid var(--ots-border);
|
2026-02-04 07:17:33 -05:00
|
|
|
}
|
|
|
|
|
|
2026-02-04 10:00:40 -05:00
|
|
|
.nav-tabs > li > a {
|
|
|
|
|
color: var(--ots-text-muted);
|
|
|
|
|
border: 1px solid transparent;
|
2026-02-04 07:17:33 -05:00
|
|
|
}
|
|
|
|
|
|
2026-02-04 10:00:40 -05:00
|
|
|
.nav-tabs > li.active > a,
|
|
|
|
|
.nav-tabs > li.active > a:focus,
|
|
|
|
|
.nav-tabs > li.active > a:hover {
|
|
|
|
|
background: var(--ots-surface-2);
|
|
|
|
|
color: var(--ots-text);
|
|
|
|
|
border: 1px solid var(--ots-border);
|
|
|
|
|
border-bottom-color: transparent;
|
2026-02-04 07:17:33 -05:00
|
|
|
}
|
|
|
|
|
|
2026-02-04 10:00:40 -05:00
|
|
|
.pagination > li > a,
|
|
|
|
|
.pagination > li > span {
|
|
|
|
|
background: var(--ots-surface-2);
|
|
|
|
|
border: 1px solid var(--ots-border);
|
|
|
|
|
color: var(--ots-text);
|
2026-02-04 07:17:33 -05:00
|
|
|
}
|
|
|
|
|
|
2026-02-04 10:00:40 -05:00
|
|
|
.pagination > li > a:hover,
|
|
|
|
|
.pagination > li > span:hover {
|
|
|
|
|
background: var(--ots-surface-3);
|
|
|
|
|
color: var(--ots-primary);
|
2026-02-04 07:17:33 -05:00
|
|
|
}
|
|
|
|
|
|
2026-02-04 10:00:40 -05:00
|
|
|
.pagination > .active > a,
|
|
|
|
|
.pagination > .active > span {
|
|
|
|
|
background: var(--ots-primary);
|
|
|
|
|
border-color: var(--ots-primary-2);
|
|
|
|
|
color: #0b1020;
|
2026-02-04 07:17:33 -05:00
|
|
|
}
|
|
|
|
|
|
2026-02-04 10:00:40 -05:00
|
|
|
/* =============================================================================
|
|
|
|
|
MODALS
|
|
|
|
|
============================================================================= */
|
2026-02-04 07:17:33 -05:00
|
|
|
|
2026-02-09 18:47:14 -05:00
|
|
|
/* --- Content wrapper --- */
|
2026-02-04 10:00:40 -05:00
|
|
|
.modal-content {
|
|
|
|
|
border-radius: var(--ots-radius-lg);
|
2026-02-09 18:47:14 -05:00
|
|
|
background-color: var(--modal-bg, var(--ots-surface)) !important;
|
|
|
|
|
color: var(--modal-body-text, var(--ots-text)) !important;
|
|
|
|
|
border: 1px solid var(--modal-border, var(--ots-border)) !important;
|
|
|
|
|
box-shadow: var(--modal-shadow, var(--ots-shadow-lg)) !important;
|
|
|
|
|
overflow: hidden;
|
2026-02-04 15:26:44 -05:00
|
|
|
}
|
|
|
|
|
|
2026-02-09 18:47:14 -05:00
|
|
|
/* --- Transparent parents --- */
|
2026-02-04 15:26:44 -05:00
|
|
|
.modal,
|
|
|
|
|
.modal-header,
|
|
|
|
|
.modal-body,
|
|
|
|
|
.modal-footer {
|
2026-02-09 18:47:14 -05:00
|
|
|
color: var(--modal-body-text, var(--ots-text)) !important;
|
2026-02-04 15:26:44 -05:00
|
|
|
}
|
|
|
|
|
|
2026-02-09 18:47:14 -05:00
|
|
|
/* --- Header --- */
|
|
|
|
|
.modal-header {
|
|
|
|
|
background-color: var(--modal-header-bg, var(--ots-surface)) !important;
|
|
|
|
|
border-bottom: 1px solid var(--modal-header-border, var(--ots-border)) !important;
|
|
|
|
|
padding: 16px 20px !important;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.modal-title,
|
|
|
|
|
.modal-header h4,
|
|
|
|
|
.modal-header h5 {
|
|
|
|
|
color: var(--modal-header-text, var(--ots-text)) !important;
|
|
|
|
|
font-weight: 600;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* --- Body --- */
|
|
|
|
|
.modal-body {
|
|
|
|
|
background-color: var(--modal-body-bg, var(--ots-surface)) !important;
|
|
|
|
|
color: var(--modal-body-text, var(--ots-text)) !important;
|
|
|
|
|
padding: 20px !important;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* --- Backdrop --- */
|
2026-02-04 15:26:44 -05:00
|
|
|
.modal-backdrop,
|
|
|
|
|
.modal-backdrop.show,
|
|
|
|
|
.modal-backdrop.in {
|
2026-02-09 18:47:14 -05:00
|
|
|
background-color: var(--modal-backdrop-bg, rgba(0, 0, 0, 0.3)) !important;
|
|
|
|
|
backdrop-filter: blur(var(--modal-backdrop-blur, 4px)) !important;
|
|
|
|
|
-webkit-backdrop-filter: blur(var(--modal-backdrop-blur, 4px)) !important;
|
2026-02-04 15:26:44 -05:00
|
|
|
opacity: 1 !important;
|
2026-02-04 07:17:33 -05:00
|
|
|
}
|
|
|
|
|
|
2026-02-09 18:47:14 -05:00
|
|
|
/* --- Footer --- */
|
2026-02-04 10:00:40 -05:00
|
|
|
.modal-footer {
|
2026-02-09 18:47:14 -05:00
|
|
|
background-color: var(--modal-footer-bg, transparent) !important;
|
|
|
|
|
border-top: 1px solid var(--modal-footer-border, var(--ots-border)) !important;
|
|
|
|
|
padding: 12px 20px !important;
|
2026-02-04 07:17:33 -05:00
|
|
|
}
|
|
|
|
|
|
2026-02-09 18:47:14 -05:00
|
|
|
/* Footer buttons — secondary / cancel */
|
2026-02-06 23:57:16 -05:00
|
|
|
.modal-footer .btn,
|
|
|
|
|
.modal-footer button {
|
2026-02-09 18:47:14 -05:00
|
|
|
background: var(--modal-body-bg, var(--ots-surface-3)) !important;
|
|
|
|
|
color: var(--modal-body-text, var(--ots-text)) !important;
|
|
|
|
|
border: 1px solid var(--modal-border, var(--ots-border)) !important;
|
2026-02-06 23:57:16 -05:00
|
|
|
box-shadow: none !important;
|
2026-02-09 18:47:14 -05:00
|
|
|
border-radius: var(--ots-radius-sm) !important;
|
|
|
|
|
transition: background var(--ots-transition),
|
|
|
|
|
color var(--ots-transition),
|
|
|
|
|
border-color var(--ots-transition);
|
2026-02-06 23:57:16 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.modal-footer .btn:hover,
|
|
|
|
|
.modal-footer button:hover {
|
2026-02-09 18:47:14 -05:00
|
|
|
background: rgba(79, 140, 255, 0.08) !important;
|
2026-02-06 23:57:16 -05:00
|
|
|
color: var(--ots-primary) !important;
|
|
|
|
|
border-color: var(--ots-primary) !important;
|
|
|
|
|
}
|
|
|
|
|
|
2026-02-09 18:47:14 -05:00
|
|
|
/* Footer buttons — primary / submit */
|
2026-02-06 23:57:16 -05:00
|
|
|
.modal-footer .btn.btn-primary,
|
|
|
|
|
.modal-footer button.btn-primary {
|
|
|
|
|
background: var(--ots-primary) !important;
|
|
|
|
|
color: #0b1020 !important;
|
|
|
|
|
border-color: var(--ots-primary-2) !important;
|
2026-02-09 18:47:14 -05:00
|
|
|
font-weight: 600;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.modal-footer .btn.btn-primary:hover,
|
|
|
|
|
.modal-footer button.btn-primary:hover {
|
|
|
|
|
background: var(--ots-primary-2) !important;
|
|
|
|
|
color: #ffffff !important;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Footer buttons — danger */
|
|
|
|
|
.modal-footer .btn.btn-danger {
|
|
|
|
|
background: var(--ots-danger) !important;
|
|
|
|
|
color: #ffffff !important;
|
|
|
|
|
border-color: var(--ots-danger) !important;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* --- Form controls inside modals --- */
|
|
|
|
|
.modal-body .form-control,
|
|
|
|
|
.modal-body input[type="text"],
|
|
|
|
|
.modal-body input[type="number"],
|
|
|
|
|
.modal-body input[type="email"],
|
|
|
|
|
.modal-body input[type="password"],
|
|
|
|
|
.modal-body textarea,
|
|
|
|
|
.modal-body select {
|
|
|
|
|
background-color: var(--modal-input-bg, var(--ots-bg)) !important;
|
|
|
|
|
border: 1px solid var(--modal-input-border, var(--ots-border)) !important;
|
|
|
|
|
border-radius: var(--ots-radius-sm) !important;
|
|
|
|
|
color: var(--modal-input-text, var(--ots-text)) !important;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.modal-body .form-control:focus,
|
|
|
|
|
.modal-body input:focus,
|
|
|
|
|
.modal-body textarea:focus,
|
|
|
|
|
.modal-body select:focus {
|
|
|
|
|
border-color: var(--modal-input-focus-border, var(--ots-primary)) !important;
|
|
|
|
|
box-shadow: 0 0 0 3px var(--modal-input-focus-ring, rgba(79, 140, 255, 0.2)) !important;
|
|
|
|
|
outline: none !important;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* --- Close button --- */
|
|
|
|
|
.modal-header .close,
|
|
|
|
|
.modal-header [data-dismiss="modal"] {
|
|
|
|
|
color: var(--modal-close-color, var(--ots-text-muted)) !important;
|
|
|
|
|
opacity: 1 !important;
|
|
|
|
|
text-shadow: none !important;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.modal-header .close:hover,
|
|
|
|
|
.modal-header [data-dismiss="modal"]:hover {
|
|
|
|
|
color: var(--modal-close-hover, var(--ots-text)) !important;
|
2026-02-06 23:57:16 -05:00
|
|
|
}
|
|
|
|
|
|
2026-02-04 10:00:40 -05:00
|
|
|
/* =============================================================================
|
|
|
|
|
HELP PANE / MISC
|
|
|
|
|
============================================================================= */
|
2026-02-04 07:17:33 -05:00
|
|
|
|
2026-02-04 10:00:40 -05:00
|
|
|
#help-pane {
|
|
|
|
|
background: var(--ots-surface-2);
|
|
|
|
|
border: 1px solid var(--ots-border);
|
2026-02-04 07:17:33 -05:00
|
|
|
}
|
|
|
|
|
|
2026-02-04 10:00:40 -05:00
|
|
|
#help-pane .help-pane-btn {
|
|
|
|
|
background: var(--ots-primary);
|
|
|
|
|
color: #0b1020;
|
2026-02-04 07:17:33 -05:00
|
|
|
}
|
|
|
|
|
|
2026-02-04 10:00:40 -05:00
|
|
|
/* =============================================================================
|
|
|
|
|
OTS DASHBOARD MESSAGE
|
|
|
|
|
============================================================================= */
|
2026-02-04 07:17:33 -05:00
|
|
|
|
2026-02-04 10:00:40 -05:00
|
|
|
.ots-dashboard-message {
|
|
|
|
|
margin: 16px 0 24px;
|
|
|
|
|
padding: 12px 16px;
|
|
|
|
|
border-radius: var(--ots-radius-md);
|
|
|
|
|
background: rgba(79, 140, 255, 0.16);
|
|
|
|
|
border: 1px solid rgba(79, 140, 255, 0.45);
|
|
|
|
|
color: var(--ots-text);
|
2026-02-04 07:17:33 -05:00
|
|
|
}
|
|
|
|
|
|
2026-02-04 10:00:40 -05:00
|
|
|
.ots-dashboard-message__title {
|
|
|
|
|
font-weight: 700;
|
|
|
|
|
letter-spacing: 0.02em;
|
|
|
|
|
text-transform: uppercase;
|
2026-02-04 07:17:33 -05:00
|
|
|
font-size: 12px;
|
2026-02-04 10:00:40 -05:00
|
|
|
margin-bottom: 4px;
|
2026-02-04 07:17:33 -05:00
|
|
|
}
|
|
|
|
|
|
2026-02-04 10:00:40 -05:00
|
|
|
.ots-dashboard-message__body {
|
|
|
|
|
font-size: 13px;
|
|
|
|
|
color: var(--ots-text-muted);
|
2026-02-04 07:17:33 -05:00
|
|
|
}
|
2026-02-06 23:57:16 -05:00
|
|
|
|
|
|
|
|
/* =============================================================================
|
|
|
|
|
LOGIN / SIGN-IN PAGE
|
|
|
|
|
Styles to match the requested sign-in card: centered panel, dark glass
|
|
|
|
|
surface, orange accent, soft shadow and modern inputs.
|
|
|
|
|
============================================================================= */
|
|
|
|
|
|
|
|
|
|
:root {
|
|
|
|
|
--login-accent: #ff8a00;
|
|
|
|
|
--login-panel-bg: linear-gradient(180deg, rgba(8,12,20,0.9), rgba(10,16,28,0.85));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
body.login, body.login-page, .xibo-login, #login, .login-wrapper {
|
|
|
|
|
min-height: 100vh;
|
|
|
|
|
display: flex;
|
|
|
|
|
align-items: center;
|
|
|
|
|
justify-content: center;
|
|
|
|
|
padding: 40px 20px;
|
|
|
|
|
background-image: radial-gradient(rgba(255,255,255,0.02) 1px, transparent 1px),
|
|
|
|
|
linear-gradient(135deg, rgba(6,16,30,0.6), rgba(8,12,24,0.65));
|
|
|
|
|
background-size: 48px 48px, cover;
|
|
|
|
|
}
|
|
|
|
|
|
Refactor toolbar buttons across various pages to unify styling
- Updated button classes for consistency in the playersoftware-page, playlist-page, resolution-page, schedule-page, settings-page, syncgroup-page, tag-page, task-page, template-page, transition-page, user-page, and usergroup-page.
- Removed unnecessary text from button titles and ensured all buttons have the 'ots-toolbar-btn' class for uniformity.
- Cleaned up the code by removing commented-out sections and ensuring proper indentation.
2026-02-07 14:50:40 -05:00
|
|
|
body.login-page .container {
|
|
|
|
|
width: 100%;
|
|
|
|
|
display: flex;
|
|
|
|
|
flex-direction: column;
|
|
|
|
|
align-items: center;
|
|
|
|
|
justify-content: center;
|
|
|
|
|
gap: 16px;
|
|
|
|
|
}
|
|
|
|
|
|
2026-02-06 23:57:16 -05:00
|
|
|
.login-card,
|
|
|
|
|
.login-panel,
|
|
|
|
|
.auth-card,
|
|
|
|
|
.xibo-login-box,
|
|
|
|
|
#login-box {
|
|
|
|
|
width: 100%;
|
Refactor toolbar buttons across various pages to unify styling
- Updated button classes for consistency in the playersoftware-page, playlist-page, resolution-page, schedule-page, settings-page, syncgroup-page, tag-page, task-page, template-page, transition-page, user-page, and usergroup-page.
- Removed unnecessary text from button titles and ensured all buttons have the 'ots-toolbar-btn' class for uniformity.
- Cleaned up the code by removing commented-out sections and ensuring proper indentation.
2026-02-07 14:50:40 -05:00
|
|
|
max-width: 520px;
|
|
|
|
|
border-radius: 16px;
|
|
|
|
|
padding: 36px 40px 34px;
|
|
|
|
|
background: linear-gradient(180deg, rgba(7,12,22,0.92), rgba(10,16,30,0.9));
|
|
|
|
|
border: 1px solid rgba(255,255,255,0.08);
|
|
|
|
|
box-shadow: 0 28px 70px rgba(2, 6, 23, 0.55);
|
2026-02-06 23:57:16 -05:00
|
|
|
color: var(--ots-text);
|
Refactor toolbar buttons across various pages to unify styling
- Updated button classes for consistency in the playersoftware-page, playlist-page, resolution-page, schedule-page, settings-page, syncgroup-page, tag-page, task-page, template-page, transition-page, user-page, and usergroup-page.
- Removed unnecessary text from button titles and ensured all buttons have the 'ots-toolbar-btn' class for uniformity.
- Cleaned up the code by removing commented-out sections and ensuring proper indentation.
2026-02-07 14:50:40 -05:00
|
|
|
backdrop-filter: blur(14px);
|
2026-02-06 23:57:16 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.login-card .login-logo,
|
|
|
|
|
.login-panel .login-logo {
|
|
|
|
|
display: flex;
|
|
|
|
|
align-items: center;
|
|
|
|
|
justify-content: center;
|
|
|
|
|
margin-bottom: 18px;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.login-card .login-logo .logo-icon,
|
|
|
|
|
.login-panel .login-logo .logo-icon {
|
|
|
|
|
width: 92px;
|
|
|
|
|
height: 92px;
|
|
|
|
|
border-radius: 10px;
|
|
|
|
|
background: var(--login-accent);
|
|
|
|
|
display: inline-flex;
|
|
|
|
|
align-items: center;
|
|
|
|
|
justify-content: center;
|
|
|
|
|
box-shadow: 0 6px 18px rgba(0,0,0,0.45);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Brand text next to logo on login */
|
|
|
|
|
.login-brand {
|
|
|
|
|
display: flex;
|
Refactor toolbar buttons across various pages to unify styling
- Updated button classes for consistency in the playersoftware-page, playlist-page, resolution-page, schedule-page, settings-page, syncgroup-page, tag-page, task-page, template-page, transition-page, user-page, and usergroup-page.
- Removed unnecessary text from button titles and ensured all buttons have the 'ots-toolbar-btn' class for uniformity.
- Cleaned up the code by removing commented-out sections and ensuring proper indentation.
2026-02-07 14:50:40 -05:00
|
|
|
flex-direction: column;
|
2026-02-06 23:57:16 -05:00
|
|
|
align-items: center;
|
|
|
|
|
justify-content: center;
|
Refactor toolbar buttons across various pages to unify styling
- Updated button classes for consistency in the playersoftware-page, playlist-page, resolution-page, schedule-page, settings-page, syncgroup-page, tag-page, task-page, template-page, transition-page, user-page, and usergroup-page.
- Removed unnecessary text from button titles and ensured all buttons have the 'ots-toolbar-btn' class for uniformity.
- Cleaned up the code by removing commented-out sections and ensuring proper indentation.
2026-02-07 14:50:40 -05:00
|
|
|
gap: 10px;
|
2026-02-06 23:57:16 -05:00
|
|
|
margin-bottom: 18px;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.login-brand .login-logo {
|
Refactor toolbar buttons across various pages to unify styling
- Updated button classes for consistency in the playersoftware-page, playlist-page, resolution-page, schedule-page, settings-page, syncgroup-page, tag-page, task-page, template-page, transition-page, user-page, and usergroup-page.
- Removed unnecessary text from button titles and ensured all buttons have the 'ots-toolbar-btn' class for uniformity.
- Cleaned up the code by removing commented-out sections and ensuring proper indentation.
2026-02-07 14:50:40 -05:00
|
|
|
width: 72px;
|
|
|
|
|
height: 72px;
|
2026-02-06 23:57:16 -05:00
|
|
|
display: inline-block;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.login-brand-text {
|
|
|
|
|
color: var(--ots-text);
|
Refactor toolbar buttons across various pages to unify styling
- Updated button classes for consistency in the playersoftware-page, playlist-page, resolution-page, schedule-page, settings-page, syncgroup-page, tag-page, task-page, template-page, transition-page, user-page, and usergroup-page.
- Removed unnecessary text from button titles and ensured all buttons have the 'ots-toolbar-btn' class for uniformity.
- Cleaned up the code by removing commented-out sections and ensuring proper indentation.
2026-02-07 14:50:40 -05:00
|
|
|
font-size: 1.2rem;
|
|
|
|
|
font-weight: 600;
|
|
|
|
|
letter-spacing: 0.02em;
|
2026-02-06 23:57:16 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.login-card h1,
|
|
|
|
|
.login-panel h1 {
|
|
|
|
|
text-align: center;
|
|
|
|
|
margin: 8px 0 6px 0;
|
|
|
|
|
font-size: 28px;
|
|
|
|
|
font-weight: 700;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.login-card .lead,
|
|
|
|
|
.login-panel .lead {
|
|
|
|
|
text-align: center;
|
Refactor toolbar buttons across various pages to unify styling
- Updated button classes for consistency in the playersoftware-page, playlist-page, resolution-page, schedule-page, settings-page, syncgroup-page, tag-page, task-page, template-page, transition-page, user-page, and usergroup-page.
- Removed unnecessary text from button titles and ensured all buttons have the 'ots-toolbar-btn' class for uniformity.
- Cleaned up the code by removing commented-out sections and ensuring proper indentation.
2026-02-07 14:50:40 -05:00
|
|
|
color: rgba(226,232,240,0.74);
|
2026-02-06 23:57:16 -05:00
|
|
|
margin-bottom: 18px;
|
Refactor toolbar buttons across various pages to unify styling
- Updated button classes for consistency in the playersoftware-page, playlist-page, resolution-page, schedule-page, settings-page, syncgroup-page, tag-page, task-page, template-page, transition-page, user-page, and usergroup-page.
- Removed unnecessary text from button titles and ensured all buttons have the 'ots-toolbar-btn' class for uniformity.
- Cleaned up the code by removing commented-out sections and ensuring proper indentation.
2026-02-07 14:50:40 -05:00
|
|
|
font-size: 0.95rem;
|
2026-02-06 23:57:16 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.login-card .form-group,
|
|
|
|
|
.login-panel .form-group {
|
|
|
|
|
margin-bottom: 14px;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.login-card input[type="text"],
|
|
|
|
|
.login-card input[type="email"],
|
|
|
|
|
.login-card input[type="password"],
|
|
|
|
|
.login-card .form-control,
|
|
|
|
|
.login-panel input[type="text"],
|
|
|
|
|
.login-panel input[type="email"],
|
|
|
|
|
.login-panel input[type="password"] {
|
|
|
|
|
width: 100%;
|
Refactor toolbar buttons across various pages to unify styling
- Updated button classes for consistency in the playersoftware-page, playlist-page, resolution-page, schedule-page, settings-page, syncgroup-page, tag-page, task-page, template-page, transition-page, user-page, and usergroup-page.
- Removed unnecessary text from button titles and ensured all buttons have the 'ots-toolbar-btn' class for uniformity.
- Cleaned up the code by removing commented-out sections and ensuring proper indentation.
2026-02-07 14:50:40 -05:00
|
|
|
background: rgba(11, 18, 33, 0.65);
|
|
|
|
|
border: 1px solid rgba(148, 163, 184, 0.18);
|
2026-02-06 23:57:16 -05:00
|
|
|
color: var(--ots-text);
|
Refactor toolbar buttons across various pages to unify styling
- Updated button classes for consistency in the playersoftware-page, playlist-page, resolution-page, schedule-page, settings-page, syncgroup-page, tag-page, task-page, template-page, transition-page, user-page, and usergroup-page.
- Removed unnecessary text from button titles and ensured all buttons have the 'ots-toolbar-btn' class for uniformity.
- Cleaned up the code by removing commented-out sections and ensuring proper indentation.
2026-02-07 14:50:40 -05:00
|
|
|
padding: 12px 14px;
|
|
|
|
|
border-radius: 10px;
|
|
|
|
|
font-size: 0.98rem;
|
2026-02-06 23:57:16 -05:00
|
|
|
line-height: 1.25;
|
|
|
|
|
transition: border-color 180ms ease, box-shadow 180ms ease, background 180ms ease;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.login-card input:focus,
|
|
|
|
|
.login-panel input:focus,
|
|
|
|
|
.login-card .form-control:focus {
|
|
|
|
|
outline: none;
|
Refactor toolbar buttons across various pages to unify styling
- Updated button classes for consistency in the playersoftware-page, playlist-page, resolution-page, schedule-page, settings-page, syncgroup-page, tag-page, task-page, template-page, transition-page, user-page, and usergroup-page.
- Removed unnecessary text from button titles and ensured all buttons have the 'ots-toolbar-btn' class for uniformity.
- Cleaned up the code by removing commented-out sections and ensuring proper indentation.
2026-02-07 14:50:40 -05:00
|
|
|
border-color: rgba(255,138,0,0.85);
|
|
|
|
|
background: rgba(11, 18, 33, 0.75);
|
|
|
|
|
box-shadow: 0 10px 26px rgba(0,0,0,0.38), 0 0 0 5px rgba(255,138,0,0.08);
|
2026-02-06 23:57:16 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.login-card input::placeholder,
|
|
|
|
|
.login-panel input::placeholder {
|
|
|
|
|
color: rgba(255,255,255,0.58);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.login-card input + input,
|
|
|
|
|
.login-card input + .form-control,
|
|
|
|
|
.login-panel input + input {
|
|
|
|
|
margin-top: 10px;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.login-card .form-control[disabled],
|
|
|
|
|
.login-card input[disabled] {
|
|
|
|
|
opacity: 0.7;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.login-card .btn-signin,
|
|
|
|
|
.login-panel .btn-signin,
|
|
|
|
|
.login-card .btn-primary.login,
|
|
|
|
|
.login-panel .btn-primary.login {
|
|
|
|
|
display: inline-flex;
|
|
|
|
|
align-items: center;
|
|
|
|
|
justify-content: center;
|
|
|
|
|
gap: 8px;
|
|
|
|
|
width: 100%;
|
|
|
|
|
padding: 10px 14px;
|
Refactor toolbar buttons across various pages to unify styling
- Updated button classes for consistency in the playersoftware-page, playlist-page, resolution-page, schedule-page, settings-page, syncgroup-page, tag-page, task-page, template-page, transition-page, user-page, and usergroup-page.
- Removed unnecessary text from button titles and ensured all buttons have the 'ots-toolbar-btn' class for uniformity.
- Cleaned up the code by removing commented-out sections and ensuring proper indentation.
2026-02-07 14:50:40 -05:00
|
|
|
background: #f8fafc;
|
|
|
|
|
color: #0b1221 !important;
|
2026-02-06 23:57:16 -05:00
|
|
|
border-radius: 10px;
|
Refactor toolbar buttons across various pages to unify styling
- Updated button classes for consistency in the playersoftware-page, playlist-page, resolution-page, schedule-page, settings-page, syncgroup-page, tag-page, task-page, template-page, transition-page, user-page, and usergroup-page.
- Removed unnecessary text from button titles and ensured all buttons have the 'ots-toolbar-btn' class for uniformity.
- Cleaned up the code by removing commented-out sections and ensuring proper indentation.
2026-02-07 14:50:40 -05:00
|
|
|
border: 1px solid rgba(255,255,255,0.8);
|
2026-02-06 23:57:16 -05:00
|
|
|
font-weight: 600;
|
Refactor toolbar buttons across various pages to unify styling
- Updated button classes for consistency in the playersoftware-page, playlist-page, resolution-page, schedule-page, settings-page, syncgroup-page, tag-page, task-page, template-page, transition-page, user-page, and usergroup-page.
- Removed unnecessary text from button titles and ensured all buttons have the 'ots-toolbar-btn' class for uniformity.
- Cleaned up the code by removing commented-out sections and ensuring proper indentation.
2026-02-07 14:50:40 -05:00
|
|
|
box-shadow: 0 10px 22px rgba(2,6,23,0.35);
|
|
|
|
|
transition: background 160ms ease, border-color 160ms ease, color 160ms ease, box-shadow 160ms ease, transform 160ms ease;
|
2026-02-06 23:57:16 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.login-card .btn-signin .icon,
|
|
|
|
|
.login-panel .btn-signin .icon {
|
|
|
|
|
display: inline-flex;
|
|
|
|
|
align-items: center;
|
|
|
|
|
justify-content: center;
|
|
|
|
|
width: 18px;
|
|
|
|
|
height: 18px;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.login-card .btn-signin:hover,
|
|
|
|
|
.login-panel .btn-signin:hover {
|
Refactor toolbar buttons across various pages to unify styling
- Updated button classes for consistency in the playersoftware-page, playlist-page, resolution-page, schedule-page, settings-page, syncgroup-page, tag-page, task-page, template-page, transition-page, user-page, and usergroup-page.
- Removed unnecessary text from button titles and ensured all buttons have the 'ots-toolbar-btn' class for uniformity.
- Cleaned up the code by removing commented-out sections and ensuring proper indentation.
2026-02-07 14:50:40 -05:00
|
|
|
background: #ffffff;
|
|
|
|
|
border-color: rgba(255,255,255,0.95);
|
|
|
|
|
transform: translateY(-1px);
|
2026-02-06 23:57:16 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.login-card .btn-signin:focus,
|
|
|
|
|
.login-panel .btn-signin:focus {
|
|
|
|
|
outline: none;
|
Refactor toolbar buttons across various pages to unify styling
- Updated button classes for consistency in the playersoftware-page, playlist-page, resolution-page, schedule-page, settings-page, syncgroup-page, tag-page, task-page, template-page, transition-page, user-page, and usergroup-page.
- Removed unnecessary text from button titles and ensured all buttons have the 'ots-toolbar-btn' class for uniformity.
- Cleaned up the code by removing commented-out sections and ensuring proper indentation.
2026-02-07 14:50:40 -05:00
|
|
|
box-shadow: 0 10px 24px rgba(0,0,0,0.32), 0 0 0 5px rgba(255,138,0,0.18);
|
|
|
|
|
border-color: rgba(255,138,0,0.45);
|
2026-02-06 23:57:16 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.login-card .forgot-link,
|
|
|
|
|
.login-panel .forgot-link {
|
|
|
|
|
display: block;
|
|
|
|
|
text-align: right;
|
|
|
|
|
margin-top: 8px;
|
|
|
|
|
color: var(--ots-text-muted);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Small screens: compress card padding */
|
|
|
|
|
@media (max-width: 520px) {
|
Refactor toolbar buttons across various pages to unify styling
- Updated button classes for consistency in the playersoftware-page, playlist-page, resolution-page, schedule-page, settings-page, syncgroup-page, tag-page, task-page, template-page, transition-page, user-page, and usergroup-page.
- Removed unnecessary text from button titles and ensured all buttons have the 'ots-toolbar-btn' class for uniformity.
- Cleaned up the code by removing commented-out sections and ensuring proper indentation.
2026-02-07 14:50:40 -05:00
|
|
|
.login-card, .login-panel { padding: 24px; border-radius: 12px; }
|
2026-02-06 23:57:16 -05:00
|
|
|
.login-card .login-logo .logo-icon { width: 72px; height: 72px; }
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Animated background for login page: subtle moving gradient behind the card */
|
|
|
|
|
body.login-page::before {
|
|
|
|
|
content: "";
|
|
|
|
|
position: fixed;
|
|
|
|
|
inset: 0;
|
|
|
|
|
z-index: 0;
|
|
|
|
|
background: linear-gradient(120deg, rgba(14,28,45,0.6), rgba(6,16,30,0.55)),
|
|
|
|
|
radial-gradient( circle at 10% 20%, rgba(79,140,255,0.06), transparent 10% ),
|
|
|
|
|
radial-gradient( circle at 85% 80%, rgba(255,138,0,0.04), transparent 12% );
|
|
|
|
|
background-blend-mode: overlay, normal, normal;
|
|
|
|
|
background-size: 200% 200%, 100% 100%, 100% 100%;
|
|
|
|
|
filter: blur(22px);
|
|
|
|
|
pointer-events: none;
|
|
|
|
|
opacity: 0.95;
|
|
|
|
|
/* no animation here - blobs will provide the motion */
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@keyframes ots-login-bg-shift {
|
|
|
|
|
0% { background-position: 0% 50%, 0% 0%, 0% 0%; }
|
|
|
|
|
50% { background-position: 100% 50%, 0% 0%, 0% 0%; }
|
|
|
|
|
100% { background-position: 0% 50%, 0% 0%, 0% 0%; }
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Bring the login card above the animated background */
|
|
|
|
|
.login-card,
|
|
|
|
|
.login-panel,
|
|
|
|
|
.auth-card,
|
|
|
|
|
.xibo-login-box,
|
|
|
|
|
#login-box {
|
|
|
|
|
position: relative;
|
|
|
|
|
z-index: 2;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Blurred animated color blobs behind the login card */
|
|
|
|
|
.ots-login-blob {
|
|
|
|
|
position: fixed;
|
|
|
|
|
pointer-events: none;
|
|
|
|
|
filter: blur(60px) saturate(120%);
|
|
|
|
|
opacity: 0.9;
|
|
|
|
|
mix-blend-mode: screen;
|
|
|
|
|
z-index: 0;
|
|
|
|
|
will-change: transform, opacity;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.ots-login-blob--1 {
|
|
|
|
|
width: 520px;
|
|
|
|
|
height: 520px;
|
|
|
|
|
left: -8%;
|
|
|
|
|
top: -6%;
|
|
|
|
|
background: radial-gradient(circle at 30% 30%, rgba(79,140,255,0.65), rgba(79,140,255,0.18) 35%, transparent 50%);
|
Refactor toolbar buttons across various pages to unify styling
- Updated button classes for consistency in the playersoftware-page, playlist-page, resolution-page, schedule-page, settings-page, syncgroup-page, tag-page, task-page, template-page, transition-page, user-page, and usergroup-page.
- Removed unnecessary text from button titles and ensured all buttons have the 'ots-toolbar-btn' class for uniformity.
- Cleaned up the code by removing commented-out sections and ensuring proper indentation.
2026-02-07 14:50:40 -05:00
|
|
|
animation: ots-blob-move-1 16s ease-in-out infinite alternate !important;
|
2026-02-06 23:57:16 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.ots-login-blob--2 {
|
|
|
|
|
width: 420px;
|
|
|
|
|
height: 420px;
|
|
|
|
|
right: 6%;
|
|
|
|
|
bottom: 18%;
|
|
|
|
|
background: radial-gradient(circle at 60% 40%, rgba(255,138,0,0.45), rgba(255,138,0,0.14) 36%, transparent 55%);
|
Refactor toolbar buttons across various pages to unify styling
- Updated button classes for consistency in the playersoftware-page, playlist-page, resolution-page, schedule-page, settings-page, syncgroup-page, tag-page, task-page, template-page, transition-page, user-page, and usergroup-page.
- Removed unnecessary text from button titles and ensured all buttons have the 'ots-toolbar-btn' class for uniformity.
- Cleaned up the code by removing commented-out sections and ensuring proper indentation.
2026-02-07 14:50:40 -05:00
|
|
|
animation: ots-blob-move-2 20s ease-in-out infinite alternate !important;
|
2026-02-06 23:57:16 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.ots-login-blob--3 {
|
|
|
|
|
width: 360px;
|
|
|
|
|
height: 360px;
|
|
|
|
|
left: 18%;
|
|
|
|
|
bottom: -4%;
|
|
|
|
|
background: radial-gradient(circle at 40% 60%, rgba(94,200,255,0.28), rgba(94,200,255,0.08) 40%, transparent 60%);
|
Refactor toolbar buttons across various pages to unify styling
- Updated button classes for consistency in the playersoftware-page, playlist-page, resolution-page, schedule-page, settings-page, syncgroup-page, tag-page, task-page, template-page, transition-page, user-page, and usergroup-page.
- Removed unnecessary text from button titles and ensured all buttons have the 'ots-toolbar-btn' class for uniformity.
- Cleaned up the code by removing commented-out sections and ensuring proper indentation.
2026-02-07 14:50:40 -05:00
|
|
|
animation: ots-blob-move-3 18s ease-in-out infinite alternate !important;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.ots-login-bg {
|
|
|
|
|
animation-duration: 10s !important;
|
2026-02-06 23:57:16 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Disable other animations/transitions on the login page so only blobs animate */
|
|
|
|
|
body.login-page *,
|
|
|
|
|
body.login-page *::before,
|
|
|
|
|
body.login-page *::after {
|
|
|
|
|
animation: none !important;
|
|
|
|
|
transition: none !important;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Re-enable blob animations specifically (higher specificity) */
|
|
|
|
|
.ots-login-blob,
|
|
|
|
|
.ots-login-blob--1,
|
|
|
|
|
.ots-login-blob--2,
|
|
|
|
|
.ots-login-blob--3 {
|
|
|
|
|
animation-play-state: running !important;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@keyframes ots-blob-move-1 {
|
|
|
|
|
0% { transform: translate3d(0,0,0) scale(1); opacity: 0.85; }
|
|
|
|
|
100% { transform: translate3d(18px,26px,0) scale(1.06); opacity: 0.7; }
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@keyframes ots-blob-move-2 {
|
|
|
|
|
0% { transform: translate3d(0,0,0) scale(1); opacity: 0.65; }
|
|
|
|
|
100% { transform: translate3d(-28px,-18px,0) scale(1.08); opacity: 0.55; }
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@keyframes ots-blob-move-3 {
|
|
|
|
|
0% { transform: translate3d(0,0,0) scale(1); opacity: 0.6; }
|
|
|
|
|
100% { transform: translate3d(22px,-20px,0) scale(1.05); opacity: 0.5; }
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* EXTRA DEFENSIVE: ensure no white background shows through on long pages */
|
Refactor dashboard card classes to use 'content-card' instead of 'dashboard-card'
- Updated various views to replace 'dashboard-card' with 'content-card' for consistency in styling.
- Modified filter and table card classes across multiple pages including applications, campaigns, commands, datasets, dayparts, displays, display groups, display profiles, fonts, layouts, libraries, menu boards, modules, player software, playlists, resolutions, schedules, settings, sync groups, tags, tasks, templates, transitions, users, and user groups.
2026-02-11 09:17:45 -05:00
|
|
|
html, body, #page-wrapper, .ots-shell, .ots-main, #content-wrapper, .content-wrapper, .ots-content, .page-content, .container, .container-fluid, .dashboard-page, .dashboard, .dashboard-card, .content-card, .page {
|
2026-02-06 23:57:16 -05:00
|
|
|
background-color: var(--color-background) !important;
|
|
|
|
|
background-image: none !important;
|
|
|
|
|
background-repeat: no-repeat !important;
|
|
|
|
|
color: var(--color-text-primary) !important;
|
|
|
|
|
min-height: 100vh !important;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Neutralise any inline styles or late-loaded styles that set white backgrounds */
|
|
|
|
|
*[style] {
|
|
|
|
|
background-color: inherit !important;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Provide a small utility to detect offending elements visually (useful while debugging) */
|
|
|
|
|
body.debug-white-areas * {
|
|
|
|
|
outline: 1px solid rgba(255,0,0,0.04) !important;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Strong fallback for modals/backdrops */
|
|
|
|
|
.modal-backdrop, .modal, .modal-open, .ots-footer, .page-footer {
|
|
|
|
|
background-color: var(--color-background) !important;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Ensure the root html background is also forced dark at the highest level */
|
|
|
|
|
html[style], body[style] {
|
|
|
|
|
background-color: var(--color-background) !important;
|
|
|
|
|
}
|
|
|
|
|
|