.player-modal{max-width:700px}.player-bio{display:flex;gap:20px;padding:20px;border-bottom:1px solid var(--border)}.player-photo-wrap{flex-shrink:0}.player-bio{--tp: var(--border)}.player-photo{width:104px;height:104px;border-radius:50%;border:3px solid var(--tp);object-fit:cover;object-position:top;background:var(--bg-elevated)}.player-bio-info{display:flex;flex-direction:column;gap:6px;min-width:0}.player-bio-name{font:800 28px/1.05 var(--font-display);letter-spacing:.01em;text-transform:uppercase;color:var(--text);display:flex;align-items:center;gap:10px}.player-bio-name .player-bio-number{height:26px;min-width:34px;font-size:17px}.player-bio-details{display:flex;flex-wrap:wrap;gap:6px;align-items:center}.player-bio-tag{display:inline-flex;align-items:center;font:700 15px/1.2 var(--font-display);letter-spacing:.04em;text-transform:uppercase;color:var(--text-secondary)}.player-bio-tag+.player-bio-tag:before{content:"·";margin-right:6px;color:var(--text-muted)}.player-bio-detail{font-size:13px;color:var(--text-muted)}.player-bio-detail+.player-bio-detail:before{content:"·";margin-right:6px}.player-bio-team{display:flex;align-items:center;gap:6px;font-size:14px;font-weight:600;color:var(--team-accent, var(--accent));margin-top:2px}.player-bio-team img{width:22px;height:22px;object-fit:contain}.player-biography{border-bottom:1px solid var(--border)}.player-biography-content{padding:0 16px 14px;font-size:12.5px;line-height:1.6;color:var(--text-secondary)}.player-biography-content p{margin:0 0 6px}.player-biography-content p:last-child{margin-bottom:0}.player-biography-content ul{margin:0;padding-left:18px}.player-biography-content li{margin-bottom:4px}.player-biography-content em{color:var(--text-muted)}.player-stats-section{padding:0}.player-stats-header{font:800 19px/1.05 var(--font-display);color:var(--text);text-transform:uppercase;letter-spacing:.01em;padding:16px 16px 8px}.player-stats-table{width:100%;border-collapse:collapse;font-size:13px}.player-stats-table thead th{padding:6px 8px;text-align:right;font-size:10px;font-weight:700;color:var(--text-muted);text-transform:uppercase;letter-spacing:.06em;border-bottom:1px solid var(--border);white-space:nowrap}.player-stats-table thead th:first-child,.player-stats-table thead th:nth-child(2){text-align:left}.player-stats-table tbody td{padding:5px 8px;border-bottom:1px solid var(--border-light);color:var(--text-secondary);white-space:nowrap}.player-stats-table tbody td.season-name{text-align:left;font-weight:500;color:var(--text);font-size:11px}.player-stats-table tbody td.team-name{text-align:left;color:var(--text-muted);font-size:11px}.player-stats-table tbody td.num{text-align:right;font-variant-numeric:tabular-nums}.player-stats-table tbody td.bold{font-weight:700;color:var(--text)}.player-stats-table tbody td.pos{color:var(--green)}.player-stats-table tbody td.neg{color:var(--text-muted)}.player-stats-table .total-row td{border-top:1px solid var(--border);border-bottom:none;font-weight:700;color:var(--text)}.player-content{padding-bottom:8px}@media (max-width: 600px){.player-modal{max-width:100%}.player-bio{gap:14px;padding:16px}.player-photo{width:80px;height:80px}.player-bio-name{font-size:22px}.player-stats-table{font-size:11px}.player-stats-table thead th,.player-stats-table tbody td{padding:4px 5px}.player-stats-table tbody td.season-name{font-size:10px;max-width:80px;overflow:hidden;text-overflow:ellipsis}.player-stats-table tbody td.team-name{font-size:10px;max-width:70px;overflow:hidden;text-overflow:ellipsis}}.contracts-page{display:flex;flex-direction:column;gap:12px;max-width:1120px;width:100%;margin:0 auto}.contracts-page .page-title{margin:0;font:800 30px/1.05 var(--font-display);text-transform:uppercase;letter-spacing:.01em;color:var(--text)}.contracts-intro,.contracts-foot{margin:0;max-width:75ch;color:var(--text-secondary);font-size:14px}.contracts-foot{font-size:12px;color:var(--text-muted)}.contracts-foot b{color:var(--text-secondary);font-weight:600}.contracts-loading{display:flex;flex-direction:column;gap:12px;min-height:100vh}.ct-empty{padding:12px 0;display:grid;gap:8px}.ct-empty .empty-msg{margin:0}.ct-empty a{color:var(--team-accent, var(--accent));font-weight:600;font-size:13px}.ct-kpis{display:flex;flex-wrap:wrap;align-items:baseline;gap:6px 28px;padding:2px 0 4px}.ct-kpi{min-width:0;display:flex;align-items:baseline;gap:6px}.ct-kpi b{font:800 34px/1 var(--font-display);font-variant-numeric:tabular-nums;color:var(--text)}.ct-kpi span{font:700 13px/1.1 var(--font-display);letter-spacing:.06em;text-transform:uppercase;color:var(--text-muted)}.ct-filters{display:flex;flex-wrap:wrap;align-items:center;gap:10px 12px;padding:0 0 10px;border-bottom:1px solid var(--border)}.ct-seg{display:flex;flex-wrap:nowrap;overflow-x:auto;gap:2px 14px}.ct-seg button{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-bottom:2px solid transparent;padding:6px 0 5px;color:var(--text-secondary);cursor:pointer;white-space:nowrap;flex:none;font:700 14.5px/1 var(--font-display);letter-spacing:.03em;text-transform:uppercase}.ct-seg button span{margin-left:4px;color:var(--text-muted);font-weight:600;font-variant-numeric:tabular-nums}.ct-seg button:hover{color:var(--text)}.ct-seg button[aria-pressed=true]{color:var(--text);border-bottom-color:var(--team-accent, var(--accent))}.ct-seg button:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.ct-selects{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin-left:auto}.ct-selects .moves-search{flex:0 1 200px}.ct-orgs{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:24px 28px;align-items:start}.ct-org{min-width:0}.ct-org-head{flex-wrap:wrap;row-gap:2px}.ct-org-head{margin-bottom:4px}.ct-org-sub{flex:1 1 100%;margin:0;font-size:13px;color:var(--text-muted)}.ct-head,.ct-row{display:grid;grid-template-columns:minmax(0,1.6fr) 52px 92px minmax(0,1.4fr) 108px;gap:8px;align-items:center;padding:7px 0}.ct-head{padding-top:8px;padding-bottom:4px;border-bottom:1px solid var(--border);font:700 12px/1.1 var(--font-display);letter-spacing:.06em;text-transform:uppercase;color:var(--text-muted)}.ct-head span:last-child,.ct-season{text-align:right}.ct-rows{list-style:none;margin:0;padding:0}.ct-row{border-bottom:1px solid var(--border-light);font-size:13px}.ct-row:last-child{border-bottom:0}.ct-row:hover{background:var(--bg-card-hover)}.ct-name{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:600;color:var(--text)}.ct-name button.player-link{border:0;background:none;padding:0;font:inherit;font-weight:600;color:inherit;cursor:pointer}.ct-name small{margin-left:5px;font-size:11px;font-weight:500;color:var(--text-muted)}.ct-team{display:flex;flex-direction:column;gap:1px;min-width:0}.ct-team a{display:inline-flex;align-items:center;gap:6px;font-weight:600;color:var(--text);text-decoration:none}.ct-team a:hover{color:var(--team-accent, var(--accent))}.ct-team img{width:16px;height:16px;object-fit:contain}.ct-outside{font-size:11px;color:var(--text-muted);white-space:nowrap}.ct-st{font-size:12px;color:var(--text-secondary);min-width:0}.ct-st.up{color:var(--amber);font-weight:600}.ct-st.ir{color:var(--text)}.ct-st.dim,.ct-season .dim{color:var(--text-muted)}.ct-season{font-size:12px;color:var(--text-secondary);font-variant-numeric:tabular-nums;white-space:nowrap}.deal-chip{display:inline-flex;align-items:center;font:700 12.5px/1.1 var(--font-display);letter-spacing:.06em;text-transform:uppercase;white-space:nowrap}.deal-nhl{color:var(--text)}.deal-ahl{color:var(--text-secondary)}.deal-echl{color:var(--text-muted)}.roster-deal{margin-left:6px;font-size:11px;vertical-align:1px}.roster-deal-club{font-weight:600;letter-spacing:.02em}@media (max-width: 640px){.roster-deal-club{display:none}}.roster-deals-line{display:flex;align-items:center;flex-wrap:wrap;gap:6px;min-height:22px;margin:6px 0 12px;font-size:13px;color:var(--text-secondary)}.roster-deals-line b{color:var(--text);font-variant-numeric:tabular-nums}.roster-deals-line a{color:var(--team-accent, var(--accent));font-weight:600;text-decoration:none}.roster-deals-line a:hover{text-decoration:underline}.roster-deals-line>span:last-child{margin-left:2px}.player-bio-deal{display:flex;align-items:center;flex-wrap:wrap;gap:6px;margin-top:6px;font-size:13px;color:var(--text-secondary)}.player-bio-deal a{color:var(--accent);font-weight:600;text-decoration:none}.player-bio-deal a:hover{text-decoration:underline}@media (max-width: 900px){.ct-orgs{grid-template-columns:minmax(0,1fr)}.ct-selects{margin-left:0}}@media (max-width: 640px){.contracts-page .page-title{font-size:24px}.ct-kpis{gap:6px 18px}.ct-kpi b{font-size:26px}.ct-selects,.ct-selects .moves-team,.ct-selects select{width:100%}.ct-selects .moves-search{flex:1 1 100%}.ct-head{display:none}.ct-row{grid-template-columns:minmax(0,1fr) auto;gap:3px 8px;padding:8px 0}.ct-name{grid-column:1}.ct-deal{grid-column:2;grid-row:1;justify-self:end}.ct-team{grid-column:1 / -1;flex-direction:row;flex-wrap:wrap;align-items:center;gap:4px 10px;font-size:12px}.ct-st{grid-column:1}.ct-season{grid-column:2}}
