/* ===================== roster.php ("rosterpage-" + "rh-" prefixes) =====================
   Cleaned up 2026-08-11: this file used to be ~2250 lines of teleportHQ-generated
   ".rosterpage-*" boilerplate CSS from the page's original pre-redesign layout (numbered
   ".rosterpage-container287" style classes, one per div). Only the small "Ansicht"-mode team
   header banner at the top of the page (team logo/name/GM/Team Value/Durchschnittsalter) still
   uses the original ".rosterpage-*" markup — everything the 2026-08-04 RosterHub redesign
   (see docs/CLAUDE.md project history) replaced now uses the "rh-*" design system instead,
   which used to live inline in roster.php's own <style> block and has been moved here too.
   Dead ".rosterpage-*" classes (draftrights/draftpicks/cap/fa sections, unused container/
   dropdown/image variants) were deleted outright — verified zero references left in
   roster.php before removing anything. ".rh-pill" (+ color variants) moved to css/dyne.css
   instead of staying here — it's duplicated verbatim in inc_trade_tradeblock.php too, so it's
   genuinely shared, not roster.php-specific. Colors that depend on the team's color1/fontcol1
   (set per request by PHP) are CSS custom properties (--rh-color1 etc.), defined in a small
   remaining inline <style> block in roster.php — everything else here is fully static. */

/* ----- still-live "Ansicht" team header banner (pre-redesign teleportHQ markup) ----- */
.rosterpage-team-profile {
  width: 100%;
  height: 100Px;
  display: flex;
  position: relative;
  max-width: 1360px;
  align-self: flex-start;
  align-items: center;
  flex-direction: row;
  justify-content: flex-start;
  background-color: white;
}
.rosterpage-container001 {
  flex: 0 0 auto;
  color: #fdbb30;
  width: 10%;
  height: 100%;
  display: flex;
  align-self: center;
  align-items: flex-start;
  flex-direction: column;
  justify-content: center;
}
.rosterpage-image {
  flex: 0 0 auto;
  width: auto;
  height: 90%;
  align-self: center;
  object-fit: cover;
  border-radius: var(--dl-radius-radius-radius4);
}
.rosterpage-container002 {
  flex: 0 0 auto;
  width: 30%;
  height: 100%;
  display: flex;
  align-self: center;
  align-items: center;
  flex-direction: column;
  justify-content: center;
}
.rosterpage-text007 {
  width: auto;
  height: auto;
  align-self: center;
  margin-bottom: 0px;
}
.rosterpage-spacer {
  flex: 0 0 auto;
  width: 35%;
  height: 100%;
  display: flex;
  align-self: center;
  align-items: center;
  flex-direction: column;
  justify-content: center;
}
.rosterpage-container003 {
  flex: 0 0 auto;
  width: 20%;
  height: 100%;
  display: flex;
  flex-direction: column;
  background-color: var(--dl-color-gray-white);
}
.rosterpage-container004 {
  width: 100%;
  height: 12.5%;
  display: flex;
}
.rosterpage-container005 {
  width: 100%;
  height: 25%;
  display: flex;
}
.rosterpage-container006 {
  flex: 0 0 auto;
  width: 50%;
  height: 100%;
  display: flex;
  align-items: center;
  font-weight: bold;
  flex-direction: column;
  justify-content: center;
}
.rosterpage-container007 {
  width: 50%;
  height: 100%;
  display: flex;
  align-items: center;
  flex-direction: column;
  justify-content: center;
}
.rosterpage-container008 {
  width: 100%;
  height: 25%;
  display: flex;
}
.rosterpage-container009 {
  flex: 0 0 auto;
  width: 50%;
  height: 100%;
  display: flex;
  align-items: center;
  font-weight: bold;
  flex-direction: column;
  justify-content: center;
}
.rosterpage-container010 {
  flex: 0 0 auto;
  width: 50%;
  height: 100%;
  display: flex;
  align-items: center;
  flex-direction: column;
  justify-content: center;
}
.rosterpage-container011 {
  width: 100%;
  height: 25%;
  display: flex;
}
.rosterpage-container012 {
  flex: 0 0 auto;
  width: 50%;
  height: 100%;
  display: flex;
  align-items: center;
  font-weight: bold;
  flex-direction: column;
  justify-content: center;
}
.rosterpage-container013 {
  flex: 0 0 auto;
  width: 50%;
  height: 100%;
  display: flex;
  align-items: center;
  flex-direction: column;
  justify-content: center;
}
.rosterpage-container014 {
  width: 100%;
  height: 12.5%;
  display: flex;
}

/* Kompakte mobile Beschriftungen (Birdrechte/Optionen/Trademarker-Spalten, siehe
   roster_mobile_label() in roster.php) - Desktop zeigt standardmaessig den vollen Text. */
.roster-mobile-text {
  display: none;
}
@media(max-width: 479px) {
  .roster-full-text {
    display: none;
  }
  .roster-mobile-text {
    display: inline;
  }
  .rosterpage-team-profile {
    height: 50Px;
  }
  .rosterpage-container002 {
    width: 40%;
    font-size: 10Px;
  }
  .rosterpage-spacer {
    width: 10%;
  }
  .rosterpage-container003 {
    width: 40%;
    font-size: 8Px;
  }
  .rosterpage-container006 {
    font-size: 8Px;
  }
  .rosterpage-container008 {
    font-size: 8Px;
  }
}

/* ===================== rh- design system (RosterHub, moved from inline <style> 2026-08-11) =====================
   Team colors that used to be interpolated directly as PHP variables ($color1/$fontcol1/
   $color1_text) are now CSS custom properties, set per-request in a small inline <style> block
   in roster.php (--rh-color1, --rh-fontcol1, --rh-color1-text). See css/dyne.css for .rh-pill +
   its color variants — shared with inc_trade_tradeblock.php, not roster.php-specific. */
.rh-page { width: 100%; max-width: 1360px; margin: 0 auto; background-color: #ffffff; }
/* Hamburger-Icon bleibt (User-Wunsch 2026-08-07: "soll schon ganz links sein") am
   TATSAECHLICHEN linken Bildschirmrand - dafuer aus dem Flex-Fluss von .mainnav-header
   herausgeloest (position:fixed statt als Flex-Item), sonst wuerde es zusammen mit dem
   Rest der Leiste mitzentriert (das war der vorherige, vom User verworfene Versuch: die
   ganze .mainnav-header auf max-width:1360 zu zentrieren, wodurch AUCH das Hamburger-Icon
   nach rechts rutschte). Kein eigener Hintergrund mehr noetig (anders als im ersten
   Versuch) - das ::before auf .mainnav-header weiter unten zieht den dunklen Leisten-
   Hintergrund wieder ueber die volle Breite, direkt bis unter das Hamburger-Icon.
   display:none per Default, nur im Standalone-Modus (also NICHT im iframe, siehe
   html.dyne-bg-standalone weiter unten bei .mainnav-header) wieder eingeblendet - User-
   Wunsch 2026-08-07: Team-/Saison-Auswahl (siehe .rh-navlocal) sollen AUCH im eingebetteten
   iframe sichtbar/nutzbar bleiben, das GLOBALE Hamburger-Menue (Team Management, Stats
   Center, Login/Logout usw. - fuer ein eingebettetes Widget ohnehin irrelevant, fuehrt nur
   auf andere Seiten) aber weiterhin nicht. */
.mainnav-hamburger-wrap { position: fixed; left: 0; top: 0; z-index: 999999; display: none; }
html.dyne-bg-standalone .mainnav-hamburger-wrap { display: inline-flex; }
/* Notifications-Icon (Team-Logo rechts oben) hat dasselbe Problem wie das Hamburger-Icon
   oben, nur spiegelverkehrt: es ist ein Flex-Kind von .mainnav-header, das hier auf
   max-width:1360px zentriert ist (siehe Kommentar oben) - das margin-left:auto aus
   nav.php schiebt es dadurch nur an den rechten Rand dieser zentrierten Box (= rechte
   Kante von .rh-page, also "ueber dem Inhalt"), nicht an den echten Bildschirmrand
   (User-Report 2026-08-16). Fix analog zum Hamburger-Icon: aus dem zentrierten Flex-
   Fluss herausgeloest und per position:fixed an die tatsaechliche rechte Kante gesetzt.
   !important noetig, weil nav.php's eigene ".ntf-badge-wrap { position: relative; }"
   (fuer den absolut positionierten Badge-Zaehler .ntf-count) im <head> NACH dieser
   Datei ausgegeben wird und bei gleicher Spezifitaet sonst gewinnen wuerde (derselbe
   Load-Order-Grund wie beim .pprofile-img-Fix auf profile.php). position:fixed
   bleibt trotzdem ein gueltiger Containing Block fuer .ntf-count. */
.ntf-badge-wrap { position: fixed !important; top: 2px; right: 0; z-index: 999999; }
/* .ntf-pop (Popover beim Klick auf das Icon) bekommt dasselbe position:fixed wie .ntf-badge-wrap
   direkt darueber - sonst haengt es weiterhin als absolut positioniertes Kind von .ntf-nav-wrap
   (das selbst nie aus dem zentrierten Flex-Fluss geloest wurde) am rechten Rand der 1360px-Box
   statt am echten Bildschirmrand, wo das Icon jetzt sichtbar sitzt (User-Report 2026-08-17:
   Popup oeffnet rechtsbuendig zum Seiteninhalt statt zum Seitenrand). top:40px ist kein
   geratener Wert, sondern badge top(2px) + Icon-Hoehe(28px img + 2px border) + das
   margin-top:8px aus nav.php's .ntf-pop-Regel - reproduziert exakt die Position, die
   top:100%+margin-top:8px im nicht-zentrierten Normalfall ergeben. WICHTIG: top/right brauchen
   ebenfalls !important - nav.php's eigenes .ntf-pop (top:100%; right:0;) steht als <style>-Block
   im <head> NACH dieser Datei und gewinnt bei gleicher Spezifitaet sonst wieder (derselbe Grund
   wie beim !important auf .ntf-badge-wrap oben). Ohne !important auf top haette man
   position:fixed (von hier) + top:100% (von nav.php) kombiniert - bei position:fixed ohne
   positionierten/transformierten Vorfahren zaehlt top:100% vom VIEWPORT, das Popup landete dann
   eine ganze Bildschirmhoehe zu tief und schien "nicht mehr aufzugehen" (User-Report 2026-08-17,
   Folgefehler der ersten Fassung dieser Regel ohne !important). */
.ntf-pop { position: fixed !important; top: 40px !important; right: 0 !important; }
/* .gst-badge-wrap/.gst-pop (Login-Hinweis fuer ausgeloggte Besucher, 2026-08-18) sitzen im
   selben .ntf-nav-wrap-Slot wie .ntf-badge-wrap/.ntf-pop oben, brauchen aber dieselbe
   position:fixed-Herauslösung aus dem zentrierten .mainnav-header - wurden beim Anlegen des
   Features nicht mitgezogen, darum landete das DYNE-Logo (User: "Teamlogo") bei ausgeloggten
   Besuchern wieder im zentrierten Flex-Fluss statt am echten Bildschirmrand (User-Report
   2026-08-18: "in 2. Zeile rechtsbuendig oberhalb des Seiteninhalts"). 1:1 dieselben Werte,
   !important auf jeder Property aus demselben Grund wie oben (siehe [[feedback-roster-profile-navbar-important-pitfall]]). */
.gst-badge-wrap { position: fixed !important; top: 2px !important; right: 0 !important; z-index: 999999 !important; }
.gst-pop { position: fixed !important; top: 40px !important; right: 0 !important; }
/* Team-/Saison-Auswahl + Export-Button bleiben IN der bestehenden Hauptnav-Leiste
   (.mainnav-header, EINE Leiste, User-Wunsch: keine zweite Zeile darunter), werden aber -
   jetzt wo das Hamburger-Icon nicht mehr mitzaehlt (siehe oben) - als einziger verbliebener
   Flex-Inhalt ueber .mainnav-header selbst (max-width:1360 + margin:auto, der klassische
   "left:0;right:0;max-width;margin:auto"-Zentriertrick fuer fixierte Elemente) auf die
   Breite von .rh-page zentriert. Der innere .rh-navlocal-Wrapper (width:100% davon, 20px
   Padding beidseitig wie .rh-subnav) sorgt dafuer, dass Team wählen/Saison wählen links UND
   der Speicher-Button rechts (dessen bestehendes margin-left:auto ihn an den rechten Rand
   DIESES Wrappers schiebt) exakt ueber der linken/rechten Kante des Seiteninhalts sitzen.
   Nur hier in roster.php ueberschrieben (spaetere Regel gleicher Spezifitaet im selben
   <style>-Block gewinnt gegen render_main_nav_css()) - die max-width-Zentrierung ist
   roster.php-spezifisch (haengt an .rh-page). Die "auch im iframe sichtbar"-Regel selbst
   (display:flex statt nur bei html.dyne-bg-standalone) ist seit 2026-08-08 zentral in
   nav.php (.mainnav-header-has-pagelocal, greift automatisch fuer JEDE Seite mit
   $page_local_html) - die hiesigen Werte sind identisch dazu und damit redundant, aber
   ungefaehrlich (gleiche Spezifitaet+Wert kollidiert nicht).
   Weil .mainnav-header dadurch schmaler als der Viewport wird, klafft sonst eine Luecke
   (Seitenhintergrundbild statt dunkler Leiste) zwischen dem weiterhin volle-Breite
   verankerten Hamburger-Icon und dem jetzt zentrierten Rest (User-Report 2026-08-07,
   Screenshot). Das ::before erzeugt dafuer einen zusaetzlichen, davon unabhaengigen
   Hintergrund-Balken ueber die komplette Viewport-Breite (klassischer "full-bleed"-Trick:
   left:50%+width:100vw+margin-left:-50vw hebt die Begrenzung durch die max-width des
   Elternelements auf) - exakt in der Hoehe von .mainnav-header (top/bottom:0 relativ dazu),
   aber mit z-index:-1 HINTER dem eigentlichen Leisten-Inhalt (und damit auch hinter dem per
   eigenem z-index:999999 davorliegenden Hamburger-Icon), sodass es rein optisch die Luecke
   schliesst, ohne Klicks auf darunterliegende Seiteninhalte abzufangen.
   display:flex unbedingt (nicht wie in nav.php erst per html.dyne-bg-standalone) - User-
   Wunsch 2026-08-07: die seiteninternen Controls (.rh-navlocal) sollen AUCH im iframe
   sichtbar bleiben, nicht nur ausserhalb. syncMainNavHeaderHeight() (siehe render_main_nav()
   in nav.php) laeuft dadurch jetzt auch im iframe korrekt (die Funktion ueberspringt die
   Hoehen-Synchronisierung nur, wenn .mainnav-header display:none ist). */
.mainnav-header { max-width: 1360px; margin: 0 auto; position: fixed; display: flex; }
.mainnav-header::before { content: ""; position: absolute; top: 0; bottom: 0; left: 50%; width: 100vw; margin-left: -50vw; background-color: #2c3e50; z-index: -1; }
.rh-navlocal { width: 100%; box-sizing: border-box; padding: 0 20px; display: flex; align-items: center; flex-wrap: wrap; }
/* Ansicht/Managen-Umschalter jetzt ein echter Segmented-Toggle wie profile.php's Regular
   Season/Playoffs-Umschalter (.epp-seg dort, User-Wunsch 2026-08-17: "in die obere Navleiste,
   so ein Umschalter wie bei profile.php"). Ersetzt die alte, separate .rh-subnav-Leiste
   komplett - die Admin-Modus-Checkbox (.mode-toggle/.admin-label unten) ist mit in
   .rh-navlocal umgezogen, darum hier ohne .rh-subnav-Ahnen-Selektor mehr. Als erstes Kind
   von .rh-navlocal sitzt der Umschalter automatisch buendig zur linken Kante des
   Seiteninhalts (dieselbe 20px-Innenpolsterung wie .rh-page), Team wählen/Saison-Auswahl
   folgen direkt danach in derselben Zeile (User-Wunsch: "rechts daneben"). */
.rh-seg { display: inline-flex; background: #1a2733; border-radius: 16px; padding: 2px; gap: 2px; margin-right: 12px; }
.rh-seg a { font: inherit; font-size: 11.5px; font-weight: 600; padding: 5px 12px; border-radius: 14px; color: #aab5c0; text-decoration: none; white-space: nowrap; }
.rh-seg a.active { background: #2c3e50; color: #fff; box-shadow: 0 0 0 1px #44525f inset; }
.mode-toggle { display: flex; margin-left: auto; align-items: center; gap: 10px; }
/* CSV-Export-Button (User-Wunsch 2026-09-10): jetzt rechts vom Admin-Modus-Schalter statt links
   davon, beide zusammen weiterhin rechtsbuendig zur Inhaltsspalte - gleiches Muster wie
   .rh-copy-btn oben: eigenes margin-left:auto fuer den Fall ohne sichtbaren .mode-toggle
   (normaler GM/Coach, kein Admin), per Sibling-Selektor auf festen Abstand reduziert, wenn er
   direkt auf .mode-toggle folgt. */
.rh-export-btn { margin-left: auto; margin-right: 0; }
.mode-toggle + .rh-export-btn { margin-left: 14px; }
/* .rh-select styling (+ its own margin-right:8px spacer): merged into the shared
   ".season-select, ..." rule in css/dyne.css (consolidated 2026-08-23, was byte-identical to
   .dpp-select/.hof-select/etc. apart from that margin-right, which stays there as its own rule). */
@media (max-width: 767px) {
	.rh-navlocal .mainnav-thq-dropdown { margin-right: 8px; }
	.rh-navlocal .mainnav-dropdown-toggle { padding-left: 8px; padding-right: 8px; }
	.rh-navlocal .rh-export-btn { padding-left: 8px; padding-right: 8px; margin-right: 8px; }
	.rh-navlocal .rh-copy-btn { padding-left: 8px; padding-right: 8px; }
}
.admin-label { color: #c9d3dc; font-size: 11.5px; display: flex; align-items: center; gap: 4px; white-space: nowrap; }
/* "Rotation kopieren"-Button (In-Game Setup, User-Wunsch 2026-09-01): direkt rechts vom Admin-
   Modus-Schalter, beide zusammen rechtsbuendig zur Inhaltsspalte. margin-left:auto sitzt hier (statt
   auf einem gemeinsamen Wrapper) direkt auf .rh-copy-btn, damit der Button auch OHNE sichtbaren
   .mode-toggle (normaler GM/Coach, kein Admin) allein an den rechten Rand rutscht; folgt er direkt
   auf .mode-toggle, wird die eigene auto-margin per Sibling-Selektor auf einen festen Abstand
   reduziert (statt 0 - User-Wunsch: "etwas Platz dazwischen"), sonst wuerde sich sonst zwischen
   beiden noch eine variable, vom verfuegbaren Leerraum abhaengige Luecke aufspannen. */
.rh-copy-btn { display: inline-flex; align-items: center; gap: 6px; margin-left: auto; font: inherit; font-size: 11.5px; font-weight: 600; color: #e8edf2; background: rgba(255,255,255,.08); border: 1px solid rgba(255,255,255,.24); border-radius: 6px; padding: 5px 10px; cursor: pointer; white-space: nowrap; }
.rh-copy-btn:hover { background: rgba(255,255,255,.16); }
.rh-copy-btn:disabled { opacity: .6; cursor: default; }
.mode-toggle + .rh-copy-btn { margin-left: 14px; }
.rh-capstrip { background: #f4f8f5; width: 100%; display: flex; flex-wrap: wrap; align-items: stretch; justify-content: center; gap: 8px; padding: 8px 20px; }
.rh-chip { background: #fff; border: 1px solid var(--rh-color1-text); border-radius: 4px; padding: 2px 8px; font-size: 10.5px; color: #1b2733; flex: 0 1 140px; display: flex; align-items: center; justify-content: space-between; gap: 4px; text-align: left; box-sizing: border-box; }
.rh-chip b { color: var(--rh-color1-text); }
.rh-chip .rh-chip-value { white-space: nowrap; }
.rh-h2 { font-size: 13px; color: #2c3e50; text-transform: uppercase; letter-spacing: .03em; margin: 20px 0 4px 0; font-weight: 700; }
.rh-content { padding: 0 20px 24px 20px; }
.rh-table { width: 100%; border-collapse: collapse; background: #fff; font-size: 11.5px; margin-bottom: 4px; }
.rh-table thead th { background: var(--rh-color1); color: var(--rh-fontcol1); font-weight: 700; padding: 6px 4px; text-align: center; white-space: nowrap; }
.rh-table thead th.left { text-align: left; padding-left: 8px; }
.rh-table tbody td { padding: 5px 4px; text-align: center; border-bottom: 1px solid #e2e4e7; vertical-align: middle; }
.rh-table tbody td.left { text-align: left; padding-left: 8px; }
.rh-table tbody tr:nth-child(odd) { background: #fff; }
.rh-table tbody tr:nth-child(even) { background: #f3f3f3; }
.rh-table tbody tr:hover { background: #eef3fa; }
.rh-table tbody tr.example { opacity: .6; }
.rh-col-action { min-width: 210px; }
.rh-name-link { color: var(--rh-color1-text); text-decoration: underline; font-weight: 500; }
.rh-playerpic { width: 32px; height: 32px; object-fit: cover; border-radius: 3px; display: block; margin: 0 auto; flex-shrink: 0; }
.rh-player-cell { display: flex; align-items: center; gap: 6px; }
.rh-player-cell .rh-playerpic { margin: 0; }
.rh-btn { font-size: 10.5px; padding: 3px 8px; border-radius: 4px; border: 1px solid var(--rh-color1-text); background: #fff; color: var(--rh-color1-text); cursor: pointer; white-space: nowrap; }
.rh-btn.primary { background: var(--rh-color1); color: #fff; }
.rh-btn.ghost { border-color: #a9b0b8; color: #5c6b7a; }
.rh-btn.small { font-size: 9.5px; padding: 1px 6px; border-color: #c8ccd1; color: #5c6b7a; }
.rh-btn + .rh-btn { margin-left: 4px; }
.rh-btn:disabled { opacity: .4; cursor: not-allowed; }
.rh-action-slot { min-width: 60px; display: inline-block; }
.rh-waiver-link { font-size: 10px; color: #a9302f; cursor: pointer; border-bottom: 1px dashed #a9302f; }
.rh-muted { color: #a9b0b8; }
.rh-table tbody tr.rh-roster-sep td { border-bottom: 2px dashed #9aa5b1; }
.rh-table tbody tr.rh-roster-16 td, .rh-table tbody tr.rh-roster-16 td * { color: #b00000 !important; }
.rh-table tbody tr.rh-tradeblock-row td { background: #fdf1cf; }
.rh-table tbody tr.rh-tradeblock-row:hover td { background: #fbe6a8; }
.rh-table tbody tr.rh-caphit-first td { border-top: 2px solid #2c3e50; }
.rh-twocol { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; align-items: start; margin-bottom: 8px; }
@media (max-width: 700px) { .rh-twocol { grid-template-columns: 1fr; } }
details.rh-accordion { background: #fff; border: 1px solid #d7dade; border-radius: 4px; margin-bottom: 0; }
details.rh-accordion summary { list-style: none; cursor: pointer; padding: 9px 12px; display: flex; align-items: center; gap: 8px; font-size: 12.5px; font-weight: 700; color: #1b2733; }
details.rh-accordion summary::-webkit-details-marker { display: none; }
details.rh-accordion summary:before { content: "▸"; color: var(--rh-color1-text); font-size: 10px; }
details.rh-accordion[open] summary:before { transform: rotate(90deg); display: inline-block; }
.rh-badge { background: #b00000; color: #fff; font-size: 10.5px; font-weight: 700; border-radius: 9px; padding: 0 7px; margin-left: 2px; }
/* Watchlist-"Status"-Spalte: Gebots-Zustand-Faerbung (User-Wunsch 2026-08-08, identische
   Farbwerte wie freeagents.php fuer Wiedererkennung) - hellgruen/dunkelgruen wenn das
   eigene Team fuehrt, hellrot/dunkelrot wenn ein fremdes Team fuehrt ("dunkel" = Gebotsdecke
   erreicht, siehe roster_watchlist_bid_class() weiter oben). "Max"-Varianten brauchen weisse
   statt der sonst dunklen Standard-Textfarbe fuer ausreichenden Kontrast. */
.rh-table td.rh-bidown { background: #e8f8ec; }
.rh-table td.rh-bidforeign { background: #fdeceb; }
.rh-table td.rh-bidown-max { background: #2e7d46; color: #ffffff; }
.rh-table td.rh-bidforeign-max { background: #b23b30; color: #ffffff; }
.rh-accordion .body { padding: 0 12px 12px 12px; }
.rh-msg-error { color: #b00000; font-size: 13px; background: #fff; padding: 6px 10px; border-radius: 4px; margin: 0 0 6px; width: fit-content; }
.rh-msg-success { color: #1a7a1a; font-size: 13px; background: #fff; padding: 6px 10px; border-radius: 4px; margin: 0 0 6px; width: fit-content; }
.rh-legend { font-size: 11px; margin-top: 10px; background-color: #f4f8f5; padding: 8px 12px; border-radius: 4px; text-align: center; }

/* ===================== In-Game Setup (Pos 1/2, Trikotnummer, Rotationsslot, 2026-08-17) =====================
   Eigener Tab/eigene Tabelle (siehe roster.php, view_mode 'setup') statt Sub-Toggle innerhalb
   Managen/Ansicht - kein data-view/data-mode-Umschaltmechanismus mehr noetig. */
.igs-summary { display: flex; flex-wrap: wrap; gap: 8px; margin-bottom: 10px; }
.igs-chip { background: #f4f8f5; border: 1px solid var(--rh-color1-text); border-radius: 4px; padding: 5px 10px; font-size: 10.5px; color: #1b2733; display: flex; align-items: center; gap: 6px; }
.igs-chip b { color: var(--rh-color1-text); font-size: 12px; }
.igs-chip.warn { background: #fdeceb; border-color: #d9534f; }
.igs-chip.warn b { color: #a9302f; }

.igs-select, .igs-input { font-family: inherit; font-size: 11px; font-weight: 600; color: #1b2733; border: 1px solid #c8ccd1; border-radius: 4px; padding: 4px 5px; background: #fff; }
.igs-select:hover, .igs-input:hover { border-color: var(--rh-color1-text); }
.igs-select:focus, .igs-input:focus { outline: 2px solid var(--rh-color1-text); outline-offset: 1px; }
.igs-input { width: 44px; text-align: center; }
/* "Nur Vorschlag" - Pos 1 defaultet auf roster.pos, solange der GM nichts explizit gesetzt hat
   (siehe roster_ingame_select()-Aufruf mit pos1 in roster.php) - blasser/gestrichelt, bis der
   GM selbst etwas auswaehlt. */
.igs-select.default-val { color: #9aa5b1; font-weight: 600; font-style: italic; border-style: dashed; }
td.igs-conflict .igs-input, td.igs-conflict .igs-select { border-color: #d9534f; background: #fdeceb; }
/* Admin-Modus: nur Anzeige statt Formularfeld (User-Wunsch 2026-08-18) - gleiche Groesse/Optik wie
   .igs-select/.igs-input, aber ohne Eingabe-Look (kein Border/Background), damit auf den ersten
   Blick klar ist, dass hier nichts editierbar ist. */
.igs-readonly { font-family: inherit; font-size: 11px; font-weight: 600; color: #1b2733; padding: 4px 5px; display: inline-block; }
td.igs-conflict .igs-readonly { color: #a9302f; }
