#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, rgba(18, 36, 58, 0.95) 0%, rgba(10, 23, 38, 0.95) 100%), radial-gradient(circle at 20% 0%, rgba(53, 210, 255, 0.12), transparent 48%); box-shadow: var(--shadow-2); overflow: hidden; } #menu-wrapper { display: flex; flex-direction: column; height: 100%; padding: 14px; } #branch { min-height: 18px; margin: 2px 0 6px; text-align: center; font-size: 11px; color: #ff9f8d; letter-spacing: 0.08em; text-transform: uppercase; } #logo { width: 100%; height: 76px; border-radius: 12px; border: 1px solid var(--line-soft); background: linear-gradient(180deg, rgba(26, 49, 73, 0.55), rgba(13, 28, 45, 0.6)), url("../img/logo_w_600x200.png") center no-repeat; background-size: contain; margin-bottom: 12px; } #main-menu { display: flex; flex-direction: column; gap: 7px; overflow: auto; padding-right: 4px; } #main-menu li { display: flex; align-items: center; gap: 10px; min-height: 42px; padding: 8px 11px; border-radius: 12px; border: 1px solid transparent; background: rgba(11, 25, 40, 0.58); } #main-menu li:hover { border-color: var(--accent-soft); transform: translateX(2px); } #main-menu li:focus-visible { border-color: rgba(103, 232, 255, 0.62); transform: translateX(2px); box-shadow: 0 0 0 3px rgba(53, 210, 255, 0.23); } #main-menu li.menu-active { border-color: rgba(103, 232, 255, 0.55); background: linear-gradient(135deg, #6fe6ff 0%, #1cc5ff 100%); box-shadow: 0 10px 18px rgba(28, 197, 255, 0.3); } #main-menu li.menu-active p { color: #03111a; } #main-menu li.menu-active img { filter: brightness(0.04) saturate(120%); } nav img { display: block; width: 18px; height: 18px; max-width: 18px; max-height: 18px; flex: 0 0 auto; } nav p { margin: 0; padding: 0; text-align: left; font-size: 12px; font-weight: 600; color: #d7eefe; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .layout-right { min-width: 0; border-radius: var(--radius-l); border: 1px solid var(--line); background: linear-gradient(180deg, rgba(17, 34, 54, 0.94) 0%, rgba(10, 20, 34, 0.96) 100%), radial-gradient(circle at 100% 0%, rgba(53, 210, 255, 0.08), 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: rgba(10, 22, 36, 0.52); } #shell-title { margin: 0; font-size: 1.08rem; font-weight: 700; color: #d8f1ff; letter-spacing: 0.04em; } #menu-toggle { display: none; min-width: 72px; padding: 8px 14px; margin: 0; font-size: 12px; } #connection-indicator { margin-left: auto; padding: 5px 11px; border-radius: 999px; font-size: 11px; font-weight: 700; letter-spacing: 0.05em; text-transform: uppercase; } #connection-indicator.status-idle { color: #d8edff; border: 1px solid #3a5877; background: rgba(20, 42, 66, 0.65); } #connection-indicator.status-busy { color: #072031; border: 1px solid #7ee8ff; background: linear-gradient(135deg, #7be8ff 0%, #33cdff 100%); } #connection-indicator.status-online { color: #052219; border: 1px solid #9ff0c8; background: linear-gradient(135deg, #92f0c0 0%, #4fce93 100%); } #connection-indicator.status-offline { color: #ffe5e5; border: 1px solid #ff9e9e; background: linear-gradient(135deg, #ff7e7e 0%, #d34d4d 100%); } #clientInfo, #activeStreams, #inactiveStreams { width: 100%; border-collapse: separate; border-spacing: 7px; background: rgba(8, 20, 33, 0.54); } #clientInfo { padding: 7px 10px 6px; border-bottom: 1px solid var(--line-soft); } #clientInfo tr { vertical-align: top; } #clientInfo .tdKey, #clientInfo .tdVal, #activeStreams .tdKey, #inactiveStreams .tdKey, #activeStreams .tdVal, #inactiveStreams .tdVal, #logInfo .tdVal, #mappingInfo .tdVal { border: 1px solid var(--line-soft); border-radius: 8px; padding: 7px 8px; vertical-align: middle; font-family: "IBM Plex Mono", "SFMono-Regular", "Consolas", monospace; } #clientInfo .tdKey, #activeStreams .tdKey, #inactiveStreams .tdKey { color: #53d9ff; font-size: 10px; text-transform: uppercase; } #clientInfo .tdVal, #activeStreams .tdVal, #inactiveStreams .tdVal { color: var(--text-muted); font-size: 11px; word-break: break-word; } #clientInfo .tdVal a { color: #8fdcff; text-decoration: none; border-bottom: 1px dotted rgba(143, 220, 255, 0.6); word-break: break-all; } #clientInfo .tdVal a:hover, #clientInfo .tdVal a:focus { color: #d7f4ff; border-bottom-color: #d7f4ff; text-decoration: none; } .dashboard-cards { display: grid; grid-template-columns: repeat(6, minmax(130px, 1fr)); gap: 9px; padding: 10px 14px; border-bottom: 1px solid var(--line-soft); background: rgba(8, 18, 30, 0.45); } .status-card { border: 1px solid var(--line-soft); border-radius: 12px; background: rgba(13, 31, 49, 0.8); padding: 10px; min-height: 74px; display: flex; flex-direction: column; justify-content: center; gap: 4px; } .status-card-label { color: #8fb3cf; font-size: 10px; text-transform: uppercase; letter-spacing: 0.07em; } .status-card-value { color: #e8f5ff; font-size: 14px; font-weight: 700; overflow: hidden; text-overflow: ellipsis; } .status-card.status-card-ok { border-color: rgba(67, 191, 130, 0.48); background: linear-gradient(180deg, rgba(20, 54, 44, 0.9) 0%, rgba(12, 38, 31, 0.95) 100%); } .status-card.status-card-warn { border-color: rgba(255, 193, 90, 0.5); background: linear-gradient(180deg, rgba(68, 50, 20, 0.86) 0%, rgba(44, 32, 14, 0.96) 100%); } .status-card.status-card-error { border-color: rgba(255, 111, 111, 0.5); background: linear-gradient(180deg, rgba(73, 26, 26, 0.84) 0%, rgba(47, 19, 19, 0.96) 100%); } #myStreamsBox { border-bottom: 1px solid var(--line-soft); background: rgba(10, 22, 36, 0.62); transition: all 0.2s ease; } #allStreams { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; padding: 8px; } #activeStreams, #inactiveStreams { max-height: 120px; overflow-y: auto; } #inactiveStreams .tdKey { color: #ff8f8f; } #content { display: block; overflow: auto; padding: 12px; } #content h3 { margin-bottom: 6px; color: #d4edff; } #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; } #box-wrapper { width: 100%; overflow: auto; border: 1px solid var(--line-soft); border-radius: 12px; background: rgba(10, 21, 34, 0.72); } #content_table, #mapping-detail-table { width: 100%; border-collapse: collapse; } #content_table .content_table_header { position: sticky; top: 0; z-index: 2; background: linear-gradient(180deg, rgba(23, 46, 72, 0.98), rgba(16, 32, 50, 0.98)); border-bottom: 1px solid var(--line); } #content_table .content_table_header td { color: #8fd8ff; font-size: 11px; text-transform: uppercase; letter-spacing: 0.07em; padding: 10px 8px; } #content_table tr { border-left: 3px solid transparent; border-bottom: 1px solid rgba(29, 55, 80, 0.72); transition: background-color 0.2s ease; } #content_table tr:hover { background-color: rgba(28, 53, 79, 0.5); } #content_table tr[tabindex], #content_table td[tabindex] { cursor: pointer; } #content_table tr[tabindex]:focus-visible, #content_table td[tabindex]:focus-visible, .keyboard-clickable:focus-visible { outline: 2px solid #7de5ff; outline-offset: -2px; background-color: rgba(39, 73, 106, 0.56); } #content_table td { padding: 7px 8px; vertical-align: middle; } #content_table img { display: block; width: auto; max-width: 34px; max-height: 30px; margin: 0 auto; } #content_table input[type=text] { min-width: 48px; max-width: 76px; margin: 0; padding: 6px 7px; border-radius: 8px; text-align: left; } #content_table input[type=checkbox] { margin: 0 auto; } #content_table .mapping-edit-button { min-height: 32px; min-width: 64px; margin: 0; padding: 5px 10px; font-size: 11px; line-height: 1; } #content_table tr.activeEPG { border-left-color: #2ed486; } #content_table tr.notActiveEPG { border-left-color: #ff6868; } #settings { padding: 10px; } #content_settings h4 { margin: 15px 0 8px; color: #d6efff; } #content_settings table { border: 1px solid var(--line-soft); border-radius: 12px; background: rgba(10, 22, 35, 0.62); border-collapse: separate; border-spacing: 0; overflow: hidden; } #content_settings td { padding: 9px 8px; border-bottom: 1px solid rgba(31, 57, 82, 0.62); } #content_settings tr:last-child td { border-bottom: 0; } #content_settings pre { color: #9ab7d0; font-size: 11px; } #content_log { padding: 8px; } #content_log pre { margin-bottom: 5px; padding: 8px; border-radius: 8px; background: rgba(13, 31, 49, 0.72); white-space: pre-wrap; overflow-wrap: anywhere; word-break: break-word; line-height: 1.45; } #logScreen p { white-space: pre; font-family: "IBM Plex Mono", "SFMono-Regular", "Consolas", monospace; font-size: 12px; line-height: 1.55; } #box { width: min(680px, calc(100% - 24px)); margin: 14px auto; border-radius: var(--radius-l); border: 1px solid var(--line); background: linear-gradient(180deg, rgba(16, 35, 56, 0.95) 0%, rgba(11, 24, 38, 0.96) 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, rgba(16, 35, 56, 0.84), rgba(11, 24, 38, 0.9)), url("../img/logo_w_600x200.png") center no-repeat; background-size: 300px auto; } #headline { border-bottom: 1px solid var(--line); background: rgba(10, 22, 37, 0.55); 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; } .wizard { margin: 10px 0; } .auth-screen { display: flex; flex-direction: column; min-height: 100vh; } .auth-screen #clientInfo { margin: 0; } .phone { display: table-cell; } @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: rgba(3, 9, 15, 0.48); 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: rgba(9, 22, 36, 0.92); 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: rgba(8, 20, 33, 0.44); } #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: rgba(17, 34, 53, 0.5); } #clientInfo .tdVal::before { content: attr(data-label); color: #8bb9d7; font-size: 9px; letter-spacing: 0.07em; text-transform: uppercase; font-family: "Space Grotesk", "Avenir Next", "Trebuchet MS", sans-serif; 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: rgba(11, 24, 39, 0.86); } #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: rgba(17, 34, 53, 0.5); } #content_table td::before { content: attr(data-label); color: #8bb9d7; 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: 430px) { #clientInfo { grid-template-columns: 1fr; } }