/* Style współdzielone przez wszystkie strony publiczne i panel — te same tokeny kolorów
   i komponenty, których używa prototyp, żeby wygląd był spójny. */
/* Fonty Barlow i Barlow Condensed (SIL Open Font License 1.1, pliki OFL-*.txt) — hostowane lokalnie, bez Google Fonts (RODO). Etap 26. */
@font-face {
  font-family: 'Barlow';
  font-style: normal;
  font-display: swap;
  font-weight: 400;
  src: url(fonts/barlow-latin-ext-400-normal.woff2) format('woff2');
  unicode-range: U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF;
}
@font-face {
  font-family: 'Barlow';
  font-style: normal;
  font-display: swap;
  font-weight: 400;
  src: url(fonts/barlow-latin-400-normal.woff2) format('woff2');
  unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
}
@font-face {
  font-family: 'Barlow';
  font-style: italic;
  font-display: swap;
  font-weight: 400;
  src: url(fonts/barlow-latin-ext-400-italic.woff2) format('woff2');
  unicode-range: U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF;
}
@font-face {
  font-family: 'Barlow';
  font-style: italic;
  font-display: swap;
  font-weight: 400;
  src: url(fonts/barlow-latin-400-italic.woff2) format('woff2');
  unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
}
@font-face {
  font-family: 'Barlow';
  font-style: normal;
  font-display: swap;
  font-weight: 600;
  src: url(fonts/barlow-latin-ext-600-normal.woff2) format('woff2');
  unicode-range: U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF;
}
@font-face {
  font-family: 'Barlow';
  font-style: normal;
  font-display: swap;
  font-weight: 600;
  src: url(fonts/barlow-latin-600-normal.woff2) format('woff2');
  unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
}
@font-face {
  font-family: 'Barlow';
  font-style: normal;
  font-display: swap;
  font-weight: 700;
  src: url(fonts/barlow-latin-ext-700-normal.woff2) format('woff2');
  unicode-range: U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF;
}
@font-face {
  font-family: 'Barlow';
  font-style: normal;
  font-display: swap;
  font-weight: 700;
  src: url(fonts/barlow-latin-700-normal.woff2) format('woff2');
  unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
}
@font-face {
  font-family: 'Barlow Condensed';
  font-style: normal;
  font-display: swap;
  font-weight: 600;
  src: url(fonts/barlow-condensed-latin-ext-600-normal.woff2) format('woff2');
  unicode-range: U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF;
}
@font-face {
  font-family: 'Barlow Condensed';
  font-style: normal;
  font-display: swap;
  font-weight: 600;
  src: url(fonts/barlow-condensed-latin-600-normal.woff2) format('woff2');
  unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
}
@font-face {
  font-family: 'Barlow Condensed';
  font-style: normal;
  font-display: swap;
  font-weight: 700;
  src: url(fonts/barlow-condensed-latin-ext-700-normal.woff2) format('woff2');
  unicode-range: U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF;
}
@font-face {
  font-family: 'Barlow Condensed';
  font-style: normal;
  font-display: swap;
  font-weight: 700;
  src: url(fonts/barlow-condensed-latin-700-normal.woff2) format('woff2');
  unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
}
@font-face {
  font-family: 'Barlow Condensed';
  font-style: italic;
  font-display: swap;
  font-weight: 800;
  src: url(fonts/barlow-condensed-latin-ext-800-italic.woff2) format('woff2');
  unicode-range: U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF;
}
@font-face {
  font-family: 'Barlow Condensed';
  font-style: italic;
  font-display: swap;
  font-weight: 800;
  src: url(fonts/barlow-condensed-latin-800-italic.woff2) format('woff2');
  unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
}

:root{
  --bg:#FAFCFD; --surface:#FFFFFF; --surface-2:#EFF5F8;
  --ink:#16324A; --ink-soft:#5B7688; --ink-faint:#8CA3B2;
  --gallery-photo-h:180px;   /* wysokość zdjęć w galerii „O nas" */
  --sponsor-logo-h:60px;     /* wysokość logo w pasku sponsorów (1/3 zdjęć z galerii) */
  --navy:#0F4C81; --navy-deep:#0B3B66; --navy-ink:#FFFFFF;
  --ice:#2E9BD6; --ice-soft:#E3F4FC;
  --line:#E1EAF0; --line-strong:#C8D8E2;
  --good:#2E9E6B; --good-soft:#DFF3EA;
  --warn:#B9791C; --warn-soft:#FBECD3;
  --bad:#C74B34; --bad-soft:#FBE2DC;
  --shadow: 0 1px 2px rgba(11,44,74,.05), 0 8px 24px -12px rgba(11,44,74,.14);
  --radius: 14px;
  /* Etap 26: kolory trasy slalomu — granat z logo, czerwone i niebieskie bramki, lód */
  --night:#072A55; --gate-red:#E0242F; --gate-red-deep:#B81A25; --gate-blue:#1F6FE0; --snow-ice:#E8F2FA;
  --font-body:"Barlow",system-ui,-apple-system,"Segoe UI",sans-serif;
  --font-display:"Barlow Condensed","Arial Narrow",sans-serif;
}
*{box-sizing:border-box;}
body{margin:0; background:var(--bg); color:var(--ink); font-family:var(--font-body); font-size:16px; line-height:1.55;}
img{max-width:100%;}
h1,h2,h3,h4{font-family:var(--font-display); font-weight:700; letter-spacing:.005em; line-height:1.15; color:var(--ink); margin:0;}
a{color:inherit;}
.wrap{max-width:1120px; margin-inline:auto; padding-inline:20px;}

.topbar{position:sticky; top:0; z-index:40; background:var(--surface); border-bottom:1px solid var(--line);}
.topbar-inner{display:flex; align-items:center; gap:24px; padding-block:18px; max-width:1120px; margin-inline:auto; padding-inline:20px; flex-wrap:wrap;}
.brand{display:flex; align-items:center; gap:12px; text-decoration:none; color:inherit;}
.brand img{width:50px; height:50px; object-fit:contain;}
.brand b{font-family:var(--font-display); font-weight:800; font-style:italic; font-size:1.45rem; line-height:1; display:block; color:var(--night);}
.brand span{font-size:.76rem; color:var(--ink-faint); text-transform:uppercase; letter-spacing:.08em;}
.nav-links{display:flex; gap:4px; margin-left:auto; flex-wrap:wrap;}
.nav-links a{text-decoration:none; color:var(--ink-soft); font-weight:600; font-size:1.05rem; padding:12px 16px; border-radius:8px;}
.nav-links a:hover{background:var(--surface-2); color:var(--ink);}
.nav-links a.active{color:var(--night); background:transparent; box-shadow:inset 0 -3px 0 var(--gate-red); border-radius:0;}
.topbar-auth{display:flex; align-items:center; gap:8px; flex-shrink:0;}

.btn{display:inline-flex; align-items:center; gap:8px; border-radius:10px; border:1px solid transparent; font-weight:700; font-size:.92rem; padding:10px 16px; cursor:pointer; text-decoration:none;}
.btn-primary{background:var(--navy-deep); color:#fff;}
.btn-ghost{background:transparent; border-color:var(--line-strong); color:var(--ink);}
.btn-sm{padding:7px 12px; font-size:.82rem; border-radius:8px;}
.btn-danger{background:var(--bad); color:#fff;}

.section{padding-block:44px;}
.kicker{font-size:.76rem; font-weight:700; text-transform:uppercase; letter-spacing:.12em; color:var(--ice); margin-bottom:8px; display:block;}
.grid{display:grid; gap:18px;}
.grid-3{grid-template-columns:repeat(3,1fr);}
.grid-2{grid-template-columns:repeat(2,1fr);}
@media (max-width:760px){ .grid-3,.grid-2{grid-template-columns:1fr;} }

.card{background:var(--surface); border:1px solid var(--line); border-radius:var(--radius); padding:20px; display:flex; flex-direction:column; gap:8px;}
.card h3{font-size:1.1rem;}
.card .muted{color:var(--ink-soft); font-size:.92rem; margin:0;}
.card img.avatar{width:56px; height:56px; border-radius:50%; object-fit:cover;}

.form-card{background:var(--surface); border:1px solid var(--line); border-radius:var(--radius); padding:26px; box-shadow:var(--shadow);}
.form-grid{display:grid; grid-template-columns:1fr 1fr; gap:14px;}
@media (max-width:600px){ .form-grid{grid-template-columns:1fr;} }
.field{display:flex; flex-direction:column; gap:6px;}
.field.full{grid-column:1/-1;}
.field label{font-size:.82rem; font-weight:600; color:var(--ink-soft);}
.field input, .field select, .field textarea{border:1px solid var(--line-strong); background:var(--surface); color:var(--ink); border-radius:9px; padding:10px 12px; font:inherit; font-size:.94rem;}
.field textarea{resize:vertical; min-height:80px;}
.checkbox-group{display:flex; gap:8px; flex-wrap:wrap;}
.checkbox-pill{display:inline-flex; align-items:center; gap:8px; border:1px solid var(--line-strong); background:var(--surface); font-size:.88rem; font-weight:600; padding:8px 14px; border-radius:999px; cursor:pointer;}
.form-note{font-size:.82rem; color:var(--ink-faint); margin-top:4px;}
.success-note{background:var(--good-soft); color:var(--good); border-radius:10px; padding:12px 14px; font-size:.9rem; font-weight:600; margin-top:14px;}
.error-note{background:var(--bad-soft); color:var(--bad); border-radius:10px; padding:12px 14px; font-size:.9rem; font-weight:600; margin-bottom:16px;}

.pill{display:inline-flex; align-items:center; font-size:.74rem; font-weight:700; padding:3px 10px; border-radius:999px; text-transform:uppercase; letter-spacing:.04em; width:fit-content;}
.pill-ice{background:var(--ice-soft); color:var(--navy);}
.pill-warn{background:var(--warn-soft); color:var(--warn);}

table{width:100%; border-collapse:collapse; font-size:.92rem;}
thead th{text-align:left; font-size:.72rem; text-transform:uppercase; letter-spacing:.06em; color:var(--ink-faint); padding:0 10px 10px; border-bottom:1px solid var(--line);}
tbody td{padding:12px 10px; border-bottom:1px solid var(--line); vertical-align:middle;}
.table-wrap{overflow-x:auto; border:1px solid var(--line); border-radius:var(--radius); background:var(--surface);}

.panel-shell{display:grid; grid-template-columns:220px 1fr; min-height:calc(100vh - 90px);}
@media (max-width:820px){ .panel-shell{grid-template-columns:1fr;} }
.panel-nav{background:var(--surface); border-right:1px solid var(--line); padding:20px 12px; display:flex; flex-direction:column; gap:2px;}
.panel-nav a{text-decoration:none; color:var(--ink-soft); font-weight:600; font-size:.9rem; padding:9px 10px; border-radius:9px;}
.panel-nav a:hover{background:var(--surface-2);}
.panel-nav a.active{background:var(--ice-soft); color:var(--navy);}
.panel-main{padding:26px 24px 60px;}

footer{background:var(--night); color:rgba(255,255,255,.78); padding-block:28px; margin-top:40px; border-top:4px solid var(--gate-red);}
footer .wrap{font-size:.85rem;}

/* Hero — rotator zdjęć w tle sekcji powitalnej (index.php) */
.hero-photo{position:relative; overflow:hidden;}
.hero-photo .hero-slide{position:absolute; inset:0; background-size:cover; background-position:center; opacity:0; transition:opacity 1.2s ease;}
.hero-photo .hero-slide.active{opacity:1;}
.hero-photo .hero-photo-overlay{position:absolute; inset:0; background:linear-gradient(180deg, rgba(11,44,74,.82) 0%, rgba(11,44,74,.72) 55%, rgba(11,44,74,.9) 100%);}
.hero-photo .wrap{position:relative; z-index:1;}
.hero-photo .kicker, .hero-photo h1, .hero-photo p{color:#fff;}
.hero-photo p{color:rgba(255,255,255,.86) !important;}
.hero-photo .btn-ghost{color:#fff; border-color:rgba(255,255,255,.7);}
.hero-photo .btn-ghost:hover{background:rgba(255,255,255,.12);}

/* Pasek sponsorów — przez całą szerokość ekranu, przewijający się w nieskończoność (Etap 9.2).
   Logo mają wysokość zdjęć z galerii „O nas" (--gallery-photo-h); szerokość wynika z proporcji logo. */
.sponsor-band{padding:10px 0 12px; background:#fff; border-top:1px solid var(--line); border-bottom:1px solid var(--line); margin:10px 0 40px;}
.sponsor-band .kicker{display:block; margin-bottom:6px;}
.sponsor-marquee{width:100%; overflow:hidden; -webkit-mask-image:linear-gradient(90deg, transparent, #000 5%, #000 95%, transparent); mask-image:linear-gradient(90deg, transparent, #000 5%, #000 95%, transparent);}
.sponsor-marquee-track{display:flex; width:max-content;}
.sponsor-marquee.is-ready .sponsor-marquee-track{animation:sponsor-scroll var(--marquee-duration, 40s) linear infinite;}
.sponsor-marquee:hover .sponsor-marquee-track{animation-play-state:paused;}
.sponsor-marquee-group{display:flex; align-items:center; flex-shrink:0;}
.sponsor-item{display:flex; align-items:center; justify-content:center; height:var(--sponsor-logo-h, 60px); padding:0 24px; flex-shrink:0;}
.sponsor-item img{height:100%; width:auto; max-width:none; object-fit:contain; display:block;}
@keyframes sponsor-scroll{from{transform:translateX(0);} to{transform:translateX(-50%);}}
@media (prefers-reduced-motion: reduce){
  .sponsor-marquee.is-ready .sponsor-marquee-track{animation:none;}
  .sponsor-marquee{overflow-x:auto;}
}

/* Etap 6 — pole-pułapka na boty (niewidoczne dla ludzi i czytników ekranu) */
.ab-trap{position:absolute !important; left:-10000px !important; top:auto; width:1px; height:1px; overflow:hidden;}

/* Etap 8 — wybór profilu „Kto korzysta?" */
.profile-picker{max-width:760px; padding-top:56px; padding-bottom:56px; text-align:center;}
.profile-picker h1{font-size:clamp(1.6rem,4vw,2.2rem); margin:0 0 8px;}
.profile-picker > p.muted{max-width:52ch; margin:0 auto 26px;}
.profile-grid{display:grid; grid-template-columns:repeat(auto-fill, minmax(150px, 1fr)); gap:16px;}
.profile-card{display:flex; flex-direction:column; align-items:center; gap:2px; padding:22px 12px 18px; background:#fff; border:1px solid var(--line); border-radius:16px; cursor:pointer; font:inherit; color:inherit; transition:transform .12s ease, box-shadow .12s ease, border-color .12s ease;}
.profile-card:hover, .profile-card:focus-visible{transform:translateY(-2px); border-color:var(--navy); box-shadow:0 10px 24px -14px rgba(11,44,74,.35); outline:none;}
.profile-card.is-current{border-color:var(--navy); box-shadow:inset 0 0 0 1px var(--navy);}
.profile-avatar{width:72px; height:72px; border-radius:50%; display:flex; align-items:center; justify-content:center; font-weight:800; font-size:1.4rem; margin-bottom:10px; color:#fff;}
.profile-avatar.is-adult{background:var(--navy);}
.profile-avatar.is-child{background:var(--ice);}
.profile-badge{display:inline-flex; align-items:center; gap:6px; font-size:.8rem; background:var(--bg); border:1px solid var(--line); border-radius:999px; padding:4px 10px;}
@media (max-width:420px){ .profile-grid{grid-template-columns:repeat(2, 1fr); gap:10px;} .profile-avatar{width:56px; height:56px; font-size:1.1rem;} }

/* Etap 9 — wyjazdy: podsumowanie kosztów i formularze busów */
.trip-cost-grid{display:grid; grid-template-columns:repeat(auto-fit, minmax(200px, 1fr)); gap:12px;}
.trip-cost-grid .form-card{padding:16px 18px; display:flex; flex-direction:column; gap:4px;}
.trip-cost-big{font-size:1.35rem; color:var(--ink);}
.bus-row{display:grid; grid-template-columns:2fr repeat(4, 1fr) auto; gap:10px; align-items:end;}
.bus-row .field{margin:0;}
@media (max-width:820px){ .bus-row{grid-template-columns:1fr 1fr;} }
.cost-breakdown{display:grid; grid-template-columns:repeat(auto-fit, minmax(120px, 1fr)); gap:8px; margin-top:10px;}
.cost-breakdown div{background:var(--bg); border:1px solid var(--line); border-radius:10px; padding:8px 10px;}
.cost-breakdown span{display:block; font-size:.74rem; color:var(--ink-faint); text-transform:uppercase; font-weight:700; letter-spacing:.03em;}
.cost-breakdown b{font-size:1.02rem;}
.cost-breakdown .is-total{background:var(--ice-soft); border-color:var(--ice);}

/* Etap 10 — Konta użytkowników: filtry i pasek działań masowych */
.users-filter{display:flex; flex-wrap:wrap; gap:12px; align-items:flex-end; padding:14px 18px;}
.users-filter .field{margin:0; flex:1 1 150px;}
.bulk-bar{display:flex; flex-wrap:wrap; gap:10px; align-items:center; background:var(--ice-soft); border:1px solid var(--line); border-radius:12px; padding:10px 14px; margin-bottom:10px; position:sticky; top:0; z-index:5;}
.bulk-bar select{max-width:280px;}

/* ===== Etap 11: wyjustowane treści, sezon pod opisem, dokumenty ===== */
.content-text { text-align: justify; text-justify: inter-word; hyphens: auto; -webkit-hyphens: auto; }
.content-block { max-width: none; width: 100%; }
.content-block p { margin: 0 0 .8em; }
.content-block p:last-child { margin-bottom: 0; }
.content-lead p { color: var(--ink-soft); font-size: 1.08rem; }
.hero-subtitle { max-width: none; width: 100%; margin-bottom: 14px; }
.hero-subtitle p { color: var(--ink-soft); font-size: 1.08rem; margin: 0 0 .6em; }
.hero-season { margin: 0 0 22px; }
.hero-season .kicker { margin: 0; }
.doc-list { display: flex; flex-direction: column; gap: 14px; }
.doc-item { display: flex; flex-direction: column; gap: 6px; align-items: flex-start; padding-bottom: 12px; border-bottom: 1px solid var(--line); }
.doc-item:last-child { border-bottom: 0; padding-bottom: 0; }
.doc-item p { margin: 0; width: 100%; }

/* ===== Etap 12: zdjęcie wyjazdu ===== */
.trip-photo { display:block; width:100%; aspect-ratio: 16 / 9; object-fit: cover; border-radius: 10px; margin-bottom: 12px; background: var(--ice-soft); }
.trip-card .trip-photo { margin: -4px 0 14px; }
.trip-photo-sm { width: 100%; max-width: 360px; aspect-ratio: 16 / 9; object-fit: cover; border-radius: 10px; margin-bottom: 10px; }
/* Etap 12: edytor szablonu umowy — na telefonie jedna kolumna */
@media (max-width: 900px) { .contract-editor { grid-template-columns: 1fr !important; } .contract-editor > .form-card { position: static !important; } }
[hidden] { display: none !important; }   /* Etap 12: atrybut hidden ma wygrywać z display:grid/flex */
.card div.avatar { width:56px; height:56px; border-radius:50%; font-size:1.3rem; margin-bottom:6px; }   /* Etap 12: inicjał trenera bez zdjęcia */

/* ===== Etap 13: zdjęcie strony (Hokej) ===== */
.page-photo { display:block; width:100%; max-height:420px; object-fit:cover; border-radius:14px; margin: 6px 0 22px; }
.pill-bad { background: var(--bad-soft, #fde8e8); color: var(--bad, #b42318); }
/* ===== Etap 13: raporty finansowe ===== */
.num { text-align: right; white-space: nowrap; font-variant-numeric: tabular-nums; }
.report-h2 { font-size: 1.1rem; margin: 22px 0 10px; }
.report-matrix table { font-size: .82rem; }
.report-matrix td, .report-matrix th { padding: 7px 8px; }
.sankey-wrap { overflow-x: auto; }
.sankey { width: 100%; min-width: 720px; height: auto; display: block; }
@media print {
  .panel-nav, .no-print, .topbar, footer { display: none !important; }
  .panel-shell { display: block !important; }
  .panel-main { padding: 0 !important; max-width: none !important; }
  .form-card, .table-wrap { box-shadow: none !important; break-inside: avoid; }
  .sankey { min-width: 0; }
  body { background: #fff !important; }
}
/* ===== Etap 13.1: zestawienie naliczeń trenera ===== */
.bd table { font-size: .9rem; }
.bd .bd-note { font-size: .78rem; }
.bd .bd-sub td { background: var(--bg); font-weight: 600; font-size: .84rem; color: var(--ink-soft); }
.bd .bd-total td { font-weight: 700; border-top: 2px solid var(--line-strong); }
.bd .bd-pay td { color: var(--ink-soft); font-size: .86rem; }
.bd-details > summary { cursor: pointer; font-size: .82rem; color: var(--navy); font-weight: 600; }
.bd-details[open] > summary { margin-bottom: 8px; }
/* ===== Etap 14: kontrolki segmentów ===== */
.seg-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); gap: 12px; margin-bottom: 18px; }
.seg-card { border-radius: 12px; padding: 12px 14px; display: flex; flex-direction: column; gap: 3px; font-size: .84rem; border: 1px solid var(--line); background: var(--surface); }
.seg-card b { font-size: .95rem; }
.seg-card .seg-name { font-size: .72rem; text-transform: uppercase; letter-spacing: .05em; font-weight: 700; }
.seg-card .seg-res { font-weight: 700; }
.seg-ok { border-color: #b9e1cf; background: #effaf4; } .seg-ok .seg-name, .seg-ok b { color: #1f7a55; }
.seg-bad { border-color: #f1b7a3; background: #fff2ec; } .seg-bad .seg-name, .seg-bad b, .seg-bad .seg-res { color: #b23c17; }
.seg-empty { opacity: .7; }
.seg-cell-bad { color: #b23c17; font-weight: 700; }
/* ===== Etap 15: galerie, lightbox, osiągnięcia ===== */
.photo-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(180px, 1fr)); gap: 10px; }
.photo-grid a, .photo-grid .ph { display: block; border-radius: 10px; overflow: hidden; background: var(--ice-soft); aspect-ratio: 4 / 3; }
.photo-grid img { width: 100%; height: 100%; object-fit: cover; display: block; transition: transform .25s ease; }
.photo-grid a:hover img { transform: scale(1.04); }
.gallery-cards { display: grid; grid-template-columns: repeat(auto-fill, minmax(240px, 1fr)); gap: 16px; }
.gallery-card { display: block; text-decoration: none; color: inherit; border: 1px solid var(--line); border-radius: 14px; overflow: hidden; background: var(--surface); transition: box-shadow .2s; }
.gallery-card:hover { box-shadow: 0 6px 20px rgba(11,44,74,.12); }
.gallery-card .gc-img { aspect-ratio: 16 / 10; background: var(--ice-soft) center / cover no-repeat; }
.gallery-card .gc-body { padding: 10px 14px 14px; }
.gallery-card h3 { font-size: 1rem; margin: 0 0 2px; }
.random-photos { display: grid; grid-template-columns: repeat(3, 1fr); gap: 12px; }
.random-photos a { display: block; position: relative; aspect-ratio: 4 / 3; border-radius: 12px; overflow: hidden; background: var(--ice-soft); }
.random-photos img { width: 100%; height: 100%; object-fit: cover; display: block; transition: opacity .6s ease; }
.random-photos .rp-cap { position: absolute; left: 0; right: 0; bottom: 0; padding: 6px 10px; font-size: .74rem; color: #fff; background: linear-gradient(transparent, rgba(0,0,0,.6)); }
@media (max-width: 640px) { .random-photos { grid-template-columns: 1fr 1fr; } .random-photos a:nth-child(3) { display: none; } }
.ach-list { display: grid; grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); gap: 16px; }
.ach-card { border: 1px solid var(--line); border-radius: 14px; overflow: hidden; background: var(--surface); display: flex; flex-direction: column; }
.ach-card .ach-img { aspect-ratio: 16 / 9; background: var(--ice-soft); }
.ach-card .ach-img img { width: 100%; height: 100%; object-fit: cover; display: block; }
.ach-card .ach-body { padding: 12px 16px 16px; }
.ach-card h3 { font-size: 1.05rem; margin: 2px 0 6px; }
.news-thumbs { display: flex; gap: 6px; flex-wrap: wrap; margin: -4px 0 10px; }
.news-thumbs a { width: 64px; height: 48px; border-radius: 6px; overflow: hidden; display: block; }
.news-thumbs img { width: 100%; height: 100%; object-fit: cover; }
.lb { position: fixed; inset: 0; z-index: 1000; background: rgba(8, 18, 30, .92); display: none; align-items: center; justify-content: center; }
.lb.open { display: flex; }
.lb figure { margin: 0; max-width: 92vw; max-height: 90vh; text-align: center; }
.lb img { max-width: 92vw; max-height: 82vh; border-radius: 6px; box-shadow: 0 10px 40px rgba(0,0,0,.5); }
.lb figcaption { color: #e6edf5; font-size: .9rem; margin-top: 10px; }
.lb .lb-cnt { opacity: .7; margin-left: 8px; }
.lb button { position: absolute; background: rgba(255,255,255,.12); color: #fff; border: 0; font-size: 2rem; width: 48px; height: 48px; border-radius: 50%; cursor: pointer; line-height: 1; }
.lb button:hover { background: rgba(255,255,255,.25); }
.lb .lb-close { top: 16px; right: 16px; }
.lb .lb-prev { left: 16px; top: 50%; transform: translateY(-50%); }
.lb .lb-next { right: 16px; top: 50%; transform: translateY(-50%); }
.fb-box { border: 1px solid var(--line); border-radius: 14px; padding: 16px; background: var(--surface); }
.fb-box iframe { width: 100%; max-width: 500px; height: 720px; border: 0; display: block; margin: 10px auto 0; }
.admin-photos { display: grid; grid-template-columns: repeat(auto-fill, minmax(170px, 1fr)); gap: 12px; }
.admin-photo { border: 1px solid var(--line); border-radius: 10px; padding: 6px; background: var(--surface); display: flex; flex-direction: column; gap: 5px; }
.admin-photo.is-cover { border-color: var(--navy); box-shadow: 0 0 0 2px var(--ice-soft); }
.admin-photo img { width: 100%; aspect-ratio: 4 / 3; object-fit: cover; border-radius: 6px; display: block; }
.admin-photo input { font-size: .78rem; padding: 4px 6px; border: 1px solid var(--line-strong); border-radius: 6px; width: 100%; }
.ach-card a.ach-img { display: block; }

/* Etap 16.1: stronicowanie aktualności */
.pager{display:flex; justify-content:center; align-items:center; gap:14px; flex-wrap:wrap; margin:30px 0 6px;}
.pager .btn[aria-disabled="true"]{opacity:.4; pointer-events:none;}
.pager-pages{display:flex; gap:6px; align-items:center;}
.pager-pages a, .pager-current{min-width:36px; height:36px; display:inline-flex; align-items:center; justify-content:center; border-radius:8px; font-size:.9rem; text-decoration:none;}
.pager-pages a{border:1px solid var(--line); color:inherit;}
.pager-pages a:hover{border-color:var(--ice);}
.pager-current{background:var(--ice); color:#fff; font-weight:600;}
@media (max-width:520px){
  .pager{gap:6px; flex-wrap:nowrap;}
  .pager .btn{padding-left:10px; padding-right:10px;}
  .pager-pages{gap:4px;}
  .pager-pages a, .pager-current{min-width:30px; height:32px; font-size:.85rem;}
}

/* Etap 17: formatowanie tekstu — przyciski w panelu i wygląd na stronie */
.rt-toolbar{display:flex; flex-wrap:wrap; align-items:center; gap:4px; padding:5px; border:1px solid var(--line); border-bottom:none; border-radius:8px 8px 0 0; background:var(--bg);}
textarea.rt-area{border-top-left-radius:0 !important; border-top-right-radius:0 !important;}
.rt-btn{min-width:32px; height:30px; padding:0 8px; border:1px solid var(--line); border-radius:6px; background:#fff; color:inherit; font-size:.92rem; cursor:pointer; line-height:1;}
.rt-btn:hover, .rt-btn:focus-visible{border-color:var(--ice); outline:none;}
.rt-hint{font-size:.74rem; color:var(--ink-faint, #7a8a99); margin-left:6px;}
.rt-linkbox{display:inline-flex; gap:4px; align-items:center; flex:1 1 260px;}
.rt-linkbox input{flex:1; min-width:0; height:30px; padding:0 8px; border:1px solid var(--line); border-radius:6px; font-size:.86rem;}
.rt-linkbox input.rt-bad{border-color:var(--bad, #c62828);}
.rt-linkbox .rt-ok{background:var(--ice); color:#fff; border-color:var(--ice);}
.rt-list{margin:0 0 1em; padding-left:1.3em; text-align:left;}
.rt-list li{margin:.15em 0;}
.content-text a, .rt-list a{text-decoration:underline; text-underline-offset:2px;}
.news-body > :last-child{margin-bottom:10px;}

/* Etap 18: kafelek „Administrator klubu” w „Kto korzysta?” i przełącznik trybu w menu */
.profile-avatar.is-admin{background:var(--navy-deep, #0b2c4a); font-size:1.8rem;}
.profile-card-admin{border-style:dashed;}
.ctx-switch{display:block; margin:6px 0 10px; padding:7px 10px; border:1px dashed var(--line-strong, #c9d4de); border-radius:8px; font-size:.82rem; text-decoration:none; color:inherit;}
.ctx-switch:hover{border-color:var(--ice);}
.ctx-badge{display:inline-block; margin-top:4px; padding:1px 7px; border-radius:999px; background:var(--navy); color:#fff; font-size:.68rem; font-weight:700; letter-spacing:.02em;}

/* Etap 19: wyjazdy — wybory do uzupełnienia, wolne miejsca */
select.is-pending{border-color:var(--bad, #c62828); background:#fff6f5;}
.trip-assign select{max-width:190px;}
.trip-assign .trip-note-input{margin-top:4px; width:100%; min-width:180px; max-width:280px; padding:3px 8px; font-size:.8rem;}   /* Etap 46 */
.trip-free{display:flex; flex-wrap:wrap; gap:6px; margin:4px 0 10px;}
.trip-free .pill-full{background:var(--bad-soft, #fdecea); color:var(--bad, #c62828);}
.trip-free .pill{text-transform:none; letter-spacing:0; font-size:.82rem; font-weight:600; padding:4px 10px;}

/* Etap 20: własne typy pokoi, nazwy pokoi, filtr noclegu */
.room-types input{width:100%;}
.room-types .room-type-new input{background:var(--bg);}
.room-labels{display:grid; grid-template-columns:repeat(auto-fill, minmax(210px, 1fr)); gap:10px;}
.room-labels label{display:flex; flex-direction:column; gap:3px;}
.stay-filter{display:flex; flex-wrap:wrap; gap:6px; align-items:center; margin:0 0 10px;}

/* Etap 21: zestawienie roczne rozliczeń trenerów */
.view-tabs { display:inline-flex; gap:4px; }
.year-tiles { grid-template-columns: repeat(auto-fit, minmax(190px, 1fr)); }
.year-table { font-size:.84rem; }
.year-table th, .year-table td { padding:6px 6px; white-space:nowrap; }
.year-table .ycell a { text-decoration:none; }
.year-table tr.year-total td { border-top:2px solid var(--line, #ccc); background:rgba(0,0,0,.03); }
.ys { display:inline-block; font-size:.7rem; font-weight:700; line-height:1; padding:2px 4px; border-radius:4px; }
.ys-settled { background:#d9f2df; color:#1d6b33; }
.ys-partial { background:#fff1cc; color:#7a5a00; }
.ys-open { background:#fbdada; color:#9b1c1c; }
@media print {
  .view-tabs, .btn { display:none !important; }
  .year-table { font-size:.68rem; }
  .year-table th, .year-table td { padding:3px 4px; }
}

/* Etap 23: pokoje i wolne miejsca (szybki przydział) */
.room-board td, .room-board th { vertical-align: top; }
.room-board tr.rb-type td { background: var(--bg); font-weight: 700; font-size: .86rem; color: var(--navy); }
.rb-slots { display: flex; flex-wrap: wrap; gap: 6px; }
.rb-slots select { min-width: 220px; max-width: 320px; }

/* Etap 25: frekwencja (admin) */
.att { display:inline-block; min-width:18px; font-weight:700; font-size:.8rem; border-radius:4px; padding:1px 3px; text-align:center; }
.att-obecny { background:#d9f2df; color:#1d6b33; }
.att-nieobecny { background:#fbdada; color:#9b1c1c; }
.att-usprawiedliwiony { background:#fff1cc; color:#7a5a00; }
.att-month th, .att-month td { padding:5px 4px; font-size:.84rem; white-space:nowrap; }

/* Etap 25: profil zawodnika, rankingi, zawodnik miesiąca */
.athlete-profile-form { display:flex; gap:16px; align-items:flex-start; flex-wrap:wrap; }
.athlete-photo img, .athlete-photo-empty { width:140px; height:170px; object-fit:cover; border-radius:12px; display:block; background:var(--surface-2, #eef3f8); }
.athlete-photo-empty { display:flex; align-items:center; justify-content:center; font-size:2rem; font-weight:700; color:var(--ink-faint, #8a97a6); }
.athlete-thumb { width:38px; height:38px; border-radius:50%; object-fit:cover; display:inline-flex; align-items:center; justify-content:center; vertical-align:middle; }
.athlete-thumb-empty { background:var(--surface-2, #eef3f8); color:var(--ink-faint, #8a97a6); font-size:.72rem; font-weight:700; }
.ranking-table td, .ranking-table th { vertical-align:middle; }
.ranking-table tr.is-aom td { background:rgba(255, 214, 102, .14); }
.aom-grid { display:grid; grid-template-columns:repeat(auto-fit, minmax(320px, 1fr)); gap:18px; }
.aom-card { display:flex; gap:18px; background:var(--surface, #fff); border:1px solid var(--line, #e2e8f0); border-radius:16px; padding:18px; box-shadow:0 6px 24px rgba(16, 42, 67, .06); }
.aom-photo { width:150px; height:190px; object-fit:cover; border-radius:12px; flex:none; }
.aom-photo-empty { display:flex; align-items:center; justify-content:center; font-size:3rem; color:#e0b23c; background:var(--surface-2, #eef3f8); }
.aom-body { flex:1; min-width:0; }
.ranking-public { width:100%; margin-top:8px; border-collapse:collapse; }
.ranking-public td, .ranking-public th { padding:6px 4px; border-bottom:1px solid var(--line, #e2e8f0); text-align:left; }
.ranking-public .num { text-align:right; }
.aom-history { display:grid; grid-template-columns:repeat(auto-fill, minmax(220px, 1fr)); gap:10px; }
.aom-mini { display:flex; gap:10px; align-items:center; background:var(--surface, #fff); border:1px solid var(--line, #e2e8f0); border-radius:12px; padding:8px 10px; }
.aom-mini img, .aom-mini-empty { width:46px; height:46px; border-radius:50%; object-fit:cover; display:flex; align-items:center; justify-content:center; background:var(--surface-2, #eef3f8); color:#e0b23c; flex:none; }
@media (max-width: 560px) { .aom-card { flex-direction:column; } .aom-photo { width:100%; height:260px; } }

/* ===== Etap 26: strona główna — język trasy slalomu ===== */
.home-hero{position:relative; overflow:hidden; color:#fff; background:var(--night);
  min-height:clamp(560px, 84vh, 780px); display:flex; align-items:flex-end;
  padding:96px 0 clamp(120px, 14vw, 170px);
  clip-path:polygon(0 0, 100% 0, 100% calc(100% - clamp(48px, 7vw, 110px)), 0 100%);}
.home-hero .hero-slide{position:absolute; inset:0; background-size:cover; background-position:center 35%; opacity:0; transition:opacity 1.6s ease;}
.home-hero .hero-slide.active{opacity:1;}
.home-hero-shade{position:absolute; inset:0; background:
  linear-gradient(98deg, rgba(7,42,85,.92) 0%, rgba(7,42,85,.72) 38%, rgba(7,42,85,.18) 72%, rgba(7,42,85,.05) 100%),
  linear-gradient(0deg, rgba(7,42,85,.55) 0%, rgba(7,42,85,0) 45%);}
.home-hero-inner{position:relative; z-index:1; width:100%; display:flex; align-items:flex-end; justify-content:space-between; gap:40px;}
.home-hero-copy{max-width:640px;}
.home-hero-title{color:#fff; font-family:var(--font-display); font-weight:800; font-style:italic;
  font-size:clamp(2.7rem, 6.4vw, 5.4rem); line-height:.94; letter-spacing:-.012em; margin:0 0 22px; max-width:15ch; text-wrap:balance;}
.home-hero-sub p{color:rgba(255,255,255,.88); font-size:1.12rem; line-height:1.6; max-width:56ch; margin:0 0 10px; text-align:left;}
.home-hero-actions{display:flex; gap:12px; flex-wrap:wrap; margin-top:26px;}
.btn-gate, .btn-snow{display:inline-flex; align-items:center; font-family:var(--font-display); font-weight:700; font-size:1.18rem; letter-spacing:.01em;
  padding:13px 24px; border-radius:6px; text-decoration:none; transition:background .15s, color .15s;}
.btn-gate{background:var(--gate-red); color:#fff; box-shadow:0 10px 24px -10px rgba(224,36,47,.7);}
.btn-gate:hover{background:var(--gate-red-deep);}
.btn-snow{color:#fff; border:2px solid rgba(255,255,255,.8);}
.btn-snow:hover{background:#fff; color:var(--night);}
.btn-gate:focus-visible, .btn-snow:focus-visible, .now-tile:focus-visible, .home-news a:focus-visible{outline:3px solid #ffd23f; outline-offset:3px;}

/* numer startowy (plastron) */
.race-bib{flex:none; width:228px; background:#fff; color:var(--night); border-radius:10px 10px 22px 22px; overflow:hidden;
  transform:rotate(-5deg); transform-origin:50% 0; box-shadow:0 24px 48px -18px rgba(0,0,0,.55); margin-bottom:6px; position:relative;
  animation:bib-swing 1.1s cubic-bezier(.3,1.6,.5,1) both .25s;}
.race-bib::before, .race-bib::after{content:""; position:absolute; top:9px; width:9px; height:9px; border-radius:50%; background:var(--night); opacity:.35;}
.race-bib::before{left:10px;} .race-bib::after{right:10px;}
.race-bib-top{display:flex; align-items:center; justify-content:center; gap:8px; background:var(--night); color:#fff; padding:12px 10px 10px;
  font-family:var(--font-display); font-weight:700; font-size:1.05rem; letter-spacing:.02em;}
.race-bib-top img{width:26px; height:26px; object-fit:contain;}
.race-bib-number{font-family:var(--font-display); font-weight:800; font-style:italic; font-size:8.4rem; line-height:.9; text-align:center; padding:14px 0 6px; letter-spacing:-.03em;}
.race-bib-season{background:var(--gate-red); color:#fff; text-align:center; font-family:var(--font-display); font-weight:700; font-size:1.2rem; padding:7px 8px;}
.race-bib-status{text-align:center; font-weight:600; font-size:.95rem; padding:10px 10px 14px; color:var(--gate-blue);}
@keyframes bib-swing{0%{transform:rotate(-16deg) translateY(-26px); opacity:0;} 100%{transform:rotate(-5deg); opacity:1;}}

/* co teraz w klubie */
.home-now{margin-top:calc(-1 * clamp(40px, 6vw, 90px)); position:relative; z-index:2; padding-bottom:16px;}
.home-now-grid{display:grid; grid-template-columns:repeat(2, minmax(0, 1fr)); gap:18px;}
.home-now-grid.is-single{grid-template-columns:minmax(0, 620px);}
.now-tile{display:flex; gap:18px; align-items:center; background:#fff; border-radius:12px; padding:18px 20px; text-decoration:none; color:var(--ink);
  border:1px solid var(--line); box-shadow:0 18px 40px -26px rgba(7,42,85,.45);}
.now-tile:hover h2{color:var(--gate-blue);}
.now-trip{border-left:6px solid var(--gate-red);}
.now-aom{border-left:6px solid var(--gate-blue);}
.now-date{flex:none; width:76px; text-align:center; background:var(--night); color:#fff; border-radius:8px; padding:8px 0 6px; font-family:var(--font-display);}
.now-date b{display:block; font-size:2.5rem; font-weight:800; font-style:italic; line-height:1;}
.now-date span{font-size:1rem; font-weight:600;}
.now-aom-photo{flex:none; width:76px; height:76px; border-radius:50%; object-fit:cover; background:var(--snow-ice);}
.now-aom-star{display:flex; align-items:center; justify-content:center; font-size:2rem; color:#e0a91f;}
.now-body h2{font-size:1.32rem; line-height:1.15; margin:0 0 4px; transition:color .15s;}
.now-body p{margin:0 0 6px; color:var(--ink-soft); font-size:.95rem;}
.now-link{font-weight:700; font-size:.9rem; color:var(--gate-blue);}

/* aktualności — znaczniki w rytmie bramek: czerwona, niebieska, czerwona */
.home-news{padding:48px 0 64px;}
.home-news-head{display:flex; align-items:baseline; justify-content:space-between; gap:12px; margin-bottom:18px; flex-wrap:wrap;}
.home-news-head h2{font-size:clamp(1.8rem, 3.4vw, 2.4rem); font-style:italic; font-weight:800;}
.home-news-head a{font-weight:700; color:var(--gate-blue); text-decoration:none;}
.home-news-head a:hover{text-decoration:underline;}
.home-news-grid{display:grid; grid-template-columns:repeat(3, minmax(0, 1fr)); gap:22px; align-items:start;}
.gate-card{background:#fff; border-radius:4px 4px 12px 12px; overflow:hidden; border-top:5px solid var(--gate-red); box-shadow:0 1px 0 var(--line), 0 12px 30px -24px rgba(7,42,85,.5);}
.gate-card:nth-child(even){border-top-color:var(--gate-blue);}
.gate-card img{display:block; width:100%; aspect-ratio:16/10; object-fit:cover;}
.gate-card-body{padding:16px 18px 20px;}
.gate-card-meta{display:flex; gap:10px; flex-wrap:wrap; margin:0 0 6px; font-size:.85rem; color:var(--ink-soft);}
.gate-card-meta time{font-family:var(--font-display); font-weight:700; font-style:italic; font-size:1rem; color:var(--night);}
.gate-card-meta span{background:var(--snow-ice); color:var(--night); border-radius:4px; padding:1px 7px; font-weight:600;}
.gate-card h3{font-size:1.3rem; line-height:1.18; margin:0 0 8px;}
.gate-card h3 a{text-decoration:none;}
.gate-card h3 a:hover{color:var(--gate-blue);}
.gate-card-text{margin:0; color:var(--ink-soft); font-size:.95rem; line-height:1.55;}
.sponsor-heading{font-size:1.4rem; font-style:italic; font-weight:800; margin:0 0 10px; color:var(--night);}

@media (max-width: 900px){
  .home-hero-inner{flex-direction:column; align-items:flex-start; gap:28px;}
  .race-bib{width:180px;}
  .race-bib-number{font-size:6.2rem;}
  .home-now-grid, .home-news-grid{grid-template-columns:minmax(0, 1fr);}
}
@media (max-width: 560px){
  .home-hero{padding-top:48px; min-height:0;}
  .race-bib{width:150px; transform:rotate(-4deg); margin:4px 0 0 6px;}
  .race-bib-number{font-size:4.6rem; padding:10px 0 4px;}
  .race-bib-status{font-size:.85rem; padding:7px 8px 10px;}
  .race-bib-season{font-size:1rem;}
  .race-bib-top{font-size:.9rem; padding:10px 8px 8px;}
  .home-hero-actions a{flex:1 1 100%; justify-content:center;}
  /* menu w jednym przewijanym wierszu zamiast trzech */
  .nav-links{flex-wrap:nowrap; overflow-x:auto; width:100%; margin-left:0; -webkit-overflow-scrolling:touch; scrollbar-width:none;}
  .nav-links::-webkit-scrollbar{display:none;}
  .nav-links a{white-space:nowrap; padding:10px 12px; font-size:1rem;}
}
@media (prefers-reduced-motion: reduce){
  .race-bib{animation:none;}
  .home-hero .hero-slide{transition:none;}
}

/* Etap 27: strona rankingów dla członków */
.members-title{font-size:clamp(1.9rem, 4vw, 2.6rem); font-style:italic; font-weight:800; margin:0 0 8px;}
.members-month{display:flex; gap:10px; align-items:center; flex-wrap:wrap;}
.members-month label{font-weight:700;}
.aom-label{margin:0; font-weight:700; color:var(--gate-red);}
.ranking-members tr.is-mine td{background:rgba(31, 111, 224, .08); font-weight:600;}

/* Etap 28: kartoteka trenerów */
.cd-section{margin:0 0 18px;}
.cd-section-head{display:flex; justify-content:space-between; align-items:center; gap:10px; margin-bottom:6px;}
.cd-section-head h2{font-size:1.15rem; margin:0;}
.cd-table tr.cd-old td{opacity:.55;}

/* ===== Etap 29: kalendarz zajęć i frekwencja miesięczna ===== */
.sr-only { position:absolute; width:1px; height:1px; padding:0; margin:-1px; overflow:hidden; clip:rect(0,0,0,0); white-space:nowrap; border:0; }
.ag-controls { display:flex; gap:8px; align-items:center; flex-wrap:wrap; margin:0 0 12px; }
.ag-controls .field input, .ag-controls .field select { padding:7px 10px; }
.ag-legend { display:flex; gap:14px; flex-wrap:wrap; font-size:.8rem; margin:0 0 8px; }
.ev-badge { display:inline-block; min-width:22px; padding:1px 5px; border-radius:5px; font-size:.7rem; font-weight:800; letter-spacing:.02em; text-align:center; line-height:1.5; vertical-align:middle; }
.ev-badge.ev-trening { background:var(--ice-soft); color:var(--navy); }
.ev-badge.ev-zgrupowanie { background:#e5f4ea; color:#1d6b33; }
.ev-badge.ev-oboz { background:#efe7fb; color:#5b2b9a; }
.ev-badge.ev-zawody { background:#fff1cc; color:#7a5a00; }
.ag-wrap { max-height:75vh; overflow:auto; }
.ag-grid { border-collapse:separate; border-spacing:0; }
.ag-grid th, .ag-grid td { padding:4px 5px; font-size:.84rem; white-space:nowrap; border-bottom:1px solid var(--line); }
.ag-grid thead th { position:sticky; top:0; z-index:2; background:var(--surface, #fff); vertical-align:bottom; }
.ag-grid .ag-name { position:sticky; left:0; z-index:1; background:var(--surface, #fff); text-align:left; font-weight:400; min-width:150px; border-right:1px solid var(--line-strong); }
.ag-grid thead .ag-name { z-index:3; }
.ag-grid tfoot th, .ag-grid tfoot td { font-size:.78rem; color:var(--ink-soft); }
.ag-ev { text-align:center; min-width:38px; }
.ag-ev > span { display:block; line-height:1.2; }
.ag-ev .ag-wd { font-size:.68rem; font-weight:600; color:var(--ink-faint); text-transform:uppercase; }
.ag-ev .ag-day { font-size:.95rem; font-weight:800; }
.ag-ev .ag-time { font-size:.66rem; color:var(--ink-faint); font-weight:500; }
.ag-ev .ev-badge { margin:2px auto 0; display:inline-block; }
.ag-ev.is-future { opacity:.5; }
.ag-ev.ev-zgrupowanie, .ag-ev.ev-oboz, .ag-ev.ev-zawody { background:#fffaf0; }
.ag-col, .ag-signed { display:block; margin:3px auto 0; border:1px solid var(--line-strong); background:transparent; border-radius:5px; font-size:.68rem; padding:0 5px; cursor:pointer; color:var(--ink-soft); }
.ag-col:hover, .ag-signed:hover { background:var(--ice-soft); }
.ag-cell { text-align:center; }
.ag-cell input[type=checkbox] { width:18px; height:18px; cursor:pointer; accent-color:#1d6b33; }
.ag-cell.is-on { background:#e9f7ee; }
.ag-cell.ev-zawody.is-on { background:#fff6db; }
.ag-pl { display:block; width:34px; margin:2px auto 0; font-size:.72rem; padding:1px 2px; text-align:center; border:1px solid var(--line-strong); border-radius:4px; }
.ag-na { text-align:center; color:var(--ink-faint); background:repeating-linear-gradient(45deg, transparent 0 4px, rgba(0,0,0,.03) 4px 8px); }
.ag-grid tbody tr:hover td, .ag-grid tbody tr:hover th { background-color:rgba(91,140,175,.06); }
.cal-actions { display:flex; gap:8px; flex-wrap:wrap; margin:0 0 6px; }
.cal-days { display:flex; gap:6px 14px; flex-wrap:wrap; }
.cal-days label { display:flex; gap:5px; align-items:center; font-weight:400; color:var(--ink); font-size:.9rem; }
.cal-table tr.cal-newday td { border-top:2px solid var(--line-strong); }
.cal-table tr.is-cancelled td { opacity:.6; }
.cal-table tr.is-cancelled td b { text-decoration:line-through; }
.cal-table tr.is-today td:first-child { box-shadow:inset 3px 0 0 var(--navy); font-weight:700; }
.ag-grid tfoot .ag-count { text-align:center; }

/* ===== Etap 30: giełda — galeria, rezerwacje, edycja ===== */
.mp-gallery { margin:0 0 10px; }
.mp-main { display:block; position:relative; width:100%; padding:0; border:0; background:none; cursor:zoom-in; border-radius:10px; overflow:hidden; }
.mp-main img { width:100%; border-radius:10px; aspect-ratio:4/3; object-fit:cover; display:block; transition:transform .25s ease; }
.mp-main:hover img, .mp-main:focus-visible img { transform:scale(1.03); }
.mp-zoom-hint { position:absolute; right:8px; bottom:8px; background:rgba(8,18,30,.7); color:#fff; font-size:.74rem; font-weight:600; padding:3px 8px; border-radius:6px; pointer-events:none; }
.mp-thumbs { display:flex; gap:6px; margin-top:6px; }
.mp-thumb { border:2px solid transparent; padding:0; border-radius:7px; background:none; cursor:pointer; width:56px; height:42px; overflow:hidden; }
.mp-thumb img { width:100%; height:100%; object-fit:cover; display:block; }
.mp-thumb.is-active { border-color:var(--navy); }
.mp-card.is-reserved .mp-main img { filter:saturate(.6); }
.mp-reserved { margin:0 0 8px; padding:7px 10px; border-radius:8px; background:var(--warn-soft); color:var(--warn); font-size:.86rem; }
.mp-reserved span { opacity:.8; font-size:.8rem; }
.mp-mini { width:72px; height:72px; object-fit:cover; border-radius:10px; }
.mp-mini-set { display:flex; gap:6px; }
.mp-mini-set .mp-mini { width:56px; height:56px; }
.mp-row { display:flex; justify-content:space-between; align-items:center; gap:12px; flex-wrap:wrap; }
.mp-res-box { margin-top:8px; font-size:.86rem; }
.mp-edit-photos { display:flex; gap:12px; flex-wrap:wrap; }
.mp-edit-photo { display:flex; flex-direction:column; gap:4px; font-size:.82rem; }
.mp-edit-photo img { width:110px; height:82px; object-fit:cover; border-radius:8px; }
.mp-edit-photo label { display:flex; gap:5px; align-items:center; font-weight:400; color:var(--ink); }
.form-card.is-editing { box-shadow:0 0 0 2px var(--navy) inset; }

/* ===== Etap 31: kartoteka zawodnika ===== */
.athlete-link { color:inherit; text-decoration:none; border-bottom:1px dotted var(--line-strong); }
.athlete-link:hover { color:var(--navy); border-bottom-color:var(--navy); }
.ac-head { display:flex; gap:18px; align-items:center; margin:4px 0 12px; }
.ac-photo { width:84px; height:84px; border-radius:50%; object-fit:cover; flex:none; }
.ac-photo-empty { display:flex; align-items:center; justify-content:center; background:var(--ice-soft); color:var(--navy); font-weight:800; font-size:1.4rem; }
.ac-pills { display:flex; gap:6px; flex-wrap:wrap; margin-top:8px; }
.ac-tabs { display:flex; gap:4px; flex-wrap:wrap; border-bottom:1px solid var(--line); margin:4px 0 12px; position:sticky; top:0; background:var(--bg); z-index:5; padding-top:4px; }
.ac-tabs a { padding:8px 14px; font-weight:700; font-size:.9rem; color:var(--ink-soft); text-decoration:none; border-bottom:2px solid transparent; }
.ac-tabs a:hover { color:var(--navy); border-bottom-color:var(--navy); }
.ac-section { scroll-margin-top:56px; }
.ac-section > h2, .ac-section h2 { font-size:1.15rem; }
.ac-section .form-card h2 { margin:0 0 10px; }
#dane h2 { margin:0 0 12px; }
.ac-dl { display:grid; grid-template-columns:max-content 1fr; gap:6px 16px; margin:12px 0 0; font-size:.92rem; }
.ac-dl dt { color:var(--ink-soft); font-weight:600; }
.ac-dl dd { margin:0; }
.ac-docs { margin-bottom:12px; scroll-margin-top:56px; }
.ac-docs-head { display:flex; justify-content:space-between; align-items:center; gap:10px; flex-wrap:wrap; margin-bottom:8px; }
.ac-docs-head h3 { margin:0; font-size:1.02rem; }
.ac-docform { margin-bottom:14px; box-shadow:0 0 0 2px var(--navy) inset; scroll-margin-top:56px; }
.ac-table td, .ac-table th { font-size:.88rem; }
.ac-table tr.ac-old td { opacity:.55; }
.ac-att tr.ac-month th { background:var(--surface-2); font-size:.8rem; text-transform:capitalize; text-align:left; }
.ac-stats { display:flex; gap:12px; flex-wrap:wrap; margin:10px 0 14px; }
.ac-stats > div { background:var(--surface-2); border-radius:10px; padding:10px 14px; min-width:160px; }
.ac-stats b { display:block; font-size:1.4rem; color:var(--navy); }
.ac-stats span { font-size:.82rem; color:var(--ink-soft); }
.ac-switch { display:flex; gap:6px; flex-wrap:wrap; margin-bottom:12px; }
tr.is-match td { background:#fff8e1; }
@media (max-width:640px) { .ac-head { align-items:flex-start; } .ac-photo { width:60px; height:60px; } }

/* ===== Etap 32: podgląd zdjęć — powiększanie, przesuwanie, miniatury ===== */
.lb figure { display:flex; flex-direction:column; align-items:center; }
.lb .lb-stage { overflow:hidden; border-radius:6px; max-width:92vw; max-height:76vh; display:flex; align-items:center; justify-content:center; }
.lb img { max-height:76vh; cursor:zoom-in; transition:transform .2s ease; touch-action:none; user-select:none; -webkit-user-drag:none; }
.lb.zoomed img { cursor:zoom-out; transition:transform .2s ease, transform-origin .05s linear; box-shadow:none; }
.lb .lb-zoom { top:16px; right:74px; font-size:1.2rem; }
.lb .lb-strip { display:flex; gap:6px; justify-content:center; margin-top:10px; flex-wrap:wrap; max-width:92vw; }
.lb .lb-strip[hidden] { display:none; }
.lb .lb-th { position:static; width:64px; height:48px; border-radius:6px; padding:0; overflow:hidden; opacity:.55; border:2px solid transparent; background:none; }
.lb .lb-th img { width:100%; height:100%; object-fit:cover; max-height:none; cursor:pointer; box-shadow:none; border-radius:0; }
.lb .lb-th.is-active, .lb .lb-th:hover { opacity:1; border-color:#fff; background:none; }
.lb.zoomed figcaption { visibility:hidden; }
@media (max-width:640px) { .lb .lb-prev, .lb .lb-next { top:auto; bottom:14px; transform:none; } .lb .lb-th { width:52px; height:40px; } }
.mp-mini-set a { display:block; cursor:zoom-in; }
.lb.zoomed .lb-stage { width:92vw; height:76vh; }

/* ===== Etap 33: konta użytkowników z rodzinami ===== */
.acct-card { border:1px solid var(--line); border-radius:14px; background:var(--surface); padding:14px 16px; margin-bottom:12px; scroll-margin-top:16px; }
.acct-card.is-inactive { background:var(--surface-2); }
.acct-card:target { box-shadow:0 0 0 2px var(--navy); }
.acct-head { display:flex; gap:12px; align-items:flex-start; flex-wrap:wrap; }
.acct-head > .sel { margin-top:6px; width:18px; height:18px; }
.acct-id { flex:1 1 300px; min-width:0; }
.acct-login { display:block; font-weight:800; font-size:1.05rem; color:var(--navy); word-break:break-all; }
.acct-pills { display:flex; gap:5px; flex-wrap:wrap; margin-top:6px; }
.acct-pills .pill { font-size:.68rem; }
.acct-ctrl { display:flex; flex-direction:column; align-items:flex-end; gap:8px; }
.acct-role select { padding:6px 10px; border-radius:8px; border:1px solid var(--line-strong); font:inherit; font-size:.88rem; }
.acct-btns { display:flex; gap:6px; flex-wrap:wrap; justify-content:flex-end; }
.acct-btns form { display:inline; }
.acct-people { margin-top:12px; }
.acct-people td, .acct-people th { font-size:.88rem; }
.acct-people tr.is-removed td { opacity:.55; }
.acct-foot { display:flex; gap:18px; flex-wrap:wrap; margin-top:10px; }
.acct-foot summary { cursor:pointer; font-size:.86rem; font-weight:700; }
.bulk-bar { display:flex; gap:10px; align-items:center; flex-wrap:wrap; }
@media (max-width:720px) { .acct-ctrl { align-items:flex-start; width:100%; } .acct-btns { justify-content:flex-start; } }

/* ===== Etap 34: frekwencja — wyszukiwarka, kto pominięty ===== */
.ag-grid thead .ag-name { vertical-align:bottom; }
.ag-search { display:block; width:100%; min-width:150px; margin-top:6px; padding:6px 8px; border:1px solid var(--line-strong); border-radius:7px; font:inherit; font-size:.82rem; font-weight:400; text-transform:none; letter-spacing:0; }
.ag-search-info { display:block; font-size:.72rem; font-weight:400; text-transform:none; letter-spacing:0; margin-top:3px; }
.ag-excluded { font-size:.82rem; color:var(--ink-soft); margin:0 0 8px; }
.ag-excluded summary { cursor:pointer; }
.ag-excluded ul { margin:8px 0 0; padding-left:18px; line-height:1.7; }

/* ===== Etap 36: kartoteka trenera, trenerzy w kalendarzu i frekwencji ===== */
.coach-link { color:inherit; text-decoration:none; border-bottom:1px dotted var(--line-strong); }
.coach-link:hover { color:var(--navy); border-bottom-color:var(--navy); }
.cc-tabs a.is-active { color:var(--navy); border-bottom-color:var(--navy); }
.cc-grid { display:grid; grid-template-columns:repeat(auto-fill, minmax(320px, 1fr)); gap:14px; }
.cc-list { margin:0; padding-left:18px; line-height:1.8; font-size:.9rem; }
.cal-coach span { display:inline-block; margin:0 6px 2px 0; font-size:.85rem; white-space:nowrap; }
.cal-coach .is-present { color:#1d6b33; font-weight:600; }
.cal-coach .is-extra { font-style:italic; }
.cal-coaches label { min-width:180px; }
.ag-grid tr.ag-group th, .ag-grid tr.ag-group td { background:var(--surface-2); font-size:.72rem; font-weight:700; text-transform:uppercase; letter-spacing:.04em; color:var(--ink-soft); padding-top:6px; padding-bottom:6px; }
.ag-grid tr.ag-group td { text-transform:none; letter-spacing:0; font-weight:400; }
.ag-grid tr.ag-coach-row th.ag-name { background:#fbfaf3; }
.ag-cell.ag-coach.is-planned { box-shadow:inset 0 0 0 2px #c9a227; }
.ag-cell.ag-coach.is-on { background:#e9f7ee; }
.ag-plan { font-size:.68rem; color:#8a6d00; }
.ag-ev.is-target { background:#fff3c4 !important; box-shadow:inset 0 -3px 0 #c9a227; }

/* ===== Etap 37: kartoteka trenera na jednej stronie, lista kadry ===== */
.cc-month { display:flex; gap:6px; align-items:center; }
.cc-stats { display:flex; flex-wrap:wrap; gap:8px 22px; margin:12px 0 8px; font-size:.92rem; }
.cc-stats b { font-size:1.1rem; color:var(--navy); }
.cc-edit { margin-top:14px; }
.cc-edit > summary { list-style:none; display:inline-block; cursor:pointer; }
.cc-edit > summary::-webkit-details-marker { display:none; }
.cc-edit[open] > summary { margin-bottom:4px; }
.coach-row-photo { width:40px; height:40px; border-radius:50%; object-fit:cover; flex:none; }
.coach-row-initials { width:40px; height:40px; border-radius:50%; flex:none; display:inline-flex; align-items:center; justify-content:center; background:var(--ice-soft, #e6f3fb); color:var(--navy); font-weight:700; font-size:.8rem; }

/* ===== Etap 38: zatwierdzanie rozliczeń trenerów, wydatki na trenerów w finansach ===== */
.cs-approval { border-left:4px solid #c9a227; }
.cs-approval.is-approved { border-left-color:#2f8f6b; background:#f3faf6; }
.fin-coach td.num, .fin-coach th.num { text-align:right; white-space:nowrap; }
.fin-coach tr.is-auto td { background:#f3faf6; }
.fin-coach tr.is-total td { font-weight:700; border-top:2px solid var(--line-strong); }
.fin-auto-note { display:block; font-size:.76rem; color:#2f8f6b; margin-top:2px; }
.fin-auto-row td { background:#f3faf6; color:#1d6b33; font-size:.86rem; }
.fin-auto-row td.num { text-align:right; white-space:nowrap; }

/* ===== Etap 39: treningi — kto będzie, zmiany w treningach ===== */
.tp-list { display:flex; flex-direction:column; gap:10px; }
.tp-item.is-cancelled { opacity:.65; }
.tp-head { display:flex; justify-content:space-between; gap:12px; align-items:flex-start; }
.tp-when { font-weight:700; margin-right:6px; }
.tp-count { display:flex; flex-direction:column; align-items:flex-end; text-decoration:none; color:inherit; min-width:110px; text-align:right; }
.tp-count b { font-size:1.6rem; line-height:1; color:var(--navy); }
.tp-count span { font-size:.8rem; color:var(--ink-soft); }
.tp-count em { font-style:normal; font-size:.76rem; color:var(--ink-soft); }
.tp-kids { margin-top:10px; border-top:1px solid var(--line); padding-top:8px; display:flex; flex-direction:column; gap:6px; }
.tp-kid { display:flex; gap:8px; align-items:center; flex-wrap:wrap; margin:0; font-size:.9rem; }
.tp-kid.is-absent span:first-child { color:var(--bad); }
.tp-reason { max-width:200px; font-size:.85rem; padding:4px 8px; }
.tp-columns { display:grid; grid-template-columns:repeat(auto-fit, minmax(300px, 1fr)); gap:14px; }
.tp-names { margin:0; padding-left:22px; line-height:1.9; font-size:.92rem; }
.tp-names li.is-own { font-weight:700; }
.tp-publish-grid { display:grid; grid-template-columns:1fr 360px; gap:16px; margin-bottom:10px; }
.tp-preview { width:100%; border-radius:8px; border:1px solid var(--line); display:block; margin-top:4px; }
@media (max-width:760px) { .tp-publish-grid { grid-template-columns:1fr; } .tp-head { flex-direction:column; } .tp-count { align-items:flex-start; text-align:left; } }
.ag-cell.is-absent-reported { background:repeating-linear-gradient(135deg, #fff 0 6px, #fbecea 6px 12px); }
.ag-abs { display:block; font-size:.6rem; color:var(--bad); line-height:1; margin-top:2px; }

/* ===== Etap 40: komunikator, giełda — zakup ===== */
.mp-actions { display:flex; gap:6px; flex-wrap:wrap; margin-top:6px; }
.mp-actions form { margin:0; }
.mp-selling { background:#e8f2fb; color:var(--navy); }
.mp-buy-box { border:1px solid #e9cf7a; background:#fff8e1; padding:8px 12px; border-radius:10px; margin-top:8px; }
.msg-layout { display:grid; grid-template-columns:280px 1fr; gap:14px; align-items:start; }
.msg-side { background:var(--surface, #fff); border:1px solid var(--line); border-radius:12px; padding:8px; position:sticky; top:8px; max-height:calc(100vh - 40px); overflow:auto; }
.msg-side-head { margin:12px 8px 4px; font-size:.72rem; font-weight:700; text-transform:uppercase; letter-spacing:.06em; color:var(--ink-soft); }
.msg-side-empty { font-size:.8rem; margin:0 8px 6px; }
.msg-side-item { display:flex; justify-content:space-between; align-items:center; gap:8px; padding:8px 10px; border-radius:8px; color:var(--ink); text-decoration:none; font-size:.9rem; }
.msg-side-item span { display:flex; flex-direction:column; min-width:0; }
.msg-side-item small { font-size:.74rem; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.msg-side-item:hover { background:var(--ice-soft, #eef6fc); }
.msg-side-item.is-active { background:var(--navy); color:#fff; }
.msg-side-item.is-active .muted { color:#cfe0f2; }
.msg-badge { background:#d64545; color:#fff; border-radius:999px; font-size:.72rem; min-width:20px; text-align:center; padding:1px 6px; }
.msg-main { background:var(--surface, #fff); border:1px solid var(--line); border-radius:12px; padding:0 0 10px; min-height:420px; display:flex; flex-direction:column; }
.msg-head { padding:12px 16px; border-bottom:1px solid var(--line); display:flex; flex-direction:column; gap:2px; }
.msg-head .muted { font-size:.82rem; }
.msg-list { flex:1; overflow:auto; max-height:60vh; padding:12px 16px; display:flex; flex-direction:column; gap:8px; }
.msg-day { align-self:center; font-size:.72rem; color:var(--ink-soft); background:var(--bg); border-radius:999px; padding:2px 10px; margin:6px 0; }
.msg-bubble { max-width:72%; align-self:flex-start; background:#f1f4f8; border-radius:12px 12px 12px 4px; padding:8px 12px; font-size:.92rem; line-height:1.45; }
.msg-bubble.is-mine { align-self:flex-end; background:var(--navy); color:#fff; border-radius:12px 12px 4px 12px; }
.msg-bubble.is-mine a { color:#fff; }
.msg-bubble small { display:block; text-align:right; font-size:.68rem; opacity:.7; margin-top:2px; }
.msg-author { display:block; font-size:.76rem; color:var(--navy); margin-bottom:2px; }
.msg-system { align-self:center; text-align:center; max-width:86%; font-size:.84rem; background:#fff8e1; border:1px solid #f0dc9a; border-radius:10px; padding:6px 12px; }
.msg-system small { color:var(--ink-soft); font-size:.7rem; }
.msg-compose { display:flex; gap:8px; padding:8px 12px 0; border-top:1px solid var(--line); align-items:flex-end; }
.msg-compose textarea { flex:1; resize:vertical; min-height:44px; font:inherit; padding:8px 10px; border-radius:8px; border:1px solid var(--line-strong, #c9d3de); }
.msg-infos { list-style:none; margin:0; padding:6px 0; }
.msg-infos li { display:flex; gap:12px; padding:10px 16px; border-bottom:1px solid var(--line); font-size:.9rem; }
.msg-infos li.is-new { background:#f3f8fd; }
.msg-infos li.is-new b::after { content:" • nowe"; color:#d64545; font-size:.72rem; }
.msg-ico { font-size:1.3rem; line-height:1; }
.ch-members { display:grid; grid-template-columns:repeat(auto-fit, minmax(320px, 1fr)); gap:14px; }
.ch-list { list-style:none; margin:0; padding:0; max-height:420px; overflow:auto; }
.ch-list li { display:flex; justify-content:space-between; align-items:center; gap:8px; padding:4px 0; border-bottom:1px solid var(--line); font-size:.88rem; }
.ch-list form { margin:0; }
.ch-pick { max-height:320px; overflow:auto; border:1px solid var(--line); border-radius:8px; padding:6px 10px; display:flex; flex-direction:column; gap:4px; font-size:.88rem; }
@media (max-width:860px) { .msg-layout { grid-template-columns:1fr; } .msg-side { position:static; max-height:none; } .msg-bubble { max-width:88%; } }

/* ===== Etap 41: jedno menu panelu (boczne + strona główna) ===== */
.pn-who { padding:8px 10px 14px; border-bottom:1px solid var(--line); margin-bottom:10px; display:flex; flex-direction:column; gap:2px; }
.pn-who b { font-size:.92rem; }
.pn-who span { font-size:.74rem; color:var(--ink-faint); word-break:break-all; }
.pn-who a { font-size:.78rem; padding:0 !important; }
.panel-nav .pn-group { margin:14px 10px 4px; font-size:.68rem; font-weight:700; letter-spacing:.07em; text-transform:uppercase; color:var(--ink-faint); }
.panel-nav .pn-logout { color:var(--bad) !important; margin-top:14px; }
.pd-hello { display:flex; justify-content:space-between; align-items:flex-start; gap:12px; margin-bottom:12px; }
.pd-hello h1 { font-size:1.45rem; margin:0 0 4px; }
.pd-hello p { margin:0; }
.pd-alert { display:block; text-decoration:none; margin-bottom:8px; }
.pd-group { margin-top:18px; }
.pd-group h2 { font-size:.78rem; font-weight:700; letter-spacing:.07em; text-transform:uppercase; color:var(--ink-soft); margin:0 0 8px; }
.pd-tiles { display:grid; grid-template-columns:repeat(auto-fill, minmax(230px, 1fr)); gap:10px; }
.pd-tile { display:flex; flex-direction:column; gap:4px; padding:14px 16px; background:var(--surface, #fff); border:1px solid var(--line); border-radius:12px; text-decoration:none; color:var(--ink); transition:border-color .15s, box-shadow .15s; }
.pd-tile:hover { border-color:var(--navy); box-shadow:0 4px 14px rgba(11,46,89,.08); }
.pd-tile b { font-size:.95rem; color:var(--navy); }
.pd-tile span { font-size:.82rem; color:var(--ink-soft); line-height:1.4; }

/* ===== Etap 42: aplikacja na telefon — dolny pasek, wysuwane menu ===== */
.m-tabbar, .m-backdrop, .pn-close { display:none; }
@media (max-width:860px) {
  body:has(.panel-shell) .topbar .nav-links { display:none; }
  body:has(.panel-shell) .topbar-inner { padding-block:10px; gap:10px; flex-wrap:nowrap; }
  body:has(.panel-shell) .topbar .brand img { width:38px; height:38px; }
  body:has(.panel-shell) .topbar .brand b { font-size:1.15rem; }
  body:has(.panel-shell) .topbar .brand span span, body:has(.panel-shell) .topbar .brand > span > span { display:none; }
  body:has(.panel-shell) .topbar-auth { margin-left:auto; }
  body:has(.panel-shell) .topbar-auth a[href$="logout.php"] { display:none; }
  .panel-shell { padding-bottom:calc(72px + env(safe-area-inset-bottom)); }
  .panel-nav { position:fixed; z-index:80; top:0; bottom:0; left:0; width:min(320px, 86vw); overflow-y:auto; transform:translateX(-105%);
               transition:transform .22s ease; box-shadow:0 0 40px rgba(11,44,74,.25); border-right:0; padding-top:calc(16px + env(safe-area-inset-top));
               padding-bottom:calc(24px + env(safe-area-inset-bottom)); }
  .panel-nav a { padding:12px 10px; font-size:.98rem; }
  body.drawer-open .panel-nav { transform:none; }
  body.drawer-open { overflow:hidden; }
  .pn-close { display:block; position:absolute; top:calc(10px + env(safe-area-inset-top)); right:10px; width:40px; height:40px; border:0; border-radius:10px;
              background:var(--surface-2); font-size:1.1rem; cursor:pointer; color:var(--ink); }
  .pn-who { padding-right:48px; }
  .m-backdrop { position:fixed; inset:0; z-index:70; background:rgba(11,30,50,.4); opacity:0; pointer-events:none; transition:opacity .2s; display:block; }
  body.drawer-open .m-backdrop { opacity:1; pointer-events:auto; }
  .m-tabbar { display:grid; grid-auto-flow:column; grid-auto-columns:1fr; position:fixed; z-index:60; left:0; right:0; bottom:0;
              background:var(--surface); border-top:1px solid var(--line); padding-bottom:env(safe-area-inset-bottom); box-shadow:0 -6px 20px rgba(11,44,74,.06); }
  .m-tabbar a { position:relative; display:flex; flex-direction:column; align-items:center; gap:2px; padding:8px 2px 9px; font-size:.7rem; font-weight:600;
                color:var(--ink-soft); text-decoration:none; -webkit-tap-highlight-color:transparent; }
  .m-tabbar a i { font-style:normal; font-size:1.25rem; line-height:1.2; filter:grayscale(1); opacity:.75; }
  .m-tabbar a.on { color:var(--navy); }
  .m-tabbar a.on i { filter:none; opacity:1; }
  .m-tabbar a.on::before { content:""; position:absolute; top:0; left:25%; right:25%; height:3px; border-radius:0 0 3px 3px; background:var(--navy); }
  .m-tabbar b { position:absolute; top:4px; left:calc(50% + 6px); min-width:18px; height:18px; padding:0 5px; border-radius:9px; background:var(--bad, #C74B34);
                color:#fff; font-size:.66rem; line-height:18px; text-align:center; }
  .panel-main, .panel-shell > main { min-width:0; }
}
@media (max-width:860px) and (display-mode: standalone) {
  body:has(.panel-shell) .topbar { padding-top:env(safe-area-inset-top); }
}
@media print { .m-tabbar, .m-backdrop { display:none !important; } }

/* Strona „Aplikacja na telefon” */
.app-hero { display:flex; gap:16px; align-items:center; }
.app-hero img { width:72px; height:72px; border-radius:16px; box-shadow:0 4px 14px rgba(11,44,74,.15); }
.app-steps { margin:8px 0 0; padding-left:20px; line-height:1.6; }
.app-status { display:inline-flex; align-items:flex-start; gap:8px; font-weight:700; }
.app-status::before { content:""; flex-shrink:0; width:10px; height:10px; margin-top:.45em; border-radius:50%; background:var(--ink-faint); }
.app-status.ok::before { background:var(--good, #2E8B57); }
.app-status.warn::before { background:var(--warn, #D99A1E); }
.app-kinds { display:grid; gap:8px; margin:10px 0 14px; }
.app-kinds label { display:flex; gap:10px; align-items:center; font-weight:500; }
.app-kinds input { width:20px; height:20px; }
.app-devices td { vertical-align:middle; }
[data-show] { display:none; }
/* Etap 42: lista obecności na stronie treningu */
.tp-att-tools { display:flex; gap:6px; align-items:center; flex-wrap:wrap; margin-bottom:8px; }
.tp-att-count { margin-left:auto; font-size:.86rem; color:var(--navy); }
.tp-att-list { display:grid; grid-template-columns:repeat(auto-fill, minmax(230px, 1fr)); gap:4px; }
.tp-att-list label { display:flex; gap:10px; align-items:center; padding:9px 10px; border:1px solid var(--line); border-radius:10px; cursor:pointer; font-weight:500; -webkit-tap-highlight-color:transparent; }
.tp-att-list label:has(input:checked) { background:var(--ice-soft); border-color:var(--ice); }
.tp-att-list input { width:22px; height:22px; flex-shrink:0; margin:0; }
.tp-att-list small { display:block; color:var(--bad, #C74B34); font-size:.74rem; }
.tp-att-list label.is-absent:not(:has(input:checked)) { opacity:.75; }

/* ===== Etap 43: kopie zapasowe ===== */
.bk-inline { display:flex; gap:8px; align-items:center; flex-wrap:wrap; margin:6px 0; }
.bk-inline input[type=password], .bk-inline input[type=text] { max-width:240px; }
.bk-inline input[type=number] { width:70px; margin-left:4px; }
.bk-inline label { display:flex; align-items:center; font-weight:500; }
.bk-radio { display:flex; gap:8px; align-items:center; font-weight:500; margin:6px 0; }
.bk-radio input { width:18px; height:18px; margin:0; }
.bk-secret { border:2px solid var(--ice); background:var(--ice-soft); margin-bottom:14px; }
.bk-code { font-family:ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; font-size:1.35rem; font-weight:700; letter-spacing:.04em; background:#fff; border:1px dashed var(--line-strong, #c9d4de); border-radius:10px; padding:12px 14px; word-break:break-all; user-select:all; }
.bk-script { width:100%; box-sizing:border-box; font-family:ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; font-size:.78rem; line-height:1.45; background:#0F1E2E; color:#E6F1F8; border-radius:10px; padding:12px; border:0; }
.bk-copy { margin:6px 0 4px; }
.bk-copy code { display:block; padding:8px 10px; background:var(--surface-2); border:1px solid var(--line); border-radius:8px; font-size:.8rem; word-break:break-all; user-select:all; }
.bk-warn { margin-bottom:8px; }

/* ===== Etap 44: uprawnienia trenera ===== */
.info-note { background:var(--ice-soft); border:1px solid var(--ice); color:var(--navy); border-radius:10px; padding:10px 12px; font-size:.88rem; }
.ag-ev.is-mine { box-shadow:inset 0 0 0 2px var(--navy); }
.ag-ev.is-locked { opacity:.6; }
.ag-cell.is-locked { background:repeating-linear-gradient(135deg, transparent 0 6px, rgba(15,76,129,.04) 6px 12px); }
.ck-readonly { display:grid; grid-template-columns:repeat(auto-fill, minmax(200px, 1fr)); gap:8px 16px; margin:0 0 14px; }
.ck-readonly div { display:flex; flex-direction:column; }
.ck-readonly span { font-size:.76rem; color:var(--ink-faint); text-transform:uppercase; letter-spacing:.05em; }
.ac-limited { font-size:.84rem; }
.ac-contact { margin:6px 0 0; font-size:.92rem; } .ac-contact a { font-weight:700; text-decoration:none; }

/* ===== Etap 45: wyjazdy zwijane, poprawki układu formularzy na telefonie ===== */
.form-grid { grid-template-columns:minmax(0, 1fr) minmax(0, 1fr); }
@media (max-width:600px) { .form-grid { grid-template-columns:minmax(0, 1fr); } }
.field { min-width:0; }
.field input, .field select, .field textarea { max-width:100%; min-width:0; box-sizing:border-box; }
.field select { width:100%; text-overflow:ellipsis; }
.field label, .field > span { overflow-wrap:anywhere; }
.checkbox-group { min-width:0; }
.checkbox-pill { max-width:100%; white-space:normal; line-height:1.3; box-sizing:border-box; }
.checkbox-pill input { flex-shrink:0; }
.cost-breakdown { grid-template-columns:repeat(auto-fit, minmax(min(120px, 100%), 1fr)); }
.trip-acc-list { display:flex; flex-direction:column; gap:12px; }
.trip-acc { padding:0; overflow:hidden; }
.trip-acc-head { list-style:none; display:flex; justify-content:space-between; align-items:center; gap:14px; padding:16px 18px; cursor:pointer; }
.trip-acc-head::-webkit-details-marker { display:none; }
.trip-acc-head::before { content:"▸"; font-size:1rem; color:var(--navy); transition:transform .15s; flex-shrink:0; }
.trip-acc[open] > .trip-acc-head::before { transform:rotate(90deg); }
.trip-acc[open] > .trip-acc-head { border-bottom:1px solid var(--line); }
.trip-acc-main { display:flex; flex-direction:column; gap:4px; flex:1; min-width:0; }
.trip-acc-title { font-size:1.08rem; color:var(--night, var(--ink)); overflow-wrap:anywhere; }
.trip-acc-dates { font-size:.88rem; }
.trip-acc-pills { display:flex; gap:4px; flex-wrap:wrap; }
.trip-acc-pills:empty { display:none; }
.trip-acc-cost { display:flex; flex-direction:column; align-items:flex-end; text-align:right; flex-shrink:0; }
.trip-acc-cost span { font-size:.7rem; color:var(--ink-faint); text-transform:uppercase; letter-spacing:.04em; }
.trip-acc-cost b { font-size:1.12rem; color:var(--navy); white-space:nowrap; }
.trip-acc-body { padding:14px 18px 18px; }
.trip-est-note { font-size:.8rem; margin:6px 0 0; }
@media (max-width:520px) {
  .trip-acc-head { padding:14px; flex-wrap:wrap; }
  .trip-acc-cost { align-items:flex-start; text-align:left; flex-direction:row; gap:6px; align-items:baseline; width:100%; padding-left:24px; }
  .trip-acc-body { padding:12px 14px 16px; }
}

/* ===== Etap 45.1: wyjazdy na stronie — zdjęcie i krótki opis widoczne od razu ===== */
.trip-list { display:flex; flex-direction:column; gap:18px; }
.trip-item { display:grid; grid-template-columns:minmax(0, 340px) minmax(0, 1fr); gap:20px; align-items:start; padding:16px; }
.trip-item.no-photo { grid-template-columns:minmax(0, 1fr); }
.trip-item-photo { width:100%; aspect-ratio:4 / 3; object-fit:cover; border-radius:12px; display:block; background:var(--ice-soft); }
.trip-item-body { min-width:0; }
.trip-item-title { margin:2px 0 4px; font-size:1.25rem; overflow-wrap:anywhere; }
.trip-item-dates { margin:0 0 8px; }
.trip-item-short { margin:0 0 8px; line-height:1.55; color:var(--ink-soft); }
.trip-item-more { margin:0 0 10px; }
.trip-item-more summary { cursor:pointer; font-weight:700; color:var(--navy); font-size:.9rem; }
.trip-item-more[open] summary { margin-bottom:6px; }
.trip-item-cost { margin:0 0 4px; }
.trip-item-cost b { color:var(--navy); }
@media (max-width:720px) { .trip-item { grid-template-columns:minmax(0, 1fr); gap:12px; padding:12px; } }

/* Etap 46: zablokowane wpisy w Aktualnościach */
tr.is-blocked td{background:#fff6f5;}
tr.is-blocked td b{text-decoration:line-through; text-decoration-color:rgba(198,40,40,.5);}
.news-block{position:relative;}
.news-block > summary{list-style:none; cursor:pointer;}
.news-block > summary::-webkit-details-marker{display:none;}
.news-block[open] .news-block-form{display:flex; flex-direction:column; gap:6px; margin-top:6px; min-width:220px; max-width:300px;}
.news-block-form label{display:flex; flex-direction:column; gap:3px;}

/* Etap 47: nagłówek w jednej linii — mniejsze przyciski logowania, ciaśniejsze menu */
.btn-xs{padding:5px 10px; font-size:.76rem; border-radius:7px; line-height:1.2;}
.topbar-inner{max-width:1240px; gap:16px;}
.nav-links{gap:0;}
.nav-links a{padding:10px 11px; font-size:.98rem;}
.topbar-auth .btn-xs{white-space:nowrap; max-width:170px; overflow:hidden; text-overflow:ellipsis;}

/* Etap 47: odczytanie wiadomości w komunikatorze */
.msg-read{margin-top:3px; font-size:.7rem; text-align:right;}
.msg-read > summary{cursor:pointer; list-style:none; opacity:.8;}
.msg-read > summary::-webkit-details-marker{display:none;}
.msg-read[open] > summary{opacity:1; font-weight:700;}
.msg-read > div{text-align:left; margin-top:4px; line-height:1.4;}
.msg-read-one{display:block; text-align:right; font-size:.7rem; opacity:.8;}

/* Etap 47: konto zawodnika */
.ath-trip-head{display:flex; gap:14px; align-items:flex-start;}
.ath-trip-head .trip-photo-sm{width:120px; height:90px; object-fit:cover; border-radius:8px; flex:none; margin:0;}
.ath-trip-facts{margin:10px 0 0; padding-left:18px; line-height:1.7; font-size:.92rem;}
.aa-box{margin-top:8px; font-size:.86rem;}
.aa-box .aa-login{display:inline-flex; gap:6px; align-items:center; flex-wrap:wrap;}
.aa-box .aa-btns{display:inline-flex; gap:6px; flex-wrap:wrap; margin-left:6px;}
.aa-inline{display:inline;}
.aa-del{color:var(--bad);}
.aa-new > summary{cursor:pointer; font-weight:600; color:var(--gate-blue, #1d4ed8);}
.aa-form{display:flex; gap:8px; align-items:flex-end; flex-wrap:wrap; margin-top:8px;}
.aa-form label{display:flex; flex-direction:column; gap:3px; font-size:.82rem; min-width:0; flex:1 1 220px; max-width:340px;}
.aa-hint{font-size:.8rem; margin:6px 0 0;}
@media (max-width:560px){ .ath-trip-head .trip-photo-sm{width:84px; height:64px;} .aa-box .aa-btns{margin-left:0; margin-top:4px;} }

/* Etap 48: logowanie dwuetapowe */
.mfa-qr{width:200px; height:200px; margin:8px auto;} .mfa-qr svg{width:100%; height:100%;}
.mfa-codes{display:grid; grid-template-columns:repeat(auto-fill, minmax(120px, 1fr)); gap:6px; font-family:ui-monospace, monospace; font-size:1.02rem; background:var(--surface-2, #f2f6f9); padding:12px; border-radius:10px; text-align:center;}
.mfa-form{display:flex; gap:8px; flex-wrap:wrap; align-items:center; margin-top:8px;}
.mfa-form input{max-width:170px; letter-spacing:.15em; text-align:center;}

/* Etap 48: rozliczenia rodzin, wyciągi, prognozy */
.bl-tabs{display:flex; gap:4px; flex-wrap:wrap; border-bottom:1px solid var(--line); margin:0 0 14px;}
.bl-tabs a{padding:8px 14px; text-decoration:none; color:var(--ink-soft); font-weight:600; font-size:.92rem; border-bottom:3px solid transparent; margin-bottom:-1px;}
.bl-tabs a.on{color:var(--night); border-bottom-color:var(--gate-red);}
.bl-cards{display:grid; grid-template-columns:repeat(auto-fit, minmax(220px, 1fr)); gap:12px; margin-bottom:6px;}
.bl-cards > .form-card{display:flex; flex-direction:column; gap:4px; min-width:0;}
.bl-cols{display:grid; grid-template-columns:repeat(auto-fit, minmax(280px, 1fr)); gap:12px; margin-top:18px;}
.trip-cost-big.neg, td.neg, th.neg{color:var(--bad);}
table .num{text-align:right; white-space:nowrap;}
.bl-sub{font-size:.76rem;}
.bl-ledger tr.is-payment td:first-child{box-shadow:inset 3px 0 0 #2e9e6b;}
.bl-ledger tr.is-charge td:first-child{box-shadow:inset 3px 0 0 var(--gate-red, #e0242f);}
tr.is-cancelled td{opacity:.55;} tr.is-cancelled td b{text-decoration:line-through;}
.bl-act > summary{list-style:none; cursor:pointer;} .bl-act > summary::-webkit-details-marker{display:none;}
.bl-act[open] form{display:flex; flex-direction:column; gap:6px; margin-top:6px; min-width:200px;}
.bl-mini{display:flex; gap:6px; flex-wrap:wrap; align-items:center; margin-top:10px;}
.bl-mini input, .bl-mini select{flex:1 1 140px; min-width:0; max-width:260px;}
.bl-gen{display:flex; gap:8px; flex-wrap:wrap; align-items:flex-end;}
.bl-gen label{display:flex; flex-direction:column; gap:3px; font-size:.82rem; font-weight:600;}
.bl-acc{display:flex; justify-content:space-between; gap:10px; align-items:center; padding:8px 0; border-bottom:1px solid var(--line); font-size:.9rem;}
.bl-transfer p{margin:0; font-size:.92rem;} .bl-transfer [data-copy]{font-family:ui-monospace, monospace; letter-spacing:.02em;}
.bl-tx-head{font-size:.95rem;}
.fc-chart{width:100%; height:auto; display:block;}
.fc-chart .fc-axis{stroke:var(--line); stroke-width:1;}
.fc-chart .fc-inc{fill:#2e9e6b;} .fc-chart .fc-exp{fill:var(--gate-red, #e0242f); opacity:.85;}
.fc-chart .fc-cum{fill:none; stroke:var(--night, #072a55); stroke-width:2.5;}
.fc-chart .fc-lbl{font-size:11px; fill:var(--ink-faint, #667);}
.fc-legend{font-size:.82rem; margin:6px 0 0; display:flex; gap:12px; align-items:center; flex-wrap:wrap;}
.fc-k{display:inline-block; width:12px; height:12px; border-radius:3px; vertical-align:middle;} .fc-k.inc{background:#2e9e6b;} .fc-k.exp{background:var(--gate-red, #e0242f);} .fc-k.cum{background:var(--night, #072a55); height:3px;}
.fc-table td, .fc-table th{font-size:.86rem;}
.fc-table td.fc-month{min-width:190px;}
.bl-ledger td.bl-d{white-space:nowrap;}
/* Etap 48: historia rozliczeń na telefonie — karty zamiast szerokiej tabeli */
@media (max-width:640px){
  .bl-ledger thead{display:none;}
  .bl-ledger, .bl-ledger tbody{display:block;}
  .bl-ledger tr{display:grid; grid-template-columns:1fr auto; gap:2px 10px; padding:10px 12px; border-bottom:1px solid var(--line);}
  .bl-ledger td{display:block; border:0; padding:0; box-shadow:none !important;}
  .bl-ledger td.bl-d{grid-column:1; font-size:.78rem; color:var(--ink-faint);}
  .bl-ledger td.bl-t{grid-column:1 / -1; grid-row:2;}
  .bl-ledger td.bl-c, .bl-ledger td.bl-p{grid-column:2; grid-row:1; font-weight:700;}
  .bl-ledger td.bl-c:empty, .bl-ledger td.bl-p:empty{display:none;}
  .bl-ledger td.bl-p{color:#2e9e6b;}
  .bl-ledger td.bl-b{grid-column:1 / -1; font-size:.78rem; color:var(--ink-faint); text-align:left;}
  .bl-ledger td.bl-b::before{content:"saldo po: ";}
  .bl-ledger tr.is-payment{box-shadow:inset 3px 0 0 #2e9e6b;} .bl-ledger tr.is-charge{box-shadow:inset 3px 0 0 var(--gate-red, #e0242f);}
  .bl-ledger td:last-child:not(.bl-b){grid-column:1 / -1;}
}
.bl-gen input:not([type=checkbox]):not([type=file]), .bl-gen select, .bl-mini input, .bl-mini select, .bl-act input, .mfa-form input,
.bl-tx select{border:1px solid var(--line-strong); background:var(--surface); color:var(--ink); border-radius:9px; padding:8px 10px; font:inherit; font-size:.9rem; box-sizing:border-box; max-width:100%;}
.bl-gen label.checkbox-pill{flex-direction:row; align-items:center; font-weight:500;}

/* ===== Etap 49: naliczenia za wyjazd (składniki), podsumowanie rodziny, PayU ===== */
.trip-comp{border:1px solid var(--line); border-radius:10px; padding:8px 12px; margin:8px 0; background:var(--card, #fff);}
.trip-comp > summary{cursor:pointer; font-size:.92rem; list-style-position:outside;}
.trip-comp[open] > summary{margin-bottom:4px;}
.trip-comp-table td, .trip-comp-table th{padding:5px 8px; font-size:.86rem;}
.trip-comp-table input[type=checkbox]{width:18px; height:18px;}
.bl-famsum tr.bl-subtotal td{border-top:1px dashed var(--line); background:rgba(0,0,0,.02);}
.bl-famsum td.bl-d{white-space:normal;}
.bl-famsum td:first-child{box-shadow:none !important;}
.bl-group{margin:8px 0; border:1px solid var(--line); border-radius:10px; padding:8px 12px;}
.bl-group > summary{cursor:pointer; font-size:.9rem;}
.bl-group .table-wrap{margin-top:8px;}
.bl-sum-cards{margin-bottom:12px;}
.bl-payu .bl-mini{display:flex; gap:8px; align-items:flex-end; flex-wrap:wrap; margin-top:6px;}
.bl-people td, .bl-people th{font-size:.86rem;}
@media (max-width:700px){
  .bl-famsum tr{grid-template-columns:1fr auto; padding:6px 12px;}
  .bl-famsum td.bl-t{grid-column:1 / -1; grid-row:1; font-size:.95rem; margin-top:6px;}
  .bl-famsum td.bl-t:empty{display:none;}
  .bl-famsum td.bl-d{grid-column:1; grid-row:2; font-size:.86rem; color:inherit;}
  .bl-famsum td.bl-c{grid-column:2; grid-row:2;}
  .bl-famsum td.bl-d{min-width:0; overflow-wrap:anywhere; white-space:normal;}
  .bl-famsum tfoot{display:block;}
  .bl-famsum tfoot tr{display:grid; grid-template-columns:1fr auto; gap:10px; padding:6px 12px;}
  .bl-famsum tfoot th{border:0; padding:0; text-align:left;}
  .bl-famsum tfoot th.num{text-align:right;}
  .bl-charges td.bl-d{grid-row:1;}
}

/* ===== Etap 50: kwoty miesięcy w opłacie, korekta kwot, rozliczenie busa, potwierdzenia ===== */
.pill-ok{background:rgba(46,158,107,.14); color:#1f7a52;}
.bl-mgrid{display:grid; grid-template-columns:repeat(auto-fill, minmax(92px, 1fr)); gap:6px;}
.bl-mcell{display:flex; flex-direction:column; gap:2px; font-size:.78rem; color:var(--ink-faint);}
.bl-mcell input{width:100%; padding:6px 8px; font-size:.88rem;}
.bl-mcell[hidden]{display:none;}
.bl-fee-link{color:inherit; text-decoration:none; border-bottom:1px dashed currentColor;}
.bl-fee-link:hover{color:var(--ice, #2e9bd6);}
.bl-amt{width:96px; text-align:right; padding:4px 6px;}
.bl-month{min-width:150px;}
.bl-legacy{margin-top:12px; padding:10px 12px; border:1px dashed var(--line); border-radius:10px; font-size:.85rem;}
.bl-legacy-row{display:flex; gap:10px; align-items:center; margin-top:6px; flex-wrap:wrap;}
.bl-delete{margin-top:14px; border-top:1px solid var(--line); padding-top:10px;}
.bl-delete > summary{cursor:pointer; color:var(--bad); font-size:.88rem; font-weight:600;}
.bl-delete .checkbox-pill{margin:4px 8px 0 0;}
.tb-status{font-size:.88rem; margin:0 0 10px; padding:8px 12px; border-radius:10px; background:rgba(224,36,47,.06);}
.tb-status.ok{background:rgba(46,158,107,.08);}
.tb-settle{margin-top:10px; border-top:1px dashed var(--line); padding-top:10px;}
.tb-settle > details > summary{list-style:none; display:inline-flex; cursor:pointer;}
.tb-settle > details > summary::-webkit-details-marker{display:none;}
.tb-done{display:flex; gap:8px; align-items:baseline; flex-wrap:wrap; font-size:.86rem; margin-bottom:8px;}
.tb-form{display:grid; grid-template-columns:repeat(auto-fit, minmax(180px, 1fr)); gap:10px; margin-top:10px;}
.tb-form .field.full, .tb-form .tb-actions{grid-column:1 / -1;}
.tb-actions{display:flex; gap:10px; align-items:center; flex-wrap:wrap;}
.fin-doc{font-size:.8rem; font-weight:600;}

/* ===== Etap 51: zaliczki, giełda → kanał ===== */
.td-grid{display:flex; gap:10px 14px; flex-wrap:wrap; align-items:flex-end; margin:6px 0 4px;}
.td-grid label{display:flex; flex-direction:column; gap:3px; font-size:.8rem; color:var(--ink-faint);}
.td-grid label.checkbox-pill{flex-direction:row; color:inherit; font-size:.85rem;}
.td-grid input, .td-grid select{min-width:110px;}
.td-pill{font-size:.64rem; white-space:nowrap;}
.td-note{font-size:.85rem; margin:0 0 8px; padding:8px 12px; border-radius:10px; background:rgba(46,155,214,.08);}
.btn-xs{padding:2px 8px; font-size:.72rem;}

/* ===== Etap 52: autozapis, zawodnicy opłat, trenerzy ===== */
.autosave-toast{position:fixed; right:16px; bottom:16px; z-index:90; background:#1f7a52; color:#fff; padding:10px 14px; border-radius:10px; font-size:.88rem; box-shadow:0 6px 20px rgba(0,0,0,.18); max-width:min(420px, calc(100vw - 32px));}
.autosave-toast.bad{background:var(--bad, #c0392b);}
.autosave-hidden{display:none !important;}
.autosave-note{font-size:.78rem; margin:6px 0 0;}
.trip-coach-sel{display:block; margin-top:4px; max-width:150px; font-size:.8rem;}
.trip-coaches{font-size:.88rem; margin:6px 0 8px;}
.trip-coach-link, .coach-link{color:inherit; border-bottom:1px dashed currentColor; text-decoration:none;}
.coach-head{display:flex; gap:18px; align-items:center; flex-wrap:wrap; margin-top:8px;}
.coach-photo{width:140px; height:140px; border-radius:50%; object-fit:cover;}
.coach-initial{display:flex; align-items:center; justify-content:center; background:var(--ice-soft); color:var(--navy); font-size:3rem; font-weight:700;}
.coach-trips{padding-left:18px; line-height:1.8;}
.bl-members input[type=date]{max-width:150px; padding:4px 6px;}
.bl-members td{vertical-align:top; font-size:.88rem;}
.bl-leave{display:inline-block;}
.bl-leave > summary{list-style:none; display:inline-flex; cursor:pointer;}
.bl-leave > summary::-webkit-details-marker{display:none;}
.bl-leave form{margin-top:6px; display:flex; gap:6px;}
.bl-pay-edit form{display:flex; flex-wrap:wrap; gap:6px; align-items:flex-end; margin-top:6px; font-size:.78rem;}
.bl-pay-edit label{display:flex; flex-direction:column; gap:2px;}

/* Etap 54: lokatorzy w tabeli „Pokoje i wolne miejsca” — ✕ zdejmuje z pokoju */
.rb-people { display:flex; flex-wrap:wrap; gap:4px 6px; }
.rb-person { display:inline-flex; align-items:center; gap:4px; padding:2px 4px 2px 9px; border:1px solid var(--line); border-radius:999px; background:var(--card, #fff); white-space:nowrap; }
.rb-x { border:0; background:transparent; color:var(--bad); cursor:pointer; font-size:.78rem; line-height:1; padding:3px 5px; border-radius:50%; }
.rb-x:hover, .rb-x:focus-visible { background:rgba(224,36,47,.12); }

/* Etap 55: dane kontaktowe w stopce (jak w wizytówce Google) */
footer .footer-nap { font-size:.86rem; margin-bottom:6px; line-height:1.5; }
footer .footer-nap a { color:inherit; text-decoration:underline; text-underline-offset:2px; }

/* Etap 56: kalendarium w zakładce Treningi */
.cv-views { display:flex; gap:4px; flex-wrap:wrap; margin:0 0 10px; }
.cv-views a { padding:6px 12px; border:1px solid var(--line); border-radius:999px; text-decoration:none; color:inherit; font-size:.86rem; font-weight:600; background:var(--card, #fff); }
.cv-views a.is-on { background:var(--night, #072A55); border-color:var(--night, #072A55); color:#fff; }
.cv-legend { display:flex; flex-wrap:wrap; gap:6px 14px; font-size:.78rem; margin:0 0 8px; color:var(--muted, #5b6b80); }
.cv-legend span { display:inline-flex; align-items:center; gap:5px; }
.cv-legend i { width:12px; height:12px; border-radius:3px; display:inline-block; }
.cv-legend .cv-i-past { background:#c9d1db; }
.cv-grid { display:grid; grid-template-columns:repeat(7, minmax(0, 1fr)); border:1px solid var(--line); border-radius:10px; overflow:hidden; background:var(--line); gap:1px; }
.cv-hd { background:var(--bg); font-size:.72rem; font-weight:700; text-transform:uppercase; letter-spacing:.04em; padding:6px; text-align:center; color:var(--muted, #5b6b80); }
.cv-day { background:var(--card, #fff); min-height:96px; padding:4px; display:flex; flex-direction:column; gap:3px; min-width:0; }
.cv-tydzien .cv-day { min-height:240px; }
.cv-day.is-out { background:var(--bg); }
.cv-day.is-out .cv-num { opacity:.45; }
.cv-day.is-weekend { background:color-mix(in srgb, var(--card, #fff) 92%, var(--snow-ice, #E8F2FA)); }
.cv-day.is-today { box-shadow:inset 0 0 0 2px var(--gate-red, #E0242F); }
.cv-num { font-size:.75rem; font-weight:700; color:var(--muted, #5b6b80); }
.cv-day.is-today .cv-num { color:var(--gate-red, #E0242F); }
.cv-wd { text-transform:uppercase; font-size:.68rem; }
.cv-chip { display:flex; flex-direction:column; gap:1px; position:relative; font-size:.72rem; line-height:1.25; padding:3px 6px 3px 7px; border-radius:5px; text-decoration:none;
  color:#10233d; background:color-mix(in srgb, var(--cv) 16%, #fff); border-left:4px solid var(--cv); min-width:0; }
.cv-chip:hover, .cv-chip:focus-visible { background:color-mix(in srgb, var(--cv) 28%, #fff); outline:none; }
.cv-chip .cv-t { white-space:nowrap; overflow:hidden; text-overflow:ellipsis; font-weight:600; }
.cv-chip .cv-d { white-space:normal; color:#41546d; font-size:.68rem; }
.cv-tydzien .cv-chip .cv-t { white-space:normal; }
.cv-chip.is-past { background:#eef1f4; border-left-color:#b9c2cd; color:#7b8796; }
.cv-chip.is-past .cv-d { color:#8a95a3; }
.cv-chip.is-cancelled .cv-t { text-decoration:line-through; }
.cv-bang { position:absolute; top:-5px; right:-4px; width:15px; height:15px; border-radius:50%; background:var(--gate-red, #E0242F); color:#fff; font-size:.66rem; line-height:15px; text-align:center; font-weight:800; }
.cv-legend .cv-bang { position:static; display:inline-block; }
.cv-chip.is-past .cv-bang { filter:none; }
@media (max-width: 760px) {
  .cv-day { min-height:64px; padding:2px; }
  .cv-chip { font-size:.62rem; padding:2px 3px 2px 4px; border-left-width:3px; }
  .cv-miesiac .cv-chip .cv-t { white-space:normal; display:-webkit-box; -webkit-line-clamp:2; -webkit-box-orient:vertical; }
  .cv-tydzien.cv-grid { grid-template-columns:1fr; }
  .cv-tydzien .cv-hd { display:none; }
  .cv-tydzien .cv-day { min-height:0; }
}
