/* Project Legend V0.42.0 — screen composition. */

/* ---------------------------------------------------------- shared bits -- */
#pl420Root .pl42-ico{flex:0 0 auto}
.pl42-ico-tile{
  --tile:46px;
  width:var(--tile);height:var(--tile);flex:0 0 var(--tile);
  display:grid;place-items:center;border-radius:50%;
  border:1px solid var(--pl42-line);background:rgba(255,255,255,.03);
}
.pl42-ico-tile--gold{border-color:rgba(233,185,73,.34);background:var(--pl42-gold-wash)}
.pl42-ico-tile--cyan{border-color:rgba(103,183,255,.3);background:var(--pl42-cyan-wash)}
.pl42-ico-tile--green{border-color:rgba(74,222,128,.3);background:var(--pl42-green-wash)}
.pl42-ico-tile--red{border-color:rgba(244,112,122,.3);background:var(--pl42-red-wash)}
.pl42-ico-tile--violet{border-color:rgba(180,144,245,.3);background:rgba(180,144,245,.12)}

.pl42-icon-stat{display:flex;align-items:center;gap:12px;min-width:0}
.pl42-icon-stat .pl42-stat{min-width:0}
.pl42-icon-stat .pl42-stat strong{font-size:clamp(15px,1.15vw,20px)}

.pl42-divider{height:1px;background:var(--pl42-line);margin:14px 0}
.pl42-full{width:100%}
.pl42-gold{color:var(--pl42-gold-bright)}

.pl42-meter{height:8px;border-radius:var(--pl42-r-pill);background:rgba(255,255,255,.06);overflow:hidden;margin-top:10px}
.pl42-meter i{display:block;height:100%;border-radius:inherit;background:linear-gradient(90deg,var(--pl42-gold-deep),var(--pl42-gold-bright))}
.pl42-meter i.pl42-meter--green{background:linear-gradient(90deg,#2f8f56,var(--pl42-green))}
.pl42-meter i.pl42-meter--red{background:linear-gradient(90deg,#9d3b45,var(--pl42-red))}
.pl42-meter i.pl42-meter--cyan{background:linear-gradient(90deg,#2f6ea8,var(--pl42-cyan))}

.pl42-attr{display:grid;grid-template-columns:1fr auto;gap:4px 10px;align-items:center;margin-bottom:9px}
.pl42-attr span{font-size:var(--pl42-small);color:var(--pl42-ink-2);min-width:0}
.pl42-attr b{font-size:var(--pl42-small);font-weight:800;font-variant-numeric:tabular-nums}
.pl42-attr i{grid-column:1/-1;display:block;height:6px;border-radius:var(--pl42-r-pill);background:rgba(255,255,255,.07);overflow:hidden}
.pl42-attr em{display:block;height:100%;border-radius:inherit;background:linear-gradient(90deg,var(--pl42-gold-deep),var(--pl42-gold-bright))}
.pl42-attr em.pl42-attr--green{background:linear-gradient(90deg,#2f8f56,var(--pl42-green))}
.pl42-attr em.pl42-attr--cyan{background:linear-gradient(90deg,#2f6ea8,var(--pl42-cyan))}

.pl42-form{display:inline-flex;gap:4px}
.pl42-form i{width:14px;height:4px;border-radius:2px;background:rgba(255,255,255,.14);display:block}
.pl42-form i.pl42-form--w{background:var(--pl42-green)}
.pl42-form i.pl42-form--d{background:var(--pl42-gold)}
.pl42-form i.pl42-form--l{background:var(--pl42-red)}

.pl42-note{display:flex;gap:10px;align-items:flex-start;padding:11px 13px;border-radius:var(--pl42-r-sm);font-size:var(--pl42-small);line-height:1.5;margin-top:12px}
.pl42-note--info{background:var(--pl42-cyan-wash);border:1px solid rgba(103,183,255,.24);color:var(--pl42-ink-2)}
.pl42-note--warn{background:var(--pl42-red-wash);border:1px solid rgba(244,112,122,.26);color:var(--pl42-ink-2)}
.pl42-note--good{background:var(--pl42-green-wash);border:1px solid rgba(74,222,128,.26);color:var(--pl42-ink-2)}

.pl42-field{display:flex;flex-direction:column;gap:6px;margin-bottom:12px}
.pl42-field span{font-size:var(--pl42-label);letter-spacing:.16em;text-transform:uppercase;color:var(--pl42-ink-4);font-weight:700}
.pl42-field input,.pl42-field select,.pl42-field textarea{
  min-height:var(--pl42-touch);width:100%;padding:0 12px;border-radius:var(--pl42-r-sm);
  border:1px solid var(--pl42-line-strong);background:rgba(255,255,255,.03);color:var(--pl42-ink);
  font:inherit;font-size:var(--pl42-small);
}
.pl42-field input:focus,.pl42-field select:focus{outline:2px solid var(--pl42-gold);outline-offset:1px}
.pl42-field input[type="date"]::-webkit-calendar-picker-indicator{filter:invert(.8)}
/* V0.49.1: Ein Feld, das gerade nichts bewirkt, sagt das auch. Beschriftung
   und Wert treten zurueck, das Feld nimmt keine Eingabe mehr an - es
   verschwindet aber nicht, damit die Zeile beim Umschalten nicht springt. */
.pl42-field--ruht span{color:var(--pl42-ink-5,var(--pl42-ink-4));opacity:.5}
.pl42-field input:disabled,.pl42-field select:disabled{
  opacity:.42;cursor:not-allowed;
  border-color:color-mix(in srgb,var(--pl42-line) 60%,transparent);
  background:rgba(255,255,255,.015);
}

.pl42-tag-list{display:flex;flex-wrap:wrap;gap:6px}
.pl42-head-actions{display:flex;gap:8px;flex-wrap:wrap}

.pl42-table{width:100%;border-collapse:collapse;font-size:var(--pl42-small);min-width:640px}
.pl42-table th{
  padding:10px 12px;text-align:left;white-space:nowrap;
  font-size:var(--pl42-label);letter-spacing:.15em;text-transform:uppercase;
  color:var(--pl42-ink-4);font-weight:800;border-bottom:1px solid var(--pl42-line);
}
.pl42-table td{padding:9px 12px;border-bottom:1px solid var(--pl42-line-soft);white-space:nowrap;color:var(--pl42-ink-2)}
.pl42-table tbody tr:hover td{background:rgba(255,255,255,.025)}
.pl42-table .pl42-num{text-align:right;font-variant-numeric:tabular-nums}
.pl42-table .pl42-team{display:flex;align-items:center;gap:9px;white-space:nowrap}
.pl42-table tr.is-mine td{background:var(--pl42-gold-wash);color:var(--pl42-gold-bright);font-weight:700}
/* V0.52.5 (S3-4): die linke Kante traegt die VEREINSfarbe, nicht Gold.
   Gold markiert im ganzen Spiel den Spieler und die eigene Karriere, die
   Vereinsfarbe den Verein - zwei Kategorien, nie am selben Element. Die
   Zeile in der Ligatabelle ist der eigene VEREIN.
   Die Flaechenfarbe der Zeile (Zeile darueber) bleibt Gold: sie sagt "das
   bist du", die Kante sagt "das ist dein Verein". */
.pl42-table tr.is-mine td:first-child{box-shadow:inset 3px 0 0 var(--pl42-vereinsakzent)}
.pl42-table tr.pl42-zone--promotion td:first-child{box-shadow:inset 3px 0 0 var(--pl42-green)}
.pl42-table tr.pl42-zone--playoff td:first-child{box-shadow:inset 3px 0 0 var(--pl42-cyan)}
.pl42-table tr.pl42-zone--relegation td:first-child{box-shadow:inset 3px 0 0 var(--pl42-red)}
.pl42-table tr.is-mine.pl42-zone--promotion td:first-child{box-shadow:inset 3px 0 0 var(--pl42-vereinsakzent)}

.pl42-legend{display:flex;flex-wrap:wrap;gap:14px;padding:12px 18px;border-top:1px solid var(--pl42-line);font-size:var(--pl42-label);letter-spacing:.12em;text-transform:uppercase;color:var(--pl42-ink-4);font-weight:700}
.pl42-legend span{display:inline-flex;align-items:center;gap:7px}
.pl42-legend i{width:9px;height:9px;border-radius:2px;display:inline-block}
.pl42-dot--green{background:var(--pl42-green)}.pl42-dot--cyan{background:var(--pl42-cyan)}
.pl42-dot--red{background:var(--pl42-red)}.pl42-dot--gold{background:var(--pl42-gold)}
.pl42-dot--violet{background:var(--pl42-violet)}

.pl42-badge--fallback{
  background:linear-gradient(150deg,var(--pl42-panel-3),var(--pl42-panel));
  border:1px solid var(--pl42-line);color:var(--pl42-ink-2);
  font-weight:800;font-size:.42em;letter-spacing:.04em;
}

/* --------------------------------------------------------------- keyart -- */
/* The portrait is a fixed-aspect stage. The kit marks are positioned against
   that stage, so club badge and shirt number stay on the chest at every size.
   The values are relative to the visible crop of assets/v0410-player-portrait.png. */
.pl42-keyart{
  --keyart-crop:6%;
  /* Measured against the visible crop of assets/v0410-player-portrait.png
     (1023x1537, object-position 50% 6%). Sampling the rendered crop puts the
     head at 5-34%, the shoulder line at 42% and the torso centre at x 53%; the
     figure only widens past 72% where the hips begin. The marks previously sat
     at y 72% and 80%, i.e. on the abdomen and the hip rather than on the chest.
     They now follow a real shirt that carries a front number: crest on one
     chest side, number on the other, both on the shoulder-to-sternum band. */
  --badge-x:42%;   --badge-y:53%;
  --shirt-x:64%;   --shirt-y:53%;
  position:relative;flex:0 0 auto;
  width:clamp(180px,17vw,272px);
  aspect-ratio:100/132;
  border-radius:var(--pl42-r-md);overflow:hidden;
  background:radial-gradient(70% 60% at 50% 30%,rgba(233,185,73,.1),transparent 70%),var(--pl42-void);
  container-type:inline-size;
}
.pl42-keyart img{
  position:absolute;inset:0;width:100%;height:100%;
  object-fit:cover;object-position:50% var(--keyart-crop);
  -webkit-mask-image:linear-gradient(180deg,#000 84%,rgba(0,0,0,.4) 95%,transparent 100%);
  mask-image:linear-gradient(180deg,#000 84%,rgba(0,0,0,.4) 95%,transparent 100%);
}
/* Both marks scale with the portrait, not with the viewport, so they stay on
   the chest at every size and in every key-art variant. */
.pl42-keyart-badge{
  position:absolute;left:var(--badge-x);top:var(--badge-y);transform:translate(-50%,-50%);
  width:12%;aspect-ratio:1/1;height:auto;
  display:grid;place-items:center;border-radius:50%;
  filter:drop-shadow(0 2px 6px rgba(0,0,0,.7));opacity:.88;
}
.pl42-keyart-badge .pl42-badge{width:100%;height:100%}
.pl42-keyart-number{
  position:absolute;left:var(--shirt-x);top:var(--shirt-y);transform:translate(-50%,-50%);
  font-size:9.5cqw;font-weight:800;letter-spacing:.01em;
  color:rgba(233,185,73,.78);text-shadow:0 2px 10px rgba(0,0,0,.85);
  font-variant-numeric:tabular-nums;pointer-events:none;line-height:1;
}
.pl42-keyart--compact{width:clamp(112px,9vw,152px)}
.pl42-keyart--live{width:clamp(96px,8vw,140px)}

/* ------------------------------------------------------------- overview -- */
.pl42-overview-top{display:grid;grid-template-columns:minmax(0,1.02fr) minmax(0,1fr);gap:clamp(12px,1.1vw,18px)}
.pl42-hero{display:flex;gap:clamp(14px,1.4vw,26px);align-items:stretch;overflow:hidden;position:relative}
.pl42-hero::before{
  content:'';position:absolute;inset:0;pointer-events:none;
  background:radial-gradient(60% 80% at 12% 40%,rgba(233,185,73,.07),transparent 62%);
}
.pl42-hero-copy{display:flex;flex-direction:column;justify-content:center;gap:8px;min-width:0;flex:1;position:relative}
.pl42-hero-name{font-size:var(--pl42-display);font-weight:800;line-height:1.02;letter-spacing:-.02em}
.pl42-hero-club{display:flex;align-items:center;gap:9px;color:var(--pl42-gold-bright);font-weight:700;font-size:var(--pl42-h3);min-width:0}
.pl42-hero-club span{min-width:0;line-height:1.3}
.pl42-hero-bio{font-size:var(--pl42-small);line-height:1.6}
.pl42-hero-facts{display:flex;align-items:flex-end;gap:clamp(12px,1.4vw,26px);margin-top:6px;flex-wrap:wrap}
.pl42-hero-divider{width:1px;align-self:stretch;background:var(--pl42-line);min-height:44px}
/* A flex item is free to become narrower than its own text, and at large type
   sizes that split the two-digit overall rating across two lines ("6" over "5").
   The rating never wraps, and it claims the width its glyphs need. */
.pl42-hero-ovr{
  font-size:clamp(34px,3.4vw,54px);line-height:1;font-weight:800;
  white-space:nowrap;font-variant-numeric:tabular-nums;
}
.pl42-hero-facts>.pl42-stat{min-width:max-content}
/* The role is a single long word in German. "Nachwuchsspiel/er" is not an
   acceptable break, so it is never broken inside the word - it shrinks to fit
   instead. The ID-qualified selector is deliberate: the shell's global
   `#pl420Root *` rule sets overflow-wrap:break-word and would otherwise win. */
.pl42-hero-role{font-size:clamp(15px,1.35vw,22px);font-weight:700}
#pl420Root .pl42-hero-role{overflow-wrap:normal;word-break:keep-all;hyphens:none;white-space:nowrap}
/* The role keeps its word whole, so the facts row moves the whole block onto its
   own line when it no longer fits rather than breaking the word. */
.pl42-hero-facts>.pl42-stat:has(.pl42-hero-role){flex:0 1 auto;min-width:max-content}

.pl42-nextmatch{position:relative;min-height:clamp(240px,22vw,330px);display:flex}
.pl42-nextmatch-stage{
  position:absolute;inset:0;
  background-image:
    linear-gradient(180deg,rgba(4,7,13,.62) 0%,rgba(4,7,13,.34) 42%,rgba(4,7,13,.86) 100%),
    url('../assets/v0410-stadium-night.png');
  background-size:cover;background-position:center 32%;
  opacity:1;
}
.pl42-nextmatch-inner{
  position:relative;z-index:1;flex:1;display:flex;flex-direction:column;gap:clamp(10px,1vw,16px);
  padding:clamp(14px,1.3vw,22px);align-items:center;justify-content:center;text-align:center;
}
.pl42-nextmatch-head{display:flex;align-items:center;gap:10px;justify-content:center;flex-wrap:wrap}
.pl42-matchup{display:flex;align-items:flex-start;gap:clamp(12px,1.6vw,34px);justify-content:center;width:100%}
.pl42-matchup-team{display:flex;flex-direction:column;align-items:center;gap:8px;min-width:0;flex:1 1 0;max-width:210px}
.pl42-matchup-team b{font-size:var(--pl42-small);font-weight:800;letter-spacing:.08em;text-transform:uppercase;line-height:1.3}
.pl42-matchup-team small{font-size:var(--pl42-label);letter-spacing:.12em;color:var(--pl42-ink-4);font-weight:700}
.pl42-matchup-team.is-mine small{color:var(--pl42-gold)}
.pl42-versus{font-size:clamp(20px,2vw,34px);font-weight:800;color:var(--pl42-gold);align-self:center;letter-spacing:.02em}
.pl42-matchup.is-compact .pl42-matchup-team b{font-size:var(--pl42-label)}
.pl42-nextmatch-meta{display:flex;flex-wrap:wrap;gap:8px 18px;justify-content:center;font-size:var(--pl42-small);color:var(--pl42-ink-2)}
.pl42-nextmatch-meta span{display:inline-flex;align-items:center;gap:7px}
.pl42-nextmatch-actions{display:flex;gap:10px;flex-wrap:wrap;justify-content:center;width:100%}
.pl42-nextmatch--side{min-height:auto}
.pl42-nextmatch--side .pl42-nextmatch-inner{padding:16px}

.pl42-phase-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(190px,1fr));gap:clamp(12px,1.2vw,22px);align-items:center}
/* V0.54.0 (08.09.2026): Der Kopf des Saisonverlaufs steht NEBEN den Kacheln,
   nicht darueber. Grund und Nachweis: Die Uebersicht lief bei 1280x900 um
   283 px ueber und bei 1920x1080 um 308 - sie hatte rund ein Drittel mehr
   Inhalt, als der Bildschirm hergibt, und wuchs mit der Breite mit. Vier
   Umbauten wurden im Browser gemessen; der naheliegendste (beide schmalen
   Baender nebeneinander) machte es SCHLECHTER, weil die vier Kacheln auf
   halber Breite umbrechen und das Band von 127 auf 182 px wuchs.
   Zusammen mit der abgeschalteten Echo-Vorschau (v0532, Vorgabe umgedreht)
   ergibt diese Regel gemessene 0 px Ueberlauf bei beiden Groessen; das Band
   schrumpft von 127 auf 74 px, die vier Kacheln bleiben in EINER Reihe.
   Erst ab 981 px, darunter braucht der Kopf seine eigene Zeile. */
@media (min-width:981px){
  /* Mit #pl420Root, weil .pl42-panel in shell.css dieselbe Staerke hat und
     spaeter steht - ohne die Wurzel gewinnt dort das Polster (gemessen:
     20,67 statt 12,4 px, und die Uebersicht lief bei 1920 um 16 px ueber). */
  #pl420Root .pl42-phase{display:grid;grid-template-columns:auto minmax(0,1fr);align-items:center;column-gap:var(--pl42-s4);padding:var(--pl42-s3) var(--pl42-s4)}
  #pl420Root .pl42-phase>.pl42-panel-head{margin:0}
}
.pl42-phase-track{display:flex;flex-direction:column;gap:8px;min-width:180px}
.pl42-phase-line{height:3px;border-radius:2px;background:rgba(255,255,255,.09);position:relative}
.pl42-phase-line i{position:absolute;left:0;top:0;height:100%;border-radius:2px;background:linear-gradient(90deg,var(--pl42-gold-deep),var(--pl42-gold-bright))}
.pl42-phase-line i::after{content:'';position:absolute;right:-5px;top:50%;transform:translateY(-50%);width:11px;height:11px;border-radius:50%;background:var(--pl42-gold);box-shadow:0 0 0 4px rgba(233,185,73,.2)}

.pl42-overview-bottom{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(420px,100%),1fr));gap:clamp(12px,1.1vw,18px)}
.pl42-atmos{
  display:flex;align-items:center;gap:14px;width:100%;text-align:left;
  padding:12px;border-radius:var(--pl42-r-md);border:1px solid var(--pl42-line-strong);
  background:rgba(255,255,255,.02);min-height:var(--pl42-touch);
}
.pl42-atmos:hover{background:rgba(255,255,255,.05);border-color:var(--pl42-line-strong)}
.pl42-atmos-copy{display:flex;flex-direction:column;gap:3px;min-width:0;flex:1}
.pl42-atmos-copy b{font-size:var(--pl42-h3);font-weight:700}
.pl42-atmos-copy span{font-size:var(--pl42-small);color:var(--pl42-ink-3);line-height:1.5}
.pl42-atmos-row{display:flex;flex-wrap:wrap;gap:8px 18px;margin-top:12px;font-size:var(--pl42-small);color:var(--pl42-ink-3)}
.pl42-atmos-row span{display:inline-flex;align-items:center;gap:7px}
.pl42-atmos-row b{color:var(--pl42-ink);font-weight:800}

.pl42-offer-line{display:flex;align-items:center;gap:14px;margin-bottom:12px}
.pl42-offer-list{display:flex;flex-direction:column;gap:6px}
.pl42-offer-row{
  display:flex;align-items:center;gap:10px;width:100%;min-height:var(--pl42-touch);
  padding:0 12px;border-radius:var(--pl42-r-sm);border:1px solid var(--pl42-line-strong);
  background:rgba(255,255,255,.02);font-size:var(--pl42-small);text-align:left;
}
.pl42-offer-row:hover{background:rgba(255,255,255,.05)}
.pl42-offer-row span{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.pl42-offer-row em{color:var(--pl42-gold);font-style:normal;font-weight:700;font-size:var(--pl42-label);letter-spacing:.1em;text-transform:uppercase}

.pl42-hub-go{display:grid;place-items:center;flex:0 0 auto}

/* --------------------------------------------------------------- player --
   UEBERHOLT ab V0.52.0 (S2-5): .pl42-ring* wird von keinem Bildschirm mehr
   gerendert - der Fortschritt steht als Balken. Die Regeln bleiben vorerst
   stehen, damit ein aelterer Spielstand mit zwischengespeichertem Markup
   nicht nackt dasteht; sie duerfen in einer spaeteren Fassung entfallen. */
.pl42-player-top{display:grid;grid-template-columns:minmax(0,1.15fr) minmax(0,1.2fr) minmax(0,.78fr);gap:clamp(12px,1.1vw,18px)}
.pl42-hero--player .pl42-hero-name{font-size:clamp(24px,2.5vw,40px)}
.pl42-hero--player .pl42-hero-facts{flex-wrap:nowrap}
.pl42-development-grid{display:grid;grid-template-columns:auto 1fr auto;gap:clamp(12px,1.3vw,24px);align-items:center}
.pl42-ring{position:relative;width:clamp(96px,8vw,132px);display:flex;flex-direction:column;align-items:center;gap:8px}
.pl42-ring svg{width:100%;height:auto;transform:rotate(-90deg)}
.pl42-ring-track{fill:none;stroke:rgba(255,255,255,.08);stroke-width:9}
.pl42-ring-value{fill:none;stroke:var(--pl42-cyan);stroke-width:9;stroke-linecap:round;transition:stroke-dasharray .4s var(--pl42-ease)}
.pl42-ring{position:relative}
.pl42-ring-copy{
  position:absolute;left:50%;top:0;width:100%;height:calc(100% - 26px);
  transform:translateX(-50%);display:flex;flex-direction:column;align-items:center;justify-content:center;
  text-align:center;pointer-events:none;
}
.pl42-ring-copy b{font-size:clamp(22px,2vw,32px);font-weight:800;display:block;line-height:1}
.pl42-ring-copy small{font-size:var(--pl42-label);color:var(--pl42-ink-4)}
.pl42-development-values{display:flex;flex-direction:column;gap:12px}
.pl42-development-values strong{font-size:clamp(20px,1.9vw,30px)}
.pl42-position-map{display:flex;flex-direction:column;gap:6px;align-items:flex-start;min-width:112px}
.pl42-position-map b{font-size:var(--pl42-small);font-weight:700}
.pl42-pitch{width:clamp(96px,8vw,130px);height:auto;opacity:.95}
.pl42-pitch-frame{fill:rgba(255,255,255,.02);stroke:rgba(148,178,220,.22);stroke-width:1.2}
.pl42-pitch-line{fill:none;stroke:rgba(148,178,220,.18);stroke-width:1.1}
.pl42-pitch-dot{fill:var(--pl42-gold);stroke:rgba(233,185,73,.35);stroke-width:5}

/* Five attribute panels. `auto-fit` fitted as many as would go, which left a
   single panel alone on a second row whenever exactly four fitted - the case the
   report shows. The column count is therefore chosen explicitly per width band
   so the five panels split 5, 3+2 or 2+2+1, never 4+1. */
.pl42-attr-grid{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:clamp(12px,1.1vw,18px)}
.pl42-player-bottom{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(400px,100%),1fr));gap:clamp(12px,1.1vw,18px)}
.pl42-change-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(220px,100%),1fr));gap:16px}
.pl42-change b{display:flex;align-items:center;gap:8px;font-size:var(--pl42-label);letter-spacing:.16em;text-transform:uppercase;margin-bottom:8px}
.pl42-change p{font-size:var(--pl42-small);color:var(--pl42-ink-3);line-height:1.6}
.pl42-memory-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(180px,100%),1fr));gap:14px}
.pl42-contractcard{display:flex;flex-direction:column}
.pl42-contractcard .pl42-btn{margin-top:auto}

/* --------------------------------------------------------- competitions -- */
.pl42-comp-switch{display:flex;gap:12px;align-items:center;flex-wrap:wrap}
.pl42-comp-switch .pl42-segment{flex:1 1 320px}
.pl42-comp-body{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,340px);gap:clamp(12px,1.1vw,18px);align-items:start}
.pl42-comp-main,.pl42-comp-side{display:flex;flex-direction:column;gap:clamp(12px,1.1vw,18px);min-width:0}

.pl42-comp-hero{position:relative;min-height:clamp(140px,12vw,190px);display:flex}
.pl42-comp-hero-stage{
  position:absolute;inset:0;
  background-image:
    linear-gradient(90deg,rgba(6,10,18,.94) 22%,rgba(6,10,18,.5) 65%,rgba(6,10,18,.86) 100%),
    url('../assets/v0410-stadium-night.png');
  background-size:cover;background-position:center 28%;
}
.pl42-comp-hero-inner{position:relative;z-index:1;flex:1;display:flex;align-items:center;gap:clamp(14px,1.5vw,26px);padding:clamp(14px,1.4vw,24px);min-width:0}
.pl42-comp-hero-copy{flex:1;min-width:0}
.pl42-comp-hero-copy h2{font-size:var(--pl42-h1);font-weight:800;line-height:1.08;letter-spacing:-.01em}
.pl42-comp-hero-stats{display:flex;gap:clamp(14px,1.6vw,32px);margin-top:12px;flex-wrap:wrap}
.pl42-comp-hero-stats .pl42-stat strong{font-size:clamp(20px,2vw,32px)}
.pl42-comp-hero-icon{opacity:.14;flex:0 0 auto}

.pl42-result-row{
  display:flex;align-items:center;gap:10px;padding:9px 0;border-bottom:1px solid var(--pl42-line-soft);
  font-size:var(--pl42-small);
}
.pl42-result-row:last-child{border-bottom:0}
.pl42-result-opp{flex:1;min-width:0;display:flex;flex-direction:column;gap:1px}
.pl42-result-opp small{font-size:var(--pl42-label);color:var(--pl42-ink-4)}
.pl42-result-row b{font-variant-numeric:tabular-nums;font-weight:800}
.pl42-result-perf{color:var(--pl42-ink-4);font-size:var(--pl42-label);text-align:right;white-space:nowrap}
.pl42-outcome--w,.pl42-outcome--d,.pl42-outcome--l{
  width:22px;height:22px;border-radius:50%;display:grid;place-items:center;
  font-style:normal;font-weight:800;font-size:11px;flex:0 0 22px;
}
.pl42-outcome--w{background:var(--pl42-green-wash);color:var(--pl42-green)}
.pl42-outcome--d{background:var(--pl42-gold-wash);color:var(--pl42-gold)}
.pl42-outcome--l{background:var(--pl42-red-wash);color:var(--pl42-red)}

.pl42-bracket{display:flex;gap:12px;padding-bottom:6px;min-width:min-content}
.pl42-bracket-round{
  flex:0 0 210px;width:210px;display:flex;flex-direction:column;gap:8px;
  padding:12px;border-radius:var(--pl42-r-md);border:1px solid var(--pl42-line);
  background:rgba(255,255,255,.02);
}
.pl42-bracket-round header{display:flex;align-items:center;justify-content:space-between;gap:8px;font-size:var(--pl42-label);letter-spacing:.13em;text-transform:uppercase;font-weight:800;color:var(--pl42-ink-3)}
.pl42-bracket-round small{font-size:var(--pl42-label);color:var(--pl42-ink-4)}
.pl42-bracket--active{border-color:rgba(233,185,73,.4);background:var(--pl42-gold-wash)}
.pl42-bracket--active header{color:var(--pl42-gold-bright)}
.pl42-bracket--done header{color:var(--pl42-green)}
.pl42-bracket--locked{opacity:.6}
.pl42-bracket-match{display:flex;flex-direction:column;gap:6px;padding:10px;border-radius:var(--pl42-r-sm);background:rgba(0,0,0,.28);font-size:var(--pl42-small)}
.pl42-bracket-match div{display:flex;align-items:center;gap:7px;min-width:0}
.pl42-bracket-match div span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.pl42-bracket-match b{font-variant-numeric:tabular-nums;color:var(--pl42-gold-bright);font-weight:800;align-self:center}
.pl42-bracket-match.is-mine{border:1px solid rgba(233,185,73,.3)}
.pl42-bracket-empty{padding:14px 10px;text-align:center;font-size:var(--pl42-label);color:var(--pl42-ink-4);letter-spacing:.1em;text-transform:uppercase}
.pl42-nextround{display:flex;flex-direction:column;gap:12px;align-items:flex-start}
.pl42-nextround-team{display:flex;flex-direction:column;align-items:center;gap:8px;width:100%;text-align:center}
.pl42-nextround-team b{font-size:var(--pl42-h3);font-weight:700}
.pl42-nextround-team small{font-size:var(--pl42-label);color:var(--pl42-ink-4);letter-spacing:.1em;text-transform:uppercase}

.pl42-nt-ladder{display:flex;gap:10px;flex-wrap:wrap}
.pl42-nt-step{
  flex:1 1 92px;min-width:92px;display:flex;flex-direction:column;align-items:center;gap:5px;
  padding:12px 8px;border-radius:var(--pl42-r-md);border:1px solid var(--pl42-line);
  background:rgba(255,255,255,.02);text-align:center;
}
.pl42-nt-step b{font-size:var(--pl42-small);font-weight:800;letter-spacing:.1em}
.pl42-nt-step small{font-size:var(--pl42-label);color:var(--pl42-ink-4)}
.pl42-nt-dot{width:24px;height:24px;border-radius:50%;border:2px solid var(--pl42-line-strong);display:grid;place-items:center}
.pl42-nt-step.is-reached{border-color:rgba(74,222,128,.34)}
.pl42-nt-step.is-reached .pl42-nt-dot{border-color:var(--pl42-green)}
.pl42-nt-step.is-current{border-color:rgba(233,185,73,.5);background:var(--pl42-gold-wash)}
.pl42-nt-step.is-current .pl42-nt-dot{border-color:var(--pl42-gold);background:var(--pl42-gold-wash)}
.pl42-nt-step.is-current b{color:var(--pl42-gold-bright)}
.pl42-nt-ladder--compact .pl42-nt-step{flex:1 1 52px;min-width:52px;padding:8px 4px}

.pl42-window-list{display:flex;gap:10px;min-width:min-content;padding-bottom:4px}
.pl42-window{
  flex:0 0 200px;width:200px;display:flex;flex-direction:column;gap:4px;
  padding:12px;border-radius:var(--pl42-r-md);border:1px solid var(--pl42-line);background:rgba(255,255,255,.02);
}
.pl42-window b{font-size:var(--pl42-small);font-weight:800}
.pl42-window small{font-size:var(--pl42-label);color:var(--pl42-ink-3)}
.pl42-window em{font-size:var(--pl42-label);color:var(--pl42-ink-4);font-style:normal}
.pl42-window--active{border-color:rgba(233,185,73,.42);background:var(--pl42-gold-wash)}
.pl42-window--done{opacity:.6}

/* ------------------------------------------------------------- calendar -- */
.pl42-cal-hero{display:flex;gap:clamp(14px,1.6vw,32px);align-items:center;flex-wrap:wrap}
.pl42-cal-hero-date{flex:1 1 300px;min-width:0}
.pl42-cal-hero-date h2{font-size:var(--pl42-display);font-weight:800;line-height:1.04;letter-spacing:-.02em;text-transform:uppercase}
.pl42-cal-hero-next{flex:0 1 380px;min-width:0;border-left:1px solid var(--pl42-line);padding-left:clamp(14px,1.6vw,28px)}
.pl42-cal-hero-next .pl42-matchup{margin-top:10px}

/* Two lanes so neighbouring markers cannot collide, and edge anchoring so the
   first and last label stay inside the track. */
.pl42-timeline{position:relative;min-width:1340px;padding:6px 26px}
.pl42-timeline-lane{position:relative;height:118px}
.pl42-timeline-track{position:relative;height:4px;border-radius:2px;background:rgba(255,255,255,.09);margin:6px 0}
.pl42-timeline-span{position:absolute;top:-1px;height:6px;border-radius:3px}
.pl42-timeline-span--transfer{background:linear-gradient(90deg,var(--pl42-gold-deep),var(--pl42-gold))}
.pl42-timeline-span--international{background:var(--pl42-cyan)}
.pl42-timeline-span--winter{background:rgba(148,178,220,.5)}
.pl42-timeline-node{
  position:absolute;top:50%;width:9px;height:9px;border-radius:50%;
  transform:translate(-50%,-50%);background:rgba(148,178,220,.5);
}
.pl42-timeline-node--transfer{background:var(--pl42-gold)}
.pl42-timeline-node--international{background:var(--pl42-cyan)}
.pl42-timeline-node--season{background:var(--pl42-ink-2)}
.pl42-timeline-today{
  position:absolute;top:50%;width:14px;height:14px;border-radius:50%;background:var(--pl42-gold);
  transform:translate(-50%,-50%);box-shadow:0 0 0 5px rgba(233,185,73,.18);z-index:2;
}
.pl42-timeline-mark{
  position:absolute;width:116px;display:flex;flex-direction:column;gap:2px;
  transform:translateX(-50%);
}
.pl42-timeline-lane--top .pl42-timeline-mark{bottom:2px;text-align:center}
.pl42-timeline-lane--top .pl42-timeline-mark[data-row="1"]{bottom:40px}
.pl42-timeline-lane--top .pl42-timeline-mark[data-row="2"]{bottom:78px}
.pl42-timeline-lane--bottom .pl42-timeline-mark{top:2px;text-align:center}
.pl42-timeline-lane--bottom .pl42-timeline-mark[data-row="1"]{top:40px}
.pl42-timeline-lane--bottom .pl42-timeline-mark[data-row="2"]{top:78px}
.pl42-timeline-mark[data-anchor="start"]{transform:none;text-align:left}
.pl42-timeline-mark[data-anchor="end"]{transform:translateX(-100%);text-align:right}
.pl42-timeline-lane--top .pl42-timeline-mark[data-anchor="start"],
.pl42-timeline-lane--bottom .pl42-timeline-mark[data-anchor="start"]{text-align:left}
.pl42-timeline-lane--top .pl42-timeline-mark[data-anchor="end"],
.pl42-timeline-lane--bottom .pl42-timeline-mark[data-anchor="end"]{text-align:right}
.pl42-timeline-mark b{font-size:10px;letter-spacing:.08em;font-weight:800;text-transform:uppercase;color:var(--pl42-ink-3);line-height:1.25;overflow-wrap:normal;word-break:keep-all;hyphens:none}
.pl42-timeline-mark small{font-size:10px;color:var(--pl42-ink-4);white-space:nowrap}
.pl42-timeline-mark--transfer b{color:var(--pl42-gold)}
.pl42-timeline-mark--international b{color:var(--pl42-cyan)}
.pl42-timeline-mark--season b{color:var(--pl42-ink-2)}
.pl42-window-summary{display:flex;flex-direction:column;gap:8px;padding-top:14px;margin-top:6px;border-top:1px solid var(--pl42-line)}

.pl42-cal-body{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,320px);gap:clamp(12px,1.1vw,18px);align-items:start}
.pl42-cal-side{display:flex;flex-direction:column;gap:clamp(12px,1.1vw,18px);min-width:0}
.pl42-calgrid{display:grid;grid-template-columns:repeat(7,minmax(112px,1fr));gap:6px;padding:12px 18px 16px;min-width:min-content}
.pl42-calgrid-dow{font-size:var(--pl42-label);letter-spacing:.14em;text-transform:uppercase;color:var(--pl42-ink-4);font-weight:800;text-align:center;padding-bottom:4px}
.pl42-calgrid-cell{
  min-height:84px;display:flex;flex-direction:column;gap:4px;padding:7px;
  border-radius:var(--pl42-r-sm);border:1px solid var(--pl42-line-strong);background:rgba(255,255,255,.015);
}
.pl42-calgrid-cell.is-today{border-color:rgba(233,185,73,.5);background:var(--pl42-gold-wash)}
.pl42-calgrid-cell.is-outside{opacity:.42}
.pl42-calgrid-day{font-size:var(--pl42-small);font-weight:800;color:var(--pl42-ink-3)}
.pl42-calgrid-cell.is-today .pl42-calgrid-day{color:var(--pl42-gold-bright)}
.pl42-calgrid-event{display:flex;align-items:center;gap:5px;font-size:10.5px;line-height:1.25;padding:3px 5px;border-radius:5px;background:rgba(255,255,255,.05);color:var(--pl42-ink-2)}
.pl42-calgrid-event em{font-style:normal;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.pl42-calgrid-event--competition{background:var(--pl42-gold-wash);color:var(--pl42-gold-bright)}
.pl42-calgrid-event--international{background:var(--pl42-cyan-wash);color:var(--pl42-cyan)}
.pl42-calgrid-event--management{background:rgba(180,144,245,.14);color:var(--pl42-violet)}
.pl42-calgrid-event--training{background:var(--pl42-green-wash);color:var(--pl42-green)}
.pl42-calgrid-more{font-size:10px;color:var(--pl42-ink-4)}

/* V0.52.5 (S3-3): so viele Kacheln nebeneinander, wie hineinpassen.
   Feste zwei Spalten hiessen: auf 1076px Breite vier Kacheln zu je 533px in
   ZWEI Reihen - 248px hoch, wo 119 gereicht haetten. Auf dem
   Vorbereitungsbildschirm steht der Block seit S3-3 ueber die volle Breite,
   dort ist das die Haelfte des Ueberhangs.
   In der schmalen Kalenderspalte greift dieselbe Regel und ergibt weiter
   eine Spalte - deshalb minmax statt einer zweiten Breakpoint-Regel. */
.pl42-sim-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(120px,100%),1fr));gap:10px;margin-bottom:14px}
.pl42-sim-tile{
  display:flex;flex-direction:column;align-items:center;gap:6px;text-align:center;
  padding:14px 10px;border-radius:var(--pl42-r-md);border:1px solid var(--pl42-line-strong);
  background:rgba(255,255,255,.02);min-height:110px;justify-content:center;
}
.pl42-sim-tile:hover{background:rgba(255,255,255,.05);border-color:var(--pl42-line-strong)}
.pl42-sim-tile b{font-size:var(--pl42-small);font-weight:800;letter-spacing:.07em}
.pl42-sim-tile small{font-size:var(--pl42-label);color:var(--pl42-ink-4);line-height:1.35}
.pl42-sim-tile.is-primary{border-color:rgba(233,185,73,.5);background:var(--pl42-gold-wash)}
.pl42-sim-tile.is-primary b{color:var(--pl42-gold-bright)}

.pl42-upcoming{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(280px,100%),1fr));gap:clamp(12px,1.2vw,24px)}
.pl42-upcoming-col{display:flex;flex-direction:column;gap:8px;min-width:0}
.pl42-upcoming-row{display:flex;align-items:center;gap:11px;padding:9px 11px;border-radius:var(--pl42-r-sm);background:rgba(255,255,255,.02);border-left:3px solid var(--pl42-line-strong);min-width:0}
.pl42-upcoming-row time{display:flex;flex-direction:column;align-items:center;min-width:30px}
.pl42-upcoming-row time b{font-size:var(--pl42-h3);font-weight:800;line-height:1}
.pl42-upcoming-row time small{font-size:9.5px;color:var(--pl42-ink-4)}
.pl42-upcoming-row>span{display:flex;flex-direction:column;gap:2px;min-width:0;flex:1}
.pl42-upcoming-row>span b{font-size:var(--pl42-small);font-weight:700;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.pl42-upcoming-row>span small{font-size:var(--pl42-label);color:var(--pl42-ink-4)}
.pl42-upcoming-row--competition{border-left-color:var(--pl42-gold)}
.pl42-upcoming-row--international{border-left-color:var(--pl42-cyan)}
.pl42-upcoming-row--management{border-left-color:var(--pl42-violet)}
.pl42-upcoming-row--training{border-left-color:var(--pl42-green)}

/* ----------------------------------------------------------- career hub -- */
.pl42-career-hero{position:relative;min-height:clamp(170px,15vw,240px);display:flex}
.pl42-career-hero-stage{
  position:absolute;inset:0;
  background-image:
    linear-gradient(90deg,rgba(5,8,14,.95) 26%,rgba(5,8,14,.52) 62%,rgba(5,8,14,.9) 100%),
    url('../assets/v0410-stadium-night.png');
  background-size:cover;background-position:center 24%;
}
.pl42-career-hero-inner{position:relative;z-index:1;flex:1;display:flex;align-items:center;gap:clamp(14px,1.5vw,28px);padding:clamp(12px,1.2vw,20px) clamp(14px,1.4vw,24px);flex-wrap:wrap}
.pl42-career-hero-copy{flex:1 1 240px;min-width:0}
.pl42-career-hero-copy h2{font-size:clamp(24px,2.4vw,40px);font-weight:800;line-height:1.05;letter-spacing:-.02em}
.pl42-career-hero-stats{display:flex;gap:clamp(14px,1.8vw,34px);flex-wrap:wrap;flex:1 1 380px}
.pl42-career-hero-stats .pl42-stat{align-items:flex-start}
.pl42-career-hero-stats .pl42-stat strong{font-size:clamp(19px,1.9vw,30px)}

.pl42-career-timeline{display:flex;gap:14px;min-width:min-content;padding:6px 0 4px}
.pl42-career-node{
  flex:0 0 216px;width:216px;display:flex;flex-direction:column;gap:8px;
  padding:14px;border-radius:var(--pl42-r-md);border:1px solid var(--pl42-line);background:rgba(255,255,255,.02);
}
.pl42-career-node b{font-size:var(--pl42-h3);font-weight:800}
.pl42-career-node small{font-size:var(--pl42-label);letter-spacing:.13em;font-weight:800}
.pl42-career-dot{width:12px;height:12px;border-radius:50%;background:rgba(148,178,220,.4)}
.pl42-career-node.is-current{border-color:rgba(233,185,73,.42);background:var(--pl42-gold-wash)}
.pl42-career-node.is-current .pl42-career-dot{background:var(--pl42-gold);box-shadow:0 0 0 4px rgba(233,185,73,.18)}
.pl42-career-node-club{display:flex;align-items:center;gap:8px;font-size:var(--pl42-small);font-weight:700;min-width:0}
.pl42-career-node-club span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.pl42-career-node-stats{display:flex;flex-direction:column;gap:5px}
.pl42-career-node-stats span{display:flex;align-items:center;gap:7px;font-size:var(--pl42-label);color:var(--pl42-ink-4)}
.pl42-career-node-stats b{font-size:var(--pl42-small);color:var(--pl42-ink);font-weight:800}

.pl42-career-strip{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(280px,100%),1fr));gap:clamp(12px,1.3vw,26px);margin-top:18px;padding-top:18px;border-top:1px solid var(--pl42-line)}
.pl42-career-strip-col{display:flex;flex-direction:column;gap:10px;min-width:0}
.pl42-timeline-row{display:flex;align-items:center;gap:12px;padding:9px 0;border-bottom:1px solid var(--pl42-line-soft);min-width:0}
.pl42-timeline-row:last-child{border-bottom:0}
.pl42-timeline-row>div{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px}
.pl42-timeline-row b{font-size:var(--pl42-small);font-weight:700;overflow:hidden;text-overflow:ellipsis}
.pl42-timeline-row small{font-size:var(--pl42-label);color:var(--pl42-ink-4)}
.pl42-nextstep{display:flex;gap:12px;align-items:flex-start}
.pl42-nextstep b{display:block;font-size:var(--pl42-small);font-weight:700;margin-bottom:3px}
.pl42-nextstep small{font-size:var(--pl42-label);color:var(--pl42-ink-3);line-height:1.5}

.pl42-hub-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(320px,100%),1fr));gap:clamp(12px,1.1vw,16px)}
.pl42-hub-card{
  display:flex;align-items:center;gap:16px;text-align:left;min-height:96px;
  padding:16px 18px;border-radius:var(--pl42-r-lg);
  border:1px solid var(--pl42-line-strong);background:linear-gradient(180deg,var(--pl42-panel),var(--pl42-bg-2));
  box-shadow:var(--pl42-shadow-1);
  transition:border-color var(--pl42-mo-zustand) var(--pl42-ease),transform var(--pl42-mo-zustand) var(--pl42-ease),background var(--pl42-mo-zustand) var(--pl42-ease);
}
.pl42-hub-card:hover{border-color:rgba(233,185,73,.4);transform:translateY(-2px)}
.pl42-hub-copy{display:flex;flex-direction:column;gap:3px;min-width:0;flex:1}
.pl42-hub-copy b{font-size:var(--pl42-h3);font-weight:700}
.pl42-hub-copy>span{font-size:var(--pl42-small);color:var(--pl42-ink-3);line-height:1.5}
.pl42-hub-status{
  font-style:normal;margin-top:5px;font-size:var(--pl42-label);letter-spacing:.1em;
  text-transform:uppercase;font-weight:800;color:var(--pl42-gold);
}
.pl42-record-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(210px,100%),1fr));gap:16px}
.pl42-relation-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(230px,100%),1fr));gap:16px}
.pl42-relation{display:flex;flex-direction:column;gap:8px}
.pl42-relation .pl42-icon-stat,.pl42-relation>div{min-width:0}
.pl42-relation{padding:14px;border-radius:var(--pl42-r-md);border:1px solid var(--pl42-line);background:rgba(255,255,255,.02)}
.pl42-relation .pl42-ico-tile{margin-bottom:2px}

/* ------------------------------------------- full result rows (V0.43.0) ---- */
/* Both teams, both badges, the real score and the player's own line. */
.pl42-result-row--full{
  display:grid;
  /* date · home · score · away · outcome · performance · chevron.
     The chevron needs its own column; as a seventh child in a six-column grid it
     wrapped onto a second row and made every entry twice as tall. */
  grid-template-columns:auto minmax(0,1fr) auto minmax(0,1fr) auto auto auto;
  gap:10px;align-items:center;
}
.pl42-result-row--full time{font-size:var(--pl42-label);color:var(--pl42-ink-4);white-space:nowrap}
.pl42-result-side{display:flex;align-items:center;gap:8px;min-width:0}
.pl42-result-side b{font-size:var(--pl42-small);font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.pl42-result-side.is-mine b{color:var(--pl42-gold-bright);font-weight:800}
.pl42-result-row--full .pl42-result-side:nth-of-type(2){flex-direction:row-reverse;justify-content:flex-start}
.pl42-result-score{
  font-size:var(--pl42-h3);font-weight:800;font-variant-numeric:tabular-nums;
  white-space:nowrap;padding:0 4px;
}
.pl42-three-record{
  margin-top:12px;padding-top:12px;border-top:1px solid var(--pl42-line);
  font-size:var(--pl42-label);letter-spacing:.16em;text-transform:uppercase;
  color:var(--pl42-ink-3);font-weight:800;text-align:center;
}
.pl42-three-teams span.is-mine{color:var(--pl42-gold-bright);font-weight:800}
@media (max-width:900px){
  .pl42-result-row--full{grid-template-columns:auto minmax(0,1fr) auto auto;row-gap:6px}
  .pl42-result-row--full time{grid-row:span 2}
  .pl42-result-row--full .pl42-result-perf{grid-column:2/-2;text-align:left}
  /* The chevron keeps the last column across both rows. */
  .pl42-result-row--full>.pl42-ico{grid-column:-2;grid-row:span 2;align-self:center}
}

/* The next-match panel now carries every simulation entry point, so the
   controls stay compact and wrap cleanly instead of stretching the panel. */
.pl42-nextmatch-actions .pl42-btn{padding:0 13px;gap:7px}
.pl42-nextmatch-actions .pl42-btn span{font-size:var(--pl42-label);letter-spacing:.05em}
.pl42-nextmatch-actions .pl42-btn--primary span{font-size:var(--pl42-small);letter-spacing:.07em}

/* Entry points that the interface previously did not offer at all: the training
   plan and the player's own squad. They sit under the hero facts so they read as
   part of the player block rather than as page-level navigation. */
.pl42-hero-links{display:flex;flex-wrap:wrap;gap:8px;margin-top:12px}
/* Compact in width only. A reduced height would drop below the touch minimum,
   which the regression suite rightly rejected. */
.pl42-btn--small{min-height:var(--pl42-touch);padding:0 14px;gap:8px}
.pl42-btn--small span{font-size:var(--pl42-label);letter-spacing:.08em}
.pl42-attr-head p{font-size:var(--pl42-small);margin-top:2px}
/* A result row is now a control. It keeps the grid it already had and only gains
   the affordances of a button. */
.pl42-result-row--open{
  width:100%;text-align:left;cursor:pointer;
  border:1px solid transparent;border-radius:var(--pl42-r-sm);
  transition:background var(--pl42-mo-zustand) var(--pl42-ease),border-color var(--pl42-mo-zustand) var(--pl42-ease);
}
.pl42-result-row--open:hover{background:rgba(255,255,255,.04);border-color:var(--pl42-line)}
.pl42-result-row--open .pl42-ico{opacity:.5}
.pl42-result-row--open:hover .pl42-ico{opacity:1}

.pl42-analysis-head{padding:clamp(14px,1.2vw,22px)}
.pl42-analysis-teams{
  display:flex;align-items:center;justify-content:center;
  gap:clamp(12px,1.6vw,28px);flex-wrap:wrap;
}
.pl42-analysis-teams>strong{font-size:clamp(26px,2.6vw,40px);font-weight:800;font-variant-numeric:tabular-nums}
.pl42-analysis-teams .pl42-result-side{display:flex;align-items:center;gap:10px;min-width:0}
.pl42-analysis-teams .pl42-result-side b{font-size:var(--pl42-h3);font-weight:800}
.pl42-analysis-meta{
  display:flex;flex-wrap:wrap;gap:8px clamp(12px,1.4vw,24px);
  justify-content:center;margin-top:14px;
  font-size:var(--pl42-small);color:var(--pl42-ink-3);
}
.pl42-analysis-meta span{display:inline-flex;align-items:center;gap:7px}
/* The contract panel closes with its two key numbers and one normal control,
   instead of a full-width gold bar that dominated the whole panel. */
.pl42-contract-foot{
  display:flex;align-items:flex-end;gap:clamp(12px,1.4vw,24px);flex-wrap:wrap;
}
.pl42-contract-foot>.pl42-stat{min-width:max-content}
.pl42-contract-foot>.pl42-btn{margin-left:auto}
@media (max-width:1280px){
  .pl42-contract-foot>.pl42-btn{margin-left:0;width:100%}
}

/* The gap row in a leaderboard, shown when the player's own rank sits far below
   the visible top of the table. */
.pl42-board-gap td{
  text-align:center;color:var(--pl42-ink-4);letter-spacing:.4em;
  padding:4px 12px;background:rgba(255,255,255,.015);
}

/* The career player inside his own squad list. */
.pl42-squad-self{
  background:var(--pl42-gold-wash) !important;
  box-shadow:inset 3px 0 0 var(--pl42-gold);
}
.pl42-squad-self b{color:var(--pl42-gold-bright)}

/* The chevron on a result row belongs beside the performance, not on a line of
   its own - it was pushed to a second row and made every entry taller. */
.pl42-result-row--open{align-items:center}
.pl42-result-row--open>.pl42-ico{grid-column:auto;justify-self:end}
/* Simulation controls keep their label on one line. The row wraps instead, which
   keeps every button the same height rather than making two of them taller. */
.pl42-nextmatch-actions .pl42-btn span,
.pl42-cal-actions .pl42-btn span,
.pl42-head-actions .pl42-btn span{white-space:nowrap}
/* The calendar's simulation tiles carry their label in a <b>; two-word labels
   broke across lines and left the tiles at different heights.
   V0.51.1: nowrap alone cut the label off in the longer languages - French
   "Jusqu'a la treve hivernale", Italian "Fino alla sosta invernale",
   Portuguese "Ate a pausa de inverno" and Indonesian "Sampai jeda musim
   dingin" all run past the tile. The tiles keep their equal height through
   the grid, so the label may now wrap to a second line and, where even that
   is not enough, is shortened visibly instead of silently. */
.pl42-sim-grid .pl42-sim-tile>b{white-space:normal;overflow-wrap:anywhere;text-overflow:ellipsis;overflow:hidden}
.pl42-sim-grid{align-items:stretch}
.pl42-sim-tile{align-items:flex-start}
/* The role is the longest value in the hero facts row ("Nachwuchsspieler",
   "Schluesselspieler"). At narrower widths it was clipped by the fixed row, so
   the row now lets it wrap onto its own line rather than cutting it off, and the
   two facts sit side by side only while both genuinely fit. */
.pl42-hero-facts{flex-wrap:wrap;row-gap:10px;align-items:flex-start}
.pl42-hero-facts>.pl42-stat{min-width:0}
.pl42-hero-role{
  display:block;min-width:0;
  overflow-wrap:break-word;word-break:normal;hyphens:none;
  font-size:clamp(15px,1.05vw,20px);line-height:1.2;
}
@container (max-width:420px){
  .pl42-hero-facts>.pl42-hero-divider{display:none}
  .pl42-hero-facts>.pl42-stat{flex:1 1 100%}
}
/* Without container support the same reflow happens on viewport width. */
@media (max-width:1400px){
  .pl42-hero--player .pl42-hero-role{font-size:clamp(14px,.95vw,18px)}
}
.pl42-hero-copy{container-type:inline-size}
/* ---------------------------------- V0.48.4: Faktenzeile im Spieler-Hero --
   Die Bewertung stand als "O" ueber "V" ueber "R" und die Rolle war rechts
   abgeschnitten ("Academy play…"). Gemessen tritt das genau zwischen 1701 und
   1920 px Fensterbreite auf - dem gewoehnlichsten Desktop also, waehrend es
   darunter (zweispaltiges Layout) und weit darueber verschwindet. Deshalb ist
   es so lange durchgerutscht.

   Vier Regeln arbeiteten gegeneinander:
     1. `.pl42-hero--player .pl42-hero-facts{flex-wrap:nowrap}` (Z. 234) ist
        spezifischer als die Umbruchregeln weiter unten - die Zeile konnte nie
        umbrechen.
     2. `.pl42-hero-facts>.pl42-stat{min-width:0}` hebt den max-content-Boden
        auf, waehrend das Rollen-Paar seinen Boden ueber eine :has()-Regel
        behaelt. Das ganze Platzdefizit landet damit auf der Bewertung, die
        auf 0 px schrumpft.
     3. `#pl420Root *{overflow-wrap:break-word}` (shell.css Z. 36) laesst das
        Etikett in dieser 0-px-Box glyphenweise brechen - ausgerechnet unter
        dem Kommentar "Never let a word break letter-by-letter".
     4. Die Rolle ist `white-space:nowrap`, laeuft also ueber und wird von
        `.pl42-hero{overflow:hidden}` abgeschnitten.

   Statt einer schrumpfbaren Flex-Schiene ist es jetzt ein Raster aus zwei
   Etikett/Wert-Paaren - dieselbe Form, mit der schon die Angebotskarten
   repariert wurden. */
.pl42-hero--player .pl42-hero-facts{
  display:grid;
  grid-template-columns:minmax(max-content,1fr) minmax(0,1.7fr);
  column-gap:clamp(12px,1.4vw,26px);row-gap:10px;align-items:end;
}
.pl42-hero--player .pl42-hero-facts>.pl42-hero-divider{display:none}
.pl42-hero--player .pl42-hero-facts>.pl42-stat,
.pl42-hero--player .pl42-hero-facts>.pl42-stat:has(.pl42-hero-role){min-width:0}
/* Ein Etikett ist ein kurzes Token und bricht nie. */
.pl42-hero--player .pl42-hero-facts .pl42-stat small{white-space:nowrap}
/* `.pl42-stat strong` (shell.css Z. 178) ist spezifischer als
   `.pl42-hero-role`, die Rolle rendert oberhalb 1400 px deshalb mit 25 px
   statt der vorgesehenen Groesse - dieser Wert frisst die Zeile auf. */
.pl42-hero--player .pl42-hero-role{font-size:clamp(15px,1.05vw,20px)}
/* Die Rolle darf zwischen Woertern umbrechen, nie innerhalb eines Wortes. */
#pl420Root .pl42-hero--player .pl42-hero-role{
  white-space:normal;word-break:keep-all;overflow-wrap:normal;
}
/* Wird die Spalte zu schmal fuer beide Paare, stapeln sie sich - besser als
   die Rolle abzuschneiden. */
@container (max-width:320px){
  .pl42-hero--player .pl42-hero-facts{grid-template-columns:minmax(0,1fr)}
}

/* ======================================================================== */
/* V0.49.5 — Textkaesten in langen Sprachen. Gemeldet mit Bildschirmfoto:   */
/* die franzoesische Rollenzeile ("Perspective en equipe premiere") lief    */
/* hart aus dem Heldenkasten. Ursache: .pl42-hero-role erzwingt nowrap,     */
/* und der umgebende Stat trug min-width:max-content - der Kasten wuchs     */
/* mit dem laengsten Wort statt den Text zu begrenzen. Jede Faktenzeile     */
/* endet jetzt mit Ellipse statt auszubrechen; kurze Sprachen sehen         */
/* keinerlei Unterschied.                                                   */
/* ======================================================================== */
.pl42-hero-facts>.pl42-stat:has(.pl42-hero-role){min-width:0}
.pl42-hero-role{max-width:100%;overflow:hidden;text-overflow:ellipsis}
.pl42-hero-facts .pl42-stat{min-width:0}
.pl42-hero-facts .pl42-stat strong{max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
