:root{
  --bg:#0b0f1a; --bg2:#121829; --card:#161d30; --card2:#1c2740;
  --txt:#eef2fb; --muted:#8b97b4; --line:#26304a;
  --blue:#3b82f6; --indigo:#6366f1; --red:#ef4444; --green:#22c55e; --amber:#f59e0b;
  --flame:#ff6b35; --flame2:#ffb020;
  --grad:linear-gradient(135deg,#3b82f6,#6366f1 55%,#ef4444);
  --grad-flame:linear-gradient(135deg,#ff6b35,#ffb020);
  --radius:18px; --shadow:0 12px 32px -12px rgba(0,0,0,.6);
  --font:"Inter",-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,sans-serif;
}
[data-theme="light"]{
  --bg:#f1f4fb; --bg2:#e9eef9; --card:#ffffff; --card2:#f5f8ff;
  --txt:#101626; --muted:#5b6788; --line:#e2e8f5; --shadow:0 12px 30px -16px rgba(20,40,90,.25);
}
*{box-sizing:border-box;margin:0;padding:0}
html,body{height:100%}
body{
  font-family:var(--font); background:
    radial-gradient(1100px 540px at 80% -10%, rgba(99,102,241,.18), transparent 60%),
    radial-gradient(900px 500px at -10% 0%, rgba(59,130,246,.14), transparent 55%),
    var(--bg);
  color:var(--txt); line-height:1.55; -webkit-font-smoothing:antialiased;
  display:flex; flex-direction:column; min-height:100vh; overflow-x:hidden;
}
a{color:inherit}
.container{max-width:620px;margin:0 auto;padding:0 1.1rem;width:100%}

/* header */
header{position:sticky;top:0;z-index:40;background:color-mix(in srgb,var(--bg) 80%,transparent);
  backdrop-filter:blur(14px);border-bottom:1px solid var(--line)}
.bar{height:3px;background:var(--grad)}
.nav{display:flex;align-items:center;justify-content:space-between;padding:.85rem 0}
.brand{display:flex;align-items:center;gap:.55rem;font-weight:800;font-size:1.25rem;letter-spacing:-.02em;text-decoration:none}
.brand .dot{width:30px;height:30px;border-radius:9px;background:var(--grad-flame);display:grid;place-items:center;font-size:1rem;box-shadow:0 6px 16px -6px var(--flame)}
.brand b{background:var(--grad);-webkit-background-clip:text;background-clip:text;color:transparent}
.icon-btn{background:var(--card);border:1px solid var(--line);color:var(--txt);width:40px;height:40px;border-radius:12px;display:grid;place-items:center;cursor:pointer;font-size:1.1rem}
.icon-btn:hover{background:var(--card2)}

main{flex:1;padding:1.1rem 0 6rem}
.tab{display:none;animation:fade .35s ease}
.tab.active{display:block}
@keyframes fade{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}

/* cards */
.card{background:linear-gradient(180deg,var(--card),var(--card2));border:1px solid var(--line);
  border-radius:var(--radius);padding:1.2rem;margin-bottom:1.1rem;box-shadow:var(--shadow)}
.card h2{font-size:1.05rem;font-weight:700;margin-bottom:.9rem;display:flex;align-items:center;justify-content:space-between;gap:.5rem}
.card h3{font-size:.95rem;font-weight:700;margin-bottom:.7rem}
.muted{color:var(--muted)}
.label{font-size:.72rem;font-weight:700;color:var(--muted);text-transform:uppercase;letter-spacing:.06em;margin-bottom:.4rem;display:block}

/* hero streak */
.streak-hero{text-align:center;position:relative;overflow:hidden;
  background:radial-gradient(120% 120% at 50% -20%, rgba(255,107,53,.22), transparent 60%),linear-gradient(180deg,var(--card),var(--card2))}
.flame{font-size:4.6rem;line-height:1;filter:drop-shadow(0 10px 22px rgba(255,107,53,.5));animation:flicker 2.6s ease-in-out infinite}
@keyframes flicker{0%,100%{transform:scale(1) rotate(-1deg)}50%{transform:scale(1.07) rotate(1deg)}}
.streak-num{font-size:3.4rem;font-weight:900;letter-spacing:-.04em;background:var(--grad-flame);-webkit-background-clip:text;background-clip:text;color:transparent}
.streak-sub{font-weight:700;margin-top:-.2rem}
.streak-msg{color:var(--muted);font-size:.92rem;margin-top:.5rem}
.jokers{display:inline-flex;gap:.35rem;align-items:center;margin-top:.8rem;background:var(--card2);border:1px solid var(--line);
  padding:.35rem .7rem;border-radius:99px;font-weight:700;font-size:.85rem}

/* buttons */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:.5rem;width:100%;border:none;cursor:pointer;
  padding:.85rem 1.2rem;border-radius:13px;font-weight:700;font-size:.95rem;font-family:inherit;transition:.15s;text-decoration:none}
.btn:active{transform:scale(.98)}
.btn-primary{background:var(--grad);color:#fff;box-shadow:0 10px 24px -10px var(--indigo)}
.btn-flame{background:var(--grad-flame);color:#3a1a00}
.btn-ghost{background:var(--card2);color:var(--txt);border:1px solid var(--line)}
.btn-green{background:var(--green);color:#04210f}
.btn-sm{width:auto;padding:.55rem .9rem;font-size:.85rem;border-radius:11px}
.row{display:flex;gap:.7rem}.row>*{flex:1}

/* inputs */
input,select,textarea{width:100%;padding:.8rem .9rem;border:1px solid var(--line);border-radius:12px;
  background:var(--bg2);color:var(--txt);font-family:inherit;font-size:.95rem;outline:none;transition:border .15s}
input:focus,select:focus,textarea:focus{border-color:var(--blue)}
textarea{resize:vertical;min-height:96px}
.field{margin-bottom:.9rem}

/* xp + progress */
.xp-top{display:flex;justify-content:space-between;align-items:baseline;margin-bottom:.5rem}
.lvl-badge{display:inline-flex;align-items:center;gap:.4rem;font-weight:800}
.lvl-badge .chip{background:var(--grad);color:#fff;padding:.15rem .55rem;border-radius:8px;font-size:.8rem}
.bar-bg{height:12px;background:var(--bg2);border-radius:99px;overflow:hidden;border:1px solid var(--line)}
.bar-fill{height:100%;background:var(--grad);border-radius:99px;transition:width .6s cubic-bezier(.2,.8,.2,1)}

/* stats grid */
.stats{display:grid;grid-template-columns:repeat(3,1fr);gap:.7rem}
.stat{background:var(--card2);border:1px solid var(--line);border-radius:14px;padding:.85rem .6rem;text-align:center}
.stat .v{font-size:1.4rem;font-weight:900;letter-spacing:-.02em}
.stat .k{font-size:.7rem;color:var(--muted);text-transform:uppercase;letter-spacing:.05em;font-weight:700;margin-top:.15rem}

/* weekly goal ring */
.goal{display:flex;align-items:center;gap:1.1rem}
.ring{--p:0;width:88px;height:88px;border-radius:50%;flex-shrink:0;
  background:conic-gradient(var(--green) calc(var(--p)*1%), var(--bg2) 0);display:grid;place-items:center}
.ring::after{content:"";position:absolute}
.ring .inner{width:68px;height:68px;border-radius:50%;background:var(--card);display:grid;place-items:center;font-weight:900;font-size:1.15rem}

/* badges */
.badges{display:grid;grid-template-columns:repeat(auto-fill,minmax(64px,1fr));gap:.6rem}
.badge{aspect-ratio:1;border-radius:14px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:.15rem;
  background:var(--card2);border:1px solid var(--line);text-align:center;padding:.3rem;cursor:default}
.badge .emo{font-size:1.5rem;filter:grayscale(1);opacity:.35}
.badge.on .emo{filter:none;opacity:1}
.badge.on{border-color:color-mix(in srgb,var(--amber) 50%,var(--line));box-shadow:0 0 0 1px color-mix(in srgb,var(--amber) 30%,transparent)}
.badge .nm{font-size:.58rem;color:var(--muted);font-weight:700;line-height:1.1}

/* chart */
.chart{display:flex;align-items:flex-end;justify-content:space-between;gap:.4rem;height:110px;margin-top:.3rem}
.chart .col{flex:1;display:flex;flex-direction:column;align-items:center;gap:.35rem;height:100%;justify-content:flex-end}
.chart .barv{width:100%;max-width:26px;background:var(--grad);border-radius:7px 7px 3px 3px;min-height:5px;transition:height .5s}
.chart .barv.empty{background:var(--bg2)}
.chart .d{font-size:.68rem;color:var(--muted);font-weight:700}

/* history */
.hist{padding:.85rem;border:1px solid var(--line);border-radius:12px;margin-bottom:.7rem;background:var(--card2)}
.hist .top{display:flex;justify-content:space-between;font-size:.8rem;color:var(--muted);font-weight:700;margin-bottom:.35rem}
.hist p{font-size:.9rem;white-space:pre-wrap}

/* leaderboard */
.lb{display:flex;flex-direction:column;gap:.55rem}
.lb-item{display:flex;align-items:center;gap:.8rem;padding:.7rem .85rem;border:1px solid var(--line);border-radius:13px;background:var(--card2)}
.lb-item.me{border-color:color-mix(in srgb,var(--blue) 55%,var(--line));background:color-mix(in srgb,var(--blue) 10%,var(--card2))}
.lb-rank{width:26px;text-align:center;font-weight:900;color:var(--muted)}
.lb-av{width:40px;height:40px;border-radius:50%;background:var(--grad);display:grid;place-items:center;font-weight:800;color:#fff;flex-shrink:0;background-size:cover}
.lb-info{flex:1;min-width:0}.lb-name{font-weight:700;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.lb-meta{font-size:.78rem;color:var(--muted)}
.lb-streak{display:flex;align-items:center;gap:.25rem;font-weight:800;color:var(--flame)}

/* pomodoro */
.pomo{font-size:3.6rem;font-weight:200;text-align:center;font-variant-numeric:tabular-nums;margin:.3rem 0 .9rem}

/* coach */
.chatbox{height:320px;overflow-y:auto;background:var(--bg2);border:1px solid var(--line);border-radius:13px;padding:.9rem;display:flex;flex-direction:column;gap:.6rem;margin-bottom:.7rem}
.msg{padding:.65rem .85rem;border-radius:13px;max-width:88%;font-size:.92rem}
.msg.u{align-self:flex-end;background:var(--grad);color:#fff;border-bottom-right-radius:4px}
.msg.b{align-self:flex-start;background:var(--card);border:1px solid var(--line);border-bottom-left-radius:4px}
.chat-row{display:flex;gap:.5rem}.chat-row input{flex:1}.chat-row .btn{width:auto;padding:0 1.1rem}
.md ul{margin-left:1.2rem;margin-bottom:.4rem}.md ol{margin-left:1.2rem;margin-bottom:.4rem}
.md p{margin-bottom:.4rem}.md h1,.md h2,.md h3{margin:.5rem 0 .3rem;font-size:1rem}

.ex{display:flex;align-items:center;gap:.6rem;padding:.7rem .8rem;background:var(--card2);border:1px solid var(--line);border-radius:11px;margin-bottom:.5rem}
.ex input[type=checkbox]{width:20px;height:20px;flex:none}
.ex label{flex:1}.ex input:checked + label{text-decoration:line-through;color:var(--muted)}
.ex .del{background:none;border:none;color:var(--muted);cursor:pointer;font-size:1.1rem;width:auto;flex:none}

/* hero (logged-out) */
.landing{text-align:center;padding:2.5rem 0 1rem}
.landing h1{font-size:2.5rem;font-weight:900;letter-spacing:-.03em;line-height:1.08}
.landing h1 b{background:var(--grad-flame);-webkit-background-clip:text;background-clip:text;color:transparent}
.landing p{color:var(--muted);font-size:1.08rem;max-width:440px;margin:.9rem auto 1.6rem}
.feat{display:grid;grid-template-columns:1fr 1fr;gap:.8rem;margin-top:1.6rem;text-align:left}
.feat .f{background:var(--card);border:1px solid var(--line);border-radius:15px;padding:1rem}
.feat .f .e{font-size:1.5rem}.feat .f h4{font-size:.95rem;margin:.35rem 0 .2rem}
.feat .f p{font-size:.82rem;color:var(--muted);margin:0;max-width:none}

/* bottom nav */
.bottom{position:fixed;left:0;right:0;bottom:0;z-index:50;background:color-mix(in srgb,var(--bg) 88%,transparent);
  backdrop-filter:blur(16px);border-top:1px solid var(--line);display:flex;padding:.45rem .3rem env(safe-area-inset-bottom)}
.nav-i{flex:1;background:none;border:none;color:var(--muted);display:flex;flex-direction:column;align-items:center;gap:3px;
  font-size:.66rem;font-weight:700;cursor:pointer;padding:.4rem 0;border-radius:12px}
.nav-i svg{width:23px;height:23px;stroke:currentColor;fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
.nav-i.active{color:var(--txt)}
.nav-i.active svg{stroke:url(#ng)}

/* fab */
.fab{position:fixed;right:1.1rem;bottom:5.2rem;z-index:55;width:58px;height:58px;border-radius:18px;border:none;cursor:pointer;
  background:var(--grad-flame);color:#3a1a00;font-size:1.7rem;box-shadow:0 14px 30px -10px var(--flame);display:grid;place-items:center}

/* modal / sheet */
.sheet-bg{position:fixed;inset:0;z-index:80;background:rgba(0,0,0,.55);backdrop-filter:blur(3px);display:none}
.sheet-bg.show{display:block}
.sheet{position:fixed;left:0;right:0;bottom:0;z-index:81;background:var(--card);border-top:1px solid var(--line);
  border-radius:22px 22px 0 0;padding:1.2rem;max-height:88vh;overflow-y:auto;transform:translateY(100%);transition:transform .3s cubic-bezier(.2,.8,.2,1);max-width:620px;margin:0 auto}
.sheet.show{transform:none}
.sheet .grab{width:42px;height:5px;border-radius:99px;background:var(--line);margin:0 auto 1rem}
.toggle{display:flex;align-items:center;justify-content:space-between;gap:1rem;padding:.7rem 0;border-bottom:1px solid var(--line)}
.sw{position:relative;width:48px;height:28px;flex:none}
.sw input{opacity:0;width:0;height:0;position:absolute}
.sw span{position:absolute;inset:0;background:var(--bg2);border:1px solid var(--line);border-radius:99px;transition:.2s;cursor:pointer}
.sw span::before{content:"";position:absolute;width:20px;height:20px;left:3px;top:3px;background:#fff;border-radius:50%;transition:.2s}
.sw input:checked + span{background:var(--green)}
.sw input:checked + span::before{transform:translateX(20px)}

/* banner */
.banner{display:flex;align-items:center;gap:.7rem;background:linear-gradient(135deg,rgba(59,130,246,.16),rgba(99,102,241,.12));
  border:1px solid color-mix(in srgb,var(--blue) 35%,var(--line));border-radius:14px;padding:.85rem 1rem;margin-bottom:1.1rem}
.banner .e{font-size:1.4rem}.banner .t{flex:1;font-size:.86rem}
.banner .t b{display:block}.banner button{width:auto}

/* celebration */
.cele-bg{position:fixed;inset:0;z-index:90;background:rgba(5,8,16,.78);backdrop-filter:blur(5px);display:none;place-items:center;padding:1.5rem}
.cele-bg.show{display:grid}
.cele{background:linear-gradient(180deg,var(--card),var(--card2));border:1px solid var(--line);border-radius:24px;padding:2rem 1.5rem;text-align:center;max-width:360px;width:100%;animation:pop .4s cubic-bezier(.2,1.2,.4,1)}
@keyframes pop{from{transform:scale(.8);opacity:0}to{transform:none;opacity:1}}
.cele .big{font-size:4rem;line-height:1}
.cele h2{font-size:1.5rem;margin:.6rem 0 .3rem}
.cele .badge-pop{display:inline-flex;gap:.4rem;flex-wrap:wrap;justify-content:center;margin:.6rem 0}
.cele .bp{background:var(--card2);border:1px solid var(--amber);border-radius:11px;padding:.4rem .6rem;font-size:.85rem;font-weight:700}
.confetti{position:fixed;top:-12px;width:10px;height:14px;z-index:95;pointer-events:none;border-radius:2px}

.toast{position:fixed;left:50%;bottom:6rem;transform:translateX(-50%) translateY(20px);z-index:99;background:var(--card);
  border:1px solid var(--line);color:var(--txt);padding:.7rem 1.1rem;border-radius:12px;font-weight:600;font-size:.9rem;
  box-shadow:var(--shadow);opacity:0;transition:.3s;max-width:90vw;text-align:center}
.toast.show{opacity:1;transform:translateX(-50%) translateY(0)}

@media(max-width:430px){.feat{grid-template-columns:1fr}.landing h1{font-size:2.1rem}}

/* ---- v2: photos, défis, programmes ---- */
.photos{display:grid;grid-template-columns:repeat(3,1fr);gap:.5rem;margin-top:.3rem}
.photo{position:relative;aspect-ratio:3/4;border-radius:12px;overflow:hidden;border:1px solid var(--line);background:var(--bg2)}
.photo img{width:100%;height:100%;object-fit:cover;display:block}
.photo-del{position:absolute;top:4px;right:4px;background:rgba(0,0,0,.55);border:none;color:#fff;border-radius:8px;width:28px;height:28px;cursor:pointer;font-size:.85rem;padding:0}
.photo-meta{position:absolute;left:0;right:0;bottom:0;background:linear-gradient(transparent,rgba(0,0,0,.75));color:#fff;font-size:.68rem;font-weight:700;padding:.5rem .4rem .35rem;text-align:center}

.friend-pick{display:flex;flex-direction:column;gap:.35rem;max-height:180px;overflow-y:auto}
.pick{display:flex;align-items:center;gap:.6rem;padding:.6rem .7rem;background:var(--bg2);border:1px solid var(--line);border-radius:10px;cursor:pointer;font-weight:600;font-size:.92rem;margin:0}
.pick input{width:18px;height:18px;flex:none}

.tpl{display:flex;align-items:center;justify-content:space-between;gap:.7rem;padding:.85rem;border:1px solid var(--line);border-radius:13px;background:var(--card2);margin-bottom:.6rem}

input[type=range]{-webkit-appearance:none;appearance:none;height:8px;padding:0;border:none;background:var(--bg2);border-radius:99px;outline:none}
input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;width:24px;height:24px;border-radius:50%;background:var(--grad);cursor:pointer;border:3px solid var(--card);box-shadow:0 2px 6px rgba(0,0,0,.3)}
input[type=range]::-moz-range-thumb{width:22px;height:22px;border-radius:50%;background:#6366f1;cursor:pointer;border:3px solid var(--card)}

/* ---- séances planifiées ---- */
.plan{border:1px solid var(--line);border-radius:14px;padding:.9rem;background:var(--card2);margin-bottom:.7rem}
.plan.today{border-color:color-mix(in srgb,var(--flame) 45%,var(--line));box-shadow:0 0 0 1px color-mix(in srgb,var(--flame) 22%,transparent)}
.plan-top{display:flex;align-items:center;justify-content:space-between;margin-bottom:.35rem}
.plan-when{display:flex;align-items:center;gap:.5rem}
.plan-day{font-weight:800;font-size:.9rem}
.plan-time{background:var(--bg2);border:1px solid var(--line);border-radius:8px;padding:.1rem .45rem;font-size:.78rem;font-weight:700;color:var(--muted)}
.plan-badge{background:linear-gradient(135deg,rgba(59,130,246,.2),rgba(99,102,241,.18));border:1px solid color-mix(in srgb,var(--blue) 40%,var(--line));color:var(--blue);font-size:.68rem;font-weight:800;padding:.18rem .5rem;border-radius:99px;text-transform:uppercase;letter-spacing:.04em}
.plan-title{font-weight:700;font-size:1.02rem}
.plan-content{font-size:.85rem;color:var(--muted);white-space:pre-wrap;margin-top:.25rem}
.plan-people{display:flex;gap:-6px;margin:.6rem 0 .2rem;padding-left:6px}
.plan-av{width:30px;height:30px;border-radius:50%;background:var(--grad);background-size:cover;display:grid;place-items:center;font-weight:800;font-size:.78rem;color:#fff;border:2px solid var(--card2);margin-left:-6px}
.plan-av.pending{opacity:.45;filter:grayscale(.4)}
.plan-actions{display:flex;flex-wrap:wrap;gap:.4rem;margin-top:.6rem}
.plan-actions .btn{flex:0 0 auto}
