Redesign UI and add first-party Docker runtime support

This commit is contained in:
2026-02-11 11:04:39 +11:00
parent 0e999b85b9
commit 8cb9e43a72
22 changed files with 1730 additions and 811 deletions

View File

@@ -1,241 +1,293 @@
:root {
--bg-0: #07111d;
--bg-1: #0c1a2b;
--bg-2: #12233a;
--panel: #102238;
--panel-soft: #0f1f33;
--line: #274462;
--line-soft: #1b334d;
--text: #e9f5ff;
--text-muted: #9db5cb;
--accent: #35d2ff;
--accent-strong: #12b9ff;
--accent-soft: rgba(53, 210, 255, 0.2);
--ok: #2fd18a;
--warn: #ffc15a;
--error: #ff6f6f;
--radius-s: 10px;
--radius-m: 14px;
--radius-l: 18px;
--shadow-1: 0 20px 45px rgba(0, 0, 0, 0.32);
--shadow-2: 0 12px 30px rgba(0, 0, 0, 0.28);
}
* {
-webkit-appearance: none;
-moz-appearance: none;
-ms-appearance: none;
font-family: "Arial", sans-serif;
letter-spacing: 2px;
box-sizing: border-box;
font-family: "Space Grotesk", "Avenir Next", "Trebuchet MS", sans-serif;
letter-spacing: 0.02em;
}
/*
::-webkit-scrollbar {
display: none;
}
*/
::-webkit-scrollbar {
width: 12px;
height: 12px;
width: 11px;
height: 11px;
}
::-webkit-scrollbar-track {
-webkit-box-shadow: inset 0 0 6px rgba(0,0,0,0.3);
border-radius: 5px;
border-radius: 999px;
background: rgba(7, 17, 29, 0.65);
}
::-webkit-scrollbar-thumb {
border-radius: 5px;
-webkit-box-shadow: inset 0 0 6px rgba(0, 0, 0,0.6);
background-color: #444;
border-radius: 999px;
border: 2px solid rgba(7, 17, 29, 0.6);
background: linear-gradient(180deg, #2d597f, #1e4060);
}
::-webkit-scrollbar-thumb:hover {
background: #333;
background: linear-gradient(180deg, #3678ac, #20537c);
}
::-webkit-scrollbar-corner {
background: transparent;
::-webkit-scrollbar-corner {
background: transparent;
}
html,
body {
min-height: 100%;
margin: 0;
color: var(--text);
font-size: 14px;
background:
radial-gradient(circle at 15% 12%, rgba(64, 132, 183, 0.22), transparent 32%),
radial-gradient(circle at 88% 2%, rgba(18, 185, 255, 0.16), transparent 30%),
linear-gradient(180deg, var(--bg-1) 0%, var(--bg-0) 56%, #060d17 100%);
}
body {
line-height: 1.45;
}
a {
color: #00E6FF;
color: var(--accent);
}
html, body {
color: #fff;
margin: 0px auto;
height: 100%;
font-size: 14px;
a:hover {
color: #8de7ff;
}
h1,
h2,
h3,
h4,
h5 {
margin: 0;
font-weight: 600;
letter-spacing: 0.03em;
}
h1 {
font-size: 1.72rem;
}
h2 {
font-size: 24px;
letter-spacing: 2px;
font-size: 1.35rem;
}
h3 {
font-size: 22px;
letter-spacing: 1px;
font-size: 1.2rem;
}
h4 {
font-size: 20px;
letter-spacing: 1px;
line-height: 1.5em;
font-size: 1.05rem;
}
h5 {
font-size: 16px;
letter-spacing: 1px;
line-height: 1.2em;
margin: 25px 0px 10px 0px;
font-size: 0.92rem;
margin: 8px 0;
color: var(--text-muted);
}
p {
margin: 0;
padding: 0;
}
pre {
margin: 0;
color: var(--text-muted);
font-size: 12px;
white-space: pre-wrap;
line-height: 1.55;
letter-spacing: 0.015em;
font-family: "IBM Plex Mono", "SFMono-Regular", "Consolas", monospace;
}
hr {
border: 0;
height: 1px;
background: #333;
margin: 10px 0px;
}
p {
margin: 2px;
padding: 2px 5px;
}
pre {
margin: 0px 0px 5px 0px;
font-size: 12px;
color: #ddd;
letter-spacing: 1px;
white-space: pre-wrap;
font-family: monospace;
font-size: 12px;
font-style: normal;
font-variant: normal;
line-height: 1.6em;
margin: 12px 0;
background: linear-gradient(90deg, transparent, var(--line), transparent);
}
label {
margin-bottom: 20px;
margin-bottom: 8px;
display: block;
}
li {
list-style-type: none;
background-color: #111;
padding: 10px 20px;
cursor: pointer;
border-left: solid 2px #111;
transition: all 0.3;
transition: all 0.25s ease;
}
li:hover {
border-color: #00E6FF
select,
input,
textarea,
button {
outline: none;
color: var(--text);
font-size: 13px;
}
input,
select {
margin: 4px 0;
}
input[type=text],
input[type=search],
input[type=password],
input[type=number],
select,
textarea {
width: 100%;
border-radius: var(--radius-s);
border: 1px solid var(--line);
background-color: rgba(10, 22, 36, 0.78);
color: var(--text);
padding: 10px 11px;
transition: border-color 0.2s ease, box-shadow 0.2s ease, background-color 0.2s ease;
}
input[type=text]:focus,
input[type=search]:focus,
input[type=password]:focus,
input[type=number]:focus,
select:focus,
textarea:focus {
border-color: var(--accent);
box-shadow: 0 0 0 3px rgba(53, 210, 255, 0.17);
background-color: rgba(9, 25, 40, 0.95);
}
input[type=text]::placeholder,
input[type=search]::placeholder,
input[type=password]::placeholder,
textarea::placeholder {
color: #7e9ab4;
}
input[type=button],
input[type=submit],
button {
cursor: pointer;
width: calc(100% + 2px);
border: solid 0px #00E6FF;
border-radius: 0px;
outline: none;
border: 1px solid transparent;
border-radius: 999px;
color: #03101a;
padding: 10px 18px;
margin: 8px 8px 8px 0;
font-weight: 700;
letter-spacing: 0.03em;
background: linear-gradient(135deg, #67e8ff 0%, #12b9ff 100%);
box-shadow: 0 10px 22px rgba(18, 185, 255, 0.3);
transition: transform 0.15s ease, box-shadow 0.2s ease, filter 0.2s ease;
}
input[type=button]:hover,
input[type=submit]:hover,
button:hover {
transform: translateY(-1px);
filter: brightness(1.05);
box-shadow: 0 12px 24px rgba(18, 185, 255, 0.36);
}
input[type=button]:active,
input[type=submit]:active,
button:active {
transform: translateY(0);
}
input[type=button].delete {
color: #fff;
padding: 9px 10px;
display:block;
background-color: #333;
font-size: 14px;
margin: 5px 0px 5px 0px;
background: linear-gradient(135deg, #ff7f7f 0%, #e94343 100%);
box-shadow: 0 10px 20px rgba(233, 67, 67, 0.35);
}
select:focus {
outline: none;
}
input {
-webkit-appearance: none;
margin: 5px 0px;
padding: 2.5px 10px;
outline: none;
font-size: 14px;
}
input[type=button], input[type=submit] {
cursor: pointer;
background-color: #000;
margin: 10px 10px;
padding: 10px 25px;
border: solid 0px;
border-color: #000;
border-radius: 3px;
outline: none;
color: #fff;
}
input[type=button]:focus {
outline: none;
}
input[type=button]:hover {
background-color: #00E6FF;
color: #000;
}
input[type=button]:hover.delete {
background-color: red;
color: #fff;
}
input[type=text], input[type=search], input[type=password] {
color: #fff;
width: -webkit-calc(100% - 0px);
width: -moz-calc(100% - 0px);
width: calc(100% - 0px);
outline: none;
border: solid 1px transparent;
background-color: transparent;
border-bottom-color: #555;
border-radius: 0px;
padding: 8px 10px;
}
input[type="checkbox"] {
border: solid 1px #00E6FF;
background-color: #333;
height: 25px;
width: 25px;
cursor: pointer;
/*
-webkit-appearance: checkbox;
*/
}
input[type="checkbox"]:checked {
color: #fff;
background-color: #00E6FF;
/*display: inline-block;*/
}
input[type="checkbox"]:before {
position: initial;
left: 0px;
margin-left: -4px;
content: " ";
}
input[type="checkbox"]:checked:before {
position: initial;
left: 0px;
margin-left: -3px;
content: "✓";
color: #000;
}
input[type=button].cancel {
background-color: transparent;
border-color: red;
color: #ffd8d8;
border-color: rgba(255, 111, 111, 0.45);
background: rgba(87, 22, 22, 0.45);
box-shadow: none;
}
input[type=button].save{
background-color: #111;
float: right;
input[type=button].black,
input[type=submit].black {
color: #d8ecff;
border-color: var(--line);
background: rgba(14, 32, 50, 0.85);
box-shadow: none;
}
input[type=button].black, input[type=submit].black{
background-color: #000;
border-color: #000;
}
input[type=button].center{
input[type=button].center {
margin-right: auto;
margin-left: auto;
background-color: #000;
border-color: #000;
}
input[type=button].save {
margin-left: auto;
}
input[type=checkbox] {
width: 20px;
height: 20px;
border: 1px solid var(--line);
border-radius: 6px;
background-color: rgba(10, 22, 36, 0.86);
cursor: pointer;
position: relative;
}
input[type=checkbox]:checked {
border-color: #89ebff;
background-color: #39d6ff;
}
input[type=checkbox]:before {
content: "";
}
input[type=checkbox]:checked:before {
content: "\2713";
color: #032033;
font-size: 14px;
font-weight: 800;
position: absolute;
top: -1px;
left: 3px;
}
.changed {
border-color: #8de7ff !important;
box-shadow: 0 0 0 3px rgba(53, 210, 255, 0.2) !important;
}
.notAvailable {
opacity: 0.58;
cursor: not-allowed;
border-color: rgba(255, 111, 111, 0.45) !important;
}
.pointer {
@@ -243,12 +295,11 @@ input[type=button].center{
}
.pointer:hover {
color: #00E6FF;
cursor: pointer;
color: var(--accent);
}
.sortThis {
color: #00E6FF;
color: var(--accent);
}
.w40px {
@@ -271,14 +322,9 @@ input[type=button].center{
max-width: 200px;
min-width: 100px;
width: 200px;
overflow-x: hidden;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.w300px {
max-width: 300px;
white-space: nowrap;
}
.w220px {
@@ -286,46 +332,18 @@ input[type=button].center{
cursor: alias;
}
.w300px {
max-width: 300px;
}
.footer {
font-size: 10px;
font-size: 11px;
}
.center {
text-align: center;
}
.screenLogHidden {
transform: translate(0px, -110px);
}
.borderSpace {
margin-bottom: 30px;
}
.block {
}
.none {
display: none;
}
.notVisible {
height: 0px;
display: none;
opacity: 0;
border-bottom: #000 solid 0px;
}
.visible {
opacity: 1;
display: block;
border-bottom: #444 solid 1px;
padding: 10px;
}
.floatRight {
float: right;
}
@@ -334,115 +352,311 @@ input[type=button].center{
float: left;
}
.borderSpace {
margin-bottom: 30px;
}
.block {
display: block;
}
.none {
display: none;
}
.showBulk {
display: inline-flex;
}
.hideBulk {
display: none;
}
.noBulk {
}
.notVisible {
display: none;
opacity: 0;
height: 0;
}
.visible {
display: block;
opacity: 1;
}
.menu-active {
background-color: #00E6FF;
color: #011019;
}
.menu-notActive {
}
#branch {
display: table;
margin: auto;
color: red;
}
#interaction {
margin-bottom: 100px;
text-align: center;
border-bottom: solid 0px #777;
}
.half {
display: block;
width: 45%;
}
.menu {
border: solid 1px #00E6FF;
border: 1px solid var(--accent);
}
.half {
width: 45%;
}
.screenLogHidden {
transform: translate(0, -110px);
}
.infoMsg {
color: #aaa;
color: #87b0d1;
}
.errorMsg {
color: red;
color: var(--error);
}
.warningMsg {
color: yellow;
color: var(--warn);
}
.debugMsg {
color: magenta;
color: #d687ff;
}
.News, .Movie, .Series, .Sports, .Kids {
border-left: solid 2px
.News,
.Movie,
.Series,
.Sports,
.Kids {
border-left: 3px solid transparent;
padding-left: 8px;
}
.News {
border-color: tomato
border-color: #ff8f6e;
}
.Movie {
border-color: royalblue;
border-color: #46a4ff;
}
.Series {
border-color: gold;
border-color: #ffd267;
}
.Sports {
border-color: yellowgreen;
border-color: #5ee495;
}
.Kids {
border-color: mediumpurple;
border-color: #f6a8ff;
}
/* Loading */
#loading {
left: 0px;
top: 0px;
z-index: 10000;
position: absolute;
background-color: rgba(0,0,0, 0.8);
margin: auto;
width: 100%;
height: 100%;
position: fixed;
inset: 0;
z-index: 2000;
background-color: rgba(5, 12, 20, 0.72);
backdrop-filter: blur(1.5px);
}
.loader {
border: 5px solid transparent;
width: 52px;
height: 52px;
border-radius: 50%;
border-top: 5px solid #00E6FF;
border-bottom: 5px solid #00E6FF;
width: 50px;
height: 50px;
-webkit-animation: spin 1.2s linear infinite;
animation: spin 1.2s linear infinite;
border: 4px solid transparent;
border-top-color: #58ddff;
border-right-color: #12b9ff;
animation: spin 0.9s linear infinite;
position: fixed;
margin: auto;
top: 0;
right: 0;
bottom: 0;
left: 0;
margin: auto;
}
@-webkit-keyframes spin {
0% { -webkit-transform: rotate(0deg); }
100% { -webkit-transform: rotate(360deg); }
#popup {
position: fixed;
inset: 0;
background-color: rgba(3, 9, 16, 0.72);
backdrop-filter: blur(2px);
z-index: 1500;
padding: 16px;
}
#popup-custom,
#mapping-detail,
#user-detail,
#file-detail {
margin: 0 auto;
max-width: 760px;
max-height: calc(100vh - 36px);
overflow: auto;
border-radius: var(--radius-l);
border: 1px solid var(--line);
background: linear-gradient(180deg, rgba(17, 34, 56, 0.97) 0%, rgba(12, 27, 44, 0.97) 100%);
box-shadow: var(--shadow-1);
padding: 16px;
animation: popupIn 0.2s ease;
}
#popup-custom h3 {
margin-bottom: 8px;
text-align: center;
color: #d5efff;
}
#popup-custom table,
#content_settings table,
#mapping-detail-table,
#user-detail-table {
width: 100%;
table-layout: fixed;
border-collapse: separate;
border-spacing: 0 8px;
}
#popup-custom td,
#content_settings td,
#mapping-detail-table td,
#user-detail-table td {
padding: 2px 6px;
vertical-align: middle;
}
#popup-custom td.left,
#mapping-detail-table td.left,
#user-detail-table td.left {
width: 38%;
color: var(--text-muted);
}
#popup-custom input[type=text],
#popup-custom input[type=password],
#mapping-detail input[type=text],
#content_settings input[type=text],
#content_settings input[type=password] {
width: 100%;
}
#mapping-detail img {
display: block;
max-height: 44px;
margin: 8px auto 12px;
}
#file-detail input[type=text] {
width: 100%;
}
.interaction,
#interaction {
margin-top: 16px;
display: flex;
flex-wrap: wrap;
align-items: center;
gap: 8px;
float: right;
}
.interaction input[type=button],
.interaction input[type=submit] {
margin: 0;
min-width: 110px;
}
#popup-interaction {
margin-top: 14px;
display: flex;
flex-wrap: wrap;
justify-content: flex-end;
gap: 8px;
}
#notification {
position: fixed;
right: 12px;
top: 12px;
width: 260px;
max-height: calc(100vh - 24px);
overflow: auto;
border-radius: var(--radius-m);
border: 1px solid var(--line);
background: rgba(10, 22, 36, 0.92);
box-shadow: var(--shadow-2);
}
#notification .element {
margin: 8px;
border-radius: 10px;
border-left: 4px solid var(--ok);
background: rgba(17, 35, 56, 0.84);
padding: 8px;
}
#notification h5 {
padding: 0;
margin-bottom: 6px;
}
#notification p {
font-size: 11px;
}
.tableEllipsis {
width: 150px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
@keyframes spin {
0% { transform: rotate(0deg); }
100% { transform: rotate(360deg); }
0% {
transform: rotate(0deg);
}
100% {
transform: rotate(360deg);
}
}
@keyframes popupIn {
0% {
opacity: 0;
transform: translateY(7px) scale(0.99);
}
100% {
opacity: 1;
transform: translateY(0) scale(1);
}
}
@media only screen and (max-width: 619px) {
h1 {
font-size: 1.46rem;
}
#popup {
padding: 10px;
}
#popup-custom,
#mapping-detail,
#user-detail,
#file-detail {
max-height: calc(100vh - 20px);
padding: 12px;
}
.interaction,
#interaction,
#popup-interaction {
justify-content: stretch;
}
.interaction input[type=button],
.interaction input[type=submit],
#popup-interaction input[type=button] {
width: 100%;
}
}

File diff suppressed because it is too large Load Diff