/* ── Global : bloquer zoom double-tap & pinch sur mobile ── */
*,*::before,*::after{touch-action:manipulation;}
html{-ms-touch-action:manipulation;touch-action:manipulation;-webkit-text-size-adjust:100%;}

/* ── Splash Screen ── */
.splashScreen{position:fixed;inset:0;z-index:9999999;background:#08080c;display:flex;flex-direction:column;align-items:center;justify-content:center;transition:opacity .5s ease;}
.splashScreen.fadeOut{opacity:0;pointer-events:none;}
.splashLogo{width:88px;height:88px;border-radius:24px;border:1px solid rgba(255,255,255,.14);background:rgba(255,255,255,.04);position:relative;animation:splashBox .7s cubic-bezier(.16,1,.3,1) both;overflow:hidden;}
/* Glow halo behind logo */
.splashLogo::before{content:'';position:absolute;inset:-30px;border-radius:50%;background:radial-gradient(circle,rgba(255,255,255,.08),transparent 70%);animation:splashHalo 1.8s ease-in-out .5s infinite alternate;pointer-events:none;}
@keyframes splashHalo{0%{transform:scale(.8);opacity:.3}100%{transform:scale(1.2);opacity:.8}}
/* Γ shape — two rounded gradient bars matching landing logo */
.splashBar{position:absolute;border-radius:6px;opacity:0;}
/* Horizontal bar (top of Γ) — scaled from landing: 64→88 = ×1.375 */
.splashBarH{top:22px;left:19px;width:0;height:12px;
  background:linear-gradient(90deg,rgba(255,255,255,.9),rgba(255,255,255,.45));
  animation:splashBarHIn .35s cubic-bezier(.22,1,.36,1) .65s forwards;}
/* Vertical bar (left of Γ) — draws first */
.splashBarV{top:34px;left:19px;width:12px;height:0;
  background:linear-gradient(180deg,rgba(255,255,255,.9),rgba(255,255,255,.45));
  animation:splashBarVIn .3s cubic-bezier(.22,1,.36,1) .35s forwards;}
@keyframes splashBarVIn{
  0%{height:0;opacity:0}
  100%{height:33px;opacity:1}
}
@keyframes splashBarHIn{
  0%{width:0;opacity:0}
  100%{width:50px;opacity:1}
}
@keyframes splashBox{from{transform:scale(.5) rotate(-8deg);opacity:0}60%{transform:scale(1.05) rotate(1deg);opacity:1}to{transform:scale(1) rotate(0);opacity:1}}
/* App name under logo */
.splashName{font-family:'Syne',sans-serif;font-size:14px;font-weight:800;letter-spacing:4px;text-transform:uppercase;color:rgba(255,255,255,.5);margin-top:18px;opacity:0;animation:splashNameIn .5s ease .7s forwards;}
@keyframes splashNameIn{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}

/* ── Streak Banner ── */
.streakBanner{position:fixed;top:-80px;left:50%;transform:translateX(-50%);z-index:99998;padding:10px 22px;border-radius:14px;background:rgba(15,15,20,.92);border:1px solid rgba(250,204,21,.35);backdrop-filter:blur(12px);font-family:'Space Grotesk',sans-serif;font-size:13px;font-weight:600;color:rgba(250,204,21,.92);white-space:nowrap;max-width:calc(100vw - 16px);overflow:hidden;text-overflow:ellipsis;transition:top .4s cubic-bezier(.34,1.56,.64,1);}
.streakBanner.show{top:calc(env(safe-area-inset-top,0px) + 6px);} /* jamais sous l'encoche iPhone */

*{margin:0;padding:0;box-sizing:border-box;}
html,body{overflow-x:hidden;max-width:100vw;}

:root{
  /* ── Core palette ── */
  --bg:#080808;--bg-deep:#050505;
  --text:rgba(255,255,255,0.92);--muted:rgba(255,255,255,0.55);
  --muted2:rgba(255,255,255,0.38);
  --green:rgba(34,197,94,0.95);--red:rgba(239,68,68,0.95);
  --gold:rgba(255,200,50,0.95);--blue:rgba(96,165,250,0.95);
  /* ── Shadows ── */
  --shadow:0 22px 80px rgba(0,0,0,0.72);
  --shadow-card:0 12px 40px rgba(0,0,0,.42);
  --shadow-elevated:0 24px 72px rgba(0,0,0,0.46);
  /* ── Glass / overlays ── */
  --glass-bg:rgba(255,255,255,0.04);--glass-bg-hover:rgba(255,255,255,0.07);
  --glass-border:rgba(255,255,255,0.10);--glass-border-hover:rgba(255,255,255,0.16);
  --glass-blur:blur(20px);
  --overlay-soft:rgba(5,8,15,0.48);--overlay-strong:rgba(5,8,15,0.58);
  --overlay-heavy:rgba(5,8,15,0.66);
  --overlay-card-bg:rgba(18,22,30,0.94);--overlay-card-bg-soft:rgba(22,26,36,0.92);
  --overlay-card-border:rgba(255,255,255,0.14);
  --overlay-card-shadow:0 24px 72px rgba(0,0,0,0.46);
  /* ── Radius ── */
  --radius-sm:11px;--radius-md:14px;--radius-lg:18px;--radius-xl:24px;
  /* ── Gaming easings ── */
  --spring:cubic-bezier(.175,.885,.32,1.275);
  --snap:cubic-bezier(.19,1,.22,1);
  --bounce:cubic-bezier(.68,-.55,.265,1.55);
}
body{font-family:'Space Grotesk',sans-serif;background:var(--bg);color:var(--text);min-height:100vh;overflow:hidden;}
body::before{content:'';position:fixed;inset:0;z-index:0;pointer-events:none;background:radial-gradient(ellipse 80% 60% at 50% 0%,rgba(255,255,255,.015),transparent 65%);}
.hidden{display:none !important;}

/* BG — Prairie */
.bgFx{position:fixed;inset:-20px;z-index:0;pointer-events:none;
  background:url('https://images.unsplash.com/photo-1500382017468-9049fed747ef?w=1920&q=80&auto=format&fit=crop') center/cover no-repeat;
  filter:blur(1px) brightness(.48) saturate(1.2);
  /* PERF : fond STATIQUE. L'ancienne animation bgDrift infinie forçait les
     47 backdrop-filter (shell, cards, nav) à re-flouter tout l'écran à
     chaque frame, en permanence. Un fond figé = verre rasterisé une fois. */
  transform:scale(1.06);
  contain:layout style;
}
.bgFx::after{content:'';position:absolute;inset:0;
  background:
    radial-gradient(ellipse 70% 50% at 50% 30%,rgba(0,0,0,.05),rgba(0,0,0,.35) 80%),
    linear-gradient(180deg,rgba(0,0,0,.15) 0%,rgba(0,0,0,.05) 40%,rgba(0,0,0,.25) 100%);
}
@keyframes bgDrift{0%{transform:scale(1.05) translate(0,0);}50%{transform:scale(1.08) translate(-8px,-4px);}100%{transform:scale(1.05) translate(4px,2px);}}
.wrap{position:relative;z-index:1;min-height:100vh;}

/* ── TRANSITION ── */
.tOverlay{position:fixed;inset:0;z-index:999999;display:flex;align-items:center;justify-content:center;background:rgba(8,8,12,.96);backdrop-filter:blur(32px);-webkit-backdrop-filter:blur(32px);opacity:0;pointer-events:none;transition:opacity .35s ease;}
.tOverlay.show{opacity:1;pointer-events:auto;}
.tCard{width:min(520px,calc(100vw - 24px));border-radius:22px;border:1px solid rgba(255,255,255,.12);background:rgba(255,255,255,.06);box-shadow:var(--shadow);padding:18px;overflow:hidden;position:relative;transform:translateY(8px) scale(.98);transition:transform .25s ease;}
.tOverlay.show .tCard{transform:translateY(0) scale(1);}
.tCard::before{content:'';position:absolute;inset:-120px;background:radial-gradient(circle at 20% 20%,rgba(255,255,255,.08) 0%,transparent 55%),radial-gradient(circle at 80% 75%,rgba(255,255,255,.05) 0%,transparent 50%);}
.tInner{position:relative;z-index:1;display:flex;gap:14px;align-items:center;}
.loaderRing{width:54px;height:54px;border-radius:999px;border:1px solid rgba(255,255,255,.16);background:rgba(0,0,0,.25);display:flex;align-items:center;justify-content:center;}
.spinner{width:22px;height:22px;border-radius:999px;border:2px solid rgba(255,255,255,.25);border-top-color:rgba(255,255,255,.85);animation:spin .8s linear infinite;}
@keyframes spin{to{transform:rotate(360deg);}}
.tText{display:flex;flex-direction:column;gap:6px;}
.tTitle{font-size:13px;font-weight:700;letter-spacing:.8px;text-transform:uppercase;color:rgba(255,255,255,.95);}
.tSub{font-size:13px;color:rgba(255,255,255,.72);line-height:1.35;}
.tBar{margin-top:14px;height:10px;border-radius:999px;border:1px solid rgba(255,255,255,.12);background:rgba(255,255,255,.08);overflow:hidden;position:relative;z-index:1;}
.tFill{height:100%;width:0%;background:linear-gradient(90deg,rgba(255,255,255,.9),rgba(255,255,255,.35));transition:width .35s ease;}

/* ── TUTORIEL ── */
/* Dim — assombrit tout sauf le spotlight */
.tutDim{position:fixed;inset:0;z-index:99998;background:rgba(5,8,15,.66);backdrop-filter:none;pointer-events:none;opacity:0;transition:opacity .5s ease;}
.tutDim.show{opacity:1;pointer-events:auto;}
.tutDim.pass{pointer-events:none;}
.tutDim.action{background:rgba(5,8,15,.42);backdrop-filter:none;}
/* Spotlight sur l'élément ciblé */
.tutSpot{position:relative !important;z-index:99999 !important;box-shadow:0 0 0 3px rgba(96,165,250,.5),0 0 20px rgba(96,165,250,.2) !important;border-radius:14px !important;animation:tutPulse 2.5s ease-in-out infinite;}
/* Le halo se tait pendant qu'on écrit dans le dock : deux calques qui se
   disputent l'écran, c'est un écran illisible. Rien ne bouge de place. */
.tutSpot.tutHushed{box-shadow:none!important;outline:none!important;animation:none!important;z-index:auto!important;}
@keyframes tutPulse{0%,100%{box-shadow:0 0 0 3px rgba(96,165,250,.4)}50%{box-shadow:0 0 0 6px rgba(96,165,250,.6)}}
/* Tooltip ancré */
.tutTip{position:fixed;z-index:100000;max-width:380px;padding:18px 22px;border-radius:18px;border:1px solid var(--overlay-card-border);background:var(--overlay-card-bg-soft);box-shadow:var(--overlay-card-shadow);color:rgba(255,255,255,.88);font-size:14px;line-height:1.65;opacity:0;transform:translateY(12px);transition:opacity .45s cubic-bezier(.16,1,.3,1),transform .45s cubic-bezier(.16,1,.3,1);pointer-events:none;}
.tutTip.show{opacity:1;transform:translateY(0);pointer-events:auto;}
.tutTip.above{transform:translateY(-12px);}.tutTip.above.show{transform:translateY(0);}
.tutTip strong{color:#fff;}.tutTip em{color:rgba(255,210,80,.95);font-style:normal;font-weight:700;}
.tutTip.actionStep{max-width:420px;padding:14px 16px 12px;border-radius:16px;background:rgba(18,22,30,.9);}
.tutMsgBody{display:grid;gap:8px;}
.tutTip .tutToneGreen{color:rgba(134,239,172,.98);font-weight:700;}
.tutTip .tutToneYellow{color:rgba(253,224,71,.98);font-weight:700;}
.tutTip .tutToneRed{color:rgba(252,165,165,.98);font-weight:700;}
.tutTip .tutToneBlue{color:rgba(147,197,253,.98);font-weight:700;}
.tutTip .tutTonePink{color:rgba(244,114,182,.98);font-weight:700;}
.tutActionHint{margin-top:10px;padding:8px 10px;border-radius:10px;border:1px solid rgba(96,165,250,.18);background:rgba(96,165,250,.08);color:rgba(191,219,254,.88);font-size:11px;line-height:1.45;}
.tutTipBtn{margin-top:14px;padding:10px 20px;border-radius:10px;border:none;background:rgba(255,255,255,.9);color:#080808;cursor:pointer;font-weight:700;font-size:12px;text-transform:uppercase;letter-spacing:.6px;font-family:'Space Grotesk',sans-serif;transition:all .15s ease;}
.tutTipBtn:hover{background:#fff;transform:translateY(-1px);}
.tutTipBtn:disabled{opacity:.72;cursor:wait;transform:none;}
.tutProg{height:3px;border-radius:2px;background:rgba(255,255,255,.1);margin-top:12px;overflow:hidden;}
.tutProgFill{height:100%;background:rgba(96,165,250,.8);transition:width .3s ease;}
.tutSkipLnk{margin-top:8px;font-size:11px;color:rgba(255,255,255,.3);cursor:pointer;text-align:right;}
.tutSkipLnk:hover{color:rgba(255,255,255,.5);}
/* Onglets verrouillés pendant le tuto. Les deux engrenages ne sont ni `.tab`
   ni `.mnBtn` : sans leurs classes, ils paraissaient disponibles et gardaient
   une surface tactile même si goView refusait finalement la navigation. */
.mnBtn.tutLocked,.tab.tutLocked,.dvSegBtn.tutLocked,.gearBtn.tutLocked,.mhGearBtn.tutLocked{opacity:0.25 !important;pointer-events:none !important;filter:grayscale(1);transition:opacity .3s ease;}
/* Un panneau interactif du tutoriel (Voix ou dock de saisie) remplace ses
   calques, il ne se superpose jamais à eux — y compris durant les 450 ms de
   transition normales du tooltip. */
.tutTip.tutLayerHushed,.tutDim.tutLayerHushed{opacity:0 !important;pointer-events:none !important;visibility:hidden !important;transition:none !important;}
/* Label de phase dans la card */
.tutPhaseLabel{font-size:9px;font-weight:700;letter-spacing:3px;text-transform:uppercase;color:rgba(96,165,250,.7);margin-bottom:6px;}
.tutCommitSeal{width:68px;height:68px;margin:3px auto 16px;border-radius:22px;display:flex;align-items:center;justify-content:center;
  border:1px solid rgba(251,191,36,.28);background:radial-gradient(circle at 50% 35%,rgba(251,191,36,.16),rgba(99,102,241,.08) 62%,rgba(255,255,255,.025));
  box-shadow:0 18px 48px rgba(0,0,0,.36),0 0 42px rgba(251,191,36,.07);}
.tutCommitSeal .gi{width:34px;height:34px;fill:#fde68a;filter:drop-shadow(0 0 10px rgba(251,191,36,.28));}
.tutTip.tutCommitStep{width:min(430px,calc(100vw - 28px));padding:24px 24px 20px;text-align:center;
  border-color:rgba(251,191,36,.32);background:linear-gradient(168deg,rgba(27,23,14,.97),rgba(12,13,22,.97) 72%);
  box-shadow:0 26px 76px rgba(0,0,0,.58),0 0 50px rgba(251,191,36,.08);}
.tutCommitStep .tutTitle{font-size:25px;line-height:1.12;letter-spacing:-.35px;}
.tutCommitStep .tutMsgBody{font-size:13.5px;line-height:1.58;color:rgba(255,255,255,.72);}
.tutCommitVerdict{margin:16px 0 13px;padding:12px 14px;border-left:2px solid #fbbf24;border-radius:0 11px 11px 0;
  background:rgba(251,191,36,.07);color:#fde68a;font-size:13px;line-height:1.52;text-align:left;}
.tutCommitStep .tutRows{margin-top:9px;}
.tutCommitStep .tutTipBtn{width:100%;margin-top:16px;padding:13px 18px;background:linear-gradient(90deg,#fbbf24,#f59e0b);color:#1b1305;}

/* Les six Lois de l'initiation : format bref, interne au tutoriel. Une carte
   remplace l'autre sur acceptation ; aucune animation ne tourne en attente. */
.tutTip.tutLawTip{width:min(430px,calc(100vw - 28px));max-width:430px;padding:20px 21px 15px;overflow:hidden;
  border-color:rgba(251,191,36,.27);background:linear-gradient(165deg,rgba(24,21,14,.98),rgba(11,13,23,.98) 72%);
  box-shadow:0 28px 80px rgba(0,0,0,.62),0 0 48px rgba(251,191,36,.07);}
.tutLawCard{display:flex;flex-direction:column;align-items:center;text-align:center;animation:tutLawIn .34s cubic-bezier(.16,1,.3,1) both;}
.tutLawCard.leaving{animation:tutLawOut .22s ease both;pointer-events:none;}
@keyframes tutLawIn{from{opacity:0;transform:translateX(28px)}to{opacity:1;transform:translateX(0)}}
@keyframes tutLawOut{from{opacity:1;transform:translateX(0)}to{opacity:0;transform:translateX(-26px)}}
.tutLawTop{width:100%;display:flex;align-items:center;justify-content:space-between;margin-bottom:10px;}
.tutLawRoman{font-family:'Syne',sans-serif;font-size:13px;font-weight:800;letter-spacing:2.5px;color:#fde68a;}
.tutLawCount{font-family:'IBM Plex Mono',ui-monospace,Menlo,monospace;font-size:10px;font-weight:700;letter-spacing:1px;color:rgba(255,255,255,.4);}
.tutLawIcon{width:54px;height:54px;border-radius:18px;display:flex;align-items:center;justify-content:center;margin:1px auto 12px;
  border:1px solid rgba(251,191,36,.25);background:radial-gradient(circle at 45% 35%,rgba(251,191,36,.16),rgba(99,102,241,.07) 68%);}
.tutLawIcon .gi{width:27px;height:27px;fill:#fde68a;filter:drop-shadow(0 0 8px rgba(251,191,36,.2));}
.tutLawTitle{font-family:'Syne',sans-serif;font-size:20px;font-weight:800;line-height:1.18;color:#fff;letter-spacing:-.2px;}
.tutLawBody{margin-top:8px;font-size:12.5px;line-height:1.52;color:rgba(255,255,255,.68);max-width:350px;}
.tutLawCommit{width:100%;box-sizing:border-box;margin-top:13px;padding:9px 11px;border-radius:11px;text-align:left;
  border:1px solid rgba(167,139,250,.2);background:rgba(99,102,241,.08);color:rgba(221,214,254,.9);font-size:11.5px;line-height:1.42;}
.tutLawAsk{margin-top:13px;font-family:'Syne',sans-serif;font-weight:800;font-size:14px;color:#fde68a;}
.tutLawAccept{width:100%;margin-top:9px;padding:12px 16px;border:0;border-radius:12px;cursor:pointer;
  background:linear-gradient(90deg,#fbbf24,#f59e0b);color:#1b1305;font-family:'Space Grotesk',sans-serif;font-size:12px;font-weight:800;text-transform:uppercase;letter-spacing:.65px;}
.tutLawAccept:active{transform:scale(.985);}
.tutLawProgress{display:flex;align-items:center;justify-content:center;gap:6px;margin-top:13px;}
.tutLawDot{width:19px;height:3px;border-radius:3px;background:rgba(255,255,255,.12);transition:background .18s,width .18s;}
.tutLawDot.current{width:27px;background:rgba(253,230,138,.72);}
.tutLawDot.accepted{background:rgba(134,239,172,.72);}
.tutGenderRow{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;margin-top:18px;}
.tutGenderBtn{min-height:148px;padding:16px 14px;border-radius:18px;border:1px solid rgba(255,255,255,.14);background:rgba(255,255,255,.05);cursor:pointer;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;color:#fff;text-align:center;font-family:'Space Grotesk',sans-serif;transition:transform .16s ease,border-color .16s ease,box-shadow .16s ease,background .16s ease;}
.tutGenderBtn:hover{transform:translateY(-2px);}
.tutGenderBtnMale{border-color:rgba(96,165,250,.28);background:linear-gradient(180deg,rgba(96,165,250,.18),rgba(96,165,250,.08));box-shadow:0 14px 36px rgba(96,165,250,.12);}
.tutGenderBtnFemale{border-color:rgba(244,114,182,.3);background:linear-gradient(180deg,rgba(244,114,182,.18),rgba(244,114,182,.08));box-shadow:0 14px 36px rgba(244,114,182,.12);}
.tutGenderIcon{font-size:34px;line-height:1;}
.tutGenderLabel{font-size:12px;font-weight:800;letter-spacing:.9px;text-transform:uppercase;}
.tutGenderHint{font-size:11px;line-height:1.45;color:rgba(255,255,255,.62);}
/* Pulse sur l'onglet suivant quand on change de phase */
@keyframes tutTabUnlock{0%{transform:scale(1);}50%{transform:scale(1.1);box-shadow:0 0 16px rgba(96,165,250,.4);}100%{transform:scale(1);}}
.tutUnlocking{animation:tutTabUnlock .6s ease;}
/* ── Bulle BD du Sommet (PNJ RPG style) ── */
.tutBubble{position:fixed;z-index:100001;top:16px;right:16px;left:auto;max-width:380px;max-height:calc(100vh - 32px);overflow-y:auto;display:flex;align-items:flex-start;gap:14px;padding:20px 22px;border-radius:20px;border:1px solid rgba(96,165,250,.22);background:rgba(12,15,22,.94);backdrop-filter:blur(20px);box-shadow:0 24px 72px rgba(0,0,0,.46),0 0 40px rgba(96,165,250,.08);color:rgba(255,255,255,.9);font-size:14px;line-height:1.65;opacity:0;transform:translateX(40px);transition:opacity .45s cubic-bezier(.16,1,.3,1),transform .45s cubic-bezier(.16,1,.3,1);pointer-events:none;}
.tutBubble.show{opacity:1;transform:translateX(0);pointer-events:auto;}
.tutBubbleAvatar{flex-shrink:0;width:48px;height:48px;border-radius:50%;background:linear-gradient(135deg,rgba(96,165,250,.2),rgba(96,165,250,.08));border:1px solid rgba(96,165,250,.3);display:flex;align-items:center;justify-content:center;font-size:26px;line-height:1;box-shadow:0 0 20px rgba(96,165,250,.12);}
.tutBubbleBody{flex:1;min-width:0;}
.tutBubbleKicker{font-size:9px;font-weight:700;letter-spacing:3px;text-transform:uppercase;color:rgba(96,165,250,.7);margin-bottom:6px;}
.tutBubbleText{display:grid;gap:8px;}
.tutBubbleText strong{color:#fff;}
.tutBubbleText em{color:rgba(255,210,80,.95);font-style:normal;font-weight:700;}
.tutBubbleText .tutToneGreen{color:rgba(134,239,172,.98);font-weight:700;}
.tutBubbleText .tutToneYellow{color:rgba(253,224,71,.98);font-weight:700;}
.tutBubbleText .tutToneRed{color:rgba(252,165,165,.98);font-weight:700;}
.tutBubbleText .tutToneBlue{color:rgba(147,197,253,.98);font-weight:700;}
.tutBubbleBtn{margin-top:14px;padding:10px 20px;border-radius:10px;border:none;background:rgba(255,255,255,.9);color:#080808;cursor:pointer;font-weight:700;font-size:12px;text-transform:uppercase;letter-spacing:.6px;font-family:'Space Grotesk',sans-serif;transition:all .15s ease;}
.tutBubbleBtn:hover{background:#fff;transform:translateY(-1px);}
.tutBubbleProg{height:3px;border-radius:2px;background:rgba(255,255,255,.1);margin-top:12px;overflow:hidden;}
.tutBubbleProgFill{height:100%;background:rgba(96,165,250,.8);transition:width .3s ease;}
.tutBubbleSkip{margin-top:8px;font-size:11px;color:rgba(255,255,255,.3);cursor:pointer;text-align:right;}
.tutBubbleSkip:hover{color:rgba(255,255,255,.5);}
@keyframes tutBubbleSlideIn{0%{opacity:0;transform:translateX(60px);}100%{opacity:1;transform:translateX(0);}}
.tutBubble.show{animation:tutBubbleSlideIn .5s cubic-bezier(.16,1,.3,1) both;}

/* ── UNLOCK MILESTONE ── */
.unlockOv{position:fixed;inset:0;z-index:9999;display:flex;align-items:center;justify-content:center;background:var(--overlay-strong);backdrop-filter:blur(16px);opacity:0;pointer-events:none;transition:opacity .25s ease;}
.unlockOv.show{opacity:1;pointer-events:auto;}
.unlockCard{width:min(560px,calc(100vw - 28px));border-radius:28px;border:1px solid var(--unlock-border,rgba(255,255,255,.18));background:linear-gradient(180deg,rgba(18,22,30,.97),rgba(12,15,22,.94));box-shadow:0 0 70px var(--unlock-glow,rgba(255,255,255,.08)),0 24px 72px rgba(0,0,0,.42);padding:40px 36px;overflow:hidden;position:relative;transform:translateY(18px) scale(.94);transition:transform .35s cubic-bezier(.22,1,.36,1);}
.unlockOv.show .unlockCard{transform:translateY(0) scale(1);}
.unlockInner{position:relative;z-index:2;display:flex;flex-direction:column;align-items:center;gap:12px;text-align:center;}
.unlockTag{font-size:10px;font-weight:800;letter-spacing:4px;text-transform:uppercase;color:var(--unlock-color,rgba(255,255,255,.5));border:1px solid var(--unlock-border,rgba(255,255,255,.15));padding:5px 14px;border-radius:999px;animation:unlockFadeUp .4s ease both;}
.unlockEmoji{font-size:72px;line-height:1;margin:6px 0;animation:unlockBounce .5s cubic-bezier(.22,1.6,.4,1) .08s both;}
@keyframes unlockBounce{0%{transform:scale(.2) rotate(-12deg)}70%{transform:scale(1.18) rotate(4deg)}100%{transform:scale(1) rotate(0)}}
.unlockName{font-family:'Syne',sans-serif;font-size:36px;font-weight:800;letter-spacing:-1px;color:#fff;animation:unlockFadeUp .45s ease .15s both;}
.unlockDesc{font-size:14px;color:rgba(255,255,255,.62);line-height:1.6;max-width:420px;animation:unlockFadeUp .45s ease .25s both;}
.unlockWhere{font-size:12px;font-weight:700;letter-spacing:.5px;color:var(--unlock-color,rgba(255,255,255,.5));padding:8px 18px;border-radius:10px;border:1px solid var(--unlock-border,rgba(255,255,255,.1));background:rgba(255,255,255,.04);margin-top:4px;animation:unlockFadeUp .45s ease .35s both;}
.unlockHint{font-size:11px;color:rgba(255,255,255,.25);margin-top:8px;animation:unlockFadeUp .45s ease .45s both;}
.unlockGlow{position:absolute;inset:0;z-index:1;background:radial-gradient(ellipse 70% 60% at 50% 0%,var(--unlock-glow,rgba(255,255,255,.06)) 0%,transparent 70%);pointer-events:none;}
@keyframes unlockFadeUp{0%{opacity:0;transform:translateY(14px)}100%{opacity:1;transform:translateY(0)}}

/* ── LEVEL UP ── */
.lvlUpOv{position:fixed;inset:0;z-index:9998;display:flex;align-items:center;justify-content:center;background:var(--overlay-soft);backdrop-filter:blur(14px);opacity:0;pointer-events:none;transition:opacity .2s ease;}
.lvlUpOv.show{opacity:1;pointer-events:auto;}
.lvlUpCard{width:min(680px,calc(100vw - 24px));border-radius:24px;border:1px solid rgba(255,255,255,.14);background:linear-gradient(180deg,rgba(23,25,33,.96),rgba(15,17,24,.94));box-shadow:0 18px 56px rgba(0,0,0,.42);padding:30px;overflow:hidden;position:relative;transform:translateY(12px) scale(.97);transition:transform .22s ease;}
.lvlUpOv.show .lvlUpCard{transform:translateY(0) scale(1);}
.lvlUpCard::before{content:'';position:absolute;inset:-160px;background:radial-gradient(circle at 20% 20%,rgba(255,255,255,.09) 0%,transparent 52%),radial-gradient(circle at 80% 75%,rgba(255,255,255,.05) 0%,transparent 55%);}
.lvlUpInner{position:relative;z-index:1;display:flex;flex-direction:column;gap:10px;text-align:center;align-items:center;}
.lvlUpLabel{font-size:11px;font-weight:700;letter-spacing:3px;text-transform:uppercase;color:rgba(255,255,255,.55);}
.lvlUpNum{font-family:'Syne',sans-serif;font-size:62px;line-height:1;font-weight:800;letter-spacing:-2px;background:linear-gradient(135deg,#fff 0%,#888 100%);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text;}
.lvlUpTitle{font-size:18px;font-weight:700;letter-spacing:1px;color:rgba(255,255,255,0);background:linear-gradient(135deg,rgba(251,191,36,.95),rgba(251,146,60,.85));-webkit-background-clip:text;background-clip:text;text-transform:uppercase;margin:4px 0 8px;text-shadow:0 0 30px rgba(251,191,36,.3);}
.lvlUpMsg{font-size:14px;color:rgba(255,255,255,.68);line-height:1.55;max-width:500px;}
.lvlUpBar{width:min(500px,90%);height:8px;border-radius:999px;border:1px solid rgba(255,255,255,.12);background:rgba(255,255,255,.07);overflow:hidden;margin-top:8px;}
.lvlUpFill{height:100%;width:0%;background:linear-gradient(90deg,rgba(255,255,255,.9),rgba(255,255,255,.3));transition:width .4s ease;}
.lvlUpHint{font-size:11px;color:rgba(255,255,255,.35);margin-top:4px;}

/* ── LEVEL DOWN ── */
.lvlDnOv{position:fixed;inset:0;z-index:9997;display:flex;align-items:center;justify-content:center;background:rgba(35,8,8,.58);backdrop-filter:blur(14px);opacity:0;pointer-events:none;transition:opacity .2s ease;}
.lvlDnOv.show{opacity:1;pointer-events:auto;}
.lvlDnCard{width:min(680px,calc(100vw - 24px));border-radius:24px;border:1px solid rgba(239,68,68,.28);background:linear-gradient(180deg,rgba(34,10,10,.96),rgba(24,8,8,.94));box-shadow:0 18px 56px rgba(0,0,0,.44),0 0 44px rgba(239,68,68,.12);padding:30px;overflow:hidden;position:relative;transform:translateY(12px) scale(.97);transition:transform .22s ease;}
.lvlDnOv.show .lvlDnCard{transform:translateY(0) scale(1);}
.lvlDnCard::before{content:'';position:absolute;inset:-160px;background:radial-gradient(circle at 30% 25%,rgba(239,68,68,.14) 0%,transparent 52%),radial-gradient(circle at 75% 75%,rgba(239,68,68,.07) 0%,transparent 55%);}
.lvlDnInner{position:relative;z-index:1;display:flex;flex-direction:column;gap:10px;text-align:center;align-items:center;}
.lvlDnLabel{font-size:11px;font-weight:700;letter-spacing:3px;text-transform:uppercase;color:rgba(239,100,100,.7);}
.lvlDnNum{font-family:'Syne',sans-serif;font-size:62px;line-height:1;font-weight:800;letter-spacing:-2px;background:linear-gradient(135deg,#ff6b6b 0%,#c0392b 100%);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text;animation:shake .45s ease;}
@keyframes shake{0%,100%{transform:translateX(0)}20%{transform:translateX(-9px)}40%{transform:translateX(9px)}60%{transform:translateX(-5px)}80%{transform:translateX(5px)}}
.lvlDnTitle{font-size:14px;font-weight:700;letter-spacing:.5px;color:rgba(255,180,180,.9);text-transform:uppercase;}
.lvlDnXp{font-size:24px;font-weight:800;color:rgba(239,68,68,.9);}
.lvlDnMsg{font-size:14px;color:rgba(255,200,200,.68);line-height:1.55;max-width:500px;}
.lvlDnBar{width:min(500px,90%);height:8px;border-radius:999px;border:1px solid rgba(239,68,68,.22);background:rgba(239,68,68,.08);overflow:hidden;margin-top:8px;}
.lvlDnFill{height:100%;width:100%;background:linear-gradient(90deg,rgba(239,68,68,.9),rgba(239,68,68,.3));transition:width .7s ease;}
.lvlDnHint{font-size:11px;color:rgba(255,150,150,.35);margin-top:4px;}

/* ── ACHIEVEMENT ── */
.achOv{position:fixed;inset:0;z-index:9996;display:flex;align-items:center;justify-content:center;background:rgba(24,18,6,.54);backdrop-filter:blur(14px);opacity:0;pointer-events:none;transition:opacity .2s ease;}
.achOv.show{opacity:1;pointer-events:auto;}
.achCard{width:min(620px,calc(100vw - 24px));border-radius:24px;border:1px solid rgba(255,200,50,.28);background:linear-gradient(180deg,rgba(37,30,10,.96),rgba(23,18,6,.94));box-shadow:0 18px 56px rgba(0,0,0,.42),0 0 44px rgba(255,180,0,.12);padding:30px;overflow:hidden;position:relative;transform:translateY(12px) scale(.97);transition:transform .22s ease;}
.achOv.show .achCard{transform:translateY(0) scale(1);}
.achCard::before{content:'';position:absolute;inset:-160px;background:radial-gradient(circle at 30% 25%,rgba(255,200,50,.12) 0%,transparent 52%),radial-gradient(circle at 75% 75%,rgba(255,160,0,.07) 0%,transparent 55%);}
.achInner{position:relative;z-index:1;display:flex;flex-direction:column;gap:10px;text-align:center;align-items:center;}
.achLabel{font-size:11px;font-weight:700;letter-spacing:3px;text-transform:uppercase;color:rgba(255,200,50,.7);}
.achEmoji{font-size:56px;line-height:1;animation:achBounce .5s cubic-bezier(.22,1.61,.59,1);}
@keyframes achBounce{0%{transform:scale(.3) rotate(-10deg)}70%{transform:scale(1.15) rotate(3deg)}100%{transform:scale(1) rotate(0deg)}}
.achName{font-family:'Syne',sans-serif;font-size:30px;font-weight:800;color:rgba(255,215,60,1);letter-spacing:-.5px;}
.achDesc{font-size:14px;color:rgba(255,220,120,.7);line-height:1.5;max-width:460px;}
.achReward{display:flex;gap:10px;align-items:center;justify-content:center;flex-wrap:wrap;margin-top:4px;}
.achXp{font-size:18px;font-weight:800;color:rgba(255,200,50,.95);padding:6px 14px;border-radius:999px;border:1px solid rgba(255,200,50,.25);background:rgba(255,200,50,.08);}
.achMult{font-size:18px;font-weight:800;color:rgba(134,239,172,.95);padding:6px 14px;border-radius:999px;border:1px solid rgba(34,197,94,.25);background:rgba(34,197,94,.08);}
.achHint{font-size:11px;color:rgba(255,200,50,.3);margin-top:6px;}

/* ── CONFIRM ── */
.cfmOv{position:fixed;inset:0;z-index:10070;/* AU-DESSUS de constOv 10050 : le dialogue s'ouvrait DERRIÈRE la constellation (bug 'ça ne fait rien quand j'appuie') */display:flex;align-items:center;justify-content:center;background:var(--overlay-soft);backdrop-filter:blur(12px);opacity:0;pointer-events:none;transition:opacity .18s ease;}
/* ÉDITEURS (paliers, plan, tâche, mesurable) : carte ANCRÉE EN HAUT → le contenu
   qui grandit (ajout d'une ligne, passage en "entre") s'étend VERS LE BAS au lieu
   de re-centrer la carte, ce qui faisait "sauter/zoomer" l'écran (retour user). */
.cfmOv.cfmEditor{align-items:flex-start;}
.cfmOv.cfmEditor .cfmCard{margin-top:14px;}
.cfmOv.show{opacity:1;pointer-events:auto;}
.cfmOv.tutStage{z-index:100002;}
.cfmCard{width:min(480px,calc(100vw - 32px));max-height:calc(100vh - 28px);border-radius:20px;border:1px solid var(--overlay-card-border);background:var(--overlay-card-bg);box-shadow:var(--overlay-card-shadow);padding:24px;display:flex;flex-direction:column;gap:14px;}
.cfmTitle{font-family:'Syne',sans-serif;font-size:20px;font-weight:800;color:#fff;}
.cfmMsg{font-size:13px;color:rgba(255,255,255,.58);line-height:1.55;max-height:calc(100vh - 210px);overflow-y:auto;-webkit-overflow-scrolling:touch;}
.cfmBtns{display:flex;gap:10px;}
/* REGISTRE : boutons du dialogue « Motif de clôture » (Phase 3) */
.vClsHero{display:flex;align-items:center;gap:13px;margin:2px 0 14px;padding:13px;border-radius:14px;background:linear-gradient(135deg,rgba(167,139,250,.12),rgba(96,165,250,.06));border:1px solid rgba(167,139,250,.22);}
.vClsHeroArt{flex:0 0 auto;width:46px;height:46px;display:flex;align-items:center;justify-content:center;border-radius:50%;background:radial-gradient(circle at 50% 35%,rgba(251,191,36,.25),rgba(167,139,250,.12));}
.vClsHeroArt .gi{width:26px;height:26px;fill:#fbbf24;}
.vClsHeroTxt{min-width:0;}
.vClsHeroName{font-family:'Syne',sans-serif;font-weight:700;font-size:15px;color:#fff;line-height:1.2;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.vClsHeroSub{margin-top:3px;font-size:11.5px;color:rgba(255,255,255,.55);line-height:1.45;}
.vClsReason{display:flex;flex-direction:row;align-items:center;gap:12px;width:100%;min-height:54px;margin-top:8px;padding:0 14px;text-align:left;border-radius:12px;border:1px solid rgba(255,255,255,.12);background:rgba(255,255,255,.03);color:rgba(255,255,255,.85);cursor:pointer;font-family:'Space Grotesk',sans-serif;transition:border-color .15s,background .15s;}
.vClsReason:hover{border-color:rgba(167,139,250,.4);background:rgba(167,139,250,.07);}
.vClsIcon{flex:0 0 auto;width:34px;height:34px;display:flex;align-items:center;justify-content:center;border-radius:9px;background:rgba(167,139,250,.1);}
.vClsIcon .gi{width:18px;height:18px;fill:rgba(167,139,250,.9);}
.vClsBody{display:flex;flex-direction:column;min-width:0;padding:9px 0;}
.vClsLab{font-size:13px;font-weight:600;line-height:1.25;}
.vClsHint{margin-top:3px;font-size:10.5px;font-weight:500;color:rgba(255,255,255,.42);line-height:1.35;}
/* Remplacement (Phase 3b) : cases de transfert explicites */
.rplOpt{display:flex;align-items:center;gap:8px;width:100%;margin-top:6px;padding:9px 11px;border-radius:10px;border:1px solid rgba(255,255,255,.1);background:rgba(255,255,255,.03);color:rgba(255,255,255,.82);font-size:12.5px;font-weight:600;cursor:pointer;}
.rplOpt input{width:16px;height:16px;accent-color:#a78bfa;flex:none;}
.cfmYes{flex:1;padding:12px;border-radius:12px;border:1px solid rgba(239,68,68,.4);background:rgba(239,68,68,.14);color:rgba(255,180,180,.95);cursor:pointer;font-weight:700;font-size:12px;text-transform:uppercase;letter-spacing:.7px;transition:all .15s ease;font-family:'Space Grotesk',sans-serif;}
.cfmYes:hover{background:rgba(239,68,68,.25);}
.cfmYes.green{border-color:rgba(34,197,94,.45);background:rgba(34,197,94,.14);color:rgba(134,239,172,.95);}

/* ── Fiche objet (tooltip MMO, préfixe itd) ── */
.itdCard{width:min(440px,calc(100vw - 32px));border-radius:20px;border:1.5px solid color-mix(in srgb,var(--grc,#9ca3af) 55%,transparent);background:var(--overlay-card-bg);box-shadow:var(--overlay-card-shadow),0 0 34px -12px var(--grc,transparent);padding:20px;display:flex;flex-direction:column;gap:14px;}
.itdHead{display:flex;align-items:center;gap:14px;}
.itdIcon{width:58px;height:58px;flex:none;border-radius:14px;border:1px solid color-mix(in srgb,var(--grc) 45%,transparent);background:color-mix(in srgb,var(--grc) 10%,transparent);display:flex;align-items:center;justify-content:center;}
.itdIcon .gi{width:55%;height:55%;fill:var(--grc);}
.itdId{flex:1;min-width:0;}
.itdName{font-family:'Syne',sans-serif;font-size:18px;font-weight:800;color:#fff;letter-spacing:-.3px;}
.itdRar{font-size:9.5px;font-weight:800;letter-spacing:2px;text-transform:uppercase;color:var(--grc);margin-top:2px;font-family:'Space Grotesk',sans-serif;}
.itdClose{flex:none;width:32px;height:32px;border-radius:50%;border:1px solid rgba(255,255,255,.14);background:rgba(255,255,255,.04);color:rgba(255,255,255,.7);font-size:13px;cursor:pointer;}
.itdRows{display:flex;flex-direction:column;border-radius:13px;border:1px solid rgba(255,255,255,.08);overflow:hidden;}
.itdRow{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:9px 13px;background:rgba(255,255,255,.025);}
.itdRow+.itdRow{border-top:1px solid rgba(255,255,255,.06);}
.itdLab{font-size:9.5px;font-weight:800;letter-spacing:1.6px;text-transform:uppercase;color:rgba(255,255,255,.38);font-family:'Space Grotesk',sans-serif;flex:none;}
.itdVal{font-size:12.5px;font-weight:700;color:rgba(255,255,255,.85);text-align:right;font-family:'Space Grotesk',sans-serif;}
.itdVal em{font-style:italic;color:rgba(255,255,255,.45);font-weight:600;}
.itdRarVal{color:var(--grc);}
.itdLore{padding:12px 14px;border-radius:13px;border:1px dashed color-mix(in srgb,var(--grc) 30%,transparent);font-size:12px;line-height:1.65;color:rgba(255,255,255,.55);font-style:italic;font-family:'Space Grotesk',sans-serif;}
.itdActions{display:flex;gap:10px;}
.itdBtn{flex:1;padding:12px;border-radius:12px;cursor:pointer;font-weight:800;font-size:11px;text-transform:uppercase;letter-spacing:.8px;font-family:'Space Grotesk',sans-serif;transition:all .15s ease;}
.itdOn{border:1px solid rgba(34,197,94,.45);background:rgba(34,197,94,.14);color:rgba(134,239,172,.95);}
.itdOn:hover{background:rgba(34,197,94,.25);}
.itdOff{border:1px solid rgba(255,255,255,.14);background:rgba(255,255,255,.05);color:rgba(255,255,255,.8);}
.itdGhost{border:1px solid rgba(255,255,255,.1);background:none;color:rgba(255,255,255,.5);}
.cfmYes.green:hover{background:rgba(34,197,94,.25);}
.cfmNo{flex:1;padding:12px;border-radius:12px;border:1px solid rgba(255,255,255,.12);background:rgba(255,255,255,.05);color:rgba(255,255,255,.8);cursor:pointer;font-weight:700;font-size:12px;text-transform:uppercase;letter-spacing:.7px;transition:all .15s ease;font-family:'Space Grotesk',sans-serif;}
.cfmNo:hover{background:rgba(255,255,255,.09);}

/* ── Focus : confirmation d'engagement ─────────────────────────────
   Même dialogue stateless, même héros que les détails du Registre. Le violet
   reste l'identité de Levels : aucune nouvelle couleur de registre. */
.cfmOv.cfmFocus .cfmCard{border-color:rgba(167,139,250,.28);
  background:linear-gradient(170deg,#12152a,#0a0d1a);
  box-shadow:0 18px 60px rgba(0,0,0,.55),0 0 34px -18px rgba(167,139,250,.7);}
.cfmOv.cfmFocus .cfmTitle{font-size:18px;color:#ddd6fe;}
.cfmOv.cfmFocus .cfmMsg{display:flex;flex-direction:column;gap:9px;max-height:calc(100vh - 230px);}
.cfmOv.cfmFocus .cfmYes{min-height:46px;border-color:rgba(167,139,250,.48);
  background:rgba(167,139,250,.16);color:#ddd6fe;}
.cfmOv.cfmFocus .cfmYes:hover{background:rgba(167,139,250,.24);}
.cfmOv.cfmFocus .cfmNo{min-height:46px;}
.focusCommitHero{display:flex;align-items:center;gap:13px;padding:13px;border-radius:14px;
  background:linear-gradient(135deg,rgba(167,139,250,.12),rgba(96,165,250,.06));
  border:1px solid rgba(167,139,250,.22);}
.focusCommitArt{flex:none;width:46px;height:46px;display:flex;align-items:center;justify-content:center;
  border-radius:50%;background:radial-gradient(circle at 50% 35%,rgba(167,139,250,.25),rgba(96,165,250,.08));}
.focusCommitArt .gi{width:24px;height:24px;fill:#c4b5fd;}
.focusCommitHeroTxt{min-width:0;}
.focusCommitKick{font-size:9px;font-weight:800;letter-spacing:.8px;color:rgba(196,181,253,.66);}
.focusCommitName{margin-top:2px;font-family:'Syne',sans-serif;font-size:18px;font-weight:800;color:#fff;}
.focusCommitSub{margin-top:3px;font-size:11.5px;line-height:1.45;color:rgba(255,255,255,.53);overflow-wrap:anywhere;}
.focusCommitRow{display:flex;align-items:center;gap:10px;padding:9px 10px;border-radius:11px;
  background:rgba(255,255,255,.03);border:1px solid rgba(255,255,255,.08);}
.focusCommitRowIco{flex:none;width:34px;height:34px;display:flex;align-items:center;justify-content:center;
  border-radius:9px;background:rgba(167,139,250,.1);}
.focusCommitRowIco .gi{width:17px;height:17px;fill:#a78bfa;}
.focusCommitRowTxt{display:flex;flex-direction:column;gap:2px;min-width:0;}
.focusCommitRowTxt strong{font-size:12px;color:rgba(255,255,255,.86);}
.focusCommitRowTxt span{font-size:10.5px;line-height:1.35;color:rgba(255,255,255,.42);overflow-wrap:anywhere;}
.focusCommitHint{padding:2px 3px 0;font-size:10.5px;line-height:1.4;color:rgba(255,255,255,.35);}

/* ── Confirmations du Sommet : une composition identitaire, même mécanique stateless ── */
@media(max-width:430px){
  .smcMedal{width:42px;height:42px;}
  .smcTitle{font-size:16px;}
  .smcObj{grid-template-columns:32px minmax(0,1fr);gap:9px;}
  .smcObjMeta{grid-column:2;align-items:flex-start;flex-direction:row;gap:6px;white-space:normal;}
}

/* ── DAY DETAIL ── */
.dayOv{position:fixed;inset:0;z-index:9994;display:flex;align-items:center;justify-content:center;background:var(--overlay-soft);backdrop-filter:blur(12px);opacity:0;pointer-events:none;transition:opacity .18s ease;}
.dayOv.show{opacity:1;pointer-events:auto;overscroll-behavior:contain;overflow:hidden;}
/* SCROLL : la CARTE ENTIÈRE défile (retour user + audit Codex : avant, seul .dayCardScroll
   scrollait, titre/stats/marges/Fermer étaient des ZONES MORTES au toucher, touch-action:none).
   Une seule surface scrollable, sizing en dvh + safe-area (le 80vh figé coupait sur petit écran). */
.dayCard{width:min(500px,calc(100vw - 32px));border-radius:20px;border:1px solid var(--overlay-card-border);background:var(--overlay-card-bg);box-shadow:var(--overlay-card-shadow);padding:24px;display:flex;flex-direction:column;gap:12px;max-height:min(80vh,calc(100dvh - env(safe-area-inset-top) - env(safe-area-inset-bottom) - 28px));overflow-x:hidden;overflow-y:auto;-webkit-overflow-scrolling:touch;overscroll-behavior:contain;touch-action:pan-y;}
.dayCardScroll{display:flex;flex-direction:column;gap:12px;min-width:0;max-width:100%;}
.dayTitle{font-family:'Syne',sans-serif;font-size:18px;font-weight:800;color:#fff;}
.dayStats{display:flex;gap:8px;flex-wrap:wrap;}
.dayStat{font-size:11px;font-weight:600;padding:5px 10px;border-radius:999px;border:1px solid rgba(255,255,255,.09);background:rgba(255,255,255,.04);color:rgba(255,255,255,.75);}
.dayStat.success{border-color:rgba(34,197,94,.25);background:rgba(34,197,94,.07);color:rgba(134,239,172,.9);}
.dayStat.fail{border-color:rgba(239,68,68,.25);background:rgba(239,68,68,.07);color:rgba(252,165,165,.9);}
.dayStat.repos{border-color:rgba(96,165,250,.25);background:rgba(96,165,250,.07);color:rgba(147,197,253,.9);}
.dayStat.inprogress{border-color:rgba(255,200,50,.25);background:rgba(255,200,50,.07);color:rgba(255,220,100,.9);}
.dayStat.pen{border-color:rgba(239,68,68,.25);background:rgba(239,68,68,.07);color:rgba(252,165,165,.9);}
.dayObjs{display:grid;grid-template-columns:minmax(0,1fr);gap:4px;margin-top:4px;}
/* PLUS DE TRONCATURE (retour user, il déteste ça) : le texte RETOURNE À LA LIGNE. La carte
   scrolle désormais, donc un objectif long se lit en entier. */
.dayObj{font-size:12px;padding:5px 10px;border-radius:8px;background:rgba(255,255,255,.025);color:rgba(255,255,255,.45);line-height:1.4;overflow-wrap:anywhere;min-width:0;max-width:100%;box-sizing:border-box;}
/* Rangée avec bouton (Reprendre) : le texte wrap, le bouton (flex:none) reste toujours entier */
.dayObj>span:first-child{min-width:0;overflow-wrap:anywhere;}
.vmpChk.crea{cursor:pointer;}
.dayObj.done{color:rgba(134,239,172,.85);}
.dayObj.bonusQuest{border-left:3px solid rgba(96,165,250,.5);color:rgba(96,165,250,.85);}
.dayObj.bonusQuest.done{color:rgba(96,165,250,.95);}
.dayObj.mystery{border-left:3px solid rgba(255,200,50,.5);color:rgba(255,200,50,.85);}
.dayObj.mystery.done{color:rgba(255,200,50,.95);}
/* ── Reprendre un objectif raté ── */
.dayObjRetakeBtn{flex:none;font-size:10px;font-weight:700;padding:4px 9px;border-radius:7px;border:1px solid rgba(255,200,97,.4);background:rgba(255,200,97,.12);color:#ffc861;cursor:pointer;font-family:'Space Grotesk',sans-serif;transition:all .15s ease;white-space:nowrap;}
.dayObjRetakeBtn:hover{background:rgba(255,200,97,.22);}
.dayObjRetakeBtn:active{transform:scale(.96);}
.retakeCard{margin:0 0 10px;padding:12px 14px;border-radius:14px;background:rgba(255,170,60,.06);border:1px solid rgba(255,170,60,.2);backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);}
/* Carte mission du mentor (dash) : couleurs du mentor, distincte de l'ambre */
.pmCard{margin:0 0 10px;padding:12px 14px;border-radius:14px;border:1px solid color-mix(in srgb,var(--mc1) 35%,transparent);background:linear-gradient(160deg,color-mix(in srgb,var(--mc1) 9%,transparent),color-mix(in srgb,var(--mc2) 3%,transparent) 70%);}
.pmHead{display:flex;align-items:center;gap:8px;margin-bottom:7px;}
.pmAva{width:26px;height:26px;flex:none;}
.pmAva .giP{width:100%;height:100%;}
.pmLbl{font-size:9.5px;font-weight:800;letter-spacing:1.4px;text-transform:uppercase;background:linear-gradient(90deg,var(--mc1),var(--mc2));-webkit-background-clip:text;background-clip:text;color:transparent;font-family:'Space Grotesk',sans-serif;}
.pmMission{font-size:12.5px;line-height:1.5;color:rgba(255,255,255,.8);font-family:'Space Grotesk',sans-serif;margin-bottom:9px;}
.pmAdd{width:100%;padding:10px;border:none;border-radius:11px;background:linear-gradient(135deg,var(--mc1),var(--mc2));color:#fff;font-weight:800;font-size:10.5px;text-transform:uppercase;letter-spacing:.8px;cursor:pointer;font-family:'Space Grotesk',sans-serif;}
.retakeHead{display:flex;align-items:center;justify-content:space-between;font-size:11px;font-weight:700;color:#ffc861;text-transform:uppercase;letter-spacing:.5px;margin-bottom:6px;}
.retakeDismiss{background:none;border:none;color:rgba(255,255,255,.4);font-size:14px;cursor:pointer;padding:2px 6px;line-height:1;}
.retakeDismiss:hover{color:rgba(255,255,255,.7);}
.retakeRow{display:flex;align-items:center;gap:10px;padding:5px 0;}
.retakeTxt{flex:1;min-width:0;font-size:13px;color:rgba(255,255,255,.82);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.retakeBtn{flex:none;font-size:11px;font-weight:700;padding:6px 12px;border-radius:8px;border:1px solid rgba(255,200,97,.4);background:rgba(255,200,97,.12);color:#ffc861;cursor:pointer;font-family:'Space Grotesk',sans-serif;transition:all .15s ease;}
.retakeBtn:hover{background:rgba(255,200,97,.22);}
.retakeBtn:active{transform:scale(.96);}
.retakeMore{margin-top:4px;font-size:11px;color:rgba(255,255,255,.35);}
.dayNote{margin-top:4px;}
.dayNoteArea{width:100%;min-height:56px;max-height:150px;resize:vertical;border:1px solid rgba(255,255,255,.08);border-radius:10px;background:rgba(255,255,255,.03);color:rgba(255,255,255,.7);font-size:12px;font-family:'Space Grotesk',sans-serif;padding:8px 10px;outline:none;transition:border-color .15s ease;}
.dayNoteArea:focus{border-color:rgba(167,139,250,.4);}
.dayNoteArea::placeholder{color:rgba(255,255,255,.2);}
.dayClose{align-self:flex-end;flex:none;white-space:nowrap;padding:10px 18px;border-radius:12px;border:1px solid rgba(255,255,255,.12);background:rgba(255,255,255,.05);color:rgba(255,255,255,.75);cursor:pointer;font-weight:700;font-size:11px;text-transform:uppercase;letter-spacing:.6px;font-family:'Space Grotesk',sans-serif;transition:all .15s ease;}
.dayClose:hover{background:rgba(255,255,255,.09);}

/* ── NATURE PORTAL ── */
/* natBack : pointer-events:none par défaut, activé seulement quand ouvert */
.natBack{position:fixed;inset:0;z-index:9990;background:transparent;pointer-events:none;}
.natBack.open{pointer-events:auto;}
.natPortal{position:fixed;z-index:9991;border-radius:14px;border:1px solid rgba(255,255,255,.12);background:rgba(6,6,6,.95);backdrop-filter:blur(18px);box-shadow:0 18px 50px rgba(0,0,0,.7);padding:8px;max-height:240px;overflow:auto;min-width:220px;display:none;}
.natPortal.open{display:block;}
.natItem{padding:9px 10px;border-radius:10px;cursor:pointer;color:rgba(255,255,255,.82);font-weight:600;font-size:12px;border:1px solid transparent;user-select:none;transition:all .12s ease;}
.natItem:hover{background:rgba(255,255,255,.07);border-color:rgba(255,255,255,.09);}
.natItem.active{background:rgba(255,255,255,.11);border-color:rgba(255,255,255,.17);color:#fff;}

/* ═══════════════ LANDING ═══════════════ */
/* ═══════════════ LANDING PAGE ═══════════════ */
.landingRoot{
  position:fixed;inset:0;
  display:flex;flex-direction:column;
  overflow-x:hidden;overflow-y:auto;
  background:transparent;
  z-index:10;
  scroll-behavior:smooth;
}

/* Hero */
.landingHero{
  position:relative;
  min-height:100vh;min-height:100svh;
  display:flex;align-items:center;justify-content:center;
  overflow:hidden;
}
#landingCanvas{
  position:absolute;inset:0;width:100%;height:100%;
  display:block;background:#e8e8e8;
}
.landingHeroOverlay{
  position:absolute;inset:0;
  background:
    linear-gradient(180deg,rgba(5,5,5,.35) 0%,rgba(5,5,5,.15) 25%,rgba(5,5,5,.1) 55%,rgba(5,5,5,.95) 100%),
    linear-gradient(90deg,rgba(5,5,5,.75) 0%,rgba(5,5,5,.35) 40%,transparent 70%);
  pointer-events:none;z-index:2;
}
.landingHeroContent{
  position:relative;z-index:3;
  display:flex;flex-direction:column;align-items:flex-start;
  padding:0 clamp(24px,5vw,80px);max-width:960px;width:100%;
  pointer-events:none;
}
.landingHeroContent .landingCTA{pointer-events:auto;}
.landingLogo{
  width:64px;height:64px;border-radius:18px;
  border:1px solid rgba(255,255,255,.12);
  background:rgba(255,255,255,.04);
  backdrop-filter:blur(12px);
  position:relative;margin-bottom:28px;
}
.landingLogo::before{content:'';position:absolute;top:16px;left:14px;width:36px;height:9px;border-radius:4.5px;background:linear-gradient(90deg,rgba(255,255,255,.9),rgba(255,255,255,.45));}
.landingLogo::after{content:'';position:absolute;top:25px;left:14px;width:9px;height:24px;border-radius:4.5px;background:linear-gradient(180deg,rgba(255,255,255,.9),rgba(255,255,255,.45));}

.landingTitle{
  font-family:'Syne',sans-serif;font-size:clamp(48px,8vw,88px);font-weight:800;
  letter-spacing:-3px;line-height:.92;color:#fff;margin-bottom:20px;
  text-shadow:0 2px 20px rgba(0,0,0,.5),0 0 60px rgba(0,0,0,.3);
  opacity:0;animation:ldFadeUp .8s .3s cubic-bezier(.16,1,.3,1) forwards;
}
.landingTitle span{
  display:inline-block;
  background:linear-gradient(135deg,rgba(255,255,255,.85),rgba(255,255,255,.35));
  -webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text;
}
.landingTagline{
  font-size:clamp(14px,1.6vw,17px);color:rgba(255,255,255,.7);line-height:1.7;
  max-width:440px;margin-bottom:36px;
  text-shadow:0 1px 16px rgba(0,0,0,.85),0 0 40px rgba(0,0,0,.5);
  opacity:0;animation:ldFadeUp .8s .5s cubic-bezier(.16,1,.3,1) forwards;
}
.landingCTA{
  padding:16px 44px;border-radius:14px;border:none;
  background:rgba(255,255,255,.92);color:#080808;
  font-family:'Syne',sans-serif;font-size:13px;font-weight:800;
  text-transform:uppercase;letter-spacing:1.5px;cursor:pointer;
  transition:all .2s ease;
  box-shadow:0 8px 32px rgba(255,255,255,.12);
  opacity:0;animation:ldFadeUp .8s .7s cubic-bezier(.16,1,.3,1) forwards;
}
.landingCTA:hover{transform:translateY(-2px) scale(1.02);box-shadow:0 12px 44px rgba(255,255,255,.2);}
.landingCTA:active{transform:scale(.97);}
.landingGuestLink{display:inline-block;margin-top:14px;color:rgba(255,255,255,.32);font-size:12px;cursor:pointer;text-decoration:underline;text-underline-offset:3px;transition:color .2s ease;pointer-events:auto;opacity:0;animation:ldFadeUp .8s .9s cubic-bezier(.16,1,.3,1) forwards;}
.landingGuestLink:hover{color:rgba(255,255,255,.55);}
.landingDisclaimer{margin-top:28px;font-family:'Syne',sans-serif;font-size:11px;font-weight:500;letter-spacing:1.4px;text-transform:uppercase;color:rgba(255,255,255,.32);}

.landingScrollHint{
  position:absolute;bottom:32px;left:50%;transform:translateX(-50%);
  z-index:3;display:flex;flex-direction:column;align-items:center;gap:8px;
  opacity:0;animation:ldFadeUp .8s 1.1s cubic-bezier(.16,1,.3,1) forwards;
  pointer-events:none;
}
.landingScrollLine{
  width:1px;height:48px;
  background:linear-gradient(to bottom,rgba(255,255,255,.4),transparent);
  animation:ldScrollPulse 2s ease-in-out infinite;
}
.landingScrollHint span{
  font-size:9px;letter-spacing:3px;text-transform:uppercase;
  color:rgba(255,255,255,.25);
}
/* ── Landing — Bouton "En savoir plus" (réveille la suite de la page) ── */
.landingMoreBtn{
  position:absolute;bottom:36px;left:50%;transform:translateX(-50%);
  z-index:50;pointer-events:auto;display:inline-flex;align-items:center;gap:10px;
  padding:12px 26px;border-radius:999px;
  background:rgba(255,255,255,.04);
  border:1px solid rgba(255,255,255,.18);
  color:rgba(255,255,255,.78);
  font-family:'Syne',sans-serif;font-size:11px;font-weight:600;
  letter-spacing:2.4px;text-transform:uppercase;cursor:pointer;
  backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px);
  transition:background .25s ease,border-color .25s ease,color .25s ease,transform .25s ease,opacity .35s ease;
  opacity:0;animation:ldMoreFadeUp .6s .4s cubic-bezier(.16,1,.3,1) forwards;
}
@keyframes ldMoreFadeUp{
  0%{opacity:0;transform:translateX(-50%) translateY(40px) scale(.97)}
  60%{opacity:1;transform:translateX(-50%) translateY(-4px) scale(1)}
  100%{opacity:1;transform:translateX(-50%) translateY(0) scale(1)}
}
.landingMoreBtn:hover{
  background:rgba(255,255,255,.09);
  border-color:rgba(255,255,255,.32);
  color:rgba(255,255,255,.98);
  transform:translateX(-50%) translateY(-2px);
}
.landingMoreBtn:active{transform:translateX(-50%) scale(.97);}
.landingMoreArrow{
  display:inline-block;font-size:13px;line-height:1;
  animation:ldMoreBounce 1.8s cubic-bezier(.4,0,.2,1) infinite;
}
.landingMoreBtn.ldGone{opacity:0;pointer-events:none;transform:translateX(-50%) translateY(10px);}
/* ══ QUI TE RÉPOND (Loi V) ══════════════════════════════════════════
   Deux cases nommées, celle par défaut allumée : c'est exactement la forme
   du choix dans les Réglages. Le canon l'exige, jamais une bascule à
   interpréter. */
.ldVoix{display:flex;gap:7px;margin-bottom:14px;}
.ldVoixOpt{flex:1;min-width:0;text-align:center;padding:9px 8px;border-radius:10px;
  font-size:9.5px;font-weight:600;letter-spacing:.3px;
  border:1px solid rgba(255,255,255,.1);background:rgba(255,255,255,.03);
  color:rgba(255,255,255,.42);}
.ldVoixOn{border-color:rgba(251,191,36,.32);background:rgba(251,191,36,.07);color:rgba(252,211,77,.92);}
/* Le Sommet se mérite : la case existe, éteinte. On montre la porte, pas
   ce qu'il y a derrière. */
.ldVoixLock{border-style:dashed;color:rgba(255,255,255,.28);}

/* ══ LA ROUTE QUI RAPPELLE ═══════════════════════════════════════════
   Or : c'est le Sommet qui parle. Le danger passe en rouge, parce qu'un
   objectif de sortie hors d'atteinte n'est pas une nuance. Zéro animation :
   cette carte vit sur le chemin chaud du tableau. */
.rtAlerte{
  margin:0 0 12px;padding:13px 15px;border-radius:14px;
  border:1px solid rgba(251,191,36,.24);background:rgba(251,191,36,.05);
}
.rtAlerte.hidden{display:none;}
.rtAlDanger{border-color:rgba(239,68,68,.32);background:rgba(239,68,68,.06);}
.rtAlKick{display:flex;align-items:center;gap:6px;
  font-family:'Syne',sans-serif;font-size:9.5px;font-weight:700;
  letter-spacing:2px;text-transform:uppercase;color:rgba(251,191,36,.8);margin-bottom:7px;}
.rtAlDanger .rtAlKick{color:rgba(248,113,113,.85);}
.rtAlKick .gi{width:13px;height:13px;}
.rtAlTxt{font-size:13.5px;line-height:1.5;color:rgba(255,255,255,.86);}
.rtAlSub{font-size:11.5px;color:rgba(255,255,255,.45);margin-top:5px;}
.rtAlBtns{display:flex;gap:8px;margin-top:11px;flex-wrap:wrap;}
.rtAlGo,.rtAlSee{
  flex:1;min-width:0;padding:9px 10px;border-radius:10px;cursor:pointer;
  font-family:'Space Grotesk',sans-serif;font-size:11.5px;font-weight:600;
  border:1px solid rgba(255,255,255,.12);background:rgba(255,255,255,.04);color:rgba(255,255,255,.72);
}
.rtAlGo{border-color:rgba(251,191,36,.4);background:rgba(251,191,36,.12);color:#fcd34d;}
/* « Suite de : ... » : une mention, jamais un verrou. */
/* ══ LA SEMAINE DE LA ROUTE ══════════════════════════════════════════
   Sept cases, un état par case, et RIEN d'écrit dessus : le détail vient au
   toucher. Zéro animation : cette ligne vit dans la bannière de la Vision. */
.rtSem{margin:8px 0 4px;}
.rtSem.hidden{display:none;}
.rtSemSortie{font-size:11px;color:rgba(255,255,255,.5);margin-bottom:7px;line-height:1.4;}
.rtSemSortieK{font-family:'Syne',sans-serif;font-size:8.5px;font-weight:700;
  letter-spacing:1.4px;text-transform:uppercase;color:rgba(251,191,36,.7);margin-right:7px;}
.rtSemLine{display:flex;gap:5px;}
.rtSemJ{flex:1;min-width:0;display:flex;flex-direction:column;align-items:center;gap:3px;
  padding:6px 2px;border-radius:9px;cursor:pointer;
  border:1px solid rgba(255,255,255,.08);background:rgba(255,255,255,.03);}
.rtSemJLab{font-size:8.5px;font-weight:700;color:rgba(255,255,255,.34);}
.rtSemJDot{width:7px;height:7px;border-radius:50%;background:rgba(255,255,255,.14);}
.rtSemJN{font-size:8.5px;color:rgba(255,255,255,.3);}
.rtSemJ-fait .rtSemJDot{background:#4ade80;}
.rtSemJ-manque .rtSemJDot{background:#ef4444;}
.rtSemJ-revenu .rtSemJDot{background:#fbbf24;}
.rtSemJ-aujourdhui .rtSemJDot{background:#a78bfa;}
.rtSemJToday{border-color:rgba(167,139,250,.42);background:rgba(167,139,250,.08);}
.rtSemJToday .rtSemJLab{color:rgba(196,181,253,.9);}
/* ══ LE DÉTAIL D'UNE JOURNÉE ═════════════════════════════════════════
   Chaque action est un BLOC qui respire : le titre sur sa ligne, l'état à
   droite, et le bouton détaché en dessous. Première version fautive : le
   « Faire quand même » collait au texte. */
.rtjRow{padding:13px;margin-bottom:9px;border-radius:12px;text-align:left;
  border:1px solid rgba(255,255,255,.08);background:rgba(255,255,255,.03);}
.rtjRow:last-child{margin-bottom:0;}
.rtjHead{display:flex;align-items:flex-start;gap:9px;}
.rtjTxt{flex:1;min-width:0;font-size:13.5px;line-height:1.45;color:rgba(255,255,255,.86);overflow-wrap:anywhere;}
.rtjDone{background:rgba(74,222,128,.05);border-color:rgba(74,222,128,.16);}
.rtjDone .rtjTxt{color:rgba(255,255,255,.4);text-decoration:line-through;}
.rtjTag{flex:0 0 auto;font-size:9.5px;padding:3px 8px;border-radius:99px;white-space:nowrap;
  border:1px solid rgba(74,222,128,.3);color:rgba(134,239,172,.85);}
.rtjTag.rtjLate{border-color:rgba(251,191,36,.32);color:rgba(252,211,77,.85);}
.rbLate{color:#fcd34d;}
/* Une action de Route DÉJÀ convertie : elle vit sur le tableau du jour. Ni
   « faite », ni « en retard » : en cours. */
.rtjTag.rtjOn{background:rgba(96,165,250,.14);border:1px solid rgba(96,165,250,.3);color:#93c5fd;}
.rtjAtt{display:flex;align-items:center;gap:6px;
  font-size:11.5px;color:rgba(255,255,255,.42);margin-top:9px;line-height:1.4;}
.rtjAtt .gi{width:12px;height:12px;flex:0 0 auto;opacity:.6;}
.rtjGo{display:block;width:100%;margin-top:12px;padding:10px;border-radius:10px;cursor:pointer;
  font-family:'Space Grotesk',sans-serif;font-size:12px;font-weight:600;
  border:1px solid rgba(167,139,250,.34);background:rgba(167,139,250,.1);color:rgba(196,181,253,.92);}
.rtjGo:active{transform:scale(.985);}

/* Une route en sommeil le DIT sur ses actions : sans marque, elles restent
   sur le tableau comme celles d'une route qui court. */
.vptRouteSleep{
  font-size:9.5px;color:rgba(255,255,255,.34);
  padding:2px 7px;border-radius:99px;border:1px dashed rgba(255,255,255,.16);
  white-space:nowrap;
}
/* ══ L'ATELIER : ON VOIT CE QU'ON FABRIQUE ═══════════════════════════
   Des CARTES, pas des lignes. Et un décompte qui bouge, parce qu'un temps
   figé ne dit pas qu'on attend. */
.atBench{margin-bottom:12px;padding:14px;border-radius:14px;
  border:1px solid rgba(167,139,250,.28);background:rgba(167,139,250,.07);}
.atBench.atReady{border-color:rgba(74,222,128,.45);background:rgba(74,222,128,.09);}
.atBenchTop{display:flex;align-items:center;gap:7px;
  font-family:'Syne',sans-serif;font-size:9px;font-weight:700;letter-spacing:2px;
  text-transform:uppercase;color:rgba(196,181,253,.8);margin-bottom:8px;}
.atBenchTop .gi{width:13px;height:13px;}
.atReady .atBenchTop{color:rgba(134,239,172,.9);}
.atBenchName{font-family:'Syne',sans-serif;font-size:17px;font-weight:800;color:#fff;margin-bottom:9px;}
.atBar{height:6px;border-radius:99px;background:rgba(255,255,255,.08);overflow:hidden;margin-bottom:8px;}
.atBar i{display:block;height:100%;border-radius:99px;
  background:linear-gradient(90deg,rgba(167,139,250,.55),rgba(167,139,250,.95));transition:width .4s ease;}
.atReady .atBar i{background:linear-gradient(90deg,rgba(74,222,128,.6),rgba(74,222,128,1));}
.atBenchTime{font-size:13px;font-weight:600;color:rgba(196,181,253,.92);font-variant-numeric:tabular-nums;}
.atReady .atBenchTime{color:rgba(134,239,172,.95);}
.atRush{display:flex;align-items:center;justify-content:center;gap:7px;width:100%;min-height:44px;
  margin-top:10px;padding:9px 12px;border-radius:11px;cursor:pointer;
  border:1px solid rgba(203,213,225,.28);background:rgba(203,213,225,.07);
  color:#e2e8f0;font-family:'Space Grotesk',sans-serif;font-size:11.5px;font-weight:700;}
.atRush .gi,.atRushConfirm .gi{width:13px;height:13px;fill:#cbd5e1;flex:none;}
.atRush:active:not(:disabled){transform:scale(.985);}
.atRush:disabled{cursor:wait;opacity:.72;}
.atRush.busy .gi{animation:atRushPulse .7s ease-in-out 3;}
@keyframes atRushPulse{50%{transform:scale(1.22);opacity:.45}}
.atRushConfirm{display:flex!important;align-items:center;justify-content:center;gap:7px;}
.atSlots{font-size:11px;color:rgba(255,255,255,.38);margin-bottom:12px;}

.atGrid{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-top:6px;}
@media(max-width:400px){.atGrid{grid-template-columns:1fr;}}
.atCard{position:relative;display:flex;flex-direction:column;padding:14px 13px;border-radius:14px;
  border:1px solid rgba(255,255,255,.09);background:rgba(255,255,255,.035);}
.atCard.atPardon{border-color:rgba(167,139,250,.24);background:rgba(167,139,250,.05);}
.atCard.atOwned{border-color:rgba(74,222,128,.3);}
.atCard.atSealed{border-style:dashed;opacity:.5;}
.atIco{width:34px;height:34px;border-radius:11px;display:flex;align-items:center;justify-content:center;
  background:rgba(255,255,255,.05);margin-bottom:10px;}
.atIco .gi{width:18px;height:18px;fill:rgba(196,181,253,.85);}
.atCard:not(.atPardon) .atIco .gi{fill:rgba(129,140,248,.9);}
.atName{font-family:'Syne',sans-serif;font-size:14.5px;font-weight:800;color:#fff;margin-bottom:5px;line-height:1.2;}
.atEff{flex:1;font-size:11.5px;line-height:1.45;color:rgba(255,255,255,.5);margin-bottom:11px;}
.atHave{position:absolute;top:11px;right:12px;font-size:11px;font-weight:800;
  color:rgba(134,239,172,.95);background:rgba(74,222,128,.14);
  border:1px solid rgba(74,222,128,.32);border-radius:99px;padding:2px 8px;}
.atMake{display:flex;align-items:center;justify-content:space-between;gap:8px;width:100%;
  padding:10px 12px;border-radius:11px;cursor:pointer;
  border:1px solid rgba(129,140,248,.4);background:rgba(129,140,248,.13);color:#c7d2fe;
  font-family:'Space Grotesk',sans-serif;font-size:12px;font-weight:700;}
.atMake:active{transform:scale(.985);}
.atPrice{display:flex;align-items:center;gap:5px;}
.atPrice .gi{width:12px;height:12px;fill:#a5b4fc;}
.atTime{font-size:11px;font-weight:600;opacity:.7;font-variant-numeric:tabular-nums;}
.atState{padding:9px 11px;border-radius:11px;text-align:center;
  font-size:11.5px;font-weight:600;border:1px dashed rgba(255,255,255,.13);color:rgba(255,255,255,.36);}
.atState .gi{width:11px;height:11px;margin-right:4px;fill:rgba(196,181,253,.7);}
.atWork{border-color:rgba(167,139,250,.3);color:rgba(196,181,253,.85);}
.atShort{border-color:rgba(248,113,113,.28);color:rgba(252,165,165,.75);}
.atGoSac{width:100%;margin-top:8px;padding:10px;border-radius:11px;cursor:pointer;
  border:1px solid rgba(74,222,128,.32);background:rgba(74,222,128,.09);color:rgba(134,239,172,.9);
  font-family:'Space Grotesk',sans-serif;font-size:11.5px;font-weight:600;}

/* ══ LE SAC : DEUX MENUS ═════════════════════════════════════════════
   Ce qu'on PORTE et ce qu'on CONSOMME n'ont ni la même durée de vie ni le
   même geste. Les mélanger dans une colonne était le défaut. */
.sacTabs{display:flex;gap:8px;margin:12px 0 16px;}
.sacTab{flex:1;padding:11px 8px;border-radius:12px;cursor:pointer;
  border:1px solid rgba(255,255,255,.1);background:rgba(255,255,255,.03);
  color:rgba(255,255,255,.45);font-family:'Space Grotesk',sans-serif;
  font-size:12.5px;font-weight:600;display:flex;align-items:center;justify-content:center;gap:7px;}
.sacTab.on{border-color:rgba(167,139,250,.42);background:rgba(167,139,250,.1);color:rgba(196,181,253,.95);}
.sacTabN{font-size:10.5px;font-weight:800;padding:1px 7px;border-radius:99px;
  background:rgba(74,222,128,.18);color:rgba(134,239,172,.95);}

/* ══ LA RÉSERVE : UNE GRILLE ═════════════════════════════════════════
   Trois tuiles par ligne, qu'on balaie d'un regard. Le détail vit dans la
   fiche : une grille se parcourt, elle ne se lit pas. */
.scDay{padding:13px 15px;border-radius:13px;margin-bottom:14px;
  border:1px dashed rgba(255,255,255,.13);background:rgba(255,255,255,.02);}
.scDay.scDayOn{border-style:solid;border-color:rgba(74,222,128,.32);background:rgba(74,222,128,.07);}
.scDayK{font-family:'Syne',sans-serif;font-size:9px;font-weight:700;letter-spacing:2.2px;
  text-transform:uppercase;color:rgba(255,255,255,.35);margin-bottom:5px;}
.scDayOn .scDayK{color:rgba(134,239,172,.8);}
.scDayV{font-size:12.5px;color:rgba(255,255,255,.5);line-height:1.4;}
.scDayOn .scDayV{color:rgba(255,255,255,.82);}

.scGrid{display:grid;grid-template-columns:repeat(3,1fr);gap:9px;}
@media(max-width:340px){.scGrid{grid-template-columns:repeat(2,1fr);}}
.scTile{position:relative;display:flex;flex-direction:column;align-items:center;gap:7px;
  padding:14px 8px 11px;border-radius:13px;cursor:pointer;
  border:1px solid rgba(129,140,248,.22);background:rgba(129,140,248,.05);}
.scTile.scPardon{border-color:rgba(167,139,250,.26);background:rgba(167,139,250,.06);}
.scTile.scOn{border-color:rgba(74,222,128,.5);background:rgba(74,222,128,.1);}
.scTile:active{transform:scale(.97);}
.scIco{width:36px;height:36px;border-radius:11px;display:flex;align-items:center;justify-content:center;
  background:rgba(255,255,255,.05);}
.scIco .gi{width:19px;height:19px;fill:rgba(196,181,253,.9);}
.scTile:not(.scPardon) .scIco .gi{fill:rgba(129,140,248,.92);}
.scNom{font-size:11px;font-weight:600;color:rgba(255,255,255,.72);text-align:center;line-height:1.25;}
.scN{position:absolute;top:7px;right:8px;font-size:10.5px;font-weight:800;
  color:rgba(134,239,172,.95);background:rgba(74,222,128,.16);
  border-radius:99px;padding:1px 6px;}
.scDot{position:absolute;top:9px;left:9px;width:7px;height:7px;border-radius:50%;background:#4ade80;}

/* La fiche : c'est ici qu'on lit */
.scFiche{text-align:left;}
.scFKind{display:flex;align-items:center;gap:6px;
  font-family:'Syne',sans-serif;font-size:9.5px;font-weight:700;letter-spacing:1.8px;
  text-transform:uppercase;color:rgba(196,181,253,.75);margin-bottom:11px;}
.scFKind .gi{width:14px;height:14px;fill:rgba(196,181,253,.85);}
.scFEff{font-size:14px;line-height:1.55;color:rgba(255,255,255,.85);}
.scFLore{font-size:12px;font-style:italic;line-height:1.5;color:rgba(255,255,255,.34);
  margin-top:11px;padding-left:11px;border-left:2px solid rgba(255,255,255,.1);}
.scFBlock{margin-top:13px;padding:11px 13px;border-radius:11px;font-size:12px;line-height:1.45;
  border:1px solid rgba(251,191,36,.26);background:rgba(251,191,36,.06);color:rgba(253,230,138,.85);}

.scEmpty{display:flex;align-items:center;gap:13px;padding:20px;border-radius:15px;
  border:1px dashed rgba(255,255,255,.13);background:rgba(255,255,255,.02);}
.scEmpty .gi{width:26px;height:26px;flex:none;fill:rgba(255,255,255,.24);}
.scEmpty b{display:block;font-size:14px;color:rgba(255,255,255,.75);margin-bottom:3px;}
.scEmpty em{font-size:11.5px;font-style:normal;color:rgba(255,255,255,.4);line-height:1.4;}
.scGo{flex:none;margin-left:auto;padding:9px 13px;border-radius:10px;cursor:pointer;
  border:1px solid rgba(167,139,250,.34);background:rgba(167,139,250,.1);
  color:rgba(196,181,253,.92);font-size:12px;font-weight:600;}

.vptApres{
  font-size:10px;color:rgba(255,255,255,.36);
  padding:2px 7px;border-radius:99px;border:1px dashed rgba(255,255,255,.14);
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:150px;
}

/* ══ CE QUE LE SOMMET MESURE (Loi III) ═══════════════════════════════
   L'or est la couleur de ce qu'il constate. Rien d'animé : ces maquettes
   vivent derrière du verre flouté, un mouvement y coûterait une repeinte
   plein écran à chaque image. */
.ldApt{margin-bottom:11px;padding:9px 10px;border-radius:10px;
  border:1px solid rgba(251,191,36,.16);background:rgba(251,191,36,.045);}
.ldAptHead{font-family:'Syne',sans-serif;font-size:7.5px;font-weight:700;
  letter-spacing:1.6px;text-transform:uppercase;color:rgba(251,191,36,.75);margin-bottom:7px;}
.ldAptRow{display:flex;align-items:center;gap:7px;margin-bottom:5px;}
.ldAptRow:last-child{margin-bottom:0;}
.ldAptRow span{flex:0 0 62px;font-size:8.5px;color:rgba(255,255,255,.6);}
.ldAptRow i{flex:1;height:3px;border-radius:2px;background:rgba(255,255,255,.08);position:relative;}
.ldAptRow i::after{content:'';position:absolute;inset:0;width:var(--v);border-radius:2px;
  background:linear-gradient(90deg,rgba(251,191,36,.5),rgba(251,191,36,.95));}
.ldAptRow b{flex:0 0 auto;font-size:8px;font-weight:700;color:rgba(251,191,36,.9);}
/* En observation : il manque des preuves, et il le dit au lieu d'inventer. */
.ldAptObs span,.ldAptObs b{color:rgba(255,255,255,.3);}
.ldAptObs i::after{background:rgba(255,255,255,.14);}

/* ══ LA FRONTIÈRE (Loi IV) ═══════════════════════════════════════════
   L'XP se déclare, l'Influence s'atteste. Les mettre l'un sous l'autre
   dit en une seconde ce qu'un paragraphe expliquerait mal. */
/* CÔTE À CÔTE, pas empilées : empilées, la ligne dorée tombait sous le pli
   du téléphone. Montrer l'XP sans montrer l'Influence dit l'inverse du
   message. Et la comparaison est plus directe à hauteur d'oeil. */
/* Le badge « JOUR 7 / 14 » est en absolu tout en haut de la carte : sans
   cette reserve, il ecrase le mot INFLUENCE. */
.ldInfl{margin:24px 0 12px;display:flex;gap:7px;}
.ldInflRow{flex:1;min-width:0;display:flex;flex-direction:column;gap:1px;
  padding:8px 10px;border-radius:10px;
  border:1px solid rgba(255,255,255,.09);background:rgba(255,255,255,.03);}
.ldInflLbl{font-family:'Syne',sans-serif;font-size:7.5px;font-weight:700;
  letter-spacing:1.3px;text-transform:uppercase;color:rgba(255,255,255,.42);}
.ldInflVal{font-family:'Syne',sans-serif;font-size:16px;font-weight:800;color:rgba(255,255,255,.9);line-height:1.1;}

.ldInflGold{border-color:rgba(251,191,36,.3);background:rgba(251,191,36,.06);}
.ldInflGold .ldInflLbl{color:rgba(251,191,36,.8);}
.ldInflGold .ldInflVal{color:#fcd34d;}

/* ══ LA PORTE DES LOIS ══════════════════════════════════════════════
   Au-dessus du voile de transition des Lois (9999), sinon elle serait
   recouverte au moment précis où elle doit trancher. */
.lgOv{
  position:fixed;inset:0;z-index:10010;
  display:flex;align-items:center;justify-content:center;padding:22px;
  background:rgba(3,4,9,.82);
  backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);
  opacity:0;transition:opacity .24s ease;
}
.lgOv.show{opacity:1;}
.lgOv.hidden{display:none;}
.lgCard{
  width:100%;max-width:430px;text-align:center;
  padding:30px 26px;border-radius:22px;
  background:linear-gradient(180deg,rgba(22,20,34,.94),rgba(10,10,18,.96));
  border:1px solid rgba(251,191,36,.20);
  box-shadow:0 30px 90px rgba(0,0,0,.6),0 0 70px rgba(251,191,36,.05);
  max-height:calc(100dvh - 44px);overflow-y:auto;
}
/* Entrée en cascade : le même geste que le tutoriel et les révélations
   d'aptitude. One-shot, composé (opacité + translation) : règle FPS tenue. */
.lgLine{opacity:0;animation:lgIn .5s cubic-bezier(.16,1,.3,1) forwards;}
@keyframes lgIn{from{opacity:0;transform:translateY(9px)}to{opacity:1;transform:translateY(0)}}
.lgKick{
  font-family:'Syne',sans-serif;font-size:10.5px;font-weight:700;
  letter-spacing:3px;text-transform:uppercase;color:#fbbf24;opacity:.9;
  margin-bottom:12px;
}
.lgTitle{
  font-family:'Syne',sans-serif;font-size:23px;font-weight:800;
  letter-spacing:-.4px;line-height:1.2;color:#fff;margin-bottom:14px;
}
.lgBody{font-size:13.5px;line-height:1.62;color:rgba(255,255,255,.62);margin-bottom:11px;}
.lgVerdict{
  font-size:13.5px;line-height:1.55;color:#fcd34d;
  margin:16px 0 20px;padding:12px 14px;
  border-left:2px solid rgba(251,191,36,.4);
  background:rgba(251,191,36,.05);border-radius:0 10px 10px 0;text-align:left;
}
.lgActs{display:flex;flex-direction:column;gap:9px;}
.lgGo{
  width:100%;padding:14px;border:none;border-radius:13px;cursor:pointer;
  font-family:'Syne',sans-serif;font-size:12.5px;font-weight:700;
  letter-spacing:1.4px;text-transform:uppercase;
  background:linear-gradient(135deg,#fbbf24,#f59e0b);color:#1a1205;
  box-shadow:0 6px 22px rgba(251,191,36,.24);
  transition:transform .18s ease,box-shadow .18s ease;
}
.lgGo:hover{transform:translateY(-2px);box-shadow:0 10px 28px rgba(251,191,36,.32);}
.lgGo:active{transform:scale(.98);}
.lgNo{
  width:100%;padding:12px;border-radius:13px;cursor:pointer;
  background:transparent;border:1px solid rgba(255,255,255,.13);
  color:rgba(255,255,255,.45);font-family:'Space Grotesk',sans-serif;
  font-size:12.5px;font-weight:600;transition:color .2s ease,border-color .2s ease;
}
.lgNo:hover{color:rgba(255,255,255,.75);border-color:rgba(255,255,255,.26);}
@media(max-height:660px){
  .lgCard{padding:22px 20px;}
  .lgTitle{font-size:20px;margin-bottom:11px;}
  .lgBody{font-size:12.5px;margin-bottom:9px;}
  .lgVerdict{margin:12px 0 15px;font-size:12.5px;}
}
@keyframes ldMoreBounce{0%,100%{transform:translateY(0)}50%{transform:translateY(4px)}}
/* ── Landing — Toggle CSS pur via checkbox #landingMoreToggle ── */
/* État initial : scroll bloqué, sections rendues et prêtes en arrière-plan */
#landingMoreToggle~.landingRoot{overflow:hidden !important;}
#landingMoreToggle~.landingRoot .ldReveal{opacity:1 !important;transform:none !important;animation:none !important;}
/* État révélé : hero caché, MODE CAROUSEL (pas de scroll natif, navigation via flèches) */
#landingMoreToggle:checked~.landingRoot{overflow:hidden !important;}
#landingMoreToggle:checked~.landingRoot .landingHero{display:none !important;}
/* Carousel : SEULES les 5 Lois sont en mode absolute, un seul visible via .ldActive */
#landingMoreToggle:checked~.landingRoot .ldSect{
  position:absolute !important;
  left:0 !important;right:0 !important;
  top:0 !important;bottom:64px !important;
  width:100% !important;
  overflow-y:auto;
  opacity:0;pointer-events:none;visibility:hidden;
  transition:opacity .55s cubic-bezier(.4,0,.2,1),filter .55s cubic-bezier(.4,0,.2,1),transform .55s cubic-bezier(.4,0,.2,1);
}
#landingMoreToggle:checked~.landingRoot .ldSect.ldActive{
  opacity:1 !important;pointer-events:auto !important;visibility:visible !important;
  z-index:5;
}
/* Bandeau compteur : strip fixe en bas, visible pendant tout le carousel */
#landingMoreToggle:checked~.landingRoot .ldCounterBand{
  position:fixed !important;
  left:0 !important;right:0 !important;bottom:0 !important;
  z-index:50 !important;
  margin:0 !important;
  background:rgba(8,8,12,.78) !important;
  backdrop-filter:blur(20px) saturate(1.2);-webkit-backdrop-filter:blur(20px) saturate(1.2);
  border-top:1px solid rgba(255,255,255,.08);
}
/* CTA final + footer : intégrés au-dessus du bandeau compteur quand la dernière Loi est active */
#landingMoreToggle:checked~.landingRoot .landingBottom{
  position:fixed !important;
  left:0 !important;right:0 !important;bottom:64px !important;
  z-index:40 !important;
  padding:24px !important;
  background:linear-gradient(180deg,rgba(8,8,12,0),rgba(8,8,12,.72) 30%) !important;
  backdrop-filter:blur(16px);-webkit-backdrop-filter:blur(16px);
  opacity:0;pointer-events:none;visibility:hidden;
  transition:opacity .5s cubic-bezier(.4,0,.2,1);
}
#landingMoreToggle:checked~.landingRoot.ldOnLast .landingBottom{
  opacity:1;pointer-events:auto;visibility:visible;
  bottom:0 !important;
  border-top:1px solid rgba(255,255,255,.08);
  padding:clamp(80px,10vh,140px) 24px clamp(56px,7vh,96px) !important;
}
/* La Loi 05 active laisse une grande respiration au-dessus du CTA final */
#landingMoreToggle:checked~.landingRoot.ldOnLast .ldSect.ldActive{
  bottom:clamp(260px,32vh,360px) !important;
}
/* Desktop peu haut (laptop) : sans ça, la liste et l'échelle lumineuse de la
   dernière Loi passaient SOUS le bandeau CTA flou (rendu cassé). On remonte
   la réserve de section, on dégonfle le bandeau et on compacte le visuel. */
@media(min-width:901px) and (max-height:760px){
  #landingMoreToggle:checked~.landingRoot.ldOnLast .ldSect.ldActive{bottom:52vh !important;padding-top:40px !important;}
  #landingMoreToggle:checked~.landingRoot.ldOnLast .landingBottom{padding:clamp(36px,5vh,64px) 24px clamp(24px,4vh,48px) !important;}
  #landingMoreToggle:checked~.landingRoot.ldOnLast .ldSect.ldActive .ldSectH2{font-size:clamp(24px,3.4vw,40px);margin-bottom:6px;}
  #landingMoreToggle:checked~.landingRoot.ldOnLast .ldSect.ldActive .ldLawList li{margin-bottom:4px;font-size:13px;}
  #landingMoreToggle:checked~.landingRoot.ldOnLast .ldSect.ldActive .ldLawSign{margin-top:4px;font-size:11.5px;}
  #landingMoreToggle:checked~.landingRoot.ldOnLast .ldSect.ldActive .ldAuraLadder{height:min(200px,28vh);padding:14px;gap:4px;max-width:240px;}
}
/* Sur la dernière Loi : bandeau compteur masqué */
#landingMoreToggle:checked~.landingRoot.ldOnLast .ldCounterBand{
  opacity:0 !important;pointer-events:none !important;visibility:hidden !important;
  transition:opacity .35s ease;
}
#landingMoreToggle:checked~.landingRoot .landingFooter{display:none !important;}

/* ─── Overlay de transition LEVELS : couvre TOUT pendant la bascule hero → sections ─── */
.ldTransOverlay{
  position:fixed;inset:0;z-index:9999;
  background:
    radial-gradient(ellipse at 50% 50%,rgba(255,255,255,.045) 0%,transparent 55%),
    linear-gradient(180deg,#0a0a18 0%,#06060f 50%,#020208 100%);
  opacity:0;pointer-events:none;
  display:flex;align-items:center;justify-content:center;
}
#landingMoreToggle:checked~.ldTransOverlay{
  animation:ldTransSweep 1.1s cubic-bezier(.4,0,.2,1) both;
}
@keyframes ldTransSweep{
  0%{opacity:1}
  60%{opacity:1}
  100%{opacity:0}
}
.ldTransInner{
  display:flex;flex-direction:column;align-items:center;gap:18px;
  opacity:0;transform:scale(.85);
}
#landingMoreToggle:checked~.ldTransOverlay .ldTransInner{
  animation:ldTransLogo 1.1s cubic-bezier(.4,0,.2,1) both;
}
@keyframes ldTransLogo{
  0%{opacity:1;transform:scale(1)}
  60%{opacity:1;transform:scale(1.05)}
  100%{opacity:0;transform:scale(1.1)}
}
.ldTransLogo{
  width:72px;height:72px;border-radius:20px;
  border:1px solid rgba(255,255,255,.18);
  background:rgba(255,255,255,.04);
  backdrop-filter:blur(12px);position:relative;
  box-shadow:0 0 60px rgba(255,255,255,.08),inset 0 0 20px rgba(255,255,255,.04);
}
.ldTransLogo::before{content:'';position:absolute;top:18px;left:16px;width:40px;height:10px;border-radius:5px;background:linear-gradient(90deg,rgba(255,255,255,.95),rgba(255,255,255,.5));}
.ldTransLogo::after{content:'';position:absolute;top:28px;left:16px;width:10px;height:26px;border-radius:5px;background:linear-gradient(180deg,rgba(255,255,255,.95),rgba(255,255,255,.5));}
.ldTransLabel{
  font-family:'Syne',sans-serif;font-size:13px;font-weight:700;
  letter-spacing:6px;color:rgba(255,255,255,.65);
  text-transform:uppercase;
}

/* ─── Boutons précédent/suivant pour naviguer entre les Lois (DA glassmorphism du site) ─── */
.ldNavBtns{
  position:fixed;right:clamp(16px,2.5vw,32px);top:50%;transform:translateY(-50%);
  display:flex;flex-direction:column;gap:10px;
  z-index:200;
  opacity:0;pointer-events:none;
  transition:opacity .45s .7s cubic-bezier(.4,0,.2,1);
}
#landingMoreToggle:checked~.landingRoot .ldNavBtns{
  opacity:1;pointer-events:auto;
}
/* ── Sélecteur de langue de la landing (FR·EN, décision user : dès la
   première page). Fond OPAQUE translucide SANS backdrop-filter : il vit
   au-dessus du canvas animé du hero, un blur là serait un re-flou par frame
   (règle FPS). L'état actif vient de html[lang], zéro état JS. ── */
.ldLangSw{
  position:fixed;top:calc(14px + env(safe-area-inset-top));right:14px;z-index:60;
  display:flex;gap:2px;padding:3px;border-radius:999px;
  background:rgba(8,8,12,.72);border:1px solid rgba(255,255,255,.14);
}
.ldLangBtn{
  border:0;background:transparent;color:rgba(255,255,255,.5);
  font-family:'Space Grotesk',sans-serif;font-size:11px;font-weight:700;
  letter-spacing:.8px;line-height:1;padding:8px 11px;border-radius:999px;cursor:pointer;
}
html[lang="fr"] .ldLangBtn[data-l="fr"],html[lang="en"] .ldLangBtn[data-l="en"]{
  background:rgba(255,255,255,.16);color:#fff;
}
.ldNavBtn{
  width:46px;height:46px;border-radius:50%;
  background:rgba(255,255,255,.05);
  border:1px solid rgba(255,255,255,.15);
  color:rgba(255,255,255,.75);
  font-size:18px;line-height:1;cursor:pointer;
  display:flex;align-items:center;justify-content:center;
  backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);
  transition:background .25s ease,border-color .25s ease,color .25s ease,transform .25s ease;
}
.ldNavBtn:hover{
  background:rgba(255,255,255,.11);
  border-color:rgba(255,255,255,.32);
  color:#fff;transform:scale(1.06);
}
.ldNavBtn:active{transform:scale(.94);}
.ldNavArrow{display:inline-block;font-size:16px;font-weight:400;line-height:1;}
/* Bouton retour vers le hero : top-left, même DA glassmorphism */
.ldBackToHero{
  position:fixed;left:clamp(16px,2.5vw,32px);top:clamp(16px,2.5vh,28px);
  z-index:200;opacity:0;pointer-events:none;
  transition:opacity .45s .7s cubic-bezier(.4,0,.2,1);
}
#landingMoreToggle:checked~.landingRoot .ldBackToHero{
  opacity:1;pointer-events:auto;
}
@media(max-width:680px){
  .ldNavBtns{right:14px;gap:8px;}
  .ldNavBtn{width:42px;height:42px;}
  .ldBackToHero{left:14px;top:14px;}
}
/* ─── Typing lettre par lettre sur les titres Lois (géré par JS, voir _ldTypeTitle) ─── */
.ldSectH2{position:relative;}
.ldSectH2.ldTwTyping::after{
  content:'';display:inline-block;
  width:.05em;height:.85em;
  background:currentColor;margin-left:.06em;vertical-align:baseline;
  animation:ldTwCursor .9s steps(1,end) infinite;
}
@keyframes ldTwCursor{0%,50%{opacity:1}51%,100%{opacity:0}}

/* ─── Déchirure (rupture entre Lois) ─── */
.ldTear{
  position:fixed;inset:0;z-index:300;pointer-events:none;
  opacity:0;overflow:hidden;
}
.ldTear.ldTearGo{opacity:1;}
.ldTearTop,.ldTearBot{
  position:absolute;left:-3%;right:-3%;height:58%;
  background:rgba(6,6,12,.97);
  backdrop-filter:blur(32px) saturate(1.1);-webkit-backdrop-filter:blur(32px) saturate(1.1);
  box-shadow:0 0 60px rgba(0,0,0,.6);
}
.ldTearTop{
  top:0;transform:translateY(-105%);
  clip-path:polygon(0 0,100% 0,100% 88%,82% 96%,68% 90%,55% 97%,42% 89%,28% 95%,15% 88%,0 96%);
  -webkit-clip-path:polygon(0 0,100% 0,100% 88%,82% 96%,68% 90%,55% 97%,42% 89%,28% 95%,15% 88%,0 96%);
}
.ldTearBot{
  bottom:0;transform:translateY(105%);
  clip-path:polygon(0 12%,18% 5%,32% 11%,45% 4%,58% 10%,72% 3%,86% 9%,100% 4%,100% 100%,0 100%);
  -webkit-clip-path:polygon(0 12%,18% 5%,32% 11%,45% 4%,58% 10%,72% 3%,86% 9%,100% 4%,100% 100%,0 100%);
}
.ldTearFlash{
  position:absolute;left:0;right:0;top:50%;height:2px;
  background:linear-gradient(90deg,transparent 0%,rgba(255,255,255,.9) 50%,transparent 100%);
  transform:translateY(-50%) scaleX(0);
  filter:blur(1px);
  box-shadow:0 0 18px rgba(255,255,255,.6);
}
.ldTear.ldTearGo .ldTearTop{animation:ldTearMoveTop .68s cubic-bezier(.55,0,.45,1) both;}
.ldTear.ldTearGo .ldTearBot{animation:ldTearMoveBot .68s cubic-bezier(.55,0,.45,1) both;}
.ldTear.ldTearGo .ldTearFlash{animation:ldTearFlashAnim .68s cubic-bezier(.55,0,.45,1) both;}
@keyframes ldTearMoveTop{
  0%{transform:translateY(-105%)}
  42%{transform:translateY(0)}
  58%{transform:translateY(0)}
  100%{transform:translateY(-105%)}
}
@keyframes ldTearMoveBot{
  0%{transform:translateY(105%)}
  42%{transform:translateY(0)}
  58%{transform:translateY(0)}
  100%{transform:translateY(105%)}
}
@keyframes ldTearFlashAnim{
  0%,38%{transform:translateY(-50%) scaleX(0);opacity:0}
  50%{transform:translateY(-50%) scaleX(1);opacity:1}
  62%,100%{transform:translateY(-50%) scaleX(1);opacity:0}
}
@keyframes ldRevealFade{0%{opacity:0;transform:translateY(18px)}100%{opacity:1;transform:none}}
@keyframes ldRevealFade{0%{opacity:0;transform:translateY(18px)}100%{opacity:1;transform:none}}

@keyframes ldFadeUp{0%{opacity:0;transform:translateY(40px) scale(.97)}60%{opacity:1;transform:translateY(-4px) scale(1)}100%{opacity:1;transform:translateY(0) scale(1)}}
@keyframes ldScrollPulse{0%,100%{opacity:.3;transform:scaleY(1)}50%{opacity:.8;transform:scaleY(1.1)}}

/* ═══ LANDING SECTIONS — Impactful scroll sections ═══ */
.ldSect{
  position:relative;z-index:1;
  padding:clamp(80px,12vh,140px) clamp(20px,5vw,80px);
  background:rgba(8,8,12,.72);
  backdrop-filter:blur(20px) saturate(1.2);-webkit-backdrop-filter:blur(20px) saturate(1.2);
  overflow:hidden;
}
.ldSectAlt{background:rgba(6,6,14,.68);}

/* ── Ambience par Loi : numéro géant en arrière-plan, glow doux, particules ── */
.ldSectAmbience{position:absolute;inset:0;pointer-events:none;z-index:0;overflow:hidden;}
.ldSectBigNum{
  position:absolute;
  top:50%;left:50%;transform:translate(-50%,-50%);
  font-family:'Syne',sans-serif;font-weight:800;
  font-size:clamp(280px,42vw,640px);line-height:.9;letter-spacing:-.05em;
  color:transparent;
  -webkit-text-stroke:1px rgba(255,255,255,.045);
  text-stroke:1px rgba(255,255,255,.045);
  opacity:0;
  transition:opacity 1s cubic-bezier(.22,.61,.36,1),transform 1s cubic-bezier(.22,.61,.36,1);
  user-select:none;
}
.ldSectAlt .ldSectBigNum{
  -webkit-text-stroke-color:rgba(255,255,255,.035);
  text-stroke-color:rgba(255,255,255,.035);
}
.ldSect.ldActive .ldSectBigNum{
  opacity:1;
  animation:ldBigNumFloat 12s ease-in-out infinite;
}
@keyframes ldBigNumFloat{
  0%,100%{transform:translate(-50%,-50%) translateY(0) rotate(0deg);}
  50%{transform:translate(-50%,-50%) translateY(-14px) rotate(.4deg);}
}
.ldSectGlow{
  position:absolute;top:50%;left:50%;
  width:80vw;height:80vw;max-width:1100px;max-height:1100px;
  transform:translate(-50%,-50%) scale(.85);
  background:radial-gradient(circle at center,
    rgba(255,255,255,.05) 0%,
    rgba(255,255,255,.025) 25%,
    transparent 60%);
  opacity:0;
  transition:opacity 1.4s cubic-bezier(.22,.61,.36,1),transform 1.4s cubic-bezier(.22,.61,.36,1);
}
.ldSect.ldActive .ldSectGlow{opacity:1;transform:translate(-50%,-50%) scale(1);}
.ldSectAlt .ldSectGlow{
  background:radial-gradient(circle at center,
    rgba(180,200,255,.05) 0%,
    rgba(180,200,255,.022) 28%,
    transparent 62%);
}
.ldSectGrain{
  position:absolute;inset:0;
  opacity:0;
  background-image:
    radial-gradient(circle at 20% 30%, rgba(255,255,255,.02) 0%, transparent 30%),
    radial-gradient(circle at 80% 60%, rgba(255,255,255,.015) 0%, transparent 30%),
    radial-gradient(circle at 50% 80%, rgba(255,255,255,.018) 0%, transparent 30%);
  transition:opacity 1.2s ease;
}
.ldSect.ldActive .ldSectGrain{opacity:1;}

/* Particules flottantes */
.ldSectParticles{position:absolute;inset:0;}
.ldSectParticles span{
  position:absolute;
  left:var(--x);top:var(--y);
  width:calc(3px * var(--s));height:calc(3px * var(--s));
  border-radius:50%;
  background:rgba(255,255,255,.5);
  box-shadow:0 0 8px rgba(255,255,255,.4),0 0 16px rgba(255,255,255,.2);
  opacity:0;
  transform:translateY(20px);
}
.ldSect.ldActive .ldSectParticles span{
  animation:ldPartFloat 5.5s ease-in-out var(--d) infinite;
}
@keyframes ldPartFloat{
  0%{opacity:0;transform:translateY(20px) scale(.5);}
  20%{opacity:.9;transform:translateY(0) scale(1);}
  50%{opacity:.7;transform:translateY(-16px) scale(1);}
  80%{opacity:.5;transform:translateY(-28px) scale(.9);}
  100%{opacity:0;transform:translateY(-40px) scale(.4);}
}

.ldSectInner{position:relative;z-index:2;}

@media(max-width:900px){
  .ldSectBigNum{font-size:clamp(220px,55vw,440px);}
}

/* ─── Viewfinder corners : Le Sommet observe (signature détail) ─── */
.ldSectFrame{position:absolute;inset:clamp(20px,3vh,40px) clamp(20px,3vw,48px);pointer-events:none;z-index:1;opacity:0;transition:opacity .9s cubic-bezier(.22,.61,.36,1) .25s;}
.ldSect.ldActive .ldSectFrame{opacity:1;}
.ldSectFrame::before,.ldSectFrame::after,
.ldSectFrame>span::before,.ldSectFrame>span::after{
  content:'';position:absolute;width:22px;height:22px;
  border:1px solid rgba(255,255,255,.18);
}
.ldSectFrame::before{top:0;left:0;border-right:none;border-bottom:none;}
.ldSectFrame::after{top:0;right:0;border-left:none;border-bottom:none;}
.ldSectFrame>span::before{bottom:0;left:0;border-right:none;border-top:none;}
.ldSectFrame>span::after{bottom:0;right:0;border-left:none;border-top:none;}

/* ─── Stagger reveal des enfants quand la Loi devient active ─── */
/* Le titre H2 est EXCLU du stagger : son reveal est l'animation de typing JS */
.ldSect .ldSectTag,
.ldSect .ldLawList,
.ldSect .ldLawSign,
.ldSect .ldSectStats,
.ldSect .ldSectP,
.ldSect .ldSectFeats,
.ldSect .landingDisclaimer{
  opacity:0;transform:translateY(14px);
  transition:opacity .65s cubic-bezier(.22,.61,.36,1),transform .65s cubic-bezier(.22,.61,.36,1);
}
/* Le visual ne fait QUE fade (pas de translateY) pour ne pas faire bouger les images */
.ldSect .ldSectVisual{
  opacity:0;
  transition:opacity .75s cubic-bezier(.22,.61,.36,1);
}
.ldSect.ldActive .ldSectTag{transition-delay:.05s;opacity:1;transform:none;}
.ldSect.ldActive .ldLawList{transition-delay:.85s;opacity:1;transform:none;}
.ldSect.ldActive .ldSectP{transition-delay:.85s;opacity:1;transform:none;}
.ldSect.ldActive .ldSectStats{transition-delay:.95s;opacity:1;transform:none;}
.ldSect.ldActive .ldSectFeats{transition-delay:.95s;opacity:1;transform:none;}
.ldSect.ldActive .landingDisclaimer{transition-delay:1.0s;opacity:1;transform:none;}
.ldSect.ldActive .ldLawSign{transition-delay:1.1s;opacity:.7;transform:none;}
.ldSect.ldActive .ldSectVisual{transition-delay:.95s;opacity:1;}

/* ─── Transition cinématique : remplace la déchirure brute ─── */
.ldSect{transition:opacity .5s cubic-bezier(.4,0,.2,1),filter .5s cubic-bezier(.4,0,.2,1),transform .5s cubic-bezier(.4,0,.2,1);}
.ldSect.ldLeaving{
  filter:blur(8px) saturate(.7);
  transform:scale(1.04);
  opacity:0 !important;
}
.ldSect.ldEntering{
  filter:blur(6px);
  transform:scale(.985);
  opacity:0;
}
.ldSect.ldEntering.ldActive{
  filter:blur(0);
  transform:scale(1);
  opacity:1;
}

/* ─── Index vertical des Lois : 5 marques fixes, contexte de navigation ─── */
.ldLoiIndex{
  position:fixed;left:clamp(14px,2vw,24px);top:50%;transform:translateY(-50%);
  display:flex;flex-direction:column;gap:14px;align-items:center;
  z-index:60;
  opacity:0;pointer-events:none;
  transition:opacity .6s cubic-bezier(.22,.61,.36,1);
}
#landingMoreToggle:checked~.landingRoot .ldLoiIndex{opacity:1;}
.ldLoiIndexMark{
  position:relative;
  width:1px;height:18px;background:rgba(255,255,255,.18);
  transition:height .5s cubic-bezier(.22,.61,.36,1),background .5s cubic-bezier(.22,.61,.36,1);
  cursor:pointer;
}
.ldLoiIndexMark::after{
  content:attr(data-num);
  position:absolute;left:14px;top:50%;transform:translateY(-50%);
  font-family:'Syne',sans-serif;font-size:10px;font-weight:700;
  letter-spacing:2px;color:rgba(255,255,255,.5);
  opacity:0;transition:opacity .4s ease;
  pointer-events:none;
}
.ldLoiIndexMark.active{height:42px;background:rgba(255,255,255,.85);}
.ldLoiIndexMark.active::after{opacity:1;color:rgba(255,255,255,.9);}
.ldLoiIndexMark:hover{background:rgba(255,255,255,.4);}
.ldLoiIndexMark:hover::after{opacity:.7;}
@media(max-width:900px){
  .ldLoiIndex{left:clamp(8px,2vw,16px);gap:10px;}
  .ldLoiIndexMark{height:14px;}
  .ldLoiIndexMark.active{height:32px;}
  .ldLoiIndexMark::after{display:none;}
}

/* ─── Sommet aphorisms : ldLawSign refinement (gardé tel quel mais ajouté à chaque Loi) ─── */
.ldLawSign{
  margin-top:24px;padding-top:18px;
  border-top:1px solid rgba(255,255,255,.06);
  font-family:'Syne',sans-serif;font-style:italic;font-weight:500;
  font-size:13px;letter-spacing:.3px;
  color:rgba(255,255,255,.42);
  max-width:380px;
}
.ldSectInner{
  max-width:1100px;margin:0 auto;
  display:grid;grid-template-columns:1fr 1fr;gap:clamp(40px,6vw,80px);
  align-items:start;
}
.ldSectVisual{align-self:center;}
.ldSectReverse{direction:rtl;}
.ldSectReverse>*{direction:ltr;}

.ldSectTag{
  font-size:10px;letter-spacing:4px;text-transform:uppercase;
  color:rgba(255,255,255,.25);margin-bottom:18px;
  font-weight:600;
}
.ldSectH2{
  font-family:'Syne',sans-serif;font-size:clamp(28px,3.8vw,44px);font-weight:800;
  letter-spacing:-1.6px;color:#fff;margin-bottom:20px;line-height:1.06;
  position:relative;z-index:3;
  /* Réserve la hauteur finale pour éviter que le typing fasse descendre l'écran */
  min-height:calc(1.06em * 3);
}
.ldSectH2.ldTwTyping::after{
  content:'';display:inline-block;
  width:.06em;height:.85em;
  background:currentColor;margin-left:.04em;vertical-align:baseline;
  animation:ldTwCursor .85s steps(1,end) infinite;
}
.ldSectH2.ldTwDone::after{content:none;}
@keyframes ldTwCursor{0%,50%{opacity:1}51%,100%{opacity:0}}
.ldAccent{
  background:linear-gradient(135deg,rgba(255,255,255,.95),rgba(255,255,255,.45));
  -webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text;
}
.ldSectP{
  font-size:clamp(14px,1.5vw,16px);color:rgba(255,255,255,.4);line-height:1.75;
  max-width:460px;margin-bottom:32px;
}

/* Stats row */
.ldSectStats{display:flex;gap:clamp(24px,3vw,48px);margin-top:8px;}
.ldStat{display:flex;flex-direction:column;gap:4px;}
.ldStatNum{font-family:'Syne',sans-serif;font-size:clamp(28px,3vw,40px);font-weight:800;color:#fff;line-height:1;}
.ldStatLabel{font-size:11px;color:rgba(255,255,255,.3);letter-spacing:.5px;}

/* Feature list */
.ldSectFeats{display:flex;flex-direction:column;gap:14px;margin-top:8px;}
.ldFeat{display:flex;align-items:center;gap:12px;font-size:13px;color:rgba(255,255,255,.5);}
.ldFeatIcon{font-size:18px;flex-shrink:0;width:28px;text-align:center;}

/* ── Phone mockup — floating device ── */
.ldMockPhone{
  width:280px;max-width:100%;margin:0 auto;
  border-radius:28px;overflow:hidden;
  border:1px solid rgba(255,255,255,.1);
  background:rgba(12,12,18,.95);
  box-shadow:
    0 40px 80px rgba(0,0,0,.6),
    0 0 0 1px rgba(255,255,255,.04),
    0 0 100px rgba(255,255,255,.02);
  transform:perspective(800px) rotateY(-4deg) rotateX(2deg);
  transition:transform .5s cubic-bezier(.16,1,.3,1);
}
.ldMockPhone:hover{transform:perspective(800px) rotateY(0deg) rotateX(0deg);}
/* Stack 2 phones (dashboard principal + mini calendrier flottant en Loi 01) */
.ldMockStack{position:relative;display:flex;justify-content:center;align-items:flex-start;}
.ldMockStack .ldMockPhone:first-child{margin:0;}
.ldMockPhoneSm{
  width:180px !important;
  position:absolute;right:-12px;bottom:-28px;
  transform:perspective(800px) rotateY(8deg) rotateX(-3deg) translateZ(20px) !important;
  z-index:2;
}
.ldMockPhoneSm:hover{transform:perspective(800px) rotateY(4deg) rotateX(-1deg) translateZ(20px) !important;}
@media(max-width:900px){
  .ldMockPhoneSm{width:140px !important;right:-4px;bottom:-20px;}
}
.ldMockNotch{
  height:24px;display:flex;align-items:center;justify-content:center;
  background:rgba(0,0,0,.3);
}
.ldMockNotch::after{content:'';width:60px;height:5px;border-radius:3px;background:rgba(255,255,255,.1);}
.ldMockScreen{
  padding:16px 14px 20px;
  display:flex;flex-direction:column;gap:10px;
}

/* Mock HUD */
.ldMockHud{
  display:flex;align-items:center;justify-content:space-between;
  padding:12px 14px;border-radius:12px;
  border:1px solid rgba(255,255,255,.06);background:rgba(255,255,255,.02);
}
.ldMockLvl{font-family:'Syne',sans-serif;font-size:18px;font-weight:800;color:#fff;}
.ldMockTtl{font-size:9px;color:rgba(255,255,255,.35);letter-spacing:.5px;}
.ldMockPills{display:flex;gap:6px;}
.ldPill{
  padding:4px 8px;border-radius:7px;font-size:10px;font-weight:600;
  border:1px solid rgba(255,255,255,.06);background:rgba(255,255,255,.03);
  color:rgba(255,255,255,.45);white-space:nowrap;
}
.ldPill.xp{color:rgba(34,197,94,.8);border-color:rgba(34,197,94,.15);}
.ldPill.str{color:rgba(251,191,36,.8);border-color:rgba(251,191,36,.15);}

/* Mock XP bar */
.ldMockBar{height:5px;border-radius:3px;background:rgba(255,255,255,.06);overflow:hidden;}
.ldMockBarFill{height:100%;width:0%;border-radius:3px;background:linear-gradient(90deg,rgba(255,255,255,.6),rgba(255,255,255,.2));transition:width 1.5s cubic-bezier(.16,1,.3,1);}

/* Mock rows */
.ldMockRow{
  display:flex;align-items:center;gap:10px;
  padding:10px 12px;border-radius:10px;
  border:1px solid rgba(255,255,255,.05);background:rgba(255,255,255,.01);
  font-size:11px;
}
.ldMockRow.done{background:rgba(34,197,94,.04);border-color:rgba(34,197,94,.1);}
.ldMockChk{
  width:18px;height:18px;border-radius:6px;flex-shrink:0;
  border:1.5px solid rgba(255,255,255,.12);
  display:flex;align-items:center;justify-content:center;
  font-size:10px;color:transparent;
}
.ldMockRow.done .ldMockChk{border-color:rgba(34,197,94,.5);background:rgba(34,197,94,.15);color:rgba(34,197,94,.9);}
.ldMockTxt{flex:1;color:rgba(255,255,255,.5);}
.ldMockRow.done .ldMockTxt{color:rgba(255,255,255,.25);text-decoration:line-through;}
.ldMockXp{color:rgba(255,255,255,.18);font-weight:600;font-size:10px;}
.ldMockRow.done .ldMockXp{color:rgba(34,197,94,.5);}

/* ─── Mockup Historique fidèle au screen Historique de Levels (Loi 01) ─── */
.ldMockHist{padding:16px 14px 20px;display:flex;flex-direction:column;gap:12px;}
.ldMockHistHead{
  display:flex;align-items:baseline;justify-content:space-between;
  padding-bottom:10px;border-bottom:1px solid rgba(255,255,255,.06);
}
.ldMockHistTitle{
  font-family:'Syne',sans-serif;font-size:16px;font-weight:800;color:#fff;letter-spacing:-.4px;
}
.ldMockHistMonth{
  font-size:10px;letter-spacing:1.4px;text-transform:uppercase;
  color:rgba(255,255,255,.4);
}
.ldMockHistDows{
  display:grid;grid-template-columns:repeat(7,1fr);gap:4px;
  font-size:8px;letter-spacing:.8px;color:rgba(255,255,255,.3);text-align:center;text-transform:uppercase;
}
.ldMockHistGrid{
  display:grid;grid-template-columns:repeat(7,1fr);gap:4px;
}
.ldMockHistDay{
  aspect-ratio:1;border-radius:6px;
  background:rgba(255,255,255,.025);
  border:1px solid rgba(255,255,255,.04);
  display:flex;align-items:center;justify-content:center;
  font-size:9px;font-weight:600;color:rgba(255,255,255,.3);
}
.ldMockHistDay.g{
  background:rgba(34,197,94,.22);
  border-color:rgba(34,197,94,.38);
  color:rgba(180,255,200,.9);
}
.ldMockHistDay.r{
  background:rgba(239,68,68,.3);
  border-color:rgba(239,68,68,.55);
  color:rgba(255,200,200,.95);
  box-shadow:0 0 12px rgba(239,68,68,.28) inset;
}
.ldMockHistDay.s{
  background:rgba(255,255,255,.05);
  border-color:rgba(255,255,255,.1);
  color:rgba(255,255,255,.45);
}
.ldMockHistDay.f{
  background:rgba(96,165,250,.08);
  border-color:rgba(96,165,250,.18);
  color:rgba(160,200,255,.4);
}
.ldMockHistDay.today{
  background:rgba(255,255,255,.07);
  border-color:rgba(255,255,255,.4);
  color:#fff;
  box-shadow:0 0 0 1px rgba(255,255,255,.15);
}
.ldMockHistLegend{
  display:flex;justify-content:space-around;align-items:center;
  padding-top:10px;border-top:1px solid rgba(255,255,255,.06);
  font-size:9px;color:rgba(255,255,255,.5);letter-spacing:.3px;
}
.ldMockHistLegend span{display:inline-flex;align-items:center;gap:5px;}
.ldMockHistLegend .lhL{
  width:9px;height:9px;border-radius:2px;display:inline-block;
}
.ldMockHistLegend .lhL.g{background:rgba(34,197,94,.55);}
.ldMockHistLegend .lhL.r{background:rgba(239,68,68,.65);}
.ldMockHistLegend .lhL.s{background:rgba(255,255,255,.25);}

/* ── Vision mockup ── */
.ldMockVision{gap:12px;}
.ldVisionTabs{display:flex;gap:4px;}
.ldVTab{
  padding:6px 12px;border-radius:8px;font-size:10px;font-weight:600;
  color:rgba(255,255,255,.3);background:rgba(255,255,255,.03);
  border:1px solid rgba(255,255,255,.04);
}
.ldVTab.active{color:#fff;background:rgba(255,255,255,.08);border-color:rgba(255,255,255,.12);}
.ldVisionCard{
  padding:14px;border-radius:12px;
  border:1px solid rgba(255,255,255,.06);background:rgba(255,255,255,.02);
  margin-bottom:6px;
}
.ldVisionEmoji{font-size:20px;margin-bottom:6px;}
.ldVisionGoal{font-size:12px;color:rgba(255,255,255,.6);margin-bottom:10px;font-weight:500;}
.ldVisionBarTrack{height:4px;border-radius:2px;background:rgba(255,255,255,.06);}
.ldVisionBarFill{height:100%;border-radius:2px;background:linear-gradient(90deg,rgba(34,197,94,.7),rgba(34,197,94,.3));}

/* ── Stats mockup ── */
.ldMockStats{gap:16px;align-items:center;}
.ldCalGrid{
  display:grid;grid-template-columns:repeat(7,1fr);gap:4px;
  padding:8px;
}
.ldCalDay{
  width:100%;aspect-ratio:1;border-radius:4px;
  background:rgba(255,255,255,.04);
}
.ldCalDay.g{background:rgba(34,197,94,.25);}
.ldCalDay.r{background:rgba(239,68,68,.25);}
.ldCalDay.b{background:rgba(56,189,248,.32);} /* jour de repos : le bleu MANQUAIT (invisible avant) */
.ldCalDay.y{background:rgba(251,191,36,.3);}
/* Pastilles de couleur INLINE dans la légende « Vert gagné / Rouge perdu / Bleu mérité »
   pour que le sens soit clair même sans regarder le calendrier (retour user) */
.ldSw{display:inline-block;width:11px;height:11px;border-radius:3px;vertical-align:-1px;margin-right:3px;}
.ldSw.g{background:rgba(34,197,94,.85);}
.ldSw.r{background:rgba(239,68,68,.85);}
.ldSw.b{background:rgba(56,189,248,.9);}
.ldRadar{width:80%;max-width:180px;margin:0 auto;display:block;}

/* ── Extras grid ── */
.ldExtrasGrid{
  max-width:1100px;margin:0 auto;
  display:grid;grid-template-columns:repeat(4,1fr);gap:1px;
  background:rgba(255,255,255,.05);border-radius:18px;overflow:hidden;
}
.ldExtra{
  background:rgba(8,8,12,.55);padding:clamp(28px,3vw,40px) clamp(20px,2vw,28px);
  transition:background .3s ease;position:relative;
}
.ldExtra:hover{background:rgba(255,255,255,.03);}
.ldExtra::after{
  content:'';position:absolute;top:0;left:0;width:0;height:2px;
  background:rgba(255,255,255,.4);transition:width .4s cubic-bezier(.16,1,.3,1);
}
.ldExtra:hover::after{width:100%;}
.ldExtraIcon{font-size:24px;display:block;margin-bottom:14px;opacity:.85;}
.ldExtraTitle{font-size:14px;font-weight:700;color:rgba(255,255,255,.88);margin-bottom:8px;letter-spacing:-.3px;}
.ldExtraDesc{font-size:12px;color:rgba(255,255,255,.35);line-height:1.6;}

/* Bottom CTA */
.landingBottom{
  position:relative;z-index:1;
  padding:clamp(80px,12vh,140px) 24px calc(80px + env(safe-area-inset-bottom,0px));text-align:center;
  background:rgba(8,8,12,.72);backdrop-filter:blur(20px) saturate(1.2);-webkit-backdrop-filter:blur(20px) saturate(1.2);overflow:visible;
}
.ldBottomGlow{
  position:absolute;top:-60%;left:50%;transform:translateX(-50%);
  width:600px;height:400px;
  background:radial-gradient(ellipse,rgba(255,255,255,.03),transparent 70%);
  pointer-events:none;
}
.landingBottomTitle{
  font-family:'Syne',sans-serif;font-size:clamp(32px,5vw,52px);font-weight:800;
  letter-spacing:-2px;color:#fff;margin-bottom:16px;line-height:1;
  position:relative;
}
.landingBottomSub{font-size:15px;color:rgba(255,255,255,.35);margin-bottom:36px;line-height:1.6;position:relative;}
/* ── FAQ landing (miroir visible du FAQPage, SEO/GEO) ── */
.ldFaqLink{
  display:block;margin:22px auto 0;padding:8px 14px;background:none;border:none;cursor:pointer;
  font-family:'Space Grotesk',sans-serif;font-size:11px;font-weight:700;letter-spacing:1.6px;text-transform:uppercase;
  color:rgba(255,255,255,.35);text-decoration:underline;text-underline-offset:4px;text-decoration-color:rgba(255,255,255,.15);
  transition:color .2s ease;position:relative;
}
.ldFaqLink:hover{color:rgba(255,255,255,.7);}
.ldFaq{position:fixed;inset:0;z-index:90;display:none;background:rgba(8,8,12,.88);backdrop-filter:blur(24px);-webkit-backdrop-filter:blur(24px);overflow-y:auto;padding:clamp(24px,6vh,64px) 20px;}
.ldFaq.show{display:flex;align-items:flex-start;justify-content:center;}
.ldFaqCard{position:relative;width:100%;max-width:640px;margin:auto;padding:28px 26px 20px;border-radius:22px;border:1px solid rgba(255,255,255,.1);background:rgba(14,14,22,.92);}
.ldFaqClose{position:absolute;top:14px;right:14px;width:34px;height:34px;border-radius:50%;border:1px solid rgba(255,255,255,.14);background:rgba(255,255,255,.04);color:rgba(255,255,255,.7);font-size:14px;cursor:pointer;}
.ldFaqTitle{font-family:'Syne',sans-serif;font-size:22px;font-weight:800;letter-spacing:-.5px;color:#fff;margin-bottom:18px;}
.ldFaqItem{border-bottom:1px solid rgba(255,255,255,.07);padding:4px 0;}
.ldFaqItem summary{cursor:pointer;padding:12px 4px;font-family:'Space Grotesk',sans-serif;font-size:14px;font-weight:700;color:rgba(255,255,255,.85);list-style:none;position:relative;padding-right:26px;}
.ldFaqItem summary::-webkit-details-marker{display:none;}
.ldFaqItem summary::after{content:'+';position:absolute;right:4px;top:50%;transform:translateY(-50%);color:rgba(255,255,255,.35);font-size:17px;transition:transform .2s ease;}
.ldFaqItem[open] summary::after{transform:translateY(-50%) rotate(45deg);}
.ldFaqItem p{padding:0 4px 14px;font-size:13px;line-height:1.65;color:rgba(255,255,255,.55);font-family:'Space Grotesk',sans-serif;}

.landingFooter{
  padding:20px clamp(24px,5vw,80px) calc(20px + env(safe-area-inset-bottom,0px));
  border-top:1px solid rgba(255,255,255,.05);
  display:flex;justify-content:space-between;align-items:center;
  font-size:11px;color:rgba(255,255,255,.2);letter-spacing:.5px;
  background:rgba(6,6,10,.75);backdrop-filter:blur(16px);-webkit-backdrop-filter:blur(16px);
}
.landingFooterLogo{
  font-family:'Syne',sans-serif;font-weight:800;font-size:14px;
  color:rgba(255,255,255,.15);letter-spacing:2px;
}

/* Scroll reveal */
.ldReveal{opacity:0;transform:translateY(28px);transition:opacity .7s cubic-bezier(.16,1,.3,1),transform .7s cubic-bezier(.16,1,.3,1);}
.ldReveal.ldVisible{opacity:1;transform:none;}
.ldDelay1{transition-delay:.1s;}.ldDelay2{transition-delay:.2s;}.ldDelay3{transition-delay:.3s;}
.ldDelay4{transition-delay:.4s;}.ldDelay5{transition-delay:.5s;}.ldDelay6{transition-delay:.6s;}

/* ── Landing — Lois (Sommet voice) ── */
.ldSectTag{
  text-transform:uppercase;letter-spacing:2.5px;
}
.ldLawList{
  list-style:none;padding:0;margin:18px 0 22px;
  display:flex;flex-direction:column;gap:14px;
}
.ldLawList li{
  font-size:clamp(15px,1.55vw,17px);line-height:1.65;
  color:rgba(255,255,255,.78);
  padding-left:18px;position:relative;
}
.ldLawList li::before{
  content:'';position:absolute;left:0;top:.7em;
  width:8px;height:1px;background:rgba(255,255,255,.35);
}
.ldLawList li strong{color:#fff;font-weight:700;}
.ldLawSign{
  font-style:italic;font-size:13px;color:rgba(255,255,255,.45);
  letter-spacing:.3px;margin-top:8px;
}

/* ── Paysage téléphone : l'app se joue en portrait ── */
.rotateOv{
  display:none;position:fixed;inset:0;z-index:100000;
  background:#08080f;
  background-image:radial-gradient(ellipse at 50% 0%,#181830 0%,#08080f 60%);
  flex-direction:column;align-items:center;justify-content:center;gap:14px;
  text-align:center;padding:20px;
}
@media (orientation:landscape) and (pointer:coarse) and (max-height:540px){
  .rotateOv{display:flex;}
}
.rotateOv.force{display:flex;}
.rotatePhone{
  width:52px;height:84px;border-radius:12px;
  border:3px solid rgba(255,255,255,.85);
  position:relative;
  animation:rotHint 2.2s cubic-bezier(.4,0,.2,1) infinite;
}
.rotatePhone::after{
  content:'';position:absolute;bottom:7px;left:50%;transform:translateX(-50%);
  width:14px;height:3px;border-radius:2px;background:rgba(255,255,255,.5);
}
@keyframes rotHint{
  0%,20%{transform:rotate(90deg);}
  55%,85%{transform:rotate(0deg);}
  100%{transform:rotate(0deg);opacity:1;}
}
.rotateTitle{
  font-family:'Syne',sans-serif;font-weight:800;font-size:20px;color:#fff;letter-spacing:-.3px;
}
.rotateSub{
  font-family:'Space Grotesk',sans-serif;font-size:13px;color:rgba(255,255,255,.5);
}

/* ── Wordmark : le EV de Levels en dégradé signature (réf Biabble) ── */
.evMark{
  background:linear-gradient(110deg,#60a5fa,#a78bfa 55%,#f472b6);
  -webkit-background-clip:text;background-clip:text;
  -webkit-text-fill-color:transparent;color:transparent;
}

/* ── Landing : icônes RPG dans les mocks ── */
.ldGi{width:12px;height:12px;fill:#fbbf24;vertical-align:-1px;margin-right:4px;display:inline-block;}
.ldGiVision{width:22px;height:22px;fill:url(#giGrad);margin:0;}
.ldVisionEmoji{display:flex;align-items:center;}

/* ── Landing : Loi VI, la salle des mentors ── */
.ldMentorHall{
  width:100%;max-width:520px;display:flex;flex-direction:column;gap:14px;
}
.ldMentorGrid{
  display:grid;grid-template-columns:repeat(3,1fr);gap:10px 8px;
}
.ldMCell{
  display:flex;flex-direction:column;align-items:center;gap:5px;
  opacity:0;transform:translateY(12px);
  transition:opacity .6s cubic-bezier(.22,.61,.36,1),transform .6s cubic-bezier(.22,.61,.36,1);
}
.ldSect.ldActive .ldMCell{
  opacity:1;transform:none;
  transition-delay:calc(.9s + var(--i)*.09s);
}
.ldMFace{
  width:clamp(52px,6vw,68px);height:clamp(52px,6vw,68px);
  border-radius:50%;padding:2.5px;
  background:linear-gradient(135deg,var(--m1),var(--m2));
  box-shadow:0 6px 22px -10px var(--m2);
  transition:transform .35s cubic-bezier(.22,1.4,.36,1),box-shadow .35s ease;
}
.ldMCell:hover .ldMFace{transform:translateY(-4px) scale(1.05);box-shadow:0 14px 34px -10px var(--m2);}
.ldMFace svg{width:100%;height:100%;display:block;border-radius:50%;background:#0a0a12;}
.ldMName{
  font-family:'Syne',sans-serif;font-weight:800;font-size:12.5px;color:#fff;
  letter-spacing:-.2px;line-height:1;margin-top:3px;white-space:nowrap;
}
.ldMSchool{
  font-size:9px;font-weight:700;letter-spacing:1.6px;text-transform:uppercase;
  background:linear-gradient(90deg,var(--m1),var(--m2));
  -webkit-background-clip:text;background-clip:text;color:transparent;
}
.ldChatMock{
  display:flex;align-items:flex-end;gap:10px;
}
.ldChatAva{
  width:34px;height:34px;flex-shrink:0;border-radius:50%;padding:2px;
  background:linear-gradient(135deg,var(--m1),var(--m2));
}
.ldChatAva svg{width:100%;height:100%;display:block;border-radius:50%;background:#0a0a12;}
.ldChatBubble{
  background:rgba(255,255,255,.05);border:1px solid rgba(255,255,255,.1);
  border-radius:16px 16px 16px 4px;padding:12px 16px;
  backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);
}
.ldChatQuote{
  font-family:'Syne',sans-serif;font-weight:700;font-size:14px;color:#fff;
  letter-spacing:-.2px;line-height:1.35;
}
.ldChatMeta{
  font-size:10px;color:rgba(255,255,255,.4);margin-top:5px;letter-spacing:.4px;
}
.ldProgStrip{
  display:flex;flex-wrap:wrap;gap:7px;
}
.ldProgChip{
  font-size:10px;font-weight:700;letter-spacing:.5px;
  color:rgba(255,255,255,.62);
  border:1px solid rgba(255,255,255,.13);border-radius:99px;
  padding:5px 11px;white-space:nowrap;
  background:rgba(255,255,255,.03);
}
@media(max-width:720px){
  .ldMentorHall{max-width:400px;margin:0 auto;gap:14px;}
  .ldMentorGrid{gap:10px 6px;}
  .ldChatQuote{font-size:12.5px;}
}

/* ── Landing — Hero typewriter ── */
.landingTitleTw{
  opacity:1;animation:none;
  display:flex;flex-direction:column;gap:.06em;
}
.ldTwLine{
  display:block;min-height:1.05em;
  white-space:pre-wrap;
}
.landingTitleTw .ldTwLine::after{
  content:'';display:inline-block;width:.55ch;height:.92em;
  background:rgba(255,255,255,.85);margin-left:2px;
  vertical-align:-.12em;
  animation:ldTwCaret 1s steps(2,end) infinite;
  opacity:0;
}
.landingTitleTw .ldTwLine.ldTwTyping::after{opacity:1;}
.landingTitleTw .ldTwLine.ldTwDone::after{opacity:0;}
.ldTwAccent{
  background:linear-gradient(135deg,rgba(255,255,255,.95),rgba(255,255,255,.55));
  -webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text;
}
@keyframes ldTwCaret{0%,49%{opacity:1}50%,100%{opacity:0}}
.landingTagline.ldTagHidden{opacity:0;animation:none;}
.landingTagline.ldTagShow{
  opacity:1;animation:ldFadeUp .6s cubic-bezier(.16,1,.3,1) forwards;
}

/* ── Landing — Bandeau compteur Sommet ── */
.ldCounterBand{
  width:100%;border-top:1px solid rgba(255,255,255,.06);
  border-bottom:1px solid rgba(255,255,255,.06);
  background:rgba(0,0,0,.55);
  padding:18px clamp(20px,4vw,80px);
}
.ldCounterInner{
  max-width:1200px;margin:0 auto;
  display:flex;justify-content:space-between;align-items:center;
  font-family:'IBM Plex Mono',ui-monospace,Menlo,monospace;
  font-size:clamp(11px,1.1vw,13px);
  letter-spacing:1px;
  color:rgba(255,255,255,.42);
}
.ldCounterValue{color:rgba(255,255,255,.72);font-weight:600;}
.ldCounterValue #ldCounterNum{color:#fff;}
/* ── Landing — LOI 04 Adversaire face-à-face ── */
.ldAdvFace{
  width:100%;max-width:520px;
  border-radius:24px;border:1px solid rgba(255,255,255,.08);
  background:linear-gradient(180deg,rgba(20,8,8,.78),rgba(8,4,4,.92));
  padding:32px 24px 28px;position:relative;overflow:hidden;
  box-shadow:0 30px 60px rgba(0,0,0,.55);
}
.ldAdvBadge{
  position:absolute;top:18px;left:50%;transform:translateX(-50%);
  font-family:'Syne',sans-serif;font-size:11px;font-weight:800;
  letter-spacing:3px;color:rgba(255,255,255,.55);
  padding:6px 14px;border-radius:99px;
  border:1px solid rgba(255,255,255,.12);
  background:rgba(0,0,0,.5);
}
.ldAdvSides{
  display:grid;grid-template-columns:1fr 1px 1fr;gap:14px;
  margin-top:48px;align-items:end;
}
.ldAdvSide{display:flex;flex-direction:column;align-items:center;gap:10px;}
.ldAdvLabel{
  font-family:'Syne',sans-serif;font-size:10px;font-weight:800;
  letter-spacing:2.5px;
}
.ldAdvMe .ldAdvLabel{color:rgba(120,200,140,.85);}
.ldAdvFoe .ldAdvLabel{color:rgba(220,90,90,.8);}
.ldAdvSilhouette{
  width:74px;height:96px;border-radius:50% 50% 14px 14px / 60% 60% 14px 14px;
  position:relative;
}
.ldAdvSilMe{
  background:linear-gradient(180deg,rgba(120,200,140,.55),rgba(40,90,55,.2));
  box-shadow:0 0 30px rgba(80,180,120,.25);
}
.ldAdvSilFoe{
  background:linear-gradient(180deg,rgba(220,90,90,.55),rgba(90,30,30,.2));
  box-shadow:0 0 30px rgba(220,80,80,.25);
}
.ldAdvXp{
  font-family:'Syne',sans-serif;font-size:18px;font-weight:800;
  color:#fff;font-variant-numeric:tabular-nums;letter-spacing:-.5px;
}
.ldAdvBarTrack{
  width:100%;height:5px;border-radius:3px;
  background:rgba(255,255,255,.08);overflow:hidden;
}
.ldAdvBarFill{height:100%;border-radius:3px;transition:width 1.4s cubic-bezier(.16,1,.3,1);}
.ldAdvBarMe{background:linear-gradient(90deg,rgba(120,200,140,.85),rgba(80,170,110,.95));}
.ldAdvBarFoe{background:linear-gradient(90deg,rgba(220,90,90,.85),rgba(180,60,60,.95));}
.ldAdvDivider{
  width:1px;background:linear-gradient(180deg,transparent,rgba(255,255,255,.18),transparent);
  height:140px;align-self:center;
}

/* ── Landing — LOI 05 Aura ladder ── */
.ldAuraLadder{
  width:100%;max-width:300px;height:340px;
  display:flex;flex-direction:column;gap:6px;
  padding:24px;border-radius:24px;
  border:1px solid rgba(255,255,255,.06);
  background:rgba(0,0,0,.42);
  box-shadow:0 30px 60px rgba(0,0,0,.45);
}
.ldAuraStep{
  flex:1;border-radius:6px;
  background:linear-gradient(90deg,
    hsl(calc(220 + var(--i) * 14), 70%, calc(35% + var(--i) * 4%)),
    hsl(calc(280 + var(--i) * 14), 80%, calc(55% + var(--i) * 3%))
  );
  opacity:calc(.35 + var(--i) * .065);
  box-shadow:0 0 calc(8px + var(--i) * 2px) hsla(calc(260 + var(--i) * 14), 80%, 60%, calc(.18 + var(--i) * .05));
}

/* Reduced motion respect */
@media(prefers-reduced-motion: reduce){
  .ldTwLine::after{animation:none;opacity:0 !important;}
  .ldAdvBarFill{transition:none;}
}

/* Responsive */
@media(min-width:1200px){
  .authRoot{padding:40px 28px;}
}
@media(max-width:900px){
  .ldSectInner{grid-template-columns:1fr;gap:28px;}
  .ldSectReverse{direction:ltr;}
  .ldSectVisual{order:2;justify-self:center;width:100%;}
  .ldExtrasGrid{grid-template-columns:repeat(2,1fr);}
  /* Carousel "En savoir plus" : top padding préserve la place de la flèche retour (top:16px, h:46px) */
  #landingMoreToggle:checked~.landingRoot .ldSect{padding:clamp(72px,9vh,96px) clamp(18px,4vw,32px) clamp(48px,6vh,72px);}
  /* Loi VI (ldOnLast) : la réserve doit COUVRIR la hauteur réelle du bandeau CTA
     (~245-300px mesuré) sinon il recouvre le bas de la section : la ladder d'auras
     passait DESSOUS (retour user x2). La section scrolle en interne pour le reste. */
  #landingMoreToggle:checked~.landingRoot.ldOnLast .ldSect.ldActive{bottom:clamp(175px,27vh,230px) !important;}
  /* Bandeau COMPACT sur la Loi VI mobile : à taille pleine (245px+) il recouvrait
     la ladder d'auras (retour user x2). Titre réduit, respirations resserrées :
     le bandeau tient en ~165px et la réserve ci-dessus le couvre entièrement. */
  #landingMoreToggle:checked~.landingRoot.ldOnLast .landingBottom{padding:22px 20px calc(16px + env(safe-area-inset-bottom,0px)) !important;}
  #landingMoreToggle:checked~.landingRoot.ldOnLast .landingBottomTitle{font-size:24px;letter-spacing:-1px;margin-bottom:8px;}
  #landingMoreToggle:checked~.landingRoot.ldOnLast .landingBottomSub{font-size:13px;margin-bottom:16px;}
  /* Téléphones : le bandeau CTA (~240-300px de haut) recouvre le bas de la section
     (réserve 180px) : padding-bottom compensatoire pour que le scroll interne de la
     section puisse tout révéler AU-DESSUS du bandeau. Et lien FAQ masqué (bandeau
     plus court, mystère préservé : la FAQ reste dans le DOM pour le SEO). */
  #landingMoreToggle:checked~.landingRoot.ldOnLast .ldSect.ldActive{padding-bottom:170px !important;}
  #landingMoreToggle:checked~.landingRoot.ldOnLast .landingBottom .ldFaqLink{display:none;}
  /* Visuels redimensionnés pour rentrer dans la scroll-area de la section */
  .ldAuraLadder{height:min(190px,27vh);max-width:260px;padding:14px;gap:4px;}
  .ldAdvFace{padding:24px 18px 22px;max-width:420px;}
  .ldAdvSides{margin-top:42px;gap:10px;}
  .ldAdvSilhouette{width:60px;height:78px;}
  .ldAdvDivider{height:110px;}
}
@media(max-width:680px){
  .landingHeroContent{align-items:center;text-align:center;}
  .landingHeroOverlay{
    background:
      linear-gradient(180deg,rgba(5,5,5,.45) 0%,rgba(5,5,5,.25) 30%,rgba(5,5,5,.2) 55%,rgba(5,5,5,.92) 100%);
  }
  .landingTagline{text-align:center;color:rgba(255,255,255,.85);font-size:15px;text-shadow:0 2px 20px rgba(0,0,0,.9),0 0 50px rgba(0,0,0,.6);}
  .landingTitle{letter-spacing:-2px;animation-duration:1s !important;animation-timing-function:cubic-bezier(.16,1,.3,1) !important;}
  .landingTagline{animation-duration:1s !important;animation-timing-function:cubic-bezier(.16,1,.3,1) !important;}
  .landingCTA{padding:15px 36px;font-size:12px;animation-duration:1s !important;animation-timing-function:cubic-bezier(.16,1,.3,1) !important;}
  .landingScrollHint{animation-duration:1s !important;animation-timing-function:cubic-bezier(.16,1,.3,1) !important;}
  .landingBottomTitle{font-size:28px;}
  .ldExtrasGrid{grid-template-columns:1fr;}
  .ldMockPhone{width:220px;transform:perspective(800px) rotateY(0deg) rotateX(0deg);}
  .ldSectStats{gap:20px;}
  .ldSectH2{font-size:clamp(22px,6vw,32px);min-height:calc(1.06em * 3);}
  .landingFooter{flex-direction:column;gap:8px;text-align:center;}
  /* Carousel mobile : top padding = 64px pour passer sous la flèche retour (top:14px, h:42px = 56px) */
  #landingMoreToggle:checked~.landingRoot .ldSect{padding:64px 16px 40px;}
  /* Loi 5 ladder : orientation HORIZONTALE sur mobile, donc 10 strips verticales = compact */
  .ldAuraLadder{
    flex-direction:row;
    height:auto;width:100%;max-width:320px;
    padding:14px;gap:5px;
    aspect-ratio:auto;
  }
  .ldAuraStep{flex:1;min-height:90px;border-radius:4px;}
  .ldMockStack{transform:scale(.9);transform-origin:top center;}
  .ldAdvFace{padding:22px 14px 18px;}
  .ldLawSign{margin-top:16px;padding-top:12px;font-size:12px;}
}

/* ═══════════════ AUTH — Immersive Gaming ═══════════════ */
.authRoot{
  min-height:100vh;height:100dvh;
  display:flex;align-items:flex-start;justify-content:center;
  padding:24px;
  position:relative;
  overflow-y:auto;overflow-x:hidden;-webkit-overflow-scrolling:touch;
  background:rgba(5,5,8,.65);
  backdrop-filter:blur(20px) saturate(1.2);-webkit-backdrop-filter:blur(20px) saturate(1.2);
}
.authRoot::before{content:'';position:absolute;inset:0;z-index:0;
  background-image:
    radial-gradient(circle,rgba(255,255,255,.05) 1px,transparent 1px),
    radial-gradient(circle,rgba(255,255,255,.035) 1px,transparent 1px);
  background-size:24px 24px;
  background-position:0 0,12px 12px;
  opacity:.5;
}

/* Canvas background — same image as landing */
#authCanvas{
  position:absolute;inset:0;width:100%;height:100%;
  display:block;opacity:.45;
}
/* Dark overlay on top of canvas */
.authOverlay{
  position:absolute;inset:0;
  background:
    radial-gradient(ellipse 60% 50% at 50% 40%,rgba(5,5,5,.3),rgba(5,5,5,.75) 70%),
    linear-gradient(180deg,rgba(5,5,5,.5) 0%,rgba(5,5,5,.65) 100%);
  pointer-events:none;z-index:1;
}

/* Back link — inside card, bottom */
.authBack{
  display:flex;align-items:center;justify-content:center;gap:6px;
  margin-top:20px;padding:8px 0;
  color:rgba(255,255,255,.3);font-size:11px;font-weight:500;
  cursor:pointer;transition:color .2s ease;
  letter-spacing:.3px;
  font-family:'Space Grotesk',sans-serif;
  position:relative;z-index:1;
}
.authBack:hover{color:rgba(255,255,255,.6);}
.authBack svg{width:13px;height:13px;opacity:.5;transition:opacity .2s ease;}
.authBack:hover svg{opacity:.7;}

/* Carte principale */
.authCard{
  margin:auto;
  position:relative;z-index:3;
  width:100%;max-width:460px;
  background:var(--glass-bg);
  backdrop-filter:blur(40px);
  border:1px solid var(--glass-border);
  border-radius:28px;
  padding:44px 40px;
  box-shadow:
    0 0 0 1px rgba(255,255,255,.03),
    0 25px 80px rgba(0,0,0,.5),
    0 0 100px rgba(255,255,255,.02);
  animation:cardAppear .6s var(--spring) both;
}
@keyframes cardAppear{
  0%{opacity:0;transform:translateY(24px) scale(.97)}
  100%{opacity:1;transform:translateY(0) scale(1)}
}
.authCard::before{
  content:'';position:absolute;inset:0;border-radius:28px;
  background:radial-gradient(ellipse 80% 50% at 50% 0%,rgba(255,255,255,.04),transparent 60%);
  pointer-events:none;
}

/* Header avec logo */
.authHeader{
  display:flex;flex-direction:column;align-items:center;
  margin-bottom:32px;text-align:center;
  position:relative;z-index:1;
}
.authLogo{
  width:64px;height:64px;border-radius:18px;
  border:1px solid rgba(255,255,255,.12);
  background:rgba(255,255,255,.04);
  backdrop-filter:blur(12px);
  position:relative;margin-bottom:18px;
  box-shadow:0 8px 32px rgba(0,0,0,.3);
}
.authLogo::before{content:'';position:absolute;top:16px;left:15px;width:34px;height:9px;border-radius:5px;background:linear-gradient(90deg,rgba(255,255,255,.95),rgba(255,255,255,.5));}
.authLogo::after{content:'';position:absolute;top:25px;left:15px;width:9px;height:24px;border-radius:5px;background:linear-gradient(180deg,rgba(255,255,255,.95),rgba(255,255,255,.5));}
.authBrand{
  font-family:'Syne',sans-serif;font-size:32px;font-weight:800;
  letter-spacing:-1.5px;color:#fff;line-height:1;margin-bottom:6px;
}
.authTagline{
  font-size:11px;color:rgba(255,255,255,.35);
  letter-spacing:2px;text-transform:uppercase;font-weight:500;
}

/* Formulaire */
.formHead{margin-bottom:24px;text-align:center;position:relative;z-index:1;}
.formHead h2{font-family:'Syne',sans-serif;font-size:22px;font-weight:800;color:#fff;margin-bottom:6px;letter-spacing:-.5px;}
.formHead p{color:rgba(255,255,255,.4);font-size:13px;}
.fGroup{margin-bottom:16px;position:relative;z-index:1;}
label{display:block;color:rgba(255,255,255,.5);font-size:10px;font-weight:600;margin-bottom:8px;text-transform:uppercase;letter-spacing:.8px;}
input[type=email],input[type=password],input[type=text]{
  width:100%;padding:14px 16px;border-radius:14px;
  border:1px solid rgba(255,255,255,.1);
  background:rgba(255,255,255,.05);
  color:#fff;font-size:14px;font-family:'Space Grotesk',sans-serif;
  transition:all .2s ease;
}
input[type=email]:focus,input[type=password]:focus,input[type=text]:focus{
  outline:none;border-color:rgba(255,255,255,.25);
  background:rgba(255,255,255,.08);
  box-shadow:0 0 0 4px rgba(255,255,255,.05),0 0 20px rgba(255,255,255,.05);
}
input::placeholder{color:rgba(255,255,255,.2);}
.btn{
  width:100%;padding:15px;border-radius:14px;border:none;
  cursor:pointer;font-size:12px;font-weight:700;
  font-family:'Space Grotesk',sans-serif;
  text-transform:uppercase;letter-spacing:1px;
  transition:all .2s var(--spring);user-select:none;
  position:relative;z-index:1;
}
.btnPrimary{
  background:linear-gradient(135deg,rgba(255,255,255,.95),rgba(255,255,255,.85));
  color:#080808;margin-top:6px;
  box-shadow:0 4px 20px rgba(255,255,255,.1);
}
.btnPrimary:hover{transform:translateY(-2px);box-shadow:0 8px 30px rgba(255,255,255,.15);}
.btnPrimary:active{transform:scale(.98);}
.btnSec{background:rgba(255,255,255,.04);color:rgba(255,255,255,.6);border:1px solid rgba(255,255,255,.1);margin-top:12px;}
.btnSec:hover{background:rgba(255,255,255,.08);color:#fff;}
.btnGhost{background:transparent;color:rgba(255,255,255,.4);border:1px dashed rgba(255,255,255,.12);margin-top:0;font-size:12px;letter-spacing:.5px;}
.btnGhost:hover{background:rgba(255,255,255,.04);color:rgba(255,255,255,.6);border-color:rgba(255,255,255,.22);}
/* ══ ENTRER PAR GOOGLE ══════════════════════════════════════════════
   Le fond BLANC et le G multicolore sont imposés par la charte de Google :
   c'est ce qui rend le bouton reconnaissable au premier coup d'oeil, et un
   utilisateur qui reconnaît son chemin ne renonce pas. Il ne concurrence
   pas « Se connecter » : le séparateur les sépare franchement. */
.btnGoogle{
  background:#fff;color:#1f1f1f;border:none;
  display:flex;align-items:center;justify-content:center;gap:10px;
  text-transform:none;letter-spacing:.2px;font-size:14px;font-weight:600;
  padding:13px 15px;box-shadow:0 4px 18px rgba(0,0,0,.25);
}
.btnGoogle:hover{background:#f6f7f9;transform:translateY(-1px);}
.btnGoogle:active{transform:scale(.985);}
.gLogo{width:18px;height:18px;flex:0 0 auto;}
/* Les chemins secondaires sont des LIENS, pas des boutons : trois boutons
   pleine largeur empilés faisaient déborder la carte sur un petit écran,
   et donnaient le même poids à « se connecter » et « j'ai oublié ». */
.authLinks{
  display:flex;align-items:center;justify-content:center;gap:10px;
  margin-top:14px;position:relative;z-index:1;flex-wrap:wrap;
}
.authLinks a{
  color:rgba(255,255,255,.5);font-size:12.5px;cursor:pointer;
  padding:4px 2px;transition:color .2s ease;
}
.authLinks a:hover{color:rgba(255,255,255,.85);}
.authLinks i{color:rgba(255,255,255,.2);font-style:normal;font-size:12px;}
.authLinks + .btn{margin-top:12px;}
.divider{text-align:center;margin:18px 0;color:rgba(255,255,255,.25);font-size:10px;position:relative;text-transform:uppercase;letter-spacing:1.5px;}
.divider::before,.divider::after{content:'';position:absolute;top:50%;width:38%;height:1px;background:rgba(255,255,255,.08);}
.divider::before{left:0;}.divider::after{right:0;}
.errBox{background:rgba(220,38,38,.12);border:1px solid rgba(220,38,38,.25);color:#ffb0b0;padding:12px 14px;border-radius:12px;font-size:12px;margin-bottom:14px;line-height:1.4;}

/* ══ Responsive ══ */
@media(min-width:900px){
  .authCard{max-width:500px;padding:52px 48px;}
  .authLogo{width:72px;height:72px;border-radius:20px;}
  .authLogo::before{top:18px;left:17px;width:38px;height:10px;}
  .authLogo::after{top:28px;left:17px;width:10px;height:27px;}
  .authBrand{font-size:36px;}
  .formHead h2{font-size:24px;}
}
@media(max-width:500px){
  .authRoot{padding:max(14px,env(safe-area-inset-top)) 16px max(14px,env(safe-area-inset-bottom));}
  .authCard{
    padding:32px 24px;border-radius:22px;
    /* PAS de max-height ni de scroll interne : la carte garde sa hauteur NATURELLE
       et c'est authRoot (height:100dvh, overflow-y:auto, align-items:flex-start,
       margin:auto sur la carte) qui scrolle. L'ancien max-height:calc(100vh - ...)
       + overflow:auto ne marchait pas (le .authCard{overflow:hidden} global plus
       bas gagnait à spécificité égale et COUPAIT le bas : Essayer sans compte,
       Accueil) et était en plus décalé du 100dvh de authRoot. À hauteur naturelle,
       le overflow:hidden ne clippe rien (rien ne dépasse la carte), authRoot défile. */
  }
  .authLogo{width:56px;height:56px;border-radius:16px;margin-bottom:14px;}
  .authLogo::before{top:14px;left:13px;width:30px;height:8px;}
  .authLogo::after{top:22px;left:13px;width:8px;height:21px;}
  .authBrand{font-size:28px;}
}
/* ══ LA CARTE TIENT DANS L'ÉCRAN ════════════════════════════════════
   Retour reçu : « sur téléphone ça descend trop bas ». Une page d'entrée
   qui défile cache ses propres portes — on ne voit pas « Essayer sans
   compte » ni le retour à l'accueil, et on ne sait pas qu'ils existent.
   Sous 780 pixels utiles, tout se resserre jusqu'à tenir d'un seul regard.
   La marque et le logo cèdent en premier : ils décorent, ils n'agissent pas. */
@media(max-height:780px){
  .authRoot{padding:max(10px,env(safe-area-inset-top)) 14px max(10px,env(safe-area-inset-bottom));}
  .authCard{padding:24px 22px;border-radius:20px;}
  .authHeader{margin-bottom:18px;}
  .authLogo{width:44px;height:44px;border-radius:13px;margin-bottom:10px;}
  .authLogo::before{top:11px;left:10px;width:24px;height:7px;}
  .authLogo::after{top:18px;left:10px;width:7px;height:16px;}
  .authBrand{font-size:24px;margin-bottom:3px;}
  .authTagline{font-size:9.5px;letter-spacing:1.6px;}
  .formHead{margin-bottom:16px;}
  .formHead h2{font-size:19px;margin-bottom:3px;}
  .formHead p{font-size:12px;}
  .fGroup{margin-bottom:11px;}
  label{font-size:9.5px;margin-bottom:5px;}
  input[type=email],input[type=password],input[type=text]{padding:11px 14px;border-radius:12px;}
  .btn{padding:12px;border-radius:12px;}
  .btnGoogle{padding:11px 14px;font-size:13.5px;}
  .divider{margin:12px 0;}
  .authLinks{margin-top:11px;gap:8px;}
  .authLinks a{font-size:12px;}
  .authBack{margin-top:16px;}
}
/* Écran vraiment court (petit téléphone, ou navigateur avec ses barres) :
   la marque disparaît. Ce qui reste est ce sur quoi on appuie. */
@media(max-height:660px){
  .authLogo{display:none;}
  .authTagline{display:none;}
  .authHeader{margin-bottom:12px;}
  .authBrand{font-size:21px;}
  .formHead{margin-bottom:12px;}
  .formHead p{display:none;}
  .authCard{padding:20px 20px;}
  .divider{margin:10px 0;}
}

/* ═══════════════ APP ═══════════════ */
.appRoot{min-height:100vh;display:flex;align-items:center;justify-content:center;padding:16px;position:relative;background:transparent;}
.shell{width:100%;max-width:1520px;height:calc(100vh - 32px);border-radius:24px;border:1px solid rgba(255,255,255,.14);background:rgba(8,10,15,.35);backdrop-filter:blur(28px) saturate(1.3);-webkit-backdrop-filter:blur(28px) saturate(1.3);box-shadow:var(--shadow);overflow:hidden;display:flex;flex-direction:column;}

/* TOPBAR */
.topbar{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:10px 14px;border-bottom:1px solid rgba(255,255,255,.09);background:linear-gradient(90deg,rgba(0,0,0,.2),rgba(255,255,255,.02));flex-shrink:0;}
.topLeft{display:flex;align-items:center;gap:10px;min-width:0;flex:1;}
.avatarBadge{width:40px;height:40px;border-radius:13px;border:1px solid rgba(255,255,255,.12);background:rgba(255,255,255,.04);display:flex;align-items:center;justify-content:center;font-weight:700;color:rgba(255,255,255,.9);flex-shrink:0;font-family:'Syne',sans-serif;font-size:15px;}
.titleBlock{display:flex;flex-direction:column;gap:2px;min-width:0;}
.t1{font-weight:700;font-size:13px;letter-spacing:.2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-family:'Syne',sans-serif;}
.t2{font-size:11px;color:rgba(255,255,255,.45);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.topMid{display:flex;align-items:center;justify-content:center;gap:6px;flex-wrap:wrap;flex:2;}
.pill{display:inline-flex;align-items:center;gap:6px;padding:6px 10px;border-radius:999px;border:1px solid rgba(255,255,255,.09);background:rgba(255,255,255,.04);color:rgba(255,255,255,.8);font-size:11px;font-weight:600;white-space:nowrap;}
.pill .m{opacity:.55;font-weight:500;}
.xpBar{width:160px;height:7px;border-radius:999px;overflow:hidden;border:1px solid rgba(255,255,255,.09);background:rgba(255,255,255,.06);}
.xpFill{height:100%;width:0%;background:linear-gradient(90deg,rgba(255,255,255,.88),rgba(255,255,255,.3));transition:width .35s ease;}
.pillGold{border-color:rgba(255,200,50,.2);background:rgba(255,200,50,.04);color:rgba(255,210,80,.9);}
.pillGreen{border-color:rgba(34,197,94,.2);background:rgba(34,197,94,.04);color:rgba(134,239,172,.9);}
.topRight{display:flex;align-items:center;gap:6px;flex-shrink:0;}
/* ⚠ CENTRER LE TEXTE, PAS SA BOÎTE DE LIGNE. Défaut visible sur la capture :
   « ACTIVER » collait en haut de son cadre. Mes mesures disaient « centré »
   parce qu'elles mesuraient la boîte de ligne (line-height:normal), qui
   réserve la place du jambage sous les capitales : la boîte est centrée, les
   MAJUSCULES sont hautes. `line-height:1` + un vrai centrage flex collent la
   boîte aux glyphes. Vaut pour TOUS les petits boutons en capitales. */
.btnTiny{display:inline-flex;align-items:center;justify-content:center;line-height:1;padding:9px 11px;border-radius:11px;border:1px solid rgba(255,255,255,.11);background:rgba(255,255,255,.04);color:rgba(255,255,255,.8);cursor:pointer;font-weight:600;font-size:10px;text-transform:uppercase;letter-spacing:.6px;transition:all .15s ease;user-select:none;white-space:nowrap;font-family:'Space Grotesk',sans-serif;}
.btnTiny:hover{transform:translateY(-1px);background:rgba(255,255,255,.08);border-color:rgba(255,255,255,.17);}
/* ── Engrenage réglages (topbar desktop) ── */
.gearBtn{font-size:14px;padding:7px 10px;line-height:1;}
.gearBtn:hover{transform:translateY(-1px) rotate(40deg);}
.gearBtn.active{background:rgba(255,255,255,.12);border-color:rgba(255,255,255,.28);color:#fff;}
.mhGearBtn{display:none;} /* engrenage flottant : mobile uniquement (media query 680) */
/* Le bouton Sac précède l'engrenage : lui prend le margin auto, l'engrenage se colle à sa droite */
#mhSettingsGear.mhGearBtn{margin-left:4px;}
#mhSacGear.mhGearBtn{margin-left:4px;} /* la Voix (1er du groupe) prend le margin:auto désormais */

/* ═══ ICÔNES game-icons.net (sprite inline, CC BY 3.0) ═══ */
.gi{display:inline-block;width:1em;height:1em;fill:currentColor;vertical-align:-0.13em;pointer-events:none;}
.tab .gi,.dvSegBtn .gi{margin-right:3px;opacity:.85;}
.tab.active .gi,.dvSegBtn.active .gi{opacity:1;fill:url(#giGrad);}
.phTileIcon .gi{fill:var(--pht);width:19px;height:19px;}
.phRecIcon .gi{fill:url(#giGold);width:18px;height:18px;}
.mnIcon .gi{fill:#fff;width:20px;height:20px;}
.mnBtn.active .mnIcon .gi{fill:url(#giGrad);}
/* ── Badge nav Mentor (phase 3 : inbox non lue) ── */
.mentorNavBadge{display:inline-block;width:7px;height:7px;border-radius:50%;background:#f472b6;margin-left:5px;vertical-align:middle;box-shadow:0 0 8px rgba(244,114,182,.7);}
.mentorNavBadge.hidden{display:none;}
.btnAction{background:rgba(255,255,255,.9);color:#080808;border:none;}
.btnAction:hover{background:#fff;}

/* GRID */
.grid{flex:1;display:grid;grid-template-columns:320px 1fr;gap:12px;padding:12px;min-height:0;overflow:hidden;}
.card{border-radius:18px;border:1px solid rgba(255,255,255,.10);background:rgba(255,255,255,.05);backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);box-shadow:0 12px 40px rgba(0,0,0,.32);overflow:hidden;display:flex;flex-direction:column;min-height:0;}
.cardHead{padding:11px 14px;border-bottom:1px solid rgba(255,255,255,.08);display:flex;align-items:center;justify-content:space-between;gap:10px;background:linear-gradient(90deg,rgba(255,255,255,.04),transparent);flex-shrink:0;}
.cardHead .h{font-size:11px;font-weight:700;letter-spacing:.8px;text-transform:uppercase;color:rgba(255,255,255,.75);font-family:'Syne',sans-serif;}
.cardBody{padding:12px;overflow-y:auto;overflow-x:hidden;flex:1;min-height:0;}
.smallText{color:rgba(255,255,255,.45);font-size:12px;line-height:1.45;}
.tabs{display:flex;gap:5px;flex-wrap:wrap;margin-top:12px;}
.tab{padding:8px 11px;border-radius:999px;border:1px solid rgba(255,255,255,.09);background:rgba(255,255,255,.035);color:rgba(255,255,255,.58);font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.6px;cursor:pointer;transition:all .15s ease;user-select:none;font-family:'Space Grotesk',sans-serif;}
.tab.active{color:#fff;background:rgba(255,255,255,.10);border-color:rgba(255,255,255,.17);}
.msgBox{margin-top:10px;border-radius:13px;border:1px solid rgba(255,255,255,.08);background:rgba(0,0,0,.25);color:rgba(255,255,255,.78);padding:11px 12px;font-size:13px;line-height:1.38;}
.statsList{margin-top:10px;display:grid;gap:6px;}
.statLine{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:9px 11px;border-radius:11px;border:1px solid rgba(255,255,255,.08);background:rgba(255,255,255,.03);font-size:12px;color:rgba(255,255,255,.78);}
.statLine strong{font-weight:700;}

/* Streak palier */
.palierBox{margin-top:10px;padding:10px 12px;border-radius:12px;border:1px solid rgba(255,200,50,.16);background:rgba(255,200,50,.04);font-size:12px;color:rgba(255,210,80,.82);line-height:1.5;}
.palierTitle{font-size:10px;font-weight:700;letter-spacing:.8px;text-transform:uppercase;color:rgba(255,200,50,.45);margin-bottom:4px;}
.reposBadge{display:inline-flex;align-items:center;gap:6px;padding:6px 10px;border-radius:999px;border:1px solid rgba(96,165,250,.2);background:rgba(96,165,250,.05);font-size:11px;font-weight:700;color:rgba(147,197,253,.8);margin-top:8px;}
.pseudoBox{margin-top:10px;border-radius:13px;border:1px solid rgba(255,255,255,.08);background:rgba(255,255,255,.025);padding:11px 12px;}
.pseudoBoxTitle{font-size:10px;font-weight:700;letter-spacing:.6px;text-transform:uppercase;margin-bottom:5px;color:rgba(255,255,255,.8);font-family:'Syne',sans-serif;}

/* DASHBOARD */
.toolbar{display:flex;gap:8px;flex-wrap:wrap;align-items:center;margin-bottom:8px;position:relative;z-index:10;}
.toolbarNote{color:rgba(255,255,255,.3);font-size:10px;flex:1;min-width:180px;line-height:1.35;transition:all .2s ease;}
.toolbarNote.hidden{display:none;}
.selectMini{border:1px solid rgba(255,255,255,.11);background:rgba(255,255,255,.04);color:rgba(255,255,255,.85);border-radius:11px;padding:8px 11px;font-weight:600;font-size:11px;min-height:36px;outline:none;font-family:'Space Grotesk',sans-serif;cursor:pointer;position:relative;z-index:11;pointer-events:auto;}
.inputMini{border:1px solid rgba(255,255,255,.11);background:rgba(255,255,255,.04);color:rgba(255,255,255,.85);border-radius:11px;padding:8px 11px;font-weight:600;font-size:11px;min-height:36px;outline:none;font-family:'Space Grotesk',sans-serif;}
.selectMini:focus,.inputMini:focus{border-color:rgba(255,255,255,.2);box-shadow:0 0 0 3px rgba(255,255,255,.06);}

/* Priority card */
.priorityCard{margin-bottom:8px;border:1px solid rgba(255,200,50,.18);background:rgba(255,200,50,.03);border-radius:13px;padding:9px 13px;position:relative;overflow:hidden;display:flex;align-items:center;gap:8px;transition:all .25s ease;}
.priorityCard::before{content:'';position:absolute;right:10px;top:50%;transform:translateY(-50%);font-size:28px;opacity:.08;content:'⚡';}
.priorityCard.done{border-color:rgba(255,200,50,.3);background:rgba(255,200,50,.04);}
.priorityCard.done::before{content:'✓';opacity:.12;color:rgba(255,200,50,1);}
.priorityCardLabel{font-size:9px;font-weight:700;letter-spacing:.8px;text-transform:uppercase;color:rgba(255,200,50,.5);margin-bottom:2px;}
.priorityCard.done .priorityCardLabel{color:rgba(255,200,50,.4);}
.priorityCardText{font-size:13px;font-weight:600;color:rgba(255,220,100,.9);line-height:1.3;}
.priorityCardDone{opacity:.5;text-decoration:line-through;color:rgba(255,220,100,.6);}

/* QUEST LIST */
.questList{display:flex;flex-direction:column;gap:6px;}

/* Quest row — structure card */
.qRow{border:1px solid rgba(255,255,255,.08);background:rgba(255,255,255,.028);border-radius:15px;padding:10px 12px;transition:border-color .15s ease;position:relative;}
.qRow:hover{border-color:rgba(255,255,255,.13);background:rgba(255,255,255,.038);}
.qRow.done{background:rgba(34,197,94,.04);border-color:rgba(34,197,94,.15);}
.qRow.isPriority{border-color:rgba(255,200,50,.22);background:rgba(255,200,50,.03);}
.qRow.isPriority.done{background:rgba(34,197,94,.06);border-color:rgba(34,197,94,.2);}
.qRow.isRecurring{border-left:3px solid rgba(96,165,250,.3);}

/* Row header : badges + input */
.qRowTop{display:flex;align-items:center;gap:8px;margin-bottom:8px;}
.qSlotBadge{flex-shrink:0;width:32px;height:32px;border-radius:9px;border:1px solid rgba(255,255,255,.1);background:rgba(0,0,0,.2);display:flex;align-items:center;justify-content:center;font-size:12px;font-weight:700;color:rgba(255,255,255,.65);font-family:'Syne',sans-serif;user-select:none;}
.qSlotBadge.isPriority{border-color:rgba(255,200,50,.4);background:rgba(255,200,50,.1);color:rgba(255,220,80,.95);}
.qSlotBadge.isRecurring{border-color:rgba(96,165,250,.35);background:rgba(96,165,250,.08);color:rgba(147,197,253,.9);}
.tutSandboxBadge{flex-shrink:0;padding:2px 8px;border-radius:6px;background:rgba(255,200,50,.12);border:1px solid rgba(255,200,50,.25);color:rgba(255,200,50,.8);font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.5px;}
.qInput{flex:1;padding:9px 11px;border-radius:11px;border:1px solid rgba(255,255,255,.1);background:rgba(255,255,255,.05);color:var(--text);font-size:13px;outline:none;transition:all .15s ease;font-family:'Space Grotesk',sans-serif;min-width:0;}
.qInput:focus{border-color:rgba(255,255,255,.2);box-shadow:0 0 0 3px rgba(255,255,255,.06);background:rgba(255,255,255,.07);}
.qInput.doneText{text-decoration:line-through;opacity:.58;}

/* Row bottom : controls */
.qRowBot{display:flex;align-items:center;gap:6px;flex-wrap:wrap;}
.qNatBtn{padding:6px 10px;border-radius:9px;border:1px solid rgba(255,255,255,.1);background:rgba(255,255,255,.04);color:rgba(255,255,255,.78);cursor:pointer;font-weight:600;font-size:11px;display:flex;align-items:center;gap:5px;user-select:none;transition:all .12s ease;font-family:'Space Grotesk',sans-serif;white-space:nowrap;}
.qNatBtn:hover{background:rgba(255,255,255,.08);}
.qDiffSelect{padding:6px 10px;border-radius:9px;border:1px solid rgba(255,255,255,.1);background:rgba(255,255,255,.04);color:rgba(255,255,255,.82);font-size:11px;font-weight:600;outline:none;font-family:'Space Grotesk',sans-serif;cursor:pointer;}
.qDiffSelect:focus{border-color:rgba(255,255,255,.2);}
.qXpTag{padding:6px 10px;border-radius:999px;border:1px solid rgba(255,255,255,.09);background:rgba(0,0,0,.2);font-size:11px;font-weight:700;color:rgba(255,255,255,.85);white-space:nowrap;user-select:none;}
.qXpTag.hasMult{border-color:rgba(255,200,50,.2);color:rgba(255,210,80,.9);}
.qXpTag.isDeferred{border-color:rgba(56,189,248,.25);color:rgba(56,189,248,.9);}
.qQuantInline{
  display:inline-flex;align-items:center;gap:3px;
  padding:3px 5px;border-radius:9px;
  border:1px solid rgba(96,165,250,.16);background:rgba(96,165,250,.05);
}
.qQuantBtn{
  width:22px;height:22px;border-radius:6px;border:1px solid rgba(96,165,250,.2);
  background:rgba(255,255,255,.04);color:rgba(147,197,253,.92);cursor:pointer;
  font-size:13px;font-weight:700;line-height:1;display:flex;align-items:center;justify-content:center;
  font-family:'Space Grotesk',sans-serif;transition:all .12s ease;padding:0;
}
.qQuantBtn:hover{background:rgba(96,165,250,.1);border-color:rgba(96,165,250,.35);}
.qQuantBtn:disabled{opacity:.35;cursor:not-allowed;}
.qQuantEdge{font-size:9px;letter-spacing:.3px;width:auto;padding:0 6px;}
.qQuantCount{
  font-size:10px;font-weight:700;color:rgba(191,219,254,.92);
  white-space:nowrap;min-width:36px;text-align:center;cursor:pointer;
}
/* Action buttons */
.qBtnGroup{display:flex;gap:5px;margin-left:auto;}
/* Aptitudes : bouton "Commencer" (signal d'Exécution) + état "en cours". Accent bleu
   neutre (pas vert = évite la confusion avec "fait/tenu"). Aucune animation infinie. */
.qStartBtn{display:inline-flex;align-items:center;gap:5px;padding:5px 11px;border-radius:99px;border:1px solid rgba(96,165,250,.32);background:rgba(96,165,250,.09);color:rgba(191,219,254,.96);font-size:10.5px;font-weight:800;letter-spacing:.4px;text-transform:uppercase;cursor:pointer;font-family:'Space Grotesk',sans-serif;white-space:nowrap;}
.qStartBtn .gi{width:12px;height:12px;fill:rgba(147,197,253,.95);}
.qStartBtn:active{transform:scale(.96);}
.qStartedTag{display:inline-flex;align-items:center;gap:6px;padding:5px 11px;border-radius:99px;font-size:10px;font-weight:800;letter-spacing:.6px;text-transform:uppercase;color:rgba(147,197,253,.92);background:rgba(96,165,250,.08);border:1px solid rgba(96,165,250,.22);white-space:nowrap;}
.qStartDot{width:6px;height:6px;border-radius:50%;background:#60a5fa;box-shadow:0 0 6px rgba(96,165,250,.85);flex:none;}
.qBtn{padding:6px 10px;border-radius:9px;border:1px solid rgba(255,255,255,.1);background:rgba(255,255,255,.04);color:rgba(255,255,255,.82);cursor:pointer;font-weight:700;font-size:10px;text-transform:uppercase;letter-spacing:.6px;user-select:none;transition:all .12s ease;white-space:nowrap;font-family:'Space Grotesk',sans-serif;}
.qBtn:hover{background:rgba(255,255,255,.08);border-color:rgba(255,255,255,.18);}
.qBtn.btnValidate.done{background:rgba(34,197,94,.1);border-color:rgba(34,197,94,.22);color:rgba(134,239,172,.95);}
.qBtn.btnPriority.active{background:rgba(255,200,50,.1);border-color:rgba(255,200,50,.28);color:rgba(255,215,60,.95);}
.qBtn.btnRecurring.active{background:rgba(96,165,250,.1);border-color:rgba(96,165,250,.25);color:rgba(147,197,253,.9);}
.qBtn.btnQuant.active{background:rgba(96,165,250,.1);border-color:rgba(96,165,250,.25);color:rgba(191,219,254,.95);}
.qBtn.btnDelete{border-color:rgba(239,68,68,.25);background:rgba(239,68,68,.06);color:rgba(252,165,165,.85);}
.qBtn.btnDelete:hover{background:rgba(239,68,68,.14);border-color:rgba(239,68,68,.4);}
.qBtn:disabled{opacity:.38;cursor:not-allowed;transform:none;}
.qBtn.btnReminder{font-size:13px;padding:6px 8px;line-height:1;}
.qBtn.btnReminder.active{background:rgba(96,165,250,.12);border-color:rgba(96,165,250,.28);color:rgba(191,219,254,.95);}

/* CALENDAR */
.calNav{display:flex;align-items:center;gap:8px;margin-bottom:14px;flex-wrap:wrap;}
.calNavTitle{font-family:'Syne',sans-serif;font-size:16px;font-weight:800;color:#fff;flex:1;text-align:center;}
.calNavBtn{padding:7px 12px;border-radius:10px;border:1px solid rgba(255,255,255,.1);background:rgba(255,255,255,.04);color:rgba(255,255,255,.78);cursor:pointer;font-size:12px;font-weight:600;font-family:'Space Grotesk',sans-serif;transition:all .15s ease;}
.calNavBtn:hover{background:rgba(255,255,255,.08);}
.calNav{display:flex;align-items:center;gap:8px;margin-bottom:14px;}
.calNavTitle{font-family:'Syne',sans-serif;font-size:15px;font-weight:800;color:#fff;flex:1;text-align:center;}
.calNavBtn{padding:7px 12px;border-radius:10px;border:1px solid rgba(255,255,255,.1);background:rgba(255,255,255,.04);color:rgba(255,255,255,.78);cursor:pointer;font-size:12px;font-weight:600;font-family:'Space Grotesk',sans-serif;transition:all .15s ease;user-select:none;}
.calNavBtn:hover{background:rgba(255,255,255,.08);}
#screenHistory{display:flex;flex-direction:column;}
.calGrid{display:grid;grid-template-columns:repeat(7,1fr);gap:3px;}
.calDayLabel{font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.5px;color:rgba(255,255,255,.35);text-align:center;padding:4px 0;}
.calDay{aspect-ratio:1;border-radius:11px;display:flex;align-items:center;justify-content:center;font-size:12px;font-weight:700;cursor:default;border:1px solid transparent;transition:transform .18s cubic-bezier(.22,1.4,.36,1),box-shadow .18s ease,border-color .18s ease;user-select:none;font-family:'Space Grotesk',sans-serif;}
.calDay.hasData{cursor:pointer;}
.calDay.hasData:hover{transform:translateY(-2px) scale(1.06);z-index:2;}
.calDay.empty{opacity:.15;}
/* Jour futur planifiable (tap = poser une tâche sans Vision) */
.calDay.planable{cursor:pointer;color:rgba(255,255,255,.45);}
.calDay.planable:hover{border-color:rgba(167,139,250,.35);background:rgba(167,139,250,.07);transform:translateY(-1px);}
.calDay.today{border-color:rgba(251,191,36,.55);color:rgba(253,230,138,.95);background:rgba(251,191,36,.07);position:relative;}
/* Glow pré-rendu : SEULE l'opacité respire (règle FPS : jamais de box-shadow en infinite) */
.calDay.today::before{content:'';position:absolute;inset:-1px;border-radius:inherit;box-shadow:0 0 12px 2px rgba(251,191,36,.2);opacity:.25;animation:calTodayGlow 2.4s ease-in-out infinite;pointer-events:none;}
@keyframes calTodayGlow{0%,100%{opacity:.25}50%{opacity:1}}
.calDay.success{background:linear-gradient(145deg,rgba(34,197,94,.14),rgba(16,185,129,.08));border-color:rgba(34,197,94,.25);color:rgba(134,239,172,.92);}
.calDay.success.i2{background:linear-gradient(145deg,rgba(34,197,94,.24),rgba(16,185,129,.13));border-color:rgba(34,197,94,.4);}
.calDay.success.i3{background:linear-gradient(145deg,rgba(34,197,94,.36),rgba(16,185,129,.2));border-color:rgba(74,222,128,.55);color:rgba(187,247,208,1);box-shadow:0 0 14px -4px rgba(34,197,94,.4);}
.calDay.success.hasData:hover{box-shadow:0 8px 20px -8px rgba(34,197,94,.55);}
.calDay.failed{background:rgba(239,68,68,.09);border-color:rgba(239,68,68,.2);color:rgba(252,165,165,.8);}
.calDay.failed.hasData:hover{box-shadow:0 8px 20px -8px rgba(239,68,68,.4);}
.calDay.repos{background:rgba(96,165,250,.1);border-color:rgba(96,165,250,.2);color:rgba(147,197,253,.85);}
.calFlame{position:absolute;top:-6px;right:-4px;filter:drop-shadow(0 2px 6px rgba(251,146,60,.6));animation:calFlameFlick 1.6s ease-in-out infinite;}
.calFlame .gi{width:14px;height:14px;fill:url(#giGold);}
@keyframes calFlameFlick{0%,100%{transform:scale(1) rotate(-3deg);}50%{transform:scale(1.15) rotate(4deg);}}
.phTileLink{cursor:pointer;}
.phTileLink:hover{border-color:rgba(244,114,182,.35);transform:translateY(-2px);}
/* Badges de provenance (détail du jour) */
.dayTag{display:inline-flex;align-items:center;gap:4px;margin-left:7px;padding:2px 8px;border-radius:99px;font-size:9px;font-weight:800;letter-spacing:.6px;text-transform:uppercase;vertical-align:1px;border:1px solid transparent;background:linear-gradient(90deg,var(--tg1,#a78bfa),var(--tg2,#f472b6));-webkit-background-clip:text;background-clip:text;color:transparent;border-color:rgba(255,255,255,.12);}
.dayTag .gi{width:10px;height:10px;fill:var(--tg1,#a78bfa);}
.dayTag .giP{width:13px;height:13px;border-radius:50%;}
.dayTag.tagSommet{--tg1:#fde68a;--tg2:#f59e0b;}
.dayTag.tagVision{--tg1:#a78bfa;--tg2:#60a5fa;}
/* Bandeau stats du mois */
.histHero{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin-bottom:10px;}
.hhTile{background:rgba(255,255,255,.03);border:1px solid rgba(255,255,255,.08);border-radius:14px;padding:12px 8px;text-align:center;}
.hhNum{font-family:'Syne',sans-serif;font-weight:800;font-size:22px;color:#fff;line-height:1;}
.hhOf{font-size:12px;color:rgba(255,255,255,.35);font-weight:700;}
.hhLbl{font-size:9px;letter-spacing:1.4px;text-transform:uppercase;color:rgba(255,255,255,.4);margin-top:6px;font-weight:700;}
.hhEmpty{grid-column:1/-1;text-align:center;font-size:12px;color:rgba(255,255,255,.35);padding:10px;font-style:italic;}
.hhProv{grid-column:1/-1;background:rgba(255,255,255,.03);border:1px solid rgba(255,255,255,.08);border-radius:14px;padding:11px 13px;}
/* Bilan macro du mois : pouls (courbe) + objectifs Vision */
.hhPulse,.hhGoals{grid-column:1/-1;background:rgba(255,255,255,.03);border:1px solid rgba(255,255,255,.08);border-radius:14px;padding:11px 13px;}
.hhPulse canvas{display:block;width:100%;height:48px;}
.hhTrend{font-size:10px;font-weight:800;letter-spacing:.4px;text-transform:none;}
.hhTrend.up{color:rgba(134,239,172,.9);}
.hhTrend.down{color:rgba(253,230,138,.85);}
.hhTrend.flat{color:rgba(255,255,255,.45);}
.hhPlanChip{font-size:9px;font-weight:800;letter-spacing:.6px;padding:2px 8px;border-radius:99px;background:rgba(167,139,250,.1);color:rgba(196,181,253,.9);border:1px solid rgba(167,139,250,.25);text-transform:none;}
.hhGoalRow{display:flex;align-items:center;gap:8px;font-size:12px;color:rgba(255,255,255,.7);padding:3px 0;font-family:'Space Grotesk',sans-serif;}
.hhGoalRow.done{color:rgba(134,239,172,.85);}
.hhGoalTxt{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.hhGoalPct{font-size:10px;font-weight:700;color:rgba(255,255,255,.4);flex:none;}
.hhGoalRow.done .hhGoalPct{color:rgba(134,239,172,.7);}
.hhGoalWeeks{margin-top:6px;font-size:10.5px;color:rgba(255,255,255,.45);font-family:'Space Grotesk',sans-serif;}
/* L'EMPLACEMENT NE BOUGE PAS (retour user) : titre à GAUCHE, les deux chips à
   DROITE, sur la MÊME ligne. Seul l'écart entre les deux chips manquait.
   Le titre est le seul à se rétrécir (flex:1 + min-width:0) : il passe sur deux
   lignes si besoin, les chips gardent leur place et leur taille. Jamais de
   flex-wrap ici, sinon les chips décrochent à la ligne suivante. */
.hhProvHead{display:flex;justify-content:space-between;align-items:center;gap:10px;flex-wrap:nowrap;font-size:9px;letter-spacing:1.4px;text-transform:uppercase;color:rgba(255,255,255,.4);font-weight:700;margin-bottom:8px;}
.hhProvHead>span:first-child{flex:1 1 auto;min-width:0;line-height:1.35;}
.hhHeadChips{display:flex;align-items:center;gap:8px;flex:0 0 auto;}
.hhProvPct{color:rgba(255,255,255,.75);}
.hhProvBar{display:flex;height:6px;border-radius:99px;overflow:hidden;gap:2px;}
.hhProvBar span{height:100%;border-radius:99px;transition:width .5s cubic-bezier(.22,1,.36,1);}
.hhProvLegs{display:flex;flex-wrap:wrap;gap:10px;margin-top:8px;}
.hhProvLeg{display:inline-flex;align-items:center;gap:5px;font-size:10px;font-weight:600;color:rgba(255,255,255,.55);}
.hhProvLeg i{width:8px;height:8px;border-radius:3px;display:inline-block;}
.calLegend{display:flex;gap:10px;flex-wrap:wrap;margin-top:10px;}
.calLegItem{display:flex;align-items:center;gap:5px;font-size:11px;color:rgba(255,255,255,.45);}
.calLegDot{width:10px;height:10px;border-radius:3px;}

/* ACHIEVEMENTS */
.achievGrid{display:grid;gap:7px;margin-top:8px;}
.achievItem{display:flex;align-items:center;gap:10px;padding:10px 12px;border-radius:12px;border:1px solid rgba(255,255,255,.07);background:rgba(255,255,255,.02);transition:all .15s ease;}
.achievItem.unlocked{border-color:rgba(255,200,50,.2);background:rgba(255,200,50,.035);}
.achievItem.unlocked:hover{border-color:rgba(255,200,50,.32);}
.achievEmoji{font-size:22px;flex-shrink:0;width:32px;text-align:center;}
.achievInfo{flex:1;min-width:0;}
.achievName{font-size:12px;font-weight:700;color:rgba(255,255,255,.78);}
.achievItem.unlocked .achievName{color:rgba(255,210,60,.95);}
.achievDesc{font-size:11px;color:rgba(255,255,255,.38);margin-top:2px;line-height:1.35;}
.achievRewards{display:flex;gap:5px;flex-direction:column;align-items:flex-end;flex-shrink:0;}
.achievXpTag{font-size:10px;font-weight:700;color:rgba(255,200,50,.75);white-space:nowrap;}
.achievMultTag{font-size:10px;font-weight:700;color:rgba(134,239,172,.75);white-space:nowrap;}
.achievLock{font-size:14px;opacity:.3;}

/* SETTINGS */
/* Settings sections */
.settingsSection{margin-bottom:14px;}
.settingsSectionHead{
  display:flex;align-items:center;gap:8px;
  padding:10px 12px;margin-bottom:2px;
  font-size:11px;font-weight:700;letter-spacing:1px;text-transform:uppercase;
  color:rgba(255,255,255,.45);font-family:'Syne',sans-serif;
  border-radius:12px 12px 0 0;
  background:linear-gradient(135deg,rgba(255,255,255,.04),rgba(255,255,255,.015));
  border:1px solid rgba(255,255,255,.06);border-bottom:none;
}
.settingsSectionHead .sIcon{font-size:14px;opacity:.7;}
.settingsBox{border-radius:0 0 14px 14px;border:1px solid rgba(255,255,255,.08);border-top:none;background:rgba(255,255,255,.022);padding:4px 12px;}
.anonWarning{background:rgba(251,191,36,.08);border:1px solid rgba(251,191,36,.18);border-radius:10px;padding:12px 14px;font-size:12px;line-height:1.5;color:rgba(251,191,36,.85);}
.settingsBox.standalone{border-radius:14px;border-top:1px solid rgba(255,255,255,.08);margin-bottom:10px;}
.sRow{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:12px 0;border-bottom:1px solid rgba(255,255,255,.055);transition:background .15s ease;}
.sRow:last-child{border-bottom:none;}
.sRow:hover{background:rgba(255,255,255,.015);margin:0 -8px;padding-left:8px;padding-right:8px;border-radius:8px;}
.sLabel{font-size:13px;font-weight:600;color:rgba(255,255,255,.82);line-height:1.4;}
.sLabelSub{font-size:11px;color:rgba(255,255,255,.38);margin-top:3px;line-height:1.4;}
.sLock{font-size:10px;font-weight:700;letter-spacing:.5px;text-transform:uppercase;color:rgba(255,190,60,.7);padding:4px 8px;border-radius:6px;background:rgba(255,190,60,.07);border:1px solid rgba(255,190,60,.18);}
#musicVolumeSlider::-webkit-slider-thumb{-webkit-appearance:none;appearance:none;width:14px;height:14px;border-radius:50%;background:rgba(255,255,255,.8);cursor:pointer;border:none;}
#musicVolumeSlider::-moz-range-thumb{width:14px;height:14px;border-radius:50%;background:rgba(255,255,255,.8);cursor:pointer;border:none;}
#musicVolumeSlider::-webkit-slider-runnable-track{background:linear-gradient(to right,rgba(255,255,255,.55) calc(var(--val,18)*1%),rgba(255,255,255,.12) calc(var(--val,18)*1%));border-radius:2px;}
.dangerZone{margin-top:10px;border:1px solid rgba(239,68,68,.18);border-radius:14px;padding:12px;background:rgba(239,68,68,.03);}
.dangerTitle{font-size:10px;font-weight:700;letter-spacing:.7px;text-transform:uppercase;color:rgba(239,100,100,.8);margin-bottom:8px;font-family:'Syne',sans-serif;}

/* PROGRESSION */
.ghostBox{border-radius:14px;border:1px solid rgba(255,255,255,.08);background:rgba(255,255,255,.022);padding:12px;}

/* TOAST */
.toast{position:fixed;right:16px;bottom:16px;z-index:99999;pointer-events:none;/* texte pur : ne vole JAMAIS un tap (il recouvrait les boutons cfm en bas d'écran) */max-width:420px;padding:12px 14px;border-radius:14px;border:1px solid rgba(255,255,255,.11);background:rgba(6,6,6,.85);backdrop-filter:blur(18px);color:rgba(255,255,255,.9);font-size:13px;line-height:1.35;box-shadow:0 16px 50px rgba(0,0,0,.65);transform:translateY(10px);opacity:0;transition:all .22s ease;pointer-events:none;}
.toast.show{transform:translateY(0);opacity:1;}
.toast.danger{border-color:rgba(239,68,68,.28);background:rgba(20,3,3,.88);color:rgba(252,165,165,.95);}

/* ── ANIMATIONS NAVIGATION ── */
@keyframes screenFadeIn{from{opacity:0;transform:translateY(7px)}to{opacity:1;transform:translateY(0)}}
.screenAnim{animation:screenFadeIn .22s cubic-bezier(.22,1,.36,1) both;}

/* Rafraîchir : flash sur la zone droite */
@keyframes refreshPulse{0%{box-shadow:0 0 0 0 rgba(255,255,255,.18)}60%{box-shadow:0 0 0 12px rgba(255,255,255,0)}100%{box-shadow:0 0 0 0 rgba(255,255,255,0)}}
.refreshing{animation:refreshPulse .5s ease-out;}
/* ── SOMMET PANEL ── */
@keyframes sommetPanelIn{from{opacity:0;transform:translateY(-6px)}to{opacity:1;transform:translateY(0)}}
.sommetPanelAnim{animation:sommetPanelIn .2s cubic-bezier(.22,1,.36,1) both;}
.sommetCatBtn{padding:6px 11px;border-radius:9px;border:1px solid rgba(255,255,255,.1);background:rgba(255,255,255,.04);color:rgba(255,255,255,.72);font-size:11px;font-weight:600;cursor:pointer;font-family:'Space Grotesk',sans-serif;transition:all .14s ease;white-space:nowrap;}
.sommetCatBtn:hover{background:rgba(255,255,255,.09);border-color:rgba(255,255,255,.18);color:#fff;}
.sommetCatBtn.active{background:rgba(255,200,50,.12);border-color:rgba(255,200,50,.35);color:rgba(255,215,60,.95);}

/* ── EMBELLISSEMENTS ── */
/* Card hover subtil */
.card{transition:box-shadow .2s ease;}
/* Boutons principaux — glow au hover */
.btnAction{transition:all .15s ease;}
.btnAction:hover{box-shadow:0 0 18px rgba(255,200,50,.18);transform:translateY(-1px);}
/* Topbar avatar pulse sur connexion */
@keyframes avatarIn{0%{transform:scale(0.7);opacity:0}70%{transform:scale(1.08)}100%{transform:scale(1);opacity:1}}
.avatarBadge{animation:avatarIn .4s cubic-bezier(.22,1.5,.4,1) both;}
/* Tab active — underline animé */
.tab{position:relative;overflow:hidden;}
.tab::after{content:'';position:absolute;bottom:0;left:50%;width:0;height:2px;background:rgba(255,255,255,.6);border-radius:2px;transition:all .2s ease;transform:translateX(-50%);}
.tab.active::after{width:60%;}
/* CalNavBtn hover renforcé */
.calNavBtn:hover{background:rgba(255,255,255,.1) !important;border-color:rgba(255,255,255,.22) !important;color:#fff !important;transform:scale(1.04);}

/* ── ANIMATIONS GAMING ── */
/* Slide-in cascade au chargement liste — plus snappy */
@keyframes rowSlideIn{
  0%{opacity:0;transform:translateY(12px) scale(.95);}
  60%{opacity:1;transform:translateY(-2px) scale(1.01);}
  100%{opacity:1;transform:translateY(0) scale(1);}
}
.qRow{animation:rowSlideIn .25s var(--spring) both;}
.qRow:nth-child(1){animation-delay:0s}.qRow:nth-child(2){animation-delay:.04s}
.qRow:nth-child(3){animation-delay:.08s}.qRow:nth-child(4){animation-delay:.12s}
.qRow:nth-child(5){animation-delay:.16s}.qRow:nth-child(n+6){animation-delay:.2s}
/* Hover gaming — plus réactif */
.qRow{transition:all .12s var(--spring);}
.qRow:hover{border-color:rgba(255,255,255,.18) !important;background:rgba(255,255,255,.055) !important;transform:translateY(-3px) scale(1.008);box-shadow:0 12px 36px rgba(0,0,0,.5);}
.qRow:active{transform:scale(.98);transition-duration:.06s;}
.qRow.done:hover{background:rgba(34,197,94,.1) !important;}
/* Pop validation — effet Duolingo */
@keyframes validatePop{
  0%{transform:scale(1);}
  25%{transform:scale(1.05);}
  50%{transform:scale(.97);}
  75%{transform:scale(1.02);}
  100%{transform:scale(1);}
}
@keyframes validateShine{
  0%{background-position:-100% 0;}
  100%{background-position:200% 0;}
}
.qRow.justValidated{animation:validatePop .4s var(--bounce) both;}
.qRow.justValidated::before{
  content:'';position:absolute;inset:0;border-radius:15px;
  background:linear-gradient(90deg,transparent,rgba(255,255,255,.15),transparent);
  background-size:200% 100%;animation:validateShine .5s ease-out;pointer-events:none;
}
/* Rafraîchir flash */
@keyframes refreshPulse{0%{box-shadow:0 12px 40px rgba(0,0,0,.42)}50%{box-shadow:0 0 0 8px rgba(255,255,255,.09),0 12px 40px rgba(0,0,0,.42)}100%{box-shadow:0 12px 40px rgba(0,0,0,.42)}}
.refreshing{animation:refreshPulse .5s ease-out;}
/* XP bar flash */
@keyframes xpFlash{0%{filter:brightness(1)}40%{filter:brightness(2.4)}100%{filter:brightness(1)}}
.xpFlash{animation:xpFlash .45s ease-out;}
/* Streak pulse */
@keyframes streakPulse{
  0%{transform:scale(1);filter:brightness(1);}
  30%{transform:scale(1.5);filter:brightness(1.3);}
  60%{transform:scale(.85);}
  100%{transform:scale(1);filter:brightness(1);}
}
.streakPulse{display:inline-block;animation:streakPulse .45s var(--bounce);}
/* Num pop (niveau, XP text) — plus punchy */
@keyframes numPop{
  0%{transform:scale(1);filter:brightness(1);}
  40%{transform:scale(1.25);filter:brightness(1.2);}
  70%{transform:scale(.95);}
  100%{transform:scale(1);filter:brightness(1);}
}
.numPop{display:inline-block;animation:numPop .32s var(--bounce);}


/* ── XP FLOTTANT — Duolingo style ── */
.xpFloat{
  position:fixed;pointer-events:none;z-index:99998;
  font-family:'Syne',sans-serif;font-weight:800;font-size:22px;
  color:rgba(134,239,172,.95);
  text-shadow:0 0 12px rgba(34,197,94,.6),0 2px 4px rgba(0,0,0,.3);
  white-space:nowrap;
  animation:xpFloatUp .85s var(--spring) forwards;
}
.xpFloat.gold{color:rgba(255,200,50,.95);text-shadow:0 0 12px rgba(255,180,0,.6),0 2px 4px rgba(0,0,0,.3);}
.xpFloat.big{font-size:32px;animation-duration:1s;}
@keyframes xpFloatUp{
  0%{opacity:0;transform:translateY(8px) scale(.6);}
  15%{opacity:1;transform:translateY(0) scale(1.15);}
  35%{transform:translateY(-20px) scale(1.05);}
  100%{opacity:0;transform:translateY(-70px) scale(.8);}
}

/* ── CONFETTI PARTICULES — plus festif ── */
.conf{
  position:fixed;pointer-events:none;z-index:99997;
  width:6px;height:6px;border-radius:2px;
  animation:confFly var(--dur,.8s) cubic-bezier(.25,.46,.45,.94) forwards;
}
@keyframes confFly{
  0%{opacity:1;transform:translate(0,0) rotate(0deg) scale(1);}
  50%{opacity:1;}
  100%{opacity:0;transform:translate(var(--tx,0px),var(--ty,60px)) rotate(var(--rot,540deg)) scale(.4);}
}

/* ── LEVEL-UP MEGA BURST ── */
.confBig{
  position:fixed;pointer-events:none;z-index:99998;
  width:8px;height:8px;border-radius:50%;
  animation:confBigFly var(--dur,1.2s) cubic-bezier(.15,.8,.3,1) forwards;
}
@keyframes confBigFly{
  0%{opacity:1;transform:translate(0,0) rotate(0deg) scale(1.2);}
  40%{opacity:1;}
  100%{opacity:0;transform:translate(var(--tx,0px),var(--ty,-100px)) rotate(var(--rot,720deg)) scale(.2);}
}

/* ── SCREEN GLOW on level-up ── */
@keyframes lvlUpGlow{
  0%{box-shadow:inset 0 0 0 0 rgba(255,255,255,0);}
  30%{box-shadow:inset 0 0 120px 20px rgba(255,255,255,.08);}
  100%{box-shadow:inset 0 0 0 0 rgba(255,255,255,0);}
}
.lvlUpGlow{animation:lvlUpGlow 1.5s ease-out;}

/* ── STREAK MILESTONE TOAST ── */
.streakMilestoneToast{
  position:fixed;top:50%;left:50%;transform:translate(-50%,-50%) scale(.7);
  z-index:99999;padding:28px 40px;border-radius:20px;
  width:max-content;max-width:calc(100vw - 32px);box-sizing:border-box;
  background:rgba(12,12,20,.92);backdrop-filter:blur(20px);
  border:1px solid rgba(255,200,50,.3);
  text-align:center;opacity:0;pointer-events:none;
  animation:streakMilestoneIn .5s cubic-bezier(.22,1.6,.4,1) forwards;
}
@keyframes streakMilestoneIn{
  0%{opacity:0;transform:translate(-50%,-50%) scale(.7);}
  100%{opacity:1;transform:translate(-50%,-50%) scale(1);}
}
@keyframes streakMilestoneOut{
  0%{opacity:1;transform:translate(-50%,-50%) scale(1);}
  100%{opacity:0;transform:translate(-50%,-50%) scale(.9) translateY(-20px);}
}
.streakMilestoneToast .smtEmoji{font-size:48px;line-height:1;display:block;margin-bottom:12px;}
.streakMilestoneToast .smtTitle{display:block;font-family:'Syne',sans-serif;font-size:22px;font-weight:800;color:rgba(255,200,50,.95);letter-spacing:-0.5px;line-height:1.2;}
.streakMilestoneToast .smtSub{display:block;font-size:13px;color:rgba(255,255,255,.5);margin-top:6px;line-height:1.4;}
.streakMilestoneToast .smtMult{display:block;font-size:14px;font-weight:700;color:rgba(134,239,172,.9);margin-top:10px;}

/* ── BARRE JOURNALIERE — gaming progress ── */
.dayProgressBar{margin-bottom:12px;padding:10px 12px;border-radius:14px;border:1px solid rgba(255,255,255,.08);background:rgba(255,255,255,.02);transition:all .2s ease;}
.dayProgressBar:hover{border-color:rgba(255,255,255,.12);background:rgba(255,255,255,.03);}
.dayProgTop{display:flex;align-items:baseline;justify-content:space-between;margin-bottom:8px;}
.dayProgLabel{font-size:10px;font-weight:700;letter-spacing:1.2px;text-transform:uppercase;color:rgba(255,255,255,.35);}
.dayProgCount{font-family:'Syne',sans-serif;font-size:24px;font-weight:800;line-height:1;color:#fff;transition:transform .2s var(--spring);}
.dayProgCount .slash{color:rgba(255,255,255,.25);font-size:14px;font-weight:500;font-family:'Space Grotesk',sans-serif;}
.dayProgTrack{height:8px;border-radius:999px;background:rgba(255,255,255,.07);overflow:visible;position:relative;}
.dayProgFill{height:100%;border-radius:999px;background:linear-gradient(90deg,rgba(255,255,255,.9),rgba(255,255,255,.4));transition:width .5s var(--spring);position:relative;}
.dayProgFill.done{background:linear-gradient(90deg,rgba(34,197,94,.95),rgba(34,197,94,.5));}
.dayProgFill::after{content:'';position:absolute;right:-4px;top:-4px;width:10px;height:10px;border-radius:50%;background:#fff;box-shadow:0 0 8px rgba(255,255,255,.7),0 0 16px rgba(255,255,255,.4);transition:all .3s var(--spring);}
.dayProgFill.done::after{background:rgba(134,239,172,1);box-shadow:0 0 10px rgba(34,197,94,.8),0 0 20px rgba(34,197,94,.4);}
/* Pulse quand complet */
@keyframes progressComplete{0%,100%{transform:scale(1);}50%{transform:scale(1.08);}}
.dayProgFill.done::after{animation:progressComplete 1.5s ease-in-out infinite;}

/* ── HOVER ROW GLOW ── */
@keyframes doneGlow{0%{box-shadow:0 0 0 0 rgba(34,197,94,.35)}60%{box-shadow:0 0 0 6px rgba(34,197,94,0)}100%{box-shadow:0 0 0 0 rgba(34,197,94,0)}}
.qRow.justValidated.done{animation:validatePop .32s cubic-bezier(.22,1.5,.4,1) both,doneGlow .55s ease-out .1s both;}

/* ── STREAK HOT ── */
@keyframes streakHot{0%,100%{transform:scale(1)}50%{transform:scale(1.2);color:rgba(255,200,50,.95);}}
.streakHot{display:inline-block;animation:streakHot .35s cubic-bezier(.22,1.6,.4,1);}

/* ── PRIORITY CARD PULSE ── */
@keyframes prioPulse{0%,100%{border-color:rgba(255,200,50,.18)}50%{border-color:rgba(255,200,50,.35)}}
/* prioPulse retiré (10 juillet) : la carte n'est plus un .sb (elle disparaissait quand
   l'animation d'entrée ne rejouait pas sur iOS) et une animation border-color infinite
   violerait la règle FPS. Visibilité de la carte = jamais dépendante d'une animation. */
.priorityCard{animation:none;opacity:1;transform:none;}

/* ── XP BAR SHIMMER ── */
@keyframes xpShimmer{0%{background-position:-200% 0}100%{background-position:200% 0}}
.xpFill{background-size:200% 100%;background-image:linear-gradient(90deg,rgba(255,255,255,.4) 0%,rgba(255,255,255,.88) 40%,rgba(255,255,255,.4) 100%);}
.xpFill.xpFlash{animation:xpFlash .45s ease-out,xpShimmer .8s ease-out .1s;}

/* ── LEVEL NUMBER GLOW ── */
@keyframes lvlGlow{0%,100%{opacity:.85}50%{opacity:1}}
#hudLevel{animation:lvlGlow 3s ease-in-out infinite;will-change:opacity;}

/* ── PILL EARNED ── */
@keyframes pillEarned{0%{background:rgba(255,255,255,.04)}50%{background:rgba(255,200,50,.12);border-color:rgba(255,200,50,.3)}100%{background:rgba(255,255,255,.04)}}
.pillEarned{animation:pillEarned .5s ease-out;}

/* ── INPUT FOCUS GLOW ── */
.qInput:focus{box-shadow:0 0 0 3px rgba(255,255,255,.06),0 2px 12px rgba(0,0,0,.3);}

/* ── ROW PRIORITY DEFAULT placeholder style ── */
.qRow.isPriority .qInput::placeholder{color:rgba(255,200,50,.35);}

@media(max-width:1280px){.grid{grid-template-columns:300px 1fr;}}
@media(max-width:1100px){.grid{grid-template-columns:1fr;}.topLeft{min-width:0;}.topRight{flex-wrap:wrap;}}
@media(max-width:900px) and (min-width:681px){body{overflow-x:hidden;overflow-y:auto;}.shell{height:auto;min-height:calc(100vh - 20px);}.topbar{flex-wrap:wrap;}.xpBar{width:110px;}}
@media(max-width:680px){.topbar{flex-wrap:wrap;}.xpBar{width:110px;}}

/* Tutoriel tooltip : fixé en bas sur mobile */
@media(max-width:680px){
  .tutTip{
    left:12px !important;right:12px !important;bottom:max(12px,env(safe-area-inset-bottom)) !important;
    top:auto !important;width:auto !important;max-width:none !important;
    max-height:calc(100vh - 24px - env(safe-area-inset-top) - env(safe-area-inset-bottom));
    overflow:auto;transform:translateY(8px) !important;
    padding:18px 18px calc(18px + env(safe-area-inset-bottom));
  }
  .tutTip.show{transform:translateY(0) !important;}
  .tutTip.actionStep{
    top:max(12px,env(safe-area-inset-top)) !important;bottom:auto !important;
    max-height:min(36vh,250px);padding:14px 14px 12px !important;
  }
  .tutTip.actionStep.keepBottom{
    top:auto !important;bottom:max(12px,env(safe-area-inset-bottom)) !important;
    max-height:calc(100vh - 24px - env(safe-area-inset-top) - env(safe-area-inset-bottom));
    padding:18px 18px calc(18px + env(safe-area-inset-bottom)) !important;
  }
  .tutBubble{top:env(safe-area-inset-top,12px);right:12px;left:12px;max-width:none;max-height:calc(100vh - 24px - env(safe-area-inset-top) - env(safe-area-inset-bottom));padding:16px 16px;}
  .tutBubble.show{animation-name:tutBubbleSlideIn;}
  .tutBubbleAvatar{width:40px;height:40px;font-size:22px;}
  .tutBubbleText{font-size:13px;}
  .tutGenderRow{gap:10px;}
  .tutGenderBtn{min-height:132px;padding:14px 12px;}
  .unlockCard,.dayCard,.vModalCard,.weekRecapCard,.instantCard,.advWarnCard,.iosInstallCard{
    width:calc(100vw - 24px);max-width:none;
  }
  .unlockCard{padding:30px 22px;border-radius:22px;}
  .weekRecapCard,.vModalCard,.dayCard,.iosInstallCard,.instantCard,.advWarnCard{padding:22px 18px;border-radius:18px;}
  .weekRecapCard{max-height:calc(100vh - 24px - env(safe-area-inset-top) - env(safe-area-inset-bottom));}
}
@media(max-width:380px){
  .tutBubble{gap:10px;padding:14px 12px;}
  .tutBubbleAvatar{width:36px;height:36px;font-size:20px;}
  .tutBubbleText{font-size:12px;gap:6px;}
  .tutBubbleBtn{padding:8px 16px;font-size:11px;}
  .tutGenderRow{grid-template-columns:repeat(2,1fr);gap:8px;}
  .tutGenderBtn{min-height:110px;padding:12px 8px;}
  .tutGenderIcon{font-size:28px;}
  .tutGenderLabel{font-size:10px;letter-spacing:.6px;}
}

/* Mobile : animations latérales pour une interface qui glisse */
@media(max-width:680px){
  /* Animation mobile latérale — glissement depuis la droite */
  @keyframes slideInRightMobile{
    0%{opacity:0;transform:translateX(30px);}
    100%{opacity:1;transform:translateX(0);}
  }
  /* Animation mobile latérale — glissement depuis la gauche */
  @keyframes slideInLeftMobile{
    0%{opacity:0;transform:translateX(-30px);}
    100%{opacity:1;transform:translateX(0);}
  }
  /* Default : vertical subtil pour les .sb sans direction */
  @keyframes popInMobile{
    0%{opacity:0;transform:translateY(10px) scale(.96);}
    70%{opacity:1;transform:translateY(-2px) scale(1.01);}
    100%{opacity:1;transform:translateY(0) scale(1);}
  }
  .screenVisible .sb{
    animation-name:popInMobile !important;
    animation-duration:.28s !important;
    animation-timing-function:ease-out !important;
  }
  /* Direction latérale sur mobile */
  .screenVisible.fromRight .sb{
    animation-name:slideInRightMobile !important;
    animation-duration:.25s !important;
    animation-timing-function:cubic-bezier(.22,1,.36,1) !important;
  }
  .screenVisible.fromLeft .sb{
    animation-name:slideInLeftMobile !important;
    animation-duration:.25s !important;
    animation-timing-function:cubic-bezier(.22,1,.36,1) !important;
  }
  /* Stagger mobile */
  .screenVisible .sb:nth-child(1){animation-delay:0ms !important;}
  .screenVisible .sb:nth-child(2){animation-delay:30ms !important;}
  .screenVisible .sb:nth-child(3){animation-delay:60ms !important;}
  .screenVisible .sb:nth-child(4){animation-delay:90ms !important;}
  .screenVisible .sb:nth-child(5){animation-delay:120ms !important;}
  .screenVisible .sb:nth-child(6){animation-delay:150ms !important;}

  /* Quest rows — feedback subtil */
  .qRow{
    transition:all .12s ease-out !important;
  }
  .qRow:active{
    transform:scale(.975) !important;
    background:rgba(255,255,255,.05) !important;
  }

  /* Tabs mobile — feedback */
  .natItem{
    transition:all .1s ease-out !important;
  }
  .natItem:active{
    transform:scale(.92) !important;
    background:rgba(255,255,255,.07) !important;
  }
}

/* ═══════════════════════════════════════════
   MOBILE — max 680px (desktop INCHANGÉ)
═══════════════════════════════════════════ */
.mobileNav { display:none; }
.mobileHud { display:none; }

@media(max-width:680px){

  /* ── Override du 900px : body ne doit PAS scroller sur mobile ── */
  html,body{overflow:hidden !important;overscroll-behavior:none;}

  /* ── Inputs : 16px obligatoire sinon iOS zoome et décale la page ── */
  input[type=email],input[type=password],input[type=text],input[type=number],
  textarea,.qInput,.inputMini,
  .vModalInput,.vModalTargetInput,.vModalCaptionInput,
  .qQuantModalInput{font-size:16px !important;}

  /* ── Shell plein écran ── */
  .appRoot{
    padding:0;align-items:stretch;
    height:var(--app-height,100lvh);
    min-height:var(--app-height,100lvh);
    overflow:hidden;
  }
  .shell{
    height:100vh; /* fallback */
    /* ⚠ lvh, PAS dvh (3 août, vidéo d'Aurian lue image par image) : sur iOS,
       dvh SUIT la barre Safari : barre étendue = shell raccourci = nav qui
       « monte » au-dessus d'un vide noir (frames 69-90 de la preuve). lvh est
       le GRAND viewport, constant : la nav vit au bas PHYSIQUE de l'écran et
       la barre passe par-dessus, comme sur tout le web. Le px ne revient que
       clavier ou dock ouvert (--app-height, posé par le moteur JS). */
    height:100lvh;
    height:var(--app-height,100lvh);
    max-height:var(--app-height,100lvh);
    border-radius:0;
    border:none;
    overflow:hidden;
    display:flex;
    flex-direction:column;
    padding-top:env(safe-area-inset-top,0px);
    position:relative;z-index:2;
  }
  /* ── LE SHELL GLISSE, IL NE SAUTE PLUS ──────────────────────────
     `transition:none` était NÉCESSAIRE tant qu'on réécrivait la hauteur à
     chaque frame de la montée du clavier : animer un accordéon aurait été
     pire que le subir. Maintenant que la géométrie ne s'écrit qu'UNE fois,
     une fois qu'elle a cessé de bouger, la transition redevient possible —
     et c'est elle qui manquait : le contenu sautait d'un coup, la case
     disparaissait et réapparaissait sèchement (retour user).
     Une seule courbe, douce, appliquée à l'ouverture COMME à la fermeture. */
  .shell{transition:height .24s cubic-bezier(.22,.61,.36,1),
                    transform .24s cubic-bezier(.22,.61,.36,1);}
  body.kbOpen .shell{transform:translateY(var(--vv-top,0px));animation:none!important;}
  /* Un clavier natif hors du composeur ne doit jamais faire flotter les
     onglets au-dessus des touches. Ils disparaissent pendant la saisie puis
     reprennent exactement leur place au bas du viewport. */
  body.kbOpen:not(.cmpOpen) .mobileNav{visibility:hidden;pointer-events:none;}
  body.kbOpen .appRoot::after{display:none;}
  body.kbSettle .shell{animation:none!important;}
  /* Le contenu suit le même mouvement au lieu de se recomposer d'un bloc. */
  body.kbOpen .cardBody{scroll-behavior:smooth;}

  /* Barre sombre sous le shell — couvre le gap Safari sans toucher l'image de fond */
  .appRoot::after{
    content:'';
    position:fixed;
    left:0;right:0;bottom:0;
    height:120px;
    background:#080808;
    z-index:1;
    pointer-events:none;
  }

  /* ── Topbar ultra-compact ── */
  .topbar{
    padding:10px 16px;
    gap:8px;
    border-bottom:1px solid rgba(255,255,255,.07);
    flex-shrink:0;
    flex-wrap:nowrap;
    align-items:center;
  }
  .topMid{ display:none; }
  .topRight{ display:none; }
  .t1{ font-size:15px; font-weight:800; }
  .t2{ font-size:11px; color:rgba(255,255,255,.45); }
  .avatarBadge{ width:34px; height:34px; font-size:13px; flex-shrink:0; }
  .topLeft{ gap:8px; }

  /* ── Grid → colonne unique, sans padding ── */
  .grid{
    grid-template-columns:1fr;
    padding:0;
    gap:0;
    flex:1;
    min-height:0;
    overflow:hidden;
  }
  .grid > .card:first-child{ display:none; } /* card gauche cachée */
  .grid > .card:last-child{
    border-radius:0;
    border:none;
    box-shadow:none;
    overflow:hidden;
    display:flex;
    flex-direction:column;
    min-height:0;
  }
  .cardHead{ padding:16px 18px 10px; flex-shrink:0; }
  .cardHead .h{ font-size:17px; }
  .cardBody{
    padding:0 0 16px;
    overflow-y:auto;
    overflow-x:hidden;
    -webkit-overflow-scrolling:touch;
    overscroll-behavior:contain;
    flex:1;
    min-height:0;
  }

  /* ── Bottom nav ── */
  .mobileNav{
    display:flex;
    border-top:1px solid rgba(255,255,255,.08);
    background:rgba(4,4,4,.55);
    backdrop-filter:blur(28px);
    -webkit-backdrop-filter:blur(28px);
    padding:6px 0 max(8px,env(safe-area-inset-bottom));
    flex-shrink:0;
    z-index:100;
  }
  .mnBtn{
    flex:1;
    display:flex;
    flex-direction:column;
    align-items:center;
    gap:3px;
    padding:6px 4px;
    border:none;
    background:transparent;
    cursor:pointer;
    -webkit-tap-highlight-color:transparent;
    touch-action:manipulation;
    transition:opacity .15s;
  }
  .mnIcon{
    font-size:22px;
    line-height:1;
    opacity:.38;
    transition:opacity .15s, transform .2s cubic-bezier(.34,1.56,.64,1);
  }
  .mnLabel{
    font-size:9px;
    font-weight:700;
    letter-spacing:.5px;
    text-transform:uppercase;
    color:rgba(255,255,255,.28);
    font-family:'Space Grotesk',sans-serif;
    transition:color .15s;
  }
  .mnBtn.active .mnIcon{ opacity:1; transform:scale(1.15); }
  .mnBtn.active .mnLabel{ color:rgba(255,255,255,.85); }

  /* ── Topbar supprimée sur téléphone : identité dans le HUD, engrenage dans le cardHead ── */
  .topbar{display:none;}

  /* ── Mobile HUD hero (dans screenDash) ── */
  .mobileHud{
    display:flex;
    flex-direction:column;
    gap:0;
    padding:14px 18px 4px;
    background:linear-gradient(180deg,rgba(255,255,255,.03) 0%,transparent 100%);
    border-bottom:1px solid rgba(255,255,255,.06);
    margin-bottom:2px;
    opacity:1;transform:none;
  }
  .mhIdRow{display:flex;align-items:center;gap:10px;margin-bottom:12px;}
  /* LES QUATRE ENTRÉES HORS NAV : elles vivent dans LEUR rangée, qui porte la
     marge automatique et un gap serré. Posées à plat dans .mhIdRow, la ligne
     débordait et l'engrenage des Réglages sortait de l'écran (injouable). */
  .mhBtnRow{display:flex;align-items:center;gap:4px;margin-left:auto;flex:0 0 auto;}
  /* LE TEXTE CÈDE, LES BOUTONS JAMAIS : quatre boutons de 38 px plus leurs gaps
     font 166 px, et la ligne d'info refusait de rétrécir → l'engrenage sortait
     de l'écran. Le voisin flexible se rétrécit, la rangée ne se casse pas
     (même règle que les chips du bilan). */
  .mhIdRow>.smallText{flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
  /* LES BOUTONS GARDENT LEUR TAILLE (retour user) : 38 px et leur ecart
     d'origine. C'est l'EN-TETE qui cede (le titre est court, la ligne d'info
     s'efface sous 430 px) : jamais la cible tactile. */
  /* L'ecart est porte par le gap de la rangee, jamais par des marges d'id
     (une vieille regle #mhSettingsGear{margin-left:4px} donnait 4 px entre
     deux boutons et 8 px avant le troisieme). */
  .mhBtnRow .mhGearBtn,
  .mhBtnRow #mhSettingsGear.mhGearBtn,
  .mhBtnRow #mhSacGear.mhGearBtn{margin:0;}
  .mhAva{width:34px;height:34px;border-radius:12px;background:linear-gradient(135deg,rgba(96,165,250,.35),rgba(167,139,250,.35));border:1px solid rgba(255,255,255,.14);display:flex;align-items:center;justify-content:center;font-family:'Syne',sans-serif;font-weight:800;font-size:14px;color:#fff;flex-shrink:0;}
  .mhIdTxt{flex:1;min-width:0;}
  .mhPseudo{font-family:'Syne',sans-serif;font-weight:800;font-size:15px;color:#fff;letter-spacing:-.2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
  .mhDate{font-size:10.5px;color:rgba(255,255,255,.42);margin-top:1px;font-family:'Space Grotesk',sans-serif;}
  .mhTop{
    display:flex;
    gap:12px;
    margin-bottom:14px;
  }
  /* ── Engrenage dans le cardHead (en flux : ne peut ni bouger ni rater un tap) ── */
  .mhGearBtn{
    display:flex;align-items:center;justify-content:center;
    width:38px;height:38px;
    margin-left:auto;
    flex-shrink:0;
    background:transparent;
    border:none;
    color:rgba(255,255,255,.65);
    font-size:19px;
    line-height:1;
    cursor:pointer;
    -webkit-tap-highlight-color:transparent;
    touch-action:manipulation;
    transition:color .15s;
  }
  .mhGearBtn .gi{transition:transform .18s ease;}
  .mhGearBtn:active .gi{transform:rotate(30deg);}
  .mhGearBtn.active{color:#fff;}
  .mhGearBtn.active .gi{transform:rotate(40deg);}
  .mhStat{
    flex:1;
    background:rgba(255,255,255,.04);
    border:1px solid rgba(255,255,255,.07);
    border-radius:16px;
    padding:12px 14px;
    display:flex;
    flex-direction:column;
    gap:2px;
  }
  .mhStatVal{
    font-family:'Syne',sans-serif;
    font-size:28px;
    font-weight:900;
    line-height:1;
    color:#fff;
  }
  .mhStatVal.gold{ color:rgba(255,200,50,.95); }
  .mhStatLabel{
    font-size:10px;
    font-weight:700;
    letter-spacing:.6px;
    text-transform:uppercase;
    color:rgba(255,255,255,.38);
    font-family:'Space Grotesk',sans-serif;
  }
  .mhXpRow{ display:flex; flex-direction:column; gap:6px; }
  .mhXpLabels{ display:flex; justify-content:space-between; align-items:center; }
  .mhXpLeft{ font-size:11px; font-weight:700; color:rgba(255,255,255,.5); letter-spacing:.4px; font-family:'Space Grotesk',sans-serif; }
  .mhXpRight{ font-size:11px; font-weight:700; color:rgba(255,255,255,.35); font-family:'Share Tech Mono',monospace; }
  .mhXpBar{
    height:6px;
    border-radius:999px;
    background:rgba(255,255,255,.08);
    overflow:hidden;
    border:1px solid rgba(255,255,255,.06);
  }
  .mhXpFill{
    height:100%;
    border-radius:999px;
    background:linear-gradient(90deg,rgba(96,165,250,.9) 0%,rgba(139,92,246,.85) 50%,rgba(167,139,250,.95) 100%);
    transition:width .5s cubic-bezier(.22,1,.36,1);
    box-shadow:0 0 8px rgba(96,165,250,.5),0 0 20px rgba(96,165,250,.2);
    position:relative;overflow:hidden;
  }
  .mhXpFill::after{
    content:'';position:absolute;inset:0;
    background:linear-gradient(90deg,transparent 0%,rgba(255,255,255,.35) 50%,transparent 100%);
    width:40%;animation:xpShimmer 2.5s ease-in-out infinite;
  }

  /* ── Vision tree mobile ── */
  #screenVision{padding:8px 0 16px;}
  .vtreeBar{padding:6px 14px;gap:4px;}
  .vtreeBarBtn{padding:7px 6px;font-size:10px;border-radius:9px;}
  .vtreeNav{margin:0 14px 8px;padding:6px;}
  .vtreeNavArrow{width:28px;height:28px;font-size:11px;}
  .vtreeNavCenter{font-size:12px;}
  .vtreeCanvas{padding:0 10px 80px;}
  .vtreeNode{padding:10px 10px 10px 13px;}
  .vtreeNode .vtreeNodeTitle{font-size:13px;}
  .vtreeChildren{margin-left:14px;padding-left:14px;}
  .vtreeSheet{max-height:80vh;}
  .vtreeGuideCard{width:92%;padding:24px 18px;}
  .vWeekStrip{gap:2px;padding:3px;border-radius:10px;}
  .vDayCell{padding:6px 2px;border-radius:8px;}
  .vDayName{font-size:8px;letter-spacing:.3px;}
  .vDayNum{font-size:13px;}
  .vDayTaskCount{font-size:7px;}
  .vDayDetail{padding:12px;border-radius:12px;}
  .vDayDetailTitle{font-size:12px;}
  .vDayDetailDate{font-size:10px;}
  .vDayTask{padding:7px 8px;font-size:11px;}
  .vDayTask .vdtDel{opacity:1;}
  .vYearGrid{gap:4px;padding:8px;border-radius:12px;}
  .vYearGridCell{padding:7px 2px;font-size:10px;}
  .vMonthWeekStrip{gap:4px;padding:4px;border-radius:12px;}
  .vMonthWeekCell{padding:6px 4px;}
  .vMonthWeekCell .vmwLabel{font-size:11px;}
  .vMonthWeekCell .vmwRange{font-size:8px;}

  /* ── Dashboard : objectifs ── */
  #screenDash{ padding:0; }
  .toolbar{
    padding:12px 18px 8px;
    gap:8px;
    flex-wrap:wrap;
  }
  .toolbarNote{
    font-size:10px;
    color:rgba(255,255,255,.3);
    width:100%;
    line-height:1.4;
  }
  .questList{ padding:0 12px; }
  .qRow{
    border-radius:16px;
    padding:12px 12px;
    margin-bottom:8px;
    border:1px solid rgba(255,255,255,.07);
  }
  .qInput{
    font-size:16px;
    padding:8px 4px;
    border-radius:10px;
    min-height:44px;
  }
  .qRowBot{ gap:5px; flex-wrap:wrap; padding-top:8px; }
  .qQuantInline{gap:2px;padding:2px 4px;}
  .qBtnGroup{width:100%;margin-left:0;justify-content:flex-end;flex-wrap:wrap;}
  .qBtn{ padding:8px 10px; font-size:10px; min-height:36px; border-radius:10px; }
  .qBtn.btnDelete{display:inline-flex;align-items:center;justify-content:center;min-width:38px;}
  .qNatBtn{ padding:8px 10px; font-size:10px; min-height:36px; }
  .qDiffSelect{ padding:8px 10px; font-size:10px; min-height:36px; }
  .qXpTag{ padding:8px 10px; font-size:10px; min-height:36px; }
  .qSlotBadge{ width:32px; height:32px; font-size:12px; border-radius:10px; }
  .ghostBox{ margin:12px 18px; border-radius:14px; }

  /* Priority card */
  .priorityCard{ margin:0 12px 4px; border-radius:14px; padding:10px 14px; }

  /* Day progress bar */
  .dayProgressBar{ margin:0 12px 4px; border-radius:14px; }

  /* msgBox */
  #msgBox{ margin:0 18px; border-radius:14px; }

  /* ── Stats screen ── */
  #screenProfile .ghostBox{ margin:12px 18px; border-radius:16px; }
  .statLine{ padding:11px 0; font-size:13px; }

  /* ── Historique ── */
  #screenHistory{ padding:12px 18px; }
  .calNavTitle{ font-size:14px; font-weight:800; }
  .calNavBtn{ padding:8px 12px; font-size:12px; min-height:36px; border-radius:10px; }
  .calGrid{ gap:4px; margin-top:4px; }
  .calDay{ border-radius:8px; font-size:11px; padding:8px 0; }
  .calDayLabel{ font-size:9px; }
  .calLegend{ margin-top:14px; gap:12px; }

  /* ── Achievements ── */
  #screenAchiev{ padding:12px 18px; }
  .achievGrid{ gap:8px; }
  .achievItem{ border-radius:16px; padding:12px 14px; gap:12px; }
  .achievEmoji{ font-size:22px; width:32px; }
  .achievName{ font-size:12px; font-weight:700; }
  .achievDesc{ font-size:11px; }

  /* ── Paramètres ── */
  #screenSettings{ padding:12px 16px 28px; }
  .settingsSection{ margin-bottom:16px; }
  .settingsSectionHead{
    padding:12px 14px;
    font-size:12px;
    border-radius:14px 14px 0 0;
    background:linear-gradient(135deg,rgba(255,255,255,.05),rgba(255,255,255,.02));
  }
  .settingsSectionHead .sIcon{ font-size:16px; }
  .settingsBox{ padding:6px 14px; border-radius:0 0 14px 14px; }
  .sRow{ padding:14px 0; }
  .sRow:hover{ margin:0; padding-left:0; padding-right:0; background:transparent; }
  .sLabel{ font-size:14px; font-weight:600; }
  .sLabelSub{ font-size:12px; }
  .dangerZone{ border-radius:16px; padding:14px 16px; margin-top:8px; }
  #creatorBox{ border-radius:16px; margin-top:8px; }

}
/* ── Creator Bar (inline dans les onglets) ── */
.creatorBar{display:flex;gap:6px;padding:8px 12px;margin:0 0 8px;
  border:1px solid rgba(168,85,247,.2);border-radius:10px;
  background:rgba(168,85,247,.05);flex-wrap:wrap;align-items:center;}
.creatorBar .btnTiny{font-size:10px;}
.creatorBarLabel{font-size:9px;font-weight:700;letter-spacing:.7px;
  text-transform:uppercase;color:rgba(168,85,247,.6);margin-right:4px;font-family:'Syne',sans-serif;}
@media(max-width:680px){

  /* ── Overlays ── */
  .lvlUpCard,.lvlDnCard,.achCard{ padding:24px 20px; border-radius:20px; width:calc(100vw - 32px); }
  .lvlUpNum,.lvlDnNum{ font-size:48px; }
  .achEmoji{ font-size:48px; }
  .achName{ font-size:26px; }
  /* width:auto laissait la carte grandir à la LARGEUR NATURELLE de son contenu :
     une rangée flex nowrap (range "entre X et Y") la poussait à 492px sur un écran
     de 390px → débordement des deux côtés (retour user). Largeur bornée au viewport. */
  .cfmCard{ padding:20px; border-radius:18px; margin:0; width:calc(100vw - 28px); max-width:480px; }

  /* ── Toast ── */
  .toast{
    right:12px;
    bottom:calc(68px + env(safe-area-inset-bottom));
    left:12px;
    max-width:none;
    font-size:12px;
    border-radius:14px;
  }

}


/* ══════════════════════════════════════════
   CURSEUR CUSTOM (PC uniquement) — géré par JS
══════════════════════════════════════════ */
@media(pointer:fine){
  #cursorDot{position:fixed;width:8px;height:8px;border-radius:50%;background:#fff;pointer-events:none;z-index:999999;transform:translate(-50%,-50%);transition:transform .1s ease,opacity .2s ease,background .2s ease;mix-blend-mode:difference;opacity:0;}
  #cursorRing{position:fixed;width:32px;height:32px;border-radius:50%;border:1.5px solid rgba(255,255,255,.5);pointer-events:none;z-index:999998;transform:translate(-50%,-50%);transition:width .2s ease,height .2s ease,opacity .2s ease,border-color .2s ease;mix-blend-mode:difference;opacity:0;}
  #cursorDot.clicking{transform:translate(-50%,-50%) scale(2.5);background:rgba(255,200,50,.9);}
  #cursorRing.clicking{width:20px;height:20px;border-color:rgba(255,200,50,.8);}
  #cursorDot.hovering{background:rgba(34,197,94,.9);}
  #cursorRing.hovering{width:48px;height:48px;border-color:rgba(34,197,94,.6);}
}

/* ══════════════════════════════════════════
   RIPPLE SUR BOUTONS
══════════════════════════════════════════ */
/* ══ UNE DÉCORATION NE DÉPLACE JAMAIS CE QU'ON TOUCHE ════════════════
   Cette règle posait `position:relative`. Comme elle vit PLUS BAS dans la
   feuille que les boutons eux-mêmes, elle gagnait à spécificité égale et
   écrasait leur position : un bouton en `absolute` (le « En savoir plus »
   de l'accueil) SAUTAIT à l'endroit qu'il aurait eu dans le flux, dès le
   premier contact du doigt, et le tap se perdait dans le déplacement.
   Le premier appui ne faisait rien, le second marchait.
   La position n'est donc plus imposée ici : addRipple ne la pose qu'aux
   éléments qui n'en ont aucune (voir app.js). */
.ripple-wrap{overflow:hidden;}
@keyframes rippleAnim{0%{transform:scale(0);opacity:.45}100%{transform:scale(4);opacity:0}}
.ripple-circle{position:absolute;border-radius:50%;background:rgba(255,255,255,.25);pointer-events:none;animation:rippleAnim .5s ease-out forwards;transform-origin:center;}

/* ══════════════════════════════════════════
   HOVER LIFTS — cards, pills, tabs, rows
══════════════════════════════════════════ */
.card{transition:box-shadow .2s ease,transform .2s ease;}
.card:hover{box-shadow:0 20px 60px rgba(0,0,0,.55);transform:translateY(-1px);}
.pill{transition:all .15s ease;}
.pill:hover{background:rgba(255,255,255,.08);transform:scale(1.04);}
.tab{transition:all .18s cubic-bezier(.34,1.56,.64,1);}
.tab:hover:not(.active){transform:translateY(-2px) scale(1.03);background:rgba(255,255,255,.06);color:rgba(255,255,255,.8);}
.tab.active{transform:none;}
.avatarBadge{transition:all .2s cubic-bezier(.34,1.56,.64,1);}
.avatarBadge:hover{transform:scale(1.12) rotate(-3deg);box-shadow:0 0 0 3px rgba(255,255,255,.15);}
.qRow{transition:transform .15s ease,box-shadow .15s ease,border-color .15s ease;}
.qRow:not(.done):hover{transform:translateX(3px);border-color:rgba(255,255,255,.12);box-shadow:0 4px 20px rgba(0,0,0,.3);}
.achievItem{transition:transform .18s cubic-bezier(.34,1.56,.64,1),box-shadow .18s ease,border-color .18s ease;}
.achievItem:hover{transform:translateY(-3px) scale(1.01);box-shadow:0 8px 32px rgba(0,0,0,.4);border-color:rgba(255,255,255,.12);}
.brandStat{transition:transform .2s ease,box-shadow .2s ease;}
.brandStat:hover{transform:translateY(-3px);box-shadow:0 8px 24px rgba(0,0,0,.3);}
.btnTiny{transition:all .15s cubic-bezier(.34,1.56,.64,1);}
.btnTiny:hover{transform:scale(1.06);}
.btnTiny:active{transform:scale(.95);}
.btn{transition:all .18s cubic-bezier(.34,1.56,.64,1);}
.btn:hover{transform:translateY(-2px);box-shadow:0 6px 20px rgba(0,0,0,.3);}
.btn:active{transform:translateY(0) scale(.98);}

/* ══════════════════════════════════════════
   LOGIN — reveal staggeré + glow champs
══════════════════════════════════════════ */
@keyframes loginReveal{from{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}
.formHead{animation:loginReveal .5s ease both;}
.fGroup:nth-child(2){animation:loginReveal .5s .08s ease both;}
.fGroup:nth-child(3){animation:loginReveal .5s .16s ease both;}
.fGroup:nth-child(4){animation:loginReveal .5s .24s ease both;}
.errBox{animation:loginReveal .3s ease both;}
.btn{animation:loginReveal .5s .28s ease both;}
.btn+.btn{animation:loginReveal .5s .34s ease both;}
.divider{animation:loginReveal .5s .38s ease both;}
.authCard{position:relative;overflow:hidden;}
.authCard::before{content:'';position:absolute;inset:0;background:radial-gradient(ellipse 100% 80% at 50% -10%,rgba(255,255,255,.05),transparent 60%);pointer-events:none;z-index:0;}
.authCard > *{position:relative;z-index:1;}
input[type=email]:focus,input[type=password]:focus,input[type=text]:focus{
  box-shadow:0 0 0 2px rgba(255,255,255,.12),0 0 20px rgba(255,255,255,.06) !important;
  border-color:rgba(255,255,255,.25) !important;
  background:rgba(255,255,255,.09) !important;
}
@keyframes fieldFocus{from{box-shadow:0 0 0 0 rgba(255,255,255,.2)}to{box-shadow:0 0 0 3px rgba(255,255,255,.1)}}

/* ══════════════════════════════════════════
   BRANDING CÔTÉ LOGIN — orbes animées
══════════════════════════════════════════ */
@keyframes orbFloat{0%,100%{transform:translate(-50%,-50%) scale(1) rotate(0deg)}33%{transform:translate(-50%,-50%) scale(1.15) rotate(120deg)}66%{transform:translate(-50%,-50%) scale(.9) rotate(240deg)}}
@keyframes orbFloat2{0%,100%{transform:translate(-50%,-50%) scale(.9)}50%{transform:translate(-50%,-50%) scale(1.2)}}
/* PERF : brandOrbs statiques (ils vivent derrière des .card en backdrop-filter) */
.brandOrb1{position:absolute;width:400px;height:400px;border-radius:50%;background:radial-gradient(circle,rgba(34,197,94,.06) 0%,transparent 70%);left:30%;top:35%;transform:translate(-50%,-50%);pointer-events:none;}
.brandOrb2{position:absolute;width:300px;height:300px;border-radius:50%;background:radial-gradient(circle,rgba(255,200,50,.04) 0%,transparent 70%);left:65%;top:55%;transform:translate(-50%,-50%);pointer-events:none;}
.brandOrb3{position:absolute;width:250px;height:250px;border-radius:50%;background:radial-gradient(circle,rgba(96,165,250,.05) 0%,transparent 70%);left:20%;top:65%;transform:translate(-50%,-50%);pointer-events:none;}

/* ══════════════════════════════════════════
   APP — boosters globaux
══════════════════════════════════════════ */
@keyframes shellIn{from{opacity:0;transform:scale(.98) translateY(10px)}to{opacity:1;transform:scale(1) translateY(0)}}
/* shellIn appliqué une seule fois via JS — pas en CSS permanent */

@keyframes cardIn{from{opacity:0;transform:translateY(14px)}to{opacity:1;transform:translateY(0)}}
.card:nth-child(1){animation:cardIn .4s .05s cubic-bezier(.22,1,.36,1) both;}
.card:nth-child(2){animation:cardIn .4s .12s cubic-bezier(.22,1,.36,1) both;}

/* Topbar elements stagger */
@keyframes topbarIn{from{opacity:0;transform:translateY(-8px)}to{opacity:1;transform:translateY(0)}}
.topLeft{animation:topbarIn .35s .1s ease both;}
.topMid{animation:topbarIn .35s .18s ease both;}
.topRight{animation:topbarIn .35s .25s ease both;}

/* Glow sur niveau dans topbar — défini plus haut avec will-change */

/* Streak badge pulse permanent si >0 */
@keyframes streakBadge{0%,100%{opacity:.85}50%{opacity:1}}
.pillGold{animation:streakBadge 2s ease-in-out infinite;will-change:opacity;}

/* qRow entrée staggerée via JS (classe ajoutée) */
@keyframes rowIn{from{opacity:0;transform:translateX(-8px)}to{opacity:1;transform:translateX(0)}}
.qRow{animation:rowIn .25s ease both;}

/* Done row : checkmark scale */
@keyframes doneCheck{0%{transform:scale(0) rotate(-20deg)}60%{transform:scale(1.3) rotate(5deg)}100%{transform:scale(1) rotate(0)}}
.qRow.done .qBtn.validate{animation:doneCheck .35s cubic-bezier(.34,1.56,.64,1);}

/* XP float encore plus dramatique */
@keyframes xpFloatUp{0%{opacity:1;transform:translateY(0) scale(1.2)}20%{opacity:1;transform:translateY(-20px) scale(1.15)}100%{opacity:0;transform:translateY(-80px) scale(.7)}}

/* Penalty shake plus violent */
@keyframes shake{0%,100%{transform:translateX(0)}15%{transform:translateX(-12px)}30%{transform:translateX(12px)}45%{transform:translateX(-8px)}60%{transform:translateX(8px)}75%{transform:translateX(-4px)}90%{transform:translateX(4px)}}

/* Screen transitions */
.screenAnim{animation:screenFadeIn .3s cubic-bezier(.22,1,.36,1) both;}

/* ══════════════════════════════════════════
   MOBILE — logout dans settings + emoji
══════════════════════════════════════════ */
@media(max-width:680px){
  .mobileLogoutRow{display:flex !important;}
}


/* Message humouristique mobile — apparaît en haut */
#msgMobile{
  position:fixed;
  top:70px;
  left:12px;right:12px;
  z-index:9000;
  background:rgba(10,10,10,.95);
  border:1px solid rgba(255,255,255,.12);
  border-radius:16px;
  padding:14px 16px;
  font-size:13px;
  line-height:1.5;
  color:rgba(255,255,255,.85);
  box-shadow:0 8px 32px rgba(0,0,0,.5);
  opacity:0;
  transform:translateY(-8px);
  transition:opacity .3s ease,transform .3s ease;
  pointer-events:none;
  display:none;
}
#msgMobile.show{opacity:1;transform:translateY(0);}
@media(min-width:681px){#msgMobile{display:none !important;}}
@media(max-width:680px){#msgMobile{display:block;}}


/* ══════════════════════════════
   STATS VISUELLES
══════════════════════════════ */
.chartSection{margin:14px 0 4px;padding:16px 16px 14px;border-radius:18px;border:1px solid rgba(255,255,255,.08);background:rgba(255,255,255,.025);}
@media(max-width:680px){.chartSection{margin:12px 18px 0;}}
.chartTitle{font-size:9.5px;font-weight:800;letter-spacing:2px;text-transform:uppercase;color:rgba(255,255,255,.42);font-family:'Space Grotesk',sans-serif;margin-bottom:12px;}

/* ── Pseudo éditable inline (clique le nom) ── */
.pseudoEdit{cursor:pointer;transition:opacity .15s ease;}
.pseudoEdit:hover{opacity:.85;text-decoration:underline dashed rgba(255,255,255,.35);text-underline-offset:4px;text-decoration-thickness:1px;}
.giLock{width:12px;height:12px;fill:rgba(255,255,255,.4);vertical-align:-1px;}
.pseudoInlineInput{font:inherit;color:#fff;background:rgba(255,255,255,.08);border:1px solid rgba(167,139,250,.5);border-radius:9px;padding:2px 10px;outline:none;width:100%;max-width:230px;box-sizing:border-box;}
/* ── Carte de duel (dash, niveau 5+) ── */
.advInvite{padding:16px;border-radius:18px;border:1px solid rgba(239,68,68,.22);background:linear-gradient(160deg,rgba(239,68,68,.06),rgba(239,68,68,.015) 60%);}
.advInviteHead{display:flex;align-items:center;gap:8px;font-family:'Syne',sans-serif;font-weight:800;font-size:14px;color:#fff;}
.advInviteHead .gi{width:16px;height:16px;fill:url(#giGrad);}
.advInviteSub{font-size:11.5px;color:rgba(255,255,255,.45);margin:5px 0 12px;line-height:1.5;}
.advInviteOpts{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:12px;}
.advInviteOpt{flex:1;min-width:86px;padding:9px 6px;border-radius:12px;border:1px solid rgba(255,255,255,.1);background:rgba(255,255,255,.04);color:rgba(255,255,255,.7);font-size:11px;font-weight:700;cursor:pointer;font-family:'Space Grotesk',sans-serif;transition:all .15s ease;display:flex;flex-direction:column;align-items:center;gap:2px;-webkit-tap-highlight-color:transparent;}
.advInviteOpt span{font-size:10px;color:rgba(251,191,36,.8);font-weight:800;}
.advInviteOpt:hover{border-color:rgba(255,255,255,.25);}
.advInviteOpt.active{border-color:rgba(239,68,68,.55);background:rgba(239,68,68,.12);color:#fff;}
.advInviteGo{width:100%;padding:13px;border:none;border-radius:13px;background:linear-gradient(135deg,#ef4444,#f97316);color:#fff;font-weight:800;font-size:11.5px;text-transform:uppercase;letter-spacing:.8px;cursor:pointer;font-family:'Space Grotesk',sans-serif;transition:transform .15s ease,box-shadow .15s ease;}
.advInviteGo:hover{transform:translateY(-1px);box-shadow:0 10px 26px -12px #ef4444;}
.advInviteGo .gi{width:13px;height:13px;vertical-align:-2px;fill:#fff;}
/* ═══ SOUS-ONGLETS AUJOURD'HUI / VISION ═══ */
.dvSeg{display:flex;gap:5px;padding:5px;border-radius:14px;border:1px solid rgba(255,255,255,.09);background:rgba(255,255,255,.03);margin-bottom:14px;position:sticky;top:0;z-index:5;backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);}
.dvSeg.hidden{display:none;}
.dvSegBtn{flex:1;padding:9px 12px;border:none;border-radius:10px;background:transparent;color:rgba(255,255,255,.5);font-family:'Space Grotesk',sans-serif;font-size:11.5px;font-weight:800;letter-spacing:.6px;text-transform:uppercase;cursor:pointer;transition:all .18s ease;-webkit-tap-highlight-color:transparent;}
.dvSegBtn:hover{color:rgba(255,255,255,.8);}
.dvSegBtn.active{background:linear-gradient(135deg,rgba(96,165,250,.18),rgba(167,139,250,.18));color:#fff;box-shadow:inset 0 0 0 1px rgba(167,139,250,.35),0 4px 14px -8px rgba(167,139,250,.6);}
@media(max-width:680px){.dvSeg{margin:0 18px 12px;}}
/* Focus du tableau : même sélecteur que Aujourd'hui / Vision, mais à
   l'intérieur du jour. L'état est un engagement d'exécution réversible. */
.dashFocusSeg{position:relative;top:auto;z-index:4;margin:0 0 10px;padding:4px;background:rgba(8,10,18,.34);}
.dashFocusSeg .dvSegBtn{padding:7px 10px;font-size:10.5px;}
.dashFocusSeg .dvSegBtn em{display:inline-flex;align-items:center;justify-content:center;min-width:18px;height:18px;
  margin-left:5px;padding:0 5px;border-radius:99px;font-style:normal;font-size:9px;
  color:rgba(255,255,255,.55);background:rgba(255,255,255,.07);border:1px solid rgba(255,255,255,.08);}
.dashFocusSeg .dvSegBtn.active em{color:#ddd6fe;background:rgba(167,139,250,.14);border-color:rgba(167,139,250,.24);}
.dashFocusEmpty{display:flex;align-items:center;gap:11px;padding:18px;border-radius:15px;
  border:1px solid rgba(74,222,128,.18);background:rgba(74,222,128,.045);}
.dashFocusEmpty>.gi{width:20px;height:20px;fill:#4ade80;flex:none;}
.dashFocusEmpty span{display:flex;flex-direction:column;gap:3px;min-width:0;}
.dashFocusEmpty b{font-size:12px;color:rgba(255,255,255,.82);}
.dashFocusEmpty em{font-style:normal;font-size:10.5px;line-height:1.4;color:rgba(255,255,255,.38);}
/* L'user a promis d'agir : le tableau ne garde que la sortie et les actions
   réellement prêtes. Les cartes sont seulement masquées, jamais supprimées. */
#screenDash.dashFocusOn{min-height:100%;padding-top:1px;
  background:radial-gradient(circle at 50% 8%,rgba(167,139,250,.075),transparent 42%);}
#screenDash.dashFocusOn>:not(#dashFocusSeg):not(#questList){display:none!important;}
#screenDash.dashFocusOn>.dashFocusSeg{position:sticky;top:0;z-index:7;margin-top:0;
  border-color:rgba(167,139,250,.24);background:rgba(8,10,18,.9);
  box-shadow:0 10px 26px -18px rgba(167,139,250,.9);}
#screenDash.dashFocusOn>.questList{position:relative;}
#screenDash.dashFocusOn .qRow:not(.isPriority){border-color:rgba(167,139,250,.14)!important;}
.focusLocked{cursor:not-allowed!important;}
/* L'assombrissement porte sur la coque et la navigation, jamais sur les
   objectifs. Les éléments restent tactiles afin d'expliquer le verrou. */
body.focusModeActive .shell{background:rgba(4,5,9,.78);border-color:rgba(167,139,250,.18);
  box-shadow:var(--shadow),inset 0 0 70px rgba(0,0,0,.36),0 0 36px rgba(76,29,149,.08);}
body.focusModeActive .shellAura{opacity:.12;}
body.focusModeActive .topbar{opacity:.25;}
body.focusModeActive .grid>.card:first-child{filter:brightness(.22) saturate(.35);}
body.focusModeActive .grid>.card:last-child>.cardHead{opacity:.3;}
body.focusModeActive #dvSeg{display:none!important;}
body.focusModeActive .mobileNav{background:rgba(2,3,7,.92);}
body.focusModeActive .mobileNav .mnBtn:not(#mnDash){opacity:.14;}
body.focusModeActive .mobileNav #mnDash{opacity:.72;}
@media(max-width:680px){.dashFocusSeg{margin:0 18px 10px;}}

/* ═══ PROFIL : FICHE DE HÉROS ═══ */
.phHero{position:relative;display:flex;align-items:center;gap:20px;padding:22px 20px;border-radius:22px;border:1px solid rgba(255,255,255,.1);background:rgba(255,255,255,.03);overflow:hidden;}
.phAura{position:absolute;top:-70%;left:-25%;width:75%;aspect-ratio:1;border-radius:50%;background:conic-gradient(from 0deg,#60a5fa,#a78bfa,#f472b6,#60a5fa);filter:blur(58px);opacity:.28;animation:phSpin 16s linear infinite;pointer-events:none;}
@keyframes phSpin{to{transform:rotate(360deg);}}
.phRingWrap{position:relative;width:118px;height:118px;flex-shrink:0;}
.phRingSvg{width:100%;height:100%;transform:rotate(-90deg);overflow:visible;}
.phRingBg{fill:none;stroke:rgba(255,255,255,.07);stroke-width:7;}
.phRingFill{fill:none;stroke:url(#phRingGrad);stroke-width:7;stroke-linecap:round;filter:drop-shadow(0 0 7px rgba(167,139,250,.55));transition:stroke-dashoffset 1.1s cubic-bezier(.22,1,.36,1);}
.phRingInner{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;}
.phLvlNum{font-family:'Syne',sans-serif;font-size:36px;font-weight:800;line-height:1;background:linear-gradient(135deg,#fff,#a5b4fc);-webkit-background-clip:text;background-clip:text;color:transparent;}
.phLvlLab{font-size:8.5px;font-weight:800;letter-spacing:2.5px;text-transform:uppercase;color:rgba(255,255,255,.4);margin-top:4px;font-family:'Space Grotesk',sans-serif;}
.phId{position:relative;flex:1;min-width:0;}
.phPseudo{font-family:'Syne',sans-serif;font-size:23px;font-weight:800;letter-spacing:-.4px;color:#fff;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.phTitleTxt{font-size:12px;font-style:italic;color:rgba(255,255,255,.5);margin:2px 0 12px;font-family:'Space Grotesk',sans-serif;}
.phXpRow{margin-bottom:11px;}
.phXpBar{position:relative;height:9px;border-radius:99px;background:rgba(255,255,255,.07);overflow:hidden;}
.phXpFill{position:relative;height:100%;border-radius:99px;background:linear-gradient(90deg,#60a5fa,#a78bfa,#f472b6);transition:width 1.1s cubic-bezier(.22,1,.36,1);overflow:hidden;}
.phXpFill::after{content:'';position:absolute;inset:0;background:linear-gradient(105deg,transparent 30%,rgba(255,255,255,.45) 50%,transparent 70%);transform:translateX(-100%);animation:phShimmer 2.6s ease-in-out infinite;}
@keyframes phShimmer{55%,100%{transform:translateX(100%);}}
.phXpTxt{font-size:10px;font-weight:700;color:rgba(255,255,255,.45);margin-top:5px;letter-spacing:.5px;font-family:'Space Grotesk',sans-serif;}
.phMults{display:flex;gap:7px;flex-wrap:wrap;}
.phMult{display:flex;align-items:center;gap:6px;padding:5px 10px;border-radius:10px;border:1px solid rgba(255,255,255,.1);background:rgba(255,255,255,.04);font-family:'Space Grotesk',sans-serif;}
.phMult span{font-size:8.5px;font-weight:800;letter-spacing:1.2px;text-transform:uppercase;color:rgba(255,255,255,.38);}
.phMult strong{font-size:12px;font-weight:800;color:rgba(255,255,255,.85);}
.phMultTotal{border-color:rgba(167,139,250,.4);background:rgba(167,139,250,.08);}
.phMultTotal strong{background:linear-gradient(90deg,#60a5fa,#f472b6);-webkit-background-clip:text;background-clip:text;color:transparent;}
.phGrid{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin-top:14px;}
.phTile{position:relative;padding:14px 14px 12px;border-radius:16px;border:1px solid rgba(255,255,255,.08);background:rgba(255,255,255,.03);overflow:hidden;transition:transform .2s var(--spring,cubic-bezier(.22,1,.36,1)),border-color .2s ease,box-shadow .2s ease;}
.phTile::before{content:'';position:absolute;top:0;left:12px;right:12px;height:2px;border-radius:99px;background:linear-gradient(90deg,transparent,var(--pht),transparent);opacity:.55;}
.phTile:hover{transform:translateY(-3px);border-color:color-mix(in srgb,var(--pht) 45%,transparent);box-shadow:0 14px 30px -18px var(--pht);}
.phTileIcon{font-size:17px;margin-bottom:8px;filter:drop-shadow(0 0 8px color-mix(in srgb,var(--pht) 60%,transparent));}
.phFlameOn{animation:phFlame 1.6s ease-in-out infinite;}
@keyframes phFlame{0%,100%{transform:scale(1);}50%{transform:scale(1.18) rotate(-4deg);}}
.phTileVal{font-family:'Syne',sans-serif;font-size:24px;font-weight:800;line-height:1;color:#fff;letter-spacing:-.5px;}
.phTileUnit{font-size:13px;font-weight:700;color:rgba(255,255,255,.4);margin-left:2px;}
.phTileLab{font-size:8.5px;font-weight:800;letter-spacing:1.6px;text-transform:uppercase;color:rgba(255,255,255,.38);margin-top:6px;font-family:'Space Grotesk',sans-serif;}
.phRecords{position:relative;margin-top:14px;padding:16px;border-radius:18px;border:1px solid rgba(251,191,36,.22);background:linear-gradient(160deg,rgba(251,191,36,.06),rgba(251,191,36,.015) 60%);overflow:hidden;}
.phRecords::after{content:'';position:absolute;top:0;bottom:0;width:55%;background:linear-gradient(105deg,transparent,rgba(251,191,36,.07),transparent);transform:skewX(-18deg) translateX(-220%);animation:phRecSweep 5.5s ease-in-out infinite;pointer-events:none;}
@keyframes phRecSweep{60%,100%{transform:skewX(-18deg) translateX(320%);}}
.phRecKicker{font-size:9.5px;font-weight:800;letter-spacing:2.4px;text-transform:uppercase;background:linear-gradient(90deg,#fbbf24,#f59e0b);-webkit-background-clip:text;background-clip:text;color:transparent;margin-bottom:12px;font-family:'Space Grotesk',sans-serif;}
.phRecGrid{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;}
.phRec{text-align:center;padding:10px 6px;border-radius:13px;border:1px solid rgba(251,191,36,.14);background:rgba(251,191,36,.04);}
.phRecIcon{font-size:16px;margin-bottom:5px;}
.phRecVal{font-family:'Syne',sans-serif;font-size:19px;font-weight:800;line-height:1;background:linear-gradient(135deg,#fde68a,#f59e0b);-webkit-background-clip:text;background-clip:text;color:transparent;}
.phRecLab{font-size:8px;font-weight:800;letter-spacing:1.2px;text-transform:uppercase;color:rgba(255,255,255,.38);margin-top:5px;font-family:'Space Grotesk',sans-serif;}
.phTileLink{cursor:pointer;}
.phTileGo{color:var(--pht);font-weight:800;margin-left:3px;transition:transform .18s ease;display:inline-block;}
.phTileLink:hover .phTileGo{transform:translateX(3px);}
.phAchSection{margin-top:14px;padding:16px;border-radius:18px;border:1px solid rgba(255,255,255,.08);background:rgba(255,255,255,.025);animation:phAchIn .35s cubic-bezier(.22,1,.36,1) both;}
.phAchSection.hidden{display:none;}
@keyframes phAchIn{from{opacity:0;transform:translateY(10px);}to{opacity:1;transform:none;}}
.phAchHead{display:flex;align-items:flex-start;justify-content:space-between;gap:10px;margin-bottom:12px;}
.phAchKicker{font-size:9.5px;font-weight:800;letter-spacing:2.4px;text-transform:uppercase;background:linear-gradient(90deg,#fbbf24,#f472b6);-webkit-background-clip:text;background-clip:text;color:transparent;margin-bottom:5px;font-family:'Space Grotesk',sans-serif;}
.phAchSub{font-size:11px;color:rgba(255,255,255,.45);line-height:1.5;font-family:'Space Grotesk',sans-serif;}
.phAchPulse{animation:phAchGlow 1.6s ease;}
@keyframes phAchGlow{0%{box-shadow:0 0 0 0 rgba(251,191,36,0);}25%{box-shadow:0 0 0 3px rgba(251,191,36,.35),0 0 34px -6px rgba(251,191,36,.45);}100%{box-shadow:0 0 0 0 rgba(251,191,36,0);}}
@media(max-width:680px){
  .phHero{gap:14px;padding:18px 16px;margin:0 18px;}
  .phRingWrap{width:96px;height:96px;}
  .phLvlNum{font-size:28px;}
  .phPseudo{font-size:19px;}
  .phMult{padding:4px 8px;}
  .phGrid{grid-template-columns:repeat(2,1fr);margin:12px 18px 0;}
  .phRecords{margin:12px 18px 0;}
  .phRecGrid{grid-template-columns:repeat(2,1fr);}
  .phAchSection{margin:12px 18px 0;}
  /* Onglet Mentor : seul le HAUT (en-tête galerie) collait les bords, les cartes sont bien */
  .mgHead{padding:4px 16px 0;}
  .mtActions{padding:0 16px 10px;}
}
.chartWrap{background:rgba(255,255,255,.025);border:1px solid rgba(255,255,255,.07);border-radius:16px;padding:16px;position:relative;}
.chartRadarWrap{display:flex;align-items:center;justify-content:center;}
.statCanvas{display:block;width:100%;height:auto;}
.radarCanvas{max-width:260px;max-height:260px;}
.chartEmpty{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;font-size:12px;color:rgba(255,255,255,.3);text-align:center;padding:20px;}

/* Heatmap */
.heatmapGrid{display:grid;grid-template-columns:repeat(13,1fr);gap:3px;padding:12px 14px;background:rgba(255,255,255,.025);border:1px solid rgba(255,255,255,.07);border-radius:16px;}
@media(max-width:680px){.heatmapGrid{grid-template-columns:repeat(13,1fr);gap:2px;margin:0;}}
.hmCell{aspect-ratio:1;border-radius:3px;cursor:pointer;transition:transform .12s ease,opacity .12s ease;}
.hmCell:hover{transform:scale(1.35);opacity:1 !important;}
.heatmapLegend{display:flex;gap:12px;flex-wrap:wrap;margin-top:8px;}
@media(max-width:680px){.heatmapLegend{padding:0 2px;}}
.hmLeg{display:flex;align-items:center;gap:5px;font-size:10px;color:rgba(255,255,255,.35);font-family:'Space Grotesk',sans-serif;font-weight:600;}
.hmDot{width:10px;height:10px;border-radius:2px;}


/* ── REFRESH FLASH OVERLAY (visible partout, au-dessus de tout) ── */
#refreshFlash{
  position:fixed;inset:0;z-index:99990;
  pointer-events:none;
  background:rgba(255,255,255,.06);
  opacity:0;
  border-radius:0;
}
@keyframes refreshFlashAnim{
  0%{opacity:0}
  18%{opacity:1}
  100%{opacity:0}
}
#refreshFlash.active{
  animation:refreshFlashAnim .45s cubic-bezier(.22,1,.36,1) forwards;
}

/* ── GENDER SELECTOR ── */
.genderBtn{
  flex:1;padding:10px 6px;border-radius:12px;border:1.5px solid rgba(255,255,255,.12);
  background:rgba(255,255,255,.04);cursor:pointer;font-size:22px;
  transition:all .2s;display:flex;flex-direction:column;align-items:center;gap:4px;
}
.genderBtn span{font-size:10px;font-weight:600;letter-spacing:.5px;text-transform:uppercase;
  color:rgba(255,255,255,.35);font-family:'Space Grotesk',sans-serif;}
.genderBtn.active{border-color:rgba(255,255,255,.45);background:rgba(255,255,255,.09);}
.genderBtn.active span{color:rgba(255,255,255,.75);}
#genderM{color:rgba(96,165,250,.9);}
#genderM.active{border-color:rgba(96,165,250,.45);background:rgba(96,165,250,.09);}
#genderM.active span{color:rgba(96,165,250,.85);}
#genderF{color:rgba(236,72,153,.9);}
#genderF.active{border-color:rgba(236,72,153,.45);background:rgba(236,72,153,.09);}
#genderF.active span{color:rgba(236,72,153,.85);}
/* Rangée « Langue de l'app » : mêmes genderBtn, l'état actif vient de
   html[lang] (la langue de la page EST la vérité : on navigue en changeant) */
#langBtnFr,#langBtnEn{color:rgba(255,255,255,.65);font-size:15px;font-weight:700;letter-spacing:1px;font-family:'Space Grotesk',sans-serif;}
html[lang="fr"] #langBtnFr,html[lang="en"] #langBtnEn{border-color:rgba(255,255,255,.45);background:rgba(255,255,255,.09);}
html[lang="fr"] #langBtnFr span,html[lang="en"] #langBtnEn span{color:rgba(255,255,255,.75);}

/* ── REFRESH REVEAL (style loginReveal, sobre) ── */
@keyframes refreshReveal{
  from{opacity:.45;transform:translateY(6px)}
  to{opacity:1;transform:translateY(0)}
}
.refreshReveal{animation:refreshReveal .28s cubic-bezier(.22,1,.36,1) both;}

/* ══ L'ADVERSAIRE ══ */
.advCard{
  margin:12px 0 4px;border-radius:16px;padding:14px 16px;
  background:linear-gradient(135deg,rgba(239,68,68,.07) 0%,rgba(239,68,68,.03) 100%);
  border:1px solid rgba(239,68,68,.18);position:relative;overflow:hidden;
}
.advCard.defeated{
  background:linear-gradient(135deg,rgba(34,197,94,.07) 0%,rgba(34,197,94,.03) 100%);
  border-color:rgba(34,197,94,.18);
}
.advCard::before{
  content:'';position:absolute;inset:0;
  background:linear-gradient(90deg,transparent 60%,rgba(239,68,68,.04));
  pointer-events:none;
}
.advCard.defeated::before{background:linear-gradient(90deg,transparent 60%,rgba(34,197,94,.04));}
.advHeader{display:flex;justify-content:space-between;align-items:center;margin-bottom:10px;}
.advName{font-size:13px;font-weight:700;letter-spacing:.3px;color:rgba(252,165,165,.9);}
.advCard.defeated .advName{color:rgba(134,239,172,.9);}
.advBadge{font-size:9px;font-weight:700;letter-spacing:.6px;text-transform:uppercase;
  padding:3px 8px;border-radius:20px;background:rgba(239,68,68,.15);color:rgba(252,165,165,.8);}
.advCard.defeated .advBadge{background:rgba(34,197,94,.15);color:rgba(134,239,172,.8);}
.advBars{display:flex;flex-direction:column;gap:6px;}
.advBarRow{display:flex;align-items:center;gap:8px;}
.advBarLabel{font-size:10px;color:rgba(255,255,255,.35);width:58px;flex-shrink:0;}
.advBarTrack{flex:1;height:5px;background:rgba(255,255,255,.07);border-radius:3px;overflow:hidden;}
.advBarFill{height:100%;border-radius:3px;transition:width .6s cubic-bezier(.22,1,.36,1);}
.advBarFill.red{background:linear-gradient(90deg,rgba(239,68,68,.7),rgba(239,68,68,.4));}
.advBarFill.green{background:linear-gradient(90deg,rgba(34,197,94,.7),rgba(34,197,94,.4));}
.advBarVal{font-size:10px;color:rgba(255,255,255,.4);width:34px;text-align:right;flex-shrink:0;}
.advFooter{margin-top:10px;font-size:10px;color:rgba(255,255,255,.22);font-style:italic;}
.advPseudoStolen{
  margin-top:8px;padding:6px 10px;border-radius:8px;
  background:rgba(239,68,68,.12);border:1px solid rgba(239,68,68,.25);
  font-size:10px;color:rgba(252,165,165,.85);font-weight:600;
}
/* Sélecteur difficulté */
.diffBtn{
  flex:1;padding:7px 4px;border-radius:10px;border:1.5px solid rgba(255,255,255,.1);
  background:rgba(255,255,255,.03);cursor:pointer;font-size:10px;font-weight:700;
  letter-spacing:.3px;color:rgba(255,255,255,.35);transition:all .18s;text-align:center;
  font-family:'Space Grotesk',sans-serif;
}
.diffBtn:hover{border-color:rgba(255,255,255,.22);background:rgba(255,255,255,.06);}
.diffBtn.active{border-color:rgba(239,68,68,.5);background:rgba(239,68,68,.1);color:rgba(252,165,165,.9);}
.diffBtn[data-d="5"].active{border-color:rgba(255,200,50,.5);background:rgba(255,200,50,.08);color:rgba(255,220,100,.95);}

/* ── Adversaire rework ── */
.advActions{display:flex;gap:8px;width:100%;margin-top:8px;}
.advBtnFlee{
  flex:1;padding:9px 10px;border-radius:11px;
  border:1px solid rgba(239,68,68,.3);
  background:rgba(239,68,68,.08);
  color:rgba(252,165,165,.8);
  cursor:pointer;font-size:10px;font-weight:700;
  text-transform:uppercase;letter-spacing:.5px;
  font-family:'Space Grotesk',sans-serif;
  transition:all .18s;
}
.advBtnFlee:hover{background:rgba(239,68,68,.16);border-color:rgba(239,68,68,.5);}
.advBtnFlee:disabled{opacity:.35;cursor:not-allowed;}
.advStreakLost{
  margin-top:8px;padding:7px 10px;border-radius:9px;
  background:rgba(239,68,68,.1);border:1px solid rgba(239,68,68,.2);
  font-size:10px;color:rgba(252,165,165,.8);font-weight:600;
  position:relative;
}
.advStreakLost::after{content:'';position:absolute;inset:-1px;border-radius:9px;border:1px solid rgba(239,68,68,.45);opacity:0;animation:advGlow 2s ease-in-out infinite;pointer-events:none;}
@keyframes advGlow{0%,100%{opacity:0}50%{opacity:1}}
.advBonusXp{
  font-size:10px;color:rgba(252,165,165,.6);
  margin-top:4px;padding-top:6px;
  border-top:1px solid rgba(255,255,255,.06);
}

/* ══════════════════════════════════════════════════════════
   AURA DE NIVEAU — contours progressifs style Albion Online
   La couleur + animation évolue de niveau 1 à 101+
══════════════════════════════════════════════════════════ */

/* Tier 0 (1-9) : neutre, rien */

/* Tier 1 (10-19) : lueur blanche très subtile */
body.aura-t1 .shell{
  border-color:rgba(255,255,255,.16);
  box-shadow:var(--shadow),0 0 18px rgba(255,255,255,.04);
}

/* Tier 2 (20-29) : bleu acier froid */
body.aura-t2 .shell{
  border-color:rgba(96,165,250,.28);
  box-shadow:var(--shadow),0 0 28px rgba(96,165,250,.09),inset 0 0 0 1px rgba(96,165,250,.04);
}
body.aura-t2 .card{border-color:rgba(96,165,250,.13);}

/* Tier 3 (30-39) : vert jade */
body.aura-t3 .shell{
  border-color:rgba(52,211,153,.32);
  box-shadow:var(--shadow),0 0 35px rgba(52,211,153,.12),inset 0 0 0 1px rgba(52,211,153,.05);
}
body.aura-t3 .card{border-color:rgba(52,211,153,.15);}

/* Tier 4 (40-49) : violet arcane */
body.aura-t4 .shell{
  border-color:rgba(167,139,250,.38);
  box-shadow:var(--shadow),0 0 45px rgba(167,139,250,.16),inset 0 0 0 1px rgba(167,139,250,.07);
}
body.aura-t4 .card{border-color:rgba(167,139,250,.18);}
body.aura-t4 .card:hover{box-shadow:0 20px 60px rgba(0,0,0,.55),0 0 20px rgba(167,139,250,.12);}

/* Tier 5 (50-59) : or brûlant */
body.aura-t5 .shell{
  border-color:rgba(251,191,36,.42);
  box-shadow:var(--shadow),0 0 55px rgba(251,191,36,.18),inset 0 0 0 1px rgba(251,191,36,.08);
}
body.aura-t5 .card{border-color:rgba(251,191,36,.2);}
body.aura-t5 .card:hover{box-shadow:0 20px 60px rgba(0,0,0,.55),0 0 25px rgba(251,191,36,.15);}

/* Tier 6 (60-69) : rouge sang */
body.aura-t6 .shell{
  border-color:rgba(248,113,113,.45);
  box-shadow:var(--shadow),0 0 65px rgba(248,113,113,.2),inset 0 0 0 1px rgba(248,113,113,.09);
}
body.aura-t6 .card{border-color:rgba(248,113,113,.22);}

/* Tier 7 (70-79) : cyan glacial + rotation subtile */
body.aura-t7 .shell{
  border-color:rgba(34,211,238,.5);
  box-shadow:var(--shadow),0 0 80px rgba(34,211,238,.24),inset 0 0 0 1px rgba(34,211,238,.1);
}
body.aura-t7 .card{border-color:rgba(34,211,238,.24);}

/* Tier 8 (80-89) : boréale — violet-rose shimmer */
body.aura-t8 .shell{
  border-color:rgba(180,120,220,.5);
  box-shadow:var(--shadow),0 0 75px rgba(180,120,220,.2),0 0 150px rgba(220,100,160,.06),inset 0 0 0 1px rgba(180,120,220,.08);
}
body.aura-t8 .card{
  border-color:rgba(180,120,220,.22);
}

/* Tier 9 (90-100) : blanc divin pulsant — intense */
body.aura-t9 .shell{
  border-color:rgba(255,255,255,.6);
  box-shadow:var(--shadow),0 0 90px rgba(255,255,255,.28),0 0 180px rgba(255,255,255,.08),inset 0 0 0 1px rgba(255,255,255,.12);
}
body.aura-t9 .card{
  border-color:rgba(255,255,255,.3);
}

/* Tier 10 (101+) : PRISMATIQUE — arc-en-ciel non-conventionnel */
body.aura-t10 .shell{
  border-color:rgba(200,160,255,.65);
  box-shadow:var(--shadow),0 0 110px rgba(167,139,250,.30),0 0 220px rgba(244,114,182,.12),inset 0 0 0 1px rgba(96,165,250,.14);
}
body.aura-t10 .card{
  border-color:rgba(167,139,250,.22);
}

/* ══ AURA — Calque de respiration composité ══
   Les auras t6+ respiraient en animant box-shadow sur .shell (repaint CPU
   d'ombres de 90-220px à chaque frame, sur l'élément qui porte le
   backdrop-filter). Remplacé par ce calque frère : glow pré-rendu, seule
   l'OPACITÉ est animée (composité GPU, zéro repaint). */
.shellAura{position:absolute;inset:16px;margin:auto;max-width:1520px;height:calc(100vh - 32px);border-radius:24px;pointer-events:none;opacity:0;will-change:opacity;}
@media(max-width:900px){.shellAura{display:none;}}
@keyframes auraLayer{0%,100%{opacity:0;}50%{opacity:1;}}
body.aura-t6 .shellAura{box-shadow:0 0 90px rgba(248,113,113,.22);animation:auraLayer 4s ease-in-out infinite;}
body.aura-t7 .shellAura{box-shadow:0 0 110px rgba(34,211,238,.26);animation:auraLayer 3s ease-in-out infinite;}
body.aura-t8 .shellAura{box-shadow:0 0 110px rgba(220,100,160,.26),0 0 170px rgba(180,120,220,.09);animation:auraLayer 3.5s ease-in-out infinite;}
body.aura-t9 .shellAura{box-shadow:0 0 130px rgba(255,255,255,.3),0 0 220px rgba(255,255,255,.1);animation:auraLayer 2.5s ease-in-out infinite;}
/* t10 prismatique : deux calques couleur en fondu croisé (émeraude ↔ violet-rose) */
body.aura-t10 .shellAura::before,body.aura-t10 .shellAura::after{content:'';position:absolute;inset:0;border-radius:inherit;opacity:0;will-change:opacity;}
/* Socle prismatique CONSTANT (présence même entre deux respirations, et repli lowFx) */
body.aura-t10 .shellAura{opacity:1;box-shadow:0 0 80px rgba(167,139,250,.18),0 0 150px rgba(52,211,153,.10),0 0 230px rgba(244,114,182,.08);}
body.aura-t10 .shellAura::before{box-shadow:0 0 130px rgba(52,211,153,.40),0 0 230px rgba(34,211,238,.18),0 0 320px rgba(52,211,153,.08);animation:auraLayer 6s ease-in-out infinite;}
body.aura-t10 .shellAura::after{box-shadow:0 0 130px rgba(167,139,250,.42),0 0 230px rgba(244,114,182,.20),0 0 320px rgba(251,191,36,.10);animation:auraLayer 6s ease-in-out infinite 3s;}

/* ══ MODE ÉCONOMIE D'EFFETS (.lowFx) ══
   Posé par _fpsProbe() si l'appareil rame (< 40 fps) ou si l'OS demande
   prefers-reduced-motion. Coupe les animations DÉCORATIVES infinies,
   jamais les transitions fonctionnelles. */
body.lowFx .shellAura,body.lowFx .shellAura::before,body.lowFx .shellAura::after,
body.lowFx .priorityCard,body.lowFx #hudLevel,body.lowFx .pillGold,
body.lowFx .mhXpFill::after,body.lowFx .phXpFill::after,body.lowFx .phAura,
body.lowFx .phFlameOn,body.lowFx .phRecords::after,
body.lowFx .calDay.today::before,body.lowFx .calFlame,body.lowFx .dayProgFill.done::after,
body.lowFx .advStreakLost::after,body.lowFx .combatStatus.losing,body.lowFx .avatarBadge,
body.lowFx .mysterySlot.revealed,body.lowFx .vmpDot.cur,body.lowFx .cstPulse,
body.lowFx .dmBand.dmUpAble::before{animation:none !important;}
body.lowFx .dmBand.dmUpAble::before{opacity:.6;}
body.lowFx .phAura{opacity:.2;}

/* ══ AURA — Mobile HUD ══ */
body.aura-t1 .mobileHud{border-bottom-color:rgba(255,255,255,.16);box-shadow:0 4px 15px rgba(255,255,255,.04);}
body.aura-t2 .mobileHud{border-bottom-color:rgba(96,165,250,.28);box-shadow:0 4px 20px rgba(96,165,250,.09);}
body.aura-t3 .mobileHud{border-bottom-color:rgba(52,211,153,.32);box-shadow:0 4px 25px rgba(52,211,153,.12);}
body.aura-t4 .mobileHud{border-bottom-color:rgba(167,139,250,.38);box-shadow:0 4px 30px rgba(167,139,250,.16);}
body.aura-t5 .mobileHud{border-bottom-color:rgba(251,191,36,.42);box-shadow:0 4px 35px rgba(251,191,36,.18);}
body.aura-t6 .mobileHud{border-bottom-color:rgba(248,113,113,.45);box-shadow:0 4px 40px rgba(248,113,113,.2);}
body.aura-t7 .mobileHud{border-bottom-color:rgba(34,211,238,.5);box-shadow:0 4px 50px rgba(34,211,238,.24);}
body.aura-t8 .mobileHud{border-bottom-color:rgba(180,120,220,.5);box-shadow:0 4px 55px rgba(180,120,220,.2);}
body.aura-t9 .mobileHud{border-bottom-color:rgba(255,255,255,.6);box-shadow:0 4px 65px rgba(255,255,255,.3),0 0 130px rgba(255,255,255,.08);}
body.aura-t10 .mobileHud{border-bottom:2px solid transparent;border-image:linear-gradient(90deg,rgba(52,211,153,.75),rgba(96,165,250,.75),rgba(167,139,250,.85),rgba(244,114,182,.78),rgba(251,191,36,.72)) 1;box-shadow:0 4px 70px rgba(167,139,250,.30),0 0 130px rgba(244,114,182,.12),0 0 170px rgba(52,211,153,.09);}


/* Aura mobile — screenHead (premier bloc de chaque onglet sauf objectifs) */
@media(max-width:680px){
.screenHead{border-bottom:1px solid rgba(255,255,255,.06);opacity:1 !important;transform:none !important;}
body.aura-t1 .screenHead{border-bottom-color:rgba(255,255,255,.16);box-shadow:0 4px 15px rgba(255,255,255,.04);}
body.aura-t2 .screenHead{border-bottom-color:rgba(96,165,250,.28);box-shadow:0 4px 20px rgba(96,165,250,.09);}
body.aura-t3 .screenHead{border-bottom-color:rgba(52,211,153,.32);box-shadow:0 4px 25px rgba(52,211,153,.12);}
body.aura-t4 .screenHead{border-bottom-color:rgba(167,139,250,.38);box-shadow:0 4px 30px rgba(167,139,250,.16);}
body.aura-t5 .screenHead{border-bottom-color:rgba(251,191,36,.42);box-shadow:0 4px 35px rgba(251,191,36,.18);}
body.aura-t6 .screenHead{border-bottom-color:rgba(248,113,113,.45);box-shadow:0 4px 40px rgba(248,113,113,.2);}
body.aura-t7 .screenHead{border-bottom-color:rgba(34,211,238,.5);box-shadow:0 4px 50px rgba(34,211,238,.24);}
body.aura-t8 .screenHead{border-bottom-color:rgba(180,120,220,.5);box-shadow:0 4px 55px rgba(180,120,220,.2);}
body.aura-t9 .screenHead{border-bottom-color:rgba(255,255,255,.6);box-shadow:0 4px 65px rgba(255,255,255,.3),0 0 130px rgba(255,255,255,.08);}
body.aura-t10 .screenHead{border-bottom-color:rgba(167,139,250,.5);box-shadow:0 4px 60px rgba(167,139,250,.22),0 0 120px rgba(244,114,182,.06);}
}

/* Compositing hints for animated aura box-shadows */
body.aura-t6 .shell,body.aura-t6 .mobileHud,body.aura-t6 .screenHead,
body.aura-t7 .shell,body.aura-t7 .mobileHud,body.aura-t7 .screenHead,
body.aura-t8 .shell,body.aura-t8 .mobileHud,body.aura-t8 .screenHead,
body.aura-t9 .shell,body.aura-t9 .mobileHud,body.aura-t9 .screenHead,
body.aura-t10 .shell,body.aura-t10 .mobileHud,body.aura-t10 .screenHead{will-change:box-shadow;}

/* Aura mobile — aussi colorer les stat cards */
body.aura-t2 .mobileHud .mhStat{border-color:rgba(96,165,250,.15);}
body.aura-t3 .mobileHud .mhStat{border-color:rgba(52,211,153,.15);}
body.aura-t4 .mobileHud .mhStat{border-color:rgba(167,139,250,.18);}
body.aura-t5 .mobileHud .mhStat{border-color:rgba(251,191,36,.2);}
body.aura-t6 .mobileHud .mhStat{border-color:rgba(248,113,113,.22);}
body.aura-t7 .mobileHud .mhStat{border-color:rgba(34,211,238,.24);}
body.aura-t8 .mobileHud .mhStat{border-color:rgba(180,120,220,.2);}
body.aura-t9 .mobileHud .mhStat{border-color:rgba(255,255,255,.3);}
body.aura-t10 .mobileHud .mhStat{border-color:rgba(167,139,250,.34);}

/* ══ AURA — Mobile shell overrides (tame glow on small screens) ══ */
@media(max-width:900px){
  body.aura-t8 .shell{box-shadow:var(--shadow),0 0 45px rgba(180,120,220,.18),0 0 90px rgba(220,100,160,.06);}
  body.aura-t9 .shell{
    box-shadow:var(--shadow),0 0 50px rgba(255,255,255,.22),0 0 100px rgba(255,255,255,.08);
  }
    body.aura-t10 .shell{
    box-shadow:var(--shadow),0 0 40px rgba(167,139,250,.16),0 0 80px rgba(244,114,182,.04);
  }
    /* Tame mobile HUD glow too */
  body.aura-t9 .mobileHud{box-shadow:0 4px 30px rgba(255,255,255,.18),0 0 50px rgba(255,255,255,.06);}
    body.aura-t10 .mobileHud{box-shadow:0 4px 36px rgba(167,139,250,.24),0 0 70px rgba(244,114,182,.09),0 0 90px rgba(52,211,153,.07);}
  }

/* Aura vision — mêmes paliers que le shell, appliqués au redesign Vision */
body{
  --vision-accent:rgba(167,139,250,.88);
  --vision-accent-soft:rgba(167,139,250,.14);
  --vision-accent-soft-strong:rgba(167,139,250,.22);
  --vision-surface-border:rgba(255,255,255,.06);
  --vision-surface-glow:rgba(167,139,250,.1);
  --vision-hero-border:rgba(167,139,250,.12);
  --vision-hero-gradient:linear-gradient(135deg,rgba(167,139,250,.08) 0%,rgba(96,165,250,.06) 50%,rgba(34,197,94,.04) 100%);
  --vision-hero-bloom:rgba(167,139,250,.08);
  --vision-surface-tint:rgba(167,139,250,.03);
  --vision-surface-tint-strong:rgba(167,139,250,.05);
}
body.aura-t1{
  --vision-accent:rgba(255,255,255,.9);
  --vision-accent-soft:rgba(255,255,255,.08);
  --vision-accent-soft-strong:rgba(255,255,255,.14);
  --vision-surface-border:rgba(255,255,255,.08);
  --vision-surface-glow:rgba(255,255,255,.06);
  --vision-hero-border:rgba(255,255,255,.16);
  --vision-hero-gradient:linear-gradient(135deg,rgba(255,255,255,.05) 0%,rgba(148,163,184,.04) 100%);
  --vision-hero-bloom:rgba(255,255,255,.06);
  --vision-surface-tint:rgba(255,255,255,.03);
  --vision-surface-tint-strong:rgba(255,255,255,.05);
}
body.aura-t2{
  --vision-accent:rgba(96,165,250,.9);
  --vision-accent-soft:rgba(96,165,250,.12);
  --vision-accent-soft-strong:rgba(96,165,250,.2);
  --vision-surface-border:rgba(96,165,250,.12);
  --vision-surface-glow:rgba(96,165,250,.1);
  --vision-hero-border:rgba(96,165,250,.2);
  --vision-hero-gradient:linear-gradient(135deg,rgba(96,165,250,.09) 0%,rgba(59,130,246,.06) 55%,rgba(255,255,255,.02) 100%);
  --vision-hero-bloom:rgba(96,165,250,.08);
  --vision-surface-tint:rgba(96,165,250,.035);
  --vision-surface-tint-strong:rgba(96,165,250,.055);
}
body.aura-t3{
  --vision-accent:rgba(52,211,153,.9);
  --vision-accent-soft:rgba(52,211,153,.12);
  --vision-accent-soft-strong:rgba(52,211,153,.2);
  --vision-surface-border:rgba(52,211,153,.12);
  --vision-surface-glow:rgba(52,211,153,.11);
  --vision-hero-border:rgba(52,211,153,.22);
  --vision-hero-gradient:linear-gradient(135deg,rgba(52,211,153,.09) 0%,rgba(16,185,129,.06) 55%,rgba(255,255,255,.02) 100%);
  --vision-hero-bloom:rgba(52,211,153,.08);
  --vision-surface-tint:rgba(52,211,153,.035);
  --vision-surface-tint-strong:rgba(52,211,153,.055);
}
body.aura-t4{
  --vision-accent:rgba(167,139,250,.92);
  --vision-accent-soft:rgba(167,139,250,.14);
  --vision-accent-soft-strong:rgba(167,139,250,.22);
  --vision-surface-border:rgba(167,139,250,.14);
  --vision-surface-glow:rgba(167,139,250,.13);
  --vision-hero-border:rgba(167,139,250,.24);
  --vision-hero-gradient:linear-gradient(135deg,rgba(167,139,250,.1) 0%,rgba(96,165,250,.06) 50%,rgba(255,255,255,.02) 100%);
  --vision-hero-bloom:rgba(167,139,250,.1);
  --vision-surface-tint:rgba(167,139,250,.04);
  --vision-surface-tint-strong:rgba(167,139,250,.06);
}
body.aura-t5{
  --vision-accent:rgba(251,191,36,.92);
  --vision-accent-soft:rgba(251,191,36,.14);
  --vision-accent-soft-strong:rgba(251,191,36,.22);
  --vision-surface-border:rgba(251,191,36,.14);
  --vision-surface-glow:rgba(251,191,36,.14);
  --vision-hero-border:rgba(251,191,36,.24);
  --vision-hero-gradient:linear-gradient(135deg,rgba(251,191,36,.1) 0%,rgba(245,158,11,.06) 55%,rgba(255,255,255,.02) 100%);
  --vision-hero-bloom:rgba(251,191,36,.1);
  --vision-surface-tint:rgba(251,191,36,.04);
  --vision-surface-tint-strong:rgba(251,191,36,.06);
}
body.aura-t6{
  --vision-accent:rgba(248,113,113,.92);
  --vision-accent-soft:rgba(248,113,113,.14);
  --vision-accent-soft-strong:rgba(248,113,113,.24);
  --vision-surface-border:rgba(248,113,113,.16);
  --vision-surface-glow:rgba(248,113,113,.16);
  --vision-hero-border:rgba(248,113,113,.28);
  --vision-hero-gradient:linear-gradient(135deg,rgba(248,113,113,.11) 0%,rgba(239,68,68,.07) 55%,rgba(255,255,255,.02) 100%);
  --vision-hero-bloom:rgba(248,113,113,.11);
  --vision-surface-tint:rgba(248,113,113,.04);
  --vision-surface-tint-strong:rgba(248,113,113,.065);
}
body.aura-t7{
  --vision-accent:rgba(34,211,238,.94);
  --vision-accent-soft:rgba(34,211,238,.14);
  --vision-accent-soft-strong:rgba(34,211,238,.24);
  --vision-surface-border:rgba(34,211,238,.16);
  --vision-surface-glow:rgba(34,211,238,.18);
  --vision-hero-border:rgba(34,211,238,.28);
  --vision-hero-gradient:linear-gradient(135deg,rgba(34,211,238,.12) 0%,rgba(6,182,212,.07) 55%,rgba(255,255,255,.02) 100%);
  --vision-hero-bloom:rgba(34,211,238,.12);
  --vision-surface-tint:rgba(34,211,238,.04);
  --vision-surface-tint-strong:rgba(34,211,238,.065);
}
body.aura-t8{
  --vision-accent:rgba(180,120,220,.94);
  --vision-accent-soft:rgba(180,120,220,.14);
  --vision-accent-soft-strong:rgba(180,120,220,.22);
  --vision-surface-border:rgba(180,120,220,.16);
  --vision-surface-glow:rgba(220,100,160,.16);
  --vision-hero-border:rgba(180,120,220,.24);
  --vision-hero-gradient:linear-gradient(135deg,rgba(180,120,220,.1) 0%,rgba(220,100,160,.08) 55%,rgba(255,255,255,.02) 100%);
  --vision-hero-bloom:rgba(180,120,220,.12);
  --vision-surface-tint:rgba(180,120,220,.04);
  --vision-surface-tint-strong:rgba(180,120,220,.06);
}
body.aura-t9{
  --vision-accent:rgba(255,255,255,.98);
  --vision-accent-soft:rgba(255,255,255,.14);
  --vision-accent-soft-strong:rgba(255,255,255,.24);
  --vision-surface-border:rgba(255,255,255,.24);
  --vision-surface-glow:rgba(255,255,255,.18);
  --vision-hero-border:rgba(255,255,255,.34);
  --vision-hero-gradient:linear-gradient(135deg,rgba(255,255,255,.08) 0%,rgba(226,232,240,.06) 55%,rgba(255,255,255,.02) 100%);
  --vision-hero-bloom:rgba(255,255,255,.12);
  --vision-surface-tint:rgba(255,255,255,.04);
  --vision-surface-tint-strong:rgba(255,255,255,.06);
}
body.aura-t10{
  --vision-accent:rgba(167,139,250,.96);
  --vision-accent-soft:rgba(167,139,250,.16);
  --vision-accent-soft-strong:rgba(167,139,250,.26);
  --vision-surface-border:rgba(167,139,250,.22);
  --vision-surface-glow:rgba(244,114,182,.18);
  --vision-hero-border:rgba(167,139,250,.34);
  --vision-hero-gradient:linear-gradient(135deg,rgba(52,211,153,.1) 0%,rgba(167,139,250,.08) 30%,rgba(244,114,182,.06) 55%,rgba(96,165,250,.04) 80%,rgba(255,255,255,.02) 100%);
  --vision-hero-bloom:rgba(167,139,250,.14);
  --vision-surface-tint:rgba(167,139,250,.04);
  --vision-surface-tint-strong:rgba(167,139,250,.065);
}
/* Glow statique mi-course : la respiration de ces tiers vit déjà dans la shellAura
   (animer box-shadow ici = repaint CPU plein écran à chaque frame, chauffe) */
body.aura-t6 .vtreeBar,body.aura-t7 .vtreeBar,body.aura-t8 .vtreeBar,body.aura-t9 .vtreeBar,body.aura-t10 .vtreeBar,
body.aura-t6 .vPlannedSection,body.aura-t7 .vPlannedSection,body.aura-t8 .vPlannedSection,body.aura-t9 .vPlannedSection,body.aura-t10 .vPlannedSection{box-shadow:0 9px 29px rgba(0,0,0,.17),0 0 29px var(--vision-surface-glow);}


/* ══ TABLEAU DE BORD DE COMBAT ══ */
.combatBoard{
  margin:10px 0 4px;border-radius:18px;overflow:hidden;
  border:1px solid rgba(255,255,255,.08);
  background:rgba(255,255,255,.025);
  position:relative;
}
/* Header combat — nom + statut */
.combatHeader{
  display:flex;justify-content:space-between;align-items:center;
  padding:12px 16px 8px;
  border-bottom:1px solid rgba(255,255,255,.06);
}
.combatTitle{font-size:11px;font-weight:700;letter-spacing:.7px;text-transform:uppercase;color:rgba(255,255,255,.4);}
.combatStatus{font-size:10px;font-weight:700;letter-spacing:.5px;padding:3px 9px;border-radius:20px;}
.combatStatus.winning{background:rgba(34,197,94,.14);color:rgba(134,239,172,.9);}
.combatStatus.losing{background:rgba(239,68,68,.14);color:rgba(252,165,165,.9);animation:statusBlink 2s ease-in-out infinite;}
.combatStatus.tied{background:rgba(255,200,50,.1);color:rgba(255,220,100,.8);}
@keyframes statusBlink{0%,100%{opacity:1;}50%{opacity:.6;}}

/* Zone multiplicateur — très visible */
.combatMult{
  padding:14px 16px 10px;
  display:flex;align-items:center;gap:14px;
  border-bottom:1px solid rgba(255,255,255,.05);
}
.combatMultVal{
  font-family:'Syne',sans-serif;font-size:32px;font-weight:800;
  line-height:1;letter-spacing:-1px;
  transition:color .5s ease;
}
.combatMultVal.winning{color:rgba(134,239,172,.95);}
.combatMultVal.locked{color:rgba(255,255,255,.2);}
.combatMultVal.losing{color:rgba(252,165,165,.5);}
.combatMultInfo{flex:1;}
.combatMultLabel{font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.6px;color:rgba(255,255,255,.3);margin-bottom:3px;}
.combatMultDesc{font-size:11px;color:rgba(255,255,255,.45);line-height:1.35;}

/* Barres de progression combat */
.combatBars{padding:10px 16px 8px;display:flex;flex-direction:column;gap:7px;}
.combatBarRow{display:flex;align-items:center;gap:8px;}
.combatBarName{font-size:10px;font-weight:700;width:64px;flex-shrink:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.combatBarTrack{flex:1;height:6px;background:rgba(255,255,255,.07);border-radius:4px;overflow:hidden;}
.combatBarFill{height:100%;border-radius:4px;transition:width .8s cubic-bezier(.22,1,.36,1);}
.combatBarFill.player{background:linear-gradient(90deg,rgba(34,197,94,.8),rgba(34,197,94,.4));}
.combatBarFill.enemy{background:linear-gradient(90deg,rgba(239,68,68,.8),rgba(239,68,68,.4));}
.combatBarFill.enemy.boss{background:linear-gradient(90deg,rgba(255,200,50,.9),rgba(255,130,50,.5));}
.combatBarLvl{font-size:10px;color:rgba(255,255,255,.38);width:40px;text-align:right;flex-shrink:0;}

/* Gap d'écart */
.combatGap{
  margin:0 16px 10px;padding:7px 10px;border-radius:10px;
  font-size:10px;font-weight:600;line-height:1.4;
}
.combatGap.winning{background:rgba(34,197,94,.07);color:rgba(134,239,172,.7);border:1px solid rgba(34,197,94,.12);}
.combatGap.losing{background:rgba(239,68,68,.07);color:rgba(252,165,165,.7);border:1px solid rgba(239,68,68,.12);}

/* Footer — cooldown + abandon */
.combatFooter{
  padding:8px 16px 12px;
  display:flex;justify-content:space-between;align-items:center;gap:8px;
  border-top:1px solid rgba(255,255,255,.05);
}
.combatDays{font-size:9px;color:rgba(255,255,255,.2);font-style:italic;}
.combatFlee{
  padding:5px 10px;border-radius:8px;
  border:1px solid rgba(239,68,68,.25);background:rgba(239,68,68,.06);
  color:rgba(252,165,165,.65);cursor:pointer;font-size:9px;font-weight:700;
  text-transform:uppercase;letter-spacing:.4px;font-family:'Space Grotesk',sans-serif;
  transition:all .15s;
}
.combatFlee:hover{background:rgba(239,68,68,.14);color:rgba(252,165,165,.9);}
/* Victoire acquise (14j de domination) : le bouton passe à l'or */
.combatFlee.combatWin{border-color:rgba(251,191,36,.45);background:rgba(251,191,36,.1);color:#fde68a;font-size:10px;}
.combatFlee.combatWin:hover{background:rgba(251,191,36,.2);color:#fff7d6;}
.advBtnFlee.advBtnWin{border-color:rgba(251,191,36,.45);background:rgba(251,191,36,.1);color:#fde68a;}
.advBtnFlee.advBtnWin:hover{background:rgba(251,191,36,.2);border-color:rgba(251,191,36,.6);}

/* Cooldown banner */
.combatCooldown{
  margin:10px 0 4px;padding:12px 14px;border-radius:14px;
  background:rgba(239,68,68,.06);border:1px solid rgba(239,68,68,.16);
  font-size:11px;color:rgba(252,165,165,.8);line-height:1.4;
}

/* Verrou niveau 5 */
.advLock{
  margin:10px 0 4px;padding:12px 14px;border-radius:14px;
  background:rgba(255,255,255,.025);border:1px solid rgba(255,255,255,.07);
  font-size:11px;color:rgba(255,255,255,.28);text-align:center;line-height:1.5;
}

/* ══ L'INSTANT — zone grise minuit→2h ══ */
#instantOverlay{
  position:fixed;inset:0;z-index:99990;
  display:flex;align-items:center;justify-content:center;
  background:var(--overlay-heavy);
  backdrop-filter:blur(6px);
  opacity:0;pointer-events:none;
  transition:opacity .5s ease;
}
#instantOverlay.show{opacity:1;pointer-events:all;}
.instantCard{
  max-width:340px;width:90%;padding:32px 28px;
  border-radius:22px;background:var(--overlay-card-bg);
  border:1px solid var(--overlay-card-border);
  box-shadow:var(--overlay-card-shadow);
  text-align:center;
}
.instantIcon{font-size:44px;margin-bottom:14px;line-height:1;}
.instantTitle{
  font-family:'Syne',sans-serif;font-size:22px;font-weight:800;
  color:rgba(255,255,255,.9);margin-bottom:8px;letter-spacing:-.5px;
}
.instantDesc{
  font-size:13px;color:rgba(255,255,255,.4);line-height:1.6;margin-bottom:20px;
}
.instantBtn{
  width:100%;padding:11px;border-radius:12px;
  background:rgba(255,255,255,.06);border:1px solid rgba(255,255,255,.1);
  color:rgba(255,255,255,.7);font-size:13px;font-weight:600;
  cursor:pointer;font-family:'Space Grotesk',sans-serif;
  transition:all .15s;
}
.instantBtn:hover{background:rgba(255,255,255,.1);}

/* Teinte sur le shell en mode Instant */
body.instant-mode .shell{
  border-color:rgba(139,92,246,.2);
  box-shadow:var(--shadow),0 0 40px rgba(139,92,246,.08),inset 0 0 0 1px rgba(139,92,246,.04);
}
body.instant-mode .cardHead{
  background:linear-gradient(90deg,rgba(139,92,246,.04),transparent);
}
/* Badge Instant dans le topbar */
#instantBadge{
  display:none;font-size:9px;font-weight:700;letter-spacing:.5px;
  text-transform:uppercase;padding:3px 8px;border-radius:20px;
  background:rgba(139,92,246,.12);border:1px solid rgba(139,92,246,.25);
  color:rgba(196,181,253,.8);
}
body.instant-mode #instantBadge{display:inline-block;}
/* Pendant l'Instant (0h-2h) : les champs du quotidien sont scellés mais
   restent touchables afin d'expliquer la règle au lieu de sembler cassés. */
body.instant-mode .qRow [data-instant-locked="true"]{opacity:.6;cursor:not-allowed;}
body.instant-mode .qBtn.btnDelete{pointer-events:none;opacity:.4;}
body.instant-mode .btnTiny[onclick="addRow()"]{opacity:.4;cursor:not-allowed;}

/* ══ Adversaire — overlay avertissement ══ */
#advWarnOverlay{
  position:fixed;inset:0;z-index:99991;
  display:flex;align-items:center;justify-content:center;
  background:rgba(35,8,8,.56);backdrop-filter:blur(6px);
  opacity:0;pointer-events:none;transition:opacity .4s ease;
}
#advWarnOverlay.show{opacity:1;pointer-events:all;}
.advWarnCard{
  max-width:360px;width:92%;padding:32px 26px;
  border-radius:22px;background:rgba(26,16,18,.94);
  border:1px solid rgba(239,68,68,.2);
  box-shadow:var(--overlay-card-shadow);
  text-align:center;
}
.advWarnIcon{font-size:40px;margin-bottom:12px;}
.advWarnTitle{
  font-family:'Syne',sans-serif;font-size:20px;font-weight:800;
  color:rgba(255,255,255,.92);margin-bottom:10px;letter-spacing:-.4px;
}
.advWarnBody{
  font-size:12px;color:rgba(255,255,255,.45);line-height:1.65;
  margin-bottom:20px;text-align:left;
}
.advWarnBody strong{color:rgba(255,255,255,.7);}
.advWarnBody .green{color:rgba(134,239,172,.8);}
.advWarnBody .red{color:rgba(252,165,165,.8);}
.advWarnConfirm{
  width:100%;padding:12px;border-radius:12px;
  background:rgba(239,68,68,.1);border:1px solid rgba(239,68,68,.25);
  color:rgba(252,165,165,.9);font-size:13px;font-weight:700;
  cursor:pointer;font-family:'Space Grotesk',sans-serif;
  transition:all .15s;letter-spacing:.2px;
}
.advWarnConfirm:hover{background:rgba(239,68,68,.18);}
.advWarnCancel{
  width:100%;padding:8px;margin-top:8px;border-radius:10px;
  background:transparent;border:none;
  color:rgba(255,255,255,.2);font-size:11px;
  cursor:pointer;font-family:'Space Grotesk',sans-serif;
}

/* ══ Notifications locales ══ */
.notifStatus{font-size:10px;margin-top:4px;color:rgba(255,255,255,.3);}
.notifStatus.enabled{color:rgba(134,239,172,.85);}
.notifStatus.denied{color:rgba(252,165,165,.82);}
.notifStatus.warning{color:rgba(251,191,36,.78);}


/* ══ iOS Install Modal ══ */
#iosInstallModal{
  position:fixed;inset:0;z-index:999999;
  /* flex-start + overflow + margin:auto sur la carte (pattern authRoot) : centré quand ça
     tient, scrollable sinon. align-items:center coupait le HAUT (la croix !) sur écran court */
  display:flex;align-items:flex-start;justify-content:center;
  overflow-y:auto;-webkit-overflow-scrolling:touch;padding:16px;
  opacity:0;pointer-events:none;transition:opacity .25s ease;
}
#iosInstallModal.show{opacity:1;pointer-events:all;}
.iosInstallOverlay{position:absolute;inset:0;background:var(--overlay-soft);backdrop-filter:blur(6px);}
.iosInstallCard{
  position:relative;z-index:1;margin:auto;
  width:calc(100% - 40px);max-width:340px;
  background:var(--overlay-card-bg);
  border:1px solid var(--overlay-card-border);
  border-radius:20px;padding:24px 20px;
  box-shadow:var(--overlay-card-shadow);
}
.iosInstallClose{
  position:absolute;top:6px;right:6px;z-index:2;
  background:none;border:none;color:rgba(255,255,255,.5);
  font-size:20px;line-height:1;cursor:pointer;
  width:44px;height:44px;display:flex;align-items:center;justify-content:center;
}
.iosInstallTitle{
  font-size:18px;font-weight:800;text-align:center;
  margin-bottom:20px;color:#fff;font-family:'Syne',sans-serif;
}
.iosInstallSteps{display:flex;flex-direction:column;gap:8px;}
.iosStep{
  display:flex;align-items:center;gap:12px;
  background:rgba(255,255,255,.04);border:1px solid rgba(255,255,255,.08);
  border-radius:14px;padding:14px;
}
.iosStepNum{
  width:28px;height:28px;border-radius:50%;
  background:rgba(255,200,50,.15);border:1px solid rgba(255,200,50,.3);
  color:rgba(255,200,50,.9);font-size:13px;font-weight:800;
  display:flex;align-items:center;justify-content:center;flex-shrink:0;
}
.iosStepContent{display:flex;align-items:center;gap:10px;flex:1;}
.iosStepIcon{font-size:22px;color:rgba(255,255,255,.7);flex-shrink:0;width:28px;text-align:center;}
.iosStepIcon svg{stroke:rgba(255,255,255,.7);}
.iosStepText{font-size:13px;color:rgba(255,255,255,.85);line-height:1.4;}
.iosStepText strong{color:#fff;}
.iosStepHint{font-size:11px;color:rgba(255,255,255,.4);}
.iosStepArrow{text-align:center;color:rgba(255,255,255,.2);font-size:16px;}
.iosInstallDone{
  width:100%;margin-top:14px;padding:13px;border-radius:12px;
  border:1px solid rgba(255,255,255,.16);background:rgba(255,255,255,.08);
  color:rgba(255,255,255,.9);font-weight:700;font-size:13px;cursor:pointer;
  font-family:'Space Grotesk',sans-serif;letter-spacing:.4px;
}
.iosInstallNote{
  margin-top:16px;text-align:center;
  font-size:12px;color:rgba(255,200,50,.7);
  padding:10px;background:rgba(255,200,50,.06);
  border-radius:10px;border:1px solid rgba(255,200,50,.12);
}

/* ══ PWA Install Banner ══ */
#pwaInstallBanner{
  position:fixed;bottom:calc(75px + env(safe-area-inset-bottom));left:50%;transform:translateX(-50%);
  z-index:10040; /* SOUS cfmOv 10070 et constOv 10050 : à 99985 elle VOLAIT les taps des boutons du dialogue push sur iPhone (prouvé : elementFromPoint=pwaInstallBanner à 390x550) */
  display:flex;align-items:center;gap:12px;
  padding:12px 18px;border-radius:16px;
  background:rgba(15,15,20,.96);
  border:1px solid rgba(255,200,50,.2);
  box-shadow:0 8px 32px rgba(0,0,0,.5);
  max-width:320px;width:calc(100% - 40px);
  opacity:0;pointer-events:none;
  transition:opacity .3s ease, transform .3s ease;
  transform:translateX(-50%) translateY(10px);
}
#pwaInstallBanner.show{
  opacity:1;pointer-events:all;
  transform:translateX(-50%) translateY(0);
}
.pwaInstallIcon{font-size:24px;flex-shrink:0;}
.pwaInstallText{flex:1;}
.pwaInstallTitle{font-size:13px;font-weight:700;color:rgba(255,255,255,.9);margin-bottom:2px;}
.pwaInstallSub{font-size:10px;color:rgba(255,255,255,.35);}
.pwaInstallBtn{
  padding:7px 14px;border-radius:10px;
  background:rgba(255,200,50,.12);border:1px solid rgba(255,200,50,.3);
  color:rgba(255,200,50,.9);font-size:12px;font-weight:700;
  cursor:pointer;white-space:nowrap;font-family:'Space Grotesk',sans-serif;
  transition:all .15s;flex-shrink:0;
}
.pwaInstallBtn:hover{background:rgba(255,200,50,.2);}
.pwaInstallDismiss{
  position:absolute;top:6px;right:8px;
  background:none;border:none;color:rgba(255,255,255,.2);
  font-size:14px;cursor:pointer;padding:2px 4px;
}

/* ══════════════════════════════════════════════════════════
   SCREEN ANIMATIONS — Gaming style (Duolingo/Discord inspired)
   Animations rapides, bouncy, satisfaisantes
══════════════════════════════════════════════════════════ */

/* Keyframes gaming */
@keyframes popIn{
  0%{opacity:0;transform:scale(.85) translateY(12px);}
  70%{opacity:1;transform:scale(1.03) translateY(-2px);}
  100%{opacity:1;transform:scale(1) translateY(0);}
}
@keyframes slideInRight{
  0%{opacity:0;transform:translateX(40px) scale(.96);}
  100%{opacity:1;transform:translateX(0) scale(1);}
}
@keyframes slideInLeft{
  0%{opacity:0;transform:translateX(-40px) scale(.96);}
  100%{opacity:1;transform:translateX(0) scale(1);}
}
@keyframes fadeInUp{
  0%{opacity:0;transform:translateY(16px);}
  100%{opacity:1;transform:translateY(0);}
}

/* État initial : invisible */
.sb{
  opacity:0;
  transform:translateY(12px);
}

/* Screen visible — les .sb s'animent avec stagger */
.screenVisible .sb{
  animation:popIn .35s var(--spring) forwards;
}
.screenVisible .sb:nth-child(1){animation-delay:0ms;}
.screenVisible .sb:nth-child(2){animation-delay:50ms;}
.screenVisible .sb:nth-child(3){animation-delay:100ms;}
.screenVisible .sb:nth-child(4){animation-delay:150ms;}
.screenVisible .sb:nth-child(5){animation-delay:200ms;}
.screenVisible .sb:nth-child(6){animation-delay:250ms;}
.screenVisible .sb:nth-child(7){animation-delay:300ms;}
.screenVisible .sb:nth-child(8){animation-delay:350ms;}

/* Direction-aware animations */
.screenVisible.fromRight .sb{animation-name:slideInRight;}
.screenVisible.fromLeft .sb{animation-name:slideInLeft;}

/* Screen transitions */
#screenDash,#screenProfile,#screenHistory,#screenAchiev,#screenVision,#screenSettings{
  transition:opacity .12s ease, transform .12s ease;
}
.screenOut{
  opacity:0;
  transform:scale(.97);
  pointer-events:none;
}

/* Tab animations — gaming feedback */
.tab{
  transition:all .15s var(--spring);
  transform-origin:center;
}
.tab:hover{transform:scale(1.04);}
.tab:active{transform:scale(.95);}
.tab.active{
  transform:scale(1);
  box-shadow:0 0 12px rgba(255,255,255,.08);
}
/* Tab pop animation on activation */
@keyframes tabPop{
  0%{transform:scale(1);}
  50%{transform:scale(1.12);}
  100%{transform:scale(1);}
}
.tab.tabPop{animation:tabPop .25s var(--spring);}

/* Mobile nav gaming */
.natItem{
  transition:all .12s var(--spring);
}
.natItem:active{transform:scale(.92);}
.natItem.active{
  transform:scale(1.02);
}

/* Boutons gaming feedback */
.btnTiny,.qBtn,.qNatBtn{
  transition:all .12s var(--spring);
}
.btnTiny:hover,.qBtn:hover,.qNatBtn:hover{transform:translateY(-1px) scale(1.02);}
.btnTiny:active,.qBtn:active,.qNatBtn:active{transform:scale(.94);}

/* ═══════════════════════════════════════════════════════════
   GAMIFICATION LAYER — RPG sur design verre
═══════════════════════════════════════════════════════════ */

/* ── Particules bg ── */
@keyframes floatOrb{
  0%,100%{transform:translate(0,0) scale(1);opacity:.18;}
  33%{transform:translate(12px,-18px) scale(1.08);opacity:.28;}
  66%{transform:translate(-8px,10px) scale(.94);opacity:.14;}
}
.gameOrb{
  position:fixed;border-radius:50%;pointer-events:none;z-index:0;
  filter:blur(40px);contain:layout style;opacity:.18;
  /* PERF : orbes STATIQUES (même raison que .bgFx : tout mouvement derrière
     le verre = re-flou plein écran permanent) */
}
.gameOrb1{width:280px;height:280px;background:radial-gradient(circle,rgba(96,165,250,.12),transparent 70%);
  top:15%;left:10%;}
.gameOrb2{width:200px;height:200px;background:radial-gradient(circle,rgba(139,92,246,.1),transparent 70%);
  top:60%;right:8%;}
.gameOrb3{width:160px;height:160px;background:radial-gradient(circle,rgba(34,197,94,.08),transparent 70%);
  bottom:20%;left:35%;}

/* ── Quest cards (qRow gamifié) ── */
.qRow{
  border:1px solid rgba(255,255,255,.09) !important;
  background:rgba(8,8,12,.6) !important;
  border-radius:14px !important;
  position:relative;
  overflow:hidden;
}
.qRow::before{
  content:'';position:absolute;inset:0;
  background:linear-gradient(135deg,rgba(255,255,255,.025) 0%,transparent 60%);
  pointer-events:none;
}
.qRow::after{
  content:'';position:absolute;left:0;top:0;bottom:0;width:3px;
  background:linear-gradient(180deg,rgba(96,165,250,.6),rgba(139,92,246,.4));
  opacity:0;transition:opacity .2s;border-radius:0 0 0 14px;
}
.qRow:hover::after{opacity:1;}
.qRow.isPriority::after{background:linear-gradient(180deg,rgba(255,200,50,.8),rgba(255,150,0,.5));opacity:1;}
.qRow.done::after{background:linear-gradient(180deg,rgba(34,197,94,.7),rgba(16,185,129,.5));opacity:1;}

/* ── XP Bar gamifiée ── */
.xpBar{
  width:180px !important;height:9px !important;
  border-radius:999px;
  background:rgba(255,255,255,.05) !important;
  border:1px solid rgba(255,255,255,.08) !important;
  position:relative;overflow:hidden;
}
.xpFill{
  background:linear-gradient(90deg,
    rgba(96,165,250,.9) 0%,
    rgba(139,92,246,.85) 50%,
    rgba(167,139,250,.95) 100%) !important;
  box-shadow:0 0 8px rgba(96,165,250,.5),0 0 20px rgba(96,165,250,.2);
  transition:width .5s cubic-bezier(.22,1,.36,1) !important;
}
/* Shimmer sur la XP bar */
.xpFill::after{
  content:'';position:absolute;inset:0;
  background:linear-gradient(90deg,transparent 0%,rgba(255,255,255,.35) 50%,transparent 100%);
  width:40%;animation:xpShimmer 2.5s ease-in-out infinite;
}
@keyframes xpShimmer{
  0%{transform:translateX(-150%);}
  100%{transform:translateX(400%);}
}

/* ── Stat pills RPG ── */
.pill{
  border:1px solid rgba(255,255,255,.1) !important;
  background:rgba(8,8,14,.7) !important;
  position:relative;overflow:hidden;
}
.pillGold{
  border-color:rgba(255,200,50,.25) !important;
  background:rgba(20,15,0,.8) !important;
  box-shadow:0 0 10px rgba(255,200,50,.1) inset;
}
.pillGreen{
  border-color:rgba(34,197,94,.25) !important;
  background:rgba(0,15,5,.8) !important;
  box-shadow:0 0 10px rgba(34,197,94,.1) inset;
}

/* ── Avatar badge level ring ── */
.avatarBadge{
  border:2px solid rgba(96,165,250,.3) !important;
  background:rgba(10,10,18,.9) !important;
  box-shadow:0 0 12px rgba(96,165,250,.2),0 0 24px rgba(96,165,250,.08);
  animation:avatarPulse 4s ease-in-out infinite;
}
@keyframes avatarPulse{
  0%,100%{opacity:.85;}
  50%{opacity:1;}
}

/* ── Tabs : style menu RPG ── */
.tabs{gap:4px !important;}
.tab{
  padding:7px 12px !important;
  border-radius:10px !important;
  border:1px solid rgba(255,255,255,.07) !important;
  background:rgba(8,8,14,.6) !important;
  transition:all .2s ease !important;
  position:relative;overflow:hidden;
}
.tab::before{
  content:'';position:absolute;bottom:0;left:0;right:0;height:2px;
  background:linear-gradient(90deg,rgba(96,165,250,.7),rgba(139,92,246,.7));
  transform:scaleX(0);transform-origin:left;transition:transform .2s ease;
}
.tab.active{
  background:rgba(96,165,250,.08) !important;
  border-color:rgba(96,165,250,.2) !important;
  color:rgba(147,197,253,.95) !important;
  box-shadow:0 0 12px rgba(96,165,250,.12);
}
.tab.active::before{transform:scaleX(1);}

/* ── Shell : border glow subtil ── */
.shell{
  box-shadow:var(--shadow), 0 0 60px rgba(96,165,250,.04), 0 0 120px rgba(96,165,250,.02) !important;
}

/* ── Card : légère profondeur RPG ── */
.card{
  box-shadow:0 12px 40px rgba(0,0,0,.35),0 0 0 1px rgba(255,255,255,.08) !important;
}

/* ── Ghost box : style parchemin ── */
.ghostBox{
  background:rgba(8,8,14,.35) !important;
  border:1px solid rgba(255,255,255,.07) !important;
  border-left:2px solid rgba(96,165,250,.3) !important;
}

/* ── Mobile nav gamifié ── */
.mnBtn.active .mnIcon{
  text-shadow:0 0 12px rgba(255,255,255,.6);
}

/* ═══════════════════════════════════════════════
   OBJECTIF MYSTÈRE
═══════════════════════════════════════════════ */
.mysterySlot{
  margin-top:8px;border-radius:14px;padding:14px 16px;position:relative;overflow:hidden;
  border:1.5px dashed rgba(255,200,50,.35);background:rgba(255,200,50,.04);
  opacity:1;transform:none;
}
.mysterySlot.locked{
  opacity:.7;cursor:default;
}
.mysterySlot.locked .mysteryContent{filter:blur(4px);user-select:none;pointer-events:none;}
.mysterySlot .mysteryLock{
  position:absolute;inset:0;display:flex;align-items:center;justify-content:center;gap:8px;
  font-size:13px;font-weight:600;color:rgba(255,200,50,.8);z-index:2;
  background:rgba(8,8,8,.5);backdrop-filter:blur(2px);border-radius:14px;
}
.mysterySlot.revealed .mysteryLock{display:none;}
.mysterySlot.completed .mysteryLock{display:none;}
.mysterySlot.revealed{
  border-color:rgba(255,200,50,.55);background:rgba(255,200,50,.08);
  box-shadow:0 0 20px rgba(255,200,50,.12),inset 0 0 30px rgba(255,200,50,.04);
  animation:mysteryGlow 2s ease-in-out infinite;
}
.mysterySlot.completed{opacity:.6;border-color:rgba(34,197,94,.4);background:rgba(34,197,94,.06);}
.mysterySlot.completed .mysteryGlow{display:none;}
@keyframes mysteryGlow{0%,100%{opacity:.85}50%{opacity:1}}
.mysteryHeader{display:flex;align-items:center;gap:8px;margin-bottom:6px;}
.mysteryBadge{font-size:10px;font-weight:700;letter-spacing:1.5px;text-transform:uppercase;color:rgba(255,200,50,.9);}
.mysteryXp{font-size:10px;color:rgba(255,200,50,.6);font-weight:600;}
.mysteryText{font-size:14px;color:rgba(255,255,255,.88);font-weight:500;line-height:1.4;}
.mysteryBtn{
  margin-top:10px;padding:8px 18px;border-radius:10px;border:none;cursor:pointer;
  background:rgba(255,200,50,.18);color:rgba(255,200,50,.95);font-weight:700;font-size:12px;
  font-family:'Space Grotesk',sans-serif;letter-spacing:.5px;transition:all .15s ease;
}
.mysteryBtn:hover{background:rgba(255,200,50,.28);}
.mysteryBtn:disabled{opacity:.4;cursor:default;}

/* ═══════════════════════════════════════════════
   QUÊTE BONUS (QUÊTE DU JOUR)
═══════════════════════════════════════════════ */
.bonusQuestCard{
  margin-top:6px;margin-bottom:2px;border-radius:14px;padding:14px 16px;
  border:1.5px dashed rgba(96,165,250,.4);background:rgba(96,165,250,.05);
  position:relative;overflow:hidden;
  opacity:1;transform:none;
}
.bonusQuestCard::before{
  content:'';position:absolute;top:-30px;right:-30px;width:80px;height:80px;
  background:radial-gradient(circle,rgba(96,165,250,.1) 0%,transparent 70%);pointer-events:none;
}
.bonusQuestCard.completed{border-color:rgba(34,197,94,.4);background:rgba(34,197,94,.06);}
.bonusQuestCard.completed .bqIcon::after{content:'✓';position:absolute;bottom:-2px;right:-4px;font-size:10px;color:var(--green);}
.bqTop{display:flex;align-items:center;gap:10px;}
.bqIcon{font-size:20px;position:relative;flex-shrink:0;}
.bqInfo{flex:1;min-width:0;}
.bqLabel{font-size:10px;font-weight:700;letter-spacing:1.5px;text-transform:uppercase;color:rgba(96,165,250,.7);margin-bottom:3px;}
.bqText{font-size:13px;color:rgba(255,255,255,.85);line-height:1.4;font-weight:500;}
.bqXp{font-size:11px;font-weight:700;color:rgba(96,165,250,.8);margin-top:4px;}
.bqCheck{font-size:11px;color:rgba(34,197,94,.8);font-weight:600;margin-top:4px;}


/* ═══════════════════════════════════════════════
   VISION — SKILL TREE (Albion Online style)
═══════════════════════════════════════════════ */
#screenVision{padding:0 0 24px;position:relative;}

/* ── Scale bar (zoom) ── */
.vtreeBar{
  display:flex;gap:4px;padding:4px;border-radius:14px;
  background:rgba(255,255,255,.03);border:1px solid var(--vision-surface-border);
  box-shadow:0 0 18px var(--vision-surface-glow);margin:10px 14px 8px;
  position:sticky;top:0;z-index:50;backdrop-filter:blur(12px);
}
.vtreeBarBtn{
  flex:1;padding:8px 6px;border-radius:10px;border:none;background:transparent;
  color:rgba(255,255,255,.4);font-size:11px;font-weight:700;cursor:pointer;
  transition:all .2s ease;font-family:'Space Grotesk',sans-serif;
  display:flex;flex-direction:column;align-items:center;gap:2px;
}
.vtreeBarBtn .vtbIcon{font-size:16px;}
.vtreeBarBtn .vtbLabel{font-size:10px;letter-spacing:.3px;}
.vtreeBarBtn .vtbCount{
  font-size:9px;padding:1px 6px;border-radius:99px;
  background:rgba(255,255,255,.06);color:rgba(255,255,255,.3);font-weight:700;
  min-width:16px;text-align:center;transition:all .2s ease;
}
.vtreeBarBtn.active{background:var(--vision-accent-soft);color:var(--vision-accent);box-shadow:0 2px 8px var(--vision-surface-glow);}
.vtreeBarBtn.active .vtbCount{background:var(--vision-accent-soft-strong);color:var(--vision-accent);}
.vtreeBarBtn:hover:not(.active){background:rgba(255,255,255,.04);color:rgba(255,255,255,.55);}

/* ── Navigation temporelle ── */
.vtreeNav{
  display:flex;align-items:center;justify-content:center;gap:8px;
  padding:6px 14px 10px;
}
.vtreeNavArrow{
  width:32px;height:32px;border-radius:10px;border:1px solid rgba(255,255,255,.08);
  background:rgba(255,255,255,.03);color:rgba(255,255,255,.4);font-size:12px;
  cursor:pointer;display:flex;align-items:center;justify-content:center;
  transition:all .15s ease;font-family:'Space Grotesk',sans-serif;
}
.vtreeNavArrow:hover{background:rgba(255,255,255,.07);color:rgba(255,255,255,.7);}
.vtreeNavCenter{
  font-size:13px;font-weight:700;color:rgba(255,255,255,.7);
  min-width:140px;text-align:center;font-family:'Space Grotesk',sans-serif;
}
.vtreeNavToday{
  padding:4px 10px;border-radius:8px;border:1px solid rgba(255,255,255,.1);
  background:rgba(255,255,255,.04);color:rgba(255,255,255,.4);font-size:10px;
  font-weight:700;cursor:pointer;transition:all .15s ease;font-family:'Space Grotesk',sans-serif;
}
.vtreeNavToday:hover{background:rgba(255,255,255,.08);color:rgba(255,255,255,.7);}
.vtreeNav.isPast{background:rgba(239,68,68,.03);border-radius:10px;margin:0 14px 6px;}
.vtreeNav.isPast .vtreeNavCenter{color:rgba(239,68,68,.5);}

/* ── Filter banner ── */
.vtreeFilter{
  display:flex;align-items:center;justify-content:space-between;padding:8px 14px;
  margin:0 14px 8px;background:rgba(99,102,241,.12);border-radius:10px;
  font-size:12px;color:rgba(255,255,255,.8);
}
.vtreeFilterClear{
  background:rgba(255,255,255,.1);border:none;color:rgba(255,255,255,.7);
  padding:4px 10px;border-radius:6px;cursor:pointer;font-size:11px;
  font-family:'Space Grotesk',sans-serif;
}
.vtreeFilterClear:hover{background:rgba(255,255,255,.18);}

/* ── Tree canvas ── */
.vtreeCanvas{padding:0 14px 16px;overflow-y:auto;}

/* ── Tree column ── */
.vtreeColumn{display:flex;flex-direction:column;gap:6px;}

/* ── Tree node ── */
.vtreeNode{
  padding:12px 14px;border-radius:14px;border:1px solid rgba(255,255,255,.06);
  background:rgba(255,255,255,.02);position:relative;overflow:hidden;
  cursor:pointer;transition:all .2s ease;-webkit-tap-highlight-color:transparent;
}
.vtreeNode::before{
  content:'';position:absolute;left:0;top:0;bottom:0;width:3px;border-radius:3px;
  transition:background .2s ease;
}
.vtreeNode.s-vie::before{background:rgba(255,200,50,.5);}
.vtreeNode.s-annee::before{background:rgba(96,165,250,.5);}
.vtreeNode.s-mois::before{background:rgba(34,197,94,.5);}
.vtreeNode.s-semaine::before{background:rgba(167,139,250,.5);}
.vtreeNode.s-vie{border-color:rgba(255,200,50,.1);}
.vtreeNode.s-annee{border-color:rgba(96,165,250,.1);}
.vtreeNode.s-mois{border-color:rgba(34,197,94,.1);}
.vtreeNode.s-semaine{border-color:rgba(167,139,250,.1);}
@media(hover:hover){
  .vtreeNode:hover{transform:translateY(-1px);box-shadow:0 4px 20px rgba(0,0,0,.2);}
  .vtreeNode.s-vie:hover{border-color:rgba(255,200,50,.22);}
  .vtreeNode.s-annee:hover{border-color:rgba(96,165,250,.22);}
  body.gFem .vtreeNode.s-annee:hover{border-color:rgba(244,114,182,.22);}
  .vtreeNode.s-mois:hover{border-color:rgba(34,197,94,.22);}
  .vtreeNode.s-semaine:hover{border-color:rgba(167,139,250,.22);}
}
.vtreeNode.isDone{opacity:.65;}
.vtreeNode.isDone .vtreeNodeText{text-decoration:line-through;color:rgba(255,255,255,.35);}
.vtreeNode.isDone::after{
  content:'';position:absolute;inset:0;
  background:linear-gradient(135deg,rgba(34,197,94,.03) 0%,transparent 100%);pointer-events:none;
}
.vtreeNodeTop{display:flex;align-items:center;gap:10px;}
.vtreeNodeEmoji{font-size:22px;flex-shrink:0;}
.vtreeNodeMain{flex:1;min-width:0;display:grid;gap:3px;}
.vtreeNodeText{font-size:13px;color:rgba(255,255,255,.85);line-height:1.4;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.vtreeNodeRank{font-size:11px;font-weight:700;opacity:.35;margin-right:4px;font-family:'Space Grotesk',sans-serif;}
.vtreeNodeMeta{font-size:10px;color:rgba(255,255,255,.4);font-weight:600;display:flex;align-items:center;gap:6px;flex-wrap:wrap;}
.vtreeNodeCheck{font-size:14px;flex-shrink:0;color:rgba(34,197,94,.7);}
.vtreeTypeBadge{font-size:10px;opacity:.45;margin-left:6px;vertical-align:middle;}

/* ── Vision Board (vie cards) ── */
.vVisionBoardIntro{
  position:relative;overflow:hidden;margin-bottom:14px;padding:18px 18px 16px;
  border-radius:18px;border:1px solid rgba(255,200,50,.14);
  background:
    radial-gradient(circle at top right,rgba(255,200,50,.12) 0%,transparent 40%),
    linear-gradient(145deg,rgba(255,200,50,.06) 0%,rgba(255,255,255,.02) 45%,rgba(255,255,255,.01) 100%);
  box-shadow:0 16px 34px rgba(0,0,0,.18),0 0 24px rgba(255,200,50,.06);
}
.vVisionBoardIntro::after{
  content:'';position:absolute;inset:auto -30px -40px auto;width:140px;height:140px;border-radius:50%;
  background:radial-gradient(circle,rgba(255,255,255,.08) 0%,transparent 68%);pointer-events:none;
}
.vVisionBoardEyebrow{
  position:relative;z-index:1;font-size:10px;font-weight:800;letter-spacing:2.2px;text-transform:uppercase;
  color:rgba(255,220,120,.7);margin-bottom:8px;
}
.vVisionBoardTitle{
  position:relative;z-index:1;font-family:'Syne',sans-serif;font-size:22px;font-weight:800;line-height:1.08;
  color:#fff;letter-spacing:-.6px;margin-bottom:8px;
}
.vVisionBoardText{
  position:relative;z-index:1;font-size:12px;line-height:1.6;color:rgba(255,255,255,.58);max-width:560px;
}
.vVisionBoard{
  display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px;margin-bottom:18px;
}
.vVisionBoard>*{animation:cardIn .4s cubic-bezier(.4,0,.2,1) both;}
.vVisionBoard>*:nth-child(2){animation-delay:70ms;}
.vVisionBoard>*:nth-child(3){animation-delay:140ms;}
.vVisionBoard>*:nth-child(4){animation-delay:210ms;}
.vVisionBoard>*:nth-child(5){animation-delay:280ms;}
.vVisionBoard>*:nth-child(6){animation-delay:350ms;}
.vVieCard{
  --vVieAccent:rgba(255,200,50,.62);
  --vVieAccentSoft:rgba(255,200,50,.14);
  --vVieAccentGlow:rgba(255,200,50,.14);
  min-height:180px;padding:22px 20px 18px;border-radius:22px;position:relative;overflow:hidden;cursor:pointer;
  border:1px solid rgba(255,255,255,.08);
  background:
    radial-gradient(circle at 18% 14%,var(--vVieAccentSoft) 0%,transparent 34%),
    linear-gradient(160deg,rgba(26,28,34,.96) 0%,rgba(16,18,24,.96) 58%,rgba(10,12,16,.98) 100%);
  box-shadow:0 20px 40px rgba(0,0,0,.24),0 0 0 1px rgba(255,255,255,.02) inset,0 0 30px var(--vVieAccentGlow);
  transition:transform .22s ease,border-color .22s ease,box-shadow .22s ease;
  -webkit-tap-highlight-color:transparent;
}
.vVieCard::before{
  content:'';position:absolute;inset:auto -26px -42px auto;width:150px;height:150px;border-radius:50%;
  background:radial-gradient(circle,var(--vVieAccentSoft) 0%,transparent 70%);opacity:.9;pointer-events:none;
}
.vVieCard::after{
  content:'';position:absolute;inset:0;
  background:linear-gradient(180deg,rgba(255,255,255,.04) 0%,transparent 24%,transparent 78%,rgba(255,255,255,.03) 100%);
  pointer-events:none;
}
@media(hover:hover){.vVieCard:hover{transform:translateY(-3px);border-color:var(--vVieAccent);box-shadow:0 24px 48px rgba(0,0,0,.3),0 0 36px var(--vVieAccentGlow);}}
.vVieCard.tone-0{--vVieAccent:rgba(255,200,50,.62);--vVieAccentSoft:rgba(255,200,50,.14);--vVieAccentGlow:rgba(255,200,50,.12);}
.vVieCard.tone-1{--vVieAccent:rgba(34,211,238,.58);--vVieAccentSoft:rgba(34,211,238,.13);--vVieAccentGlow:rgba(34,211,238,.12);}
.vVieCard.tone-2{--vVieAccent:rgba(52,211,153,.58);--vVieAccentSoft:rgba(52,211,153,.13);--vVieAccentGlow:rgba(52,211,153,.12);}
.vVieCard.tone-3{--vVieAccent:rgba(244,114,182,.52);--vVieAccentSoft:rgba(244,114,182,.12);--vVieAccentGlow:rgba(244,114,182,.12);}
.vVieHeader{position:relative;z-index:1;display:flex;align-items:center;gap:12px;margin-bottom:12px;}
.vVieEmoji{
  width:52px;height:52px;border-radius:16px;display:flex;align-items:center;justify-content:center;flex-shrink:0;
  font-size:28px;background:rgba(255,255,255,.06);border:1px solid rgba(255,255,255,.09);
  box-shadow:0 10px 24px rgba(0,0,0,.18),0 0 18px var(--vVieAccentSoft);
}
.vVieMeta{display:flex;flex-direction:column;gap:3px;min-width:0;}
.vVieLabel{font-size:10px;font-weight:800;letter-spacing:1.8px;text-transform:uppercase;color:var(--vVieAccent);}
.vVieText{
  position:relative;z-index:1;font-family:'Syne',sans-serif;font-size:19px;font-weight:800;color:#fff;
  line-height:1.18;letter-spacing:-.4px;margin-bottom:8px;
}
.vVieSub{
  position:relative;z-index:1;font-size:12px;color:rgba(255,255,255,.5);line-height:1.55;
  display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;
}
.vVieChipRow{position:relative;z-index:1;display:flex;flex-wrap:wrap;gap:6px;margin-top:10px;}
.vVieChip{
  display:inline-flex;align-items:center;gap:5px;padding:5px 9px;border-radius:999px;
  border:1px solid rgba(255,255,255,.07);background:rgba(255,255,255,.04);
  color:rgba(255,255,255,.7);font-size:10px;font-weight:600;
}
.vVieFooter{position:relative;z-index:1;display:flex;align-items:center;gap:8px;margin-top:12px;}
.vVieChildCount{
  display:inline-flex;align-items:center;gap:5px;padding:5px 10px;border-radius:999px;border:1px solid rgba(255,255,255,.09);
  background:rgba(255,255,255,.05);color:var(--vVieAccent);font-size:10px;font-weight:700;cursor:pointer;
  transition:all .15s ease;
}
.vVieChildCount:hover{background:rgba(255,255,255,.09);border-color:var(--vVieAccent);color:#fff;}
.vVieHint{position:relative;z-index:1;margin-top:10px;font-size:11px;line-height:1.5;color:rgba(255,255,255,.38);}
@media(max-width:600px){
  .vVisionBoard{grid-template-columns:1fr;gap:12px;}
  .vVisionBoardIntro{padding:16px 14px;}
  .vVieCard{min-height:auto;padding:18px 14px 14px;}
}

/* ── Progress bar (horizontal) ── */
.vtreeProgress{
  height:6px;border-radius:3px;background:rgba(255,255,255,.06);
  margin-top:6px;overflow:hidden;position:relative;
}
.vtreeProgressFill{height:100%;border-radius:3px;transition:width .6s cubic-bezier(.4,0,.2,1);}
.vtreeProgressFill.c-vie{background:rgba(255,200,50,.7);}
.vtreeProgressFill.c-annee{background:rgba(96,165,250,.7);}
.vtreeProgressFill.c-mois{background:rgba(34,197,94,.7);}
.vtreeProgressFill.c-semaine{background:rgba(167,139,250,.7);}
.vtreeProgressLabel{
  font-size:10px;font-weight:700;color:rgba(255,255,255,.45);margin-top:3px;
  display:flex;justify-content:space-between;
}

/* ── Badges (parent / children) ── */
.vtreeBadge{
  display:inline-flex;align-items:center;gap:4px;padding:3px 10px;margin-top:4px;
  border-radius:999px;font-size:10px;font-weight:600;cursor:pointer;
  transition:all .15s ease;-webkit-tap-highlight-color:transparent;
}
.vtreeBadge.parent{color:rgba(255,255,255,.45);background:rgba(255,255,255,.04);border:1px solid rgba(255,255,255,.06);}
.vtreeBadge.parent:hover{background:rgba(255,255,255,.08);color:rgba(255,255,255,.7);}
.vtreeBadge.children{color:var(--vision-accent);background:var(--vision-accent-soft);border:1px solid rgba(255,255,255,.06);}
.vtreeBadge.children:hover{background:var(--vision-accent-soft-strong);color:#fff;}
/* Goal né en cours de période : la date de création est affichée, tardif = ambre */
.vtreeBadge.created{color:rgba(255,255,255,.38);background:rgba(255,255,255,.03);border:1px solid rgba(255,255,255,.05);cursor:default;}
.vtreeBadge.created.late{color:rgba(253,230,138,.75);background:rgba(253,230,138,.06);border-color:rgba(253,230,138,.18);}

/* ── Children wrapper with connection lines ── */
.vtreeChildren{
  margin-left:16px;padding-left:16px;position:relative;
  display:flex;flex-direction:column;gap:4px;margin-top:4px;
}
.vtreeChildren::before{
  content:'';position:absolute;left:0;top:0;bottom:12px;width:1px;
  background:rgba(255,255,255,.08);
}
.vtreeChildren .vtreeNode{margin-left:0;padding:8px 12px;}
.vtreeChildren .vtreeNode::after{
  content:'';position:absolute;left:-16px;top:50%;width:16px;height:1px;
  background:rgba(255,255,255,.08);pointer-events:none;
}
.vtreeChildren .vtreeNodeText{font-size:12px;}

/* ── Ghost node ── */
.vtreeGhost{
  padding:14px;border-radius:14px;border:1px dashed rgba(255,255,255,.1);
  background:rgba(255,255,255,.01);text-align:center;cursor:pointer;
  transition:all .2s ease;opacity:.6;margin-top:6px;
}
.vtreeGhost:hover{opacity:1;border-color:rgba(255,200,50,.3);background:rgba(255,200,50,.03);}
.vtreeGhostLabel{font-size:12px;font-weight:600;color:rgba(255,255,255,.4);margin-bottom:4px;}
.vtreeGhostTip{font-size:11px;color:rgba(255,200,50,.5);font-style:italic;line-height:1.4;}

/* ── Ghost small (plan day task) ── */
.vtreeGhostSmall{padding:8px 12px;margin-top:2px;opacity:.4;border-radius:10px;}
.vtreeGhostSmall .vtreeGhostLabel{font-size:11px;margin-bottom:0;}

/* ── Day task leaf node ── */
.vtreeNodeTask{padding:8px 12px;border-left:2px solid rgba(167,139,250,.25);opacity:.8;}
.vtreeNodeTask.isPast{opacity:.4;}
.vtreeNodeTask.isToday{border-left-color:rgba(167,139,250,.6);opacity:1;}
.vtreeChildrenTasks{margin-top:2px;gap:2px;}
.vtreeUnlinked{margin:16px 0 4px;}
.vtreeUnlinkedHeader{font-size:11px;color:rgba(255,255,255,.4);margin:0 0 4px 8px;font-weight:600;letter-spacing:.5px;
  cursor:pointer;list-style:none;display:flex;align-items:center;gap:6px;}
.vtreeUnlinkedHeader::-webkit-details-marker{display:none;}
.vtreeUnlinkedHeader::after{content:'▾';font-size:9px;opacity:.55;transition:transform .18s ease;}
.vtreeUnlinked[open] .vtreeUnlinkedHeader::after{transform:rotate(180deg);}
.vtreeUnlinkedHeader .gi{width:12px;height:12px;fill:rgba(255,255,255,.4);flex:none;}
.vtreeUnlinkedN{padding:1px 6px;border-radius:6px;background:rgba(255,255,255,.07);font-size:10px;font-weight:800;color:rgba(255,255,255,.5);}
.mgHeadBtns{display:flex;flex-wrap:wrap;gap:8px;margin-top:12px;}
.mgHeadBtns .btnTiny{flex:0 1 auto;}

/* ── Bottom sheet ── */
.vtreeSheetOv{
  position:fixed;inset:0;z-index:9996;background:rgba(0,0,0,.5);backdrop-filter:blur(4px);
  opacity:0;pointer-events:none;transition:opacity .2s ease;
}
.vtreeSheetOv.show{opacity:1;pointer-events:auto;}
.vtreeSheet{
  position:fixed;bottom:0;left:0;right:0;z-index:9997;
  max-height:70vh;overflow-y:auto;-webkit-overflow-scrolling:touch;
  border-radius:20px 20px 0 0;border:1px solid var(--overlay-card-border);border-bottom:none;
  background:var(--overlay-card-bg);box-shadow:0 -10px 40px rgba(0,0,0,.4);
  padding:12px 20px 24px;transform:translateY(100%);transition:transform .3s cubic-bezier(.4,0,.2,1);
}
.vtreeSheetOv.show .vtreeSheet{transform:translateY(0);}
.vtreeSheetHandle{width:36px;height:4px;border-radius:2px;background:rgba(255,255,255,.15);margin:0 auto 14px;}
.vtreeSheetTitle{font-family:'Syne',sans-serif;font-size:18px;font-weight:800;color:#fff;margin-bottom:6px;line-height:1.3;}
.vtreeSheetScale{
  display:inline-flex;align-items:center;gap:4px;padding:3px 10px;border-radius:999px;
  font-size:10px;font-weight:700;margin-bottom:10px;
}
.vtreeSheetScale.s-vie{background:rgba(255,200,50,.1);color:rgba(255,200,50,.8);}
.vtreeSheetScale.s-annee{background:rgba(96,165,250,.1);color:rgba(96,165,250,.8);}
.vtreeSheetScale.s-mois{background:rgba(34,197,94,.1);color:rgba(34,197,94,.8);}
.vtreeSheetScale.s-semaine{background:rgba(167,139,250,.1);color:rgba(167,139,250,.8);}
/* Année ROSE pour les joueuses (bleue par défaut homme) : harmonisation 22 juillet.
   body.gFem posé par syncHUD selon P._gender. Couvre les 5 spots s-annee/c-annee. */
body.gFem .vtreeNode.s-annee::before{background:rgba(244,114,182,.5);}
body.gFem .vtreeNode.s-annee{border-color:rgba(244,114,182,.1);}
body.gFem .vtreeProgressFill.c-annee{background:rgba(244,114,182,.7);}
body.gFem .vtreeSheetScale.s-annee{background:rgba(244,114,182,.1);color:rgba(244,114,182,.8);}
.vtreeSheetProgress{margin:8px 0 12px;}
.vtreeSheetSection{
  font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.8px;
  color:rgba(255,255,255,.25);margin:12px 0 6px;
}
.vtreeSheetParent,.vtreeSheetChild{
  display:flex;align-items:center;gap:8px;padding:8px 10px;border-radius:10px;
  background:rgba(255,255,255,.03);border:1px solid rgba(255,255,255,.06);
  font-size:12px;color:rgba(255,255,255,.6);margin-bottom:4px;cursor:pointer;
  transition:all .15s ease;
}
.vtreeSheetParent:hover,.vtreeSheetChild:hover{background:rgba(255,255,255,.06);color:rgba(255,255,255,.8);}
.vtreeSheetInfo{display:flex;flex-wrap:wrap;gap:8px;font-size:11px;color:rgba(255,255,255,.4);margin:8px 0;}
.vtreeSheetInfo span{display:flex;align-items:center;gap:4px;}
.vtreeQuantRow{display:flex;align-items:center;gap:6px;margin:10px 0;}
.vtreeQuantBtn{
  width:32px;height:32px;border-radius:10px;border:1px solid rgba(255,255,255,.1);
  background:rgba(255,255,255,.04);color:rgba(255,255,255,.8);font-size:16px;font-weight:700;
  cursor:pointer;display:flex;align-items:center;justify-content:center;
  transition:all .12s ease;font-family:'Space Grotesk',sans-serif;
}
.vtreeQuantBtn:hover{background:rgba(255,255,255,.1);}
.vtreeQuantBtn:disabled{opacity:.3;cursor:not-allowed;}
.vtreeQuantBtn.zero{border-color:rgba(239,68,68,.24);background:rgba(239,68,68,.08);color:rgba(252,165,165,.92);font-size:10px;font-weight:700;width:auto;min-width:32px;padding:0 8px;}
.vtreeQuantBtn.max{border-color:rgba(34,197,94,.22);background:rgba(34,197,94,.06);color:rgba(134,239,172,.95);font-size:10px;font-weight:700;width:auto;min-width:36px;padding:0 8px;}
.vtreeQuantLabel{flex:1;text-align:center;font-size:12px;font-weight:700;color:rgba(255,255,255,.6);}
.vtreeQuantBar{flex:2;}
.vtreeSheetReorder{display:flex;gap:6px;width:100%;margin-bottom:4px;}
.vtreeSheetReorder .vtreeSheetBtn{flex:1;font-size:11px;padding:8px 10px;}
.vtreeSheetActions{display:flex;flex-wrap:wrap;gap:6px;margin-top:14px;}
.vtreeSheetBtn{
  flex:1;min-width:calc(50% - 3px);padding:10px 12px;border-radius:10px;
  border:1px solid rgba(255,255,255,.08);background:rgba(255,255,255,.03);
  color:rgba(255,255,255,.7);font-size:12px;font-weight:600;cursor:pointer;
  transition:all .15s ease;font-family:'Space Grotesk',sans-serif;
  display:flex;align-items:center;justify-content:center;gap:6px;
}
.vtreeSheetBtn:hover{background:rgba(255,255,255,.07);color:#fff;}
.vtreeSheetBtn.primary{border-color:rgba(167,139,250,.3);background:rgba(167,139,250,.08);color:rgba(167,139,250,.9);}
.vtreeSheetBtn.primary:hover{background:rgba(167,139,250,.15);}
.vtreeSheetBtn.danger{border-color:rgba(239,68,68,.2);background:rgba(239,68,68,.05);color:rgba(239,68,68,.7);}
.vtreeSheetBtn.danger:hover{background:rgba(239,68,68,.1);}

/* ── Notes inline (kept) ── */
.vNotes{
  width:100%;padding:10px 12px;margin-top:8px;border-radius:10px;
  border:1px solid rgba(255,255,255,.08);background:rgba(255,255,255,.03);
  color:rgba(255,255,255,.8);font-size:12px;font-family:'Space Grotesk',sans-serif;
  line-height:1.5;resize:vertical;min-height:48px;max-height:200px;outline:none;
  transition:border-color .2s ease;
}
.vNotes:focus{border-color:rgba(255,200,50,.3);}
.vNotes::placeholder{color:rgba(255,255,255,.2);}
.vNotesWrap{overflow:hidden;transition:max-height .25s ease,opacity .2s ease;max-height:0;opacity:0;}
.vNotesWrap.open{max-height:220px;opacity:1;}

/* ── Sommet tip ── */
.vtreeTip{
  padding:10px 14px;border-radius:12px;margin-top:8px;
  border:1px solid rgba(255,200,50,.15);background:rgba(255,200,50,.03);
  font-size:11px;color:rgba(255,200,50,.6);font-style:italic;line-height:1.5;
}
.vtreeTip .vtreeTipSign{display:block;text-align:right;font-size:10px;margin-top:4px;color:rgba(255,200,50,.4);font-style:normal;font-weight:700;}

/* ── Guided creation overlay ── */
.vtreeGuideOv{
  position:fixed;inset:0;z-index:9998;display:flex;align-items:center;justify-content:center;
  padding:max(16px,env(safe-area-inset-top)) 16px max(16px,env(safe-area-inset-bottom));
  background:var(--overlay-strong);backdrop-filter:blur(14px);
  opacity:0;pointer-events:none;transition:opacity .2s ease;
}
.vtreeGuideOv.show{opacity:1;pointer-events:auto;}
.vtreeGuideCard{
  width:min(420px,calc(100vw - 32px));border-radius:20px;
  border:1px solid var(--overlay-card-border);background:var(--overlay-card-bg);
  box-shadow:var(--overlay-card-shadow);padding:24px;
  max-height:min(85svh,700px);overflow-y:auto;-webkit-overflow-scrolling:touch;
}
/* ── Création guidée : langage visuel du questionnaire mentor ── */
.vgTop{display:flex;align-items:center;gap:11px;}
.vgBadge{width:40px;height:40px;border-radius:13px;background:linear-gradient(135deg,var(--vg1),var(--vg2));display:flex;align-items:center;justify-content:center;flex-shrink:0;box-shadow:0 6px 18px -8px var(--vg2);}
.vgBadge .gi{width:19px;height:19px;fill:rgba(6,8,14,.85);}
.vgWho{flex:1;min-width:0;}
.vgScale{font-family:'Syne',sans-serif;font-weight:800;font-size:15px;background:linear-gradient(90deg,var(--vg1),var(--vg2));-webkit-background-clip:text;background-clip:text;color:transparent;}
.vgKick{font-size:9px;color:rgba(255,255,255,.42);letter-spacing:1.6px;text-transform:uppercase;font-weight:700;margin-top:1px;font-family:'Space Grotesk',sans-serif;}
.vgClose{border:none;background:rgba(255,255,255,.06);color:rgba(255,255,255,.6);width:32px;height:32px;border-radius:10px;cursor:pointer;font-size:13px;flex-shrink:0;transition:background .15s ease;}
.vgClose:hover{background:rgba(255,255,255,.12);}
.vgProg{height:4px;border-radius:99px;background:rgba(255,255,255,.08);margin:14px 0 18px;overflow:hidden;}
.vgProgFill{height:100%;border-radius:99px;background:linear-gradient(90deg,var(--vg1),var(--vg2));transition:width .35s cubic-bezier(.22,1,.36,1);}
.vgBody{animation:vgIn .3s cubic-bezier(.22,1,.36,1) both;}
.vgSay{font-size:12px;font-style:italic;line-height:1.5;margin-bottom:10px;font-family:'Space Grotesk',sans-serif;background:linear-gradient(90deg,var(--vg1,#a78bfa),var(--vg2,#60a5fa));-webkit-background-clip:text;background-clip:text;color:transparent;font-weight:600;}
@keyframes vgIn{from{opacity:0;transform:translateY(7px);}to{opacity:1;transform:none;}}
.vtreeGuideQ{font-family:'Syne',sans-serif;font-size:17px;font-weight:800;color:#fff;line-height:1.35;letter-spacing:-.2px;margin-bottom:14px;}
.vtreeGuideInput{
  width:100%;padding:13px 14px;border-radius:13px;border:1px solid rgba(255,255,255,.14);
  background:rgba(255,255,255,.05);color:#fff;font-size:14px;
  font-family:'Space Grotesk',sans-serif;outline:none;transition:border-color .2s ease;box-sizing:border-box;
}
.vtreeGuideInput:focus{border-color:var(--vg1,#a78bfa);}
.vtreeGuideInput::placeholder{color:rgba(255,255,255,.28);}
.vtreeGuideHint{font-size:11px;color:rgba(255,255,255,.35);line-height:1.5;margin-top:10px;}
.vtreeGuideOpts{display:flex;flex-direction:column;gap:7px;margin-bottom:4px;}
.vtreeGuideOpt{
  padding:14px;border-radius:13px;border:1px solid rgba(255,255,255,.1);
  background:rgba(255,255,255,.04);color:rgba(255,255,255,.85);cursor:pointer;
  font-size:13px;font-weight:600;transition:all .15s ease;
  font-family:'Space Grotesk',sans-serif;display:flex;align-items:center;gap:11px;
  min-height:86px;box-sizing:border-box; /* TAILLE UNIFORME (retour user) : les descs inégales ne dictent plus la hauteur */
  -webkit-tap-highlight-color:transparent;
}
/* Les listes d'options scrollent plutôt que d'écraser les cases */
.vtreeGuideOpts{max-height:52vh;overflow-y:auto;-webkit-overflow-scrolling:touch;padding-right:2px;}
/* Chips de mode (voie chiffre) : titre + desc, largeur pleine, hauteur égale */
.vgModeRow{display:flex;flex-direction:column;flex-wrap:nowrap;align-items:stretch;gap:6px;}
.vgModeRow .vgCtrlChip.vgMode{width:100%;box-sizing:border-box;display:flex;flex-direction:column;align-items:flex-start;gap:2px;text-align:left;border-radius:12px;padding:10px 13px;min-height:56px;justify-content:center;}
.vgMode b{font-size:12.5px;font-weight:700;}
.vgMode span{font-size:10.5px;color:rgba(255,255,255,.42);font-weight:500;line-height:1.35;}
.vgCtrlChip.vgMode.on span{color:rgba(187,247,208,.7);}
.vtreeGuideOpt>div{flex:1;line-height:1.35;}
.vtreeGuideOpt:hover{background:rgba(255,255,255,.07);border-color:rgba(255,255,255,.2);}
.vtreeGuideOpt.active{border-color:var(--vg1,#a78bfa);background:linear-gradient(135deg,color-mix(in srgb,var(--vg1,#a78bfa) 16%,transparent),color-mix(in srgb,var(--vg2,#60a5fa) 16%,transparent));color:#fff;}
.vtreeGuideOpt .vgoIcon{display:flex;align-items:center;justify-content:center;width:30px;height:30px;flex:none;border-radius:9px;background:rgba(255,255,255,.05);font-size:15px;}
.vtreeGuideOpt .vgoIcon .gi{width:16px;height:16px;fill:var(--vg1,#a78bfa);}
.vtreeGuideOpt .vgoDesc{font-size:11px;color:rgba(255,255,255,.4);font-weight:400;margin-top:2px;}
.vgoTag{margin-left:auto;display:flex;align-items:center;}
.vgoTag .gi{width:13px;height:13px;fill:rgba(255,255,255,.35);}
.vtreeGuideBtns{display:flex;gap:9px;margin-top:16px;}
.vtreeGuideBtn{
  padding:13px 16px;border-radius:13px;border:1px solid rgba(255,255,255,.14);
  background:transparent;color:rgba(255,255,255,.6);cursor:pointer;
  font-weight:700;font-size:11px;text-transform:uppercase;letter-spacing:.6px;
  transition:all .15s ease;font-family:'Space Grotesk',sans-serif;
}
.vtreeGuideBtn:hover{border-color:rgba(255,255,255,.3);color:#fff;}
.vtreeGuideBtn.primary{flex:1;border:none;background:linear-gradient(135deg,var(--vg1,#a78bfa),var(--vg2,#60a5fa));color:#fff;font-weight:800;letter-spacing:.8px;transition:transform .15s ease,box-shadow .15s ease;}
.vtreeGuideBtn.primary:hover{transform:translateY(-1px);box-shadow:0 8px 24px -10px var(--vg2,#60a5fa);}
.vtreeGuideBtn.primary:active{transform:scale(.98);}
.vtreeGuideSummary{display:grid;gap:8px;margin-bottom:4px;padding:14px;border-radius:14px;border:1px solid rgba(255,255,255,.09);background:rgba(255,255,255,.03);}
.vtreeGuideSummaryRow{display:flex;align-items:center;gap:9px;font-size:12.5px;color:rgba(255,255,255,.65);}
.vtreeGuideSummaryRow .vgsIcon{display:flex;align-items:center;flex-shrink:0;}
.vtreeGuideSummaryRow .vgsIcon .gi{width:14px;height:14px;fill:var(--vg1,#a78bfa);}
.vtreeGuideSummaryRow b{color:#fff;font-family:'Syne',sans-serif;}
.vtreeGuideEmojiRow{display:flex;align-items:center;gap:10px;margin-bottom:12px;}
.vtreeGuideEmojiRow label{font-size:12px;color:rgba(255,255,255,.5);font-weight:600;}
.vtreeGuideEmojiInput{
  width:50px;padding:8px;border-radius:10px;border:1px solid rgba(255,255,255,.1);
  background:rgba(255,255,255,.04);color:#fff;font-size:22px;text-align:center;
  font-family:'Space Grotesk',sans-serif;outline:none;
}
.vtreeGuideTargetRow{display:flex;gap:8px;align-items:center;}
.vtreeGuideTargetInput{
  width:80px;padding:10px 12px;border-radius:10px;border:1px solid rgba(255,255,255,.12);
  background:rgba(255,255,255,.04);color:#fff;font-size:14px;text-align:center;
  font-family:'Space Grotesk',sans-serif;outline:none;
}
.vtreeGuideUnitInput{
  flex:1;padding:10px 12px;border-radius:10px;border:1px solid rgba(255,255,255,.12);
  background:rgba(255,255,255,.04);color:#fff;font-size:13px;
  font-family:'Space Grotesk',sans-serif;outline:none;
}
.vtreeGuideUnitInput::placeholder,.vtreeGuideTargetInput::placeholder{color:rgba(255,255,255,.25);}

/* ── Add button (shared) ── */
.vtreeAddBtn{
  display:flex;align-items:center;justify-content:center;gap:6px;
  padding:12px;margin-top:8px;border-radius:12px;border:1px dashed var(--vision-hero-border);
  background:var(--vision-surface-tint);color:var(--vision-accent);font-size:12px;font-weight:600;
  font-family:'Space Grotesk',sans-serif;cursor:pointer;transition:all .2s ease;width:100%;
}
.vtreeAddBtn:hover{background:var(--vision-surface-tint-strong);color:#fff;border-color:var(--vision-accent);}
.vtreeAddBtn.sommet{border-color:rgba(250,204,21,.2);color:rgba(250,204,21,.85);background:rgba(250,204,21,.04);margin-top:6px;}
.vtreeAddBtn.sommet:hover{background:rgba(250,204,21,.1);border-color:rgba(250,204,21,.4);color:rgba(250,204,21,1);}
.vtreeAddBtn.disabled{opacity:.2;pointer-events:none;cursor:not-allowed;}
.vtreeLimitCount{font-weight:400;opacity:.5;font-size:10px;}

/* ── Dashboard planned tasks (kept) ── */
.vPlannedSection{
  margin-bottom:14px;padding:10px 14px;border-radius:12px;
  border:1px dashed var(--vision-hero-border);background:var(--vision-surface-tint);
  box-shadow:0 0 18px var(--vision-surface-glow);
}
.vPlannedTitle{font-size:11px;font-weight:700;color:var(--vision-accent);margin-bottom:8px;text-transform:uppercase;letter-spacing:.5px;}
.vPlannedTask{
  display:flex;align-items:center;gap:8px;padding:7px 10px;margin:4px 0;
  border-radius:8px;background:rgba(255,255,255,.02);border:1px dashed rgba(255,255,255,.08);
  font-size:12px;color:rgba(255,255,255,.6);cursor:pointer;transition:all .15s ease;
}
.vPlannedTask:hover{background:var(--vision-accent-soft);border-color:var(--vision-hero-border);color:rgba(255,255,255,.8);}
.vPlannedTask .vptIcon{font-size:14px;flex-shrink:0;}

/* ── Week Calendar Strip ── */
.vWeekStrip{
  display:flex;gap:4px;margin-bottom:14px;padding:4px;
  border-radius:14px;background:rgba(255,255,255,.02);border:1px solid var(--vision-surface-border);
  box-shadow:0 0 18px var(--vision-surface-glow);
}
.vDayCell{
  flex:1;padding:8px 4px;border-radius:10px;text-align:center;cursor:pointer;
  transition:all .2s ease;border:1px solid transparent;position:relative;
}
.vDayCell:hover{background:var(--vision-accent-soft);border-color:var(--vision-hero-border);}
.vDayCell.today{border-color:rgba(255,200,50,.3);background:rgba(255,200,50,.04);}
.vDayCell.today .vDayName{color:rgba(255,200,50,.8);}
.vDayCell.today .vDayNum{color:rgba(255,200,50,.9);}
.vDayCell.selected{background:var(--vision-accent-soft);border-color:var(--vision-accent);}
.vDayCell.past{opacity:.5;}
.vDayCell.hasTasks::after{
  content:'';position:absolute;bottom:4px;left:50%;transform:translateX(-50%);
  width:5px;height:5px;border-radius:50%;background:var(--vision-accent);
}
.vDayCell.hasTasks.today::after{background:rgba(255,200,50,.6);}
.vDayName{font-size:9px;font-weight:700;color:rgba(255,255,255,.3);text-transform:uppercase;letter-spacing:.5px;margin-bottom:2px;}
.vDayNum{font-size:15px;font-weight:800;color:rgba(255,255,255,.6);font-family:'Syne',sans-serif;}
.vDayTaskCount{font-size:8px;color:var(--vision-accent);font-weight:700;margin-top:1px;}

/* ── Day Detail Panel ── */
.vDayDetail{
  padding:14px;border-radius:14px;margin-bottom:14px;
  background:var(--vision-surface-tint);border:1px solid var(--vision-hero-border);
  box-shadow:0 0 18px var(--vision-surface-glow);
  animation:slideDown .25s ease;
}
@keyframes slideDown{from{opacity:0;transform:translateY(-8px);}to{opacity:1;transform:translateY(0);}}
.vDayDetailHead{display:flex;align-items:center;justify-content:space-between;margin-bottom:10px;}
.vDayDetailTitle{font-size:13px;font-weight:700;color:var(--vision-accent);}
.vDayDetailDate{font-size:11px;color:rgba(255,255,255,.3);}
.vDayTaskList{display:flex;flex-direction:column;gap:4px;}
.vDayTask{
  display:flex;align-items:center;gap:8px;padding:8px 10px;border-radius:8px;
  background:rgba(255,255,255,.02);border:1px solid rgba(255,255,255,.06);
  font-size:12px;color:rgba(255,255,255,.65);transition:all .15s ease;
}
.vDayTask:hover{background:rgba(255,255,255,.04);border-color:rgba(255,255,255,.1);}
.vDayTask .vdtIcon{font-size:10px;color:var(--vision-accent);}
.vDayTask .vdtText{flex:1;}
.vDayTask .vdtDel{
  width:20px;height:20px;border-radius:6px;border:none;
  background:rgba(239,68,68,.08);color:rgba(239,68,68,.4);font-size:10px;
  cursor:pointer;display:flex;align-items:center;justify-content:center;
  opacity:0;transition:all .15s ease;
}
.vDayTask:hover .vdtDel{opacity:1;}
.vDayTask .vdtDel:hover{background:rgba(239,68,68,.2);color:rgba(239,68,68,.8);}
.vDayAddRow{display:flex;gap:6px;margin-top:8px;}
.vDayAddInput{
  flex:1;padding:8px 10px;border-radius:8px;border:1px solid rgba(255,255,255,.08);
  background:rgba(255,255,255,.03);color:#fff;font-size:12px;
  font-family:'Space Grotesk',sans-serif;outline:none;transition:border-color .2s ease;
}
.vDayAddInput:focus{border-color:var(--vision-accent-soft-strong);}
.vDayAddInput::placeholder{color:rgba(255,255,255,.2);}
.vDayAddBtn{
  padding:8px 14px;border-radius:8px;border:none;
  background:var(--vision-accent-soft);color:var(--vision-accent);font-size:12px;
  font-weight:700;cursor:pointer;transition:all .15s ease;font-family:'Space Grotesk',sans-serif;
}
.vDayAddBtn:hover{background:var(--vision-accent-soft-strong);color:#fff;}
.vDayEmpty{
  text-align:center;padding:14px;font-size:11px;color:rgba(255,255,255,.25);
  font-style:italic;
}
.vDayPastLock{
  margin-top:8px;padding:10px 12px;border-radius:10px;
  border:1px dashed rgba(239,68,68,.18);background:rgba(239,68,68,.04);
  font-size:11px;color:rgba(252,165,165,.78);text-align:center;
}

/* ── Year Overview Grid (mois scale) ── */
.vYearGrid{
  display:grid;grid-template-columns:repeat(4,1fr);gap:6px;margin-bottom:14px;
  padding:12px;border-radius:14px;background:rgba(255,255,255,.02);
  border:1px solid var(--vision-surface-border);
  box-shadow:0 0 18px var(--vision-surface-glow);
}
.vYearGridCell{
  padding:10px 4px;border-radius:10px;text-align:center;cursor:pointer;
  font-family:'Space Grotesk',sans-serif;font-size:11px;font-weight:700;
  color:rgba(255,255,255,.25);letter-spacing:.3px;
  border:1px solid transparent;position:relative;transition:all .15s ease;
}
.vYearGridCell:active{transform:scale(.95);}
.vYearGridCell.past{opacity:.35;}
.vYearGridCell.current{
  background:var(--vision-accent-soft);color:var(--vision-accent);
  border-color:var(--vision-hero-border);
}
.vYearGridCell.hasGoals::after{
  content:'';position:absolute;bottom:4px;left:50%;transform:translateX(-50%);
  width:4px;height:4px;border-radius:50%;background:var(--vision-accent);
}

/* ── Month Week Strip (mois scale) ── */
.vMonthWeekStrip{
  display:flex;gap:6px;margin-bottom:14px;padding:6px;
  border-radius:14px;background:rgba(255,255,255,.02);
  border:1px solid var(--vision-surface-border);
  box-shadow:0 0 18px var(--vision-surface-glow);overflow-x:auto;
}
.vMonthWeekCell{
  flex:1;min-width:0;padding:8px 6px;border-radius:10px;text-align:center;cursor:pointer;
  border:1px solid transparent;transition:all .15s ease;
}
.vMonthWeekCell .vmwLabel{font-size:12px;font-weight:800;color:rgba(255,255,255,.5);margin-bottom:2px;}
.vMonthWeekCell .vmwRange{font-size:9px;color:rgba(255,255,255,.2);letter-spacing:.2px;}
.vMonthWeekCell .vmwCount{
  display:inline-block;margin-top:4px;font-size:8px;font-weight:700;
  padding:1px 5px;border-radius:6px;background:var(--vision-accent-soft);color:var(--vision-accent);
}
.vMonthWeekCell.past{opacity:.4;}
.vMonthWeekCell.current{
  background:var(--vision-accent-soft);border-color:var(--vision-hero-border);
}
.vMonthWeekCell.current .vmwLabel{color:var(--vision-accent);}
.vMonthWeekCell:active{transform:scale(.96);}

/* ── Required count in modal (kept) ── */
.vModalReqLabel{font-size:.82rem;color:rgba(255,255,255,.6);margin-bottom:4px;}
.vModalReqWrap{display:flex;align-items:center;gap:8px;}
.vModalReqInput{width:70px;padding:6px 8px;background:rgba(255,255,255,.06);border:1px solid rgba(255,255,255,.1);border-radius:8px;color:#fff;font-size:.9rem;}
.vModalReqUnit{font-size:.78rem;color:rgba(255,255,255,.4);}
.vModalReqHint{font-size:.72rem;color:rgba(255,255,255,.3);margin-top:4px;}

/* ── Parent linking in modal (kept) ── */
.vModalParentList{display:flex;flex-direction:column;gap:6px;margin-top:4px;}
.vModalParentLabel{font-size:12px;color:rgba(255,255,255,.5);font-weight:600;}
.vModalParentOpt{
  display:flex;align-items:center;gap:8px;padding:8px 12px;border-radius:10px;
  border:1px solid rgba(255,255,255,.08);background:rgba(255,255,255,.02);
  cursor:pointer;transition:all .15s ease;font-size:12px;color:rgba(255,255,255,.6);
}
.vModalParentOpt:hover{background:rgba(255,255,255,.05);border-color:rgba(255,255,255,.15);}
.vModalParentOpt.selected{border-color:rgba(167,139,250,.4);background:rgba(167,139,250,.08);color:rgba(180,160,255,.9);}
.vModalParentOpt .vmpRadio{
  width:16px;height:16px;border-radius:50%;border:2px solid rgba(255,255,255,.2);
  flex-shrink:0;display:flex;align-items:center;justify-content:center;transition:all .15s ease;
}
.vModalParentOpt.selected .vmpRadio{border-color:rgba(167,139,250,.7);}
.vModalParentOpt.selected .vmpRadio::after{content:'';width:8px;height:8px;border-radius:50%;background:rgba(167,139,250,.8);}

/* ── Objectif mensuel historique (kept) ── */
.dayVisionMonth{
  margin-top:10px;padding:10px 12px;border-radius:10px;min-width:0;max-width:100%;box-sizing:border-box;
  border:1px solid rgba(34,197,94,.15);background:rgba(34,197,94,.03);
  font-size:11px;color:rgba(34,197,94,.6);
}
.dayVisionMonth .dayVMLabel{font-size:9px;font-weight:700;text-transform:uppercase;letter-spacing:.5px;color:rgba(34,197,94,.4);margin-bottom:4px;}
/* Ligne = 2 zones (fix troncature) : NOM qui wrap sur toute la largeur, ÉTAT dessous, atténué */
/* ⚠ LE POURCENTAGE RESTE À DROITE, TOUJOURS.
   En `wrap`, un titre long poussait l'état à la ligne suivante, donc EN BAS À
   GAUCHE : la colonne des valeurs disparaissait dès qu'un objectif était
   nommé un peu longuement. C'est le titre qui cède (il passe sur plusieurs
   lignes, `min-width:0` + `overflow-wrap`), jamais la rangée qui casse.
   Même règle que les chips du bilan : on fait rétrécir le voisin FLEXIBLE. */
.dayVMRow{display:flex;flex-wrap:nowrap;align-items:baseline;gap:4px 6px;margin-top:3px;min-width:0;}
.dayVMRow .dayVMMark{flex:none;}
.dayVMRow .dayVMName{flex:1 1 auto;min-width:0;color:rgba(255,255,255,.6);font-weight:600;overflow-wrap:anywhere;white-space:normal;}
/* État INLINE en fin de ligne (retour user : dessous = place perdue) ; seul le NOM wrap */
.dayVMRow .dayVMState{flex:none;opacity:.6;font-size:10px;}
.dayVMRow.isLim .dayVMState{flex:none;opacity:.85;font-weight:600;}

/* ── Animation — identique aux .sb des autres onglets (slideIn + stagger) ── */
@keyframes slideDown{from{opacity:0;transform:translateY(-8px);}to{opacity:1;transform:translateY(0);}}
.vtreeColumn>.vtreeNode{opacity:0;transform:translateX(40px) scale(.96);animation:slideInRight .35s var(--spring) forwards;}
.vtreeColumn>.vtreeNode:nth-child(2){animation-delay:50ms;}
.vtreeColumn>.vtreeNode:nth-child(3){animation-delay:100ms;}
.vtreeColumn>.vtreeNode:nth-child(4){animation-delay:150ms;}
.vtreeColumn>.vtreeNode:nth-child(5){animation-delay:200ms;}
.vtreeColumn>.vtreeChildren{opacity:0;transform:translateX(40px) scale(.96);animation:slideInRight .35s var(--spring) forwards;animation-delay:80ms;}

/* ── Vision responsive ── */
@media(max-width:680px){
  #screenVision{padding:0 0 16px;}
  .vtreeBar{margin:8px 10px 6px;padding:3px;gap:3px;border-radius:12px;}
  .vtreeBarBtn{padding:7px 4px;border-radius:9px;}
  .vtreeBarBtn .vtbIcon{font-size:14px;}
  .vtreeBarBtn .vtbLabel{font-size:9px;}
  .vtreeBarBtn .vtbCount{font-size:8px;padding:1px 4px;min-width:14px;}
  .vtreeNav{padding:4px 10px 8px;gap:6px;}
  .vtreeNavArrow{width:28px;height:28px;border-radius:8px;font-size:11px;}
  .vtreeNavCenter{min-width:110px;font-size:12px;}
  .vtreeCanvas{padding:0 10px 14px;}
  .vtreeNode{padding:10px 12px;border-radius:12px;}
  .vtreeChildren{margin-left:12px;padding-left:12px;}
  .vtreeSheet{padding:10px 16px 20px;}
  .vtreeSheetTitle{font-size:16px;}
  .vtreeSheetBtn{padding:9px 10px;font-size:11px;}
  .vtreeGuideCard{padding:20px;}
  .vtreeGuideQ{font-size:15px;}
  .vModalCard{gap:14px;}
  .vModalCaptionInput{min-height:70px;font-size:12px;}
}
@media(max-width:380px){
  .vtreeBar{margin:6px 8px 4px;}
  .vtreeCanvas{padding:0 8px 12px;}
  .vtreeGuideCard{padding:16px;}
}

/* ── Modal Vision Input ── */
.vModalOv{position:fixed;inset:0;z-index:9996;display:flex;align-items:flex-start;justify-content:center;padding:18px 12px;background:var(--overlay-soft);backdrop-filter:blur(12px);opacity:0;pointer-events:none;transition:opacity .18s ease;overflow-y:auto;-webkit-overflow-scrolling:touch;overscroll-behavior:contain;}
.vModalOv.show{opacity:1;pointer-events:auto;}
.vModalCard{
  width:min(440px,calc(100vw - 32px));border-radius:20px;border:1px solid var(--overlay-card-border);
  background:var(--overlay-card-bg);box-shadow:var(--overlay-card-shadow);padding:24px;display:flex;flex-direction:column;gap:16px;
  max-height:min(88svh,760px);overflow-y:auto;-webkit-overflow-scrolling:touch;margin:auto 0;
}
.vModalTitle{font-family:'Syne',sans-serif;font-size:18px;font-weight:800;color:#fff;}
.vModalInput{
  width:100%;padding:12px 14px;border-radius:12px;border:1px solid rgba(255,255,255,.12);
  background:rgba(255,255,255,.04);color:#fff;font-size:14px;font-family:'Space Grotesk',sans-serif;
  outline:none;transition:border-color .2s ease;
}
.vModalInput:focus{border-color:rgba(255,200,50,.4);}
.vModalInput::placeholder{color:rgba(255,255,255,.25);}
.vModalAdvToggle{
  padding:8px 0;color:rgba(255,255,255,.4);font-size:12px;font-weight:600;
  cursor:pointer;transition:color .15s ease;user-select:none;
}
.vModalAdvToggle:hover{color:rgba(255,255,255,.6);}
.vModalAdvToggle.open{color:rgba(255,255,255,.6);}
.vModalAdvToggle.open::after{content:'';display:inline;}
.vModalAdvanced{max-height:0;overflow:hidden;transition:max-height .25s ease;display:flex;flex-direction:column;gap:14px;}
.vModalAdvanced.open{max-height:400px;}
.vModalEmojiRow{display:flex;align-items:center;gap:10px;}
.vModalEmojiRow label{font-size:12px;color:rgba(255,255,255,.5);font-weight:600;}
.vModalEmojiInput{
  width:50px;padding:8px;border-radius:10px;border:1px solid rgba(255,255,255,.1);
  background:rgba(255,255,255,.04);color:#fff;font-size:22px;text-align:center;
  font-family:'Space Grotesk',sans-serif;outline:none;
}
.vModalCaptionRow{display:grid;gap:8px;}
.vModalCaptionLabel{font-size:12px;color:rgba(255,255,255,.5);font-weight:600;}
.vModalCaptionInput{
  width:100%;min-height:78px;padding:12px 14px;border-radius:12px;border:1px solid rgba(255,255,255,.12);
  background:rgba(255,255,255,.04);color:#fff;font-size:13px;line-height:1.5;font-family:'Space Grotesk',sans-serif;
  outline:none;transition:border-color .2s ease;resize:vertical;
}
.vModalCaptionInput:focus{border-color:rgba(255,200,50,.35);}
.vModalCaptionInput::placeholder{color:rgba(255,255,255,.24);}
.vModalCaptionHint{font-size:11px;line-height:1.45;color:rgba(255,255,255,.32);}
.vMeasureRow{display:grid;gap:8px;}
.vMeasureLabel{font-size:12px;color:rgba(255,255,255,.5);font-weight:600;}
.vMeasureToggle{display:flex;gap:8px;}
.vMeasureBtn{
  flex:1;padding:11px 12px;border-radius:12px;border:1px solid rgba(255,255,255,.1);
  background:rgba(255,255,255,.04);color:rgba(255,255,255,.72);cursor:pointer;
  font-weight:700;font-size:11px;letter-spacing:.4px;font-family:'Space Grotesk',sans-serif;transition:all .15s ease;
}
.vMeasureBtn:hover{background:rgba(255,255,255,.08);border-color:rgba(255,255,255,.18);}
.vMeasureBtn.active{border-color:rgba(96,165,250,.28);background:rgba(96,165,250,.12);color:rgba(191,219,254,.96);}
.vMeasureHint{font-size:11px;line-height:1.45;color:rgba(255,255,255,.32);}
.vModalTargetRow,.vModalUnitRow{display:grid;gap:8px;}
.vModalTargetLabel,.vModalUnitLabel{font-size:12px;color:rgba(255,255,255,.5);font-weight:600;}
.vModalTargetInput,.vModalUnitInput{
  width:100%;padding:12px 14px;border-radius:12px;border:1px solid rgba(255,255,255,.12);
  background:rgba(255,255,255,.04);color:#fff;font-size:13px;font-family:'Space Grotesk',sans-serif;
  outline:none;transition:border-color .2s ease;
}
.vModalTargetInput:focus,.vModalUnitInput:focus{border-color:rgba(255,200,50,.35);}
.vModalTargetHint,.vModalUnitHint{font-size:11px;line-height:1.45;color:rgba(255,255,255,.32);}
.vModalBtns{display:flex;gap:10px;}
.vModalBtnOk{
  flex:1;padding:12px;border-radius:12px;border:1px solid rgba(255,200,50,.3);
  background:rgba(255,200,50,.1);color:rgba(255,220,100,.95);cursor:pointer;
  font-weight:700;font-size:12px;text-transform:uppercase;letter-spacing:.7px;
  transition:all .15s ease;font-family:'Space Grotesk',sans-serif;
}
.vModalBtnOk:hover{background:rgba(255,200,50,.18);}
.vModalBtnCancel{
  flex:1;padding:12px;border-radius:12px;border:1px solid rgba(255,255,255,.12);
  background:rgba(255,255,255,.05);color:rgba(255,255,255,.8);cursor:pointer;
  font-weight:700;font-size:12px;text-transform:uppercase;letter-spacing:.7px;
  transition:all .15s ease;font-family:'Space Grotesk',sans-serif;
}
.vModalBtnCancel:hover{background:rgba(255,255,255,.09);}

/* ── Modal quantifiable quotidienne (style Vision / Sommet) ── */
.qQuantModalOv{position:fixed;inset:0;z-index:9996;display:flex;align-items:center;justify-content:center;padding:16px;background:var(--overlay-strong);backdrop-filter:blur(14px);opacity:0;pointer-events:none;transition:opacity .2s ease;overflow-y:auto;-webkit-overflow-scrolling:touch;overscroll-behavior:contain;}
.qQuantModalOv.show{opacity:1;pointer-events:auto;}
.qQuantModalCard{
  width:min(420px,calc(100vw - 32px));border-radius:20px;border:1px solid var(--overlay-card-border);
  background:var(--overlay-card-bg);box-shadow:var(--overlay-card-shadow);padding:24px;display:grid;gap:16px;
  max-height:min(88svh,700px);overflow-y:auto;-webkit-overflow-scrolling:touch;
}
.qQuantModalHeader{font-size:10px;font-weight:800;letter-spacing:2px;text-transform:uppercase;color:rgba(255,200,50,.6);margin-bottom:0;}
.qQuantModalTitle{font-family:'Syne',sans-serif;font-size:16px;font-weight:800;color:#fff;line-height:1.3;}
.qQuantModalSub{font-size:11px;line-height:1.5;color:rgba(255,255,255,.3);}
.qQuantModalRow{display:grid;gap:8px;}
.qQuantModalLabel{font-size:12px;color:rgba(255,255,255,.55);font-weight:600;}
.qQuantModalInput{
  width:100%;padding:12px 14px;border-radius:12px;border:1px solid rgba(255,255,255,.12);
  background:rgba(255,255,255,.04);color:#fff;font-size:14px;font-family:'Space Grotesk',sans-serif;
  outline:none;transition:border-color .2s ease;
}
.qQuantModalInput:focus{border-color:rgba(255,200,50,.4);}
.qQuantModalInput::placeholder{color:rgba(255,255,255,.25);}
.qQuantModalHint{font-size:11px;line-height:1.5;color:rgba(255,255,255,.3);margin-top:4px;}
.qQuantModalBtns{display:flex;gap:10px;margin-top:4px;}
.qQuantModalBtn{
  flex:1;padding:12px;border-radius:12px;border:1px solid rgba(255,255,255,.1);background:rgba(255,255,255,.04);
  color:rgba(255,255,255,.7);cursor:pointer;font-weight:700;font-size:12px;
  transition:all .15s ease;font-family:'Space Grotesk',sans-serif;
}
.qQuantModalBtn:hover{background:rgba(255,255,255,.09);}
.qQuantModalBtnPrimary{border-color:rgba(255,200,50,.3);background:rgba(255,200,50,.1);color:rgba(255,220,100,.95);}
.qQuantModalBtnPrimary:hover{background:rgba(255,200,50,.18);}
.qQuantModalBtnDanger{border-color:rgba(239,68,68,.2);background:rgba(239,68,68,.06);color:rgba(252,165,165,.85);}
.qQuantModalBtnDanger:hover{background:rgba(239,68,68,.14);}

/* Lien quotidien */
.qLinkGoal{
  width:24px;height:24px;border-radius:6px;border:1px solid rgba(255,255,255,.06);
  background:rgba(255,255,255,.03);color:rgba(255,255,255,.3);font-size:11px;
  cursor:pointer;display:flex;align-items:center;justify-content:center;
  transition:all .15s ease;flex-shrink:0;
}
.qLinkGoal:hover{background:rgba(255,255,255,.06);color:rgba(255,255,255,.5);}
.qLinkGoal.linked{border-color:rgba(167,139,250,.3);background:rgba(167,139,250,.08);color:rgba(167,139,250,.8);}

/* Auto-link suggestion pill */
.qAutoLinkSug{
  display:flex;align-items:center;gap:8px;padding:8px 12px;margin:4px 0 2px;
  border-radius:10px;border:1px solid rgba(167,139,250,.25);
  background:rgba(167,139,250,.08);
  font-size:11px;color:rgba(167,139,250,.9);
  animation:autoLinkIn .25s ease;cursor:default;
}
.qAutoLinkSug .alText{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.qAutoLinkSug .alBtn{
  padding:3px 8px;border-radius:6px;border:none;cursor:pointer;
  font-size:11px;font-weight:700;font-family:'Space Grotesk',sans-serif;
}
.qAutoLinkSug .alBtnYes{background:rgba(167,139,250,.2);color:rgba(200,180,255,.95);}
.qAutoLinkSug .alBtnYes:hover{background:rgba(167,139,250,.3);}
.qAutoLinkSug .alBtnNo{background:rgba(255,255,255,.06);color:rgba(255,255,255,.5);}
.qAutoLinkSug .alBtnNo:hover{background:rgba(255,255,255,.1);}
@keyframes autoLinkIn{from{opacity:0;transform:translateY(6px);}to{opacity:1;transform:translateY(0);}}

/* Bouton prochain pas vision → aujourd'hui */
.vGoalBtnToday{
  padding:4px 8px;border-radius:6px;border:1px solid rgba(167,139,250,.25);
  background:rgba(167,139,250,.1);color:rgba(167,139,250,.85);
  font-size:11px;font-weight:700;cursor:pointer;
  transition:all .15s ease;font-family:'Space Grotesk',sans-serif;
}
.vGoalBtnToday:hover{background:rgba(167,139,250,.18);color:rgba(200,180,255,.95);}

/* ═══════════════════════════════════════════════
   RÉCAP HEBDO
═══════════════════════════════════════════════ */
.weekRecapOv{
  position:fixed;inset:0;z-index:99990;display:flex;align-items:center;justify-content:center;
  background:var(--overlay-strong);backdrop-filter:blur(12px);
  opacity:0;pointer-events:none;transition:opacity .4s ease;
}
.weekRecapOv.show{opacity:1;pointer-events:auto;}
.weekRecapCard{
  width:min(440px,calc(100vw - 32px));max-height:85vh;overflow-y:auto;
  border-radius:22px;border:1px solid var(--overlay-card-border);
  background:var(--overlay-card-bg);box-shadow:0 28px 80px rgba(0,0,0,.46);
  padding:28px 24px;position:relative;
  transform:translateY(12px) scale(.97);transition:transform .4s var(--snap);
}
.weekRecapOv.show .weekRecapCard{transform:translateY(0) scale(1);}
.weekRecapCard::before{
  content:'';position:absolute;inset:-100px;
  background:radial-gradient(circle at 30% 15%,rgba(96,165,250,.06) 0%,transparent 50%);
  pointer-events:none;border-radius:22px;
}
.wrTitle{
  font-family:'Syne',sans-serif;font-size:22px;font-weight:800;text-transform:uppercase;
  letter-spacing:1px;color:#fff;text-align:center;margin-bottom:4px;position:relative;z-index:1;
}
.wrSub{font-size:12px;color:rgba(255,255,255,.4);text-align:center;margin-bottom:20px;position:relative;z-index:1;}
.wrGrid{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-bottom:18px;position:relative;z-index:1;}
.wrStat{
  border-radius:14px;padding:14px;border:1px solid rgba(255,255,255,.08);
  background:rgba(255,255,255,.03);text-align:center;
}
.wrStatVal{font-size:26px;font-weight:700;color:rgba(255,255,255,.95);line-height:1;}
.wrStatLabel{font-size:10px;color:rgba(255,255,255,.4);margin-top:6px;text-transform:uppercase;letter-spacing:1px;font-weight:600;}
.wrHighlight{
  grid-column:1/-1;border-color:rgba(255,200,50,.2);background:rgba(255,200,50,.04);
}
.wrHighlight .wrStatVal{color:rgba(255,200,50,.95);}
.wrCats{margin-bottom:18px;position:relative;z-index:1;}
.wrCatTitle{font-size:11px;font-weight:700;color:rgba(255,255,255,.4);text-transform:uppercase;letter-spacing:1px;margin-bottom:8px;}
.wrCatRow{display:flex;justify-content:space-between;align-items:center;padding:6px 0;border-bottom:1px solid rgba(255,255,255,.05);}
.wrCatName{font-size:13px;color:rgba(255,255,255,.7);}
.wrCatCount{font-size:13px;font-weight:700;color:rgba(255,255,255,.9);}
.wrBtn{
  display:block;width:100%;padding:14px;border-radius:14px;border:none;cursor:pointer;
  background:rgba(255,255,255,.08);color:rgba(255,255,255,.9);font-weight:700;font-size:13px;
  font-family:'Space Grotesk',sans-serif;letter-spacing:.5px;transition:all .15s ease;
  position:relative;z-index:1;
}
.wrBtn:hover{background:rgba(255,255,255,.14);}

/* ── Creator: clickable achievements ── */
.achievItem.creatorClickable{cursor:pointer;transition:transform .1s ease,box-shadow .15s ease;}
.achievItem.creatorClickable:hover{transform:scale(1.02);box-shadow:0 0 12px rgba(168,85,247,.3);}
.achievItem.creatorClickable:active{transform:scale(.97);}
.achievItem.creatorClickable:not(.unlocked){border:1px dashed rgba(168,85,247,.3);}

/* ── Creator: calendar selection mode ── */
.calDay.calSelected{box-shadow:0 0 0 2px rgba(239,68,68,.7);background:rgba(239,68,68,.15)!important;}
.calDay.calSelectable{cursor:pointer;}
.calDay.calSelectable:hover{box-shadow:0 0 0 2px rgba(239,68,68,.4);}

/* ── Creator FAB (flottant, visible partout en mode créateur) ── */
.creatorFAB{
  position:fixed;bottom:90px;right:16px;z-index:9990;
  display:flex;flex-direction:column;gap:8px;
}
@media(max-width:900px){
  .creatorFAB{bottom:160px;}
}
.creatorFAB.hidden{display:none;}
.creatorFAB button{
  width:44px;height:44px;border-radius:50%;border:2px solid rgba(168,85,247,.4);
  background:rgba(20,10,30,.85);backdrop-filter:blur(10px);
  color:rgba(196,148,252,.95);font-size:18px;cursor:pointer;
  box-shadow:0 4px 16px rgba(0,0,0,.4);
  transition:transform .15s ease,background .15s ease;
}
.creatorFAB button:active{transform:scale(.9);background:rgba(168,85,247,.2);}

/* ── Battery: respect reduced-motion preference ── */
@media(prefers-reduced-motion:reduce){
  *,*::before,*::after{animation-duration:.01ms !important;animation-iteration-count:1 !important;transition-duration:.01ms !important;}
}
/* ── Battery: pause animations when tab hidden ── */
body.tabHidden *{animation-play-state:paused !important;}

/* ═══════════════════════════════════════════════════════════
   MENTOR — galerie, questionnaire, espace mentor
═══════════════════════════════════════════════════════════ */
.mgHead{margin-bottom:16px;}
.mgKicker{font-size:10px;font-weight:700;letter-spacing:2.2px;text-transform:uppercase;color:rgba(255,255,255,.35);margin-bottom:6px;font-family:'Space Grotesk',sans-serif;}
.mgTitle{font-family:'Syne',sans-serif;font-size:24px;font-weight:800;letter-spacing:-.5px;line-height:1.1;color:#fff;}
.mgSub{font-size:12px;color:rgba(255,255,255,.45);margin-top:7px;max-width:520px;line-height:1.55;margin-bottom:10px;}
.mgGrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(225px,1fr));gap:12px;}
.mgCard{position:relative;overflow:hidden;border-radius:20px;border:1px solid rgba(255,255,255,.09);background:rgba(255,255,255,.03);padding:20px 16px 16px;cursor:pointer;display:flex;flex-direction:column;gap:9px;transition:transform .22s cubic-bezier(.34,1.56,.64,1),border-color .2s ease,box-shadow .25s ease;animation:mgIn .55s cubic-bezier(.22,1,.36,1) both;-webkit-tap-highlight-color:transparent;}
@keyframes mgIn{0%{opacity:0;transform:translateY(18px) scale(.97)}100%{opacity:1;transform:none}}
.mgGlow{position:absolute;top:-45%;left:-15%;right:-15%;height:75%;background:radial-gradient(closest-side,var(--mc1),transparent 72%);opacity:.15;filter:blur(28px);pointer-events:none;transition:opacity .25s ease;}
.mgCard:hover{transform:translateY(-4px);border-color:var(--mc1);box-shadow:0 14px 44px -20px var(--mc1);}
.mgCard:hover .mgGlow{opacity:.3;}
.mgCard:active{transform:scale(.98);}
.mgAvatar{width:60px;height:60px;border-radius:50%;display:flex;align-items:center;justify-content:center;box-shadow:0 8px 26px -12px var(--mc2);position:relative;}
.mgName{font-family:'Syne',sans-serif;font-size:19px;font-weight:800;letter-spacing:-.3px;color:#fff;position:relative;}
.mgArch{font-size:9.5px;font-weight:700;letter-spacing:1.6px;text-transform:uppercase;background:linear-gradient(90deg,var(--mc1),var(--mc2));-webkit-background-clip:text;background-clip:text;color:transparent;position:relative;font-family:'Space Grotesk',sans-serif;}
.mgBio{font-size:12px;color:rgba(255,255,255,.55);line-height:1.5;position:relative;}
.mgQuote{font-size:11.5px;font-style:italic;color:rgba(255,255,255,.42);line-height:1.5;border-left:2px solid var(--mc1);padding-left:9px;position:relative;}
.mgCta{margin-top:auto;padding:11px;border-radius:12px;border:1px solid var(--mc1);background:transparent;color:#fff;font-weight:700;font-size:10.5px;text-transform:uppercase;letter-spacing:.8px;cursor:pointer;font-family:'Space Grotesk',sans-serif;transition:background .18s ease,box-shadow .18s ease,opacity .18s ease;position:relative;}
.mgCard:hover .mgCta{background:linear-gradient(135deg,var(--mc1),var(--mc2));box-shadow:0 6px 20px -8px var(--mc2);}
.mgCard.mgCur{border-color:var(--mc1);}
.mgCard.mgCur .mgCta{background:linear-gradient(135deg,var(--mc1),var(--mc2));opacity:.55;cursor:default;}

/* ── Espace mentor (état B) ── */
.mtGlow{position:absolute;top:-50%;left:-10%;right:-10%;height:80%;background:radial-gradient(closest-side,var(--mc1),transparent 72%);opacity:.13;filter:blur(30px);pointer-events:none;}
.mtHeader{position:relative;overflow:hidden;display:flex;align-items:center;gap:14px;padding:18px;border-radius:20px;border:1px solid rgba(255,255,255,.09);background:rgba(255,255,255,.03);margin-bottom:12px;}
.mtAvatar{width:66px;height:66px;border-radius:50%;display:flex;align-items:center;justify-content:center;box-shadow:0 10px 30px -12px var(--mc2);flex-shrink:0;position:relative;}
.mtId{position:relative;min-width:0;}
.mtName{font-family:'Syne',sans-serif;font-size:21px;font-weight:800;letter-spacing:-.4px;color:#fff;}
.mtArch{font-size:9.5px;font-weight:700;letter-spacing:1.6px;text-transform:uppercase;background:linear-gradient(90deg,var(--mc1),var(--mc2));-webkit-background-clip:text;background-clip:text;color:transparent;margin-top:2px;font-family:'Space Grotesk',sans-serif;}
.mtSince{font-size:10.5px;color:rgba(255,255,255,.38);margin-top:5px;}
.mtQuoteCard{position:relative;overflow:hidden;border-radius:20px;border:1px solid rgba(255,255,255,.1);background:rgba(255,255,255,.03);padding:22px 20px;margin-bottom:12px;}
.mtQuoteLabel{font-size:9.5px;font-weight:700;letter-spacing:2px;text-transform:uppercase;color:rgba(255,255,255,.4);margin-bottom:10px;font-family:'Space Grotesk',sans-serif;position:relative;}
.mtQuoteText{font-family:'Syne',sans-serif;font-size:17px;font-weight:700;font-style:italic;line-height:1.5;letter-spacing:-.2px;color:#fff;position:relative;}
.mtQuoteSign{margin-top:12px;text-align:right;font-size:11px;font-weight:700;background:linear-gradient(90deg,var(--mc1),var(--mc2));-webkit-background-clip:text;background-clip:text;color:transparent;position:relative;font-family:'Space Grotesk',sans-serif;}
.mtSoonCard{border-radius:16px;border:1px dashed rgba(255,255,255,.14);background:rgba(255,255,255,.02);padding:14px 16px;margin-bottom:12px;}
.mtSoonTitle{font-size:9.5px;font-weight:700;letter-spacing:2px;text-transform:uppercase;color:rgba(255,255,255,.35);margin-bottom:5px;font-family:'Space Grotesk',sans-serif;}
.mtSoonText{font-size:11.5px;color:rgba(255,255,255,.45);line-height:1.5;}
.mtActions{display:flex;gap:8px;flex-wrap:wrap;}
.mtActions .btnTiny{flex:1;min-width:150px;padding:12px 14px;text-align:center;}

/* ── Inbox mentor ── */
.mtInboxCard{border-radius:18px;border:1px solid rgba(255,255,255,.1);background:rgba(255,255,255,.03);padding:14px;margin-bottom:12px;}
.mtInboxCard.hidden{display:none;}
.mtInboxHead{display:flex;align-items:center;justify-content:space-between;margin-bottom:10px;}
.mtInboxCount{font-size:9.5px;font-weight:700;letter-spacing:1.2px;text-transform:uppercase;font-family:'Space Grotesk',sans-serif;background:linear-gradient(90deg,var(--mc1),var(--mc2));-webkit-background-clip:text;background-clip:text;color:transparent;}
.mtInboxList{display:flex;flex-direction:column;gap:8px;max-height:340px;overflow-y:auto;overscroll-behavior:contain;}
.miItem{border-radius:14px;border:1px solid rgba(255,255,255,.08);background:rgba(255,255,255,.03);padding:11px 12px;cursor:pointer;transition:border-color .15s ease,background .15s ease;}
.miItem:hover{border-color:rgba(255,255,255,.18);}
.miUnread{border-color:var(--mc1);background:rgba(255,255,255,.05);}
.miSommet{border-style:dashed;}
.miTop{display:flex;align-items:center;gap:9px;}
.miIcon{width:30px;height:30px;border-radius:10px;background:rgba(255,255,255,.06);display:flex;align-items:center;justify-content:center;font-size:15px;flex-shrink:0;}
.miMeta{flex:1;min-width:0;}
.miWho{font-family:'Syne',sans-serif;font-weight:800;font-size:12.5px;color:#fff;}
.miLabel{font-size:9.5px;color:rgba(255,255,255,.4);letter-spacing:.8px;text-transform:uppercase;font-weight:700;font-family:'Space Grotesk',sans-serif;margin-top:1px;}
.miDot{width:8px;height:8px;border-radius:50%;background:linear-gradient(135deg,var(--mc1),var(--mc2));flex-shrink:0;box-shadow:0 0 8px var(--mc2);}
.miChev{color:rgba(255,255,255,.35);font-size:11px;flex-shrink:0;}
.miBody{max-height:0;overflow:hidden;font-size:12.5px;line-height:1.55;color:rgba(255,255,255,.85);font-family:'Space Grotesk',sans-serif;white-space:pre-wrap;word-break:break-word;transition:max-height .3s cubic-bezier(.22,1,.36,1),margin-top .3s ease;}
.miOpen .miBody{max-height:600px;margin-top:10px;}

.giP{display:block;width:100%;height:100%;}
.giPeak{fill:#e2e8f0;width:16px;height:16px;}
/* Icônes achievements : or si débloqué, éteint sinon */
.achievEmoji .gi{width:24px;height:24px;fill:url(#giGold);}
.achievItem:not(.unlocked) .achievEmoji .gi{fill:rgba(255,255,255,.28);}
.achEmoji .gi{width:46px;height:46px;fill:url(#giGold);filter:drop-shadow(0 0 14px rgba(251,191,36,.5));}
/* Icônes actions row + divers */
.giGold{fill:url(#giGold);}
.qBtn .gi{width:14px;height:14px;display:block;margin:0 auto;}
.qBtn.active .gi{fill:url(#giGrad);}
.qLinkGoal .gi{width:13px;height:13px;}
.qSlotBadge .gi{width:12px;height:12px;fill:url(#giGrad);}
.qXpTag .gi{width:10px;height:10px;vertical-align:-1px;}
.sIcon .gi{width:14px;height:14px;fill:url(#giGrad);vertical-align:-2px;}
.bqIcon .gi{width:20px;height:20px;fill:url(#giGrad);}
.bqIcon .giGold{fill:url(#giGold);}
.advWarnIcon .gi{width:34px;height:34px;fill:url(#giGrad);}
.advLock .gi{width:14px;height:14px;vertical-align:-2px;fill:url(#giGrad);}
.combatTitle .gi{width:15px;height:15px;vertical-align:-2px;fill:url(#giGrad);}
.unlockEmoji .gi{width:40px;height:40px;fill:currentColor;filter:drop-shadow(0 0 12px currentColor);}
.smtEmoji .gi{width:38px;height:38px;}
.unlockEmoji .gi{width:40px;height:40px;}
.instantIcon .giMoonBig{width:44px;height:44px;fill:#a5b4fc;filter:drop-shadow(0 0 14px rgba(165,180,252,.5));}
#instantBadge .gi{width:11px;height:11px;fill:#a5b4fc;vertical-align:-1px;}
.mhStatLabel .giFlameLbl{width:11px;height:11px;fill:#fb923c;vertical-align:-1.5px;}
.toolbarNote .gi,.priorityCardLabel .gi{width:11px;height:11px;vertical-align:-1.5px;}
.dayObj .gi,.dayStat .gi{width:11px;height:11px;vertical-align:-1px;}
.reposBadge .gi{width:12px;height:12px;vertical-align:-1.5px;}
.btnAction .gi{width:12px;height:12px;vertical-align:-1.5px;}
.qQuantModalHeader .gi{width:14px;height:14px;fill:url(#giGrad);vertical-align:-2px;}
.qRowFlash{animation:qRowGlow 1.6s ease;}
@keyframes qRowGlow{0%{box-shadow:0 0 0 0 rgba(167,139,250,0);}25%{box-shadow:0 0 0 3px rgba(167,139,250,.5),0 0 30px -4px rgba(167,139,250,.55);}100%{box-shadow:0 0 0 0 rgba(167,139,250,0);}}
/* Icônes catégories */
.qNatBtn .gi{width:13px;height:13px;flex-shrink:0;}
.natItem{display:flex;align-items:center;gap:8px;}
.natItem .gi{width:14px;height:14px;flex-shrink:0;opacity:.8;}
/* ── Programme mentor ── */
.pgCard{border-radius:18px;border:1px solid rgba(255,255,255,.1);background:rgba(255,255,255,.03);padding:16px;margin-bottom:12px;}
.pgHead{display:flex;align-items:flex-start;justify-content:space-between;gap:10px;}
.pgKicker{font-size:9.5px;font-weight:800;letter-spacing:2px;text-transform:uppercase;background:linear-gradient(90deg,var(--mc1),var(--mc2));-webkit-background-clip:text;background-clip:text;color:transparent;margin-bottom:4px;font-family:'Space Grotesk',sans-serif;}
.pgTitle{font-family:'Syne',sans-serif;font-weight:800;font-size:15px;color:#fff;letter-spacing:-.2px;line-height:1.3;}
.pgSub{font-size:11px;color:rgba(255,255,255,.45);margin-top:3px;font-family:'Space Grotesk',sans-serif;}
.pgCount{font-family:'Syne',sans-serif;font-weight:800;font-size:13px;color:rgba(255,255,255,.55);flex-shrink:0;}
.pgProg{height:4px;border-radius:99px;background:rgba(255,255,255,.08);margin:12px 0;overflow:hidden;}
.pgProgFill{height:100%;border-radius:99px;background:linear-gradient(90deg,var(--mc1),var(--mc2));transition:width .5s cubic-bezier(.22,1,.36,1);}
.pgIntro{font-size:12px;font-style:italic;line-height:1.55;color:rgba(255,255,255,.6);margin:10px 0 14px;font-family:'Space Grotesk',sans-serif;}
.pgLessonBody{font-size:12.5px;line-height:1.6;color:rgba(255,255,255,.82);font-family:'Space Grotesk',sans-serif;white-space:pre-wrap;}
.pgMission{display:flex;align-items:flex-start;gap:8px;margin:12px 0;padding:11px 13px;border-radius:13px;border:1px dashed rgba(255,255,255,.18);background:rgba(255,255,255,.03);font-size:12px;font-weight:600;color:rgba(255,255,255,.8);font-family:'Space Grotesk',sans-serif;}
.pgMission .gi{width:14px;height:14px;fill:var(--mc1);flex-shrink:0;margin-top:1px;}
.pgStart{width:100%;padding:13px;border:none;border-radius:13px;background:linear-gradient(135deg,var(--mc1),var(--mc2));color:#fff;font-weight:800;font-size:11px;text-transform:uppercase;letter-spacing:.8px;cursor:pointer;font-family:'Space Grotesk',sans-serif;transition:transform .15s ease,box-shadow .15s ease;}
.pgStart:hover{transform:translateY(-1px);box-shadow:0 8px 24px -10px var(--mc2);}
.pgDone{padding:11px;border-radius:13px;background:rgba(52,211,153,.08);border:1px solid rgba(52,211,153,.25);color:rgba(134,239,172,.9);font-size:11.5px;font-weight:700;text-align:center;font-family:'Space Grotesk',sans-serif;}
.pgDone.pgPending{background:rgba(251,191,36,.07);border-color:rgba(251,191,36,.25);color:rgba(253,230,138,.9);}
.pgForeignNote{margin-top:10px;font-size:11px;line-height:1.5;color:rgba(255,255,255,.55);font-style:italic;font-family:'Space Grotesk',sans-serif;}
.pgAbandon{width:100%;margin-top:8px;border-color:rgba(239,68,68,.3);color:rgba(252,165,165,.85);}

/* ── Quiz d'orientation mentor (mqz) ── */
.mgQuizBtn{border-color:rgba(251,191,36,.35);color:rgba(253,230,138,.95);display:inline-flex;align-items:center;gap:6px;}
.mgQuizBtn .gi{width:13px;height:13px;fill:#fbbf24;}
.mqzPick{display:flex;align-items:center;gap:14px;margin:14px 0 6px;padding:14px;border-radius:16px;border:1px solid rgba(255,255,255,.12);background:linear-gradient(135deg,color-mix(in srgb,var(--mc1) 14%,transparent),color-mix(in srgb,var(--mc2) 8%,transparent));}
.mqzFace{width:56px;height:56px;flex:none;}
.mqzFace .giP{width:100%;height:100%;}
.mqzName{font-family:'Syne',sans-serif;font-weight:800;font-size:17px;color:#fff;letter-spacing:-.3px;}
.mqzArch{font-size:10px;font-weight:700;letter-spacing:1.6px;text-transform:uppercase;background:linear-gradient(90deg,var(--mc1),var(--mc2));-webkit-background-clip:text;background-clip:text;color:transparent;font-family:'Space Grotesk',sans-serif;margin-top:2px;}
.mqzAlt{font-size:11px;color:rgba(255,255,255,.5);font-family:'Space Grotesk',sans-serif;margin-bottom:6px;font-style:italic;}

/* ── Contrats du Sommet (ct) ── */
.ctCard{margin:10px 0 14px;padding:13px 14px 8px;border-radius:15px;border:1px solid rgba(251,191,36,.18);background:linear-gradient(160deg,rgba(251,191,36,.05),rgba(251,191,36,.012) 60%);}
.ctHead{display:flex;align-items:center;gap:7px;margin-bottom:9px;font-size:10px;font-weight:800;letter-spacing:1.8px;text-transform:uppercase;font-family:'Space Grotesk',sans-serif;}
.ctHead .gi{width:13px;height:13px;fill:url(#giGold);}
.ctHead span:first-of-type{background:linear-gradient(90deg,#fde68a,#fbbf24);-webkit-background-clip:text;background-clip:text;color:transparent;}
.ctSub{margin-left:auto;color:rgba(255,255,255,.25);font-weight:600;letter-spacing:.4px;text-transform:none;font-size:10px;}
/* D'ou vient le compte du jour : « 2 de base · +1 Téléphone · +1 Le Cran = 4 ».
   Un plafond qu'on ne sait pas expliquer passe pour un bug. */
.ctDetail{margin:-2px 0 9px;font-size:10.5px;color:rgba(253,230,138,.55);font-family:'Space Grotesk',sans-serif;letter-spacing:.2px;}
.ctRow{display:flex;align-items:center;gap:10px;padding:8px 2px;border-top:1px solid rgba(255,255,255,.05);}
.ctState{flex:none;width:15px;height:15px;}
.ctState .gi{width:15px;height:15px;fill:rgba(255,255,255,.3);}
.ctRow.done .ctState .gi{fill:rgba(52,211,153,.85);}
.ctText{flex:1;font-size:12px;line-height:1.45;color:rgba(255,255,255,.72);font-family:'Space Grotesk',sans-serif;}
.ctRow.done .ctText{color:rgba(255,255,255,.4);text-decoration:line-through;text-decoration-color:rgba(52,211,153,.4);}
.ctXp{flex:none;font-size:10px;font-weight:800;color:rgba(253,230,138,.85);font-family:'Space Grotesk',sans-serif;}
.ctRow.done .ctXp{color:rgba(52,211,153,.85);}

/* ── L'Équipement du Sommet : Tribut (tb) + collection (gear) ── */
.tbCard{position:relative;margin:10px 0 14px;padding:16px;border-radius:16px;border:1px solid rgba(251,191,36,.35);background:linear-gradient(160deg,rgba(251,191,36,.09),rgba(251,191,36,.02) 65%);overflow:hidden;text-align:center;}
.tbGlow{position:absolute;top:-40%;left:50%;transform:translateX(-50%);width:70%;height:120%;background:radial-gradient(ellipse,rgba(251,191,36,.14),transparent 70%);pointer-events:none;}
.tbTitle{display:flex;align-items:center;justify-content:center;gap:8px;font-size:11px;font-weight:800;letter-spacing:2px;text-transform:uppercase;font-family:'Space Grotesk',sans-serif;background:linear-gradient(90deg,#fde68a,#fbbf24);-webkit-background-clip:text;background-clip:text;color:transparent;}
.tbTitle .gi{width:15px;height:15px;fill:url(#giGold);}
.tbSub{margin:7px 0 12px;font-size:12px;color:rgba(255,255,255,.55);font-family:'Space Grotesk',sans-serif;}
.tbOpen{padding:12px 26px;border:none;border-radius:12px;background:linear-gradient(135deg,#fde68a,#f59e0b);color:#1a1206;font-weight:800;font-size:11px;text-transform:uppercase;letter-spacing:1px;cursor:pointer;font-family:'Space Grotesk',sans-serif;transition:transform .15s ease;}
.tbOpen:hover{transform:translateY(-1px);}
.tbResult{margin:10px 0 6px;font-family:'Syne',sans-serif;font-size:19px;font-weight:800;color:#fff;display:flex;align-items:center;justify-content:center;gap:9px;}
.tbResult .gi{width:22px;height:22px;fill:rgba(255,255,255,.85);}
.tbResult em{font-style:normal;font-size:10px;font-weight:800;letter-spacing:1.4px;text-transform:uppercase;opacity:.7;}
.tbDupe{font-size:14px;color:rgba(255,255,255,.6);}
.tbReroll{margin-top:8px;border-color:rgba(251,191,36,.3);color:rgba(253,230,138,.9);}
/* Couleurs de rareté */
.gr-c{--grc:#9ca3af;}
.gr-r{--grc:#60a5fa;}
.gr-e{--grc:#a78bfa;}
.gr-l{--grc:#fbbf24;}
.tbResult.tbItem{color:var(--grc);}
.tbResult.tbItem .gi{fill:var(--grc);}
.gearSection{margin-top:18px;}
.gearHead{display:flex;align-items:center;gap:8px;font-family:'Syne',sans-serif;font-weight:800;font-size:14px;color:#fff;margin-bottom:4px;}
.gearHead .gi{width:15px;height:15px;fill:url(#giGold);}
.gearCount{margin-left:auto;font-family:'Space Grotesk',sans-serif;font-size:11px;font-weight:800;color:rgba(253,230,138,.8);}
.gearSlotLab{margin:12px 0 6px;font-size:9px;font-weight:800;letter-spacing:2px;text-transform:uppercase;color:rgba(255,255,255,.35);font-family:'Space Grotesk',sans-serif;}
.gearGrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(96px,1fr));gap:8px;}
.gearItem{position:relative;padding:12px 8px 9px;border-radius:13px;border:1px solid color-mix(in srgb,var(--grc) 35%,transparent);background:color-mix(in srgb,var(--grc) 7%,transparent);text-align:center;transition:transform .15s ease;}
.gearItem:hover{transform:translateY(-2px);}
.gearItem .gi{width:26px;height:26px;fill:var(--grc);}
.gearItem.missing{opacity:.32;filter:saturate(.2);}
.gearItem.missing .gi{fill:rgba(255,255,255,.4);}
.gearName{margin-top:6px;font-size:9.5px;line-height:1.25;font-weight:700;color:rgba(255,255,255,.75);font-family:'Space Grotesk',sans-serif;}
.gearPerk{margin-top:3px;font-size:8px;line-height:1.3;color:color-mix(in srgb,var(--grc) 75%,#fff);font-family:'Space Grotesk',sans-serif;opacity:.85;}
.gearItem.missing .gearPerk{color:rgba(255,255,255,.35);}
.gearItem.owned{cursor:pointer;}
.gearItem.equipped{border-color:var(--grc);background:color-mix(in srgb,var(--grc) 16%,transparent);box-shadow:0 0 16px -6px var(--grc);}
.gearEq{position:absolute;top:-7px;left:50%;transform:translateX(-50%);padding:2px 7px;border-radius:99px;background:var(--grc);color:#0a0a12;font-size:7.5px;font-weight:800;letter-spacing:1px;font-family:'Space Grotesk',sans-serif;}
.gearItem.gr-l.owned{box-shadow:0 0 18px -6px rgba(251,191,36,.5);}
/* Cases d'équipement (Albion) */
.eqRow{display:grid;grid-template-columns:repeat(6,1fr);gap:8px;margin:10px 0 4px;}
.eqSlot{position:relative;aspect-ratio:1;border-radius:13px;border:1.5px dashed rgba(255,255,255,.14);background:rgba(255,255,255,.025);display:flex;align-items:center;justify-content:center;transition:border-color .2s ease;}
.eqSlot .gi{width:44%;height:44%;fill:var(--grc);}
.eqSlot.filled{border-style:solid;border-color:var(--grc);background:color-mix(in srgb,var(--grc) 10%,transparent);cursor:pointer;box-shadow:0 0 14px -6px var(--grc);}
.eqLab{position:absolute;bottom:5px;left:0;right:0;text-align:center;font-size:7.5px;font-weight:800;letter-spacing:1px;text-transform:uppercase;color:rgba(255,255,255,.3);font-family:'Space Grotesk',sans-serif;}
.eqSlot.filled .eqLab{color:color-mix(in srgb,var(--grc) 70%,#fff);}
/* Le Sac */
.bagGrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(72px,1fr));gap:8px;}
.bagItem{position:relative;aspect-ratio:1;border-radius:12px;border:1px solid color-mix(in srgb,var(--grc,#9ca3af) 35%,transparent);background:color-mix(in srgb,var(--grc,#9ca3af) 7%,transparent);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:4px;padding:6px 4px;cursor:pointer;transition:transform .15s ease;}
.bagItem:hover{transform:translateY(-2px);}
.bagItem .gi{width:30%;height:30%;fill:var(--grc);flex:none;}
.bagItem .gearName{margin:0;font-size:8px;line-height:1.2;text-align:center;font-weight:700;color:rgba(255,255,255,.72);font-family:'Space Grotesk',sans-serif;overflow:hidden;max-height:2.4em;}
.bagItem.equipped{border-color:var(--grc);box-shadow:0 0 14px -6px var(--grc);background:color-mix(in srgb,var(--grc) 15%,transparent);}
.bagEmpty{grid-column:1/-1;padding:16px;text-align:center;font-size:11.5px;color:rgba(255,255,255,.35);font-style:italic;font-family:'Space Grotesk',sans-serif;border:1px dashed rgba(255,255,255,.1);border-radius:12px;}
/* Cases muettes : rien à savoir avant l'obtention */
.mysteryBox{cursor:default;border:1px dashed rgba(255,255,255,.1);background:rgba(255,255,255,.015);color:rgba(255,255,255,.18);font-family:'Syne',sans-serif;font-weight:800;font-size:17px;}
.mysteryBox:hover{transform:none;}
/* Offres de forge (pièces anonymes) */
.forgeOffer{display:flex;align-items:center;gap:10px;padding:9px 4px;border-top:1px solid rgba(255,255,255,.05);}
.forgeQ{flex:none;width:34px;height:34px;border-radius:10px;border:1px dashed rgba(251,191,36,.4);display:flex;align-items:center;justify-content:center;font-family:'Syne',sans-serif;font-weight:800;font-size:11px;color:rgba(253,230,138,.6);}
.forgeOfferTxt{flex:1;font-size:11.5px;color:rgba(255,255,255,.65);font-family:'Space Grotesk',sans-serif;}
.forgeCard{margin:10px 0 4px;padding:13px 14px;border-radius:14px;border:1px dashed rgba(251,146,60,.5);background:rgba(251,146,60,.06);}
.forgeTitle{display:flex;align-items:center;gap:7px;font-family:'Syne',sans-serif;font-weight:800;font-size:13px;color:#fdba74;}
.forgeTitle .gi{width:14px;height:14px;fill:#fb923c;}
.forgeTrial{margin:5px 0 8px;font-size:11.5px;color:rgba(255,255,255,.6);font-family:'Space Grotesk',sans-serif;}
.forgeBar{height:7px;border-radius:99px;background:rgba(255,255,255,.07);overflow:hidden;}
.forgeBarFill{height:100%;border-radius:99px;background:linear-gradient(90deg,#fb923c,#fbbf24);transition:width .6s cubic-bezier(.22,1,.36,1);}
.forgeCount{margin-top:5px;font-size:10px;font-weight:800;color:rgba(253,186,116,.9);font-family:'Space Grotesk',sans-serif;}
.forgeAbandon{margin-top:8px;border-color:rgba(239,68,68,.3);color:rgba(252,165,165,.8);}
.tbEvent{margin:7px 0 2px;display:inline-flex;align-items:center;gap:6px;padding:4px 11px;border-radius:99px;border:1px solid rgba(251,191,36,.4);font-size:9px;font-weight:800;letter-spacing:1.6px;color:#fde68a;font-family:'Space Grotesk',sans-serif;}
.tbEvent .gi{width:11px;height:11px;fill:url(#giGold);}
/* ══ L'APPEL DU SOMMET : LES SEPT JOURS SE VOIENT ═══════════════════
   Une récompense qu'on ignore ne fait revenir personne. La carte passe en
   COLONNE pour loger la grille : sept tuiles, l'état de chacune, et le 7e
   jour qui tire l'oeil sans crier. Zéro animation infinie (règle FPS) :
   c'est l'échelle et la couleur qui portent la montée. */
.apCard{display:flex;flex-direction:column;gap:10px;margin:10px 0;padding:12px 13px;border-radius:14px;border:1px solid rgba(96,165,250,.25);background:linear-gradient(160deg,rgba(96,165,250,.07),rgba(96,165,250,.015) 65%);}
.apHead{display:flex;align-items:center;gap:7px;font-family:'Syne',sans-serif;font-weight:800;font-size:12.5px;color:#fff;}
.apHead .gi{width:15px;height:15px;flex:none;fill:#60a5fa;}
.apHead em{margin-left:auto;font-style:normal;font-size:10px;font-weight:700;letter-spacing:.6px;text-transform:uppercase;color:rgba(147,197,253,.75);font-family:'Space Grotesk',sans-serif;}
.apGrid{display:grid;grid-template-columns:repeat(7,1fr);gap:4px;}
.apCell{position:relative;display:flex;flex-direction:column;align-items:center;gap:1px;padding:7px 2px 6px;border-radius:9px;
  border:1px solid rgba(255,255,255,.08);background:rgba(255,255,255,.03);min-width:0;}
.apJ{font-size:8px;font-weight:800;letter-spacing:.4px;color:rgba(255,255,255,.3);font-family:'Space Grotesk',sans-serif;}
.apCell .apIco .gi,.apCell .apIco{width:15px;height:15px;fill:rgba(147,197,253,.55);}
.apGain{font-size:11px;font-weight:800;color:rgba(255,255,255,.62);font-family:'Space Grotesk',monospace;}
.apPlus{font-size:7.5px;font-weight:700;letter-spacing:.2px;text-transform:uppercase;color:rgba(147,197,253,.6);text-align:center;line-height:1.1;}
/* PRIS : la tuile s'éteint et porte sa coche. */
.apPris{opacity:.42;border-color:rgba(34,197,94,.2);background:rgba(34,197,94,.05);}
.apOk{position:absolute;top:2px;right:2px;}
.apOk .gi{width:9px;height:9px;fill:#4ade80;}
/* AUJOURD'HUI : celle qui tombe si on répond maintenant. */
.apCur{border-color:rgba(96,165,250,.6);background:rgba(96,165,250,.14);transform:scale(1.06);}
.apCur .apJ,.apCur .apGain{color:#dbeafe;}
.apCur .apIco .gi{fill:#93c5fd;}
/* LE SEPTIÈME : l'épique est ANNONCÉ, c'est lui qui fait revenir. */
.apSept{border-color:rgba(167,139,250,.45);background:linear-gradient(160deg,rgba(167,139,250,.16),rgba(167,139,250,.04));}
.apSept .apIco .gi{fill:#c4b5fd;}
.apSept .apPlus{color:#c4b5fd;font-weight:800;}
.apSept.apCur{border-color:rgba(167,139,250,.9);}
.apCard .apClaim{width:100%;padding:10px;font-size:10.5px;}
.apCard .apTxt{flex:none;}
@media(max-width:380px){.apPlus{font-size:7px;}.apGain{font-size:10px;}}
.apDays{display:flex;gap:5px;flex:none;}
.apDot{width:8px;height:8px;border-radius:50%;background:rgba(255,255,255,.12);}
.apDot.done{background:rgba(96,165,250,.8);}
.apDot.cur{background:#93c5fd;box-shadow:0 0 8px rgba(147,197,253,.8);}
.apDot.big{width:10px;height:10px;border:1px solid rgba(251,191,36,.6);}
.apDot.big.done,.apDot.big.cur{background:#fbbf24;}
.apTxt{flex:1;font-size:11.5px;color:rgba(255,255,255,.65);font-family:'Space Grotesk',sans-serif;}
.apTxt strong{color:rgba(147,197,253,.95);}
.apClaim{flex:none;padding:8px 16px;border:none;border-radius:10px;background:linear-gradient(135deg,#60a5fa,#3b82f6);color:#fff;font-weight:800;font-size:10px;text-transform:uppercase;letter-spacing:.8px;cursor:pointer;font-family:'Space Grotesk',sans-serif;}
.apCard.apDone{opacity:.62;border-color:rgba(96,165,250,.14);background:rgba(96,165,250,.03);}
/* La Joute (duel réel 1v1) : rangée d'entrée dans la section Adversaire */
.dlFoot{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-top:8px;padding:11px 14px;border-radius:13px;border:1px solid rgba(251,191,36,.28);background:linear-gradient(160deg,rgba(251,191,36,.07),rgba(248,113,113,.03) 65%);}
.dlFootTxt{flex:1;min-width:170px;font-size:11.5px;color:rgba(255,255,255,.6);font-family:'Space Grotesk',sans-serif;display:flex;align-items:center;gap:7px;flex-wrap:wrap;}
.dlFootSub{flex-basis:100%;margin-top:3px;font-size:10.5px;color:rgba(253,230,138,.55);line-height:1.55;font-style:italic;}
.dlFootTxt strong{font-family:'Syne',sans-serif;font-size:13px;background:linear-gradient(90deg,#fca5a5,#fbbf24);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;}
.dlFootTxt .gi{width:15px;height:15px;fill:url(#giGold);flex:none;}
.dlFootBtns{display:flex;gap:8px;}
.dlOr{display:flex;align-items:center;gap:12px;margin:10px 0 2px;font-size:10px;font-weight:800;letter-spacing:2px;text-transform:uppercase;color:rgba(255,255,255,.32);font-family:'Space Grotesk',sans-serif;}
.dlOr::before,.dlOr::after{content:"";flex:1;height:1px;background:rgba(255,255,255,.09);}
/* Catégorie des goals Vision (création guidée + cartes de l'arbre) */
.vgNatLab{margin:14px 0 7px;font-size:10px;font-weight:800;letter-spacing:1px;text-transform:uppercase;color:rgba(255,255,255,.45);font-family:'Space Grotesk',sans-serif;}
.vgNatRow{display:flex;gap:6px;flex-wrap:wrap;}
.vgNat{width:34px;height:34px;display:flex;align-items:center;justify-content:center;border-radius:10px;border:1px solid rgba(255,255,255,.12);background:rgba(255,255,255,.04);cursor:pointer;transition:all .15s;padding:0;}
.vgNat .gi{width:16px;height:16px;fill:rgba(255,255,255,.55);}
.vgNat.on{border-color:rgba(167,139,250,.65);background:rgba(167,139,250,.16);}
.vgNat.on .gi{fill:#c4b5fd;}
.vtreeNodeNat{display:inline-flex;vertical-align:-2px;margin-right:5px;}
.vtreeNodeNat .gi{width:13px;height:13px;fill:rgba(196,181,253,.8);}
/* Bouton push en cours d'activation : pulsation OPACITÉ seule (composité,
   règle FPS) le temps de la permission + de l'enregistrement FCM */
.btnTiny.notifBusy{animation:notifBusyPulse 1.1s ease-in-out infinite;pointer-events:none;}
@keyframes notifBusyPulse{0%,100%{opacity:1;}50%{opacity:.4;}}
/* Partage aux pics émotionnels : chip "Immortaliser" */
.shmChip{position:fixed;left:50%;bottom:max(92px,calc(env(safe-area-inset-bottom) + 84px));transform:translate(-50%,16px);display:flex;align-items:center;gap:10px;padding:10px 12px 10px 15px;border-radius:99px;border:1px solid rgba(251,191,36,.45);background:rgba(12,10,4,.92);box-shadow:0 10px 30px rgba(0,0,0,.5);z-index:9990;opacity:0;pointer-events:none;transition:opacity .25s ease,transform .25s ease;max-width:min(92vw,440px);}
.shmChip.show{opacity:1;pointer-events:auto;transform:translate(-50%,0);}
.shmTxt{font-size:11.5px;font-weight:700;color:#fde68a;font-family:'Space Grotesk',sans-serif;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.shmBtn{flex:none;padding:8px 14px;border:none;border-radius:99px;background:linear-gradient(135deg,#fbbf24,#d97706);color:#1a1206;font-weight:800;font-size:10px;text-transform:uppercase;letter-spacing:.7px;cursor:pointer;font-family:'Space Grotesk',sans-serif;}
.shmClose{flex:none;width:24px;height:24px;border:none;border-radius:50%;background:rgba(255,255,255,.08);color:rgba(255,255,255,.55);font-size:11px;cursor:pointer;}
.dlCard{margin:8px 0;padding:13px 15px;border-radius:14px;border:1px solid rgba(248,113,113,.3);background:linear-gradient(160deg,rgba(248,113,113,.08),rgba(248,113,113,.015) 65%);}
.dlHead{display:flex;align-items:center;gap:8px;flex-wrap:wrap;font-size:12px;font-weight:800;color:rgba(252,165,165,.95);font-family:'Space Grotesk',sans-serif;}
.dlHead .gi{width:15px;height:15px;fill:rgba(252,165,165,.9);flex:none;}
.dlVs{flex:1;min-width:140px;}
.dlVs em{font-style:normal;font-size:15px;color:#fff;}
.dlDay{font-size:10px;font-weight:800;letter-spacing:.6px;text-transform:uppercase;color:rgba(251,191,36,.9);}
.dlCode{margin:12px 0 8px;text-align:center;font-size:34px;font-weight:800;letter-spacing:10px;color:#fff;font-family:'Space Grotesk',sans-serif;cursor:pointer;text-shadow:0 0 18px rgba(248,113,113,.45);}
.dlSub{font-size:11px;color:rgba(255,255,255,.5);line-height:1.55;font-family:'Space Grotesk',sans-serif;}
.dlMission{display:flex;align-items:center;gap:10px;margin:10px 0;padding:10px 12px;border-radius:11px;background:rgba(255,255,255,.05);border:1px solid rgba(255,255,255,.09);}
.dlMTxt{flex:1;font-size:12.5px;color:#fff;font-weight:600;line-height:1.45;font-family:'Space Grotesk',sans-serif;}
.dlMDiff{flex:none;font-size:9px;font-weight:800;letter-spacing:.7px;text-transform:uppercase;color:rgba(251,191,36,.85);border:1px solid rgba(251,191,36,.35);border-radius:99px;padding:3px 9px;}
.dlBtns{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin-top:8px;}
.dlDanger{border-color:rgba(239,68,68,.3)!important;color:rgba(252,165,165,.8)!important;}
.dlDone{font-size:11px;font-weight:800;color:#4ade80;font-family:'Space Grotesk',sans-serif;}
.dlWait{font-size:11px;color:rgba(255,255,255,.55);font-family:'Space Grotesk',sans-serif;}
.dlJudge{margin-top:10px;padding:9px 12px;border-radius:11px;border:1px solid rgba(251,191,36,.3);background:rgba(251,191,36,.06);font-size:11.5px;color:#fde68a;font-family:'Space Grotesk',sans-serif;display:flex;align-items:center;gap:9px;justify-content:space-between;}
.dlVerdict{margin:10px 0;font-size:13px;color:#fff;line-height:1.6;font-family:'Space Grotesk',sans-serif;}
.dlCard.dlWon{border-color:rgba(251,191,36,.45);background:linear-gradient(160deg,rgba(251,191,36,.09),rgba(251,191,36,.015) 65%);}
.dlCard.dlOver .dlHead{color:rgba(255,255,255,.7);}
.dlChipsTitle{margin:12px 0 6px;font-size:10px;font-weight:800;letter-spacing:1px;text-transform:uppercase;color:rgba(255,255,255,.45);font-family:'Space Grotesk',sans-serif;text-align:left;}
.dlChips{display:flex;gap:7px;flex-wrap:wrap;}
.dlChip{padding:7px 13px;border-radius:99px;border:1px solid rgba(255,255,255,.16);background:rgba(255,255,255,.05);color:rgba(255,255,255,.75);font-size:11px;font-weight:700;cursor:pointer;font-family:'Space Grotesk',sans-serif;transition:all .15s;}
.dlChip.on{border-color:rgba(248,113,113,.6);background:rgba(248,113,113,.14);color:#fff;}
.dlNote{margin-top:12px;font-size:10.5px;color:rgba(255,255,255,.45);line-height:1.55;font-family:'Space Grotesk',sans-serif;text-align:left;}
/* ══ LA JOUTE ÉCLAIR : un MODE, pas un système à part ══════════════
   La durée se choisit d'abord, en deux cartes : c'est elle qui commande
   l'enjeu, le nombre de contrats et le mode. Zéro animation. */
.dlFmt{display:flex;flex-direction:column;gap:8px;margin:4px 0 12px;}
.dlFmtCard{display:block;width:100%;text-align:left;padding:11px 13px;border-radius:13px;cursor:pointer;
  border:1px solid rgba(255,255,255,.1);background:rgba(255,255,255,.03);font-family:'Space Grotesk',sans-serif;}
.dlFmtCard b{display:inline;font-family:'Syne',sans-serif;font-size:14px;color:#fff;}
.dlFmtCard em{font-style:normal;font-size:10px;font-weight:700;letter-spacing:.8px;text-transform:uppercase;color:rgba(255,255,255,.35);margin-left:7px;}
.dlFmtCard span{display:block;margin-top:3px;font-size:11px;line-height:1.45;color:rgba(255,255,255,.5);}
.dlFmtCard.on{border-color:rgba(239,68,68,.5);background:rgba(239,68,68,.09);}
.dlFmtCard.on b{color:#fecaca;}
/* Les quatre contrats, ouverts ensemble */
.dlSlots{display:flex;flex-direction:column;gap:6px;margin:9px 0;}
.dlSlot{display:flex;align-items:center;gap:8px;padding:8px 10px;border-radius:10px;
  border:1px solid rgba(255,255,255,.08);background:rgba(255,255,255,.03);flex-wrap:wrap;}
.dlSlot.on{border-color:rgba(34,197,94,.25);background:rgba(34,197,94,.06);}
.dlSlN{flex:none;width:18px;height:18px;border-radius:50%;background:rgba(239,68,68,.16);border:1px solid rgba(239,68,68,.35);
  color:#fca5a5;font-size:10px;font-weight:800;display:flex;align-items:center;justify-content:center;}
.dlSlTxt{flex:1;min-width:0;font-size:11.5px;line-height:1.4;color:rgba(255,255,255,.75);overflow-wrap:anywhere;}
.dlSlOk{flex:none;font-size:10px;font-weight:700;color:#4ade80;display:inline-flex;align-items:center;gap:4px;}
.dlSlOk .gi{width:11px;height:11px;fill:#4ade80;}
.dlSlWait{flex:none;font-size:10px;color:rgba(255,255,255,.4);}
.dlSlKo{flex:none;font-size:10px;color:rgba(252,165,165,.7);}
.dlSlJudge{flex:1 0 100%;margin-top:4px;}
.dlFlash .dlDay{color:rgba(252,165,165,.85);}
/* ══ LA JOUTE CLASSÉE ══
   L'OR est le langage de l'attesté dans tout le produit (Influence, Étage) :
   c'est lui qui distingue la carte « Classée » de l'amicale, jamais une
   couleur neuve. */
.dlFmtCard.dlRk.on{border-color:rgba(251,191,36,.55);background:rgba(251,191,36,.09);}
.dlFmtCard.dlRk.on b{color:#fcd34d;}
.dlRkTag{flex:none;font-size:9.5px;font-weight:800;letter-spacing:1px;text-transform:uppercase;
  color:#fcd34d;border:1px solid rgba(251,191,36,.4);background:rgba(251,191,36,.1);
  padding:2px 7px;border-radius:999px;}
.dlCodeInput{display:block;width:100%;margin-top:12px;padding:12px;border-radius:11px;border:1px solid rgba(255,255,255,.18);background:rgba(255,255,255,.06);color:#fff;font-size:22px;font-weight:800;letter-spacing:8px;text-align:center;text-transform:uppercase;font-family:'Space Grotesk',sans-serif;}
.dlProofFile{display:block;width:100%;margin-top:12px;font-size:12px;color:rgba(255,255,255,.7);font-family:'Space Grotesk',sans-serif;}
.dlProofPrev{display:block;max-width:100%;max-height:280px;margin:12px auto 0;border-radius:12px;border:1px solid rgba(255,255,255,.15);object-fit:contain;}
/* ══ LE CONTRAT DE PREUVE : on le LIT avant de photographier ══════
   Ce qui suffit en vert, ce qui rejette en rouge, le sceau en or. Une pièce
   par emplacement, numérotée. Zéro animation. */
.dlPrTitle{font-family:'Syne',sans-serif;font-weight:800;font-size:13px;color:#fff;line-height:1.35;margin-bottom:9px;}
.dlPrBloc{margin:7px 0;padding:8px 10px;border-radius:10px;font-size:11px;line-height:1.45;}
.dlPrBloc b{display:block;font-size:9.5px;font-weight:800;letter-spacing:1.1px;text-transform:uppercase;margin-bottom:3px;}
.dlPrBloc ul{margin:0;padding-left:15px;}
.dlPrBloc li{margin:1px 0;}
.dlPrOk{background:rgba(34,197,94,.07);border:1px solid rgba(34,197,94,.2);color:rgba(187,247,208,.85);}
.dlPrOk b{color:#4ade80;}
.dlPrKo{background:rgba(239,68,68,.06);border:1px solid rgba(239,68,68,.18);color:rgba(254,202,202,.8);}
.dlPrKo b{color:#f87171;}
.dlPrPriv{display:flex;align-items:center;gap:6px;margin:7px 0;font-size:10.5px;color:rgba(255,255,255,.45);}
.dlPrPriv .gi{width:12px;height:12px;flex:none;fill:rgba(255,255,255,.4);}
.dlPrSeal{margin:9px 0;padding:9px 11px;border-radius:11px;background:rgba(251,191,36,.08);border:1px solid rgba(251,191,36,.25);}
.dlPrSeal b{display:block;font-size:9.5px;font-weight:800;letter-spacing:1.1px;text-transform:uppercase;color:rgba(253,230,138,.8);}
.dlPrSeal em{display:block;font-style:normal;font-family:'Space Grotesk',monospace;font-size:19px;font-weight:800;letter-spacing:2px;color:#fde68a;margin:3px 0;}
.dlPrSeal i{display:block;font-style:normal;font-size:10px;color:rgba(253,230,138,.55);}
.dlPrPieces{display:flex;flex-direction:column;gap:11px;margin:11px 0;}
.dlPrPiece{padding:9px;border-radius:11px;border:1px solid rgba(255,255,255,.09);background:rgba(255,255,255,.03);}
.dlPrSlot{display:flex;gap:7px;font-size:11.5px;line-height:1.4;color:rgba(255,255,255,.7);margin-bottom:7px;}
.dlPrNum{flex:none;width:18px;height:18px;border-radius:50%;background:rgba(167,139,250,.18);border:1px solid rgba(167,139,250,.4);color:#c4b5fd;font-size:10px;font-weight:800;display:flex;align-items:center;justify-content:center;}
.dlPrJudge{margin:8px 0;}
.dlPrLot{display:flex;flex-direction:column;gap:9px;margin:9px 0;}
.dlPrShot{margin:0;}
.dlPrShot figcaption{margin-top:3px;font-size:10px;color:rgba(255,255,255,.4);}
.dlProofText{display:block;width:100%;margin-top:10px;padding:10px;border-radius:10px;border:1px solid rgba(255,255,255,.15);background:rgba(255,255,255,.05);color:#fff;font-size:12.5px;font-family:'Space Grotesk',sans-serif;resize:vertical;min-height:52px;}
.dlProofSay{margin-top:10px;font-size:12px;font-style:italic;color:rgba(255,255,255,.65);font-family:'Space Grotesk',sans-serif;}
.dlContestBtn{display:block;width:100%;margin-top:14px;padding:10px!important;}
/* Planifier ta journée (openPlanFlow, overlay vtreeGuide) */
.pfKicker{margin:2px 0 14px;font-size:11.5px;font-style:italic;color:rgba(253,230,138,.55);font-family:'Space Grotesk',sans-serif;line-height:1.5;}
.pfDays{display:grid;grid-template-columns:repeat(4,1fr);gap:7px;margin-top:9px;}
.pfDay{display:flex;flex-direction:column;align-items:center;gap:2px;padding:9px 4px 7px;border-radius:12px;border:1px solid rgba(255,255,255,.1);background:rgba(255,255,255,.03);cursor:pointer;transition:border-color .16s ease,background .16s ease,transform .16s ease;-webkit-tap-highlight-color:transparent;user-select:none;}
.pfDay:hover{border-color:rgba(167,139,250,.35);}
.pfDay:active{transform:scale(.96);}
.pfDay.active{border-color:rgba(167,139,250,.65);background:rgba(167,139,250,.12);box-shadow:0 0 16px rgba(167,139,250,.14);}
.pfDayLab{font-size:9px;font-weight:800;letter-spacing:.7px;text-transform:uppercase;color:rgba(255,255,255,.45);font-family:'Space Grotesk',sans-serif;}
.pfDay.active .pfDayLab{color:rgba(196,181,253,.95);}
.pfDayNum{font-family:'Syne',sans-serif;font-weight:800;font-size:17px;color:rgba(255,255,255,.85);line-height:1.2;}
.pfDay .gi{width:15px;height:15px;margin-top:2px;fill:rgba(255,255,255,.7);}
.pfDate{width:auto;max-width:100%;margin-top:8px;padding:9px 12px;border-radius:11px;border:1px solid rgba(167,139,250,.3);background:rgba(255,255,255,.05);color:#fff;font-size:16px;color-scheme:dark;font-family:'Space Grotesk',sans-serif;display:inline-block;}
.pfAddRow{display:flex;gap:8px;margin-top:9px;}
.pfInput{flex:1;min-width:0;padding:12px 13px;border-radius:12px;border:1px solid rgba(255,255,255,.14);background:rgba(255,255,255,.05);color:#fff;font-size:16px;font-family:'Space Grotesk',sans-serif;outline:none;transition:border-color .2s ease;}
/* Éditeur de tâche planifiée : bouton Supprimer (rouge, pleine largeur) */
._dteDel{display:block;width:100%;margin-top:14px;padding:11px;border-radius:12px;border:1px solid rgba(248,113,113,.4);background:rgba(248,113,113,.07);color:#f87171;font-weight:800;font-size:11px;text-transform:uppercase;letter-spacing:.6px;font-family:'Space Grotesk',sans-serif;cursor:pointer;-webkit-tap-highlight-color:transparent;}
._dteDel:active{transform:scale(.98);}
.pfInput:focus{border-color:rgba(167,139,250,.55);background:rgba(167,139,250,.05);}
.pfInput::placeholder{color:rgba(255,255,255,.3);}
.pfAddBtn{flex:none;width:46px;border-radius:12px;border:1px solid rgba(167,139,250,.4);background:rgba(167,139,250,.12);color:#c4b5fd;font-size:22px;font-weight:700;cursor:pointer;transition:transform .12s ease,background .15s ease;-webkit-tap-highlight-color:transparent;}
.pfAddBtn:hover{background:rgba(167,139,250,.2);}
.pfAddBtn:active{transform:scale(.92);}
.pfMeta{display:flex;align-items:center;gap:8px;margin-top:8px;flex-wrap:wrap;}
.pfNatBtn{display:inline-flex;align-items:center;gap:6px;padding:7px 11px;border-radius:99px;border:1px solid rgba(255,255,255,.12);background:rgba(255,255,255,.04);color:rgba(255,255,255,.7);font-size:11px;font-weight:700;font-family:'Space Grotesk',sans-serif;cursor:pointer;transition:border-color .15s ease;-webkit-tap-highlight-color:transparent;}
.pfNatBtn .gi{width:13px;height:13px;fill:#fff;}
.pfNatBtn.open,.pfNatBtn:hover{border-color:rgba(167,139,250,.45);color:#fff;}
.pfDiffs{display:flex;gap:4px;flex-wrap:wrap;}
.pfDiff{padding:6px 9px;border-radius:99px;border:1px solid rgba(255,255,255,.1);background:rgba(255,255,255,.03);color:rgba(255,255,255,.5);font-size:10px;font-weight:800;font-family:'Space Grotesk',sans-serif;cursor:pointer;transition:all .14s ease;-webkit-tap-highlight-color:transparent;white-space:nowrap;}
.pfDiff.active{border-color:rgba(253,230,138,.55);background:rgba(253,230,138,.1);color:rgba(253,230,138,.95);}
.pfDiff:active{transform:scale(.93);}
.pfNatGrid{display:grid;grid-template-columns:repeat(3,1fr);gap:5px;margin-top:8px;max-height:150px;overflow-y:auto;overscroll-behavior:contain;padding:2px;}
.pfNat{display:inline-flex;align-items:center;gap:5px;padding:7px 8px;border-radius:9px;border:1px solid rgba(255,255,255,.08);background:rgba(255,255,255,.03);color:rgba(255,255,255,.65);font-size:10.5px;font-weight:600;font-family:'Space Grotesk',sans-serif;cursor:pointer;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;-webkit-tap-highlight-color:transparent;}
.pfNat .gi{width:12px;height:12px;flex:none;fill:#fff;}
.pfNat.active{border-color:rgba(167,139,250,.6);background:rgba(167,139,250,.12);color:#fff;}
.pfTaskNat{flex:none;display:inline-flex;align-items:center;justify-content:center;width:26px;height:26px;border-radius:8px;border:1px solid rgba(167,139,250,.25);background:rgba(167,139,250,.07);cursor:pointer;transition:border-color .15s ease;-webkit-tap-highlight-color:transparent;}
.pfTaskNat:hover{border-color:rgba(167,139,250,.55);}
.pfTaskNat .gi{width:14px;height:14px;fill:rgba(196,181,253,.9);}
.pfTaskDiff{flex:none;padding:4px 9px;border-radius:99px;border:1px solid rgba(253,230,138,.25);background:rgba(253,230,138,.05);color:rgba(253,230,138,.8);font-size:9.5px;font-weight:800;font-family:'Space Grotesk',sans-serif;cursor:pointer;white-space:nowrap;transition:all .13s ease;-webkit-tap-highlight-color:transparent;}
.pfTaskDiff:active{transform:scale(.92);}
.pfNatFor{grid-column:1/-1;font-size:10px;font-weight:700;color:rgba(196,181,253,.7);font-family:'Space Grotesk',sans-serif;padding:2px 2px 4px;}
.pfQuantBtn{flex:none;display:inline-flex;align-items:center;justify-content:center;width:34px;height:30px;border-radius:9px;border:1px solid rgba(34,211,238,.3);background:rgba(34,211,238,.06);cursor:pointer;transition:all .14s ease;-webkit-tap-highlight-color:transparent;}
.pfQuantBtn .gi{width:16px;height:16px;fill:rgba(34,211,238,.85);}
.pfQuantBtn.on{border-color:rgba(34,211,238,.7);background:rgba(34,211,238,.16);}
.pfQuantRow{display:flex;align-items:center;gap:7px;margin-top:8px;flex-wrap:wrap;}
.pfQLab{display:inline-flex;align-items:center;gap:5px;font-size:11px;font-weight:700;color:rgba(103,232,249,.9);font-family:'Space Grotesk',sans-serif;}
.pfQLab .gi{width:14px;height:14px;fill:rgba(34,211,238,.85);}
.pfQNum{width:74px;text-align:center;background:rgba(255,255,255,.05);border:1px solid rgba(34,211,238,.25);border-radius:8px;color:#fff;font-size:12px;padding:7px 4px;font-family:'Space Grotesk',sans-serif;}
.pfQUnit{flex:1;min-width:0;background:rgba(255,255,255,.05);border:1px solid rgba(34,211,238,.25);border-radius:8px;color:#fff;font-size:12px;padding:7px 9px;font-family:'Space Grotesk',sans-serif;}
.pfTaskQ{display:inline-block;margin-left:6px;font-size:9.5px;font-weight:800;color:rgba(103,232,249,.95);letter-spacing:.2px;}
/* ══ DÉJÀ POSÉ ≠ EN TRAIN D'ÊTRE AJOUTÉ ═══════════════════════════
   Les deux se ressemblaient trait pour trait : on ne savait plus ce qui
   était enregistré. Le VERT dit « tenu, c'est en base » partout dans le
   produit : il dit la même chose ici, avec un liseré à gauche que le
   brouillon (violet, plus vif) n'a pas. */
.pfDoneHead{display:flex;align-items:center;gap:7px;margin-top:15px;font-size:10px;font-weight:800;letter-spacing:1.6px;text-transform:uppercase;color:rgba(134,239,172,.85);font-family:'Space Grotesk',sans-serif;}
.pfDoneHead .gi{width:13px;height:13px;flex:none;fill:rgba(134,239,172,.9);}
.pfDoneHead span{white-space:nowrap;}
.pfDoneHead em{flex:none;margin-left:auto;font-style:normal;font-size:11px;font-weight:800;color:rgba(134,239,172,.95);background:rgba(34,197,94,.14);border:1px solid rgba(34,197,94,.3);border-radius:99px;min-width:22px;text-align:center;padding:1px 7px;}
.pfExistList{display:flex;flex-direction:column;gap:5px;margin:7px 0 2px;}
.pfExRow{display:flex;align-items:center;gap:6px;background:rgba(34,197,94,.05);border:1px solid rgba(34,197,94,.16);border-left:3px solid rgba(34,197,94,.5);border-radius:9px;padding:7px 9px;}
.pfExTxt{flex:1;min-width:0;font-size:12px;color:rgba(255,255,255,.82);font-family:'Space Grotesk',sans-serif;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.pfExEdit,.pfExDel{flex:none;width:28px;height:26px;border-radius:7px;border:1px solid rgba(255,255,255,.12);background:rgba(255,255,255,.05);color:rgba(255,255,255,.7);cursor:pointer;font-size:12px;-webkit-tap-highlight-color:transparent;}
.pfExEdit:active,.pfExDel:active{transform:scale(.92);}
.pfExDel{color:rgba(248,113,113,.85);border-color:rgba(248,113,113,.3);}
.vptEdit{flex:none;width:26px;height:24px;margin-left:6px;border-radius:7px;border:1px solid rgba(255,255,255,.12);background:rgba(255,255,255,.05);color:rgba(255,255,255,.65);cursor:pointer;font-size:11px;-webkit-tap-highlight-color:transparent;}
.vptEdit:active{transform:scale(.9);}
.pfList{display:flex;flex-direction:column;gap:6px;margin-top:10px;max-height:170px;overflow-y:auto;overscroll-behavior:contain;}
.pfTask{display:flex;align-items:center;gap:9px;padding:9px 11px;border-radius:11px;border:1px solid rgba(255,255,255,.07);background:rgba(255,255,255,.03);animation:pfIn .22s ease-out;}
@keyframes pfIn{from{opacity:0;transform:translateY(-5px);}to{opacity:1;transform:none;}}
.pfTaskDot{width:6px;height:6px;border-radius:50%;background:rgba(167,139,250,.75);box-shadow:0 0 6px rgba(167,139,250,.5);flex:none;}
.pfTaskTxt{flex:1;font-size:13px;color:rgba(255,255,255,.85);font-family:'Space Grotesk',sans-serif;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.pfTaskDel{flex:none;background:none;border:none;color:rgba(255,255,255,.28);font-size:13px;cursor:pointer;padding:3px 5px;border-radius:6px;transition:color .15s ease;-webkit-tap-highlight-color:transparent;}
.pfTaskDel:hover{color:rgba(252,165,165,.9);}
.pfExisting{font-size:10px;font-weight:700;color:rgba(255,255,255,.35);background:rgba(255,255,255,.05);border-radius:99px;padding:2px 8px;margin-left:6px;letter-spacing:.3px;}

/* La Faveur du Sommet (chip présence, dash) */
.fvChip{display:flex;align-items:center;gap:10px;margin:10px 0;padding:9px 14px;border-radius:14px;border:1px solid rgba(253,230,138,.18);background:linear-gradient(160deg,rgba(253,230,138,.06),rgba(253,230,138,.01) 65%);font-family:'Space Grotesk',sans-serif;}
.fvChip .gi{width:14px;height:14px;flex:none;fill:url(#giGold);}
.fvDay{flex:none;font-size:11px;font-weight:800;color:rgba(253,230,138,.9);white-space:nowrap;}
.fvBar{flex:0 1 90px;height:5px;border-radius:3px;background:rgba(255,255,255,.08);overflow:hidden;}
.fvBarFill{display:block;height:100%;border-radius:3px;background:linear-gradient(90deg,rgba(253,230,138,.5),rgba(253,230,138,.95));}
.fvTxt{flex:1;font-size:10.5px;color:rgba(255,255,255,.5);}
.tbFaveur{margin:7px 0 2px;font-size:10.5px;font-weight:700;color:rgba(253,230,138,.75);font-family:'Space Grotesk',sans-serif;}
.gearFaveur{margin-left:10px;font-family:'Space Grotesk',sans-serif;font-size:10px;font-weight:800;color:rgba(253,230,138,.65);}
/* Première Ascension */
.ascCard{display:flex;flex-direction:column;gap:7px;margin:10px 0;padding:12px 15px;border-radius:14px;border:1px solid rgba(167,139,250,.3);background:linear-gradient(160deg,rgba(167,139,250,.08),rgba(167,139,250,.015) 65%);}
.ascDots{display:flex;gap:5px;}
.ascDot{width:8px;height:8px;border-radius:50%;background:rgba(255,255,255,.12);}
.ascDot.done{background:rgba(167,139,250,.85);}
.ascDot.cur{background:#c4b5fd;box-shadow:0 0 8px rgba(196,181,253,.8);}
.ascTxt{font-size:11.5px;line-height:1.55;color:rgba(255,255,255,.68);font-family:'Space Grotesk',sans-serif;}
.ascTxt strong{color:rgba(196,181,253,.95);}
.ascTxt em{font-style:normal;font-weight:800;color:rgba(253,230,138,.85);}
/* Carte de CLÔTURE de l'Ascension (accomplie) : registre or, un bouton pour la fermer */
.ascCard.ascDone{border-color:rgba(251,191,36,.34);background:linear-gradient(160deg,rgba(251,191,36,.1),rgba(251,191,36,.02) 65%);}
.ascCard.ascDone .ascTxt strong{color:#fde68a;}
.ascCard.ascDone .ascDot.done{background:rgba(251,191,36,.85);}
.ascCard.ascDone .ascTxt strong .gi{width:14px;height:14px;fill:#fbbf24;vertical-align:-2px;}
.ascCloseBtn{align-self:flex-start;margin-top:4px;border-color:rgba(251,191,36,.4);color:rgba(253,230,138,.95);}
/* Bouton partager (fiche de héros) */
.phShareBtn{cursor:pointer;border-color:rgba(96,165,250,.4);background:rgba(96,165,250,.08);}
.phShareBtn strong{color:#93c5fd;}
/* Archives du Sommet */
.archivesSection{margin-top:14px;padding:16px;border-radius:18px;border:1px solid rgba(255,255,255,.09);background:rgba(255,255,255,.02);}
.archItem{border-bottom:1px solid rgba(255,255,255,.06);padding:2px 0;}
.archItem summary{cursor:pointer;padding:10px 2px;font-family:'Space Grotesk',sans-serif;font-size:12.5px;font-weight:800;color:rgba(253,230,138,.85);list-style:none;}
.archItem summary::-webkit-details-marker{display:none;}
.archItem summary::before{content:'◆ ';color:rgba(251,191,36,.5);}
.archItem p{padding:0 2px 12px;font-size:12px;line-height:1.65;color:rgba(255,255,255,.6);font-family:'Space Grotesk',sans-serif;font-style:italic;}
.archItem.locked{padding:10px 2px;font-size:11px;color:rgba(255,255,255,.28);font-family:'Space Grotesk',sans-serif;}
.archItem.locked span{font-weight:800;letter-spacing:1.4px;text-transform:uppercase;font-size:9px;border:1px solid rgba(255,255,255,.12);border-radius:99px;padding:2px 8px;margin-right:4px;}

/* ── Chat mentor ── */
.mtChatCard{border-radius:18px;border:1px solid rgba(255,255,255,.1);background:rgba(255,255,255,.03);padding:14px 14px 12px;margin-bottom:12px;}
.mtChatHead{display:flex;align-items:center;justify-content:space-between;margin-bottom:10px;}
.mtChatTitle{font-family:'Syne',sans-serif;font-weight:800;font-size:13px;color:#fff;letter-spacing:-.2px;}
.mtChatQuota{font-size:9.5px;font-weight:700;letter-spacing:1.2px;text-transform:uppercase;font-family:'Space Grotesk',sans-serif;background:linear-gradient(90deg,var(--mc1),var(--mc2));-webkit-background-clip:text;background-clip:text;color:transparent;}
.mtChatMsgs{display:flex;flex-direction:column;gap:8px;max-height:320px;overflow-y:auto;padding:2px 2px 6px;overscroll-behavior:contain;}
.mtChatEmpty{font-size:11.5px;color:rgba(255,255,255,.4);line-height:1.5;font-style:italic;padding:10px 4px;}
.mcRow{display:flex;align-items:flex-end;gap:7px;}
.mcRow.mcRight{justify-content:flex-end;}
.mcAva{width:28px;height:28px;border-radius:50%;display:flex;align-items:center;justify-content:center;flex-shrink:0;}
.mcMsg{max-width:82%;padding:9px 12px;font-size:12.5px;line-height:1.5;font-family:'Space Grotesk',sans-serif;white-space:pre-wrap;word-break:break-word;animation:mcIn .25s cubic-bezier(.22,1,.36,1) both;}
@keyframes mcIn{from{opacity:0;transform:translateY(5px);}to{opacity:1;transform:none;}}
.mcMentor{border-radius:14px 14px 14px 4px;border:1px solid rgba(255,255,255,.1);background:rgba(255,255,255,.05);color:rgba(255,255,255,.9);}
.mcUser{border-radius:14px 14px 4px 14px;background:linear-gradient(135deg,var(--mc1),var(--mc2));color:#fff;font-weight:600;}
.mcTyping{display:flex;gap:4px;align-items:center;padding:12px 14px;}
.mcTyping span{width:6px;height:6px;border-radius:50%;background:rgba(255,255,255,.55);animation:mcDot 1.1s infinite ease-in-out;}
.mcTyping span:nth-child(2){animation-delay:.15s;}
.mcTyping span:nth-child(3){animation-delay:.3s;}
@keyframes mcDot{0%,60%,100%{transform:translateY(0);opacity:.4;}30%{transform:translateY(-4px);opacity:1;}}
.mtChatBar{display:flex;gap:7px;margin-top:10px;}
.mtChatInput{flex:1;min-width:0;padding:11px 13px;border-radius:13px;border:1px solid rgba(255,255,255,.14);background:rgba(255,255,255,.05);color:#fff;font-size:13px;font-family:'Space Grotesk',sans-serif;outline:none;transition:border-color .15s ease;}
.mtChatInput:focus{border-color:var(--mc1);}
.mtChatInput::placeholder{color:rgba(255,255,255,.28);}
.mtChatInput:disabled{opacity:.5;}
.mtChatSend{width:42px;border:none;border-radius:13px;background:linear-gradient(135deg,var(--mc1),var(--mc2));color:#fff;font-size:15px;cursor:pointer;transition:transform .15s ease,opacity .15s ease;flex-shrink:0;}
.mtChatSend:hover:not(:disabled){transform:translateY(-1px);}
.mtChatSend:disabled{opacity:.35;cursor:default;}

/* ── Session cédée (autre appareil) ── */
.slOv{position:fixed;inset:0;z-index:99996;display:flex;align-items:center;justify-content:center;padding:22px;background:rgba(4,6,12,.82);backdrop-filter:blur(20px);-webkit-backdrop-filter:blur(20px);}
.slOv.hidden{display:none;}
.slCard{width:100%;max-width:380px;border-radius:22px;border:1px solid rgba(255,255,255,.12);background:rgba(10,12,20,.96);padding:28px 24px 22px;text-align:center;animation:slIn .3s cubic-bezier(.22,1,.36,1) both;}
@keyframes slIn{from{opacity:0;transform:translateY(10px) scale(.97);}to{opacity:1;transform:none;}}
.slIcon{font-size:38px;margin-bottom:12px;}
.slTitle{font-family:'Syne',sans-serif;font-size:19px;font-weight:800;color:#fff;letter-spacing:-.3px;margin-bottom:8px;}
.slText{font-size:12.5px;color:rgba(255,255,255,.55);line-height:1.55;margin-bottom:20px;font-family:'Space Grotesk',sans-serif;}
.slResume{width:100%;padding:14px;border:none;border-radius:14px;background:linear-gradient(135deg,#60a5fa,#a78bfa);color:#fff;font-weight:800;font-size:12px;text-transform:uppercase;letter-spacing:.8px;cursor:pointer;font-family:'Space Grotesk',sans-serif;transition:transform .15s ease,box-shadow .15s ease;margin-bottom:9px;}
.slResume:hover{transform:translateY(-1px);box-shadow:0 10px 28px -12px #a78bfa;}
.slLogout{width:100%;padding:12px;border-radius:14px;border:1px solid rgba(255,255,255,.14);background:transparent;color:rgba(255,255,255,.55);font-weight:700;font-size:11px;text-transform:uppercase;letter-spacing:.6px;cursor:pointer;font-family:'Space Grotesk',sans-serif;transition:all .15s ease;}
.slLogout:hover{border-color:rgba(255,255,255,.3);color:#fff;}

/* ── Questionnaire overlay ── */
.mqOv{position:fixed;inset:0;z-index:99990;display:flex;align-items:center;justify-content:center;padding:18px;background:rgba(4,6,12,.72);backdrop-filter:blur(18px);-webkit-backdrop-filter:blur(18px);opacity:0;pointer-events:none;transition:opacity .22s ease;}
.mqOv.show{opacity:1;pointer-events:auto;}
.mqOv.hidden{display:none;}
.mqCard{width:100%;max-width:460px;max-height:86vh;overflow-y:auto;border-radius:22px;border:1px solid rgba(255,255,255,.12);background:rgba(10,12,20,.94);padding:22px;position:relative;transform:translateY(8px) scale(.98);transition:transform .25s cubic-bezier(.22,1,.36,1);}
.mqOv.show .mqCard{transform:none;}
.mqTop{display:flex;align-items:center;gap:11px;}
.mqMini{width:40px;height:40px;border-radius:50%;display:flex;align-items:center;justify-content:center;flex-shrink:0;}
.mqWho{flex:1;min-width:0;}
.mqWhoName{font-family:'Syne',sans-serif;font-weight:800;font-size:15px;color:#fff;}
.mqStep{font-size:9.5px;color:rgba(255,255,255,.4);letter-spacing:1.2px;text-transform:uppercase;font-weight:700;margin-top:1px;font-family:'Space Grotesk',sans-serif;}
.mqClose{border:none;background:rgba(255,255,255,.06);color:rgba(255,255,255,.6);width:32px;height:32px;border-radius:10px;cursor:pointer;font-size:13px;flex-shrink:0;transition:background .15s ease;}
.mqClose:hover{background:rgba(255,255,255,.12);}
.mqProg{height:4px;border-radius:99px;background:rgba(255,255,255,.08);margin:14px 0 18px;overflow:hidden;}
.mqProgFill{height:100%;border-radius:99px;background:linear-gradient(90deg,var(--mc1),var(--mc2));transition:width .35s cubic-bezier(.22,1,.36,1);}
.mqDialogue{display:flex;align-items:flex-end;gap:10px;margin-bottom:14px;}
.mqDlgAvatar{width:36px;height:36px;border-radius:50%;display:flex;align-items:center;justify-content:center;flex-shrink:0;box-shadow:0 4px 14px -6px var(--mc2);}
.mqBubble{position:relative;flex:1;min-width:0;padding:13px 15px;border-radius:16px 16px 16px 5px;border:1px solid rgba(255,255,255,.1);background:rgba(255,255,255,.045);animation:mqBubbleIn .32s cubic-bezier(.22,1,.36,1) both;}
.mqBubble::before{content:'';position:absolute;left:-1px;bottom:-1px;width:14px;height:14px;border-radius:0 0 0 14px;background:linear-gradient(135deg,var(--mc1),var(--mc2));opacity:.18;pointer-events:none;}
@keyframes mqBubbleIn{from{opacity:0;transform:translateY(6px) scale(.98);}to{opacity:1;transform:none;}}
.mqSay{font-size:12px;font-style:italic;line-height:1.45;margin-bottom:8px;font-family:'Space Grotesk',sans-serif;background:linear-gradient(90deg,var(--mc1),var(--mc2));-webkit-background-clip:text;background-clip:text;color:transparent;font-weight:600;}
.mqLabel{font-family:'Syne',sans-serif;font-size:16px;font-weight:700;line-height:1.35;letter-spacing:-.2px;color:#fff;}
.mqInput{width:100%;padding:13px 14px;border-radius:13px;border:1px solid rgba(255,255,255,.14);background:rgba(255,255,255,.05);color:#fff;font-size:14px;font-family:'Space Grotesk',sans-serif;outline:none;transition:border-color .15s ease;box-sizing:border-box;}
.mqInput:focus{border-color:var(--mc1);}
.mqInput::placeholder{color:rgba(255,255,255,.28);}
.mqArea{min-height:110px;resize:vertical;line-height:1.5;}
.mqOpts{display:flex;flex-wrap:wrap;gap:7px;max-height:250px;overflow-y:auto;padding-right:2px;}
.mqOpt{padding:9px 13px;border-radius:11px;border:1px solid rgba(255,255,255,.12);background:rgba(255,255,255,.04);color:rgba(255,255,255,.75);font-size:12px;font-weight:600;cursor:pointer;font-family:'Space Grotesk',sans-serif;transition:border-color .15s ease,background .15s ease,color .15s ease;-webkit-tap-highlight-color:transparent;}
@media(hover:hover){.mqOpt:hover{border-color:rgba(255,255,255,.3);color:#fff;}}
.mqOpt.sel{border-color:var(--mc1);background:linear-gradient(135deg,var(--mc1),var(--mc2));color:#fff;}
.mqChoices{flex-direction:column;flex-wrap:nowrap;}
.mqChoices .mqOpt{width:100%;text-align:left;padding:13px 14px;font-size:13px;}
.mqNav{display:flex;justify-content:space-between;margin-top:16px;gap:8px;}
/* RÉCAP des réponses mentor : retouche d'un tap, pas de repasser les 8 questions */
.mqReviewHint{font-size:12px;color:rgba(255,255,255,.55);margin:2px 2px 12px;line-height:1.45;}
.mqReviewList{display:flex;flex-direction:column;gap:7px;max-height:calc(100vh - 260px);overflow-y:auto;-webkit-overflow-scrolling:touch;}
.mqReviewRow{display:flex;align-items:center;gap:10px;width:100%;text-align:left;padding:11px 13px;border-radius:13px;border:1px solid rgba(255,255,255,.1);background:rgba(255,255,255,.04);cursor:pointer;transition:border-color .15s ease,background .15s ease;-webkit-tap-highlight-color:transparent;}
.mqReviewRow:active{transform:scale(.99);}
@media(hover:hover){.mqReviewRow:hover{border-color:var(--mc1,rgba(167,139,250,.5));background:rgba(255,255,255,.06);}}
.mqRvQ{flex:none;width:44%;font-size:11px;font-weight:700;color:rgba(255,255,255,.5);font-family:'Space Grotesk',sans-serif;line-height:1.3;}
.mqRvA{flex:1;min-width:0;font-size:13px;color:#fff;font-family:'Space Grotesk',sans-serif;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.mqRvGo{flex:none;color:var(--mc1,rgba(167,139,250,.85));font-size:13px;}
.mqBack{padding:13px 16px;border-radius:13px;border:1px solid rgba(255,255,255,.14);background:transparent;color:rgba(255,255,255,.6);cursor:pointer;font-weight:700;font-size:11px;text-transform:uppercase;letter-spacing:.6px;font-family:'Space Grotesk',sans-serif;transition:all .15s ease;}
.mqBack:hover{border-color:rgba(255,255,255,.3);color:#fff;}
.mqNext{flex:1;padding:13px;border-radius:13px;border:none;background:linear-gradient(135deg,var(--mc1),var(--mc2));color:#fff;font-weight:800;font-size:11px;text-transform:uppercase;letter-spacing:.8px;cursor:pointer;font-family:'Space Grotesk',sans-serif;transition:transform .15s ease,box-shadow .15s ease;}
.mqNext:hover{transform:translateY(-1px);box-shadow:0 8px 24px -10px var(--mc2);}
.mqNext:active{transform:scale(.98);}

/* ── TRONCATURE (navigateur mobile, 13 juillet) : une carte plus haute que le
   viewport (clavier ouvert, barre d'URL) était coupée par le centrage vertical.
   Overlay scrollable + margin:auto sur la carte : centrée quand ça tient,
   scrollable quand ça déborde, jamais coupée (pattern authRoot).
   Le flou reste en place partout (retour user : le blur n'était pas le problème),
   seul le mode .lowFx adaptatif le coupe sur les appareils qui rament. ── */
@media(max-width:900px){
  .vtreeGuideOv{align-items:flex-start;overflow-y:auto;-webkit-overflow-scrolling:touch;overscroll-behavior:contain;}
  .vtreeGuideCard{margin:auto;max-height:none;overflow-y:visible;}
}
body.lowFx .vtreeGuideOv,body.lowFx .vModalOv,body.lowFx .qQuantModalOv,body.lowFx .cfmOv,body.lowFx .dayOv,body.lowFx .mqOv{
  backdrop-filter:none!important;-webkit-backdrop-filter:none!important;
  background:rgba(5,8,15,.93);
}

/* Les Échéances du Sommet : événements dans le calendrier */
.calEvent{position:absolute;top:1px;right:1px;display:flex;}
/* Marqueur de mouvement Vision : anneau CREUX (≠ pastille pleine des tâches), bas-gauche */
.calMove{position:absolute;bottom:2px;left:2px;width:7px;height:7px;border-radius:50%;border:1.5px solid rgba(167,139,250,.9);background:transparent;box-shadow:0 0 3px rgba(167,139,250,.45);pointer-events:none;}
.calEvent .gi{width:9px;height:9px;fill:url(#giGold);}
.calDay.hasEvent{border-color:rgba(251,191,36,.35);}
.hhNextEv{grid-column:1/-1;display:flex;align-items:center;justify-content:center;gap:8px;margin-top:8px;padding:8px 12px;border-radius:11px;border:1px solid rgba(251,191,36,.25);background:rgba(251,191,36,.05);font-size:11px;color:rgba(255,255,255,.55);font-family:'Space Grotesk',sans-serif;}
.hhNextEv strong{color:#fde68a;}
.hhNextEv .gi{width:13px;height:13px;fill:url(#giGold);flex:none;}
/* Indicateur discret du mouvement Vision (registre) — neutre, sobre, tappable */
.hhMoveChip{grid-column:1/-1;display:flex;align-items:center;justify-content:center;gap:7px;margin-top:8px;padding:7px 12px;border-radius:11px;border:1px solid rgba(200,190,255,.18);background:rgba(200,190,255,.05);font-size:11px;color:rgba(200,190,255,.7);font-family:'Space Grotesk',sans-serif;cursor:pointer;}
.hhMoveChip .gi{width:12px;height:12px;fill:rgba(200,190,255,.6);flex:none;}
.hhNextEv.today{border-color:rgba(251,191,36,.55);background:rgba(251,191,36,.12);color:#fde68a;}

/* Le Conseil des Mentors (client) : bannière + comparaison des 6 avis */
.cseBanner{position:relative;overflow:hidden;margin:0 0 12px;padding:15px 16px;border-radius:15px;border:1px solid rgba(251,191,36,.4);background:linear-gradient(155deg,rgba(251,191,36,.1),rgba(167,139,250,.06) 60%,rgba(251,191,36,.02));cursor:pointer;}
.cseBanner.cseP{border-color:rgba(255,255,255,.12);background:rgba(255,255,255,.03);}
.cseGlow{position:absolute;top:-40px;right:-30px;width:140px;height:140px;border-radius:50%;background:radial-gradient(circle,rgba(251,191,36,.28),transparent 68%);pointer-events:none;animation:cseGlowPulse 2.6s ease-in-out infinite;}
@keyframes cseGlowPulse{0%,100%{opacity:.5;}50%{opacity:1;}}
body.lowFx .cseGlow{animation:none;opacity:.7;}
.cseTitle{display:flex;align-items:center;gap:9px;font-family:'Syne',sans-serif;font-weight:800;font-size:15px;color:#fde68a;}
.cseBanner.cseP .cseTitle{color:rgba(255,255,255,.75);}
.cseTitle .gi{width:17px;height:17px;fill:url(#giGold);flex:none;}
.cseSub{margin-top:5px;font-size:11.5px;color:rgba(255,255,255,.55);line-height:1.55;font-family:'Space Grotesk',sans-serif;}
.cseChev{margin-top:8px;font-size:10px;font-weight:800;letter-spacing:.8px;text-transform:uppercase;color:rgba(251,191,36,.75);font-family:'Space Grotesk',sans-serif;}
.cseList{display:flex;flex-direction:column;gap:9px;margin:0 0 14px;}
.cseCard{padding:12px 14px;border-radius:13px;border:1px solid rgba(255,255,255,.1);background:linear-gradient(160deg,rgba(255,255,255,.04),rgba(255,255,255,.01));}
.cseCard.cseCur{border-color:var(--mc1);}
.cseHead{display:flex;align-items:center;gap:9px;}
.cseAva{width:34px;height:34px;flex:none;display:flex;}
.cseAva svg{width:100%;height:100%;}
.cseName{font-weight:800;font-size:13px;color:#fff;font-family:'Space Grotesk',sans-serif;}
.cseName em{font-style:normal;font-size:9px;font-weight:800;letter-spacing:.7px;text-transform:uppercase;color:var(--mc1);margin-left:6px;}
.cseTake{margin-top:8px;font-size:12px;color:rgba(255,255,255,.72);line-height:1.6;font-family:'Space Grotesk',sans-serif;}
.cseJoin{margin-top:9px;border-color:var(--mc1)!important;color:#fff!important;}
.cseJoin.cseOff{opacity:.4;pointer-events:none;}

/* Le Pacte : carte de réclamation (dash) */
.pcCard{margin:8px 0;padding:13px 15px;border-radius:14px;border:1px solid rgba(52,211,153,.4);background:linear-gradient(160deg,rgba(52,211,153,.09),rgba(52,211,153,.015) 65%);}
.pcTitle{display:flex;align-items:center;gap:8px;font-size:13px;font-weight:800;color:#6ee7b7;font-family:'Space Grotesk',sans-serif;}
.pcTitle .gi{width:15px;height:15px;fill:#6ee7b7;flex:none;}
.pcBody{margin:7px 0 10px;font-size:12px;color:rgba(255,255,255,.65);line-height:1.6;font-family:'Space Grotesk',sans-serif;}

/* La Redescente (Prestige) */
.prsCard{margin:10px 0;padding:14px 16px;border-radius:15px;border:1px solid rgba(251,191,36,.4);background:linear-gradient(160deg,rgba(251,191,36,.08),rgba(167,139,250,.04) 65%);}
.prsHead{display:flex;align-items:center;gap:9px;font-family:'Syne',sans-serif;font-weight:800;font-size:14px;color:#fde68a;}
.prsHead .gi{width:16px;height:16px;fill:url(#giGold);flex:none;}
.prsStars{color:#fbbf24;letter-spacing:2px;font-size:13px;}
.prsSub{margin-top:4px;font-size:10.5px;font-weight:800;letter-spacing:.6px;text-transform:uppercase;color:rgba(251,191,36,.7);font-family:'Space Grotesk',sans-serif;}
.prsTxt{margin:8px 0 10px;font-size:12px;color:rgba(255,255,255,.6);line-height:1.6;font-family:'Space Grotesk',sans-serif;}
.ctFix{display:block;margin-top:6px;font-size:9.5px!important;padding:5px 10px!important;border-color:rgba(251,191,36,.35)!important;color:#fde68a!important;}

/* Les Étoiles de la Redescente : emblème (une étoile or par Redescente) */
.prsRow{display:inline-flex;align-items:center;gap:3px;margin-right:7px;vertical-align:-2px;}
.prsStar{width:var(--prsz,15px);height:var(--prsz,15px);display:inline-flex;filter:drop-shadow(0 0 5px rgba(251,191,36,.85)) drop-shadow(0 0 12px rgba(251,191,36,.35));animation:prsPop .5s cubic-bezier(.34,1.56,.64,1) backwards;}
.prsStar:nth-child(2){animation-delay:.07s;}.prsStar:nth-child(3){animation-delay:.14s;}.prsStar:nth-child(4){animation-delay:.21s;}.prsStar:nth-child(5){animation-delay:.28s;}
.prsStar .gi{width:100%;height:100%;fill:url(#giGold);}
.prsMore{font-size:10px;font-weight:800;color:#fbbf24;font-family:'Space Grotesk',sans-serif;}
@keyframes prsPop{from{opacity:0;transform:scale(.2) rotate(-72deg);}to{opacity:1;transform:none;}}
body.lowFx .prsStar{animation:none;}

/* Étoile prismatique majeure (5 Redescentes fusionnées) */
.prsStar.maj{width:calc(var(--prsz,15px)*1.3);height:calc(var(--prsz,15px)*1.3);filter:drop-shadow(0 0 6px rgba(167,139,250,.9)) drop-shadow(0 0 14px rgba(244,114,182,.4));}
.prsStar.maj .gi{fill:url(#giGrad);}
.prsRow{cursor:pointer;}
/* La Carte du Redescendu : sceau sombre, esprit licence */
.prcOv{position:fixed;inset:0;z-index:99992;display:flex;align-items:center;justify-content:center;padding:20px;background:rgba(3,4,8,.88);backdrop-filter:blur(10px);opacity:0;pointer-events:none;transition:opacity .25s ease;}
.prcOv.show{opacity:1;pointer-events:auto;}
.prcCard{position:relative;overflow:hidden;width:min(360px,92vw);padding:22px 22px 18px;border-radius:18px;border:1px solid rgba(251,191,36,.5);background:linear-gradient(150deg,#14101c,#0a0810 55%,#120e18);box-shadow:0 24px 70px rgba(0,0,0,.7),inset 0 0 40px rgba(251,191,36,.05);text-align:left;transform:rotate(-.5deg);}
.prcWm{position:absolute;right:-28px;bottom:-30px;opacity:.07;pointer-events:none;}
.prcWm .gi{width:190px;height:190px;fill:#fbbf24;}
.prcTop{display:flex;justify-content:space-between;align-items:center;}
.prcBrand{font-family:'Syne',sans-serif;font-weight:800;font-size:13px;letter-spacing:5px;color:#fff;}
.prcBrand em{font-style:normal;color:#a78bfa;}
.prcSeal{font-size:9px;font-weight:800;letter-spacing:2px;color:rgba(251,191,36,.65);font-family:'Space Grotesk',sans-serif;}
.prcStars{margin:18px 0 4px;}
.prcName{font-family:'Syne',sans-serif;font-weight:800;font-size:24px;color:#fff;letter-spacing:.5px;}
.prcRank{margin-top:2px;font-size:10px;font-weight:800;letter-spacing:2.5px;color:#fbbf24;font-family:'Space Grotesk',sans-serif;}
.prcRow{display:flex;justify-content:space-between;margin-top:11px;padding-top:9px;border-top:1px solid rgba(255,255,255,.07);font-size:11px;color:rgba(255,255,255,.5);font-family:'Space Grotesk',sans-serif;}
.prcRow em{font-style:normal;font-weight:800;color:#fff;}
.prcQuote{margin-top:14px;font-size:11px;font-style:italic;color:rgba(251,191,36,.55);line-height:1.6;font-family:'Space Grotesk',sans-serif;}
.prcClose{margin-top:14px;width:100%;}
.prcBtns{display:flex;gap:8px;margin-top:14px;}
.prcBtns .btnTiny{flex:1;}
.prcClose{margin-top:0;width:auto;}
.vtreeJalons{display:inline-block;margin-left:6px;font-size:8.5px;font-weight:800;letter-spacing:.6px;text-transform:uppercase;color:#fde68a;border:1px solid rgba(251,191,36,.35);border-radius:99px;padding:2px 7px;vertical-align:1px;font-family:'Space Grotesk',sans-serif;}
.vtreeStepFlag{display:inline-flex;align-items:center;gap:3px;margin-left:6px;font-size:8.5px;font-weight:800;letter-spacing:.5px;text-transform:uppercase;color:rgba(251,191,36,.9);border:1px dashed rgba(251,191,36,.4);border-radius:99px;padding:2px 7px;vertical-align:1px;font-family:'Space Grotesk',sans-serif;}
.vtreeStepFlag .gi{width:9px;height:9px;fill:rgba(251,191,36,.9);}
.constFoot{padding:8px 12px calc(16px + env(safe-area-inset-bottom));display:flex;justify-content:center;}
.constFoot .constLinkBtn{font-size:13px;padding:9px 16px;}
.constFootNote{padding:6px 16px calc(16px + env(safe-area-inset-bottom));font-size:11.5px;color:rgba(251,191,36,.7);text-align:center;display:flex;align-items:center;justify-content:center;gap:5px;}
.constFootNote .gi{width:12px;height:12px;fill:rgba(251,191,36,.7);}

/* La Cordée (donjon coopératif) */
.coCard{margin:8px 0;padding:13px 15px;border-radius:14px;border:1px solid rgba(45,212,191,.4);background:linear-gradient(160deg,rgba(45,212,191,.08),rgba(45,212,191,.015) 65%);}
.coHead{display:flex;align-items:center;gap:8px;flex-wrap:wrap;font-size:12.5px;font-weight:800;color:#5eead4;font-family:'Space Grotesk',sans-serif;}
.coHead .gi{width:15px;height:15px;fill:#5eead4;flex:none;}
.coFalls{margin-left:auto;font-size:10px;font-weight:800;letter-spacing:.6px;color:rgba(253,230,138,.85);}
.coMembers{margin-top:6px;font-size:11px;color:rgba(255,255,255,.55);font-family:'Space Grotesk',sans-serif;}
.coMe{margin-top:7px;font-size:11.5px;font-weight:700;color:rgba(255,255,255,.75);font-family:'Space Grotesk',sans-serif;}
.coCard.coBroken{border-color:rgba(239,68,68,.4);background:linear-gradient(160deg,rgba(239,68,68,.08),rgba(239,68,68,.015) 65%);}
.coCard.coBroken .coHead{color:#fca5a5;}
.coCard.coBroken .coHead .gi{fill:#fca5a5;}
.coCard.coSummit{border-color:rgba(251,191,36,.5);background:linear-gradient(160deg,rgba(251,191,36,.1),rgba(251,191,36,.02) 65%);}
.coCard.coSummit .coHead{color:#fde68a;}
.coCard.coSummit .coHead .gi{fill:url(#giGold);}
.coFoot{border-color:rgba(45,212,191,.28)!important;}
.coFoot .dlFootTxt strong{background:linear-gradient(90deg,#5eead4,#86efac);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;}
.coFoot .dlFootTxt .gi{fill:#5eead4;}
.dayTag.tagQuant{--tg1:#22d3ee;--tg2:#6366f1;}
.vtreeQuant{display:inline-flex;align-items:center;gap:4px;margin-left:6px;font-size:8.5px;font-weight:800;letter-spacing:.5px;text-transform:uppercase;color:#67e8f9;border:1px solid rgba(34,211,238,.35);border-radius:99px;padding:2px 7px;vertical-align:1px;font-family:'Space Grotesk',sans-serif;}
.vtreeQuant .gi{width:9px;height:9px;fill:#67e8f9;}
.dayTag.tagJoute{--tg1:#f87171;--tg2:#b91c1c;}
.hhPlanChip{cursor:pointer;}

/* FPS : les doubles drop-shadow des étoiles coûtent cher sur GPU faible ;
   en lowFx (appareil qui rame/chauffe) : lueur simple, même dessin */
body.lowFx .prsStar,body.lowFx .prsStar.maj{filter:drop-shadow(0 0 4px rgba(251,191,36,.6));}
body.lowFx .cseGlow,body.lowFx .dlShowGlow{display:none;}
body.lowFx .shmChip{transition:opacity .15s ease;}

/* Atterrissage des compteurs de stats : pop bref, composité (scale/opacité) */
.phLand{animation:phLandPop .38s cubic-bezier(.34,1.56,.64,1);}
@keyframes phLandPop{0%{transform:scale(1);}45%{transform:scale(1.14);}100%{transform:scale(1);}}
body.lowFx .phLand{animation:none;}

/* Explications visuelles (taux de réussite, planification) */
.exBig{text-align:center;margin:4px 0 12px;}
.exPct{display:block;font-family:'Syne',sans-serif;font-weight:800;font-size:52px;line-height:1;background:linear-gradient(90deg,#60a5fa,#a78bfa);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;}
.exSub{display:block;margin-top:4px;font-size:11px;color:rgba(255,255,255,.5);font-family:'Space Grotesk',sans-serif;}
.exBars{display:flex;align-items:flex-end;gap:2px;height:52px;margin:6px 0 10px;justify-content:center;}
.exBar{flex:0 1 9px;max-width:9px;height:100%;display:flex;align-items:flex-end;background:rgba(255,255,255,.05);border-radius:3px;overflow:hidden;}
.exBar i{display:block;width:100%;background:linear-gradient(180deg,#60a5fa,#a78bfa);border-radius:3px;}
.exBar.full i{background:linear-gradient(180deg,#4ade80,#16a34a);}
.exBar.zero i{background:rgba(248,113,113,.55);}
.exSplit{display:flex;height:14px;border-radius:99px;overflow:hidden;margin:6px 0 8px;}
.exSeg.gold{background:linear-gradient(90deg,#fbbf24,#d97706);}
.exSeg.grey{background:rgba(255,255,255,.14);}
.exLegs{display:flex;justify-content:center;gap:16px;font-size:10.5px;color:rgba(255,255,255,.6);font-family:'Space Grotesk',sans-serif;margin-bottom:10px;}
.exLegs i{display:inline-block;width:8px;height:8px;border-radius:2px;margin-right:5px;vertical-align:-1px;}
.exLegs i.gold{background:#fbbf24;}
.exLegs i.grey{background:rgba(255,255,255,.3);}
.exLine{font-size:11.5px;color:rgba(255,255,255,.6);line-height:1.55;font-family:'Space Grotesk',sans-serif;text-align:center;}
.exFoot{margin-top:8px;font-size:10.5px;font-style:italic;color:rgba(251,191,36,.6);text-align:center;font-family:'Space Grotesk',sans-serif;}

/* L'Observatoire du Sommet (explorateur de données, onglet Stats) */
#obsSection .chartTitle .gi{width:15px;height:15px;fill:url(#giGold);vertical-align:-2px;margin-right:4px;}
.obsSub{margin:-4px 0 10px;font-size:11px;color:rgba(255,255,255,.45);font-family:'Space Grotesk',sans-serif;}
.obsRow{display:flex;align-items:center;gap:5px;flex-wrap:wrap;margin-bottom:8px;}
.obsChip{padding:6px 11px;border-radius:99px;border:1px solid rgba(255,255,255,.12);background:rgba(255,255,255,.04);color:rgba(255,255,255,.6);font-size:10px;font-weight:800;font-family:'Space Grotesk',sans-serif;cursor:pointer;white-space:nowrap;-webkit-tap-highlight-color:transparent;}
.obsChip.on{border-color:rgba(251,191,36,.55);background:rgba(251,191,36,.12);color:#fde68a;}
.obsSep{flex-basis:100%;height:0;}
.obsFLab{flex-basis:100%;margin-top:4px;font-size:9px;font-weight:800;letter-spacing:1px;text-transform:uppercase;color:rgba(255,255,255,.35);font-family:'Space Grotesk',sans-serif;}
.obsNats{display:flex;gap:4px;flex-wrap:wrap;}
.obsNat{width:30px;height:30px;display:flex;align-items:center;justify-content:center;border-radius:9px;border:1px solid rgba(255,255,255,.1);background:rgba(255,255,255,.03);cursor:pointer;padding:0;-webkit-tap-highlight-color:transparent;}
.obsNat .gi{width:14px;height:14px;fill:rgba(255,255,255,.5);}
.obsNat.on{border-color:rgba(251,191,36,.6);background:rgba(251,191,36,.14);}
.obsNat.on .gi{fill:#fde68a;}
.obsBig{margin:12px 0 8px;text-align:center;}
.obsNum{font-family:'Syne',sans-serif;font-weight:800;font-size:40px;line-height:1;background:linear-gradient(90deg,#fbbf24,#f472b6);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;}
.obsNumSub{display:block;margin-top:4px;font-size:11px;color:rgba(255,255,255,.5);font-family:'Space Grotesk',sans-serif;}
.obsDayBars{display:flex;align-items:flex-end;gap:2px;height:74px;padding:2px;}
.obsDayBar{flex:1;min-width:2px;height:100%;display:flex;align-items:flex-end;background:rgba(255,255,255,.04);border-radius:2px;overflow:hidden;}
.obsDayBar i{display:block;width:100%;background:linear-gradient(180deg,#fbbf24,#d97706);border-radius:2px;}
.obsCatRow{display:flex;align-items:center;gap:8px;margin:6px 0;}
.obsCatIco{width:22px;height:22px;display:flex;align-items:center;justify-content:center;flex:none;}
.obsCatIco .gi{width:14px;height:14px;fill:rgba(196,181,253,.85);}
.obsCatName{flex:0 0 118px;font-size:11px;color:rgba(255,255,255,.7);font-family:'Space Grotesk',sans-serif;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.obsCatBar{flex:1;height:10px;border-radius:99px;background:rgba(255,255,255,.05);overflow:hidden;}
.obsCatBar i{display:block;height:100%;background:linear-gradient(90deg,#fbbf24,#f472b6);border-radius:99px;}
.obsCatN{flex:none;min-width:24px;text-align:right;font-size:12px;font-weight:800;color:#fff;font-family:'Space Grotesk',sans-serif;}

/* Le Plan du Sommet (proposition) */
.btnPlanSommet{border-color:rgba(251,191,36,.4)!important;color:#fde68a!important;}
.btnPlanSommet .gi{fill:url(#giGold)!important;}
.spMot{margin:4px 0 12px;padding:11px 14px;border-left:2px solid rgba(251,191,36,.5);font-size:12px;font-style:italic;color:rgba(253,230,138,.8);line-height:1.6;font-family:'Space Grotesk',sans-serif;text-align:left;}
.spSec{margin:13px 0 6px;font-size:10px;font-weight:800;letter-spacing:1.2px;text-transform:uppercase;color:rgba(255,255,255,.45);font-family:'Space Grotesk',sans-serif;text-align:left;}
.spItem{display:flex;align-items:flex-start;gap:9px;padding:8px 10px;border-radius:10px;border:1px solid rgba(255,255,255,.08);background:rgba(255,255,255,.03);margin-bottom:5px;cursor:pointer;text-align:left;}
.spItem input{margin-top:2px;accent-color:#fbbf24;flex:none;}
.spItemTxt{flex:1;font-size:12px;color:rgba(255,255,255,.8);line-height:1.5;font-family:'Space Grotesk',sans-serif;}
.spItemTxt .gi{width:12px;height:12px;fill:rgba(196,181,253,.8);vertical-align:-1px;margin-right:3px;}
.spItemTxt em{font-style:normal;font-size:9px;font-weight:800;letter-spacing:.5px;text-transform:uppercase;border-radius:99px;padding:2px 7px;margin-left:5px;white-space:nowrap;}
.spItemTxt em.spDiff{color:rgba(253,230,138,.8);border:1px solid rgba(251,191,36,.3);}
.spItemTxt em.spQuant{color:#67e8f9;border:1px solid rgba(34,211,238,.35);}
.obsChip.obsReset{border-color:rgba(248,113,113,.45);color:#fca5a5;flex-basis:100%;text-align:center;}
/* ⚠ flex-wrap OBLIGATOIRE : .spPlanRow porte width:100% pour descendre à la
   ligne. Sans wrap sur le PARENT, elle reste sur la même ligne et écrase tout
   (troncage vécu à 390 px, retour user). Toute rangée pleine largeur dans un
   flex exige le wrap du conteneur, jamais seulement son propre width. */
.spVisionEntry{display:flex;flex-wrap:wrap;align-items:center;gap:10px;margin:0 0 10px;padding:9px 13px;border-radius:12px;border:1px solid rgba(251,191,36,.28);background:rgba(251,191,36,.05);}
.spVeTxt{flex:1 1 140px;min-width:0;font-size:11px;color:rgba(253,230,138,.75);font-family:'Space Grotesk',sans-serif;display:flex;align-items:center;gap:7px;}
.spVeTxt .gi{width:13px;height:13px;fill:url(#giGold);flex:none;}
.vtreeBadge.vtreeSommet{border-color:rgba(251,191,36,.4);color:#fde68a;}
.vtreeBadge.vtreeSommet .gi{width:10px;height:10px;fill:url(#giGold);vertical-align:-1px;}
.vptSommet{flex:none;font-size:8.5px;font-weight:800;letter-spacing:.6px;text-transform:uppercase;color:rgba(253,230,138,.75);border:1px solid rgba(251,191,36,.3);border-radius:99px;padding:2px 7px;font-family:'Space Grotesk',sans-serif;}
.vPlannedTask .vptIcon .gi{width:13px;height:13px;fill:url(#giGold);}
.obsEmpty{position:static;min-height:90px;}
.spSecAn{color:#fde68a;}
.spSecAn .gi{width:12px;height:12px;fill:url(#giGold);vertical-align:-2px;margin-right:2px;}

/* ══ GOUVERNEUR D'INACTIVITÉ (.calmFx) ══
   60s sans geste : les pulsations DÉCORATIVES sont mises en pause (figées sur
   leur frame courante : le glow reste, il ne respire plus). Le moindre geste
   relance. Jamais les animations fonctionnelles (spinner, saisie, tuto). */
body.calmFx .shellAura,body.calmFx .shellAura::before,body.calmFx .shellAura::after,
body.calmFx #hudLevel,body.calmFx .pillGold,
body.calmFx .xpFill::after,body.calmFx .mhXpFill::after,body.calmFx .phXpFill::after,
body.calmFx .phAura,body.calmFx .phFlameOn,body.calmFx .phRecords::after,
body.calmFx .calDay.today::before,body.calmFx .calFlame,body.calmFx .dayProgFill.done::after,
body.calmFx .advStreakLost::after,body.calmFx .combatStatus.losing,
body.calmFx .avatarBadge,body.calmFx .mysterySlot.revealed,
body.calmFx .cseGlow,body.calmFx .prsStar,body.calmFx .vmpDot.cur,body.calmFx .cstPulse,
body.calmFx .dmBand.dmUpAble::before{animation-play-state:paused !important;}
.ldCalDay.b{background:rgba(96,165,250,.3);}
/* Halo verdict du quiz : la carte désignée s'allume aux couleurs du mentor.
   Transform+opacité seulement (règle FPS), 3 pulses puis extinction. */
.mgCard.mgSpot{border-color:var(--mc1);}
.mgCard.mgSpot::after{content:'';position:absolute;inset:0;border-radius:inherit;border:2px solid var(--mc1);box-shadow:inset 0 0 30px -8px var(--mc1);opacity:0;animation:mgSpotPulse 1s ease-in-out 3;pointer-events:none;}
@keyframes mgSpotPulse{0%,100%{opacity:0;}50%{opacity:1;}}
/* ══ LOIS : sceaux + mocks vivants (14 juillet, "plus imagé") ══
   Sceau = glyphe fantôme statique par Loi (zéro coût). Les animations des
   mocks sont ONE-SHOT au reveal (.ldVisible), jamais infinies : règle FPS. */
.ldSectSigil{position:absolute;right:-40px;bottom:-30px;width:min(300px,42vw);height:min(300px,42vw);fill:#fff;opacity:.045;transform:rotate(-8deg);pointer-events:none;}
.ldSect[data-loi="II"] .ldSectSigil,.ldSect[data-loi="IV"] .ldSectSigil,.ldSect[data-loi="VI"] .ldSectSigil{left:-40px;right:auto;transform:rotate(8deg);}
/* Loi 01 : la quête se coche sous tes yeux */
.ldAutoRow em{font-style:normal;opacity:0;}
.ldAutoRow .ldMockXp{color:rgba(255,255,255,.4);}
.ldSectVisual.ldVisible .ldAutoRow{animation:ldRowLand .5s ease 1.6s both;}
.ldSectVisual.ldVisible .ldAutoRow em{animation:ldFadePop .4s cubic-bezier(.34,1.56,.64,1) 1.7s both;}
@keyframes ldRowLand{0%{background:transparent;}100%{background:rgba(34,197,94,.08);}}
@keyframes ldFadePop{0%{opacity:0;transform:scale(.4);}100%{opacity:1;transform:scale(1);}}
/* Loi 02 : les barres de Vision se remplissent à la révélation */
.ldVisionBarFill{transform-origin:left;}
.ldSectVisual.ldVisible .ldVisionBarFill{animation:ldBarGrow 1.1s cubic-bezier(.22,1,.36,1) .35s both;}
@keyframes ldBarGrow{0%{transform:scaleX(0);}100%{transform:scaleX(1);}}
/* Loi 03 : le calendrier s'allume en cascade diagonale */
.ldSectVisual.ldVisible .ldCalDay{animation:ldCalPop .4s cubic-bezier(.34,1.56,.64,1) both;}
.ldSectVisual.ldVisible .ldCalDay:nth-child(-n+3){animation-delay:.1s;}
.ldSectVisual.ldVisible .ldCalDay:nth-child(n+4):nth-child(-n+6){animation-delay:.18s;}
.ldSectVisual.ldVisible .ldCalDay:nth-child(n+7):nth-child(-n+9){animation-delay:.26s;}
.ldSectVisual.ldVisible .ldCalDay:nth-child(n+10):nth-child(-n+12){animation-delay:.34s;}
.ldSectVisual.ldVisible .ldCalDay:nth-child(n+13):nth-child(-n+15){animation-delay:.42s;}
.ldSectVisual.ldVisible .ldCalDay:nth-child(n+16):nth-child(-n+18){animation-delay:.5s;}
.ldSectVisual.ldVisible .ldCalDay:nth-child(n+19){animation-delay:.58s;}
@keyframes ldCalPop{0%{opacity:0;transform:scale(.55);}100%{opacity:1;transform:scale(1);}}
/* Loi 04 : les deux jauges partent au duel */
.ldAdvBarFill{transform-origin:left;}
.ldSectVisual.ldVisible .ldAdvBarMe{animation:ldBarGrow 1.3s cubic-bezier(.22,1,.36,1) .4s both;}
.ldSectVisual.ldVisible .ldAdvBarFoe{animation:ldBarGrow 1.3s cubic-bezier(.22,1,.36,1) .65s both;}
/* ══ MONUMENTS : paliers + sous-étapes (préfixe vmp) ══ */
.vmpPalier{border:1px solid rgba(251,191,36,.18);border-radius:12px;padding:9px 11px;margin-bottom:8px;background:rgba(251,191,36,.04);}
.vmpPalier.done{border-color:rgba(34,197,94,.3);background:rgba(34,197,94,.05);}
.vmpPalierHead{font-size:11px;font-weight:800;letter-spacing:.4px;color:rgba(253,230,138,.9);margin-bottom:6px;font-family:'Space Grotesk',sans-serif;}
.vmpPalier.done .vmpPalierHead{color:rgba(134,239,172,.9);}
.vmpStep{display:flex;align-items:center;gap:8px;padding:4px 0;}
.vmpChk{width:20px;height:20px;flex:none;border-radius:6px;border:1px solid rgba(255,255,255,.25);background:rgba(255,255,255,.05);color:#86efac;font-size:12px;font-weight:800;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:border-color .15s,background .15s;}
.vmpStep.done .vmpChk{border-color:rgba(34,197,94,.5);background:rgba(34,197,94,.15);}
.vmpTxt{flex:1;font-size:12px;color:rgba(255,255,255,.82);}
.vmpStep.done .vmpTxt{color:rgba(255,255,255,.4);text-decoration:line-through;}
.vmpGo{flex:none;font-size:10px;font-weight:700;padding:3px 9px;border-radius:99px;border:1px solid rgba(96,165,250,.35);background:rgba(96,165,250,.1);color:rgba(147,197,253,.95);cursor:pointer;}
.vmpLinked{flex:none;font-size:9.5px;color:rgba(147,197,253,.6);font-style:italic;}
/* ══ Calendrier : liaisons vers la planification et la Vision (15 juillet) ══ */
.calActions{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:10px;}
.calActions .btnTiny{flex:0 0 auto;} /* jamais rétréci → jamais tronqué (retour user), ils passent à la ligne */
.calActions .btnTiny .gi{width:12px;height:12px;vertical-align:-2px;fill:#fff;}
/* Verdict binaire : pas de jauge, l'effort investi en une ligne (or discret) */
.vVerdictEffort span{color:rgba(253,230,138,.7);}
.vVerdictEffort .gi,.vVerdictEffortSheet .gi{width:11px;height:11px;vertical-align:-1px;fill:rgba(253,230,138,.8);}
.vVerdictEffortSheet{font-size:12px;color:rgba(253,230,138,.75);padding:6px 0 2px;}
.vVerdictEffortSheet b{color:rgba(253,230,138,.95);}
/* Feature visible mais verrouillée (repos < niv 15) : même langage que .sLock */
.btnTiny.lockedFeat{opacity:.6;cursor:pointer;}
.btnLockChip{font-size:9px;font-weight:800;letter-spacing:.5px;text-transform:uppercase;padding:1px 6px;border-radius:6px;background:rgba(255,190,60,.09);border:1px solid rgba(255,190,60,.2);color:rgba(255,190,60,.75);margin-left:3px;vertical-align:1px;}
.hhVisionBtn{flex:none;font-size:10px;font-weight:800;letter-spacing:.3px;padding:4px 10px;border-radius:99px;border:1px solid rgba(167,139,250,.35);background:rgba(167,139,250,.1);color:rgba(196,181,253,.95);cursor:pointer;font-family:'Space Grotesk',sans-serif;}
.hhVisionBtn .gi{width:11px;height:11px;vertical-align:-1.5px;fill:rgba(196,181,253,.95);}
.hhGoalRow{cursor:pointer;border-radius:8px;transition:background .15s;}
.hhGoalRow:hover{background:rgba(167,139,250,.07);}
.hhGoalsEmpty{display:flex;align-items:center;justify-content:space-between;gap:10px;cursor:pointer;font-size:11.5px;color:rgba(255,255,255,.55);}
.hhGoalsEmpty .gi{width:12px;height:12px;vertical-align:-2px;fill:rgba(167,139,250,.7);}
.hhVisionGo{flex:none;font-size:11px;font-weight:800;color:rgba(196,181,253,.95);cursor:pointer;}
/* Bloc Vision du bandeau Calendrier : le bouton coin cycle semaine/mois/année */
.hhGoals{position:relative;padding-bottom:40px;}
.hhGoalsEmpty2{display:flex;flex-wrap:wrap;align-items:center;gap:8px 10px;font-size:11.5px;color:rgba(255,255,255,.55);}
.hhGoalsEmpty2 .gi{width:12px;height:12px;vertical-align:-2px;fill:rgba(167,139,250,.7);}
.hhScaleCycle{position:absolute;right:10px;bottom:9px;display:inline-flex;align-items:center;gap:5px;padding:4px 10px;border-radius:99px;background:rgba(255,255,255,.04);border:1px solid rgba(255,255,255,.18);color:#fff;font-size:10.5px;font-weight:800;letter-spacing:.4px;cursor:pointer;font-family:'Space Grotesk',sans-serif;}
.hhScaleCycle .gi{width:12px;height:12px;fill:currentColor;}
.hhScaleCycle:active{transform:scale(.94);}
/* Vue Vision (semaine) : bouton "planifier en détail" du panneau jour → openPlanFlow */
.vDayDetailBtn{display:flex;align-items:center;justify-content:center;gap:6px;width:100%;margin-top:8px;padding:9px 12px;border-radius:10px;border:1px dashed rgba(167,139,250,.4);background:rgba(167,139,250,.06);color:rgba(196,181,253,.95);font-size:12px;font-weight:700;cursor:pointer;font-family:'Space Grotesk',sans-serif;}
.vDayDetailBtn .gi{width:13px;height:13px;fill:rgba(196,181,253,.95);}
.vDayDetailBtn:active{transform:scale(.98);}
/* Annuler la dernière liaison (constellation) : neutre, distinct du Relier doré */
.cstUndoBtn{border-color:rgba(255,255,255,.22)!important;background:rgba(255,255,255,.05)!important;color:rgba(255,255,255,.85)!important;}
.cstUndoBtn .gi{fill:rgba(255,255,255,.85)!important;}
/* ══ APTITUDES (Phase 1.1) : le registre analytique du Sommet (or). Aucune animation infinie. ══ */
.aptSection{padding:14px;border-radius:18px;border:1px solid rgba(251,191,36,.18);background:linear-gradient(160deg,rgba(251,191,36,.05),rgba(251,191,36,.012) 70%);}
.aptHead{display:flex;align-items:center;gap:8px;font-family:'Syne',sans-serif;font-weight:800;font-size:16px;color:#fde68a;letter-spacing:.5px;}
.aptHead .gi{width:17px;height:17px;fill:#fbbf24;}
.aptSub{font-size:11.5px;color:rgba(255,255,255,.5);margin:3px 0 12px;}
.aptRows{display:flex;flex-direction:column;gap:11px;}
.aptRow{display:flex;align-items:center;gap:11px;}
.aptIco{flex:none;width:34px;height:34px;border-radius:10px;display:flex;align-items:center;justify-content:center;background:rgba(255,255,255,.04);border:1px solid rgba(255,255,255,.08);}
.aptIco .gi{width:17px;height:17px;fill:rgba(255,255,255,.4);}
.aptIco.lit{background:rgba(251,191,36,.1);border-color:rgba(251,191,36,.3);}
.aptIco.lit .gi{fill:#fbbf24;}
.aptMain{flex:1;min-width:0;}
.aptTop{display:flex;align-items:center;gap:8px;margin-bottom:5px;}
.aptName{font-size:13px;font-weight:700;color:rgba(255,255,255,.9);font-family:'Space Grotesk',sans-serif;}
.aptLevel{font-size:11px;font-weight:800;color:#fde68a;letter-spacing:.3px;}
.aptForme{margin-left:auto;font-size:9.5px;font-weight:800;letter-spacing:.5px;text-transform:uppercase;padding:2px 8px;border-radius:99px;color:rgba(147,197,253,.92);background:rgba(96,165,250,.1);border:1px solid rgba(96,165,250,.25);}
.aptObs{margin-left:auto;font-size:10px;font-weight:700;letter-spacing:.4px;color:rgba(255,255,255,.4);}
.aptBar{height:6px;border-radius:99px;background:rgba(255,255,255,.06);overflow:hidden;}
.aptBar i{display:block;height:100%;border-radius:99px;background:rgba(255,255,255,.14);transition:width .5s cubic-bezier(.22,1,.36,1);}
.aptBar.rev i{background:linear-gradient(90deg,#f59e0b,#fde68a);}
.aptObsRow{opacity:.72;}
.aptRevRow{cursor:pointer;}
.aptWhy{margin-left:6px;width:15px;height:15px;flex:none;border-radius:50%;border:1px solid rgba(251,191,36,.35);color:#fde68a;font-size:9px;font-weight:800;display:inline-flex;align-items:center;justify-content:center;opacity:.7;}
.aptForme+.aptWhy{margin-left:6px;}
.aptTop{position:relative;}
.aptProfile{display:flex;align-items:center;gap:8px;margin:-4px 0 12px;padding:7px 11px;border-radius:10px;background:rgba(251,191,36,.06);border:1px solid rgba(251,191,36,.16);}
.aptProfileLab{font-size:9px;font-weight:800;letter-spacing:1px;text-transform:uppercase;color:rgba(253,230,138,.6);}
.aptProfileName{font-family:'Syne',sans-serif;font-weight:800;font-size:15px;background:linear-gradient(90deg,#fbbf24,#fde68a);-webkit-background-clip:text;background-clip:text;color:transparent;}
.aptFoot{margin-top:12px;font-size:10px;line-height:1.5;color:rgba(255,255,255,.34);font-style:italic;}
/* ── Explicabilité VISUELLE d'une aptitude (dialogue "?") — registre OR du Sommet, zéro anim infinie ── */
.aptExHero{display:flex;align-items:center;gap:12px;margin:2px 0 12px;padding:13px;border-radius:14px;border:1px solid rgba(251,191,36,.28);background:linear-gradient(150deg,rgba(251,191,36,.13),rgba(251,191,36,.02) 70%);}
.aptExHeroIco{flex:0 0 auto;width:44px;height:44px;display:flex;align-items:center;justify-content:center;border-radius:50%;background:radial-gradient(circle at 50% 35%,rgba(251,191,36,.3),rgba(251,191,36,.06));}
.aptExHeroIco .gi{width:24px;height:24px;fill:#fbbf24;}
.aptExHeroTxt{flex:1;min-width:0;}
.aptExHeroKick{font-size:9.5px;font-weight:700;letter-spacing:.8px;text-transform:uppercase;color:rgba(253,230,138,.6);}
.aptExHeroName{font-family:'Syne',sans-serif;font-weight:800;font-size:18px;color:#fff;line-height:1.15;}
.aptExHeroLvl{flex:0 0 auto;font-family:'Syne',sans-serif;font-weight:800;font-size:13px;color:#fbbf24;background:rgba(251,191,36,.12);border:1px solid rgba(251,191,36,.3);border-radius:10px;padding:5px 10px;}
.aptExTile{margin-top:8px;padding:11px 13px;border-radius:12px;border:1px solid rgba(255,255,255,.09);background:rgba(255,255,255,.025);}
.aptExTileTop{display:flex;align-items:baseline;justify-content:space-between;gap:8px;}
.aptExTileLab{font-size:10px;font-weight:700;letter-spacing:.6px;text-transform:uppercase;color:rgba(255,255,255,.5);}
.aptExTileVal{font-family:'Syne',sans-serif;font-weight:800;font-size:14px;color:rgba(255,255,255,.9);}
.aptExTileVal.good{color:#4ade80;}.aptExTileVal.mid{color:#fbbf24;}.aptExTileVal.low{color:#f87171;}
.aptExGauge{margin-top:7px;height:7px;border-radius:5px;background:rgba(255,255,255,.07);overflow:hidden;}
.aptExGauge i{display:block;height:100%;border-radius:5px;background:linear-gradient(90deg,rgba(251,191,36,.55),#fbbf24);}
.aptExGauge.forme i{background:linear-gradient(90deg,rgba(96,165,250,.55),#60a5fa);}
.aptExGauge.forme.good i{background:linear-gradient(90deg,rgba(74,222,128,.5),#4ade80);}
.aptExGauge.forme.low i{background:linear-gradient(90deg,rgba(248,113,113,.5),#f87171);}
.aptExTileNote{margin-top:7px;font-size:10.5px;line-height:1.5;color:rgba(255,255,255,.45);}
.aptExSpark{display:flex;align-items:flex-end;gap:4px;height:44px;margin-top:10px;padding:4px 2px 0;border-bottom:1px solid rgba(255,255,255,.1);}
.aptExSpark i{flex:1;border-radius:3px 3px 0 0;background:linear-gradient(180deg,rgba(96,165,250,.85),rgba(96,165,250,.3));min-width:6px;}
.aptExSparkLab{margin-top:5px;font-size:9.5px;color:rgba(255,255,255,.38);text-align:center;}
.aptExPips{display:flex;gap:6px;margin-top:9px;}
.aptExPip{width:14px;height:14px;border-radius:50%;border:1.5px solid rgba(251,191,36,.35);background:transparent;}
.aptExPip.on{background:radial-gradient(circle at 40% 35%,#fde68a,#fbbf24);border-color:#fbbf24;box-shadow:0 0 5px rgba(251,191,36,.4);}
/* ── Sections structurées (mesure/calcul/valeurs/prochaine preuve) — retour user "je ne sais
   pas comment ça se calcule, très répétitif" : une section par question, un contenu par aptitude ── */
.aptExSection{margin-top:10px;padding:11px 13px;border-radius:12px;background:rgba(255,255,255,.025);border:1px solid rgba(255,255,255,.08);}
.aptExSecLab{font-size:9.5px;font-weight:700;letter-spacing:.6px;text-transform:uppercase;color:rgba(200,190,255,.55);margin-bottom:7px;}
.aptExSecTxt{font-size:12px;line-height:1.5;color:rgba(255,255,255,.72);}
.aptExCalcRow{display:flex;align-items:center;gap:8px;margin-top:5px;}
.aptExCalcRow:first-of-type{margin-top:0;}
.aptExCalcW{flex:none;width:38px;text-align:right;font-family:'Syne',sans-serif;font-weight:800;font-size:12px;color:#fbbf24;}
.aptExCalcTxt{font-size:11.5px;color:rgba(255,255,255,.65);line-height:1.4;}
.aptExNext{border-color:rgba(251,191,36,.22);background:rgba(251,191,36,.05);}
.aptExNext .aptExSecLab{color:rgba(253,230,138,.7);}
.aptExVisualLab{margin-top:8px;font-size:10.5px;color:rgba(255,255,255,.45);line-height:1.5;}
/* Discipline : grille des 7 jours de la semaine */
.aptExWeekGrid{display:flex;gap:5px;}
.aptExDayCell{flex:1;aspect-ratio:1;border-radius:8px;display:flex;align-items:center;justify-content:center;font-size:10px;font-weight:700;color:rgba(255,255,255,.3);background:rgba(255,255,255,.04);border:1px solid rgba(255,255,255,.08);}
.aptExDayCell.win{background:rgba(74,222,128,.16);border-color:rgba(74,222,128,.35);color:#4ade80;}
.aptExDayCell.miss{background:rgba(248,113,113,.1);border-color:rgba(248,113,113,.25);color:rgba(248,113,113,.7);}
/* Planification : rail plan scellé → réalisé */
.aptExRail{display:flex;flex-direction:column;gap:8px;}
.aptExRailRow{display:flex;align-items:center;gap:8px;}
.aptExRailRow>span:first-child{flex:0 0 72px;font-size:10.5px;color:rgba(255,255,255,.5);}
.aptExRailBar{flex:1;height:7px;border-radius:5px;background:rgba(255,255,255,.07);overflow:hidden;}
.aptExRailBar i{display:block;height:100%;border-radius:5px;background:linear-gradient(90deg,rgba(96,165,250,.55),#60a5fa);}
.aptExRailN{flex:none;font-size:10.5px;font-weight:700;color:rgba(255,255,255,.7);min-width:34px;text-align:right;}
/* Exécution : pipeline engagé → commencé → terminé */
.aptExPipe{display:flex;align-items:center;justify-content:space-between;gap:4px;}
.aptExPipeStep{display:flex;flex-direction:column;align-items:center;gap:2px;flex:1;}
.aptExPipeN{font-family:'Syne',sans-serif;font-weight:800;font-size:18px;color:#fbbf24;}
.aptExPipeStep span:last-child{font-size:9.5px;color:rgba(255,255,255,.45);text-transform:uppercase;letter-spacing:.4px;}
.aptExPipeArr{flex:none;color:rgba(255,255,255,.25);font-size:14px;}
/* Endurance : lignée qui traverse les semaines */
.aptExEndu{display:flex;gap:6px;}
.aptExEnduDot{width:16px;height:16px;border-radius:50%;border:1.5px solid rgba(255,255,255,.15);background:transparent;}
.aptExEnduDot.on{background:radial-gradient(circle at 40% 35%,#a78bfa,#7c3aed);border-color:#a78bfa;box-shadow:0 0 5px rgba(167,139,250,.4);}
/* ══ OVERLAY DÉDIÉ APTITUDE (aptD*, 23 juillet, remplace le showConfirm) ══ */
.aptDOv{position:fixed;inset:0;z-index:10053;background:rgba(4,6,12,.78);backdrop-filter:blur(10px);display:flex;align-items:flex-start;justify-content:center;overflow-y:auto;padding:14px;opacity:0;transition:opacity .2s ease;}
.aptDOv.show{opacity:1;}
.aptDOv.hidden{display:none;}
.aptDCard{width:min(520px,100%);margin:auto;border-radius:20px;border:1px solid rgba(251,191,36,.22);background:linear-gradient(170deg,#12152a,#0a0d1a 60%);box-shadow:0 18px 60px rgba(0,0,0,.55);overflow:hidden;}
.aptDHead{display:flex;align-items:center;gap:11px;padding:15px 16px;background:linear-gradient(150deg,rgba(251,191,36,.13),rgba(251,191,36,.02) 70%);border-bottom:1px solid rgba(251,191,36,.15);}
.aptDHeadIco{flex:none;width:42px;height:42px;display:flex;align-items:center;justify-content:center;border-radius:50%;background:radial-gradient(circle at 50% 35%,rgba(251,191,36,.3),rgba(251,191,36,.06));}
.aptDHeadIco .gi{width:23px;height:23px;fill:#fbbf24;}
.aptDHeadTxt{flex:1;min-width:0;display:flex;flex-direction:column;}
.aptDHeadKick{font-size:9px;font-weight:700;letter-spacing:.8px;text-transform:uppercase;color:rgba(253,230,138,.6);}
/* `overflow-wrap:anywhere` coupait AU MILIEU DU MOT : « Planification » et
   « Endurance » renvoyaient une lettre seule à la ligne. Un nom propre ne se
   coupe pas — c'est la POLICE qui cède, et le badge de niveau qui rétrécit
   si vraiment il faut de la place. */
.aptDHeadName{font-family:'Syne',sans-serif;font-weight:800;font-size:16px;color:#fff;
  line-height:1.15;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
@media(max-width:400px){ .aptDHeadName{font-size:15px;} }
@media(max-width:360px){ .aptDHeadName{font-size:14px;} }
.aptDHeadLvl{flex:0 1 auto;white-space:nowrap;font-family:'Syne',sans-serif;font-weight:800;font-size:12.5px;color:#fbbf24;background:rgba(251,191,36,.12);border:1px solid rgba(251,191,36,.3);border-radius:10px;padding:4px 9px;}
.aptDClose{flex:none;width:30px;height:30px;border-radius:50%;border:1px solid rgba(255,255,255,.18);background:rgba(255,255,255,.05);color:#fff;font-size:13px;cursor:pointer;}
.aptDBody{padding:14px 16px 16px;}
.aptDQ{font-family:'Syne',sans-serif;font-weight:800;font-size:15px;line-height:1.35;color:#fde68a;margin-bottom:9px;}
.aptMasHost.hidden{display:none;}
.aptDMesure{font-size:12.5px;line-height:1.55;color:rgba(255,255,255,.72);margin-bottom:13px;}
/* v5 : la Forme en héros (le chiffre NOMMÉ + une phrase de comptes réels) */
.aptDFormeHero{display:flex;align-items:center;gap:12px;margin:2px 0 13px;padding:11px 13px;border-radius:12px;border:1px solid rgba(255,255,255,.1);background:rgba(255,255,255,.04);}
.aptDFormeVal{flex:none;font-family:'Syne',sans-serif;font-weight:800;font-size:30px;line-height:1;color:rgba(255,255,255,.85);}
.aptDFormeVal em{font-style:normal;font-size:13px;color:rgba(255,255,255,.35);}
.aptDFormeVal.good{color:#4ade80;}
.aptDFormeVal.mid{color:#fbbf24;}
.aptDFormeVal.low{color:#f87171;}
.aptDFormeTxt{display:flex;flex-direction:column;gap:3px;min-width:0;}
.aptDFormeLab{font-size:9px;letter-spacing:1.4px;text-transform:uppercase;color:rgba(255,255,255,.4);font-weight:700;}
.aptDFormeSent{font-size:12px;line-height:1.5;color:rgba(255,255,255,.78);overflow-wrap:anywhere;}
.aptDNivRow{display:flex;align-items:center;gap:9px;margin-top:4px;font-family:'Space Grotesk',monospace;font-size:11px;color:rgba(255,255,255,.6);white-space:nowrap;}
.aptDNivRow .aptDBandGauge{flex:1;}
/* v5 : la fraîcheur de la mesure en UNE ligne (la bande à trois cellules doublait le héros) */
.aptDConfLine{display:flex;align-items:center;gap:6px;margin:-4px 0 12px;font-size:11px;color:rgba(255,255,255,.5);}
.aptDConfLine b{color:rgba(255,255,255,.78);font-family:'Space Grotesk',monospace;}
.aptDConfLine .gi{width:11px;height:11px;fill:rgba(255,255,255,.4);}
.aptDVeille{color:#fbbf24;}
/* v5 : mesure refroidie (le niveau est acquis, la confiance attend des preuves fraîches) */
.aptCell.veille .aptCellIco .gi{fill:rgba(255,255,255,.4);}
.aptCell.veille .aptCellName{color:rgba(255,255,255,.55);}
.aptDNoData{font-size:11.5px;line-height:1.55;color:rgba(255,255,255,.45);padding:14px 4px;}
.aptDNote{margin-top:8px;font-size:10.5px;color:rgba(255,255,255,.42);line-height:1.5;}
.aptDNext{margin-top:13px;padding:10px 12px;border-radius:11px;border:1px solid rgba(251,191,36,.22);background:rgba(251,191,36,.05);font-size:11.5px;line-height:1.5;color:rgba(253,230,138,.85);}
.aptDNext .gi{width:12px;height:12px;fill:#fbbf24;vertical-align:-2px;}
.aptDLegend{display:flex;flex-wrap:wrap;gap:4px 12px;margin-top:9px;font-size:10px;color:rgba(255,255,255,.45);}
.aptDLegend b{color:#fbbf24;}
.aptDLegend i{display:inline-block;width:8px;height:8px;border-radius:3px;margin-right:4px;vertical-align:-1px;}
.aptDLegend .lgWin{background:rgba(74,222,128,.6);}
.aptDLegend .lgSeal{background:rgba(96,165,250,.6);}
.aptDLegend .lgEff{background:rgba(251,191,36,.6);}
/* Discipline : plateau des 7 jours */
.aptDPlateau{display:flex;gap:5px;}
.aptDDayCol{flex:1;display:flex;flex-direction:column;align-items:center;gap:4px;padding:7px 2px;border-radius:10px;background:rgba(255,255,255,.03);border:1px solid rgba(255,255,255,.07);}
.aptDDayCol.win{border-color:rgba(74,222,128,.3);background:rgba(74,222,128,.06);}
.aptDDayCol.miss{border-color:rgba(248,113,113,.22);background:rgba(248,113,113,.05);}
.aptDDayLab{font-size:9.5px;font-weight:700;color:rgba(255,255,255,.45);}
.aptDDayState{width:14px;height:14px;border-radius:50%;background:rgba(255,255,255,.07);}
.aptDDayState.win{background:radial-gradient(circle at 40% 35%,#86efac,#22c55e);}
.aptDDayState.miss{background:rgba(248,113,113,.35);}
.aptDSeal{font-size:8.5px;font-weight:700;color:#60a5fa;}
.aptDSeal.off{color:rgba(255,255,255,.2);}
.aptDEffort{width:6px;height:22px;border-radius:4px;background:rgba(255,255,255,.06);display:flex;align-items:flex-end;overflow:hidden;}
.aptDEffort i{display:block;width:100%;border-radius:4px;background:linear-gradient(180deg,#fde68a,#fbbf24);}
/* Planification : confrontation Plan / Réel */
.aptDVsWrap{display:flex;flex-direction:column;gap:10px;}
.aptDVsRow{display:flex;align-items:center;gap:8px;flex-wrap:wrap;}
.aptDVsW{flex:none;width:34px;text-align:right;font-family:'Syne',sans-serif;font-weight:800;font-size:12px;color:#fbbf24;}
.aptDVsLab{flex:1 1 110px;font-size:11px;color:rgba(255,255,255,.55);}
.aptDVs{display:flex;align-items:center;gap:7px;}
.aptDVsCell{display:flex;flex-direction:column;align-items:center;padding:5px 11px;border-radius:9px;background:rgba(96,165,250,.08);border:1px solid rgba(96,165,250,.2);}
.aptDVsCell b{font-family:'Syne',sans-serif;font-size:15px;color:#93c5fd;}
.aptDVsCell span{font-size:8.5px;text-transform:uppercase;letter-spacing:.4px;color:rgba(255,255,255,.4);}
.aptDVsCell.ok{background:rgba(74,222,128,.08);border-color:rgba(74,222,128,.25);}
.aptDVsCell.ok b{color:#86efac;}
.aptDVsCell.loss{background:rgba(248,113,113,.06);border-color:rgba(248,113,113,.2);}
.aptDVsCell.loss b{color:#fca5a5;}
.aptDVsArr{color:rgba(255,255,255,.3);}
.aptDGap{font-size:10.5px;font-weight:700;color:#fca5a5;}
.aptDGap.ok{color:#4ade80;}
.aptDVsPct{font-family:'Syne',sans-serif;font-weight:800;font-size:13px;color:#fbbf24;margin-left:2px;}
.aptDFunTrackLab{font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.5px;color:rgba(255,255,255,.45);margin:10px 0 6px;}
.aptDFunTrackLab:first-child{margin-top:0;}
.aptDFunTrackLab b{color:#fbbf24;}
/* Priorisation : chronologie verticale couronnée */
.aptDPrioTL{display:flex;flex-direction:column;gap:6px;border-left:2px solid rgba(251,191,36,.2);padding-left:11px;margin-left:5px;}
.aptDPrioRow{display:flex;align-items:center;gap:8px;flex-wrap:wrap;}
.aptDPrioDay{flex:none;width:32px;font-size:10px;font-weight:700;color:rgba(255,255,255,.45);}
.aptDCrown{font-size:15px;color:rgba(255,255,255,.25);}
.aptDCrown.on{color:#fbbf24;text-shadow:0 0 6px rgba(251,191,36,.5);}
.aptDPosTag{font-size:9.5px;font-weight:700;border-radius:8px;padding:2px 7px;background:rgba(255,255,255,.06);color:rgba(255,255,255,.55);}
.aptDPosTag.first{background:rgba(74,222,128,.12);color:#86efac;}
.aptDPosTag.late{background:rgba(251,191,36,.1);color:rgba(253,230,138,.8);}
.aptDPosTag.miss{background:rgba(248,113,113,.1);color:#fca5a5;}
.aptDAvoid{font-size:9.5px;color:rgba(248,113,113,.65);font-style:italic;}
/* Exécution : parcours avec pertes */
.aptDFunnel{display:flex;align-items:center;justify-content:space-between;gap:2px;}
.aptDFunStep{display:flex;flex-direction:column;align-items:center;gap:2px;padding:8px 10px;border-radius:11px;background:rgba(251,191,36,.06);border:1px solid rgba(251,191,36,.18);}
.aptDFunN{font-family:'Syne',sans-serif;font-weight:800;font-size:19px;color:#fbbf24;}
.aptDFunLab{font-size:9px;text-transform:uppercase;letter-spacing:.4px;color:rgba(255,255,255,.5);}
.aptDFunLink{flex:1;display:flex;flex-direction:column;align-items:center;gap:2px;}
.aptDFunW{font-size:9.5px;font-weight:800;color:#fbbf24;}
.aptDFunLoss{font-size:9px;color:#fca5a5;white-space:nowrap;}
.aptDFunLoss.ok{color:#4ade80;}
/* Endurance : chemin nommé à travers les semaines */
.aptDPath{margin-top:10px;}
.aptDPath:first-child{margin-top:0;}
.aptDPathName{font-size:11.5px;font-weight:700;color:rgba(255,255,255,.78);margin-bottom:6px;}
.aptDPathRow{display:flex;align-items:center;}
.aptDPathWk{display:flex;flex-direction:column;align-items:center;gap:3px;}
.aptDPathDot{width:14px;height:14px;border-radius:50%;border:1.5px solid rgba(255,255,255,.15);}
.aptDPathDot.on{background:radial-gradient(circle at 40% 35%,#a78bfa,#7c3aed);border-color:#a78bfa;box-shadow:0 0 5px rgba(167,139,250,.4);}
.aptDPathLab{font-size:8px;color:rgba(255,255,255,.35);}
.aptDPathSeg{flex:1;height:2px;background:rgba(167,139,250,.18);margin:0 2px 12px;}
/* Bande commune Exp/Forme/Confiance */
.aptDBand{display:flex;gap:7px;margin-top:13px;}
.aptDBandCell{flex:1;display:flex;flex-direction:column;gap:3px;padding:9px 10px;border-radius:11px;background:rgba(255,255,255,.03);border:1px solid rgba(255,255,255,.08);}
.aptDBandLab{font-size:8.5px;font-weight:700;text-transform:uppercase;letter-spacing:.5px;color:rgba(255,255,255,.4);}
.aptDBandVal{font-family:'Syne',sans-serif;font-weight:800;font-size:14px;color:rgba(255,255,255,.9);}
.aptDBandVal.good{color:#4ade80;}.aptDBandVal.mid{color:#fbbf24;}.aptDBandVal.low{color:#f87171;}
.aptDBandSub{font-size:8.5px;color:rgba(255,255,255,.35);line-height:1.3;}
.aptDBandGauge{height:5px;border-radius:4px;background:rgba(255,255,255,.08);overflow:hidden;}
.aptDBandGauge i{display:block;height:100%;background:linear-gradient(90deg,rgba(251,191,36,.55),#fbbf24);}
.aptDPips{display:flex;gap:3px;}
.aptDPip{width:9px;height:9px;border-radius:50%;border:1px solid rgba(251,191,36,.35);}
.aptDPip.on{background:radial-gradient(circle at 40% 35%,#fde68a,#fbbf24);border-color:#fbbf24;}
body.lowFx .aptDOv{backdrop-filter:none;background:rgba(4,6,12,.94);}
/* ══ LA VOIX DU SOMMET (voice*, 24 juillet, V1 bêta) ══ */
.voiceOv{position:fixed;inset:0;z-index:10058;background:rgba(4,6,12,.86);backdrop-filter:blur(12px);display:flex;align-items:flex-start;justify-content:center;overflow-y:auto;padding:14px;opacity:0;transition:opacity .22s ease;}
.voiceOv.show{opacity:1;}
.voiceOv.hidden{display:none;}
body.lowFx .voiceOv{backdrop-filter:none;background:rgba(4,6,12,.95);}
.voiceCard{position:relative;width:min(440px,100%);margin:auto;border-radius:22px;border:1px solid rgba(251,191,36,.25);background:linear-gradient(175deg,#12152a,#0a0d1a 65%);box-shadow:0 18px 60px rgba(0,0,0,.55);padding:26px 20px 20px;display:flex;flex-direction:column;align-items:center;gap:12px;}
.voiceClose{position:absolute;top:12px;right:12px;width:30px;height:30px;border-radius:50%;border:1px solid rgba(255,255,255,.18);background:rgba(255,255,255,.05);color:#fff;font-size:13px;cursor:pointer;}
.voiceMedal{width:74px;height:74px;border-radius:50%;display:flex;align-items:center;justify-content:center;background:radial-gradient(circle at 50% 32%,rgba(251,191,36,.32),rgba(251,191,36,.05));border:1px solid rgba(251,191,36,.35);transition:transform .25s ease,box-shadow .25s ease;}
.voiceMedal .gi{width:38px;height:38px;fill:#fbbf24;}
.voiceMedal.listening{transform:scale(1.12);box-shadow:0 0 26px rgba(251,191,36,.4);}
.voiceMedal.thinking{transform:scale(1.04);box-shadow:0 0 14px rgba(96,165,250,.35);border-color:rgba(96,165,250,.4);}
.voiceState{min-height:16px;font-size:11.5px;color:rgba(255,255,255,.55);text-align:center;line-height:1.4;}
.voiceTr{min-height:14px;font-size:12.5px;color:rgba(255,255,255,.82);text-align:center;line-height:1.45;font-style:italic;max-width:100%;overflow-wrap:anywhere;}
.voiceSay{font-size:13px;color:rgba(253,230,138,.9);text-align:center;line-height:1.55;max-width:100%;overflow-wrap:anywhere;}
.voiceTutGuide{width:100%;box-sizing:border-box;padding:10px 12px;border-radius:13px;text-align:left;
  border:1px solid rgba(167,139,250,.24);background:linear-gradient(120deg,rgba(99,102,241,.12),rgba(251,191,36,.045));display:grid;gap:3px;}
.voiceTutGuide span{font-size:8.5px;font-weight:800;letter-spacing:1.7px;color:rgba(196,181,253,.72);}
.voiceTutGuide b{font-family:'Syne',sans-serif;font-size:12px;line-height:1.4;color:#fff;}
.voiceTutGuide small{font-size:10.5px;line-height:1.42;color:rgba(255,255,255,.48);}
.voiceMicBtn{width:100%;padding:14px;border-radius:14px;border:1px solid rgba(251,191,36,.35);background:rgba(251,191,36,.1);color:#fde68a;font-weight:700;font-size:13px;cursor:pointer;font-family:'Space Grotesk',sans-serif;user-select:none;-webkit-user-select:none;touch-action:none;}
.voiceMicBtn:active{background:rgba(251,191,36,.22);}
.voiceMicBtn .gi{width:14px;height:14px;fill:#fbbf24;vertical-align:-2px;}
.voiceNoSR{font-size:11px;color:rgba(255,255,255,.45);text-align:center;}
.voiceTxtRow{display:flex;gap:7px;width:100%;}
.voiceInput{flex:1;min-width:0;padding:11px 13px;border-radius:12px;border:1px solid rgba(255,255,255,.14);background:rgba(255,255,255,.05);color:#fff;font-size:16px;font-family:'Space Grotesk',sans-serif;}
.voiceSend{flex:none;width:44px;border-radius:12px;border:1px solid rgba(251,191,36,.3);background:rgba(251,191,36,.1);color:#fbbf24;font-size:16px;cursor:pointer;}
/* Maîtrises (Phase 3) : sous-bloc des domaines, sous les 5 aptitudes */
.aptMasAcc{margin-top:14px;border-radius:12px;border:1px solid rgba(251,191,36,.15);background:rgba(251,191,36,.03);padding:0 12px 2px;}
.aptMasAcc[open]{padding-bottom:10px;}
.aptMasSum{list-style:none;cursor:pointer;display:flex;align-items:center;gap:8px;padding:11px 0;font-family:'Syne',sans-serif;font-weight:800;font-size:12.5px;color:rgba(253,230,138,.85);user-select:none;}
.aptMasSum::-webkit-details-marker{display:none;}
.aptMasSum::after{content:'▸';margin-left:auto;font-size:11px;color:rgba(251,191,36,.5);transition:transform .15s ease;}
.aptMasAcc[open] .aptMasSum::after{transform:rotate(90deg);}
.aptMasSum .gi{width:14px;height:14px;fill:#fbbf24;}
.aptMasN{background:rgba(251,191,36,.12);border:1px solid rgba(251,191,36,.3);color:#fbbf24;border-radius:9px;padding:1px 8px;font-size:10.5px;}
/* ── APTITUDES COMPACTES (25 juillet) : cinq pastilles au lieu de cinq
   rangées. Sur téléphone la section pesait plus lourd que tout le reste. ── */
.aptCells{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:7px;margin-top:10px;}
.aptCell{display:flex;flex-direction:column;align-items:center;gap:3px;padding:10px 4px 9px;
  border-radius:14px;background:rgba(255,255,255,.03);border:1px solid rgba(255,255,255,.07);
  cursor:pointer;min-width:0;}
.aptCell:active{background:rgba(251,191,36,.08);}
.aptRing{position:relative;width:46px;height:46px;display:block;}
.aptRing > svg{width:46px;height:46px;transform:rotate(-90deg);}
.aptRingBg{fill:none;stroke:rgba(255,255,255,.08);stroke-width:4;}
.aptRingFg{fill:none;stroke:rgba(255,255,255,.22);stroke-width:4;stroke-linecap:round;transition:stroke-dasharray .5s ease;}
.aptCell.lit .aptRingFg{stroke:#fbbf24;}
.aptCell.locked{opacity:.55;}
.aptCell.locked .aptCellIco .gi{fill:rgba(255,255,255,.22);}
.aptCell.locked .aptCellName{color:rgba(255,255,255,.32);font-style:italic;}
.aptCellIco{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;}
.aptCellIco .gi{width:19px;height:19px;fill:rgba(255,255,255,.3);}
/* ⚠ NE PAS FAIRE TOURNER CES ICÔNES (tenté le 26 juillet, retiré le même jour) :
   j'avais ajouté un rotate(-45deg) sur la fusée en croyant la redresser ; sur
   téléphone le résultat était PENCHÉ, pas droit (retour user). Une icône du
   sprite se prend telle qu'elle est dessinée : si son inclinaison gêne, on la
   REDESSINE, on ne la fait pas pivoter à l'aveugle. */
.aptCell.lit .aptCellIco .gi{fill:#fde68a;}
.aptCellName{font-size:10px;line-height:1.2;font-weight:700;letter-spacing:.2px;color:rgba(255,255,255,.5);text-align:center;overflow-wrap:anywhere;}
.aptCell.lit .aptCellName{color:rgba(255,255,255,.78);}
.aptCellLvl{font-family:'Space Grotesk',monospace;font-size:10.5px;font-weight:700;color:#fde68a;white-space:nowrap;}
.aptCellLvl em{font-style:normal;color:rgba(147,197,253,.85);}
.aptCellObs{font-family:'Space Grotesk',monospace;font-size:10.5px;color:rgba(255,255,255,.32);white-space:nowrap;}
.aptMasEmpty{font-size:11px;line-height:1.5;color:rgba(255,255,255,.42);padding:2px 0 8px;}
.aptMasHead{display:flex;align-items:center;gap:7px;margin:16px 0 0;font-family:'Syne',sans-serif;font-weight:800;font-size:13.5px;color:#fde68a;letter-spacing:.4px;}
.aptMasHead .gi{width:14px;height:14px;fill:#fbbf24;}
.aptMasSub{font-size:10.5px;color:rgba(255,255,255,.44);margin:2px 0 10px;}
.aptMasRow .aptName{font-size:13px;}
/* Annonce froide du Sommet (aptitude level-up) : carte non bloquante, registre or, "Notice." */
.aptNotice{display:flex;align-items:center;gap:10px;margin:0 0 10px;padding:11px 13px;border-radius:14px;border:1px solid rgba(251,191,36,.32);background:linear-gradient(160deg,rgba(251,191,36,.1),rgba(251,191,36,.02) 70%);}
.aptNoticeIco{flex:none;width:26px;height:26px;border-radius:8px;display:flex;align-items:center;justify-content:center;background:rgba(251,191,36,.14);}
.aptNoticeIco .gi{width:14px;height:14px;fill:#fbbf24;}
.aptNoticeTxt{flex:1;font-size:12.5px;font-weight:700;color:#fde68a;font-family:'Space Grotesk',sans-serif;letter-spacing:.2px;}
.aptNoticeX{flex:none;width:26px;height:26px;border-radius:8px;border:1px solid rgba(255,255,255,.12);background:transparent;color:rgba(255,255,255,.6);cursor:pointer;font-size:12px;}
/* Éveil du Sommet (Phase 4) : proposition sur le point faible, registre or, non bloquante */
.aptProp{margin:0 0 10px;padding:12px 14px;border-radius:14px;border:1px solid rgba(251,191,36,.3);background:linear-gradient(160deg,rgba(251,191,36,.1),rgba(251,191,36,.02) 72%);}
.aptPropHead{display:flex;align-items:center;gap:7px;font-family:'Syne',sans-serif;font-weight:800;font-size:12px;letter-spacing:.5px;text-transform:uppercase;color:rgba(253,230,138,.8);}
.aptPropHead .gi{width:13px;height:13px;fill:#fbbf24;}
.aptPropTxt{margin:6px 0 11px;font-size:13px;line-height:1.5;color:#fde68a;font-family:'Space Grotesk',sans-serif;}
.aptPropBtns{display:flex;gap:8px;}
.aptPropGo{flex:1;padding:9px 12px;border-radius:10px;border:none;background:linear-gradient(90deg,#fbbf24,#f59e0b);color:#1a1206;font-weight:800;font-size:12.5px;font-family:'Space Grotesk',sans-serif;cursor:pointer;}
.aptPropX{flex:none;padding:9px 14px;border-radius:10px;border:1px solid rgba(255,255,255,.14);background:transparent;color:rgba(255,255,255,.55);font-size:12.5px;cursor:pointer;}
/* Puce compacte de l'éveil : entrée persistante vers la révélation dramatique */
.aptChip{display:flex;align-items:center;gap:9px;margin:0 0 10px;padding:10px 13px;border-radius:13px;border:1px solid rgba(251,191,36,.3);background:linear-gradient(160deg,rgba(251,191,36,.1),rgba(251,191,36,.02) 72%);cursor:pointer;}
.aptChipIco{flex:none;width:24px;height:24px;border-radius:7px;display:flex;align-items:center;justify-content:center;background:rgba(251,191,36,.14);}
.aptChipIco .gi{width:13px;height:13px;fill:#fbbf24;}
.aptChipTxt{flex:1;font-size:12.5px;font-weight:700;color:#fde68a;font-family:'Space Grotesk',sans-serif;}
.aptChipCta{flex:none;font-size:12px;font-weight:800;color:#1a1206;background:linear-gradient(90deg,#fbbf24,#f59e0b);padding:5px 11px;border-radius:8px;}
/* LE GRAND MOMENT : révélation plein écran du Sommet (langage MMO du tuto, registre or, FPS one-shot) */
.aptRevOv{position:fixed;inset:0;z-index:99992;display:flex;align-items:center;justify-content:center;padding:20px;background:rgba(6,8,14,.74);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);opacity:0;pointer-events:none;transition:opacity .3s;}
.aptRevOv.show{opacity:1;pointer-events:auto;}
.aptRevCard{width:100%;max-width:440px;max-height:calc(100vh - 40px);overflow-y:auto;border-radius:20px;padding:26px 22px 20px;background:linear-gradient(165deg,rgba(30,24,10,.97),rgba(11,12,17,.98));border:1px solid rgba(251,191,36,.34);box-shadow:0 20px 60px rgba(0,0,0,.5),0 0 44px rgba(251,191,36,.09);}
.aptRevLine{animation:tutLineIn .5s cubic-bezier(.16,1,.3,1) both;}
.aptRevKicker{display:flex;align-items:center;gap:8px;font-size:11px;font-weight:800;letter-spacing:2px;text-transform:uppercase;color:#fbbf24;}
.aptRevKicker .gi{width:15px;height:15px;fill:#fbbf24;}
.aptRevTitle{font-family:'Syne',sans-serif;font-size:24px;font-weight:800;letter-spacing:-.4px;line-height:1.15;margin:10px 0 8px;background:linear-gradient(90deg,#fff,#fde68a);-webkit-background-clip:text;background-clip:text;color:transparent;}
.aptRevBody{font-size:13.5px;line-height:1.6;color:rgba(255,255,255,.72);margin-bottom:5px;}
.aptRevRows{margin:15px 0 4px;border:1px solid rgba(251,191,36,.18);border-radius:13px;overflow:hidden;background:rgba(251,191,36,.04);}
.aptRevRow{display:flex;align-items:center;gap:11px;padding:10px 14px;font-size:13px;}
.aptRevRow+.aptRevRow{border-top:1px solid rgba(255,255,255,.06);}
.aptRevRow .gi{width:15px;height:15px;fill:rgba(253,230,138,.85);flex:none;}
.aptRevLab{flex:1;color:rgba(255,255,255,.78);}
.aptRevVal{flex:none;font-weight:800;font-family:'Space Grotesk',sans-serif;color:#fde68a;}
.aptRevVal.weak{color:#fca5a5;}
.aptRevVerdict{margin:16px 0 4px;padding:12px 14px;border-left:2px solid #fbbf24;background:rgba(251,191,36,.06);border-radius:0 10px 10px 0;font-size:13.5px;line-height:1.55;color:#fde68a;font-family:'Space Grotesk',sans-serif;}
.aptRevBtns{display:flex;gap:9px;margin-top:18px;}
.aptRevGo{flex:1;padding:13px;border-radius:12px;border:none;background:linear-gradient(90deg,#fbbf24,#f59e0b);color:#1a1206;font-weight:800;font-size:14px;font-family:'Space Grotesk',sans-serif;cursor:pointer;}
.aptRevX{flex:none;padding:13px 18px;border-radius:12px;border:1px solid rgba(255,255,255,.15);background:transparent;color:rgba(255,255,255,.6);font-size:13.5px;cursor:pointer;}
/* ══ "?" Vision : explication néophyte (15 juillet) ══ */
.visionHelpBtn{flex:none;width:26px;height:26px;border-radius:50%;border:1px solid rgba(255,255,255,.22);background:rgba(255,255,255,.06);color:rgba(255,255,255,.75);font-size:13px;font-weight:800;cursor:pointer;font-family:'Space Grotesk',sans-serif;display:flex;align-items:center;justify-content:center;}
.visionHelpBtn:hover{border-color:rgba(167,139,250,.5);color:#fff;}
.exVisionLadder{display:flex;flex-direction:column;gap:2px;margin:10px 0 4px;} /* column NORMAL : le JS ordonne deja Semaine en haut, le column-reverse (relique de la v1 Vie-en-haut) retournait les rangees SANS les fleches : l ecran disait l inverse du texte (bug user x2) */
.exVRow{display:flex;align-items:center;gap:9px;padding:7px 10px;border-radius:10px;background:rgba(255,255,255,.04);border:1px solid rgba(255,255,255,.08);}
.exVIco{flex:none;font-size:14px;}
.exVLab{flex:none;font-size:12px;font-weight:800;color:rgba(196,181,253,.95);width:64px;text-align:left;font-family:'Space Grotesk',sans-serif;}
.exVTxt{font-size:11px;color:rgba(255,255,255,.62);text-align:left;}
.exVArrow{font-size:9px;color:rgba(167,139,250,.6);padding-left:14px;letter-spacing:.5px;}
.exVChip{margin:10px 0 2px;padding:8px 11px;border-radius:10px;border:1px solid rgba(251,191,36,.25);background:rgba(251,191,36,.06);font-size:11px;color:rgba(253,230,138,.9);text-align:left;}
/* ══ Monuments digestes (15 juillet) : chemin de points, gabarits, dash ══ */
.vmpPath{display:inline-flex;align-items:center;margin-left:10px;vertical-align:middle;}
.vmpDot{width:8px;height:8px;border-radius:50%;border:1.5px solid rgba(251,191,36,.4);background:transparent;flex:none;}
.vmpDot.done{background:rgba(251,191,36,.85);border-color:rgba(251,191,36,.85);}
.vmpDot.cur{border-color:rgba(253,230,138,.95);animation:vmpBreathe 1.8s ease-in-out infinite;}
.vmpSeg{width:9px;height:1.5px;background:rgba(251,191,36,.22);flex:none;}
@keyframes vmpBreathe{0%,100%{opacity:.45;}50%{opacity:1;}}
.vmpPalier.done .vmpDot.done{background:rgba(134,239,172,.85);border-color:rgba(134,239,172,.85);}
.vmpHelp{width:18px;height:18px;border-radius:50%;border:1px solid rgba(255,255,255,.22);background:rgba(255,255,255,.05);color:rgba(255,255,255,.7);font-size:10px;font-weight:800;cursor:pointer;margin-left:6px;vertical-align:-3px;}
.vmpAtk{border-color:rgba(251,191,36,.4)!important;background:rgba(251,191,36,.1)!important;color:rgba(253,230,138,.95)!important;}
.vmpAsk{flex:none;font-size:9.5px;color:rgba(255,255,255,.5);}
.vmpTplRow{display:flex;flex-wrap:wrap;gap:6px;margin:10px 0 8px;}
.vmpTpl{font-size:10.5px;font-weight:700;padding:5px 11px;border-radius:99px;border:1px solid rgba(167,139,250,.3);background:rgba(167,139,250,.08);color:rgba(196,181,253,.95);cursor:pointer;font-family:'Space Grotesk',sans-serif;}
.vmpTpl:active{transform:scale(.95);}
.vMonLine{display:flex;align-items:center;gap:8px;padding:8px 10px;border-radius:10px;border:1px solid rgba(251,191,36,.2);background:rgba(251,191,36,.05);cursor:pointer;margin-bottom:6px;}
.vmlDiam{flex:none;color:rgba(253,230,138,.9);font-size:12px;}
.vmlTxt{flex:1;font-size:11.5px;color:rgba(255,255,255,.75);min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.vmlTxt b{color:rgba(253,230,138,.9);}
.vmlGo{flex:none;font-size:10px;font-weight:800;color:rgba(253,230,138,.95);}
.vmpDate{font-size:9px;font-weight:600;color:rgba(134,239,172,.6);margin-left:8px;letter-spacing:.2px;}
/* ══ VISION v2 (16 juillet) : Chantiers, unité, Constellation ══ */
.vSectHead{font-size:11px;font-weight:800;letter-spacing:1.2px;text-transform:uppercase;color:rgba(253,230,138,.85);padding:4px 2px 8px;font-family:'Space Grotesk',sans-serif;}
.vSectHead2{color:rgba(255,255,255,.45);margin-top:14px;}
.vgUnitInput{max-width:150px;margin-left:8px;}
.vtreeGuideTargetRow{display:flex;align-items:center;gap:8px;flex-wrap:wrap;}
.vgUnitFixed{font-size:13px;font-weight:700;color:rgba(255,255,255,.6);}
/* La Constellation : overlay-monde. Fond OPAQUE (jamais de backdrop-filter
   plein écran : règle FPS), animations d'entrée ONE-SHOT, pulse en opacité. */
.constOv{position:fixed;inset:0;z-index:10050;background:radial-gradient(ellipse at 50% 18%,#101427 0%,#05070f 62%);display:flex;flex-direction:column;opacity:0;transition:opacity .25s ease;}
.constOv.show{opacity:1;}
.constOv.hidden{display:none;}
.constHead{display:flex;align-items:center;justify-content:space-between;padding:calc(14px + env(safe-area-inset-top)) 18px 4px;font-family:'Syne',sans-serif;font-weight:800;font-size:15px;letter-spacing:2.5px;color:rgba(253,230,138,.95);}
.constClose{width:32px;height:32px;border-radius:50%;border:1px solid rgba(255,255,255,.2);background:rgba(255,255,255,.06);color:#fff;font-size:14px;cursor:pointer;}
.constSub{padding:0 18px 8px;font-size:11px;color:rgba(255,255,255,.42);letter-spacing:.4px;}
.constWrap{flex:1;overflow-y:auto;padding:8px 10px calc(24px + env(safe-area-inset-bottom));-webkit-overflow-scrolling:touch;}
.cstNode{animation:cstPop .5s cubic-bezier(.34,1.56,.64,1) both;transform-origin:center;transform-box:fill-box;cursor:default;}
.cstNode.cstTap{cursor:pointer;}
@keyframes cstPop{0%{opacity:0;transform:scale(.4);}100%{opacity:1;transform:scale(1);}}
.cstLine{stroke:rgba(251,191,36,.45);stroke-width:2;stroke-dasharray:400;stroke-dashoffset:400;animation:cstDraw .8s ease .15s forwards;}
.cstLineDim{stroke:rgba(255,255,255,.1);stroke-width:1.2;animation-delay:.4s;}
@keyframes cstDraw{to{stroke-dashoffset:0;}}
.cstPulse{animation:cstPulseK 2s ease-in-out infinite;}
@keyframes cstPulseK{0%,100%{opacity:.15;}50%{opacity:.6;}}
/* ══ DEUX VOIES (16 juillet) : catégorie lisible, résumé par formes, accompli gravé ══ */
.vgCatGrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(104px,1fr));gap:7px;margin:12px 0 4px;}
/* HAUTEUR FIXE = chips UNIFORMES (les noms longs type "Développement personnel"
   débordaient sur 2 lignes : difforme). Le label clampe à 2 lignes, centré.
   font-weight CONSTANT, transition sans propriété de layout (piège reflow) */
.vgCatChip{display:flex;align-items:center;gap:7px;height:46px;box-sizing:border-box;padding:6px 9px;border-radius:11px;border:1px solid rgba(255,255,255,.1);background:rgba(255,255,255,.04);color:rgba(255,255,255,.75);font-size:11px;font-weight:700;cursor:pointer;font-family:'Space Grotesk',sans-serif;transition:border-color .15s,background .15s,color .15s;text-align:left;}
.vgCatChip span{line-height:1.15;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;min-width:0;}
.vgCatChip .gi{width:15px;height:15px;flex:none;fill:currentColor;}
.vgCatChip.on{border-color:var(--vg1,#a78bfa);background:rgba(167,139,250,.12);color:#fff;}
.vgsChip{display:inline-flex;align-items:center;gap:5px;padding:3px 10px;border-radius:99px;border:1px solid rgba(34,211,238,.35);background:rgba(34,211,238,.08);color:rgba(165,243,252,.95);font-size:11.5px;font-weight:700;}
.vgsBar{display:inline-block;width:90px;height:7px;border-radius:99px;background:rgba(255,255,255,.08);overflow:hidden;}
.vgsBar i{display:block;width:40%;height:100%;border-radius:99px;background:linear-gradient(90deg,#a78bfa,#8b5cf6);}
.vgsPath{display:inline-flex;align-items:center;margin-right:7px;}
.vgsDot{width:8px;height:8px;border-radius:50%;border:1.5px solid rgba(251,191,36,.55);display:inline-block;}
.vgsSeg{width:8px;height:1.5px;background:rgba(251,191,36,.25);display:inline-block;}
.vtreeSheetDone{padding:9px 12px;border-radius:10px;border:1px solid rgba(34,197,94,.25);background:rgba(34,197,94,.06);font-size:11px;font-weight:700;color:rgba(134,239,172,.9);text-align:center;}
.qXpTag.hasConst{cursor:pointer;border-color:rgba(167,139,250,.28);}
.qXpTag.hasConst:active{transform:scale(.96);}
/* ══ Constellation de liaison (16 juillet) ══ */
.cstNode.cstTap{cursor:pointer;}
.cstNode.cstLinked{filter:drop-shadow(0 0 6px rgba(255,255,255,.3));}
.constUnlink{display:block;margin:16px auto 0;padding:9px 16px;border-radius:99px;border:1px solid rgba(239,68,68,.35);background:rgba(239,68,68,.1);color:rgba(252,165,165,.95);font-size:12px;font-weight:700;cursor:pointer;font-family:'Space Grotesk',sans-serif;}
/* ══ Paliers-actions (F, 16 juillet) : éditeur ligne, tag horizon, rappel chemin ══ */
.monRowsWrap{display:flex;flex-direction:column;gap:7px;margin:10px 0 4px;}
.monRow{display:flex;align-items:center;gap:6px;}
.monRowTxt{flex:1;min-width:0;padding:8px 10px;border-radius:9px;border:1px solid rgba(255,255,255,.14);background:rgba(255,255,255,.05);color:#fff;font-size:12px;font-family:'Space Grotesk',sans-serif;}
.monRowHz{display:flex;gap:2px;flex:none;}
.monHz{font-size:9.5px;font-weight:700;padding:5px 7px;border:1px solid rgba(255,255,255,.14);background:rgba(255,255,255,.04);color:rgba(255,255,255,.5);cursor:pointer;font-family:'Space Grotesk',sans-serif;}
.monHz:first-child{border-radius:7px 0 0 7px;}.monHz:last-child{border-radius:0 7px 7px 0;}
.monHz.on{background:rgba(251,191,36,.18);border-color:rgba(251,191,36,.5);color:rgba(253,230,138,.95);}
.monRowDiff{flex:none;font-size:9.5px;font-weight:700;padding:5px 8px;border-radius:7px;border:1px solid rgba(167,139,250,.3);background:rgba(167,139,250,.08);color:rgba(196,181,253,.9);cursor:pointer;white-space:nowrap;font-family:'Space Grotesk',sans-serif;}
.monRowDel{flex:none;width:24px;height:24px;border-radius:50%;border:1px solid rgba(239,68,68,.25);background:rgba(239,68,68,.08);color:rgba(252,165,165,.8);cursor:pointer;font-size:11px;}
.monRowAdd{margin-top:2px;padding:8px;border-radius:9px;border:1px dashed rgba(255,255,255,.2);background:transparent;color:rgba(255,255,255,.6);font-size:11.5px;font-weight:700;cursor:pointer;font-family:'Space Grotesk',sans-serif;}
.vmpHzTag{flex:none;font-size:8.5px;font-weight:800;padding:2px 6px;border-radius:99px;letter-spacing:.4px;}
.vmpHzTag.hz-jour{background:rgba(96,165,250,.15);color:rgba(147,197,253,.9);}
.vmpHzTag.hz-semaine{background:rgba(167,139,250,.15);color:rgba(196,181,253,.9);}
.vmpHzTag.hz-mois{background:rgba(34,211,238,.15);color:rgba(165,243,252,.9);}
.vmpDotWrap{display:inline-flex;flex-direction:column;align-items:center;gap:1px;}
.vmpDotHz{font-size:6.5px;font-weight:800;color:rgba(255,255,255,.35);line-height:1;}
/* ══ Vision 3e passe (16 juillet) : type chip, constellation empty, bar const ══ */
.vTypeChip{display:inline-flex;align-items:center;gap:5px;padding:3px 10px;border-radius:99px;font-size:10.5px;font-weight:800;letter-spacing:.3px;font-family:'Space Grotesk',sans-serif;}
.vTypeChip .gi{width:12px;height:12px;fill:currentColor;}
.vTypeChip.tChantier{border:1px solid rgba(251,191,36,.4);background:rgba(251,191,36,.1);color:rgba(253,230,138,.95);}
.vTypeChip.tMesure{border:1px solid rgba(34,211,238,.4);background:rgba(34,211,238,.1);color:rgba(165,243,252,.95);}
.vTypeChip.tSimple{border:1px solid rgba(167,139,250,.4);background:rgba(167,139,250,.1);color:rgba(196,181,253,.95);}
.constEmpty{display:flex;flex-direction:column;align-items:center;gap:12px;text-align:center;padding:48px 28px;max-width:340px;margin:0 auto;}
.constEmpty .gi{width:42px;height:42px;fill:rgba(167,139,250,.5);}
.constEmptyT{font-size:14px;font-weight:700;color:rgba(255,255,255,.85);line-height:1.4;}
.constEmptyS{font-size:12px;color:rgba(255,255,255,.5);line-height:1.5;}
.vtreeBarBtn.vtbConst{flex:none;min-width:0;padding:0 12px;}
.vtreeBarBtn.vtbConst .gi{width:16px;height:16px;fill:rgba(251,191,36,.85);}
/* Bouton Constellation dans la bannière Vision (16 juillet : hors de la barre d'échelles) */
.btnConstell{border-color:rgba(251,191,36,.3)!important;color:rgba(253,230,138,.95)!important;}
.btnConstell .gi{width:12px;height:12px;fill:rgba(251,191,36,.9);vertical-align:-2px;}
/* Éditeur Monument 2 lignes lisible (16 juillet) */
.monRow{flex-direction:column;align-items:stretch;gap:6px;padding:9px;border-radius:11px;border:1px solid rgba(255,255,255,.08);background:rgba(255,255,255,.03);}
.monRowTop{display:flex;align-items:center;gap:8px;}
.monRowTxt{flex:1;min-width:0;padding:10px 12px;font-size:14px;color:#fff;}
.monRowCtl{display:flex;align-items:center;gap:6px;flex-wrap:wrap;}
.monRowQ{flex:none;display:inline-flex;align-items:center;gap:4px;font-size:9.5px;font-weight:700;padding:5px 8px;border-radius:7px;border:1px solid rgba(34,211,238,.25);background:rgba(34,211,238,.06);color:rgba(165,243,252,.75);cursor:pointer;font-family:'Space Grotesk',sans-serif;}
.monRowQ .gi{width:11px;height:11px;fill:currentColor;}
.monRowQ.on{border-color:rgba(34,211,238,.55);background:rgba(34,211,238,.14);color:rgba(165,243,252,1);}
.monRowQuant{display:flex;gap:6px;}
.monRowTarget{flex:none;width:96px;padding:8px 10px;border-radius:8px;border:1px solid rgba(34,211,238,.25);background:rgba(255,255,255,.05);color:#fff;font-size:12px;text-align:center;}
.monRowCLo{flex:none;width:70px;padding:8px 10px;border-radius:8px;border:1px solid rgba(74,222,128,.3);background:rgba(255,255,255,.05);color:#fff;font-size:12px;text-align:center;}
.monRowCRule{flex:none;font-size:10px;font-weight:800;letter-spacing:.4px;text-transform:uppercase;padding:7px 10px;border-radius:8px;border:1px solid rgba(74,222,128,.4);background:rgba(74,222,128,.1);color:rgba(187,247,208,.95);cursor:pointer;white-space:nowrap;font-family:'Space Grotesk',sans-serif;}
.monRowUnit{flex:1;min-width:0;padding:8px 10px;border-radius:8px;border:1px solid rgba(34,211,238,.25);background:rgba(255,255,255,.05);color:#fff;font-size:12px;}
/* Contrôle range/valeurs sur 2 lignes : règle+fenêtre en haut, valeurs au large
   en dessous avec labels « entre … et … » (unité lisible, retour user) */
.monRowCtrlHead,.planRowCtrlHead{display:flex;gap:6px;flex-wrap:wrap;}
.monRowCtrlVals{margin-top:5px;}
.monRowRange,.planRowRange{display:flex;align-items:center;gap:6px;}
.monRowLbl,.planRowLbl{flex:none;font-size:13px;font-weight:700;color:rgba(134,239,172,.92);font-family:'Space Grotesk',sans-serif;}
.monRowRange .monRowCLo,.monRowRange .monRowTarget{flex:1 1 0;width:auto;min-width:0;}
.monRowRange .monRowUnit{flex:1.3 1 0;min-width:0;}
.planRowRange .planRowCLo,.planRowRange .planRowTarget{flex:1 1 0;min-width:0;}
.planRowRange .planRowUnit{flex:1.3 1 0;min-width:0;}
/* iOS ZOOME au focus si l'input fait < 16px (même avec maximum-scale=1 sur iOS récent) :
   ces champs de dialogue passent à 16px pour ne JAMAIS déclencher le zoom (retour user
   "ça crée un zoom vilain"). */
.monRowQuant input,.planRowExtra input,.vgRangeRow input,.vgNameRow .vgActionInput,.vgNameRow .qNumInput,.vgNameRow .qUnitInput,.qNumInput,.qUnitInput,#_qgeAct,#_qgeLo,#_qgeNum,#_qgeUnit,#_dteTxt,#_dteNum,#_dteUnit,#pfQNum,#pfQUnit,#vgUqNum,#vgUqUnit,#vgRangeLo,#vgRangeHi,#vgCtrlLo,#vgQNum,#vgQUnit{font-size:16px;}
/* Allusion Joute/Cordée sur le déblocage de l'Adversaire (16 juillet) */
.unlockTease{margin-top:10px;padding:9px 12px;border-radius:10px;border:1px dashed rgba(251,146,60,.35);background:rgba(251,146,60,.05);font-size:11px;font-style:italic;line-height:1.5;opacity:.9;}
.unlockTease.hidden{display:none;}
.qNatBtn.natLocked{opacity:.65;cursor:default;}
.exVConst{margin-top:8px;padding:8px;border-radius:12px;background:radial-gradient(ellipse at 50% 20%,rgba(251,191,36,.06),transparent 70%);border:1px solid rgba(255,255,255,.06);}
/* Catégorie éditable sur la fiche + par step (16 juillet) */
.vCatChip{cursor:pointer;border:1px solid rgba(255,255,255,.16)!important;background:rgba(255,255,255,.05)!important;color:rgba(255,255,255,.8)!important;}
.vCatChip .gi{width:12px;height:12px;fill:currentColor;vertical-align:-2px;}
.vCatChip.locked{cursor:default;opacity:.7;}
.monRowNat{flex:none;width:32px;height:30px;border-radius:7px;border:1px solid rgba(255,255,255,.14);background:rgba(255,255,255,.04);cursor:pointer;display:inline-flex;align-items:center;justify-content:center;}
.monRowNat .gi{width:15px;height:15px;fill:rgba(196,181,253,.85);}
/* Icône de thème par objectif dans le détail de journée (16 juillet) */
.dayObjNat{display:inline-flex;vertical-align:-2px;}
.dayObjNat .gi{width:13px;height:13px;fill:rgba(167,139,250,.85);}
/* Mois passé sans Vision : note neutre, jamais d'invite à planifier en arrière (16 juillet) */
.hhGoalsPast{cursor:default;opacity:.6;}
.hhGoalsPast .gi{width:13px;height:13px;fill:rgba(255,255,255,.5);vertical-align:-2px;margin-right:4px;}
/* Indice du nom suggéré (placeholder) dans la création guidée (16 juillet) */
.vgNameHint{margin-top:6px;font-size:11px;color:rgba(255,255,255,.45);font-style:italic;}
/* Constellation globale : scène pan/zoom type arbre de compétences (16 juillet) */
.constStage{flex:1;overflow:hidden;position:relative;touch-action:none;cursor:grab;margin:0 8px;border-radius:14px;background:radial-gradient(120% 90% at 50% 0%,rgba(167,139,250,.06),rgba(5,8,15,0) 70%);}
.constStage.grabbing{cursor:grabbing;}
.constStage svg{transform-origin:0 0;will-change:transform;}
.constStage .cstTap{cursor:pointer;}
.constZoomBar{display:flex;justify-content:center;gap:8px;padding:8px 0 calc(12px + env(safe-area-inset-bottom));}
.constZoomBar button{width:40px;height:34px;border-radius:9px;border:1px solid rgba(255,255,255,.16);background:rgba(255,255,255,.06);color:#fff;font-size:17px;font-weight:700;cursor:pointer;display:flex;align-items:center;justify-content:center;}
.constZoomBar button:active{background:rgba(255,255,255,.14);}
/* Constellation : mode Relier (16 juillet) */
.constHeadBtns{display:flex;align-items:center;gap:8px;}
.constLinkBtn{display:inline-flex;align-items:center;gap:5px;padding:6px 11px;border-radius:9px;border:1px solid rgba(251,191,36,.35);background:rgba(251,191,36,.08);color:#fde68a;font-size:12px;font-weight:700;cursor:pointer;}
.constLinkBtn .gi{width:13px;height:13px;fill:#fde68a;}
.constLinkBtn.active{background:rgba(251,191,36,.9);color:#1a1206;border-color:rgba(251,191,36,1);}
.constLinkBtn.active .gi{fill:#1a1206;}
.cstNode.cstDim{opacity:.24;}
.cstNode.cstCand{opacity:1;}
.cstNode.cstCand circle:first-of-type{stroke:rgba(251,191,36,.9)!important;stroke-width:2.5px;}
.cstNode.cstSel circle:first-of-type{stroke:#a78bfa!important;stroke-width:3px;}
/* Constellation : barre d'outils basse (Relier + zoom séparés du titre, 16 juillet) */
.constToolbar{display:flex;flex-wrap:wrap;align-items:center;justify-content:center;gap:8px 14px;padding:8px 12px calc(12px + env(safe-area-inset-bottom));}
.constToolbar .constWeekNav{order:-1;flex:1 0 100%;justify-content:center;}
.constToolbar .constZoomBar{padding:0;margin:0;}
/* Constellation : parent actuel (toucher = délier) — rouge de détachement (16 juillet) */
.cstNode.cstCur circle:first-of-type{stroke:#f87171!important;stroke-width:3px;}
.cstNode.cstCur{opacity:1;}
/* Création guidée : chips d'unités déjà utilisées + distinction mesurable au nommage (16 juillet) */
.vgUnitChips{display:flex;flex-wrap:wrap;align-items:center;gap:6px;margin-top:10px;}
.vgUnitChipsLab{font-size:11px;color:rgba(255,255,255,.4);margin-right:2px;}
/* Chip unité = pastille (pick) + croix de rejet (retour user : nettoyer le pool en 1 clic) */
.vgUnitChip{display:inline-flex;align-items:stretch;border-radius:999px;border:1px solid rgba(34,211,238,.3);background:rgba(34,211,238,.08);overflow:hidden;}
.vgUnitChipPick{padding:5px 6px 5px 11px;background:none;border:none;color:#a5f3fc;font-size:12px;font-weight:600;cursor:pointer;font-family:'Space Grotesk',sans-serif;}
.vgUnitChipX{padding:5px 8px 5px 4px;background:none;border:none;color:rgba(165,243,252,.45);font-size:12px;cursor:pointer;line-height:1;}
.vgUnitChipX:hover{color:rgba(252,165,165,.95);}
.vgUnitChip.on{background:rgba(34,211,238,.85);border-color:rgba(34,211,238,1);}
.vgUnitChip.on .vgUnitChipPick{color:#04222b;}
.vgUnitChip.on .vgUnitChipX{color:rgba(4,34,43,.5);}
.vgNameRow{display:flex;align-items:stretch;gap:8px;}
.vgNameRow #vgInput{flex:1;min-width:0;}
.vgNameUnit{display:inline-flex;align-items:center;gap:5px;white-space:nowrap;padding:0 12px;border-radius:10px;border:1px solid rgba(34,211,238,.35);background:rgba(34,211,238,.1);color:#a5f3fc;font-size:12px;font-weight:700;}
.vgNameUnit .gi{width:13px;height:13px;fill:#a5f3fc;}
/* Quantifiable en 3 blocs : action / nombre / unité (16 juillet) */
.qRowTop .qActionInput{flex:1;min-width:0;}
.qRowTop .qNumInput{width:56px;flex:none;text-align:center;font-variant-numeric:tabular-nums;}
.qRowTop .qUnitInput{width:88px;flex:none;}
.qRowTop .qNumInput,.qRowTop .qUnitInput{background:rgba(34,211,238,.07);border:1px solid rgba(34,211,238,.28);border-radius:9px;color:#a5f3fc;padding:0 10px;font-size:14px;font-weight:600;}
.qRowTop .qUnitInput.locked{opacity:.7;cursor:default;}
.qRowTop .qNumInput::placeholder,.qRowTop .qUnitInput::placeholder{color:rgba(165,243,252,.4);}
/* Création Vision mesurable : 3 blocs action / nombre / unité (16 juillet) */
.vgNameRow.vg3{display:flex;gap:8px;align-items:stretch;}
.vgNameRow.vg3 .vgActionInput{flex:1;min-width:0;}
.vgNameRow.vg3 .qNumInput{width:64px;flex:none;text-align:center;}
.vgNameRow.vg3 .qUnitInput{width:96px;flex:none;}
.vgNameRow.vg4{display:flex;gap:6px;align-items:stretch;}
.vgNameRow.vg4 .vgActionInput{flex:1;min-width:0;}
.vgNameRow.vg4 .qNumInput{width:52px;flex:none;text-align:center;}
.vgNameRow.vg4 .qUnitInput{width:76px;flex:none;}
/* Range de Contrôle : « entre [min] et [max] [unité] », l'action est sur sa
   propre ligne au-dessus (sinon 4 champs sur une rangée = tronqué sur mobile) */
.vgRangeRow{display:flex;gap:7px;align-items:center;flex-wrap:nowrap;}
.vgRangeLbl{flex:none;font-size:13px;font-weight:700;color:rgba(134,239,172,.9);font-family:'Space Grotesk',sans-serif;}
.vgRangeRow .qNumInput{flex:1 1 0;min-width:0;text-align:center;}
.vgRangeRow .qUnitInput{flex:1.3 1 0;min-width:0;}
/* Type Résultat : le réel décide (17 juillet) */
.vTypeChip.tResult{border-color:rgba(251,191,36,.35)!important;background:rgba(251,191,36,.08)!important;color:#fde68a!important;}
.vResultWinBtn{display:inline-flex;align-items:center;gap:5px;padding:6px 12px;border-radius:9px;border:1px solid rgba(251,191,36,.5);background:linear-gradient(135deg,rgba(251,191,36,.18),rgba(251,146,60,.12));color:#fde68a;font-size:12px;font-weight:700;cursor:pointer;}
.vResultWinBtn:active{transform:scale(.97);}
/* La Limite : plafond à tenir (17 juillet) */
.vTypeChip.tLimite{border-color:rgba(74,222,128,.35)!important;background:rgba(74,222,128,.08)!important;color:#86efac!important;}
.vTypeChip.tLimite.broken{background:rgba(248,113,113,.22)!important;color:#fecaca!important;border-color:rgba(248,113,113,.6)!important;font-weight:800;}
/* La Limite v2 : journal quotidien (carte dash + fiche), DA sprite (17 juillet) */
.lmCard{border:1px solid rgba(74,222,128,.25);background:rgba(74,222,128,.04);border-radius:14px;padding:12px 14px;margin-bottom:10px;}
.lmCard.broken{border-color:rgba(248,113,113,.55);background:rgba(248,113,113,.1);}
.lmHead{display:flex;align-items:center;gap:8px;margin-bottom:8px;}
.lmHead .gi{width:15px;height:15px;fill:#86efac;flex:none;}
.lmTitle{flex:1;min-width:0;font-size:13px;font-weight:700;color:rgba(255,255,255,.9);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.lmState{font-size:11px;font-weight:800;color:#86efac;letter-spacing:.5px;}
.lmGauge{height:6px;border-radius:99px;background:rgba(255,255,255,.07);overflow:hidden;}
.lmGauge i{display:block;height:100%;border-radius:99px;background:linear-gradient(90deg,#4ade80,#facc15 60%,#f87171);transition:width .3s ease;}
.lmGauge.broken i{background:#f87171;}
.lmRow{display:flex;align-items:center;gap:6px;margin-top:8px;flex-wrap:wrap;}
.lmLab{flex:1;min-width:0;font-size:11px;color:rgba(255,255,255,.6);}
.lmInput{width:58px;flex:none;text-align:center;background:rgba(255,255,255,.05);border:1px solid rgba(255,255,255,.15);border-radius:8px;color:#fff;padding:6px 4px;font-size:13px;font-weight:600;}
.lmBtn{flex:none;padding:6px 11px;border-radius:8px;border:1px solid rgba(248,113,113,.35);background:rgba(248,113,113,.1);color:#fca5a5;font-size:11px;font-weight:700;cursor:pointer;}
.lmBtn.minus{padding:6px 9px;}
.lmBtn.zero{border-color:rgba(74,222,128,.35);background:rgba(74,222,128,.08);color:#86efac;}
.lmBtn:disabled{opacity:.35;cursor:default;}
.lmMissHead{margin-top:10px;font-size:10px;font-weight:700;letter-spacing:.5px;text-transform:uppercase;color:rgba(255,255,255,.4);}
.lmRow.lmPast .lmLab{color:rgba(255,255,255,.45);}
.lmDays{display:flex;flex-wrap:wrap;gap:6px;margin-top:8px;}
.lmDays span{font-size:10px;color:rgba(255,255,255,.45);background:rgba(255,255,255,.05);border-radius:6px;padding:3px 7px;}
.vResultWinBtn.undo{border-color:rgba(255,255,255,.2);background:rgba(255,255,255,.05);color:rgba(255,255,255,.6);}
.vResultWinBtn .gi{width:13px;height:13px;fill:currentColor;}
.vgoIcon .gi{width:16px;height:16px;fill:rgba(196,181,253,.9);}
/* Carte Limite v3 : question claire + XP visible (17 juillet) */
.lmKick{flex:none;font-size:9px;font-weight:800;letter-spacing:1.5px;color:rgba(134,239,172,.7);}
.lmAsk{margin-top:9px;font-size:12.5px;font-weight:700;color:rgba(255,255,255,.85);}
.lmBtnZero{flex:none;padding:8px 13px;border-radius:9px;border:1px solid rgba(74,222,128,.4);background:rgba(74,222,128,.1);color:#86efac;font-size:12px;font-weight:800;cursor:pointer;}
.lmBtnZero:active{transform:scale(.97);}
.lmLab.done{color:#86efac;font-weight:600;}
/* Éditeur 3 blocs d'un goal quantitatif */
._qgeDiffRow{display:flex;flex-wrap:wrap;gap:6px;margin-top:10px;}
._qgeCatWrap{margin-top:10px;}
._qgeDiff{padding:6px 10px;border-radius:8px;border:1px solid rgba(255,255,255,.15);background:rgba(255,255,255,.04);color:rgba(255,255,255,.6);font-size:11px;font-weight:600;cursor:pointer;}
._qgeDiff.active{border-color:rgba(167,139,250,.6);background:rgba(167,139,250,.15);color:#c4b5fd;}
/* Step de palier type Résultat (17 juillet) */
.monRowQ.res{border-color:rgba(251,191,36,.4);background:rgba(251,191,36,.08);color:#fde68a;}
.monRowQ.res .gi{fill:#fde68a;}
/* Effort d'UNE unité : chips (création étape 4, éditeur, steps de palier) (17 juillet) */
.vgEffortRow{display:flex;flex-wrap:wrap;gap:7px;margin-top:9px;}
.vgEffortChip{display:flex;flex-direction:column;align-items:center;gap:2px;padding:8px 12px;border-radius:10px;border:1px solid rgba(255,255,255,.14);background:rgba(255,255,255,.04);color:rgba(255,255,255,.75);font-size:12px;font-weight:600;cursor:pointer;}
.vgEffortChip .vgEffortXp{font-size:10px;color:rgba(34,211,238,.7);font-weight:700;}
.vgEffortChip.on{border-color:rgba(34,211,238,.6);background:rgba(34,211,238,.12);color:#a5f3fc;}
.monRowEffort{flex:none;padding:0 10px;height:30px;border-radius:7px;border:1px solid rgba(34,211,238,.3);background:rgba(34,211,238,.06);color:#a5f3fc;font-size:10.5px;font-weight:700;cursor:pointer;}
/* Voies teintées à la création + budget Limite + nav semaine constellation (17 juillet) */
.vtreeGuideOpt.vgoMesure .vgoIcon .gi{fill:#67e8f9;}
.vtreeGuideOpt.vgoMesure.active{border-color:rgba(34,211,238,.55);background:rgba(34,211,238,.1);}
.cstNode.cstSated{opacity:.38;cursor:default;} /* Verdict rassasié : visible mais non liable, le tap explique */
/* Contrôle grille complète : chips règle/fenêtre + jauge min qui se remplit */
.vgCtrlRow{display:flex;flex-wrap:wrap;gap:6px;margin:8px 0 10px;align-items:center;}
.vgCtrlLab{font-size:10.5px;color:rgba(255,255,255,.4);font-weight:700;letter-spacing:.4px;}
.vgCtrlChip{font-size:11.5px;font-weight:600;padding:7px 12px;border-radius:99px;border:1px solid rgba(255,255,255,.14);background:rgba(255,255,255,.04);color:rgba(255,255,255,.6);cursor:pointer;font-family:'Space Grotesk',sans-serif;transition:border-color .15s,background .15s,color .15s;}
.vgCtrlChip.on{border-color:rgba(74,222,128,.55);background:rgba(74,222,128,.1);color:rgba(187,247,208,.95);}
.vgCtrlTo{font-size:12px;color:rgba(255,255,255,.45);padding:0 4px;align-self:center;}
.lmGauge.min{background:rgba(255,255,255,.06);border-radius:99px;height:8px;overflow:hidden;}
.lmGauge.min i{display:block;height:100%;border-radius:99px;background:linear-gradient(90deg,rgba(74,222,128,.35),#4ade80);transition:width .3s ease;}
.lmGauge.min.broken i{background:linear-gradient(90deg,rgba(239,68,68,.4),#ef4444);}
.vgCtrlHint{font-size:11px;color:rgba(255,255,255,.38);margin:-4px 0 10px;line-height:1.4;}
.monRowQ.lim{border-color:rgba(74,222,128,.45);color:rgba(187,247,208,.95);background:rgba(74,222,128,.08);}
.monRowQ.lim .gi{fill:#86efac;}
/* Valeur suivie : carte MESURE (cyan, la couleur du mesurable) */
.lmKick.sv{color:#67e8f9;}
.lmKick.zone{color:#86efac;}
/* Plan-brouillon : entrée fiche + étapes en attente + éditeur de lignes */
.vtreeSheetBtn.planEntryBtn{border-color:rgba(167,139,250,.35);color:rgba(196,181,253,.95);}
.planStepView{display:flex;align-items:center;gap:8px;padding:6px 0;font-size:12.5px;color:rgba(255,255,255,.82);border-bottom:1px solid rgba(255,255,255,.05);}
.planStepHz{flex:none;font-size:9.5px;font-weight:800;letter-spacing:.4px;text-transform:uppercase;color:rgba(196,181,253,.9);background:rgba(167,139,250,.12);border:1px solid rgba(167,139,250,.25);border-radius:6px;padding:2px 6px;}
.planStepT{flex:1;min-width:0;}
.planStepRec .gi{width:12px;height:12px;fill:#c4b5fd;}
.planActions{display:flex;flex-wrap:wrap;gap:6px;margin-top:10px;}
.planHint{font-size:11.5px;color:rgba(255,255,255,.5);line-height:1.4;margin-bottom:10px;}
.planRow{border:1px solid rgba(255,255,255,.08);border-radius:11px;padding:8px;margin-bottom:8px;background:rgba(255,255,255,.02);}
.planRowTxt{width:100%;box-sizing:border-box;background:rgba(255,255,255,.05);border:1px solid rgba(255,255,255,.1);border-radius:8px;padding:8px 10px;color:#fff;font-size:13px;font-family:'Space Grotesk',sans-serif;margin-bottom:7px;}
.planRowCtl{display:flex;flex-wrap:wrap;gap:5px;align-items:center;}
.planRowHz{display:flex;gap:3px;}
.planHz,.planRowDiff,.planRowRec,.planRowDel{font-size:11px;font-weight:600;padding:5px 9px;border-radius:8px;border:1px solid rgba(255,255,255,.14);background:rgba(255,255,255,.04);color:rgba(255,255,255,.6);cursor:pointer;font-family:'Space Grotesk',sans-serif;}
.planHz.on{border-color:rgba(167,139,250,.55);background:rgba(167,139,250,.14);color:rgba(221,214,254,.95);}
.planRowRec.on{border-color:rgba(167,139,250,.55);background:rgba(167,139,250,.14);}
.planRowRec .gi{width:12px;height:12px;fill:currentColor;vertical-align:-2px;}
.planRowDel{margin-left:auto;color:rgba(252,165,165,.7);}
.planRowN{width:42px;text-align:center;background:rgba(167,139,250,.1);border:1px solid rgba(167,139,250,.35);border-radius:8px;color:#ddd6fe;font-size:11px;padding:5px 4px;font-family:'Space Grotesk',sans-serif;}
.planRowType{font-size:11px;font-weight:700;padding:5px 9px;border-radius:8px;border:1px solid rgba(167,139,250,.4);background:rgba(167,139,250,.12);color:rgba(221,214,254,.95);cursor:pointer;font-family:'Space Grotesk',sans-serif;}
.planRowType .gi{width:12px;height:12px;vertical-align:-2px;fill:currentColor;}
.planRowExtra{display:flex;gap:6px;margin-top:6px;}
.planRowExtra .planRowTarget{width:70px;text-align:center;background:rgba(255,255,255,.05);border:1px solid rgba(255,255,255,.1);border-radius:8px;color:#fff;font-size:12px;padding:6px 4px;font-family:'Space Grotesk',sans-serif;}
.planRowExtra .planRowUnit{flex:1;min-width:0;background:rgba(255,255,255,.05);border:1px solid rgba(255,255,255,.1);border-radius:8px;color:#fff;font-size:12px;padding:6px 9px;font-family:'Space Grotesk',sans-serif;}
.planRowExtra .planRowCLo{width:64px;text-align:center;background:rgba(255,255,255,.05);border:1px solid rgba(255,255,255,.1);border-radius:8px;color:#fff;font-size:12px;padding:6px 4px;font-family:'Space Grotesk',sans-serif;}
.planRowCtrl{flex-wrap:wrap;align-items:center;}
/* Répartition d'un mesurable (total ÷ N) */
.msRow{display:flex;align-items:center;gap:8px;margin:8px 0;}
.msLab{font-size:12px;font-weight:700;color:rgba(255,255,255,.55);width:44px;}
.msInp{width:70px;text-align:center;background:rgba(34,211,238,.08);border:1px solid rgba(34,211,238,.3);border-radius:9px;color:#a5f3fc;font-size:14px;font-weight:700;padding:7px 6px;font-family:'Space Grotesk',sans-serif;}
.msUnit{font-size:12px;color:rgba(255,255,255,.55);}
.msHz{display:flex;gap:4px;}
.msHz .planHz{font-size:11px;font-weight:600;padding:6px 10px;border-radius:8px;border:1px solid rgba(255,255,255,.14);background:rgba(255,255,255,.04);color:rgba(255,255,255,.6);cursor:pointer;font-family:'Space Grotesk',sans-serif;}
.msHz .planHz.on{border-color:rgba(34,211,238,.55);background:rgba(34,211,238,.14);color:#a5f3fc;}
.msPreview{margin-top:12px;padding:10px 12px;border-radius:11px;background:rgba(34,211,238,.08);border:1px solid rgba(34,211,238,.2);color:rgba(165,243,252,.95);font-size:14px;text-align:center;}
.msPreview b{font-size:17px;color:#67e8f9;}
.lmCard.svCard{border-color:rgba(34,211,238,.22);}
.lmGauge.sv{background:rgba(255,255,255,.06);border-radius:99px;height:8px;overflow:hidden;}
.lmGauge.sv i{display:block;height:100%;border-radius:99px;background:linear-gradient(90deg,rgba(34,211,238,.35),#22d3ee);transition:width .3s ease;}
/* Récurrence : toggle création + chips fiche */
.vgRecurChip{display:inline-flex;align-items:center;gap:6px;font-size:11.5px;font-weight:600;padding:7px 12px;border-radius:99px;border:1px solid rgba(255,255,255,.14);background:rgba(255,255,255,.04);color:rgba(255,255,255,.55);cursor:pointer;font-family:'Space Grotesk',sans-serif;transition:border-color .15s,background .15s,color .15s;}
.vgRecurChip .gi{width:13px;height:13px;fill:rgba(255,255,255,.45);}
.vgRecurChip.on{border-color:rgba(167,139,250,.55);background:rgba(167,139,250,.12);color:rgba(221,214,254,.95);}
.vgRecurChip.on .gi{fill:#c4b5fd;}
.vTypeChip.tRecur{border:1px solid rgba(167,139,250,.4);background:rgba(167,139,250,.1);color:rgba(221,214,254,.95);}
.vTypeChip.tRecur .gi{width:12px;height:12px;fill:#c4b5fd;vertical-align:-2px;}
.vTypeChip.tRecur.off{opacity:.5;}
.vRecurStopBtn{font-size:10px;font-weight:700;padding:4px 10px;border-radius:99px;border:1px solid rgba(255,255,255,.14);background:none;color:rgba(255,255,255,.5);cursor:pointer;font-family:'Space Grotesk',sans-serif;margin-left:4px;vertical-align:1px;}
.vtreeGuideOpt.vgoChantier .vgoIcon .gi{fill:#fde68a;} /* or = la couleur du Chantier partout (badges, constellation) : l'icône marteau le distingue du Verdict */
.vtreeGuideOpt.vgoChantier.active{border-color:rgba(251,191,36,.55);background:rgba(251,191,36,.1);}
.vtreeGuideOpt.vgoResult .vgoIcon .gi{fill:#fde68a;}
.vtreeGuideOpt.vgoResult.active{border-color:rgba(251,191,36,.55);background:rgba(251,191,36,.1);}
.vtreeGuideOpt.vgoLimite .vgoIcon .gi{fill:#86efac;}
.vtreeGuideOpt.vgoLimite.active{border-color:rgba(74,222,128,.55);background:rgba(74,222,128,.1);}
.lmGauge.budget i{background:linear-gradient(90deg,#f87171,#facc15 40%,#4ade80);}
.lmGauge.budget.broken i{background:#f87171;}
.lmCard.broken .lmState{color:#fca5a5;}
.lmDaysHeld{font-size:22px;font-weight:800;color:#86efac;font-family:'Syne',sans-serif;margin:2px 0;}
.constWeekNav{display:flex;align-items:center;gap:6px;}
.constWeekNav button{width:30px;height:30px;border-radius:8px;border:1px solid rgba(255,255,255,.16);background:rgba(255,255,255,.05);color:#fff;font-size:15px;cursor:pointer;}
.constWeekNav span{font-size:11px;font-weight:700;color:rgba(196,181,253,.85);min-width:86px;text-align:center;}
/* Effort d'unité sur l'objectif du jour + Limite dans le calendrier (17 juillet) */
.qEffortBtn{font-size:10px;font-weight:700;padding:0 9px;white-space:nowrap;color:rgba(165,243,252,.6);border-color:rgba(34,211,238,.25)!important;}
.qEffortBtn.set{color:#a5f3fc;background:rgba(34,211,238,.1);}
.hhLim{display:inline-flex;flex:none;margin-right:2px;}
.hhLim .gi{width:12px;height:12px;fill:#86efac;}
.hhGoalRow.isLim .hhGoalPct{color:#86efac;}
/* Icône chantier (marteau) : chips, badge, option de création (17 juillet) */
.vTypeChip.tChantier .gi,.vtreeJalons .gi{width:12px;height:12px;fill:#fde68a;vertical-align:-2px;}
.vgsIcon .gi{width:14px;height:14px;fill:#fde68a;}
/* Badge Limite dans l'arbre (17 juillet) */
.vtreeQuant.lim{border-color:rgba(74,222,128,.35)!important;background:rgba(74,222,128,.08)!important;color:#86efac!important;}
.vtreeQuant.lim .gi{fill:#86efac;}
/* TUTO MMO-RPG (17 juillet) : titres Syne, rangées stats, cascade one-shot, mentors */
.tutLine{animation:tutLineIn .5s cubic-bezier(.16,1,.3,1) both;}
@keyframes tutLineIn{0%{opacity:0;transform:translateY(10px)}100%{opacity:1;transform:translateY(0)}}
.tutTitle{font-family:'Syne',sans-serif;font-size:17px;font-weight:800;letter-spacing:-.3px;color:#fff;margin:2px 0 7px;line-height:1.25;}
.tutMsgBody{line-height:1.6;}
.tutRows{margin-top:12px;border:1px solid rgba(255,255,255,.1);border-radius:12px;overflow:hidden;background:rgba(255,255,255,.03);}
.tutRow{display:flex;align-items:center;gap:10px;padding:9px 13px;font-size:13px;}
.tutRow+.tutRow{border-top:1px solid rgba(255,255,255,.06);}
.tutRowIco{flex:none;width:18px;text-align:center;color:rgba(167,139,250,.9);}
.tutRowIco .gi{width:14px;height:14px;fill:rgba(167,139,250,.9);}
.tutRowLab{flex:1;min-width:0;color:rgba(255,255,255,.8);}
.tutRowVal{flex:none;font-weight:800;font-family:'Space Grotesk',sans-serif;color:rgba(255,255,255,.9);}
.tutRowVal.gold{color:#fde68a;}
.tutRowVal.green{color:#86efac;}
.tutVoiceQuote{margin-top:12px;padding:12px 13px;border-radius:13px;border-left:2px solid rgba(167,139,250,.72);
  background:linear-gradient(90deg,rgba(139,92,246,.11),rgba(99,102,241,.035));font-size:12.5px;line-height:1.55;color:rgba(224,231,255,.9);font-style:italic;}
.tutVoiceQuote span{display:block;margin-bottom:4px;font-size:8.5px;font-style:normal;font-weight:800;letter-spacing:1.8px;text-transform:uppercase;color:#c4b5fd;}
.tutMentorRow{display:flex;justify-content:center;gap:10px;flex-wrap:wrap;margin:14px 0 4px;}
.tutMentorCell{display:flex;flex-direction:column;align-items:center;gap:5px;animation:tutFaceIn .55s cubic-bezier(.22,1.4,.36,1) both;}
@keyframes tutFaceIn{0%{opacity:0;transform:translateY(14px) scale(.6)}100%{opacity:1;transform:translateY(0) scale(1)}}
.tutMentorFace{width:46px;height:46px;border-radius:50%;padding:2px;background:linear-gradient(135deg,var(--m1,#a78bfa),var(--m2,#f472b6));box-shadow:0 4px 14px rgba(0,0,0,.35);}
.tutMentorFace svg{width:100%;height:100%;border-radius:50%;display:block;}
.tutMentorName{font-size:9.5px;font-weight:700;color:rgba(255,255,255,.7);letter-spacing:.3px;}

/* ── Tuto mobile : coussin de scroll sous le contenu pour que les cibles
   spotlight remontent AU-DESSUS du tooltip bas fixe (~250px). Sans lui, une
   section en fin de page (l'Observatoire) restait cachée sous le tooltip :
   butée de scroll atteinte. Retiré avec body.tutOn à la fin du tuto. ── */
@media(max-width:680px){
  body.tutOn .cardBody{padding-bottom:300px !important;}
}

/* ── Skip du tuto : cible réduite au TEXTE (le div pleine largeur avalait les
   taps visant le bouton continuer juste au-dessus) + état armé du double-tap ── */
.tutSkipLnk,.tutBubbleSkip{cursor:default;}
.tutSkipLnk span,.tutBubbleSkip span{display:inline-block;padding:6px 2px 6px 14px;cursor:pointer;}
.tutSkipLnk span.armed,.tutBubbleSkip span.armed{color:rgba(252,165,165,.92);font-weight:700;}

/* ── Progression du Plan du Sommet : chip fixe pendant la génération LLM (~20s),
   sans elle l'user croyait à un échec. Spinner = animation FONCTIONNELLE
   (feedback d'attente : jamais pausée par calmFx, conforme règle FPS). ── */
.spProgChip{position:fixed;left:50%;bottom:calc(92px + env(safe-area-inset-bottom));transform:translateX(-50%) translateY(8px);z-index:10060;display:flex;align-items:center;gap:9px;padding:11px 18px;border-radius:14px;background:rgba(12,14,22,.97);border:1px solid rgba(251,191,36,.35);color:rgba(253,230,138,.95);font-size:12px;font-weight:600;font-family:'Space Grotesk',sans-serif;box-shadow:0 8px 32px rgba(0,0,0,.5);opacity:0;pointer-events:none;transition:opacity .2s ease,transform .2s ease;max-width:calc(100vw - 40px);}
.spProgChip.show{opacity:1;transform:translateX(-50%) translateY(0);}
.spProgSpin{width:13px;height:13px;flex-shrink:0;border-radius:50%;border:2px solid rgba(251,191,36,.25);border-top-color:rgba(251,191,36,.9);animation:spProgRot .8s linear infinite;}
@keyframes spProgRot{to{transform:rotate(360deg)}}

/* ── Bouton jour de repos dans le détail d'une journée du Calendrier ── */
.dayReposBtn{width:100%;margin-top:10px;justify-content:center;display:flex;align-items:center;gap:6px;border-color:rgba(139,92,246,.3);color:rgba(196,181,253,.9);white-space:normal;height:auto;line-height:1.4;text-align:center;padding:9px 11px;box-sizing:border-box;}

/* ── Zone jour de repos dans le détail d'une case du Calendrier ── */
.dayReposZone{display:flex;flex-direction:column;gap:6px;margin-top:10px;min-width:0;max-width:100%;box-sizing:border-box;}
.dayReposBtn.sub{border-color:rgba(255,255,255,.12);color:rgba(255,255,255,.55);}

/* ── Mode "Jours de repos" du Calendrier ── */
#reposPickBtn.active{border-color:rgba(139,92,246,.45);background:rgba(139,92,246,.14);color:rgba(196,181,253,.95);}
.calDay.reposPickable{cursor:pointer;box-shadow:inset 0 0 0 1px rgba(139,92,246,.28);}
.calDay.reposPickable.reposRecurPick{box-shadow:inset 0 0 0 1px rgba(52,211,153,.5);} /* sous-mode récurrent : liseré teal */
.calDay.reposPickPast{opacity:.35;cursor:default;}
#reposRecurBtn.active{border-color:rgba(52,211,153,.55);color:rgba(110,231,183,.95);background:rgba(52,211,153,.12);}
.dayReposNote{margin-top:10px;font-size:11.5px;line-height:1.45;color:rgba(196,181,253,.8);display:flex;align-items:center;gap:6px;}
.dayReposNote .gi{width:12px;height:12px;flex:none;fill:rgba(196,181,253,.8);}

/* ── REGISTRE DE VISION : « Le mouvement des objectifs » (neutre, sobre, replié, FPS-safe) ── */
.dayMoveSection{margin-top:12px;border-top:1px solid rgba(255,255,255,.07);padding-top:8px;}
.dayMoveSummary{list-style:none;cursor:pointer;font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.5px;color:rgba(200,190,255,.5);display:flex;align-items:center;gap:6px;user-select:none;}
.dayMoveSummary::-webkit-details-marker{display:none;}
.dayMoveSummary .gi{width:12px;height:12px;flex:none;fill:rgba(200,190,255,.5);}
.dayMoveSummary .dayMoveN{margin-left:auto;background:rgba(255,255,255,.08);color:rgba(255,255,255,.6);border-radius:10px;padding:1px 7px;font-size:10px;}
.dayMoveRow{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 6px;margin-top:7px;font-size:11px;color:rgba(255,255,255,.62);line-height:1.4;}
.dayMoveRow .gi{width:10px;height:10px;flex:none;fill:rgba(255,255,255,.4);align-self:center;}
.dayMoveRow .dayMoveHead{font-weight:600;flex:1;min-width:0;overflow-wrap:anywhere;}
.dayMoveRow .dayMoveDetail{flex-basis:100%;padding-left:16px;color:rgba(255,255,255,.4);font-size:10px;overflow-wrap:anywhere;}
.dayMoveMore{margin-top:7px;font-size:10.5px;font-weight:600;color:rgba(167,139,250,.75);cursor:pointer;}
.dayMoveFoot{margin-top:9px;font-size:10.5px;color:rgba(255,255,255,.35);line-height:1.5;}
.dayMoveToggle,.dayMoveShow{color:rgba(200,190,255,.7);cursor:pointer;text-decoration:underline;text-underline-offset:2px;}
.dayMoveHidden{margin-top:12px;border-top:1px solid rgba(255,255,255,.07);padding-top:8px;font-size:11px;color:rgba(255,255,255,.4);display:flex;align-items:center;gap:6px;}
.dayMoveHidden .gi{width:11px;height:11px;flex:none;fill:rgba(255,255,255,.35);}
.dayMoveAll{color:rgba(200,190,255,.75);cursor:pointer;text-decoration:underline;text-underline-offset:2px;}

/* ── LE REGISTRE DE VISION (overlay global, ledger neutre browsable) ── */
.visRegOv{position:fixed;inset:0;z-index:10052;background:radial-gradient(ellipse at 50% 18%,#101427 0%,#05070f 62%);display:flex;flex-direction:column;opacity:0;transition:opacity .25s ease;}
.visRegOv.show{opacity:1;}
.visRegOv.hidden{display:none;}
.visRegHead{display:flex;align-items:center;justify-content:space-between;padding:calc(14px + env(safe-area-inset-top)) 18px 4px;font-family:'Syne',sans-serif;font-weight:800;font-size:15px;letter-spacing:2.2px;color:rgba(200,190,255,.92);}
.visRegHead .gi{width:16px;height:16px;fill:rgba(200,190,255,.92);vertical-align:-2px;margin-right:5px;}
.visRegClose{width:32px;height:32px;border-radius:50%;border:1px solid rgba(255,255,255,.2);background:rgba(255,255,255,.06);color:#fff;font-size:14px;cursor:pointer;flex:none;}
.visRegSub{padding:0 18px 10px;font-size:11px;color:rgba(255,255,255,.42);letter-spacing:.3px;line-height:1.4;}
.visRegBody{flex:1;overflow-y:auto;padding:4px 18px calc(24px + env(safe-area-inset-bottom));-webkit-overflow-scrolling:touch;}
.visRegLoading{color:rgba(255,255,255,.4);font-size:12px;padding:20px 0;text-align:center;}
.visRegEmpty{color:rgba(255,255,255,.5);font-size:12.5px;line-height:1.6;padding:24px 6px;max-width:520px;}
.visRegEmpty .gi{width:14px;height:14px;fill:rgba(200,190,255,.6);vertical-align:-2px;margin-right:4px;}
/* Regroupé par MOIS puis chaque JOUR en <details> fermé (retour user "trop gros, à rallonge") */
.visRegMonth{margin-top:16px;}
.visRegMonth:first-child{margin-top:2px;}
.visRegMonthLab{font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.6px;color:rgba(200,190,255,.55);margin-bottom:6px;padding-bottom:5px;border-bottom:1px solid rgba(200,190,255,.12);}
.visRegMonthN{font-weight:500;text-transform:none;letter-spacing:0;color:rgba(255,255,255,.35);}
.visRegDay{border-radius:9px;background:rgba(255,255,255,.02);margin-top:5px;}
.visRegDay[open]{background:rgba(255,255,255,.035);}
.visRegDaySum{list-style:none;cursor:pointer;display:flex;align-items:center;gap:6px;padding:8px 10px;font-size:11.5px;font-weight:600;color:rgba(255,255,255,.75);user-select:none;}
.visRegDaySum::-webkit-details-marker{display:none;}
.visRegDaySum::before{content:'▸';font-size:9px;color:rgba(200,190,255,.5);transition:transform .15s ease;}
.visRegDay[open] .visRegDaySum::before{transform:rotate(90deg);}
.visRegDayN{margin-left:auto;background:rgba(255,255,255,.07);color:rgba(255,255,255,.55);border-radius:9px;padding:1px 7px;font-size:10px;font-weight:600;}
.visRegDayBody{padding:0 10px 8px;}
.visRegToday{background:rgba(200,190,255,.14);color:rgba(200,190,255,.85);border-radius:8px;padding:1px 6px;font-size:9px;margin-left:5px;}
.visRegRow{display:flex;flex-wrap:wrap;align-items:baseline;gap:3px 6px;padding:5px 0;font-size:11px;color:rgba(255,255,255,.66);line-height:1.4;border-bottom:1px solid rgba(255,255,255,.05);}
.visRegRow:last-child{border-bottom:none;}
.visRegRow .gi{width:10px;height:10px;flex:none;fill:rgba(255,255,255,.4);align-self:center;}
/* Nom DÉLIBÉRÉMENT distinct de .visRegHead (l'en-tête plein écran) : une collision de classe
   faisait hériter Syne/800/15px/2.2px sur chaque ligne de mouvement — "écrit trop gros" (23 juillet) */
.visRegMHead{font-weight:600;color:rgba(255,255,255,.78);flex:1;min-width:0;overflow-wrap:anywhere;font-family:'Space Grotesk',sans-serif;font-size:11.5px;letter-spacing:normal;}
.visRegDetail{flex-basis:100%;padding-left:16px;color:rgba(255,255,255,.42);font-size:10.5px;overflow-wrap:anywhere;}

/* ── Marque de repos sur les cases du Calendrier (jour posé à venir) ── */
.calReposMark{position:absolute;top:1px;right:2px;font-size:8px;color:rgba(147,197,253,.9);pointer-events:none;}
.calReposMark .gi{width:9px;height:9px;}
.calDay.reposPickable.repos{box-shadow:inset 0 0 0 2px rgba(96,165,250,.6);background:rgba(96,165,250,.18);}

/* ── Lune de repos vs icône d'événement : jamais superposées (l'événement garde
   le coin droit, la lune passe à gauche) ── */
.calDay.hasEvent .calReposMark{right:auto;left:2px;}

/* ── Mini-tuto de déblocage : carte fixe basse, montrée SEULE (z sous cfm 10070) ── */
.featHint{position:fixed;left:50%;bottom:calc(84px + env(safe-area-inset-bottom));transform:translateX(-50%) translateY(12px);z-index:10055;width:min(420px,calc(100vw - 28px));padding:16px 18px;border-radius:16px;background:rgba(12,14,22,.97);border:1px solid rgba(139,92,246,.35);box-shadow:0 12px 40px rgba(0,0,0,.55);opacity:0;pointer-events:none;transition:opacity .25s ease,transform .25s ease;}
.featHint.show{opacity:1;pointer-events:auto;transform:translateX(-50%) translateY(0);}
.featHintTitle{font-family:'Syne',sans-serif;font-weight:800;font-size:14px;color:#fff;margin-bottom:6px;}
.featHintTxt{font-size:12.5px;line-height:1.5;color:rgba(255,255,255,.75);}
.featHintBtn{margin-top:12px;width:100%;padding:10px;border-radius:10px;border:1px solid rgba(255,255,255,.16);background:rgba(255,255,255,.08);color:rgba(255,255,255,.9);font-weight:700;font-size:12px;cursor:pointer;font-family:'Space Grotesk',sans-serif;}
.featHintActions{display:flex;gap:8px;margin-top:12px;}
.featHintActions .featHintBtn{margin-top:0;flex:1;width:auto;}
.featHintBtnAlt{color:rgba(255,255,255,.55);background:rgba(255,255,255,.035);}
.featHint.summitCall{border-color:rgba(251,191,36,.34);
  box-shadow:0 12px 40px rgba(0,0,0,.55),0 0 34px rgba(251,191,36,.07);}
.featHint.summitCall .featHintTitle{display:flex;align-items:center;gap:8px;color:#fde68a;}
.featHint.summitCall .featHintTitle .gi{width:15px;height:15px;fill:#fbbf24;}
.featHint.summitCall .featHintBtnGo{color:#fde68a;border-color:rgba(251,191,36,.3);
  background:linear-gradient(135deg,rgba(251,191,36,.13),rgba(167,139,250,.08));}
.unlockShowBtn{margin:14px auto 0;display:block;padding:10px 22px;border-radius:12px;border:1px solid rgba(255,255,255,.2);background:rgba(255,255,255,.06);font-weight:700;font-size:12px;cursor:pointer;font-family:'Space Grotesk',sans-serif;letter-spacing:.4px;}
.unlockShowBtn.hidden{display:none;}
.featGlow{box-shadow:0 0 0 2px rgba(96,165,250,.5),0 0 26px rgba(96,165,250,.18);border-radius:16px;transition:box-shadow .4s ease;}

/* ── Humeur du jour du mentor (jauge dans l'en-tête de l'espace mentor) ── */
.mtMood{display:flex;align-items:center;gap:8px;margin-top:6px;}
.mtMoodLab{font-size:10px;font-weight:700;letter-spacing:.5px;text-transform:uppercase;color:rgba(255,255,255,.45);white-space:nowrap;}
.mtMoodBar{flex:0 1 110px;height:4px;border-radius:2px;background:rgba(255,255,255,.1);overflow:hidden;}
.mtMoodBar i{display:block;height:100%;border-radius:2px;background:linear-gradient(90deg,var(--mc1,#a78bfa),var(--mc2,#f472b6));transition:width .4s ease;}

/* ═══ LE DOMICILE (préfixe dm) ═══════════════════════════════
   Indigo = le Saphyr (jamais le bleu clair : c'est l'année).
   L'or est RÉSERVÉ au vérifié (l'Influence, l'Étage).
   Zéro animation infinie, zéro backdrop-filter de plus. */
.dmHead{display:flex;align-items:flex-end;justify-content:space-between;gap:12px;margin-bottom:10px;}
.dmKick{display:flex;align-items:center;gap:7px;font-size:10px;font-weight:800;letter-spacing:2.2px;color:rgba(255,255,255,.38);}
.dmHelp{width:17px;height:17px;flex:0 0 auto;border-radius:50%;border:1px solid rgba(255,255,255,.2);background:transparent;color:rgba(255,255,255,.5);font:700 10px/1 'Space Grotesk',sans-serif;cursor:pointer;padding:0;}
.dmFloor{font-family:'Syne',sans-serif;font-weight:800;font-size:20px;color:#fff;margin-top:3px;}
.dmEtage{font-family:'Space Grotesk',monospace;font-size:11.5px;font-weight:700;color:rgba(253,230,138,.8);letter-spacing:.3px;margin-left:5px;}
.dmHeadL{min-width:0;flex:0 1 auto;}
/* Une seule ligne de lecture sous le titre : les trois valeurs restent leur
   groupe historique, Calendrier devient l'accès terminal de cette même ligne. */
.dmHeadTools{display:flex;align-items:center;justify-content:flex-end;gap:8px;min-width:0;}
/* La cible reste réellement haute de 44 px, mais sa peau reprend exactement
   les bourses de 32 px : alignement visuel sans sacrifier le toucher mobile.
   Son bord droit reprend l'inset de 13 px des CTA de l'Appel (bord + padding
   du bloc) : Calendrier et « Poser une règle » terminent sur le même axe. */
.dmCalendarEntry{position:relative;display:flex;align-items:center;justify-content:flex-end;min-width:116px;
  min-height:44px;padding:6px 0;margin-right:13px;border:0;background:transparent;color:#e0e7ff;cursor:pointer;
  font:700 10.5px/1 'Space Grotesk',sans-serif;letter-spacing:.25px;white-space:nowrap;}
.dmCalendarSkin{height:32px;display:flex;align-items:center;justify-content:center;gap:7px;padding:0 10px;
  border-radius:12px;background:linear-gradient(135deg,rgba(99,102,241,.2),rgba(167,139,250,.14));
  border:1px solid rgba(129,140,248,.42);box-shadow:0 5px 16px -12px rgba(129,140,248,.9);}
.dmCalendarEntry .gi{width:15px;height:15px;fill:#a5b4fc;}
.dmCalendarEntry em{font-style:normal;color:rgba(224,231,255,.55);font-size:14px;}
.dmCalendarEntry:active .dmCalendarSkin{transform:scale(.975);}
.calNestSeg{position:relative;top:auto;z-index:2;margin:0 0 10px;}

.dmPurses.hidden{display:none;}
.dmPurses{display:flex;align-items:center;gap:7px;flex:0 0 auto;flex-wrap:wrap;}
/* ⚠ SUR TÉLÉPHONE, LES VALEURS PRENNENT LEUR PROPRE LIGNE.
   « Mon icône Influence n'apparaît pas » : elle apparaissait, mais HORS de
   l'écran. Le titre d'un étage ne peut pas rétrécir sous son mot le plus
   long (« Profondeur » ≈ 130 px en Syne 20) et les trois bourses en font
   270 : la troisième sortait par la droite, coupée juste avant son sceau.
   Un titre ne cède pas, donc c'est la rangée qui descend (règle : une
   rangée pleine largeur dans un flex exige le flex-wrap du PARENT). */
@media(max-width:560px){
  .dmHead{flex-wrap:wrap;align-items:flex-end;gap:4px 8px;}
  .dmHeadL{flex:1 0 100%;}
  .dmHeadTools{flex:1 0 100%;width:100%;justify-content:space-between;gap:8px;}
  .dmCalendarEntry{margin-left:auto;}
  .dmPurses{flex:0 1 auto;}
  .calNestSeg{margin:0 18px 10px;}
}
/* Les deux valeurs dans le HUD : mêmes couleurs, même gabarit qu'au Domicile */
/* Les deux plans, sur leur propre ligne : à trois boutons plus le "?", ça
   tronquait sur téléphone. Chacun prend la moitié, aucune troncature possible. */
/* Une voie de création grisée : présente pour le contexte, inerte */
.vtreeGuideOpt.vgoOff{opacity:.3;pointer-events:none;filter:saturate(.4);}
.vgoNote{font-size:11px;line-height:1.45;color:rgba(196,181,253,.7);margin:-4px 0 9px;}
.spPlanRow{display:flex;gap:7px;flex:1 0 100%;margin-top:2px;}
.spPlanRow .btnTiny{flex:1;justify-content:center;white-space:nowrap;}
/* LA ROUTE DU SOMMET : le Plan poussé */
.btnRouteSommet{background:linear-gradient(135deg,rgba(251,191,36,.2),rgba(167,139,250,.18));border-color:rgba(251,191,36,.4);color:#fde68a;font-weight:700;}
.spRouteLine{display:flex;align-items:center;gap:10px;margin:0 0 12px;padding:9px 12px;border-radius:13px;
  background:rgba(251,191,36,.08);border:1px solid rgba(251,191,36,.22);}
.spRouteLine.hidden{display:none;}
.srlTxt{flex:1;min-width:0;font-size:11.5px;line-height:1.4;color:rgba(255,255,255,.62);overflow-wrap:anywhere;}
.srlTxt b{color:#fde68a;}
.srlTxt .gi{width:13px;height:13px;fill:#fbbf24;vertical-align:-2px;}
.rtHead{margin-bottom:10px;}
.rtKick{font-size:9.5px;font-weight:800;letter-spacing:2.2px;color:#fbbf24;}
.rtTitle{font-family:'Syne',sans-serif;font-weight:800;font-size:18px;line-height:1.25;color:#fff;margin-top:3px;}
.rtSub{font-size:11.5px;line-height:1.5;color:rgba(255,255,255,.5);margin-bottom:11px;}
.rtDiag{padding:11px 13px;border-radius:12px;background:rgba(251,191,36,.07);border-left:2px solid rgba(251,191,36,.5);
  font-size:12.5px;line-height:1.55;color:rgba(255,255,255,.78);margin-bottom:13px;}
.rtBrief{min-height:88px;resize:vertical;}
.rtLab{font-size:10px;font-weight:800;letter-spacing:1.4px;text-transform:uppercase;color:rgba(255,255,255,.4);margin:13px 0 7px;}
.rtChips{display:flex;gap:6px;flex-wrap:wrap;}
.rtChip{padding:7px 13px;border-radius:10px;background:rgba(255,255,255,.04);border:1px solid rgba(255,255,255,.12);
  color:rgba(255,255,255,.62);font-family:'Space Grotesk',sans-serif;font-weight:700;font-size:12px;cursor:pointer;}
.rtChip.on{background:rgba(251,191,36,.16);border-color:rgba(251,191,36,.45);color:#fde68a;}
.rtQs{display:flex;flex-direction:column;gap:12px;}
.rtQ{padding:12px;border-radius:13px;background:rgba(255,255,255,.028);border:1px solid rgba(251,191,36,.16);}
/* Zone d'intitulé calibrée sur TROIS lignes : les trois questions gardent
   la même hauteur quelle que soit leur longueur, et rien n'est jamais tronqué. */
.rtQHead{display:flex;align-items:flex-start;gap:9px;min-height:54px;margin-bottom:9px;}
.rtQNum{flex:0 0 auto;width:22px;height:22px;border-radius:7px;display:flex;align-items:center;justify-content:center;
  background:rgba(251,191,36,.16);color:#fde68a;font-weight:800;font-size:11.5px;}
.rtQt{flex:1;min-width:0;font-family:'Syne',sans-serif;font-weight:700;font-size:13px;line-height:1.35;color:#fde68a;overflow-wrap:anywhere;}
.rtA{min-height:52px;resize:vertical;}
.rtBlock,.rtWeek{margin-bottom:7px;}
.rtPick{display:flex;align-items:flex-start;gap:9px;padding:10px 11px;border-radius:12px;
  background:rgba(255,255,255,.03);border:1px solid rgba(255,255,255,.08);cursor:pointer;min-width:0;}
.rtPick input{margin-top:2px;flex:0 0 auto;accent-color:#fbbf24;}
.rtPickTxt{flex:1;min-width:0;display:flex;flex-direction:column;gap:3px;}
.rtPickTxt b{font-size:12.5px;color:#fff;font-weight:700;overflow-wrap:anywhere;}
.rtPickTxt em{font-style:normal;font-size:10.5px;line-height:1.4;color:rgba(255,255,255,.45);overflow-wrap:anywhere;}
.rtOut{color:rgba(134,239,172,.8) !important;}
.rtOut .gi{width:11px;height:11px;fill:#4ade80;vertical-align:-1px;margin-right:3px;}
.rtB{color:rgba(252,165,165,.65) !important;}
.rtT{color:rgba(199,210,254,.5) !important;}
/* La mécanique de la semaine se LIT : le langage couleur de l'app (cyan
   mesurable, or verdict, vert règle, violet Trempe). */
.rtK{display:inline-flex;align-items:center;gap:4px;align-self:flex-start;
  padding:2px 7px;border-radius:7px;font-size:9.5px !important;font-weight:700;
  letter-spacing:.4px;text-transform:uppercase;}
.rtK .gi{width:10px;height:10px;vertical-align:-1px;}
.rtKm{background:rgba(34,211,238,.12);border:1px solid rgba(34,211,238,.28);color:#a5f3fc !important;}
.rtKm .gi{fill:#22d3ee;}
.rtKv{background:rgba(251,191,36,.12);border:1px solid rgba(251,191,36,.28);color:#fde68a !important;}
.rtKv .gi{fill:#fbbf24;}
.rtKc{background:rgba(34,197,94,.12);border:1px solid rgba(34,197,94,.28);color:#bbf7d0 !important;}
.rtKc .gi{fill:#22c55e;}
.rtKt{background:rgba(167,139,250,.12);border:1px solid rgba(167,139,250,.28);color:#ddd6fe !important;}
.rtKt .gi{fill:#a78bfa;}
/* Les sept journées. Un jour sans tâche est MONTRÉ (un repos est une décision). */
.rtDays{margin:2px 0 10px;padding:10px 11px;border-radius:12px;
  background:rgba(99,102,241,.06);border:1px solid rgba(99,102,241,.16);}
.rtDaysLab{display:flex;align-items:center;gap:6px;font-size:10px;font-weight:800;
  letter-spacing:1.1px;text-transform:uppercase;color:rgba(199,210,254,.7);margin-bottom:8px;}
.rtDaysLab .gi{width:12px;height:12px;fill:#818cf8;}
.rtDay{display:flex;gap:9px;padding:5px 0;border-top:1px solid rgba(255,255,255,.05);min-width:0;}
.rtDay:first-of-type{border-top:0;}
.rtDayN{flex:0 0 62px;font-size:10.5px;font-weight:700;color:rgba(255,255,255,.5);
  text-transform:capitalize;padding-top:1px;}
.rtDayT{flex:1;min-width:0;display:flex;flex-direction:column;gap:3px;}
.rtDayTask{font-size:11.5px;line-height:1.4;color:rgba(255,255,255,.82);overflow-wrap:anywhere;}
.rtDayTask .gi{width:11px;height:11px;fill:#a78bfa;vertical-align:-1px;margin-right:4px;}
.rtDayOff .rtDayN{color:rgba(255,255,255,.28);}
.rtDayNone{font-size:11px;color:rgba(255,255,255,.3);font-style:italic;}
/* LE BILAN CALCULÉ : des faits alignés, pas un pavé. */
.rbBox{margin:11px 0 3px;padding:2px 12px;border-radius:13px;
  background:rgba(255,255,255,.03);border:1px solid rgba(255,255,255,.08);}
.rbRow{display:flex;gap:10px;align-items:baseline;padding:9px 0;
  border-top:1px solid rgba(255,255,255,.05);min-width:0;}
.rbRow:first-child{border-top:0;}
.rbL{flex:0 0 40%;font-size:10.5px;letter-spacing:.3px;color:rgba(255,255,255,.42);}
.rbV{flex:1;min-width:0;font-size:12px;color:#e2e8f0;overflow-wrap:anywhere;}
.rbGood{color:#4ade80 !important;}
.rbBad{color:#f87171 !important;}
.rbEnd{display:flex;flex-wrap:wrap;gap:7px;margin-top:12px;}
.rbClose{flex:1 1 auto;white-space:nowrap;}
/* LES TROIS CHOIX : même gabarit, largeur pleine (jamais deux tailles). */
.rtOpts{display:flex;flex-direction:column;gap:8px;margin:11px 0 3px;}
.rtOpt{width:100%;box-sizing:border-box;display:flex;flex-direction:column;gap:3px;
  text-align:left;padding:11px 13px;border-radius:13px;cursor:pointer;min-height:62px;
  background:rgba(255,255,255,.03);border:1px solid rgba(255,255,255,.09);
  transition:border-color .16s,background .16s;}
.rtOpt b{font-size:12.5px;font-weight:600;color:#fff;}
.rtOpt span{font-size:11px;line-height:1.45;color:rgba(255,255,255,.5);}
.rtOpt.on{background:rgba(251,191,36,.09);border-color:rgba(251,191,36,.4);}
.rtOpt.on b{color:#fde68a;}
@media(hover:hover){.rtOpt:hover{border-color:rgba(255,255,255,.2);}}
.mhVals{display:flex;align-items:center;gap:5px;flex:0 0 auto;margin-left:auto;}
.mhVal{display:flex;align-items:center;gap:4px;height:26px;padding:0 8px;border-radius:9px;cursor:pointer;
  background:rgba(99,102,241,.14);border:1px solid rgba(99,102,241,.28);
  font-family:'Space Grotesk',monospace;font-weight:700;font-size:12px;color:#c7d2fe;}
.mhVal .gi{width:12px;height:12px;flex:0 0 auto;fill:#818cf8;}
.mhValInf{background:rgba(251,191,36,.11);border-color:rgba(251,191,36,.26);color:#fde68a;}
.mhValInf .gi{fill:#fbbf24;}
.dmPurse{display:flex;align-items:center;gap:6px;height:32px;padding:0 11px;border-radius:12px;background:rgba(99,102,241,.14);border:1px solid rgba(99,102,241,.3);font-family:'Space Grotesk',monospace;font-weight:700;font-size:14px;color:#c7d2fe;flex:0 0 auto;cursor:pointer;}
.dmPurseIco{width:15px;height:15px;flex:0 0 auto;fill:#818cf8;}
.dmPurseInf{background:rgba(251,191,36,.12);border-color:rgba(251,191,36,.3);color:#fde68a;}
.dmPurseInf .dmPurseIco{fill:#fbbf24;}
/* LA BAIE : la vue s'élève avec l'Étage */
.dmBay{position:relative;border-radius:16px;overflow:hidden;border:1px solid rgba(255,255,255,.08);margin-bottom:11px;}
.dmBaySvg{display:block;width:100%;height:104px;}
.dmBayCap{position:absolute;left:0;right:0;bottom:0;padding:10px 14px;font-size:11.5px;line-height:1.45;color:rgba(255,255,255,.62);background:linear-gradient(180deg,transparent,rgba(5,8,15,.92));}
.dmInflLine{font-size:11px;line-height:1.45;color:rgba(255,255,255,.45);margin:0 0 11px;padding:0 2px;}
.dmInflLine.hidden{display:none;}
/* L'APPEL DU DOMICILE : une seule chose réclamée à la fois, le gain annoncé,
   et un bouton qui mène au geste. C'est lui qui referme la boucle. */
.dmCall{display:flex;align-items:center;gap:11px;margin:0 0 11px;padding:10px 12px;border-radius:14px;
  background:rgba(129,140,248,.11);border:1px solid rgba(129,140,248,.3);}
.dmCall.hidden{display:none;}
.dmCallTxt{flex:1;min-width:0;font-size:11.5px;line-height:1.45;color:rgba(224,231,255,.9);overflow-wrap:anywhere;}
.dmCallBtn{flex:0 0 auto;background:rgba(129,140,248,.28);border-color:rgba(129,140,248,.55);color:#e0e7ff;font-weight:700;font-size:11px;}
.dmCallDone{background:rgba(74,222,128,.08);border-color:rgba(74,222,128,.22);}
.dmCallDone .dmCallTxt{color:rgba(134,239,172,.9);}
.dmSite{padding:11px 13px;border-radius:14px;background:rgba(167,139,250,.08);border:1px solid rgba(167,139,250,.24);margin-bottom:12px;}
.dmSiteTop{display:flex;align-items:baseline;gap:8px;flex-wrap:wrap;margin-bottom:8px;}
.dmSiteK{font-size:9.5px;font-weight:800;letter-spacing:1.8px;color:#c4b5fd;}
.dmSiteN{font-family:'Syne',sans-serif;font-weight:700;font-size:13.5px;color:#fff;}
.dmSiteFoot{font-size:11px;color:rgba(255,255,255,.5);margin-top:7px;}
.dmSiteFoot em{font-style:normal;color:rgba(196,181,253,.75);}

/* ── LE DOMICILE EN COUPE : quatre ÉTAGES qu'on parcourt ─────────
   La leçon de Clash : on améliore, et on VOIT le lieu changer. Chaque
   bande porte sa scène dessinée en fonction de son niveau. Du haut vers
   le bas : le Bureau (près de la baie), l'Atelier, le Coffre, la Veine
   (dans la roche). Le Saphyr remonte : Veine → Coffre → Atelier. */
/* ══ LA COUPE (refonte 30 juillet) : le hub est une coupe architecturale de
   la demeure taillée dans le massif. Les interstices de la grille montrent
   la ROCHE (le fond du conteneur), chaque cellule est une pièce vue en
   coupe. Le Bureau en linteau pleine largeur, LA VEINE en puits vertical
   sur deux étages, l'Atelier et le Coffre sur le palier, Forge / Foyer /
   Salon au niveau du feu. Les grid-areas rendent l'ordre du DOM indifférent
   (les branches "chez moi" et "en visite" émettent les 7 mêmes clés). ══ */
.dmRooms{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));
  grid-template-rows:92px 96px 96px 96px;gap:8px;
  grid-template-areas:
    "bureau bureau bureau bureau"
    "veine veine atelier atelier"
    "veine veine coffre coffre"
    "forge forge foyer salon";
  padding:9px;border-radius:22px;border:1px solid rgba(255,255,255,.07);
  background:
    radial-gradient(150% 70% at 50% -8%,rgba(79,70,229,.10),transparent 55%),
    linear-gradient(112deg,rgba(148,163,184,.05),rgba(148,163,184,0) 46%),
    linear-gradient(180deg,#131726,#0b0e18 55%,#070a11);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.05),0 16px 40px rgba(0,0,0,.38);}
.d-bureau{grid-area:bureau;}.d-veine{grid-area:veine;}.d-atelier{grid-area:atelier;}
.d-coffre{grid-area:coffre;}.d-forge{grid-area:forge;}.d-foyer{grid-area:foyer;}.d-salon{grid-area:salon;}
@media(min-width:901px){.dmRooms{grid-template-rows:98px 104px 104px 104px;gap:9px;}}
/* le massif suit l'Étage : la même lumière que la baie teinte la roche */
#screenDomicile[data-pal="terre"] .dmRooms{background:radial-gradient(150% 70% at 50% -8%,rgba(253,230,138,.05),transparent 55%),linear-gradient(112deg,rgba(148,163,184,.05),rgba(148,163,184,0) 46%),linear-gradient(180deg,#141625,#0c0e18 55%,#080a12);}
#screenDomicile[data-pal="ciel"] .dmRooms{background:radial-gradient(150% 70% at 50% -8%,rgba(147,197,253,.09),transparent 55%),linear-gradient(112deg,rgba(199,210,254,.06),rgba(199,210,254,0) 46%),linear-gradient(180deg,#121a2c,#0b101d 55%,#070b14);}
#screenDomicile[data-pal="horslimite"] .dmRooms{border-color:rgba(251,191,36,.18);background:radial-gradient(150% 70% at 50% -8%,rgba(251,191,36,.07),transparent 55%),linear-gradient(112deg,rgba(253,230,138,.05),rgba(253,230,138,0) 46%),linear-gradient(180deg,#141225,#0c0a18 55%,#080711);}
.dmBand{position:relative;display:flex;align-items:center;gap:12px;height:auto;min-height:0;padding:0 15px;
  border-radius:18px;overflow:hidden;cursor:pointer;text-align:left;min-width:0;
  border:1px solid rgba(255,255,255,.1);background:#0b0f18;
  transition:border-color .2s ease,transform .12s ease;}
/* le puits de la Veine et les petites pièces : nom en linteau, valeur au sol */
.dmBand.dmTall,.dmBand.dmMini{flex-direction:column;align-items:stretch;justify-content:space-between;gap:0;padding:11px 12px;}
.dmCellTop{position:relative;display:flex;align-items:flex-start;gap:6px;min-width:0;}
.dmCellTop .dmBandName{flex:1;min-width:0;}
.dmCellTop .dmDoorDot{position:static;flex:0 0 auto;margin-top:4px;}
.dmCellBot{position:relative;display:flex;flex-direction:column;gap:2px;min-width:0;}
.dmTall .dmBandName{font-size:14px;letter-spacing:0;white-space:nowrap;}
.dmTall .dmBandVal{font-size:23px;}
.dmTall .dmBandVeil{background:linear-gradient(180deg,rgba(6,9,16,.66),rgba(6,9,16,.08) 32%,rgba(6,9,16,.05) 55%,rgba(6,9,16,.86));}
/* ⚠ spécificité : la règle partagée `.dmBand.dmMini` pose déjà un padding,
   la retouche doit être au même poids pour gagner */
.dmBand.dmMini{padding:9px 7px 9px 8px;}
.dmMini .dmBandName{font-size:10px;letter-spacing:0;white-space:nowrap;}
.dmMini .dmBandVal{font-size:16px;}
.dmMini .dmBandSub{font-size:8.5px;}
.dmMini .dmBandLvl{padding:1px 5px;font-size:9px;letter-spacing:1.2px;flex:0 0 auto;}
.dmMiniRow{display:flex;align-items:center;justify-content:space-between;gap:5px;min-width:0;}
.dmMini .dmBandVeil{background:linear-gradient(180deg,rgba(6,9,16,.72),rgba(6,9,16,.2) 42%,rgba(6,9,16,.84));}
.d-bureau .dmBandName{font-size:17px;}
/* les bandeaux du palier : assez d'air pour un nom d'une seule ligne */
.d-atelier,.d-coffre,.d-forge{padding:0 13px;gap:9px;}
.d-atelier .dmBandName,.d-coffre .dmBandName,.d-forge .dmBandName{font-size:14px;letter-spacing:0;white-space:nowrap;}
/* l'entrée dans la demeure : cascade one-shot posée par la NAVIGATION seule
   (la classe dmEnter est retirée après 1 s : jamais rejouée par un re-render) */
@keyframes dmCellIn{0%{opacity:0;transform:translateY(13px) scale(.975);}100%{opacity:1;transform:none;}}
.dmEnter .dmBand{animation:dmCellIn .48s cubic-bezier(.2,.9,.3,1) both;}
.dmEnter .d-bureau{animation-delay:.02s;}
.dmEnter .d-veine{animation-delay:.08s;}
.dmEnter .d-atelier{animation-delay:.14s;}
.dmEnter .d-coffre{animation-delay:.2s;}
.dmEnter .d-forge{animation-delay:.26s;}
.dmEnter .d-foyer{animation-delay:.31s;}
.dmEnter .d-salon{animation-delay:.36s;}
body.lowFx .dmEnter .dmBand{animation:none;}
.dmBand:active{transform:scale(.985);}
.dmBandArt{position:absolute;inset:0;}
.dmBandSvg{display:block;width:100%;height:100%;}
/* le voile : la scène reste lisible SOUS le texte, jamais l'inverse */
.dmBandVeil{position:absolute;inset:0;background:linear-gradient(100deg,rgba(6,9,16,.9) 34%,rgba(6,9,16,.35) 62%,rgba(6,9,16,.72));}
.dmBandTxt{position:relative;flex:1;min-width:0;display:flex;flex-direction:column;gap:2px;}
.dmBandName{font-family:'Syne',sans-serif;font-weight:800;font-size:16px;color:#fff;letter-spacing:.2px;}
.dmBandSub{font-size:10.5px;line-height:1.3;color:rgba(255,255,255,.5);overflow-wrap:anywhere;}
.dmBandRight{position:relative;flex:0 0 auto;display:flex;flex-direction:column;align-items:flex-end;gap:3px;}
.dmBandVal{font-family:'Space Grotesk',monospace;font-weight:700;font-size:20px;color:#e0e7ff;line-height:1.05;}
.dmBandVal em{font-style:normal;font-size:11.5px;font-weight:600;color:rgba(199,210,254,.5);}
.dmBandLvl{font-family:'Syne',sans-serif;font-weight:800;font-size:10px;letter-spacing:1.6px;color:rgba(255,255,255,.34);
  border:1px solid rgba(255,255,255,.14);border-radius:6px;padding:1px 6px;}
.dmDoorDot{position:absolute;top:10px;right:10px;width:8px;height:8px;border-radius:50%;background:#fbbf24;box-shadow:0 0 8px rgba(251,191,36,.8);}
.dmAlert{border-color:rgba(251,191,36,.36);}
/* le circuit : la Veine nourrit le palier. Les liserés vivent SUR le bord
   INTERNE des cellules : les anciens connecteurs débordaient de la boîte et
   `overflow:hidden` (nécessaire aux scènes) les a toujours clippés : ils ne
   se sont jamais affichés. Un passage lumineux dans la roche, de part et
   d'autre de l'interstice, dit la même chose sans sortir du cadre. */
.dmBand.d-veine::after{content:'';position:absolute;right:0;top:50%;width:3px;height:64px;margin-top:-32px;
  border-radius:3px 0 0 3px;background:linear-gradient(180deg,rgba(129,140,248,0),rgba(129,140,248,.55),rgba(129,140,248,0));}
/* ⚠ ::after, jamais ::before : l'anneau d'appel `.dmBand.dmUpAble::before`
   occupe déjà le ::before, une pièce montable perdrait son liseré (ou l'inverse). */
.dmBand.d-atelier::after,.dmBand.d-coffre::after{content:'';position:absolute;left:0;top:50%;width:3px;height:26px;margin-top:-13px;
  border-radius:0 3px 3px 0;background:linear-gradient(180deg,rgba(129,140,248,0),rgba(129,140,248,.65),rgba(129,140,248,0));}
@keyframes dmFlowX{0%{opacity:.1;transform:translateX(-5px);}55%{opacity:1;transform:translateX(1px);}100%{opacity:.7;transform:none;}}
.dmRooms.dmFlow .d-veine::after,.dmRooms.dmFlow .d-atelier::after,.dmRooms.dmFlow .d-coffre::after{animation:dmFlowX .72s ease-out 1;}
/* ── QUATRE FAMILLES DE PALIER ─────────────────────────────────
   Le CSS ne montait qu'au palier 5 alors que les pièces vont jusqu'à XII :
   les sept derniers n'avaient AUCUNE couleur, et l'évolution ne se voyait
   pas (retour user). Désormais chaque tranche de trois a SA famille, et à
   l'intérieur d'une famille la teinte monte comme avant :

     I à III     bleu-violet   le socle, celui qu'on connaît
     IV à VI     vert forêt    on a quitté la roche
     VII à IX    rouge         on ne bâtit plus, on forge
     X à XII     blanc         il n'y a plus rien au-dessus

   L'OR N'Y EST PAS : il reste réservé à ce qui est attesté (l'Influence,
   l'Étage). Tout se joue en bordure et en lueur : composité, aucune
   animation infinie ajoutée. */
.dmBand[data-lvl="1"]{border-color:rgba(255,255,255,.09);}
.dmBand[data-lvl="1"] .dmBandName{color:rgba(255,255,255,.72);}
.dmBand[data-lvl="2"]{border-color:rgba(129,140,248,.3);box-shadow:0 0 0 1px rgba(129,140,248,.06);}
.dmBand[data-lvl="3"]{border-color:rgba(129,140,248,.55);box-shadow:0 2px 16px rgba(79,70,229,.2);}
/* ── vert forêt : la maison sort de terre ── */
.dmBand[data-lvl="4"]{border-color:rgba(22,101,52,.75);box-shadow:0 2px 16px rgba(21,128,61,.2);}
.dmBand[data-lvl="5"]{border-color:rgba(21,128,61,.85);box-shadow:0 2px 22px rgba(22,163,74,.26);}
.dmBand[data-lvl="6"]{border-color:rgba(34,197,94,.8);box-shadow:0 2px 28px rgba(22,163,74,.32),inset 0 0 30px rgba(21,128,61,.1);}
.dmBand[data-lvl="6"] .dmBandName{color:#dcfce7;}
/* ── rouge : on ne bâtit plus, on forge ── */
.dmBand[data-lvl="7"]{border-color:rgba(153,27,27,.8);box-shadow:0 2px 18px rgba(185,28,28,.22);}
.dmBand[data-lvl="8"]{border-color:rgba(185,28,28,.9);box-shadow:0 2px 24px rgba(220,38,38,.3);}
.dmBand[data-lvl="9"]{border-color:rgba(239,68,68,.85);box-shadow:0 2px 30px rgba(220,38,38,.38),inset 0 0 30px rgba(153,27,27,.12);}
.dmBand[data-lvl="9"] .dmBandName{color:#fee2e2;}
/* ── blanc : il n'y a plus rien au-dessus ── */
.dmBand[data-lvl="10"]{border-color:rgba(203,213,225,.7);box-shadow:0 2px 22px rgba(226,232,240,.16);}
.dmBand[data-lvl="11"]{border-color:rgba(226,232,240,.85);box-shadow:0 2px 28px rgba(241,245,249,.22);}
.dmBand[data-lvl="12"]{border-color:rgba(255,255,255,.95);
  box-shadow:0 2px 34px rgba(255,255,255,.3),inset 0 0 34px rgba(255,255,255,.09);}
.dmBand[data-lvl="10"] .dmBandName,.dmBand[data-lvl="11"] .dmBandName{color:#f1f5f9;}
.dmBand[data-lvl="12"] .dmBandName{color:#fff;text-shadow:0 0 12px rgba(255,255,255,.35);}

.dmBandLvl[data-lvl="1"]{color:rgba(255,255,255,.3);border-color:rgba(255,255,255,.12);}
.dmBandLvl[data-lvl="2"]{color:rgba(165,180,252,.85);border-color:rgba(129,140,248,.35);}
.dmBandLvl[data-lvl="3"]{color:#a5b4fc;border-color:rgba(129,140,248,.55);}
.dmBandLvl[data-lvl="4"]{color:#86efac;border-color:rgba(22,101,52,.7);}
.dmBandLvl[data-lvl="5"]{color:#4ade80;border-color:rgba(21,128,61,.8);}
.dmBandLvl[data-lvl="6"]{color:#bbf7d0;border-color:rgba(34,197,94,.8);background:rgba(22,163,74,.14);}
.dmBandLvl[data-lvl="7"]{color:#fca5a5;border-color:rgba(153,27,27,.75);}
.dmBandLvl[data-lvl="8"]{color:#f87171;border-color:rgba(185,28,28,.85);}
.dmBandLvl[data-lvl="9"]{color:#fecaca;border-color:rgba(239,68,68,.85);background:rgba(220,38,38,.14);}
.dmBandLvl[data-lvl="10"]{color:#e2e8f0;border-color:rgba(203,213,225,.65);}
.dmBandLvl[data-lvl="11"]{color:#f1f5f9;border-color:rgba(226,232,240,.8);}
.dmBandLvl[data-lvl="12"]{color:#fff;border-color:rgba(255,255,255,.92);background:rgba(255,255,255,.14);
  text-shadow:0 0 10px rgba(255,255,255,.4);}
/* LA PIÈCE QUI DORT APPELLE : une pulsation LENTE et composée (opacité seule),
   uniquement quand elle est améliorable ET que le Saphyr suffit. Inscrite aux
   registres calmFx et lowFx en fin de fichier : elle se figera avec les autres. */
@keyframes dmCallGlow{0%,100%{opacity:.28;}50%{opacity:.75;}}
.dmBand.dmUpAble::before{content:'';position:absolute;inset:-1px;border-radius:18px;pointer-events:none;
  border:1px solid rgba(196,181,253,.75);animation:dmCallGlow 2.6s ease-in-out infinite;}
.dmBand.dmUpAble .dmBandLvl{border-color:rgba(196,181,253,.7);color:#ddd6fe;}

/* L'ÉVOLUTION PAR ÉTAGE : le palier d'Influence teinte tout le lieu */
#screenDomicile[data-pal="ciel"] .dmBand{border-color:rgba(199,210,254,.22);}
#screenDomicile[data-pal="horslimite"] .dmBand{border-color:rgba(251,191,36,.32);}
#screenDomicile[data-pal="horslimite"] .dmBandLvl{color:rgba(253,230,138,.7);border-color:rgba(251,191,36,.3);}
/* Le chantier VIT SUR SA PIÈCE : anneau de progression sur la pastille */
.dmBandLvl{position:relative;}
.dmBandRing{position:absolute;inset:-3px;border-radius:9px;pointer-events:none;
  background:conic-gradient(rgba(129,140,248,.85) var(--p,0%),rgba(255,255,255,.09) 0);
  -webkit-mask:linear-gradient(#000 0 0) content-box,linear-gradient(#000 0 0);
  -webkit-mask-composite:xor;mask-composite:exclude;padding:2px;}
.dmSiteOn{border-color:rgba(167,139,250,.34);}
.dmSiteOn .dmBandSub{color:rgba(196,181,253,.75);}
/* Amélioration prête : UNE seule pièce doit attirer l'oeil à la fois */
.dmReady{border-color:rgba(129,140,248,.55);box-shadow:0 0 0 1px rgba(129,140,248,.2),0 8px 26px rgba(79,70,229,.28);}
.dmReady .dmBandSub{color:#c7d2fe;font-weight:700;}
.dmBandAct{border-color:rgba(255,255,255,.12);color:rgba(255,255,255,.44);letter-spacing:.4px;font-size:9.5px;}
/* La transformation : one-shot, transform + opacité (règle FPS) */
@keyframes dmRise{0%{transform:scale(1);filter:brightness(1);}22%{transform:scale(1.03);filter:brightness(1.5);}100%{transform:scale(1);filter:brightness(1);}}
.dmBand.dmRise{animation:dmRise .85s ease-out 1;}
/* Le prochain gain, toujours visible : c'est lui qui fait revenir */
.dmNext{margin-top:14px;padding:9px 11px;border-radius:12px;background:rgba(99,102,241,.09);border:1px solid rgba(99,102,241,.22);}
.dmNextK{display:block;font-size:9px;font-weight:800;letter-spacing:1.8px;color:#a5b4fc;margin-bottom:4px;}
.dmNextGain{font-size:11.5px;color:rgba(255,255,255,.62);}
.dmNextGain b{color:rgba(255,255,255,.85);font-weight:700;}
.dmNextGain b.up{color:#c7d2fe;}
.dmReadyBox{margin-top:14px;padding:12px;border-radius:14px;background:rgba(99,102,241,.14);border:1px solid rgba(129,140,248,.4);}
.dmReadyK{font-size:9.5px;font-weight:800;letter-spacing:2px;color:#c7d2fe;margin-bottom:8px;}
.dmReadyGain,.riseGain{display:flex;align-items:baseline;gap:7px;flex-wrap:wrap;font-size:12px;color:rgba(255,255,255,.6);}
.dmReadyGain span,.riseGain span{font-size:10px;text-transform:uppercase;letter-spacing:1.2px;color:rgba(255,255,255,.4);width:100%;}
.dmReadyGain b,.riseGain b{font-family:'Space Grotesk',monospace;font-weight:700;color:rgba(255,255,255,.75);}
.dmReadyGain b.up,.riseGain b.up{color:#c7d2fe;font-size:14px;}
.dmReadyGain i,.riseGain i{font-style:normal;color:rgba(255,255,255,.3);}
.dmAchieve{margin-top:11px;background:rgba(129,140,248,.28);border-color:rgba(129,140,248,.6);color:#e0e7ff;}
/* La fiche de transformation */
.riseSheet{text-align:left;}
.riseArt{border-radius:14px;overflow:hidden;border:1px solid rgba(255,255,255,.1);margin-bottom:12px;}
.riseArt .dmBandSvg{display:block;width:100%;height:96px;}
.riseGain{margin-bottom:10px;}
.riseNext{font-size:11.5px;color:rgba(199,210,254,.62);padding-top:9px;border-top:1px solid rgba(255,255,255,.08);}
/* TUTORIEL DOMICILE : la transformation montre les VRAIES familles de niveau.
   Les couleurs viennent exclusivement de `.dmBand[data-lvl]` ci-dessus. */
.tutHomeRise{margin-top:13px;padding-top:12px;border-top:1px solid rgba(255,255,255,.08);}
.tutHomeRiseK{font-size:9px;font-weight:800;letter-spacing:1.55px;color:rgba(199,210,254,.72);margin-bottom:8px;}
.tutHomeTiers{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:6px;}
.tutHomeTier.dmBand{display:block;height:66px;min-height:66px;padding:0;border-radius:12px;cursor:default;pointer-events:none;}
.tutHomeTier .dmBandVeil{background:linear-gradient(180deg,rgba(6,9,16,.18),rgba(6,9,16,.84));}
.tutHomeTierMeta{position:absolute;left:6px;right:6px;bottom:6px;display:flex;align-items:center;justify-content:space-between;gap:3px;}
.tutHomeTierMeta .dmBandLvl{padding:1px 4px;font-size:8px;letter-spacing:1px;}
.tutHomeTierMeta small{font-size:7px;font-weight:800;letter-spacing:.45px;text-transform:uppercase;color:rgba(255,255,255,.62);white-space:nowrap;}
.tutHomeRiseNote{margin-top:8px;font-size:10.5px;line-height:1.45;color:rgba(255,255,255,.48);}
/* L'échelle des cinq paliers */
.ladWrap{display:flex;flex-direction:column;gap:6px;text-align:left;}
.ladRow{display:flex;align-items:center;gap:10px;padding:8px 11px;border-radius:11px;background:rgba(255,255,255,.03);border:1px solid rgba(255,255,255,.07);}
.ladRow.done{background:rgba(99,102,241,.11);border-color:rgba(99,102,241,.26);}
.ladRow.next{background:rgba(129,140,248,.16);border-color:rgba(129,140,248,.45);}
.ladRow.far{opacity:.44;}
.ladN{flex:0 0 26px;font-family:'Syne',sans-serif;font-weight:800;font-size:12px;color:rgba(255,255,255,.7);text-align:center;}
.ladRow.next .ladN{color:#c7d2fe;}
.ladTxt{flex:1;min-width:0;font-size:11.5px;color:rgba(255,255,255,.68);overflow-wrap:anywhere;}
.ladTxt b{color:#fff;}
.ladTxt em{font-style:italic;color:rgba(255,255,255,.36);}
.ladCost{flex:0 0 auto;font-family:'Space Grotesk',monospace;font-size:10.5px;color:#c7d2fe;white-space:nowrap;}
/* L'entrée dans la pièce : on y PÉNÈTRE (idée Codex), on n'ouvre pas une modale détachée */
@keyframes dmPanelIn{0%{opacity:0;transform:scale(.9) translateY(18px);}100%{opacity:1;transform:scale(1) translateY(0);}}
.dmPanelOv.show .dmPanelCard{animation:dmPanelIn .3s cubic-bezier(.2,.9,.3,1) 1;}
body.lowFx .dmPanelOv.show .dmPanelCard,body.calmFx .dmPanelOv.show .dmPanelCard{animation:none;}
.dmPanelArt{border-radius:14px;overflow:hidden;border:1px solid rgba(255,255,255,.08);margin-bottom:13px;}
.dmPanelArt .dmBandSvg{display:block;width:100%;height:92px;}
/* Les objets, en pied : le Domicile se PARCOURT, il ne tient pas en un écran */
.dmVault{margin-top:14px;padding-top:13px;border-top:1px solid rgba(255,255,255,.07);}
.dmVaultHead{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:9px;}
.dmVaultTitle{font-family:'Syne',sans-serif;font-weight:800;font-size:13px;color:rgba(255,255,255,.8);letter-spacing:.4px;}
.dmVaultCount{font-family:'Space Grotesk',monospace;font-size:11px;color:rgba(199,210,254,.6);}
.dmVaultGrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(52px,1fr));gap:7px;}
.dmVaultCell{position:relative;aspect-ratio:1;display:flex;align-items:center;justify-content:center;
  border-radius:12px;background:rgba(255,255,255,.03);border:1px solid rgba(255,255,255,.08);}
.dmVaultCell .gi{width:24px;height:24px;fill:rgba(255,255,255,.75);}
.dmVaultCell.empty .gi{fill:rgba(255,255,255,.13);}
.dmVaultCell.eq{border-color:rgba(251,191,36,.4);background:rgba(251,191,36,.08);}
.dmVault{cursor:pointer;}
.dmVaultMore{margin-top:9px;font-size:11px;color:rgba(199,210,254,.6);text-align:center;}

/* ── LES PANNEAUX : chaque porte ouvre SA pièce ── */
.dmPanelOv{position:fixed;inset:0;z-index:10054;display:flex;align-items:flex-start;justify-content:center;
  overflow-y:auto;padding:16px 12px 28px;background:rgba(5,8,15,.82);opacity:0;transition:opacity .18s ease;}
.dmPanelOv.show{opacity:1;}
.dmPanelOv.hidden{display:none;}
/* Une action du tutoriel peut vivre DANS une pièce : le panneau passe alors
   au-dessus du voile (99998), sous le tooltip (100000), et seulement lui. */
.dmPanelOv.tutPanel{z-index:99999;}
/* Les deux premiers gestes ne sont pas seulement éclairés : leur cible tactile
   atteint 44 px pendant l'apprentissage, sans changer les boutons du jeu. */
body.tutOn .dmCallBtn.tutSpot,.dmPanelOv.tutPanel .dmUp.tutSpot{min-height:44px;}
/* Frontière Domicile du tutoriel : tout reste visible, seul le geste demandé
   reçoit les taps. Même règle que les objectifs quotidiens protégés. */
body.tutDomicileGuide #screenDomicile button,
body.tutDomicileGuide #screenDomicile [onclick],
body.tutDomicileGuide .dmPanelOv.tutPanel button,
body.tutDomicileGuide .dmPanelOv.tutPanel [onclick]{pointer-events:none!important;}
body.tutDomicileGuide #screenDomicile .tutSpot,
body.tutDomicileGuide .dmPanelOv.tutPanel .tutSpot{pointer-events:auto!important;}
/* Le panneau est au-dessus du voile global pour rendre son bouton actionnable :
   on y reproduit donc EXACTEMENT le voile action existant, pas un noir spécial. */
body.tutDomicileGuide .dmPanelOv.tutPanel{isolation:isolate;}
body.tutDomicileGuide .dmPanelOv.tutPanel::before{content:'';position:fixed;inset:0;z-index:2;pointer-events:none;background:rgba(5,8,15,.42);}
body.tutDomicileGuide .dmPanelOv.tutPanel .dmUp.tutSpot{z-index:3!important;}
/* À l'entrée dans le lieu, le bloc raconte et le bouton appelle. L'animation
   n'existe que le temps de cette étape fonctionnelle. */
body.tutDomicileGuide #dmCall.tutCallout{position:relative!important;z-index:99999!important;border-color:rgba(165,180,252,.72);background:rgba(79,70,229,.2);box-shadow:0 12px 34px rgba(0,0,0,.36),0 0 24px rgba(99,102,241,.14);}
body.tutDomicileGuide #dmCall.tutCallout::after{content:'↓';position:absolute;right:24px;top:-25px;color:#c7d2fe;font-size:20px;font-weight:800;text-shadow:0 0 12px rgba(129,140,248,.75);animation:tutReleverArrow 1.15s ease-in-out infinite;}
body.tutDomicileGuide #dmCall.tutCallout .dmCallBtn.tutSpot{animation:tutReleverBeat 1.15s ease-in-out infinite!important;}
/* La cible clignote sans changer de géométrie : un bouton qui scale en boucle
   bouge sous le doigt et n'a jamais de zone tactile stable. */
@keyframes tutReleverBeat{0%,100%{filter:brightness(1);box-shadow:0 0 0 3px rgba(96,165,250,.46),0 0 20px rgba(96,165,250,.2)}50%{filter:brightness(1.32);box-shadow:0 0 0 7px rgba(129,140,248,.66),0 0 34px rgba(99,102,241,.5)}}
@keyframes tutReleverArrow{0%,100%{opacity:.45;transform:translateY(-2px)}50%{opacity:1;transform:translateY(4px)}}
@media(prefers-reduced-motion:reduce){
  body.tutDomicileGuide #dmCall.tutCallout::after,body.tutDomicileGuide #dmCall.tutCallout .dmCallBtn.tutSpot{animation:none!important;}
  body.tutDomicileGuide #dmCall.tutCallout .dmCallBtn.tutSpot{outline:3px solid rgba(165,180,252,.85)!important;box-shadow:0 0 28px rgba(99,102,241,.42)!important;}
}
.dmPanelCard{width:100%;max-width:480px;margin:auto;border-radius:22px;padding:16px;
  background:linear-gradient(170deg,rgba(24,28,44,.98),rgba(11,14,24,.98));
  border:1px solid rgba(255,255,255,.11);box-shadow:0 24px 60px rgba(0,0,0,.6);}
.dmPanelHead{display:flex;align-items:center;gap:12px;margin-bottom:15px;}
.dmPanelIco{flex:0 0 auto;width:44px;height:44px;display:flex;align-items:center;justify-content:center;border-radius:14px;background:rgba(99,102,241,.14);border:1px solid rgba(99,102,241,.3);}
.dmPanelIco .gi{width:24px;height:24px;fill:#a5b4fc;}
.dmPanelId{flex:1;min-width:0;}
.dmPanelName{font-family:'Syne',sans-serif;font-weight:800;font-size:19px;color:#fff;}
.dmPanelVerb{font-size:11px;color:rgba(255,255,255,.42);}
.dmPanelX{flex:0 0 auto;width:36px;height:36px;border-radius:12px;border:1px solid rgba(255,255,255,.12);background:rgba(255,255,255,.04);color:rgba(255,255,255,.6);font-size:15px;cursor:pointer;}
.dmPanelBody{min-width:0;}
.dmBig{font-family:'Space Grotesk',monospace;font-weight:700;font-size:30px;color:#e0e7ff;line-height:1.1;margin-bottom:9px;}
.dmBig em{font-style:normal;font-size:14px;font-weight:600;color:rgba(199,210,254,.5);}
.dmLine{font-size:12px;color:rgba(255,255,255,.7);margin-top:6px;overflow-wrap:anywhere;}
.dmLine2{color:rgba(255,255,255,.45);font-size:11px;}
.dmHint{font-size:11px;line-height:1.45;color:rgba(252,165,165,.72);margin-top:7px;}
.dmBar{height:8px;border-radius:5px;background:rgba(255,255,255,.08);overflow:hidden;}
.dmBarBig{height:11px;border-radius:6px;}
.dmBar i{display:block;height:100%;border-radius:6px;background:linear-gradient(90deg,#4f46e5,#818cf8);transition:width .45s ease;}
.dmAct{width:100%;margin-top:12px;justify-content:center;background:rgba(99,102,241,.18);border-color:rgba(99,102,241,.38);color:#c7d2fe;font-weight:700;}
.dmAct .gi{width:14px;height:14px;fill:currentColor;margin-right:5px;}
.dmActAlt{background:rgba(255,255,255,.05);border-color:rgba(255,255,255,.14);color:rgba(255,255,255,.75);}
.dmWarn{margin-left:4px;padding:1px 5px;border-radius:5px;background:rgba(248,113,113,.18);color:#fca5a5;font-size:9.5px;font-weight:800;}
.dmDone{margin-top:10px;padding:8px 10px;border-radius:10px;background:rgba(74,222,128,.1);border:1px solid rgba(74,222,128,.22);font-size:11.5px;color:#86efac;text-align:center;}
.dmUp{width:100%;margin-top:14px;justify-content:center;font-size:11px;background:transparent;border-color:rgba(255,255,255,.16);color:rgba(255,255,255,.62);}
.dmUpShort{opacity:.5;}
.dmUpNote{margin-top:14px;font-size:10.5px;text-align:center;color:rgba(255,255,255,.35);}
.dmUpBusy{color:rgba(196,181,253,.5);}
/* Les prérequis de l'hôtel de ville : ce qui se mérite, coché au fil du jeu */
.dmReqs{display:flex;flex-direction:column;gap:5px;margin-top:9px;}
.dmReq{display:flex;align-items:center;gap:8px;padding:7px 10px;border-radius:10px;
  background:rgba(255,255,255,.03);border:1px solid rgba(255,255,255,.07);
  font-size:11.5px;color:rgba(255,255,255,.5);}
.dmReq .gi{width:13px;height:13px;flex:0 0 auto;fill:rgba(255,255,255,.25);}
.dmReq.on{background:rgba(74,222,128,.08);border-color:rgba(74,222,128,.24);color:#86efac;}
.dmReq.on .gi{fill:#4ade80;}
/* Une pièce au plafond : elle n'appelle plus, elle attend le Bureau */
.dmBand.dmCapped .dmBandLvl{border-style:dashed;opacity:.7;}
/* L'établi */
.dmCraft{padding:9px 10px;border-radius:11px;background:rgba(99,102,241,.1);border:1px solid rgba(99,102,241,.24);margin-bottom:10px;}
.dmCraftTop{font-size:9.5px;font-weight:800;letter-spacing:1.5px;color:#a5b4fc;margin-bottom:7px;}
.dmActive{padding:7px 10px;border-radius:10px;background:rgba(167,139,250,.12);border:1px solid rgba(167,139,250,.26);font-size:11px;color:#ddd6fe;margin-bottom:10px;}
.dmPlans{display:flex;flex-direction:column;gap:7px;}
.dmPlan{display:flex;align-items:center;gap:9px;padding:8px 9px;border-radius:10px;background:rgba(255,255,255,.03);border:1px solid rgba(255,255,255,.07);min-width:0;}
.dmPlanOff{opacity:.42;}
/* Le palier suivant : présent, mais ANONYME (il appelle sans se livrer) */
.dmPlanSealed{opacity:.6;border-style:dashed;}
.dmPlanSealed .dmPlanName{font-style:italic;color:rgba(255,255,255,.45);}
.dmDotS{background:rgba(255,255,255,.2);}
.dmPlanSealed .dmPlanLock .gi{width:13px;height:13px;fill:rgba(255,255,255,.3);}
.dmPlanId{display:flex;align-items:center;gap:8px;flex:1;min-width:0;}
.dmPlanDot{width:7px;height:7px;border-radius:50%;flex:0 0 auto;}
.dmDotP{background:#a78bfa;}
.dmDotI{background:#818cf8;}
.dmPlanTxt{min-width:0;}
.dmPlanName{font-size:12px;font-weight:700;color:rgba(255,255,255,.9);overflow-wrap:anywhere;}
.dmPlanEff{font-size:10.5px;line-height:1.35;color:rgba(255,255,255,.45);overflow-wrap:anywhere;}
.dmPlanMake,.dmPlanUse{flex:0 0 auto;font-size:10.5px;padding:5px 9px;}
.dmPlanMake{background:rgba(99,102,241,.14);border-color:rgba(99,102,241,.32);color:#c7d2fe;}
.dmPlanUse{background:rgba(167,139,250,.18);border-color:rgba(167,139,250,.38);color:#ddd6fe;font-weight:700;}
.dmPlanLock{flex:0 0 auto;font-size:10px;color:rgba(255,255,255,.32);white-space:nowrap;}
/* ⚠ LES EXPÉDITIONS SONT INDIGO, PAS OR (valeurs restaurées depuis git).
   L'or est réservé à l'ATTESTÉ (l'Influence, l'Étage) : c'est écrit au canon,
   et le teinter ici brouillait ce langage. Le distingo Ascension/Expédition
   demandé passe par l'ICÔNE et le sous-titre (« cycle de 3 épreuves »), pas
   par la couleur : le violet reste le parcours d'entrée, l'indigo le cycle. */
.ascExp{border-color:rgba(129,140,248,.3);background:linear-gradient(160deg,rgba(99,102,241,.1),rgba(99,102,241,.02) 70%);}
.ascKick{display:flex;align-items:center;gap:6px;font-size:9px;font-weight:800;letter-spacing:2px;color:#a5b4fc;margin:2px 0 5px;}
.ascKick .gi{width:12px;height:12px;fill:#818cf8;flex:none;}
.ascKick span{font-size:8px;letter-spacing:1.1px;color:rgba(165,180,252,.55);}
.ascFirstKick{color:#c4b5fd;}
.ascFirstKick .gi{fill:#a78bfa;}
.ascFirstKick span{color:rgba(196,181,253,.5);}
.ascExp .ascTxt em{font-style:normal;color:#c7d2fe;font-weight:700;white-space:nowrap;}
.ascDot.cur{background:#818cf8;box-shadow:0 0 7px rgba(129,140,248,.8);}
.dmForge{margin-top:14px;padding-top:12px;border-top:1px solid rgba(255,255,255,.07);}
.dmForgeHead{display:flex;align-items:center;gap:7px;font-family:'Syne',sans-serif;font-weight:800;font-size:13px;color:#fdba74;margin-bottom:8px;}
.dmForgeHead .gi{width:16px;height:16px;fill:#fb923c;}
.dmForgeOffer{display:flex;align-items:center;gap:9px;padding:8px 9px;border-radius:10px;background:rgba(249,115,22,.06);border:1px solid rgba(249,115,22,.16);margin-top:7px;min-width:0;}
.dmForgeQ{flex:0 0 auto;font-family:'Syne',sans-serif;font-weight:800;font-size:13px;color:rgba(253,186,116,.5);}
.dmForgeTxt{flex:1;min-width:0;font-size:10.5px;line-height:1.4;color:rgba(255,255,255,.6);overflow-wrap:anywhere;}
.dmForgeGo{flex:0 0 auto;font-size:10.5px;background:rgba(249,115,22,.16);border-color:rgba(249,115,22,.36);color:#fdba74;}
/* Le suivi de l'épreuve, sur le tableau du jour : c'est là qu'elle se gagne */
.fqCard{margin-top:10px;padding:12px 14px;border-radius:16px;background:rgba(249,115,22,.06);border:1px solid rgba(249,115,22,.2);}
.fqHead{display:flex;align-items:center;gap:7px;font-family:'Syne',sans-serif;font-weight:800;font-size:12.5px;color:#fdba74;}
.fqHead .gi{width:15px;height:15px;fill:#fb923c;}
.fqHead em{margin-left:auto;font-style:normal;font-size:10px;color:rgba(253,186,116,.6);}
.fqTrial{font-size:11.5px;line-height:1.45;color:rgba(255,255,255,.62);margin:7px 0 8px;}
.fqBar{height:7px;border-radius:4px;background:rgba(255,255,255,.08);overflow:hidden;}
.fqBar i{display:block;height:100%;border-radius:4px;background:linear-gradient(90deg,#ea580c,#fb923c);transition:width .45s ease;}
.fqFoot{margin-top:6px;font-family:'Space Grotesk',monospace;font-size:11px;color:rgba(253,186,116,.75);text-align:right;}
/* Le Bureau */
.dmOffHead{font-size:10px;font-weight:800;letter-spacing:1.4px;text-transform:uppercase;color:rgba(255,255,255,.38);margin-bottom:8px;}
.dmDrafts{display:flex;flex-direction:column;gap:6px;}
.dmDraft{display:flex;align-items:center;gap:9px;padding:8px 10px;border-radius:10px;background:rgba(255,255,255,.03);border:1px solid rgba(255,255,255,.07);cursor:pointer;min-width:0;}
.dmDraft:active{background:rgba(167,139,250,.1);}
.dmDraftTxt{flex:1;min-width:0;font-size:12px;color:rgba(255,255,255,.82);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.dmDraftN{flex:0 0 auto;font-size:10px;color:rgba(196,181,253,.6);white-space:nowrap;}
.dmArch{margin-top:13px;padding:11px 0 0;border:0;border-top:1px solid rgba(255,255,255,.07);border-radius:0;background:transparent;}
/* Le "?" : le circuit en une image */
.curSheet{text-align:left;}
.curBig{display:flex;align-items:center;justify-content:center;gap:10px;margin-bottom:12px;
  font-family:'Space Grotesk',monospace;font-weight:700;font-size:34px;}
.curBig .gi{width:26px;height:26px;}
.curS .curBig{color:#c7d2fe;}
.curS .curBig .gi{fill:#818cf8;}
.curI .curBig{color:#fde68a;}
.curI .curBig .gi{fill:#fbbf24;}
/* LE SOUHAIT EST EN ARGENT, jamais en or : l'or dit "attesté, mérité". Une
   monnaie qui s'achète ne porte pas la couleur de ce qui se gagne. */
.curW .curBig{color:#e2e8f0;}
.curW .curBig .gi{fill:#cbd5e1;}
.rtCost{margin-top:13px;padding:9px 12px;border-radius:11px;font-size:11.5px;line-height:1.5;
  color:rgba(226,232,240,.72);background:rgba(203,213,225,.07);border:1px solid rgba(203,213,225,.18);
  display:flex;align-items:center;gap:7px;flex-wrap:wrap;}
.rtCost b{color:#f1f5f9;font-weight:700;}
.rtCost .gi{width:13px;height:13px;fill:#cbd5e1;flex:none;}
.rtCost.short{color:rgba(252,165,165,.8);background:rgba(248,113,113,.08);border-color:rgba(248,113,113,.22);}
.rtCost.short .gi{fill:#f87171;}
.dmPurseW{color:#e2e8f0;border-color:rgba(203,213,225,.24);background:rgba(203,213,225,.07);}
.dmPurseW .dmPurseIco{fill:#cbd5e1;}
.curLead{font-size:12.5px;line-height:1.55;color:rgba(255,255,255,.75);margin-bottom:12px;}
.curRow{font-size:11.5px;line-height:1.55;color:rgba(255,255,255,.58);margin-top:9px;}
.curRow b{color:#fff;}
.curWarn{color:rgba(196,181,253,.7);}
.curDim{color:rgba(255,255,255,.38);}
.curStat{display:flex;align-items:baseline;justify-content:space-between;gap:10px;padding:9px 12px;border-radius:12px;
  background:rgba(251,191,36,.08);border:1px solid rgba(251,191,36,.2);margin-bottom:4px;}
.curStat span{font-family:'Syne',sans-serif;font-weight:800;font-size:15px;color:#fff;}
.curStat em{font-style:normal;font-family:'Space Grotesk',monospace;font-size:12px;color:#fde68a;}
.exDomFlow{display:flex;flex-direction:column;gap:4px;text-align:left;}
.exDomStep,.exDomAside{display:grid;grid-template-columns:32px 1fr;gap:10px;align-items:center;padding:9px 11px;border-radius:12px;background:rgba(99,102,241,.09);border:1px solid rgba(99,102,241,.2);}
.exDomAside{margin-top:8px;background:rgba(255,255,255,.03);border-color:rgba(255,255,255,.09);}
.exDomIco{grid-row:span 2;display:flex;align-items:center;justify-content:center;}
.exDomIco .gi{width:24px;height:24px;fill:#a5b4fc;}
.exDomStep b,.exDomAside b{font-family:'Syne',sans-serif;font-size:13px;color:#fff;}
.exDomStep i,.exDomAside i{font-style:normal;font-size:11px;line-height:1.45;color:rgba(255,255,255,.55);}
.exDomArrow{text-align:center;font-size:13px;color:rgba(129,140,248,.55);line-height:1;}
.exDomRule{margin-top:12px;font-size:11.5px;line-height:1.55;color:rgba(255,255,255,.62);text-align:left;}
.exDomRule b{color:#fff;}
.exDomS{color:#c7d2fe;font-weight:700;}
.exDomI{color:#fde68a;font-weight:700;}


/* ══ L'ÉVEIL DU SOMMET : l'annonce ══
   Cascade tutLine (one-shot, composée), aucune animation infinie. */
.awOv{position:fixed;inset:0;z-index:99993;display:flex;align-items:flex-start;justify-content:center;
  overflow-y:auto;padding:18px 14px;background:rgba(4,6,12,.93);opacity:0;transition:opacity .22s ease;}
.awOv.show{opacity:1;}
.awCard{position:relative;margin:auto;width:100%;max-width:400px;padding:26px 20px 20px;border-radius:20px;text-align:center;
  background:linear-gradient(170deg,rgba(24,20,10,.96),rgba(10,10,16,.97));border:1px solid rgba(251,191,36,.34);
  box-shadow:0 24px 70px rgba(0,0,0,.6),0 0 40px rgba(251,191,36,.09);}
.awGlow{position:absolute;top:-30%;left:50%;transform:translateX(-50%);width:280px;height:280px;pointer-events:none;
  background:radial-gradient(circle,rgba(251,191,36,.16),transparent 68%);}
.awKick{position:relative;font-size:9.5px;font-weight:800;letter-spacing:2.6px;color:rgba(251,191,36,.8);}
.awMedal{position:relative;margin:12px auto 10px;width:62px;height:62px;border-radius:50%;display:flex;align-items:center;justify-content:center;
  background:radial-gradient(circle at 40% 32%,rgba(251,191,36,.2),rgba(251,191,36,.05));border:1px solid rgba(251,191,36,.4);}
.awMedal .gi{width:30px;height:30px;fill:url(#giGold);}
.awTitle{position:relative;font-family:'Syne',sans-serif;font-weight:800;font-size:23px;line-height:1.15;color:#fff;}
.awTxt{position:relative;margin-top:9px;font-size:13px;line-height:1.55;color:rgba(255,255,255,.72);}
.awName{position:relative;margin-top:11px;font-family:'Syne',sans-serif;font-weight:800;font-size:19px;color:#fde68a;}
.awRow{position:relative;display:flex;gap:8px;margin-top:16px;text-align:left;}
.awVoice{flex:1;min-width:0;padding:10px 11px;border-radius:12px;background:rgba(255,255,255,.028);border:1px solid rgba(255,255,255,.09);}
.awVoice.on{background:rgba(251,191,36,.08);border-color:rgba(251,191,36,.3);}
.awVoiceLab{font-size:9px;font-weight:800;letter-spacing:1.4px;text-transform:uppercase;color:rgba(255,255,255,.34);margin-bottom:4px;}
.awVoice.on .awVoiceLab{color:rgba(253,230,138,.75);}
.awVoiceTxt{font-size:10.5px;line-height:1.45;color:rgba(255,255,255,.6);overflow-wrap:anywhere;}
.awFoot{position:relative;margin-top:12px;font-size:10.5px;color:rgba(255,255,255,.38);}
.awBtn{position:relative;margin-top:14px;width:100%;padding:13px;border-radius:13px;cursor:pointer;
  font-family:'Space Grotesk',sans-serif;font-weight:700;font-size:13.5px;color:#0b0b12;
  background:linear-gradient(135deg,#fde68a,#fbbf24);border:none;}
.voiceActBtn{display:block;width:100%;margin-top:11px;padding:11px;border-radius:12px;cursor:pointer;
  font-family:'Space Grotesk',sans-serif;font-weight:700;font-size:12.5px;color:#0b0b12;
  background:linear-gradient(135deg,#fde68a,#fbbf24);border:none;}


/* ══ QUI TE RÉPOND : un choix explicite, jamais une bascule à interpréter ══ */
.vtPick{display:flex;flex-direction:column;gap:8px;margin-top:10px;}
.vtOpt{width:100%;box-sizing:border-box;text-align:left;padding:11px 12px;border-radius:13px;cursor:pointer;
  background:rgba(255,255,255,.03);border:1px solid rgba(255,255,255,.11);
  transition:border-color .16s ease,background .16s ease;
  display:flex;flex-direction:column;gap:3px;font-family:'Space Grotesk',sans-serif;}
.vtOpt.on{background:rgba(251,191,36,.09);border-color:rgba(251,191,36,.42);}
.vtOptName{font-weight:700;font-size:12.5px;color:rgba(255,255,255,.72);}
.vtOpt.on .vtOptName{color:#fde68a;}
.vtOptTxt{font-size:10.5px;line-height:1.45;color:rgba(255,255,255,.4);}
.vtOpt.on .vtOptTxt{color:rgba(255,255,255,.55);}

/* ══ LE DOSSIER : ton mentor porte, le Sommet tranche ══ */
.dsrCard{margin-bottom:12px;padding:14px;border-radius:16px;
  background:linear-gradient(150deg,rgba(255,255,255,.035),rgba(255,255,255,.012));
  border:1px solid var(--dsr1,rgba(251,191,36,.3));}
.dsrCardHead{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:7px;}
.dsrCardKick{font-size:9px;font-weight:800;letter-spacing:2.2px;color:var(--dsr1,rgba(251,191,36,.85));}
.dsrCardQuota{font-family:'Space Grotesk',monospace;font-size:11px;font-weight:700;color:rgba(255,255,255,.42);
  padding:2px 8px;border-radius:7px;background:rgba(255,255,255,.05);}
.dsrCardTxt{font-size:11.5px;line-height:1.55;color:rgba(255,255,255,.6);}
.dsrCardBtn{margin-top:11px;width:100%;padding:11px;border-radius:12px;cursor:pointer;
  font-family:'Space Grotesk',sans-serif;font-weight:700;font-size:12.5px;color:#0b0b12;
  background:linear-gradient(135deg,var(--dsr1,#fde68a),var(--dsr2,#fbbf24));border:none;}
.dsrHead{margin-bottom:10px;}
.dsrKick{font-size:9.5px;font-weight:800;letter-spacing:2.2px;color:rgba(251,191,36,.85);}
.dsrTitle{font-family:'Syne',sans-serif;font-weight:800;font-size:18px;line-height:1.25;color:#fff;margin-top:3px;}
.dsrSub{font-size:11.5px;line-height:1.55;color:rgba(255,255,255,.5);margin-bottom:12px;}
/* Le serment : c'est LA phrase du Dossier, elle ne se noie pas dans le corps du texte */
.dsrOath{margin:12px 0 16px;padding:12px 13px;border-radius:12px;font-family:'Syne',sans-serif;
  font-weight:700;font-size:12.5px;line-height:1.5;color:#fde68a;
  background:rgba(251,191,36,.07);border-left:2px solid rgba(251,191,36,.5);}
.dsrLab{font-size:10px;font-weight:800;letter-spacing:1.4px;text-transform:uppercase;
  color:rgba(255,255,255,.4);margin:0 0 8px;}
.dsrOpt{width:100%;box-sizing:border-box;text-align:left;margin-bottom:8px;padding:12px 13px;border-radius:13px;cursor:pointer;
  background:rgba(255,255,255,.03);border:1px solid rgba(255,255,255,.11);
  transition:border-color .16s ease,background .16s ease;
  display:flex;flex-direction:column;gap:4px;font-family:'Space Grotesk',sans-serif;}
.dsrOpt:active{background:rgba(251,191,36,.08);border-color:rgba(251,191,36,.4);}
.dsrOptName{font-weight:700;font-size:13px;color:#fff;}
.dsrOptTxt{font-size:10.5px;line-height:1.45;color:rgba(255,255,255,.45);}
.dsrQuota{margin-top:10px;font-size:10.5px;line-height:1.5;color:rgba(255,255,255,.36);}
.dsrChips{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:12px;}
.dsrChip{padding:8px 14px;border-radius:10px;cursor:pointer;font-family:'Space Grotesk',sans-serif;
  font-size:12px;font-weight:700;color:rgba(255,255,255,.6);
  background:rgba(255,255,255,.04);border:1px solid rgba(255,255,255,.12);}
.dsrChip.on{background:rgba(251,191,36,.16);border-color:rgba(251,191,36,.45);color:#fde68a;}
.dsrWarn{margin-top:6px;padding:10px 12px;border-radius:11px;font-size:10.5px;line-height:1.5;
  color:rgba(253,230,138,.72);background:rgba(251,191,36,.06);border:1px solid rgba(251,191,36,.18);
  display:flex;align-items:flex-start;gap:7px;}
.dsrWarn .gi{width:13px;height:13px;fill:#fbbf24;flex:none;margin-top:1px;}
.dsrFree{margin-top:8px;padding:10px 12px;border-radius:11px;font-size:10.5px;line-height:1.5;
  color:rgba(134,239,172,.8);background:rgba(74,222,128,.07);border:1px solid rgba(74,222,128,.2);
  display:flex;align-items:flex-start;gap:7px;}
.dsrFree .gi{width:13px;height:13px;fill:#4ade80;flex:none;margin-top:1px;}
.dsrDay{width:100%;box-sizing:border-box;margin-bottom:7px;padding:12px 13px;border-radius:12px;cursor:pointer;
  display:flex;align-items:center;justify-content:space-between;gap:10px;
  background:rgba(255,255,255,.03);border:1px solid rgba(255,255,255,.11);font-family:'Space Grotesk',sans-serif;}
.dsrDayName{font-size:12.5px;font-weight:700;color:#fff;text-align:left;min-width:0;overflow-wrap:anywhere;}
.dsrDayStat{flex:none;font-family:'Space Grotesk',monospace;font-size:11px;color:rgba(252,165,165,.72);}
.dsrDayStat.ok{color:rgba(134,239,172,.8);}
.dsrList{display:flex;flex-direction:column;gap:6px;margin-bottom:11px;max-height:44vh;overflow-y:auto;}
.dsrRow{display:flex;align-items:center;gap:9px;width:100%;box-sizing:border-box;padding:10px 11px;border-radius:11px;cursor:pointer;
  background:rgba(255,255,255,.028);border:1px solid rgba(255,255,255,.09);
  font-family:'Space Grotesk',sans-serif;text-align:left;
  transition:border-color .14s ease,background .14s ease;}
.dsrRow.on{background:rgba(74,222,128,.07);border-color:rgba(74,222,128,.28);}
.dsrRow.flip{border-style:dashed;border-color:rgba(251,191,36,.5);}
.dsrRowMark{flex:none;width:19px;height:19px;border-radius:6px;display:flex;align-items:center;justify-content:center;
  font-size:11px;font-weight:800;color:#0b0b12;background:rgba(255,255,255,.09);}
.dsrRow.on .dsrRowMark{background:#4ade80;}
.dsrRowTxt{flex:1;min-width:0;font-size:12px;color:rgba(255,255,255,.72);overflow-wrap:anywhere;}
.dsrRowDiff{flex:none;font-family:'Space Grotesk',monospace;font-size:10.5px;color:rgba(255,255,255,.32);}
.dsrTally{font-size:11.5px;line-height:1.5;color:rgba(255,255,255,.5);margin-bottom:4px;}
.dsrTally b.ok{color:#86efac;}
.dsrTally b.ko{color:#fca5a5;}
.dsrFlipNote{color:rgba(253,230,138,.7);}
/* Le prix de la Route respire : trois blocs collés se lisaient comme un seul */
.rtCost{margin-bottom:4px;}
.vtreeGuideCard .mtActions{margin-top:16px;}
/* Le "?" de la Vision vend La Route */
.exVRoute{margin-top:14px;padding:12px 13px;border-radius:13px;
  background:rgba(251,191,36,.05);border:1px solid rgba(251,191,36,.2);}
.exVRouteHead{display:flex;align-items:center;gap:7px;font-family:'Syne',sans-serif;font-weight:800;
  font-size:12.5px;color:#fde68a;margin-bottom:9px;}
.exVRouteHead .gi{width:14px;height:14px;fill:url(#giGold);}
.exVRouteRow{display:flex;flex-direction:column;gap:3px;margin-bottom:9px;}
.exVRouteRow b{font-size:11.5px;color:#fff;font-weight:700;}
.exVRouteRow span{font-size:10.5px;line-height:1.5;color:rgba(255,255,255,.5);}
.exVRouteRow.rt b{color:#fde68a;}
.exVRouteFoot{font-size:10px;color:rgba(255,255,255,.34);font-style:italic;}

/* Les motifs du Dossier : l'oubli verrouillé reste VISIBLE, cadenas à l'appui */
.dsrOpt.locked{opacity:.55;}
.dsrOptName{display:flex;align-items:center;gap:8px;flex-wrap:wrap;}
.dsrLockChip{display:inline-flex;align-items:center;gap:4px;padding:2px 7px;border-radius:6px;
  font-size:9.5px;font-weight:800;letter-spacing:.6px;color:#fde68a;
  background:rgba(251,191,36,.14);border:1px solid rgba(251,191,36,.32);}
.dsrLockChip .gi{width:10px;height:10px;fill:#fbbf24;}
/* Une ligne que le motif n'autorise pas : montrée, jamais cliquable */
.dsrRow.inert{opacity:.34;cursor:default;}
.dsrRow.added{border-style:dashed;border-color:rgba(74,222,128,.45);}
.dsrAddBtn{width:100%;margin-bottom:11px;padding:11px;border-radius:12px;cursor:pointer;
  font-family:'Space Grotesk',sans-serif;font-weight:600;font-size:11.5px;
  color:rgba(147,197,253,.9);background:rgba(59,130,246,.07);
  border:1px dashed rgba(59,130,246,.35);}
/* LA CASCADE annoncée AVANT de déposer : c'est le vrai enjeu d'une correction */
.dsrStreak{margin-top:8px;padding:10px 12px;border-radius:11px;font-size:11.5px;line-height:1.5;}
.dsrStreak b{font-family:'Space Grotesk',monospace;font-size:14px;}
.dsrStreak.up{color:rgba(134,239,172,.85);background:rgba(74,222,128,.07);border:1px solid rgba(74,222,128,.22);}
.dsrStreak.down{color:rgba(252,165,165,.85);background:rgba(248,113,113,.07);border:1px solid rgba(248,113,113,.22);}
.dsrDiffRow{display:flex;gap:5px;flex-wrap:wrap;margin-top:10px;}
.dsrDiffChip{flex:1 1 auto;padding:8px 6px;border-radius:10px;cursor:pointer;text-align:center;
  font-family:'Space Grotesk',sans-serif;font-size:10px;font-weight:700;color:rgba(255,255,255,.55);
  background:rgba(255,255,255,.04);border:1px solid rgba(255,255,255,.12);
  display:flex;flex-direction:column;gap:2px;}
.dsrDiffChip em{font-style:normal;font-family:'Space Grotesk',monospace;font-size:10.5px;opacity:.65;}
.dsrDiffChip.on{background:rgba(167,139,250,.16);border-color:rgba(167,139,250,.45);color:#c4b5fd;}
/* LA GALERIE DES DÉBLOCAGES (Bureau) : voir sa route derrière et devant */
.dmUnl{display:flex;flex-direction:column;gap:6px;margin-bottom:12px;}
.dmArch+.dmOffHead{margin-top:22px;padding-top:16px;border-top:1px solid rgba(255,255,255,.07);}
.dmUnlRow{display:flex;align-items:center;gap:10px;width:100%;box-sizing:border-box;
  padding:10px 11px;border-radius:12px;cursor:pointer;text-align:left;
  background:rgba(255,255,255,.028);border:1px solid rgba(255,255,255,.09);
  font-family:'Space Grotesk',sans-serif;}
.dmUnlRow.sealed{opacity:.4;cursor:default;}
.dmUnlIco{flex:none;width:26px;height:26px;border-radius:8px;display:flex;align-items:center;justify-content:center;
  background:rgba(255,255,255,.05);}
.dmUnlIco .gi{width:14px;height:14px;fill:currentColor;}
.dmUnlTxt{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px;}
.dmUnlTxt b{font-size:12px;color:#fff;font-weight:700;overflow-wrap:anywhere;}
.dmUnlTxt em{font-style:normal;font-size:10px;color:rgba(255,255,255,.4);overflow-wrap:anywhere;}
.dmUnlLv{flex:none;font-family:'Space Grotesk',monospace;font-size:10.5px;color:rgba(255,255,255,.36);
  display:flex;align-items:center;gap:4px;}
.dmUnlLv .gi{width:11px;height:11px;fill:rgba(255,255,255,.3);}
.dsrCardWhere{margin-top:8px;font-size:10px;color:rgba(255,255,255,.32);text-align:center;}
/* La vérité est la seule chose que le Sommet salue : elle est en vert */
.dsrOpt.good{border-color:rgba(74,222,128,.3);background:rgba(74,222,128,.05);}
.dsrOpt.good .dsrOptName{color:#86efac;}
.dsrOpt.good:active{background:rgba(74,222,128,.11);border-color:rgba(74,222,128,.5);}
/* Le Souhait dans le HUD : ARGENT (acheté), jamais l'or (attesté) */
.mhVal.mhValW{color:#e2e8f0;}
.mhVal.mhValW .gi{fill:#cbd5e1;}
/* Le gain d'un contrat : l'XP, et le Saphyr juste dessous (indigo) */
.ctXp{display:flex;flex-direction:column;align-items:flex-end;gap:1px;line-height:1.15;}
.ctXp b{font-weight:700;}
.ctXp em{font-style:normal;font-size:9.5px;font-weight:700;color:#a5b4fc;}
.ctXp em::before{content:'◆ ';font-size:8px;opacity:.8;}
/* Les épreuves franchies restent lisibles : on voit sa route, pas juste la suite */
.ascPast{margin-top:11px;padding-top:10px;border-top:1px solid rgba(255,255,255,.07);
  display:flex;flex-direction:column;gap:6px;}
.ascPastRow{display:flex;align-items:center;gap:7px;font-size:10.5px;line-height:1.4;
  color:rgba(255,255,255,.42);}
.ascPastRow .gi{width:12px;height:12px;fill:#4ade80;flex:none;}
.ascPastRow span{flex:1;min-width:0;overflow-wrap:anywhere;}
.ascPastRow em{flex:none;font-style:normal;font-family:'Space Grotesk',monospace;
  font-size:10px;color:rgba(167,139,250,.65);}
.ascTotal{margin-top:9px;font-size:10px;color:rgba(255,255,255,.3);text-align:center;}
/* La coche d'une épreuve tombée prend son médaillon : alignée sur les
   numéros du registre, elle cesse d'être une puce flottante. */
/* ⚠ SPÉCIFICITÉ : `.ascPastRow span{flex:1}` existe déjà et vise TOUS les span
   de la rangée. Écrit `.ascPastN` seul, mon `flex:none` perdait la cascade et
   le médaillon s'étirait en ovale de 120 px. Seule la capture l'a montré. */
.ascPastRow span.ascPastN{flex:none;width:16px;height:16px;border-radius:50%;display:flex;
  align-items:center;justify-content:center;border:1px solid rgba(74,222,128,.34);
  background:rgba(74,222,128,.1);overflow-wrap:normal;}
.ascPastN .gi{width:9px;height:9px;fill:#4ade80;}
.ascPastRow em i{font-style:normal;color:rgba(199,210,254,.8);margin-left:5px;}
/* LE GAIN DE L'ÉPREUVE EN COURS, sur sa ligne : l'XP en or (il se déclare),
   le Saphyr en indigo (il se gagne). Le langage couleur du produit, rien de neuf. */
.ascPrize{display:flex;align-items:center;gap:9px;flex-wrap:wrap;margin-top:1px;}
.ascPrize em{font-style:normal;font-family:'Space Grotesk',sans-serif;font-size:11.5px;font-weight:800;
  color:#fde68a;border:1px solid rgba(251,191,36,.3);background:rgba(251,191,36,.09);
  padding:2px 9px;border-radius:999px;}
.ascPrize i{font-style:normal;font-family:'Space Grotesk',sans-serif;font-size:11.5px;font-weight:800;
  color:#c7d2fe;border:1px solid rgba(129,140,248,.34);background:rgba(129,140,248,.1);
  padding:2px 9px;border-radius:999px;}
.ascExpRuleBtn{display:inline-flex;align-items:center;gap:6px;width:max-content;margin-top:7px;
  border-color:rgba(129,140,248,.34);background:rgba(99,102,241,.11);color:#c7d2fe;}
.ascExpRuleBtn .gi{width:12px;height:12px;fill:#a5b4fc;}

/* ══ LE REGISTRE DES ÉTAPES FRANCHIES ═══════════════════════════════
   Une ascension se LIT comme un chemin, pas comme une liste. Patron repris
   du chemin de paliers d'un Monument : un médaillon numéroté relié à son
   voisin. Zéro animation : c'est une archive, elle ne bouge pas. */
.ascLedger{display:flex;flex-direction:column;gap:10px;text-align:left;}
.ascLedHead{display:flex;align-items:center;gap:12px;}
.ascLedBig{font-family:'Syne',sans-serif;font-size:34px;font-weight:800;line-height:1;color:#c4b5fd;}
.ascLedBig em{font-style:normal;font-size:17px;font-weight:700;color:rgba(196,181,253,.42);}
.ascLedLab{font-family:'Space Grotesk',sans-serif;font-size:11px;line-height:1.5;
  color:rgba(255,255,255,.5);text-transform:none;}
.ascLedLab b{color:rgba(253,230,138,.9);font-weight:700;}
.ascLedBar{height:5px;border-radius:99px;background:rgba(255,255,255,.07);overflow:hidden;}
.ascLedBar i{display:block;height:100%;border-radius:99px;
  background:linear-gradient(90deg,rgba(167,139,250,.65),#c4b5fd);}
.ascLedSum{font-size:10.5px;color:rgba(255,255,255,.42);font-family:'Space Grotesk',sans-serif;}
.ascLedPath{display:flex;flex-direction:column;}
/* La rangée porte le trait qui relie son médaillon au suivant. */
.ascLedRow{display:flex;gap:11px;padding-bottom:13px;position:relative;}
.ascLedRow:last-child{padding-bottom:0;}
.ascLedRow:not(:last-child)::before{content:"";position:absolute;left:10px;top:22px;bottom:2px;
  width:1px;background:linear-gradient(180deg,rgba(167,139,250,.3),rgba(167,139,250,.06));}
.ascLedDot{flex:none;width:21px;height:21px;border-radius:50%;display:flex;align-items:center;
  justify-content:center;font-family:'Space Grotesk',sans-serif;font-size:10px;font-weight:800;
  color:#ddd6fe;border:1px solid rgba(167,139,250,.45);background:rgba(167,139,250,.14);z-index:1;}
.ascLedBody{flex:1;min-width:0;display:flex;flex-direction:column;gap:3px;padding-top:2px;}
.ascLedTxt{font-family:'Space Grotesk',sans-serif;font-size:11.5px;line-height:1.45;
  color:rgba(255,255,255,.78);overflow-wrap:anywhere;}
.ascLedMeta{display:flex;align-items:center;gap:8px;flex-wrap:wrap;font-size:9.5px;
  font-family:'Space Grotesk',sans-serif;}
.ascLedMeta em{font-style:normal;font-weight:800;color:rgba(253,230,138,.85);}
.ascLedMeta i{font-style:normal;font-weight:700;color:rgba(199,210,254,.72);}
.ascLedMeta u{text-decoration:none;color:rgba(255,255,255,.3);}
/* Les Expéditions se lisent par cycle : l'intertitre évite qu'une longue
   série d'épreuves ne raconte plus rien. */
.ascLedCycle{display:flex;align-items:center;gap:9px;margin:4px 0 9px;}
.ascLedCycle span{flex:none;font-size:9px;font-weight:800;letter-spacing:1.6px;text-transform:uppercase;
  color:rgba(165,180,252,.7);}
.ascLedCycle::after{content:"";flex:1;height:1px;background:rgba(129,140,248,.16);}
.ascLedCycle:first-child{margin-top:0;}
/* Le cycle prend l'indigo des Expéditions, l'Ascension garde son violet. */
.ascLedExp .ascLedBig{color:#a5b4fc;}
.ascLedExp .ascLedBig em{color:rgba(165,180,252,.42);}
.ascLedExp .ascLedDot{color:#c7d2fe;border-color:rgba(129,140,248,.5);background:rgba(129,140,248,.16);}
.ascLedExp .ascLedRow:not(:last-child)::before{
  background:linear-gradient(180deg,rgba(129,140,248,.32),rgba(129,140,248,.06));}
.ascLedEmpty{display:flex;align-items:center;gap:9px;font-family:'Space Grotesk',sans-serif;
  font-size:11.5px;color:rgba(255,255,255,.42);}
.ascLedEmpty .gi{width:15px;height:15px;fill:rgba(255,255,255,.26);flex:none;}

/* Une pièce SCELLÉE : elle se voit, elle ne s'ouvre pas encore */
.dmBand.dmShut{opacity:.42;}
.dmBand.dmShut .dmBandLvl{opacity:.5;}
/* La Forge : les feux allumés, et les épreuves anonymes */
.dmForgeRun{margin:9px 0;padding:10px 11px;border-radius:12px;
  background:rgba(249,115,22,.07);border:1px solid rgba(249,115,22,.22);}
.dmForgeStop{width:100%;margin-top:8px;border-color:rgba(239,68,68,.3)!important;color:rgba(252,165,165,.9)!important;}
/* Le Salon : les voix invitées du jour */
.dmSalonGuests{display:flex;flex-direction:column;gap:8px;margin:10px 0;}
.dmGuest{padding:10px 12px;border-radius:12px;background:rgba(255,255,255,.03);
  border-left:2px solid rgba(196,181,253,.45);}
.dmGuestName{font-family:'Syne',sans-serif;font-weight:800;font-size:11.5px;color:#c4b5fd;margin-bottom:3px;}
.dmGuestQ{font-size:11.5px;line-height:1.5;color:rgba(255,255,255,.62);font-style:italic;}

/* ══ LA VITRINE : la maison dit ce qu'il a bâti, la vitrine ce dont il est fier ══ */
.scHead{margin-top:16px;font-size:9.5px;font-weight:800;letter-spacing:2px;
  text-transform:uppercase;color:rgba(196,181,253,.75);}
.scCell{display:flex;flex-direction:column;gap:2px;padding:11px 12px;border-radius:12px;text-align:left;
  background:rgba(255,255,255,.035);border:1px solid rgba(255,255,255,.11);
  font-family:'Space Grotesk',sans-serif;}
.scCell[onclick]{cursor:pointer;}
.scCell.scEmpty{border-style:dashed;border-color:rgba(196,181,253,.28);background:rgba(196,181,253,.04);}
.scCell.scEmpty .scLab{color:rgba(196,181,253,.7);font-weight:600;}
.scLab{font-size:12.5px;font-weight:700;color:#fff;overflow-wrap:anywhere;}
.scSub{font-size:10px;color:rgba(255,255,255,.4);}
.scCell.gr-l{border-color:rgba(251,191,36,.5);background:rgba(251,191,36,.07);}
.scCell.gr-l .scLab{color:#fde68a;}
.scCell.gr-e{border-color:rgba(167,139,250,.45);background:rgba(167,139,250,.06);}
.scCell.gr-e .scLab{color:#c4b5fd;}
.scCell.gr-r{border-color:rgba(96,165,250,.4);background:rgba(96,165,250,.05);}
.scPick{display:flex;flex-direction:column;gap:6px;max-height:52vh;overflow-y:auto;}
.scOpt{display:flex;flex-direction:column;gap:2px;width:100%;box-sizing:border-box;
  padding:10px 11px;border-radius:11px;cursor:pointer;text-align:left;
  background:rgba(255,255,255,.03);border:1px solid rgba(255,255,255,.1);
  font-family:'Space Grotesk',sans-serif;}
.scOpt.scTaken{opacity:.4;cursor:default;}
.scOpt.scClear{border-color:rgba(248,113,113,.3);color:rgba(252,165,165,.9);}
.scOptLab{font-size:12.5px;font-weight:700;color:#fff;overflow-wrap:anywhere;}
.scOpt.scClear .scOptLab{color:rgba(252,165,165,.9);}
.scOptSub{font-size:10px;color:rgba(255,255,255,.4);}

/* ══ LE CERCLE : l'écran social ══ */
.soCard{margin-bottom:12px;padding:14px;border-radius:16px;
  background:linear-gradient(150deg,rgba(255,255,255,.035),rgba(255,255,255,.012));
  border:1px solid rgba(255,255,255,.1);}
.soKick{display:flex;align-items:center;gap:7px;font-size:9.5px;font-weight:800;
  letter-spacing:2.2px;color:rgba(196,181,253,.8);margin-bottom:8px;}
.soKick .gi{width:13px;height:13px;fill:rgba(196,181,253,.85);}
.soJuryCard{border-color:rgba(251,191,36,.28);}
.soJuryCard .soKick{color:rgba(251,191,36,.85);}
.soJuryCard .soKick .gi{fill:#fbbf24;}
.soTxt{font-size:11.5px;line-height:1.55;color:rgba(255,255,255,.6);}
.soFine{margin-top:8px;font-size:10px;line-height:1.45;color:rgba(255,255,255,.34);}
.soRel{margin-top:9px;font-size:11px;color:rgba(255,255,255,.5);}
.soRel b{font-family:'Space Grotesk',monospace;color:#fde68a;}
.soBtn{margin-top:11px;width:100%;padding:12px;border-radius:12px;cursor:pointer;
  font-family:'Space Grotesk',sans-serif;font-weight:700;font-size:12.5px;color:#0b0b12;
  background:linear-gradient(135deg,#fde68a,#fbbf24);border:none;}
.soMark{font-family:'Space Grotesk',monospace;font-weight:700;font-size:26px;
  letter-spacing:3px;color:#fff;margin:6px 0 8px;}
/* Les six maisons */
.soHomes{display:flex;flex-direction:column;gap:7px;margin-top:11px;}
.soHome{display:flex;align-items:center;gap:11px;width:100%;box-sizing:border-box;
  padding:10px 11px;border-radius:13px;cursor:pointer;text-align:left;
  background:rgba(255,255,255,.03);border:1px solid var(--m1,rgba(255,255,255,.12));
  font-family:'Space Grotesk',sans-serif;}
.soHomeAva{flex:none;width:38px;height:38px;border-radius:50%;overflow:hidden;
  display:flex;align-items:center;justify-content:center;background:rgba(255,255,255,.05);}
.soHomeAva svg{width:38px;height:38px;}
.soHomeA .soHomeAva svg{width:22px;height:22px;fill:rgba(196,181,253,.7);}
.soHomeTxt{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px;}
.soHomeTxt b{font-size:12.5px;color:#fff;font-weight:700;overflow-wrap:anywhere;}
.soHomeTxt em{font-style:normal;font-size:10px;color:rgba(255,255,255,.42);}
.soHomeGo{flex:none;}
.soHomeGo .gi{width:15px;height:15px;fill:var(--m1,rgba(255,255,255,.4));}
/* Le bandeau de visite : savoir chez qui on est, et pouvoir sortir */
.dmVisitBar{display:flex;align-items:center;gap:9px;flex-wrap:wrap;margin-bottom:11px;
  padding:10px 12px;border-radius:13px;background:rgba(196,181,253,.09);
  border:1px solid rgba(196,181,253,.32);}
.dmVisitWho{flex:1 1 auto;min-width:0;font-size:11.5px;color:rgba(255,255,255,.7);
  display:flex;align-items:center;gap:6px;}
.dmVisitWho b{color:#c4b5fd;}
.dmVisitWho .gi{width:13px;height:13px;fill:#c4b5fd;flex:none;}
.dmVisitNote{flex:1 1 100%;font-size:10.5px;font-style:italic;color:rgba(255,255,255,.42);}
.dmVisitOut{flex:none;}
/* Le jury : le contrat, la preuve, les quatre questions */
.jyContract{margin:10px 0;padding:11px 12px;border-radius:12px;
  background:rgba(255,255,255,.03);border-left:2px solid rgba(251,191,36,.5);}
.jyCLab{font-size:9px;font-weight:800;letter-spacing:1.6px;text-transform:uppercase;
  color:rgba(251,191,36,.8);margin-bottom:7px;}
.jyCRow{display:flex;flex-direction:column;gap:1px;margin-bottom:6px;}
.jyCRow b{font-size:10px;font-weight:700;color:rgba(255,255,255,.5);}
.jyCRow span{font-size:11px;line-height:1.45;color:rgba(255,255,255,.72);}
.jyCRow.jyBad b{color:rgba(252,165,165,.75);}
.jyClaim{font-size:12px;color:rgba(255,255,255,.7);margin-bottom:9px;}
.jyClaim b{color:#fff;}
.jyImg{width:100%;max-height:44vh;object-fit:contain;border-radius:12px;
  background:#05070c;border:1px solid rgba(255,255,255,.1);}
.jyQs{margin-top:12px;display:flex;flex-direction:column;gap:11px;}
.jyQt{font-size:11.5px;line-height:1.4;color:rgba(255,255,255,.72);margin-bottom:6px;}
.jyOpts{display:flex;gap:6px;flex-wrap:wrap;}
.jyOpt{flex:1 1 auto;padding:9px 12px;border-radius:10px;cursor:pointer;
  font-family:'Space Grotesk',sans-serif;font-size:11.5px;font-weight:700;
  color:rgba(255,255,255,.6);background:rgba(255,255,255,.04);
  border:1px solid rgba(255,255,255,.12);}
.jyOpt.on{background:rgba(251,191,36,.16);border-color:rgba(251,191,36,.45);color:#fde68a;}

/* ══ LE CERCLE : quatre sections ══ */
.soTabs{display:flex;gap:5px;margin-bottom:12px;}
.soTab{flex:1 1 0;min-width:0;display:flex;flex-direction:column;align-items:center;gap:3px;
  padding:9px 4px;border-radius:12px;cursor:pointer;position:relative;
  background:rgba(255,255,255,.03);border:1px solid rgba(255,255,255,.1);
  font-family:'Space Grotesk',sans-serif;font-size:9.5px;font-weight:700;
  color:rgba(255,255,255,.45);}
.soTab .gi{width:15px;height:15px;fill:rgba(255,255,255,.4);}
.soTab span{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%;}
.soTab.on{background:rgba(196,181,253,.12);border-color:rgba(196,181,253,.4);color:#c4b5fd;}
.soTab.on .gi{fill:#c4b5fd;}
.soTabN{position:absolute;top:4px;right:5px;min-width:15px;height:15px;border-radius:8px;
  display:flex;align-items:center;justify-content:center;padding:0 3px;
  background:#fbbf24;color:#0b0b12;font-size:9px;font-weight:800;}
.soBtnAlt{background:rgba(255,255,255,.06)!important;color:rgba(255,255,255,.8)!important;
  border:1px solid rgba(255,255,255,.16)!important;}
.soBtns2{display:flex;gap:7px;margin-top:11px;}
.soBtns2 .soBtn{margin-top:0;}
.soRules{margin-top:11px;display:flex;flex-direction:column;gap:7px;}
.soRule{font-size:10.5px;line-height:1.45;color:rgba(255,255,255,.45);
  padding-left:10px;border-left:2px solid rgba(196,181,253,.3);}
/* La file du modérateur */
.modRow{margin-top:11px;padding:11px;border-radius:13px;
  background:rgba(255,255,255,.03);border:1px solid rgba(255,255,255,.1);}
.modHead{display:flex;align-items:baseline;gap:8px;flex-wrap:wrap;margin-bottom:8px;}
.modHead b{font-size:12px;color:#fff;}
.modHead span{font-size:11px;color:rgba(255,255,255,.55);}
.modMeta{margin-top:7px;font-family:'Space Grotesk',monospace;font-size:10px;
  color:rgba(255,255,255,.36);}
.modAi{margin-top:8px;padding:9px 11px;border-radius:11px;font-size:11px;line-height:1.5;
  color:rgba(196,181,253,.85);background:rgba(167,139,250,.08);
  border-left:2px solid rgba(167,139,250,.45);}
.modAi b{display:block;font-size:9px;letter-spacing:1.4px;text-transform:uppercase;
  color:rgba(196,181,253,.7);margin-bottom:3px;}
.modBtns{display:flex;gap:6px;margin-top:9px;flex-wrap:wrap;}
.modBtns .btnTiny{flex:1 1 auto;}
.modAsk{border-color:rgba(167,139,250,.35)!important;color:rgba(196,181,253,.9)!important;}
.modNo{border-color:rgba(248,113,113,.35)!important;color:rgba(252,165,165,.9)!important;}
.modYes{border-color:rgba(74,222,128,.4)!important;color:rgba(134,239,172,.95)!important;}

/* ══════════════════════════════════════════════════════════════════
   LE CERCLE, refait : une maison SE VOIT
   Chaque carte porte le ciel de son Étage en fond (le dessin de la baie du
   Domicile). Le reproche était juste : une pile de cartes grises identiques
   au reste de l'app ne dit rien. Ici la frontière se lit d'un coup d'oeil.
   ══════════════════════════════════════════════════════════════════ */
.soHead{display:flex;flex-direction:column;gap:3px;margin:4px 0 11px;}
.soHead{font-family:'Syne',sans-serif;font-weight:800;font-size:14px;color:#fff;}
.soHead .gi{width:15px;height:15px;fill:rgba(196,181,253,.9);vertical-align:-2px;margin-right:6px;}
.soHeadSub{font-family:'Space Grotesk',sans-serif;font-weight:400;font-size:11px;
  line-height:1.5;color:rgba(255,255,255,.45);}
.hcGrid{display:flex;flex-direction:column;gap:9px;}
.hcCard{position:relative;display:flex;align-items:center;gap:11px;width:100%;box-sizing:border-box;
  min-height:74px;padding:11px 12px;border-radius:16px;cursor:pointer;overflow:hidden;text-align:left;
  border:1px solid var(--m1,rgba(255,255,255,.14));background:#0a0d16;
  font-family:'Space Grotesk',sans-serif;
  transition:border-color .16s ease,transform .16s ease;}
.hcCard:active{transform:scale(.985);}
.hcSky{position:absolute;inset:0;z-index:0;}
.hcSky svg{width:100%;height:100%;display:block;}
/* Le voile : le ciel reste lisible, le texte reste lisible AUSSI */
.hcVeil{position:absolute;inset:0;z-index:1;
  background:linear-gradient(100deg,rgba(6,8,14,.9) 0%,rgba(6,8,14,.72) 46%,rgba(6,8,14,.3) 100%);}
.hcFace{position:relative;z-index:2;flex:none;width:44px;height:44px;border-radius:50%;overflow:hidden;
  display:flex;align-items:center;justify-content:center;
  background:rgba(0,0,0,.35);border:1px solid var(--m1,rgba(255,255,255,.2));}
.hcFace svg{width:44px;height:44px;}
.hcFace .gi{width:20px;height:20px;fill:rgba(196,181,253,.8);}
.hcBody{position:relative;z-index:2;flex:1;min-width:0;display:flex;flex-direction:column;gap:1px;}
.hcName{font-size:13.5px;font-weight:700;color:#fff;overflow-wrap:anywhere;}
.hcPal{font-size:10px;font-weight:700;letter-spacing:.6px;text-transform:uppercase;color:rgba(255,255,255,.5);}
.hcNote{font-size:10px;font-style:italic;line-height:1.35;color:rgba(255,255,255,.4);overflow-wrap:anywhere;}
/* L'amplitude de ses pièces : le plus haut en gros, le plus bas en petit.
   Une maison bâclée se voit tout de suite (I à XII = du rush). */
.hcRooms{position:relative;z-index:2;flex:none;display:flex;flex-direction:column;align-items:flex-end;
  gap:2px;font-family:'Space Grotesk',sans-serif;line-height:1;text-align:right;}
.hcRooms em{font-style:normal;font-size:8.5px;font-weight:800;letter-spacing:1.2px;
  text-transform:uppercase;color:rgba(255,255,255,.32);}
.hcRooms b{font-family:'Space Grotesk',monospace;font-size:12px;font-weight:700;color:#c7d2fe;
  white-space:nowrap;padding:3px 7px;border-radius:7px;
  background:rgba(199,210,254,.1);border:1px solid rgba(199,210,254,.2);}
/* Le palier teinte le liseré : la couleur dit la hauteur */
.hcCard[data-pal="horslimite"]{border-color:rgba(251,191,36,.5);}
.hcCard[data-pal="ciel"]{border-color:rgba(147,197,253,.42);}
.hcCard[data-pal="terre"]{border-color:rgba(196,181,253,.32);}
.hcCard[data-pal="profondeur"]{border-color:rgba(129,140,248,.3);}
/* Ma marque : elle se copie d'un tap */
.soMarkCard{margin:26px 0 14px;padding:14px;border-radius:16px;text-align:center;
  background:linear-gradient(150deg,rgba(129,140,248,.1),rgba(255,255,255,.015));
  border:1px solid rgba(129,140,248,.3);}
.soMarkLab{font-size:9px;font-weight:800;letter-spacing:2.2px;text-transform:uppercase;
  color:rgba(199,210,254,.7);}
.soMarkVal{margin:7px 0 8px;font-family:'Space Grotesk',monospace;font-weight:700;
  font-size:30px;letter-spacing:4px;color:#fff;cursor:pointer;}
.soMarkTxt{font-size:11px;line-height:1.5;color:rgba(255,255,255,.5);}
/* Les demandes en attente : elles passent avant tout */
.soAsks{display:flex;flex-direction:column;gap:7px;margin-bottom:11px;}
.soAsk{display:flex;align-items:center;gap:9px;padding:10px 11px;border-radius:13px;
  background:rgba(251,191,36,.08);border:1px solid rgba(251,191,36,.3);}
.soAskWho{flex:1;min-width:0;display:flex;flex-direction:column;gap:1px;}
.soAskWho b{font-size:12.5px;color:#fff;}
.soAskWho em{font-style:normal;font-family:'Space Grotesk',monospace;font-size:10px;color:rgba(255,255,255,.45);}
.soAskBtns{flex:none;display:flex;gap:6px;}
.soYes{border-color:rgba(74,222,128,.42)!important;color:rgba(134,239,172,.95)!important;}
.soNo{border-color:rgba(248,113,113,.35)!important;color:rgba(252,165,165,.9)!important;}
.soFriendActs{margin-top:10px;display:flex;flex-direction:column;gap:5px;}
.soFa{display:flex;align-items:center;gap:7px;font-size:11px;color:rgba(255,255,255,.5);
  font-family:'Space Grotesk',sans-serif;}
.soFa>span{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.soAdd{display:flex;gap:7px;margin-top:13px;}
.soAddInp{flex:1;min-width:0;padding:11px 12px;border-radius:12px;font-size:16px;
  font-family:'Space Grotesk',monospace;letter-spacing:2px;text-align:center;text-transform:uppercase;
  color:#fff;background:rgba(255,255,255,.05);border:1px solid rgba(255,255,255,.16);}
.soAdd .soBtn{margin-top:0;flex:none;width:auto;padding:11px 16px;}
.soDoor{display:flex;align-items:center;gap:11px;width:100%;box-sizing:border-box;text-align:left;
  padding:12px 13px;border-radius:14px;cursor:pointer;
  background:rgba(255,255,255,.04);border:1px solid rgba(255,255,255,.11);
  transition:border-color .18s,background .18s;}
.soDoor b{color:#c4b5fd;}
.soDoor .gi{width:12px;height:12px;fill:rgba(196,181,253,.7);vertical-align:-2px;margin-right:5px;}
.soEmpty{padding:4px 0;}
/* ══ LE VOYAGE : un rideau, un nom, et on est ailleurs ══
   One-shot, composé (opacité + transform) : rien d'infini, règle FPS tenue. */
.tvOv{position:fixed;inset:0;z-index:99994;pointer-events:none;opacity:0;
  display:flex;align-items:center;justify-content:center;
  background:radial-gradient(circle at 50% 45%,rgba(20,18,40,.97),rgba(4,6,12,.99));}
.tvOv.in{animation:tvIn .42s ease-out forwards;pointer-events:auto;}
.tvOv.out{animation:tvOut .48s ease-in forwards;}
@keyframes tvIn{from{opacity:0;transform:scale(1.04)}to{opacity:1;transform:scale(1)}}
@keyframes tvOut{from{opacity:1}to{opacity:0}}
.tvInner{text-align:center;padding:0 26px;}
.tvLine{width:0;height:1px;margin:0 auto 16px;background:linear-gradient(90deg,transparent,#c4b5fd,transparent);
  animation:none;}
.tvOv.in .tvLine{animation:tvLine .8s ease-out forwards;}
@keyframes tvLine{from{width:0;opacity:0}60%{opacity:1}to{width:180px;opacity:.9}}
.tvWho{font-family:'Syne',sans-serif;font-weight:800;font-size:24px;color:#fff;
  opacity:0;animation:none;}
.tvOv.in .tvWho{animation:tvWho .6s .12s ease-out forwards;}
@keyframes tvWho{from{opacity:0;transform:translateY(9px)}to{opacity:1;transform:none}}
.tvSub{margin-top:6px;font-size:11px;letter-spacing:1.4px;text-transform:uppercase;
  color:rgba(196,181,253,.7);opacity:0;animation:none;}
.tvOv.in .tvSub{animation:tvWho .6s .26s ease-out forwards;}

/* ══════════════════════════════════════════════════════════════════
   LE MONDE : le hall à quatre portes (refonte demandée). On n'arrive
   pas dans une liste : on choisit où l'on va. Tout est composité et
   ONE-SHOT (règle FPS) : aucune animation infinie ici.
   ══════════════════════════════════════════════════════════════════ */
.wmHall{display:flex;flex-direction:column;gap:11px;}
.wmIntro{display:flex;flex-wrap:wrap;align-items:center;gap:7px;padding:2px 2px 6px;
  font-size:11.5px;color:rgba(255,255,255,.45);line-height:1.5;}
.wmIntro .gi{width:16px;height:16px;fill:#a78bfa;flex:none;}
.wmIntro b{font-family:'Syne',sans-serif;font-size:15px;color:#fff;font-weight:800;}
.wmIntro span{flex:1 1 100%;}
.wmBlock{position:relative;display:flex;align-items:center;gap:13px;width:100%;box-sizing:border-box;
  padding:17px 15px;border-radius:19px;cursor:pointer;overflow:hidden;text-align:left;
  background:linear-gradient(135deg,rgba(255,255,255,.055),rgba(255,255,255,.02));
  border:1px solid rgba(255,255,255,.09);
  opacity:0;transform:translateY(12px);animation:wmPop .5s ease-out forwards;
  transition:border-color .18s,transform .18s;}
@keyframes wmPop{to{opacity:1;transform:none}}
.wmBlock:active{transform:scale(.985);}
@media(hover:hover){.wmBlock:hover{border-color:color-mix(in srgb,var(--w1) 45%,transparent);}}
/* La lueur de la catégorie : un dégradé PRÉ-RENDU, jamais animé */
.wmGlow{position:absolute;inset:0;pointer-events:none;
  background:radial-gradient(120% 90% at 8% 50%,color-mix(in srgb,var(--w1) 26%,transparent),transparent 62%);}
.wmIco{position:relative;flex:none;width:50px;height:50px;border-radius:16px;display:flex;
  align-items:center;justify-content:center;
  background:linear-gradient(135deg,color-mix(in srgb,var(--w1) 30%,transparent),color-mix(in srgb,var(--w2) 22%,transparent));
  border:1px solid color-mix(in srgb,var(--w1) 40%,transparent);}
.wmIco .gi{width:24px;height:24px;fill:var(--w1);}
.wmTxt{position:relative;flex:1;min-width:0;display:flex;flex-direction:column;gap:3px;}
.wmTxt b{font-family:'Syne',sans-serif;font-size:16px;font-weight:800;color:#fff;letter-spacing:-.2px;}
.wmTxt em{font-style:normal;font-size:11.5px;line-height:1.4;color:rgba(255,255,255,.5);overflow-wrap:anywhere;}
.wmGo{position:relative;flex:none;font-size:22px;color:rgba(255,255,255,.28);font-weight:300;line-height:1;}
.wmSoon .wmGo{font-size:10px;letter-spacing:1.2px;text-transform:uppercase;font-weight:700;}
.wmSoon{opacity:.62;}
.wmBadge{position:relative;flex:none;min-width:21px;height:21px;padding:0 6px;border-radius:11px;
  display:flex;align-items:center;justify-content:center;font-size:11px;font-weight:800;
  background:var(--w1);color:#0b1020;}
/* L'en-tête d'une porte ouverte */
.wmHead{display:flex;align-items:center;gap:10px;margin-bottom:13px;}
.wmBack{flex:none;width:34px;height:34px;border-radius:11px;font-size:22px;line-height:1;
  background:rgba(255,255,255,.05);border:1px solid rgba(255,255,255,.1);color:#e2e8f0;cursor:pointer;}
.wmHeadIco{flex:none;width:34px;height:34px;border-radius:11px;display:flex;align-items:center;justify-content:center;
  background:linear-gradient(135deg,color-mix(in srgb,var(--w1) 30%,transparent),color-mix(in srgb,var(--w2) 22%,transparent));}
.wmHeadIco .gi{width:17px;height:17px;fill:var(--w1);}
.wmHeadTxt{flex:1;min-width:0;display:flex;flex-direction:column;}
.wmHeadTxt b{font-family:'Syne',sans-serif;font-size:16px;font-weight:800;color:#fff;}
.wmHeadTxt em{font-style:normal;font-size:10.5px;color:rgba(255,255,255,.42);overflow-wrap:anywhere;}
.wmBody{display:block;}
.wmIn{animation:wmSlide .32s ease-out;}
@keyframes wmSlide{from{opacity:0;transform:translateX(14px)}to{opacity:1;transform:none}}

/* ── LES ÉPREUVES : une carte par discipline, aussi riche que sur le tableau ── */
.epCard{position:relative;padding:14px 14px 13px;border-radius:17px;margin-bottom:11px;overflow:hidden;
  background:rgba(255,255,255,.03);border:1px solid rgba(255,255,255,.09);}
.epDuel{border-color:rgba(248,113,113,.26);background:linear-gradient(160deg,rgba(248,113,113,.09),rgba(255,255,255,.02));}
.epCordee{border-color:rgba(20,184,166,.26);background:linear-gradient(160deg,rgba(20,184,166,.09),rgba(255,255,255,.02));}
.epTournoi{border-color:rgba(251,191,36,.3);background:linear-gradient(160deg,rgba(251,191,36,.1),rgba(255,255,255,.02));}
.epTop{display:flex;align-items:center;gap:8px;margin-bottom:7px;}
.epTop .gi{width:17px;height:17px;flex:none;}
.epDuel .epTop .gi{fill:#f87171;}.epCordee .epTop .gi{fill:#2dd4bf;}.epTournoi .epTop .gi{fill:#fbbf24;}
.epTop b{font-family:'Syne',sans-serif;font-size:15px;font-weight:800;color:#fff;}
.epTop em{font-style:normal;margin-left:auto;font-size:10px;letter-spacing:.8px;text-transform:uppercase;
  color:rgba(255,255,255,.35);white-space:nowrap;}
.epTxt{font-size:11.5px;line-height:1.5;color:rgba(255,255,255,.55);}
.epState{display:flex;align-items:baseline;gap:9px;margin-top:9px;padding:8px 11px;border-radius:11px;
  background:rgba(0,0,0,.22);}
.epState b{font-family:'Space Grotesk',monospace;font-size:17px;font-weight:700;color:#fff;}
.epState em{font-style:normal;font-size:10.5px;color:rgba(255,255,255,.45);}
.epDisc{margin-top:9px;padding:9px 11px;border-radius:11px;background:rgba(251,191,36,.09);
  border:1px solid rgba(251,191,36,.2);display:flex;flex-direction:column;gap:2px;}
.epDiscLab{font-size:9.5px;letter-spacing:1.1px;text-transform:uppercase;color:rgba(253,230,138,.7);}
.epDisc b{font-size:13px;color:#fde68a;font-weight:700;}
.epDisc em{font-style:normal;font-size:11px;line-height:1.45;color:rgba(255,255,255,.5);}
.epBtns{display:flex;flex-wrap:wrap;gap:7px;margin-top:11px;}
.epBtn{flex:1 1 auto;min-width:44%;padding:10px 12px;border-radius:12px;cursor:pointer;
  font-size:12px;font-weight:700;color:#0b1020;background:#e2e8f0;border:0;white-space:nowrap;}
.epBtnAlt{background:rgba(255,255,255,.06);border:1px solid rgba(255,255,255,.14);color:#e2e8f0;}

/* ── LES PREUVES ── */
.pvIntro{display:flex;gap:9px;padding:11px 12px;border-radius:14px;margin-bottom:12px;
  background:rgba(251,191,36,.07);border:1px solid rgba(251,191,36,.2);}
.pvIntro .gi{width:17px;height:17px;fill:#fbbf24;flex:none;margin-top:1px;}
.pvIntro span{font-size:11.5px;line-height:1.5;color:rgba(255,255,255,.6);}
.pvIntro b{color:#fde68a;}
.pvKinds{display:flex;flex-direction:column;gap:7px;margin-bottom:13px;}
.pvKind{display:flex;align-items:center;gap:11px;width:100%;box-sizing:border-box;text-align:left;
  padding:11px 12px;border-radius:13px;cursor:pointer;
  background:rgba(255,255,255,.03);border:1px solid rgba(255,255,255,.09);}
.pvKIco{flex:none;width:34px;height:34px;border-radius:11px;display:flex;align-items:center;justify-content:center;
  background:rgba(251,191,36,.12);border:1px solid rgba(251,191,36,.24);}
.pvKIco .gi{width:16px;height:16px;fill:#fbbf24;}
.pvKTxt{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px;}
.pvKTxt b{font-size:12.5px;color:#fff;font-weight:700;}
.pvKTxt em{font-style:normal;font-size:10.5px;color:rgba(255,255,255,.42);overflow-wrap:anywhere;}
.pvKW{flex:none;width:24px;height:24px;border-radius:8px;display:flex;align-items:center;justify-content:center;
  font-family:'Space Grotesk',monospace;font-weight:700;font-size:12px;
  color:#fbbf24;background:rgba(251,191,36,.1);border:1px solid rgba(251,191,36,.22);}
.pvHead{display:flex;align-items:baseline;justify-content:space-between;gap:8px;
  font-size:10px;letter-spacing:1.2px;text-transform:uppercase;color:rgba(255,255,255,.4);margin:4px 0 7px;}
.pvHead span{color:#4ade80;letter-spacing:0;text-transform:none;font-size:11px;}
.pvRow{display:flex;align-items:center;gap:10px;padding:9px 11px;border-radius:12px;margin-bottom:6px;
  background:rgba(255,255,255,.03);border:1px solid rgba(255,255,255,.07);}
.pvRK{flex:none;}.pvRK .gi{width:15px;height:15px;fill:rgba(255,255,255,.4);}
.pvRT{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px;}
.pvRT b{font-size:12px;color:#e2e8f0;font-weight:600;overflow-wrap:anywhere;}
.pvRT em{font-style:normal;font-size:10px;color:rgba(255,255,255,.35);}
.pvRS{flex:none;font-size:10px;letter-spacing:.5px;text-transform:uppercase;color:rgba(255,255,255,.4);}
.pv-accepted{border-color:rgba(74,222,128,.28);}.pv-accepted .pvRS{color:#4ade80;}
.pv-rejected{border-color:rgba(248,113,113,.24);}.pv-rejected .pvRS{color:#f87171;}
.pv-escalated .pvRS{color:#fbbf24;}
.pvNone{padding:14px;text-align:center;font-size:11.5px;color:rgba(255,255,255,.34);}
/* Le contrat, montré AVANT le dépôt */
.pvCt{margin-bottom:7px;padding:9px 11px;border-radius:11px;font-size:11.5px;line-height:1.45;
  color:rgba(255,255,255,.6);background:rgba(255,255,255,.03);border:1px solid rgba(255,255,255,.07);}
.pvCt b{display:block;font-size:9.5px;letter-spacing:1.1px;text-transform:uppercase;
  color:rgba(255,255,255,.4);margin-bottom:3px;}
.pvBad{background:rgba(248,113,113,.07);border-color:rgba(248,113,113,.2);color:rgba(252,165,165,.8);}
.pvBad b{color:rgba(252,165,165,.65);}
.pvWin{background:rgba(251,191,36,.06);border-color:rgba(251,191,36,.18);}
.pvFile{display:flex;align-items:center;justify-content:center;gap:8px;margin-top:9px;padding:13px;
  border-radius:12px;cursor:pointer;font-size:12.5px;font-weight:700;color:#e2e8f0;
  background:rgba(255,255,255,.05);border:1px dashed rgba(255,255,255,.22);}
.pvFile .gi{width:15px;height:15px;fill:#a78bfa;}
.pvFile.ready{border-style:solid;border-color:rgba(74,222,128,.4);color:#4ade80;}
.pvFile.ready .gi{fill:#4ade80;}
/* ── LES TROIS PORTES D'UN AMI ── */
.fsAct{display:flex;align-items:center;gap:11px;width:100%;box-sizing:border-box;text-align:left;
  padding:12px;border-radius:13px;margin-bottom:8px;cursor:pointer;
  background:rgba(255,255,255,.04);border:1px solid rgba(255,255,255,.1);}
.fsIco{flex:none;width:32px;height:32px;border-radius:10px;display:flex;align-items:center;justify-content:center;
  background:rgba(167,139,250,.14);border:1px solid rgba(167,139,250,.26);}
.fsIco .gi{width:15px;height:15px;fill:#a78bfa;}
.fsTxt{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px;}
.fsTxt b{font-size:12.5px;color:#fff;font-weight:700;}
.fsTxt em{font-style:normal;font-size:10.5px;line-height:1.4;color:rgba(255,255,255,.42);overflow-wrap:anywhere;}
.fsSoon{opacity:.72;}
/* La recherche par pseudo */
.soAddHint{margin:6px 2px 0;font-size:10.5px;color:rgba(255,255,255,.34);}
/* Comptes bloqués : une sortie doit exister, mais elle ne s'affiche pas comme
   une invitation. Discrète, en bas, et seulement s'il y a quelqu'un dedans. */
.soBlkList{display:flex;flex-direction:column;gap:6px;margin:7px 0 2px;}
.soBlkBtn{margin-top:12px;width:100%;justify-content:center;opacity:.55;}
/* ══ AUCUN GESTE SOCIAL NE RESTE MUET ═══════════════════════════════
   Un démarrage à froid prend des secondes : sans un signe, on croit que le
   tap n'a pas pris. Rotation FONCTIONNELLE (elle échappe à calmFx et lowFx,
   comme le bouton des notifications) et le bouton devient inerte. */
.soSpin{display:inline-block;width:12px;height:12px;flex:none;vertical-align:-1px;margin-right:6px;
  border-radius:50%;border:2px solid rgba(167,139,250,.25);border-top-color:#a78bfa;animation:soSpin .7s linear infinite;}
@keyframes soSpin{to{transform:rotate(360deg)}}
.soBusy{cursor:wait;opacity:.85;}
.soSearching{display:flex;align-items:center;justify-content:center;padding:14px 10px;font-size:11.5px;color:rgba(255,255,255,.45);}
.cfmYes .soSpin{border-color:rgba(255,255,255,.3);border-top-color:#fff;}
.soFound{margin-top:9px;display:flex;flex-direction:column;gap:6px;}
.soFoundRow{display:flex;align-items:center;gap:9px;padding:9px 11px;border-radius:12px;
  background:rgba(255,255,255,.03);border:1px solid rgba(255,255,255,.08);}
.soFoundWho{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px;}
.soFoundWho b{font-size:12.5px;color:#fff;font-weight:700;}
.soFoundWho em{font-style:normal;font-size:10px;color:rgba(255,255,255,.38);overflow-wrap:anywhere;}
/* La porte du Domicile répond au tap : elle bascule, elle ne fige pas */
.soDoorSwing{animation:soDoorSw .5s ease-out;}
@keyframes soDoorSw{0%{transform:none}35%{transform:translateX(5px) rotate(.5deg)}100%{transform:none}}
.soDoorBusy{opacity:.6;pointer-events:none;}
/* Le dossier du Bureau : comment le Sommet te traite */
.dmOffVoice{margin:12px 0 4px;padding:11px 12px;border-radius:13px;
  background:rgba(167,139,250,.07);border:1px solid rgba(167,139,250,.2);}
.dmOffVLab{display:flex;align-items:center;gap:7px;font-size:10px;letter-spacing:1.1px;
  text-transform:uppercase;color:rgba(196,181,253,.75);margin-bottom:7px;}
.dmOffVLab .gi{width:14px;height:14px;fill:#a78bfa;}
.dmOffVRow{display:flex;align-items:baseline;gap:9px;padding:5px 0;
  border-top:1px solid rgba(255,255,255,.05);}
.dmOffVRow:first-of-type{border-top:0;}
.dmOffVRow span{flex:0 0 38%;font-size:10.5px;color:rgba(255,255,255,.42);}
.dmOffVRow b{flex:1;min-width:0;font-size:12px;color:#e2e8f0;font-weight:600;overflow-wrap:anywhere;}
.dmOffVNext{margin-top:6px;font-size:10.5px;color:rgba(196,181,253,.6);}
.dmOffVWhere{margin-top:3px;font-size:10px;color:rgba(255,255,255,.3);}
/* La Voix, à gauche et à part (elle ne se range pas avec les écrans) */
.mhVoiceLeft{display:none;}
@media(max-width:680px){
  .mhVoiceLeft{display:flex !important;align-items:center;justify-content:center;
    width:36px;height:36px;flex:none;margin:0 2px 0 0;border-radius:12px;
    background:rgba(167,139,250,.14);border:1px solid rgba(167,139,250,.3);}
  .mhVoiceLeft .gi{width:17px;height:17px;fill:#c4b5fd;}
}
/* Les badges de provenance : La Route se distingue du Plan */
.vtreeRoute{background:rgba(251,191,36,.14) !important;border-color:rgba(251,191,36,.3) !important;color:#fde68a !important;}
.vptRoute{color:#fde68a !important;}
/* La ligne du parent, en pied du planificateur : non modifiable, elle dit à
   quoi la journée se rattache (demande user). */
.pfParent{display:flex;gap:9px;margin-top:11px;padding:10px 12px;border-radius:12px;
  background:rgba(167,139,250,.08);border:1px solid rgba(167,139,250,.22);}
.pfParent .gi{width:15px;height:15px;fill:#a78bfa;flex:none;margin-top:2px;}
.pfParent span{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px;}
.pfParent em{font-style:normal;font-size:9.5px;letter-spacing:1.1px;text-transform:uppercase;
  color:rgba(196,181,253,.7);}
.pfParent b{font-size:12.5px;color:#fff;font-weight:700;overflow-wrap:anywhere;}
.pfParent i{font-style:normal;font-size:10.5px;color:rgba(255,255,255,.4);}
.pfLocked{opacity:.75;}
.pfLocked .gi:last-child{width:11px;height:11px;fill:rgba(255,255,255,.4);margin-left:3px;}
.pfRest{margin-top:5px;font-size:10.5px;color:rgba(34,211,238,.75);}
.pfInput[readonly]{opacity:.8;background:rgba(255,255,255,.02);}

/* ══ ACTION · NOMBRE · UNITÉ, SUR UNE SEULE LIGNE ═════════════════
   Le modèle des objectifs du jour (`.qRowTop`), repris au pixel près :
   la difficulté n'a plus à s'intercaler entre un titre et son chiffre. */
.pfAddRow.pfQ3{gap:6px;}
.pfAddRow.pfQ3 .pfInput{flex:1 1 0;min-width:0;padding-left:11px;padding-right:11px;}
.pfAddRow.pfQ3 .qNumInput{width:54px;flex:none;text-align:center;font-variant-numeric:tabular-nums;}
.pfAddRow.pfQ3 .qUnitInput{width:78px;flex:none;}
.pfAddRow.pfQ3 .qNumInput,.pfAddRow.pfQ3 .qUnitInput{background:rgba(34,211,238,.07);border:1px solid rgba(34,211,238,.3);border-radius:12px;color:#a5f3fc;padding:0 8px;font-weight:600;font-family:'Space Grotesk',sans-serif;outline:none;}
.pfAddRow.pfQ3 .qNumInput::placeholder,.pfAddRow.pfQ3 .qUnitInput::placeholder{color:rgba(165,243,252,.38);}
.pfAddRow.pfQ3 .qUnitInput.locked{opacity:.7;cursor:default;}
.pfAddRow.pfQ3 .pfAddBtn{width:40px;}
.pfAddHead{margin-bottom:2px;}

/* ══ RÉPARTIR SUR LES JOURS (préfixe js) ══════════════════════════ */
.jsLab{margin-top:12px;font-size:10px;font-weight:800;letter-spacing:1.4px;text-transform:uppercase;color:rgba(255,255,255,.4);font-family:'Space Grotesk',sans-serif;}
.jsDays{display:flex;flex-wrap:wrap;gap:6px;margin-top:7px;}
.jsDay{flex:1 1 58px;min-width:56px;display:flex;flex-direction:column;align-items:center;gap:1px;padding:7px 4px;border-radius:11px;border:1px solid rgba(255,255,255,.12);background:rgba(255,255,255,.04);color:rgba(255,255,255,.55);cursor:pointer;font-family:'Space Grotesk',sans-serif;-webkit-tap-highlight-color:transparent;}
.jsDay span{font-size:9.5px;font-weight:700;letter-spacing:.6px;text-transform:uppercase;}
.jsDay b{font-size:15px;font-weight:800;}
.jsDay.on{border-color:rgba(34,211,238,.55);background:rgba(34,211,238,.13);color:#a5f3fc;}
.jsRow{display:flex;align-items:center;gap:8px;margin-top:10px;}
.jsLab2{font-size:11.5px;font-weight:700;color:rgba(255,255,255,.6);font-family:'Space Grotesk',sans-serif;}
.jsDiffs{display:flex;flex-wrap:wrap;gap:6px;margin-top:7px;}
.jsDiffs .planHz.on{border-color:rgba(34,211,238,.55);background:rgba(34,211,238,.14);color:#a5f3fc;}
.msPreview i{display:block;margin-top:3px;font-style:normal;font-size:11px;color:rgba(255,255,255,.5);}
.pfQUnit[readonly]{opacity:.8;}

/* ══════════════════════════════════════════════════════════════════
   LA CONVERSATION. Les outils de sécurité sont DANS le fil (sourdine,
   signaler, bloquer) : on en a besoin au moment où ça dérape, pas trois
   écrans plus loin. Rien d'infini ici (règle FPS).
   ══════════════════════════════════════════════════════════════════ */
.tkOv{position:fixed;inset:0;z-index:10056;display:flex;align-items:flex-end;justify-content:center;
  background:rgba(5,8,15,.72);opacity:0;transition:opacity .18s;}
.tkOv.show{opacity:1;}
.tkOv.hidden{display:none;}
body:not(.lowFx) .tkOv{backdrop-filter:blur(8px);}
.tkCard{width:100%;max-width:520px;max-height:88dvh;display:flex;flex-direction:column;
  border-radius:22px 22px 0 0;background:#0d1117;border:1px solid rgba(255,255,255,.1);border-bottom:0;
  transform:translateY(18px);transition:transform .22s;overflow:hidden;}
.tkOv.show .tkCard{transform:none;}
.tkHead{display:flex;align-items:center;gap:8px;padding:12px 12px 10px;border-bottom:1px solid rgba(255,255,255,.07);}
.tkBack{flex:none;width:32px;height:32px;border-radius:10px;font-size:21px;line-height:1;
  background:rgba(255,255,255,.05);border:1px solid rgba(255,255,255,.1);color:#e2e8f0;cursor:pointer;}
.tkWho{flex:1;min-width:0;font-family:'Syne',sans-serif;font-weight:800;font-size:15px;color:#fff;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.tkTool{flex:none;width:32px;height:32px;border-radius:10px;display:flex;align-items:center;justify-content:center;
  background:rgba(255,255,255,.05);border:1px solid rgba(255,255,255,.1);cursor:pointer;}
.tkTool .gi{width:14px;height:14px;fill:rgba(255,255,255,.5);}
.tkTool.on{background:rgba(251,191,36,.14);border-color:rgba(251,191,36,.3);}
.tkTool.on .gi{fill:#fbbf24;}
.tkCut .gi{fill:rgba(248,113,113,.6);}
.tkWarn{padding:7px 14px;font-size:10px;line-height:1.4;color:rgba(255,255,255,.32);
  background:rgba(255,255,255,.02);border-bottom:1px solid rgba(255,255,255,.05);}
.tkBody{flex:1;min-height:120px;overflow-y:auto;overflow-x:hidden;padding:12px 12px 4px;
  display:flex;flex-direction:column;gap:9px;touch-action:pan-y;}
.tkMsg{display:flex;flex-direction:column;gap:3px;align-items:flex-start;max-width:82%;}
.tkMine{align-self:flex-end;align-items:flex-end;}
.tkBub{padding:9px 12px;border-radius:15px 15px 15px 5px;font-size:13px;line-height:1.45;
  color:#e2e8f0;background:rgba(255,255,255,.06);border:1px solid rgba(255,255,255,.08);
  overflow-wrap:anywhere;}
.tkMine .tkBub{border-radius:15px 15px 5px 15px;color:#0b1020;background:#c7d2fe;border-color:transparent;}
.tkT{font-size:9.5px;color:rgba(255,255,255,.28);padding:0 4px;}
/* La bulle en attente : elle est là, elle n'est pas encore partie. Entrée
   one-shot composée (opacité + translation), rien d'infini. */
.tkMsg{animation:tkPop .22s var(--spring,cubic-bezier(.34,1.4,.64,1)) both;}
@keyframes tkPop{from{opacity:0;transform:translateY(6px) scale(.97);}to{opacity:1;transform:none;}}
.tkWait .tkBub{opacity:.55;}
.tkWait .tkT{opacity:.5;font-style:italic;}
/* Un message retiré : la PLACE reste (la chronologie ne ment pas), le
   contenu part. Même dans une bulle « mienne » : plus de fond plein. */
.tkGone .tkBub{opacity:.5;font-style:italic;background:rgba(255,255,255,.05)!important;color:rgba(255,255,255,.5)!important;border:1px dashed rgba(255,255,255,.14)!important;}
.tkFlag{background:none;border:0;padding:0;font-size:9.5px;color:rgba(248,113,113,.5);
  cursor:pointer;text-decoration:underline;}
.tkEmpty{margin:auto;font-size:12px;color:rgba(255,255,255,.3);}
/* Le fil qui se charge : un loader À SA HAUTEUR, jamais un plein écran qui
   déplacerait la conversation. Le spinner est FONCTIONNEL, donc il échappe à
   calmFx et lowFx (même règle que le bouton des notifications). */
.tkLoad{margin:auto;display:flex;align-items:center;gap:9px;font-size:12px;color:rgba(255,255,255,.4);}
.tkSpin{width:14px;height:14px;flex:none;border-radius:50%;border:2px solid rgba(167,139,250,.25);border-top-color:#a78bfa;animation:tkSpin .7s linear infinite;}
@keyframes tkSpin{to{transform:rotate(360deg)}}
.tkErr{display:flex;flex-direction:column;align-items:center;gap:9px;color:rgba(252,165,165,.75);text-align:center;}
/* La barre de conversation se pose au-dessus des touches, comme le dock, et
   par le même moyen : une seule chose se déplace, en transform. */
.tkBar{transform:translate3d(0,calc(-1 * var(--kb-h,0px)),0);
  transition:transform .16s cubic-bezier(.22,.61,.36,1);
  display:flex;gap:8px;padding:10px 12px calc(12px + env(safe-area-inset-bottom));
  border-top:1px solid rgba(255,255,255,.07);}
.tkInp{flex:1;min-width:0;padding:11px 13px;border-radius:13px;font-size:16px;color:#fff;
  background:rgba(255,255,255,.05);border:1px solid rgba(255,255,255,.12);}
.tkSend{flex:none;width:44px;height:44px;border-radius:13px;display:flex;align-items:center;justify-content:center;
  background:#c7d2fe;border:0;cursor:pointer;}
.tkSend .gi{width:18px;height:18px;fill:#0b1020;}
.tkSend:disabled{opacity:.5;}
/* La liste des conversations, en tête des Amis */
.tkList{display:flex;flex-direction:column;gap:6px;margin-bottom:12px;}
.tkRow{display:flex;align-items:center;gap:10px;padding:10px 12px;border-radius:13px;cursor:pointer;
  background:rgba(255,255,255,.03);border:1px solid rgba(255,255,255,.08);}
.tkRow.tkNew{background:rgba(199,210,254,.08);border-color:rgba(199,210,254,.26);}
.tkRowWho{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px;}
.tkRowWho b{font-size:12.5px;color:#fff;font-weight:700;}
.tkRowWho em{font-style:normal;font-size:10.5px;color:rgba(255,255,255,.4);
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.tkRowT{flex:none;font-size:9.5px;color:rgba(255,255,255,.28);}
.tkDot{flex:none;width:8px;height:8px;border-radius:50%;background:#c7d2fe;}
.fsNew .fsIco{background:rgba(199,210,254,.2);border-color:rgba(199,210,254,.4);}
/* Une pastille discrète sur l'entrée du Monde quand quelqu'un a écrit */
.hasDot{position:relative;}
.hasDot::after{content:"";position:absolute;top:4px;right:4px;width:7px;height:7px;border-radius:50%;
  background:#c7d2fe;border:1.5px solid #0d1117;}
.repTxt{margin:6px 0;padding:9px 11px;border-radius:10px;font-size:12px;line-height:1.45;
  color:rgba(255,255,255,.7);background:rgba(0,0,0,.24);border:1px solid rgba(255,255,255,.06);
  overflow-wrap:anywhere;}

/* ══════════════════════════════════════════════════════════════════
   LA SOCIÉTÉ : sa propre scène, pas le bandeau-titre des écrans
   secondaires (reproche user : la DA du Sac). Une nuit d'altitude,
   des maisons allumées au loin. Peinte UNE fois, zéro animation.
   ══════════════════════════════════════════════════════════════════ */
.soHero{position:relative;height:132px;margin:-4px -4px 14px;border-radius:0 0 20px 20px;
  overflow:hidden;border-bottom:1px solid rgba(167,139,250,.18);}
.soHeroArt{position:absolute;inset:0;width:100%;height:100%;display:block;}
.soHeroTxt{position:absolute;left:16px;bottom:13px;right:16px;display:flex;flex-direction:column;gap:3px;}
.soHeroKick{display:flex;align-items:center;gap:6px;font-size:10px;letter-spacing:1.6px;
  text-transform:uppercase;color:rgba(199,210,254,.75);}
.soHeroKick .gi{width:13px;height:13px;fill:#a78bfa;}
.soHeroName{font-family:'Syne',sans-serif;font-weight:800;font-size:29px;line-height:1;color:#fff;
  letter-spacing:-.6px;text-shadow:0 2px 18px rgba(0,0,0,.6);}
/* La Voix, à gauche du titre : présente sur TOUS les écrans */
.voiceTop{flex:none;width:34px;height:34px;margin-right:9px;border-radius:12px;
  display:flex;align-items:center;justify-content:center;cursor:pointer;
  background:rgba(167,139,250,.16);border:1px solid rgba(167,139,250,.34);}
.voiceTop .gi{width:17px;height:17px;fill:#c4b5fd;}
.voiceTop:active{transform:scale(.94);}
/* L'en-tête accueille la Voix SANS casser sa mise en page : le titre reste
   collé à elle (margin-right:auto), et c'est la ligne d'info qui cède, jamais
   les boutons (même règle que la rangée d'identité du HUD). */
.cardHead{flex-wrap:nowrap;}
.cardHead .h{flex:0 1 auto;min-width:0;margin-right:auto;
    overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.cardHead>.smallText{flex:0 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
/* La recherche vit d'elle-même : plus de bouton à presser */
.soAdd{display:flex;align-items:center;gap:8px;padding:0 12px;border-radius:13px;
  background:rgba(255,255,255,.04);border:1px solid rgba(255,255,255,.1);}
.soAddIco{flex:none;display:flex;}
.soAddIco .gi{width:14px;height:14px;fill:rgba(255,255,255,.35);}
.soAddInp{flex:1;min-width:0;padding:12px 0;font-size:16px;color:#fff;background:none;border:0;}
/* La marque ne colle plus à la porte */
.soDoorWrap{margin-top:22px;}
/* Les paliers d'éveil dans la galerie des déblocages : même gabarit, teinte
   propre (c'est la voix, pas une feature). */
.dmUnlSub{margin:-4px 0 8px;font-size:10.5px;line-height:1.45;color:rgba(255,255,255,.35);}
.dmUnlAwake:not(.sealed){border-color:rgba(167,139,250,.24);background:rgba(167,139,250,.05);}
/* La réserve, dans le Sac */
.scActive{display:flex;align-items:center;gap:7px;margin-bottom:8px;padding:9px 11px;border-radius:11px;
  font-size:11.5px;color:rgba(134,239,172,.85);background:rgba(34,197,94,.09);border:1px solid rgba(34,197,94,.22);}
.scActive .gi{width:13px;height:13px;fill:#4ade80;flex:none;}
.scActive b{color:#bbf7d0;}
.scEmpty{padding:12px;border-radius:12px;font-size:11.5px;color:rgba(255,255,255,.4);
  background:rgba(255,255,255,.02);border:1px dashed rgba(255,255,255,.1);}
.scGo{background:none;border:0;padding:0;color:#818cf8;font-size:11.5px;cursor:pointer;text-decoration:underline;}
.scPardon{border-color:rgba(167,139,250,.24);background:rgba(167,139,250,.06);}
.scN{flex:none;font-family:'Space Grotesk',monospace;font-weight:700;font-size:13px;color:#c7d2fe;}
.scUse{flex:none;padding:8px 12px;border-radius:10px;font-size:11.5px;font-weight:700;
  color:#0b1020;background:#c7d2fe;border:0;cursor:pointer;white-space:nowrap;}
.scUse.off{background:rgba(255,255,255,.06);color:rgba(255,255,255,.4);border:1px solid rgba(255,255,255,.12);}

/* Sur écran étroit, la ligne d'info du titre n'a plus la place : elle se tait
   (le rappel des 5 objectifs vit déjà dans la note de la barre d'outils). */
@media(max-width:430px){.cardHead>.smallText{display:none;}}

/* ══ LA PORTE : l'attente serveur est HABITÉE (règle user) ══
   Un aller-retour peut prendre des secondes. Sans état visible, le joueur
   croit que rien ne s'est passé et tape encore. Le gond pivote, la clé
   tourne, la diode respire : tout est composité, et ça s'arrête au verdict. */
.soDoorIco{flex:none;width:34px;height:34px;border-radius:11px;display:flex;align-items:center;justify-content:center;
  background:rgba(167,139,250,.14);border:1px solid rgba(167,139,250,.28);
  transform-origin:14% 50%;transition:transform .4s cubic-bezier(.34,1.56,.64,1);}
.soDoorIco .gi{width:16px;height:16px;fill:#c4b5fd;}
.soDoorTxt{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px;}
.soDoorTxt b{font-size:12.5px;color:#fff;font-weight:700;}
.soDoorTxt em{font-style:normal;font-size:10.5px;color:rgba(255,255,255,.45);overflow-wrap:anywhere;}
.soDoorLed{flex:none;width:9px;height:9px;border-radius:50%;background:rgba(255,255,255,.16);
  transition:background .25s,box-shadow .25s;}
.soDoorLed.on{background:#4ade80;box-shadow:0 0 9px rgba(74,222,128,.6);}
/* Le battant pivote au tap : le geste a un effet AVANT même la réponse */
.soDoorSwing .soDoorIco{animation:soDoorPivot .5s ease-out;}
@keyframes soDoorPivot{0%{transform:none}40%{transform:perspective(300px) rotateY(-42deg)}100%{transform:none}}
/* Pendant l'aller-retour : la clé tourne, le bouton refuse un second tap */
.soDoorWait{pointer-events:none;border-color:rgba(167,139,250,.32);background:rgba(167,139,250,.07);}
.soDoorWait .soDoorTxt em{color:rgba(196,181,253,.85);}
.soDoorWait .soDoorLed{background:#a78bfa;animation:soDoorKey 1s ease-in-out infinite;}
@keyframes soDoorKey{0%,100%{opacity:.35;transform:scale(.8)}50%{opacity:1;transform:scale(1.25)}}
.soDoorWait .soDoorIco{animation:soDoorTurn 1.1s ease-in-out infinite;}
@keyframes soDoorTurn{0%,100%{transform:perspective(300px) rotateY(0)}50%{transform:perspective(300px) rotateY(-26deg)}}
/* Choisir sa marque : un trophée, pas un réglage */
.mkLead{font-size:12px;line-height:1.5;color:rgba(255,255,255,.6);margin-bottom:10px;}
.mkLead b{color:#fde68a;}
.mkInp{font-family:'Space Grotesk',monospace !important;font-weight:700 !important;
  font-size:26px !important;letter-spacing:6px;text-align:center;text-transform:uppercase;}
.mkState{margin-top:9px;padding:9px 11px;border-radius:11px;font-size:11.5px;line-height:1.45;
  color:rgba(255,255,255,.45);background:rgba(255,255,255,.03);border:1px solid rgba(255,255,255,.07);}
.mkWait{color:rgba(199,210,254,.8);}
.mkFree{color:#4ade80;background:rgba(34,197,94,.08);border-color:rgba(34,197,94,.24);}
.mkSteal{color:#fbbf24;background:rgba(251,191,36,.09);border-color:rgba(251,191,36,.28);}
.mkNo{color:rgba(252,165,165,.85);background:rgba(248,113,113,.07);border-color:rgba(248,113,113,.2);}
.soMarkPick{margin-top:11px;width:100%;padding:10px;border-radius:11px;cursor:pointer;
  display:flex;align-items:center;justify-content:center;gap:7px;
  font-size:11.5px;font-weight:700;color:#fde68a;
  background:rgba(251,191,36,.1);border:1px solid rgba(251,191,36,.28);}
.soMarkPick .gi{width:14px;height:14px;fill:#fbbf24;}
/* Sortir d'une visite : deux sorties, la Société d'abord */
.dmVisitBtns{display:flex;gap:6px;flex:none;}
.dmVisitBack{white-space:nowrap;}
.dmVisitBack .gi{width:12px;height:12px;fill:#a78bfa;vertical-align:-2px;margin-right:3px;}
/* LE JUGEMENT : la valeur de ta voix quand tu tranches la preuve d'un autre */
.relSection{margin-top:14px;padding:13px 14px;border-radius:16px;
  background:rgba(255,255,255,.03);border:1px solid rgba(255,255,255,.09);}
.relHead{display:flex;align-items:center;gap:8px;margin-bottom:9px;}
.relHead .gi{width:15px;height:15px;fill:#a78bfa;flex:none;}
.relHead span{flex:1;min-width:0;font-size:10.5px;letter-spacing:1.4px;text-transform:uppercase;
  color:rgba(255,255,255,.45);}
.relHead b{font-family:'Space Grotesk',monospace;font-weight:700;font-size:18px;}
.relBar{height:5px;border-radius:3px;background:rgba(255,255,255,.07);overflow:hidden;}
.relBar i{display:block;height:100%;border-radius:3px;transition:width .5s ease;}
.rel-solide{color:#4ade80;}i.rel-solide{background:#4ade80;}
.rel-correcte{color:#c7d2fe;}i.rel-correcte{background:#818cf8;}
.rel-fragile{color:#fbbf24;}i.rel-fragile{background:#fbbf24;}
.rel-suspendue{color:#f87171;}i.rel-suspendue{background:#f87171;}
.relTxt{margin-top:8px;font-size:11px;line-height:1.45;color:rgba(255,255,255,.42);}
/* La note d'effort du jury : c'est elle qui fixe le poids d'une attestation */
.jyQEff{border-top:1px solid rgba(251,191,36,.2);padding-top:11px;margin-top:4px;}
.jyEff2.on{background:rgba(251,191,36,.16) !important;border-color:rgba(251,191,36,.4) !important;color:#fde68a !important;}
.jyEff3.on{background:rgba(248,113,113,.16) !important;border-color:rgba(248,113,113,.42) !important;color:#fecaca !important;}
.jyQNote{margin-top:6px;font-size:10px;color:rgba(251,191,36,.6);}
/* Rendre visite, depuis chez soi */
.dmVisitLine{margin:0 0 11px;}
.dmVisitGo{display:flex;align-items:center;gap:9px;width:100%;box-sizing:border-box;
  padding:11px 13px;border-radius:13px;cursor:pointer;
  background:rgba(167,139,250,.07);border:1px solid rgba(167,139,250,.22);}
.dmVisitGo .gi{width:15px;height:15px;fill:#a78bfa;flex:none;}
.dmVisitGo span{flex:1;min-width:0;text-align:left;font-size:12.5px;font-weight:700;color:#e2e8f0;}
.dmVisitGo em{flex:none;font-style:normal;font-size:11px;font-weight:700;color:#c4b5fd;
  background:rgba(167,139,250,.16);border-radius:9px;padding:2px 8px;}
.vpRow{display:flex;align-items:center;gap:10px;width:100%;box-sizing:border-box;text-align:left;
  padding:11px 12px;border-radius:12px;margin-bottom:7px;cursor:pointer;
  background:rgba(255,255,255,.04);border:1px solid rgba(255,255,255,.1);}
.vpWho{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px;}
.vpWho b{font-size:12.5px;color:#fff;font-weight:700;}
.vpWho em{font-style:normal;font-size:10.5px;color:rgba(255,255,255,.42);}
.vpGo .gi{width:15px;height:15px;fill:#a78bfa;}
/* Le titre qui sépare ton Cercle des maisons du Sommet. */
.vpHead{font-family:'Syne',sans-serif;font-size:10px;font-weight:800;letter-spacing:1.6px;
  text-transform:uppercase;color:rgba(255,255,255,.34);margin:12px 2px 7px;}
.vpHead:first-child{margin-top:2px;}

/* ══════════════════════════════════════════════════════════════════
   LE BILAN DE LA JOURNÉE
   ══════════════════════════════════════════════════════════════════
   Un seul moment qui relie les systèmes, au lieu de cinq messages qui se
   coupent. Cascade one-shot (la même que le tutoriel), rien d'infini. */
.drOv{position:fixed;inset:0;z-index:99991;display:flex;align-items:center;justify-content:center;
  padding:22px;background:rgba(4,7,13,.78);opacity:0;transition:opacity .22s ease;}
.drOv.show{opacity:1;}
.drOv:not(.show){pointer-events:none;}
.drOv.hidden{display:none!important;}
@supports (backdrop-filter:blur(2px)){ .drOv{backdrop-filter:blur(9px);} }
body.lowFx .drOv{backdrop-filter:none;background:rgba(4,7,13,.95);}
.drCard{width:100%;max-width:400px;box-sizing:border-box;padding:26px 22px 22px;
  border-radius:22px;background:linear-gradient(180deg,#121a2b,#0a0e17);
  border:1px solid rgba(251,191,36,.3);box-shadow:0 20px 60px rgba(0,0,0,.6);}
.drLine{opacity:0;animation:tutLineIn .42s cubic-bezier(.22,.61,.36,1) forwards;}
.drKick{font-family:'Syne',sans-serif;font-size:10px;font-weight:800;letter-spacing:2.4px;
  text-transform:uppercase;color:rgba(251,191,36,.8);margin-bottom:6px;}
.drTitle{font-family:'Syne',sans-serif;font-size:27px;font-weight:800;color:#fff;line-height:1.1;}
.drStreak{font-size:12.5px;color:rgba(255,255,255,.55);margin:6px 0 16px;}
.drStreak b{color:#fbbf24;font-weight:700;}
.drRow{display:flex;align-items:center;gap:10px;padding:9px 0;
  border-top:1px solid rgba(255,255,255,.06);}
.drIco .gi{width:16px;height:16px;fill:rgba(255,255,255,.4);}
.drLabel{flex:1;min-width:0;font-size:12px;color:rgba(255,255,255,.6);}
.drVal{font-size:12.5px;font-weight:700;color:#fff;text-align:right;}
.drRow.t-or .drVal{color:#fbbf24;} .drRow.t-or .drIco .gi{fill:rgba(251,191,36,.75);}
.drRow.t-indigo .drVal{color:#a5b4fc;} .drRow.t-indigo .drIco .gi{fill:rgba(129,140,248,.75);}
.drNote{margin-top:12px;font-size:11.5px;color:rgba(74,222,128,.75);}
/* CE QUI RESTE EN COURS : la ligne qui fait revenir. Elle ne clôt pas, elle
   ouvre. Or (la couleur de ce qui appelle), au-dessus du pied. */
/* Posée dans le tableau, pas par-dessus : pas d'ombre portée, pas de fond
   qui flotte. Elle appartient à la page. */
.drCard.drInline{max-width:none;padding:18px 16px 16px;margin-bottom:12px;
  box-shadow:none;background:linear-gradient(180deg,rgba(251,191,36,.05),rgba(10,14,23,0));}
.drInline .drTitle{font-size:21px;}
.drInline .drStreak{margin:5px 0 12px;}
.drInline.hidden{display:none;}

.drNext{margin-top:14px;padding:10px 12px;border-radius:12px;
  background:rgba(251,191,36,.08);border:1px solid rgba(251,191,36,.22);
  font-size:12px;color:rgba(255,255,255,.82);line-height:1.45;}
.drNextKick{display:block;font-family:'Syne',sans-serif;font-size:9px;font-weight:800;
  letter-spacing:1.8px;text-transform:uppercase;color:rgba(251,191,36,.8);margin-bottom:3px;}
.drFoot{margin-top:16px;font-size:11.5px;color:rgba(255,255,255,.34);text-align:center;}

/* Le calcul attend qu'on le réclame. */
.aptDWhy{margin:14px 0 4px;border-top:1px solid rgba(255,255,255,.07);padding-top:12px;}
.aptDWhy>summary{list-style:none;cursor:pointer;display:flex;align-items:center;
  justify-content:space-between;gap:10px;padding:11px 13px;border-radius:12px;
  background:rgba(255,255,255,.04);border:1px solid rgba(255,255,255,.08);
  font-size:12.5px;color:rgba(255,255,255,.68);}
.aptDWhy>summary::-webkit-details-marker{display:none;}
.aptDWhy>summary::after{content:'+';font-size:17px;color:rgba(251,191,36,.7);line-height:1;}
.aptDWhy[open]>summary::after{content:'−';}
.aptDWhy[open]>summary{color:#fff;border-color:rgba(251,191,36,.28);background:rgba(251,191,36,.06);}
.aptDWhy>summary+*{margin-top:12px;}

/* CE QUI DORT ENCORE : compté en une ligne, jamais étalé en cadenas. */
.aptDorm{display:flex;align-items:center;gap:7px;margin-top:10px;padding:9px 11px;
  border-radius:11px;background:rgba(255,255,255,.03);border:1px solid rgba(255,255,255,.06);
  font-size:11px;color:rgba(255,255,255,.4);line-height:1.4;}
.aptDorm .gi{width:12px;height:12px;fill:rgba(255,255,255,.3);flex:0 0 auto;}

/* CE QUE LE SOMMET CONSTATE : une phrase par aptitude, qui suit la mesure. */
.aptCellSay{display:block;font-size:9.5px;line-height:1.3;color:rgba(255,255,255,.42);
  margin-top:2px;overflow:hidden;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;}

/* LA RÉVÉLATION DE LA VISION : une conséquence, pas un formulaire. */
.vrevCard{border-color:rgba(167,139,250,.35);}
.vrevTxt{margin:10px 0 16px;font-size:13px;line-height:1.55;color:rgba(255,255,255,.72);}
.vrevLadder{display:flex;flex-direction:column;gap:2px;}
.vrevStep{padding:10px 12px;border-radius:12px;background:rgba(167,139,250,.07);
  border:1px solid rgba(167,139,250,.18);}
.vrevStep b{display:block;font-family:'Syne',sans-serif;font-size:13px;color:#fff;font-weight:700;}
.vrevStep em{font-style:normal;font-size:11px;color:rgba(255,255,255,.45);}
.vrevArrow{font-size:9.5px;letter-spacing:1.4px;text-transform:uppercase;
  color:rgba(167,139,250,.55);text-align:center;padding:3px 0;}
.vrevNote{margin-top:16px;font-size:11.5px;line-height:1.5;color:rgba(251,191,36,.8);}
.vrevGo{display:block;width:100%;margin-top:16px;padding:13px;border-radius:14px;border:none;
  cursor:pointer;font-family:'Syne',sans-serif;font-size:13.5px;font-weight:700;color:#fff;
  background:linear-gradient(135deg,#7c3aed,#a78bfa);box-shadow:0 4px 18px rgba(124,58,237,.4);}
.vrevGo:active{transform:scale(.98);}
.vrevLater{display:block;width:100%;margin-top:8px;padding:9px;background:none;border:none;
  cursor:pointer;font-size:11.5px;color:rgba(255,255,255,.35);}
/* La Veine qui a travaillé sans nous : la couleur de ce qu'elle produit. */
.dmCall.dmCallVeine{border-color:rgba(129,140,248,.4);background:rgba(79,70,229,.1);}
.dmCallVeine .dmCallTxt b{color:#a5b4fc;}

/* ══════════════════════════════════════════════════════════════════
   LA BARRE D'ÉCRITURE — ancrée au clavier, le reste ne bouge plus
   ══════════════════════════════════════════════════════════════════
   Une seule chose se déplace : cette barre, en `transform`, donc sur le
   compositeur. La page derrière est FIGÉE — c'est tout l'intérêt.
   `--kb-h` est la hauteur du clavier, tenue à jour par _cmpTrackKb. */
/* ⚠ AU-DESSUS DES DIALOGUES (10070) : le dock s'ouvre maintenant DANS les
   dialogues (renommer un objectif, éditer une tâche). À 10062 il serait
   passé dessous, invisible. */
.cmpOv{position:fixed;inset:0;z-index:10075;display:flex;align-items:flex-end;
  background:rgba(4,7,13,.62);opacity:0;transition:opacity .18s ease;}
.cmpOv.show{opacity:1;}
.cmpOv:not(.show){pointer-events:none;}
.cmpOv.hidden{display:none!important;}
@supports (backdrop-filter:blur(2px)){ .cmpOv{backdrop-filter:blur(7px);} }
body.lowFx .cmpOv{backdrop-filter:none;background:rgba(4,7,13,.9);}

.cmpBar{width:100%;box-sizing:border-box;
  padding:12px 14px calc(12px + env(safe-area-inset-bottom,0px));
  background:linear-gradient(180deg,#111827,#0b0f18);
  border-top:1px solid rgba(167,139,250,.28);
  box-shadow:0 -12px 40px rgba(0,0,0,.5);
  transform:translate3d(0,calc(-1 * var(--kb-h,0px)),0);
  transition:transform .16s cubic-bezier(.22,.61,.36,1);}

.cmpMeta{display:flex;align-items:center;gap:7px;flex-wrap:wrap;margin-bottom:9px;min-height:15px;}
.cmpKick{font-family:'Syne',sans-serif;font-size:11px;font-weight:800;letter-spacing:.2px;
  color:rgba(167,139,250,.75);}
/* Le quantitatif appartient à la même saisie que son action. Ces deux miroirs
   restent DANS le dock : le clavier peut passer du texte au nombre sans rendre
   la géométrie de la page au formulaire situé derrière. Cyan = mesurable,
   conformément au langage déjà utilisé dans Vision et le planificateur. */
.cmpPlanQ{flex:1 0 100%;display:flex;align-items:flex-end;gap:8px;margin-top:2px;}
.cmpPlanQ label{display:flex;flex-direction:column;gap:4px;flex:0 0 88px;min-width:0;}
.cmpPlanQ label.unit{flex:1 1 auto;}
.cmpPlanQ label>span{font-size:9.5px;font-weight:800;letter-spacing:.25px;
  color:rgba(103,232,249,.72);}
.cmpPlanQ input{box-sizing:border-box;width:100%;height:40px;min-width:0;padding:0 10px;
  border-radius:11px;border:1px solid rgba(34,211,238,.3);outline:none;
  background:rgba(34,211,238,.07);color:#a5f3fc;font-family:'Space Grotesk',sans-serif;
  font-size:16px;font-weight:650;transition:border-color .16s ease,background .16s ease;}
.cmpPlanQ input:focus{border-color:rgba(34,211,238,.75);background:rgba(34,211,238,.13);}
.cmpPlanQ input::placeholder{color:rgba(165,243,252,.38);}
.cmpPlanQ input[readonly]{opacity:.72;}
.cmpTag{display:inline-flex;align-items:center;gap:4px;font-size:10.5px;
  color:rgba(255,255,255,.55);background:rgba(255,255,255,.05);
  border:1px solid rgba(255,255,255,.08);border-radius:999px;padding:2px 8px;}
.cmpTag .gi{width:11px;height:11px;fill:rgba(255,255,255,.5);}

/* Le mini-menu se deplie DANS le dock, au-dessus du champ. */
.cmpPanel{margin-bottom:10px;max-height:34vh;overflow-y:auto;
  border-top:1px solid rgba(255,255,255,.07);padding-top:10px;}
.cmpPanel.hidden{display:none;}
.cmpGrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(88px,1fr));gap:6px;}
.cmpCell{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:4px;
  height:58px;padding:4px 3px;border-radius:12px;cursor:pointer;
  background:rgba(255,255,255,.04);border:1px solid rgba(255,255,255,.08);
  transition:border-color .16s ease,background .16s ease;}
.cmpCell span{font-size:9.5px;line-height:1.15;color:rgba(255,255,255,.62);text-align:center;
  overflow:hidden;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;}
.cmpCell .gi{width:17px;height:17px;fill:rgba(167,139,250,.85);}
.cmpCell.on{border-color:rgba(167,139,250,.7);background:rgba(167,139,250,.13);}
.cmpCell.on span{color:#fff;}
.cmpDiffs{display:flex;flex-direction:column;gap:6px;}
.cmpDiff{display:flex;align-items:center;justify-content:space-between;width:100%;
  padding:11px 13px;border-radius:12px;cursor:pointer;box-sizing:border-box;
  background:rgba(255,255,255,.04);border:1px solid rgba(255,255,255,.08);}
.cmpDiff b{font-size:12.5px;color:#fff;font-weight:600;}
.cmpDiff em{font-style:normal;font-size:11px;color:rgba(255,255,255,.45);}
.cmpDiff.on{border-color:rgba(167,139,250,.7);background:rgba(167,139,250,.13);}
.cmpTag.act{cursor:pointer;}
.cmpTag.act:active{background:rgba(167,139,250,.14);}
.cmpCancel{margin-left:auto;font-size:11px;color:rgba(255,255,255,.42);
  background:none;border:none;cursor:pointer;padding:3px 4px;}
.cmpCancel:active{color:rgba(255,255,255,.7);}

.cmpRow{display:flex;align-items:flex-end;gap:10px;}
.cmpTa{flex:1;min-width:0;resize:none;overflow-y:auto;
  font-family:'Space Grotesk',sans-serif;font-size:16px;line-height:1.45;
  color:#fff;background:rgba(255,255,255,.05);
  border:1px solid rgba(255,255,255,.12);border-radius:14px;padding:11px 13px;
  transition:border-color .18s ease;}
.cmpTa{scrollbar-width:none;}
.cmpTa::-webkit-scrollbar{display:none;}
.cmpTa:focus{outline:none;border-color:rgba(167,139,250,.6);background:rgba(167,139,250,.07);}
.cmpTa::placeholder{color:rgba(255,255,255,.3);}
.cmpNum{flex:1;min-width:0;height:48px;box-sizing:border-box;
  font-family:'Space Grotesk',sans-serif;font-size:18px;font-weight:650;
  color:#fff;background:rgba(255,255,255,.05);
  border:1px solid rgba(255,255,255,.12);border-radius:14px;padding:0 14px;
  outline:none;appearance:textfield;-moz-appearance:textfield;
  transition:border-color .18s ease,background .18s ease;}
.cmpNum:focus{border-color:rgba(167,139,250,.7);background:rgba(167,139,250,.09);}
.cmpNum::placeholder{color:rgba(255,255,255,.3);}
.cmpNum::-webkit-inner-spin-button,.cmpNum::-webkit-outer-spin-button{-webkit-appearance:none;margin:0;}
.cmpNum.hidden{display:none!important;}
.cmpOk{flex:0 0 auto;width:46px;height:46px;border-radius:14px;cursor:pointer;
  display:flex;align-items:center;justify-content:center;
  background:linear-gradient(135deg,#7c3aed,#a78bfa);border:none;
  box-shadow:0 4px 16px rgba(124,58,237,.4);transition:transform .12s ease;}
.cmpOk:active{transform:scale(.94);}
.cmpOk .gi{width:19px;height:19px;fill:#fff;}

/* ══════════════════════════════════════════════════════════════════
   CEINTURE : UN OVERLAY INVISIBLE NE PEUT PAS AVALER UN TAP
   ══════════════════════════════════════════════════════════════════
   Bug vécu (28 juillet) : `.dmPanelOv` est `inset:0; z-index:10054;
   opacity:0` SANS pointer-events:none, et il naissait sans `hidden`.
   Entre sa création et l'ajout de `.show` — ou si un `hidden` différé
   se perd — il reste plein écran, invisible, et capte chaque tap :
   l'app paraît morte alors que le scroll continue de marcher.
   RÈGLE : tout overlay plein écran est INERTE tant qu'il n'est pas
   montré. La classe qui le montre est la seule qui le rend cliquable.
   ══════════════════════════════════════════════════════════════════ */
.dmPanelOv:not(.show),
.tkOv:not(.show),
.visRegOv:not(.show),
.aptDOv:not(.show),
.constOv:not(.show),
.prcOv:not(.show),
.awOv:not(.show),
.voiceOv:not(.show){pointer-events:none;}
/* …et masqués pour de bon quand ils portent `hidden` (double verrou) */
.dmPanelOv.hidden,.tkOv.hidden,.visRegOv.hidden,.aptDOv.hidden,
.constOv.hidden,.prcOv.hidden,.awOv.hidden,.voiceOv.hidden,
#travelOv.hidden,#aptDetailOv.hidden{display:none !important;}

/* LE TITRE CEDE, LES BOUTONS JAMAIS (regle user). Sur ecran etroit il n'a que
   ~190 px : sa police descend pour tenir en entier, au lieu de pousser les
   Reglages hors de l'ecran (bug vecu) ou de se faire couper. */
@media(max-width:430px){
  .cardHead .h{font-size:12px;letter-spacing:.2px;}
}
/* Le Cercle vide ne cache pas la porte : elle mene la ou on se fait des amis */
.dmVisitEmpty{opacity:.7;}
.dmVisitEmpty em{background:rgba(255,255,255,.08) !important;color:rgba(255,255,255,.45) !important;}

/* ══════════════════════════════════════════════════════════════════
   REFONTE LES PAIRS + HUB MENTOR (31 juillet, plan Codex)
   Grammaire existante : cartes rgba, bordures 1px, Syne pour les noms,
   couleurs des mentors via --mc1/--mc2, or = attesté, zéro animation infinie.
   ══════════════════════════════════════════════════════════════════ */
/* — Ce qui t'attend : deux portes compactes, jamais un extrait de message — */
/* Les portes se dimensionnent à leur CONTENU et la rangée wrap : un libellé ne
   se tronque jamais (règle maison) ; à l'étroit, la seconde prend sa ligne. */
.soWaitRow{display:flex;flex-wrap:wrap;gap:8px;margin:2px 0 14px;}
.soWaitDoor{flex:1 1 auto;display:flex;align-items:center;gap:7px;padding:11px 12px;
  border-radius:13px;border:1px solid color-mix(in srgb,var(--w1) 38%,transparent);
  background:linear-gradient(135deg,color-mix(in srgb,var(--w1) 12%,transparent),rgba(255,255,255,.02));
  color:#fff;cursor:pointer;font-family:'Syne',sans-serif;font-weight:800;font-size:12px;}
.soWaitDoor .gi{width:16px;height:16px;fill:var(--w1);flex:none;}
.soWaitDoor b{font-weight:800;white-space:nowrap;}
.soWaitDoor.on{background:linear-gradient(135deg,color-mix(in srgb,var(--w1) 22%,transparent),rgba(255,255,255,.03));}
.soWaitN{margin-left:auto;flex:none;min-width:20px;height:20px;border-radius:10px;display:flex;align-items:center;justify-content:center;
  background:var(--w1);color:#0a0e1a;font-family:'Space Grotesk',monospace;font-size:11px;font-weight:700;padding:0 6px;}
/* — Le Cercle : une carte par personne, le médaillon porte son ciel — */
.soHeadRow{flex-direction:row;align-items:center;gap:8px;flex-wrap:nowrap;}
.soHeadN{flex:none;font-family:'Space Grotesk',monospace;font-size:10.5px;font-weight:700;color:rgba(255,255,255,.6);
  background:rgba(255,255,255,.07);border:1px solid rgba(255,255,255,.12);border-radius:9px;padding:2px 7px;}
.soFindBtn{margin-left:auto;flex:none;display:flex;align-items:center;gap:5px;padding:6px 10px;border-radius:10px;
  border:1px solid rgba(167,139,250,.3);background:rgba(167,139,250,.08);color:#c4b5fd;
  font-family:'Syne',sans-serif;font-weight:700;font-size:11px;cursor:pointer;}
.soFindBtn .gi{width:12px;height:12px;fill:#c4b5fd;}
.soFindBtn.on{background:rgba(167,139,250,.2);border-color:rgba(167,139,250,.5);}
.soPeers{display:flex;flex-direction:column;gap:7px;}
.soPeer{display:flex;align-items:center;gap:11px;width:100%;box-sizing:border-box;text-align:left;padding:9px 11px;
  border-radius:14px;border:1px solid rgba(255,255,255,.08);background:rgba(255,255,255,.03);color:#fff;cursor:pointer;}
.soPeerAva{flex:none;width:38px;height:38px;border-radius:50%;display:flex;align-items:center;justify-content:center;
  font-family:'Syne',sans-serif;font-weight:800;font-size:16px;color:rgba(255,255,255,.92);
  background:radial-gradient(circle at 32% 28%,color-mix(in srgb,var(--pv1) 55%,var(--pv2)),var(--pv2) 78%);
  border:1px solid color-mix(in srgb,var(--pv1) 45%,transparent);}
.soPeerTxt{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px;}
.soPeerTxt b{font-family:'Syne',sans-serif;font-weight:800;font-size:13.5px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.soPeerTxt em{font-style:normal;font-size:10.5px;color:rgba(255,255,255,.45);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.soPeerT{flex:none;font-family:'Space Grotesk',monospace;font-size:10px;color:rgba(255,255,255,.35);}
.soPeerGo{flex:none;font-size:15px;color:rgba(255,255,255,.35);font-family:'Syne',sans-serif;font-weight:800;white-space:nowrap;}
.soMoreBtn{width:100%;box-sizing:border-box;margin-top:8px;padding:9px;border-radius:12px;border:1px dashed rgba(255,255,255,.16);
  background:none;color:rgba(255,255,255,.55);font-family:'Syne',sans-serif;font-weight:700;font-size:11.5px;cursor:pointer;}
/* — Les écoles : la tienne en grand, les autres en compact — */
.soMentorBig{position:relative;overflow:hidden;display:flex;align-items:center;gap:13px;width:100%;box-sizing:border-box;
  text-align:left;padding:15px 14px;border-radius:18px;cursor:pointer;color:#fff;margin-bottom:10px;
  border:1px solid color-mix(in srgb,var(--mc1) 34%,transparent);
  background:linear-gradient(135deg,color-mix(in srgb,var(--mc1) 10%,transparent),rgba(255,255,255,.02));}
.soMentorFace{flex:none;width:58px;height:58px;border-radius:50%;box-shadow:0 10px 26px -12px var(--mc2);}
.soMentorFace svg{width:100%;height:100%;}
.soMentorTxt{flex:1;min-width:0;display:flex;flex-direction:column;gap:3px;}
.soMentorKick{font-size:9px;letter-spacing:1.6px;text-transform:uppercase;font-weight:700;color:var(--mc1);}
.soMentorTxt>b{font-family:'Syne',sans-serif;font-weight:800;font-size:16px;}
.soMentorSub{font-size:11px;color:rgba(255,255,255,.55);}
.soMentorProg{display:block;height:4px;border-radius:2px;background:rgba(255,255,255,.08);margin-top:5px;overflow:hidden;}
.soMentorProg i{display:block;height:100%;border-radius:2px;background:linear-gradient(90deg,var(--mc1),var(--mc2));}
.soMentorProgLab{font-size:10px;color:rgba(255,255,255,.45);}
.soMentorNew{display:inline-flex;align-items:center;gap:5px;margin-top:5px;padding:3px 8px;border-radius:9px;align-self:flex-start;
  background:color-mix(in srgb,var(--mc1) 16%,transparent);border:1px solid color-mix(in srgb,var(--mc1) 40%,transparent);
  font-size:10px;font-weight:700;color:#fff;}
.soMentorNew .gi{width:11px;height:11px;fill:var(--mc1);}
.soSchools{display:grid;grid-template-columns:1fr 1fr;gap:8px;}
.soSchool{display:flex;align-items:center;gap:9px;min-width:0;text-align:left;padding:10px;border-radius:14px;cursor:pointer;color:#fff;
  border:1px solid rgba(255,255,255,.08);background:rgba(255,255,255,.025);}
.soSchool .soSchoolFace{flex:none;width:36px;height:36px;border-radius:50%;box-shadow:0 6px 16px -8px var(--mc2);}
.soSchool .soSchoolFace svg{width:100%;height:100%;}
.soSchoolTxt{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px;}
.soSchoolTxt b{font-family:'Syne',sans-serif;font-weight:800;font-size:12px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.soSchoolTxt em{font-style:normal;font-size:9.5px;line-height:1.35;color:rgba(255,255,255,.42);
  display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;}
/* — L'Assistant (pas une école) et Mon accès : des lignes, pas des cartes — */
.soAsstLine,.soAccessLine{display:flex;align-items:center;gap:11px;width:100%;box-sizing:border-box;text-align:left;
  margin-top:12px;padding:10px 12px;border-radius:13px;cursor:pointer;color:#fff;
  border:1px solid rgba(255,255,255,.07);background:rgba(255,255,255,.02);}
.soAsstIco{flex:none;width:30px;height:30px;border-radius:10px;display:flex;align-items:center;justify-content:center;
  background:rgba(255,255,255,.05);border:1px solid rgba(255,255,255,.1);}
.soAsstIco .gi{width:15px;height:15px;fill:rgba(255,255,255,.55);}
.soAccessBody{margin-top:10px;}
.soAccessBody .soMarkCard{margin-top:0;}
/* — Fiches relationnelles (variante mentor) — */
.fsMentorHead{display:flex;justify-content:center;margin:2px 0 12px;}
.fsMentorFace{width:74px;height:74px;border-radius:50%;box-shadow:0 12px 34px -14px var(--mc2);}
.fsMentorFace svg{width:100%;height:100%;}
.fsBio{font-size:12.5px;line-height:1.6;color:rgba(255,255,255,.75);text-align:left;margin-bottom:11px;}
.fsProg{font-size:11.5px;color:rgba(255,255,255,.6);text-align:left;padding:9px 11px;border-radius:11px;
  background:rgba(255,255,255,.04);border:1px solid rgba(255,255,255,.08);}
.fsProg .gi{width:12px;height:12px;fill:rgba(196,181,253,.9);vertical-align:-2px;margin-right:5px;}
.fsAct.fsMuted .fsIco .gi{fill:rgba(255,255,255,.4);}
.fsAct.fsDanger .fsIco{background:rgba(239,68,68,.1);border-color:rgba(239,68,68,.3);}
.fsAct.fsDanger .fsIco .gi{fill:rgba(252,165,165,.9);}
/* — Le hub Mentor : identité vivante, Aujourd'hui, quatre portes, parcours — */
.mtHeader{flex-wrap:wrap;}
.mtHeadTop{display:flex;align-items:center;gap:14px;flex:1 1 100%;min-width:0;padding-right:30px;}
.mtHeadQuote{flex:1 1 100%;margin-top:11px;padding-top:11px;border-top:1px solid rgba(255,255,255,.07);
  font-size:12px;line-height:1.55;font-style:italic;color:rgba(255,255,255,.72);}
.mtDetBtn{position:absolute;top:12px;right:12px;z-index:2;width:32px;height:32px;border-radius:11px;cursor:pointer;
  border:1px solid rgba(255,255,255,.12);background:rgba(255,255,255,.05);display:flex;align-items:center;justify-content:center;}
.mtDetBtn .gi{width:15px;height:15px;fill:rgba(255,255,255,.55);}
.mtToday{position:relative;overflow:hidden;padding:15px 16px;border-radius:18px;margin-bottom:12px;
  border:1px solid color-mix(in srgb,var(--mc1) 32%,transparent);
  background:linear-gradient(135deg,color-mix(in srgb,var(--mc1) 11%,transparent),rgba(255,255,255,.02));}
.mtTodayKick{font-size:9px;letter-spacing:1.6px;text-transform:uppercase;font-weight:700;color:var(--mc1);margin-bottom:6px;}
.mtTodayTitle{font-family:'Syne',sans-serif;font-weight:800;font-size:17px;line-height:1.25;margin-bottom:4px;}
.mtTodaySub{font-size:11.5px;color:rgba(255,255,255,.55);line-height:1.5;}
.mtTodayBtns{display:flex;align-items:center;gap:9px;margin-top:11px;flex-wrap:wrap;}
.mtTodayGo{padding:10px 16px;border-radius:12px;border:none;cursor:pointer;color:#0a0e1a;
  font-family:'Syne',sans-serif;font-weight:800;font-size:12.5px;
  background:linear-gradient(135deg,var(--mc1),var(--mc2));box-shadow:0 8px 22px -10px var(--mc2);}
.mtTodayAlt{padding:9px 12px;border-radius:11px;border:1px solid rgba(255,255,255,.14);background:none;
  color:rgba(255,255,255,.6);font-family:'Syne',sans-serif;font-weight:700;font-size:11.5px;cursor:pointer;}
.mtTodayDone{border-color:rgba(74,222,128,.3);background:linear-gradient(135deg,rgba(74,222,128,.08),rgba(255,255,255,.02));}
.mtTodayDone .mtTodayKick{color:#4ade80;}
.mtDoors{display:grid;grid-template-columns:1fr 1fr;gap:9px;margin-bottom:12px;}
.mtDoor{position:relative;display:flex;flex-direction:column;align-items:flex-start;gap:3px;min-width:0;text-align:left;
  padding:12px;border-radius:15px;cursor:pointer;color:#fff;
  border:1px solid rgba(255,255,255,.09);background:rgba(255,255,255,.03);}
.mtDoorIco{width:30px;height:30px;border-radius:10px;display:flex;align-items:center;justify-content:center;margin-bottom:3px;
  background:color-mix(in srgb,var(--mc1) 14%,transparent);border:1px solid color-mix(in srgb,var(--mc1) 32%,transparent);}
.mtDoorIco .gi{width:15px;height:15px;fill:var(--mc1);}
.mtDoor b{font-family:'Syne',sans-serif;font-weight:800;font-size:12.5px;}
.mtDoor em{font-style:normal;font-size:10px;line-height:1.35;color:rgba(255,255,255,.45);
  display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;width:100%;}
.mtDoorBar{display:block;width:100%;height:3px;border-radius:2px;background:rgba(255,255,255,.08);margin-top:5px;overflow:hidden;}
.mtDoorBar i{display:block;height:100%;border-radius:2px;background:linear-gradient(90deg,var(--mc1),var(--mc2));}
.mtDoorDot{position:absolute;top:10px;right:10px;width:9px;height:9px;border-radius:50%;background:var(--mc1);
  box-shadow:0 0 8px var(--mc1);}
.mtViewHead{display:flex;align-items:center;gap:10px;margin-bottom:12px;padding:9px 11px;border-radius:15px;
  border:1px solid color-mix(in srgb,var(--mc1) 26%,transparent);
  background:linear-gradient(135deg,color-mix(in srgb,var(--mc1) 9%,transparent),rgba(255,255,255,.02));}
.mtViewFace{flex:none;width:34px;height:34px;border-radius:50%;}
.mtViewFace svg{width:100%;height:100%;}
.mtViewTitle{display:flex;flex-direction:column;gap:1px;min-width:0;}
.mtViewTitle b{font-family:'Syne',sans-serif;font-weight:800;font-size:14px;}
.mtViewTitle em{font-style:normal;font-size:10px;color:rgba(255,255,255,.45);}
.mtLogAcc{margin-top:2px;border:1px solid rgba(255,255,255,.08);border-radius:15px;background:rgba(255,255,255,.02);padding:0 12px;}
.mtLogAcc summary{display:flex;align-items:center;gap:8px;padding:12px 0;cursor:pointer;list-style:none;
  font-family:'Syne',sans-serif;font-weight:800;font-size:12.5px;color:rgba(255,255,255,.8);}
.mtLogAcc summary::-webkit-details-marker{display:none;}
.mtLogAcc summary .gi{width:14px;height:14px;fill:rgba(196,181,253,.8);}
.mtLogN{margin-left:auto;font-family:'Space Grotesk',monospace;font-size:10.5px;color:rgba(255,255,255,.4);}
.mtLogRows{padding:2px 0 12px;display:flex;flex-direction:column;gap:8px;}
.mtLogRow{display:flex;align-items:flex-start;gap:9px;font-size:11.5px;line-height:1.5;color:rgba(255,255,255,.65);}
.mtLogIco{flex:none;width:22px;height:22px;border-radius:8px;display:flex;align-items:center;justify-content:center;
  background:rgba(255,255,255,.05);border:1px solid rgba(255,255,255,.09);margin-top:1px;}
.mtLogIco .gi{width:11px;height:11px;fill:rgba(255,255,255,.5);}

/* ── 18+ : Sweet Jones est réservé aux majeurs (1er août 2026) ─────────
   Chip d'avertissement à côté de son nom (galerie mentor + écoles des Pairs).
   Rouge = frontière dure, langage couleur du canon. Poids constant : jamais
   de changement de layout au survol (règle anti-reflow). */
.mgAdult{display:inline-block;vertical-align:2px;margin-left:5px;padding:1px 6px 2px;
  border:1px solid rgba(248,113,113,.55);border-radius:7px;color:#f87171;
  font-size:9.5px;font-weight:700;letter-spacing:.6px;line-height:1;
  font-family:'Space Grotesk',sans-serif;white-space:nowrap;}

/* ── 4.2 : préférences de notifications par canal (sous la row push) ── */
.notifPrefsBox{margin:2px 0 12px;padding:2px 12px 4px;border-left:2px solid rgba(255,255,255,.08);
  display:flex;flex-direction:column;gap:2px;}
.npRow{display:flex;justify-content:space-between;align-items:center;gap:12px;padding:7px 0;
  cursor:pointer;font-size:12px;color:rgba(255,255,255,.62);font-family:'Space Grotesk',sans-serif;}
.npRow span{min-width:0;}

/* ── Priorisation : la preuve du jour se voit sur la case (1er août) ── */
.aptDayTick{display:block;margin-top:3px;font-size:8.5px;font-weight:700;letter-spacing:.4px;
  color:#a78bfa;font-family:'Space Grotesk',sans-serif;}
.aptDayTick.ok{color:#4ade80;}
