
/* Layout: application iOS — grand titre, cartes en encart, anneaux concentriques, barre d'onglets translucide, feuilles modales. */
:root{
  --bg:#F2F2F7; --card:#FFFFFF; --fill:#E9E9EE; --fill2:#F4F4F8;
  --fg:#000000; --fg2:#6C6C70; --fg3:#AEAEB2; --sep:#D1D1D6;
  --accent:#007AFF; --on-accent:#FFFFFF;
  --green:#34C759; --orange:#E68200; --red:#FF3B30; --pink:#FF2D55; --purple:#AF52DE; --teal:#30B0C7;
  --mm0:#E3E3E8; --mm1:#C2D9FB; --mm2:#7FB2F8; --neutral:#D9D9DE;
  --bar:rgba(249,249,249,.86); --overlay:rgba(0,0,0,.32); --shadow:0 1px 2px rgba(0,0,0,.04),0 6px 20px rgba(0,0,0,.05);
  --font:-apple-system,BlinkMacSystemFont,"SF Pro Text","SF Pro Display","Helvetica Neue",system-ui,sans-serif;
  --rounded:ui-rounded,"SF Pro Rounded",-apple-system,BlinkMacSystemFont,system-ui,sans-serif;
  /* Échelle U12 — typographie : tailles iOS Dynamic Type (taille par défaut) */
  --t-cap2:11px; --t-cap:12px; --t-foot:13px; --t-sub:15px; --t-body:17px;
  --t-title3:20px; --t-title2:22px; --t-title1:28px; --t-large:34px;
  /* chiffres en police arrondie : petit, moyen, grand, très grand, affichage */
  --n-s:20px; --n-m:24px; --n-l:28px; --n-xl:34px; --n-xxl:52px;
  /* espacements : entre sections, entre cartes d'une grille, dans les cartes */
  --space-section:24px; --space-grid:12px;
  --card-pad:16px; --card-pad-c:12px; --card-gap:12px; --card-gap-c:6px;
  /* rayons : petit champ, encart, carte, carte mise en avant, pastille */
  --r-xs:6px; --r-sm:10px; --r-md:12px; --r-card:16px; --r-feature:20px; --r-pill:999px;
}
@media (prefers-color-scheme:dark){:root:not([data-theme="light"]){
  --bg:#000000; --card:#1C1C1E; --fill:#2C2C2E; --fill2:#242426;
  --fg:#FFFFFF; --fg2:#98989F; --fg3:#636366; --sep:#38383A;
  --accent:#0A84FF; --on-accent:#FFFFFF;
  --green:#30D158; --orange:#D07800; --red:#FF453A; --pink:#FF375F; --purple:#BF5AF2; --teal:#40C8E0;
  --mm0:#2E2E31; --mm1:#16365F; --mm2:#1F5FB0; --neutral:#3A3A3D;
  --bar:rgba(22,22,24,.86); --overlay:rgba(0,0,0,.55); --shadow:none; color-scheme:dark}}
:root[data-theme="dark"]{
  --bg:#000000; --card:#1C1C1E; --fill:#2C2C2E; --fill2:#242426;
  --fg:#FFFFFF; --fg2:#98989F; --fg3:#636366; --sep:#38383A;
  --accent:#0A84FF; --on-accent:#FFFFFF;
  --green:#30D158; --orange:#D07800; --red:#FF453A; --pink:#FF375F; --purple:#BF5AF2; --teal:#40C8E0;
  --mm0:#2E2E31; --mm1:#16365F; --mm2:#1F5FB0; --neutral:#3A3A3D;
  --bar:rgba(22,22,24,.86); --overlay:rgba(0,0,0,.55); --shadow:none; color-scheme:dark}
html,body{height:100%}
html{scroll-padding-bottom:calc(var(--tabbar-h,0px) + 8px)}
body{background:var(--bg);color:var(--fg);font-family:var(--font);font-size:var(--t-body);line-height:1.35;-webkit-font-smoothing:antialiased;letter-spacing:-.01em}
#app{max-width:720px;margin:0 auto;padding-inline:16px;padding-block:0 max(130px,calc(var(--tabbar-h,0px) + 40px))}
button{font:inherit;color:inherit}
:focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:8px}
a{color:var(--accent);text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:2px}

/* En-tête */
.lt{padding-block:14px 4px;display:grid;gap:2px}
.lt .bar{display:flex;align-items:center;min-height:32px;gap:8px}
.lt h1{font-size:var(--t-large);font-weight:700;letter-spacing:-.025em;margin:0;line-height:1.1;text-wrap:balance}
.lt .sub{color:var(--fg2);font-size:var(--t-sub)}
.navbtn{appearance:none;border:0;background:none;color:var(--accent);font-size:var(--t-body);padding:6px 0;cursor:pointer;display:inline-flex;align-items:center;gap:4px}
.navbtn svg{width:22px;height:22px}
.spacer{flex:1}
.avatar{width:34px;height:34px;border-radius:50%;background:var(--fill);display:grid;place-items:center;color:var(--accent);border:0;cursor:pointer}
.avatar svg{width:20px;height:20px}

/* Bande de dates */
.strip{background:var(--bg);padding-block:6px 8px;margin-inline:-16px;padding-inline:16px}
.strip .w{display:flex;align-items:stretch;min-width:0}
.strip .chev{appearance:none;border:0;background:none;color:var(--accent);cursor:pointer;flex:none;width:44px;min-height:44px;display:grid;place-items:center;border-radius:var(--r-sm)}
.strip .chev:active{background:var(--fill)}
.strip .chev svg{width:18px;height:18px}
/* ruban : défilement natif à inertie, aimanté au centre ; bords estompés pour signaler la suite */
.strip .days{flex:1;min-width:0;display:flex;position:relative;overflow-x:auto;overflow-y:hidden;scroll-snap-type:x mandatory;overscroll-behavior-x:contain;scrollbar-width:none;padding-block:4px;-webkit-mask-image:linear-gradient(90deg,transparent,#000 22px,#000 calc(100% - 22px),transparent);mask-image:linear-gradient(90deg,transparent,#000 22px,#000 calc(100% - 22px),transparent)}
.strip .days::-webkit-scrollbar{display:none}
.strip .days.glide{scroll-snap-type:none}
.day{appearance:none;border:0;background:none;cursor:pointer;flex:0 0 46px;scroll-snap-align:center;display:grid;justify-items:center;gap:2px;padding:0;min-height:44px;-webkit-tap-highlight-color:transparent;transform-origin:50% 60%}
.day .m{font-size:var(--t-cap2);line-height:13px;height:13px;color:var(--accent);font-weight:600;white-space:nowrap}
.day .l{font-size:var(--t-cap2);color:var(--fg2);text-transform:uppercase;font-weight:600}
.day .n{width:2em;height:2em;border-radius:50%;display:grid;place-items:center;font-size:var(--t-body);font-variant-numeric:tabular-nums;color:var(--fg2)}
.day:active .n{background:var(--fill)}
.day.today .n{color:var(--accent);font-weight:700}
.day.sel .n{background:var(--fg);color:var(--bg);font-weight:600}
.day.sel.today .n{background:var(--accent);color:var(--on-accent)}
.day.sel .l{color:var(--fg)}
.day.m1{box-shadow:inset 1px 0 0 var(--sep)}
.day .dot{width:5px;height:5px;border-radius:50%;background:transparent}
.day .dot.on{background:var(--fg3)}
.day:focus-visible{outline:none}.day:focus-visible .n{outline:2px solid var(--accent);outline-offset:2px}
/* jours voisins discrets partout (gris secondaire, contraste ≥ 4,5:1) ; en plus, rapetissent vers les bords selon leur place
   dans le ruban (navigateurs compatibles) — taille seulement : l'opacité reste pleine pour garder le contraste */
@supports (animation-timeline:view()){@media (prefers-reduced-motion:no-preference){
 .strip .days .day{animation:day-edge linear both;animation-timeline:view(inline)}
 @keyframes day-edge{0%,100%{transform:scale(.78)}32%,68%{transform:none}}
}}
.strip .cap{font-size:var(--t-foot);color:var(--fg2);text-align:center;padding-top:2px}

/* Structure */
.stack{display:grid;grid-template-columns:minmax(0,1fr);gap:var(--space-section);padding-top:8px}
.group{display:grid;grid-template-columns:minmax(0,1fr);gap:8px}
.gh{display:flex;align-items:baseline;gap:8px;padding-inline:4px}
.gh .t{font-size:var(--t-title3);font-weight:700;letter-spacing:-.015em;flex:1;min-width:0}
.gh .r{font-size:var(--t-sub);color:var(--fg2);font-variant-numeric:tabular-nums}
.gh button{font-size:var(--t-sub);color:var(--accent);background:none;border:0;cursor:pointer;padding:0;display:inline-flex;align-items:center;gap:6px}
.gh button svg{width:1.1em;height:1.1em;flex:none}
.gf{font-size:var(--t-foot);color:var(--fg2);padding-inline:4px;line-height:1.4}
/* Cartes : une seule surface (fond, rayon, ombre) pour toutes les cartes de contenu.
   Variantes — standard : .card (marge 16, écart 12) · compacte en rangée : .banner .ex .meal (12/16)
   · compacte et métrique : .tile .cr .rec .scard .pcard .rule .qbig (12, écart 6, chiffre arrondi + légende 12 px).
   Hors famille : .hero-card et cartes de recette (rayon 20, mises en avant), cartes de la séance guidée. */
.list,.card,.banner,.ex,.meal,.tile,.cr,.rec,.scard,.pcard,.rule,.qbig,.achip,.abtn,.rowi.streakrow{background:var(--card);border-radius:var(--r-card);box-shadow:var(--shadow)}
.list{overflow:hidden}
.card{padding:var(--card-pad);display:grid;grid-template-columns:minmax(0,1fr);gap:var(--card-gap);min-width:0}
.card.tight{gap:8px}
.rowi{display:flex;align-items:center;gap:12px;padding:11px 16px;min-height:44px;position:relative}
.rowi + .rowi::before{content:"";position:absolute;top:0;left:16px;right:0;border-top:.5px solid var(--sep)}
.rowi.ind + .rowi.ind::before{left:60px}
.rowi .main{flex:1;min-width:0}
.rowi .ttl{overflow-wrap:anywhere}
.rowi .s2{font-size:var(--t-sub);color:var(--fg2);font-variant-numeric:tabular-nums}
.rowi .val{color:var(--fg2);font-variant-numeric:tabular-nums;text-align:right}
.rowi.tap{cursor:pointer}
.rowi.tap:active{background:var(--fill)}
button.rowi{appearance:none;border:0;background:none;width:100%;text-align:left}
.chev-r{color:var(--fg3);width:14px;height:14px;flex:none}
.link{color:var(--accent)}
.danger{color:var(--red)}
.kicker{font-size:var(--t-foot);font-weight:600;color:var(--fg2);text-transform:uppercase;letter-spacing:.03em}
.title2{font-size:var(--t-title2);font-weight:700;letter-spacing:-.015em;line-height:1.2}
.cols2{display:grid;grid-template-columns:1fr 1fr;gap:var(--space-grid)}
@media (max-width:420px){.cols2.st{grid-template-columns:1fr}}

/* Contrôles */
input.inl{appearance:none;border:0;background:transparent;color:var(--fg);font:inherit;text-align:right;width:96px;padding:0;font-variant-numeric:tabular-nums}
input.inl::placeholder{color:var(--fg3)}
input.field,select.field,textarea.field{appearance:none;border:0;background:var(--fill);color:var(--fg);font:inherit;border-radius:var(--r-sm);padding:10px 12px;width:100%;min-width:0}
textarea.field{min-height:84px;resize:vertical}
.seg{display:flex;flex-wrap:wrap;background:var(--fill);border-radius:9px;padding:2px;gap:2px}
.seg button{flex:1 1 0;appearance:none;border:0;background:none;border-radius:7px;padding:6px 4px;font-size:var(--t-foot);font-weight:500;cursor:pointer;color:var(--fg);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.seg button.on{background:var(--card);box-shadow:0 1px 3px rgba(0,0,0,.14),0 0 0 .5px rgba(0,0,0,.04);font-weight:600}
.btn{appearance:none;border:0;background:var(--accent);color:var(--on-accent);font-weight:600;border-radius:var(--r-md);padding:14px 16px;cursor:pointer;font-size:var(--t-body);width:100%}
.btn.sec{background:var(--fill);color:var(--accent)}
.btn.green{background:var(--green);color:#fff}
.btn.sm{width:auto;padding:7px 14px;font-size:var(--t-sub);border-radius:var(--r-pill)}
.btn:disabled{opacity:.45;cursor:default}
.tbtn{appearance:none;border:0;background:none;color:var(--accent);cursor:pointer;padding:4px 0;font-size:var(--t-body)}
.chips{display:flex;flex-wrap:wrap;gap:8px}
.chips.scroll{flex-wrap:nowrap;overflow-x:auto;scrollbar-width:none;margin-inline:-16px;padding-inline:16px}
.chips.scroll::-webkit-scrollbar{display:none}
.chips:not(.scroll) .chip{max-width:100%;white-space:normal}
.chip{appearance:none;border:0;background:var(--fill);color:var(--fg);border-radius:var(--r-pill);padding:7px 14px;font-size:var(--t-sub);cursor:pointer;white-space:nowrap}
.chip.on{background:var(--accent);color:var(--on-accent)}
.chip.add{background:color-mix(in srgb,var(--accent) 12%,transparent);color:var(--accent);font-weight:500}
.chk{appearance:none;border:0;background:none;padding:0;cursor:pointer;width:28px;height:28px;flex:none;display:grid;place-items:center}
.chk .o{width:24px;height:24px;border-radius:50%;border:1.5px solid var(--fg3);display:grid;place-items:center}
.chk.on .o{background:var(--green);border-color:var(--green)}
.chk.on .o::after{content:"";width:6px;height:11px;border:solid #fff;border-width:0 2.2px 2.2px 0;transform:translateY(-1px) rotate(45deg)}
.chk.off{cursor:default}
input[type=range]{width:100%;accent-color:var(--accent)}
.pill{display:inline-flex;align-items:center;gap:4px;font-size:var(--t-cap);font-weight:600;border-radius:var(--r-pill);padding:3px 9px;background:var(--fill);color:var(--fg2);white-space:nowrap}
.pill.green{background:color-mix(in srgb,var(--green) 16%,transparent);color:var(--green)}
.pill.orange{background:color-mix(in srgb,var(--orange) 18%,transparent);color:var(--orange)}
.pill.red{background:color-mix(in srgb,var(--red) 16%,transparent);color:var(--red)}
.pill.blue{background:color-mix(in srgb,var(--accent) 14%,transparent);color:var(--accent)}
.num{font-variant-numeric:tabular-nums}
.muted{color:var(--fg2)}
.small{font-size:var(--t-sub)}
.xs{font-size:var(--t-cap)}
.row{display:flex;gap:10px;align-items:center;flex-wrap:wrap}
.row > *{min-width:0}
.grow{flex:1;min-width:0}
.banner{padding:var(--card-pad-c) var(--card-pad);font-size:var(--t-sub);color:var(--fg2)}

/* Anneaux */
.ringwrap{display:grid;grid-template-columns:minmax(120px,170px) 1fr;gap:24px;align-items:center}
.ringwrap > svg{width:100%;height:auto;display:block}
.legend{display:grid;gap:12px}
.legend .it{display:grid;gap:1px}
.legend .k{font-size:var(--t-foot);font-weight:600}
.legend .v{font-family:var(--rounded);font-size:var(--n-m);font-weight:700;font-variant-numeric:tabular-nums;letter-spacing:-.01em}
.legend .v small{font-size:var(--t-foot);color:var(--fg2);font-weight:500}
@media (max-width:380px){.ringwrap{grid-template-columns:110px 1fr;gap:20px}.legend .v{font-size:var(--n-s)}}
.bar{height:8px;background:var(--fill);border-radius:999px;overflow:hidden}
.bar > i{display:block;height:100%;border-radius:999px}
.mrow{display:grid;grid-template-columns:82px 1fr auto;gap:10px;align-items:center;font-size:var(--t-sub)}
.mrow .v{font-variant-numeric:tabular-nums;color:var(--fg2);font-size:var(--t-sub);text-align:right}
.big{font-family:var(--rounded);font-size:var(--n-xl);font-weight:700;letter-spacing:-.02em;font-variant-numeric:tabular-nums;line-height:1}
.hero{display:flex;align-items:baseline;gap:8px;flex-wrap:wrap}
.stat{display:grid;gap:2px;overflow-wrap:anywhere}
.stat .v{font-family:var(--rounded);font-size:var(--n-m);font-weight:700;font-variant-numeric:tabular-nums;letter-spacing:-.01em}
.stat .k{font-size:var(--t-cap);color:var(--fg2)}
.stats{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:var(--space-grid)}

/* Pesée rapide */
.stepper{display:flex;align-items:center;gap:10px}
.stepper button{appearance:none;border:0;width:44px;height:44px;border-radius:50%;background:var(--fill);font-size:24px;font-weight:500;color:var(--accent);cursor:pointer;display:grid;place-items:center;flex:none}
.stepper .sv{font-family:var(--rounded);font-size:var(--n-xl);font-weight:700;font-variant-numeric:tabular-nums;min-width:4ch;text-align:center}

/* Séance */
.focus{background:var(--card);border-radius:20px;padding:18px;display:grid;gap:16px;box-shadow:var(--shadow);border:1.5px solid color-mix(in srgb,var(--accent) 35%,transparent)}
.focus .head{display:flex;gap:12px;align-items:center}
.focus .pict{width:54px;height:54px;flex:none;background:var(--fill2);border-radius:14px;display:grid;place-items:center}
.focus .pict svg{width:46px;height:46px}
.fgrid{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.fbox{background:var(--fill2);border-radius:14px;padding:10px;display:grid;justify-items:center;gap:6px}
.fbox .lab{font-size:12px;color:var(--fg2);font-weight:600;text-transform:uppercase;letter-spacing:.03em}
.fbox .ctl{display:flex;align-items:center;gap:6px;width:100%;justify-content:space-between}
.fbox .ctl button{appearance:none;border:0;width:42px;height:42px;border-radius:50%;background:var(--card);color:var(--accent);font-size:24px;cursor:pointer;flex:none;box-shadow:0 1px 2px rgba(0,0,0,.08)}
.fbox input{appearance:none;border:0;background:transparent;color:var(--fg);font-family:var(--rounded);font-size:30px;font-weight:700;text-align:center;width:100%;min-width:0;font-variant-numeric:tabular-nums;padding:0}
.rirs{display:grid;grid-template-columns:auto repeat(5,1fr);gap:6px;align-items:center}
.rirs .lab{font-size:13px;color:var(--fg2);padding-right:4px}
.rirs button{appearance:none;border:0;background:var(--fill);border-radius:10px;padding:8px 0;font-weight:600;cursor:pointer;font-variant-numeric:tabular-nums}
.rirs button.on{background:var(--accent);color:var(--on-accent)}
.dots{display:flex;gap:6px;flex-wrap:wrap}
.dots i{width:22px;height:6px;border-radius:3px;background:var(--fill)}
.dots i.d{background:var(--green)}
.dots i.c{background:var(--accent)}
.ex{padding:var(--card-pad-c) var(--card-pad);display:grid;gap:var(--card-gap)}
.ex .hd{display:flex;gap:12px;align-items:center}
.ex .pict{width:44px;height:44px;flex:none;background:var(--fill2);border-radius:12px;display:grid;place-items:center;border:0;cursor:pointer;padding:0}
.ex .pict svg{width:38px;height:38px}
.ex h3{font-size:var(--t-body);font-weight:600;margin:0;line-height:1.25}
.ex .sug{font-size:var(--t-sub);color:var(--accent);background:color-mix(in srgb,var(--accent) 9%,transparent);border-radius:var(--r-sm);padding:8px 10px}
.ex.cur{outline:1.5px solid color-mix(in srgb,var(--accent) 40%,transparent)}
.sets{display:grid;grid-template-columns:28px 1fr 1fr 1fr 32px;gap:6px 8px;align-items:center}
.sets .h{font-size:var(--t-cap2);color:var(--fg2);text-transform:uppercase;font-weight:600;text-align:center}
.sets .i{text-align:center;color:var(--fg2);font-variant-numeric:tabular-nums;font-size:var(--t-sub)}
.sets input{appearance:none;border:0;background:var(--fill);color:var(--fg);font:inherit;border-radius:var(--r-sm);padding:7px 4px;text-align:center;width:100%;min-width:0;font-variant-numeric:tabular-nums}
.sets input::placeholder{color:var(--fg3)}
.sets .dn input{background:color-mix(in srgb,var(--green) 14%,var(--fill))}
.exf{display:flex;gap:16px;flex-wrap:wrap}
#restRoot .rest{position:fixed;left:50%;transform:translateX(-50%);bottom:max(calc(86px + env(safe-area-inset-bottom,0px)),calc(var(--tabbar-h,0px) + 12px));z-index:7;background:var(--card);box-shadow:0 8px 28px rgba(0,0,0,.14),0 0 0 .5px var(--sep);border-radius:24px;padding:8px;display:flex;flex-wrap:wrap;align-items:center;gap:8px;width:min(360px,calc(100% - 32px));box-sizing:border-box}
#restRoot .rest-time{display:flex;align-items:center;gap:8px;flex:1 0 auto;min-width:max-content}
#restRoot .rest svg{width:32px;height:32px;flex:none}
#restRoot .rest .tm{font-family:var(--rounded);font-size:var(--n-s);font-weight:700;font-variant-numeric:tabular-nums;white-space:nowrap}
#restRoot .rest-actions{display:flex;align-items:center;gap:6px;flex:none;margin-left:auto}
#restRoot .rest button{appearance:none;border:0;background:var(--fill);border-radius:999px;min-height:44px;min-width:44px;padding:8px 12px;font-size:var(--t-sub);font-weight:600;cursor:pointer;color:var(--fg);white-space:nowrap;flex:none}
#restRoot .rest button.p{background:var(--accent);color:var(--on-accent)}
#restRoot .rest button:active{opacity:.75}
[data-act="rCut"],[data-act="rAdd"]{white-space:nowrap}

/* Visuels */
.chart svg{display:block;width:100%;height:auto;overflow:visible}
.chart text{fill:var(--fg2);font-family:var(--font);font-size:var(--t-cap2)}
.legendrow{display:flex;gap:12px;flex-wrap:wrap;font-size:var(--t-foot);color:var(--fg2)}
.legendrow span{display:inline-flex;align-items:center;gap:6px}
.legendrow i{width:10px;height:10px;border-radius:3px;display:inline-block}
/* graphiques poids tracés à l'échelle 1:1 (chartBox) : tailles en px réels */
.chart .ax{font-size:var(--t-cap);fill:var(--fg2);font-variant-numeric:tabular-nums}
.chart .val{font-size:var(--t-cap);font-weight:600;fill:var(--fg);font-variant-numeric:tabular-nums}
.legendrow svg{width:20px;height:12px;flex:none;overflow:visible}
.stats.sm .v{font-size:var(--n-s)}
.stats.two{grid-template-columns:repeat(2,minmax(0,1fr))}
.stat .v small{font-size:var(--t-foot);color:var(--fg2);font-weight:500;letter-spacing:0}
.chartnote{margin:0;font-size:var(--t-foot);line-height:1.35;color:var(--fg2)}
.mmap{display:grid;grid-template-columns:1fr 1fr;gap:8px;max-width:340px;margin:0 auto;width:100%}
.mmap figure{margin:0;display:grid;justify-items:center;gap:4px}
.mmap figcaption{font-size:var(--t-cap);color:var(--fg2)}
.mmap svg{width:100%;height:auto;max-height:300px}
.heat svg{display:block;width:100%;height:auto}
.heat text{fill:var(--fg2);font-size:9px;font-family:var(--font)}
.tablewrap{overflow-x:auto}
table{border-collapse:collapse;width:100%;font-variant-numeric:tabular-nums;font-size:var(--t-sub)}
th,td{text-align:left;padding:9px 16px;white-space:nowrap}
th{font-size:var(--t-cap);text-transform:uppercase;color:var(--fg2);font-weight:600}
tbody tr + tr td{border-top:.5px solid var(--sep)}
#tip{position:fixed;z-index:40;pointer-events:none;background:var(--fg);color:var(--bg);font-size:var(--t-foot);line-height:1.35;padding:7px 10px;border-radius:var(--r-sm);max-width:240px;box-shadow:0 6px 18px rgba(0,0,0,.2);font-variant-numeric:tabular-nums;white-space:pre-line}

/* Photos */
.pgrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(96px,1fr));gap:8px}
.pgrid button{appearance:none;border:0;padding:0;background:var(--fill);border-radius:var(--r-md);overflow:hidden;aspect-ratio:3/4;cursor:pointer;position:relative;max-width:100%}
.pgrid img{width:100%;height:100%;object-fit:cover;display:block}
.pgrid span{position:absolute;left:6px;bottom:6px;background:rgba(0,0,0,.55);color:#fff;font-size:var(--t-cap2);padding:2px 6px;border-radius:var(--r-xs)}
.cmp{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.cmp figure{margin:0;display:grid;gap:4px}
.cmp img{width:100%;aspect-ratio:3/4;object-fit:cover;border-radius:var(--r-md);background:var(--fill);display:block}
.cmp figcaption{font-size:var(--t-foot);color:var(--fg2);text-align:center}
.filebtn{position:relative;overflow:hidden}
.filebtn input{position:absolute;inset:0;opacity:0;cursor:pointer;width:100%}

/* Bibliothèque */
.lib .pict{width:44px;height:44px;flex:none;background:var(--fill2);border-radius:12px;display:grid;place-items:center}
.lib .pict svg{width:38px;height:38px}
.steps{margin:0;padding-left:22px;display:grid;gap:8px;font-size:var(--t-body);line-height:1.45}

/* Coach */
.msgs{display:grid;gap:10px}
.msg{max-width:88%;padding:10px 14px;border-radius:18px;white-space:pre-wrap;line-height:1.45;font-size:var(--t-body);overflow-wrap:anywhere}
.msg.u{justify-self:end;background:var(--accent);color:var(--on-accent);border-bottom-right-radius:6px}
.msg.a{justify-self:start;background:var(--card);border-bottom-left-radius:6px;box-shadow:var(--shadow)}
.composer{display:flex;gap:8px;align-items:flex-end}
.composer textarea{min-height:44px;max-height:160px;border-radius:22px;padding:11px 16px}
.send{appearance:none;border:0;width:40px;height:40px;border-radius:50%;background:var(--accent);color:var(--on-accent);display:grid;place-items:center;cursor:pointer;flex:none;margin-bottom:2px}
.send svg{width:18px;height:18px}

/* Barre d'onglets */
nav.tabbar{position:fixed;left:0;right:0;bottom:0;z-index:6;background:var(--bar);-webkit-backdrop-filter:saturate(180%) blur(20px);backdrop-filter:saturate(180%) blur(20px);border-top:.5px solid var(--sep);padding-bottom:env(safe-area-inset-bottom,0px)}
nav.tabbar .in{max-width:720px;margin:0 auto;display:grid;grid-template-columns:repeat(var(--tabs,5),1fr)}
nav.tabbar button{appearance:none;border:0;background:none;color:var(--fg3);display:grid;justify-items:center;gap:2px;padding:7px 2px 8px;cursor:pointer;font-size:10px;font-weight:500}
nav.tabbar button svg{width:26px;height:26px}
nav.tabbar button[aria-selected="true"]{color:var(--accent)}
/* Mobile (barre en bas) : le défilement est porté par #phone, pas par le document — même structure que l'aperçu iPhone.
   Le document ne défile jamais, donc WebKit iOS 26 n'a plus à repositionner les couches fixes au changement de sens de défilement
   (barre décollée du bas, cf. docs/produit/NAVIGATION-MOBILE.md). Bureau (barre latérale ≥ 1024 px), aperçu et connexion inchangés. */
@media (max-width:1023.98px){
 /* overflow sur html seul : sur body, il rendrait document.scrollingElement nul en mode quirks (app/carnet.html n'a pas de doctype) */
 html:not(.frame):not(.auth-mode){overflow:hidden}
 html:not(.frame):not(.auth-mode) body{margin:0}
 /* la marge par défaut du corps (8 px) passe en remplissage du défileur : rendu identique */
 html:not(.frame):not(.auth-mode) #phone{height:100%;box-sizing:border-box;padding:8px;overflow-y:auto;overscroll-behavior-y:contain;scroll-padding-bottom:calc(var(--tabbar-h,0px) + 8px)}
}

/* Feuilles */
.sheetwrap{position:fixed;inset:0;z-index:20;background:var(--overlay);display:flex;align-items:flex-end;justify-content:center}
.sheet{background:var(--bg);width:100%;max-width:720px;max-height:92%;border-radius:var(--r-card) var(--r-card) 0 0;display:flex;flex-direction:column;overflow:hidden;padding-bottom:env(safe-area-inset-bottom,0px)}
.sheet .sh{display:flex;align-items:center;padding:12px 16px 8px;gap:8px}
.sheet .sh h2{font-size:var(--t-body);font-weight:600;margin:0;flex:1;text-align:center;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.sheet .sh .navbtn{min-width:70px}
.sheet .sb{overflow-y:auto;padding:4px 16px 24px;display:grid;grid-template-columns:minmax(0,1fr);grid-auto-rows:max-content;gap:var(--space-section);align-content:start}
.grab{width:36px;height:5px;border-radius:3px;background:var(--fg3);opacity:.5;margin:6px auto 0}
@media (prefers-reduced-motion:no-preference){.sheet{animation:up .28s cubic-bezier(.2,.8,.2,1)}@keyframes up{from{transform:translateY(40px);opacity:.6}}.bar > i{transition:width .35s ease}.ringarc{transition:stroke-dasharray .5s ease}}
.toast{position:fixed;left:50%;top:calc(12px + env(safe-area-inset-top,0px));transform:translateX(-50%);z-index:30;background:var(--card);color:var(--fg);box-shadow:0 6px 24px rgba(0,0,0,.16),0 0 0 .5px var(--sep);padding:10px 16px;border-radius:999px;font-size:var(--t-sub);font-weight:500;max-width:calc(100vw - 32px)}
@media (max-width:380px){.lt h1{font-size:30px}}
/* v4 : tuiles & visuels */
.title1{font-family:var(--rounded);font-size:var(--t-title1);font-weight:700;letter-spacing:-.02em;line-height:1.1}
.kicker{display:inline-flex;align-items:center;gap:6px}
.kicker svg{width:16px;height:16px}
.legend .it{appearance:none;border:0;background:none;padding:0;text-align:left;cursor:default}
.legend .lk{cursor:pointer}
.legend .k{display:inline-flex;align-items:center;gap:5px}
.legend .k svg{width:15px;height:15px}
.tiles{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--space-grid)}
.tile{appearance:none;border:0;padding:var(--card-pad-c);display:grid;grid-template-columns:minmax(0,1fr);overflow-wrap:anywhere;hyphens:auto;gap:var(--card-gap-c);text-align:left;min-width:0;color:var(--fg);align-content:start}
button.tile{cursor:pointer}
button.tile:active{transform:scale(.98)}
.th{display:flex;align-items:center;gap:6px;font-size:var(--t-sub);font-weight:600;min-width:0}
.th > span:first-of-type{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.th svg{width:17px;height:17px;flex:none}
.th .tr{margin-left:auto;color:var(--fg3);display:inline-flex}
.th .tr .chev-r{width:12px;height:12px}
.okdot{width:18px;height:18px;border-radius:50%;background:var(--green);color:#fff;display:grid;place-items:center}
.okdot svg{width:12px;height:12px;stroke-width:3}
.tb{display:flex;align-items:flex-end;justify-content:space-between;gap:6px;min-height:40px}
.tv{display:flex;align-items:baseline;gap:4px;min-width:0;flex:0 1 auto}
.tv .n{font-family:var(--rounded);font-size:var(--n-l);font-weight:700;letter-spacing:-.02em;font-variant-numeric:tabular-nums;line-height:1;white-space:nowrap}
.tv .n small{font-size:var(--t-sub);color:var(--fg2);font-weight:600}
.tv .u{font-size:var(--t-sub);color:var(--fg2);font-weight:500;white-space:nowrap;flex-shrink:0}
.tile.compact .tv .n{font-size:var(--n-s);white-space:normal;min-width:0}
.ts{font-size:var(--t-cap);color:var(--fg2);font-variant-numeric:tabular-nums;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.spark{flex:1 1 0;min-width:0;max-width:96px;height:auto}
.minibars{display:flex;align-items:flex-end;gap:3px;height:34px;flex:1 1 0;min-width:0;max-width:90px}
.minibars i{flex:1;border-radius:3px;min-height:3px}
.mring{width:40px;height:40px;flex:none}
/* Eau : un seul verre dont le niveau suit l'objectif, compteur, retrait / ajout de 250 ml */
.water-ctl{display:flex;align-items:center;gap:10px;min-width:0;padding-top:12px;margin-top:12px;border-top:.5px solid var(--sep)}
.wc-glass{flex:none;display:grid;place-items:center;width:34px;height:44px;border-radius:12px;background:color-mix(in srgb,var(--teal) 9%,var(--card))}
.wc-glass svg{width:22px;height:28px;display:block}
.wc-read{flex:1 1 auto;min-width:0}
.wc-count{font-size:var(--t-sub);color:var(--fg);line-height:1.2;overflow-wrap:anywhere}
.wc-count b{font-family:var(--rounded);font-size:22px;font-weight:700;letter-spacing:-.02em;font-variant-numeric:tabular-nums;color:var(--teal-t)}
.wc-count span,.wc-sub{color:var(--fg2)}
.wc-sub{font-size:var(--t-cap);margin-top:2px;font-variant-numeric:tabular-nums;overflow-wrap:anywhere}
.wc-sub .nb{white-space:nowrap}
.wc-btns{flex:none;display:flex;gap:6px}
.water-ctl .water-plus{padding:0;width:44px;font-size:22px;background:color-mix(in srgb,var(--teal) 14%,var(--card));color:var(--teal-t)}
.water-ctl .water-step:focus-visible{outline:2px solid var(--teal);outline-offset:2px}
.water-ctl .water-step:active:not(:disabled){transform:scale(.94)}
@media (prefers-reduced-motion:reduce){.water-ctl .water-step:active:not(:disabled){transform:none}}
/* Corps · mesures : résumé poids / masse grasse puis silhouette de face avec repères (boutons HTML ≥ 44 px) */
.bm-card{gap:12px;container-type:inline-size}
.bm-sum{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;width:100%;max-width:440px;margin-inline:auto}
.bm-sum-b,.bm-pt{appearance:none;border:0;font:inherit;color:var(--fg);cursor:pointer;text-align:left;background:var(--fill);border-radius:14px;min-height:44px;min-width:44px;display:grid;align-content:center;gap:1px}
.bm-sum-b{padding:9px 12px}
.bm-sl{display:flex;align-items:center;gap:5px;font-size:var(--t-cap);font-weight:600}
.bm-sl svg{width:14px;height:14px;flex:none}
.bm-v{display:flex;align-items:baseline;flex-wrap:wrap;column-gap:3px;line-height:1.15;min-width:0}
.bm-v b{font-family:var(--rounded);font-size:20px;font-weight:700;letter-spacing:-.02em;font-variant-numeric:tabular-nums;white-space:nowrap}
.bm-v small{font-size:var(--t-cap);color:var(--fg2);font-weight:500}
.bm-s,.bm-l{font-size:11px;line-height:1.25;color:var(--fg2);font-variant-numeric:tabular-nums;overflow-wrap:break-word;min-width:0}
.bm-add{display:inline-grid;place-items:center;width:20px;height:20px;border-radius:50%;background:var(--card);color:var(--accent);font-weight:600;font-size:16px;line-height:1}
/* --fh : hauteur de la silhouette ; sa largeur suit le ratio du repère (116 × 360) ; --gap : écart bouton / silhouette.
   Grille repères | silhouette | repères × 3 rangées appariées (poitrine / bras gauche, bras droit / taille, cuisse) :
   --ry1..3 = centres nominaux des rangées (parts de --fh, milieux des --y de BM_PTS, render.js). Chaque rangée vaut au moins
   sa hauteur nominale et grandit avec son texte : aucun chevauchement quelles que soient les métriques de police,
   la dernière rangée (1fr) absorbe d'abord la croissance. */
.bmap{--fh:330px;--fw:calc(var(--fh)*116/360);--pad:18px;--gap:6px;--ry1:.095;--ry2:.415;--ry3:.76;
  --c1:calc(var(--pad) + var(--fh)*var(--ry1));--c2:calc(var(--pad) + var(--fh)*var(--ry2));--c3:calc(var(--pad) + var(--fh)*var(--ry3));
  display:grid;grid-template-columns:minmax(0,1fr) var(--fw) minmax(0,1fr);column-gap:var(--gap);
  grid-template-rows:minmax(calc(2*var(--c1)),auto) minmax(calc(2*(var(--c2) - 2*var(--c1))),auto) minmax(calc(2*(var(--c3) - 2*var(--c2) + 2*var(--c1))),auto) 1fr;
  min-height:calc(var(--fh) + 2*var(--pad));max-width:440px;width:100%;margin-inline:auto}
.bm-fig{grid-column:2;grid-row:1/-1;align-self:start;margin-top:var(--pad);width:var(--fw);height:var(--fh);overflow:visible}
.bm-body{fill:color-mix(in srgb,var(--fg2) 17%,var(--card));stroke:color-mix(in srgb,var(--fg2) 36%,var(--card));stroke-width:1;stroke-linejoin:round;vector-effect:non-scaling-stroke}
.bm-det{fill:none;stroke:color-mix(in srgb,var(--fg2) 30%,var(--card));stroke-width:1;stroke-linecap:round;vector-effect:non-scaling-stroke}
.bm-mk path{fill:none;stroke:var(--c);stroke-width:1.25;stroke-linecap:round;opacity:.7;vector-effect:non-scaling-stroke}
.bm-mk circle{fill:var(--c);stroke:var(--card);stroke-width:1.5;transition:r .15s ease}
/* centré dans sa rangée puis décalé de (--y − --ry)·--fh par une marge : centre = --pad + --fh·--y, comme le trait de la silhouette */
.bm-pt{--d:calc((var(--y) - var(--ry))*var(--fh)*2);align-self:center;margin-top:max(0px,var(--d));margin-bottom:max(0px,-1*var(--d));width:min(150px,100%);padding:5px 8px;border-radius:12px;background:color-mix(in srgb,var(--c) 9%,var(--card));box-shadow:inset 0 0 0 .5px color-mix(in srgb,var(--c) 35%,transparent)}
.bm-pt.l{grid-column:1;justify-self:end;text-align:right;justify-items:end}
.bm-pt.r{grid-column:3;justify-self:start}
.bm-pt:is([data-k="chest"],[data-k="armL"]){grid-row:1;--ry:var(--ry1)}
.bm-pt:is([data-k="armR"],[data-k="waist"]){grid-row:2;--ry:var(--ry2)}
.bm-pt[data-k="thigh"]{grid-row:3;--ry:var(--ry3)}
.bm-pt.l .bm-v{justify-content:flex-end}
.bm-pt .bm-l{font-weight:600;color:var(--fg)}
.bm-pt .bm-v b{font-size:16px}
.bm-pt .spark{width:56px;height:14px;display:block}
.bm-pt.empty{background:var(--card);box-shadow:inset 0 0 0 1px var(--sep)}
.bm-sum-b:focus-visible,.bm-pt:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
.bm-sum-b:active{transform:scale(.97)}
.bm-pt:active{transform:scale(.97)}
.bmap:has(.bm-pt[data-k="chest"]:is(:hover,:focus-visible)) .bm-mk[data-k="chest"] circle,
.bmap:has(.bm-pt[data-k="armL"]:is(:hover,:focus-visible)) .bm-mk[data-k="armL"] circle,
.bmap:has(.bm-pt[data-k="armR"]:is(:hover,:focus-visible)) .bm-mk[data-k="armR"] circle,
.bmap:has(.bm-pt[data-k="waist"]:is(:hover,:focus-visible)) .bm-mk[data-k="waist"] circle,
.bmap:has(.bm-pt[data-k="thigh"]:is(:hover,:focus-visible)) .bm-mk[data-k="thigh"] circle{r:5.5}
/* Carte étroite : conserver mesure, unité et variation ; la mini-courbe redondante cède sa place
   pour que les repères tiennent dans leur rangée nominale (traits alignés), y compris avec les polices de secours. */
/* 320 px : « 101,0 cm » tient sur une ligne (valeur et unité côte à côte) ; une valeur plus longue passe encore à la ligne sans déborder */
/* Conteneur étroit (320 px) : silhouette un peu plus courte (colonnes des repères plus larges), valeur et unité un cran
   plus petites, pour que « 101,0 cm » tienne sur une ligne même avec les fontes de repli Linux, plus larges que SF.
   Le retour à la ligne reste possible pour une valeur hors norme (« 9 999,9 cm ») : jamais de texte tronqué. */
@container (max-width:332px){.bmap{--fh:264px;--pad:24px;--gap:4px}.bm-pt{padding:5px 3px}.bm-pt .bm-v{column-gap:2px}.bm-pt .bm-v b{font-size:14px;letter-spacing:-.03em}.bm-pt .bm-v small{font-size:10px}.bm-pt .spark{display:none}}
/* Ajouter une activité (jour de repos) : une entrée, puis le choix Musculation / Autre activité */
.add-activity .ttl{font-weight:600;color:var(--accent)}
.aa-intro{margin:0 0 4px}
.sheet .sb:has(>.aa-intro){gap:16px}
.aa-sec{display:grid;gap:6px;margin-bottom:4px}
.aa-sec .rowi{padding-block:8px}
.aa-sec .aa-models{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));padding:0;gap:0}
.aa-models [data-act="aaCustom"]{grid-column:1/-1}
.aa-models .rowi{gap:6px;padding-inline:12px}
.aa-models .rowi + .rowi::before{left:12px;right:12px}
.aa-h{display:flex;align-items:center;gap:6px;margin:0;padding-inline:4px;font-size:var(--t-foot);font-weight:600;color:var(--fg2);text-transform:none}
.aa-h svg{width:16px;height:16px;color:var(--accent)}
.bm-note{margin:0;font-size:var(--t-cap);color:var(--fg2);text-align:center}
/* sexe non renseigné : silhouette neutre provisoire et accès direct au choix (Réglages › Profil) */
.bm-pick{display:flex;flex-wrap:wrap;justify-content:center;align-items:center;column-gap:6px;margin-top:-8px}
.bm-pick .tbtn{min-height:var(--tap,44px);font-size:var(--t-cap);font-weight:600}
@media (prefers-reduced-motion:reduce){.bm-sum-b:active,.bm-pt:active{transform:none}.bm-mk circle{transition:none}}
@media (prefers-contrast:more){.bm-pt,.bm-sum-b{box-shadow:inset 0 0 0 1px var(--fg2)}.bm-mk path{opacity:1}}
/* Nutrition : actions contextuelles et mesures compactes, inspirées des listes iOS. */
.nutrition-methods .main{text-align:left;font-weight:600;letter-spacing:-.01em}
.nutrition-methods .rowi{min-height:52px;gap:12px}
.nutrition-methods .qs{width:36px;height:36px;border-radius:11px;background:color-mix(in srgb,var(--accent) 10%,var(--card))}
.sheet .sh .recipe-access{display:inline-flex;align-items:center;justify-content:flex-end;gap:5px;min-height:44px;padding:0;font-size:15px;white-space:nowrap}
.recipe-access svg{width:18px;height:18px;flex:none}
.food-capture-actions{display:flex;gap:10px;min-width:0}
.food-capture{display:flex;flex:1;align-items:center;justify-content:center;gap:8px;min-width:0;min-height:48px;padding:10px 12px;border:0;border-radius:14px;background:var(--fill);color:var(--accent);font:500 15px var(--font);cursor:pointer}
.food-capture svg{width:22px;height:22px;flex:none}
.food-capture:focus-visible{outline:2px solid var(--accent);outline-offset:3px}
.food-capture:active{background:color-mix(in srgb,var(--accent) 16%,var(--card))}
.food-entry{display:flex;align-items:center;gap:0;border-radius:22px;background:var(--card);box-shadow:0 2px 10px rgba(0,0,0,.025);padding:4px}
.food-primary{appearance:none;border:0;background:none;padding:12px;display:flex;align-items:center;gap:12px;flex:1;min-width:0;text-align:left;cursor:pointer;border-radius:18px}
.food-entry-icon{display:grid;place-items:center;flex:none;width:42px;height:42px;border-radius:14px;color:var(--accent);background:color-mix(in srgb,var(--accent) 10%,var(--card))}
.food-entry-icon svg{width:23px;height:23px}
.food-entry-copy{display:grid;gap:3px;min-width:0;flex:1}
.food-entry-caption{font-size:var(--t-cap);color:var(--fg2);letter-spacing:.01em}
.food-entry-title{font-size:var(--t-body);font-weight:600;letter-spacing:-.015em;line-height:1.25}
.food-primary > .chev-r{flex:none}
.food-more{appearance:none;border:0;border-left:1px solid var(--fill);background:none;color:var(--accent);font-size:26px;font-weight:700;min-width:44px;min-height:44px;border-radius:0 16px 16px 0;cursor:pointer;align-self:center}
.food-scan{appearance:none;border:0;border-left:1px solid var(--fill);background:none;color:var(--accent);min-width:48px;min-height:44px;display:grid;place-items:center;cursor:pointer;align-self:center}
.food-scan:last-child{border-radius:0 16px 16px 0}
.food-scan svg{width:22px;height:22px}
.food-scan:active{background:var(--fill)}
.scan-tick{width:22px;flex:none;display:grid;place-items:center;color:var(--accent)}
.scan-tick svg{width:20px;height:20px}
.scan-slot[aria-pressed="true"] .main{font-weight:600;color:var(--accent)}
.nutrition-water{border-radius:22px;gap:12px;box-shadow:0 2px 10px rgba(0,0,0,.025)}
.nw-heading{display:flex;align-items:center;gap:7px;color:var(--accent)}
.nw-heading h2{margin:0;font-size:var(--t-sub);font-weight:600;letter-spacing:-.01em}
.nw-icon{display:flex}.nw-icon svg{width:18px;height:18px}
.nw-reading{display:flex;align-items:baseline;justify-content:space-between;gap:8px;flex-wrap:wrap}
.nw-reading strong{font-size:var(--t-large);font-family:var(--rounded);font-weight:700;letter-spacing:-.035em;line-height:1.15;font-variant-numeric:tabular-nums}
.nw-reading small{font-size:var(--t-body);font-weight:500;letter-spacing:0;color:var(--fg2)}
.nw-reading > span,.nw-actions > span{font-size:var(--t-cap);color:var(--fg2)}
.nw-progress{height:6px;border-radius:999px;background:var(--fill);overflow:hidden}
.nw-progress i{display:block;height:100%;border-radius:inherit;background:var(--accent)}
.nw-actions{display:flex;align-items:center;justify-content:space-between;gap:8px;flex-wrap:wrap}
.nw-actions > div{display:flex;gap:6px;margin-left:auto}
.water-step{appearance:none;border:0;min-height:44px;min-width:44px;border-radius:999px;cursor:pointer;font-size:var(--t-sub);font-weight:600}
.water-minus{background:var(--fill);color:var(--fg);font-size:22px}
.water-plus{padding:8px 16px;background:color-mix(in srgb,var(--accent) 11%,var(--card));color:var(--accent)}
.water-step:disabled{opacity:.4;cursor:default}
.nutrition-supp-section{display:grid;gap:8px}
.nutrition-supp-section h2{margin:0 4px;font-size:var(--t-sub);font-weight:600;color:var(--fg2);letter-spacing:-.01em}
.nutrition-supp-list{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,10em),1fr));gap:8px}
.nutrition-supp{appearance:none;border:0;min-height:52px;padding:12px 14px;border-radius:16px;background:var(--card);display:flex;align-items:center;gap:10px;text-align:left;cursor:pointer;font-size:var(--t-sub);font-weight:500}
.nutrition-supp > span:last-child{min-width:0;overflow-wrap:anywhere}
.ns-check{display:grid;place-items:center;flex:none;width:24px;height:24px;border-radius:50%;color:var(--fg2);background:var(--fill)}
.ns-check svg{width:14px;height:14px}
.nutrition-supp.on .ns-check{background:var(--green-t);color:#fff}
.sheet.nutrition-sheet{container-type:inline-size;background:color-mix(in srgb,var(--bg) 94%,transparent);backdrop-filter:blur(24px);-webkit-backdrop-filter:blur(24px);border-top:1px solid color-mix(in srgb,var(--card) 80%,transparent)}
.nutrition-sheet .sh h2{white-space:normal;overflow:visible;overflow-wrap:anywhere;line-height:1.2}
@container (max-width:14em){.nutrition-sheet .sh{display:grid;grid-template-columns:auto minmax(0,1fr);gap:12px}.nutrition-sheet .sh > span:last-child{display:none}}
.food-primary:active,.food-more:active,.nutrition-methods button:active,.nutrition-supp:active,.water-step:active{background:var(--fill);transform:scale(.98)}
@media (prefers-reduced-motion:reduce){.food-primary:active,.food-more:active,.nutrition-methods button:active,.nutrition-supp:active,.water-step:active{transform:none}}
@media (prefers-reduced-transparency:reduce){.sheet.nutrition-sheet{background:var(--bg);backdrop-filter:none;-webkit-backdrop-filter:none}}
@media (prefers-contrast:more){.food-entry,.nutrition-water,.nutrition-supp,.sheet.nutrition-sheet{border:1px solid var(--fg2);box-shadow:none}.sheet.nutrition-sheet{background:var(--bg)}}
.session-muscles summary{cursor:pointer;min-height:44px;align-content:center;font-weight:600}
.session-muscles[open] summary{margin-bottom:12px}
.session-overview .hc-stats{flex-wrap:wrap}
.hero-card{appearance:none;border:0;width:100%;text-align:left;color:var(--fg);cursor:pointer;border-radius:var(--r-feature);padding:var(--card-pad);display:grid;grid-template-columns:1fr 92px;gap:12px;align-items:center;background:linear-gradient(140deg,color-mix(in srgb,var(--accent) 22%,var(--card)) 0%,color-mix(in srgb,var(--purple) 10%,var(--card)) 60%,var(--card) 100%);box-shadow:var(--shadow)}
.hero-card.static{cursor:default;grid-template-columns:1fr}
.hero-card.rest-card{cursor:default;grid-template-columns:1fr;background:linear-gradient(140deg,color-mix(in srgb,var(--purple) 16%,var(--card)),var(--card))}
.hc-l{display:grid;gap:10px;min-width:0}
/* accueil : bloc programme compact (titre + semaine sur une ligne, repli propre à 320 px) */
.home-hero{grid-template-columns:minmax(0,1fr);padding:14px var(--card-pad)}
.home-hero .hc-l{gap:6px}
.home-hero .hh-foot{margin-top:4px}
.hh-top{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:6px 12px;min-width:0}
/* Repos : titre court, semaine à côté même à 320 px ; nom de séance : base 6em, la semaine passe dessous si la place manque */
.hh-top .title2{flex:1 1 auto;min-width:0;overflow-wrap:anywhere;hyphens:auto;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.home-hero:not(.rest-card) .hh-top .title2{flex-basis:6em}
.home-hero .wdots{display:flex;width:auto;flex:none;gap:5px}
.home-hero .wd{width:15px;gap:2px}
.home-hero .wd i{width:15px;height:15px}
.home-hero .wd.plan i,.home-hero .wd.miss i{border-width:1.5px}
.hh-foot{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px 12px}
.hh-foot .hc-stats{flex-wrap:wrap;gap:4px 14px}
.hc-map svg{width:100%;height:auto;display:block}
.hc-stats{display:flex;gap:14px;font-size:var(--t-foot);color:var(--fg2)}
.hc-stats b{font-family:var(--rounded);font-size:var(--n-s);color:var(--fg);margin-right:3px}
.cta{display:inline-flex;align-items:center;gap:4px;background:var(--accent);color:var(--on-accent);font-weight:600;border-radius:var(--r-pill);padding:8px 14px;justify-self:start;font-size:var(--t-sub)}
.cta .chev-r{color:var(--on-accent)}
.wdots{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:6px;width:100%}
.wd{display:grid;justify-items:center;gap:3px}
.wd i{width:22px;height:22px;border-radius:50%;background:var(--fill);display:block}
.wd b{font-size:var(--t-cap2);color:var(--fg2);font-weight:600}
.wd.done i{background:var(--green)}
.wd.plan i{background:transparent;border:2px solid var(--accent)}
.wd.miss i{background:transparent;border:2px solid var(--red)}
.wd.rest i{transform:scale(.55)}
.wd.now b{color:var(--accent)}
.sups{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:var(--space-grid)}
.sup{appearance:none;border:0;background:none;display:grid;justify-items:center;gap:6px;cursor:pointer;padding:0;color:var(--fg)}
.sup .sc{width:58px;height:58px;border-radius:50%;background:var(--card);box-shadow:var(--shadow),inset 0 0 0 1.5px var(--sep);display:grid;place-items:center;color:var(--fg2);position:relative}
.sup .sc svg{width:24px;height:24px}
.sup.on .sc{background:var(--green);color:#fff;box-shadow:none}
.sup .sl{font-size:var(--t-cap);font-weight:500;color:var(--fg2);text-align:center;overflow-wrap:anywhere;hyphens:auto}
.badge{position:absolute;top:-2px;right:-2px;background:var(--orange);color:#fff;font-size:10px;font-weight:700;font-style:normal;border-radius:999px;padding:2px 5px}
.crit{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--space-grid)}
.cr{padding:var(--card-pad-c);display:flex;flex-wrap:wrap;gap:10px;align-items:center}
.cr > div{min-width:0;overflow-wrap:anywhere}
.cv{font-family:var(--rounded);font-size:var(--n-s);font-weight:700;font-variant-numeric:tabular-nums}
.cl{font-size:var(--t-cap);color:var(--fg2)}
.donutwrap{display:grid;grid-template-columns:minmax(130px,170px) 1fr;gap:16px;align-items:center}
.donutwrap > svg{width:100%;height:auto;display:block}
.mc .mring{width:40px;height:40px;flex:none}
.mc{min-width:0}
.mv{white-space:nowrap}
.mchips{display:grid;gap:10px}
.mc{display:flex;gap:10px;align-items:center}
.mv{font-family:var(--rounded);font-size:var(--n-s);font-weight:700;font-variant-numeric:tabular-nums}
.mv small{font-size:var(--t-foot);color:var(--fg2);font-weight:500}
.ml{font-size:var(--t-cap);font-weight:600}
@media (max-width:380px){.donutwrap{grid-template-columns:120px 1fr;gap:10px}.mv{font-size:17px}}
.meal{padding:var(--card-pad-c) var(--card-pad);display:grid;gap:var(--card-gap)}
.mh{display:flex;align-items:center;gap:10px}
.mi{width:36px;height:36px;border-radius:10px;display:grid;place-items:center;flex:none}
.mi svg{width:20px;height:20px}
.mt{font-weight:600;overflow-wrap:anywhere;hyphens:auto}
.addc{appearance:none;border:0;width:34px;height:34px;border-radius:50%;background:var(--accent);color:var(--on-accent);display:grid;place-items:center;cursor:pointer;flex:none}
.addc svg{width:18px;height:18px;stroke-width:2.6}
.items{display:grid;gap:2px}
.fi{display:grid;grid-template-columns:1fr auto auto 26px;gap:10px;align-items:center;font-size:var(--t-sub);padding:5px 0;border-top:.5px solid var(--sep)}
.fi:first-child{border-top:0}
.fn{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.fg{color:var(--fg2);font-size:var(--t-foot);font-variant-numeric:tabular-nums}
.fk{font-variant-numeric:tabular-nums;font-weight:600;min-width:3ch;text-align:right}
.fx{appearance:none;border:0;background:var(--fill);width:24px;height:24px;border-radius:50%;color:var(--fg2);cursor:pointer;font-size:15px;line-height:1}
.meal .chips.scroll{margin-inline:calc(-1 * var(--card-pad));padding-inline:var(--card-pad)}
.iconb{appearance:none;border:0;width:32px;height:32px;border-radius:50%;background:var(--fill);color:var(--accent);display:grid;place-items:center;cursor:pointer}
.iconb svg{width:16px;height:16px}
.iconb:disabled{opacity:.3;cursor:default}
.mgrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(96px,1fr));gap:8px}
.mg{background:var(--fill2);border-radius:var(--r-md);padding:8px 10px;display:grid;gap:3px}
.mgn{font-family:var(--rounded);font-size:var(--n-s);font-weight:700;font-variant-numeric:tabular-nums}
.mgl{font-size:var(--t-cap);color:var(--fg2)}
.mgb{height:4px;background:var(--fill);border-radius:2px;overflow:hidden}
.mgb i{display:block;height:100%}
.hscroll{display:flex;gap:var(--space-grid);overflow-x:auto;scrollbar-width:none;margin-inline:-16px;padding-inline:16px;padding-block:2px 6px}
.hscroll::-webkit-scrollbar{display:none}
.rec{appearance:none;border:0;flex:none;width:150px;padding:var(--card-pad-c);display:grid;gap:var(--card-gap-c);text-align:left;cursor:pointer;color:var(--fg)}
.rec .ri{color:var(--orange)}
.rec .ri svg{width:20px;height:20px}
.rec .rv{font-family:var(--rounded);font-size:var(--n-m);font-weight:700;font-variant-numeric:tabular-nums}
.rec .rv small{font-size:var(--t-foot);color:var(--fg2)}
.rec .rn{font-size:var(--t-foot);font-weight:600;line-height:1.2;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.rec .rd{font-size:var(--t-cap);color:var(--fg2)}
.sgrid,.pgrid2{display:grid;grid-template-columns:1fr 1fr;gap:var(--space-grid)}
.scard{appearance:none;border:0;padding:var(--card-pad-c);display:grid;grid-template-columns:44px 1fr;gap:10px;align-items:center;text-align:left;cursor:pointer;color:var(--fg);min-width:0}
.smap svg{width:100%;height:auto;display:block}
.sinfo{min-width:0;display:grid;gap:2px}
.sdate{font-size:var(--t-cap);color:var(--fg2)}
.stitle{font-weight:700}
.schips{display:flex;flex-wrap:wrap;gap:4px 8px;font-size:var(--t-cap);color:var(--fg2)}
.pcard{appearance:none;border:0;padding:var(--card-pad-c);display:grid;gap:var(--card-gap-c);text-align:left;cursor:pointer;color:var(--fg)}
.pcard.dim{opacity:.55}
.pmaps{display:grid;grid-template-columns:1fr 1fr;gap:4px;max-width:120px}
.pmaps svg{width:100%;height:auto;display:block}
.ptitle{font-family:var(--rounded);font-size:var(--t-title3);font-weight:700}
.psub{font-size:var(--t-foot);color:var(--fg2)}
.wdays{display:flex;gap:6px;flex-wrap:wrap}
.wday{display:grid;justify-items:center;gap:4px}
.wday b{font-size:var(--t-cap2);color:var(--fg2)}
.wday i{width:32px;height:32px;border-radius:50%;display:grid;place-items:center;font-style:normal;font-weight:700;font-size:14px;background:var(--fill);color:var(--fg3)}
.wday.on i{background:var(--accent);color:var(--on-accent)}
.rules{display:grid;grid-template-columns:repeat(3,1fr);gap:var(--space-grid)}
@media (max-width:480px){.rules{grid-template-columns:1fr}}
.rule{padding:var(--card-pad-c);display:grid;gap:var(--card-gap-c)}
.rule svg{width:20px;height:20px;color:var(--accent)}
.rule b{font-size:var(--t-sub)}
.rule span{font-size:var(--t-foot);color:var(--fg2)}
.dotsel{display:flex;gap:6px;padding-top:6px}
.dotsel button{appearance:none;border:0;width:22px;height:22px;border-radius:50%;background:var(--fill);cursor:pointer;padding:0}
.dotsel button.on{background:var(--c)}
.empty-v{display:grid;justify-items:center;gap:8px;padding:18px 0;color:var(--fg3);font-size:var(--t-sub);text-align:center}
.empty-v svg{width:30px;height:30px}
/* Feuille de mesure : la grande valeur EST le champ (largeur = nombre de caractères, chiffres tabulaires), unité accolée ;
   au repos une capsule discrète signale qu'elle se touche, au focus un anneau d'accent ; −/+ restent des pas d'ajustement. */
.bigstep{display:flex;align-items:center;justify-content:center;gap:14px;padding:8px 0;min-width:0}
.bigstep button{appearance:none;border:0;flex:none;width:56px;height:56px;border-radius:50%;background:var(--card);box-shadow:var(--shadow);font-size:28px;line-height:1;color:var(--accent);cursor:pointer;-webkit-tap-highlight-color:transparent;transition:transform .1s ease-out}
.bigstep button:active{transform:scale(.92)}
.bigstep button:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
.bigstep .bv-wrap{display:flex;align-items:baseline;justify-content:center;gap:4px;min-width:0;padding:2px 14px 4px;border-radius:20px;background:color-mix(in srgb,var(--fill) 70%,transparent);cursor:text;transition:background-color .15s ease,box-shadow .15s ease}
.bigstep .bv-wrap:focus-within{background:var(--fill);box-shadow:inset 0 0 0 2px var(--accent)}
.bigstep .bv{appearance:none;-webkit-appearance:none;border:0;margin:0;padding:0;background:none;outline:none;color:var(--fg);caret-color:var(--accent);font-family:var(--rounded);font-size:var(--n-xxl);line-height:1.15;font-weight:700;font-variant-numeric:tabular-nums;letter-spacing:-.02em;text-align:right;width:calc(var(--n,3)*1ch + .1em);min-width:2ch;max-width:100%}
.bigstep .bv::placeholder{color:var(--fg3);opacity:1}
.bigstep .bv[aria-invalid="true"]{color:var(--red-t)}
.bigstep:has(.bv[aria-invalid="true"]) .bv-wrap{box-shadow:inset 0 0 0 2px var(--red)}
.bigstep .bu{font-size:var(--t-body);font-weight:600;color:var(--fg2)}
.mnote{text-align:center;min-height:1.35em;margin-top:-6px}
@media (max-width:359px){.bigstep{gap:8px}.bigstep button{width:48px;height:48px}.bigstep .bv-wrap{padding-inline:10px}.bigstep .bv{font-size:44px}}
@media (prefers-reduced-motion:reduce){.bigstep button,.bigstep .bv-wrap{transition:none}.bigstep button:active{transform:none}}
@media (prefers-contrast:more){.bigstep .bv-wrap{box-shadow:inset 0 0 0 1px var(--fg2)}}

/* v5 : séance guidée & photo d'assiette */
body.running{overflow:hidden}
.runner{position:fixed;inset:0;z-index:15;background:var(--bg);display:flex;flex-direction:column;padding-top:env(safe-area-inset-top,0px);padding-bottom:env(safe-area-inset-bottom,0px)}
.rtop{display:flex;align-items:center;gap:10px;padding:10px 16px 6px;max-width:720px;width:100%;margin:0 auto}
.rtt{flex:1;text-align:center;display:grid;line-height:1.2}
.rtt b{font-size:16px}
.rtt span{font-size:13px;color:var(--fg2);font-variant-numeric:tabular-nums}
.rbtn{appearance:none;border:0;width:40px;height:40px;border-radius:50%;background:var(--fill);color:var(--fg);display:grid;place-items:center;cursor:pointer;flex:none}
.rbtn svg{width:20px;height:20px}
.rbtn.ghost{width:52px;height:52px;background:var(--card);box-shadow:var(--shadow);color:var(--accent)}
.rbtn:disabled{opacity:.3;cursor:default}
.rprog{display:flex;gap:4px;padding:4px 16px 8px;max-width:720px;width:100%;margin:0 auto}
.rprog i{flex:1;height:5px;border-radius:3px;background:var(--fill);overflow:hidden}
.rprog i b{display:block;height:100%;background:var(--green)}
.rprog i.cur{outline:1.5px solid var(--accent);outline-offset:1px}
.rbody{flex:1;overflow-y:auto;padding:8px 16px 16px;display:grid;gap:16px;align-content:start;max-width:720px;width:100%;margin:0 auto}
.rbody.center{justify-items:center;text-align:center;align-content:center}
.rex{display:flex;gap:14px;align-items:center}
.rpict{width:96px;height:120px;flex:none;background:var(--card);border-radius:20px;display:grid;place-items:center;box-shadow:var(--shadow)}
.rpict svg{width:84px;height:110px}
.rpict.sm{width:56px;height:68px;border-radius:14px}
.rpict.sm svg{width:48px;height:62px}
.rinfo{display:grid;gap:6px;min-width:0}
.rname{font-family:var(--rounded);font-size:26px;font-weight:700;letter-spacing:-.02em;line-height:1.15}
.rset{display:flex;align-items:center;justify-content:space-between;gap:10px;font-size:15px;color:var(--fg2)}
.rset b{font-family:var(--rounded);font-size:22px;color:var(--fg)}
.rsug{background:color-mix(in srgb,var(--accent) 12%,transparent);color:var(--accent);border-radius:14px;padding:10px 14px;font-weight:500;font-size:15px}
.rlast{display:flex;align-items:center;gap:8px;font-size:14px;color:var(--fg2)}
.rlast svg{width:16px;height:16px;flex:none}
.runner .fbox{background:var(--card);box-shadow:var(--shadow);padding:14px 10px}
.runner .fbox input{font-size:40px}
.runner .fbox .ctl button{width:48px;height:48px;background:var(--fill2)}
.rfoot{display:flex;gap:12px;align-items:center;padding:10px 16px 14px;max-width:720px;width:100%;margin:0 auto}
.rmain{flex:1;padding:17px;font-size:18px;border-radius:16px}
.bigring{position:relative;width:min(240px,62vw);aspect-ratio:1}
.bigring svg{width:100%;height:100%;display:block}
.brv{position:absolute;inset:0;display:grid;place-items:center;font-family:var(--rounded);font-size:52px;font-weight:700;font-variant-numeric:tabular-nums;letter-spacing:-.02em}
.rnext{display:flex;gap:12px;align-items:center;text-align:left;background:var(--card);border-radius:18px;padding:12px 16px;box-shadow:var(--shadow);width:100%;max-width:420px}
.rnn{font-weight:700;font-size:17px}
.okbig{width:64px;height:64px;border-radius:50%;background:var(--green);color:#fff;display:grid;place-items:center}
.okbig svg{width:34px;height:34px;stroke-width:3}
.slid{display:grid;grid-template-columns:70px 1fr 24px;gap:10px;align-items:center;font-size:15px}
.slid b{font-variant-numeric:tabular-nums;text-align:right}
.exstrip{display:grid;gap:8px}
.exs{display:grid;grid-template-columns:40px minmax(0,1fr);gap:10px;align-items:center;font-size:15px}
.exs .pict{width:40px;height:40px;background:var(--fill2);border-radius:10px;display:grid;place-items:center}
.exs .pict svg{width:34px;height:34px}
.exs-copy{display:grid;gap:3px;min-width:0}
.exs-copy>span{line-height:1.35;overflow-wrap:anywhere}
.exs-copy>small{font-size:12px;line-height:1.3;color:var(--fg2);font-weight:400;font-variant-numeric:tabular-nums}
.setpips{display:flex;gap:4px;margin-top:4px}
.setpips i{width:16px;height:5px;border-radius:3px;background:var(--fill)}
.setpips i.d{background:var(--green)}
.addc.cam{background:var(--fill);color:var(--accent)}
.platepick{display:block;position:relative;border-radius:var(--r-feature);overflow:hidden;background:var(--card);box-shadow:var(--shadow);cursor:pointer;aspect-ratio:4/3;max-width:100%}
.platepick img{width:100%;height:100%;object-fit:cover;display:block}
.platepick input{position:absolute;inset:0;opacity:0;cursor:pointer}
.pp-empty{position:absolute;inset:0;display:grid;place-items:center;align-content:center;gap:10px;color:var(--accent)}
.pp-empty svg{width:44px;height:44px}
.pstats{display:grid;grid-template-columns:repeat(4,1fr);text-align:center}
.pstats b{display:block;font-family:var(--rounded);font-size:24px;font-variant-numeric:tabular-nums}
.pstats span{font-size:12px;color:var(--fg2)}
.pitems{display:grid;gap:4px}
.pit{display:grid;grid-template-columns:28px 1fr 84px;gap:10px;align-items:center;padding:6px 0;border-top:.5px solid var(--sep)}
.pit.off .pin{opacity:.45}
.pin{min-width:0}
.pin .s2{font-size:13px;color:var(--fg2)}
.pg{display:flex;align-items:center;gap:4px;font-size:14px;color:var(--fg2)}
.pg input{appearance:none;border:0;background:var(--fill);color:var(--fg);font:inherit;font-size:16px;border-radius:8px;padding:7px 6px;width:100%;min-width:0;text-align:center;font-variant-numeric:tabular-nums}
.spin{width:28px;height:28px;border-radius:50%;border:3px solid var(--fill);border-top-color:var(--accent);animation:sp 1s linear infinite}
@keyframes sp{to{transform:rotate(360deg)}}

/* v6 : écran de séance */
.runner{background:radial-gradient(130% 55% at 50% 0%,color-mix(in srgb,var(--accent) 16%,var(--bg)) 0%,var(--bg) 62%)}
.rtop,.rprog{max-width:560px}
.rwrap{flex:1;min-height:0;display:flex;flex-direction:column;max-width:560px;width:100%;margin:0 auto}
.rstage{flex:1;min-height:0;overflow-y:auto;display:grid;justify-items:center;align-content:center;gap:16px;padding:6px 20px 14px;text-align:center}
.rphoto{position:relative;width:100%;max-width:420px;aspect-ratio:3/2;border-radius:24px;overflow:hidden;background:#fff;box-shadow:0 10px 30px rgba(0,0,0,.18)}
.rphoto img{position:absolute;inset:0;width:100%;height:100%;object-fit:contain}
.rphoto img.b{animation:xfade 2.4s ease-in-out infinite}
@keyframes xfade{0%,35%{opacity:0}50%,85%{opacity:1}100%{opacity:0}}
@media (prefers-reduced-motion:reduce){.rphoto img.b{animation:none;opacity:0}}
.ph-badge{position:absolute;right:10px;top:10px;width:44px;height:56px;border-radius:12px;background:rgba(28,28,30,.82);display:grid;place-items:center}
.ph-badge svg{width:38px;height:50px}
.ph-lab{position:absolute;left:10px;bottom:10px;background:rgba(28,28,30,.72);color:#fff;font-size:12px;font-weight:600;border-radius:999px;padding:4px 10px;display:inline-flex;align-items:center;gap:6px}
.ph-lab i{width:6px;height:6px;border-radius:50%;background:#34C759}
.rfig{position:relative;width:min(230px,56vw);aspect-ratio:1}
.rfig .sring{position:absolute;inset:0;width:100%;height:100%}
.rfig-b{position:absolute;inset:13% 25%;display:grid;place-items:center}
.rfig-b svg{width:100%;height:100%}
.rhead{display:grid;justify-items:center;gap:8px}
.rhead .rname{font-size:30px;text-wrap:balance}
.rpills{display:flex;gap:6px;flex-wrap:wrap;justify-content:center}
.link-pill{border:0;cursor:pointer;color:var(--accent);background:color-mix(in srgb,var(--accent) 12%,transparent)}
.link-pill .chev-r{width:10px;height:10px;color:var(--accent)}
.rsetline{display:flex;gap:12px;align-items:center;text-align:left;background:var(--card);border-radius:18px;padding:12px 16px;width:100%;max-width:420px;box-shadow:var(--shadow)}
.rsetring{position:relative;width:52px;height:52px;flex:none}
.rsetring svg{width:100%;height:100%}
.rsetring b{position:absolute;inset:0;display:grid;place-items:center;font-family:var(--rounded);font-size:20px}
.rsl1{font-weight:700;font-size:16px}
.rsl2{font-size:14px;color:var(--accent);margin-top:2px}
.rsl3{font-size:13px;color:var(--fg2);display:flex;align-items:center;gap:5px;margin-top:4px}
.rsl3 svg{width:14px;height:14px;flex:none}
.rpanel{background:var(--card);border-radius:28px 28px 0 0;padding:18px 18px 12px;display:grid;gap:14px;box-shadow:0 -10px 30px rgba(0,0,0,.10)}
@media (min-width:600px){.rpanel{border-radius:28px;margin-bottom:16px}}
.rvals{display:grid;grid-template-columns:1fr 1px 1fr;align-items:center}
.rsep{width:1px;height:76%;background:var(--sep);justify-self:center}
.rval{display:grid;justify-items:center;gap:6px}
.rval .lab{font-size:12px;color:var(--fg2);font-weight:600;text-transform:uppercase;letter-spacing:.04em}
.rnum{display:flex;align-items:baseline;justify-content:center;gap:4px;width:100%}
.rnum input{appearance:none;border:0;background:transparent;color:var(--fg);font-family:var(--rounded);font-size:52px;font-weight:700;letter-spacing:-.03em;text-align:right;width:3.2ch;min-width:0;padding:0;font-variant-numeric:tabular-nums}
.rnum input::placeholder{color:var(--fg3)}
.rnum small{font-size:16px;color:var(--fg2);font-weight:600}
.rsteps{display:flex;gap:14px}
.rsteps button{appearance:none;border:0;width:46px;height:46px;border-radius:50%;background:var(--fill);color:var(--fg);font-size:24px;cursor:pointer;display:grid;place-items:center}
.rsteps button:active{transform:scale(.94)}
.rrir{display:grid;gap:6px}
.rrir > span{font-size:12px;color:var(--fg2);font-weight:600;text-transform:uppercase;letter-spacing:.04em;text-align:center}
.runner .rfoot{padding:0;max-width:none}
.runner .rfoot .rbtn{width:52px;height:52px;background:var(--fill);color:var(--accent)}
.rmain{display:inline-flex;align-items:center;justify-content:center;gap:8px}
.rmain svg{width:20px;height:20px;stroke-width:2.6}
.rmain .chev-r{color:currentColor}
.rnext{max-width:none;box-shadow:none;background:var(--fill2);padding:10px 12px}
.rnimg{width:72px;height:48px;object-fit:contain;background:#fff;border-radius:10px;flex:none}
.thumb{width:100%;height:100%;object-fit:contain;background:#fff;border-radius:inherit;display:block}
.exphotos{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.exphotos figure{margin:0;display:grid;gap:4px}
.exphotos img{width:100%;aspect-ratio:3/2;object-fit:contain;background:#fff;border-radius:var(--r-md);display:block}
.exphotos figcaption{font-size:var(--t-cap);color:var(--fg2);text-align:center}
/* animation d'exercice : 180 px (résolution source), lecture explicite, pause = image retirée */
.exanim{margin:0;display:grid;justify-items:center;gap:10px;padding:14px 12px 12px;background:var(--card);border-radius:var(--r-feature);box-shadow:var(--shadow)}
.exanim-stage{position:relative;width:180px;height:180px;border-radius:var(--r-md);overflow:hidden;background:#fff;display:grid;place-items:center}
.exanim-img{width:180px;height:180px;display:block}
.exanim-poster{width:100%;height:100%;display:grid;place-items:center;background:var(--fill2)}
.exanim-poster img{width:100%;height:100%;object-fit:contain;background:#fff}
.exanim-poster img.ill{background:transparent;mix-blend-mode:multiply}
.exanim-poster svg{width:72%;height:auto}
.exanim-msg{position:absolute;left:8px;right:8px;bottom:8px;margin:0;padding:5px 8px;border-radius:var(--r-sm);background:color-mix(in srgb,var(--card) 92%,transparent);color:var(--fg);font-size:var(--t-cap);line-height:1.3;text-align:center}
.exanim-btn{appearance:none;border:0;cursor:pointer;min-height:44px;padding:0 18px;border-radius:var(--r-pill);background:color-mix(in srgb,var(--accent) 12%,var(--card));color:var(--accent);font:inherit;font-size:var(--t-sub);font-weight:600;display:inline-flex;align-items:center;gap:8px}
.exanim-btn svg{width:16px;height:16px}
.exanim-btn:active{transform:scale(.97);transition:transform .1s ease-out}
.exanim figcaption{font-size:11px;color:var(--fg2);text-align:center;line-height:1.3}
@media (prefers-reduced-motion:reduce){.exanim-btn:active{transform:none}}
@media (prefers-contrast:more){.exanim{border:1px solid var(--fg2);box-shadow:none}.exanim-btn{border:1px solid currentColor}}


/* v6 : barre d'onglets sans texte & mode démo */
nav.tabbar button{padding:10px 2px 12px}
nav.tabbar button svg{width:28px;height:28px}
.demopill{position:fixed;left:50%;transform:translateX(-50%);top:calc(8px + env(safe-area-inset-top,0px));z-index:9;display:flex;align-items:center;gap:8px;background:var(--orange);color:#fff;font-size:13px;font-weight:600;border-radius:999px;padding:5px 6px 5px 12px;box-shadow:0 4px 14px rgba(0,0,0,.2)}
.demopill svg{width:14px;height:14px}
.demopill button{appearance:none;border:0;background:rgba(255,255,255,.25);color:#fff;font-weight:600;font-size:12px;border-radius:999px;padding:4px 10px;cursor:pointer}

/* v7 : séance adaptée à la hauteur de chaque iPhone */
.runner{height:100vh;height:100dvh}
.rtop{padding-block:clamp(4px,1vh,10px) 4px}
.rbtn{width:clamp(34px,4.8vh,40px);height:clamp(34px,4.8vh,40px)}
.rprog{padding-block:2px clamp(4px,1vh,8px)}
.rstage{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:clamp(8px,1.8vh,16px);padding:clamp(4px,1vh,8px) 16px clamp(8px,1.5vh,14px);overflow:hidden}
.rstage > *{flex:none}
.runner{--ph:36dvh}
.rphoto{flex:none;width:auto;max-width:100%;height:min(var(--ph),calc((100vw - 32px) / 1.5),380px);min-height:90px;aspect-ratio:3/2}
.rfig{flex:0 1 auto;width:auto;height:min(230px,30dvh);max-width:56vw;aspect-ratio:1}
.rhead{gap:clamp(4px,.8vh,8px)}
.rhead .rname{font-size:clamp(20px,3.3vh,30px);line-height:1.12}
.runner .kicker{font-size:clamp(11px,1.5vh,13px)}
.rsetline{padding:clamp(8px,1.3vh,12px) 14px;gap:10px}
.rsetring{width:clamp(38px,5.6vh,52px);height:clamp(38px,5.6vh,52px)}
.rsl1{font-size:clamp(14px,2vh,16px)}
.rsl2{font-size:clamp(12.5px,1.75vh,14px)}
.rpanel{padding:clamp(10px,1.8vh,18px) 16px max(10px,env(safe-area-inset-bottom,0px));gap:clamp(8px,1.5vh,14px)}
@media (min-width:600px){.rpanel{padding-bottom:16px}}
.rnum input{font-size:clamp(34px,6.4vh,56px)}
.rnum small{font-size:clamp(13px,1.8vh,16px)}
.rsteps button{width:clamp(38px,5.4vh,48px);height:clamp(38px,5.4vh,48px);font-size:clamp(20px,2.8vh,24px)}
.rval{gap:clamp(2px,.7vh,6px)}
.rrir .seg button{padding-block:clamp(4px,.8vh,6px)}
.runner .rfoot .rbtn{width:clamp(44px,6.2vh,52px);height:clamp(44px,6.2vh,52px)}
.rmain{padding:clamp(12px,2vh,17px);font-size:clamp(16px,2.3vh,18px)}
.bigring{width:min(240px,34dvh,62vw)}
.brv{font-size:clamp(36px,6vh,52px)}
/* écrans courts (iPhone SE, mini, Safari avec barres) */
@media (max-height:740px){
  .rsl3,.ph-lab,.rhead .kicker{display:none}
  .runner{--ph:29dvh}
  .rrir > span{display:none}
}
@media (max-height:640px){
  .runner{--ph:23dvh}
  .rphoto{border-radius:16px}
  .ph-badge{display:none}
  .rpills .pill:not(.link-pill):not(.blue){display:none}
  .rsetline .rsl2{display:-webkit-box;-webkit-line-clamp:1;-webkit-box-orient:vertical;overflow:hidden}
}
/* écrans larges et hauts : plus d'air */
@media (min-height:880px){.runner{--ph:38dvh}}


.rvals.one{grid-template-columns:1fr}
.rvals.one .rnum input{width:3ch}
.lestbtn{appearance:none;border:0;background:none;color:var(--accent);font-size:14px;font-weight:600;cursor:pointer;justify-self:center;padding:2px 8px;margin-top:-4px}



/* v11b : séance guidée */
.r2{flex:1;min-height:0;overflow-y:auto;overscroll-behavior:contain;display:flex;flex-direction:column;align-items:stretch;gap:clamp(8px,1.4vh,14px);padding:clamp(4px,1vh,10px) 16px max(10px,env(safe-area-inset-bottom,0px));max-width:560px;width:100%;margin:0 auto;box-sizing:border-box}
.rh{display:grid;gap:2px}
.rh-k{font-size:13px;font-weight:600;color:var(--fg2);letter-spacing:.01em}
.rh-t{display:flex;align-items:flex-start;gap:10px}
.rh-t .rname{flex:1;min-width:0;margin:0;font-family:var(--rounded);font-size:clamp(22px,3.3vh,30px);font-weight:700;letter-spacing:-.02em;line-height:1.12;text-wrap:balance}
.rinfo{appearance:none;border:0;background:var(--fill);color:var(--accent);width:36px;height:36px;border-radius:50%;display:grid;place-items:center;flex:none;cursor:pointer;margin-top:2px}
.rinfo svg{width:22px;height:22px}
.rvis{flex:1 1 auto;min-height:90px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;position:relative}
.rvis-in{position:relative;flex:1 1 auto;min-height:0;width:100%;max-height:420px}
.rvis-in img{position:absolute;inset:0;width:100%;height:100%;object-fit:contain}
.rvis-in.pho{max-width:min(100%,520px);border-radius:22px;overflow:hidden;background:#fff}
.rvis-in.ill img{mix-blend-mode:multiply}
.rvis-in.pic{display:grid;place-items:center}
.rvis-in.pic svg{height:100%;max-height:260px;width:auto}
.rvis-in .fb{opacity:0}
@media (prefers-reduced-motion:no-preference){
 .rvis-in .fa{animation:fa 3.2s ease-in-out infinite}.rvis-in .fb{animation:fb 3.2s ease-in-out infinite}
 .rphase .pa{animation:pa 3.2s ease-in-out infinite}.rphase .pb{animation:pb 3.2s ease-in-out infinite}}
@keyframes fa{0%,44%{opacity:1}50%,94%{opacity:0}100%{opacity:1}}
@keyframes fb{0%,44%{opacity:0}50%,94%{opacity:1}100%{opacity:0}}
@keyframes pa{0%,46%{color:var(--fg);background:var(--fill)}50%,96%{color:var(--fg3);background:transparent}100%{color:var(--fg);background:var(--fill)}}
@keyframes pb{0%,46%{color:var(--fg3);background:transparent}50%,96%{color:var(--fg);background:var(--fill)}100%{color:var(--fg3);background:transparent}}
.rphase{display:flex;gap:4px;flex:none}
.rphase span{font-size:12px;font-weight:600;padding:3px 10px;border-radius:999px;color:var(--fg3)}
.rphase .pa{color:var(--fg);background:var(--fill)}
.rcard{background:var(--card);border-radius:var(--r-feature);padding:clamp(var(--card-pad-c),1.8vh,var(--card-pad)) clamp(8px,2.5vw,var(--card-pad-c));display:grid;gap:clamp(8px,1.4vh,14px);box-shadow:var(--shadow);flex:none}
.rc-h{display:flex;flex-wrap:wrap;align-items:center;gap:10px}
.rc-s{font-size:15px;color:var(--fg2)}
.rc-s b{font-family:var(--rounded);font-size:20px;color:var(--fg);margin-right:2px}
.rdots{display:flex;gap:5px;flex:1}
.rdots i{width:9px;height:9px;border-radius:50%;background:var(--fill)}
.rdots i.ok{background:var(--green)}
.rdots i.cur{background:var(--accent);box-shadow:0 0 0 3px color-mix(in srgb,var(--accent) 25%,transparent)}
.rc-tg{font-size:13px;font-weight:600;color:var(--accent);background:color-mix(in srgb,var(--accent) 14%,transparent);padding:4px 10px;border-radius:999px;white-space:nowrap}
.rc-tip{font-size:clamp(13px,1.8vh,15px);color:var(--fg2);line-height:1.35;display:grid;gap:4px}
.rc-last{display:flex;align-items:center;gap:5px;font-size:13px;color:var(--fg3)}
.rc-last svg{width:14px;height:14px;flex:none}
.rc-in{display:grid;gap:10px;border-top:.5px solid var(--sep);padding-top:clamp(8px,1.4vh,14px)}
.rc-in.two{grid-template-columns:1fr 1fr}
.stp{display:grid;justify-items:center;gap:2px}
.stp .lab{font-size:12px;color:var(--fg2);font-weight:600;text-transform:uppercase;letter-spacing:.04em}
.stc{display:flex;align-items:center;justify-content:center;gap:clamp(6px,2vw,14px);width:100%}
.stc button{appearance:none;border:0;width:clamp(40px,5.4vh,48px);height:clamp(40px,5.4vh,48px);border-radius:50%;background:var(--fill);color:var(--fg);font-size:24px;cursor:pointer;display:grid;place-items:center;flex:none}
.stc button:active{transform:scale(.94)}
.r2 .rnum{width:auto;min-width:0}
.r2 .rnum input{font-size:clamp(34px,6vh,52px);width:2.6ch}
.rc-in.two .rnum input{font-size:clamp(30px,5vh,42px);width:2.8ch}
.rc-in.two .rnum small{font-size:13px}
.r2 .lestbtn{justify-self:center;margin-top:-4px}
.rc-rir{display:grid;gap:6px}
.rc-rir > span{font-size:12px;color:var(--fg2);font-weight:600;text-transform:uppercase;letter-spacing:.04em;text-align:center}
.r2 .rfoot{padding:0;max-width:none;flex:none}
@media (max-height:700px){.rc-tip .rc-last,.rh-k{display:none}.rphase{display:none}}
/* illustrations au trait : fond fondu dans la page */
img.thumb.ill,img.rnimg.ill,.exphotos.ill img{background:transparent;mix-blend-mode:multiply}
@media (prefers-color-scheme:dark){:root:not([data-theme="light"]) .rvis-in.ill img,:root:not([data-theme="light"]) img.thumb.ill,:root:not([data-theme="light"]) img.rnimg.ill,:root:not([data-theme="light"]) .exphotos.ill img{filter:invert(1);mix-blend-mode:screen}}
:root[data-theme="dark"] .rvis-in.ill img,:root[data-theme="dark"] img.thumb.ill,:root[data-theme="dark"] img.rnimg.ill,:root[data-theme="dark"] .exphotos.ill img{filter:invert(1);mix-blend-mode:screen}
.exphotos.ill{background:var(--card);border-radius:var(--r-card);padding:8px}

/* v11a : en-têtes, champs, feuilles, thème */
/* Colonne bornée : un titre long ne peut pas élargir la page (Chromium mobile agrandirait alors la zone de mise en page et sortirait la barre d’onglets de l’écran). */
.lt{padding-block:12px 4px;container-type:inline-size;grid-template-columns:minmax(0,1fr)}
.lt .hrow{display:flex;align-items:center;gap:10px;min-height:44px}
.lt .hrow h1{flex:1;min-width:0}
.lt .hact{display:flex;align-items:center;gap:8px;flex:none}
.lt .hnav{display:flex;align-items:center;min-height:32px;margin-left:-6px}
input.field,select.field,textarea.field{box-sizing:border-box;max-width:100%}
.sheet.tall{height:92%}
:root[data-theme="light"]{color-scheme:light}
.mmap svg{max-height:340px}

/* v11c : anti-débordement carte de série */
.r2,.rcard,.rc-in,.rc-in > *,.stp,.stc,.rc-h,.rc-tip{min-width:0}
.rcard{width:auto;align-self:stretch;box-sizing:border-box;overflow:hidden}
.rc-tip{overflow-wrap:anywhere}
.rc-last{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block}
.rc-last svg{vertical-align:-2px;margin-right:4px}
.rc-s{white-space:nowrap}
.stc{gap:clamp(4px,1.5vw,12px)}
.stc button{width:clamp(36px,4.8vh,44px);height:clamp(36px,4.8vh,44px);font-size:22px}
.r2 .rnum{flex:0 1 auto}
.r2 .rnum input{width:2.3ch;max-width:100%}
.rc-in.two .rnum input{font-size:clamp(26px,4.2vh,36px);width:2.4ch}
.rc-in.two .rnum small{font-size:12px}
.rc-in.two .stp .lab{font-size:11px}

/* v12a : vignettes contraintes (Safari) */
.pict{position:relative;overflow:hidden;box-sizing:border-box}
.pict > img.thumb{position:absolute;inset:0;width:100%;height:100%;max-width:100%;max-height:100%;object-fit:contain;padding:3px;box-sizing:border-box}
.pict > svg{width:100%;height:100%;max-width:100%;max-height:100%}
.rnimg{width:72px;height:48px;max-width:72px;max-height:48px;flex:none;object-fit:contain;background:transparent}

/* v13a : accueil allégé, semaine type lisible */
.streakrow{width:100%;text-align:left;appearance:none;border:0;font:inherit;color:var(--fg)}
.streakrow .si{width:36px;height:36px;border-radius:10px;background:color-mix(in srgb,var(--green) 16%,transparent);color:var(--green);display:grid;place-items:center;flex:none}
.streakrow .si svg{width:20px;height:20px}
.streakrow > svg:last-child{color:var(--fg3);width:18px;height:18px}
.wdays{gap:4px}
.wday i{width:auto;min-width:40px;height:26px;padding:0 8px;border-radius:var(--r-pill);font-size:var(--t-cap)}
@media (max-width:380px){.wday i{min-width:34px;padding:0 6px;font-size:11px}}

/* v14a : coach hors barre d'onglets */
.coachb{color:var(--purple);background:color-mix(in srgb,var(--purple) 14%,transparent)}
nav.tabbar button{flex:1}

/* v15a : scan produit */
.scanb{appearance:none;border:0;width:44px;height:44px;border-radius:12px;background:var(--fill);color:var(--accent);display:grid;place-items:center;flex:none;cursor:pointer}
.scanb svg{width:24px;height:24px}
.scanpick{aspect-ratio:3/2}
/* scanner direct : viseur vidéo (caméra arrière), cadre de visée, états sans caméra, photo en secours */
.scan-live{position:relative;border-radius:var(--r-feature);overflow:hidden;background:#0b0b0c;aspect-ratio:4/3;width:100%;max-width:100%;max-height:360px;isolation:isolate}
.scan-video{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;display:block}
.scan-aim{position:absolute;inset:22% 12%;border-radius:14px;box-shadow:0 0 0 999px rgba(0,0,0,.38);z-index:1;pointer-events:none}
.scan-aim::before{content:"";position:absolute;inset:0;border-radius:inherit;border:2px solid rgba(255,255,255,.92)}
.scan-aim i{position:absolute;left:8%;right:8%;top:50%;height:2px;border-radius:1px;background:var(--red,#ff453a);opacity:.85}
.scan-live[data-state="starting"] .scan-aim i{opacity:0}
.scan-hint{position:absolute;left:0;right:0;bottom:0;margin:0;padding:10px 14px;z-index:2;color:#fff;font-size:var(--t-sub);font-weight:600;letter-spacing:.01em;text-align:center;background:linear-gradient(transparent,rgba(0,0,0,.55))}
.scan-off{display:grid;justify-items:center;gap:10px;padding:20px 16px;border-radius:var(--r-feature);background:var(--card);box-shadow:var(--shadow);color:var(--fg2);font-size:var(--t-sub);text-align:center}
.scan-off svg{width:34px;height:34px;color:var(--accent)}
.scan-photo{position:relative;display:flex;align-items:center;justify-content:center;gap:8px;min-height:44px;color:var(--accent);font-weight:600;font-size:var(--t-sub);cursor:pointer;border-radius:12px}
.scan-photo svg{width:20px;height:20px}
.scan-photo input{position:absolute;inset:0;opacity:0;cursor:pointer}
.scan-photo:has(input:focus-visible){outline:2px solid var(--accent);outline-offset:2px}
@media (prefers-reduced-motion:no-preference){.scan-live[data-state="live"] .scan-aim i{animation:scanSweep 1.6s ease-in-out infinite alternate}@keyframes scanSweep{from{transform:translateY(-34px)}to{transform:translateY(34px)}}}
.pp-empty small{font-size:var(--t-cap);color:var(--fg2);font-weight:500}
/* caméra commune : le même viseur lit les codes-barres seul et porte le déclencheur photo (assiette / étiquette) ;
   consigne en haut, barre de prise en bas comme l'app Appareil photo (photothèque à gauche, déclencheur au centre) */
.scan-live.has-shot .scan-hint{top:0;bottom:auto;background:linear-gradient(rgba(0,0,0,.55),transparent)}
.scan-live.has-shot .scan-aim{inset:17% 14% 36%;box-shadow:0 0 0 999px rgba(0,0,0,.16)}
.cam-bar{position:absolute;left:0;right:0;bottom:0;z-index:2;display:grid;grid-template-columns:1fr auto 1fr;align-items:center;padding:6px 14px 10px;background:linear-gradient(transparent,rgba(0,0,0,.5))}
.cam-shutter{appearance:none;width:60px;height:60px;padding:4px;border-radius:50%;border:3px solid #fff;background:none;display:grid;cursor:pointer;-webkit-tap-highlight-color:transparent}
.cam-shutter i{border-radius:50%;background:#fff;transition:transform .1s ease-out}
.cam-shutter:active i{transform:scale(.86)}
.cam-shutter:disabled{opacity:.45;cursor:default}
.cam-shutter:focus-visible{outline:2px solid #fff;outline-offset:3px}
.cam-lib{position:relative;justify-self:start;width:44px;height:44px;border-radius:12px;display:grid;place-items:center;color:#fff;background:rgba(255,255,255,.2);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);cursor:pointer}
.cam-lib svg{width:22px;height:22px}
.cam-lib input{position:absolute;inset:0;opacity:0;cursor:pointer}
.cam-lib:has(input:focus-visible){outline:2px solid #fff;outline-offset:2px}
.cam-lib:active{transform:scale(.94)}
.cam-snap{margin:0;border-radius:var(--r-feature);overflow:hidden;background:#0b0b0c;aspect-ratio:4/3;max-height:360px;width:100%}
.cam-snap img{width:100%;height:100%;object-fit:contain;display:block}
.cam-alt{display:flex;flex-wrap:wrap;justify-content:center;gap:0 18px}
.cam-alt .scan-photo{appearance:none;border:0;background:none;font-family:inherit}
.scan-off .scan-photo{width:100%}
.scan-odd{color:var(--orange-t,var(--fg2));line-height:1.35}
@media (prefers-reduced-motion:reduce){.cam-shutter i{transition:none}.cam-shutter:active i{transform:none;opacity:.75}.cam-lib:active{transform:none}}
@media (prefers-reduced-transparency:reduce){.cam-lib{-webkit-backdrop-filter:none;backdrop-filter:none;background:rgba(0,0,0,.65)}}
@media (prefers-contrast:more){.cam-shutter{border-width:4px}.cam-lib{background:#000;outline:1px solid #fff}}
.prodcard{display:flex;gap:12px;align-items:center}
.prodimg{width:64px;height:64px;object-fit:contain;border-radius:12px;background:#fff;flex:none}
.badges{display:flex;gap:6px;flex-wrap:wrap;margin-top:6px}
.nsb{font-size:var(--t-cap);font-weight:700;color:#fff;padding:3px 9px;border-radius:var(--r-pill);letter-spacing:.02em}

/* v16a : nutrition */
.ftile{position:relative;border-radius:var(--r-card);overflow:hidden;color:#fff;height:96px}
.ftile.big{height:150px;border-radius:var(--r-feature)}
.ftile.xs{width:44px;height:44px;border-radius:12px;flex:none}
.ftile .fa,.ftile .fb{position:absolute;display:grid;place-items:center}
.ftile .fa{left:12%;top:14%;width:54%;height:72%}
.ftile .fb{right:8%;bottom:10%;width:34%;height:42%;opacity:.9}
.ftile.xs .fa{left:8%;top:8%;width:84%;height:84%}.ftile.xs .fb{display:none}
.ftile svg{width:100%;height:100%;filter:drop-shadow(0 2px 4px rgba(0,0,0,.18))}
.ftile::after{content:"";position:absolute;inset:0;background:radial-gradient(120% 90% at 100% 0%,rgba(255,255,255,.22),transparent 55%)}
.rcards{align-items:stretch}
/* cartes de recette : sélecteur limité à leur rangée (.rcard sert aussi à la carte de série de la séance guidée) */
.rcards .rcard{appearance:none;border:0;background:var(--card);color:var(--fg);text-align:left;border-radius:var(--r-feature);padding:8px 8px 10px;width:156px;flex:none;display:grid;gap:var(--card-gap-c);box-shadow:var(--shadow);cursor:pointer}
.rcards .rcard .rn{font-size:var(--t-foot);font-weight:600;line-height:1.2;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;min-height:2.4em;padding-inline:4px}
.rcards .rcard .rm{font-size:var(--t-cap);color:var(--fg2);padding-inline:4px;font-variant-numeric:tabular-nums}
.rtags{display:flex;gap:6px;flex-wrap:wrap}
.rtags .pill{display:inline-flex;align-items:center;gap:4px}.rtags .pill svg{width:13px;height:13px}
.insights{display:grid;gap:12px}
.ins{display:flex;gap:10px;align-items:flex-start;font-size:var(--t-sub);line-height:1.35}
.ins .ii{width:28px;height:28px;border-radius:8px;display:grid;place-items:center;flex:none;background:var(--fill2)}
.ins .ii svg{width:17px;height:17px}
.ins.adv{flex-wrap:wrap}.ins.adv .btn{margin-left:38px}
.pdist{display:flex;gap:8px;align-items:flex-end;position:relative;padding-bottom:26px;border-top:.5px solid var(--sep);padding-top:12px}
.pd{flex:1;display:flex;flex-direction:column;justify-content:flex-end;align-items:center;gap:3px;min-height:0}
.pd i{display:block;width:100%;max-width:38px;border-radius:6px 6px 3px 3px;flex:none}
.pd b{font-size:var(--t-cap);font-variant-numeric:tabular-nums}.pd span{font-size:var(--t-cap2);color:var(--fg2)}
.pdl{position:absolute;left:0;right:0;bottom:4px;display:flex;justify-content:space-between;font-size:var(--t-cap2);color:var(--fg3)}
.mline{display:grid;gap:4px;padding-top:8px;border-top:.5px solid var(--sep)}
.mline .mb{height:5px;border-radius:3px;background:var(--fill);overflow:hidden;display:block}.mline .mb i{display:block;height:100%;border-radius:3px}
.mline .num{font-size:var(--t-cap);color:var(--fg2)}
.meal.next{outline:1.5px solid color-mix(in srgb,var(--accent) 45%,transparent);outline-offset:-1.5px}
.wstats{display:grid;grid-template-columns:1fr 1fr;gap:var(--space-grid);margin-bottom:12px}
.wstats > div{display:grid;gap:2px;background:var(--fill2);border-radius:var(--r-md);padding:10px 12px}
.wstats b{font-family:var(--rounded);font-size:var(--n-m);font-variant-numeric:tabular-nums}.wstats b small{font-size:13px;color:var(--fg2)}
.wstats span{font-size:var(--t-cap);color:var(--fg2)}.wstats i{font-style:normal;font-size:var(--t-cap);font-weight:600}
/* bouton + central */
nav.tabbar .in{align-items:center}
nav.tabbar button.tabadd{padding:4px 0 6px}
nav.tabbar button.tabadd span{width:50px;height:50px;border-radius:50%;background:var(--accent);color:var(--on-accent);display:grid;place-items:center;box-shadow:0 6px 16px color-mix(in srgb,var(--accent) 40%,transparent);transform:translateY(-6px)}
nav.tabbar button.tabadd span svg{width:26px;height:26px;stroke-width:2.6}
nav.tabbar button.tabadd:active span{transform:translateY(-6px) scale(.94)}
.qgrid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--space-grid)}
.qbig{appearance:none;border:0;color:var(--fg);overflow-wrap:anywhere;hyphens:auto;padding:var(--card-pad-c) 8px;display:grid;justify-items:center;gap:var(--card-gap-c);text-align:center;cursor:pointer}
.qbig .qi{width:46px;height:46px;border-radius:50%;color:#fff;display:grid;place-items:center}.qbig .qi svg{width:24px;height:24px}
.qbig b{font-size:var(--t-sub)}.qbig > span:last-child{font-size:var(--t-cap);color:var(--fg2);line-height:1.2}
.qs{width:28px;height:28px;display:grid;place-items:center;flex:none}.qs svg{width:22px;height:22px}

/* v17a : Safari — largeur des blocs de séance sans pourcentage */
.r2 > .rh,.r2 > .rvis,.r2 > .rcard,.r2 > .rfoot{width:auto;align-self:stretch;flex-shrink:0}
.r2 > .rvis{flex:1 1 auto}
.rcard{grid-template-columns:minmax(0,1fr)}
.rc-in.two{grid-template-columns:minmax(0,1fr) minmax(0,1fr)}

/* v18a : activités + note produit */
.achips{display:grid;gap:8px;margin-top:10px}
.achip{appearance:none;border:0;color:var(--fg);padding:10px var(--card-pad-c);display:flex;align-items:center;gap:10px;text-align:left;cursor:pointer;font:inherit}
.achip .ai,.actweek .ai{width:32px;height:32px;border-radius:9px;background:color-mix(in srgb,var(--teal) 16%,transparent);color:var(--teal);display:grid;place-items:center;flex:none}
.achip .ai svg,.actweek .ai svg{width:20px;height:20px}
.achip > span:not(.ai){flex:1;min-width:0;font-size:var(--t-sub)}
.achip b{font-size:var(--t-foot);color:var(--fg2);font-weight:600;white-space:nowrap}
.actweek{display:flex;align-items:center;gap:10px;font-size:var(--t-sub)}
.agrid{display:grid;grid-template-columns:repeat(5,1fr);gap:8px}
.abtn{appearance:none;border:0;color:var(--fg);padding:10px 4px 8px;display:grid;justify-items:center;gap:4px;cursor:pointer;font:inherit}
.abtn span{width:30px;height:30px;display:grid;place-items:center;color:var(--fg2)}.abtn span svg{width:26px;height:26px}
.abtn b{font-size:var(--t-cap2);font-weight:600;text-align:center;line-height:1.15}
.abtn.on{background:var(--accent);color:var(--on-accent)}.abtn.on span{color:var(--on-accent)}
.arow{display:grid;gap:6px;padding:8px 0}.arow + .arow{border-top:.5px solid var(--sep)}
.arow .lab{font-size:var(--t-cap);color:var(--fg2);font-weight:600;text-transform:uppercase;letter-spacing:.04em;text-align:center}.arow .lab small{text-transform:none;font-weight:500;letter-spacing:0}
.arow .rnum input{font-size:36px;width:3ch}
.btn.danger{color:var(--red)}
.scorecard{display:grid;gap:8px}
.sch{display:flex;gap:12px;align-items:center}
.scring{width:52px;height:52px;flex:none}
.rems{display:grid;gap:5px}
.rem{display:flex;align-items:center;gap:8px;font-size:var(--t-sub)}
.rem i{width:9px;height:9px;border-radius:50%;flex:none}

/* v18b : aperçu iPhone sur grand écran */
.island,.homebar{display:none}
html.frame,html.frame body{height:100%;overflow:hidden;background:#09090b}
/* Marge UA de 8 px remplacée par un padding équivalent : même position du téléphone, mais racine de 100 % pile, donc jamais défilée par un focus. */
html.frame body{display:grid;place-items:center;margin:0;padding:16px 0 0;box-sizing:border-box}
/* #phone transformé = repère des position:fixed (barre, feuilles, séance) : il ne doit pas défiler, sinon ils partent avec le contenu. Le défilement est porté par #app. */
html.frame #phone{position:relative;width:393px;height:852px;overflow:hidden;transform:translateZ(0) scale(var(--pscale,1));transform-origin:center;border-radius:54px;background:var(--bg);box-shadow:0 0 0 11px #1c1c1e,0 0 0 13px #4a4a4e,0 0 0 14px #1c1c1e,0 40px 90px rgba(0,0,0,.65)}
html.frame #app{height:100%;box-sizing:border-box;overflow-y:auto;overscroll-behavior:contain;scrollbar-width:none;scroll-padding-bottom:calc(var(--tabbar-h,0px) + 8px)}
html.frame #app::-webkit-scrollbar{display:none}
html.frame .island{display:block;position:fixed;left:50%;top:11px;transform:translateX(-50%);width:124px;height:36px;border-radius:20px;background:#000;z-index:40;pointer-events:none}
html.frame .homebar{display:block;position:fixed;left:50%;bottom:8px;transform:translateX(-50%);width:138px;height:5px;border-radius:3px;background:var(--fg);opacity:.9;z-index:40;pointer-events:none}
html.frame #app{padding-top:50px;padding-bottom:max(140px,calc(var(--tabbar-h,0px) + 40px))}
html.frame .runner{padding-top:50px;padding-bottom:18px;height:auto;box-sizing:border-box}
html.frame .demopill{top:58px}
html.frame .toast{top:62px}
html.frame nav.tabbar{padding-bottom:22px;border-bottom-left-radius:54px;border-bottom-right-radius:54px}
html.frame .sheet{padding-bottom:26px;border-radius:16px 16px 54px 54px}
html.frame .sheet .sb{padding-bottom:40px}
html.frame #restRoot .rest{bottom:max(108px,calc(var(--tabbar-h,0px) + 12px))}
html.frame .bigring{width:240px}
html.frame .rfig{max-width:230px}
html.frame .rvis-in{max-height:380px}
html.frame .lt{padding-top:6px}
#frameToggle{position:fixed;right:16px;top:16px;z-index:50;appearance:none;border:0;background:#1c1c1e;color:#f2f2f7;font:600 13px var(--font);padding:8px 14px;border-radius:999px;cursor:pointer;box-shadow:0 0 0 1px #3a3a3c}
#frameToggle[hidden]{display:none}
html:not(.frame) #frameToggle{background:var(--card);color:var(--fg);box-shadow:var(--shadow),0 0 0 .5px var(--sep)}
/* fiabilité : statut d'enregistrement réel, champs refusés (style minimal, à harmoniser par le lot UX) */
.savestate{display:none;align-items:center;gap:10px;flex-wrap:wrap;font-size:var(--t-foot);color:var(--fg2);padding:6px 2px 0}
.savestate.on{display:flex}
.savestate .err{color:var(--red-t);font-weight:600}
[aria-invalid="true"]{outline:2px solid var(--red);outline-offset:1px}

/* v19 : accessibilité, petit écran, bureau, contrastes (audit du 12/10/2026) */
*,*::before,*::after{box-sizing:border-box}
/* couleurs de texte et de remplissage séparées des couleurs décoratives */
:root{--fg2:#636366;--accent:#005FCC;--accent-fill:#005FCC;--green-t:#1E7B34;--green-fill:#1E7B34;--orange-t:#A65A00;--orange-fill:#A65A00;--teal-t:#0B7285;--teal-fill:#0B7285;--red-t:#D70015;--pink-t:#C8174A;--purple-t:#8944AB;--purple-fill:#8944AB;--lime-t:#3F6F12;--olive-t:#6B6B00;--tap:44px;--side:232px}
@media (prefers-color-scheme:dark){:root:not([data-theme="light"]){--fg2:#98989F;--accent:#4DA2FF;--accent-fill:#0060DF;--green-t:#30D158;--green-fill:#1A7F37;--orange-t:#E68A00;--orange-fill:#B25E00;--teal-t:#40C8E0;--teal-fill:#0B7285;--red-t:#FF6961;--pink-t:#FF5C7A;--purple-t:#C77DF5;--purple-fill:#8944AB;--lime-t:#8BD346;--olive-t:#C9C94A}}
:root[data-theme="dark"]{--fg2:#98989F;--accent:#4DA2FF;--accent-fill:#0060DF;--green-t:#30D158;--green-fill:#1A7F37;--orange-t:#E68A00;--orange-fill:#B25E00;--teal-t:#40C8E0;--teal-fill:#0B7285;--red-t:#FF6961;--pink-t:#FF5C7A;--purple-t:#C77DF5;--purple-fill:#8944AB;--lime-t:#8BD346;--olive-t:#C9C94A}
.btn,.chip.on,.rirs button.on,#restRoot .rest button.p,.msg.u,.send,.cta,.addc,.wday.on i,nav.tabbar button.tabadd span,.abtn.on,.day.sel.today .n{background:var(--accent-fill)}
.btn.green,.okdot,.chk.on .o,.sup.on .sc,.okbig{background:var(--green-fill)}
.chk.on .o{border-color:var(--green-fill)}
.pill.green{color:var(--green-t)}.pill.orange{color:var(--orange-t)}.pill.red{color:var(--red-t)}
.danger,.btn.danger,.tbtn.danger{color:var(--red-t)}
.badge{background:var(--orange-fill)}
.rec .ri{color:var(--orange-t)}
.empty-v,.rc-last,.pdl,.wday i{color:var(--fg2)}
input::placeholder,textarea::placeholder{color:var(--fg2)}
.chk .o{border-color:var(--fg2)}
.sr{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}
[tabindex="-1"]:focus{outline:none}
.gh .t{margin:0}
.nsb{color:#000}

/* en-tête : actions toujours visibles, cibles de 44 px */
.lt h1{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.hp-sub{display:none}
@media (max-width:359px){.lt h1{font-size:28px}.lt .hact .pill{display:none}.hp-sub{display:inline}}
/* texte agrandi (≤ 14 em de large) : le titre passe à la ligne au lieu d'être tronqué */
@container (max-width:14em){.lt .hrow{flex-wrap:wrap}.lt .hrow h1{flex-basis:100%;white-space:normal;overflow:visible;overflow-wrap:anywhere;hyphens:auto}.lt .hact{margin-left:auto}}
.avatar{width:var(--tap);height:var(--tap);background:none;position:relative;margin-inline:-3px}
.avatar::before{content:"";position:absolute;inset:5px;border-radius:50%;background:var(--fill)}
.avatar.coachb::before{background:color-mix(in srgb,var(--purple) 14%,transparent)}
.avatar svg{position:relative}
.lt .hact{gap:4px}

/* zones tactiles agrandies sans changer le rendu */
.fx,.addc,.tbtn,.gh button,.lestbtn,.chk,.iconb,.rinfo,.rirq{position:relative}
.fx::after,.addc::after,.tbtn::after,.gh button::after,.lestbtn::after,.chk::after,.iconb::after,.rinfo::after,.rirq::after{content:"";position:absolute;left:50%;top:50%;width:max(100%,var(--tap));height:max(100%,var(--tap));transform:translate(-50%,-50%)}
.fi{grid-template-columns:minmax(0,1fr) auto auto 32px}
.fx{width:30px;height:30px;justify-self:end}
.addc{width:40px;height:40px}
.chk{width:36px;height:36px}
.sets{grid-template-columns:28px 1fr 1fr 1fr 36px}
.dotsel{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:2px}
.dotsel button{width:100%;height:34px;background:none;position:relative}
.dotsel button::before{content:"";position:absolute;left:50%;top:50%;width:20px;height:20px;margin:-10px 0 0 -10px;border-radius:50%;background:var(--fill)}
.dotsel button.on{background:none}.dotsel button.on::before{background:var(--c)}
.gh button{padding:10px 4px;margin:-10px -4px}

/* barre d'onglets avec libellés */
nav.tabbar button{color:var(--fg2);padding:7px 2px 6px;gap:3px;min-width:0}
nav.tabbar button svg{width:25px;height:25px}
nav.tabbar .tl{font-size:10.5px;font-weight:600;letter-spacing:-.01em;line-height:1.1;max-width:100%;text-align:center;overflow-wrap:anywhere;-webkit-hyphens:auto;hyphens:auto}
nav.tabbar button[aria-current="page"]{color:var(--accent)}
nav.tabbar .tabadd .tl,nav.tabbar .deskonly{display:none}
.seg button{min-width:min-content;white-space:normal;text-overflow:clip;line-height:1.15;min-height:32px}

/* notifications en bas, sans bloquer les commandes ; mode démo dans le flux */
.toast{top:auto;bottom:max(calc(98px + env(safe-area-inset-bottom,0px)),calc(var(--tabbar-h,0px) + 12px));border-radius:var(--r-card);display:flex;align-items:center;gap:14px;pointer-events:none;width:max-content;line-height:1.3}
.toast[hidden]{display:none}
.toast button{pointer-events:auto;appearance:none;border:0;background:none;color:var(--accent);font:inherit;font-weight:600;padding:6px 2px;cursor:pointer;flex:none;min-height:var(--tap)}
body.has-rest .toast{bottom:max(calc(156px + env(safe-area-inset-bottom,0px)),calc(var(--tabbar-h,0px) + 70px))}
body.running .toast{bottom:auto;top:calc(58px + env(safe-area-inset-top,0px))}
html.frame .toast{top:auto;bottom:max(122px,calc(var(--tabbar-h,0px) + 12px))}
html.frame body.running .toast{top:104px;bottom:auto}
/* Une feuille recouvre la navigation : sa confirmation reste près du bord inférieur,
   sans réserver la hauteur de la barre d'onglets masquée derrière elle. */
body:has(#sheetRoot .sheet) .toast{top:auto;bottom:calc(env(safe-area-inset-bottom,0px) + 10px);left:50%}
html.frame body:has(#sheetRoot .sheet) .toast{top:auto;bottom:36px}
.demobar{display:flex;align-items:center;gap:10px;margin-top:10px;background:color-mix(in srgb,var(--orange) 14%,var(--card));border-radius:var(--r-md);padding:4px 6px 4px 12px;font-size:var(--t-sub);font-weight:500}
.demobar svg{width:16px;height:16px;color:var(--orange-t);flex:none}
.demobar span{flex:1;min-width:0}

/* date consultée */
.strip .cap.datectx{display:flex;align-items:center;justify-content:center;flex-wrap:wrap;gap:2px 8px;margin-top:4px;padding:2px 10px;border-radius:var(--r-md);background:color-mix(in srgb,var(--orange) 13%,var(--bg));color:var(--fg)}
.datectx b{font-weight:600}

/* illustrations */
.rvis-cap{font-size:13px;color:var(--fg2);text-align:center}
img.imgerr{visibility:hidden}
.rvis-fb,.thumb-fb{display:none}
.has-imgerr > .rvis-fb{display:grid;place-items:center;position:absolute;inset:0}
.has-imgerr > .rvis-fb svg{height:100%;max-height:240px;width:auto}
.pict.has-imgerr > .thumb-fb{display:grid;place-items:center;position:absolute;inset:0;color:var(--fg2)}
.thumb-fb svg{width:22px;height:22px}
@media (prefers-color-scheme:dark){:root:not([data-theme="light"]) .rvis-in.pho,:root:not([data-theme="light"]) .exphotos:not(.ill) img,:root:not([data-theme="light"]) .prodimg,:root:not([data-theme="light"]) .rnimg:not(.ill){filter:brightness(.82)}}
:root[data-theme="dark"] .rvis-in.pho,:root[data-theme="dark"] .exphotos:not(.ill) img,:root[data-theme="dark"] .prodimg,:root[data-theme="dark"] .rnimg:not(.ill){filter:brightness(.82)}
@keyframes pa{0%,46%{color:var(--fg);background:var(--fill)}50%,96%{color:var(--fg2);background:transparent}100%{color:var(--fg);background:var(--fill)}}
@keyframes pb{0%,46%{color:var(--fg2);background:transparent}50%,96%{color:var(--fg);background:var(--fill)}100%{color:var(--fg2);background:transparent}}
.rphase span{color:var(--fg2)}
/* mouvement réduit : départ et arrivée côte à côte */
@media (prefers-reduced-motion:reduce){
 .rvis-in.ill,.rvis-in.pho{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);grid-template-rows:minmax(0,1fr);gap:8px}
 .rvis-in.ill > img,.rvis-in.pho > img{position:static;width:100%;height:100%;min-height:0;opacity:1}
 .rphase{align-self:stretch;display:grid;grid-template-columns:1fr 1fr;justify-items:center}
 .rphase span,.rphase .pa{color:var(--fg);background:none}
}

/* aides et valeurs des graphiques */
details.help,details.vals{font-size:var(--t-sub);color:var(--fg2)}
details.help summary,details.vals summary{cursor:pointer;color:var(--accent);font-weight:500;display:inline-flex;align-items:center;min-height:36px;list-style:none}
details.help summary::-webkit-details-marker,details.vals summary::-webkit-details-marker{display:none}
details.help p{margin:2px 0 6px;line-height:1.4}
details.vals table{font-size:var(--t-sub)}
details.vals th,details.vals td{padding:6px 10px 6px 0}
details.vals tbody th{font-size:var(--t-sub);text-transform:none;color:var(--fg);font-weight:500}
.rirq{appearance:none;border:0;background:var(--fill);color:var(--accent);width:20px;height:20px;border-radius:50%;font:700 12px var(--font);cursor:pointer;margin-left:6px;vertical-align:1px;text-transform:none}
.rirhelp{margin:0;font-size:13px;color:var(--fg2);text-align:center;line-height:1.35}
.rdate{color:var(--orange-t)!important;font-weight:600}
.heat [data-act="heatDay"]:focus-visible{outline:none;stroke:var(--fg);stroke-width:2.5px}
.tile.compact .ts{white-space:normal;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;line-height:1.3}
.rowi .main > .ttl,.rowi .main > .s2{display:block}
.prefrow .seg{width:132px;flex:none}
.pill.green{background:color-mix(in srgb,var(--green) 13%,var(--card))}.pill.orange{background:color-mix(in srgb,var(--orange) 14%,var(--card))}.pill.red{background:color-mix(in srgb,var(--red) 12%,var(--card))}.pill.blue{background:color-mix(in srgb,var(--accent) 11%,var(--card))}
@media (prefers-color-scheme:dark){:root:not([data-theme="light"]) .seg button.on{background:#5A5A5F}}
:root[data-theme="dark"] .seg button.on{background:#5A5A5F}
.rvis-in.has-imgerr::after{content:"Illustration indisponible";position:absolute;left:0;right:0;bottom:6px;text-align:center;font-size:13px;color:var(--fg2)}
.rvis-in.pho.has-imgerr::after{color:#555}
.rvis-in.has-imgerr + .rphase{display:none}
@media (max-width:359px){
 .day{flex-basis:42px}
 .day .n{width:1.875em;height:1.875em;font-size:16px}
 .seg button{font-size:12px;padding-inline:2px}
 nav.tabbar .tl{font-size:10px;letter-spacing:-.02em}
 nav.tabbar .tl[data-short]{font-size:0}nav.tabbar .tl[data-short]::after{content:attr(data-short);font-size:10px}
 nav.tabbar button{padding-inline:0}
}
@media (min-width:1024px){html:not(.frame) .strip .w{max-width:768px;margin-inline:auto}}

/* bureau : vraie mise en page, l'aperçu iPhone devient une option */
.duo,.meals{display:grid;grid-template-columns:minmax(0,1fr);gap:22px;min-width:0}
.meals{gap:16px}
@media (min-width:1024px){
 html:not(.frame) body{padding-left:var(--side)}
 html:not(.frame) nav.tabbar{top:0;bottom:0;right:auto;width:var(--side);border-top:0;border-right:.5px solid var(--sep);padding:20px 12px;background:var(--bg);-webkit-backdrop-filter:none;backdrop-filter:none;overflow-y:auto}
 html:not(.frame) nav.tabbar .in{display:flex;flex-direction:column;gap:2px;max-width:none;align-items:stretch}
 html:not(.frame) nav.tabbar button{display:flex;flex:none;flex-direction:row;align-items:center;justify-content:flex-start;gap:12px;padding:9px 12px;border-radius:var(--r-sm);min-height:var(--tap);font-size:var(--t-sub);color:var(--fg)}
 html:not(.frame) nav.tabbar button svg{width:22px;height:22px;color:var(--fg2)}
 html:not(.frame) nav.tabbar .tl{font-size:var(--t-sub);font-weight:500;text-align:start}
 html:not(.frame) nav.tabbar button:hover{background:var(--fill)}
 html:not(.frame) nav.tabbar button[aria-current="page"]{background:color-mix(in srgb,var(--accent) 13%,transparent);color:var(--accent)}
 html:not(.frame) nav.tabbar button[aria-current="page"] svg{color:var(--accent)}
 html:not(.frame) nav.tabbar .tabadd{order:-1;margin-bottom:14px;padding:6px 12px}
 html:not(.frame) nav.tabbar .tabadd span{width:34px;height:34px;transform:none;box-shadow:none}
 html:not(.frame) nav.tabbar .tabadd span svg{width:20px;height:20px;color:var(--on-accent)}
 html:not(.frame) nav.tabbar .tabadd:active span{transform:scale(.94)}
 html:not(.frame) nav.tabbar .tabadd .tl{display:block;font-weight:600}
 html:not(.frame) nav.tabbar .deskonly{display:flex}
 html:not(.frame) nav.tabbar .deskonly.first{margin-top:14px;border-top:.5px solid var(--sep);border-radius:0 0 10px 10px;padding-top:12px}
 html:not(.frame) #app{max-width:1120px;padding-inline:32px;padding-bottom:72px}
 html:not(.frame) .strip,html:not(.frame) #app > .stack > .chips.scroll,html:not(.frame) .hscroll{margin-inline:-32px;padding-inline:32px}
 html:not(.frame) .toast{left:calc(50% + var(--side) / 2);bottom:28px}
 html:not(.frame) body.running .toast{left:50%;top:72px;bottom:auto}
 html:not(.frame) #restRoot .rest{left:calc(50% + var(--side) / 2);bottom:24px}
 html:not(.frame) .tiles{grid-template-columns:repeat(4,minmax(0,1fr))}
 html:not(.frame) .sgrid,html:not(.frame) .pgrid2{grid-template-columns:repeat(3,minmax(0,1fr))}
 html:not(.frame) .crit{grid-template-columns:repeat(4,minmax(0,1fr))}
 html:not(.frame) .duo{grid-template-columns:minmax(0,1fr) minmax(0,1fr);align-items:stretch}
 html:not(.frame) .duo > .hero-card{height:100%}
 html:not(.frame) .meals{grid-template-columns:repeat(2,minmax(0,1fr));align-items:start}
 html:not(.frame) .sheetwrap{align-items:center;padding:24px}
 html:not(.frame) .sheet{max-width:600px;border-radius:var(--r-card);max-height:88vh;padding-bottom:0;box-shadow:0 20px 60px rgba(0,0,0,.3)}
 html:not(.frame) .sheet.tall{height:88vh}
 html:not(.frame) .grab{display:none}
}

/* Programme : semaine lisible, séances et récupération distinctes. */
.program-overview{padding:18px;background:var(--card);border-radius:22px;box-shadow:var(--shadow);min-width:0}
.program-top{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap}
.program-top h2{margin:5px 0 0;font-size:var(--t-title1);letter-spacing:-.025em;line-height:1.15}
.program-top .tbtn{min-height:44px;font-size:var(--t-sub);padding:8px 0}
.program-summary{color:var(--fg2);font-size:var(--t-sub);margin:8px 0 20px}
/* cibles d'au moins 44 px : la grille défile horizontalement plutôt que de se comprimer (320 px) */
.program-week{display:grid;grid-template-columns:repeat(7,minmax(44px,1fr));gap:6px;overflow-x:auto;font-size:var(--t-cap);padding:3px 3px 4px}
.program-day{display:grid;justify-items:center;gap:10px;color:var(--fg2);font-weight:600}
.program-day i{width:100%;min-height:44px;border-radius:13px;background:var(--fill2);display:grid;place-items:center}
.program-day i svg{width:21px;height:21px}
.program-day.on i{color:var(--accent);background:color-mix(in srgb,var(--accent) 12%,var(--card))}
.program-legend{display:grid;gap:8px;margin-top:16px;padding-top:14px;border-top:.5px solid var(--sep);font-size:var(--t-foot)}
.program-legend>div{display:flex;align-items:center;flex-wrap:wrap;gap:5px 8px}
.program-legend b{font-weight:600;overflow-wrap:anywhere}
.program-legend span:last-child{color:var(--fg2)}
.program-symbol{display:flex;color:var(--accent)}
.program-symbol svg{width:16px;height:16px}
.rest-legend .program-symbol{color:var(--fg2)}
/* Bibliothèque : découvrir par muscle, rechercher sans perdre le clavier. */
.library-page{gap:20px}
.library-bar{position:relative;display:flex;align-items:center;gap:8px;min-height:44px;min-width:0}
.library-bar [hidden]{display:none!important}
.lib-icon{appearance:none;border:0;width:44px;height:44px;flex:none;display:grid;place-items:center;padding:0;border-radius:50%;background:var(--fill);color:var(--accent);cursor:pointer;transition:transform .12s ease-out,background-color .12s ease-out}
.lib-icon svg{width:20px;height:20px}
.lib-icon:active{transform:scale(.92);background:var(--fill2)}
.lib-icon.on{background:var(--accent);color:var(--on-accent)}
.lib-icon.on:active{background:color-mix(in srgb,var(--accent) 82%,#000)}
.lib-search{display:flex;align-items:center;min-width:0;margin-left:auto;flex:0 0 44px;border-radius:22px;transition:flex-grow .24s cubic-bezier(.2,.8,.2,1),background-color .2s ease-out}
.lib-search:not(.open)>:where(:not(#libSearchBtn)){display:none}
.lib-search.open{flex-grow:1;background:var(--fill);gap:6px;padding-left:12px;overflow:hidden}
.lib-search.open>#libSearchBtn{display:none}
.lib-search.open>.lib-search-glyph{display:flex;color:var(--fg2)}
.lib-search.open>.lib-search-glyph svg{width:18px;height:18px}
.lib-search.open>.field{display:block;flex:1;min-width:0;background:transparent;border:0;padding:10px 0;box-shadow:none;font-size:var(--t-body)}
.lib-search.open>#libClear{display:grid;background:transparent;color:var(--fg2)}
.lib-search.open>#libClear svg{width:18px;height:18px}
.lib-search input::-webkit-search-cancel-button{display:none}
.lib-search.open:focus-within{outline:2px solid var(--accent);outline-offset:2px}
.lib-search input:focus-visible{outline:none}
.lib-search.open:has(#libClear:focus-visible){outline:0}
.lib-search #libClear:focus-visible{outline-offset:-4px;border-radius:50%}
.lib-menu{position:absolute;z-index:6;top:calc(100% + 6px);right:0;min-width:13.5em;max-width:calc(100vw - 32px);padding:6px;border-radius:16px;background:var(--card);box-shadow:0 12px 36px rgb(0 0 0 / .18),0 0 0 .5px var(--sep);transform-origin:top right;animation:lib-menu-in .18s cubic-bezier(.2,.8,.2,1)}
.lib-menu button{appearance:none;border:0;background:none;color:var(--fg);font:inherit;font-size:var(--t-body);display:flex;align-items:center;gap:12px;width:100%;min-height:44px;padding:8px 10px;border-radius:10px;text-align:left;cursor:pointer}
.lib-menu button:hover,.lib-menu button:focus-visible{background:var(--fill)}
.lib-menu button:focus-visible{outline-offset:-2px}
.lib-menu button:active{background:var(--fill)}
.lib-menu-ic{display:flex;color:var(--accent)}
.lib-menu-ic svg,.lib-menu-check svg{width:20px;height:20px}
.lib-menu-check{display:flex;color:var(--accent);visibility:hidden}
.lib-menu [aria-checked="true"]{font-weight:600}
.lib-menu [aria-checked="true"] .lib-menu-check{visibility:visible}
@keyframes lib-menu-in{from{opacity:0;transform:scale(.94)}to{opacity:1;transform:none}}
@media(prefers-reduced-motion:reduce){.lib-search{transition:none}.lib-icon,.lib-fbtn{transition:none}.lib-icon:active,.lib-fbtn:active{transform:none}.lib-menu{animation-name:lib-menu-fade}}
@keyframes lib-menu-fade{from{opacity:0}to{opacity:1}}
@media(prefers-contrast:more){.lib-menu{box-shadow:0 0 0 1px var(--fg2)}.lib-icon{box-shadow:inset 0 0 0 1px var(--sep)}}
/* Un seul bouton « Filtres » nommé, pastille du nombre de filtres actifs ; replié sur son pictogramme quand la recherche
   s'ouvre (le champ garde sa largeur à 320 px). Panneau ancré au bouton : rangées intitulé / valeur, menus natifs. */
.lib-filter{flex:none}
.lib-fbtn{appearance:none;border:0;font:inherit;position:relative;display:inline-flex;align-items:center;justify-content:center;gap:6px;min-width:44px;height:44px;padding:0 14px 0 12px;box-sizing:border-box;border-radius:22px;background:var(--fill);color:var(--accent);font-size:var(--t-sub);font-weight:600;letter-spacing:-.01em;cursor:pointer;-webkit-tap-highlight-color:transparent;transition:transform .12s ease-out,background-color .12s ease-out}
.lib-fbtn>svg{width:18px;height:18px;flex:none}
.lib-fbtn:active{transform:scale(.95);background:var(--fill2)}
.lib-fbtn.on{background:color-mix(in srgb,var(--accent) 14%,var(--fill))}
.lib-fbtn:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
.lib-fbadge{min-width:20px;height:20px;padding:0 6px;margin-right:-4px;box-sizing:border-box;border-radius:10px;background:var(--accent);color:var(--on-accent);display:grid;place-items:center;font-family:var(--rounded);font-size:12px;font-weight:700;line-height:1;font-variant-numeric:tabular-nums}
.library-bar:has(.lib-search.open) .lib-fbtn{width:44px;padding:0}
.library-bar:has(.lib-search.open) .lib-fbtn-l{display:none}
.library-bar:has(.lib-search.open) .lib-fbadge{position:absolute;top:-4px;right:-4px;margin:0;box-shadow:0 0 0 2px var(--bg)}
.lib-fpanel{position:absolute;z-index:6;top:calc(100% + 8px);right:0;width:min(21rem,100%);box-sizing:border-box;display:grid;gap:8px;padding:6px 8px 10px;border-radius:18px;background:var(--card);box-shadow:0 14px 40px rgb(0 0 0 / .2),0 0 0 .5px var(--sep);transform-origin:top right;animation:lib-menu-in .2s cubic-bezier(.2,.8,.2,1)}
.lfp-head{display:flex;align-items:center;justify-content:space-between;gap:8px;padding-left:8px}
.lfp-head h3{margin:0;font-size:var(--t-body);font-weight:700;letter-spacing:-.01em}
.lfp-reset{min-height:44px;padding-inline:8px;font-size:var(--t-sub)}
.lfp-reset:disabled{color:var(--fg3);cursor:default}
.lfp-rows{border-radius:12px;background:var(--fill);overflow:hidden}
.lfp-row{position:relative;display:flex;align-items:center;gap:8px;min-height:48px;padding:7px 10px 7px 12px;box-sizing:border-box;cursor:pointer}
.lfp-row+.lfp-row{box-shadow:inset 0 .5px 0 var(--sep)}
.lfp-l{flex:1 1 auto;min-width:0;font-size:var(--t-sub);color:var(--fg)}
.lfp-v{flex:0 1 auto;max-width:55%;min-width:0;text-align:right;font-size:var(--t-sub);color:var(--fg2);overflow-wrap:anywhere}
.lfp-row.on .lfp-v{color:var(--accent);font-weight:600}
.lfp-chev{display:flex;flex:none;color:var(--fg3)}
.lfp-chev svg{width:16px;height:16px;stroke-width:2.4}
.lfp-row select{position:absolute;inset:0;width:100%;height:100%;opacity:0;border:0;margin:0;padding:0;font:inherit;font-size:16px;cursor:pointer;-webkit-appearance:none;appearance:none}
.lfp-row select option{color:var(--fg);background:var(--card)}
.lfp-row:active{background:var(--fill2)}
.lfp-row:has(select:focus-visible){outline:2px solid var(--accent);outline-offset:-2px;border-radius:12px}
.lfp-done{width:100%}
@media(prefers-reduced-motion:reduce){.lib-fpanel{animation-name:lib-menu-fade}.lfp-row:active{transition:none}}
.lib-reset{min-height:44px;font-size:var(--t-sub)}
.lib-empty{flex-direction:column;align-items:flex-start;gap:2px}
.lib-empty .main{flex:none}
.lib-empty .tbtn{min-height:44px;font-size:var(--t-sub)}
@media(prefers-contrast:more){.lib-fbtn{box-shadow:inset 0 0 0 1px var(--fg2)}.lib-fpanel{box-shadow:0 0 0 1px var(--fg2)}.lfp-rows{box-shadow:inset 0 0 0 1px var(--sep)}}
/* Fiche : type et niveau technique, raison courte en dessous */
.xc{display:grid;gap:8px}
.xc-tags{display:flex;flex-wrap:wrap;gap:8px 20px;margin:0}
.xc-tags>div{display:grid;gap:4px;min-width:0}
.xc-tags dt{font-size:var(--t-cap);color:var(--fg2);text-transform:uppercase;letter-spacing:.04em;font-weight:600}
.xc-tags dd{margin:0}
.xc-tags .pill{font-size:var(--t-foot);padding:4px 10px;white-space:normal}
.xc-why{margin:0;font-size:var(--t-foot);line-height:1.4;color:var(--fg2)}
/* Entraînement : le grand titre nomme la vue et ouvre son menu (remplace le contrôle segmenté). Menu ancré au titre. */
.tv-head{position:relative;z-index:5}
.tv-head .tv{position:relative;flex:1;min-width:0}
.lt .tv h1{overflow:visible;white-space:normal}
.tv-btn{appearance:none;border:0;background:none;color:var(--fg);font:inherit;letter-spacing:inherit;line-height:inherit;display:inline-flex;align-items:center;gap:6px;max-width:100%;min-height:var(--tap);padding:0 4px 0 0;margin:0;border-radius:12px;text-align:left;cursor:pointer;-webkit-tap-highlight-color:transparent}
.tv-name{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;transition:opacity .12s ease-out}
/* chevron discret (20 px, glyphe 13 px) : la cible tactile reste le bouton titre entier (min-height var(--tap)) */
.tv-chev{flex:none;display:grid;place-items:center;width:20px;height:20px;border-radius:50%;background:var(--fill);color:var(--accent);transition:transform .22s cubic-bezier(.2,.8,.2,1)}
.tv-chev svg{width:13px;height:13px;stroke-width:2.8}
.tv-btn[aria-expanded="true"] .tv-chev{transform:rotate(180deg)}
.tv-btn:active .tv-name{opacity:.55}
.tv-btn:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
.tv-menu{left:0;right:auto;top:calc(100% + 4px);transform-origin:top left;letter-spacing:normal}
@container (max-width:14em){.tv-name{white-space:normal;overflow-wrap:anywhere;hyphens:auto}}
@media(prefers-reduced-motion:reduce){.tv-chev,.tv-name{transition:none}}
/* Coach : bannière profil — texte sur deux lignes régulières, action séparée à droite (cible 44 px) */
.coach-profile{display:flex;align-items:center;gap:12px}
.cp-text{flex:1;min-width:0;display:grid;gap:2px;line-height:1.35}
.cp-text b{color:var(--fg);font-weight:600}
.cp-act{flex:none;min-height:var(--tap);font-size:var(--t-sub);display:inline-flex;align-items:center}
.tv-sep{height:.5px;margin:6px 10px;background:var(--sep)}
@media(prefers-contrast:more){.tv-sep{height:1px;background:var(--fg2)}}
/* vue Recettes (Nutrition) : filtres par moment, cibles 44 px, aucune largeur fixe (320 px) */
.recipes-day{margin:0;font-size:var(--t-foot);color:var(--fg2)}
.recipes-filter .chip{min-height:var(--tap);padding-block:0;display:inline-flex;align-items:center}
.recipes-view .list .ttl{overflow-wrap:anywhere}
/* Bibliothèque comme panier : bouton bascule en fin de rangée, bouton flottant du panier en bas à droite. */
.lib-row{padding:0;gap:0}
.lib-row .lib-open{appearance:none;border:0;background:none;color:inherit;font:inherit;text-align:left;flex:1;min-width:0;display:flex;align-items:center;gap:12px;min-height:var(--tap);padding:11px 4px 11px 16px;cursor:pointer}
.lib-row .lib-open:active{background:var(--fill)}
.lib-row.in-cart{background:color-mix(in srgb,var(--accent) 6%,var(--card))}
.lib-cart-tg{appearance:none;border:0;background:none;flex:none;width:var(--tap);height:var(--tap);margin-right:8px;display:grid;place-items:center;padding:0;border-radius:50%;color:var(--accent);cursor:pointer;-webkit-tap-highlight-color:transparent}
.lib-cart-tg svg{width:18px;height:18px;padding:6px;box-sizing:content-box;border-radius:50%;background:color-mix(in srgb,var(--accent) 13%,transparent);stroke-width:2.4;transition:background-color .15s ease-out,color .15s ease-out,transform .12s ease-out}
.lib-cart-tg[aria-pressed="true"] svg{background:var(--accent);color:var(--on-accent)}
.lib-cart-tg:active svg{transform:scale(.86)}
.lib-cart-tg:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}
.lib-cart-sheet{display:flex;align-items:center;justify-content:center;gap:8px}
.lib-cart-sheet svg{width:18px;height:18px}
/* Panier : bouton flottant discret, en bas à droite du cadre de l'app, au-dessus du menu inférieur et de la zone sûre.
   En fin de page il reprend sa place dans le flux : la dernière rangée n'est jamais dessous. Note ancrée au bouton,
   zoom depuis son coin ; le contenu défile dessous, l'en-tête reste visible. */
.cart-dock{position:sticky;bottom:calc(var(--tabbar-h,0px) + 12px);z-index:4;display:flex;justify-content:flex-end;pointer-events:none}
.cart-dock:empty{display:none}
.cart-fab{pointer-events:auto;position:relative;appearance:none;border:0;width:56px;height:56px;padding:0;display:grid;place-items:center;border-radius:50%;color:var(--accent);background:color-mix(in srgb,var(--card) 82%,transparent);-webkit-backdrop-filter:blur(20px) saturate(180%);backdrop-filter:blur(20px) saturate(180%);box-shadow:0 6px 20px rgb(0 0 0 / .16),0 0 0 .5px var(--sep);cursor:pointer;-webkit-tap-highlight-color:transparent;transition:transform .12s ease-out,background-color .15s ease-out,color .15s ease-out;animation:cart-in .28s cubic-bezier(.2,.8,.2,1)}
/* glyphe 24 : encre x 2–21,5 et y 3–22 (centre 11,75 ; 12,5) : recentrage d'un quart et d'une demi-unité */
.cart-fab>svg{width:26px;height:26px;translate:calc(100% / 96) calc(-100% / 48)}
.cart-fab:active{transform:scale(.94)}
.cart-fab:focus-visible{outline:2px solid var(--accent);outline-offset:3px}
.cart-fab[aria-expanded="true"]{background:var(--accent);color:var(--on-accent)}
.cart-n{position:absolute;top:-3px;right:-3px;min-width:22px;height:22px;padding:0 6px;box-sizing:border-box;border-radius:11px;background:var(--accent);color:var(--on-accent);display:grid;place-items:center;font-family:var(--rounded);font-size:13px;font-weight:700;line-height:1;font-variant-numeric:tabular-nums;box-shadow:0 0 0 2px var(--bg)}
.cart-fab[aria-expanded="true"] .cart-n{background:var(--on-accent);color:var(--accent)}
.cart-n.bump{animation:cart-bump .3s ease-out}
@keyframes cart-bump{40%{transform:scale(1.18)}to{transform:none}}
@keyframes cart-in{from{opacity:0;transform:scale(.85)}to{opacity:1;transform:none}}
.cart-pop{pointer-events:auto;position:absolute;right:0;bottom:calc(100% + 10px);width:min(22rem,100%);max-height:min(32rem,calc(100dvh - var(--tabbar-h,0px) - 150px));box-sizing:border-box;overflow-y:auto;overscroll-behavior:contain;border-radius:20px;background:var(--card);box-shadow:0 16px 44px rgb(0 0 0 / .22),0 0 0 .5px var(--sep);transform-origin:bottom right;animation:lib-menu-in .2s cubic-bezier(.2,.8,.2,1)}
.cart-pop-head{position:sticky;top:0;z-index:1;display:flex;align-items:center;gap:8px;padding:4px 4px 4px 16px;background:var(--card);box-shadow:0 .5px 0 var(--sep)}
.cart-pop-head h2{margin:0;font-size:var(--t-body);font-weight:700;letter-spacing:-.01em}
.cart-pop-head h2:focus{outline:none}
.cart-pop-head h2:focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:6px}
.cart-pop-n{flex:1;min-width:0;color:var(--fg2);font-size:var(--t-sub);font-variant-numeric:tabular-nums}
.cart-pop-x,.cart-pop-rm{appearance:none;border:0;flex:none;width:44px;height:44px;padding:0;border-radius:50%;background:none;color:var(--fg2);display:grid;place-items:center;cursor:pointer;-webkit-tap-highlight-color:transparent}
.cart-pop-x svg,.cart-pop-rm svg{width:14px;height:14px;padding:6px;box-sizing:content-box;border-radius:50%;background:var(--fill);stroke-width:2.4;transition:background-color .12s ease-out}
.cart-pop-x:active svg,.cart-pop-rm:active svg{background:var(--fill2)}
.cart-pop-x:focus-visible,.cart-pop-rm:focus-visible{outline:2px solid var(--accent);outline-offset:-4px}
.cart-pop-list{list-style:none;margin:0;padding:0 0 0 16px}
.cart-pop-item{display:flex;align-items:center;gap:12px;min-height:56px;padding:6px 4px 6px 0}
.cart-pop-item+.cart-pop-item{box-shadow:inset 0 .5px 0 var(--sep)}
.cart-pop-item .pict{width:36px;height:36px;flex:none;background:var(--fill2);border-radius:9px;display:grid;place-items:center}
.cart-pop-item .pict svg{width:30px;height:30px}
.cart-pop-item .main{flex:1;min-width:0}
.cart-pop-item .ttl{font-size:var(--t-sub);font-weight:600;line-height:1.25;overflow-wrap:anywhere}
.cart-pop-item .s2{font-size:var(--t-foot);color:var(--fg2);overflow-wrap:anywhere}
.cart-pop-acts{display:grid;gap:6px;padding:12px 14px 8px;box-shadow:inset 0 .5px 0 var(--sep)}
.cart-pop-acts .gf{margin:0 0 4px;font-size:var(--t-foot)}
@media(prefers-reduced-motion:reduce){.cart-fab,.cart-pop{animation-name:lib-menu-fade}.cart-fab{transition:none}.cart-fab:active,.lib-cart-tg:active svg{transform:none}.lib-cart-tg svg{transition:none}.cart-n.bump{animation:none}}
@media(prefers-reduced-transparency:reduce){.cart-fab{background:var(--card);-webkit-backdrop-filter:none;backdrop-filter:none}}
@media(prefers-contrast:more){.cart-fab,.cart-pop{box-shadow:0 0 0 1px var(--fg2)}.lib-cart-tg svg{box-shadow:inset 0 0 0 1px var(--accent)}.cart-n{box-shadow:0 0 0 2px var(--bg),0 0 0 3px var(--fg2)}}
.cart-clear{justify-self:center;min-height:var(--tap);font-size:var(--t-sub)}
.library-content{display:grid;gap:14px;min-width:0}
.library-heading{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:6px 12px}
.library-heading h2{font-size:var(--t-title3);letter-spacing:-.02em;line-height:1.2;margin:0;overflow-wrap:anywhere}
.muscle-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,9em),1fr));gap:12px;font-size:var(--t-sub)}
.muscle-card{appearance:none;position:relative;display:grid;grid-template-columns:1fr auto;grid-template-rows:72px auto auto;align-content:start;gap:3px 8px;min-width:0;padding:14px 16px 16px;border:1px solid color-mix(in srgb,var(--sep) 25%,transparent);border-radius:20px;background:var(--card);text-align:left;box-shadow:0 2px 8px rgb(0 0 0 / .025);cursor:pointer}
.muscle-art{display:block;width:60px;height:68px}
.muscle-art svg{width:100%;height:100%;display:block}
.muscle-chevron{color:var(--fg3);align-self:start;margin-top:4px}
.muscle-chevron svg{width:16px;height:16px}
.muscle-name{grid-column:1/-1;font-weight:600;font-size:var(--t-body);letter-spacing:-.02em;overflow-wrap:anywhere}
.muscle-count{grid-column:1/-1;color:var(--fg2);font-size:var(--t-foot)}
.muscle-card:active{background:var(--fill2);transform:scale(.98)}
#libRows .ttl{font-weight:500}
/* Menu inférieur : icônes seules, noms accessibles portés par les boutons. Le glyphe est centré dans toute la hauteur du
   bouton (et non posé en haut de la grille) ; correction optique d'une unité du repère 28 pour les glyphes dont l'encre
   est décentrée : fourchette-couteau (x 5–21), silhouette (y 2–25). */
nav.tabbar .tl{display:none}
nav.tabbar button{justify-content:center;align-content:center;align-items:center;min-height:52px;padding-block:9px;gap:0}
nav.tabbar [data-tab="food"] svg{translate:calc(100% / 28) 0}
nav.tabbar [data-tab="body"] svg{translate:0 calc(50% / 28)}
/* Le bouton central ne doit pas agrandir toute la rangée d'icônes. */
html.frame nav.tabbar button.tabadd{padding-block:3px}
html.frame nav.tabbar button.tabadd span{width:46px;height:46px;transform:none}
html.frame nav.tabbar button.tabadd:active span{transform:scale(.94)}
@media(max-width:1023.98px){
 html:not(.frame) nav.tabbar button.tabadd{padding-block:3px}
 html:not(.frame) nav.tabbar button.tabadd span{width:46px;height:46px;transform:none}
 html:not(.frame) nav.tabbar button.tabadd:active span{transform:scale(.94)}
}
@media(min-width:1024px){html:not(.frame) nav.tabbar .tl{display:block}}
@media(prefers-reduced-motion:reduce){.muscle-card:active{transform:none}}
@media(prefers-contrast:more){.muscle-card{border-color:var(--sep)}.program-day.on i{outline:1px solid var(--accent)}}

.muscle-empty{margin:18px 0 2px;line-height:1.5}
/* Les cartes de séances passent sur une colonne si le texte agrandi le demande. */
.pgrid2{font-size:var(--t-sub);grid-template-columns:repeat(auto-fit,minmax(min(100%,8em),1fr))}
.pcard{min-width:0}
.pcard .pmaps{max-width:100%}
.pcard .ptitle,.pcard .psub{overflow-wrap:anywhere}

/* Réglages : accueil compact (carte profil, rubriques à icône, résumés) et sous-pages. Détail : docs/implementation-2026-10-12/reglages-navigation.md */
.set-back{min-height:var(--tap)}
.set-me,.set-row{appearance:none;border:0;width:100%;text-align:left;color:var(--fg);cursor:pointer;transition:background-color .12s ease-out}
.set-me{display:flex;align-items:center;gap:14px;padding:14px 16px;min-height:76px;background:var(--card);border-radius:var(--r-card);box-shadow:var(--shadow)}
.set-me .main{flex:1;min-width:0;display:grid;gap:2px}
.set-me .ttl{font-size:var(--t-title3);font-weight:600;letter-spacing:-.015em;line-height:1.2;overflow-wrap:anywhere}
.set-me .s2{font-size:var(--t-sub);color:var(--fg2)}
.set-av{width:52px;height:52px;border-radius:50%;flex:none;display:grid;place-items:center;background:var(--accent-fill);color:#fff;font:600 var(--t-title2)/1 var(--rounded)}
.set-av svg{width:28px;height:28px}
.set-row{background:none}
.set-row .main{display:grid;gap:1px}
.set-me:active,.set-row:active{background:var(--fill)}
.rowi.set-row + .rowi::before{left:58px}
.set-ic{width:30px;height:30px;border-radius:8px;flex:none;display:grid;place-items:center;color:#fff}
.set-ic svg{width:19px;height:19px}
.set-ic.blue{background:var(--accent-fill)}.set-ic.orange{background:var(--orange-fill)}.set-ic.green{background:var(--green-fill)}.set-ic.purple{background:var(--purple-fill)}.set-ic.teal{background:var(--teal-fill)}.set-ic.gray{background:#6C6C70}
.set-page .s2.warn,.set-page .s2 .warn{color:var(--orange-t)}
.set-page .s2.bad{color:var(--red-t)}
.set-week{display:flex;gap:3px;margin-top:6px}
.set-week i{width:14px;height:5px;border-radius:3px;background:var(--fill)}
.set-week i.on{background:var(--green-fill)}
/* cibles tactiles de 44 px : boutons segmentés, champs en ligne, listes déroulantes, coches */
.set-page .seg button{min-height:var(--tap)}
.set-page label.rowi{padding-block:0}
.set-page label.rowi > input.inl,.set-page label.rowi > select.field{min-height:var(--tap)}
.set-page label.rowi > select.field{background:transparent;color:var(--accent);text-align:right;text-align-last:right;padding:0 0 0 8px}
.set-page label.rowi > :is(input,select):focus-visible,.set-page .list :is(input,select,textarea):focus-visible{outline-offset:-2px}
.set-page .chk{width:var(--tap);height:var(--tap);margin:-8px -8px -8px 0}
.set-page .tbtn.danger{min-height:var(--tap)}
.set-weekrow{padding-inline:4px}
.set-weekrow .program-week{gap:3px;padding-bottom:3px}
.set-macro{display:grid;gap:10px;padding:var(--card-pad)}
.set-mbar{display:flex;gap:2px;height:10px;border-radius:5px;overflow:hidden}
.set-mbar i{display:block;min-width:4px}
.set-mleg{display:flex;flex-wrap:wrap;gap:4px 14px;font-size:var(--t-foot);color:var(--fg2);font-variant-numeric:tabular-nums}
.set-mleg i{display:inline-block;width:8px;height:8px;border-radius:50%;margin-right:6px}
.set-mbar .blue,.set-mleg .blue{background:var(--accent)}.set-mbar .orange,.set-mleg .orange{background:var(--orange)}.set-mbar .purple,.set-mleg .purple{background:var(--purple)}
@media(prefers-reduced-motion:reduce){.set-me,.set-row{transition:none}}
@media(prefers-contrast:more){.set-me{border:1px solid var(--fg2);box-shadow:none}.set-ic{box-shadow:inset 0 0 0 1px var(--fg)}.set-week i{outline:1px solid var(--fg2)}}

/* Modèles de séance : planning direct, éditeur plein écran, sélecteur d'exercices. Détail : docs/produit/ENTRAINEMENT-IMPLEMENTATION.md */
.program-week [role="listitem"]{display:grid;min-width:0}
.program-week button.program-day{appearance:none;border:0;background:none;font:inherit;color:var(--fg2);padding:0;cursor:pointer;width:100%;border-radius:13px;transition:transform .12s ease-out}
.program-week button.program-day:active{transform:scale(.96)}
.program-week button.program-day:active i{background:var(--fill)}
.program-week button.program-day:focus-visible{outline:none}
.program-week button.program-day:focus-visible i{outline:2px solid var(--accent);outline-offset:2px}
.rules.one{grid-template-columns:minmax(0,1fr)}
.tpl-empty{display:grid;gap:12px}
.tpl-empty p{margin:0;color:var(--fg2);font-size:var(--t-sub);line-height:1.4}
.tpl-arch summary{cursor:pointer;color:var(--accent);font-size:var(--t-sub);font-weight:500;min-height:var(--tap);display:flex;align-items:center;padding-inline:4px;list-style:none}
.tpl-arch summary::-webkit-details-marker{display:none}
.tpl-arch[open] summary{margin-bottom:6px}
.tpl-arch .tbtn{min-height:var(--tap)}
.tpl-arch-open{display:grid;gap:1px;text-align:left;color:var(--fg)}
.tpl-sess-sub{margin-bottom:-12px}
.tpl-sess-act{display:grid;gap:10px}
.tpl-sess-act .tbtn{min-height:var(--tap)}
.btn.tpl-danger{background:var(--red);color:#fff}
.tpl-opt .tpl-check,.tpl-pick .tpl-check{width:24px;flex:none;display:grid;place-items:center;color:var(--accent)}
.tpl-check svg{width:20px;height:20px}
.tpl-opt[aria-pressed="true"] .ttl{font-weight:600}
/* éditeur */
.tpl-head h1{font-size:var(--t-title1);white-space:normal;overflow:visible}
.tpl-nav{justify-content:space-between;margin-inline:-6px;gap:12px}
.tpl-nav .navbtn{min-height:var(--tap);padding-inline:6px}
.tpl-nav .tpl-save{font-weight:600}
.navbtn:disabled{color:var(--fg3);cursor:default}
.tpl-page .seg button{min-height:var(--tap)}
.tpl-err{color:var(--red-t)}
.tpl-err .tbtn,.tpl-conflict .btn{min-height:var(--tap)}
.tpl-conflict p{margin:0 0 10px;color:var(--fg)}
.tpl-name{gap:12px;padding-block:6px}
.tpl-name label{flex:none;min-width:3.5em}
.tpl-name input.field{flex:1;min-height:var(--tap);font-size:16px}
/* lieu d'un modèle (facultatif) : Maison · Salle · Non renseigné */
.tpl-loc{flex-wrap:wrap;gap:8px 12px}
.tpl-loc .main{flex:0 0 auto}
.tpl-loc .seg{flex:1 1 15em;max-width:22em;margin-left:auto}
.tpl-loc-note{padding-block:0 10px}
.tpl-loc-note .gf{padding:0}
/* sélecteur : rappel du matériel déclaré pour un modèle « Maison », ajustable sur place */
.tpl-eqhint{display:grid;gap:8px;padding:2px 0 4px}
.tpl-eqhint .gf{margin:0}
.tpl-eqhint .tbtn{min-height:var(--tap)}
.eq-chips{display:flex;flex-wrap:wrap;gap:8px}
.eq-chips .chip{min-height:var(--tap);display:inline-flex;align-items:center;padding-block:0}
/* lieu de la séance du jour : descriptif, sans effet sur objectifs ni planning */
.wloc{display:grid;gap:6px}
.wloc-row{display:flex;align-items:center;flex-wrap:wrap;gap:8px 12px}
.wloc-l{font-weight:600;font-size:var(--t-sub)}
.wloc .seg{flex:1 1 15em}
.wloc-note{margin:0;font-size:var(--t-foot);color:var(--fg2);line-height:1.35}
.set-unit{white-space:nowrap;font-size:var(--t-foot)}
.tpl-errs p{margin:0;color:var(--red-t);font-size:var(--t-foot);line-height:1.35}
.tpl-errs{display:grid;gap:2px}
.tpl-list{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:minmax(0,1fr);gap:10px}
.tpl-ex{background:var(--card);border-radius:var(--r-card);box-shadow:var(--shadow);padding:var(--card-pad-c) var(--card-pad-c) 4px;display:grid;gap:10px;min-width:0;container:tplex/inline-size}
.tpl-ex-top{display:flex;align-items:center;gap:12px;min-width:0}
.tpl-ex-top .main{flex:1;min-width:0}
.tpl-ex-top .ttl{font-weight:600;overflow-wrap:anywhere;line-height:1.25}
.tpl-ex-top .s2{font-size:var(--t-foot);color:var(--fg2);overflow-wrap:anywhere}
.tpl-ex .pict{width:44px;height:44px;flex:none;background:var(--fill2);border-radius:12px;display:grid;place-items:center;position:relative;overflow:hidden}
.tpl-ex .pict svg{width:38px;height:38px}
.tpl-move{display:flex;gap:4px;flex:none;margin-right:auto;margin-left:-4px}
.tpl-ib{appearance:none;border:0;width:var(--tap);height:var(--tap);border-radius:50%;background:var(--fill2);color:var(--accent);display:grid;place-items:center;cursor:pointer;padding:0;transition:transform .12s ease-out}
.tpl-ib svg{width:20px;height:20px}
.tpl-ib:active{transform:scale(.92);background:var(--fill)}
.tpl-ib:disabled{color:var(--fg3);background:transparent;cursor:default;transform:none}
.tpl-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;align-items:end}
@container tplex (min-width:440px){.tpl-grid{grid-template-columns:repeat(6,minmax(0,1fr))}.tpl-mode{grid-column:span 2}}
.tpl-num{display:grid;gap:4px;min-width:0}
.tpl-num > span:first-child{font-size:var(--t-foot);color:var(--fg2);overflow-wrap:anywhere}
.tpl-in{position:relative;display:block}
.tpl-in input.field{min-height:var(--tap);font-size:16px;font-variant-numeric:tabular-nums;padding:8px 10px}
.tpl-in i{position:absolute;right:10px;top:50%;transform:translateY(-50%);font-style:normal;font-size:var(--t-foot);color:var(--fg2);pointer-events:none}
.tpl-in.u input.field{padding-right:28px}
.tpl-in input[aria-invalid="true"],.tpl-name input[aria-invalid="true"],.tpl-note textarea[aria-invalid="true"]{box-shadow:inset 0 0 0 1.5px var(--red-t)}
.tpl-mode{flex-wrap:nowrap}
.tpl-adv{font-size:var(--t-sub)}
.tpl-adv summary{cursor:pointer;color:var(--accent);font-weight:500;min-height:var(--tap);display:inline-flex;align-items:center;gap:6px;list-style:none}
.tpl-adv summary::-webkit-details-marker{display:none}
.tpl-adv summary::after{content:"";width:7px;height:7px;border-right:1.6px solid currentColor;border-bottom:1.6px solid currentColor;transform:translateY(-2px) rotate(45deg);transition:transform .2s ease-out}
.tpl-adv[open] summary::after{transform:translateY(1px) rotate(-135deg)}
.tpl-adv-body{display:grid;grid-template-columns:repeat(auto-fill,minmax(min(100%,12em),1fr));gap:10px;padding-bottom:6px}
.tpl-note{display:grid;gap:4px;grid-column:1/-1}
.tpl-note > span{font-size:var(--t-foot);color:var(--fg2)}
.tpl-note textarea.field{min-height:66px;font-size:16px}
.tpl-ex-act{display:flex;align-items:center;justify-content:flex-end;gap:20px;border-top:.5px solid var(--sep);margin-inline:calc(-1 * var(--card-pad-c));padding-inline:var(--card-pad-c)}
.tpl-ex-act .tbtn{min-height:var(--tap);font-size:var(--t-sub)}
.tpl-add{display:flex;align-items:center;justify-content:center;gap:8px;margin-top:10px;min-height:var(--tap)}
.tpl-add svg{width:18px;height:18px}
.tpl-add:disabled,.tpl-pick-foot .btn:disabled{opacity:.5;cursor:default}
.tpl-bottom{display:grid;gap:10px}
.tpl-bottom .btn:disabled{opacity:.6}
/* sélecteur */
.tpl-pickwrap{display:grid;gap:10px;min-width:0}
.tpl-pickwrap input[type="search"]{min-height:var(--tap);font-size:16px}
.tpl-filters{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}
.tpl-filter{display:grid;gap:4px;min-width:0}
.tpl-filter > span{font-size:var(--t-foot);color:var(--fg2);padding-inline:4px}
.tpl-filter select.field{min-height:var(--tap);font-size:16px;color:var(--accent)}
.tpl-room{padding-block:2px}
.tpl-pick{appearance:none;border:0;width:100%;text-align:left;font:inherit;color:var(--fg);background:none}
.tpl-pick.on{background:color-mix(in srgb,var(--accent) 10%,var(--card))}
.tpl-pick:disabled{cursor:default}
.tpl-pick:disabled .ttl,.tpl-pick:disabled .pict{opacity:.45}
.tpl-pick-sticky{position:sticky;bottom:0;padding-top:12px;background:linear-gradient(to bottom,transparent,var(--bg) 12px)}
.tpl-pick-foot .btn{min-height:var(--tap)}
@media (min-width:1024px){html:not(.frame) .tpl-list{grid-template-columns:repeat(2,minmax(0,1fr))}html:not(.frame) .tpl-bottom{grid-template-columns:repeat(2,minmax(0,1fr));max-width:560px}}
@media (prefers-reduced-motion:reduce){.program-week button.program-day,.tpl-ib,.tpl-adv summary::after{transition:none}.program-week button.program-day:active,.tpl-ib:active{transform:none}}
@media (prefers-contrast:more){.tpl-ex{border:1px solid var(--sep);box-shadow:none}.tpl-ib{box-shadow:inset 0 0 0 1px var(--fg2)}.tpl-pick.on{outline:2px solid var(--accent);outline-offset:-2px}}

/* ================= entraînement : séance guidée compacte et édition de l'occurrence (lot runner + progression) =================
   320/393 px : charge, répétitions et Valider restent visibles ; RIR facultatif replié ; précédente datée toujours lisible ;
   cibles tactiles ≥ 44 px ; zones sûres latérales en paysage ; animation du catalogue compacte, arrêtée si mouvement réduit. */
.runner .rtop .rbtn,.runner .rfoot .rbtn,.r2 .rinfo{min-width:44px;min-height:44px}
.r2.training-live{padding-inline:max(16px,env(safe-area-inset-left,0px)) max(16px,env(safe-area-inset-right,0px));gap:clamp(6px,1.1vh,12px)}
.r2 .rvis{flex:none;min-height:0}
.ranim{margin:0;display:flex;align-items:center;justify-content:center;gap:12px;width:100%}
.ranim .exanim-stage{width:clamp(96px,22dvh,180px);height:clamp(96px,22dvh,180px);flex:none;border-radius:var(--r-md);overflow:hidden;background:#fff;position:relative;display:grid;place-items:center}
.ranim .ranim-img{width:100%;height:100%;display:block;object-fit:contain}
.ranim-side{display:grid;gap:6px;justify-items:start;min-width:0}
.ranim-side figcaption{font-size:11px;color:var(--fg2);line-height:1.3}
.ranim .exanim-btn{min-height:44px}
.r2 .rvis-in{flex:none;height:clamp(96px,22dvh,280px);max-height:none}
.r2 .rvis-in.pic svg{max-height:100%}
.r2 > .rfoot{position:sticky;bottom:calc(-1 * max(10px,env(safe-area-inset-bottom,0px)));margin-top:auto;padding:8px 0 max(10px,env(safe-area-inset-bottom,0px));background:linear-gradient(to bottom,transparent,var(--bg) 14px);z-index:1}
.rc-prev{display:grid;gap:2px;font-size:13px;color:var(--fg2);line-height:1.3;background:var(--fill2,var(--fill));border-radius:var(--r-sm);padding:8px 10px}
.rc-prev-k{display:flex;align-items:center;gap:5px;font-weight:600}
.rc-prev-k svg{width:14px;height:14px;flex:none}
.rc-prev-v b{color:var(--fg);font-variant-numeric:tabular-nums}
.rc-prev-all summary{cursor:pointer;color:var(--accent);min-height:32px;display:flex;align-items:center}
.rc-prev-all p{margin:2px 0 0}
.r2 .rc-tip{font-size:13px}
.rconv{width:100%;display:flex;justify-content:center;margin-top:4px}
.lconv-sel{appearance:none;border:0;background:var(--fill);color:var(--fg);font:inherit;font-size:13px;font-weight:600;border-radius:var(--r-pill);padding:0 12px;min-height:44px;max-width:100%;text-align:center;text-overflow:ellipsis;cursor:pointer}
.lconv-sel.unset{color:var(--orange-t);box-shadow:inset 0 0 0 1.5px currentColor}
.lconv{display:inline-flex;align-items:center;min-height:32px;font-size:13px;font-weight:600;color:var(--fg2)}
.r2 .stc button{min-width:44px;min-height:44px}
.rc-state{margin:0;font-size:12px;color:var(--fg2);text-align:center}
.rc-rir2{border-top:.5px solid var(--sep);padding-top:6px}
.rc-rir2 summary{cursor:pointer;min-height:44px;display:flex;align-items:center;justify-content:center;font-size:13px;font-weight:600;color:var(--fg2)}
.rc-rir2 summary b{color:var(--fg);margin-left:4px}
.rc-rir2 .seg button{min-height:44px}
.rc-rir2 .rirhelp{margin:0 0 6px;font-size:12px;color:var(--fg2);text-align:center}
.rc-more{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap}
.rc-more .tbtn,.r2 .lestbtn{min-height:44px}
.rc-more .tbtn{font-size:15px;font-weight:600}
.run-notes{display:grid;gap:4px}.run-notes p{margin:0}
@media (max-width:360px){
 .rc-in.two{grid-template-columns:1fr}
 .rc-in.two .stp{grid-template-columns:auto 1fr;align-items:center;justify-items:stretch;column-gap:8px}
 .rc-in.two .stp .rconv{grid-column:1/-1}
 .rc-in.two .rnum input{font-size:30px}
 .r2 .rmain{font-size:16px;padding-inline:8px}
}
@media (max-height:700px){.r2 .rc-tip{display:none}.ranim-side figcaption{font-size:10px}.r2 .rvis-in{height:clamp(72px,15dvh,120px)}.ranim .exanim-stage{width:clamp(72px,15dvh,120px);height:clamp(72px,15dvh,120px)}}
@media (prefers-reduced-motion:reduce){.r2 .stc button:active{transform:none}}
/* édition de la séance du jour (Corriger) : organiser sans glisser, confirmer seulement les pertes de données */
.training-live .occ{display:grid;gap:10px}
.occ-tools{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.occ-tools .tbtn{min-height:44px;padding-inline:6px}
.occ-ib{appearance:none;border:0;background:var(--fill);color:var(--accent);width:44px;height:44px;border-radius:50%;display:grid;place-items:center;cursor:pointer}
.occ-ib svg{width:20px;height:20px}
.occ-ib:disabled{opacity:.35;cursor:default}
/* remplacer un exercice de la séance du jour : entrée dans la liste, la séance guidée et Corriger ; feuille de suggestions */
.swap-li{padding:0;gap:0}
.swap-li-main{appearance:none;border:0;background:none;font:inherit;color:inherit;text-align:left;cursor:pointer;flex:1;min-width:0;display:flex;align-items:center;gap:12px;padding:11px 4px 11px 16px;min-height:44px}
.swap-li-main:active,.swap-ib:active{background:var(--fill)}
.swap-ib{appearance:none;border:0;background:none;color:var(--accent);flex:none;width:44px;height:44px;margin-right:6px;border-radius:50%;display:grid;place-items:center;cursor:pointer}
.swap-ib svg,.swap-rbtn svg{width:18px;height:18px}
.swap-why{display:grid;gap:8px}
.swap-l{font-size:var(--t-foot);font-weight:600;color:var(--fg2);padding-inline:4px}
.swap-why .seg button{min-height:var(--tap)}
.swap-sug{display:grid;gap:8px}
.swap-sug .gf,.swap-sub{margin:0}
.swap-opt{appearance:none;border:0;width:100%;text-align:left;font:inherit;color:var(--fg);background:none}
.swap-opt.on{background:color-mix(in srgb,var(--accent) 10%,var(--card))}
.swap-opt .tpl-check{width:24px;flex:none;display:grid;place-items:center;color:var(--accent)}
.swap-name{display:block;font-size:var(--t-body);font-weight:600;color:var(--fg);margin-bottom:2px;overflow-wrap:anywhere}
/* pied collant jusqu'au bord bas de la feuille : rien ne défile visible sous les boutons */
.swap-foot{display:grid;gap:8px;position:sticky;bottom:-24px;margin-bottom:-24px;padding:12px 0 24px;background:linear-gradient(to bottom,transparent,var(--bg) 12px)}
html.frame .swap-foot{bottom:-40px;margin-bottom:-40px;padding-bottom:40px}
.swap-foot .btn{min-height:var(--tap)}
.swap-foot .btn:disabled{opacity:.5;cursor:default}
.swap-next{min-height:var(--tap);padding:0;font-size:var(--t-sub);font-weight:600}
.rc-acts{display:flex;align-items:center;gap:6px 16px;flex-wrap:wrap}
.swap-rbtn{display:inline-flex;align-items:center;gap:6px}
@media (prefers-contrast:more){.swap-opt.on{outline:2px solid var(--accent);outline-offset:-2px}}
.occ-conv{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.occ-prev{line-height:1.35}
.occ-ask p{margin:0 0 8px}
.occ-ask .btn.sm{min-height:44px}
.btn.danger-btn{background:var(--red);color:#fff}
.training-live .sets input{min-height:44px}
.training-live .exf .tbtn{min-height:44px}
.pr-star{color:var(--orange-t);margin-left:1px}
.occ-add{display:grid;gap:6px;margin-top:4px}
.occ-add .xs{margin:0}
.metric-pick{margin:8px 0}
.prog-best{margin:0}
.rec .rconv-t{font-size:11px}
@media (prefers-contrast:more){.lconv-sel,.occ-ib{box-shadow:inset 0 0 0 1px var(--fg2)}}

/* ================= séance guidée : hiérarchie de lecture (refonte UX runner, capture du 13/10) =================
   Identité (vignette fixe + nom + actions), carte de série : référence repliable et objectif, lignes de saisie alignées
   (charge, convention, répétitions : même colonne de pas, jamais de chevauchement), RIR toujours visible, repos et ajout
   secondaires, Valider collant. Carte étroite (320 px) : libellés au-dessus des pas. Cibles ≥ 44 px. */
.r2.rx{gap:10px}
/* vignette en colonne 1 sur toute la hauteur ; titre, actions et crédit groupés et centrés en colonne 2 (crédit sur une ligne) */
.rx .rid{--rgs:clamp(84px,26vw,112px);display:grid;grid-template-columns:var(--rgs) minmax(0,1fr);grid-template-rows:1fr auto auto 1fr;column-gap:14px;row-gap:4px;flex:none}
.rx .rid > .rvis,.rx .ranim{display:contents}
.rx .rvis > .rvis-in,.rx .ranim > .exanim-stage{grid-column:1;grid-row:1/5;align-self:center}
.rx .rid > .rh{grid-column:2;grid-row:2}
.rx .ranim > figcaption{grid-column:2;grid-row:3}
.rx .ranim .exanim-stage{width:var(--rgs);height:var(--rgs);border-radius:var(--r-md);background:#fff;box-shadow:0 0 0 .5px var(--sep)}
.rx .ranim figcaption{font-size:11px;line-height:1.3;color:var(--fg2);text-align:left;overflow-wrap:anywhere}
.rx .ranim figcaption .nw{white-space:nowrap}
.rx .exanim-msg{left:4px;right:4px;bottom:4px;padding:3px 4px;font-size:11px}
.rx .rvis-in{position:relative;width:var(--rgs);height:var(--rgs);max-height:none;flex:none;border-radius:var(--r-md);overflow:hidden}
.rx .rvis-in.pic svg{width:100%;height:100%;max-height:100%}
.rx .rh{display:grid;gap:4px;min-width:0;align-content:center}
.rx .rh-k{font-size:12px;font-weight:600;color:var(--fg2);letter-spacing:.01em}
.rx .rname{margin:0;font-family:var(--rounded);font-size:clamp(20px,6vw,24px);font-weight:700;letter-spacing:-.02em;line-height:1.12;text-wrap:balance;overflow-wrap:anywhere;hyphens:auto}
.rx .rvis-cap{margin:0;font-size:12px;line-height:1.3;color:var(--fg2);text-align:left}
.rx .rh-a{display:flex;align-items:center;gap:8px;margin-top:4px}
.rx .rh-a .exanim-btn{min-height:44px;padding:0 14px;font-size:15px}
.rx .rinfo{width:44px;height:44px;margin:0;border-radius:50%}
.rx .rcard{container:rcard/inline-size;gap:11px;padding:14px 14px 10px}
.rx .rc-h{gap:8px}
.rx .rc-tg{white-space:normal;max-width:100%;overflow-wrap:anywhere;line-height:1.25;text-align:center}
.rx .rc-s b{font-size:19px}
.rx .rc-ref{display:grid;gap:6px;background:var(--fill2,var(--fill));border-radius:var(--r-sm);padding:2px 12px 10px}
.rx .rc-ref > .rc-tip:first-child{padding-top:8px;border-top:0}
.rx .rc-prev{display:block;background:none;border-radius:0;padding:0;font-size:13px;line-height:1.3;color:var(--fg2)}
.rx div.rc-prev{display:flex;align-items:center;min-height:40px;padding-top:4px}
.rx .rc-prev summary{list-style:none;cursor:pointer;display:flex;align-items:center;gap:8px;min-height:44px;padding:4px 0;border-radius:6px}
.rx .rc-prev summary::-webkit-details-marker{display:none}
.rx .rc-prev summary:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
.rx .rc-prev-s{flex:1;min-width:0;display:grid;gap:1px}
.rx .rc-prev-k{display:flex;align-items:center;gap:5px;font-weight:600}
.rx .rc-prev-k svg{width:14px;height:14px;flex:none}
.rx .rc-prev-v{overflow-wrap:anywhere}
.rx .rc-prev-v b{color:var(--fg);font-variant-numeric:tabular-nums}
.rx .rc-prev-more{flex:none;display:inline-flex;align-items:center;gap:2px;color:var(--accent);font-weight:600}
.rx .rc-prev-more svg{width:11px;height:11px;color:currentColor;transition:transform .2s ease-out}
.rx details[open] .rc-prev-more svg{transform:rotate(90deg)}
.rx .rc-prev-d p{margin:0 0 4px;overflow-wrap:anywhere}
.rx .rc-tip{display:block;margin:0;padding-top:8px;border-top:.5px solid var(--sep);font-size:13px;line-height:1.35;color:var(--fg);overflow-wrap:anywhere}
/* saisie sans − / + : deux valeurs à toucher pour éditer (clavier numérique), libellé et micro-libellé de convention à
   gauche, valeur au centre, icône de matériel (44 px, select natif) à droite sur la même ligne ; la colonne d'icône est
   réservée aussi sur la ligne Répétitions pour aligner les valeurs */
.rx .rv{display:grid;gap:8px}
.rx .rv-row{--rvw:clamp(128px,44%,160px);display:grid;grid-template-columns:minmax(0,1fr) var(--rvw) 44px;grid-template-areas:"l box eq";align-items:center;column-gap:10px;row-gap:4px}
.rx .rv-l{grid-area:l;display:grid;gap:1px;min-width:0}
.rx .rv-box{grid-area:box;position:relative;min-width:0}
.rx .rv-eq,.rx .rv-eq-sp{grid-area:eq}
.rx .rv-lab{font-size:15px;font-weight:600;line-height:1.2;color:var(--fg);overflow-wrap:anywhere}
.rx .rv-conv{font-size:12px;font-weight:500;line-height:1.25;color:var(--fg2);overflow-wrap:anywhere}
.rx .rv-conv.unset{color:var(--orange-t);font-weight:600}
.rx .rv-box input{appearance:none;display:block;box-sizing:border-box;width:100%;height:52px;margin:0;border:0;border-radius:12px;background:var(--fill);color:var(--fg);font:700 28px/1 var(--rounded);letter-spacing:-.02em;text-align:right;padding:0 42px 0 8px;font-variant-numeric:tabular-nums;cursor:text;touch-action:manipulation;transition:background-color .12s ease-out,box-shadow .12s ease-out}
.rx .rv-box input::placeholder{color:var(--fg3)}
.rx .rv-box input:focus{outline:none;background:color-mix(in srgb,var(--accent) 12%,var(--fill));box-shadow:inset 0 0 0 2px var(--accent)}
.rx .rv-box input[aria-invalid="true"]{box-shadow:inset 0 0 0 2px var(--red)}
.rx .rv-box small{position:absolute;right:10px;top:50%;transform:translateY(-50%);width:28px;font-size:13px;font-weight:600;color:var(--fg2);text-align:left;pointer-events:none}
.rx .rv-eq{position:relative;width:44px;height:44px;border-radius:50%;background:var(--fill);color:var(--accent);display:grid;place-items:center}
.rx .rv-eq > svg{width:22px;height:22px}
.rx .rv-eq-c{position:absolute;right:1px;bottom:1px;width:14px;height:14px;border-radius:50%;background:var(--card);display:grid;place-items:center;color:currentColor}
.rx .rv-eq-c svg{width:8px;height:8px;transform:rotate(90deg)}
.rx .rv-eq select{position:absolute;inset:0;width:100%;height:100%;margin:0;opacity:0;cursor:pointer;font-size:16px;appearance:none;border:0}
.rx .rv-eq:focus-within{outline:2px solid var(--accent);outline-offset:2px}
.rx .rv-eq:active{transform:scale(.94);transition:transform .1s ease-out}
.rx .rv-eq.unset{color:var(--orange-t);box-shadow:inset 0 0 0 1.5px currentColor}
.rx .rv-eq.locked{background:none;color:var(--fg3)}
.runner .rstage .btn.sm{min-height:44px;min-width:76px}
.rx .lestbtn{justify-self:start;margin:0;padding:0;font-size:15px}
.rx .rc-state{margin:-4px 0 0;font-size:12px;line-height:1.3;color:var(--fg2);text-align:center}
.rx .rrir3{display:grid;gap:6px;border-top:.5px solid var(--sep);padding-top:8px}
.rx .rrir-h{display:flex;align-items:center;gap:6px;min-height:28px}
.rx .rrir-l{flex:none;font-size:15px;font-weight:600;color:var(--fg)}
.rx .rrir-o{flex:1;min-width:0;font-size:13px;color:var(--fg2)}
.rx .rrir-o b{color:var(--fg);font-variant-numeric:tabular-nums}
.rx .rirq{appearance:none;border:0;flex:none;width:44px;height:44px;margin:-8px -10px -8px 0;border-radius:50%;background:radial-gradient(circle,var(--fill) 13px,transparent 13.5px);color:var(--accent);font:inherit;font-size:15px;font-weight:700;cursor:pointer}
.rx .rirq[aria-expanded="true"]{background:radial-gradient(circle,color-mix(in srgb,var(--accent) 18%,transparent) 13px,transparent 13.5px)}
.rx .rirhelp{margin:0;font-size:13px;line-height:1.35;color:var(--fg2);text-align:left}
.rx .rrir3 .seg{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:2px;padding:2px;border-radius:10px}
.rx .rrir3 .seg button{min-height:44px;border-radius:8px;font-size:16px;font-weight:600;font-variant-numeric:tabular-nums}
.rx .rc-more{display:flex;align-items:center;justify-content:space-between;gap:8px;flex-wrap:wrap;border-top:.5px solid var(--sep)}
.rx .rc-rest{font-size:13px;color:var(--fg2);font-variant-numeric:tabular-nums}
.rx .rc-more .tbtn{min-height:44px;padding:0;font-size:15px;font-weight:600}
/* carte étroite (320 px) : libellé et micro-libellé au-dessus, valeur pleine largeur et icône sur la ligne de la valeur */
@container rcard (max-width:300px){
 .rx .rv-row{grid-template-columns:minmax(0,1fr) 44px;grid-template-areas:"l l" "box eq"}
 .rx .rv-l{display:flex;align-items:baseline;flex-wrap:wrap;column-gap:8px}
 .rx .rv-lab{font-size:13px}
}
@media (max-height:700px){
 .r2.rx .rc-tip{display:block}.rx .rid{--rgs:64px}.rx .rname{font-size:20px}
 /* écran court : le conseil tient en deux lignes tant que « Détails » est fermé (texte complet lu et affiché à l'ouverture) */
 .rx details.rc-prev:not([open]) + .rc-tip{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
 .rx .rcard{padding-top:10px;gap:9px}.rx .rv{gap:6px}.rx .rv-row{row-gap:2px}.rx .rv-box input{height:48px}
}
@media (prefers-reduced-motion:reduce){.rx .rv-eq:active{transform:none}.rx .rv-box input,.rx .rc-prev-more svg{transition:none}}
@media (prefers-contrast:more){.rx .rc-ref{box-shadow:inset 0 0 0 1px var(--fg2)}.rx .rv-box input:not(:focus),.rx .rv-eq:not(.locked),.rx .rirq{box-shadow:inset 0 0 0 1px var(--fg2)}}
/* Progrès · détail musculaire : cartes-boutons (alternative clavier à la silhouette) et feuille jour par jour */
.mh-card{appearance:none;border:0;color:var(--fg);text-align:left;min-height:44px;cursor:pointer;font:inherit;width:100%;transition:transform .1s ease-out,background-color .1s ease-out}
.mh-card:active{transform:scale(.97);background:var(--fill)}
.mh-card .mgl{overflow-wrap:anywhere}
.mmap path.mh-hit{cursor:pointer}
.mmap path.mh-hit:hover{opacity:.82}
.mh-sum{margin:0;padding-inline:4px;color:var(--fg2);font-size:var(--t-sub)}
.mh-total{font-family:var(--rounded);font-size:var(--n-s);font-weight:700;color:var(--fg);font-variant-numeric:tabular-nums;margin-right:2px}
.mh-day{display:grid;gap:6px}
.mh-ex .main{min-width:0;flex:1}
.mh-ex .ttl{font-weight:500}
.mh-ex .main > .mh-sets{margin-top:2px}
.mh-set{white-space:nowrap}
.mh-empty{margin:0;padding-inline:4px}
@media (prefers-reduced-motion:reduce){.mh-card{transition:none}.mh-card:active{transform:none}}
@media (prefers-contrast:more){.mh-card{box-shadow:inset 0 0 0 1px var(--fg2)}}
/* vue d'ensemble de la séance : raccourci Apple Music (simple lien, aucune commande de lecture) */
.rx-music{display:flex;align-items:center;gap:12px;min-height:52px;margin:12px 0;padding:8px 14px;border-radius:var(--r-md);background:var(--fill);color:var(--fg);text-decoration:none}
.rx-music:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
.rx-music-i{flex:none;width:32px;height:32px;border-radius:8px;display:grid;place-items:center;color:#fff;background:linear-gradient(160deg,#fa5c6f,#f9304a)}
.rx-music-i svg{width:18px;height:18px}
.rx-music-t{flex:1;min-width:0;display:grid;gap:1px}
.rx-music-t b{font-size:var(--t-body);font-weight:600}
.rx-music-t small{font-size:12px;color:var(--fg2)}
.rx-music > svg{flex:none;width:12px;height:12px;color:var(--fg3)}
/* Réglages › IA et connexions (web et aperçu statique) : adresse ou commande sélectionnable d'un geste */
.mcp-url{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:13px;overflow-wrap:anywhere;user-select:all;-webkit-user-select:all;margin-top:2px}
.ai-active .seg{margin-top:6px}
.ai-active .seg button:disabled{color:var(--fg2);opacity:.55;cursor:not-allowed}
.ai-prov-row .main{display:grid;gap:2px;min-width:0}
.ai-prov-row .s2.ok{color:var(--green-t,var(--green))}
.ai-acts{display:flex;flex-wrap:wrap;align-items:center;gap:4px 18px;margin-top:2px}
.ai-acts .tbtn{min-height:var(--tap,44px);font-size:var(--t-sub)}
.ai-acts .tbtn:disabled{color:var(--fg2);cursor:not-allowed}
.ai-acts .tbtn.danger{color:var(--red-t)}
.ai-acts .spin{width:16px;height:16px}
.ai-cli{width:auto;max-width:62%;min-height:var(--tap,44px)}
.ai-copy{flex-direction:column;align-items:stretch;gap:4px}
.ai-copy .main{min-width:0}
.ai-copy .tbtn{min-height:var(--tap,44px);flex:none;align-self:flex-start;font-weight:600}
.ai-copy .mcp-url{background:var(--fill);border-radius:8px;padding:8px 10px;margin-top:6px;line-height:1.45}
.ai-steps{margin:0;padding-left:1.3em;display:grid;gap:6px;font-size:var(--t-sub);line-height:1.4}
.ai-note{margin-top:8px}
.ai-doc{display:inline-flex;align-items:center;min-height:var(--tap,44px);font-size:var(--t-sub);color:var(--accent)}
.ai-use{display:flex;align-items:center;gap:10px;min-height:var(--tap,44px);font-size:var(--t-sub)}
.ai-use input{width:20px;height:20px;accent-color:var(--accent);flex:none}
@media(max-width:360px){.ai-cli{max-width:58%}}
.set-page .list .rowi>.tbtn{min-height:var(--tap,44px);flex:none}

/* ===== Corps · progression (préfixe bp-) : période des courbes, courbe choisie, jour des saisies explicite ===== */
.bp-range{padding-block:6px 2px}
.bp-range .seg button{min-height:34px}
.bp-card{gap:12px}
.bp-pick{position:relative;display:inline-flex;align-items:center;justify-self:start;max-width:100%;min-width:0;color:var(--fg)}
.bp-pick select{appearance:none;-webkit-appearance:none;border:0;margin:0;background:none;color:inherit;font:inherit;font-size:var(--n-s);font-weight:700;letter-spacing:-.015em;min-height:var(--tap);max-width:100%;min-width:0;padding:0 26px 0 0;border-radius:10px;cursor:pointer;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;transition:opacity .12s ease-out}
.bp-pick::after{content:"";position:absolute;right:7px;top:50%;width:7px;height:7px;border:solid var(--accent);border-width:0 2px 2px 0;transform:translateY(-72%) rotate(45deg);pointer-events:none}
.bp-pick select:active{opacity:.55}
.bp-pick select:focus-visible{outline:2px solid var(--accent);outline-offset:3px}
.bp-pick select option{color:var(--fg);background:var(--card);font-size:var(--t-body);font-weight:400}
.chart .bp-grid{stroke:var(--sep);stroke-width:1;opacity:.75}
.chart .bp-base,.chart .bp-tick{stroke:var(--sep);stroke-width:1}
.chart .bp-zero{stroke:var(--fg3);stroke-width:1.2}
.chart .bp-unit{font-weight:600}
.chart .bp-now{fill:var(--fg);font-weight:600}
.bp-line{fill:none;stroke:var(--accent);stroke-width:2.5;stroke-linecap:round;stroke-linejoin:round}
.bp-dot{fill:var(--fg2);opacity:.5}
.bp-mdot{fill:var(--card);stroke:var(--accent);stroke-width:1.6}
.bp-last{fill:var(--accent);stroke:var(--card);stroke-width:2}
.bp-proj{fill:none;stroke:var(--accent);stroke-width:2;stroke-dasharray:1.5 5;stroke-linecap:round;opacity:.8}
.bp-projend{fill:var(--card);stroke:var(--accent);stroke-width:1.8;opacity:.85}
.bp-band{fill:var(--green);opacity:.13}
.legendrow .bp-band{opacity:.32}
.bp-nowline{stroke:var(--fg3);stroke-width:1;stroke-dasharray:2 4}
.bp-in{fill:var(--green)}
.bp-out{fill:var(--orange)}
.bp-neu{fill:var(--accent)}
.bp-g0{stop-color:var(--accent);stop-opacity:.16}
.bp-g1{stop-color:var(--accent);stop-opacity:0}
.legendrow.bp-legend{gap:4px 14px;font-size:var(--t-cap)}
.bp-hist{margin:0;display:flex;align-items:center;flex-wrap:wrap;gap:4px 10px;padding:8px 10px;border-radius:var(--r-sm);background:var(--fill2);font-size:var(--t-foot);line-height:1.35;color:var(--fg2)}
.bp-hist .spin{width:14px;height:14px;border-width:2px;flex:none}
.bp-hist span{flex:1 1 12em;min-width:0}
.bp-hist.err{color:var(--fg);background:color-mix(in srgb,var(--orange) 13%,var(--card))}
.bp-hist .tbtn{font-size:var(--t-foot);min-height:var(--tap)}
.bp-empty{display:grid;gap:4px;justify-items:start;padding:10px 0 2px;font-size:var(--t-sub);line-height:1.4;color:var(--fg2)}
.bp-empty b{color:var(--fg);font-weight:600}
.bp-empty .tbtn{font-size:var(--t-sub);min-height:var(--tap)}
.bp-day{display:flex;align-items:center;flex-wrap:wrap;gap:4px 10px;padding:6px 12px 6px 16px;background:var(--card);border-radius:var(--r-card);box-shadow:var(--shadow);min-width:0}
.bp-day>label{flex:1 1 auto;font-size:var(--t-body);font-weight:500;color:var(--fg)}
.bp-dwrap{display:inline-flex;min-width:0}
.bp-date{appearance:none;-webkit-appearance:none;border:0;margin:0;background:var(--fill);color:var(--fg);font:inherit;font-size:16px;font-variant-numeric:tabular-nums;min-height:36px;padding:0 10px;border-radius:var(--r-sm);min-width:0;max-width:100%}
.bp-date::-webkit-date-and-time-value{text-align:center}
.bp-date:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
.bp-date[aria-invalid="true"]{box-shadow:inset 0 0 0 1.5px var(--red)}
.bp-today{font-size:var(--t-foot);color:var(--fg2);min-height:var(--tap);display:inline-flex;align-items:center}
.bp-day .tbtn{min-height:var(--tap);font-size:var(--t-sub);font-weight:600}
.bp-day.off{outline:1.5px solid color-mix(in srgb,var(--orange) 55%,transparent);outline-offset:-1.5px}
.bp-day.off .bp-date{background:color-mix(in srgb,var(--orange) 16%,var(--fill));font-weight:600}
.bp-dayctx{flex-basis:100%;margin:0 0 6px;font-size:var(--t-foot);line-height:1.35;color:var(--fg)}
.bp-dayctx b{font-weight:600}
/* Feuille de mesure : ruban de dates local (mêmes jours .day que le ruban principal, sans futur, sans effet sur le jour affiché).
   Légende de hauteur fixe : passer d'aujourd'hui à un jour passé ne décale pas la valeur. */
.mstrip{margin-inline:-8px;min-width:0}
.mstrip .w{display:flex;align-items:stretch;min-width:0}
.mstrip .chev{appearance:none;border:0;background:none;color:var(--accent);cursor:pointer;flex:none;width:44px;min-height:44px;display:grid;place-items:center;border-radius:var(--r-sm)}
.mstrip .chev:active{background:var(--fill)}
.mstrip .chev:disabled{color:var(--fg3);cursor:default;background:none}
.mstrip .chev:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}
.mstrip .chev svg{width:18px;height:18px}
.mstrip .days{flex:1;min-width:0;display:flex;position:relative;overflow-x:auto;overflow-y:hidden;scroll-snap-type:x mandatory;overscroll-behavior-x:contain;scrollbar-width:none;padding-block:4px;-webkit-mask-image:linear-gradient(90deg,transparent,#000 22px,#000 calc(100% - 22px),transparent);mask-image:linear-gradient(90deg,transparent,#000 22px,#000 calc(100% - 22px),transparent)}
.mstrip .days::-webkit-scrollbar{display:none}
/* espace de fin : aujourd'hui, dernier jour du ruban, peut se centrer ; la zone vide dit qu'il n'y a pas de futur */
.mstrip .days::after{content:"";flex:none;width:calc(50% - 23px)}
@media (max-width:359px){.mstrip .days::after{width:calc(50% - 21px)}}
.mstrip .days.glide{scroll-snap-type:none}
.mstrip .cap{display:flex;align-items:center;justify-content:center;flex-wrap:wrap;gap:0 8px;min-height:var(--tap);margin:2px 8px 0;font-size:var(--t-foot);color:var(--fg2);text-align:center}
.mstrip .cap.datectx{padding:0 4px 0 12px;border-radius:var(--r-md);background:color-mix(in srgb,var(--orange) 13%,var(--bg));color:var(--fg)}
.mstrip .cap.datectx b{font-weight:600}
.mstrip .cap .tbtn{min-height:var(--tap);font-size:var(--t-foot);font-weight:600}
@media(max-width:359px){.bp-pick select{font-size:18px}.bp-day{padding-left:12px}}
@media(prefers-reduced-motion:reduce){.bp-pick select{transition:none}}
@media(prefers-contrast:more){.chart .bp-grid{opacity:1}.bp-dot{opacity:.8}.bp-date{box-shadow:inset 0 0 0 1px var(--fg2)}}

/* Ajout rapide : une seule réserve basse, en plus de la zone sûre native ou simulée. */
.sheet.quick-sheet .sb,html.frame .sheet.quick-sheet .sb{padding-bottom:8px}
/* Hydratation dans Ajouter : deux lignes utiles et une progression fine. */
.nutrition-sheet .nutrition-water{grid-template-columns:minmax(0,1fr) auto;gap:8px 10px;padding:12px 14px}
.nutrition-sheet .nw-heading{grid-column:1;grid-row:1}
.nutrition-sheet .nw-reading{grid-column:1;grid-row:2;display:grid;gap:2px;align-self:center}
.nutrition-sheet .nw-reading strong{font-size:24px}
.nutrition-sheet .nw-reading>span{font-size:12px}
.nutrition-sheet .nw-actions{grid-column:2;grid-row:1 / 3;align-self:center;flex-wrap:nowrap}
.nutrition-sheet .nw-actions>span{display:none}
.nutrition-sheet .nw-progress{grid-column:1 / -1;grid-row:3}

/* ================= espaces Sport / Alimentation ================= */
/* Barre d'espace en tête de chaque écran : nom de l'espace ouvert (point teinté) et lien vers l'autre, à droite.
   Teinte : bleu accent pour Sport, vert pour Alimentation ; le reste de l'interface garde ses couleurs. */
html[data-space="sport"]{--space-tint:var(--accent)}
html[data-space="alimentation"]{--space-tint:var(--green-t,var(--green))}
.spacebar{display:flex;align-items:center;justify-content:space-between;gap:12px;min-height:36px;margin:10px 0 -4px;font-size:var(--t-foot);font-weight:600;letter-spacing:.04em;color:var(--fg2)}
.sp-cur{display:inline-flex;align-items:center;gap:8px;text-transform:uppercase}
.sp-dot{width:8px;height:8px;border-radius:50%;background:var(--space-tint,var(--accent));box-shadow:0 0 0 3px color-mix(in srgb,var(--space-tint,var(--accent)) 20%,transparent)}
.sp-link{display:inline-flex;align-items:center;gap:5px;min-height:36px;padding:0 10px;margin-right:-10px;border-radius:var(--r-pill);color:var(--accent);text-decoration:none;text-transform:none;letter-spacing:-.01em;font-size:var(--t-sub);font-weight:600}
.sp-link svg{width:15px;height:15px}
.sp-link:active{background:var(--fill)}
@media (hover:hover){.sp-link:hover{background:var(--fill)}}
/* accueil Sport : carte Alimentation (totaux du jour, lien vers le journal) à la place des anneaux */
.space-card{gap:10px}
.sc-head{display:flex;align-items:baseline;justify-content:space-between;gap:8px}
.sc-stats{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px}
.sc-stat{display:grid;gap:1px;min-width:0}
.sc-stat b{font-family:var(--rounded);font-size:var(--n-m);font-weight:700;letter-spacing:-.02em;line-height:1.1;font-variant-numeric:tabular-nums}
.sc-stat small{font-size:var(--t-cap);color:var(--fg2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.sc-link{display:inline-flex;align-items:center;gap:6px;min-height:44px;color:var(--accent);font-weight:600;text-decoration:none;font-size:var(--t-sub)}
.sc-link svg{width:16px;height:16px}
/* Réglages › Compte › Espaces : ligne-lien vers l'autre espace */
a.rowi.set-space{text-decoration:none;color:inherit}
a.rowi.set-space .val{display:inline-flex;align-items:center;color:var(--accent)}
a.rowi.set-space .val svg{width:18px;height:18px}
@media (min-width:1024px){html:not(.frame) .spacebar{margin-top:18px}}

/* Cible web autonome : connexion, nouveau carnet, avis de session. S'appuie sur les jetons de src/styles.css. */
html.auth-mode nav.tabbar,html.auth-mode #frameToggle{display:none}
.auth{max-width:440px;margin-inline:auto;width:100%}
.auth-card{gap:10px}
.auth-label{font-size:var(--t-sub);color:var(--fg2);font-weight:600}
.auth .field{font-size:var(--t-body);min-height:44px}
.auth-code{letter-spacing:.32em;font-variant-numeric:tabular-nums;font-size:var(--t-title2)!important;text-align:center}
.auth-err[hidden]{display:none}
.auth-err{color:var(--red-t,var(--red));font-weight:500}
.auth-row{display:flex;justify-content:center}
.auth .btn.sec{width:100%}
.nb-title{font-size:var(--t-title3);font-weight:600;letter-spacing:-.01em}
.web-notice{position:fixed;left:50%;transform:translateX(-50%);top:max(10px,env(safe-area-inset-top));z-index:60;width:min(560px,calc(100% - 32px));display:flex;gap:12px;align-items:center;background:var(--card);color:var(--fg);border-radius:var(--r-card);box-shadow:0 8px 30px rgba(0,0,0,.18);padding:12px 16px;font-size:var(--t-sub)}
.web-notice span{flex:1;min-width:0}
@media (prefers-reduced-motion:no-preference){.web-notice{animation:webNoticeIn .28s cubic-bezier(.2,.8,.2,1)}}
@keyframes webNoticeIn{from{opacity:0;transform:translate(-50%,-8px)}to{opacity:1;transform:translate(-50%,0)}}
/* connexion : séparateur discret avant le parcours par code, identifiant caché pour le trousseau */
.auth-sep{display:flex;align-items:center;gap:12px;color:var(--fg2);font-size:var(--t-foot,13px);margin-top:4px}
.auth-sep::before,.auth-sep::after{content:"";flex:1;height:1px;background:var(--sep,rgba(128,128,128,.25))}
.pw-user{position:absolute;width:1px;height:1px;opacity:0;pointer-events:none;overflow:hidden;clip-path:inset(50%)}
.pw-form{display:flex;flex-direction:column;gap:10px}
.pw-form .field{font-size:var(--t-body);min-height:44px}
/* consentement OAuth (connecteurs Claude / ChatGPT) : une carte, deux listes « pourra / ne pourra pas », décision en bas */
.consent-account{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap}
.consent-card{gap:12px}
.consent-app{display:flex;align-items:center;gap:12px}
.consent-av{flex:none;width:44px;height:44px;border-radius:12px;display:grid;place-items:center;background:var(--accent);color:var(--on-accent,#fff);font-size:var(--t-title3);font-weight:700}
.consent-h{margin:4px 0 0;font-size:var(--t-foot,13px);font-weight:600;color:var(--fg2);text-transform:uppercase;letter-spacing:.04em}
.consent-list{list-style:none;margin:0;padding:0;display:grid;gap:8px;font-size:var(--t-sub);line-height:1.4}
.consent-list li{position:relative;padding-left:26px}
.consent-list li::before{position:absolute;left:0;top:0;width:18px;height:18px;border-radius:50%;display:grid;place-items:center;font-size:11px;font-weight:700;line-height:18px;text-align:center}
.consent-list.ok li::before{content:"✓";background:var(--green);color:#fff}
.consent-list.no li::before{content:"✕";background:var(--fill);color:var(--fg2)}
.consent-meta{margin:4px 0 0;padding-top:10px;border-top:1px solid var(--sep);display:grid;grid-template-columns:auto 1fr;gap:4px 12px;font-size:var(--t-foot,13px)}
.consent-meta dt{color:var(--fg2)}
.consent-meta dd{margin:0;overflow-wrap:anywhere;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12px}
.consent-actions{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.consent-actions .btn{width:100%}
.consent-wait{display:flex;flex-direction:row;align-items:center;gap:12px;justify-content:center;min-height:96px}
.consent-wait .spin{width:22px;height:22px}
/* sécurité du compte : panneau plein écran par-dessus le carnet (security-ui.mjs), porte « code de vérification » */
html.sec-open,html.sec-open body{overflow:hidden}
.sec-layer{position:fixed;inset:0;z-index:70;background:var(--bg);color:var(--fg);overflow-y:auto;overscroll-behavior:contain;padding:max(12px,env(safe-area-inset-top)) 16px max(24px,env(safe-area-inset-bottom))}
.sec-head{max-width:560px;margin:0 auto;display:flex;align-items:center;justify-content:space-between;gap:12px;padding:8px 4px}
.sec-head h1{margin:0;font-size:var(--t-title2,22px);font-weight:700;letter-spacing:-.02em}
.sec-body{max-width:560px;margin:0 auto;display:grid;grid-template-columns:minmax(0,1fr);gap:var(--space-section,22px);padding-top:4px}
.sec-card{gap:12px}
.sec-row,.sec-item{display:flex;align-items:center;gap:12px;min-width:0}
.sec-row .main{flex:1;min-width:0}
.sec-item{flex-wrap:wrap;padding-block:4px;border-top:1px solid var(--sep)}
.sec-item:first-child{border-top:0}
.sec-item .grow{flex:1;min-width:0}
.sec-item .ttl{overflow-wrap:anywhere;font-weight:600}
.sec-item .field{flex:1 1 220px;min-height:44px;font-size:var(--t-body)}
.sec-actions{display:flex;gap:16px;align-items:center;justify-content:flex-end;flex-wrap:wrap;margin-left:auto}
.sec-actions .btn{width:auto;margin:0;padding:10px 16px}
.sec-add,.sec-enroll{display:flex;flex-direction:column;gap:10px}
.sec-add .field,.sec-enroll .field{font-size:var(--t-body);min-height:44px}
.sec-confirm{background:var(--fill);border-radius:var(--r-md,12px);padding:12px}
.sec-qr{width:180px;height:180px;align-self:center;background:#fff;padding:10px;border-radius:12px;image-rendering:pixelated}
.sec-secret{display:flex;flex-wrap:wrap;align-items:center;gap:6px 12px}
.sec-key{flex:1 1 100%;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:15px;letter-spacing:.06em;overflow-wrap:anywhere;user-select:all;-webkit-user-select:all}
.sec-on{color:var(--green-t,var(--green));font-weight:600}
.sec-wait{color:var(--fg2)}
.sec-layer .btn.danger{background:var(--red);color:#fff}
.sec-layer a.btn{display:block;text-align:center;text-decoration:none;box-sizing:border-box}
.consent-mfa{margin:12px auto 0;max-width:440px}
.sec-meta{margin-top:6px;padding-top:6px}
