This commit is contained in:
2026-05-18 13:22:11 +04:00
parent 8cda54548f
commit 5863574a78
24 changed files with 3060 additions and 467 deletions

View File

@@ -43,6 +43,30 @@ body {
min-height: 100vh;
}
.app-shell.mode-live {
background: #0d1931;
}
.app-shell.mode-live .masthead {
background: #0d1931;
border-bottom: 1px solid rgba(0, 140, 168, 0.45);
box-shadow: none;
}
.app-shell.mode-live .masthead::after {
height: 3px;
background: #ed2e23;
}
.app-shell.mode-live .masthead-title,
.app-shell.mode-live .masthead-subtitle {
color: #ffffff;
}
.app-shell.mode-live .page-content {
padding-top: 18px;
}
.hidden-file-input {
display: none;
}
@@ -387,6 +411,107 @@ body {
gap: 8px;
}
.live-settings-divider {
border: 0;
border-top: 1px dashed #d4deef;
margin: 14px 0 10px;
}
.stage-control-grid {
grid-template-columns: 1.1fr 1fr 0.8fr;
display: grid;
gap: 8px;
}
.stage-select-card {
border: 1px solid #d4deef;
border-radius: 10px;
background: #fff;
padding: 8px;
}
.stage-select-label {
margin: 0 0 6px;
font-size: 11px;
letter-spacing: 0.5px;
text-transform: uppercase;
color: #5d6d8e;
font-weight: 800;
}
.stage-selection-preview {
margin: 8px 0 0;
padding: 8px 10px;
border-radius: 9px;
background: #f4f8ff;
color: #244372;
font-size: 12px;
font-weight: 700;
}
.stage-action-row {
margin-top: 10px;
}
.stage-start-btn {
min-width: 158px;
box-shadow: 0 8px 18px rgba(0, 140, 168, 0.26);
}
.stage-start-btn:disabled {
background: #e7edf8;
color: #6e7f9f;
border-color: #d0d9ea;
box-shadow: none;
}
.stage-status-grid {
margin-top: 8px;
display: grid;
grid-template-columns: repeat(2, minmax(0, 1fr));
gap: 8px;
}
.stage-status-card {
border: 1px solid #d4deef;
border-radius: 10px;
padding: 10px;
background: #fff;
}
.stage-status-title {
margin: 0;
font-size: 12px;
color: var(--muted);
font-weight: 700;
}
.stage-status-main {
margin: 6px 0 0;
font-size: 13px;
font-weight: 800;
color: var(--navy);
}
.stage-status-sub {
margin: 4px 0 0;
font-size: 11px;
color: #5c6a86;
font-family: "IBM Plex Mono", monospace;
}
.stage-status-empty {
margin: 6px 0 0;
font-size: 13px;
color: var(--muted);
font-weight: 700;
}
.stage-status-actions {
margin-top: 8px;
margin-bottom: 0;
}
.switch-row {
display: inline-flex;
align-items: center;
@@ -816,6 +941,24 @@ body {
font-weight: 800;
}
.group-card-head-actions {
display: inline-flex;
align-items: center;
gap: 8px;
}
.group-card-toggle {
border: 1px solid #d5deef;
background: #fff;
color: #2f4063;
border-radius: 8px;
min-width: 28px;
height: 28px;
font-weight: 800;
line-height: 1;
cursor: pointer;
}
.pm-count-badge {
display: inline-flex;
align-items: center;
@@ -939,6 +1082,17 @@ select.name-input {
animation: score-over-limit-blink 0.7s ease-in-out infinite;
}
.stage-column-highlight {
background: linear-gradient(180deg, rgba(0, 140, 168, 0.08) 0%, rgba(13, 25, 49, 0.04) 100%);
border-top: 2px solid rgba(0, 140, 168, 0.35);
}
.score-input-stage-highlight {
border-color: #0d8a64;
background: linear-gradient(180deg, #effaf6 0%, #e8f6ff 100%);
box-shadow: inset 0 0 0 1px rgba(13, 138, 100, 0.18);
}
@keyframes score-over-limit-blink {
0%,
100% {
@@ -1049,7 +1203,7 @@ select.name-input {
}
.live-panel {
background: radial-gradient(circle at 15% 10%, #1a2653 0%, #101736 55%, #0b1026 100%);
background: #0d1931;
color: #fff;
min-height: 70vh;
position: relative;
@@ -1067,7 +1221,7 @@ select.name-input {
text-align: center;
font-size: 30px;
font-weight: 800;
color: #f1cf7a;
color: #ffffff;
}
.live-subtitle {
@@ -1156,7 +1310,7 @@ select.name-input {
height: 5px;
width: 100%;
border-radius: 999px;
background: linear-gradient(90deg, var(--red), #f66f67);
background: #ed2e23;
animation: progress-5s linear;
}
@@ -1173,9 +1327,10 @@ select.name-input {
.live-mode-root {
position: relative;
--live-footer-height: 74px;
--live-footer-offset: 16px;
padding-bottom: calc(var(--live-footer-height) + var(--live-footer-offset) + env(safe-area-inset-bottom));
--live-navy: #0d1931;
--live-blue: #008ca8;
--live-red: #ed2e23;
--live-white: #ffffff;
}
.live-mode-shell {
@@ -1183,29 +1338,30 @@ select.name-input {
min-height: 72vh;
border-radius: 18px;
overflow: hidden;
background-size: contain;
background-position: center;
background-repeat: no-repeat;
border: 1px solid rgba(255, 255, 255, 0.25);
box-shadow: 0 16px 38px rgba(7, 19, 42, 0.24);
display: grid;
grid-template-rows: 1fr auto;
border: 1px solid rgba(0, 140, 168, 0.5);
box-shadow: 0 22px 44px rgba(0, 0, 0, 0.45);
background: var(--live-navy);
}
.live-mode-overlay {
min-height: 72vh;
padding: 16px;
background: #171b3c;
padding: 16px 16px 12px;
background: var(--live-navy);
}
.live-mode-header h2 {
margin: 0;
color: rgba(240, 248, 255, 0.84);
color: var(--live-white);
font-size: clamp(22px, 3vw, 34px);
letter-spacing: 0.2px;
}
.live-mode-header p {
margin: 6px 0 12px;
color: rgba(240, 248, 255, 0.84);
font-weight: 600;
color: rgba(255, 255, 255, 0.78);
font-weight: 500;
}
.live-mode-grid {
@@ -1219,11 +1375,10 @@ select.name-input {
}
.live-screen-card {
border: 1px solid rgba(200, 223, 255, 0.28);
border: 1px solid rgba(0, 140, 168, 0.45);
border-radius: 14px;
background: #1a1e3f;
box-shadow: 0 8px 18px rgba(7, 19, 42, 0.18);
backdrop-filter: blur(3px);
background: #0d1931;
box-shadow: 0 8px 20px rgba(0, 0, 0, 0.2);
padding: 10px;
animation: fade-up 0.32s ease both;
}
@@ -1238,9 +1393,9 @@ select.name-input {
}
.live-focus-banner {
border: 1px solid rgba(168, 205, 242, 0.4);
border: 1px solid rgba(0, 140, 168, 0.45);
border-radius: 14px;
background: rgba(23, 27, 60, 0.9);
background: #0d1931;
padding: 10px 14px;
display: grid;
gap: 2px;
@@ -1252,7 +1407,7 @@ select.name-input {
font-size: 11px;
font-weight: 800;
letter-spacing: 0.9px;
color: rgba(201, 224, 248, 0.82);
color: rgba(255, 255, 255, 0.75);
text-transform: uppercase;
}
@@ -1261,8 +1416,8 @@ select.name-input {
font-size: clamp(34px, 6vw, 58px);
line-height: 0.95;
letter-spacing: 1.2px;
color: #f6d68a;
text-shadow: 0 3px 10px rgba(0, 0, 0, 0.35);
color: #ffffff;
text-shadow: 0 3px 12px rgba(0, 0, 0, 0.4);
}
.live-focus-banner.focus-a .live-focus-title,
@@ -1271,7 +1426,7 @@ select.name-input {
.live-focus-banner.focus-d .live-focus-title,
.live-focus-banner.focus-u .live-focus-title,
.live-focus-banner.focus-final .live-focus-title {
color: #d9e3f2;
color: #ffffff;
}
.live-screen-head {
@@ -1292,7 +1447,7 @@ select.name-input {
.live-screen-head h3 {
margin: 0;
color: #eaf4ff;
color: var(--live-white);
font-size: 17px;
}
@@ -1306,17 +1461,18 @@ select.name-input {
.live-chip {
padding: 4px 8px;
border-radius: 999px;
border: 1px solid rgba(130, 187, 230, 0.38);
background: rgba(27, 39, 75, 0.72);
color: #cae9ff;
border: 1px solid rgba(0, 140, 168, 0.45);
background: #0d1931;
color: rgba(255, 255, 255, 0.86);
font-size: 11px;
font-weight: 700;
letter-spacing: 0.4px;
}
.live-chip.strong {
border-color: rgba(255, 214, 124, 0.4);
color: #ffd67c;
border-color: rgba(237, 46, 35, 0.6);
color: #ffffff;
background: rgba(237, 46, 35, 0.16);
}
.live-swap-enter-active,
@@ -1339,9 +1495,8 @@ select.name-input {
.live-mode-footer {
margin-top: 0;
padding: 10px 12px;
border: 1px solid rgba(158, 198, 238, 0.38);
border-radius: 14px;
background: #1a1e3f;
border-top: 1px solid rgba(0, 140, 168, 0.45);
background: #0d1931;
display: grid;
grid-template-columns: 1fr 1fr 1fr;
align-items: center;
@@ -1350,10 +1505,10 @@ select.name-input {
}
.live-mode-fixed-footer {
position: fixed;
inset-inline: 24px;
bottom: calc(var(--live-footer-offset) + env(safe-area-inset-bottom));
box-shadow: 0 10px 24px rgba(8, 18, 39, 0.02);
position: static;
inset-inline: auto;
bottom: auto;
box-shadow: none;
}
.live-footer-slot {
@@ -1375,21 +1530,265 @@ select.name-input {
.live-footer-logo {
max-width: min(35vw, 200px);
padding: 10px;
padding: 8px 6px;
width: auto;
height: auto;
object-fit: contain;
filter: drop-shadow(0 1px 2px rgba(0, 0, 0, 0.2));
filter: drop-shadow(0 1px 2px rgba(0, 0, 0, 0.28));
}
.live-footer-slot.right .live-footer-logo {
max-width: min(45vw, 280px);
}
.live-tie-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
gap: 10px;
}
.live-tie-group-card {
border: 1px solid rgba(0, 140, 168, 0.45);
border-radius: 12px;
background: #0d1931;
padding: 8px;
}
.live-tie-group-title {
margin: 2px 0 8px;
font-size: 14px;
color: #ffffff;
letter-spacing: 0.2px;
}
.multi-round-cell {
min-width: 98px;
}
.position-board {
margin-bottom: 14px;
}
.position-board-head {
margin-bottom: 8px;
}
.position-board-toggle {
width: 100%;
border: 1px solid #d4deed;
border-radius: 12px;
background: linear-gradient(180deg, #ffffff 0%, #f3f8ff 100%);
display: flex;
justify-content: space-between;
align-items: center;
gap: 10px;
padding: 10px 12px;
text-align: start;
cursor: pointer;
}
.position-board-title {
font-size: 14px;
font-weight: 800;
color: #1b1f40;
}
.position-board-meta {
font-family: "IBM Plex Mono", monospace;
font-size: 12px;
color: #576284;
}
.position-board-alert {
margin: 6px 4px 0;
display: inline-block;
font-family: "IBM Plex Mono", monospace;
font-size: 11px;
font-weight: 800;
color: #ffffff;
background: #ed2e23;
border-radius: 999px;
padding: 2px 8px;
animation: position-overflow-text-flash 1.1s ease-in-out infinite;
}
.position-board-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));
gap: 12px;
}
.position-column {
border: 1px solid #d4deed;
border-radius: 12px;
background: #f7faff;
overflow: hidden;
}
.position-column.position-column-overflow {
border-color: #ed2e23;
animation: position-overflow-flash 1.1s ease-in-out infinite;
}
.position-column.position-column-overflow .position-column-head {
background: rgba(237, 46, 35, 0.14);
border-bottom-color: rgba(237, 46, 35, 0.5);
}
.position-column-head {
border-bottom: 1px solid #d8e2f2;
background: #edf3ff;
}
.position-column-toggle {
width: 100%;
border: 0;
background: transparent;
display: flex;
justify-content: space-between;
align-items: center;
gap: 10px;
padding: 10px 12px;
text-align: start;
cursor: pointer;
}
@keyframes position-overflow-flash {
0% {
box-shadow: 0 0 0 0 rgba(237, 46, 35, 0.08);
}
50% {
box-shadow: 0 0 0 3px rgba(237, 46, 35, 0.32);
}
100% {
box-shadow: 0 0 0 0 rgba(237, 46, 35, 0.08);
}
}
.position-column-title {
font-size: 14px;
font-weight: 700;
color: #1b1f40;
}
.position-column-count {
font-family: "IBM Plex Mono", monospace;
font-size: 12px;
color: #576284;
}
.position-column-count.danger {
color: #a31610;
font-weight: 800;
animation: position-overflow-text-flash 1.1s ease-in-out infinite;
}
.position-column-alert {
margin: 0 12px 8px;
display: inline-block;
font-family: "IBM Plex Mono", monospace;
font-size: 11px;
font-weight: 800;
color: #ffffff;
background: #ed2e23;
border-radius: 999px;
padding: 2px 8px;
animation: position-overflow-text-flash 1.1s ease-in-out infinite;
}
@keyframes position-overflow-text-flash {
0% {
opacity: 0.7;
}
50% {
opacity: 1;
}
100% {
opacity: 0.7;
}
}
.position-column-list {
min-height: 72px;
padding: 10px;
display: grid;
gap: 8px;
}
.position-card {
display: flex;
gap: 10px;
align-items: center;
padding: 8px;
border: 1px solid #d1dbed;
border-radius: 10px;
background: #ffffff;
cursor: grab;
}
.position-card:active {
cursor: grabbing;
}
.position-badge {
width: 26px;
height: 26px;
border-radius: 999px;
background: #1b1f40;
color: #fff;
display: inline-flex;
align-items: center;
justify-content: center;
font-family: "IBM Plex Mono", monospace;
font-size: 12px;
flex-shrink: 0;
}
.position-avatar {
width: 38px;
height: 38px;
border-radius: 50%;
object-fit: cover;
border: 1px solid #d4deed;
flex-shrink: 0;
}
.position-card-text {
min-width: 0;
}
.position-card-text .name-main {
margin: 0;
font-size: 13px;
}
.position-card-text .name-sub {
margin: 1px 0 0;
font-size: 11px;
}
.position-score {
margin: 4px 0 0;
font-family: "IBM Plex Mono", monospace;
font-size: 11px;
color: #556286;
}
.position-empty {
border: 1px dashed #cfd8ea;
border-radius: 10px;
padding: 12px;
text-align: center;
color: #7483a7;
font-size: 12px;
}
.position-actions {
margin-top: 8px;
display: flex;
justify-content: flex-end;
}
.score-input-compact {
width: 84px;
min-height: 36px;
@@ -1468,27 +1867,38 @@ select.name-input {
aspect-ratio: 16 / 10;
}
.live-score-table thead th {
background: #171b3c;
.live-score-table thead th,
.live-screen-card .score-table thead th {
background: #008ca8;
color: #ffffff;
}
.live-screen-card .score-table {
background: #0d1931;
}
.live-screen-card .score-table td {
color: #f2f8ff;
border-top-color: rgba(158, 186, 216, 0.22);
color: #ffffff;
border-top-color: rgba(0, 140, 168, 0.24);
background: #0d1931;
}
.live-screen-card .name-main {
color: #ffffff;
}
.live-screen-card .name-sub,
.live-screen-card .muted {
color: rgba(213, 232, 255, 0.72);
color: rgba(255, 255, 255, 0.72);
}
.live-screen-card .table-wrap {
border-color: rgba(158, 186, 216, 0.28);
background: #171b3c;
border-color: rgba(0, 140, 168, 0.32);
background: #0d1931;
}
.live-screen-card .qualified-row {
background: rgba(16, 160, 194, 0.12);
background: rgba(0, 140, 168, 0.16);
}
.live-podium {
@@ -1499,8 +1909,8 @@ select.name-input {
}
.podium-live-card .podium-col {
background: #1a1e3f;
border: 1px solid rgba(177, 205, 236, 0.26);
background: #0d1931;
border: 1px solid rgba(0, 140, 168, 0.34);
box-shadow: 0 18px 34px rgba(2, 10, 25, 0.45);
min-width: 0;
max-width: 330px;
@@ -1508,21 +1918,21 @@ select.name-input {
}
.podium-live-card .podium-col.pos-1 {
border-top: 10px solid rgba(231, 196, 95, 0.4);
background: #1a1e3f;
border-top: 10px solid #d4af37;
background: #0d1931;
height: 430px;
box-shadow: 0 22px 44px rgba(231, 196, 95, 0.15);
box-shadow: 0 22px 44px rgba(212, 175, 55, 0.2);
}
.podium-live-card .podium-col.pos-2 {
border-top: 10px solid rgba(184, 195, 215, 0.4);
background: #1a1e3f;
border-top: 10px solid #c0c0c0;
background: #0d1931;
height: 350px;
}
.podium-live-card .podium-col.pos-3 {
border-top: 10px solid rgba(207, 139, 69, 0.4);
background: #1a1e3f;
border-top: 10px solid #cd7f32;
background: #0d1931;
height: 320px;
}
@@ -1538,6 +1948,20 @@ select.name-input {
width: 150px;
height: 150px;
border-width: 6px;
border-color: rgba(0, 140, 168, 0.82);
background: #0d1931;
}
.podium-live-card .podium-col.pos-1 .podium-img {
border-color: #d4af37;
}
.podium-live-card .podium-col.pos-2 .podium-img {
border-color: #c0c0c0;
}
.podium-live-card .podium-col.pos-3 .podium-img {
border-color: #cd7f32;
}
.podium-live-card .podium-col.pos-1 .podium-img {
@@ -1575,7 +1999,7 @@ select.name-input {
}
.podium-live-card .podium-name.empty {
color: rgba(204, 220, 240, 0.78);
color: rgba(255, 255, 255, 0.72);
font-size: 22px;
-webkit-line-clamp: 2;
line-clamp: 2;
@@ -1585,20 +2009,32 @@ select.name-input {
.podium-live-card .podium-score {
background: rgba(255, 255, 255, 0.08);
color: #ffd888;
border-color: rgba(255, 255, 255, 0.18);
color: #ffffff;
border-color: rgba(0, 140, 168, 0.34);
margin-bottom: 0;
font-size: 16px;
padding: 10px 16px;
}
.podium-live-card .podium-col.pos-1 .podium-score {
border-color: #d4af37;
}
.podium-live-card .podium-col.pos-2 .podium-score {
border-color: #c0c0c0;
}
.podium-live-card .podium-col.pos-3 .podium-score {
border-color: #cd7f32;
}
.podium-live-card .podium-col.pos-1 .podium-score {
font-size: 18px;
padding: 12px 18px;
}
.podium-live-card .podium-medal-icon {
filter: drop-shadow(0 4px 10px rgba(0, 0, 0, 0.35));
filter: grayscale(1) brightness(1.2) drop-shadow(0 4px 10px rgba(0, 0, 0, 0.35));
font-size: 60px;
margin-top: 86px;
}
@@ -1774,7 +2210,7 @@ select.name-input {
}
.podium-live-card .podium-score-sub {
color: rgba(220, 234, 252, 0.86);
color: rgba(255, 255, 255, 0.82);
}
.toast {
@@ -1874,6 +2310,97 @@ select.name-input {
display: block;
}
.score-section-block {
border: 1px solid var(--score-group-border, var(--border));
border-radius: 12px;
background: var(--score-group-soft, #f7f9ff);
margin-bottom: 12px;
overflow: hidden;
}
.score-section-block.score-section-overflow {
border-color: #ed2e23;
animation: score-section-overflow-flash 1.1s ease-in-out infinite;
}
.score-section-toggle {
width: 100%;
border: 0;
background: transparent;
display: flex;
justify-content: space-between;
align-items: center;
gap: 10px;
padding: 10px 12px;
cursor: pointer;
color: var(--text);
font-weight: 800;
box-shadow: inset 4px 0 0 var(--score-group-accent, #7f8ca8);
}
.score-section-title {
text-align: start;
}
.score-section-meta {
font-family: "IBM Plex Mono", monospace;
font-size: 12px;
opacity: 0.8;
}
.score-section-alert {
margin: 0 12px 8px;
display: inline-block;
font-family: "IBM Plex Mono", monospace;
font-size: 11px;
font-weight: 800;
color: #ffffff;
background: #ed2e23;
border-radius: 999px;
padding: 2px 8px;
animation: score-section-overflow-text-flash 1.1s ease-in-out infinite;
}
.score-section-block .table-wrap {
border: 0;
border-top: 1px dashed var(--score-group-border, #d2daec);
border-radius: 0;
margin: 0;
}
.score-section-block.tie-break {
box-shadow: 0 8px 20px rgba(27, 31, 64, 0.08);
}
.score-section-block.tie-break .score-section-toggle {
background: var(--score-group-soft, rgba(127, 140, 168, 0.14));
box-shadow: inset 6px 0 0 var(--score-group-accent, #7f8ca8);
}
@keyframes score-section-overflow-flash {
0% {
box-shadow: 0 0 0 0 rgba(237, 46, 35, 0.1);
}
50% {
box-shadow: 0 0 0 3px rgba(237, 46, 35, 0.3);
}
100% {
box-shadow: 0 0 0 0 rgba(237, 46, 35, 0.1);
}
}
@keyframes score-section-overflow-text-flash {
0% {
opacity: 0.7;
}
50% {
opacity: 1;
}
100% {
opacity: 0.7;
}
}
.mobile-score-cards {
display: none;
}
@@ -2323,7 +2850,9 @@ select.name-input {
}
.live-settings-grid,
.inline-settings {
.inline-settings,
.stage-control-grid,
.stage-status-grid {
grid-template-columns: 1fr;
}
@@ -2339,11 +2868,6 @@ select.name-input {
grid-template-columns: 1fr;
}
.live-mode-root {
--live-footer-height: 62px;
--live-footer-offset: 10px;
}
.live-mode-shell {
border-radius: 12px;
min-height: 70dvh;
@@ -2373,7 +2897,7 @@ select.name-input {
}
.live-mode-fixed-footer {
inset-inline: 10px;
inset-inline: auto;
}
.live-footer-logo {
@@ -2384,6 +2908,10 @@ select.name-input {
max-width: min(40vw, 150px);
}
.live-tie-grid {
grid-template-columns: 1fr;
}
.status-row {
justify-content: flex-start;
}