html,body{background:#071522;color:#ecf5fb}.gb-page .p24spectator-shell{max-width:none}.gb-main{padding:18px 22px 34px}.gb-toolbar{display:flex;justify-content:space-between;align-items:center;gap:20px;margin:0 auto 14px;max-width:1900px;padding:18px 20px;border:1px solid #28475d;border-radius:18px;background:#0b1e2d}.gb-toolbar>div>span,.gb-branch>header span{display:block;font-size:11px;letter-spacing:.14em;font-weight:900;color:#5cb8ff}.gb-toolbar h1{margin:3px 0 2px;font-size:26px;color:#fff}.gb-toolbar p{margin:0;color:#a9c0d0}.gb-actions{display:flex;align-items:center;gap:7px;flex-wrap:wrap;justify-content:flex-end}.gb-actions a,.gb-actions button{appearance:none;border:1px solid #385c73;background:#102d43;color:#e9f4fb;border-radius:10px;padding:9px 12px;font:800 12px/1 system-ui;text-decoration:none;cursor:pointer}.gb-actions .active{background:#0b7a4b;border-color:#15915e;color:#fff}.gb-branch{max-width:1900px;margin:14px auto;border:1px solid #28475d;border-radius:20px;background:#081925;overflow:hidden}.gb-branch>header{height:72px;padding:12px 18px;display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid #28475d;background:#0c2131}.gb-branch>header h2{margin:2px 0 0;color:#fff;font-size:20px}.gb-branch>header small{color:#9cb5c6}.gb-viewport{position:relative;overflow:auto;min-height:620px;max-height:calc(100vh - 260px);background:radial-gradient(circle at 12% 5%,rgba(48,129,185,.12),transparent 25%),#071522}.gb-board{position:relative;min-width:max-content;transform-origin:top left;padding:26px 32px 34px}.gb-stages{display:flex;gap:88px;align-items:stretch;min-height:570px;position:relative;z-index:2}.gb-stage{width:280px;flex:0 0 280px;display:flex;flex-direction:column}.gb-stage h3{height:36px;margin:0 0 10px;display:flex;align-items:center;color:#b9d3e3;font-size:13px;text-transform:uppercase;letter-spacing:.08em}.gb-matches{flex:1;display:flex;flex-direction:column;justify-content:space-around;gap:16px}.gb-match{position:relative;border:1px solid #365a71;border-radius:13px;background:#0e2536;box-shadow:0 8px 22px rgba(0,0,0,.22);overflow:hidden;min-height:104px}.gb-match.finished{border-color:#3e718e}.gb-match.bye{border-color:#317556;background:#0d2a24}.gb-match.third-place{border-style:dashed}.gb-match-meta{display:flex;justify-content:space-between;gap:7px;padding:6px 9px;background:#0a1c2a;border-bottom:1px solid #28475d;color:#90adbf;font-size:10px;text-transform:uppercase;letter-spacing:.04em}.gb-match-meta b{font-weight:800;color:#bcd0dc}.gb-team{display:flex;align-items:center;justify-content:space-between;gap:8px;min-height:32px;padding:6px 10px;color:#e4eff6;border-bottom:1px solid rgba(45,79,99,.62);font-size:13px;font-weight:750}.gb-team.winner{background:linear-gradient(90deg,rgba(11,122,75,.34),rgba(11,122,75,.06));color:#fff}.gb-team.winner:before{content:'✓';color:#4ed38d;font-weight:1000}.gb-team b{margin-left:auto;white-space:nowrap;color:#fff;font-size:13px;font-weight:900}.gb-team em{font-style:normal;font-size:9px;color:#78d9a8;border:1px solid #317556;border-radius:999px;padding:2px 5px}.gb-score{padding:6px 10px;text-align:right;color:#fff;font-weight:900;font-size:13px;background:#0a1c2a}.gb-winner-stage{width:245px;flex-basis:245px}.gb-champion{min-height:132px;display:flex;flex-direction:column;justify-content:center;border-color:#99752e;background:linear-gradient(150deg,#30240f,#122638)}.gb-trophy{text-align:center;font-size:29px;color:#f2c657;margin:2px}.gb-champion .gb-team{justify-content:center;text-align:center;font-size:16px;border:0}.gb-connectors{position:absolute;inset:0;width:100%;height:100%;z-index:1;pointer-events:none;overflow:visible}.gb-connectors path{fill:none;stroke:#4b7895;stroke-width:2;vector-effect:non-scaling-stroke}.gb-empty{max-width:1000px;margin:60px auto;padding:50px;border:1px solid #2e5067;border-radius:18px;background:#0b1e2d;text-align:center}.gb-empty strong{display:block;font-size:22px;color:#fff}.gb-empty span{display:block;margin-top:7px;color:#9fb7c7}.gb-focus .gb-main{padding:8px}.gb-focus .gb-toolbar{max-width:none;margin-bottom:8px;padding:10px 14px}.gb-focus .gb-toolbar p{display:none}.gb-focus .gb-branch{max-width:none;margin:8px 0}.gb-focus .gb-viewport{max-height:calc(100vh - 122px);min-height:calc(100vh - 122px)}@media(max-width:800px){.gb-main{padding:8px}.gb-toolbar{align-items:flex-start;flex-direction:column}.gb-actions{justify-content:flex-start}.gb-branch>header{height:auto}.gb-stage{width:245px;flex-basis:245px}.gb-stages{gap:70px}.gb-viewport{max-height:none}}@media print{body{background:#fff!important;color:#000!important}.p24spectator-header,.p24spectator-footer,.gb-toolbar{display:none!important}.gb-main{padding:0!important}.gb-branch{max-width:none!important;border:0!important;background:#fff!important;break-inside:avoid}.gb-branch>header{background:#fff!important;color:#000!important;border-color:#777!important}.gb-branch>header h2{color:#000!important}.gb-viewport{overflow:visible!important;max-height:none!important;background:#fff!important}.gb-board{transform:none!important;padding:10px!important}.gb-match{background:#fff!important;color:#000!important;box-shadow:none!important;border-color:#777!important}.gb-team,.gb-match-meta,.gb-score{color:#000!important;background:#fff!important}.gb-connectors path{stroke:#555!important}.gb-actions{display:none!important}}
/* Undrawn future KO slots: occupy the full bracket without showing fictional teams/scores. */
.gb-match.gb-preview{border-style:dashed;border-color:#44647a;background:#0a1c2a;box-shadow:none}
.gb-match.gb-preview .gb-team{color:transparent;min-height:32px}
.gb-match.gb-preview .gb-match-meta b{color:#829eaf;font-weight:650;text-transform:none}
.gb-stage[data-gb-reseed-after="1"] h3:after{content:" · danach neue Setzung";text-transform:none;letter-spacing:0;font-weight:500;font-size:11px;color:#98b7c9;margin-left:6px}
@media print{.gb-match.gb-preview{background:#fff!important;border-style:dashed!important}.gb-match.gb-preview .gb-match-meta b{color:#444!important}}
/* Confirmed winners may appear in an undrawn future round without inventing a score or fixture. */
.gb-match.gb-preview.gb-projected .gb-team{color:#e4eff6}
.gb-match .gb-team.gb-team-projected{background:linear-gradient(90deg,rgba(25,116,166,.27),rgba(25,116,166,.07));color:#fff}
.gb-match .gb-team.gb-team-projected:before{content:'↳';color:#77c9f6;font-weight:900}
.gb-match.gb-preview.gb-projected .gb-match-meta b{color:#9fd8ff}
.gb-qualified{display:flex;flex-direction:column;gap:5px;padding:10px;border:1px dashed #48718d;border-radius:10px;background:#0e2536;color:#e5f3fa}
.gb-qualified strong{font-size:11px;color:#a9c8db;margin-bottom:2px}
.gb-qualified span{font-size:12px;padding:3px 6px;background:#18415a;border-radius:5px}
@media print{.gb-match.gb-preview.gb-projected .gb-team,.gb-qualified{color:#000!important}.gb-match .gb-team.gb-team-projected{color:#000!important;background:#ecf3f7!important}}

/* Jede Teamzeile erhält eine feste, rechtsbündige Punktespalte. Lange Namen
   dürfen umbrechen, aber weder Punktzahlen noch Siegerhäkchen verdrängen. */
.gb-match:not(.gb-champion) .gb-team>span{flex:1 1 auto;min-width:0;overflow-wrap:anywhere}
.gb-match:not(.gb-champion) .gb-team>b{flex:0 0 auto;min-width:24px;text-align:right;font-variant-numeric:tabular-nums}
.gb-match:not(.gb-champion) .gb-team.winner:before{flex:0 0 auto}
.gb-match-detail{padding:5px 10px;color:#b8d0df;background:#0a1c2a;font-size:10px;line-height:1.4;text-align:right;border-top:1px solid #28475d}
@media print{.gb-match-detail{background:#fff!important;color:#000!important}.gb-match:not(.gb-champion) .gb-team>b{color:#000!important}}
