.roster-page{max-width:1500px}.page-heading{align-items:center}.heading-actions{display:flex;gap:10px}.roster-toolbar{display:grid;grid-template-columns:1fr 1fr 1.25fr;gap:12px}.roster-toolbar select,.roster-toolbar input{min-height:52px;font-weight:800}.roster-summary{display:grid;grid-template-columns:repeat(4,1fr);gap:14px;margin:18px 0}.roster-kpi{background:linear-gradient(135deg,#151515,#292929);color:#fff;border-radius:18px;padding:18px 20px;border-bottom:5px solid #f4d000;box-shadow:0 8px 24px rgba(0,0,0,.08)}.roster-kpi small{display:block;color:#c7c7c7;font-weight:800;letter-spacing:.04em}.roster-kpi b{display:block;font-size:30px;margin-top:5px}.section-note{margin:6px 0 0;color:#6c6c6c}.top-grid{display:grid;grid-template-columns:1fr 1fr;gap:18px}.top-grid>div{border:1px solid #e5e7eb;border-radius:18px;padding:18px;background:#fafafa}.top-grid h4{margin:0 0 12px;font-size:18px}.ranking-list{display:grid;gap:8px}.ranking-row{display:grid;grid-template-columns:38px 1fr auto;gap:10px;align-items:center;background:#fff;border:1px solid #ececec;border-radius:12px;padding:9px 11px}.ranking-pos{width:30px;height:30px;border-radius:50%;display:grid;place-items:center;background:#111;color:#fff;font-weight:900}.ranking-player b,.ranking-player small{display:block}.ranking-player small{color:#777;margin-top:2px}.ranking-row strong{font-size:18px}.empty-ranking{padding:22px;text-align:center;color:#8a8a8a;font-weight:800;border:1px dashed #d7d7d7;border-radius:12px;background:#fff}.sector-admin{margin-top:14px;padding:16px;border:1px solid #efd96f;border-radius:16px;background:linear-gradient(135deg,#fff8cd,#fff2a8);display:grid;grid-template-columns:auto 1fr;gap:18px;align-items:center}.sector-admin-title span,.sector-admin-title small{display:block}.sector-admin-title span{font-weight:900}.sector-admin-title small{color:#776a22;margin-top:3px}.sector-admin-controls{display:grid;grid-template-columns:1.5fr .8fr auto;gap:10px}.sector-admin select{margin:0;min-width:0}.roster-teams-card{padding-bottom:24px}.roster-team-list{display:grid;gap:12px}.team-roster{border:1px solid #dfe2e6;border-radius:18px;overflow:hidden;background:#fff;box-shadow:0 5px 18px rgba(20,24,32,.04)}.team-roster>summary{list-style:none;padding:15px 18px;background:#111;color:#fff;cursor:pointer;font-weight:900;display:flex;justify-content:space-between;align-items:center;gap:14px}.team-roster>summary::-webkit-details-marker{display:none}.team-summary-main,.team-summary-side{display:flex;align-items:center;gap:12px}.team-summary-main b,.team-summary-main small{display:block}.team-summary-main b{font-size:17px}.team-summary-main small{font-size:12px;color:#d6d6d6;margin-top:3px}.team-badge{min-width:58px;height:40px;padding:0 10px;border-radius:12px;background:#f4d000;color:#111;display:grid;place-items:center;font-weight:950}.player-count{background:#2c2c2c;border:1px solid #4b4b4b;border-radius:999px;padding:7px 11px;font-size:12px}.chevron{font-size:22px;transition:transform .2s ease}.team-roster[open] .chevron{transform:rotate(180deg)}.team-roster-body{padding:0 14px 14px}.team-roster-actions{display:flex;justify-content:space-between;align-items:center;gap:12px;padding:14px 2px}.team-roster-actions b,.team-roster-actions small{display:block}.team-roster-actions small{color:#777;margin-top:2px}.add-player-team{white-space:nowrap}.roster-player-row{display:grid;grid-template-columns:minmax(180px,1.7fr) repeat(7,minmax(54px,.58fr)) minmax(244px,auto);gap:7px;align-items:center;padding:12px;border:1px solid #eceff1;border-radius:14px;margin-top:8px;background:#fbfbfb;min-width:0;overflow:hidden}.roster-player-row .name b{display:block}.roster-player-row .name small{display:block;color:#777;margin-top:3px}.roster-player-row .stat{text-align:center;background:#fff;border:1px solid #ececec;border-radius:10px;padding:7px 5px}.roster-player-row .stat small{display:block;color:#777;font-size:11px}.roster-player-row .stat b{font-size:15px}.roster-actions{display:flex;gap:6px;flex-wrap:wrap;justify-content:flex-end}.roster-actions button{white-space:nowrap}.empty-team{display:flex;align-items:center;gap:14px;padding:22px;border:1px dashed #d6d8dc;border-radius:14px;background:#fafafa;color:#666}.empty-team b{color:#222}.empty-team p{margin:4px 0 0}.empty-icon{width:44px;height:44px;display:grid;place-items:center;border-radius:50%;background:#eee;font-size:21px}.chart-box{height:260px;border:1px solid #ddd;border-radius:15px;padding:10px;margin:15px 0}.chart-box canvas{width:100%;height:100%}.history-scroll{overflow:auto}.history-table{width:100%;border-collapse:collapse;font-size:13px}.history-table th,.history-table td{padding:7px;border-bottom:1px solid #eee;text-align:center}.history-table th:first-child,.history-table td:first-child{text-align:left}
@media(max-width:1100px){.roster-player-row{grid-template-columns:minmax(180px,1.5fr) repeat(4,minmax(60px,.7fr));}.roster-player-row .stat:nth-of-type(n+6){display:none}.roster-actions{grid-column:1/-1;justify-content:flex-start}.sector-admin{grid-template-columns:1fr}.sector-admin-controls{grid-template-columns:1fr 1fr auto}}
@media(max-width:760px){.roster-toolbar,.top-grid,.roster-summary{grid-template-columns:1fr}.sector-admin-controls{grid-template-columns:1fr}.team-roster>summary,.team-roster-actions{align-items:flex-start}.team-summary-side{flex-direction:column;align-items:flex-end}.team-roster-actions{flex-direction:column}.add-player-team{width:100%}.roster-player-row{grid-template-columns:1fr 1fr}.roster-player-row .name{grid-column:1/-1}.roster-player-row .stat{display:block!important}.roster-actions{grid-column:1/-1}.roster-actions button{flex:1}.roster-detail-dialog{max-width:96vw}}

/* V8.7.4 - andamento squadra riservato amministratori */
.admin-team-trends.hidden{display:none!important}.team-trend-toolbar{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin:14px 0}.team-trend-toolbar label{font-weight:900;font-size:12px;letter-spacing:.04em}.team-trend-toolbar select{display:block;width:100%;min-height:50px;margin-top:6px;font-weight:850}.team-trend-kpis{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;margin:12px 0}.team-trend-mini{border:1px solid #e5e7eb;border-radius:14px;padding:12px 14px;background:#fafafa}.team-trend-mini small{display:block;color:#777;font-weight:800}.team-trend-mini b{display:block;font-size:22px;margin-top:4px}.team-chart-box{height:320px}.admin-team-trends .section-head{align-items:flex-start}
@media(max-width:760px){.team-trend-toolbar,.team-trend-kpis{grid-template-columns:1fr}.team-chart-box{height:260px}}


/* V8.7.5 - ALMANACCO STORICO TESSERATO */
.career-subtitle{margin-top:-6px;color:#707070;font-weight:700}.career-block{margin-top:20px;padding-top:18px;border-top:1px solid #e6e6e6}.career-title{display:flex;align-items:flex-start;justify-content:space-between;gap:14px;margin-bottom:12px}.career-title h3{margin:2px 0 0}.career-person-id{display:inline-flex;align-items:center;border-radius:999px;background:#111;color:#fff;border-bottom:3px solid #f4d000;padding:7px 11px;font-size:11px;font-weight:900;letter-spacing:.04em}.career-list{display:grid;gap:10px}.career-season{border:1px solid #e1e4e8;border-radius:16px;background:#fafafa;overflow:hidden}.career-season-head{display:flex;justify-content:space-between;gap:12px;align-items:center;background:#111;color:#fff;padding:11px 14px}.career-season-head span{background:#f4d000;color:#111;border-radius:9px;padding:5px 8px;font-weight:950}.career-season-head b{text-align:right}.career-season-stats{display:grid;grid-template-columns:repeat(7,1fr);gap:7px;padding:11px}.career-season-stats>div{border:1px solid #ececec;border-radius:10px;background:#fff;padding:8px 5px;text-align:center}.career-season-stats small{display:block;color:#777;font-size:10px;font-weight:800}.career-season-stats strong{display:block;margin-top:2px;font-size:15px}.roster-detail-dialog{width:min(1120px,94vw)}
@media(max-width:760px){.career-season-head{align-items:flex-start;flex-direction:column}.career-season-head b{text-align:left}.career-season-stats{grid-template-columns:repeat(2,1fr)}.career-title{flex-direction:column}.career-person-id{align-self:flex-start}}

/* V8.7.6 - azioni tesserato compatte + almanacco generale */
.heading-actions{align-items:center;flex-wrap:wrap}.almanac-main-button{min-height:48px;padding:0 22px;font-weight:950;border:2px solid #111!important;background:#fff!important;color:#111!important}.almanac-main-button:hover{background:#111!important;color:#fff!important}
.roster-actions{display:grid;grid-template-columns:repeat(3,minmax(72px,1fr));gap:6px;min-width:0;width:244px;max-width:244px;justify-self:end}.roster-actions button{min-height:42px;padding:8px 8px;border-radius:11px;font-weight:950;font-size:11px;letter-spacing:.02em;border:1px solid #d6d9dd;cursor:pointer;box-shadow:none}.action-data{background:#111;color:#fff;border-color:#111!important}.action-data:hover{background:#2a2a2a}.action-edit{background:#fff;color:#111}.action-edit:hover{background:#f3f4f6}.action-delete{background:#fff;color:#b42318;border-color:#f0b4ae!important}.action-delete:hover{background:#fff1f0;border-color:#d92d20!important}
.roster-almanac-dialog{width:min(900px,94vw)}.roster-almanac-dialog #almanacSearch{width:100%;min-height:50px;margin:6px 0 16px;font-weight:850}.almanac-player-list{display:grid;gap:9px;max-height:62vh;overflow:auto}.almanac-player-card{display:flex;align-items:center;justify-content:space-between;gap:14px;border:1px solid #e2e5e9;border-radius:14px;padding:12px 14px;background:#fafafa}.almanac-player-card b,.almanac-player-card small{display:block}.almanac-player-card b{font-size:16px}.almanac-player-card small{margin-top:4px;color:#707070;font-weight:700}.almanac-player-card button{white-space:nowrap}
@media(max-width:1100px){.roster-actions{min-width:0;grid-template-columns:repeat(3,minmax(90px,1fr));width:100%}}
@media(max-width:760px){.heading-actions{width:100%}.heading-actions button{flex:1}.roster-actions{grid-template-columns:1fr 1fr 1fr;width:100%}.roster-actions button{min-width:0;padding:8px 5px}.almanac-player-card{align-items:flex-start;flex-direction:column}.almanac-player-card button{width:100%}}

@media(max-width:1450px){.roster-player-row{grid-template-columns:minmax(180px,1.5fr) repeat(5,minmax(54px,.55fr)) minmax(244px,auto)}.roster-player-row .stat:nth-of-type(6),.roster-player-row .stat:nth-of-type(7){display:none}}
@media(max-width:1180px){.roster-player-row{grid-template-columns:minmax(180px,1.4fr) repeat(4,minmax(54px,.55fr))}.roster-actions{grid-column:1/-1;justify-self:stretch;width:100%;max-width:none}.roster-player-row .stat:nth-of-type(n+5){display:none}}

/* V8.7.8 - responsive robusto per PC/Mac, tablet e telefoni */
.roster-page{width:100%;min-width:0}
.roster-team-list,.team-roster,.team-roster-body{min-width:0;max-width:100%}
.roster-player-row>*{min-width:0}
.roster-player-row .name b{overflow-wrap:anywhere}

@media (min-width:1181px) and (max-width:1500px){
  .roster-player-row{grid-template-columns:minmax(165px,1.45fr) repeat(5,minmax(52px,.56fr)) minmax(228px,auto)}
  .roster-actions{width:228px;max-width:228px}
  .roster-actions button{padding-left:6px;padding-right:6px}
}

@media (min-width:761px) and (max-width:1180px){
  .roster-toolbar{grid-template-columns:1fr 1fr}
  .roster-toolbar #rosterSearch{grid-column:1/-1}
  .roster-player-row{grid-template-columns:minmax(190px,1.3fr) repeat(4,minmax(58px,.65fr))}
  .roster-actions{grid-column:1/-1;grid-template-columns:repeat(3,minmax(120px,1fr));width:100%;max-width:none;justify-self:stretch}
  .roster-player-row .stat:nth-of-type(n+5){display:none}
}

@media (max-width:760px){
  .roster-page{padding-left:max(8px,env(safe-area-inset-left));padding-right:max(8px,env(safe-area-inset-right))}
  .content-card{overflow:hidden}
  .team-roster-body{padding:0 8px 10px}
  .roster-player-row{grid-template-columns:repeat(2,minmax(0,1fr));padding:10px;gap:7px;overflow:visible}
  .roster-player-row .name{grid-column:1/-1;font-size:17px}
  .roster-player-row .stat{display:block!important;min-width:0}
  .roster-actions{grid-column:1/-1;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));width:100%;max-width:none;gap:6px}
  .roster-actions button{width:100%;min-width:0;min-height:44px;font-size:10px;padding:7px 3px;overflow-wrap:normal}
  .heading-actions{display:grid;grid-template-columns:1fr 1fr;width:100%}
  .heading-actions button{width:100%;min-width:0}
}

@media (max-width:430px){
  .roster-actions{grid-template-columns:1fr 1fr}
  .roster-actions .action-delete{grid-column:1/-1}
  .heading-actions{grid-template-columns:1fr}
  .roster-summary{gap:8px}
  .roster-kpi{padding:13px 14px}
  .roster-kpi b{font-size:24px}
}

@media (orientation:landscape) and (max-height:520px) and (max-width:950px){
  .roster-player-row{grid-template-columns:minmax(160px,1.2fr) repeat(3,minmax(54px,.55fr))}
  .roster-actions{grid-column:1/-1;grid-template-columns:repeat(3,1fr)}
}

/* V8.7.9 - dettaglio date presenze allenamenti */
.roster-player-row button.stat{font:inherit;color:inherit;appearance:none;-webkit-appearance:none}
.roster-player-row .stat-clickable{position:relative;cursor:pointer;transition:border-color .16s ease,background .16s ease,transform .16s ease;padding-bottom:17px}
.roster-player-row .stat-clickable:hover{border-color:#111;background:#fffdf0;transform:translateY(-1px)}
.roster-player-row .stat-clickable:focus-visible{outline:3px solid rgba(244,208,0,.55);outline-offset:2px}
.stat-hint{position:absolute;left:50%;bottom:3px;transform:translateX(-50%);font-size:8px;font-weight:950;letter-spacing:.08em;color:#8a7200}
.roster-presence-dialog{width:min(680px,94vw)}
.presence-toolbar{display:grid;grid-template-columns:minmax(180px,1fr) 180px;gap:12px;align-items:end;margin:18px 0}
.presence-toolbar label{font-weight:900}.presence-toolbar select{margin-top:6px;width:100%;min-height:48px}
.presence-total{background:#111;color:#fff;border-radius:15px;padding:11px 16px;border-bottom:4px solid #f4d000;text-align:center}.presence-total small,.presence-total b{display:block}.presence-total small{color:#ddd;font-size:11px;font-weight:900}.presence-total b{font-size:27px;margin-top:2px}
.presence-date-list{display:grid;gap:9px;max-height:52vh;overflow:auto;padding-right:3px}
.presence-date-row{display:grid;grid-template-columns:minmax(150px,190px) 1fr;gap:14px;align-items:center;border:1px solid #e5e7eb;border-radius:13px;padding:11px 13px;background:#fafafa}
.presence-calendar span,.presence-calendar small{display:block}.presence-calendar span{font-weight:950;font-size:16px}.presence-calendar small{font-size:10px;color:#776500;font-weight:900;margin-top:3px;letter-spacing:.05em}.presence-date-row p{margin:0;color:#666;font-size:13px}
@media(max-width:620px){.presence-toolbar{grid-template-columns:1fr}.presence-date-row{grid-template-columns:1fr}.presence-date-list{max-height:58vh}}

/* V1.03 - registrazione massiva presenze allenamento */
.bulk-presence-box{margin:12px 0 16px;padding:16px;border:2px solid #111;border-radius:18px;background:#fffdf2;box-shadow:0 8px 22px rgba(0,0,0,.04)}
.bulk-presence-head{display:grid;grid-template-columns:1fr minmax(190px,240px);gap:16px;align-items:end}.bulk-presence-head .eyebrow{margin:0 0 3px;color:#8a7200}.bulk-presence-head b{display:block;font-size:18px}.bulk-presence-head small{display:block;margin-top:4px;color:#6b7280;font-weight:700}.bulk-presence-date{font-size:11px;font-weight:950;letter-spacing:.04em}.bulk-presence-date input{display:block;width:100%;min-height:46px;margin-top:6px;border:1px solid #cfd4da;border-radius:12px;padding:0 12px;font:inherit;font-weight:850;background:#fff}
.bulk-presence-selectbar{display:flex;justify-content:space-between;align-items:center;gap:12px;margin-top:14px;padding:10px 12px;border-radius:12px;background:#111;color:#fff}.bulk-select-all{display:flex;align-items:center;gap:9px;font-weight:950;cursor:pointer}.bulk-select-all input,.bulk-player-check input{width:20px;height:20px;accent-color:#f4d000}.bulk-presence-selectbar>span{font-size:11px;font-weight:850;color:#ddd}
.bulk-player-checks{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;margin-top:10px}.bulk-player-check{display:flex;align-items:center;gap:9px;min-height:42px;padding:8px 10px;border:1px solid #e1e4e8;border-radius:11px;background:#fff;font-weight:850;cursor:pointer}.bulk-player-check span{min-width:0;overflow-wrap:anywhere}
.bulk-presence-actions{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-top:12px}.bulk-presence-actions button{min-height:46px;font-weight:950}.bulk-remove-presence{border:2px solid #b42318!important;color:#b42318!important;background:#fff!important}.bulk-remove-presence:hover{background:#fff1f0!important}.bulk-presence-actions button:disabled{opacity:.5;cursor:wait}
@media(max-width:900px){.bulk-player-checks{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:620px){.bulk-presence-head{grid-template-columns:1fr}.bulk-player-checks{grid-template-columns:1fr}.bulk-presence-actions{grid-template-columns:1fr}.bulk-presence-selectbar{align-items:flex-start;flex-direction:column}}
