Files
Cs2-Mapveto/client/src/stream-overview.css
T
SPP UserandClaude Opus 5.5 8996294d7e Stream-Übersicht aller laufenden Vetos und Matches
/stream zeigt alle aktiven Matches als Karten (Veto mit Map-Board, Match
mit Live-Stand und Serie), dazu offene Lobbys und Ergebnisse. Raster passt
sich der Anzahl an, ab 7 Matches wird geblättert. Live per Socket, optional
mit STREAM_KEY geschützt, ohne Codes oder Verbindungsdaten.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-25 19:32:53 +01:00

117 lines
7.3 KiB
CSS
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/* ---------- Stream-Übersicht aller Matches (1920×1080) ---------- */
.so-root {
width: 100%; height: 100%; overflow: hidden;
display: grid; grid-template-rows: 104px 1fr 190px; padding: 0 56px;
color: var(--text); font-family: var(--body);
background:
radial-gradient(900px 600px at 0% 20%, rgba(52, 74, 153, .25), transparent 70%),
radial-gradient(900px 600px at 100% 20%, rgba(167, 42, 28, .22), transparent 70%),
#000;
}
.stream-transparent .so-root { background: transparent; }
.so-title { display: flex; align-items: center; gap: 18px; font: 600 30px var(--display); }
.so-count { padding: 4px 14px; border-radius: 4px; background: var(--surface-2); color: var(--muted); font-size: 24px; }
.so-count-live { background: var(--brand-red); color: #fff; }
/* Raster je nach Anzahl */
.so-grid { display: grid; gap: 24px; padding: 24px 0; min-height: 0; }
.so-grid.count-1 { grid-template-columns: 1fr; }
.so-grid.count-2 { grid-template-columns: 1fr 1fr; }
.so-grid.count-3, .so-grid.count-4 { grid-template-columns: 1fr 1fr; grid-template-rows: 1fr 1fr; }
.so-grid.count-5, .so-grid.count-6 { grid-template-columns: repeat(3, 1fr); grid-template-rows: 1fr 1fr; }
.so-empty { grid-column: 1 / -1; display: grid; place-content: center; text-align: center; color: var(--muted); }
.so-empty h2 { font: 700 64px var(--display); color: var(--text); margin-bottom: 12px; }
.so-empty p { font-size: 28px; }
/* Karte */
.so-card {
position: relative; overflow: hidden; min-height: 0; border-radius: 10px;
display: grid; grid-template-rows: auto auto 1fr; gap: 10px; padding: 22px 28px;
background: rgba(17, 20, 30, .82); box-shadow: inset 0 0 0 2px rgba(255, 255, 255, .06);
}
.so-card.is-playing { box-shadow: inset 0 0 0 3px var(--brand-red), 0 0 40px rgba(167, 42, 28, .35); }
.so-card-art { opacity: .3; }
.so-card-art::after { background: linear-gradient(180deg, rgba(0, 0, 0, .4), rgba(0, 0, 0, .9)); }
.so-card > :not(.so-card-art) { position: relative; z-index: 1; }
.so-card-head { display: flex; justify-content: space-between; align-items: center; font: 600 22px var(--display); color: var(--muted); }
.so-badge { padding: 3px 12px; border-radius: 4px; background: var(--surface-2); color: var(--text); font-size: 20px; }
.so-badge.badge-live { background: var(--brand-red); color: #fff; }
.so-teams { display: grid; grid-template-columns: 1fr auto 1fr; align-items: center; gap: 24px; }
.so-team { font: 700 52px/1 var(--display); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.so-team.a { color: var(--team-a); text-align: right; }
.so-team.b { color: var(--team-b); }
.so-series { font: 700 56px var(--display); font-variant-numeric: tabular-nums; }
.so-series i { font-style: normal; color: var(--muted); margin: 0 .15em; }
.so-series .so-vs { font-size: 32px; color: var(--muted); margin: 0; }
/* Veto */
.so-veto { display: grid; grid-template-rows: auto 1fr; gap: 14px; min-height: 0; }
.so-turn { display: flex; align-items: baseline; justify-content: center; gap: 14px; font: 600 32px var(--display); }
.so-turn .a { color: var(--team-a); }
.so-turn .b { color: var(--team-b); }
.so-turn small { font: 500 20px var(--body); color: var(--muted); }
.so-vmaps { display: grid; grid-template-columns: repeat(var(--count), minmax(0, 1fr)); gap: 10px; min-height: 0; }
.so-vmap { --by: var(--line-strong); position: relative; overflow: hidden; border-radius: 6px; display: flex; align-items: flex-end; padding: 10px; min-height: 0; }
.so-vmap.by-A { --by: var(--team-a); }
.so-vmap.by-B { --by: var(--team-b); }
.so-vmap-name { position: relative; z-index: 2; font: 700 24px/1 var(--display); text-shadow: 0 2px 8px #000; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.so-vmap .map-art::after { background: linear-gradient(180deg, transparent 40%, rgba(0, 0, 0, .85)); }
.so-vmap.status-banned { filter: grayscale(.95) brightness(.45); }
.so-vmap.status-banned::after {
content: ''; position: absolute; inset: 0; z-index: 3;
background: linear-gradient(to top right, transparent calc(50% - 3px), var(--by) calc(50% - 3px), var(--by) calc(50% + 3px), transparent calc(50% + 3px));
}
.so-vmap.status-picked::before, .so-vmap.status-decider::before { content: ''; position: absolute; inset: 0; z-index: 3; border-radius: 6px; box-shadow: inset 0 0 0 4px var(--by); }
.so-vmap.status-decider { --by: #fff; }
/* Live */
.so-live { display: grid; grid-template-rows: auto 1fr auto; justify-items: center; align-items: center; min-height: 0; }
.so-map { display: flex; align-items: baseline; gap: 16px; }
.so-map strong { font: 700 40px var(--display); }
.so-map span { font: 600 24px var(--display); color: var(--pending); }
.so-score { display: flex; align-items: center; gap: 22px; }
.so-score b { font: 700 140px/0.9 var(--display); font-variant-numeric: tabular-nums; }
.so-score b.a { color: var(--team-a); }
.so-score b.b { color: var(--team-b); }
.so-score b.won { text-shadow: 0 0 30px currentColor; }
.so-score i { font: 700 70px var(--display); font-style: normal; color: var(--muted); }
.so-maps { list-style: none; display: flex; gap: 10px; padding: 0; margin: 0; }
.so-maps li { display: flex; gap: 10px; align-items: baseline; padding: 6px 14px; border-radius: 4px; background: rgba(0, 0, 0, .55); font: 600 22px var(--display); color: var(--muted); }
.so-maps li.is-current { color: var(--text); box-shadow: inset 0 -3px 0 var(--brand-red); }
.so-maps li b { color: var(--text); font-variant-numeric: tabular-nums; }
.so-setup { align-self: center; justify-self: center; font: 600 32px var(--display); color: var(--muted); }
/* Dichte: weniger Matches = größere Schrift */
.density-1 .so-team { font-size: 96px; }
.density-1 .so-series { font-size: 110px; }
.density-1 .so-score b { font-size: 260px; }
.density-1 .so-map strong { font-size: 60px; }
.density-1 .so-vmap-name { font-size: 40px; }
.density-1 .so-turn { font-size: 44px; }
.density-3 .so-team { font-size: 38px; }
.density-3 .so-series { font-size: 42px; }
.density-3 .so-score b { font-size: 96px; }
.density-3 .so-score .side-icon { width: 32px; height: 32px; }
.density-3 .so-map strong { font-size: 30px; }
.density-3 .so-vmap-name { font-size: 18px; }
.density-3 .so-turn { font-size: 26px; }
.density-3 .so-maps li { font-size: 18px; padding: 4px 10px; }
/* Unten: Lobbys und Ergebnisse */
.so-bottom { display: grid; grid-template-columns: 1fr 1fr; gap: 24px; padding-bottom: 28px; min-height: 0; }
.so-strip { background: rgba(17, 20, 30, .82); border-radius: 10px; padding: 16px 24px; overflow: hidden; border-top: 4px solid var(--line-strong); }
.so-strip:last-child { border-top-color: var(--brand-red); }
.so-strip h3 { font: 700 26px var(--display); color: var(--muted); margin: 0 0 10px; }
.so-strip ul { list-style: none; padding: 0; margin: 0; display: grid; grid-template-columns: 1fr 1fr; gap: 6px 28px; }
.so-strip li { display: flex; align-items: baseline; gap: 10px; font: 600 26px var(--display); white-space: nowrap; overflow: hidden; }
.so-strip li .a { color: var(--team-a); }
.so-strip li .b { color: var(--team-b); }
.so-strip li .vs { color: var(--muted); font-size: 20px; }
.so-strip li small { font: 500 18px var(--body); color: var(--muted); }
.so-strip li b { font-variant-numeric: tabular-nums; }
.so-strip li .won { text-decoration: underline; text-underline-offset: 5px; }
.so-none { color: var(--muted); font-size: 22px; margin: 0; }