/* =========================================================
   Borne 42, interface façon iOS
   Couleurs et tailles calquées sur les conventions d'Apple :
   fond groupé, cartes arrondies, barres translucides, SF Pro.
   ========================================================= */
:root{
  --bg:#F2F2F7; --card:#FFFFFF; --sunk:#EFEFF4; --fill:rgba(118,118,128,.12); --fill2:rgba(118,118,128,.2);
  --ink:#000000; --mute:rgba(60,60,67,.6); --faint:rgba(60,60,67,.3); --line:rgba(60,60,67,.18);
  --tint:#E0263C; --tint-soft:rgba(224,38,60,.12); --blue:#007AFF;
  --bar:rgba(249,249,249,.82);
  --white:#F7F8F6; --asphalt:#22303A; --herobg:#1C2A35;
  --fond:#8E8E93; --base:#007AFF; --constr:#FF9500; --pic:#FF3B30; --affut:#34C759; --ok:#34C759;
  --sans:-apple-system,BlinkMacSystemFont,"SF Pro Text","Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;
  --round:ui-rounded,"SF Pro Rounded",-apple-system,BlinkMacSystemFont,system-ui,sans-serif;
  color-scheme:light;
}
@media (prefers-color-scheme:dark){:root:not([data-theme="light"]){
  --bg:#000000; --card:#1C1C1E; --sunk:#2C2C2E; --fill:rgba(118,118,128,.24); --fill2:rgba(118,118,128,.32);
  --ink:#FFFFFF; --mute:rgba(235,235,245,.6); --faint:rgba(235,235,245,.3); --line:rgba(84,84,88,.6);
  --tint:#FF4D5E; --tint-soft:rgba(255,77,94,.18); --blue:#0A84FF;
  --bar:rgba(22,22,24,.8); --white:#E9ECEA; --herobg:#1C2A35;
  --fond:#98989D; --base:#0A84FF; --constr:#FF9F0A; --pic:#FF453A; --affut:#30D158; --ok:#30D158;
  color-scheme:dark}}
:root[data-theme="dark"]{
  --bg:#000000; --card:#1C1C1E; --sunk:#2C2C2E; --fill:rgba(118,118,128,.24); --fill2:rgba(118,118,128,.32);
  --ink:#FFFFFF; --mute:rgba(235,235,245,.6); --faint:rgba(235,235,245,.3); --line:rgba(84,84,88,.6);
  --tint:#FF4D5E; --tint-soft:rgba(255,77,94,.18); --blue:#0A84FF;
  --bar:rgba(22,22,24,.8); --white:#E9ECEA;
  --fond:#98989D; --base:#0A84FF; --constr:#FF9F0A; --pic:#FF453A; --affut:#30D158; --ok:#30D158;
  color-scheme:dark}

:root{box-sizing:border-box;padding-top:env(safe-area-inset-top,0px);padding-bottom:env(safe-area-inset-bottom,0px)}
html{scroll-padding-top:calc(env(safe-area-inset-top,0px) + 60px);-webkit-text-size-adjust:100%}
*,*::before,*::after{box-sizing:inherit}
body{margin:0;background:var(--bg);color:var(--ink);font:17px/1.35 var(--sans);letter-spacing:-.022em;-webkit-font-smoothing:antialiased;-webkit-tap-highlight-color:transparent}
button,input,textarea,select{font:inherit;color:inherit;letter-spacing:inherit}
button{cursor:pointer;-webkit-user-select:none;user-select:none}
button:active{opacity:.55}
a{color:var(--tint)}
:focus-visible{outline:3px solid var(--blue);outline-offset:2px}
h1,h2,h3{margin:0;line-height:1.15}
[hidden]{display:none!important}

/* ---------- barre du haut ---------- */
.top{position:sticky;top:env(safe-area-inset-top,0px);z-index:20;background:var(--bg);transition:background .2s}
.top.scrolled{background:var(--bar);-webkit-backdrop-filter:saturate(180%) blur(20px);backdrop-filter:saturate(180%) blur(20px);box-shadow:0 .5px 0 var(--line)}
.top-in{max-width:680px;margin:0 auto;display:flex;align-items:center;gap:10px;padding:8px 16px;min-height:52px}
.brand{display:flex;align-items:center;gap:8px;text-decoration:none;color:var(--ink)}
.brand img{width:30px;height:30px;display:block;border-radius:7px}
.brand b{font-size:17px;font-weight:600}
.sync{margin-left:auto;display:flex;align-items:center;gap:5px;font-size:12px;color:var(--mute)}
.sync i{width:7px;height:7px;border-radius:50%;background:var(--faint);display:inline-block}
.sync.ok i{background:var(--ok)}.sync.saving i{background:var(--constr)}.sync.err i{background:var(--pic)}
.avatar{width:34px;height:34px;border-radius:50%;border:0;background:var(--fill2);color:var(--ink);font:600 15px/1 var(--round);display:flex;align-items:center;justify-content:center;padding:0}

main{max-width:680px;margin:0 auto;padding:0 16px calc(100px + env(safe-area-inset-bottom,0px))}
.tab{display:none}.tab.on{display:block}
.pg-title{font-size:34px;font-weight:700;letter-spacing:.01em;margin:4px 0 6px}
.lead{color:var(--mute);margin:0 0 20px;font-size:15px}

/* ---------- barre d'onglets ---------- */
.nav{position:fixed;left:0;right:0;bottom:0;z-index:30;background:var(--bar);-webkit-backdrop-filter:saturate(180%) blur(20px);backdrop-filter:saturate(180%) blur(20px);box-shadow:0 -.5px 0 var(--line);padding-bottom:env(safe-area-inset-bottom,0px)}
.nav-in{max-width:680px;margin:0 auto;display:grid;grid-template-columns:repeat(5,1fr)}
.nav button{background:none;border:0;padding:7px 2px 5px;display:flex;flex-direction:column;align-items:center;gap:2px;font-size:10px;font-weight:500;letter-spacing:0;color:var(--mute)}
.nav button:active{opacity:1}
.nav button svg{width:26px;height:26px}
.nav button[aria-current="page"]{color:var(--tint)}

/* ---------- blocs ---------- */
.panel{background:var(--card);border-radius:14px;padding:14px 16px;margin-bottom:14px}
.panel h2{font-size:20px;font-weight:700}
.h-row{display:flex;justify-content:space-between;align-items:baseline;gap:10px;margin-bottom:12px}
.h-row h2{margin:0}
.h-row span{color:var(--mute);font-size:15px}
.sec-label{font-size:22px;font-weight:700;margin:26px 0 10px}
.blk{font-size:22px;font-weight:700;margin:24px 0 4px}
.blk-sub{font-size:13px;font-weight:600;text-transform:none;color:var(--mute);margin:14px 0 8px}
.motiv{margin:0 0 12px;color:var(--mute);font-size:15px}
.empty{color:var(--mute);background:var(--card);border-radius:14px;padding:14px 16px;margin:0 0 12px;font-size:15px}
.panel .empty{background:var(--sunk)}
.hint{font-size:13px;color:var(--mute);margin:0 0 12px}
.err{color:var(--pic);font-size:13px;margin:0 0 12px}
.err:empty{display:none}
.okmsg{color:var(--ok);font-size:13px;margin:0 0 12px}
.okmsg:empty{display:none}

/* ---------- boutons ---------- */
.btn{border:0;border-radius:12px;padding:13px 20px;font-size:17px;font-weight:600;background:var(--tint);color:#fff;display:inline-flex;align-items:center;justify-content:center;gap:6px;min-height:48px}
.btn.ghost{background:var(--fill);color:var(--tint)}
.btn.danger{background:var(--fill);color:var(--pic)}
.btn.wide{width:100%}
.btn[disabled]{opacity:.5}
.btn svg{width:18px;height:18px}
.btn-row{display:flex;gap:10px;flex-wrap:wrap}
.linkbtn{background:none;border:0;padding:6px 0;color:var(--tint);font-weight:400;font-size:17px}

/* ---------- héros de l'accueil ---------- */
.hero3{background:var(--herobg);color:#fff;border-radius:20px;padding:16px 18px 18px;margin:6px 0 14px;overflow:hidden}
.h3-top{display:flex;justify-content:space-between;gap:10px;font-size:13px;color:rgba(255,255,255,.6)}
.h3-top span:last-child::first-letter{text-transform:uppercase}
.h3-race{font-size:20px;font-weight:700;margin-top:14px}
.h3-race small{display:block;font-size:13px;font-weight:400;color:rgba(255,255,255,.6);margin-top:2px}
.h3-race small::first-letter{text-transform:uppercase}
.h3-count{display:flex;align-items:flex-end;gap:10px;margin:4px 0 6px}
.h3-count b{font:700 clamp(76px,24vw,110px)/.86 var(--round);letter-spacing:-.03em}
.h3-count span{font-size:15px;font-weight:600;color:rgba(255,255,255,.8);padding-bottom:8px;line-height:1.25}
.road{width:100%;height:auto;display:block;margin:4px 0 2px}
.h3-where{font-size:15px;font-weight:600;color:rgba(255,255,255,.9);display:flex;align-items:center;gap:8px}
.h3-where .dot{width:10px;height:10px;border-radius:50%;display:inline-block}
.h3-stats{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin-top:14px;padding-top:14px;border-top:.5px solid rgba(255,255,255,.18)}
.h3-stats div{font-size:12px;color:rgba(255,255,255,.6)}
.h3-stats b{display:block;font:700 28px/1 var(--round);color:#fff;margin-bottom:3px}
.h3-cta{margin-top:16px;width:100%;background:#fff;color:#1C2A35}
.wk-note{margin:0 0 14px;font-size:13px;color:var(--mute);background:var(--card);border-radius:12px;padding:10px 14px}

/* ---------- semaine en cours ---------- */
.strip{display:grid;grid-template-columns:repeat(7,1fr);gap:6px}
.strip .day{border:0;background:var(--sunk);border-radius:12px;padding:8px 0 9px;display:flex;flex-direction:column;align-items:center;gap:2px;color:var(--ink)}
.strip .day[disabled]{cursor:default;background:transparent}
.strip .day[disabled]:active{opacity:1}
.strip .day.today{background:var(--tint-soft);box-shadow:inset 0 0 0 1.5px var(--tint)}
.strip .dl{font-size:11px;color:var(--mute);font-weight:600}
.strip .dn{font:600 19px/1 var(--round);min-height:1.1em}
.strip i{display:flex;align-items:center;justify-content:center;width:20px;height:20px;margin-top:4px}
.st-rest::before{content:"";width:8px;height:2px;background:var(--faint);border-radius:2px}
.st-run::before{content:"";width:12px;height:12px;border-radius:50%;border:2px solid var(--base)}
.st-renfo::before{content:"";width:11px;height:11px;border-radius:3px;border:2px solid var(--constr)}
.st-done{background:var(--ok);border-radius:50%;color:#fff}
.st-done svg{width:13px;height:13px}
.strip .miss .st-run::before,.strip .miss .st-renfo::before{border-color:var(--pic);border-style:dashed}

/* ---------- séance mise en avant ---------- */
.focus{background:var(--card);border-radius:16px;padding:16px;margin-bottom:12px;position:relative;overflow:hidden}
.focus::before{content:"";position:absolute;left:0;top:0;bottom:0;width:4px;background:var(--c)}
.f-meta{font-size:13px;color:var(--mute);font-weight:600}
.f-meta::first-letter{text-transform:uppercase}
.f-title{font-size:28px;font-weight:700;letter-spacing:.005em;margin:2px 0 6px;line-height:1.1}
.f-desc{font-size:17px;overflow-wrap:anywhere}
.focus.is-done .f-title,.focus.is-done .f-desc{opacity:.5}
.f-acts{display:flex;gap:10px;margin-top:14px}
.f-acts .btn{flex:1}
.f-done[aria-pressed="true"]{background:var(--ok)}
.f-why summary,.more summary{cursor:pointer;font-size:15px;color:var(--tint);padding:10px 0 0;list-style:none}
.f-why summary::-webkit-details-marker,.more summary::-webkit-details-marker{display:none}
.f-why p,.more p{margin:8px 0 2px;padding:10px 12px;border-radius:10px;background:var(--sunk);font-size:15px}
.focus .mv{margin-top:2px}

/* ---------- séances non cochées ---------- */
.late{background:var(--card);border-radius:14px;padding:12px 16px;margin-bottom:14px}
.late-h{font-size:13px;font-weight:600;color:var(--mute);margin-bottom:4px}
.late-row{display:grid;grid-template-columns:34px 1fr;gap:12px;align-items:center;padding:8px 0;border-bottom:.5px solid var(--line)}
.late-row:last-of-type{border-bottom:0}
.late-row small{display:block;color:var(--mute);font-size:13px}
.late-row b{font-weight:600}
.late-rule{margin:6px 0 0;font-size:13px;color:var(--mute)}

/* ---------- conseil ---------- */
.tip{background:var(--card);border-radius:14px;padding:14px 16px;margin-bottom:14px}
.tip-h{font-size:13px;font-weight:600;color:var(--tint);margin-bottom:4px}
.tip p{margin:0 0 4px;font-size:15px}

/* ---------- la route ---------- */
.route{display:grid;gap:4px 6px}
.route button{background:none;border:0;padding:0;display:block}
.route svg{width:100%;height:auto;display:block}
.legend{display:flex;flex-wrap:wrap;gap:6px 14px;margin-top:12px;font-size:12px;color:var(--mute)}
.legend span::before{content:"";display:inline-block;width:12px;height:7px;border-radius:6px 6px 0 0;background:var(--c);margin-right:5px;vertical-align:1px}
.fondbar{display:grid;grid-template-columns:auto 1fr auto;gap:10px;align-items:center;width:100%;background:var(--sunk);border:0;border-radius:12px;padding:10px 12px;margin-bottom:12px;color:var(--ink);font-size:15px;font-weight:600}
.fb-track{height:6px;border-radius:3px;background:var(--fill2);overflow:hidden}
.fb-track i{display:block;height:100%;background:var(--fond);border-radius:3px}
.fb-r{color:var(--mute);font-variant-numeric:tabular-nums}

/* ---------- séances en liste ---------- */
.ses{border-top:.5px solid var(--line);padding:14px 0}
.ses:first-child,.h-row+.ses,h3+.ses{border-top:0;padding-top:4px}
.ses-main{display:grid;grid-template-columns:30px minmax(0,1fr);gap:12px;align-items:start}
.check{width:28px;height:28px;border-radius:50%;border:1.5px solid var(--faint);background:none;display:flex;align-items:center;justify-content:center;padding:0;margin-top:1px;color:transparent;transition:background .15s,border-color .15s}
.check:active{opacity:1;transform:scale(.9)}
.check svg{width:16px;height:16px}
.check[aria-pressed="true"]{background:var(--ok);border-color:var(--ok);color:#fff}
.ses .when{font-size:13px;color:var(--mute)}
.ses .when .tag{color:var(--constr);font-weight:600}
.ses .t{display:block;font-size:17px;font-weight:600;margin-top:1px}
.ses .desc{margin-top:3px;font-size:15px;color:var(--ink);overflow-wrap:anywhere}
.ses.done .t,.ses.done .desc{opacity:.5}
.logline{margin-top:6px;font-size:13px;font-weight:600;color:var(--ok)}
.logline em{font-style:normal;color:var(--mute);font-weight:400}
.note-btn{background:var(--fill);border:0;border-radius:8px;padding:5px 12px;font-size:13px;font-weight:600;color:var(--tint);margin-top:8px}
.more{margin:2px 0 0 42px}
.more details.mv summary{color:var(--constr)}

/* ---------- semaines du plan ---------- */
.week{background:var(--card);border-radius:14px;margin-bottom:10px;overflow:hidden}
.week>summary{display:grid;grid-template-columns:32px minmax(0,1fr) auto 10px;gap:12px;align-items:center;padding:10px 16px;cursor:pointer;list-style:none;min-height:60px}
.week>summary::-webkit-details-marker{display:none}
.week>summary::after,.info>summary::after,details.fond>summary::after{content:"";width:8px;height:8px;border-right:2px solid var(--faint);border-bottom:2px solid var(--faint);transform:rotate(-45deg);transition:transform .2s;flex:none}
.week[open]>summary::after,.info[open]>summary::after,details.fond[open]>summary::after{transform:rotate(45deg)}
.wk-b svg{width:32px;display:block}
.wk-t{min-width:0}
.wk-t h3{font-size:17px;font-weight:600}
.wk-t small{display:block;font-size:13px;color:var(--mute);margin-top:2px;line-height:1.3}
.week .cnt{font-size:15px;color:var(--mute);font-variant-numeric:tabular-nums}
.week .cnt.ok{color:var(--ok);font-weight:600}
.week .wb{padding:0 16px 8px}
.week .light{font-size:13px;color:var(--mute);background:var(--sunk);border-radius:10px;padding:8px 12px;margin-bottom:6px}
.week.cur{box-shadow:inset 0 0 0 1.5px var(--tint)}
details.fond{border-radius:16px;padding:0 0 4px;margin-bottom:14px}
details.fond>summary{list-style:none;cursor:pointer;padding:12px 16px;display:flex;justify-content:space-between;align-items:center;background:var(--card);border-radius:14px;margin-bottom:10px}
details.fond>summary::-webkit-details-marker{display:none}
details.fond>summary h3{font-size:17px;font-weight:600}
details.fond>summary small{display:block;color:var(--mute);font-size:13px;margin-top:2px}
details.fond .week{margin-left:12px}

/* ---------- listes groupées (infos, nutrition) ---------- */
.info{background:var(--card);border-radius:14px;margin-bottom:10px;padding:0 16px}
.info>summary{padding:13px 0;font-weight:400;cursor:pointer;list-style:none;display:flex;justify-content:space-between;align-items:center;min-height:48px}
.info>summary::-webkit-details-marker{display:none}
.info[open]>summary{border-bottom:.5px solid var(--line)}
.info table{width:100%;border-collapse:collapse;margin:4px 0 12px;font-size:15px}
.info td{padding:9px 0;border-top:.5px solid var(--line);vertical-align:top}
.info tr:first-child td{border-top:0}
.info td:last-child{text-align:right;font-weight:600;white-space:nowrap}
.info td.m{text-align:left;font-weight:400;white-space:normal;padding-left:14px}
.info td small{color:var(--mute);font-weight:400}
.info ul{margin:10px 0 14px;padding-left:20px;font-size:15px}
.info li{margin-bottom:6px}
.info p{margin:0 0 14px!important;font-size:13px}
.paces{width:100%;border-collapse:collapse;margin:4px 0 12px;font-size:15px}
.paces td{padding:9px 0;border-top:.5px solid var(--line)}
.paces tr:first-child td{border-top:0}
.paces td:last-child{text-align:right;font-weight:600;font-family:var(--round)}

/* ---------- renfo ---------- */
.exg{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:10px}
.ex{background:var(--card);border-radius:14px;padding:10px;font-size:13px;line-height:1.35}
.more .exg{grid-template-columns:repeat(auto-fill,minmax(120px,1fr));margin-top:6px}
.more .ex,.focus .ex{background:var(--sunk)}
.ex b{display:block;font-size:15px;font-weight:600;margin-top:6px}
.ex span{display:block;color:var(--mute);margin:3px 0 6px}
.ex .uses{font-size:12px;color:var(--mute);margin-bottom:4px}
.ex a{font-weight:600;text-decoration:none}
.fig{width:100%;height:auto;display:block;background:var(--card);border-radius:10px}
.fig line{stroke-width:4.5;stroke-linecap:round}
.fig .f{stroke:var(--ink)}.fig .b{stroke:var(--mute);opacity:.6}
.fig .gr{stroke:var(--line);stroke-width:2}
.fig .hd{fill:var(--ink)}
.fig .bb{fill:var(--line)}.fig .bf{fill:var(--constr)}

/* ---------- suivi ---------- */
.figures{display:grid;grid-template-columns:repeat(2,1fr);gap:10px;margin:0 0 14px}
.figures div{background:var(--card);border-radius:14px;padding:12px 14px;font-size:13px;color:var(--mute)}
.figures b{display:block;font:700 28px/1.05 var(--round);color:var(--ink);margin-bottom:2px}
.chart{width:100%;height:auto;display:block}
.chart text{font-family:var(--sans);font-size:9px;fill:var(--mute)}
.log-item{display:grid;grid-template-columns:1fr auto;gap:2px 12px;border:0;border-top:.5px solid var(--line);padding:11px 0;background:none;width:100%;text-align:left;color:var(--ink)}
.log-item:first-of-type{border-top:0}
.log-item .t{font-weight:600}
.log-item .d{font-size:13px;color:var(--mute)}
.log-item .n{grid-column:1/-1;font-size:13px;color:var(--mute)}
.log-item .k{font:600 17px/1.2 var(--round);text-align:right}

/* ---------- feuilles (modals) ---------- */
.sheet{position:fixed;inset:0;z-index:50;display:none;align-items:flex-end;justify-content:center;background:rgba(0,0,0,.4)}
.sheet.on{display:flex}
.sheet-in{position:relative;background:var(--bg);width:100%;max-width:560px;border-radius:14px 14px 0 0;padding:0 16px calc(16px + env(safe-area-inset-bottom,0px));max-height:94vh;max-height:94dvh;overflow:auto;overscroll-behavior:contain;animation:up .28s cubic-bezier(.2,.9,.3,1)}
@media (min-width:700px){.sheet{align-items:center}.sheet-in{border-radius:14px}}
@keyframes up{from{transform:translateY(40px);opacity:.5}to{transform:none;opacity:1}}
.sheet-in::before{content:"";display:block;width:36px;height:5px;border-radius:3px;background:var(--fill2);margin:6px auto 0}
.sh-head{position:sticky;top:0;z-index:2;background:var(--bg);display:flex;justify-content:space-between;align-items:flex-start;gap:12px;padding:10px 0 12px}
.sh-head h2{font-size:22px;font-weight:700}
.sh-head .sub{margin:2px 0 0;color:var(--mute);font-size:13px}
.shx{flex:none;width:30px;height:30px;border-radius:50%;border:0;background:var(--fill);color:var(--mute);display:flex;align-items:center;justify-content:center;padding:0}
.shx svg{width:14px;height:14px}
.sh-foot{position:sticky;bottom:calc(-16px - env(safe-area-inset-bottom,0px));background:var(--bg);display:flex;gap:10px;padding:10px 0 calc(16px + env(safe-area-inset-bottom,0px));margin-top:6px}
.sh-foot .btn{flex:1}
.grp{background:var(--card);border-radius:14px;padding:12px 16px 4px;margin-bottom:14px}
.grp h3{font-size:13px;font-weight:600;color:var(--mute);margin:0 0 10px}
details.grp{padding:0 16px}
details.grp>summary{padding:13px 0;cursor:pointer;list-style:none}
details.grp>summary::-webkit-details-marker{display:none}
details.grp[open]{padding-bottom:14px}
section.grp:has(.btn-row){padding:12px 16px}
.two{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.field{display:flex;flex-direction:column;gap:6px;margin-bottom:12px;font-size:13px;font-weight:600;color:var(--mute)}
.field input,.field textarea,.field select{border:0;background:var(--fill);border-radius:10px;padding:11px 12px;font-weight:400;font-size:17px;width:100%;color:var(--ink)}
.field textarea{min-height:80px;resize:vertical}
.field small{font-weight:400}
.field select{appearance:none;-webkit-appearance:none;background-image:linear-gradient(45deg,transparent 50%,var(--mute) 50%),linear-gradient(135deg,var(--mute) 50%,transparent 50%);background-position:calc(100% - 18px) 55%,calc(100% - 13px) 55%;background-size:5px 5px;background-repeat:no-repeat;padding-right:34px}
.sheet .grp .field input,.sheet .grp .field select,.sheet .grp .field textarea{background:var(--sunk)}
.feel{display:grid;grid-template-columns:repeat(5,1fr);gap:6px;margin-bottom:14px}
.feel button{border:0;background:var(--card);border-radius:10px;padding:8px 2px;font-size:11px;line-height:1.2;color:var(--ink)}
.feel button b{display:block;font:600 20px/1.2 var(--round)}
.feel button[aria-pressed="true"]{background:var(--tint);color:#fff}
.seg3,.seg{display:grid;grid-template-columns:repeat(3,1fr);background:var(--fill);border-radius:9px;padding:2px;margin-bottom:14px}
.seg{grid-template-columns:1fr 1fr;margin-bottom:18px}
.seg3 button,.seg button{border:0;background:none;border-radius:7px;padding:7px 4px;font-size:13px;font-weight:600;color:var(--ink)}
.seg3 button[aria-pressed="true"],.seg button[aria-selected="true"]{background:var(--card);box-shadow:0 3px 8px rgba(0,0,0,.12),0 3px 1px rgba(0,0,0,.04)}
@media (prefers-color-scheme:dark){:root:not([data-theme="light"]) .seg3 button[aria-pressed="true"],:root:not([data-theme="light"]) .seg button[aria-selected="true"]{background:#636366}}
:root[data-theme="dark"] .seg3 button[aria-pressed="true"],:root[data-theme="dark"] .seg button[aria-selected="true"]{background:#636366}
.chrono{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin:2px 0 10px}
.chrono label{display:flex;align-items:center;gap:6px;background:var(--sunk);border-radius:10px;padding:6px 10px}
.chrono select{flex:1;min-width:0;border:0;background:transparent;font:600 26px/1.2 var(--round);color:var(--ink);padding:4px 0;appearance:none;-webkit-appearance:none;text-align:center;text-align-last:center}
.chrono span{color:var(--mute);font-size:13px;font-weight:500}
.field > .chrono{margin-bottom:4px}

/* ---------- connexion ---------- */
.gate{min-height:100vh;min-height:100dvh;display:flex;align-items:center;justify-content:center;padding:24px 16px}
.gate-in{width:100%;max-width:400px}
.gate-logo{width:76px;height:76px;display:block;margin-bottom:18px;border-radius:17px}
.gate h1{font-size:34px;font-weight:700;margin-bottom:4px}
.gate .lead{margin-bottom:24px}
.gate .field input{background:var(--card)}

.toast{position:fixed;left:50%;top:calc(12px + env(safe-area-inset-top,0px));transform:translate(-50%,-8px);background:var(--card);color:var(--ink);padding:10px 18px;border-radius:22px;font-size:15px;font-weight:600;z-index:60;opacity:0;pointer-events:none;transition:opacity .2s,transform .2s;box-shadow:0 8px 30px rgba(0,0,0,.18),0 0 0 .5px var(--line);max-width:calc(100% - 32px);text-align:center}
.toast.on{opacity:1;transform:translate(-50%,0)}
@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}

/* ---------- analyse, allègement, partage, calendrier ---------- */
.inline-link{background:none;border:0;padding:0;color:var(--tint);font-size:15px;font-weight:400}
.btn.small{min-height:36px;padding:7px 14px;font-size:15px;border-radius:10px}
.cal-btn{margin:-8px 0 18px}
.adapt{background:var(--card);border-radius:14px;padding:14px 16px;margin-bottom:14px;box-shadow:inset 0 0 0 1.5px var(--constr)}
.adapt.on{box-shadow:inset 0 0 0 1.5px var(--ok)}
.adapt-h{font-size:17px;font-weight:600;margin-bottom:4px}
.adapt p{margin:0 0 12px;font-size:15px;color:var(--mute)}
.findings{display:flex;flex-direction:column;gap:12px;margin-bottom:6px}
.finding{display:grid;grid-template-columns:10px 1fr;gap:12px;align-items:start}
.finding i{width:10px;height:10px;border-radius:50%;margin-top:6px;background:var(--base)}
.finding.ok i{background:var(--ok)}.finding.warn i{background:var(--constr)}
.finding b{font-size:15px;font-weight:600}
.finding p{margin:2px 0 0;font-size:13px;color:var(--mute)}
.panel .btn.small{margin-top:10px}

/* =========================================================
   iOS 26 « Liquid Glass »
   Verre translucide flottant, capsules, grands arrondis,
   feuilles qui montent du bas et se ferment d'un glissement.
   ========================================================= */
:root{
  --glass:rgba(255,255,255,.58); --glass-strong:rgba(255,255,255,.78);
  --glass-edge:rgba(255,255,255,.75); --glass-shadow:0 10px 30px rgba(0,0,0,.10),0 1px 3px rgba(0,0,0,.06);
  --glass-hi:inset 0 1px 0 rgba(255,255,255,.9),inset 0 -1px 0 rgba(255,255,255,.35);
  --sheet:rgba(242,242,247,.9);
}
@media (prefers-color-scheme:dark){:root:not([data-theme="light"]){
  --glass:rgba(44,44,48,.55); --glass-strong:rgba(44,44,48,.78);
  --glass-edge:rgba(255,255,255,.14); --glass-shadow:0 10px 30px rgba(0,0,0,.45);
  --glass-hi:inset 0 1px 0 rgba(255,255,255,.14),inset 0 -1px 0 rgba(255,255,255,.04);
  --sheet:rgba(28,28,30,.88)}}
:root[data-theme="dark"]{
  --glass:rgba(44,44,48,.55); --glass-strong:rgba(44,44,48,.78);
  --glass-edge:rgba(255,255,255,.14); --glass-shadow:0 10px 30px rgba(0,0,0,.45);
  --glass-hi:inset 0 1px 0 rgba(255,255,255,.14),inset 0 -1px 0 rgba(255,255,255,.04);
  --sheet:rgba(28,28,30,.88)}

.glass,.avatar,.shx{background:var(--glass);-webkit-backdrop-filter:blur(22px) saturate(180%);backdrop-filter:blur(22px) saturate(180%);box-shadow:var(--glass-shadow),var(--glass-hi);border:.5px solid var(--glass-edge)}
button:active{opacity:1}
button{transition:transform .18s cubic-bezier(.3,.7,.4,1.4),opacity .15s}
button:active:not([disabled]){transform:scale(.96)}

/* ---------- barre du haut : transparente, floutée en fondu au défilement ---------- */
.top,.top.scrolled{background:transparent;box-shadow:none;-webkit-backdrop-filter:none;backdrop-filter:none}
.top::before{content:"";position:absolute;inset:0 0 -28px;z-index:-1;background:linear-gradient(var(--bg) 35%,transparent);-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px);-webkit-mask-image:linear-gradient(#000 55%,transparent);mask-image:linear-gradient(#000 55%,transparent);opacity:0;transition:opacity .25s;pointer-events:none}
.top.scrolled::before{opacity:1}
.avatar{width:40px;height:40px;color:var(--ink)}
.brand img{border-radius:9px}

/* ---------- barre d'onglets flottante en capsule ---------- */
.nav{left:50%;right:auto;transform:translateX(-50%);bottom:calc(env(safe-area-inset-bottom,0px) + 10px);width:min(calc(100% - 28px),500px);border-radius:999px;padding:5px;background:var(--glass);-webkit-backdrop-filter:blur(24px) saturate(190%);backdrop-filter:blur(24px) saturate(190%);box-shadow:var(--glass-shadow),var(--glass-hi);border:.5px solid var(--glass-edge);transition:width .35s cubic-bezier(.32,.72,0,1)}
.nav-in{gap:2px}
.nav button{border-radius:999px;padding:7px 2px 6px;font-size:10px;font-weight:600;transition:background .25s,color .25s,padding .3s}
.nav button svg{width:24px;height:24px}
.nav button[aria-current="page"]{background:var(--fill);color:var(--tint)}
.nav.compact{width:min(calc(100% - 120px),300px)}
.nav.compact button{padding:9px 2px;font-size:0;gap:0}
main{padding-bottom:calc(120px + env(safe-area-inset-bottom,0px))}

/* ---------- formes : grands arrondis concentriques, capsules ---------- */
.panel,.late,.tip,.info,.week,.empty,.wk-note,.adapt,.figures div,.ex,.grp,details.fond>summary{border-radius:24px}
.focus{border-radius:28px}
.hero3{border-radius:32px}
.btn{border-radius:999px}
.btn.small{border-radius:999px}
.note-btn{border-radius:999px;padding:6px 14px}
.field input,.field textarea,.field select{border-radius:14px}
.strip .day{border-radius:16px}
.fondbar{border-radius:999px}
.chrono label{border-radius:16px}
.focus::before{display:none}
.focus{box-shadow:inset 0 0 0 1.5px color-mix(in srgb,var(--c) 45%,transparent)}
.week.cur{box-shadow:inset 0 0 0 2px var(--tint)}

/* ---------- contrôles segmentés en capsule ---------- */
.seg3,.seg{border-radius:999px;padding:3px}
.seg3 button,.seg button{border-radius:999px;padding:8px 4px}
.seg3 button[aria-pressed="true"],.seg button[aria-selected="true"]{background:var(--glass-strong);box-shadow:0 3px 10px rgba(0,0,0,.12),var(--glass-hi)}

/* ---------- feuilles : montent du bas, flottent, se ferment en glissant ---------- */
.sheet{display:flex!important;visibility:hidden;pointer-events:none;background:rgba(0,0,0,calc(.35 * var(--dim,1)));opacity:0;transition:opacity .3s ease,visibility 0s linear .3s}
.sheet.on{visibility:visible;pointer-events:auto;opacity:1;transition:opacity .3s ease}
.sheet.closing{visibility:visible}
.sheet-in{animation:none;position:relative;width:calc(100% - 12px);max-width:560px;margin:0 auto calc(6px + env(safe-area-inset-bottom,0px));padding:0 16px 16px;border-radius:36px;max-height:calc(100dvh - 60px - env(safe-area-inset-top,0px));
  background:var(--sheet);-webkit-backdrop-filter:blur(30px) saturate(180%);backdrop-filter:blur(30px) saturate(180%);box-shadow:0 -4px 40px rgba(0,0,0,.18),var(--glass-hi);border:.5px solid var(--glass-edge);
  transform:translateY(110%);transition:transform .42s cubic-bezier(.32,.72,0,1);touch-action:pan-y;will-change:transform}
.sheet.on .sheet-in{transform:translateY(0)}
.sheet.closing .sheet-in{transform:translateY(110%);transition:transform .28s cubic-bezier(.4,0,1,1)}
@media (min-width:700px){.sheet{align-items:flex-end}.sheet-in{margin-bottom:24px}}
.sheet-in::before{display:none}
.grab{width:38px;height:5px;border-radius:3px;background:var(--fill2);margin:7px auto 0;cursor:grab}
.sh-head{display:grid;grid-template-columns:44px 1fr 44px;align-items:center;gap:8px;padding:8px 0 14px;background:transparent;position:sticky;top:0;z-index:3;cursor:grab}
.sh-head::before{content:"";position:absolute;inset:-8px -16px -6px;z-index:-1;background:var(--sheet);-webkit-mask-image:linear-gradient(#000 70%,transparent);mask-image:linear-gradient(#000 70%,transparent)}
.sh-title{text-align:center;min-width:0}
.sh-head h2{font-size:17px;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.sh-head .sub{margin:1px 0 0;font-size:12px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.shx,.shok{width:44px;height:44px;border-radius:50%;display:flex;align-items:center;justify-content:center;padding:0;flex:none}
.shx{color:var(--ink)}
.shx svg{width:16px;height:16px}
.shok{border:0;background:var(--tint);color:#fff;box-shadow:0 6px 16px color-mix(in srgb,var(--tint) 40%,transparent),inset 0 1px 0 rgba(255,255,255,.35)}
.shok svg{width:20px;height:20px}
.sh-foot{display:none}
.sh-space{height:8px}
.sheet .grp{background:var(--card)}
.sheet .field input,.sheet .field textarea,.sheet .field select{background:var(--sunk)}
.sheet .feel button{background:var(--card)}
.sheet .feel button[aria-pressed="true"]{background:var(--tint);color:#fff}
body.sheet-open{overflow:hidden}

/* ---------- messages : capsule de verre ---------- */
.toast{background:var(--glass-strong);-webkit-backdrop-filter:blur(24px) saturate(180%);backdrop-filter:blur(24px) saturate(180%);border:.5px solid var(--glass-edge);box-shadow:var(--glass-shadow),var(--glass-hi);border-radius:999px}

/* =========================================================
   Identité Borne 42 (logo A)
   Ardoise foncée en dégradé, accent orange → rouge, titres en gras.
   ========================================================= */
:root{
  --tint:#EE2A50; --tint-soft:rgba(238,42,80,.12);
  --grad:linear-gradient(135deg,#FF7A45 0%,#FF2D55 100%);
  --slate:linear-gradient(165deg,#2A3947 0%,#121A22 100%);
  --herobg:#1B2530;
}
@media (prefers-color-scheme:dark){:root:not([data-theme="light"]){--tint:#FF4F6E;--tint-soft:rgba(255,79,110,.18);--herobg:#1B2530}}
:root[data-theme="dark"]{--tint:#FF4F6E;--tint-soft:rgba(255,79,110,.18)}

/* Titres en gras, chiffres en arrondi très gras */
.pg-title{font-weight:800;letter-spacing:-.01em}
.blk,.sec-label{font-weight:800;letter-spacing:-.01em}
.panel h2{font-weight:800}
.brand b{font-weight:800;letter-spacing:-.01em}
.gate h1{font-weight:800}
.h3-race{font-weight:800}
.h3-count b,.h3-stats b,.figures b,.log-item .k,.strip .dn{font-weight:800}
.wk-t h3,.ses .t,details.fond>summary h3{font-weight:700}
.f-title{font-weight:800;letter-spacing:-.015em}

/* Boutons principaux et validation dans le dégradé du logo */
.btn,.shok,.feel button[aria-pressed="true"],.sheet .feel button[aria-pressed="true"]{background:var(--grad);color:#fff}
.btn{box-shadow:0 6px 18px rgba(255,45,85,.25)}
.btn.ghost,.btn.danger{background:var(--fill);box-shadow:none}
.btn.ghost{color:var(--tint)}
.btn.danger{color:var(--pic)}
.f-done[aria-pressed="true"]{background:var(--ok);box-shadow:0 6px 18px rgba(52,199,89,.25)}
.h3-cta{background:#fff;color:#1B2530;box-shadow:none}

/* Blocs foncés : l'en-tête et la séance du jour */
.hero3{background:var(--slate);box-shadow:0 14px 34px rgba(18,26,34,.28)}
.focus{background:var(--slate);color:#fff;box-shadow:0 14px 34px rgba(18,26,34,.22)}
.focus .f-meta{color:rgba(255,255,255,.6)}
.focus .f-desc{color:#fff}
.focus .logline{color:#5BE38A}
.focus .logline em{color:rgba(255,255,255,.6)}
.focus .btn.ghost{background:rgba(255,255,255,.12);color:#fff}
.focus .f-why summary,.focus .more summary{color:#FF8C6B}
.focus .f-why p{background:rgba(255,255,255,.08);color:rgba(255,255,255,.9)}
.focus details.mv summary{color:#FFB35C}
.focus .ex{background:rgba(255,255,255,.08);color:#fff}
.focus .ex span{color:rgba(255,255,255,.6)}
.focus.is-done .f-title,.focus.is-done .f-desc{opacity:.6}

/* Petits rappels de l'identité */
.tip{box-shadow:inset 3px 0 0 0 #FF7A45}
.tip-h,.late-h{color:var(--tint)}
.fb-track i{background:var(--grad)}
.nav button[aria-current="page"]{color:var(--tint)}
.week.cur{box-shadow:inset 0 0 0 2px var(--tint)}
.strip .day.today{background:var(--tint-soft);box-shadow:inset 0 0 0 1.5px var(--tint)}
.adapt{box-shadow:inset 0 0 0 1.5px #FF7A45}
.avatar{font-weight:800}

/* =========================================================
   Identité Borne 42 (logo A) : ardoise sombre + dégradé
   orange-rouge, titres très gras, chiffres en Barlow.
   ========================================================= */
:root{
  --bg:#EEF0F3; --tint:#FF2D55; --tint2:#FF7A45; --tint-soft:rgba(255,45,85,.12);
  --slate:#1E2A36; --slate2:#121A22; --borne:#1F2B37;
  --grad:linear-gradient(135deg,var(--tint2),var(--tint));
  --num:"Barlow",ui-rounded,-apple-system,system-ui,sans-serif;
  --herobg:#1E2A36;
}
@media (prefers-color-scheme:dark){:root:not([data-theme="light"]){--bg:#000;--tint:#FF375F;--tint-soft:rgba(255,55,95,.18);--borne:#2A3947;--slate:#16202A}}
:root[data-theme="dark"]{--bg:#000;--tint:#FF375F;--tint-soft:rgba(255,55,95,.18);--borne:#2A3947;--slate:#16202A}

/* Titres plus affirmés */
.pg-title{font-size:36px;font-weight:800;letter-spacing:-.01em}
.blk{font-size:24px;font-weight:800}
.panel h2,.sec-label{font-weight:800}
.f-title{font-weight:800}
.wk-t h3,.ses .t,.late-row b,.log-item .t{font-weight:700}
.brand b{font-weight:800;font-size:18px}

/* Chiffres en Barlow, comme le logo */
.h3-count b{font-family:var(--num);font-weight:800;letter-spacing:-.02em;font-size:clamp(80px,25vw,116px)}
.h3-count span{font-size:14px}
.h3-stats b,.figures b{font-family:var(--num);font-weight:800;font-size:32px}
.strip .dn,.log-item .k,.paces td:last-child,.feel button b,.week .cnt,.avatar{font-family:var(--num);font-weight:800}
.chrono select{font-family:var(--num);font-weight:800}

/* Accent en dégradé */
.btn,.shok,.feel button[aria-pressed="true"],.sheet .feel button[aria-pressed="true"]{background:var(--grad);color:#fff}
.btn.ghost{background:var(--fill);color:var(--tint)}
.btn.danger{background:var(--fill);color:var(--pic)}
.btn:not(.ghost):not(.danger){box-shadow:0 6px 18px rgba(255,45,85,.28)}
.f-done[aria-pressed="true"]{background:var(--ok);box-shadow:none}
.nav button[aria-current="page"]{color:var(--tint)}
.week.cur{box-shadow:inset 0 0 0 2px var(--tint)}
.strip .day.today{background:var(--tint-soft);box-shadow:inset 0 0 0 1.5px var(--tint)}
.avatar{background:var(--slate);color:#fff;border-color:rgba(255,255,255,.12)}

/* Du foncé, avec mesure : l'en-tête, la séance du jour et le mental */
.hero3,.focus{background:linear-gradient(170deg,#2A3947,#121A22)}
.hero3{box-shadow:0 14px 34px rgba(18,26,34,.28)}
.tip{background:var(--card);color:var(--ink)}

/* ---------- volet mental ---------- */
.boost{position:relative;background:linear-gradient(160deg,#243241,#121A22);color:#fff;border-radius:24px;padding:16px 18px 14px;margin-bottom:14px;overflow:hidden;box-shadow:0 10px 26px rgba(18,26,34,.22)}
.boost::after{content:"";position:absolute;inset:0;border-radius:24px;padding:1.5px;background:var(--grad);-webkit-mask:linear-gradient(#000 0 0) content-box,linear-gradient(#000 0 0);-webkit-mask-composite:xor;mask-composite:exclude;pointer-events:none;opacity:.8}
.boost .skill{display:inline-block;font-size:12px;font-weight:700;letter-spacing:.01em;background:var(--grad);-webkit-background-clip:text;background-clip:text;color:transparent;margin-bottom:6px}
.boost b{display:block;font-size:21px;font-weight:800;line-height:1.2;margin-bottom:6px}
.boost p{margin:0 0 6px;font-size:15px;color:rgba(255,255,255,.82);line-height:1.45}
.boost .linkbtn{color:#FF8A6A;font-size:15px}
.chips{display:flex;flex-wrap:wrap;gap:8px;margin:2px 0 6px}
.chip{border:0;background:var(--fill);color:var(--ink);border-radius:999px;padding:7px 12px;font-size:13px;font-weight:600}
.ifthen{display:grid;grid-template-columns:1fr;gap:6px;margin-bottom:12px;padding-bottom:12px;border-bottom:.5px solid var(--line)}
.ifthen input{border:0;background:var(--sunk);border-radius:14px;padding:11px 12px;font-size:16px;width:100%;color:var(--ink)}
.ifthen input:first-child{font-weight:600}
.breathe .br-stage{position:relative;height:190px;display:flex;align-items:center;justify-content:center;margin:4px 0 12px}
.br-circle{width:90px;height:90px;border-radius:50%;background:var(--grad);opacity:.85;box-shadow:0 0 0 14px var(--tint-soft);transition:transform 5s ease-in-out}
.breathe.in .br-circle{transform:scale(1.8)}
.breathe.out .br-circle{transform:scale(1)}
.br-txt{position:absolute;font-family:var(--num);font-weight:800;font-size:22px;color:#fff;text-shadow:0 1px 8px rgba(0,0,0,.25)}
.breathe:not(.on) .br-txt{color:var(--ink);text-shadow:none;font-size:17px;top:calc(50% + 62px)}
@media (prefers-reduced-motion:reduce){.br-circle{transition:none}}
#tab-food .seg{margin-bottom:16px}

/* ---------- Plan : calendrier défilant jour par jour ---------- */
.dayscroll{position:relative;display:flex;gap:6px;overflow-x:auto;scroll-snap-type:x mandatory;-webkit-overflow-scrolling:touch;scrollbar-width:none;margin:0 -16px;padding:2px 16px 4px;scroll-padding:0 16px}
.dayscroll::-webkit-scrollbar{display:none}
.dayscroll .day{flex:0 0 calc((100% - 36px) / 7);scroll-snap-align:start;position:relative;border:0;background:var(--sunk);border-radius:16px;padding:18px 0 9px;display:flex;flex-direction:column;align-items:center;gap:2px;color:var(--ink)}
.dayscroll .day.rest{background:transparent}
.dayscroll .dm{position:absolute;top:4px;left:0;right:0;text-align:center;font-size:10px;font-weight:700;color:var(--tint);text-transform:lowercase}
.dayscroll .dl,.strip .dl{font-size:11px;color:var(--mute);font-weight:600}
.dayscroll .dn{font-family:var(--num);font-weight:800;font-size:19px;line-height:1}
.dayscroll i,.strip i{display:flex;align-items:center;justify-content:center;width:20px;height:20px;margin-top:4px}
.dayscroll .day.today{box-shadow:inset 0 0 0 1.5px var(--tint)}
.dayscroll .day.sel,.strip .day.sel{background:linear-gradient(160deg,#2A3947,#121A22);color:#fff;box-shadow:0 6px 16px rgba(18,26,34,.25)}
.dayscroll .day.sel .dl{color:rgba(255,255,255,.65)}
.dayscroll .day.sel.today{box-shadow:0 6px 16px rgba(18,26,34,.25),inset 0 0 0 1.5px var(--tint)}
.dayscroll-panel{padding-bottom:10px;overflow:hidden}
.dd{margin-top:12px;padding-top:12px;border-top:.5px solid var(--line)}
.dd-head{display:flex;justify-content:space-between;align-items:baseline;gap:10px;margin-bottom:6px}
.dd-head b{font-size:17px;font-weight:800}
.dd-head b::first-letter{text-transform:uppercase}
.dd-head span{font-size:13px;color:var(--mute)}
.strip .day{position:relative}

/* ---------- gamification ---------- */
.lvl{display:flex;align-items:center;gap:10px;margin-top:12px;background:rgba(255,255,255,.08);border:.5px solid rgba(255,255,255,.14);border-radius:999px;padding:5px 14px 5px 5px;color:#fff;width:max-content;max-width:100%}
.lvl-n{display:inline-flex;align-items:center;justify-content:center;width:30px;height:30px;border-radius:50%;background:var(--grad);font-family:var(--num);font-weight:800;font-size:16px;color:#fff;flex:none}
.lvl-n.big{width:44px;height:44px;font-size:22px}
.lvl-t{display:flex;flex-direction:column;gap:4px;min-width:120px}
.lvl-t b{font-size:13px;font-weight:700}
.lvl-t i{display:block;height:4px;border-radius:2px;background:rgba(255,255,255,.15);overflow:hidden}
.lvl-t u{display:block;height:100%;background:var(--grad);border-radius:2px}
.jk{display:inline-flex;gap:2px;margin-left:6px;vertical-align:1px;color:#FFB340}
.jk svg{width:12px;height:12px}
.h3-stats div:last-child b{display:block}
.quest{background:var(--card);border-radius:24px;padding:14px 16px;margin-bottom:14px;box-shadow:inset 0 0 0 1.5px var(--tint-soft)}
.quest.ok{box-shadow:inset 0 0 0 1.5px var(--ok)}
.q-h{display:flex;justify-content:space-between;font-size:12px;font-weight:700;margin-bottom:4px}
.q-h span{background:var(--grad);-webkit-background-clip:text;background-clip:text;color:transparent}
.q-h em{font-style:normal;color:var(--mute);font-family:var(--num);font-weight:800}
.quest b{display:block;font-size:17px;font-weight:800;margin-bottom:10px}
.q-bar{height:8px;border-radius:4px;background:var(--fill);overflow:hidden}
.q-bar i{display:block;height:100%;background:var(--grad);border-radius:4px;transition:width .4s}
.quest.ok .q-bar i{background:var(--ok)}
.quest small{display:block;margin-top:6px;font-size:13px;color:var(--mute)}
.trophies .quest{background:var(--sunk);box-shadow:none}
.lv-big{display:flex;align-items:center;gap:14px;margin-bottom:14px}
.lv-big b{font-size:22px;font-weight:800}
.lv-big p{margin:2px 0 0;font-size:13px;color:var(--mute)}
.lv-ring{--p:0;width:72px;height:72px;border-radius:50%;flex:none;display:flex;align-items:center;justify-content:center;background:conic-gradient(#FF2D55 calc(var(--p) * 1%),var(--fill) 0);position:relative}
.lv-ring::before{content:"";position:absolute;inset:7px;border-radius:50%;background:var(--card)}
.lv-ring span{position:relative;font-family:var(--num);font-weight:800;font-size:28px}
.figures.mini{margin-bottom:10px}
.figures.mini div{background:var(--sunk)}
.figures.mini b{font-size:26px}
.bdg-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin-top:6px}
.bdg{background:var(--sunk);border-radius:18px;padding:12px 8px 10px;text-align:center;display:flex;flex-direction:column;align-items:center;gap:4px;opacity:.55}
.bdg.got{opacity:1;background:var(--card);box-shadow:0 0 0 .5px var(--line),0 6px 16px rgba(0,0,0,.06)}
.bdg .bi{width:44px;height:44px;border-radius:50%;display:flex;align-items:center;justify-content:center;background:var(--fill);color:var(--mute)}
.bdg .bi svg{width:24px;height:24px}
.bdg.got .bi{color:#fff;background:var(--grad);box-shadow:0 4px 12px rgba(255,45,85,.3)}
.bdg.got.t2 .bi{background:linear-gradient(135deg,#8E9AA8,#3E4C5A)}
.bdg.got.t3 .bi{background:linear-gradient(135deg,#FFD66B,#E0A100);box-shadow:0 4px 12px rgba(224,161,0,.35)}
.bdg b{font-size:12px;font-weight:800;line-height:1.2}
.bdg small{font-size:10.5px;color:var(--mute);line-height:1.25}
.celebrate{position:fixed;left:50%;top:calc(14px + env(safe-area-inset-top,0px));z-index:70;display:flex;align-items:center;gap:12px;max-width:calc(100% - 28px);width:max-content;padding:10px 18px 10px 10px;border-radius:999px;background:var(--glass-strong);-webkit-backdrop-filter:blur(24px) saturate(180%);backdrop-filter:blur(24px) saturate(180%);border:.5px solid var(--glass-edge);box-shadow:var(--glass-shadow),var(--glass-hi);opacity:0;transform:translate(-50%,-30px) scale(.9);transition:opacity .35s,transform .45s cubic-bezier(.32,1.4,.4,1);pointer-events:none}
.celebrate.on{opacity:1;transform:translate(-50%,0) scale(1)}
.celebrate .ci{width:44px;height:44px;border-radius:50%;background:var(--grad);color:#fff;display:flex;align-items:center;justify-content:center;flex:none}
.celebrate .ci svg{width:24px;height:24px}
.celebrate b{display:block;font-size:15px;font-weight:800}
.celebrate small{display:block;font-size:12px;color:var(--mute)}
.figures.mini{grid-template-columns:repeat(3,1fr)}

/* ---------- Strava ---------- */
.btn.strava{background:#FC4C02;box-shadow:0 6px 16px rgba(252,76,2,.3)}
.btn.strava svg{width:18px;height:18px}
.st-row{display:flex;align-items:center;gap:12px}
.st-row>svg{width:28px;height:28px;color:#FC4C02;flex:none}
.st-row b{display:block;font-size:15px}
.st-row small{font-size:13px;color:var(--mute)}
.src-strava{font-style:normal;font-size:11px;font-weight:700;color:#FC4C02;margin-left:6px;vertical-align:1px}

/* ---------- plan sur mesure ---------- */
.q{font-size:15px;font-weight:700;margin:4px 0 8px;color:var(--ink)}
.pills{display:grid;grid-template-columns:repeat(2,1fr);gap:8px;margin-bottom:14px}
.pills button{border:0;background:var(--sunk);border-radius:14px;padding:11px 8px;font-size:15px;font-weight:600;color:var(--ink)}
.pills button[aria-pressed="true"]{background:var(--grad);color:#fff;box-shadow:0 4px 12px rgba(255,45,85,.25)}
.check-row{display:flex;align-items:center;gap:10px;font-size:15px;margin-bottom:10px}
.check-row input{width:22px;height:22px;accent-color:#FF2D55}
.daypick{display:grid;grid-template-columns:repeat(7,1fr);gap:6px;margin-bottom:10px}
.daypick button{aspect-ratio:1;border:0;border-radius:50%;background:var(--sunk);font-family:var(--num);font-weight:800;font-size:17px;color:var(--ink);padding:0}
.daypick button[aria-pressed="true"]{background:linear-gradient(160deg,#2A3947,#121A22);color:#fff}
.plancard{border-radius:18px;padding:12px 14px;margin:6px 0 12px;background:var(--sunk);box-shadow:inset 0 0 0 1.5px var(--ok)}
.plancard.tight{box-shadow:inset 0 0 0 1.5px var(--constr)}
.plancard.risky{box-shadow:inset 0 0 0 1.5px var(--pic)}
.plancard b{display:block;font-size:17px;font-weight:800;margin-bottom:4px}
.plancard p{margin:0 0 6px;font-size:14px;line-height:1.4}
.plancard .pc-meta{font-size:12.5px;color:var(--mute)}
.plancard .btn-row{margin-top:8px}
.plancard.legacy{background:var(--card);box-shadow:inset 0 0 0 1.5px var(--tint);margin-bottom:14px}
.plancard.legacy .btn{margin-top:6px}

/* ---------- assistant de plan et « Mes plans » ---------- */
.pg-head{display:flex;align-items:flex-end;justify-content:space-between;gap:10px}
.pg-head .pg-title{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:30px}
.pg-head .btn{flex:none;margin-bottom:10px}
.wz-bar{height:4px;border-radius:2px;background:var(--fill);overflow:hidden;margin:-4px 0 18px}
.wz-bar i{display:block;height:100%;background:var(--grad);border-radius:2px;transition:width .35s cubic-bezier(.32,.72,0,1)}
.wz-body{min-height:52vh}
.wz-body h2{font-size:26px;font-weight:800;line-height:1.15;margin:0 0 8px}
.wz-body .lead{margin-bottom:16px}
.wz-foot{position:sticky;bottom:calc(-16px - env(safe-area-inset-bottom,0px));display:grid;grid-template-columns:auto 1fr;gap:10px;padding:12px 0 calc(16px + env(safe-area-inset-bottom,0px));background:var(--sheet);margin-top:8px}
.wz-foot .btn.ghost{padding:13px 18px}
.choices{display:flex;flex-direction:column;gap:10px;margin-bottom:16px}
.choices button{display:flex;flex-direction:column;align-items:flex-start;gap:2px;text-align:left;border:0;background:var(--card);border-radius:18px;padding:15px 16px;color:var(--ink);box-shadow:0 0 0 .5px var(--line)}
.choices button b{font-size:17px;font-weight:700}
.choices button small{font-size:13px;color:var(--mute)}
.choices button[aria-pressed="true"]{background:linear-gradient(160deg,#2A3947,#121A22);color:#fff;box-shadow:0 8px 20px rgba(18,26,34,.25),inset 0 0 0 1.5px #FF5A5F}
.choices button[aria-pressed="true"] small{color:rgba(255,255,255,.7)}
.racelist{display:flex;flex-direction:column;gap:8px;max-height:38vh;overflow:auto;margin:0 -4px 14px;padding:2px 4px}
.racelist .ry{font-family:var(--num);font-weight:800;font-size:15px;color:var(--mute);margin:6px 0 0}
.racelist button{display:flex;flex-direction:column;align-items:flex-start;text-align:left;border:0;background:var(--card);border-radius:16px;padding:12px 14px;color:var(--ink);box-shadow:0 0 0 .5px var(--line)}
.racelist button b{font-size:16px;font-weight:700}
.racelist button small{font-size:13px;color:var(--mute)}
.racelist button small::first-letter{text-transform:uppercase}
.racelist button[aria-pressed="true"]{background:var(--grad);color:#fff}
.racelist button[aria-pressed="true"] small{color:rgba(255,255,255,.85)}
.daypick.big button{font-size:18px}
.daypick button.busy{position:relative}
.daypick button.busy::after{content:"";position:absolute;bottom:6px;left:50%;width:5px;height:5px;margin-left:-2.5px;border-radius:50%;background:var(--tint)}
.daypick button.busy[aria-pressed="true"]::after{background:#fff}
.cnt-sel{float:right;font-family:var(--num);font-weight:800;color:var(--mute)}
.srows{background:var(--card);border-radius:18px;overflow:hidden;margin:4px 0 14px}
.srow{display:grid;grid-template-columns:auto 1fr 10px;align-items:center;gap:12px;width:100%;border:0;background:none;border-top:.5px solid var(--line);padding:12px 16px;text-align:left;color:var(--ink)}
.srow:first-child{border-top:0}
.srow span{font-size:15px;color:var(--mute)}
.srow b{font-size:15px;font-weight:700;text-align:right}
.srow b small{display:block;font-weight:400;font-size:12px;color:var(--mute)}
.srow i{width:7px;height:7px;border-right:2px solid var(--faint);border-bottom:2px solid var(--faint);transform:rotate(-45deg)}
.plan-item{background:var(--card);border-radius:20px;padding:14px 16px;margin-bottom:10px;box-shadow:0 0 0 .5px var(--line)}
.plan-item.on{box-shadow:inset 0 0 0 2px var(--tint)}
.pi-top{display:flex;justify-content:space-between;gap:10px;margin-bottom:10px}
.pi-top b{display:block;font-size:17px;font-weight:800}
.pi-top small{font-size:13px;color:var(--mute)}
.badge-on{flex:none;align-self:flex-start;background:var(--grad);color:#fff;font-size:12px;font-weight:700;border-radius:999px;padding:4px 10px}

/* ---------- sélecteur de plan dans l'en-tête ---------- */
.top-in{position:relative}
button.brand{border:0;background:none;padding:4px 6px 4px 0;min-width:0;max-width:calc(100% - 150px);cursor:pointer}
button.brand b{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}
button.brand .chev{width:15px;height:15px;flex:none;color:var(--mute);transition:transform .25s}
button.brand[aria-expanded="true"] .chev{transform:rotate(180deg)}
.planmenu{position:absolute;top:calc(100% - 2px);left:12px;z-index:40;width:min(320px,calc(100vw - 24px));padding:6px;border-radius:22px;
  background:var(--glass-strong);-webkit-backdrop-filter:blur(26px) saturate(190%);backdrop-filter:blur(26px) saturate(190%);border:.5px solid var(--glass-edge);box-shadow:0 16px 40px rgba(0,0,0,.18),var(--glass-hi);
  transform-origin:top left;animation:pm .22s cubic-bezier(.32,1.3,.5,1)}
@keyframes pm{from{opacity:0;transform:scale(.92) translateY(-6px)}to{opacity:1;transform:none}}
.planmenu button{display:flex;align-items:center;justify-content:space-between;gap:10px;width:100%;border:0;background:none;border-radius:16px;padding:10px 12px;text-align:left;color:var(--ink)}
.planmenu button:hover{background:var(--fill)}
.planmenu button[aria-checked="true"]{background:var(--tint-soft)}
.planmenu .pm-t{min-width:0}
.planmenu b{display:block;font-size:15px;font-weight:700;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.planmenu small{display:block;font-size:12px;color:var(--mute)}
.planmenu svg{width:18px;height:18px;color:var(--tint);flex:none}
.planmenu hr{border:0;height:.5px;background:var(--line);margin:4px 10px}
.planmenu{background:color-mix(in srgb,var(--card) 94%,transparent)}
@media (max-width:480px){.sync span{display:none}}

/* ---------- pas de zoom sur les champs : 16 px minimum (sinon Safari zoome), pas de double-toucher ---------- */
html,body{touch-action:manipulation}
input,select,textarea{font-size:max(16px,1em)}
.chrono select{font-size:26px}

/* ---------- en-tête : nom du plan seul ---------- */
button.brand{padding-left:2px}
button.brand b{font-size:20px;font-weight:800;letter-spacing:-.01em}

/* ---------- menu des plans : crayon ---------- */
.pm-row{display:flex;align-items:center;gap:2px;border-radius:16px}
.pm-row.on{background:var(--tint-soft)}
.pm-row>button[data-menu-plan]{flex:1;min-width:0;background:none!important}
.planmenu .pm-edit{flex:none;width:40px;height:40px;padding:0;justify-content:center;border-radius:50%;color:var(--mute)}
.planmenu .pm-edit:hover{background:var(--fill);color:var(--ink)}
.planmenu .pm-edit svg{width:18px;height:18px;color:currentColor}

/* ---------- objectif chrono ---------- */
.plancard.goal-easy,.plancard.goal-ok{box-shadow:inset 0 0 0 1.5px var(--ok)}
.plancard.goal-ambitious{box-shadow:inset 0 0 0 1.5px var(--constr)}
.plancard.goal-hard,.plancard.goal-unrealistic{box-shadow:inset 0 0 0 1.5px var(--pic)}

/* ---------- prédiction ---------- */
.pred{background:var(--card);border-radius:24px;padding:14px 16px;margin-bottom:14px}
.pr-h{display:flex;justify-content:space-between;align-items:center;gap:8px;margin-bottom:6px}
.pr-h span{font-size:12px;font-weight:700;background:var(--grad);-webkit-background-clip:text;background-clip:text;color:transparent}
.pr-h em{font-style:normal;font-size:12px;font-weight:700;border-radius:999px;padding:3px 9px;background:var(--fill)}
.pr-h em.up{background:rgba(52,199,89,.15);color:var(--ok)}
.pr-h em.down{background:rgba(255,59,48,.12);color:var(--pic)}
.pr-row{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.pr-row b{display:block;font:800 34px/1 var(--num);letter-spacing:-.01em}
.pr-row div:last-child b{color:var(--tint)}
.pr-row small{font-size:12px;color:var(--mute)}
.pr-goal{margin:10px 0 0;font-size:14px;font-weight:600}
.pr-goal.ok{color:var(--ok)}.pr-goal.near{color:var(--constr)}.pr-goal.far{color:var(--pic)}
.pred .linkbtn{font-size:14px;padding-top:8px}

/* ---------- bilan ---------- */
.review{background:linear-gradient(160deg,#243241,#121A22);color:#fff;border-radius:24px;padding:16px 18px;margin-bottom:14px;box-shadow:0 10px 26px rgba(18,26,34,.22)}
.rv-h{display:flex;justify-content:space-between;align-items:baseline;margin-bottom:10px}
.rv-h span{font-size:12px;font-weight:700;color:#FF8A6A}
.rv-h b{font-size:17px;font-weight:800}
.rv-stats{display:grid;grid-template-columns:repeat(4,1fr);gap:6px;margin-bottom:10px}
.rv-stats div{font-size:11px;color:rgba(255,255,255,.6)}
.rv-stats b{display:block;font:800 22px/1.1 var(--num);color:#fff}
.panel .rv-stats div{color:var(--mute)}
.panel .rv-stats b{color:var(--ink)}
.rv-msg{margin:0 0 8px;font-size:15px;line-height:1.45}
.rv-q{margin:0 0 10px;font-size:13px;color:rgba(255,255,255,.65)}
.panel .rv-q{color:var(--mute)}
.rv-q.ok{color:var(--ok)}
.rv-next{border-top:.5px solid rgba(255,255,255,.15);padding-top:10px;margin-bottom:12px;display:flex;flex-direction:column;gap:3px}
.panel .rv-next{border-top-color:var(--line)}
.rv-next b{font-size:13px;margin-bottom:3px}
.rv-next span{font-size:14px;color:rgba(255,255,255,.8)}
.panel .rv-next span{color:var(--ink)}
.review .btn.small{background:#fff;color:#1B2530;box-shadow:none}

/* ---------- ta bande ---------- */
.band{background:var(--card);border-radius:24px;padding:14px 16px;margin-bottom:14px}
.bd-h{display:flex;justify-content:space-between;align-items:center;margin-bottom:6px}
.bd-h span{font-size:12px;font-weight:700;background:var(--grad);-webkit-background-clip:text;background-clip:text;color:transparent}
.bd-h .linkbtn{font-size:15px;padding:0}
.band>b{display:block;font-size:17px;font-weight:800;margin-bottom:4px}
.band>p{margin:0 0 10px;font-size:14px;color:var(--mute)}
.bd-q{margin:0 0 6px!important;font-size:13px!important;color:var(--mute)}
.bd-q b{color:var(--ink)}
.bd-q.ok b{color:var(--ok)}
.band .q-bar{margin-bottom:10px}
.bd-m{display:grid;grid-template-columns:28px 1fr 70px 36px;gap:8px;align-items:center;padding:5px 0}
.av{width:28px;height:28px;border-radius:50%;background:linear-gradient(160deg,#2A3947,#121A22);color:#fff;font:800 12px/28px var(--num);text-align:center}
.bd-m.me .av,.bd-row.me .av{background:var(--grad)}
.bd-m .nm{font-size:14px;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.bd-m .wk{height:6px;border-radius:3px;background:var(--fill);overflow:hidden}
.bd-m .wk i{display:block;height:100%;background:var(--grad)}
.bd-m .ct{font:800 13px var(--num);text-align:right;color:var(--mute)}
.sub-c{text-align:center;color:var(--mute);font-size:13px;margin:-6px 0 14px}
.bd-row{display:grid;grid-template-columns:18px 32px 1fr;gap:10px;align-items:center;padding:10px 0;border-top:.5px solid var(--line)}
.bd-row:first-of-type{border-top:0}
.bd-row .rk{font:800 15px var(--num);color:var(--mute);text-align:center}
.bd-row .av{width:32px;height:32px;line-height:32px}
.bd-info{min-width:0}
.bd-info b{display:block;font-size:15px}
.bd-info small{font-size:12px;color:var(--mute)}
.bd-row .cheers{grid-column:3;display:flex;gap:6px;margin-top:4px}
.bd-row .chip[disabled]{opacity:.45}
.code{font:800 34px/1.2 var(--num);letter-spacing:.18em;text-align:center;background:var(--sunk);border-radius:16px;padding:10px;margin-bottom:10px}
.bk-row{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:10px 0;border-top:.5px solid var(--line)}
.bk-row b{display:block;font-size:14px}
.bk-row small{font-size:12px;color:var(--mute)}
.bk-row .btn{flex:none}

/* ---------- bienvenue ---------- */
.welcome{position:fixed;inset:0;z-index:80;background:radial-gradient(120% 80% at 50% 0%,#243241 0%,#0B1016 60%,#000 100%);color:#fff;display:flex;padding:calc(env(safe-area-inset-top,0px) + 12px) 0 calc(env(safe-area-inset-bottom,0px) + 20px)}
.welcome[hidden]{display:none}
.wl-in{position:relative;display:flex;flex-direction:column;width:100%;max-width:560px;margin:0 auto}
.wl-skip{align-self:flex-end;margin:0 20px;border:0;background:rgba(255,255,255,.1);color:rgba(255,255,255,.8);border-radius:999px;padding:7px 14px;font-size:14px;font-weight:600}
.wl-track{flex:1;display:flex;overflow-x:auto;scroll-snap-type:x mandatory;scrollbar-width:none}
.wl-track::-webkit-scrollbar{display:none}
.wl-slide{flex:0 0 100%;scroll-snap-align:start;display:flex;flex-direction:column;justify-content:center;padding:0 28px}
.wl-art{height:210px;display:flex;align-items:center;justify-content:center;margin-bottom:28px}
.wl-art svg{width:100%;max-width:320px;height:auto}
.wl-bornes{display:grid;grid-template-columns:repeat(4,64px);gap:14px}
.wl-bornes svg{width:64px}
.wl-slide h1{font-size:34px;font-weight:800;line-height:1.1;margin:0 0 12px;letter-spacing:-.01em}
.wl-slide p{font-size:17px;line-height:1.5;color:rgba(255,255,255,.75);margin:0}
.wl-dots{display:flex;justify-content:center;gap:8px;margin:18px 0}
.wl-dots i{width:7px;height:7px;border-radius:4px;background:rgba(255,255,255,.25);transition:width .25s,background .25s}
.wl-dots i.on{width:22px;background:#FF2D55}
.wl-in>.btn{margin:0 24px;width:auto}

/* ---------- bien démarrer ---------- */
.start{background:var(--card);border-radius:24px;padding:14px 16px 8px;margin-bottom:14px;box-shadow:inset 0 0 0 1.5px var(--tint-soft)}
.st-h{display:flex;justify-content:space-between;align-items:baseline;margin-bottom:8px}
.st-h span{font-size:17px;font-weight:800}
.st-h em{font:800 15px var(--num);font-style:normal;color:var(--mute)}
.start .q-bar{margin-bottom:6px}
.st-item{display:grid;grid-template-columns:24px 1fr auto;gap:12px;align-items:center;width:100%;border:0;background:none;padding:10px 0;border-top:.5px solid var(--line);text-align:left;color:var(--ink)}
.st-item:first-of-type{border-top:0}
.st-item b{display:block;font-size:15px;font-weight:600}
.st-item small{font-size:12px;color:var(--mute)}
.st-item em{font:800 12px var(--num);font-style:normal;color:var(--tint)}
.st-ck{width:22px;height:22px;border-radius:50%;border:1.5px solid var(--faint)}
.st-item.ok{opacity:.55}
.st-item.ok .st-ck{background:var(--ok);border-color:var(--ok);box-shadow:inset 0 0 0 5px var(--ok),inset 0 0 0 7px #fff}
.st-item.ok b{text-decoration:line-through}
.start .linkbtn{font-size:14px;color:var(--mute);padding:8px 0 4px}
.install{margin:0 0 14px;padding-left:22px;font-size:16px;line-height:1.5}
.install li{margin-bottom:10px}

/* =========================================================
   Animations : courtes, amorties, façon iOS.
   Tout est coupé si l'utilisateur a demandé moins d'animations.
   ========================================================= */
:root{--spring:cubic-bezier(.32,.72,0,1);--pop:cubic-bezier(.34,1.56,.64,1)}

/* ---------- changement d'onglet : la page glisse, les blocs arrivent en cascade ---------- */
@keyframes tab-fwd{from{opacity:0;transform:translateX(28px)}to{opacity:1;transform:none}}
@keyframes tab-back{from{opacity:0;transform:translateX(-28px)}to{opacity:1;transform:none}}
@keyframes rise{from{opacity:0;transform:translateY(12px)}to{opacity:1;transform:none}}
.tab.enter-fwd{animation:tab-fwd .42s var(--spring) both}
.tab.enter-back{animation:tab-back .42s var(--spring) both}
.tab.enter-fwd>*,.tab.enter-back>*{animation:rise .5s var(--spring) both}
.tab.enter-fwd>*:nth-child(2),.tab.enter-back>*:nth-child(2){animation-delay:.03s}
.tab.enter-fwd>*:nth-child(3),.tab.enter-back>*:nth-child(3){animation-delay:.06s}
.tab.enter-fwd>*:nth-child(4),.tab.enter-back>*:nth-child(4){animation-delay:.09s}
.tab.enter-fwd>*:nth-child(5),.tab.enter-back>*:nth-child(5){animation-delay:.12s}
.tab.enter-fwd>*:nth-child(n+6),.tab.enter-back>*:nth-child(n+6){animation-delay:.15s}
/* barres et jauges qui se remplissent à l'arrivée sur l'onglet */
@keyframes grow{from{transform:scaleX(0)}}
.tab.enter-fwd .q-bar i,.tab.enter-back .q-bar i,.tab.enter-fwd .fb-track i,.tab.enter-back .fb-track i,.tab.enter-fwd .bd-m .wk i,.tab.enter-back .bd-m .wk i{transform-origin:left;animation:grow .7s var(--spring) .15s both}

/* ---------- entrées de blocs (détail du jour, étapes de l'assistant, vue du Coach) ---------- */
@keyframes in-fwd{from{opacity:0;transform:translateX(36px)}to{opacity:1;transform:none}}
@keyframes in-back{from{opacity:0;transform:translateX(-36px)}to{opacity:1;transform:none}}
.in-fwd{animation:in-fwd .38s var(--spring) both}
.in-back{animation:in-back .38s var(--spring) both}
.in-up{animation:rise .38s var(--spring) both}

/* ---------- barre d'onglets : la pastille glisse d'un onglet à l'autre ---------- */
.nav-in{position:relative}
.nav-pill{position:absolute;top:0;bottom:0;left:0;width:20%;border-radius:999px;background:var(--fill);transform:translateX(calc(var(--i,0) * 100%));transition:transform .45s var(--spring);pointer-events:none;z-index:0}
.nav button{position:relative;z-index:1}
.nav button[aria-current="page"]{background:transparent}
.nav.compact .nav-pill{top:2px;bottom:2px}
.nav button svg{transition:transform .35s var(--pop)}
.nav button[aria-current="page"] svg{transform:translateY(-1px) scale(1.08)}

/* ---------- sélecteurs segmentés : la pastille glisse ---------- */
.seg{position:relative}
.seg::before{content:"";position:absolute;top:2px;bottom:2px;left:2px;width:calc(50% - 2px);border-radius:999px;background:var(--glass-strong);box-shadow:0 3px 10px rgba(0,0,0,.12),var(--glass-hi);transform:translateX(calc(var(--i,0) * 100%));transition:transform .4s var(--spring)}
.seg button{position:relative;z-index:1}
.seg button[aria-selected="true"]{background:transparent!important;box-shadow:none!important}

/* ---------- jour par jour : la puce choisie s'anime ---------- */
.dayscroll .day{transition:background .3s,color .3s,transform .35s var(--pop),box-shadow .3s}
.dayscroll .day.sel{transform:scale(1.06)}
.dayscroll .day:active{transform:scale(.94)}

/* ---------- choix de l'assistant, pastilles, jours ---------- */
.choices button,.racelist button,.pills button,.daypick button,.feel button,.chip{transition:background .25s,color .25s,box-shadow .25s,transform .3s var(--pop)}
.choices button[aria-pressed="true"],.racelist button[aria-pressed="true"],.daypick button[aria-pressed="true"],.feel button[aria-pressed="true"]{transform:scale(1.02)}
.daypick button[aria-pressed="true"]{transform:scale(1.08)}
.wz-bar i{transition:width .5s var(--spring)}

/* ---------- séance cochée : petit rebond ---------- */
@keyframes pop{0%{transform:scale(.6)}60%{transform:scale(1.15)}100%{transform:scale(1)}}
.check.just[aria-pressed="true"],.f-done.just[aria-pressed="true"] svg{animation:pop .4s var(--pop)}

/* ---------- accordéons : le contenu glisse à l'ouverture ---------- */
@keyframes open-down{from{opacity:0;transform:translateY(-6px)}to{opacity:1;transform:none}}
details.opening[open]>:not(summary){animation:open-down .32s var(--spring)}
details>summary::after{transition:transform .3s var(--spring)!important}

/* ---------- menu des plans, cartes, boutons ---------- */
.planmenu .pm-row{animation:rise .35s var(--spring) both}
.planmenu .pm-row:nth-child(2){animation-delay:.03s}
.planmenu .pm-row:nth-child(3){animation-delay:.06s}
.btn{transition:transform .2s var(--pop),opacity .15s,box-shadow .2s}
.week>summary,.info>summary{transition:background .2s}
.week>summary:active,.info>summary:active{background:var(--fill)}

/* ---------- respiration, célébrations : déjà animées ; bienvenue : les textes montent ---------- */
.wl-slide h1,.wl-slide p{animation:rise .6s var(--spring) both}
.wl-slide p{animation-delay:.08s}

@media (prefers-reduced-motion:reduce){
  .tab.enter-fwd,.tab.enter-back,.tab.enter-fwd>*,.tab.enter-back>*,.in-fwd,.in-back,.in-up,details.opening[open]>:not(summary){animation:none!important}
  .nav-pill,.seg::before,.dayscroll .day{transition:none!important}
}

/* ---------- bouton « ta bande » dans l'en-tête ---------- */
.hbtn{position:relative;width:40px;height:40px;border-radius:50%;border:.5px solid var(--glass-edge);background:var(--glass);-webkit-backdrop-filter:blur(22px) saturate(180%);backdrop-filter:blur(22px) saturate(180%);color:var(--ink);display:flex;align-items:center;justify-content:center;padding:0;box-shadow:var(--glass-shadow),var(--glass-hi)}
.hbtn svg{width:21px;height:21px}
.hdot{position:absolute;top:6px;right:6px;width:9px;height:9px;border-radius:50%;background:#FF2D55;box-shadow:0 0 0 2px var(--bg)}
.top-in{gap:8px}

/* ---------- séance guidée : boutons ---------- */
.note-btn.play{background:var(--grad);color:#fff;display:inline-flex;align-items:center;gap:5px}
.note-btn.play svg,.play-big svg{width:14px;height:14px}
.play-big{margin-top:14px}
.focus .play-big+.f-acts{margin-top:10px}

/* ---------- séance guidée : lecteur plein écran ---------- */
.rplayer{position:fixed;inset:0;z-index:85;background:radial-gradient(120% 70% at 50% 0%,#243241 0%,#0B1016 55%,#000 100%);color:#fff;animation:rp-in .38s var(--spring)}
.rplayer.closing{animation:rp-out .28s ease forwards}
@keyframes rp-in{from{opacity:0;transform:translateY(40px)}to{opacity:1;transform:none}}
@keyframes rp-out{to{opacity:0;transform:translateY(40px)}}
.rp-in{height:100%;max-width:560px;margin:0 auto;display:flex;flex-direction:column;padding:calc(env(safe-area-inset-top,0px) + 10px) 20px calc(env(safe-area-inset-bottom,0px) + 18px)}
.rp-top{display:grid;grid-template-columns:40px 1fr 40px;align-items:center;gap:8px;text-align:center}
.rp-top b{display:block;font-size:16px;font-weight:700}
.rp-top small{font-size:12px;color:rgba(255,255,255,.6)}
.rp-x{width:40px;height:40px;border-radius:50%;border:0;background:rgba(255,255,255,.1);color:#fff;display:flex;align-items:center;justify-content:center}
.rp-x svg{width:16px;height:16px}
.rp-bar{display:flex;gap:4px;margin:12px 0 6px}
.rp-bar i{flex:1;height:4px;border-radius:2px;background:rgba(255,255,255,.14);transition:background .3s}
.rp-bar i.ok{background:#FF5A5F}
.rp-bar i.on{background:linear-gradient(90deg,#FF7A45,#FF2D55)}
.rp-main{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;min-height:0}
.rp-kicker{margin:0 0 6px;font-size:13px;font-weight:700;color:#FF8A6A}
.rp-fig{width:min(78vw,300px);aspect-ratio:1.2;border-radius:28px;background:rgba(255,255,255,.96);padding:10px;margin-bottom:14px;box-shadow:0 20px 50px rgba(0,0,0,.35)}
.rp-fig svg{width:100%;height:100%;display:block;background:transparent}
.rp-fig .fig .f{stroke:#1B2530}.rp-fig .fig .hd{fill:#1B2530}.rp-fig .fig .b{stroke:#8C99A4}.rp-fig .fig .gr{stroke:#D6DCE2}
.rp-nofig{width:100%;height:100%;display:flex;align-items:center;justify-content:center;color:#FF2D55}
.rp-nofig svg{width:60%;height:60%}
.rp-main h2{margin:0;font-size:30px;font-weight:800}
.rp-amount{margin:4px 0 6px;font:800 26px var(--num);background:linear-gradient(90deg,#FF7A45,#FF2D55);-webkit-background-clip:text;background-clip:text;color:transparent}
.rp-main p{margin:0;max-width:340px;font-size:15px;line-height:1.45;color:rgba(255,255,255,.72)}
.rp-count{margin-top:14px}
.rp-ring{width:130px;height:130px}
.rp-ring circle:nth-child(2){transition:stroke-dashoffset 1s linear}
.rp-foot{display:grid;grid-template-columns:auto 1fr;gap:10px;margin-top:14px}
.rp-foot .btn.ghost{background:rgba(255,255,255,.1);color:#fff;padding:13px 20px}
.rp-foot .btn.wide{grid-column:1/-1}
.rp-end .rp-trophy .rp-ring{width:150px;height:150px}
.rp-end h2{margin-top:12px}

/* ---------- mes bandes ---------- */
.bd-card{display:block;width:100%;text-align:left;border:0;background:var(--card);border-radius:22px;padding:14px 16px;margin-bottom:10px;color:var(--ink);box-shadow:0 0 0 .5px var(--line)}
.bc-top{display:flex;justify-content:space-between;align-items:baseline;gap:10px;margin-bottom:2px}
.bc-top b{font-size:18px;font-weight:800}
.bc-top span{font-size:13px;color:var(--mute);flex:none}
.bd-card small{display:block;font-size:13px;color:var(--mute)}
.bd-card .q-bar{margin:10px 0 4px}
.bc-av{display:flex;margin-top:10px}
.bc-av .av{margin-right:-6px;box-shadow:0 0 0 2px var(--card)}

/* ---------- accueil d'une bande ---------- */
.bd-hero{background:linear-gradient(160deg,#2A3947,#121A22);color:#fff;border-radius:26px;padding:16px 18px;margin-bottom:14px;box-shadow:0 12px 30px rgba(18,26,34,.3)}
.bh-k{font-size:12px;font-weight:700;color:#FF8A6A}
.bh-km{display:flex;align-items:flex-end;gap:10px;margin:2px 0 4px}
.bh-km b{font:800 64px/.9 var(--num);letter-spacing:-.02em;background:linear-gradient(90deg,#fff,#FFD2C2);-webkit-background-clip:text;background-clip:text;color:transparent}
.bh-km span{font-size:15px;font-weight:600;color:rgba(255,255,255,.8);padding-bottom:6px}
.bd-hero p{margin:0 0 12px;font-size:14px;color:rgba(255,255,255,.75)}
.bh-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px;border-top:.5px solid rgba(255,255,255,.15);padding-top:12px}
.bh-grid div{font-size:12px;color:rgba(255,255,255,.6)}
.bh-grid b{display:block;font:800 24px/1.1 var(--num);color:#fff}
.feed-it{display:grid;grid-template-columns:28px 1fr auto;gap:10px;align-items:center;padding:8px 0;border-top:.5px solid var(--line)}
.feed-it:first-of-type{border-top:0}
.feed-it p{margin:0;font-size:14px;line-height:1.35}
.feed-it small{font-size:11px;color:var(--mute);white-space:nowrap}
.av.cheer{background:var(--grad);display:flex;align-items:center;justify-content:center}
.av.cheer svg{width:14px;height:14px;color:#fff}
.bd-screen{min-height:60vh}

/* ---------- check-in du matin ---------- */
.ci{background:var(--card);border-radius:24px;padding:14px 16px;margin-bottom:12px;box-shadow:inset 0 0 0 1.5px var(--tint-soft)}
.ci-h{display:flex;justify-content:space-between;align-items:baseline;margin-bottom:4px}
.ci-h span{font-size:12px;font-weight:700;background:var(--grad);-webkit-background-clip:text;background-clip:text;color:transparent}
.ci-h em{font-style:normal;font-size:12px;color:var(--mute)}
.ci>b{display:block;font-size:17px;font-weight:800;margin-bottom:10px}
.ci-q{margin-bottom:10px}
.ci-q small{display:block;font-size:12px;font-weight:600;color:var(--mute);margin-bottom:5px}
.ci-opts{display:grid;grid-template-columns:repeat(3,1fr);gap:6px}
.ci-opts button{border:0;background:var(--sunk);color:var(--ink);border-radius:12px;padding:9px 4px;font-size:13px;font-weight:600;transition:background .25s,color .25s,transform .3s var(--pop)}
.ci-opts button[aria-pressed="true"]{background:linear-gradient(160deg,#2A3947,#121A22);color:#fff;transform:scale(1.03);box-shadow:inset 0 0 0 1.5px #FF5A5F}
.ci-v{border-radius:18px;padding:12px 14px;margin-top:4px;background:var(--sunk);animation:rise .35s var(--spring)}
.ci-v b{display:block;font-size:16px;font-weight:800;margin-bottom:4px}
.ci-v p{margin:0 0 10px;font-size:14px;line-height:1.4;color:var(--mute)}
.ci-v.ok{box-shadow:inset 0 0 0 1.5px var(--ok)}.ci-v.mid{box-shadow:inset 0 0 0 1.5px var(--constr)}.ci-v.bad{box-shadow:inset 0 0 0 1.5px var(--pic)}
.ci.done-ci{display:flex;justify-content:space-between;align-items:center;gap:10px;padding:10px 16px;font-size:13px;color:var(--mute);box-shadow:none}
.ci.done-ci .linkbtn{font-size:14px;padding:0;flex:none}

/* ---------- notifications ---------- */
.nt-row{display:flex;justify-content:space-between;align-items:center;gap:12px;padding:10px 0;border-top:.5px solid var(--line);font-size:15px;color:var(--ink);font-weight:500}
.nt-row:first-of-type{border-top:0}
.switch{appearance:none;-webkit-appearance:none;flex:none;width:51px;height:31px;border-radius:999px;background:var(--fill2);position:relative;transition:background .25s;cursor:pointer;margin:0}
.switch::after{content:"";position:absolute;top:2px;left:2px;width:27px;height:27px;border-radius:50%;background:#fff;box-shadow:0 2px 6px rgba(0,0,0,.25);transition:transform .3s var(--spring)}
.switch:checked{background:var(--ok)}
.switch:checked::after{transform:translateX(20px)}

/* ---------- social : amis ---------- */
.soc-tabs{margin:0 0 16px}
.fr-me{display:flex;justify-content:space-between;align-items:center;gap:12px;background:linear-gradient(160deg,#2A3947,#121A22);color:#fff;border-radius:22px;padding:14px 16px;margin-bottom:10px}
.fr-me small{display:block;font-size:12px;color:#FF8A6A;font-weight:700}
.fr-me b{font:800 30px/1.1 var(--num);letter-spacing:.14em}
.fr-add{display:grid;grid-template-columns:1fr auto;gap:8px;margin-bottom:14px}
.fr-add input{border:0;background:var(--card);border-radius:14px;padding:11px 12px;font-size:16px;color:var(--ink);text-transform:uppercase;letter-spacing:.12em}
.fr-row{display:grid;grid-template-columns:28px 1fr auto;gap:10px;align-items:center;padding:9px 0;border-top:.5px solid var(--line)}
.fr-row:first-of-type{border-top:0}
.fr-row b{font-size:15px;font-weight:700}
.fr-row b small{font-weight:400;color:var(--mute)}
.fr-row .btn-row{flex-wrap:nowrap}
.pills.mini{grid-template-columns:repeat(3,1fr);margin-bottom:8px}
.pills.mini button{padding:8px 4px;font-size:13px}
.bd-row .fr-val{grid-column:3;justify-self:end;font:800 17px var(--num);color:var(--tint);margin-top:-2px}
.bd-row .bd-info{grid-column:3}
.bd-row{grid-template-columns:18px 32px 1fr auto}
.bd-row .bd-info{grid-column:3}
.bd-row .fr-val{grid-column:4;grid-row:1}
.bd-row .cheers{grid-column:3 / span 2;flex-wrap:wrap}
.chip.ghost-chip{background:transparent;box-shadow:inset 0 0 0 1px var(--line);color:var(--mute)}
.chip.danger-chip{color:var(--pic)}
.linkbtn.danger-link{color:var(--pic);font-size:14px;padding:0}
.boss{font-style:normal;font-size:11px;font-weight:700;color:#fff;background:var(--grad);border-radius:999px;padding:2px 7px;margin-left:4px;vertical-align:2px}
.bd-card.succ .bc-top{margin:0}

/* ---------- probabilité de réussir l'objectif ---------- */
.odds{display:grid;grid-template-columns:64px 1fr;gap:12px;align-items:center;margin-top:12px;padding-top:12px;border-top:.5px solid var(--line)}
.od-ring{width:64px;height:64px;color:var(--ink)}
.od-ring circle:nth-child(2){transition:stroke-dashoffset .8s var(--spring)}
.od-t b{display:block;font-size:15px;font-weight:800;line-height:1.3}
.od-t small{display:block;font-size:12.5px;margin-top:3px;color:var(--mute)}
.od-t small.up{color:var(--ok)}.od-t small.down{color:var(--pic)}
.od-t small.od-next{color:var(--ink)}
.panel .odds{margin-top:0;padding-top:0;border-top:0;margin-bottom:10px}
.od-chart{margin-bottom:6px}

/* ---------- allure à l'aveugle ---------- */
.blind-tag{font-style:normal;font-size:11px;font-weight:700;color:#fff;background:linear-gradient(135deg,#5E5CE6,#2A3947);border-radius:999px;padding:2px 8px;margin-left:6px;vertical-align:2px}
.blind-note{margin:6px 0 0;font-size:13px;line-height:1.4;color:var(--mute);border-left:3px solid #5E5CE6;padding-left:8px}
.blind-note.done{color:var(--ink)}
.blind-box{background:var(--sunk);border-radius:16px;padding:12px;margin-bottom:12px;box-shadow:inset 0 0 0 1.5px rgba(94,92,230,.5)}
.blind-box b{display:block;font-size:15px}
.blind-box small{display:block;font-size:12px;color:var(--mute);margin:2px 0 8px}
.three{display:grid;grid-template-columns:1.2fr 1fr 1fr;gap:8px}
.three .field{margin-bottom:0}
.bl-score{display:flex;align-items:center;gap:14px;margin-bottom:8px}
.bl-big{font:800 52px/1 var(--num);background:linear-gradient(135deg,#8E8CFF,#5E5CE6);-webkit-background-clip:text;background-clip:text;color:transparent}
.bl-big small{font-size:18px}
.bl-score p{margin:0;font-size:14px;color:var(--mute)}
.bl-row{display:grid;grid-template-columns:70px 1fr 40px;grid-template-rows:auto auto;column-gap:10px;align-items:center;padding:8px 0;border-top:.5px solid var(--line)}
.bl-row span{grid-row:1/3;font-size:13px;color:var(--mute)}
.bl-row b{font:800 16px var(--num)}
.bl-row small{grid-column:2;font-size:12px;color:var(--mute)}
.bl-row em{grid-column:3;grid-row:1/3;font:800 18px var(--num);font-style:normal;text-align:right}
.bl-row em.ok{color:var(--ok)}.bl-row em.mid{color:var(--constr)}.bl-row em.low{color:var(--pic)}

/* ---------- statuts des plans, enchaînement ---------- */
.pst{display:inline-block;font-size:11px;font-weight:700;border-radius:999px;padding:2px 8px;margin-bottom:4px}
.pst.now{background:rgba(52,199,89,.16);color:var(--ok)}
.pst.next{background:rgba(10,132,255,.16);color:var(--base)}
.pst.done{background:var(--fill);color:var(--mute)}
.pi-top .pst{display:table}
.status-banner{border-radius:20px;padding:12px 14px;margin-bottom:12px;background:var(--card);box-shadow:inset 0 0 0 1.5px rgba(10,132,255,.4)}
.status-banner.done{box-shadow:inset 0 0 0 1.5px var(--line)}
.status-banner p{margin:4px 0 10px;font-size:14px;line-height:1.4;color:var(--mute)}
.plancard.chain{box-shadow:inset 0 0 0 1.5px rgba(10,132,255,.45)}
.plancard.chain .btn{margin-top:6px}
.src-free{font-style:normal;font-size:11px;font-weight:700;color:var(--base);margin-left:6px;vertical-align:1px}
.log-item[disabled]{opacity:1}

/* ---------- objectif de km de la bande ---------- */
.kg-sum{margin:0 0 8px;font-size:14px;font-weight:600}
.kg-row{display:grid;grid-template-columns:28px 70px 1fr 56px;gap:8px;align-items:center;padding:5px 0}
.kg-row b{font-size:14px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.kg-bar{height:8px;border-radius:4px;background:var(--fill);overflow:hidden}
.kg-bar i{display:block;height:100%;background:var(--grad);border-radius:4px}
.kg-row.ok .kg-bar i{background:var(--ok)}
.kg-row em{font:800 13px var(--num);font-style:normal;text-align:right;color:var(--mute)}
.kg-row.ok em{color:var(--ok)}
.kg-edit{display:flex;align-items:center;gap:8px;margin:10px 0 4px;flex-wrap:wrap}
.kg-edit input{width:90px;border:0;background:var(--sunk);border-radius:12px;padding:9px 10px;font-size:16px;color:var(--ink)}

/* ---------- accès à la sortie libre ---------- */
.free-btn{display:flex;align-items:center;justify-content:center;gap:6px;width:100%;margin-top:12px;border:0;border-radius:14px;padding:10px;background:var(--sunk);color:var(--tint);font-size:15px;font-weight:600}
.free-btn svg{width:16px;height:16px}
.free-link{display:block;border:0;background:none;padding:6px 0 0;color:var(--base);font-size:13px;font-weight:600;text-align:left}

/* =========================================================
   Univers Trail 100+ : forêt, ocre, roche.
   ========================================================= */
:root[data-mode="trail"]{
  --tint:#9BCB5C; --tint2:#D9A441; --tint-soft:rgba(155,203,92,.16);
  --grad:linear-gradient(135deg,#D9A441,#9BCB5C);
  --borne:#2A3A2C;
}
:root[data-mode="trail"] .hero3,:root[data-mode="trail"] .focus,:root[data-mode="trail"] .boost,:root[data-mode="trail"] .review,:root[data-mode="trail"] .bd-hero,:root[data-mode="trail"] .fr-me{background:linear-gradient(160deg,#2C3B2E,#101A12)}
:root[data-mode="trail"] .btn:not(.ghost):not(.danger){box-shadow:0 6px 18px rgba(155,203,92,.25);color:#101A12}
:root[data-mode="trail"] .shok{color:#101A12}
:root[data-mode="trail"] .tip-h,:root[data-mode="trail"] .rv-h span,:root[data-mode="trail"] .bh-k{color:#D9A441}

/* ---------- menu : choix de l'univers ---------- */
.mode-seg{margin:2px 2px 8px}
.mode-seg button b{font-family:var(--num);font-weight:800;margin-left:3px}

/* ---------- univers trail en coquille ---------- */
.t100-hero{text-align:center;padding:10px 6px 18px}
.t100-logo{width:110px;height:auto;filter:drop-shadow(0 12px 30px rgba(155,203,92,.25));animation:rise .6s var(--spring) both}
.t100-hero h1{margin:10px 0 6px;font:800 40px/1 var(--num);background:linear-gradient(90deg,#D9A441,#9BCB5C);-webkit-background-clip:text;background-clip:text;color:transparent}
.t100-hero p{margin:0 auto;max-width:330px;font-size:15px;line-height:1.45;color:var(--mute)}
.t100-list div{padding:10px 0;border-top:.5px solid var(--line)}
.t100-list div:first-child{border-top:0}
.t100-list b{display:block;font-size:15px}
.t100-list small{font-size:13px;color:var(--mute)}

/* ---------- animation de bascule : la borne se fend, tombe, la nouvelle se révèle ---------- */
.mode-fx{position:fixed;inset:0;z-index:95;display:flex;flex-direction:column;align-items:center;justify-content:center;overflow:hidden;background:#05080B}
.mode-fx[hidden]{display:none}
.mode-fx::before{content:"";position:absolute;inset:-20%;background:radial-gradient(60% 45% at 50% 42%,#2A3947 0%,rgba(11,16,22,.6) 55%,transparent 75%);transition:opacity .9s ease}
.mode-fx::after{content:"";position:absolute;inset:-20%;background:radial-gradient(60% 45% at 50% 42%,#2F4A30 0%,rgba(10,18,12,.6) 55%,transparent 75%);opacity:0;transition:opacity .9s ease}
.mode-fx.to-road::before{background:radial-gradient(60% 45% at 50% 42%,#2F4A30 0%,rgba(10,18,12,.6) 55%,transparent 75%)}
.mode-fx.to-road::after{background:radial-gradient(60% 45% at 50% 42%,#2A3947 0%,rgba(11,16,22,.6) 55%,transparent 75%)}
.mode-fx.reveal::before{opacity:0}.mode-fx.reveal::after{opacity:1}
.mode-fx.out{animation:fx-out .4s ease forwards}
@keyframes fx-out{to{opacity:0;transform:scale(1.03)}}
.fx-stage{position:relative;z-index:1;width:170px;height:212px}
.fx-stage svg{position:absolute;inset:0;width:100%;height:100%;overflow:visible}
/* ancienne borne : tremble, se fissure, puis ses morceaux tombent */
.fx-old{animation:fx-shake .46s linear both}
@keyframes fx-shake{0%,100%{transform:none}15%{transform:translate(-2px,0) rotate(-.8deg)}30%{transform:translate(2px,-1px) rotate(.8deg)}45%{transform:translate(-3px,1px) rotate(-1.2deg)}60%{transform:translate(3px,0) rotate(1.2deg)}80%{transform:translate(-1px,1px)}}
.fx-crack{fill:none;stroke:#fff;stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:420;stroke-dashoffset:420;opacity:0}
.mode-fx.crack .fx-crack{opacity:1;animation:fx-draw .42s cubic-bezier(.6,0,.4,1) forwards}
@keyframes fx-draw{to{stroke-dashoffset:0}}
.mode-fx.break .fx-crack{opacity:0;transition:opacity .1s}
.fx-piece{transform-box:fill-box;transform-origin:center}
.mode-fx.break .fx-piece{animation:fx-fall .75s cubic-bezier(.5,0,.85,.55) forwards}
.mode-fx.break .fx-piece[style*="--i:0"]{--tx:-46px;--ty:150px;--r:-38deg}
.mode-fx.break .fx-piece[style*="--i:1"]{--tx:52px;--ty:120px;--r:34deg;animation-delay:.03s}
.mode-fx.break .fx-piece[style*="--i:2"]{--tx:38px;--ty:190px;--r:22deg;animation-delay:.06s}
.mode-fx.break .fx-piece[style*="--i:3"]{--tx:-8px;--ty:230px;--r:-12deg;animation-delay:.02s}
@keyframes fx-fall{0%{transform:none;opacity:1}15%{transform:translate(calc(var(--tx) * .15),-5px) rotate(calc(var(--r) * .15));opacity:1}55%{opacity:.85}100%{transform:translate(var(--tx),var(--ty)) rotate(var(--r));opacity:0}}
/* flash au moment où la borne cède */
.fx-flash{position:absolute;inset:0;z-index:2;background:radial-gradient(35% 25% at 50% 45%,rgba(255,255,255,.55),transparent 70%);opacity:0;pointer-events:none}
.mode-fx.break .fx-flash{animation:fx-flash .45s ease-out}
@keyframes fx-flash{0%{opacity:0}25%{opacity:1}100%{opacity:0}}
/* poussière */
.fx-dust{position:absolute;left:50%;top:55%;z-index:3}
.fx-dust i{position:absolute;width:var(--sz);height:var(--sz);border-radius:50%;background:rgba(244,239,228,.8);opacity:0}
.mode-fx.break .fx-dust i{animation:fx-dust 1s cubic-bezier(.2,.6,.4,1) var(--dl) forwards}
@keyframes fx-dust{0%{opacity:.9;transform:translate(0,0)}100%{opacity:0;transform:translate(var(--dx),var(--dy))}}
/* nouvelle borne : se révèle, la jauge se dessine */
.fx-new{opacity:0;transform:scale(.86) translateY(10px);filter:blur(6px)}
.mode-fx.reveal .fx-new{opacity:1;transform:none;filter:none;transition:opacity .5s ease,transform .7s cubic-bezier(.34,1.4,.64,1),filter .5s ease}
.fx-new .fx-g{stroke-dasharray:100;stroke-dashoffset:100}
.mode-fx.reveal .fx-new .fx-g{animation:fx-gauge .8s .2s cubic-bezier(.3,.7,.3,1) forwards}
@keyframes fx-gauge{to{stroke-dashoffset:0}}
/* compteur à rouleaux */
.fx-num{position:absolute;left:0;right:0;top:63%;z-index:4;display:flex;justify-content:center;opacity:0}
.mode-fx.reveal .fx-num{opacity:1;transition:opacity .25s .1s}
.fx-reel{display:flex;align-items:center;font:800 44px/1.2 var(--num);color:#1B2530;height:1.2em;overflow:hidden}
.to-trail .fx-reel{font-size:36px;color:#1E2B22}
.fx-col{display:block;height:1.2em;overflow:hidden;-webkit-mask-image:linear-gradient(transparent,#000 14%,#000 86%,transparent);mask-image:linear-gradient(transparent,#000 14%,#000 86%,transparent)}
.fx-col>span{display:flex;flex-direction:column;transform:translateY(calc(var(--from) * -1.2em))}
.fx-col i{display:block;height:1.2em;line-height:1.2em;font-style:normal;text-align:center}
.mode-fx.reveal .fx-col>span{transform:translateY(calc(var(--to) * -1.2em));transition:transform .85s cubic-bezier(.2,.8,.2,1) calc(.15s + var(--d))}
.fx-plus{display:inline-block;width:0;opacity:0;transform:scale(.4);overflow:hidden}
.to-trail.arrived .fx-plus{width:.6em;opacity:1;transform:scale(1);transition:all .35s cubic-bezier(.34,1.56,.64,1)}
.fx-label{position:relative;z-index:1;margin-top:34px;font-size:14px;font-weight:700;letter-spacing:.2em;text-transform:uppercase;opacity:0;transform:translateY(8px);transition:all .45s ease}
.to-trail .fx-label{color:#B9D98A}.to-road .fx-label{color:#FF9A7A}
.mode-fx.arrived .fx-label{opacity:1;transform:none}

/* ---------- menu du profil ---------- */
.profilemenu{left:auto;right:12px;transform-origin:top right}
.pf-head{padding:8px 12px 10px}
.pf-head b{display:block;font-size:16px;font-weight:800}
.pf-head small{font-size:12px;color:var(--mute)}
.mode-seg{margin:0 4px 8px}
.mode-seg button{display:flex;align-items:center;justify-content:center;gap:6px;padding:10px 4px}
.mode-seg button svg{width:18px;height:18px;flex:none;color:var(--ink)}
.mode-seg button b{font-family:var(--num);font-weight:800}

/* ---------- couleurs des graphiques par univers ---------- */
:root{--chart:var(--base);--chartA:#FF7A45;--chartB:#FF2D55;--chartD:#6E9F4A}
:root[data-mode="trail"]{--chart:#6E9F4A;--chartA:#D9A441;--chartB:#9BCB5C;--chartD:#6E9F4A}
:root[data-mode="trail"] .lv-ring{background:conic-gradient(#9BCB5C calc(var(--p) * 1%),var(--fill) 0)}
:root[data-mode="trail"] .pr-row div:last-child b{color:#9BCB5C}
.pr-row b.rng{font-size:21px;white-space:nowrap}
.road-h{margin:10px 0 6px;font:800 40px/1 var(--num);background:linear-gradient(90deg,#FF7A45,#FF2D55);-webkit-background-clip:text;background-clip:text;color:transparent}

/* ---------- bienvenue : installer l'app ---------- */
.wl-install{justify-content:flex-start;padding-top:8px;overflow-y:auto}
.wl-install .wl-art{height:150px;margin-bottom:14px}
.wl-install .wl-art svg{width:120px}
.wl-newicon{transform-box:fill-box;transform-origin:center;animation:wl-pop 1.6s ease-in-out infinite}
@keyframes wl-pop{0%,60%,100%{transform:scale(1)}30%{transform:scale(1.35)}}
.wl-install h1{font-size:30px}
.wl-os{margin-top:14px;background:rgba(255,255,255,.07);border:.5px solid rgba(255,255,255,.12);border-radius:18px;padding:12px 14px}
.wl-os>b{display:block;font-size:14px;font-weight:800;color:#FF8A6A;margin-bottom:6px}
.wl-os ol{margin:0;padding-left:20px;font-size:15px;line-height:1.55;color:rgba(255,255,255,.85)}
.wl-os li{margin-bottom:4px}
.wl-ic{display:inline-flex;align-items:center;justify-content:center;width:22px;height:22px;border-radius:6px;background:rgba(255,255,255,.14);vertical-align:-5px;margin:0 2px}
.wl-ic svg{width:15px;height:15px;color:#fff}

/* ---------- en-tête : les boutons de droite ne bougent jamais, seul le nom du plan se raccourcit ---------- */
.top-in>button.brand{flex:1 1 auto;min-width:0;max-width:none;display:flex;align-items:center;gap:6px}
.top-in>button.brand b{flex:0 1 auto;min-width:0}
.top-in>.sync,.top-in>.hbtn,.top-in>.avatar{flex:0 0 auto}
.top-in>.hbtn,.top-in>.avatar{width:44px;height:44px;min-width:44px}
.top-in>.sync{margin-left:0}

.side-brand,.side-mode{display:none}

/* =========================================================
   Version ordinateur (960 px et plus) : barre latérale, deux colonnes,
   fenêtres en boîtes de dialogue centrées. Même style, mêmes couleurs.
   ========================================================= */
@media (min-width:960px){
  :root{--side:224px}
  /* le décalage de la barre latérale ne concerne que l'app, pas l'écran de connexion */
  #app{padding-left:var(--side)}
  /* barre latérale */
  .nav,.nav.compact{position:fixed;left:12px;top:12px;bottom:12px;right:auto;transform:none;width:calc(var(--side) - 24px);height:auto;border-radius:24px;padding:12px 8px;display:flex;flex-direction:column;gap:10px}
  .side-brand{display:flex;align-items:center;gap:10px;padding:4px 8px 8px}
  .side-brand img{width:34px;height:34px;border-radius:9px}
  .side-brand b{font-size:19px;font-weight:800;letter-spacing:-.01em}
  .nav-in{display:flex;flex-direction:column;gap:4px;position:relative;max-width:none;width:100%;margin:0;padding:0}
  .nav .nav-in button,.nav.compact .nav-in button{flex-direction:row;justify-content:flex-start;gap:12px;padding:0 12px;font-size:15px;font-weight:600;height:44px;border-radius:14px;text-align:left}
  .nav button svg{width:22px;height:22px}
  .nav button[aria-current="page"] svg{transform:none}
  .nav-pill,.nav.compact .nav-pill{top:0;bottom:auto;left:0;right:0;width:auto;height:44px;border-radius:14px;transform:translateY(calc(var(--i,0) * 48px))}
  .side-mode{display:none}
  .nav .nav-in button{width:100%}
  .hero3 .road{max-width:620px;max-height:130px;display:block}
  .side-mode button b{font-family:var(--num);font-weight:800;margin-left:3px}
  /* en-tête et contenu */
  .top-in{max-width:1320px;padding:12px 32px}
  main{max-width:1320px;margin:0 auto;padding:8px 32px 60px}
  /* connexion centrée */
  .gate-in{max-width:440px;text-align:center}
  .gate-logo{margin:0 auto 18px}
  .gate .field{text-align:left}
  .pg-title{font-size:40px}
  .dk-grid{display:grid;grid-template-columns:minmax(0,1.5fr) minmax(320px,1fr);gap:22px;align-items:start}
  .dk-side{position:sticky;top:84px;display:flex;flex-direction:column}
  .dk-main>*,.dk-side>*{margin-bottom:14px}
  /* Renfo et Coach : pleine largeur, blocs en grille */
  #tab-food .panel,#tab-food .boost,#tab-food .tip{margin-bottom:14px}
  #tab-renfo .exg{grid-template-columns:repeat(auto-fill,minmax(210px,1fr))}
  .t100{max-width:640px;margin:0 auto}
  /* Aujourd'hui : héros compact, trois colonnes */
  /* héros en deux parties : la course et le compte à rebours à gauche, la route et les chiffres à droite */
  .hero3{padding:16px 24px;display:grid;grid-template-columns:minmax(0,.9fr) minmax(0,1.1fr);grid-template-areas:"top top" "lvl road" "race road" "count where" "count stats";column-gap:28px;align-items:center}
  .hero3>.h3-top{grid-area:top}
  .hero3>.lvl{grid-area:lvl;justify-self:start}
  .hero3>.h3-race{grid-area:race}
  .hero3>.h3-count{grid-area:count;align-self:start}
  .hero3>.road{grid-area:road;max-height:92px;width:100%;max-width:none}
  .hero3>.h3-where{grid-area:where}
  .hero3>.h3-stats{grid-area:stats;margin-top:0;padding-top:8px}
  .h3-count b{font-size:78px}
  /* Aujourd'hui : une ligne de trois cases de même hauteur, puis des cartes alignées */
  .dk-row3{display:grid;grid-template-columns:1.15fr 1fr 1fr;gap:16px;margin-top:14px;align-items:stretch}
  .dk-cell{display:flex;flex-direction:column;min-width:0}
  .dk-cell>*{margin-bottom:0}
  .dk-cell>*+*{margin-top:10px}
  .dk-cell>.panel,.dk-cell>.pred,.dk-cell>.focus:last-child,.dk-cell>.quest{flex:1}
  .dk-cell>h2.blk{margin-top:4px}
  .dk-cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:16px;margin-top:16px;align-items:stretch}
  .dk-cards>*{margin:0!important}
  .dk-cards .start li{padding:6px 0}
  .route-panel{display:none}
  /* Plan : barre des jours collante (resserrée une fois collée), puis une journée par ligne */
  .dk-daybar{position:sticky;top:68px;z-index:15;padding:10px 12px;margin-bottom:12px;transition:padding .25s,box-shadow .25s}
  .dk-daybar .dayscroll{scroll-behavior:smooth}
  .dk-daybar.stuck{padding:6px 10px;box-shadow:0 10px 30px rgba(0,0,0,.35)}
  .dk-daybar.stuck .day{min-width:44px;padding:5px 0 6px}
  .dk-daybar.stuck .day .dn{font-size:16px}
  .dk-daybar.stuck .day .dm,.dk-daybar.stuck .day .dl{display:none}
  .daylist{background:var(--card);border-radius:22px;padding:4px 14px;margin-bottom:16px}
  .dl-row{display:grid;grid-template-columns:120px 1fr;gap:14px;align-items:center;padding:10px 4px;border-top:.5px solid var(--line);scroll-margin-top:170px}
  .dl-row:first-child{border-top:0}
  .dl-row.mon{border-top:1.5px solid var(--fill2)}
  .dl-row.today{background:var(--tint-soft);border-radius:12px}
  .dl-row.past .dl-txt,.dl-row.past .dl-date{opacity:.55}
  .dl-date b{display:block;font-size:15px;font-weight:700;text-transform:capitalize}
  .dl-date span{font-size:12px;color:var(--mute)}
  .dl-row.today .dl-date b{color:var(--tint)}
  .dl-rest{font-size:14px;color:var(--mute)}
  .dl-ses{display:grid;grid-template-columns:30px minmax(0,1fr) auto;gap:12px;align-items:center;padding:3px 0}
  .dl-ses .check{width:26px;height:26px}
  .dl-txt{min-width:0;display:flex;gap:10px;align-items:baseline}
  .dl-txt b{flex:none;font-size:15px}
  .dl-txt span{font-size:14px;color:var(--mute);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .dl-ses.done .dl-txt b{text-decoration:line-through;text-decoration-color:var(--mute)}
  .dl-ses.renfo .dl-txt b{color:var(--constr)}
  .dl-act{display:flex;gap:6px}
  .dl-act .note-btn{margin:0;padding:6px 12px}
  /* fenêtres : boîtes de dialogue centrées */
  .sheet{align-items:center;justify-content:center}
  .sheet-in{width:min(560px,92vw);margin:0 auto;max-height:86vh;border-radius:28px;transform:translateY(24px) scale(.97);opacity:0;transition:transform .35s var(--spring),opacity .25s ease}
  .sheet.on .sheet-in{transform:none;opacity:1}
  .sheet.closing .sheet-in{transform:translateY(16px) scale(.98);opacity:0;transition:transform .22s ease,opacity .2s ease}
  .grab{display:none}
  .sh-head{cursor:default}
  .wz-body{min-height:360px}
  /* menus déroulants de l'en-tête */
  .planmenu{width:340px}
  /* souris */
  button,summary,.log-item{cursor:pointer}
  .btn:hover{filter:brightness(1.08)}
  .chip:hover,.pills button:hover,.choices button:hover,.racelist button:hover,.bd-card:hover,.plan-item:hover{box-shadow:0 0 0 1.5px var(--tint-soft)}
  .nav .nav-in button:hover:not([aria-current="page"]){background:var(--fill)}
  .dayscroll .day:hover{transform:translateY(-2px)}
  .dayscroll{scrollbar-width:thin}
  .toast{top:auto;bottom:28px}
  .celebrate{top:20px}
  /* le rebond de la barre du bas ne s'applique pas à la barre latérale */
  main{padding-bottom:60px}
}
@media (min-width:1400px){:root{--side:272px}.dk-grid{grid-template-columns:minmax(0,1.6fr) minmax(360px,1fr)}}

/* pas de cadre de focus au clic de souris (il reste pour la navigation au clavier) */
button:focus:not(:focus-visible),summary:focus:not(:focus-visible){outline:none}

/* ---------- recherche d'amis ---------- */
.fr-search{display:flex;align-items:center;gap:8px;background:var(--card);border-radius:14px;padding:0 12px;margin-bottom:8px}
.fr-search svg{width:18px;height:18px;color:var(--mute);flex:none}
.fr-search input{flex:1;border:0;background:none;padding:12px 0;font-size:16px;color:var(--ink);outline:none}
.fr-results{background:var(--card);border-radius:16px;padding:2px 12px;margin-bottom:10px}
.fr-row .btn.small{padding:7px 14px}
.soc-tabs .cnt{font-style:normal;display:inline-flex;align-items:center;justify-content:center;min-width:18px;height:18px;padding:0 5px;margin-left:4px;border-radius:999px;background:#FF2D55;color:#fff;font-size:11px;font-weight:800;vertical-align:1px}
.fr-vis{margin-top:14px}
.fr-vis small{display:block;font-size:12px;color:var(--mute);font-weight:400}
