.analytics-card{margin:18px 0;padding:20px;background:#fff;border:1px solid var(--line);border-radius:17px;box-shadow:var(--shadow);overflow-x:auto}.analytics-heading,.section-heading{display:flex;align-items:flex-start;justify-content:space-between;gap:18px}.analytics-heading h2,.section-heading h2{margin:0;font-size:22px}.analytics-heading p,.section-heading p{margin:4px 0 0;color:var(--muted)}.data-note{max-width:280px;color:var(--muted);font-size:12px;text-align:right}.line-chart{display:block;width:100%;height:auto;min-height:230px;margin-top:12px}.chart-grid-line{stroke:#e2e9e3;stroke-width:1}.chart-axis-label,.chart-x-label{fill:#6a776d;font-size:11px}.chart-value{fill:#203128;font-size:12px;font-weight:800}.evolution-details{display:grid;grid-template-columns:repeat(auto-fit,minmax(125px,1fr));gap:8px;margin-top:8px}.evolution-details article{display:grid;gap:5px;padding:10px;border-radius:10px;background:#f2f6f2}.evolution-details a{color:var(--ink);text-decoration:none}.evolution-members{display:grid;gap:2px}.evolution-details strong{font-size:21px;color:var(--green)}.evolution-details span{font-weight:750}.evolution-details article>div{display:grid;gap:3px;font-size:11px}.evolution-details article>div a{color:var(--muted)}.evolution-details .renewal-link{color:var(--green);font-weight:800}.section-heading{margin:30px 0 14px}.analytics-kpis{grid-template-columns:repeat(auto-fit,minmax(145px,1fr))}.analytics-kpis .stat{padding:17px}.analytics-kpis .stat strong{font-size:28px}.analytics-layout{display:grid;grid-template-columns:1.35fr 1fr;gap:17px}.analytics-layout .analytics-card{margin:0}.chart-legend{display:flex;gap:14px;font-size:12px;color:var(--muted)}.chart-legend span:before{content:'';display:inline-block;width:9px;height:9px;border-radius:3px;margin-right:5px}.chart-legend .bookings:before{background:#b9d5c2}.chart-legend .attendances:before{background:#28764e}.bar-chart{height:280px;display:flex;align-items:stretch;gap:10px;border-bottom:1px solid var(--line);padding:18px 5px 0;overflow-x:auto}.bar-group{min-width:58px;flex:1;display:grid;grid-template-rows:1fr auto auto;gap:5px;text-align:center}.bars{display:flex;align-items:flex-end;justify-content:center;gap:4px;min-height:170px}.bar{display:block;width:min(18px,38%);min-height:2px;border-radius:5px 5px 0 0}.bar.bookings{background:#b9d5c2}.bar.attendances{background:#28764e}.bar-group strong{font-size:11px}.bar-group small{font-size:10px;color:var(--muted)}.chart-empty{display:grid;place-items:center;min-height:210px;color:var(--muted);text-align:center}.table-wrap.flat{box-shadow:none}.slot-stat-table{min-width:620px}.slot-stat-table small{display:block;color:var(--muted);margin-top:3px}.member-stat-details{margin-top:22px}.member-stat-details summary{cursor:pointer;font-size:18px;font-weight:800;margin-bottom:13px}@media(max-width:1000px){.analytics-layout{grid-template-columns:1fr}}@media(max-width:700px){.analytics-heading,.section-heading{flex-direction:column}.data-note{text-align:left}.line-chart{min-width:760px}.evolution-details{grid-template-columns:repeat(2,1fr)}}@media(max-width:450px){.analytics-kpis{grid-template-columns:1fr}}
.data-quality{display:flex;justify-content:space-between;gap:12px;margin:14px 0;padding:12px 14px;border-radius:11px;background:var(--pale);color:var(--green)}.data-quality.warning{background:#fff0cd;color:#795308}.data-quality a{color:inherit;font-weight:800}.slot-stat-cards{display:grid;gap:10px;margin-top:14px}.slot-stat-cards article{padding:13px;border:1px solid var(--line);border-radius:12px}.slot-stat-cards header{display:flex;justify-content:space-between;gap:10px}.slot-stat-cards p{margin:8px 0}.slot-stat-cards small{display:block;margin-top:7px;color:var(--muted)}.occupation-track{height:9px;border-radius:999px;background:var(--pale);overflow:hidden}.occupation-track i{display:block;height:100%;background:var(--green2)}@media(max-width:520px){.data-quality{align-items:flex-start;flex-direction:column}}
.retention-definition{margin:0 0 15px;color:var(--muted)}.retention-kpis{grid-template-columns:repeat(4,1fr);margin-bottom:17px}.retention-kpis .stat{text-decoration:none;color:var(--ink)}.retention-kpis .stat.active{outline:3px solid var(--green2)}.retention-filters{display:grid;grid-template-columns:145px 170px minmax(210px,1fr) auto auto;gap:8px;align-items:end;margin:14px 0}.retention-table-intro{display:flex;align-items:center;justify-content:space-between;gap:15px}.retention-table-intro p{margin:0 0 7px;color:var(--muted);font-size:12px}.retention-table-intro kbd{padding:2px 5px;border:1px solid var(--line);border-bottom-width:2px;border-radius:5px;background:#fff;color:var(--ink);font:inherit;font-weight:800}.retention-scroll-top{height:17px;margin-bottom:3px;overflow-x:auto;overflow-y:hidden}.retention-scroll-top[hidden]{display:none}.retention-scroll-top>div{height:1px}.retention-table-wrap{height:min(68vh,720px);min-height:330px;overflow:auto;scrollbar-gutter:stable;border-radius:10px}.retention-table{width:max-content;min-width:100%;table-layout:fixed}.retention-table th,.retention-table td{height:44px;padding:7px 8px;white-space:nowrap}.retention-table thead th{position:sticky;top:0;z-index:4}.retention-table th>span{display:block}.retention-member-column{position:sticky;left:0;z-index:3;width:148px;max-width:148px;min-width:148px;overflow:hidden;text-align:left!important;text-overflow:ellipsis;background:#fff}.retention-member-column .member-name{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.retention-table th.retention-member-column{z-index:6;background:#f3f6f3}.retention-table th:nth-child(2),.retention-table td:nth-child(2){width:100px;max-width:100px}.retention-table th:nth-child(3),.retention-table td:nth-child(3){width:78px;max-width:78px;text-align:center}.retention-table th:nth-child(4),.retention-table td:nth-child(4),.retention-table th:nth-child(5),.retention-table td:nth-child(5){width:62px;max-width:62px;text-align:center}.retention-status{display:inline-block;max-width:94px;overflow:hidden;padding:5px 7px;border-radius:999px;font-size:10px;font-weight:850;text-overflow:ellipsis}.retention-status.renewed{background:#dff1e5;color:#176137}.retention-status.new{background:#e7eef9;color:#254c7e}.retention-status.returning{background:#fff0cd;color:#795308}.retention-status.not_renewed{background:#fbe8e8;color:#8b2e2e}.season-history-heading{width:62px;min-width:62px;max-width:62px;text-align:center;background:var(--season-bg);color:var(--season-fg);line-height:1.05}.season-history-cell{width:62px;min-width:62px;max-width:62px;text-align:center;font-size:16px;font-weight:900}.season-history-cell.registered{background:var(--season-bg);color:var(--season-fg)}.season-history-cell.absent{color:#b5bdb7;background:#fff}.retention-table .sortable-heading[data-sort-priority]::before{content:attr(data-sort-priority);display:inline-grid;place-items:center;width:16px;height:16px;margin-right:3px;border-radius:50%;background:var(--green);color:#fff;font-size:9px;vertical-align:1px}@media(max-width:900px){.retention-kpis{grid-template-columns:1fr 1fr}.retention-filters{grid-template-columns:1fr 1fr}.retention-filters label:last-of-type{grid-column:1/-1}.retention-table-wrap{height:58vh;min-height:300px}.retention-member-column{width:126px;max-width:126px;min-width:126px}.retention-table th,.retention-table td{padding:6px}}@media(max-width:560px){.retention-kpis,.retention-filters{grid-template-columns:1fr}.retention-filters label:last-of-type{grid-column:auto}.retention-filters .button{width:100%}.retention-table-intro{align-items:flex-start;flex-direction:column;gap:0}}
