:root { --bg: #111827; --panel: #020617; --panel-soft: #0b1120; --accent: #38bdf8; --accent-soft: rgba(56, 189, 248, 0.15); --text-main: #e5e7eb; --text-muted: #9ca3af; --danger: #ef4444; --success: #22c55e; --radius-lg: 18px; --border-subtle: 1px solid rgba(148, 163, 184, 0.35); --shadow-soft: 0 20px 45px rgba(15, 23, 42, 0.85); --transition-fast: 180ms ease-out; --colorStartDiv: #0b1120; --panelBgLogo: #4a2f96; --font-heading: clamp(1.5rem, 6vh, 4rem); --font-sub: clamp(1rem, 3.5vh, 2.2rem); --logo-size: clamp(150px, 40vh, 500px); } * { box-sizing: border-box; } head > * { pointer-events: none; } html, body { margin: 0; padding: 0; height: 100vh; width: 100vw; overflow: hidden; position: fixed; } body { display: flex; justify-content: center; align-items: stretch; font-family: system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; background-color: var(--bg); color: var(--text-main); overflow: hidden; } /* WebSocket error overlay */ .errorws { position: fixed; inset: 0; display: flex; flex-direction: column; justify-content: center; align-items: center; gap: 16px; padding: 5vh 5vw; background: radial-gradient(circle at top, #020617 0, #020617 55%); z-index: 10000; } .errorws .logoimg { max-width: var(--logo-size); height: auto; margin-bottom: 2vh; filter: drop-shadow(0 12px 30px rgba(0, 0, 0, 0.65)); } .errortext { margin: 0; font-size: clamp(1.8rem, 8vw, 5rem); line-height: 1.1; max-width: 90vw; font-weight: 500; letter-spacing: 0.12em; text-transform: uppercase; color: var(--text-main); text-align: center; } .errortextSmall { margin: 10px; font-size: clamp(1rem, 3vw, 2rem); opacity: 0.8; font-weight: 300; letter-spacing: 0.12em; color: var(--text-main); text-align: center; } /* Startup logo overlay */ .logobg { padding: 4vh; position: fixed; inset: 0; display: flex; flex-direction: column; justify-content: center; align-items: center; gap: 12px; background-color: var(--panelBgLogo); z-index: 1000; transition: opacity 0.5s ease; } .logoimg { width: auto; max-height: 45vh; max-width: 80vw; object-fit: contain; /* filter: drop-shadow(0 18px 40px rgba(15, 23, 42, 0.4)); */ } .logotext { margin: 0; font-size: clamp(1.8rem, 7vh, 6rem); text-align: center; width: 90vw; line-height: 1.2; /* Forces single line for names/titles to prevent overflow */ white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .logotext, .logoctext { color: var(--text-color) !important; text-align: center; font-weight: 400; margin-top: 1vh; } .logoctext { margin: 0; font-size: clamp(2rem, 7vw, 12rem); } /* 4. Responsive adjustments for different screen ratios */ @media (aspect-ratio: 4/3), (aspect-ratio: 10/7) { /* Tablet specific tweaks (iPad/Android Tabs) */ :root { --logo-size: 30vh; } .logotext { font-size: 5vh; } } @media (min-width: 1921px) { /* Ultra-large TV/4K tweaks */ .logotext { letter-spacing: 0.25em; /* Better legibility at distance */ } } /* Main scoreboard container – full screen */ .pagediv { flex: 1; height: 100%; width: 100vw; display: flex; flex-direction: column; gap: 2vh; padding: 2.2vh 2.4vw; box-sizing: border-box; background: radial-gradient(circle at top left, var(--bg-soft), transparent 60%), radial-gradient(circle at bottom right, var(--bg-soft), transparent 60%); } .pagediv.manuel { padding-right: clamp(60px, 2.4vw, 2.4vw); } /* Common row styling */ .display-row { flex: 1; display: flex; align-items: center; padding: 30px; border-radius: var(--radius-lg); background: linear-gradient(135deg, var(--panel-soft), var(--panel)); border-bottom: var(--border-subtle); position: relative; overflow: hidden; box-shadow: var(--shadow-soft); } .display-row::before { content: ""; position: absolute; inset: 0; background: radial-gradient(circle at top left, var(--bg-soft), transparent 55%); opacity: 0.5; pointer-events: none; } .row1text, .row2text p, .row3 > p, .start_text { margin: 0; padding: 0; line-height: 1.1; } /* Row 1: athlete name */ .row1text { font-size: min(8vh, 4.6vw); font-weight: 600; letter-spacing: 0.08em; text-transform: uppercase; white-space: nowrap; } /* Row 2: club, program, start/stop */ .row2 { justify-content: space-between; gap: 2vw; } .row2::after { content: ""; position: absolute; inset: 0; background: radial-gradient(circle at bottom right, var(--colorStartDiv), transparent 55%); opacity: 0.5; pointer-events: none; } .row2text { display: flex; flex-direction: column; gap: 0.8vh; width: 50vw; height: 100%; } .row2_1text { color: var(--text-muted); } .row2_2text { font-weight: 600; } /* Start / stop pill */ .start_div { width: 35vw; height: 100%; display: flex; justify-content: end; align-items: center; } .start_text { display: flex; font-weight: 700; letter-spacing: 0.1em; text-transform: uppercase; } /* Row 3: D-score and total */ .row3 { justify-content: space-between; gap: 2vw; } .row3 > p { font-size: min(9vh, 5vw); font-weight: 700; } .row3_1text { color: var(--color-note-l); } .row3_2text { color: var(--color-note-r); } /* Existing #score and char/row styles if you use them elsewhere */ #score { display: flex; flex-direction: column; justify-content: center; align-items: center; width: 100%; height: 100%; } .char { display: flex; justify-content: center; align-items: center; font-size: 40vw; line-height: 1; } .row { display: flex; justify-content: center; align-items: center; width: 100%; font-size: 20vw; } /* Landscape / portrait logo scaling */ @media (orientation: landscape) { .logoimg { max-height: 60vh; } } @media (orientation: portrait) { .logoimg { max-width: 60vw; } } /* Small screens – keep everything readable */ @media (max-width: 768px) { .pagediv { padding: 1.6vh 3vw; gap: 1.4vh; } .display-row { padding: 1.4vh 3vw; } .row2 { flex-direction: column; align-items: flex-start; } .start_div { align-self: flex-end; min-width: 40vw; } } .noWsConnection { position: fixed; bottom: 20px; right: 20px; transform: rotate(270deg); transform-origin: right bottom; } .rotator { display: flex; align-items: center; gap: 6px; transform: translateX(100%); } .noWsConnection img { width: 20px; height: 20px; object-fit: contain; } .noWsConnection p { font-size: 20px; color: var(--text-muted); margin: 0; letter-spacing: 1.1px; }