@font-face{font-family:"Plus Jakarta Sans";font-style:normal;font-weight:200 800;font-display:swap;src:url(jakarta-latin-ext-normal.38e3b8fd80.woff2) format("woff2");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,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:"Plus Jakarta Sans";font-style:italic;font-weight:200 800;font-display:swap;src:url(jakarta-latin-ext-italic.7524d4b5f8.woff2) format("woff2");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,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:"Plus Jakarta Sans";font-style:normal;font-weight:200 800;font-display:swap;src:url(jakarta-latin-normal.153fc85b70.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}
@font-face{font-family:"Plus Jakarta Sans";font-style:italic;font-weight:200 800;font-display:swap;src:url(jakarta-latin-italic.bb113d8f5b.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}
/* Prototype v2 — direction « Forêt doux » : menu latéral, cartes pastel 26px, pilules, Plus Jakarta Sans */
:root{
  --bg:#FFFFFF; --surface:#FFFFFF; --ink:#1B231E; --ink2:#586159; --ink3:#3C453F;
  --prim:#0C7A50; --prim-fg:#FFFFFF; --foret:#0C543C;
  --menthe:#E2F0E8; --sauge:#EAF0E1; --sable:#F4ECDF; --brume:#E5EEF0;
  --taupe:#786C54; --attention:#F7E3D3; --attention-fg:#8A4B16;
  --line:#E6EAE6; --line2:#F0F3F0; --bord:#D8DED8; --chip:#F4F6F4;
  --lv-exc:#0C543C; --lv-tb:#5FB98C; --lv-am:#D9A35E; --lv-at:#CF6A5F;
  --track:#EEF1EE; --shadow:0 1px 2px rgba(27,35,30,.06); --shadow-pop:0 14px 44px rgba(27,35,30,.18);
  --on-menthe:#0C543C; --on-sable:#5D4F33; --on-brume:#3E4B4E; --on-sauge:#3E4A39;
  --font:"Plus Jakarta Sans",-apple-system,"Segoe UI",system-ui,sans-serif;
}


*{box-sizing:border-box}
[hidden]{display:none !important}
html,body{height:100%}
body{margin:0; background:var(--bg); color:var(--ink); font-family:var(--font); font-size:14.5px;}
body::before{content:""; position:fixed; inset:0 0 auto; height:env(safe-area-inset-top,0px); z-index:60; background:var(--bg)}
h1,h2,h3{margin:0; text-wrap:balance; font-weight:800; letter-spacing:-.3px}
button,input,select,textarea{font:inherit; color:inherit}
a{color:var(--prim)}
:focus-visible{outline:2px solid var(--prim); outline-offset:2px; border-radius:8px}

/* ---------- coquille : sidebar + main ---------- */
.app{display:flex; min-height:100%}
.sidebar{width:242px; flex:0 0 242px; background:var(--surface); border-right:1px solid var(--line);
  padding:24px 16px 16px; padding-left:max(14px, env(safe-area-inset-left,0px));
  display:flex; flex-direction:column; gap:20px; position:sticky; top:0; height:100vh; height:100dvh; overflow-y:auto; z-index:45}
.side-brand{display:flex; align-items:center; gap:12px; padding:0 8px}
.side-brand img{width:56px; height:56px; object-fit:contain; background:#fff; border-radius:16px; padding:3px; flex:0 0 56px}
.side-toggle{margin-left:auto; flex:0 0 32px; width:32px; height:32px; border-radius:999px; border:1px solid var(--bord); background:var(--surface); color:var(--ink2); cursor:pointer; display:flex; align-items:center; justify-content:center}
.sidebar{transition:width .2s, flex-basis .2s}
.app.collapsed .sidebar{width:84px; flex-basis:84px; padding-left:12px; padding-right:12px}
.app.collapsed .side-brand{flex-direction:column; padding:0}
.app.collapsed .side-brand img{width:48px; height:48px; flex-basis:48px}
.app.collapsed .side-brand > div, .app.collapsed .nav-cap, .app.collapsed #theme-label{display:none}
.app.collapsed .side-toggle{margin:0}
.app.collapsed .side-toggle svg{transform:rotate(180deg)}
.app.collapsed .nav-it{font-size:0; justify-content:center; padding:12px 0; gap:0}
@media (max-width:940px){ .side-toggle{display:none} .app.collapsed .sidebar{width:242px; flex-basis:242px} }
.pic{display:inline-flex; align-items:center; justify-content:center; flex:0 0 auto; border-radius:16px; background:var(--chip); color:var(--ink3)}
.side-brand .t1{font-size:14px; font-weight:800; letter-spacing:-.2px; line-height:1.2}
.side-brand .t2{font-size:11px; color:var(--ink2)}
.nav-sec{display:flex; flex-direction:column; gap:3px}
.nav-cap{font-size:11px; font-weight:700; letter-spacing:1.2px; color:var(--ink2); padding:0 16px 8px; text-transform:uppercase}
.nav-it{display:flex; align-items:center; gap:12px; padding:8px 16px; border-radius:16px; color:var(--ink3);
  font-size:14px; font-weight:600; background:none; border:none; cursor:pointer; text-align:left; width:100%}
.nav-it svg{flex:0 0 18px}
.nav-it:hover{background:var(--chip)}
.nav-it.on{background:var(--menthe); color:var(--on-menthe); font-weight:700}
.side-foot{margin-top:auto; display:flex; flex-direction:column; gap:8px}
main{flex:1; min-width:0}
.main-in{max-width:1180px; margin:0 auto; padding:24px 32px 72px;
  padding-left:max(20px, env(safe-area-inset-left,0px)); padding-right:max(20px, env(safe-area-inset-right,0px))}

/* topbar mobile */
.mob-top{display:none; position:sticky; top:env(safe-area-inset-top,0px); z-index:50; background:var(--bg);
  border-bottom:1px solid var(--line); align-items:center; gap:8px; padding:8px 0;
  padding-left:max(16px, env(safe-area-inset-left,0px)); padding-right:max(16px, env(safe-area-inset-right,0px))}
.mob-top img{width:40px; height:40px; object-fit:contain; background:#fff; border-radius:8px; padding:2px}
.mob-top .ttl{font-weight:800; font-size:14px; flex:1; min-width:0; white-space:nowrap; overflow:hidden; text-overflow:ellipsis}
.icon-btn{width:40px; height:40px; border-radius:999px; border:1px solid var(--bord); background:var(--surface);
  display:flex; align-items:center; justify-content:center; cursor:pointer; color:var(--ink3); flex:0 0 40px}
.scrim{position:fixed; inset:0; background:rgba(13,23,19,.45); z-index:48}
@media (max-width:940px){
  .sidebar{position:fixed; left:0; top:0; bottom:0; height:auto; width:min(84vw, 300px); z-index:66; transform:translateX(-105%); transition:transform .22s; box-shadow:var(--shadow-pop);
    padding-top:calc(18px + env(safe-area-inset-top,0px)); padding-bottom:calc(18px + env(safe-area-inset-bottom,0px)); overscroll-behavior:contain}
  .scrim{z-index:64}
  .sidebar.open{transform:none}
  .mob-top{display:flex}
  .main-in{padding-top:16px}
}
@media (prefers-reduced-motion: reduce){ *{transition:none !important; animation:none !important} }

/* ---------- composants ---------- */
.card{background:var(--surface); border:1px solid var(--line2); border-radius:24px; box-shadow:var(--shadow); min-width:0}
.card.menthe,.card.sauge,.card.brume{border-color:transparent}
.card.menthe{background:var(--menthe)} .card.sauge{background:var(--sauge)}
 .card.brume{background:var(--brume)}
.card h2{font-size:16px}
.sub{color:var(--ink2); font-size:12px}
.kick{font-size:12px; letter-spacing:1.4px; font-weight:700; color:var(--prim); text-transform:uppercase}
.lead{color:var(--ink2); font-size:14px; margin:4px 0 0; max-width:64ch}
.grid{display:grid; gap:16px}
@media (min-width:860px){ .grid.c2{grid-template-columns:1fr 1fr} .grid.c2-13{grid-template-columns:1.4fr 1fr} .grid.c3{grid-template-columns:repeat(3,1fr)} }
.row{display:flex; gap:8px; flex-wrap:wrap; align-items:center}
.btn{height:44px; padding:0 20px; border:0; background:var(--prim); color:var(--prim-fg); cursor:pointer; display:inline-flex; align-items:center; gap:8px; white-space:nowrap}
.btn:hover{filter:brightness(1.07)}
.btn:disabled{opacity:.5; cursor:default}
.btn.sec{background:var(--surface); color:var(--ink); border:1px solid var(--bord)}
.btn.soft{background:var(--menthe); color:var(--on-menthe)}
.btn.sm{height:34px; padding:0 16px; font-size:12px}
.btn.danger{border:1px solid var(--bord); color:var(--lv-at); font-weight:600}
.pill{display:inline-flex; align-items:center; gap:8px; padding:4px 12px; white-space:nowrap}
.pill .dot{width:11px; height:11px; border-radius:999px; flex:0 0 11px}
.pill.chip{background:var(--chip); color:var(--ink3)}
.pill.warn{background:var(--attention); color:var(--attention-fg)}
.pill.ok{background:var(--menthe); color:var(--on-menthe)}
.pill.white{background:var(--surface); color:var(--ink3); box-shadow:var(--shadow)}
.field{display:flex; flex-direction:column; gap:4px; min-width:0}
.field label{font-size:12px; font-weight:700}
.field input,.field select,.field textarea{height:44px; border-radius:16px; border:1px solid var(--bord);
  background:var(--surface); padding:0 16px; font-size:14px; font-weight:600; width:100%}
.field textarea{height:auto; min-height:70px; padding:8px 16px; font-weight:600; resize:vertical}
.frow{display:flex; gap:8px; flex-wrap:wrap}
.frow .field{flex:1 1 120px}
.hint{font-size:12px; color:var(--ink2)}
table{width:100%; border-collapse:collapse}
th{font-size:11px; letter-spacing:1px; text-transform:uppercase; color:var(--ink2); font-weight:700; text-align:left; padding:8px 8px; border-bottom:1px solid var(--line)}
td{padding:8px 8px; font-size:13px; border-bottom:1px solid var(--line2); vertical-align:middle}
td.num,th.num{text-align:right; font-variant-numeric:tabular-nums}
.u{color:var(--ink2); font-size:11px; margin-left:3px; font-weight:600}
.table-wrap{overflow-x:auto; min-width:0}
.empty{border:1.5px dashed var(--bord); border-radius:24px; padding:24px 20px; text-align:center; color:var(--ink2); font-size:14px}
.empty b{color:var(--ink)}
.banner{background:var(--attention); color:var(--attention-fg); border-radius:16px; padding:8px 16px; font-size:13px; font-weight:600; margin-bottom:16px}
.toast{position:fixed; left:50%; transform:translateX(-50%) translateY(8px); bottom:calc(20px + env(safe-area-inset-bottom,0px));
  background:var(--ink); color:var(--bg); padding:12px 20px; border-radius:999px; font-weight:700; font-size:13px;
  opacity:0; transition:.25s; pointer-events:none; z-index:90}
.toast.on{opacity:1; transform:translateX(-50%)}
.avatar{border-radius:16px; background:var(--menthe); color:var(--on-menthe); display:flex; align-items:center; justify-content:center; font-weight:800; flex-shrink:0}
.seg2{display:inline-flex; background:var(--chip); border-radius:999px; padding:4px; gap:2px; flex-wrap:wrap}
.seg2 button{border:0; background:none; border-radius:999px; padding:8px 16px; font-weight:700; font-size:13px; color:var(--ink2); cursor:pointer}
.seg2 button.on{background:var(--surface); color:var(--ink); box-shadow:var(--shadow)}
.qbar{display:flex; flex-direction:column; gap:8px; padding:8px 0}
.qbar .top{display:flex; justify-content:space-between; font-size:14px}
.qbar .top .n{font-weight:600} .qbar .top .v{font-weight:800; font-variant-numeric:tabular-nums}
.qbar .track{height:12px; background:var(--track); border-radius:999px; overflow:hidden}
.qbar .fill{height:100%; border-radius:999px; background:var(--prim)}
.qbar .fill.hi{background:var(--foret)}
.qbar.off .top{color:var(--ink2)}
.kpi-grid{display:grid; gap:16px; grid-template-columns:repeat(auto-fit, minmax(170px,1fr))}
.kpi{border-radius:24px; padding:20px; display:flex; flex-direction:column; gap:8px; min-width:0}
.kpi .l{font-size:13px; font-weight:700; color:var(--ink3)}
.kpi .v{font-size:30px; font-weight:800; letter-spacing:-.8px; font-variant-numeric:tabular-nums}
.kpi .v .u{font-size:14px}
.kpi .d{align-self:flex-start; font-size:12px; font-weight:700; color:var(--on-menthe); background:var(--surface); padding:4px 8px; border-radius:999px}
.chart-box{position:relative; min-width:0}
.chart-box svg{width:100%; height:auto; display:block}
.tip{position:absolute; background:var(--surface); border:1px solid var(--line); border-radius:12px; padding:8px 12px;
  font-size:12px; pointer-events:none; white-space:nowrap; box-shadow:var(--shadow-pop); display:none; z-index:5}
.seg-mob{display:flex; flex-wrap:wrap; gap:4px}
.seg-mob button{border:1px solid var(--bord); background:var(--surface); border-radius:999px; padding:8px 12px; font-size:12px; font-weight:600; color:var(--ink2); cursor:pointer}
.seg-mob button.sel{border-color:transparent; color:#fff; font-weight:700}
.alerte{display:flex; align-items:center; gap:8px}

/* ---------- modales ---------- */
.overlay{position:fixed; inset:0; background:rgba(13,23,19,.5); z-index:70; display:flex; align-items:flex-start; justify-content:center; overflow-y:auto;
  padding:4vh max(16px, env(safe-area-inset-left,0px)) 6vh max(16px, env(safe-area-inset-right,0px))}
.modal{background:var(--bg); border-radius:24px; padding:24px; width:100%; max-width:640px; box-shadow:var(--shadow-pop); margin:auto 0}
.modal h2{font-size:19px; margin-bottom:4px}
.modal .x{float:right; margin:-6px -6px 0 8px}

/* ---------- frise des phases ---------- */
.tl-phase{position:absolute; top:7px; bottom:7px; padding:8px 12px; cursor:grab; user-select:none;
  -webkit-user-select:none; touch-action:none; justify-content:center; border:2px solid transparent}
.tl-phase.drag{cursor:grabbing; box-shadow:var(--shadow-pop); z-index:4; border-color:var(--prim)}
.tl-phase .pn{font-size:12px; font-weight:800; white-space:nowrap; overflow:hidden; text-overflow:ellipsis}
.tl-phase .pf{font-weight:600; opacity:.8; white-space:nowrap; overflow:hidden; text-overflow:ellipsis}


/* ---------- séances ---------- */
.grip{cursor:grab; color:var(--ink2); border:none; background:none; padding:4px; touch-action:none}

/* ---------- bilan (feuille) ---------- */
.sheet{background:var(--surface); border-radius:24px; overflow:hidden; box-shadow:var(--shadow)}
.sheet h3{font-size:14px; padding-bottom:8px; border-bottom:1px solid var(--line); margin-bottom:8px}
.reco{list-style:none; margin:0; padding:0}
.reco li{padding:8px 0 8px 24px; position:relative; font-size:13px; border-bottom:1px solid var(--line2); line-height:1.5}
.reco li::before{content:"→"; position:absolute; left:0; color:var(--prim); font-weight:800}
/* ---------- zones d'entraînement (palette Forêt doux, du calme au très intense) ---------- */
:root{
  --z1:#9DBFC8; --z1-bg:#EAF2F4; --z2:#7DBF98; --z2-bg:#E6F3EB; --z3:#D4BD72; --z3-bg:#F7F1DE;
  --z4:#D9A35E; --z4-bg:#F8EDDD; --z5:#CF6A5F; --z5-bg:#F7E3DF; --z6:#0C543C; --z6-bg:#DDEBE4;
}


.zs-head{display:flex; justify-content:space-between; align-items:center; gap:16px; padding-bottom:16px; margin-bottom:16px; border-bottom:2px solid var(--line)}
.zs-dom{display:grid; grid-template-columns:repeat(3,1fr); gap:8px; margin-bottom:16px}
.zs-dom > div{border-radius:16px; padding:8px 12px; display:flex; flex-direction:column; gap:2px; color:var(--ink)}
.zs-dom b{font-size:13px} .zs-dom span{font-size:12px; font-weight:700} .zs-dom em{font-size:11px; color:var(--ink2); font-style:normal}
.zs-spec{display:flex; height:30px; border-radius:999px; overflow:hidden; gap:2px}
.zs-seg{display:flex; align-items:center; justify-content:center; min-width:28px}
.zs-seg b{font-size:11px; color:#fff; letter-spacing:.5px; text-shadow:0 1px 2px rgba(0,0,0,.25)}
.zs-marks{position:relative; height:42px; margin-bottom:8px}
.zs-mark{position:absolute; top:4px; transform:translateX(-50%); font-size:11px; font-weight:800; color:var(--ink); white-space:nowrap; background:var(--surface); border:1px solid var(--line); border-radius:999px; padding:3px 8px}
.zs-mark i{position:absolute; left:50%; top:-8px; width:2px; height:8px; background:var(--ink)}
.zs-mark em, .zs-v em{font-style:normal; color:var(--ink2); font-weight:600; font-size:11px}
.zs-grid{display:grid; gap:8px; grid-template-columns:repeat(auto-fit, minmax(150px, 1fr))}
.zs-card{border-radius:16px; overflow:hidden; display:flex; flex-direction:column; color:var(--ink); min-width:0}
.zs-card.zs-key{box-shadow:0 0 0 2.5px var(--ink)}
.zs-top{padding:8px 12px; display:flex; flex-direction:column; color:#fff}
.zs-top .zid{font-size:19px; font-weight:800; letter-spacing:-.3px; text-shadow:0 1px 2px rgba(0,0,0,.2)}
.zs-top .znm{font-size:12px; font-weight:700; opacity:.95}
.zs-body{padding:8px 12px 12px; display:flex; flex-direction:column; gap:3px}
.zs-l{font-size:11px; font-weight:800; letter-spacing:.8px; text-transform:uppercase; color:var(--ink2); margin-top:8px}
.zs-v{font-size:14px; font-weight:800; font-variant-numeric:tabular-nums}
.zs-v.sm{font-size:13px}
.zs-s{font-size:12px; font-weight:600; color:var(--ink3)}
.zs-subs{display:flex; flex-direction:column; gap:1px; font-size:11px; color:var(--ink3); margin-top:2px}
.zs-desc{font-size:11px; font-style:italic; color:var(--ink3); margin-top:8px; line-height:1.4}
.zs-met{margin:2px 0 0; padding-left:16px; font-size:11px; line-height:1.5}
.rpe-dots{display:flex; gap:3px; margin-top:3px}
.rpe-dots i{width:9px; height:9px; border-radius:999px; background:var(--track)}
.rpe-dots i.on{background:var(--ink)}

/* ---------- bilan : tuiles de tests ---------- */
.bt-tile{display:flex; gap:8px; align-items:center; text-align:left; border:1.5px solid var(--line); background:var(--surface); border-radius:16px; padding:8px 12px; cursor:pointer; color:var(--ink); min-width:0}
.bt-tile:hover{border-color:var(--prim)}
.bt-tile.on{border-color:var(--prim); background:var(--menthe)}
.bt-row{display:flex; gap:16px; align-items:flex-end; flex-wrap:wrap; padding:12px 0; border-bottom:1px solid var(--line2)}
.bt-row .frow .field input{height:40px}

/* ---------- Rapport de bilan : pages A4 (794 × 1123 px), fond blanc ----------
   Même système que l'app (docs/04-design.md) : polices 11·12·13·14·16·19·22·24·28·30, espacements multiples de 4,
   arrondis 4·8·12·16·24, cartes blanches bordées, couleur en petites touches, jetons de couleur uniquement.
   Hiérarchie A4 : nom 30 · rubrique 22 · titre de carte 19 · texte 13–14 · étiquettes en capitales 11 / 800 / 0,08 em. */
.rp-preview{display:flex; flex-direction:column; gap:16px; align-items:center; max-height:70vh; overflow:auto; background:var(--chip); border-radius:var(--r-lg, 16px); padding:16px}
.rp-preview .rp-page{zoom:.62; flex:0 0 auto; box-shadow:var(--sh-hover)}
.rp-page{width:794px; height:1123px; box-sizing:border-box; padding:56px 48px; position:relative; overflow:hidden; background:var(--surface); color:var(--ink); font-family:var(--font); font-size:13px; line-height:1.5}
.rp-blk{margin-bottom:12px; display:flow-root}
.rp-blk > :last-child{margin-bottom:0}
/* en-tête courant et pied de page (dans les marges de 56 px) */
.rp-run, .rp-foot{position:absolute; left:48px; right:48px; display:flex; justify-content:space-between; align-items:center; gap:16px; font-size:11px; font-weight:800; letter-spacing:.08em; text-transform:uppercase; color:var(--ink2); line-height:1.2}
.rp-run{top:24px}
.rp-run > span{display:inline-flex; align-items:center}
.rp-foot{bottom:20px; padding-top:8px; border-top:1px solid var(--line); font-weight:700; letter-spacing:.04em}
.rp-foot span:last-child{font-variant-numeric:tabular-nums}
/* en-tête du rapport : carte blanche, logo à droite */
.rp-hero{display:flex; justify-content:space-between; align-items:center; gap:16px; background:var(--surface); border:1px solid var(--line); border-radius:var(--r-xl, 24px); padding:16px 24px; margin-bottom:12px}
.rp-kick{font-size:11px; letter-spacing:.08em; font-weight:800; color:var(--prim); text-transform:uppercase; line-height:1.2}
.rp-title{font-size:30px; font-weight:800; letter-spacing:-.9px; color:var(--ink); line-height:1.2; margin-top:8px}
.rp-sub{font-size:14px; color:var(--ink2); font-weight:600; margin-top:4px}
/* titres */
.rp-sect{font-size:22px; font-weight:800; letter-spacing:-.4px; color:var(--ink); line-height:1.2; margin:0 0 12px}
.rp-h{font-size:19px; font-weight:800; letter-spacing:-.3px; color:var(--ink); line-height:1.2; margin-bottom:12px}
.rp-h em{font-style:normal; font-size:11px; color:var(--ink2); font-weight:700}
/* cartes */
.rp-box{border:1px solid var(--line); border-radius:var(--r-lg, 16px); padding:16px; background:var(--surface); margin-bottom:12px}
.rp-note{font-size:12px; color:var(--ink2); margin-top:8px; line-height:1.5}
.rp-p{white-space:pre-line; margin:0; font-size:14px; line-height:1.5; color:var(--ink)}
/* légende des graphiques : pastille de la couleur de la série + libellé, passe à la ligne au besoin */
.rp-legend{display:flex; flex-wrap:wrap; gap:4px 16px; margin-top:8px; font-size:12px; color:var(--ink2); line-height:1.4}
.rp-legend span{display:inline-flex; align-items:center; gap:8px}
.rp-legend i{width:12px; height:4px; border-radius:999px; flex:0 0 auto}
.rp-legend b{color:var(--ink); font-weight:700}
/* résultats clés */
.rp-kgrid{display:grid; grid-template-columns:repeat(4, minmax(0,1fr)); gap:12px}
.rp-kpi{border:1px solid var(--line); border-radius:var(--r-lg, 16px); padding:16px; background:var(--surface); display:flex; flex-direction:column; gap:4px}
.rp-kpi .l{font-size:11px; font-weight:800; color:var(--ink2); letter-spacing:.08em; text-transform:uppercase; line-height:1.2}
.rp-kpi .v{font-size:28px; font-weight:800; letter-spacing:-.6px; line-height:1.2; font-variant-numeric:tabular-nums}
.rp-kpi-v{display:flex; align-items:baseline; flex-wrap:wrap; gap:4px}
.rp-kpi .u{font-size:13px; color:var(--ink2); font-weight:700}
.rp-kpi .s{font-size:12px; color:var(--foret); font-weight:700}
/* chiffres du suivi */
.rp-kpis{display:grid; grid-template-columns:repeat(3, minmax(0,1fr)); gap:12px; margin-bottom:12px}
.rp-kpi2{border:1px solid var(--line); border-radius:var(--r-lg, 16px); padding:12px 16px; background:var(--surface); display:flex; flex-direction:column; gap:4px}
.rp-kpi2 .l{font-size:11px; font-weight:800; color:var(--ink2); text-transform:uppercase; letter-spacing:.08em; line-height:1.2}
.rp-kpi2 .v{font-size:24px; font-weight:800; color:var(--foret); letter-spacing:-.5px; line-height:1.2; font-variant-numeric:tabular-nums}
.rp-kpi2 .s{font-size:12px; color:var(--ink2)}
.rp-2col{display:grid; grid-template-columns:minmax(0,3fr) minmax(0,2fr); gap:12px; margin-bottom:12px}
.rp-2col .rp-box{margin-bottom:0}
/* barres horizontales (profil, répartition) : l'étiquette passe à la ligne, jamais coupée */
.rp-bars{display:flex; flex-direction:column; gap:8px}
.rp-bar{display:grid; grid-template-columns:112px minmax(0,1fr) 32px; gap:12px; align-items:center; font-size:13px; line-height:1.2}
.rp-bar > span:first-child{font-weight:600; color:var(--ink)}
.rp-bar .tr{height:8px; border-radius:999px; background:var(--track); overflow:hidden}
.rp-bar .tr i{display:block; height:100%; border-radius:999px; background:var(--prim)}
.rp-bar b{text-align:right; font-variant-numeric:tabular-nums}
/* zones : seuils + tableau (couleurs des zones = jetons --z1…--z6) */
.rp-seuils{display:grid; grid-template-columns:repeat(3, minmax(0,1fr)); gap:12px; margin-bottom:12px}
.rp-seuil{border:1px solid var(--line); border-radius:var(--r-lg, 16px); padding:12px 16px; background:var(--surface); display:flex; flex-direction:column; gap:4px}
.rp-seuil .l{font-size:11px; font-weight:800; letter-spacing:.08em; text-transform:uppercase; color:var(--ink2); line-height:1.2}
.rp-seuil .l em{font-style:normal; text-transform:none; letter-spacing:0; font-weight:700; color:var(--attention-fg); background:var(--attention); border-radius:999px; padding:0 8px; margin-left:4px}
.rp-seuil .big{font-size:24px; font-weight:800; letter-spacing:-.5px; color:var(--foret); line-height:1.2; font-variant-numeric:tabular-nums}
.rp-seuil .u{font-size:12px; color:var(--ink2); font-weight:600}
.rp-seuils.fam-velo .rp-seuil{border-top:4px solid var(--sauge)}
.rp-seuils.fam-course .rp-seuil{border-top:4px solid var(--brume)}
.rp-z{width:100%; border-collapse:separate; border-spacing:4px; table-layout:fixed; margin:0 -4px; width:calc(100% + 8px)}
.rp-z th{color:var(--ink); font-size:13px; font-weight:800; text-align:center; padding:8px 4px; border-radius:8px 8px 4px 4px; line-height:1.2}
.rp-z th[style*="--z6)"], .rp-z th[style*="--z5)"]{color:var(--surface)}
.rp-z th:first-child{background:var(--line2); color:var(--ink2); width:88px; text-align:left; padding-left:8px}
.rp-z td{font-size:12px; padding:8px 4px; text-align:center; border-radius:4px; color:var(--ink); vertical-align:middle; border:0; line-height:1.4}
.rp-z td:first-child{background:var(--line2); font-weight:800; color:var(--ink2); font-size:11px; letter-spacing:.04em; text-transform:uppercase; text-align:left; padding-left:8px}
.rp-z td.desc{font-size:11px; color:var(--ink3); line-height:1.4}
.rp-z .subz{font-size:11px; font-weight:600; opacity:.9; margin-top:4px}
/* détail des tests */
.rp-tests{display:grid; grid-template-columns:repeat(2, minmax(0,1fr)); gap:12px}
.rp-test{display:flex; gap:12px; align-items:center; border:1px solid var(--line); border-radius:var(--r-lg, 16px); padding:12px 16px; background:var(--surface)}
.rp-test-b{min-width:0; flex:1; display:flex; flex-direction:column; gap:4px}
.rp-test .n{font-size:13px; font-weight:800; color:var(--ink3); line-height:1.2}
.rp-test .v{font-size:24px; font-weight:800; letter-spacing:-.5px; color:var(--foret); line-height:1.2; font-variant-numeric:tabular-nums}
.rp-test .v span{font-size:12px; font-weight:700; color:var(--ink2); margin-left:4px; letter-spacing:0}
.rp-test .m{font-size:12px; color:var(--ink2)}
.rp-test .m .up{color:var(--prim)} .rp-test .m .down{color:var(--lv-at)}
/* suivi dans la fiche (même HTML que le rapport, aux couleurs de l'app) */
.rp-scope .rp-box{border-color:var(--line); background:var(--surface); color:var(--ink)}
.rp-scope .rp-h{color:var(--ink)} .rp-scope .rp-note, .rp-scope .rp-kpi2 .l, .rp-scope .rp-kpi2 .s{color:var(--ink2)}
.rp-scope .rp-kpi2 .v{color:var(--on-menthe)}
@media (max-width:700px){ .rp-kpis, .rp-2col{grid-template-columns:minmax(0,1fr)} .zs-dom{grid-template-columns:1fr} }
/* ---------- immersion athlète : onglets façon classeur ---------- */
.ftabs{display:flex; gap:8px; overflow-x:auto; scrollbar-width:none; padding:4px; background:var(--chip); border-radius:999px}
.ftabs::-webkit-scrollbar{display:none}
.ftabs button{flex:0 0 auto; border:0; background:none; border-radius:999px; padding:8px 16px; font-weight:700; font-size:13px; color:var(--ink2); cursor:pointer; white-space:nowrap}
.ftabs button:hover{color:var(--ink)}
.ftabs button.on{background:var(--surface); color:var(--on-menthe); box-shadow:var(--shadow)}
.mx-table td, .mx-table th{white-space:nowrap}
.mx-table td.cell{text-align:center}
.del-x{font-size:13px; padding:4px 8px; border-radius:8px}
.del-x:hover{background:var(--attention); color:var(--attention-fg)}
.del-x[data-arm="1"]{background:var(--lv-at); color:#fff}
.inline-form{background:var(--chip); border-radius:16px; padding:16px 16px}
.inline-form .field input,.inline-form .field select{background:var(--surface)}
.stat-strip{display:grid; gap:8px; grid-template-columns:repeat(auto-fit, minmax(140px,1fr))}
.stat{background:var(--chip); border-radius:16px; padding:12px 16px; min-width:0}
.stat .l{font-size:11px; font-weight:700; color:var(--ink2)}
.stat .v{font-size:22px; font-weight:800; letter-spacing:-.4px; font-variant-numeric:tabular-nums}
.stat .s{font-size:11px; color:var(--ink2)}

/* ---------- périodisation ---------- */
/* (ancienne frise de périodisation retirée en v20 : voir 25-programmation.css) */
.wt-charge{background:var(--prim)} .wt-choc{background:var(--lv-at)} .wt-decharge{background:var(--lv-tb)}
.wt-test{background:var(--taupe)} .wt-compet{background:var(--lv-am)} .wt-transition{background:var(--bord)}
.legend-dot{display:inline-block; width:11px; height:11px; border-radius:4px; vertical-align:-1px; margin-right:4px}

/* ---------- mes athlètes (cartes épurées) ---------- */
.ath-tools input{height:42px; border-radius:999px; border:1px solid var(--bord); background:var(--surface); padding:0 16px; font-weight:600; min-width:0; flex:1 1 200px; max-width:340px}

/* ---------- protocoles ---------- */
.proto-grid input{height:36px; border-radius:8px; border:1px solid var(--bord); background:var(--surface); padding:0 8px; width:84px; font-weight:600; font-variant-numeric:tabular-nums}
.res-big{font-size:28px; font-weight:800; letter-spacing:-.6px; font-variant-numeric:tabular-nums}

/* ---------- cartographie du corps (silhouette interactive) ---------- */
.body-grid{display:grid; gap:16px; align-items:start}
@media (min-width:941px){ .body-grid{grid-template-columns:minmax(300px, 420px) 1fr} }
.body-svg-wrap{display:flex; justify-content:center; padding:8px 0}
.body-svg-wrap svg{width:100%; max-width:320px; height:auto}
.bz{cursor:pointer; transition:transform .2s; transform-box:fill-box; transform-origin:center}
.bz .shape{stroke:var(--surface); stroke-width:2.5; transition:filter .2s, stroke .2s}
.bz:hover{transform:scale(1.025)}
.bz:hover .shape{filter:brightness(1.04) drop-shadow(0 0 6px var(--prim))}
.bz:focus-visible{outline:none}
.bz:focus-visible .shape, .bz.sel .shape{stroke:var(--prim); stroke-width:3; filter:drop-shadow(0 0 10px var(--prim))}
.bz.sel{animation:selpulse 2.4s ease-in-out infinite}
@keyframes selpulse{0%,100%{opacity:1} 50%{opacity:.86}}
.bz.st-ok .shape{fill:url(#g-ok)}
.bz.st-watch .shape{fill:url(#g-watch)}
.bz.st-work .shape{fill:url(#g-work)}
.bz.st-none .shape{fill:url(#g-none)}
.bz-badge circle{stroke:var(--surface); stroke-width:2.5}
.avatar-stage{position:relative; width:100%; max-width:340px; margin:0 auto; display:flex; flex-direction:column; align-items:center; gap:8px;
  background:radial-gradient(120% 70% at 50% 40%, var(--menthe) 0%, transparent 62%); border-radius:24px; padding:16px 8px 12px}
.avatar-stage svg{width:100%; max-width:300px; height:auto; overflow:visible}
.avatar-body{animation:breathe 5s ease-in-out infinite; transform-origin:150px 560px}
@keyframes breathe{0%,100%{transform:scale(1)} 50%{transform:scale(1.008)}}
.avatar-ring{animation:ringspin 14s linear infinite}
@keyframes ringspin{to{stroke-dashoffset:-150}}
.avatar-scan{animation:scan 5.5s cubic-bezier(.45,0,.55,1) infinite}
@keyframes scan{0%{transform:translateY(0)} 70%,100%{transform:translateY(700px)}}
.avatar-hud{position:absolute; top:12px; left:12px; display:flex; flex-direction:column; gap:2px; z-index:2}
.avatar-hud .lvl{display:inline-flex; align-items:baseline; gap:4px; background:var(--surface); border-radius:16px; padding:8px 12px; font-size:24px; font-weight:800; letter-spacing:-.5px; box-shadow:var(--shadow-pop); color:var(--ink)}
.avatar-hud .lvl span{font-size:11px; font-weight:800; color:var(--prim); text-transform:uppercase; letter-spacing:1px}
.avatar-hud .lvl .lvl-max{font-size:12px; font-weight:700; color:var(--ink2); letter-spacing:0}
.avatar-hud .lvl-word{font-size:11px; font-weight:700; color:var(--ink2); padding-left:4px}
.avatar-stats{width:100%; display:flex; flex-direction:column; gap:4px; padding:0 8px}
.stat-bar{display:grid; grid-template-columns:44px 1fr 30px; gap:8px; align-items:center; border:0; background:none; padding:2px 0; cursor:pointer; color:var(--ink); font:inherit}
.stat-bar .ab{font-size:11px; font-weight:800; letter-spacing:1px; color:var(--ink2); text-align:left}
.stat-bar .tr{height:8px; border-radius:999px; background:var(--track); overflow:hidden}
.stat-bar .tr i{display:block; height:100%; border-radius:999px; background:linear-gradient(90deg, var(--foret), var(--prim)); transition:width .6s}
.stat-bar .nb{font-size:12px; font-weight:800; text-align:right; font-variant-numeric:tabular-nums}
.stat-bar:hover .ab{color:var(--prim)}
@media (prefers-reduced-motion: reduce){ .avatar-body,.avatar-ring,.avatar-scan,.bz.sel{animation:none} .avatar-scan{display:none} }
.bz .organ-lung{fill:var(--brume)}


.badge-ok{fill:var(--lv-tb)} .badge-watch{fill:var(--lv-am)} .badge-work{fill:var(--lv-at)} .badge-none{fill:var(--ink2)}
.badge-txt{fill:#fff; font-size:11px; font-weight:800}
@keyframes heartbeat{0%,100%{transform:scale(1)} 12%{transform:scale(1.14)} 24%{transform:scale(1)} 36%{transform:scale(1.1)} 48%{transform:scale(1)}}
.heart-anim{animation:heartbeat 1.6s ease-in-out infinite; transform-origin:center; transform-box:fill-box}
@media (prefers-reduced-motion: reduce){ .heart-anim{animation:none} }
.body-panel{min-width:0}
.bp-row{display:flex; align-items:center; justify-content:space-between; gap:8px; padding:12px 16px; background:var(--chip); border-radius:16px; margin-bottom:8px; flex-wrap:wrap}
.bp-row .nm{font-size:13px; font-weight:700; min-width:0}
.bp-row .vals{display:flex; align-items:center; gap:12px; flex-wrap:wrap}
.bp-row .cur{font-size:19px; font-weight:800; font-variant-numeric:tabular-nums}
.bp-row .trend{font-size:12px; font-weight:700; padding:3px 8px; border-radius:999px}
.trend.up{background:var(--menthe); color:var(--on-menthe)}
.trend.down{background:var(--attention); color:var(--attention-fg)}
.trend.flat{background:var(--chip); color:var(--ink2)}
.bp-row .rec{font-size:11px; color:var(--ink2); white-space:nowrap}
.bp-empty-row{display:flex; align-items:center; justify-content:space-between; gap:8px; padding:8px 16px; border:1.5px dashed var(--bord); border-radius:16px; margin-bottom:8px; color:var(--ink2); font-size:13px}
@media (max-width:940px){
  .body-panel{position:fixed; left:0; right:0; bottom:0; z-index:55; background:var(--bg);
    border-radius:24px 24px 0 0; box-shadow:var(--shadow-pop); max-height:72vh; overflow-y:auto;
    padding:16px; padding-left:max(18px, env(safe-area-inset-left,0px)); padding-right:max(18px, env(safe-area-inset-right,0px));
    padding-bottom:calc(18px + env(safe-area-inset-bottom,0px));
    transform:translateY(105%); transition:transform .25s}
  .body-panel.open{transform:none}
}
@media print{
  .sidebar,.mob-top,.toast,.no-print{display:none !important}
  body{background:#fff; color:#1B231E}
  .main-in{padding:0; max-width:none}
  .view{display:none !important}
  #view-bilans{display:block !important}
  .sheet{border-radius:0; box-shadow:none}
}
/* ---------- v8 : thème clair uniquement, barre d'athlète, tête de fiche ---------- */
html{scrollbar-gutter:stable}
.side-brand{cursor:pointer}
.ath-bar{display:inline-flex; align-items:center; gap:8px; background:var(--chip); border-radius:999px; padding:4px 8px 4px 16px; font-weight:700; font-size:12px; color:var(--ink2); white-space:nowrap}
.ath-bar select{height:36px; border-radius:999px; border:1px solid var(--bord); background:var(--surface); padding:0 12px; font-weight:700; color:var(--ink); min-width:170px}
.fiche-head{padding:8px 0 12px; display:flex; flex-direction:column; gap:12px}
.ftabs-wrap{position:sticky; top:env(safe-area-inset-top,0px); z-index:30; padding:8px 0}
.fiche-head > .pill{align-self:flex-start}
.fh-main{display:flex; align-items:center; gap:16px; flex-wrap:wrap}
.fh-actions{margin-left:auto}
.fh-main > div:not(.avatar):not(.fh-actions){flex:1 1 220px}

.ftabs{flex-wrap:wrap; border-radius:16px; overflow:visible}
@media (max-width:940px){ .ftabs-wrap{top:calc(env(safe-area-inset-top,0px) + 60px)} .ftabs{flex-wrap:nowrap; overflow-x:auto} }
[data-mdetail]{cursor:pointer}
[data-mdetail]:hover{background:var(--menthe)}
/* ---------- vue d'ensemble : où on en est + objectif ---------- */
.wk{flex:1; min-width:0; height:100%; border:0; padding:0; display:flex; flex-direction:column; justify-content:flex-end; align-items:stretch; gap:4px; cursor:pointer}


.wk{background:none}
.ov-note{font-size:13px; margin-top:8px; color:var(--ink3)}
.ov-todo{list-style:none; margin:8px 0 0; padding:0; display:flex; flex-direction:column; gap:4px; font-size:13px}
.ov-todo li{display:flex; align-items:center; gap:8px}
.ov-todo .dia{width:9px; height:9px; border-radius:2px; transform:rotate(45deg); flex:0 0 9px}


/* ---------- mes athlètes : liste ---------- */
.ath-list{display:flex; flex-direction:column; gap:8px}
.ath-row{display:grid; grid-template-columns:minmax(200px,1.1fr) 1.2fr 1.2fr 1fr; gap:16px; align-items:center; text-align:left; background:var(--surface); border:1px solid var(--line2); border-radius:24px; padding:16px 16px; cursor:pointer; color:var(--ink); box-shadow:var(--shadow); transition:transform .15s, box-shadow .15s}
.ath-row:hover{transform:translateY(-1px); box-shadow:var(--shadow-pop)}
.ar-id{display:flex; gap:12px; align-items:center; min-width:0}
.ar-id .nm{font-size:16px; font-weight:800}
.ar-col{min-width:0; display:flex; flex-direction:column; gap:4px}
.ar-lab{font-size:11px; font-weight:800; letter-spacing:.8px; text-transform:uppercase; color:var(--ink2)}
.ar-val{font-size:13px; font-weight:700; white-space:nowrap; overflow:hidden; text-overflow:ellipsis}
.ar-bar{height:7px; border-radius:999px; background:var(--track); overflow:hidden} .ar-bar i{display:block; height:100%; border-radius:999px}
@media (max-width:900px){ .ath-row{grid-template-columns:1fr 1fr} .ar-id{grid-column:1 / -1} }
@media (max-width:560px){ .ath-row{grid-template-columns:1fr} }
/* ---------- profil ---------- */
.pf-sec{background:var(--surface); border:1px solid var(--line2); border-radius:16px; margin-bottom:8px; overflow:hidden}
.pf-sec > summary{list-style:none; cursor:pointer; padding:16px 16px; display:flex; justify-content:space-between; align-items:center; gap:8px}
.pf-sec > summary::-webkit-details-marker{display:none}
.pf-sec > summary::after{content:"+"; font-weight:800; color:var(--prim); font-size:19px}
.pf-sec[open] > summary::after{content:"−"}
.pf-count{margin-left:auto; font-size:12px; font-weight:800; color:var(--ink2); background:var(--chip); border-radius:999px; padding:3px 8px}
.pf-note{margin:0 16px 8px; font-size:12px; color:var(--attention-fg); background:var(--attention); border-radius:12px; padding:8px 12px}
.pf-grid{display:grid; grid-template-columns:repeat(auto-fill, minmax(min(100%, 220px), 1fr)); gap:8px 12px; padding:0 16px 16px}
.pf-wide{grid-column:1 / -1}
.pf-matrix{display:flex; flex-direction:column; gap:8px}
.pf-mrow{display:flex; justify-content:space-between; gap:8px; align-items:center; font-size:13px; flex-wrap:wrap; background:var(--chip); border-radius:12px; padding:8px 8px}
.pf-save{position:sticky; bottom:calc(14px + env(safe-area-inset-bottom,0px)); display:flex; justify-content:space-between; align-items:center; gap:8px; background:var(--ink); color:var(--bg); border-radius:999px; padding:8px 8px 8px 16px; font-weight:700; font-size:13px; box-shadow:var(--shadow-pop); z-index:20}
.in-list{margin-top:12px; display:flex; flex-direction:column; gap:8px; max-height:360px; overflow:auto}
.in-item{background:var(--chip); border-radius:16px; padding:8px 12px; font-size:13px}
.in-h{display:flex; gap:8px; align-items:center; margin-bottom:4px} .in-h .del-x{margin-left:auto}

/* ---------- générateur / sélecteur d'exercices ---------- */
.pic svg{display:block}
.pic-heart{color:#D24B43; background:#FBE9E7}
.xp-search{width:100%; height:52px; border-radius:16px; border:1.5px solid var(--bord); background:var(--surface); padding:0 16px; font-size:16px; font-weight:600; margin-top:12px}
.xp-search:focus{border-color:var(--prim); outline:none}
.xp-grid{display:grid; grid-template-columns:repeat(auto-fill, minmax(140px, 1fr)); gap:8px; margin-top:16px; max-height:56vh; overflow:auto; padding:2px}
.xp-tile{display:flex; flex-direction:column; align-items:center; gap:8px; border:1.5px solid var(--line); background:var(--surface); border-radius:16px; padding:12px 8px; cursor:pointer; text-align:center; color:var(--ink)}
.xp-tile:hover{border-color:var(--prim); background:var(--menthe)}
.xp-tile b{font-size:12px; line-height:1.2} .xp-tile span{font-size:11px; color:var(--ink2)}
.xp-tile.picked{border-color:var(--prim); background:var(--menthe)}
.xp-new{border-style:dashed}
.xm-top{display:flex; gap:16px; align-items:center}
.xm-prev{display:flex; flex-direction:column; align-items:center; gap:4px; flex:0 0 auto}
.exo-pick{display:flex; align-items:center; gap:12px; border:1.5px dashed var(--bord); background:var(--surface); border-radius:16px; padding:8px 16px 8px 8px; cursor:pointer; text-align:left; color:var(--ink); width:100%}
.exo-pick:hover{border-color:var(--prim)}
/* ---------- créateur de séance ---------- */
.sea-head{display:flex; gap:12px; flex-wrap:wrap; align-items:flex-end}
.sea-block{background:var(--surface); border:1px solid var(--line2); border-radius:24px; padding:16px; margin-bottom:12px; box-shadow:var(--shadow)}
.sb-h{display:flex; gap:8px; align-items:center; flex-wrap:wrap; margin-bottom:8px}
.sb-name{font-size:16px; font-weight:800; border:0; background:none; padding:4px 8px; border-radius:8px; min-width:0; width:180px}
.sb-format{flex:1 1 220px; border:1px solid var(--line); background:var(--chip); border-radius:999px; height:34px; padding:0 16px; font-size:13px; font-weight:600}
.sb-name:hover, .sb-name:focus{background:var(--chip)}
.sb-items{display:flex; flex-direction:column; gap:8px}
.sea-ex{display:flex; gap:12px; align-items:center; background:var(--chip); border-radius:16px; padding:8px 12px}
.sea-ex.dragover{outline:2px dashed var(--prim)}
.sea-ex .grip{cursor:grab; color:var(--ink2); font-weight:800; letter-spacing:-2px}
.se-main{flex:1; min-width:0}
.se-main input{background:var(--surface)}
.sb-add{border:1.5px dashed var(--bord); background:none; border-radius:16px; padding:12px; font-weight:700; color:var(--prim); cursor:pointer}
.sb-add:hover{background:var(--menthe)}
.sea-bar{position:sticky; bottom:calc(12px + env(safe-area-inset-bottom,0px)); z-index:20; display:flex; justify-content:space-between; align-items:center; gap:8px; flex-wrap:wrap; background:var(--surface); border:1px solid var(--line); border-radius:999px; padding:8px 8px 8px 16px; box-shadow:var(--shadow-pop)}
.saved-row{display:flex; justify-content:space-between; align-items:center; gap:8px; padding:8px 0; border-bottom:1px solid var(--line2); flex-wrap:wrap}
.ps-ex{display:flex; gap:12px; align-items:center; padding:8px 0; border-bottom:1px solid var(--line2)}
.ps-ex:last-child{border-bottom:0}
.ps-ex .pic{background:var(--chip); color:#3C453F}
.ps-proto{display:inline-block; margin-left:8px; font-size:11px; font-weight:800; color:#0C543C; background:#E2F0E8; border-radius:999px; padding:2px 8px}
.ps-prog{font-size:11px; color:#586159; margin-top:3px}
.ps-vid{font-size:11px; font-weight:800; color:#0C7A50; text-decoration:none; white-space:nowrap}
/* ---------- rapport v2 : logo, focus du cycle (pastilles), aperçu modifiable, tableau des % ---------- */
.rp-logo-box{width:64px; flex:0 0 64px; background:var(--surface); border-radius:var(--r-lg, 16px); padding:8px}
.rp-logo-box img{display:block; width:100%; height:auto}
.rp-run-logo{width:16px; height:auto; margin-right:8px}
/* focus : trois cartes blanches identiques, la couleur vient des pastilles (mêmes couleurs que la fiche) */
.rp-focus{display:grid; grid-template-columns:repeat(3, minmax(0,1fr)); gap:12px}
.rp-focus > div{border:1px solid var(--line); border-radius:var(--r-lg, 16px); padding:12px 16px; background:var(--surface); display:flex; flex-direction:column; align-items:flex-start; gap:8px}
.rp-focus span{font-size:11px; font-weight:800; letter-spacing:.08em; text-transform:uppercase; color:var(--ink2); line-height:1.2}
.rp-focus b{font-size:19px; font-weight:800; letter-spacing:-.3px; line-height:1.2}
.rp-focus em{font-style:normal; font-size:12px; color:var(--ink2); font-weight:600; margin-top:-4px}
.rp-focus .rp-pill{display:inline-flex; align-items:center; font-size:14px; font-weight:800; letter-spacing:0; padding:4px 12px; border-radius:999px; line-height:1.4}
.rp-focus .rp-pill.empty{background:transparent; border:1.5px dashed var(--bord); color:var(--ink2)}
/* tableau des % (onglet Zones de la fiche) */
.pct-box{margin-top:16px; background:var(--chip); border-radius:var(--r-lg, 16px); padding:12px 16px}
.pct-grid{display:grid; grid-template-columns:repeat(auto-fill, minmax(72px, 1fr)); gap:8px}
.pct-c{background:var(--surface); border-radius:var(--r-md, 12px); padding:8px; display:flex; flex-direction:column; align-items:center; gap:0}
.pct-c span{font-size:11px; font-weight:800; color:var(--ink2)} .pct-c b{font-size:14px; font-variant-numeric:tabular-nums} .pct-c em{font-size:11px; font-style:normal; color:var(--ink2)}
/* fenêtre d'aperçu : liste des blocs à gauche, pages à droite */
.rpv{display:grid; grid-template-columns:216px minmax(0,1fr); gap:16px; margin-top:12px}
.rpv-side{display:flex; flex-direction:column; gap:8px; background:var(--chip); border-radius:var(--r-lg, 16px); padding:16px; align-self:start; position:sticky; top:0}
.rpv-h{font-size:11px; font-weight:800; letter-spacing:.08em; text-transform:uppercase; color:var(--ink2); margin-bottom:4px}
.rpv-blk{display:flex; gap:8px; align-items:center; font-size:13px; font-weight:600; cursor:pointer; line-height:1.4}
.rpv-actions{display:flex; flex-direction:column; gap:8px; margin-top:8px}
.rpv-actions .btn{width:100%; justify-content:center}
.rp-preview .ed[contenteditable="true"]{outline:1px dashed transparent; border-radius:4px; cursor:text}
.rp-preview .ed[contenteditable="true"]:hover{outline-color:var(--prim); background:var(--menthe)}
@media (max-width:760px){ .rpv{grid-template-columns:minmax(0,1fr)} .rpv-side{position:static} }
/* ---------- protocoles : panneau ---------- */
.pp-params{margin-bottom:12px}
.pp-kpis{display:grid; grid-template-columns:repeat(auto-fit, minmax(140px, 1fr)); gap:8px; margin-top:12px}
.pp-kpi{background:var(--menthe); border-radius:16px; padding:8px 12px; display:flex; flex-direction:column; gap:2px}
.pp-kpi span{font-size:11px; font-weight:800; color:var(--on-menthe); text-transform:uppercase; letter-spacing:.5px}
.pp-kpi b{font-size:16px; font-weight:800; font-variant-numeric:tabular-nums}
.pp-kpi.off{background:var(--chip)} .pp-kpi.off span{color:var(--ink2)}
.proto-tile{display:flex; flex-direction:column; align-items:flex-start; gap:8px; border:0; text-align:left; cursor:pointer; transition:transform .15s, box-shadow .15s}
.proto-tile:hover{transform:translateY(-2px); box-shadow:var(--shadow-pop)}
.proto-tile b{font-size:14px} .proto-tile .sub{font-size:12px}
/* ---------- bilans ---------- */
.bil-period{padding:16px 16px}
.bt-group{font-size:12px; font-weight:800; letter-spacing:.8px; text-transform:uppercase; color:var(--ink2); margin-bottom:8px}
.bt-grid{display:grid; grid-template-columns:repeat(auto-fill, minmax(min(100%, 230px), 1fr)); gap:8px}
.bi-item{border-bottom:1px solid var(--line2); padding:12px 0}
.bi-item > summary{list-style:none; cursor:pointer}
.bi-item > summary::-webkit-details-marker{display:none}
.bi-h{display:flex; gap:12px; align-items:center}
.cmp-bar{display:flex; justify-content:space-between; align-items:center; gap:8px; margin-bottom:12px}
.bil-timeline{display:flex; flex-direction:column; gap:12px; position:relative; padding-left:24px}
.bil-timeline::before{content:""; position:absolute; left:8px; top:10px; bottom:10px; width:2px; background:var(--line)}
.bil-tl-item{position:relative}
.bil-dot{position:absolute; left:-24px; top:22px; width:14px; height:14px; border-radius:999px; background:var(--surface); border:3px solid var(--lv-tb)}
.bil-dot.last{border-color:var(--prim); background:var(--prim)}
.bil-card2.sel{box-shadow:0 0 0 2px var(--prim)}
.bc-top{display:flex; justify-content:space-between; gap:12px; align-items:flex-start}
.bc-date{font-size:19px; font-weight:800; letter-spacing:-.4px}
.bc-cmp{display:flex; gap:8px; align-items:center; font-size:12px; font-weight:700; color:var(--ink2); cursor:pointer; white-space:nowrap}
.bc-q{display:grid; grid-template-columns:repeat(auto-fit, minmax(120px, 1fr)); gap:8px; margin-top:12px}
.bc-q > div{background:var(--chip); border-radius:16px; padding:8px 8px; display:grid; grid-template-columns:1fr auto; gap:4px; font-size:12px; font-weight:700}
.bc-q b{font-size:14px} .bc-q i{grid-column:1 / -1; height:5px; border-radius:999px; background:var(--track); overflow:hidden} .bc-q em{display:block; height:100%; background:var(--prim)}
.cmp-head, .cmp-row{display:grid; grid-template-columns:minmax(160px,1.4fr) 90px 1fr 90px 130px; gap:8px; align-items:center}
.cmp-head{font-size:11px; font-weight:800; letter-spacing:.6px; text-transform:uppercase; color:var(--ink2); padding:0 8px 8px}
.cmp-row{padding:8px; border-radius:16px}
.cmp-row:nth-child(even){background:var(--chip)}
.cmp-n{display:flex; gap:8px; align-items:center; min-width:0; font-size:13px}
.cmp-n .pic{width:34px !important; height:34px !important; flex:0 0 34px}   /* !important : remplace la taille écrite en ligne par testPic() */
.cmp-n .pic svg{width:28px; height:28px}
.cmp-v{font-size:13px; text-align:right; font-variant-numeric:tabular-nums}
.cmp-db{position:relative; height:20px}
.cmp-db svg{position:absolute; inset:0; width:100%; height:100%}
.cd{position:absolute; top:50%; width:13px; height:13px; border-radius:999px; transform:translate(-50%,-50%); border:2px solid var(--surface)}
.cd.a{background:var(--z1)} .cd.b{background:var(--prim)} .cd.b.bad{background:var(--lv-at)}
@media (max-width:700px){ .cmp-head{display:none} .cmp-row{grid-template-columns:1fr 1fr} .cmp-db{grid-column:1 / -1} }
/* ---------- programmation (Gantt simplifié) ---------- */
.gz-chip{border-radius:999px; padding:8px 12px; font-size:12px; font-weight:800; cursor:grab; user-select:none}
.gz-chip:active{cursor:grabbing}
.gz-t{font-weight:800; font-size:13px; white-space:nowrap; overflow:hidden; text-overflow:ellipsis}
.gz-f{font-size:11px; font-weight:700; opacity:.85; white-space:nowrap; overflow:hidden; text-overflow:ellipsis}

.gz-tip{position:absolute; top:-6px; background:var(--ink); color:var(--bg); font-size:11px; font-weight:700; border-radius:999px; padding:4px 8px; white-space:nowrap; z-index:8; pointer-events:none}
.bh-row{display:grid; grid-template-columns:minmax(200px, 280px) 1fr; gap:12px; align-items:center; padding:8px 0; border-bottom:1px solid var(--line2)}
.bh-blk{border-radius:16px; padding:8px 12px; display:flex; flex-direction:column; gap:2px; font-size:11px; font-weight:600}
.bh-blk b{font-size:13px}
.bh-res{display:flex; flex-wrap:wrap; gap:8px}
@media (max-width:700px){ .bh-row{grid-template-columns:1fr} }
/* ---------- catalogue ---------- */
.search-pill{height:44px; border-radius:999px; border:1px solid var(--bord); background:var(--surface); padding:0 16px; font-weight:600; min-width:0; width:240px}
.cat-grid{display:grid; grid-template-columns:repeat(auto-fill, minmax(min(100%, 300px), 1fr)); gap:12px}
.cat-card{display:flex; gap:16px; align-items:flex-start; text-align:left; background:var(--surface); border:1px solid var(--line2); border-radius:24px; padding:16px; cursor:pointer; color:var(--ink); box-shadow:var(--shadow); transition:transform .15s}
.cat-card:hover{transform:translateY(-2px); border-color:var(--prim)}
.cc-body{flex:1; min-width:0; display:flex; flex-direction:column; gap:8px}
.cc-h{display:flex; justify-content:space-between; gap:8px; align-items:baseline}
.cc-h b{font-size:14px}
.cc-src{display:flex; flex-wrap:wrap; gap:4px; align-items:center; font-size:11px}
.cc-src span{font-weight:800; color:var(--ink2); text-transform:uppercase; letter-spacing:.5px; margin-right:2px}
.cc-src em{font-style:normal; background:var(--brume); color:var(--on-brume); border-radius:999px; padding:2px 8px; font-weight:700}
.bm{display:flex; flex-direction:column; gap:4px}
.bm-row{display:flex; gap:8px; align-items:center}
.bm-l{font-size:11px; font-weight:800; color:var(--ink2); width:12px}
.bm-track{flex:1; display:grid; grid-template-columns:auto 1fr auto; gap:8px; align-items:center; font-size:11px; font-weight:700; font-variant-numeric:tabular-nums}
.bm-track i{height:6px; border-radius:999px; background:linear-gradient(90deg, var(--lv-am), var(--lv-tb), var(--foret))}
.bm-leg{display:flex; justify-content:space-between; font-size:11px; color:var(--ink2); padding-left:20px}
.bm-none{font-size:11px; color:var(--ink2); font-style:italic}
/* ---------- évolution ---------- */
.pr-list{display:flex; flex-direction:column; gap:8px; margin-top:8px; max-height:390px; overflow:auto}
.pr-item{display:flex; gap:8px; align-items:center; border:0; background:var(--chip); border-radius:16px; padding:8px 12px; text-align:left; cursor:pointer; color:var(--ink); font-size:13px}
.pr-item:hover{background:var(--menthe)}
.pr-medal{width:30px; height:30px; flex:0 0 30px; border-radius:999px; background:linear-gradient(140deg, #E9C46A, #C99A2E); color:#fff; display:flex; align-items:center; justify-content:center; font-size:14px; box-shadow:0 2px 6px rgba(201,154,46,.4)}
.pr-v{font-weight:800; color:var(--on-menthe)}
.ms-grid{display:grid; grid-template-columns:repeat(auto-fill, minmax(min(100%, 280px), 1fr)); gap:8px}
.ms-item{display:flex; gap:8px; align-items:center; border:0; background:var(--chip); border-radius:16px; padding:8px 12px 8px 8px; cursor:pointer; text-align:left; color:var(--ink); font-size:13px}
.ms-item:hover{background:var(--menthe)}
.ms-item .pic{background:var(--surface)}
/* ---------- documents ---------- */
.drop-zone{display:flex; flex-direction:column; align-items:center; gap:8px; border:2px dashed var(--bord); border-radius:24px; padding:24px; text-align:center; cursor:pointer; background:var(--surface); transition:background .15s, border-color .15s}
.drop-zone:hover, .drop-zone.over{border-color:var(--prim); background:var(--menthe)}
.drop-zone.off{cursor:not-allowed; opacity:.7}
.dz-ic{width:46px; height:46px; border-radius:999px; background:var(--menthe); color:var(--on-menthe); display:flex; align-items:center; justify-content:center; font-size:22px; font-weight:800}
.doc-grid{display:grid; grid-template-columns:repeat(auto-fill, minmax(min(100%, 300px), 1fr)); gap:12px}
.doc-card{display:flex; gap:12px; background:var(--surface); border:1px solid var(--line2); border-radius:16px; padding:12px; box-shadow:var(--shadow)}
.doc-thumb{width:78px; height:96px; flex:0 0 78px; border-radius:12px; background:var(--chip); display:flex; align-items:center; justify-content:center; overflow:hidden; font-weight:800; color:var(--ink2); text-decoration:none}
.doc-thumb img{width:100%; height:100%; object-fit:cover}
.doc-body{display:flex; flex-direction:column; gap:3px; min-width:0}
.doc-note{font-size:12px; color:var(--ink3)}
/* ---------- silhouette : détails musculaires ---------- */
.bz .dt{fill:none; stroke:var(--surface); stroke-width:2.2; stroke-linecap:round; opacity:.75; pointer-events:none}
.bz .vein{fill:none; stroke:#5B8FA8; stroke-width:1.8; stroke-linecap:round; opacity:.85; pointer-events:none}
@media (max-width:600px){
  .fh-actions{margin-left:0; width:100%} .fh-actions .btn{flex:1}
  .fiche-head .page-h1{font-size:24px}

}
/* silhouette v9 : traits fins, volume, auréole */
.avatar-stage .bz .shape{stroke:rgba(255,255,255,.9); stroke-width:1.4; stroke-linejoin:round}
.avatar-stage .bz:focus-visible .shape, .avatar-stage .bz.sel .shape{stroke:var(--prim); stroke-width:2.2; filter:drop-shadow(0 0 8px var(--prim))}
.avatar-stage .bz:hover{transform:none}
.avatar-stage .bz:hover .shape{filter:brightness(1.05) drop-shadow(0 0 5px var(--prim))}
.avatar-stage .bz .dt{stroke:#fff; stroke-width:1.3; opacity:.55}
.avatar-stage .bz .vein{stroke:#4F86A3; stroke-width:1.5; opacity:.8}
.avatar-stage .avatar-body{filter:drop-shadow(0 0 .7px rgba(14,42,34,.45)) drop-shadow(0 14px 18px rgba(14,42,34,.14)); transform-origin:150px 550px}
.avatar-orbit{animation:ringspin 30s linear infinite reverse}
@media (prefers-reduced-motion: reduce){ .avatar-orbit{animation:none} }
/* navigation fiche athlète : rubriques + sous-onglets */
.fnav{display:flex; gap:24px; border-bottom:1px solid var(--line); overflow-x:auto; scrollbar-width:none}
.fnav::-webkit-scrollbar, .fsub::-webkit-scrollbar{display:none}
.fnav button{flex:0 0 auto; background:none; border:0; border-bottom:2.5px solid transparent; margin-bottom:-1px; padding:8px 2px 8px; font:inherit; font-size:14px; font-weight:700; color:var(--ink2); cursor:pointer; white-space:nowrap}
.fnav button:hover{color:var(--ink)}
.fnav button.on{color:var(--ink); border-bottom-color:var(--prim)}
.fsub{display:flex; gap:4px; padding-top:8px; overflow-x:auto; scrollbar-width:none}
.fsub button{flex:0 0 auto; background:none; border:0; border-radius:999px; padding:8px 12px; font:inherit; font-size:13px; font-weight:600; color:var(--ink2); cursor:pointer; white-space:nowrap}
.fsub button:hover{color:var(--ink)}
.fsub button.on{background:var(--chip); color:var(--on-menthe); font-weight:700}
@media (max-width:600px){ .fnav{gap:8px; justify-content:space-between} .fnav button{font-size:14px} }
/* accueil : tuiles et lignes cliquables sur toute leur surface */
.kpi-link{border:0; font:inherit; text-align:left; color:inherit; cursor:pointer; transition:transform .15s, box-shadow .15s}
.kpi-link:hover{transform:translateY(-2px); box-shadow:var(--shadow-pop)}
.kpi-link:focus-visible, .row-link:focus-visible, .tr-link:focus-visible{outline:2px solid var(--prim); outline-offset:2px}
.row-link{width:100%; display:flex; justify-content:space-between; align-items:center; gap:8px; padding:8px 8px; margin:0 -8px; border:0; border-bottom:1px solid var(--line2); background:none; font:inherit; color:inherit; text-align:left; cursor:pointer; border-radius:8px; box-sizing:content-box}
.row-link:hover, .tr-link:hover{background:var(--chip)}
.tr-link{cursor:pointer}
/* import Nolio */
.nl-log{display:flex; flex-direction:column; gap:8px; margin-top:12px}
.nl-line{font-size:13px; padding:8px 12px; border-radius:12px; background:var(--chip); color:var(--ink2)}
.nl-line.ok{background:var(--menthe); color:var(--on-menthe)} .nl-line.err{background:var(--attention); color:var(--ink)}
.nl-list{display:flex; flex-direction:column; gap:8px; max-height:50vh; overflow:auto; margin-top:8px}
.nl-ath{display:flex; gap:8px; align-items:center; padding:8px 12px; border-radius:12px; background:var(--chip); cursor:pointer}
.nl-ath.off{opacity:.55; cursor:default}
/* accueil : salutation sobre + date */
@media (max-width:600px){
  .kpi-grid:has(.kpi-link){grid-template-columns:repeat(3, minmax(0,1fr)); gap:8px}
  .kpi-link{padding:16px 12px; border-radius:16px; gap:4px}
  .kpi-link .l{font-size:12px; line-height:1.2}
  .kpi-link .v{font-size:28px}
  .kpi-link .d{display:none}
}
/* ---------- v15 : tableaux personnalisables (accueil + aperçu), cycle, objectifs, frise, catalogue, entretien ---------- */
.board{display:grid; grid-template-columns:repeat(6, minmax(0,1fr)); gap:16px; align-items:stretch}
.blk{min-width:0; display:flex; flex-direction:column; position:relative}
.blk.sz-s{grid-column:span 2} .blk.sz-m{grid-column:span 3} .blk.sz-l{grid-column:1 / -1}
.blk-body{flex:1; display:flex; flex-direction:column; min-width:0}
.blk-body > .card, .blk-body > .kpi, .blk-body > .kpi-grid{flex:1}
.blk-body > .kpi{width:100%}
.board.is-editing .blk:not(.blk-foot){outline:2px dashed var(--lv-tb); outline-offset:4px; border-radius:24px}
.blk.editing .blk-body{pointer-events:none; opacity:.85}
.blk.dragging{opacity:.4} .blk.drop{outline-color:var(--prim) !important; outline-style:solid !important}
.blk-tools{display:flex; align-items:center; gap:8px; flex-wrap:wrap; background:var(--foret); color:#fff; border-radius:16px; padding:8px 8px 8px 12px; margin-bottom:8px; font-size:12px}
.blk-tools b{flex:1; min-width:0; white-space:nowrap; overflow:hidden; text-overflow:ellipsis}
.blk-grip{cursor:grab; opacity:.7; letter-spacing:-2px}
.blk-btns{display:flex; gap:4px; flex-wrap:wrap}
.blk-btns button{border:0; background:rgba(255,255,255,.16); color:#fff; border-radius:999px; padding:4px 8px; font:inherit; font-size:12px; font-weight:700; cursor:pointer}
.blk-btns button:hover{background:rgba(255,255,255,.28)} .blk-btns button:disabled{opacity:.35; cursor:default}
.blk-foot{flex-direction:row; justify-content:center; gap:8px; flex-wrap:wrap}
.blk-add, .blk-edit{border:1.5px dashed var(--bord); background:none; border-radius:999px; padding:8px 16px; font:inherit; font-size:13px; font-weight:700; color:var(--ink2); cursor:pointer; display:inline-flex; align-items:center; gap:8px}
.blk-add span{font-size:19px; line-height:1; color:var(--prim)}
.blk-add:hover, .blk-edit:hover{border-color:var(--prim); color:var(--prim); background:var(--menthe)}
.board.is-editing .blk-edit{background:var(--prim); color:#fff; border-style:solid; border-color:var(--prim)}
.bp-list{display:flex; flex-direction:column; gap:8px; margin-top:12px; max-height:56vh; overflow:auto}
.bp-item{display:flex; align-items:center; gap:12px; text-align:left; border:0; background:var(--chip); border-radius:16px; padding:12px 16px; cursor:pointer; font:inherit; color:var(--ink)}
.bp-item > b{flex:0 0 auto} .bp-item .sub{flex:1; min-width:0} .bp-item:hover{background:var(--menthe)}
.bp-item > span:not(.bp-plus):not(.pic){flex:1; min-width:0} .bp-item > span .sub{display:block}
.bp-plus{margin-left:auto; width:30px; height:30px; flex:0 0 30px; border-radius:50%; background:var(--surface); display:flex; align-items:center; justify-content:center; font-weight:800; color:var(--prim)}
/* accueil : en-tête (salutation + saisie rapide), alertes, raccourcis — fond blanc partout, pêche et bleu en petites touches */
.kpi-plain{background:var(--surface); border:1px solid var(--line)}
.kpi-plain .d{background:var(--menthe)}
.alert-row{width:100%; display:flex; align-items:center; gap:12px; text-align:left; border:0; border-bottom:1px solid var(--line2); background:none; border-radius:0; padding:12px 2px; cursor:pointer; font:inherit; color:var(--ink)}
.alert-row:last-child{border-bottom:0}
.alert-row:hover{background:var(--chip); border-radius:12px}
.alert-row .al-ic{width:32px; height:32px; flex:0 0 32px; border-radius:12px; background:var(--attention); color:var(--attention-fg); display:flex; align-items:center; justify-content:center; font-weight:800}
.alert-row.soft .al-ic{background:var(--brume); color:var(--on-brume)}
.dash-due{background:var(--brume); color:var(--on-brume)}
/* accueil : une carte par athlète (bloc en cours) */
.ac-grid{display:grid; grid-template-columns:repeat(auto-fill, minmax(250px, 1fr)); gap:12px}
.ac-card{display:flex; flex-direction:column; gap:12px; text-align:left; font:inherit; color:var(--ink); background:var(--surface); border:1px solid var(--line); border-radius:16px; padding:16px; cursor:pointer; min-width:0; transition:box-shadow .15s, transform .15s}
.ac-card:hover{box-shadow:var(--shadow-pop); transform:translateY(-2px)}
.ac-card:focus-visible{outline:2px solid var(--prim); outline-offset:2px}
.ac-head{display:flex; align-items:center; gap:8px; min-width:0}
.ac-av{width:38px; height:38px; flex:0 0 38px; border-radius:12px; background:var(--menthe); color:var(--on-menthe); display:grid; place-items:center; font-weight:800; font-size:14px}
.ac-nm{display:block; font-size:14px; font-weight:800; white-space:nowrap; overflow:hidden; text-overflow:ellipsis}
.ac-last{display:block; font-size:12px; color:var(--ink2)}
.ac-warn{color:var(--attention-fg); font-weight:700}
.ac-ph{display:flex; flex-direction:column; gap:2px; min-width:0}
.ac-k{font-size:12px; color:var(--ink2); font-weight:600} .ac-k b{color:var(--ink); font-size:13px}
.ac-pn{font-size:16px; font-weight:800; letter-spacing:-.2px; line-height:1.2; display:-webkit-box; -webkit-line-clamp:2; -webkit-box-orient:vertical; overflow:hidden}
.ac-track{display:flex; gap:3px}
.ac-track i{flex:1 1 0; height:8px; border-radius:4px; background:linear-gradient(90deg, var(--prim) var(--f), color-mix(in srgb, var(--prim) 20%, var(--track)) var(--f))}
.ac-track i:first-child{border-radius:999px 4px 4px 999px} .ac-track i:last-child{border-radius:4px 999px 999px 4px} .ac-track i:only-child{border-radius:999px}
.ac-foot{display:flex; align-items:center; gap:8px; flex-wrap:wrap; margin-top:auto; font-size:12px}
.ac-card.none .ac-pn{font-weight:700}
.ac-card.none{background:var(--chip); border-color:transparent}
.ac-card{user-select:none; -webkit-user-select:none}
.drag-h{flex:0 0 auto; width:28px; height:28px; display:grid; place-items:center; border-radius:8px; color:var(--ink2); font-size:16px; cursor:grab; touch-action:none; opacity:0; transition:opacity .15s, background .15s}
.ac-card:hover .drag-h{opacity:.75} .drag-h:hover{background:var(--chip); opacity:1}
@media (hover:none){ .drag-h{opacity:.6} }
/* glisser-déposer : carte soulevée, emplacement en pointillés, voisins qui glissent */
body.sorting, body.sorting *{cursor:grabbing !important}
body.sorting .ac-card:hover{transform:none; box-shadow:none}
.sort-ph{background:transparent !important; border:2px dashed var(--bord) !important; box-shadow:none !important}
.sort-ph > *{visibility:hidden}
.sort-ghost{position:fixed; z-index:200; margin:0; pointer-events:none; box-sizing:border-box; transition:transform .18s cubic-bezier(.2,.8,.2,1), box-shadow .18s, left .2s, top .2s}
.sort-ghost.lift{transform:scale(1.035) rotate(-1.2deg); box-shadow:0 22px 50px rgba(20,40,30,.22); transition:transform .18s cubic-bezier(.2,.8,.2,1), box-shadow .18s}
.sort-ghost.drop{transform:none; box-shadow:var(--shadow)}
.sort-ghost .drag-h{opacity:1}
.alert-row .n{display:block; font-weight:800; font-size:13px} .alert-row .t{display:block; font-size:13px} .alert-row .s{display:block; font-size:12px; color:var(--ink2)}
.shortcuts{display:grid; grid-template-columns:repeat(2, minmax(0,1fr)); gap:8px}
.sc-btn{border:0; background:var(--chip); border-radius:16px; padding:12px 16px; text-align:left; cursor:pointer; font:inherit; color:var(--ink); display:flex; flex-direction:column; gap:2px}
.sc-btn span{font-size:12px; color:var(--ink2)} .sc-btn:hover{background:var(--menthe)}
/* tête de fiche : semaine en cours */
.fh-week{display:flex; align-items:baseline; gap:8px; flex-wrap:wrap; margin-top:4px; font-size:13px; color:var(--ink2)}
.fh-week b{color:var(--on-menthe); background:var(--menthe); border-radius:999px; padding:2px 8px; font-size:12px}
.fh-week em{font-style:normal; font-size:12px; opacity:.8}
.fh-week em::before{content:"· "}
.fnav .sh{display:none}
@media (max-width:600px){ .fnav .lg{display:none} .fnav .sh{display:inline} }
/* ---------- Cycle en cours ---------- */
.cyc{display:flex; flex-direction:column; gap:16px; background:linear-gradient(150deg, var(--surface) 45%, var(--cyc-bg, var(--menthe)) 140%)}
.cyc-head{display:flex; justify-content:space-between; align-items:center; gap:16px}
.card .cyc-name{font-size:28px; letter-spacing:-.7px; margin-top:2px}
.cyc-dates{font-size:13px; color:var(--ink2); font-weight:600; margin-top:2px}
.cyc-ring{position:relative; width:104px; flex:0 0 104px; text-align:center}
.cyc-ring svg{display:block}
.cyc-ring-t{position:absolute; top:0; left:0; width:104px; height:104px; display:flex; flex-direction:column; align-items:center; justify-content:center; line-height:1}
.cyc-ring-t b{font-size:28px; font-weight:800; letter-spacing:-1px} .cyc-ring-t span{font-size:11px; font-weight:700; color:var(--ink2); margin-top:3px}
.cyc-ring em{display:block; font-style:normal; font-size:11px; font-weight:800; color:var(--cyc-fg, var(--prim)); margin-top:4px}
/* parcours du cycle : piste continue, une case par semaine, remplie jusqu'à aujourd'hui */
.cyc-track{--t:var(--prim); display:flex; gap:4px; padding-top:4px}
.ct-seg{flex:1 1 0; min-width:0; border:0; background:none; padding:0; display:flex; flex-direction:column; gap:8px; cursor:pointer; font:inherit; color:var(--ink); text-align:left}
.ct-bar{position:relative; display:block; border-radius:4px;
  background:linear-gradient(90deg, var(--t) var(--f), color-mix(in srgb, var(--t) 22%, var(--track)) var(--f))}
.ct-seg:first-child .ct-bar{border-radius:999px 4px 4px 999px}
.ct-seg:last-child .ct-bar{border-radius:4px 999px 999px 4px}
.ct-seg:only-child .ct-bar{border-radius:999px}
.ct-seg:hover .ct-bar{filter:brightness(1.08)}
.ct-l{font-size:11px; color:var(--ink2); white-space:nowrap; overflow:hidden; text-overflow:ellipsis}
.ct-l b{font-weight:800}  .ct-seg.past .ct-l{opacity:.7}
.cyc-track.dense .ct-l span{display:none}
.ct-days{display:grid; grid-template-columns:repeat(7,1fr); color:var(--ink2)}
.ct-days i{font-style:normal; display:flex; flex-direction:column; align-items:center; gap:1px; position:relative}
.ct-days i span{font-size:11px; font-weight:700; text-transform:uppercase; letter-spacing:.4px}
.ct-days i b{width:30px; height:30px; display:grid; place-items:center; border-radius:50%; font-size:13px; font-weight:800; color:var(--ink2)}
.ct-days i.done b{color:var(--ink3, var(--ink2)); opacity:.6}
.ct-days i.today span{color:var(--ink)}
.ct-days i.today b{background:var(--ink); color:var(--surface); opacity:1}
.ct-days i em{width:6px; height:6px; border-radius:50%; background:var(--t)}
.cyc-focus{display:grid; grid-template-columns:repeat(3, minmax(0,1fr)); gap:8px}
.cf{border-radius:16px; padding:8px 12px; background:var(--surface); border:1px solid var(--line); display:flex; flex-direction:column; gap:4px; min-width:0}
.cf .l{font-size:11px; font-weight:800; letter-spacing:.8px; text-transform:uppercase; color:var(--ink2)}
.cf .v{font-size:14px; font-weight:800} .cf .v.none{color:var(--ink2); font-weight:600}
.cf.main{background:var(--cyc-bg, var(--menthe)); border-color:transparent} .cf.main .v{color:var(--cyc-fg, var(--on-menthe))}
.cyc-now{background:var(--surface); border:1px solid var(--line); border-radius:16px; padding:12px 16px}
.cyc-now-h{display:flex; justify-content:space-between; align-items:center; gap:12px; flex-wrap:wrap}
.cyc-now-t{display:flex; align-items:center; gap:8px; font-size:16px; margin-top:2px}
.cyc-load{display:flex; align-items:center; gap:8px; font-size:12px; color:var(--ink2); font-weight:700}
.cl-dots{display:flex; gap:3px} .cl-dots i{width:7px; height:16px; border-radius:4px; background:var(--track)} .cl-dots i.on{background:var(--cyc-fg, var(--prim))}
.cyc-load b{color:var(--ink)}
/* ---------- Objectifs ---------- */
.goals{display:flex; flex-direction:column; gap:12px; background:linear-gradient(160deg, var(--menthe), var(--surface) 55%)}
.goal-grid{display:grid; gap:12px} .goal-grid.n2{grid-template-columns:repeat(2, minmax(0,1fr))} .goal-grid.n3{grid-template-columns:repeat(3, minmax(0,1fr))}
.goal{display:flex; align-items:center; gap:16px; border:0; background:var(--surface); border-radius:16px; padding:16px; cursor:pointer; text-align:left; font:inherit; color:var(--ink); min-width:0; box-shadow:var(--shadow)}
.goal:hover{box-shadow:var(--shadow-pop)}
.goal svg{flex:0 0 auto}
.goal-txt{min-width:0}
.goal-t{font-size:19px; font-weight:800; letter-spacing:-.3px; line-height:1.2}
.goal-v{font-size:24px; font-weight:800; letter-spacing:-.6px; margin-top:2px}
.goal-v span{color:var(--ink2); font-weight:600} .goal-v small{font-size:13px; color:var(--ink2)}
.goal-grid.n3 .goal{flex-direction:column; align-items:flex-start} .goal-grid.n3 .goal-v{font-size:19px}
.goal-cd{position:relative; width:112px; height:112px; flex:0 0 112px}
.goal-cd svg{display:block}
.goal-cd-t{position:absolute; inset:0; display:flex; flex-direction:column; align-items:center; justify-content:center; line-height:1; color:var(--ink)}
.goal-cd-t b{font-size:28px; font-weight:800; letter-spacing:-1px} .goal-cd-t span{font-size:11px; font-weight:700; color:var(--ink2); margin-top:3px}
.goal-q{font-size:56px; line-height:.8; font-weight:800; color:var(--lv-tb); flex:0 0 auto; font-family:Georgia, serif}
.goals-sec{display:flex; flex-direction:column; gap:8px; padding-top:4px; border-top:1px solid var(--line)}
.goals-sec .kick{margin-top:8px}
.goal-rest{display:grid; gap:8px; grid-template-columns:repeat(auto-fill, minmax(260px, 1fr))}
.goal-mini{display:grid; grid-template-columns:1fr 90px 40px; gap:8px; align-items:center; border:0; background:var(--surface); border-radius:12px; padding:8px 12px; cursor:pointer; text-align:left; color:var(--ink); font:inherit; font-size:13px}
.goal-mini em{font-style:normal; color:var(--ink2); font-size:11px}
.goal-mini .tr{height:7px; border-radius:999px; background:var(--track); overflow:hidden} .goal-mini .tr i{display:block; height:100%; background:var(--prim); border-radius:999px}
/* ---------- Résultats clés ---------- */
.kr-list{display:flex; flex-direction:column; gap:8px}
.kr-item{display:flex; align-items:center; gap:12px; padding:8px 12px; background:var(--chip); border-radius:16px; min-width:0}
.kr-main{flex:1; min-width:0; display:flex; flex-direction:column; gap:2px}
.kr-name{font-size:13px; font-weight:700; line-height:1.4}
.kr-vals{display:flex; align-items:baseline; gap:4px; flex-wrap:wrap; font-size:13px}
.kr-vals b{font-size:16px; font-weight:800} .kr-vals .u{font-size:12px; color:var(--ink2); font-weight:600}
.kr-score{flex:0 0 42px; height:42px; border-radius:12px; background:var(--surface); color:var(--prim); font-weight:800; font-size:16px; display:flex; align-items:center; justify-content:center}
.kr-score.none{color:var(--ink2)}
.kr-row{display:flex; justify-content:space-between; align-items:center; gap:8px; padding:8px 0; border-bottom:1px solid var(--line2)}
.kr-n{min-width:0; font-size:13px; font-weight:700} .kr-n em{display:block; font-style:normal; font-size:12px; font-weight:600; color:var(--ink2)}
.kr-v{white-space:nowrap; font-size:13px}
/* silhouette : qualités en toutes lettres */
.stat-bar{grid-template-columns:96px 1fr 30px}
.stat-bar .ab{letter-spacing:0; font-size:12px; text-transform:none}
/* ---------- Frise des phases : piste plus épaisse ---------- */
.tl-phase{top:9px; bottom:9px; border-radius:16px; padding:8px 16px 12px 16px; background:var(--ph-bg); color:var(--ph-fg); border:1.5px solid transparent; display:flex; flex-direction:column; gap:1px; overflow:hidden; box-shadow:0 1px 2px rgba(27,35,30,.08)}
.tl-phase::before{content:""; position:absolute; left:0; top:0; bottom:0; width:5px; background:var(--ph-fg); opacity:.55}
.tl-phase.cur{border-color:var(--ph-fg); box-shadow:0 6px 18px rgba(27,35,30,.14)}
.tl-phase.done{opacity:.7}
.tl-phase .pn{font-size:14px} .tl-phase .pf{font-size:11px} .tl-phase .pd{font-size:11px; font-weight:700; opacity:.7; white-space:nowrap; overflow:hidden; text-overflow:ellipsis}
.tl-phase .pp{position:absolute; left:16px; right:14px; bottom:8px; height:4px; border-radius:999px; background:rgba(255,255,255,.6); overflow:hidden}
.tl-phase .pp i{display:block; height:100%; background:var(--ph-fg); border-radius:999px}
.tl-phase.narrow{padding:8px 8px 8px 12px} .tl-phase.narrow .pf, .tl-phase.narrow .pd{display:none}

/* ---------- Catalogue : test / protocole / mesure ---------- */
.seg2 .cnt{font-size:11px; background:var(--track); border-radius:999px; padding:1px 8px; margin-left:4px; color:var(--ink2)}
.seg2.sm button{padding:8px 12px; font-size:12px}

/* ---------- Fiche : Bilans & tests, Entretien, assistant ---------- */
.bt-head{display:flex; justify-content:space-between; align-items:flex-end; gap:12px; flex-wrap:wrap}
.bt-empty{display:flex; flex-direction:column; gap:4px; align-items:flex-start}
.en-total{display:flex; align-items:center; gap:12px; flex-wrap:wrap; font-size:13px}
.en-bar{flex:1 1 140px; height:8px; border-radius:999px; background:var(--track); overflow:hidden} .en-bar i{display:block; height:100%; background:var(--prim); border-radius:999px}
.en-grid{display:grid; gap:16px; grid-template-columns:repeat(auto-fill, minmax(300px, 1fr)); align-items:start}
.en-sec{display:flex; flex-direction:column; gap:8px}
.en-sec.en-none{background:var(--chip); box-shadow:none}
.en-h{display:flex; justify-content:space-between; align-items:center; gap:8px}
.en-n{font-size:12px; font-weight:800; border-radius:999px; padding:2px 8px; background:var(--track); color:var(--ink2)}
.en-n.part{background:var(--sable); color:var(--on-sable)} .en-n.full{background:var(--menthe); color:var(--on-menthe)}
.en-list{display:flex; flex-direction:column; gap:8px}
.en-qa{display:flex; flex-direction:column; gap:1px; font-size:13px; margin-top:8px}
.en-list .en-qa{margin-top:0}
.en-qa span{font-size:11px; color:var(--ink2); font-weight:600} .en-qa b{font-weight:600; white-space:pre-line}
/* ---------- responsive ---------- */
@media (max-width:940px){
  .blk.sz-m{grid-column:1 / -1}
  .goal-grid.n3{grid-template-columns:1fr} .goal-grid.n3 .goal{flex-direction:row; align-items:center}
}
@media (max-width:600px){
  .board{gap:12px}
  .goal-grid.n2{grid-template-columns:1fr}
  .goal{padding:12px} .goal svg{width:92px; height:92px} .goal-t{font-size:16px} .goal-v{font-size:19px}
  .card .cyc-name{font-size:22px} .cyc-ring{width:86px; flex-basis:86px} .cyc-ring svg{width:86px; height:86px} .cyc-ring-t{width:86px; height:86px} .cyc-ring-t b{font-size:22px}
  .cyc-focus{grid-template-columns:1fr 1fr} .cyc-focus .cf.keep{grid-column:1 / -1}
  .cyc-track:not(.short) .ct-l span{display:none}
  .shortcuts{grid-template-columns:1fr}
  .goal-mini{grid-template-columns:1fr 60px 38px}

  .en-grid{grid-template-columns:1fr}
}
/* bouton « ← Retour » commun à toutes les pages (ramène là d'où l'on vient) */
.nav-back{display:inline-flex; align-items:center; gap:8px; border:0; background:var(--chip); color:var(--ink3); font:inherit; font-size:13px; font-weight:700; padding:8px 12px 8px 8px; border-radius:999px; cursor:pointer; margin-bottom:16px; max-width:100%; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; transition:background .15s}
.nav-back:hover{background:var(--menthe); color:var(--on-menthe)}
.nav-back:focus-visible{outline:2px solid var(--prim); outline-offset:2px}
/* Harmonie (v18) : une seule échelle de titres et une seule règle de fonds pour toute l'app.
   Titres : page 30 px · rubrique 22 px · carte 19 px · sous-titre 16 px.
   Fonds : cartes blanches partout ; la couleur (pêche, bleu, vert) seulement en petites touches (pastilles, icônes, barres). */
.page-h1{font-size:30px; letter-spacing:-.9px}
.sec-h{font-size:22px; letter-spacing:-.4px}
.card h2, .grp-h, .modal h2{font-size:19px; letter-spacing:-.3px}
.card h3{font-size:16px}
.sec-h + .sub, .page-h1 + .lead, .page-h1 + .sub{margin-top:3px}
/* en-tête de page : titre à gauche, actions à droite, même espacement partout */
/* en-tête de sous-onglet de la fiche : titre de rubrique + phrase d'explication, actions à droite */
.tab-head{display:flex; justify-content:space-between; align-items:flex-start; gap:12px; flex-wrap:wrap; margin-bottom:16px}
.tab-head > div:first-child{min-width:0; flex:1 1 320px}
/* fonds : plus de grandes cartes teintées ni de dégradés */
.card.menthe, .card.sauge, .card.brume{background:var(--surface); border-color:var(--line2)}
.goals, .cyc{background:var(--surface)}
/* tuiles de protocoles : blanches, la famille se lit à la couleur de l'icône */
.proto-tile.brume .pic{background:var(--brume); color:var(--on-brume)}
.proto-tile.sauge .pic{background:var(--sauge); color:var(--on-sauge)}
/* fiche : même taille de boutons que le reste de l'app */
@media (max-width:940px){
  .page-h1{font-size:24px}
  .sec-h{font-size:19px}
  .card h2, .grp-h{font-size:16px}
}
/* saisie rapide : mensurations en grille */
.mens-grid{display:grid; grid-template-columns:repeat(4, minmax(0,1fr)); gap:8px}
@media (max-width:640px){ .mens-grid{grid-template-columns:repeat(2, minmax(0,1fr))} }
/* boutons : un texte trop long passe à la ligne au lieu d'être coupé (ex. Intégrations, cartes étroites) */
.btn{height:auto; min-height:44px; max-width:100%; white-space:normal; line-height:1.2; padding-top:8px; padding-bottom:8px; text-align:center}
.btn.sm{height:auto; min-height:34px; padding-top:4px; padding-bottom:4px}

@media (max-width:640px){ .goal-cd{width:92px; height:92px; flex-basis:92px} .goal-cd-t b{font-size:24px} }
/* ===== Cycle en cours (v19) : flèches ‹ ›, couleurs par type de semaine, semaine en cours bien visible, focus modifiables ===== */
.cyc-top{display:flex; justify-content:space-between; align-items:center; gap:8px; flex-wrap:wrap; margin-bottom:-4px}
.cyc-nav{display:inline-flex; align-items:center; gap:4px; background:var(--chip); border-radius:999px; padding:3px}
.cyc-arrow{width:34px; height:34px; border-radius:50%; border:0; background:var(--surface); color:var(--ink); display:grid; place-items:center; cursor:pointer; box-shadow:0 1px 3px rgba(20,40,30,.12); transition:transform .15s, background .15s, color .15s}
.cyc-arrow:hover:not(:disabled){background:var(--prim); color:#fff; transform:scale(1.06)}
.cyc-arrow:disabled{opacity:.35; cursor:default; box-shadow:none}
.cyc-arrow.plus{background:var(--menthe); color:var(--on-menthe)}
.cyc-pos{font-size:12px; font-weight:700; color:var(--ink2); padding:0 8px; white-space:nowrap}
.cyc-back{border:0; background:var(--menthe); color:var(--on-menthe); font:inherit; font-size:12px; font-weight:700; padding:8px 12px; border-radius:999px; cursor:pointer}
.cyc-badge{width:104px; height:104px; border-radius:50%; border:9px solid var(--track); display:flex; flex-direction:column; align-items:center; justify-content:center; line-height:1; box-sizing:border-box}
.cyc-badge b{font-size:24px; font-weight:800; letter-spacing:-.6px} .cyc-badge span{font-size:11px; font-weight:700; color:var(--ink2); margin-top:4px}
.cyc-badge.past{border-color:var(--menthe)} .cyc-badge.past b{color:var(--prim)}
.cyc.past .cyc-name, .cyc.future .cyc-name{color:var(--ink3)}
/* piste : chaque semaine prend la couleur de son type */
.cyc-track.has-flag{padding-top:32px}
.ct-seg{position:relative}
.ct-bar{height:12px; background:linear-gradient(90deg, var(--t) var(--f), color-mix(in srgb, var(--t) 24%, var(--track)) var(--f)); transition:height .2s}
.ct-seg.past .ct-bar{opacity:.75}
.ct-seg.now .ct-bar{height:20px; margin-top:-4px; box-shadow:0 0 0 2.5px var(--surface), 0 0 0 4.5px var(--ink); border-radius:8px}
.ct-seg.now .ct-l{color:var(--ink)} .ct-seg.now .ct-l b{font-size:13px}
.ct-flag{position:absolute; top:-30px; left:50%; transform:translateX(-50%); white-space:nowrap; font-size:11px; font-weight:800; background:var(--ink); color:var(--surface); padding:4px 8px; border-radius:999px; z-index:1}
.ct-flag::after{content:""; position:absolute; left:50%; bottom:-4px; width:8px; height:8px; background:var(--ink); transform:translateX(-50%) rotate(45deg); border-radius:1px}
.ct-seg:first-child .ct-flag{left:0; transform:none} .ct-seg:first-child .ct-flag::after{left:18px}
.ct-seg:last-child:not(:first-child) .ct-flag{left:auto; right:0; transform:none} .ct-seg:last-child:not(:first-child) .ct-flag::after{left:auto; right:14px; transform:rotate(45deg)}
.ct-legend{display:flex; flex-wrap:wrap; gap:8px 16px; font-size:11px; color:var(--ink2); font-weight:600; margin-top:-6px}
.ct-legend span{display:inline-flex; align-items:center; gap:8px} .ct-legend i{width:10px; height:10px; border-radius:4px}
/* semaine en cours : pastille de la couleur du type */
.cyc-now .kick{color:var(--ink2)}
.cyc-now .wt-dot{width:12px; height:12px; border-radius:4px; background:var(--t); display:inline-block}
.cl-dots i.on{background:var(--t, var(--prim))}
/* focus : cartes cliquables */
button.cf{font:inherit; color:var(--ink); text-align:left; cursor:pointer; transition:box-shadow .15s, transform .15s}
button.cf:hover:not(:disabled){box-shadow:0 0 0 2px var(--prim); transform:translateY(-1px)}
button.cf:disabled{cursor:default}
.cf .l{display:flex; justify-content:space-between; align-items:center; gap:8px}
.cf-pen{font-size:12px; opacity:.45; letter-spacing:0} button.cf:hover .cf-pen{opacity:1}
.cf .v.none{color:var(--prim); font-weight:700; font-size:13px}
/* prochain cycle */
.cyc-next{display:grid; grid-template-columns:auto 1fr auto; grid-template-rows:auto auto; column-gap:12px; align-items:center; text-align:left; font:inherit; color:var(--ink); background:var(--surface); border:1px solid var(--line); border-radius:16px; padding:12px 16px; cursor:pointer; transition:box-shadow .15s}
.cyc-next:hover{box-shadow:var(--shadow-pop)}
.cyc-next .kick{grid-row:1 / 3; align-self:center; padding-right:4px; border-right:1px solid var(--line); margin-right:2px; padding-block:8px}
.cyc-next b{font-size:14px; min-width:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap}
.cyc-next .sub{grid-column:2} 
.cyc-next-go{grid-column:3; grid-row:1 / 3; color:var(--prim); font-weight:800; font-size:13px; display:flex; align-items:center}
.cyc-next.empty{border-style:dashed; background:var(--chip)}
.cyc-next.empty b{color:var(--ink2); font-weight:700; white-space:normal}
/* sélecteur de focus */
.fp-grid{display:grid; grid-template-columns:repeat(2, minmax(0,1fr)); gap:8px; margin-top:16px}
.fp-chip{border:2px solid transparent; background:var(--fbg, var(--chip)); color:var(--ffg, var(--ink)); font:inherit; font-weight:800; font-size:14px; padding:12px 16px; border-radius:16px; cursor:pointer; text-align:left; transition:transform .12s, border-color .12s}
.fp-chip:hover{transform:translateY(-1px)}
.fp-chip.on{border-color:var(--ink); box-shadow:0 2px 8px rgba(20,40,30,.15)}
.fp-chip.on::after{content:"  ✓"}
.fp-chip.none{background:var(--surface); border:2px dashed var(--bord); color:var(--ink2)} .fp-chip.none.on{border-style:solid; border-color:var(--ink)}
@media (max-width:640px){
  .cyc-badge{width:86px; height:86px} .cyc-badge b{font-size:19px}
  .cyc-pos{display:none}
  .ct-flag{font-size:11px; padding:3px 8px}
}
/* Programmation : jours en gris discret sous les mois */
/* focus du cycle : trois cartes identiques, valeurs en pastilles de couleur */
.cyc-focus .cf, .cyc-focus .cf.main{background:var(--surface); border:1px solid var(--line); gap:8px}
.cf-vals{display:flex; flex-wrap:wrap; gap:4px}
.fpill{display:inline-flex; align-items:center; font-size:13px; font-weight:800; padding:4px 12px; border-radius:999px; line-height:1.2}
.fpill.empty{background:transparent; border:1.5px dashed var(--bord); color:var(--ink2); font-weight:700}
.cf-pen{opacity:0; transition:opacity .15s} button.cf:hover .cf-pen, button.cf:focus-visible .cf-pen{opacity:.7}
@media (hover:none){ .cf-pen{opacity:.45} }
.fp-own{margin-top:16px; padding-top:16px; border-top:1px solid var(--line2)}
.fp-own label{display:block; font-size:12px; font-weight:700; color:var(--ink2); margin-bottom:8px}
.fp-own input{flex:1; min-width:0}
/* ===== Fond de l'app : vert-gris très doux, cartes blanches qui ressortent (v20) ===== */
:root{--bg:#F3F6F2}
.modal{background:var(--surface)}
.ftabs-wrap{background:var(--bg)}
/* accueil : en-tête sur le fond de page + pastilles d'action (ce qui demande une action, cliquable) */
.dash-head{display:flex; justify-content:space-between; align-items:flex-end; gap:16px; flex-wrap:wrap}
.dash-head .dh-main{display:flex; flex-direction:column; gap:4px; min-width:0}
.dash-head .kick{color:var(--ink2)} .dash-head .kick::first-letter{text-transform:uppercase}
.dash-head .btn{display:inline-flex; align-items:center; gap:8px}
.dh-chips{display:flex; flex-wrap:wrap; gap:8px; margin-top:16px}
.dh-chip{display:inline-flex; align-items:center; gap:8px; border:1px solid var(--line); background:var(--surface); color:var(--ink); font:inherit; font-size:13px; font-weight:700;
  padding:8px 12px 8px 12px; border-radius:999px; cursor:pointer; box-shadow:var(--sh-card); transition:box-shadow .15s, transform .15s}
.dh-chip:hover{box-shadow:var(--sh-hover); transform:translateY(-1px)}
.dh-chip i{width:8px; height:8px; border-radius:50%}
.dh-chip.t-brume i{background:var(--on-brume)} .dh-chip.t-sable i{background:var(--lv-am)} .dh-chip.t-attention i{background:var(--attention-fg)} .dh-chip.t-menthe i{background:var(--prim)}
.dh-chip span{color:var(--ink2); font-weight:700}
.dh-chip.done{cursor:default; box-shadow:none} .dh-chip.done:hover{transform:none}
/* cartes « en un coup d'œil » : même fond pour tous, hauteur naturelle */
.ac-card.none{background:var(--surface); border-color:var(--line)}
.ac-grid{align-items:stretch}
/* ===== Design system (v20) : jetons et règles de composants communes — appliqués partout ===== */
:root{--g-50:#F8FAF8; --g-400:#B4BCB6; --ink-mute:#7A847C;
  --r-xs:4px; --r-sm:8px; --r-md:12px; --r-lg:16px; --r-xl:24px;
  --sh-card:0 1px 2px rgba(27,35,30,.05), 0 1px 1px rgba(27,35,30,.03); --sh-hover:0 8px 24px rgba(27,35,30,.12)}
body{font-size:14px; line-height:1.5}
/* étiquettes en majuscules : une seule règle (11 px, 800, espacement 0,08 em) — !important : l'emporte sur les tailles propres à chaque composant */
.kick, .nav-cap, th, .zs-l, .ar-lab, .bt-group, .cmp-head, .cf .l, .ap-whohead, .pp-kpi span, .cc-src span, .avatar-hud .lvl span{
  font-size:11px !important; font-weight:800; letter-spacing:.08em}
.ct-days i span{letter-spacing:.04em}
/* cartes : 24 px d'arrondi et de marge intérieure, même ombre ; éléments internes : 16 px */
.card{border-radius:var(--r-xl); padding:24px; box-shadow:var(--sh-card); border-color:var(--line2)}
.card h2{margin-bottom:0}
.card h2 + .sub, .card .sec-h + .sub{margin-top:4px}
.ac-card, .cat-card, .tpl, .goal, .cf, .cyc-now, .cyc-next, .en-sec, .ath-row, .alert-row:hover{border-radius:var(--r-lg)}
.ac-card:hover, .cat-card:hover, .tpl:hover, .ath-row:hover, .kpi-link:hover, .cyc-next:hover{box-shadow:var(--sh-hover)}
/* boutons : deux variantes seulement — principal (vert) et secondaire (blanc bordé) ; « soft » = secondaire */
.btn{font-weight:700; border-radius:999px}
.btn.sec, .btn.soft{background:var(--surface); color:var(--ink); border:1px solid var(--bord)}
.btn.sec:hover:not(:disabled), .btn.soft:hover:not(:disabled){border-color:var(--prim); color:var(--prim); filter:none}
.btn.sm{font-size:13px; padding-left:16px; padding-right:16px}
.btn{font-size:14px}
/* champs de saisie : même hauteur, même arrondi */
.field input, .field select, .field textarea, .search-pill, .ath-tools input{border-radius:var(--r-md)}
.ath-tools input, .search-pill{border-radius:999px}
/* pastilles : une forme, deux tailles */
.pill{border-radius:999px; font-size:12px; font-weight:700}
/* état vide commun (objectifs, cycle…) */
.empty-card{display:flex; justify-content:space-between; align-items:center; gap:16px; flex-wrap:wrap}
.empty-card .ec-txt{display:flex; flex-direction:column; gap:4px; min-width:0; flex:1 1 280px}
.empty-card h2{font-size:19px}
.empty-card .sub{max-width:60ch}
/* titres de carte et sous-titres : interlignage net */
.card h2, .sec-h, .page-h1{line-height:1.2}
.sub{font-size:13px; line-height:1.5}
.rp-scope .rp-box{border-radius:var(--r-lg); padding:16px}
b b, strong b{font-weight:inherit}
/* couleur de famille de sport (règle du système) : course = bleu brume, vélo = vert sauge.
   Grandes surfaces teintées seulement pour les tuiles de protocoles et les cartes de zones ; ailleurs, le pictogramme porte la couleur. */
.card.fam-course{background:var(--brume); border-color:transparent}
.card.fam-velo{background:var(--sauge); border-color:transparent}
.card.fam-course .pic, .card.fam-velo .pic{background:var(--surface)}
.cat-card.fam-course .pic{background:var(--brume)} .cat-card.fam-velo .pic{background:var(--sauge)}
.card.fam-course .empty, .card.fam-velo .empty{background:rgba(255,255,255,.6)}
/* boutons : deux tailles seulement — 44 px pour les actions de page (en-tête de page ou de fiche, fenêtres), 36 px partout ailleurs */
.btn, .btn.sm{min-height:36px; font-size:13px; padding:8px 16px; line-height:1.2}
.btn.lg, .modal .btn{min-height:44px; font-size:14px; padding:12px 20px}
.btn.lg svg, .btn svg{flex:0 0 auto}
/* cartes « en un coup d'œil » : même structure et même hauteur, carte sans bloc = piste vide en pointillés */
.ac-card .ac-foot{margin-top:auto}
.ac-card.none .ac-pn{color:var(--ink2)}
.ac-track-empty{display:block; height:8px; border-radius:999px; border:1.5px dashed var(--bord); box-sizing:border-box}
.ac-track-empty i{display:none}
body.sorting .ac-grid{align-items:stretch}
/* silhouette : saisie dans le panneau */
.bp-inline{display:flex; flex-direction:column; gap:12px; background:var(--surface); border:1.5px solid var(--prim); border-radius:var(--r-lg); padding:16px; margin:-4px 0 8px}
.bp-inline-h{display:flex; justify-content:space-between; align-items:baseline; gap:8px; flex-wrap:wrap}
.mm-list{display:flex; flex-direction:column; gap:8px; max-height:52vh; overflow:auto}
.mm-row{display:flex; justify-content:space-between; align-items:center; gap:12px; flex-wrap:wrap; padding:8px 0; border-bottom:1px solid var(--line2)}
.mm-n{display:flex; flex-direction:column; min-width:0} .mm-n b{font-size:13px}
/* barre d'onglets en bas (téléphone uniquement) */
.tabbar{display:none}
@media (max-width:940px){
  .tabbar{display:grid; grid-template-columns:repeat(5, 1fr); position:fixed; left:0; right:0; bottom:0; z-index:60; background:var(--surface);
    border-top:1px solid var(--line); box-shadow:0 -4px 16px rgba(27,35,30,.06); padding:8px max(8px, env(safe-area-inset-right, 0px)) calc(8px + env(safe-area-inset-bottom, 0px)) max(8px, env(safe-area-inset-left, 0px))}
  .tb-it{display:flex; flex-direction:column; align-items:center; gap:4px; border:0; background:none; font:inherit; font-size:11px; font-weight:700; color:var(--ink2); cursor:pointer; padding:4px 0; min-width:0}
  .tb-it.on{color:var(--prim)}
  .tb-it.on svg{stroke-width:2.4}
  .tb-plus{margin-top:-20px}
  .tb-fab{width:48px; height:48px; border-radius:50%; background:var(--prim); color:#fff; display:grid; place-items:center; box-shadow:0 8px 20px rgba(12,122,80,.35)}
  .tb-plus.on{color:var(--prim)}
  .main-in{padding-bottom:calc(96px + env(safe-area-inset-bottom, 0px))}
  .pf-save{bottom:calc(80px + env(safe-area-inset-bottom, 0px))}
  .toast, #toast{bottom:calc(88px + env(safe-area-inset-bottom, 0px))}
}
@media (max-width:940px){ .body-panel{bottom:calc(72px + env(safe-area-inset-bottom, 0px))} }
/* téléphone : une seule façon de faire — le « + » de la barre remplace « Saisie rapide » de l'accueil, « Plus » remplace ☰ */
@media (max-width:940px){ .dash-head .btn, #burger{display:none} }
/* alertes : une couleur par sorte (petite icône) */
.alert-row.k-test .al-ic{background:var(--sable); color:var(--on-sable)}
.alert-row.k-qual .al-ic{background:var(--brume); color:var(--on-brume)}
.alert-row.k-load .al-ic{background:var(--attention); color:var(--lv-at)}
/* ===== Évolution (v26) ===== */
.evo-moved{display:grid; grid-template-columns:repeat(4, minmax(0,1fr)); gap:12px; margin-bottom:16px}
.evo-tile{display:flex; flex-direction:column; gap:4px; text-align:left; font:inherit; color:var(--ink); background:var(--surface); border:1px solid var(--line2); border-radius:var(--r-lg); padding:16px; box-shadow:var(--sh-card); cursor:pointer; min-width:0; transition:box-shadow .15s}
.evo-tile:hover{box-shadow:var(--sh-hover)}
.evo-tile .l{font-size:13px; font-weight:700; color:var(--ink2); line-height:1.2}
.evo-tile .v b{font-size:24px; font-weight:800; letter-spacing:-.5px}
.evo-tile-f{display:flex; justify-content:space-between; align-items:flex-end; gap:8px}
.evo-tile-f em, .evo-trend{font-style:normal; font-size:13px; font-weight:800}
.good{color:var(--prim)} .bad{color:var(--lv-at)} .neutral{color:var(--ink2)}
.evo-pick{display:flex; gap:8px; margin:12px 0 16px}
.evo-pick .pill{border:0; cursor:pointer; padding:8px 12px; font-size:12px}
.evo-pick .pill.on{background:var(--ink); color:var(--surface)}
.evo-chart{position:relative}
.evo-chart svg{display:block; width:100%; height:auto; touch-action:pan-y}
.evo-tip{position:absolute; z-index:3; pointer-events:none; background:var(--ink); color:var(--surface); border-radius:var(--r-md); padding:8px 12px; display:flex; flex-direction:column; gap:2px; font-size:12px; white-space:nowrap; box-shadow:var(--sh-hover)}
.evo-tip b{font-size:14px} .evo-tip em{font-style:normal; opacity:.75}
.evo-foot{display:flex; justify-content:space-between; gap:8px; flex-wrap:wrap; margin-top:8px}
.q-list{display:flex; flex-direction:column; gap:12px; margin-top:16px}
.q-row{display:grid; grid-template-columns:96px minmax(0,1fr) 64px; gap:12px; align-items:center}
.q-n{font-size:13px; font-weight:700}
.q-track{position:relative; height:8px; border-radius:999px; background:var(--track)}
.q-seg{position:absolute; top:0; bottom:0; border-radius:999px} .q-seg.up{background:var(--lv-tb)} .q-seg.down{background:var(--attention)}
.q-dot{position:absolute; top:50%; width:12px; height:12px; border-radius:50%; transform:translate(-50%,-50%); box-shadow:0 0 0 2px var(--surface)}
.q-dot.start{background:var(--g-400)} .q-dot.now{background:var(--prim)}
.q-tg{position:absolute; top:-4px; bottom:-4px; width:2px; background:var(--ink); transform:translateX(-1px)}
.q-v{display:flex; align-items:baseline; justify-content:flex-end; gap:4px} .q-v b{font-size:16px} .q-v em{font-style:normal; font-size:12px; font-weight:800}
.q-v em.good{color:var(--prim)} .q-v em.bad{color:var(--lv-at)}
.q-leg{display:flex; gap:16px; margin-top:16px; font-size:12px; color:var(--ink2)} .q-leg span{display:inline-flex; align-items:center; gap:8px}
.q-leg .q-dot, .q-leg .q-tg{position:static; transform:none; display:inline-block} .q-leg .q-tg{height:12px; width:2px}
.pr-item .pr-v{white-space:nowrap}
@media (max-width:940px){ .evo-moved{grid-template-columns:repeat(2, minmax(0,1fr))} }
@media (max-width:520px){ .q-row{grid-template-columns:80px minmax(0,1fr) 56px; gap:8px} }
/* Programmation (v20) : frise sans défilement façon timeline, bulles, bloc sélectionné, bibliothèque de blocs, planning de tous les athlètes. */
.pz-card{padding:16px 20px 16px}
.pz-bar{display:flex; justify-content:space-between; align-items:center; gap:8px; flex-wrap:wrap; margin-bottom:16px}
.pz-nav{display:flex; align-items:center; gap:8px; flex-wrap:wrap}
.pz-today{border:1px solid var(--bord); background:var(--surface); font:inherit; font-size:13px; font-weight:700; padding:8px 16px; border-radius:999px; cursor:pointer}
.pz-today:hover{border-color:var(--prim); color:var(--prim)}
.pz-range{font-size:13px; font-weight:700; color:var(--ink2); margin-left:8px; white-space:nowrap}
.pz{position:relative; --wk:7.69%; --dy:1%}
/* en-tête : mois, puis lundis et jours en gris */
.pz-months{position:relative; height:22px}
.pz-months span{position:absolute; top:0; height:100%; font-size:12px; font-weight:800; color:var(--ink); padding-left:8px; border-left:1px solid var(--bord); white-space:nowrap; overflow:hidden; text-overflow:ellipsis; box-sizing:border-box}
.pz-weeks{position:relative; height:24px; border-bottom:1px solid var(--line);
  background-image:linear-gradient(90deg, var(--bord) 1px, transparent 1px), linear-gradient(90deg, var(--line) 1px, transparent 1px);
  background-size:var(--wk) 9px, var(--dy) 4px; background-repeat:repeat-x; background-position:left bottom, left bottom}
.pz-weeks.sem, .pz-weeks.an{background-image:linear-gradient(90deg, var(--bord) 1px, transparent 1px); background-size:var(--wk) 7px}
.pz-weeks span{position:absolute; top:3px; font-size:11px; font-weight:600; color:var(--ink-mute); transform:translateX(4px); font-variant-numeric:tabular-nums}
.pz-weeks.an span{font-size:11px}
.pz-weeks span.cur{color:var(--prim); font-weight:800}
/* bande des saisons et jalons */
.pz-macros{position:relative; height:26px; margin-top:8px}
.pz-macro{position:absolute; top:0; height:22px; border:0; border-radius:999px; background:var(--ink); color:#fff; font:inherit; font-size:11px; font-weight:700; padding:0 12px; text-align:left; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; cursor:pointer}
.pz-mss{position:relative; margin-top:8px}
.pz-ms{position:absolute; display:inline-flex; align-items:center; gap:8px; height:22px; border:0; background:none; padding:0; font:inherit; font-size:11px; font-weight:700; color:var(--ink3); white-space:nowrap; cursor:pointer; transform:translateX(-6px); z-index:3}
.pz-ms i{width:11px; height:11px; border-radius:4px; transform:rotate(45deg); background:var(--prim); box-shadow:0 0 0 2px var(--surface)}
.pz-ms.compet i{background:var(--lv-am)} .pz-ms.obj i{background:var(--lv-at)}
.pz-ms em{font-style:normal; font-size:11px; font-weight:800; background:var(--ink); color:var(--surface); padding:2px 8px; border-radius:999px}
.pz-ms.past{opacity:.5} .pz-ms.past em{background:var(--bord); color:var(--ink2)}
.pz-ms:hover span{text-decoration:underline}
/* piste des blocs : colonnes des semaines, week-ends légèrement grisés (trimestre) */
.pz-lane{position:relative; margin-top:8px; border-radius:16px; background-color:var(--g-50);
  background-image:linear-gradient(90deg, var(--line) 1px, transparent 1px); background-size:var(--wk) 100%}
.pz-lane.trim{background-image:linear-gradient(90deg, var(--line) 1px, transparent 1px), linear-gradient(90deg, transparent 71.43%, rgba(27,35,30,.028) 71.43%); background-size:var(--wk) 100%, var(--wk) 100%}
.pz-empty{position:absolute; left:16px; top:50%; transform:translateY(-50%); font-size:13px; color:var(--ink2); font-weight:600; max-width:90%}
.pz-now{position:absolute; top:22px; bottom:0; background:rgba(12,122,80,.07); border-left:2px solid var(--prim); pointer-events:none; z-index:2; min-width:2px}
.pz-now span{position:absolute; top:2px; left:4px; font-size:11px; font-weight:800; color:#fff; background:var(--prim); padding:2px 8px; border-radius:999px; white-space:nowrap}
.pz-drop{position:absolute; top:6px; bottom:6px; border:2px dashed var(--prim); border-radius:16px; background:rgba(12,122,80,.06); pointer-events:none}
/* bloc */
.pz-blk{position:absolute; box-sizing:border-box; border-radius:16px; background:var(--fb); color:var(--ff); padding:8px 12px 0; overflow:hidden; cursor:pointer; user-select:none; touch-action:none;
  display:flex; flex-direction:column; gap:1px; box-shadow:inset 0 0 0 1px rgba(27,35,30,.06); transition:box-shadow .15s, transform .15s; z-index:1}
.pz-blk:hover{box-shadow:inset 0 0 0 1px rgba(27,35,30,.08), 0 6px 18px rgba(27,35,30,.14); z-index:4}
.pz-blk.cur{box-shadow:inset 0 0 0 2px var(--ff)}
.pz-blk.sel{box-shadow:0 0 0 2.5px var(--surface), 0 0 0 4.5px var(--ink); z-index:3}
.pz-blk.cutl{border-top-left-radius:4px; border-bottom-left-radius:4px} .pz-blk.cutr{border-top-right-radius:4px; border-bottom-right-radius:4px}
.pz-blk.cutl::before, .pz-blk.cutr::after{content:""; position:absolute; top:0; bottom:0; width:10px; z-index:1}
.pz-blk.cutl::before{left:0; background:linear-gradient(90deg, rgba(27,35,30,.10), transparent)} .pz-blk.cutr::after{right:0; background:linear-gradient(270deg, rgba(27,35,30,.10), transparent)}
.pz-blk.dragging{cursor:grabbing; z-index:6; box-shadow:var(--shadow-pop); opacity:.95}
.pz-blk-t{display:flex; flex-direction:column; min-width:0}
.pz-blk-t b{font-size:13px; font-weight:800; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; line-height:1.2}
.pz-blk-t span{font-size:11px; font-weight:700; opacity:.8; white-space:nowrap; overflow:hidden; text-overflow:ellipsis}
.pz-blk.compact{padding-top:4px} .pz-blk.compact .pz-blk-t b{font-size:12px}
.pz-blk-w{position:absolute; left:6px; right:6px; bottom:5px; height:16px}
.pz-blk-w i{position:absolute; bottom:0; height:var(--h); box-sizing:border-box; border:0 solid transparent; border-width:0 1.5px; background-clip:padding-box; background-color:var(--t); border-radius:4px 4px 2px 2px; opacity:.9}
.pz-blk-w i.past{opacity:.45}
.pz-blk-w i.now{opacity:1; box-shadow:0 0 0 1.5px var(--surface), 0 0 0 3px var(--ink)}
.pz-blk.compact .pz-blk-w{height:12px}
.pz-h{position:absolute; top:0; bottom:0; width:10px; cursor:ew-resize; z-index:2}
.pz-h.l{left:0} .pz-h.r{right:0}
.pz-h::after{content:""; position:absolute; top:50%; left:3px; width:3px; height:22px; transform:translateY(-50%); border-radius:4px; background:currentColor; opacity:0; transition:opacity .15s}
.pz-blk:hover .pz-h::after{opacity:.35}
.pz-seances{position:relative; height:12px; margin-top:4px}
.pz-dot{position:absolute; top:3px; width:7px; height:7px; border-radius:50%; background:var(--ink2); transform:translateX(-3.5px)}
/* légende et blocs vides */
.pz-foot{display:flex; justify-content:space-between; align-items:center; gap:8px 16px; flex-wrap:wrap; margin-top:16px; padding-top:12px; border-top:1px solid var(--line2)}
.pz-legend{display:flex; flex-wrap:wrap; gap:8px 16px; font-size:11px; color:var(--ink2); font-weight:600}
.pz-legend span{display:inline-flex; align-items:center; gap:8px}
.pz-legend i{width:10px; height:10px; border-radius:4px}
.pz-legend i.ms{background:var(--prim); transform:rotate(45deg) scale(.85)} .pz-legend i.dot{width:7px; height:7px; border-radius:50%; background:var(--ink2)}
.pz-empties{display:flex; flex-wrap:wrap; align-items:center; gap:4px; font-size:11px; color:var(--ink2); font-weight:700}
.pz-empties .gz-chip{padding:4px 8px; font-size:11px; border-radius:999px; font-weight:800; cursor:grab}
/* bulle au survol */
.pz-tip{position:fixed; z-index:300; max-width:min(420px, 92vw); background:var(--surface); color:var(--ink); border-radius:16px; padding:12px 16px; box-shadow:0 18px 44px rgba(20,40,30,.22), 0 0 0 1px rgba(27,35,30,.06); pointer-events:none; font-size:12px}
.pt-h{display:flex; align-items:center; gap:8px} .pt-h b{font-size:14px}
.pt-dot{width:12px; height:12px; border-radius:4px; border:2px solid; flex:0 0 auto}
.pt-s{color:var(--ink2); font-size:12px; margin:2px 0 8px}
.pt-w{display:flex; flex-direction:column; gap:3px}
.pt-w > div{display:flex; align-items:baseline; gap:8px; padding:3px 8px; border-radius:8px}
.pt-w > div.on{background:var(--chip)}
.pt-w i{width:9px; height:9px; border-radius:4px; flex:0 0 auto; align-self:center}
.pt-w b{width:24px; flex:0 0 auto}
/* bloc sélectionné */
.pzd-head{display:flex; justify-content:space-between; align-items:flex-start; gap:12px; flex-wrap:wrap; padding-left:16px; border-left:5px solid var(--ff)}
.pzd-act{gap:8px}
.pzd-lifts{display:flex; flex-wrap:wrap; align-items:center; gap:8px; margin:16px 0 12px}
.pzd-lifts .l{font-size:12px; font-weight:700; color:var(--ink2); margin-right:4px}
.pzd-lift{display:inline-flex; align-items:center; gap:8px; border:1.5px solid var(--bord); background:var(--surface); font:inherit; font-size:12px; font-weight:700; padding:4px 12px; border-radius:999px; cursor:pointer; color:var(--ink2)}
.pzd-lift em{font-style:normal; font-weight:600; font-size:11px; color:var(--ink2); opacity:.8}
.pzd-lift.on{border-color:var(--prim); background:var(--menthe); color:var(--on-menthe)}
.pzd-lift:disabled{cursor:default}
.pzd-t td{vertical-align:middle}
.pzd-t tr.pzd-now td{background:var(--g-50)} .pzd-t tr.pzd-now td:first-child{box-shadow:inset 3px 0 0 var(--ink)}
.pzd-type{display:inline-flex; align-items:center; gap:8px; font-weight:700; font-size:12px}
.pzd-type::before{content:""; width:10px; height:10px; border-radius:4px; background:var(--t)}
.pzd-load{display:inline-block; width:46px; height:6px; border-radius:999px; background:var(--track); margin-right:8px; vertical-align:middle; overflow:hidden}
.pzd-load i{display:block; height:100%; background:var(--ink3); border-radius:999px}
.pzd-kg{display:inline-flex; gap:4px; margin-right:8px; white-space:nowrap; font-size:12px}
.rc-txt{width:100%; margin-top:12px; font:12.5px/1.5 ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; padding:12px; border-radius:12px; border:1px solid var(--bord); background:var(--chip); resize:vertical; box-sizing:border-box}
/* bibliothèque */
.tpl-grid{display:grid; grid-template-columns:repeat(auto-fill, minmax(230px, 1fr)); gap:12px}
.tpl{display:flex; flex-direction:column; gap:8px; border:1px solid var(--line); border-radius:16px; padding:16px; background:var(--surface); position:relative; transition:box-shadow .15s}
.tpl:hover{box-shadow:var(--shadow-pop)}
.tpl::before{content:""; position:absolute; left:14px; right:14px; top:0; height:3px; border-radius:0 0 4px 4px; background:var(--ff); opacity:.5}
.tpl-h{display:flex; align-items:center; gap:8px}
.tpl-h .sub{margin-left:auto}
.tpl-n{font-size:16px; letter-spacing:-.2px}
.tpl-bars{display:flex; align-items:flex-end; gap:4px; height:30px}
.tpl-bars i{flex:1; background:var(--t); border-radius:4px 4px 2px 2px; opacity:.9}
.tpl-w{display:flex; flex-direction:column; gap:1px; font-size:12px; color:var(--ink3)}
.tpl-w b{display:inline-block; width:24px; color:var(--ink)}
.tpl-d{flex:1}
.tpl .btn{align-self:flex-start}
.ta-prev{background:var(--chip); border-radius:16px; padding:8px 12px; display:flex; flex-direction:column; gap:4px; font-size:12px}
.ta-row{display:flex; align-items:baseline; gap:8px; flex-wrap:wrap}
.ta-row i{width:9px; height:9px; border-radius:4px; align-self:center} .ta-row b{width:24px}
.ta-row em{font-style:normal; font-weight:700; color:var(--on-menthe); margin-left:auto}
/* planning de tous les athlètes */
.ath-tools{display:flex; gap:8px; align-items:center; flex-wrap:wrap}
.ath-tools #ath-q{flex:1 1 220px}
.ap-grid{display:flex; flex-direction:column}
.ap-row{display:grid; grid-template-columns:190px minmax(0, 1fr); gap:12px; align-items:center}
.ap-headrow{margin-bottom:4px}
.ap-whohead{font-size:11px; font-weight:800; letter-spacing:.8px; text-transform:uppercase; color:var(--ink2); align-self:end; padding-bottom:8px}
.ap-body{display:flex; flex-direction:column; gap:8px}
.ap-who{display:flex; align-items:center; gap:8px; border:0; background:none; font:inherit; color:var(--ink); text-align:left; cursor:pointer; padding:4px; border-radius:12px; min-width:0}
.ap-who:hover{background:var(--chip)}
.ap-who b{display:block; font-size:13px; white-space:nowrap; overflow:hidden; text-overflow:ellipsis} .ap-who .sub{display:block; font-size:11px}
.ap-who .ac-av{width:32px; height:32px; flex-basis:32px; border-radius:8px; font-size:12px}
.ap-lane{margin-top:0}
.ap-ms{position:absolute; top:-4px; width:9px; height:9px; border-radius:2px; transform:translateX(-4.5px) rotate(45deg); background:var(--prim); box-shadow:0 0 0 2px var(--surface); z-index:3}
.ap-ms.compet{background:var(--lv-am)} .ap-ms.obj{background:var(--lv-at)}
.ap-body .pz-now{top:0; left:calc(202px + (100% - 202px) * 0)}
.ap-nowwrap{position:absolute; top:0; bottom:0; left:202px; right:0; pointer-events:none}
.ap-nowwrap .pz-now{top:0}
@media (max-width:700px){
  .pz-card{padding:16px 12px}
  .pz-range{display:none}
  .ap-row{grid-template-columns:96px minmax(0, 1fr); gap:8px}
  .ap-who .ac-av{display:none} .ap-who .sub{display:none}
  .ap-nowwrap{left:104px}
  .pzd-act{width:100%}
  .pz-blk-t span{display:none}
}
.pz-now span{top:auto; bottom:4px}
.pz-mss:empty{margin-top:0}
/* bloc : texte en haut, piste fine des semaines collée en bas — jamais de chevauchement */
.pz-blk{padding:8px 12px 16px}
.pz-blk-w{left:8px; right:8px; bottom:6px; height:6px}
.pz-blk-w i{height:100%; border-radius:4px; border-width:0 1px}
.pz-blk-w i.now{box-shadow:0 0 0 1.5px var(--surface), 0 0 0 2.5px var(--ink)}
.pz-blk.compact{padding-bottom:16px} .pz-blk.compact .pz-blk-w{height:5px; bottom:5px}
/* aujourd'hui : ligne verte + pastille en haut (plus d'étiquette cachée derrière les blocs) */
.pz-now span{display:none}
.pz-now::before{content:""; position:absolute; top:-4px; left:-5px; width:8px; height:8px; border-radius:50%; background:var(--prim); box-shadow:0 0 0 2px var(--surface)}
/* Parcours « Nouveau client » : assistant de création en 4 étapes (une par écran) et carte « Accueil de <prénom> ». */

/* ---------- assistant : barre de progression ---------- */
.wz-bar{display:grid; grid-template-columns:repeat(4, minmax(0, 1fr)); gap:8px; margin:12px 0 16px}
.wz-bar button{border:0; background:none; padding:8px 0; cursor:pointer}
.wz-bar i{display:block; height:4px; border-radius:999px; background:var(--track); transition:background .2s}
.wz-bar button.done i, .wz-bar button.on i{background:var(--prim)}
.wz-bar button:hover:not(.on) i{background:var(--lv-tb)}

/* ---------- assistant : une étape ---------- */
.wz-pane{display:flex; flex-direction:column; gap:12px}
.wz-lead{margin:0}
.wz-err input{border-color:var(--attention-fg)}
.wz-msg{color:var(--attention-fg); font-size:13px; font-weight:700; margin:0}
.wz-plus{border:1px dashed var(--bord); border-radius:16px; padding:12px 16px}
.wz-plus > summary{cursor:pointer; font-size:13px; font-weight:700; color:var(--prim)}
.wz-plus[open] > summary{margin-bottom:12px}
.wz-plus .frow + .frow{margin-top:12px}

/* prestations : grandes cases à cocher */
.wz-tiles{display:grid; grid-template-columns:repeat(auto-fill, minmax(min(100%, 240px), 1fr)); gap:8px}
.wz-tile{display:flex; align-items:center; gap:12px; min-height:56px; padding:12px 16px; border:1px solid var(--bord); border-radius:16px;
  background:var(--surface); color:var(--ink); font:inherit; font-size:14px; font-weight:600; line-height:1.4; text-align:left; cursor:pointer}
.wz-tile:hover{border-color:var(--prim)}
.wz-tile.ok{border-color:var(--prim); background:var(--menthe)}
.wz-tick{flex:0 0 20px; width:20px; height:20px; border-radius:8px; border:2px solid var(--bord); background:var(--surface); display:grid; place-items:center}
.wz-tile.ok .wz-tick{background:var(--prim); border-color:var(--prim)}
.wz-tile.ok .wz-tick::after{content:"✓"; color:var(--prim-fg); font-size:12px; font-weight:800; line-height:1}

/* objectifs */
#wz-objs{display:flex; flex-direction:column; gap:8px}
.wz-obj{background:var(--chip); border-radius:16px; padding:16px; display:flex; flex-direction:column; gap:12px}
.wz-obj-h{display:flex; justify-content:space-between; align-items:center; gap:8px; flex-wrap:wrap}
.wz-obj .seg2{background:var(--surface)}
.wz-obj .seg2 button.on{background:var(--menthe); color:var(--on-menthe); box-shadow:none}
.wz-obj .field input{background:var(--surface)}
#wz-addobj{align-self:flex-start}
.wz-next-hint{background:var(--menthe); color:var(--on-menthe); border-radius:12px; padding:12px 16px; font-size:13px; line-height:1.5}

/* pied : Précédent · Terminer plus tard · Suivant */
.wz-foot{display:flex; align-items:center; gap:8px; flex-wrap:wrap; margin-top:24px}
.wz-sp{flex:1 1 0}
@media (max-width:560px){
  .wz-foot .btn{flex:1 1 0; justify-content:center}
  .wz-sp{display:none}
  .wz-foot #wz-prev{order:1} .wz-foot #wz-next{order:2}
  .wz-foot #wz-later{order:3; flex:1 1 100%}
}

/* ---------- carte « Accueil de <prénom> » (Aperçu) et parcours d'accueil (Dossier → Entretien) ---------- */
.board:not(.is-editing) .blk[data-blk="accueil"]:has(> .blk-body:empty){display:none}
.acc-h{display:flex; justify-content:space-between; align-items:flex-start; gap:16px}
.acc-ht{display:flex; flex-direction:column; gap:4px; min-width:0; flex:1 1 auto}
.acc-score{font-size:16px; font-weight:700; color:var(--ink2); white-space:nowrap; line-height:1}
.acc-score b{font-size:28px; font-weight:800; color:var(--prim)}
.acc-bar{height:8px; border-radius:999px; background:var(--track); margin:16px 0 8px; overflow:hidden}
.acc-bar i{display:block; height:100%; border-radius:999px; background:var(--prim); transition:width .3s}
.acc-list{list-style:none; margin:0; padding:0; display:flex; flex-direction:column; gap:4px}
.acc-row{display:grid; grid-template-columns:36px minmax(0, 1fr) auto; align-items:center; gap:12px; padding:8px 12px 8px 4px; border-radius:16px}
.acc-row.next{background:var(--chip)}
.acc-t{display:flex; flex-direction:column; gap:4px; min-width:0}
.acc-t b{font-size:14px; font-weight:700; line-height:1.4}
.acc-t .sub{font-size:13px; line-height:1.4}
.acc-row.done .acc-t b{color:var(--ink2)}
.acc-act{white-space:nowrap}

/* case ronde : 36 px pour le pouce, cercle de 24 px */
.acc-chk{width:36px; height:36px; border:0; background:none; padding:0; display:grid; place-items:center; cursor:pointer; border-radius:999px}
.acc-chk > span{width:24px; height:24px; border-radius:999px; border:2px solid var(--bord); background:var(--surface); display:grid; place-items:center; transition:background .15s, border-color .15s}
.acc-chk:hover:not(:disabled) > span{border-color:var(--prim)}
.acc-chk:disabled{cursor:default}
.acc-row.done .acc-chk > span, .acc-chk.on > span{background:var(--prim); border-color:var(--prim)}
.acc-row.done .acc-chk > span::after, .acc-chk.on > span::after{content:"✓"; color:var(--prim-fg); font-size:13px; font-weight:800; line-height:1}

.acc-foot{display:flex; justify-content:space-between; align-items:flex-start; gap:16px; flex-wrap:wrap; margin-top:12px; padding-top:12px; border-top:1px solid var(--line2)}
.acc-more{flex:1 1 280px; min-width:0}
.acc-more > summary{cursor:pointer; font-size:13px; font-weight:700; padding:8px 0}
.acc-more[open] > summary{margin-bottom:4px}
.acc-list.sm .acc-row{padding-top:4px; padding-bottom:4px}
.acc-list.sm .acc-t b{font-weight:600}
.acc-link{border:0; background:none; padding:8px 0; color:var(--ink2); font:inherit; font-size:13px; font-weight:700; cursor:pointer}
.acc-link:hover{color:var(--prim)}

/* terminé : une seule ligne */
.acc-closed{display:flex; align-items:center; gap:12px; flex-wrap:wrap}
.acc-closed .acc-t{flex:1 1 240px}
.acc-btns{gap:8px}

@media (max-width:560px){
  .acc-row{grid-template-columns:36px minmax(0, 1fr)}
  .acc-act{grid-column:2; justify-self:start}
}
/* l'assistant reste ancré en haut : le titre et la barre ne bougent pas d'une étape à l'autre */
.modal:has(#wz-form){margin:0 0 auto}
/* Séances ↔ Programmation : colonne « Séances » du bloc sélectionné et rappel du lien dans le créateur. */
.pzd-t td.pzd-sea{white-space:nowrap; cursor:default}
.pzd-sea-n, .pzd-sea-add{font:inherit; font-size:12px; font-weight:700; padding:4px 12px; border-radius:999px; cursor:pointer; vertical-align:middle}
.pzd-sea-n{border:1px solid transparent; background:var(--menthe); color:var(--on-menthe); margin-right:4px}
.pzd-sea-n:hover{border-color:var(--prim)}
.pzd-sea-add{border:1px dashed var(--bord); background:var(--surface); color:var(--ink2)}
.pzd-sea-add:hover:not(:disabled){border-style:solid; border-color:var(--prim); color:var(--prim)}
.pzd-sea-add:disabled{cursor:default; opacity:.5}
/* créateur : séance liée à une semaine d'un bloc */
.sea-link{flex:1 1 100%; display:flex; align-items:center; justify-content:space-between; gap:8px; padding:8px 12px; border-radius:12px; background:var(--menthe); color:var(--on-menthe); font-size:13px}
.sea-unlink{border:0; background:none; color:inherit; font:inherit; font-size:12px; padding:4px 8px; border-radius:8px; cursor:pointer}
.sea-unlink:hover{background:var(--surface)}
/* import d'un classeur Excel (Intégrations) : tuiles de l'aperçu et du rapport, onglets reconnus, valeurs non reconnues */
.xl-tiles{display:grid; grid-template-columns:repeat(3, minmax(0,1fr)); gap:8px; margin-top:16px}
.xl-tile{display:flex; flex-direction:column; gap:4px; padding:12px 16px; border-radius:16px; background:var(--chip); min-width:0}
.xl-tile b{font-size:28px; line-height:1.2; font-weight:800; color:var(--ink)}
.xl-tile .hint{line-height:1.4}
.xl-tile.off b{color:var(--ink-mute)}
.xl-tile.ok{background:var(--menthe)}
.xl-tile.warn{background:var(--attention)}
.xl-sheets{display:flex; flex-wrap:wrap; gap:8px; margin-top:16px}
.xl-sheets .pill{white-space:normal}
.xl-unk{margin-top:16px; font-size:13px; color:var(--ink2)}
.xl-unk summary{cursor:pointer; font-weight:700; color:var(--ink)}
.xl-unk ul{margin:8px 0 0; padding-left:16px; max-height:200px; overflow:auto; display:flex; flex-direction:column; gap:4px; line-height:1.4}
.xl-target{margin-top:16px}
.xl-diff{margin-top:12px; font-size:14px; color:var(--ink2)}
.xl-diff b{color:var(--ink)}
.xl-msg{margin-top:12px; padding:12px 16px; border-radius:12px; font-size:13px; line-height:1.5; background:var(--chip); color:var(--ink2)}
.xl-msg.warn{background:var(--attention); color:var(--attention-fg)}
.xl-actions{display:flex; justify-content:flex-end; gap:8px; margin-top:16px; flex-wrap:wrap}
.xl-bar{height:8px; border-radius:999px; background:var(--track); overflow:hidden; margin-top:12px}
.xl-bar span{display:block; height:100%; width:0; background:var(--prim); transition:width .2s}
@media (max-width:600px){
  .xl-tiles{grid-template-columns:repeat(2, minmax(0,1fr))}
  .xl-report{grid-template-columns:1fr}
  .xl-actions .btn{flex:1 1 auto}
}
/* Famille de protocoles « Sauts » : jeton doux sable, sur le modèle course (brume) / vélo (sauge) de 24-harmonie.css */
.card.fam-saut{background:var(--sable); border-color:transparent}
.card.fam-saut .pic{background:var(--surface)}
.cat-card.fam-saut .pic{background:var(--sable)}
.card.fam-saut .empty{background:rgba(255,255,255,.6)}
/* Batterie de sauts : 19 champs courts en grille régulière, cases alignées en bas même si une étiquette passe à la ligne */
.pp-params:has([data-pp="hop1g"]){display:grid; grid-template-columns:repeat(auto-fill, minmax(140px, 1fr)); gap:8px; align-items:end}
/* ===== Accessibilité, iPhone et cohérence (v27, audits du 26 oct. 2026) — règles communes du système =====
   Jetons : contrastes WCAG AA (texte 4,5:1, bordures de champs 3:1), taille des champs, cibles tactiles. */
:root{
  --ink-mute:#646E66;          /* numéros discrets : 5,3:1 sur blanc (avant #7A847C : 3,9:1) */
  --lv-at-ink:#AD3D33;         /* texte « mauvais / supprimer » : 6,0:1 (le rouge --lv-at reste pour les remplissages) */
  --bord-field:#879089;        /* bordure des champs, sélecteurs, boutons secondaires : 3,3:1 (--bord reste pour les cartes) */
  --on-fill:var(--ink);        /* texte posé sur un remplissage clair (niveaux, zones) : foncé, jamais blanc */
  --fs-field:14px;             /* police des champs sur PC */
  --tap:44px;                  /* cible tactile minimale au doigt */
}
@media (pointer:coarse){ :root{--fs-field:16px} }   /* iPhone : 16 px = pas de zoom automatique de Safari */

/* ---------- champs de saisie : une taille, une bordure visible ---------- */
input:not([type="checkbox"]):not([type="radio"]):not([type="range"]):not([type="file"]), select, textarea{font-size:var(--fs-field)}
.field input, .field select, .field textarea, .ath-tools input, .search-pill, .xp-search{font-size:var(--fs-field)}
.field input, .field select, .field textarea, .ath-tools input, .search-pill, .sb-name, .sb-format, .xp-search,
#mob-grid select, #mob-grid input{border-color:var(--bord-field)}
.btn.sec, .btn.soft{border-color:var(--bord-field)}
#mob-grid select, #mob-grid input{height:36px; font-size:var(--fs-field)}

/* ---------- au doigt : toute cible fait au moins 44 × 44 px (le PC garde ses tailles) ---------- */
@media (pointer:coarse){
  .btn, .btn.sm, .seg2 button, .ftabs button, .fnav button, .seg-mob button, button.pill, .pill[role="button"],
  .ath-sel, select, .cyc-arrow, .icon-btn, .del-x, .nav-it, .nav-back, .pz-today, .dh-chip, .cyc-back, .sb-add,
  .ap-who, .pzd-sea-n, .pzd-sea-add, .pzd-lift, .bc-cmp, .fp-chip, .fsub button, .blk-add, .blk-edit, .stat-bar{min-height:var(--tap)}
  .cyc-arrow, .icon-btn, .del-x, .fnav button, .fsub button{min-width:var(--tap)}
  .field input, .field select, #mob-grid select, #mob-grid input{min-height:var(--tap)}
  .bc-cmp{display:inline-flex; align-items:center; gap:8px; padding:0 8px}
  .bc-cmp input{width:20px; height:20px}
  input[type="range"]{height:var(--tap)}
  .drag-h{width:var(--tap); height:var(--tap); opacity:1; color:var(--ink2)}
}

/* ---------- lien d'évitement, focus ---------- */
.skip-link{position:fixed; left:16px; top:-64px; z-index:100; background:var(--ink); color:var(--surface); padding:12px 16px; border-radius:var(--r-md); font-weight:700; text-decoration:none}
.skip-link:focus{top:calc(8px + env(safe-area-inset-top, 0px))}
.main-in:focus{outline:none}
.modal h2:focus{outline:none}

/* ---------- menu latéral au téléphone : fermé = invisible (et inerte), bouton « Fermer » dans le menu ouvert ---------- */
.side-close{display:none}
@media (max-width:940px){
  .sidebar{transition:transform .22s, visibility 0s .22s}
  .sidebar:not(.open){visibility:hidden}
  .sidebar.open{visibility:visible; transition:transform .22s, visibility 0s}
  .side-close{display:flex; width:var(--tap); height:var(--tap); flex:0 0 var(--tap); margin-left:auto}
}

/* ---------- contrastes ---------- */
.bad, .q-v em.bad, .evo-tile-f em.bad{color:var(--lv-at-ink)}
.alert-row.k-load .al-ic{color:var(--lv-at-ink)}
.seg-mob button.sel{color:var(--on-fill)}
.zs-top, .zs-seg b{color:var(--on-fill); text-shadow:none}
.zs-top[style*="--z6"], .zs-seg[style*="--z6"] b, .zs-top[style*="--z7"], .zs-seg[style*="--z7"] b{color:#fff}
.zs-top .znm{opacity:1}
.cf-pen{opacity:1; color:var(--ink2)}
@media (hover:hover){ .cf-pen{opacity:0} button.cf:hover .cf-pen, button.cf:focus-visible .cf-pen{opacity:1} }
/* segment sélectionné : contour visible en plus du fond blanc (le fond seul était à 1,1:1) */
.seg2 button.on, .ftabs button.on{box-shadow:inset 0 0 0 1.5px var(--ink-mute)}

/* ---------- bouton destructif : 3e variante du système (texte rouge, sans fond) ---------- */
.btn.danger{background:none; border:0; color:var(--lv-at-ink); font-weight:700; padding-left:8px; padding-right:8px}
.btn.danger:hover:not(:disabled){background:var(--attention); color:var(--lv-at-ink); filter:none}
.modal .btn.danger{margin-right:auto}
/* suppression d'une ligne : corbeille grise, rouge au survol */
.del-x{display:inline-grid; place-items:center; width:36px; height:36px; padding:0; border:0; border-radius:999px; background:none; color:var(--ink2); cursor:pointer; vertical-align:middle}
.del-x:hover:not(:disabled), .del-x:focus-visible{background:var(--attention); color:var(--lv-at-ink)}
.del-x:disabled{opacity:.4; cursor:default}

/* ---------- toast avec action « Annuler » ---------- */
.toast.act{pointer-events:auto; display:flex; align-items:center; gap:12px; padding-right:8px}
.toast-act{border:0; background:var(--surface); color:var(--ink); font:inherit; font-weight:800; font-size:13px; padding:8px 16px; border-radius:999px; cursor:pointer; min-height:36px}
@media (pointer:coarse){ .toast-act{min-height:var(--tap)} }

/* ---------- état vide à l'intérieur d'une carte (composant commun, remplace l'ancien cadre pointillé .empty) ---------- */
.empty-in{display:flex; align-items:center; justify-content:space-between; gap:12px; flex-wrap:wrap; padding:16px; border-radius:var(--r-lg); background:var(--g-50); color:var(--ink2); font-size:13px; line-height:1.5}
.empty-in > span{min-width:0; flex:1 1 220px}
.card.fam-course .empty-in, .card.fam-velo .empty-in, .card.fam-saut .empty-in{background:rgba(255,255,255,.7)}
.empty-card .btn{white-space:nowrap}

/* ---------- Pour qui ? (pages de saisie par athlète) ---------- */
.who-bar{display:inline-flex; align-items:center; gap:8px; background:var(--surface); border:1.5px solid var(--bord-field); border-radius:999px; padding:4px 4px 4px 4px; min-height:var(--tap); white-space:nowrap; max-width:100%}
.who-av{width:36px; height:36px; flex:0 0 36px; border-radius:999px; background:var(--menthe); color:var(--on-menthe); display:grid; place-items:center; font-size:13px; font-weight:800}
.who-l{font-size:11px; font-weight:800; letter-spacing:.08em; text-transform:uppercase; color:var(--ink2)}
.who-bar select, .ath-bar.who-bar select{border:0; background:transparent; height:36px; min-width:0; max-width:100%; padding:0 8px 0 0; font-size:16px; font-weight:800; color:var(--ink); cursor:pointer}
.who-bar:focus-within{box-shadow:0 0 0 2px var(--prim)}
.who-bar select:focus-visible{outline:none}
.who-ask{display:flex; justify-content:space-between; align-items:center; gap:16px; flex-wrap:wrap; margin-top:16px; border:1.5px solid var(--attention-fg); background:var(--surface)}
.who-ask .ec-txt{display:flex; flex-direction:column; gap:4px; min-width:0; flex:1 1 320px}
.who-ask .kick{color:var(--attention-fg)}
.who-ask .row{gap:12px}
.who-locked{opacity:.4; filter:grayscale(.6); pointer-events:none; user-select:none}

/* ---------- carte « Ensuite » : jamais de texte vertical au téléphone ---------- */
.cyc-next b{white-space:normal; overflow:visible; text-overflow:clip}
@media (max-width:640px){
  .cyc-next{grid-template-columns:minmax(0,1fr); row-gap:4px}
  .cyc-next .kick{grid-row:auto; border:0; padding:0; margin:0}
  .cyc-next .sub{grid-column:1}
  .cyc-next-go{grid-column:1; grid-row:auto; white-space:normal}
}

/* ---------- jamais de texte coupé par « … » : il passe à la ligne ; dans les frises, il disparaît s'il ne tient pas (fitLabels) ---------- */
.mob-top .ttl, .ar-val, .blk-tools b, .ac-nm, .ap-who b, .nav-back{white-space:normal; overflow:visible; text-overflow:clip; overflow-wrap:anywhere; line-height:1.2}
.pz-blk-t b, .pz-blk-t span, .pz-months span, .pz-macro, .gz-t, .gz-f, .ct-l, .tl-phase .pn, .tl-phase .pf, .tl-phase .pd{text-overflow:clip}
.fit-hide{visibility:hidden}
/* frise au doigt : défilement vertical possible sur un bloc ; il ne se déplace qu'après un appui long (bloc « soulevé ») */
@media (pointer:coarse){ .pz-blk{touch-action:pan-y} }
.pz-blk.lifted{transform:scale(1.03); box-shadow:var(--shadow-pop); z-index:6}

/* ---------- graphiques : taille de texte constante, quelle que soit la largeur de la carte ---------- */

/* ---------- sélecteurs : un seul style (conteneur gris, pilule blanche active) ---------- */
.evo-pick{display:inline-flex; flex-wrap:wrap; gap:4px; background:var(--chip); border-radius:999px; padding:4px}
.evo-pick .pill{background:none; color:var(--ink2); font-size:13px; font-weight:700; padding:8px 16px}
.evo-pick .pill.on{background:var(--surface); color:var(--ink); box-shadow:var(--shadow), inset 0 0 0 1.5px var(--ink-mute)}

/* ---------- contrôle qualité final (27 oct. 2026) ---------- */
/* durée en deux cases (minutes + secondes) : pavé numérique au doigt, aucun « : » à taper */
.dur-in{display:flex; align-items:center; gap:4px}
.dur-in input{flex:1 1 0; min-width:0; width:auto}
.dur-in span{font-size:13px; font-weight:700; color:var(--ink2)}
/* mobilité de la saisie rapide : mêmes champs que partout (16 px au doigt, plus de zoom de Safari) */
.mob-ctl{border-radius:8px; border:1px solid var(--bord-field); background:var(--surface); padding:0 8px; color:var(--ink)}
.mob-dol{width:120px}
/* protocoles : conseils et valeurs refusées en texte qui passe à la ligne (jamais plus large que la carte) */
.pp-notes{margin:8px 0 0; padding:0 0 0 16px; display:flex; flex-direction:column; gap:4px; font-size:13px; color:var(--ink2); max-width:100%; overflow-wrap:anywhere}
.pp-notes.pp-bad{color:var(--lv-at-ink); font-weight:700}
.pp input[aria-invalid="true"]{border-color:var(--lv-at-ink); box-shadow:0 0 0 1px var(--lv-at-ink)}
/* restauration d'une sauvegarde : case « Remplacer » */
.rs-opt{display:flex; gap:8px; align-items:flex-start; margin-top:12px; font-weight:700; font-size:13px; cursor:pointer}
.rs-opt input{width:auto; height:auto; margin-top:4px}
/* aperçus PDF : la page tient dans la largeur (échelle --rp-z posée par fitPreview) et n'est jamais coupée à gauche */
.rp-preview{align-items:safe center}
.rp-preview .rp-page{zoom:var(--rp-z, .62)}
/* fenêtre ouverte : la page derrière ne défile plus sous le doigt */
body.modal-open{overflow:hidden}
.overlay{overscroll-behavior:contain; padding-top:max(4vh, calc(env(safe-area-inset-top, 0px) + 8px))}
@media (max-width:940px){
  /* séances : barre d'actions au-dessus de la barre d'onglets (comme « Enregistrer » du profil) */
  .sea-bar{bottom:calc(80px + env(safe-area-inset-bottom, 0px)); border-radius:16px; padding:8px}
  .sea-bar .row{gap:4px}
  /* sous-onglets de la fiche : fondu au bord droit = « il y a d'autres onglets » */
  .fsub{-webkit-mask-image:linear-gradient(90deg, #000 calc(100% - 24px), transparent); mask-image:linear-gradient(90deg, #000 calc(100% - 24px), transparent); padding-right:24px}
}
/* paysage au téléphone : barre d'onglets réduite aux icônes, en-têtes non collants (la place va au contenu) */
@media (max-width:940px) and (orientation:landscape) and (max-height:500px){
  .tabbar{padding-top:4px; padding-bottom:calc(4px + env(safe-area-inset-bottom, 0px))}
  .tb-it > span:not(.tb-fab){position:absolute; width:1px; height:1px; overflow:hidden; clip-path:inset(50%); white-space:nowrap}   /* masqué à l'écran, lu par VoiceOver */
  .tb-plus{margin-top:0}
  .tb-fab{width:40px; height:40px}
  .mob-top, .ftabs-wrap{position:static}
  .main-in{padding-bottom:calc(64px + env(safe-area-inset-bottom, 0px))}
  .pf-save, .sea-bar{bottom:calc(56px + env(safe-area-inset-bottom, 0px))}
  .toast, #toast{bottom:calc(60px + env(safe-area-inset-bottom, 0px))}
  .body-panel{bottom:calc(52px + env(safe-area-inset-bottom, 0px))}
}
/* frise : le numéro de la semaine en cours reste lisible au-dessus du trait « aujourd'hui » */
.pz-weeks span.cur{z-index:3; background:var(--surface); padding:0 4px; border-radius:4px; transform:translateX(8px)}
/* message (toast) au téléphone : toute la largeur, coins arrondis — plus de colonne étroite de 5 lignes */
@media (max-width:940px){
  .toast{left:16px; right:16px; transform:translateY(8px); border-radius:16px; text-align:center}
  .toast.on{transform:none}
  .toast.act{justify-content:space-between; text-align:left}
}
/* ---------- menu à 5 entrées + « + Saisir » (prototype v29) ---------- */
/* bouton « Saisir » en tête du menu (PC) ; au téléphone, c'est le « + » central de la barre d'onglets */
.side-plus{width:100%; justify-content:center}
.app.collapsed .side-plus{padding-left:0; padding-right:0}
.app.collapsed .side-plus span{display:none}
@media (max-width:940px){ .side-plus{display:none} }
/* « Réglages » tout en bas du menu */
.side-foot.nav-sec{gap:4px}
/* fenêtre « Saisir » : une action par ligne, grande cible */
.plus-list{display:flex; flex-direction:column; gap:8px; margin-top:16px}
.plus-list .sc-btn{min-height:56px; justify-content:center}
/* sélecteur des pages regroupées dans la fiche (Résultats, Évolution) */
.fparts{max-width:100%}
@media (max-width:940px){
  /* au téléphone, le « + » de la barre d'onglets fait déjà « Saisir » (réglé sur l'athlète de la fiche) : pas de doublon */
  #fh-plus{display:none}
  /* sélecteur sur une seule ligne qui défile, comme les sous-onglets */
  .fparts{display:flex; flex-wrap:nowrap; overflow-x:auto; scrollbar-width:none; width:max-content}
  .fparts button{flex:0 0 auto; white-space:nowrap}
}
/* Écrans de connexion : même carte, mêmes champs et mêmes boutons que le reste de l'app. */
.auth-page{min-height:100vh; min-height:100dvh; display:flex; align-items:center; justify-content:center; padding:16px; background:var(--bg)}
.auth-card{width:100%; max-width:420px; display:flex; flex-direction:column; gap:16px}
.auth-brand{display:flex; align-items:center; gap:12px}
.auth-brand img{width:40px; height:40px}
.auth-brand .t1{font-weight:700; font-size:14px}
.auth-title{font-size:24px; letter-spacing:-.6px}
.auth-card .lead{margin:0}
.auth-form{display:flex; flex-direction:column; gap:12px}
.auth-qr{display:block; width:200px; height:200px; margin:0 auto; background:#fff; border-radius:16px; padding:8px}
.auth-error[hidden]{display:none}
#auth-root[hidden],.app[hidden]{display:none}
