continuous-integration/drone/push Build is failing
- html/css split into tokens.css (custom properties), base.css (reset, typography, focus, skip link), components.css (buttons, inputs, tables, status cards, popups, menu, log lines) and layout.css (shell, sidebar, header, breakpoints); screen.css removed. Selectors and declarations moved as-is; three pairs of conflicting rules resolved in favour of the one that already won the cascade, two empty rules dropped. - Every literal colour outside tokens.css is now a token (category badge borders excepted). color-scheme set so native controls follow. - Light theme under prefers-color-scheme: light, with explicit data-theme="light"/"dark" overrides on :root for a future toggle. Body text 13.6:1, muted text 5.4:1, accent 5.1:1 on the light background. - HTML: lang="en" everywhere, one h1 per page, maintenance page uses <main>, an id typo fixed.
666 lines
12 KiB
CSS
666 lines
12 KiB
CSS
/*
|
|
* layout.css - shell layout (sidebar, header, content wrapper), the auth /
|
|
* wizard box pages and every responsive breakpoint. Loaded last.
|
|
*/
|
|
|
|
/* Application shell */
|
|
|
|
#layout {
|
|
display: grid;
|
|
grid-template-columns: 290px minmax(0, 1fr);
|
|
gap: 16px;
|
|
min-height: 100vh;
|
|
padding: 16px;
|
|
}
|
|
|
|
#layout-overlay {
|
|
display: none;
|
|
}
|
|
|
|
.layout-left {
|
|
min-width: 0;
|
|
border-radius: var(--radius-l);
|
|
border: 1px solid var(--line);
|
|
background:
|
|
linear-gradient(180deg, var(--panel-top) 0%, var(--panel-bottom) 100%),
|
|
radial-gradient(circle at 20% 0%, var(--panel-glow), transparent 48%);
|
|
box-shadow: var(--shadow-2);
|
|
overflow: hidden;
|
|
}
|
|
|
|
#menu-wrapper {
|
|
display: flex;
|
|
flex-direction: column;
|
|
height: 100%;
|
|
padding: 14px;
|
|
}
|
|
|
|
#logo {
|
|
width: 100%;
|
|
height: 76px;
|
|
border-radius: 12px;
|
|
border: 1px solid var(--line-soft);
|
|
background:
|
|
linear-gradient(180deg, var(--logo-tint-top), var(--logo-tint-bottom)),
|
|
url("../img/logo_w_600x200.png") center no-repeat;
|
|
background-size: contain;
|
|
margin-bottom: 12px;
|
|
}
|
|
|
|
.layout-right {
|
|
min-width: 0;
|
|
border-radius: var(--radius-l);
|
|
border: 1px solid var(--line);
|
|
background:
|
|
linear-gradient(180deg, var(--panel-top) 0%, var(--panel-bottom) 100%),
|
|
radial-gradient(circle at 100% 0%, var(--panel-glow), transparent 34%);
|
|
box-shadow: var(--shadow-2);
|
|
display: flex;
|
|
flex-direction: column;
|
|
overflow: hidden;
|
|
}
|
|
|
|
#shell-header {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 12px;
|
|
padding: 12px 14px;
|
|
border-bottom: 1px solid var(--line-soft);
|
|
background: var(--surface-0);
|
|
}
|
|
|
|
#shell-title {
|
|
margin: 0;
|
|
font-size: 1.08rem;
|
|
font-weight: 700;
|
|
color: var(--text-heading);
|
|
letter-spacing: 0.04em;
|
|
}
|
|
|
|
#menu-toggle {
|
|
display: none;
|
|
min-width: 72px;
|
|
padding: 8px 14px;
|
|
margin: 0;
|
|
font-size: 12px;
|
|
}
|
|
|
|
/* Content wrapper */
|
|
|
|
#content {
|
|
display: block;
|
|
overflow: auto;
|
|
padding: 12px;
|
|
}
|
|
|
|
#content h3 {
|
|
margin-bottom: 6px;
|
|
color: var(--text-heading);
|
|
}
|
|
|
|
#content-interaction {
|
|
margin: 0 0 12px;
|
|
display: flex;
|
|
flex-wrap: wrap;
|
|
align-items: center;
|
|
gap: 8px;
|
|
position: relative;
|
|
}
|
|
|
|
#content-interaction .search {
|
|
width: min(260px, 100%);
|
|
margin-left: auto;
|
|
}
|
|
|
|
.mobile-only-control {
|
|
display: none;
|
|
}
|
|
|
|
/* Login, first-user, wizard and maintenance box */
|
|
|
|
#box {
|
|
width: min(680px, calc(100% - 24px));
|
|
margin: 14px auto;
|
|
border-radius: var(--radius-l);
|
|
border: 1px solid var(--line);
|
|
background: linear-gradient(180deg, var(--panel-top) 0%, var(--panel-bottom) 100%);
|
|
box-shadow: var(--shadow-2);
|
|
min-height: 430px;
|
|
display: flex;
|
|
flex-direction: column;
|
|
}
|
|
|
|
#header,
|
|
#header_config {
|
|
width: min(680px, calc(100% - 24px));
|
|
height: 84px;
|
|
margin: 24px auto 10px;
|
|
border-radius: 12px;
|
|
border: 1px solid var(--line);
|
|
background:
|
|
linear-gradient(180deg, var(--logo-tint-top), var(--logo-tint-bottom)),
|
|
url("../img/logo_w_600x200.png") center no-repeat;
|
|
background-size: 300px auto;
|
|
}
|
|
|
|
#headline {
|
|
border-bottom: 1px solid var(--line);
|
|
background: var(--surface-0);
|
|
padding: 14px;
|
|
}
|
|
|
|
#box #content {
|
|
padding: 14px;
|
|
}
|
|
|
|
#box p {
|
|
padding: 0;
|
|
}
|
|
|
|
#box-footer {
|
|
margin-top: auto;
|
|
padding: 8px 14px 16px;
|
|
display: flex;
|
|
justify-content: flex-end;
|
|
}
|
|
|
|
#box input[type=text],
|
|
#box input[type=password],
|
|
#box select {
|
|
width: 100%;
|
|
}
|
|
|
|
#box input[type=submit],
|
|
#box input[type=button] {
|
|
min-width: 120px;
|
|
}
|
|
|
|
.auth-screen {
|
|
display: flex;
|
|
flex-direction: column;
|
|
min-height: 100vh;
|
|
}
|
|
|
|
.auth-screen #clientInfo {
|
|
margin: 0;
|
|
}
|
|
|
|
.phone {
|
|
display: table-cell;
|
|
}
|
|
|
|
/* Breakpoints */
|
|
|
|
@media only screen and (max-width: 1300px) {
|
|
.dashboard-cards {
|
|
grid-template-columns: repeat(3, minmax(130px, 1fr));
|
|
}
|
|
|
|
#clientInfo {
|
|
border-spacing: 5px;
|
|
}
|
|
}
|
|
|
|
@media only screen and (max-width: 1024px) {
|
|
#layout {
|
|
grid-template-columns: 260px minmax(0, 1fr);
|
|
gap: 12px;
|
|
padding: 12px;
|
|
}
|
|
|
|
#shell-title {
|
|
font-size: 1rem;
|
|
}
|
|
|
|
#clientInfo .tdKey,
|
|
#clientInfo .tdVal {
|
|
font-size: 10px;
|
|
padding: 6px;
|
|
}
|
|
|
|
#content-interaction {
|
|
gap: 7px;
|
|
}
|
|
}
|
|
|
|
@media only screen and (max-width: 900px) {
|
|
#layout {
|
|
grid-template-columns: 1fr;
|
|
padding-top: max(10px, env(safe-area-inset-top));
|
|
}
|
|
|
|
#layout-overlay {
|
|
display: block;
|
|
position: fixed;
|
|
inset: 0;
|
|
z-index: 1000;
|
|
pointer-events: none;
|
|
background: var(--overlay-soft);
|
|
opacity: 0;
|
|
transition: opacity 0.2s ease;
|
|
}
|
|
|
|
body.menu-open #layout-overlay {
|
|
opacity: 1;
|
|
pointer-events: auto;
|
|
}
|
|
|
|
.layout-left {
|
|
position: fixed;
|
|
left: 0;
|
|
top: 0;
|
|
bottom: 0;
|
|
width: min(320px, calc(100vw - 34px));
|
|
max-width: none;
|
|
z-index: 1100;
|
|
transform: translateX(-116%);
|
|
transition: transform 0.25s ease;
|
|
border-radius: 0 16px 16px 0;
|
|
border-left: 0;
|
|
}
|
|
|
|
body.menu-open .layout-left {
|
|
transform: translateX(0);
|
|
}
|
|
|
|
#main-menu li {
|
|
min-height: 48px;
|
|
padding: 10px 12px;
|
|
}
|
|
|
|
#main-menu li p {
|
|
font-size: 13px;
|
|
}
|
|
|
|
.layout-right {
|
|
min-height: calc(100vh - 24px);
|
|
}
|
|
|
|
#shell-header {
|
|
position: sticky;
|
|
top: 0;
|
|
z-index: 8;
|
|
backdrop-filter: blur(8px);
|
|
}
|
|
|
|
#menu-toggle {
|
|
display: inline-flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
min-height: 42px;
|
|
min-width: 92px;
|
|
font-size: 13px;
|
|
}
|
|
|
|
#clientInfo,
|
|
.dashboard-cards {
|
|
padding-left: 10px;
|
|
padding-right: 10px;
|
|
}
|
|
|
|
#content {
|
|
padding: 10px;
|
|
padding-bottom: calc(14px + env(safe-area-inset-bottom));
|
|
}
|
|
|
|
#content-interaction {
|
|
position: sticky;
|
|
top: 10px;
|
|
z-index: 6;
|
|
margin-bottom: 10px;
|
|
padding: 8px;
|
|
border: 1px solid var(--line-soft);
|
|
border-radius: 12px;
|
|
background: var(--surface-solid);
|
|
backdrop-filter: blur(6px);
|
|
}
|
|
|
|
#content-interaction input[type=button],
|
|
#content-interaction select {
|
|
min-height: 42px;
|
|
}
|
|
|
|
#allStreams {
|
|
grid-template-columns: 1fr;
|
|
}
|
|
|
|
#activeStreams,
|
|
#inactiveStreams {
|
|
max-height: 96px;
|
|
}
|
|
|
|
body.menu-log-focus #clientInfo,
|
|
body.menu-log-focus .dashboard-cards,
|
|
body.menu-log-focus #myStreamsBox {
|
|
display: none;
|
|
}
|
|
|
|
body.menu-log-focus #content {
|
|
padding: 8px;
|
|
padding-bottom: calc(12px + env(safe-area-inset-bottom));
|
|
}
|
|
|
|
body.menu-log-focus #content h3 {
|
|
margin-bottom: 4px;
|
|
}
|
|
|
|
body.menu-log-focus #content-interaction {
|
|
top: 8px;
|
|
margin-bottom: 8px;
|
|
padding: 6px;
|
|
}
|
|
|
|
body.menu-log-focus #content-interaction .search {
|
|
display: none;
|
|
}
|
|
|
|
body.menu-log-focus #content-interaction input[type=button] {
|
|
min-height: 38px;
|
|
}
|
|
|
|
body.menu-log-focus #content_log {
|
|
padding: 5px;
|
|
}
|
|
|
|
body.menu-log-focus #content_log pre {
|
|
margin-bottom: 4px;
|
|
padding: 7px;
|
|
font-size: 11px;
|
|
}
|
|
|
|
.phone {
|
|
display: none;
|
|
}
|
|
}
|
|
|
|
@media only screen and (max-width: 760px) {
|
|
#shell-header {
|
|
padding: 10px 10px;
|
|
}
|
|
|
|
#clientInfo {
|
|
display: grid;
|
|
grid-template-columns: repeat(2, minmax(0, 1fr));
|
|
gap: 8px;
|
|
border-spacing: 0;
|
|
white-space: normal;
|
|
background: var(--surface-0);
|
|
}
|
|
|
|
#clientInfo tr {
|
|
display: contents;
|
|
}
|
|
|
|
#clientInfo .tdKey {
|
|
display: none;
|
|
}
|
|
|
|
#clientInfo .tdVal {
|
|
font-size: 12px;
|
|
min-height: 54px;
|
|
display: flex;
|
|
flex-direction: column;
|
|
align-items: flex-start;
|
|
justify-content: center;
|
|
gap: 4px;
|
|
padding: 10px 9px;
|
|
background: var(--surface-2);
|
|
}
|
|
|
|
#clientInfo .tdVal::before {
|
|
content: attr(data-label);
|
|
color: var(--text-soft);
|
|
font-size: 9px;
|
|
letter-spacing: 0.07em;
|
|
text-transform: uppercase;
|
|
font-family: var(--font-sans);
|
|
line-height: 1.2;
|
|
}
|
|
|
|
.dashboard-cards {
|
|
grid-template-columns: repeat(3, minmax(0, 1fr));
|
|
}
|
|
|
|
#content_table {
|
|
display: block;
|
|
}
|
|
|
|
#content_table .content_table_header {
|
|
display: none;
|
|
}
|
|
|
|
#content_table tbody,
|
|
#content_table tr,
|
|
#content_table td {
|
|
display: block;
|
|
width: 100%;
|
|
}
|
|
|
|
#content_table tr {
|
|
border: 1px solid var(--line-soft);
|
|
border-left-width: 3px;
|
|
border-radius: 12px;
|
|
margin-bottom: 10px;
|
|
padding: 6px;
|
|
background: var(--surface-3);
|
|
}
|
|
|
|
#content_table td {
|
|
border: 0;
|
|
border-radius: 10px;
|
|
margin: 4px 0;
|
|
padding: 7px 8px;
|
|
display: grid;
|
|
grid-template-columns: minmax(92px, 36%) 1fr;
|
|
align-items: center;
|
|
gap: 8px;
|
|
background: var(--surface-2);
|
|
}
|
|
|
|
#content_table td::before {
|
|
content: attr(data-label);
|
|
color: var(--text-soft);
|
|
font-size: 10px;
|
|
letter-spacing: 0.06em;
|
|
text-transform: uppercase;
|
|
}
|
|
|
|
#content_table td[data-cell-type="checkbox"],
|
|
#content_table td[data-cell-type="image"],
|
|
#content_table td[data-cell-type="action"] {
|
|
grid-template-columns: 1fr;
|
|
justify-items: start;
|
|
}
|
|
|
|
#content_table td[data-cell-type="checkbox"]::before,
|
|
#content_table td[data-cell-type="image"]::before,
|
|
#content_table td[data-cell-type="action"]::before {
|
|
margin-bottom: 4px;
|
|
}
|
|
|
|
#content_table td[data-cell-type="image"] img {
|
|
margin-left: 0;
|
|
}
|
|
|
|
#content_table input[type=text] {
|
|
min-width: 0;
|
|
max-width: none;
|
|
width: 100%;
|
|
min-height: 40px;
|
|
}
|
|
|
|
#content_table input[type=checkbox] {
|
|
width: 24px;
|
|
height: 24px;
|
|
}
|
|
|
|
#content_table .mapping-edit-button {
|
|
min-height: 38px;
|
|
width: 100%;
|
|
}
|
|
|
|
.mobile-only-control {
|
|
display: block;
|
|
width: 100%;
|
|
}
|
|
}
|
|
|
|
@media only screen and (max-width: 620px) {
|
|
#layout {
|
|
padding: 8px;
|
|
gap: 8px;
|
|
}
|
|
|
|
.layout-right {
|
|
border-radius: 14px;
|
|
}
|
|
|
|
#shell-header {
|
|
flex-wrap: wrap;
|
|
gap: 8px;
|
|
}
|
|
|
|
#shell-title {
|
|
flex: 1 1 auto;
|
|
font-size: 0.95rem;
|
|
}
|
|
|
|
#connection-indicator {
|
|
margin-left: 0;
|
|
}
|
|
|
|
#clientInfo {
|
|
grid-template-columns: repeat(2, minmax(0, 1fr));
|
|
gap: 6px;
|
|
padding-left: 8px;
|
|
padding-right: 8px;
|
|
}
|
|
|
|
.dashboard-cards {
|
|
grid-template-columns: repeat(2, minmax(0, 1fr));
|
|
}
|
|
|
|
#content-interaction {
|
|
flex-direction: column;
|
|
align-items: stretch;
|
|
}
|
|
|
|
#content-interaction .search {
|
|
width: 100%;
|
|
margin-left: 0;
|
|
}
|
|
|
|
#content-interaction input[type=button] {
|
|
width: 100%;
|
|
margin-right: 0;
|
|
min-height: 44px;
|
|
}
|
|
|
|
#box {
|
|
width: calc(100% - 14px);
|
|
min-height: 0;
|
|
margin-top: 8px;
|
|
}
|
|
|
|
#header,
|
|
#header_config {
|
|
width: calc(100% - 14px);
|
|
margin-top: 12px;
|
|
}
|
|
|
|
#box-footer {
|
|
flex-direction: column;
|
|
align-items: stretch;
|
|
}
|
|
|
|
#box-footer input[type=button],
|
|
#box-footer input[type=submit] {
|
|
width: 100%;
|
|
margin-right: 0;
|
|
}
|
|
}
|
|
|
|
@media only screen and (max-width: 619px) {
|
|
h1 {
|
|
font-size: 1.46rem;
|
|
}
|
|
|
|
#popup {
|
|
padding: 0;
|
|
}
|
|
|
|
#popup-custom,
|
|
#mapping-detail,
|
|
#user-detail,
|
|
#file-detail {
|
|
max-width: none;
|
|
width: 100%;
|
|
height: 100%;
|
|
max-height: 100%;
|
|
border-radius: 0;
|
|
border: 0;
|
|
padding: 10px 10px calc(14px + env(safe-area-inset-bottom));
|
|
}
|
|
|
|
#popup-custom table {
|
|
border-spacing: 0 10px;
|
|
}
|
|
|
|
#popup-custom tr {
|
|
display: block;
|
|
border: 1px solid var(--line-soft);
|
|
border-radius: 10px;
|
|
padding: 8px 8px 10px;
|
|
background: var(--surface-2);
|
|
}
|
|
|
|
#popup-custom td {
|
|
display: block;
|
|
width: 100%;
|
|
padding: 4px 2px;
|
|
}
|
|
|
|
#popup-custom td.left {
|
|
width: 100%;
|
|
font-size: 11px;
|
|
text-transform: uppercase;
|
|
letter-spacing: 0.06em;
|
|
}
|
|
|
|
#popup-interaction {
|
|
position: sticky;
|
|
bottom: 0;
|
|
z-index: 5;
|
|
margin-top: 10px;
|
|
padding-top: 10px;
|
|
background: linear-gradient(180deg, var(--sticky-fade-from) 0%, var(--sticky-fade-to) 30%);
|
|
}
|
|
|
|
.interaction,
|
|
#interaction {
|
|
justify-content: stretch;
|
|
}
|
|
|
|
.interaction input[type=button],
|
|
.interaction input[type=submit],
|
|
#popup-interaction input[type=button] {
|
|
width: 100%;
|
|
min-height: 44px;
|
|
}
|
|
|
|
.popup-title h3 {
|
|
font-size: 1.02rem;
|
|
}
|
|
|
|
.popup-close {
|
|
min-width: 44px;
|
|
min-height: 44px;
|
|
}
|
|
}
|
|
|
|
@media only screen and (max-width: 430px) {
|
|
#clientInfo {
|
|
grid-template-columns: 1fr;
|
|
}
|
|
}
|