Files
Cs2-Mapveto/client/src/stream-overview.css
T
SPP UserandClaude Haiku 5.5 fde3baafb5 Stream-Übersicht: Matches anklickbar, Einzelansicht pro Match
Karten und Listeneinträge der Stream-Übersicht führen zur Übersicht
des jeweiligen Matches (/stream/match/:matchId). Der Zuschauercode
bleibt geheim, daher wird nur die Match-ID verlinkt.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-26 00:15:37 +01:00

123 lines
7.7 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; }
/* Klickbare Karten und Listeneinträge führen zur Übersicht des jeweiligen Matches */
.so-link { display: block; color: inherit; text-decoration: none; }
.so-strip li .so-link { display: flex; align-items: baseline; gap: 10px; color: inherit; text-decoration: none; }
.so-link:hover { filter: brightness(1.15); }
.so-link:focus-visible { outline: 3px solid var(--brand-red); outline-offset: 4px; }