:root{
  --bg:#0d0f13; --surface:#16191f; --surface2:#1e222b; --surface3:#262b35;
  --line:#2a313d; --text:#eef1f6; --muted:#98a2b3; --faint:#5f6672;
  --accent:#2fe6a0; --accent-d:#06251a; --gold:#ffc043; --blue:#4aa8ff; --danger:#ff5d5d;
  --r:16px; --r-sm:12px;
  --safe-bottom:env(safe-area-inset-bottom,0px);
  --safe-top:env(safe-area-inset-top,0px);
}
*{box-sizing:border-box;margin:0;padding:0;-webkit-tap-highlight-color:transparent}
body{font-family:'Outfit',-apple-system,BlinkMacSystemFont,sans-serif;background:var(--bg);
  color:var(--text);line-height:1.5;overscroll-behavior-y:none}
.hidden{display:none!important}
.muted{color:var(--muted);font-size:13px}
.center{text-align:center}
.err{color:var(--danger);font-size:13px;min-height:18px;margin:8px 0 0}

/* ---------- Login ---------- */
.login{position:fixed;inset:0;background:var(--bg);display:flex;align-items:center;justify-content:center;padding:24px;z-index:200}
.login-card{width:100%;max-width:340px;text-align:center}
.login-card .logo{font-size:46px;margin-bottom:8px}
.login-card h1{font-size:30px;font-weight:800;letter-spacing:-.5px;margin-bottom:4px}
.login-card h1 b{color:var(--accent)}
.login-sub{color:var(--muted);font-size:14px}
.login-card input{width:100%;margin:20px 0 12px;padding:15px;border-radius:14px;
  border:1px solid var(--line);background:var(--surface2);color:var(--text);font-size:17px;font-family:inherit}
.login-card input:focus{outline:none;border-color:var(--accent)}
.btn-primary{width:100%;padding:15px;border:none;border-radius:14px;background:var(--accent);
  color:var(--accent-d);font-size:17px;font-weight:700;font-family:inherit;cursor:pointer}
.btn-primary:active{transform:scale(.98)}

/* ---------- Shell ---------- */
.wrap{max-width:560px;margin:0 auto;padding:calc(16px + var(--safe-top)) 14px 90px}
.hdr{display:flex;justify-content:space-between;align-items:center;margin-bottom:18px}
.hdr h1{font-size:21px;font-weight:800;letter-spacing:-.5px}
.hdr h1 b{color:var(--accent);font-weight:800}
.streak{background:var(--surface2);border:1px solid var(--line);border-radius:999px;
  padding:7px 14px;font-size:14px;font-weight:600;color:var(--gold);display:flex;align-items:center;gap:5px}
.skel{color:var(--faint);font-size:13px;padding:40px 0;text-align:center}

/* ---------- Cards & blocs ---------- */
.card{background:var(--surface);border:1px solid var(--line);border-radius:var(--r);padding:16px;margin-bottom:12px}
.card-h{font-size:12px;font-weight:600;color:var(--muted);text-transform:uppercase;letter-spacing:.7px;margin-bottom:12px}
.big{font-size:38px;font-weight:800;letter-spacing:-1px;line-height:1}
.big small{font-size:15px;font-weight:600;color:var(--muted)}
.row{display:flex;gap:9px}
.stat{flex:1;background:var(--surface2);border-radius:var(--r-sm);padding:12px;text-align:center}
.stat .l{font-size:11px;color:var(--muted);margin-bottom:5px}
.stat .v{font-size:19px;font-weight:700}
.stat .v small{font-size:11px;color:var(--muted);font-weight:500}
.bar{height:8px;border-radius:8px;background:var(--surface2);overflow:hidden}
.bar i{display:block;height:100%;background:var(--accent);transition:width .5s}
.bar.gold i{background:var(--gold)}
.btn{background:var(--accent);color:var(--accent-d);border:none;border-radius:var(--r-sm);
  padding:14px;font-size:15px;font-weight:700;cursor:pointer;width:100%;font-family:inherit}
.btn:active{transform:scale(.985)}
.btn.sec{background:var(--surface2);color:var(--text);border:1px solid var(--line)}
.btn.danger{background:transparent;color:var(--danger);border:1px solid rgba(255,93,93,.4)}
.btn.sm{padding:9px 12px;font-size:13px;width:auto}
input,select,textarea{background:var(--surface2);border:1px solid var(--line);color:var(--text);
  border-radius:10px;padding:12px;font-size:16px;width:100%;font-family:inherit}
input:focus,select:focus,textarea:focus{outline:none;border-color:var(--accent)}
textarea{min-height:64px;resize:vertical}
label{font-size:12px;color:var(--muted);display:block;margin-bottom:5px}
.field{margin-bottom:11px}
.g2{display:grid;grid-template-columns:1fr 1fr;gap:9px}
.g3{display:grid;grid-template-columns:1fr 1fr 1fr;gap:9px}
.section-title{font-size:12px;color:var(--muted);font-weight:600;text-transform:uppercase;letter-spacing:.6px;margin:18px 4px 10px}
.alert{border-radius:var(--r-sm);padding:11px 13px;font-size:13px;margin-top:11px;display:flex;gap:8px;align-items:flex-start;line-height:1.45}
.alert.ok{background:rgba(47,230,160,.1);color:var(--accent);border:1px solid rgba(47,230,160,.25)}
.alert.warn{background:rgba(255,192,67,.1);color:var(--gold);border:1px solid rgba(255,192,67,.25)}
.alert.info{background:rgba(74,168,255,.1);color:var(--blue);border:1px solid rgba(74,168,255,.25)}
.tip{background:linear-gradient(135deg,rgba(74,168,255,.1),rgba(47,230,160,.07));
  border:1px solid rgba(74,168,255,.2);border-radius:var(--r-sm);padding:13px;font-size:13px;line-height:1.5;margin-top:11px}
.tip b{color:var(--blue);font-weight:600}
.recap-line{display:flex;justify-content:space-between;padding:6px 0;font-size:14px;border-bottom:1px solid rgba(255,255,255,.06)}
.recap-line:last-child{border:none}
.recap-line b{font-weight:700}

/* ---------- Views ---------- */
.view{display:none;animation:fade .25s}
.view.active{display:block}
@keyframes fade{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}

/* ---------- Séance ---------- */
.daytab{display:flex;gap:7px;overflow-x:auto;padding-bottom:6px;margin-bottom:14px;scrollbar-width:none}
.daytab::-webkit-scrollbar{display:none}
.daytab button{flex-shrink:0;background:var(--surface2);border:1px solid var(--line);color:var(--muted);
  border-radius:999px;padding:8px 15px;font-size:13px;font-weight:600;cursor:pointer;font-family:inherit}
.daytab button.on{background:var(--accent);color:var(--accent-d);border-color:var(--accent)}
.ex{background:var(--surface);border:1px solid var(--line);border-radius:var(--r);padding:14px;margin-bottom:11px;transition:border-color .2s}
.ex.done{border-color:rgba(47,230,160,.4)}
.ex-top{display:flex;gap:11px;align-items:center}
.ex-num{width:46px;height:46px;border-radius:11px;background:var(--surface2);display:flex;align-items:center;
  justify-content:center;flex-shrink:0;font-size:16px;font-weight:700;color:var(--accent)}
.ex.done .ex-num{background:var(--accent);color:var(--accent-d)}
.ex-info{flex:1;min-width:0}
.ex-name{font-size:15px;font-weight:600;line-height:1.25}
.ex-meta{font-size:12px;color:var(--muted);margin-top:2px}
.ex-sets{font-size:14px;font-weight:700;color:var(--gold);white-space:nowrap}
.vid-toggle{margin-top:11px;background:var(--surface2);border:1px solid var(--line);border-radius:10px;
  padding:9px;font-size:13px;color:var(--text);display:flex;align-items:center;justify-content:center;gap:7px;cursor:pointer;font-weight:500}
.vid-wrap{margin-top:11px;border-radius:11px;overflow:hidden;background:#000;aspect-ratio:16/9}
.vid-wrap iframe{width:100%;height:100%;border:0;display:block}
.seance-prog{background:var(--surface);border:1px solid var(--line);border-radius:var(--r);padding:14px;margin-bottom:14px;position:sticky;top:8px;z-index:10}
.seance-prog .pt{display:flex;justify-content:space-between;align-items:center;margin-bottom:9px}
.seance-prog .pt b{font-size:16px;font-weight:700}
.seance-prog .pc{font-size:14px;font-weight:700;color:var(--accent)}
.suggest{background:rgba(47,230,160,.1);border:1px solid rgba(47,230,160,.3);border-radius:9px;padding:9px 11px;margin-top:9px;font-size:12px;color:var(--accent);display:flex;align-items:center;gap:6px;line-height:1.4}
.series{display:flex;gap:7px;margin-top:11px;flex-wrap:wrap}
.serie{flex:1;min-width:60px;background:var(--surface2);border:1px solid var(--line);border-radius:9px;
  padding:9px 4px;text-align:center;font-size:13px;color:var(--muted);cursor:pointer;font-weight:600}
.serie.done{background:rgba(47,230,160,.15);border-color:var(--accent);color:var(--accent)}
.lastload{font-size:12px;color:var(--faint);margin-top:9px;display:flex;align-items:center;gap:5px}
.charge-row{display:flex;gap:9px;margin-top:11px}
.charge-field{flex:1}
.charge-field label{font-size:11px;color:var(--muted);margin-bottom:4px}
.charge-field input{padding:11px;font-size:16px;text-align:center;font-weight:600}
.timer-box{position:fixed;bottom:90px;left:50%;transform:translateX(-50%);background:var(--accent);color:var(--accent-d);
  padding:14px 22px;border-radius:14px;font-weight:700;font-size:18px;display:none;align-items:center;gap:12px;z-index:150;box-shadow:0 8px 30px rgba(0,0,0,.4)}
.timer-box.on{display:flex}
.timer-box button{background:rgba(6,37,26,.2);border:none;color:var(--accent-d);border-radius:8px;padding:6px 10px;font-weight:700;cursor:pointer;font-family:inherit}

/* ---------- Semaine (dans Séance) ---------- */
.wgrid{display:grid;grid-template-columns:1fr 1fr;gap:9px;margin-bottom:14px}
.wday{background:var(--surface);border:1px solid var(--line);border-radius:var(--r);padding:13px;cursor:pointer}
.wday.today{border:2px solid var(--blue)}
.wday.done{opacity:.6}
.wday.rest{cursor:default}
.wday-top{display:flex;justify-content:space-between;align-items:center;margin-bottom:7px}
.wday-d{font-size:12px;color:var(--muted)}
.wday-t{font-size:14px;font-weight:600;margin-bottom:3px}
.wday-s{font-size:12px;color:var(--muted)}

/* ---------- Nutrition ---------- */
.meal{background:var(--surface);border:1px solid var(--line);border-radius:var(--r);padding:13px;margin-bottom:10px}
.meal.eaten{border-color:rgba(47,230,160,.35)}
.meal-h{display:flex;justify-content:space-between;align-items:center;margin-bottom:7px}
.meal-title{font-size:13px;font-weight:600;display:flex;align-items:center;gap:6px}
.food{display:flex;justify-content:space-between;align-items:center;padding:9px 0;border-bottom:1px solid var(--line);font-size:14px}
.food:last-child{border-bottom:none}
.food .k{color:var(--muted);font-size:12px}
.del{color:var(--danger);background:none;border:none;font-size:20px;cursor:pointer;padding:0 4px;line-height:1}
.pickbtn{flex:1;border-radius:9px;padding:9px;text-align:center;font-size:12px;font-weight:600;cursor:pointer;border:none;font-family:inherit}
.pickbtn.add{background:var(--accent);color:var(--accent-d)}
.pickbtn.swap{background:var(--surface2);color:var(--text);border:1px solid var(--line)}

/* ---------- Progrès ---------- */
.chart-box{position:relative;height:240px;width:100%}
.chart-box.sm{height:180px}
.week-dots{display:flex;gap:5px;justify-content:space-between}
.dot{flex:1;text-align:center}
.dot .c{width:32px;height:32px;border-radius:50%;background:var(--surface2);display:flex;align-items:center;
  justify-content:center;margin:0 auto;font-size:15px}
.dot .c.muscu{background:var(--accent);color:var(--accent-d)}
.dot .c.leger{background:var(--blue);color:#04284f}
.dot .c.todo{background:var(--surface2);border:1.5px solid var(--accent)}
.dot .c.rest{background:#13151a;color:var(--faint)}
.dot .lbl{font-size:10px;color:var(--muted);margin-top:4px}
.badges{display:flex;gap:9px}
.badge{flex:1;text-align:center}
.badge .ic{width:44px;height:44px;border-radius:12px;background:var(--surface2);display:flex;
  align-items:center;justify-content:center;margin:0 auto;font-size:21px}
.badge.locked{opacity:.35}
.badge .bl{font-size:9px;color:var(--muted);margin-top:4px}
.photo-grid{display:grid;grid-template-columns:1fr 1fr;gap:9px}
.photo-item{position:relative;border-radius:11px;overflow:hidden;background:var(--surface2);aspect-ratio:3/4;display:flex;align-items:center;justify-content:center}
.photo-item img{width:100%;height:100%;object-fit:cover}
.photo-item .date{position:absolute;bottom:0;left:0;right:0;background:rgba(0,0,0,.6);color:#fff;font-size:11px;padding:4px 6px;text-align:center}

/* ---------- Journal de ressenti (échelles) ---------- */
.scale{display:flex;align-items:center;gap:10px}
.scale input[type=range]{flex:1;accent-color:var(--accent)}
.scale .scale-val{width:34px;text-align:center;font-weight:700;font-size:16px;color:var(--accent)}
.toggle-group{display:flex;gap:8px}
.toggle-group button{flex:1;padding:11px;border:1px solid var(--line);border-radius:10px;background:var(--surface2);font-size:14px;color:var(--muted);font-family:inherit;cursor:pointer}
.toggle-group button.on{background:var(--accent);border-color:var(--accent);color:var(--accent-d);font-weight:700}
.toggle-group button.on.no{background:var(--danger);border-color:var(--danger);color:#fff}
.collapse-h{display:flex;align-items:center;justify-content:space-between;cursor:pointer;font-weight:600;font-size:14px;color:var(--text)}

/* ---------- Calendrier ---------- */
.cal-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px}
.cal-head h3{font-size:16px;font-weight:700;text-transform:capitalize}
.cal-nav{display:flex;gap:6px}
.cal-nav button{width:34px;height:34px;border:1px solid var(--line);background:var(--surface2);color:var(--text);border-radius:9px;font-size:17px;cursor:pointer}
.cal-dow{display:grid;grid-template-columns:repeat(7,1fr);gap:5px;margin-bottom:5px}
.cal-dow span{text-align:center;font-size:10px;color:var(--muted);font-weight:600}
.cal-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:5px}
.cal-cell{aspect-ratio:1;border-radius:10px;display:flex;flex-direction:column;align-items:center;justify-content:center;
  background:var(--surface2);border:1px solid transparent;font-size:14px;position:relative;cursor:pointer}
.cal-cell.empty{background:transparent;cursor:default}
.cal-cell.today{border-color:var(--blue);font-weight:700}
.cal-cell.seance{background:rgba(47,230,160,.18);color:var(--accent)}
.cal-cell.partial{background:rgba(255,192,67,.15);color:var(--gold)}
.cal-cell .wkg{font-size:9px;opacity:.8;line-height:1;margin-top:2px}
.legend{display:flex;gap:14px;justify-content:center;margin-top:12px;font-size:11px;color:var(--muted);flex-wrap:wrap}
.legend i{width:9px;height:9px;border-radius:50%;display:inline-block;margin-right:4px;vertical-align:-1px}

/* ---------- Plus / réglages ---------- */
.exp-btn{display:flex;align-items:center;gap:12px;width:100%;text-align:left;padding:15px;border:1px solid var(--line);
  background:var(--surface);border-radius:14px;margin-bottom:10px;font-size:15px;color:var(--text);cursor:pointer;font-family:inherit}
.exp-btn .ico{font-size:21px}
.exp-btn .sub{font-size:12px;color:var(--muted);display:block;margin-top:2px}
.exp-btn:active{background:var(--surface2)}

/* ---------- Modal ---------- */
.modal{position:fixed;inset:0;background:rgba(0,0,0,.6);display:none;align-items:flex-end;z-index:160}
.modal.on{display:flex}
.modal-c{background:var(--surface);border-radius:20px 20px 0 0;padding:18px 16px calc(28px + var(--safe-bottom));width:100%;
  max-width:560px;margin:0 auto;max-height:82vh;overflow-y:auto;animation:up .25s}
@keyframes up{from{transform:translateY(100%)}to{transform:none}}
.modal-h{display:flex;justify-content:space-between;align-items:center;margin-bottom:14px}
.modal-h h3{font-size:17px;font-weight:700}
.modal-x{background:none;border:none;color:var(--muted);font-size:26px;cursor:pointer;line-height:1}
.opt{background:var(--surface2);border:1px solid var(--line);border-radius:var(--r-sm);padding:12px;margin-bottom:8px;cursor:pointer}
.opt-n{font-size:14px;font-weight:500}
.opt-m{font-size:12px;color:var(--muted);margin-top:2px}
.cuis{display:inline-block;font-size:10px;padding:1px 7px;border-radius:999px;margin-left:6px;font-weight:600}
.cuis.thai{background:rgba(255,192,67,.15);color:var(--gold)}
.cuis.occidental{background:rgba(74,168,255,.15);color:var(--blue)}
.cuis.mixte{background:rgba(47,230,160,.15);color:var(--accent)}

/* ---------- Flash ---------- */
.saved-flash{position:fixed;top:calc(16px + var(--safe-top));left:50%;transform:translateX(-50%);
  background:var(--accent);color:var(--accent-d);padding:11px 20px;border-radius:30px;font-size:14px;font-weight:600;
  z-index:180;opacity:0;transition:opacity .25s;pointer-events:none}
.saved-flash.show{opacity:1}

/* ---------- Nav ---------- */
nav{position:fixed;bottom:0;left:0;right:0;background:var(--surface);border-top:1px solid var(--line);
  display:flex;justify-content:space-around;padding:8px 0 max(8px,var(--safe-bottom));z-index:50}
nav button{background:none;border:none;color:var(--faint);font-size:10px;font-weight:600;display:flex;
  flex-direction:column;align-items:center;gap:3px;cursor:pointer;padding:3px 8px;font-family:inherit}
nav button.on{color:var(--accent)}
nav svg{width:23px;height:23px}
