:root{--bg:#07111f;--panel:rgba(12,22,38,.74);--panel2:rgba(16,30,52,.82);--line:rgba(148,180,220,.22);--text:#eaf2ff;--muted:#9fb3cf;--blue:#1d8cff;--blue2:#0e4f9b;--green:#3ddc97;--amber:#f7b731;--red:#ff5c75;--white:#fff}*{box-sizing:border-box}body{margin:0;font-family:Inter,Segoe UI,Roboto,Arial,sans-serif;color:var(--text);background:#06101d;min-height:100vh}.app-bg{position:fixed;inset:0;z-index:-2;background:linear-gradient(rgba(4,10,18,.55),rgba(4,10,18,.78)),url('images/hockey-rink-wallpaper.jpg'),radial-gradient(circle at top,#183d68,#06101d 55%);background-size:cover;background-position:center}.app-bg:after{content:"";position:absolute;inset:0;background:radial-gradient(circle at 50% 0%,rgba(29,140,255,.22),transparent 40%),linear-gradient(180deg,rgba(6,12,22,.18),rgba(6,12,22,.78))}.glass{background:var(--panel);border:1px solid var(--line);backdrop-filter:blur(12px);box-shadow:0 18px 55px rgba(0,0,0,.32)}.topbar{margin:18px auto 12px;max-width:1500px;border-radius:22px;padding:18px 22px;display:flex;justify-content:space-between;align-items:center;gap:18px}.brand{display:flex;align-items:center;gap:18px}.brand-logo{width:118px;max-height:92px;object-fit:contain;filter:drop-shadow(0 8px 20px rgba(0,0,0,.35))}.eyebrow{text-transform:uppercase;letter-spacing:.13em;color:#88bfff;font-size:12px;font-weight:800}.brand h1{margin:2px 0;font-size:34px;line-height:1}.brand p{margin:0;color:var(--muted)}.top-actions{display:flex;gap:10px;flex-wrap:wrap}.btn{border:1px solid rgba(85,158,255,.45);background:linear-gradient(180deg,rgba(29,140,255,.95),rgba(14,79,155,.95));color:white;border-radius:12px;padding:11px 15px;font-weight:800;cursor:pointer;text-decoration:none}.btn.ghost{background:rgba(255,255,255,.06)}.layout{max-width:1500px;margin:0 auto 24px;padding:0 12px}.dashboard-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;margin:12px 0}.metric{border-radius:18px;padding:16px}.metric span{display:block;color:var(--muted);font-size:13px}.metric strong{display:block;font-size:26px;margin:6px 0}.metric small{color:#7f94b1}.main-grid{display:grid;grid-template-columns:minmax(520px,42%) 1fr;gap:14px}.panel{border-radius:22px;padding:16px;min-height:620px}.section-head{display:flex;align-items:flex-end;justify-content:space-between;gap:12px;margin-bottom:12px}.section-head h2{margin:0;font-size:24px}.search{width:260px;max-width:100%;border:1px solid var(--line);background:rgba(4,10,18,.55);color:var(--text);border-radius:12px;padding:11px 12px;outline:none}.legend-row{display:flex;gap:14px;flex-wrap:wrap;color:var(--muted);font-size:12px;margin-bottom:10px}.dot{display:inline-block;width:9px;height:9px;border-radius:99px;margin-right:6px}.green{background:var(--green)}.amber{background:var(--amber)}.red{background:var(--red)}.table-wrap{overflow:auto;border-radius:16px;border:1px solid var(--line)}table{width:100%;border-collapse:collapse;font-size:13px}th,td{padding:11px 10px;border-bottom:1px solid rgba(148,180,220,.13);white-space:nowrap}th{position:sticky;top:0;background:rgba(12,22,38,.94);text-align:left;color:#bcd2ee;font-size:12px;text-transform:uppercase;letter-spacing:.06em;cursor:pointer}tbody tr{transition:.15s ease}tbody tr:hover,tbody tr.active{background:rgba(29,140,255,.14)}.team-cell{display:flex;align-items:center;gap:9px;font-weight:800}.team-cell img{width:30px;height:30px;object-fit:contain}.money-pos{color:var(--green);font-weight:800}.money-neg{color:var(--red);font-weight:800}.capbar{height:9px;border-radius:99px;background:rgba(255,255,255,.09);overflow:hidden}.capbar span{display:block;height:100%;background:linear-gradient(90deg,var(--blue),#58d0ff)}.capbar.over span{background:linear-gradient(90deg,var(--red),#ff9da9)}.empty-state{text-align:center;margin:auto;max-width:460px;padding-top:90px;color:var(--muted)}.empty-state img{width:150px;opacity:.78}.empty-state h2{color:var(--text)}.team-hero{display:flex;justify-content:space-between;align-items:center;gap:18px;margin-bottom:16px}.team-title{display:flex;align-items:center;gap:16px}.team-title img{width:96px;height:96px;object-fit:contain;filter:drop-shadow(0 12px 25px rgba(0,0,0,.42))}.team-title h2{margin:0;font-size:32px}.pill{display:inline-flex;align-items:center;border:1px solid var(--line);background:rgba(255,255,255,.06);border-radius:999px;padding:6px 10px;color:#bcd2ee;font-size:12px;font-weight:800}.detail-cards{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin-bottom:16px}.mini-card{background:rgba(4,10,18,.35);border:1px solid var(--line);border-radius:16px;padding:14px}.mini-card span{display:block;color:var(--muted);font-size:12px;text-transform:uppercase;letter-spacing:.05em}.mini-card strong{display:block;font-size:22px;margin-top:5px}.split{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-bottom:14px}.chart-card,.commit-card{background:rgba(4,10,18,.35);border:1px solid var(--line);border-radius:18px;padding:14px}.salary-list{display:flex;flex-direction:column;gap:8px}.salary-row{display:grid;grid-template-columns:1fr 90px;gap:8px;align-items:center}.player-dot{height:8px;border-radius:99px;background:linear-gradient(90deg,#1d8cff,#7dd3fc);min-width:3px}.commit-row{display:flex;justify-content:space-between;align-items:center;padding:9px 0;border-bottom:1px solid rgba(148,180,220,.13)}.players-head{display:flex;justify-content:space-between;align-items:center;margin:12px 0}.players-head h3{margin:0}.badge{border-radius:999px;padding:4px 8px;font-weight:900;font-size:11px}.badge.ufa{background:rgba(255,92,117,.18);color:#ffb3bf;border:1px solid rgba(255,92,117,.38)}.badge.rfa{background:rgba(61,220,151,.16);color:#a7f3d0;border:1px solid rgba(61,220,151,.38)}.badge.end{background:rgba(247,183,49,.14);color:#ffe2a4;border:1px solid rgba(247,183,49,.35)}.loading{position:fixed;right:18px;bottom:18px;background:rgba(4,10,18,.9);border:1px solid var(--line);border-radius:14px;padding:12px 14px;color:#cfe4ff;box-shadow:0 12px 35px rgba(0,0,0,.4)}.hidden{display:none!important}.status-ok{color:var(--green)}.status-warn{color:var(--amber)}.status-bad{color:var(--red)}@media (max-width:1100px){.dashboard-grid{grid-template-columns:repeat(2,1fr)}.main-grid{grid-template-columns:1fr}.panel{min-height:auto}.detail-cards{grid-template-columns:repeat(2,1fr)}}@media (max-width:720px){.topbar{flex-direction:column;align-items:flex-start}.brand-logo{width:88px}.brand h1{font-size:26px}.dashboard-grid,.detail-cards,.split{grid-template-columns:1fr}.section-head{align-items:flex-start;flex-direction:column}.search{width:100%}th,td{padding:10px 8px}.team-title img{width:72px;height:72px}.team-title h2{font-size:24px}}

.filter-row{display:flex;gap:8px;flex-wrap:wrap;margin:-2px 0 12px}.filter-chip{border:1px solid var(--line);background:rgba(255,255,255,.055);color:#cfe4ff;border-radius:999px;padding:8px 11px;font-weight:800;font-size:12px;cursor:pointer}.filter-chip:hover,.filter-chip.active{border-color:rgba(85,158,255,.75);background:rgba(29,140,255,.22);color:#fff}
@media (max-width:1100px){.detail-cards{grid-template-columns:repeat(2,1fr)}}@media (max-width:720px){.detail-cards{grid-template-columns:1fr}}

.free-agent-row{background:rgba(255,255,255,.025)}.free-tag{display:inline-flex;align-items:center;margin-right:7px;border:1px solid rgba(159,179,207,.35);color:#cbd5e1;background:rgba(148,163,184,.12);border-radius:999px;padding:2px 6px;font-size:10px;letter-spacing:.05em}.salary-fa{color:#9fb3cf;font-weight:900}.badge.fa{background:rgba(148,163,184,.16);color:#cbd5e1;border:1px solid rgba(148,163,184,.38)}

/* v2.4 */
th.sorted::after{content:attr(data-dir);font-size:10px;margin-left:6px;color:#88bfff;text-transform:uppercase}.badge.active{background:rgba(29,140,255,.14);color:#bfdbfe;border:1px solid rgba(85,158,255,.35)}

/* v2.6 objective salary-center refinements */
.commit-visual-row{display:grid;grid-template-columns:112px 1fr;gap:10px;align-items:center;padding:8px 0;border-bottom:1px solid rgba(148,180,220,.10)}
.commit-visual-row div:first-child{display:flex;flex-direction:column;gap:2px}.commit-visual-row strong{font-size:13px}.commit-visual-row span{font-size:12px;color:var(--muted)}
.commit-visual-bar,.bucket-bar{height:9px;border-radius:99px;background:rgba(255,255,255,.08);overflow:hidden}.commit-visual-bar i,.bucket-bar i{display:block;height:100%;border-radius:99px;background:linear-gradient(90deg,var(--blue),#7dd3fc)}
.compact-split{margin-top:-2px}.bucket-row{display:grid;grid-template-columns:90px 1fr 35px;gap:10px;align-items:center;padding:8px 0;border-bottom:1px solid rgba(148,180,220,.10)}
.badge.active{background:rgba(29,140,255,.18);color:#bfe0ff;border:1px solid rgba(85,158,255,.42)}
.muted{color:var(--muted)}
#playersTable th.sorted::after{content:attr(data-dir);font-size:10px;margin-left:6px;color:#88bfff;text-transform:uppercase}

/* v2.7 season selector */
.season-select{border:1px solid rgba(85,158,255,.45);background:rgba(4,10,18,.62);color:var(--text);border-radius:12px;padding:11px 14px;font-weight:800;outline:none;min-width:145px}.season-select option{background:#081426;color:#eaf2ff}

/* v2.8 CapWages SNHL visual refresh */
.capwages-card{background:linear-gradient(180deg,rgba(13,26,46,.52),rgba(4,10,18,.36))}.cap-gauge{border:1px solid rgba(148,180,220,.18);background:rgba(255,255,255,.045);border-radius:18px;padding:14px;margin-bottom:16px}.cap-gauge-top,.cap-gauge-foot{display:flex;justify-content:space-between;gap:12px;align-items:center}.cap-gauge-top strong{font-size:28px}.cap-gauge-top span,.cap-gauge-foot span{color:var(--muted);font-weight:800}.cap-gauge-foot b{font-size:13px}.cap-gauge-bar{height:18px;border-radius:999px;background:rgba(255,255,255,.095);overflow:hidden;margin:12px 0;box-shadow:inset 0 0 0 1px rgba(255,255,255,.04)}.cap-gauge-bar i{display:block;height:100%;border-radius:999px;background:linear-gradient(90deg,#0d6efd,#56c7ff);box-shadow:0 0 24px rgba(29,140,255,.34)}.cap-gauge.over .cap-gauge-bar i{background:linear-gradient(90deg,var(--red),#ffa3b0)}.cap-gauge.under .cap-gauge-bar i{background:linear-gradient(90deg,var(--amber),#ffe08a)}.allocation-block h3{margin:8px 0 10px;font-size:16px}.alloc-row{display:grid;grid-template-columns:92px 1fr 80px;gap:10px;align-items:center;padding:7px 0;border-bottom:1px solid rgba(148,180,220,.10)}.alloc-row span{color:#cfe4ff;font-weight:800;font-size:12px}.alloc-row strong{text-align:right;font-size:12px}.alloc-bar{height:10px;border-radius:999px;background:rgba(255,255,255,.08);overflow:hidden}.alloc-bar i{display:block;height:100%;border-radius:999px;background:linear-gradient(90deg,#1d8cff,#7dd3fc)}.alloc-bar.defense i{background:linear-gradient(90deg,#3ddc97,#9af5d1)}.alloc-bar.goalies i{background:linear-gradient(90deg,#f7b731,#ffe29a)}.salary-row.salary-click{width:100%;border:0;color:var(--text);background:rgba(255,255,255,.035);border-radius:12px;padding:10px;cursor:pointer;text-align:left}.salary-row.salary-click:hover{background:rgba(29,140,255,.14)}.expiry-row{display:grid;grid-template-columns:70px 1fr 90px;gap:10px;align-items:center;padding:9px 0;border-bottom:1px solid rgba(148,180,220,.12)}.expiry-row span{color:var(--muted)}.expiry-row b{text-align:right}.player-data-row{cursor:pointer}.player-data-row:hover{background:rgba(29,140,255,.16)!important}.modal-backdrop{position:fixed;inset:0;background:rgba(2,6,12,.72);display:flex;align-items:center;justify-content:center;z-index:50;padding:18px}.player-modal{position:relative;border-radius:22px;padding:24px;width:min(620px,96vw)}.player-modal h2{margin:4px 0 18px;font-size:30px}.modal-close{position:absolute;right:14px;top:12px;border:1px solid var(--line);background:rgba(255,255,255,.08);color:var(--text);border-radius:12px;width:36px;height:36px;font-size:24px;cursor:pointer}.modal-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:10px}.modal-grid div{border:1px solid var(--line);background:rgba(4,10,18,.38);border-radius:14px;padding:13px}.modal-grid span{display:block;color:var(--muted);font-size:12px;text-transform:uppercase;letter-spacing:.06em}.modal-grid strong{display:block;margin-top:5px;font-size:18px}.salary-focus{grid-template-columns:1.05fr .95fr}@media(max-width:900px){.modal-grid{grid-template-columns:1fr 1fr}.salary-focus{grid-template-columns:1fr}}@media(max-width:560px){.modal-grid{grid-template-columns:1fr}.cap-gauge-top strong{font-size:22px}.alloc-row{grid-template-columns:80px 1fr 70px}}
.league-summary{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;border-radius:18px;padding:14px 16px;margin:0 0 14px}.league-summary div{background:rgba(4,10,18,.28);border:1px solid rgba(148,180,220,.16);border-radius:14px;padding:12px}.league-summary span{display:block;color:var(--muted);font-size:12px;text-transform:uppercase;letter-spacing:.05em}.league-summary strong{display:block;margin-top:5px;font-size:18px}.money-warn{color:var(--amber);font-weight:800}@media (max-width:1100px){.league-summary{grid-template-columns:repeat(2,1fr)}}@media (max-width:720px){.league-summary{grid-template-columns:1fr}}

/* v3.0 overview / dedicated team-page architecture */
.compact-topbar{padding:14px 20px;margin-top:12px}.compact-topbar .brand-logo{width:104px;max-height:82px}.compact-topbar .brand h1{font-size:30px}.overview-layout,.team-layout{max-width:1580px}.dashboard-grid-wide{grid-template-columns:repeat(6,1fr)}.overview-charts{display:grid;grid-template-columns:1.45fr .9fr;gap:14px;margin:14px 0}.overview-charts.secondary-charts{grid-template-columns:repeat(3,1fr)}.chart-panel{min-height:auto}.wide-chart{min-height:520px}.full-table-panel{min-height:auto;margin-top:14px}.league-bars{display:flex;flex-direction:column;gap:8px;max-height:690px;overflow:auto;padding-right:4px}.league-bar-row{display:grid;grid-template-columns:270px 1fr 118px;gap:12px;align-items:center;color:var(--text);text-decoration:none;border:1px solid rgba(148,180,220,.13);background:rgba(4,10,18,.32);border-radius:14px;padding:9px 10px;transition:.16s ease}.league-bar-row:hover{background:rgba(29,140,255,.15);border-color:rgba(85,158,255,.45);transform:translateY(-1px)}.league-bar-row.over{border-color:rgba(255,92,117,.38)}.league-bar-row.under{border-color:rgba(247,183,49,.38)}.league-bar-team{display:flex;align-items:center;gap:10px;min-width:0}.league-bar-team img{width:34px;height:34px;object-fit:contain;flex:0 0 auto}.league-bar-team span{color:var(--muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.league-bar-track{height:14px;border-radius:999px;background:rgba(255,255,255,.09);overflow:hidden;box-shadow:inset 0 0 0 1px rgba(255,255,255,.04)}.league-bar-track i{display:block;height:100%;border-radius:999px;background:linear-gradient(90deg,#1d8cff,#7dd3fc);box-shadow:0 0 16px rgba(29,140,255,.28)}.league-bar-row.over .league-bar-track i{background:linear-gradient(90deg,var(--red),#ffa3b0)}.league-bar-row.under .league-bar-track i{background:linear-gradient(90deg,var(--amber),#ffe08a)}.league-bar-value{text-align:right}.league-bar-value strong{display:block}.league-bar-value span{display:block;color:var(--muted);font-size:12px}.salary-row span{display:block;color:var(--muted);font-size:12px;margin-top:2px}.salary-row.salary-click{text-decoration:none}.team-cell{text-decoration:none;color:var(--text)}.team-toolbar{display:flex;justify-content:space-between;align-items:center;gap:12px;margin-bottom:14px}.team-page-panel{min-height:640px}.team-hero-large{padding-bottom:8px;border-bottom:1px solid rgba(148,180,220,.12)}.team-hero-large .team-title img{width:118px;height:118px}.team-hero-large .team-title h2{font-size:42px}.detail-cards-wide{grid-template-columns:repeat(4,1fr)}.team-full-split{grid-template-columns:1fr 1fr}.team-select{min-width:220px}.bucket-row span{color:#cfe4ff;font-weight:800}.full-table-panel table tbody tr{cursor:pointer}.full-table-panel table tbody tr:hover{background:rgba(29,140,255,.14)}@media(max-width:1300px){.dashboard-grid-wide{grid-template-columns:repeat(3,1fr)}.overview-charts,.overview-charts.secondary-charts{grid-template-columns:1fr}.wide-chart{min-height:auto}.league-bar-row{grid-template-columns:230px 1fr 104px}.detail-cards-wide{grid-template-columns:repeat(2,1fr)}}@media(max-width:720px){.dashboard-grid-wide{grid-template-columns:1fr}.league-bar-row{grid-template-columns:1fr;gap:8px}.league-bar-value{text-align:left;display:flex;justify-content:space-between}.team-toolbar{align-items:flex-start;flex-direction:column}.team-hero-large .team-title{align-items:flex-start}.team-hero-large .team-title img{width:86px;height:86px}.team-hero-large .team-title h2{font-size:28px}.team-full-split,.detail-cards-wide{grid-template-columns:1fr}.team-select{width:100%}.top-actions{width:100%}.top-actions .btn,.top-actions .season-select{width:100%}}

/* v3.1 - Vue d'ensemble CapWages SNHL */
.removed{display:none!important}
.dashboard-grid-wide{grid-template-columns:repeat(5,1fr)}
.team-logo-strip{border-radius:20px;padding:12px;margin:12px 0 14px;display:flex;gap:10px;align-items:center;overflow-x:auto;scrollbar-width:none}
.team-logo-link{width:58px;height:58px;flex:0 0 auto;border:1px solid rgba(148,180,220,.18);background:rgba(4,10,18,.34);border-radius:16px;display:flex;align-items:center;justify-content:center;position:relative;text-decoration:none;transition:.15s ease}
.team-logo-link img{width:42px;height:42px;object-fit:contain;filter:drop-shadow(0 5px 12px rgba(0,0,0,.32))}
.team-logo-link span{position:absolute;bottom:3px;font-size:9px;color:rgba(220,235,255,.55);font-weight:900;letter-spacing:.04em}
.team-logo-link:hover,.team-logo-link.active{transform:translateY(-2px);border-color:rgba(85,158,255,.75);background:rgba(29,140,255,.18);box-shadow:0 0 22px rgba(29,140,255,.22)}
.overview-charts{align-items:stretch}
.overview-charts > .chart-panel{height:520px;overflow:hidden;display:flex;flex-direction:column}
.overview-charts > .chart-panel .league-bars,.overview-charts > .chart-panel .salary-list{flex:1;overflow:auto;min-height:0}
.overview-charts > .chart-panel:not(.wide-chart){min-height:0}
#leagueTopContracts .salary-row{min-height:70px}
.salary-overview-tables{grid-template-columns:repeat(5,1fr)!important}
.salary-overview-tables .small-chart{height:360px;min-height:0}
.compact-list .salary-row{padding:9px 10px;min-height:56px}
.mini-team-row strong{display:flex;align-items:center;gap:8px}.mini-team-row img{width:24px;height:24px;object-fit:contain}.mini-team-row small{display:block;color:var(--muted);font-size:11px;margin-top:2px}.mini-team-row div:last-child{text-align:right}
@media(max-width:1300px){.dashboard-grid-wide{grid-template-columns:repeat(3,1fr)}.salary-overview-tables{grid-template-columns:repeat(2,1fr)!important}.overview-charts > .chart-panel{height:auto;max-height:none}.team-logo-link{width:54px;height:54px}.team-logo-link img{width:38px;height:38px}}
@media(max-width:720px){.dashboard-grid-wide,.salary-overview-tables{grid-template-columns:1fr!important}.team-logo-strip{padding:10px}.team-logo-link{width:50px;height:50px}.team-logo-link img{width:35px;height:35px}}


/* v3.2 - finition vue d'ensemble */
.team-logo-strip{overflow-x:auto;overflow-y:hidden;scrollbar-width:none;-ms-overflow-style:none;scroll-behavior:smooth;mask-image:linear-gradient(90deg,transparent 0,#000 22px,#000 calc(100% - 22px),transparent 100%);-webkit-mask-image:linear-gradient(90deg,transparent 0,#000 22px,#000 calc(100% - 22px),transparent 100%)}
.team-logo-strip::-webkit-scrollbar{display:none}
.team-logo-link{height:56px;width:56px;border-radius:18px}
.team-logo-link span{display:none!important}
.team-logo-link img{width:44px;height:44px}
.salary-overview-tables .small-chart{height:auto;min-height:265px;max-height:none;overflow:hidden}
.salary-overview-tables .small-chart .salary-list{overflow:visible!important;max-height:none!important}
.compact-list .salary-row:nth-child(n+6){display:none}
.overview-charts > .chart-panel{height:480px}
#leagueTopContracts .salary-row:nth-child(n+6){display:none}
.site-footer{max-width:1580px;margin:18px auto 24px;padding:12px 18px;border-radius:16px;text-align:center;color:rgba(220,235,255,.72);font-weight:800;letter-spacing:.04em}
@media(max-width:1300px){.salary-overview-tables .small-chart{min-height:auto}.overview-charts > .chart-panel{height:auto}.team-logo-strip{mask-image:none;-webkit-mask-image:none}}

/* v3.3 - fiche joueur NHL.com + navigation logos améliorée */
.team-logo-strip{position:relative;cursor:grab;scroll-snap-type:x proximity;overscroll-behavior-x:contain;padding-bottom:14px!important;max-width:100%;}
.team-logo-strip.dragging{cursor:grabbing;user-select:none;scroll-snap-type:none}
.team-logo-link{scroll-snap-align:start}
.team-logo-strip::after{content:"Glisser →";position:sticky;right:8px;align-self:center;margin-left:2px;padding:5px 8px;border:1px solid rgba(148,180,220,.18);border-radius:999px;background:rgba(4,10,18,.52);color:rgba(220,235,255,.72);font-size:11px;font-weight:900;pointer-events:none;white-space:nowrap}
.player-modal-wide{width:min(900px,96vw)}
.player-modal-layout{display:grid;grid-template-columns:210px 1fr;gap:20px;align-items:start}
.player-photo-wrap{border:1px solid rgba(148,180,220,.20);border-radius:18px;background:rgba(4,10,18,.38);min-height:260px;display:flex;align-items:center;justify-content:center;overflow:hidden}
.player-photo-placeholder{width:100%;height:100%;min-height:260px;display:flex;align-items:center;justify-content:center;color:rgba(220,235,255,.45);font-weight:900;text-transform:uppercase;letter-spacing:.08em;background:linear-gradient(180deg,rgba(255,255,255,.05),rgba(255,255,255,.02))}
.player-photo-placeholder img{width:100%;height:100%;object-fit:cover;display:block}
.player-photo-wrap.no-photo .player-photo-placeholder{display:flex}
.hockeydb-section{margin-top:14px;border-top:1px solid rgba(148,180,220,.16);padding-top:14px}
.hockeydb-head{display:flex;justify-content:space-between;align-items:center;gap:10px;margin-bottom:10px}
.hockeydb-head a{color:#8dc5ff;text-decoration:none;font-weight:900;font-size:13px}
.hockeydb-head a:hover{text-decoration:underline}
.hockeydb-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:10px}
.hockeydb-grid div,.hockeydb-note{border:1px solid rgba(148,180,220,.18);background:rgba(4,10,18,.30);border-radius:14px;padding:12px}
.hockeydb-grid span{display:block;color:var(--muted);font-size:11px;text-transform:uppercase;letter-spacing:.06em;margin-bottom:5px}
.hockeydb-grid strong{font-size:15px;color:var(--text)}
@media(max-width:760px){.player-modal-layout{grid-template-columns:1fr}.player-photo-wrap{min-height:220px}.player-photo-placeholder{min-height:220px}.hockeydb-grid{grid-template-columns:1fr}.team-logo-strip::after{display:none}}

/* v3.4 - ajustements fiche équipe */
.players-section-priority{margin:18px 0 22px;padding-top:4px}
.players-section-priority .table-wrap{max-height:560px;overflow:auto}
.lower-analytics{margin-top:22px}
.team-logo-link{cursor:pointer}
.top-actions .btn{white-space:nowrap}
@media(max-width:720px){.players-section-priority .table-wrap{max-height:none}.top-actions .btn{white-space:normal}}

/* v3.5 - Responsive mobile/tablette */
html{overflow-x:hidden}
body{-webkit-text-size-adjust:100%;overflow-x:hidden}
img{max-width:100%}
button,select,input{font:inherit}
.btn,.season-select,.filter-chip{min-height:44px;touch-action:manipulation}

/* Les tableaux restent complets, avec défilement tactile fluide. */
.table-wrap{-webkit-overflow-scrolling:touch;overscroll-behavior-x:contain;max-width:100%}
.table-wrap table{min-width:860px}
#playersTable{min-width:790px}
#teamsTable{min-width:980px}

/* La navigation des équipes est utilisable au doigt sans afficher de barre. */
.team-logo-strip{-webkit-overflow-scrolling:touch;touch-action:pan-x;scroll-padding-inline:12px}
.team-logo-link{min-width:56px}

@media (max-width:1200px){
  .topbar,.layout,.site-footer{max-width:calc(100% - 24px)}
  .overview-charts{grid-template-columns:1fr 1fr}
  .salary-overview-tables{grid-template-columns:repeat(2,minmax(0,1fr))!important}
  .dashboard-grid-wide{grid-template-columns:repeat(3,minmax(0,1fr))}
  .team-full-split{grid-template-columns:1fr 1fr}
}

@media (max-width:900px){
  .topbar{align-items:stretch;flex-direction:column;padding:16px;margin-top:12px}
  .brand{align-items:center}
  .brand-logo{width:92px;max-height:78px;flex:0 0 auto}
  .brand h1{font-size:28px}
  .brand p{font-size:14px;line-height:1.35}
  .top-actions{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));width:100%}
  .top-actions .btn,.top-actions .season-select,.top-actions .team-select{width:100%;min-width:0;text-align:center}
  .dashboard-grid-wide{grid-template-columns:repeat(2,minmax(0,1fr))}
  .overview-charts{grid-template-columns:1fr}
  .overview-charts > .chart-panel{height:auto;min-height:0}
  .league-bars{max-height:none}
  .salary-overview-tables{grid-template-columns:repeat(2,minmax(0,1fr))!important}
  .team-hero,.team-toolbar{align-items:flex-start;flex-direction:column}
  .team-hero-large .team-title{width:100%}
  .detail-cards-wide{grid-template-columns:repeat(2,minmax(0,1fr))}
  .team-full-split{grid-template-columns:1fr}
  .players-head{align-items:flex-start;flex-direction:column;gap:10px}
  .players-head .search{width:100%}
}

@media (max-width:640px){
  :root{--panel:rgba(12,22,38,.86);--panel2:rgba(16,30,52,.9)}
  .app-bg{background-position:55% center}
  .topbar,.layout,.site-footer{max-width:calc(100% - 16px);margin-left:auto;margin-right:auto}
  .topbar{border-radius:16px;padding:12px;gap:12px}
  .brand{gap:11px;align-items:center}
  .brand-logo{width:68px;max-height:66px}
  .eyebrow{font-size:10px;letter-spacing:.1em}
  .brand h1{font-size:23px;line-height:1.05;margin:3px 0}
  .brand p{font-size:12px}
  .top-actions{grid-template-columns:1fr;gap:8px}
  .top-actions .btn,.top-actions .season-select,.top-actions .team-select{padding:10px 12px}
  .layout{padding:0}
  .dashboard-grid-wide{grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;margin:8px 0}
  .metric{padding:12px;border-radius:14px;min-width:0}
  .metric span{font-size:11px}
  .metric strong{font-size:20px;overflow-wrap:anywhere}
  .metric small{font-size:10px}
  .team-logo-strip{margin:8px 0 10px;padding:9px!important;border-radius:15px;gap:8px}
  .team-logo-link{width:48px;height:48px;min-width:48px;border-radius:14px}
  .team-logo-link img{width:37px;height:37px}
  .panel{padding:12px;border-radius:16px}
  .section-head{gap:8px;margin-bottom:10px}
  .section-head h2{font-size:19px;line-height:1.15}
  .search{font-size:16px;min-height:44px}
  .league-bar-row{grid-template-columns:minmax(0,1fr) 78px;padding:9px;gap:8px}
  .league-bar-team{grid-column:1/2}
  .league-bar-track{grid-column:1/3;grid-row:2}
  .league-bar-value{grid-column:2;grid-row:1;display:block;text-align:right}
  .league-bar-team img{width:29px;height:29px}
  .league-bar-team strong{font-size:13px}
  .league-bar-team span{font-size:11px}
  .salary-overview-tables{grid-template-columns:1fr!important;gap:10px}
  .salary-overview-tables .small-chart{min-height:0}
  .compact-list .salary-row{min-height:50px;padding:8px}
  .salary-row{grid-template-columns:minmax(0,1fr) 78px}
  .full-table-panel{margin-top:10px}
  .legend-row{gap:8px;font-size:10px}
  .table-wrap{border-radius:12px}
  th,td{padding:10px 9px;font-size:12px}
  th{font-size:10px}
  #teamsTable th:first-child,#teamsTable td:first-child,
  #playersTable th:first-child,#playersTable td:first-child{position:sticky;left:0;z-index:2;background:#0c1728;box-shadow:6px 0 12px rgba(0,0,0,.18)}
  #teamsTable th:first-child,#playersTable th:first-child{z-index:4;background:#0c1728}
  .team-cell img{width:26px;height:26px}
  .team-page-panel{padding:12px;min-height:0}
  .team-hero-large{gap:10px}
  .team-hero-large .team-title{align-items:center;gap:10px}
  .team-hero-large .team-title img{width:66px;height:66px}
  .team-hero-large .team-title h2{font-size:24px;line-height:1.1;overflow-wrap:anywhere}
  .team-title .pill{font-size:10px}
  .detail-cards-wide{grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}
  .mini-card{padding:11px;border-radius:13px;min-width:0}
  .mini-card strong{font-size:18px;overflow-wrap:anywhere}
  .cap-gauge{padding:11px;border-radius:14px}
  .cap-gauge-top strong{font-size:21px}
  .cap-gauge-top span,.cap-gauge-foot span,.cap-gauge-foot b{font-size:11px}
  .cap-gauge-bar{height:14px}
  .filter-row{gap:6px;overflow-x:auto;flex-wrap:nowrap;padding-bottom:4px;scrollbar-width:none;-webkit-overflow-scrolling:touch}
  .filter-row::-webkit-scrollbar{display:none}
  .filter-chip{flex:0 0 auto;padding:8px 10px}
  .players-section-priority{margin-top:12px}
  .split,.team-full-split{gap:10px}
  .chart-card,.commit-card{padding:11px;border-radius:14px}
  .commit-visual-row{grid-template-columns:88px 1fr}
  .player-modal{padding:14px;border-radius:16px;max-height:92vh;overflow-y:auto}
  .player-modal-wide{width:calc(100vw - 16px)}
  .player-modal-layout{gap:12px}
  .player-photo-wrap,.player-photo-placeholder{min-height:190px;max-height:270px}
  .modal-grid,.hockeydb-grid{grid-template-columns:1fr!important}
  .modal-close{width:42px;height:42px;font-size:24px}
  .site-footer{font-size:12px;margin-top:12px;margin-bottom:12px}
  .loading{left:8px;right:8px;bottom:8px;text-align:center}
}

@media (max-width:390px){
  .dashboard-grid-wide{grid-template-columns:1fr}
  .brand-logo{width:60px}
  .brand h1{font-size:21px}
  .detail-cards-wide{grid-template-columns:1fr}
  .league-bar-row{grid-template-columns:minmax(0,1fr) 70px}
}

@media (hover:none) and (pointer:coarse){
  .btn,.team-logo-link,.filter-chip,tbody tr{transition:none}
  .team-logo-link:hover,.league-bar-row:hover{transform:none}
  .team-logo-strip::after{display:none}
}

/* v3.6 - recherche globale et navigation directe */
.global-player-search{position:relative;flex:1 1 360px;max-width:520px;min-width:260px;z-index:40}
.global-search-input{width:100%;padding-left:15px;background:rgba(4,10,18,.72);border-color:rgba(85,158,255,.38);box-shadow:0 0 0 1px rgba(29,140,255,.05),0 10px 28px rgba(0,0,0,.18)}
.global-search-results{position:absolute;top:calc(100% + 8px);left:0;right:0;max-height:440px;overflow:auto;background:rgba(7,16,29,.98);border:1px solid rgba(85,158,255,.42);border-radius:16px;padding:7px;box-shadow:0 22px 60px rgba(0,0,0,.58);backdrop-filter:blur(18px)}
.global-search-result{display:grid;grid-template-columns:42px minmax(0,1fr) auto;gap:10px;align-items:center;padding:10px;border-radius:11px;color:var(--text);text-decoration:none;border:1px solid transparent}
.global-search-result:hover,.global-search-result:focus{background:rgba(29,140,255,.15);border-color:rgba(85,158,255,.32);outline:none}
.global-search-result img{width:38px;height:38px;object-fit:contain}
.global-search-result span{min-width:0}
.global-search-result strong,.global-search-result small{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.global-search-result small{color:var(--muted);font-size:11px;margin-top:3px}
.global-search-result b{font-size:12px;color:#b9dcff;white-space:nowrap}
.global-search-empty{padding:18px;text-align:center;color:var(--muted)}
.team-toolbar-links{display:flex;gap:9px;flex-wrap:wrap}

@media(max-width:1150px){
  .topbar{flex-wrap:wrap}
  .global-player-search{order:3;max-width:none;flex-basis:100%;width:100%}
}
@media(max-width:720px){
  .global-player-search{min-width:0;width:100%}
  .global-search-results{position:fixed;left:8px;right:8px;top:150px;max-height:calc(100vh - 170px)}
  .global-search-result{grid-template-columns:36px minmax(0,1fr) auto;padding:9px 7px}
  .global-search-result img{width:32px;height:32px}
  .team-toolbar-links{width:100%}
  .team-toolbar-links .btn{flex:1 1 180px;text-align:center}
}

/* v3.7 - recherche plus compacte et résultats au-dessus de l'interface */
.topbar{
  position:relative;
  z-index:500;
  overflow:visible;
}
.layout,
.overview-layout,
.dashboard-grid,
.dashboard-grid-wide,
.overview-charts,
.team-logo-strip,
.panel,
.metric{
  position:relative;
  z-index:1;
}
.global-player-search{
  position:relative;
  z-index:1200;
  flex:0 1 360px;
  width:360px;
  max-width:360px;
  min-width:280px;
}
.global-search-results{
  z-index:5000;
  overflow-y:auto;
  overflow-x:hidden;
  isolation:isolate;
}
.global-search-result{
  transition:background .16s ease,border-color .16s ease,transform .16s ease;
}
.global-search-result:hover,
.global-search-result:focus{
  transform:translateX(2px);
}

@media(max-width:1280px){
  .global-player-search{
    flex-basis:320px;
    width:320px;
    max-width:320px;
  }
}

@media(max-width:1150px){
  .global-player-search{
    order:3;
    flex:1 1 100%;
    width:100%;
    max-width:none;
    min-width:0;
  }
}

@media(max-width:720px){
  .topbar{z-index:2000}
  .global-search-results{
    z-index:9999;
    top:136px;
  }
}

/* v3.8 - alignement uniforme de l'en-tête avec le contenu */
.topbar{
  width:calc(100% - 24px);
  max-width:1580px;
  margin-left:auto;
  margin-right:auto;
}

@media(max-width:720px){
  .topbar{
    width:calc(100% - 16px);
    max-width:none;
  }
}


/* v3.9 - identité d’équipe dans la fiche joueur */
.player-team-identity{display:flex;align-items:center;gap:12px;margin:-6px 0 16px;padding:11px 13px;border:1px solid rgba(91,156,230,.28);background:rgba(11,31,55,.56);border-radius:15px}
.player-team-identity img{width:48px;height:48px;object-fit:contain;flex:0 0 48px;filter:drop-shadow(0 4px 8px rgba(0,0,0,.35))}
.player-team-identity span{display:block;color:var(--muted);font-size:11px;text-transform:uppercase;letter-spacing:.08em;font-weight:800}
.player-team-identity strong{display:block;margin-top:3px;font-size:17px;color:var(--text)}
@media(max-width:560px){.player-team-identity img{width:42px;height:42px;flex-basis:42px}.player-team-identity strong{font-size:15px}}


/* Portail v5 branding */
.brand-logo{width:clamp(105px,10vw,155px)!important;height:clamp(95px,9vw,145px)!important;object-fit:contain!important;filter:drop-shadow(0 12px 28px rgba(0,0,0,.45))}
@media(max-width:760px){.brand-logo{width:86px!important;height:80px!important}.topbar,.hero{align-items:flex-start!important}.brand h1{font-size:clamp(29px,8vw,42px)!important}}


/* v3.10 / Portail 8.6 */
.topbar{align-items:flex-start}
.global-player-search{align-self:center}
.team-logo-link{cursor:pointer;touch-action:pan-y}
.team-logo-link img{pointer-events:none}
@media(min-width:1051px){.team-page-controls{min-width:540px}.team-page-controls .salary-select-row{margin-top:2px}}
