    /* ── DESIGN SYSTEM — Jadikan light painting ── */
    /* Tokens partagés (accents, typo, radius, glow) : css/design-tokens.css */
    :root{
      --bg:#f4f1ec;--bg-2:#ede9e3;--surface:#ffffff;--surface-2:#f8f5f0;
      --ink:#1a1826;--ink-2:#5a5568;--ink-3:#9d97a8;
      --line:rgba(26,24,38,0.07);--line-2:rgba(26,24,38,0.14);
      --map-bg:#f0ede8;--map-stroke:rgba(26,24,38,0.07);--map-water:#e8e4dc;--map-ink:rgba(26,24,38,0.55);
    }
    *{box-sizing:border-box;margin:0;padding:0}
    body{font-family:var(--display);font-weight:500;background:var(--bg);color:var(--ink);height:100dvh;overflow:hidden;display:flex;flex-direction:column;padding-top:env(safe-area-inset-top);-webkit-font-smoothing:antialiased}
    #bgMap{position:fixed;inset:0;z-index:0}
    /* ── Pseudo screen ── */
    #pseudoScreen{position:fixed;inset:0;background:rgba(244,241,236,0.2);backdrop-filter:blur(2px);-webkit-backdrop-filter:blur(2px);z-index:500;display:flex;align-items:flex-end;justify-content:center;padding:0}
    .ps-box{width:100%;max-width:480px;text-align:center;background:rgba(255,255,255,0.97);backdrop-filter:blur(16px);-webkit-backdrop-filter:blur(16px);border:1px solid rgba(26,24,38,.08);border-radius:24px 24px 0 0;padding:22px 20px calc(20px + env(safe-area-inset-bottom));box-shadow:0 -4px 40px rgba(26,24,38,.12);animation:slideUp 0.45s cubic-bezier(.16,1,.3,1)}
    .ps-logo{font-size:0.7rem;font-family:var(--mono);font-weight:700;text-transform:uppercase;letter-spacing:0.12em;color:var(--magenta);margin-bottom:8px;opacity:0.85}
    .ps-title{font-size:1.35rem;font-weight:800;letter-spacing:.04em;font-family:var(--mono);text-transform:uppercase;background:linear-gradient(135deg,var(--magenta),var(--violet));-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;margin-bottom:6px}
    .ps-sub{font-size:0.74rem;font-family:var(--mono);text-transform:none;letter-spacing:0.04em;color:var(--ink-3);margin-bottom:18px;line-height:1.4}
    .ps-box input{width:100%;padding:13px 14px;background:var(--bg);border:2px solid var(--line-2);border-radius:12px;color:var(--ink);font-size:1rem;text-align:center;margin-bottom:10px;letter-spacing:.03em;font-family:var(--display)}
    .ps-box input:focus{outline:none;border-color:var(--magenta);box-shadow:0 0 0 3px rgba(255,61,138,.18)}
    /* ── Bouton principal ── */
    .btn-main{width:100%;padding:16px;min-height:54px;border:none;border-radius:12px;background:linear-gradient(135deg,#3b82f6,#6366f1);color:#fff;font-size:1rem;font-weight:800;cursor:pointer;box-shadow:0 4px 20px rgba(99,102,241,.3);transition:transform 0.1s,opacity 0.2s;letter-spacing:0.02em}
    .btn-main:active{transform:scale(0.97);opacity:0.92}
    .btn-main:disabled{opacity:0.5;cursor:default}
    .btn-primary,
    .btn-share,
    .qt-btn.primary{display:flex;align-items:center;justify-content:center;gap:8px;width:100%;padding:15px 16px;min-height:54px;border:none;border-radius:12px;background:linear-gradient(135deg,var(--magenta),#c0106a);color:#fff;font-size:0.98rem;font-weight:800;cursor:pointer;box-shadow:0 4px 24px rgba(255,61,138,0.36);transition:transform 0.1s,opacity 0.15s;letter-spacing:0.03em;font-family:var(--display)}
    .btn-primary:active,.btn-share:active,.qt-btn.primary:active{transform:scale(0.97);opacity:0.92}
    .btn-primary:disabled,.btn-share:disabled,.qt-btn.primary:disabled{opacity:0.4;cursor:default}
    /* ── Header ── */
    header{background:var(--bg);padding:2px 8px;display:flex;align-items:center;gap:4px;border-bottom:1px solid var(--line);min-height:44px}
    header h1{display:none}
    .brand-tag{flex:1;min-width:0;text-align:center;font-family:var(--mono);font-size:0.54rem;letter-spacing:.04em;color:var(--ink-3);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
    .brand-tag a{color:var(--magenta);font-weight:700;text-decoration:none}
    .brand-tag a:active{opacity:.8}
    .pseudo-chip{background:rgba(0,229,255,0.12);color:var(--cyan);padding:2px 7px;border-radius:12px;font-size:0.68rem;font-weight:700;font-family:var(--mono)}
    /* ── GPS chip — point de statut ── */
    #gpsChip{display:flex;align-items:center;gap:5px;padding:1px 7px;border-radius:12px;font-size:0.68rem;font-weight:700;background:var(--surface);border:1px solid var(--line-2);color:var(--ink-2);cursor:default;transition:all 0.4s;font-family:var(--mono);min-height:24px}
    #gpsDot{width:14px;height:14px;display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;color:inherit;transition:color 0.4s,filter 0.4s}
    #gpsDot svg{width:14px;height:14px;display:block;stroke:currentColor;fill:none}
    #gpsChip.gps-ok{border-color:#16a34a;color:#4ade80;background:rgba(22,163,74,.12)}
    #gpsChip.gps-ok #gpsDot{color:#4ade80;filter:drop-shadow(0 0 5px rgba(34,197,94,.55))}
    #gpsChip.gps-mid{border-color:#d97706;color:#fbbf24;background:rgba(217,119,6,.1)}
    #gpsChip.gps-mid #gpsDot{color:#fbbf24}
    #gpsChip.gps-bad{border-color:#dc2626;color:#f87171;background:rgba(220,38,38,.15);animation:pulse 0.8s infinite}
    #gpsChip.gps-bad #gpsDot{color:#f87171}
    #tutorialMiniBtn{display:none;align-items:center;justify-content:center;min-height:28px;padding:2px 8px;border-radius:10px;border:1px solid var(--line-2);background:var(--surface);color:var(--ink-2);font-size:0.68rem;font-weight:800;font-family:var(--mono);cursor:pointer;white-space:nowrap}
    #tutorialMiniBtn:active{opacity:.8}
    /* ── Navigation ── */
    nav{display:flex;background:var(--surface);border-bottom:1px solid var(--line-2);padding:0 1px;min-height:42px}
    nav button{flex:1;padding:4px 2px;min-height:42px;background:none;border:none;color:var(--ink-3);font-size:0.74rem;font-weight:800;cursor:pointer;letter-spacing:0.01em;transition:color 0.15s,background 0.15s;display:flex;flex-direction:column;align-items:center;gap:0;font-family:var(--display)}
    .nav-icon{display:flex;align-items:center;justify-content:center;width:18px;height:18px}
    .nav-icon svg{width:18px;height:18px}
    .nav-label{font-size:0.62rem;font-weight:800;letter-spacing:.01em;line-height:1}
    nav button.active{color:var(--magenta);border-bottom:2px solid var(--magenta);background:rgba(255,61,138,.08);font-weight:800}
    nav button:active{background:rgba(26,24,38,.05)}
    .field-spaced{margin-top:0;margin-bottom:12px}
    .field-hidden{display:none}
    .field-accent{border-color:#7c3aed;margin-bottom:0}
    .clickable{cursor:pointer}
    .relative-wrap{position:relative}
    .separator-tight{margin:0 0 4px}
    .loading-copy{color:var(--ink-3);text-align:center;padding:40px}
    .tiny-note{text-align:center;font-size:0.70rem;color:var(--ink-3);padding-bottom:8px}
    .mt-10{margin-top:10px}
    .btn-ghost{background:transparent;border:1px solid var(--line-2);color:var(--ink-2)}
    .btn-ghost-success{background:transparent;border:1px solid var(--line-2)}
    #arrowToggleBtn{position:absolute;bottom:14px;right:10px;z-index:1000;background:rgba(255,255,255,.9);border:1.5px solid var(--line-2);border-radius:12px;color:var(--ink);font-size:0.75rem;font-weight:700;padding:7px 12px;cursor:pointer;backdrop-filter:blur(6px)}
    #locateMeBtn{position:absolute;bottom:14px;left:10px;z-index:1000;background:rgba(255,255,255,.9);border:1.5px solid var(--line-2);border-radius:12px;color:var(--ink-2);font-size:1.1rem;padding:7px 11px;cursor:pointer;backdrop-filter:blur(6px);display:none}
    #compassPermBtn{display:none;position:absolute;top:10px;left:50%;transform:translateX(-50%);z-index:1000;padding:8px 16px;background:linear-gradient(135deg,#3b82f6,#6366f1);border:none;border-radius:12px;color:#fff;font-size:0.82rem;font-weight:700;cursor:pointer;backdrop-filter:blur(6px)}
    #compassDebugBtn{display:none;position:absolute;top:10px;right:10px;z-index:1000;padding:7px 10px;background:rgba(15,23,42,.9);border:1px solid #334155;border-radius:10px;color:#93c5fd;font-size:0.72rem;font-weight:700;cursor:pointer}
    #compassDebug{display:none;position:absolute;top:10px;left:10px;z-index:1000;font-size:0.68rem;color:var(--ink-2);line-height:1.6;padding:8px 12px;background:rgba(255,255,255,.92);border-radius:8px;max-width:220px;border:1px solid var(--line-2)}
    #locateMeBtn svg{display:block}
    #guestBtn{margin-top:10px}
    #pseudoErr{color:#f87171;font-size:0.78rem;margin-bottom:10px;display:none}
    #foundModal .found-box{position:relative;overflow:hidden}
    #qtCompassNote{margin-top:8px;font-size:0.74rem;color:var(--magenta);font-weight:700;font-family:var(--mono)}
    #qrDebugLog{background:#111;color:#0f0;font-family:monospace;font-size:0.72rem;padding:8px 10px;border-radius:8px;width:100%;box-sizing:border-box;white-space:pre-wrap;margin-bottom:6px;max-height:110px;overflow-y:auto}
    #qrTips{font-size:0.86rem;color:var(--ink-2);max-width:380px;text-align:center}
    .qc-trophy,.qr-emoji{font-size:3rem;margin-bottom:10px}
    .qr-emoji{font-size:2.5rem}
    .found-photo{width:100%;max-height:160px;object-fit:cover;border-radius:10px;margin-bottom:10px;display:none}
    #modeQuickGuide{display:flex;align-items:center;gap:8px;padding:6px 10px;background:rgba(255,255,255,.9);border-bottom:1px solid var(--line-2)}
    #modeGuideCopy{min-width:0;flex:1}
    #modeGuideTitle{display:block;font-size:0.7rem;font-weight:800;color:var(--ink);font-family:var(--mono)}
    #modeGuideText{display:block;font-size:0.7rem;font-weight:700;color:var(--ink-2);line-height:1.25}
    #openTutorialBtn{border:none;background:var(--surface);color:var(--ink);padding:8px 10px;border-radius:10px;font-size:0.72rem;font-weight:800;min-height:38px;cursor:pointer;white-space:nowrap;border:1px solid var(--line-2)}
    /* ── More menu ── */
    #moreMenu{display:none;position:fixed;inset:0;z-index:500}
    #moreMenu.open{display:block}
    #moreMenuBackdrop{position:absolute;inset:0;background:rgba(26,24,38,.4)}
    #moreMenuCard{position:absolute;bottom:0;left:0;right:0;background:var(--surface);border-radius:20px 20px 0 0;padding:16px 14px calc(16px + env(safe-area-inset-bottom));display:flex;flex-direction:column;gap:8px;animation:slideUp 0.25s cubic-bezier(.16,1,.3,1)}
    .more-btn{padding:16px 18px;border:1px solid var(--line);background:var(--bg);border-radius:12px;color:var(--ink);font-size:0.95rem;font-weight:700;cursor:pointer;text-align:left;font-family:var(--display)}
    .more-btn:active{background:var(--surface)}
    /* ── Panels ── */
    .panel{display:none!important}
    .panel.active{display:block!important;flex:1;overflow:hidden;min-height:0}
    #panelExplore.active{display:flex!important;flex-direction:column;flex:1;overflow:hidden;min-height:0;position:relative}
    #miniMap{flex:1;border-bottom:2px solid var(--line-2);min-height:0;position:relative;overflow:hidden;background:#f0ede8;transform:translateZ(0);transition:box-shadow .25s ease, background .25s ease, border-color .25s ease}
    #miniMap .leaflet-map-pane,
    #miniMap .leaflet-tile-pane,
    #miniMap .leaflet-marker-pane,
    #miniMap .leaflet-overlay-pane{backface-visibility:hidden;transform-style:preserve-3d;will-change:transform}
    #miniMap.mode-fixed{background:linear-gradient(180deg,#eef6f7 0%,#f0ede8 100%);box-shadow:inset 0 0 0 2px rgba(0,229,255,.14);border-bottom-color:rgba(0,229,255,.26)}
    #miniMap.mode-fixed .leaflet-tile-pane{filter:saturate(.92) contrast(1.02)}
    #miniMap.mode-flash{background:radial-gradient(circle at 50% 0%,rgba(255,61,138,.12),rgba(240,237,232,1) 58%);box-shadow:inset 0 0 0 2px rgba(255,61,138,.18);border-bottom-color:rgba(255,61,138,.3)}
    #miniMap.mode-flash .leaflet-tile-pane{filter:saturate(1.08) hue-rotate(-10deg) contrast(1.03)}
    #arrowToggleBtn{bottom:10px!important;right:8px!important;padding:6px 10px!important;font-size:0.68rem!important;min-height:38px!important;border-radius:10px!important}
    #locateMeBtn{bottom:10px!important;left:8px!important;padding:6px 8px!important;font-size:1rem!important;min-height:38px!important}
    #gpsKickBtn{top:8px!important;left:8px!important;padding:9px 12px!important;font-size:0.7rem!important;min-height:40px!important}
    #compassPermBtn{top:8px!important;padding:7px 12px!important;font-size:0.76rem!important;min-height:40px!important}
    #compassDebugBtn{top:8px!important;right:8px!important;padding:6px 8px!important;font-size:0.66rem!important}
    #gpsLoadingPanel{position:absolute;inset:0;z-index:950;display:none;align-items:center;justify-content:center;padding:22px;background:linear-gradient(180deg,rgba(238,246,247,.94) 0%,rgba(240,237,232,.97) 100%);backdrop-filter:blur(7px);-webkit-backdrop-filter:blur(7px)}
    #gpsLoadingPanel.active{display:flex}
    .gps-loading-card{width:min(320px,100%);padding:22px 18px;border-radius:20px;background:rgba(255,255,255,.92);border:1px solid rgba(0,229,255,.18);box-shadow:0 10px 28px rgba(26,24,38,.12);text-align:center}
    .gps-loading-spinner{width:44px;height:44px;margin:0 auto 14px;border-radius:50%;border:3px solid rgba(14,165,233,.18);border-top-color:#0ea5e9;border-right-color:#22d3ee;animation:gpsLoadingSpin 1s linear infinite}
    .gps-loading-title{font-size:0.82rem;font-weight:900;color:#0f172a;font-family:var(--mono);letter-spacing:.06em;text-transform:uppercase;margin-bottom:6px}
    .gps-loading-copy{font-size:0.82rem;line-height:1.55;color:var(--ink-2)}
    .gps-loading-note{margin-top:10px;font-size:0.7rem;font-weight:700;color:#0284c7;font-family:var(--mono)}
    @keyframes gpsLoadingSpin{to{transform:rotate(360deg)}}
    /* ── Radar bar ── */
    #radarBar{position:absolute;top:12px;left:50%;transform:translateX(-50%);background:rgba(255,255,255,.97);border:1px solid var(--line-2);border-radius:24px;padding:11px 20px;font-size:0.94rem;font-weight:800;color:var(--ink-2);z-index:200;display:none;white-space:nowrap;backdrop-filter:blur(8px);box-shadow:0 2px 20px rgba(26,24,38,.12);letter-spacing:0.01em;font-family:var(--mono)}
    #radarBar.near{color:#d97706;border-color:#d97706;background:rgba(255,252,235,.97);box-shadow:0 2px 20px rgba(217,119,6,.15)}
    #radarBar.very-near{color:#16a34a;border-color:#16a34a;background:rgba(240,255,244,.97);animation:pulse 1s infinite;box-shadow:0 2px 24px rgba(22,163,74,.2);font-size:0.95rem}
    /* ── Flash mode accent theming ── */
    body.flash-mode nav{border-bottom-color:rgba(255,61,138,.22)}
    body.flash-mode nav button.active{background:rgba(255,61,138,.14);border-bottom-color:var(--magenta)}
    body.flash-mode #navDeclic .nav-icon{animation:flashNavPulse 1.4s ease-in-out infinite}
    body.flash-mode #navDeclic{color:var(--magenta)!important}
    body.flash-mode #modeQuickGuide{background:rgba(255,61,138,.07);border-bottom-color:rgba(255,61,138,.22)}
    body.flash-mode #modeGuideTitle{color:var(--magenta)}
    body.flash-mode #radarBar{border-color:rgba(255,61,138,.45);color:var(--magenta)}
    body.flash-mode #radarBar.near{color:#db2777;border-color:#db2777;background:rgba(253,242,248,.97);box-shadow:0 2px 20px rgba(219,39,119,.2);animation:none}
    body.flash-mode #radarBar.very-near{color:var(--magenta);border-color:var(--magenta);background:rgba(255,240,248,.97);box-shadow:0 2px 28px rgba(255,61,138,.4)}
    @keyframes flashNavPulse{0%,100%{filter:drop-shadow(0 0 0px var(--magenta));transform:scale(1)}50%{filter:drop-shadow(0 0 6px var(--magenta));transform:scale(1.18)}}
    /* ── Flash taken toast ── */
    #flashTakenToast{position:absolute;top:12px;left:50%;transform:translateX(-50%) translateY(-10px);background:rgba(15,23,42,.93);border:1.5px solid rgba(255,61,138,.55);border-radius:22px;padding:10px 20px;font-size:0.84rem;font-weight:800;color:var(--magenta);z-index:250;white-space:nowrap;backdrop-filter:blur(10px);font-family:var(--mono);pointer-events:none;opacity:0;transition:opacity .3s,transform .3s}
    #flashTakenToast.show{opacity:1;transform:translateX(-50%) translateY(0)}
    /* ── Welcome return toast ── */
    #welcomeToast{position:fixed;top:calc(env(safe-area-inset-top) + 64px);left:50%;transform:translateX(-50%) translateY(-8px);background:rgba(255,255,255,.97);border:1.5px solid #22c55e;border-radius:22px;padding:10px 20px;font-size:0.82rem;font-weight:800;color:#16a34a;z-index:400;white-space:nowrap;backdrop-filter:blur(10px);font-family:var(--mono);pointer-events:none;opacity:0;transition:opacity .35s,transform .35s;box-shadow:0 4px 20px rgba(22,163,74,.18)}
    #welcomeToast.show{opacity:1;transform:translateX(-50%) translateY(0)}
    /* ── Found modal flash overlay ── */
    #foundFlashOverlay{position:absolute;inset:0;border-radius:var(--radius-lg);background:#fff;pointer-events:none;opacity:0;z-index:10}
    #foundFlashOverlay.flash{animation:foundFlashAnim .55s ease-out forwards}
    .found-share{margin:6px 0 2px;padding:14px;border-radius:16px;background:linear-gradient(180deg,rgba(255,61,138,.08),rgba(0,229,255,.06));border:1px solid rgba(255,61,138,.18);position:relative;z-index:12}
    .found-share-kicker{font-family:var(--mono);font-size:0.68rem;letter-spacing:.12em;color:var(--magenta);font-weight:800;margin-bottom:4px}
    .found-share-title{font-size:1rem;font-weight:800;color:var(--ink);line-height:1.35;margin-bottom:5px}
    .found-share-text{font-size:0.82rem;color:var(--ink-2);line-height:1.45}
    .found-share-actions{display:flex;flex-direction:column;gap:8px;margin-top:12px}
    .found-share-actions > *{width:100%}
    .found-share-link{min-height:54px}
    @keyframes foundFlashAnim{0%{opacity:.85}100%{opacity:0}}
    /* ── Leaderboard tabs ── */
    #lbTabs{display:flex;gap:0;margin-bottom:10px;border:1px solid var(--line-2);border-radius:12px;overflow:hidden;background:var(--bg)}
    .lb-tab{flex:1;padding:10px 8px;border:none;background:none;font-size:0.78rem;font-weight:800;color:var(--ink-2);cursor:pointer;font-family:var(--mono);transition:background .15s,color .15s;display:flex;align-items:center;justify-content:center;gap:7px}
    .lb-tab.active{background:var(--surface);color:var(--ink);border-bottom:2px solid var(--magenta)}
    .lb-tab svg{width:16px;height:16px;flex-shrink:0}
    /* ── Tutorial photo ── */
    #qtExamplePhoto{width:100%;border-radius:10px;object-fit:cover;max-height:110px;margin-bottom:10px;display:none;border:1px solid var(--line-2)}
    /* ── Tutorial compass iOS highlight ── */
    .qt-btn.compass-required{border:2px solid var(--magenta)!important;color:#fff!important;background:linear-gradient(135deg,var(--magenta),#a855f7)!important;animation:compassBtnPulse 1.8s ease-in-out infinite}
    @keyframes compassBtnPulse{0%,100%{box-shadow:0 0 0 0 rgba(255,61,138,.5)}60%{box-shadow:0 0 0 8px rgba(255,61,138,0)}}
    /* ── Keyframes ── */
    @keyframes pulse{0%,100%{opacity:1}50%{opacity:.7}}
    @keyframes compassSpin{from{transform:rotate(0deg)}to{transform:rotate(360deg)}}
    @keyframes compassPulse{0%,100%{box-shadow:0 0 0 0 rgba(99,102,241,.6)}50%{box-shadow:0 0 0 8px rgba(99,102,241,0)}}
    .compass-perm-pulse{animation:compassPulse 1.6s infinite!important}
    @keyframes slideUp{from{transform:translateY(28px);opacity:0}to{transform:translateY(0);opacity:1}}
    @keyframes foundPop{from{transform:scale(0.82);opacity:0}to{transform:scale(1);opacity:1}}
    @keyframes bounceIn{0%{transform:scale(0.7);opacity:0}60%{transform:scale(1.08);opacity:1}100%{transform:scale(1)}}
    @keyframes fadeInFast{from{opacity:0}to{opacity:1}}
    /* ── Leaflet dark popup ── */
    .dark-popup .leaflet-popup-content-wrapper{background:var(--surface);color:var(--ink);border:1px solid var(--line-2);border-radius:12px;box-shadow:0 4px 24px rgba(26,24,38,.15);padding:4px;font-size:0.9rem}
    .dark-popup .leaflet-popup-tip{background:var(--surface)}
    .dark-popup .leaflet-popup-close-button{color:var(--ink-2)!important;font-size:1.1rem!important;padding:6px 8px!important}
    /* ── Photo viewer ── */
    #photoViewer{display:none;position:fixed;inset:0;background:rgba(0,0,0,.92);z-index:9999;align-items:center;justify-content:center;flex-direction:column;padding:16px}
    #photoViewer.open{display:flex}
    #photoViewer img{max-width:100%;max-height:80vh;object-fit:contain;border-radius:12px;box-shadow:0 8px 40px rgba(0,0,0,.8)}
    #photoViewer button{margin-top:18px;padding:14px 36px;background:var(--surface);border:1px solid var(--line-2);border-radius:10px;color:var(--ink);font-size:1rem;cursor:pointer;min-height:52px;font-family:var(--display)}
    /* ── Compass panel ── */
    #compassStatus{text-align:center;font-size:0.78rem;color:#cbd5e1;padding:6px 0 4px}
    #compassPermBtn{display:none;width:100%;padding:10px 20px;background:linear-gradient(135deg,#3b82f6,#6366f1);border:none;border-radius:12px;color:#fff;font-size:1rem;font-weight:700;cursor:pointer;margin-bottom:14px;min-height:48px}
    .cmp-card{background:var(--surface);border-radius:16px;padding:16px 14px;margin-bottom:12px;display:flex;align-items:center;gap:14px;border:2px solid var(--line-2);transition:border-color .4s}
    .cmp-card.in-range{border-color:#22c55e;box-shadow:0 0 20px rgba(34,197,94,.25)}
    .cmp-arrow-wrap{width:80px;flex-shrink:0;display:flex;align-items:center;justify-content:center}
    .cmp-arrow-wrap svg{transition:transform .35s ease}
    .cmp-info{flex:1;min-width:0}
    .cmp-label{font-weight:700;font-size:1.05rem;margin-bottom:3px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
    .cmp-dist{font-size:0.88rem;color:var(--ink-2);margin-bottom:6px}
    .cmp-hint{font-size:0.8rem;color:var(--cyan);margin-bottom:8px}
    .cmp-capture{width:100%;padding:10px;background:linear-gradient(135deg,#22c55e,#16a34a);border:none;border-radius:10px;color:#fff;font-weight:800;cursor:pointer;font-size:0.95rem;box-shadow:0 2px 12px rgba(34,197,94,.4);min-height:52px}
    /* ── Capture FAB ── */
    #captureFab{position:fixed;left:50%;bottom:calc(28px + max(0px, env(safe-area-inset-bottom)));transform:translateX(-50%);width:74px;height:74px;min-height:74px;padding:0;background:radial-gradient(circle at 32% 32%,rgba(255,255,255,.97) 0%,rgba(34,211,238,.32) 55%,rgba(14,165,233,.42) 100%);border:4px solid #06b6d4;border-radius:999px;font-size:0;color:transparent;cursor:pointer;z-index:1050;box-shadow:var(--glow-cyan),0 0 0 2px rgba(255,255,255,.72) inset;display:none;letter-spacing:0;transition:transform 0.12s;backdrop-filter:blur(2px);-webkit-backdrop-filter:blur(2px);animation:captureFabPulse 1.35s ease-in-out infinite}
    #captureFab:active{transform:translateX(-50%) scale(0.93)}
    @keyframes captureFabPulse{0%,100%{box-shadow:var(--glow-cyan),0 0 0 2px rgba(255,255,255,.72) inset}50%{box-shadow:0 0 20px rgba(34,211,238,.9),0 0 46px rgba(14,165,233,.42),0 0 0 2px rgba(255,255,255,.72) inset}}
    #flashFab{position:fixed;left:50%;bottom:calc(28px + max(0px, env(safe-area-inset-bottom)));transform:translateX(-50%);width:74px;height:74px;min-height:74px;padding:0;background:radial-gradient(circle at 32% 32%,rgba(255,255,255,.97) 0%,rgba(255,61,138,.28) 55%,rgba(200,30,90,.38) 100%);border:4px solid var(--magenta);border-radius:999px;font-size:0;color:transparent;cursor:pointer;z-index:1050;box-shadow:var(--glow-magenta),0 0 0 2px rgba(255,255,255,.72) inset;display:none;letter-spacing:0;transition:transform 0.12s;backdrop-filter:blur(2px);-webkit-backdrop-filter:blur(2px);animation:flashFabPulse 1.2s ease-in-out infinite}
    #flashFab:active{transform:translateX(-50%) scale(0.93)}
    @keyframes flashFabPulse{0%,100%{box-shadow:var(--glow-magenta),0 0 0 2px rgba(255,255,255,.72) inset}50%{box-shadow:0 0 22px rgba(255,61,138,.95),0 0 54px rgba(255,61,138,.45),0 0 0 2px rgba(255,255,255,.72) inset}}
    #flashHint{position:absolute;top:66px;left:50%;transform:translateX(-50%);display:none;align-items:center;gap:10px;background:rgba(255,240,248,.97);border:1.5px solid var(--magenta);border-radius:16px;padding:8px 14px 8px 8px;z-index:200;backdrop-filter:blur(8px);box-shadow:0 2px 20px rgba(255,61,138,.18);animation:flashHintIn .3s cubic-bezier(.16,1,.3,1);max-width:260px;pointer-events:none}
    #flashHint.active{display:flex}
    #flashHintPhoto{width:44px;height:44px;border-radius:10px;object-fit:cover;flex-shrink:0;border:1.5px solid rgba(255,61,138,.3)}
    #flashHintLabel{font-size:0.74rem;font-weight:700;color:var(--magenta);font-family:var(--mono);line-height:1.4}
    #flashHintSub{font-size:0.74rem;color:#db2777;font-family:var(--mono);font-weight:600}
    #flashHint.quest-mode{background:rgba(240,255,244,.97);border-color:#16a34a}
    #flashHint.quest-mode #flashHintLabel{color:#15803d}
    #flashHint.quest-mode #flashHintSub{color:#4ade80}
    @keyframes flashHintIn{from{opacity:0;transform:translateX(-50%) translateY(-6px)}to{opacity:1;transform:translateX(-50%) translateY(0)}}
    /* ── Progress bar ── */
    #progressBar{position:fixed;bottom:0;left:0;right:0;background:var(--surface);border-top:1px solid var(--line-2);padding:8px 16px 12px;z-index:200;display:none;padding-bottom:calc(8px + env(safe-area-inset-bottom))}
    #progressBar .pb-label{display:flex;justify-content:space-between;font-size:0.78rem;color:var(--ink-2);margin-bottom:6px;font-family:var(--mono)}
    #progressBar .pb-label strong{color:var(--ink);font-size:0.84rem}
    #progressBar .pb-track{height:12px;background:var(--bg);border-radius:8px;overflow:hidden;border:1px solid var(--line-2)}
    #progressBar .pb-fill{height:100%;background:linear-gradient(90deg,#3b82f6,#6366f1);border-radius:8px;transition:width 0.6s cubic-bezier(.16,1,.3,1);min-width:0}
    /* ── Leaderboard ── */
    #panelScores{flex:1;overflow-y:auto;padding:10px 12px 18px;max-width:560px;margin:0 auto;width:100%}
    /* ── Carnet / Collection ── */
    .cn-header{padding:14px 0 10px;display:flex;align-items:baseline;gap:8px}
    .cn-header-title{font-family:var(--mono);font-size:0.78rem;font-weight:600;text-transform:uppercase;letter-spacing:0.1em;color:var(--ink-3)}
    .cn-header-count{font-family:var(--mono);font-size:0.78rem;font-weight:700;color:var(--magenta)}
    .cn-empty{text-align:center;padding:56px 20px;color:var(--ink-3)}
    .cn-empty-icon{font-size:2.4rem;display:block;margin-bottom:12px;opacity:0.4}
    .cn-empty-label{font-family:var(--mono);font-size:0.78rem;text-transform:uppercase;letter-spacing:0.08em}
    .cn-card{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);padding:14px;margin-bottom:10px;display:flex;gap:12px;align-items:flex-start;transition:border-color 0.2s}
    .cn-card.cn-fixed{border-left:3px solid var(--cyan)}
    .cn-card.cn-unique{border-left:3px solid var(--magenta)}
    .cn-thumb{width:52px;height:52px;border-radius:10px;object-fit:cover;flex-shrink:0;background:var(--bg);border:1px solid var(--line)}
    .cn-thumb-placeholder{width:52px;height:52px;border-radius:10px;flex-shrink:0;background:var(--bg);border:1px solid var(--line);display:flex;align-items:center;justify-content:center;font-size:1.4rem;color:var(--ink-3)}
    .cn-body{flex:1;min-width:0}
    .cn-type{font-family:var(--mono);font-size:0.72rem;font-weight:600;text-transform:uppercase;letter-spacing:0.1em;margin-bottom:2px}
    .cn-fixed .cn-type{color:var(--cyan)}
    .cn-unique .cn-type{color:var(--magenta)}
    .cn-name{font-size:0.95rem;font-weight:700;color:var(--ink);margin-bottom:3px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
    .cn-meta{font-family:var(--mono);font-size:0.75rem;color:var(--ink-3);display:flex;gap:8px;flex-wrap:wrap}
    .cn-hint{font-style:italic;font-size:0.8rem;color:var(--ink-2);margin-top:5px;line-height:1.5;padding-left:8px;border-left:2px solid rgba(255,61,138,0.3)}
    .lb-header{text-align:center;padding:14px 0 8px;font-size:0.74rem;color:var(--ink-2);text-transform:uppercase;letter-spacing:.1em;font-family:var(--mono)}
    .lb-row{display:flex;align-items:center;gap:10px;padding:13px 16px;background:var(--surface);border-radius:14px;margin-bottom:8px;border:1px solid var(--line);transition:transform 0.12s ease}
    .lb-row:active{transform:translateX(3px)}
    .lb-row.lb-me{border-color:var(--magenta);background:linear-gradient(135deg,rgba(255,61,138,.15),var(--surface))}
    .lb-row.lb-top1{background:linear-gradient(135deg,rgba(251,191,36,.12),var(--surface));border-color:#fbbf24}
    .lb-row.lb-top2{background:linear-gradient(135deg,rgba(180,180,200,.06),var(--surface));border-color:var(--ink-3)}
    .lb-row.lb-top3{background:linear-gradient(135deg,rgba(194,133,90,.1),var(--surface));border-color:#c2855a}
    .lb-avatar{width:32px;height:32px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:0.78rem;font-weight:700;font-family:var(--mono);flex-shrink:0;color:#fff;text-shadow:0 1px 3px rgba(0,0,0,.4)}
    .lb-rank{font-size:1.4rem;width:28px;text-align:center;flex-shrink:0}
    .lb-body{flex:1;min-width:0}
    .lb-name{font-weight:800;font-size:1rem;color:var(--ink);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
    .lb-me .lb-name::after{content:' ← moi';font-weight:600;font-family:var(--mono);font-size:0.7rem;color:var(--magenta)}
    .lb-score{font-size:0.84rem;color:var(--ink-2);margin-top:2px;display:flex;align-items:center;gap:8px;flex-wrap:wrap}
    .lb-score strong{color:var(--ink);font-size:0.88rem;display:inline-flex;align-items:center;gap:5px}
    .lb-pbar{height:6px;background:var(--bg);border-radius:4px;overflow:hidden;border:1px solid var(--line);margin-top:6px}
    .lb-pfill{height:100%;border-radius:4px;transition:width 0.5s ease}
    .lb-badge{display:inline-flex;align-items:center;gap:5px;background:rgba(0,229,255,0.1);border:1px solid rgba(0,229,255,0.3);border-radius:8px;color:var(--cyan);font-size:0.74rem;padding:3px 8px}
    .lb-badge-done{background:rgba(74,222,128,0.12);border-color:#16a34a;color:#4ade80}
    .lb-time{font-size:0.78rem;color:#4ade80;font-weight:700;display:inline-flex;align-items:center;gap:5px}
    .lb-sep{height:1px;background:var(--line);margin:4px 0 10px}
    .lb-you-sep{text-align:center;font-size:0.7rem;color:var(--ink-3);padding:4px 0 2px}
    .lb-refresh{font-size:0.7rem;color:var(--ink-3);text-align:center;padding:10px;margin-top:2px}
    .lb-divider{font-size:0.75rem;color:var(--ink-3);text-transform:uppercase;letter-spacing:.1em;text-align:center;padding:6px 0 8px;font-family:var(--mono);display:flex;align-items:center;justify-content:center;gap:8px}
    .ui-icon{display:inline-flex;align-items:center;justify-content:center;vertical-align:middle;color:currentColor;flex-shrink:0}
    .ui-icon svg{width:14px;height:14px;display:block;stroke:currentColor;fill:none;stroke-linecap:round;stroke-linejoin:round}
    .ui-icon.lg svg{width:42px;height:42px;stroke-width:1.75}
    .ui-icon.teal{color:var(--cyan)}
    .ui-icon.flash{color:var(--magenta)}
    .ui-icon.success{color:#4ade80}
    .ui-icon.warn{color:#fbbf24}
    .ui-icon.danger{color:#f87171}
    /* ── Ma carte ── */
    .my-card{background:linear-gradient(135deg,rgba(255,61,138,.08),var(--surface));border:1px solid rgba(255,61,138,.22);border-radius:16px;padding:14px 16px;margin-bottom:12px;position:relative}
    .my-card-rank{position:absolute;top:12px;right:14px;font-size:1.5rem}
    .my-card-pseudo{font-size:1.05rem;font-weight:800;color:var(--ink);margin-bottom:2px}
    .my-card-sub{font-size:0.78rem;color:var(--ink-2);margin-bottom:10px;font-family:var(--mono)}
    .my-card-stats{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin-bottom:8px}
    .my-card-stats strong{font-size:1.1rem;color:var(--ink)}
    .my-card-stats span{font-size:0.78rem;color:var(--ink-2)}
    .my-card-bar{height:8px;background:var(--bg);border-radius:4px;overflow:hidden;border:1px solid rgba(255,61,138,.3)}
    .my-card-fill{height:100%;background:linear-gradient(90deg,#3b82f6,#6366f1);border-radius:4px;transition:width .6s ease}
    .my-card-done{height:100%;background:linear-gradient(90deg,#22c55e,#16a34a);border-radius:4px}
    /* ── Modal trésor trouvé ── */
    #foundModal{display:none;position:fixed;inset:0;background:rgba(3,6,16,.97);z-index:2500;align-items:center;justify-content:center;padding:24px;backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px)}
    #foundModal.open{display:flex}
    #questCompleteModal{display:none;position:fixed;inset:0;background:rgba(3,6,16,.97);z-index:2600;align-items:center;justify-content:center;padding:24px;backdrop-filter:blur(8px)}
    #questCompleteModal.open{display:flex}
    .qc-box{background:var(--surface);border-radius:22px;padding:24px 20px;width:100%;max-width:400px;text-align:center;border:1px solid rgba(34,197,94,.18);box-shadow:0 0 0 1px rgba(34,197,94,.08),0 8px 40px rgba(26,24,38,.14);animation:foundPop 0.38s cubic-bezier(.34,1.56,.64,1)}
    .qc-title{font-family:var(--mono);font-size:0.75rem;font-weight:600;text-transform:uppercase;letter-spacing:0.12em;color:#4ade80;margin-bottom:8px}
    .qc-quest{font-size:1.2rem;font-weight:800;font-family:var(--mono);text-transform:uppercase;letter-spacing:0.04em;margin-bottom:16px;background:linear-gradient(135deg,#4ade80,#22d3ee);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent}
    .qc-stats{display:grid;grid-template-columns:1fr 1fr 1fr;gap:8px;margin-bottom:18px}
    .qc-stat{background:var(--bg-2);border-radius:var(--radius-sm);padding:10px 6px}
    .qc-stat-val{font-size:1.2rem;font-weight:800;font-family:var(--mono);color:var(--ink)}
    .qc-stat-lbl{font-size:0.70rem;font-family:var(--mono);text-transform:uppercase;letter-spacing:0.08em;color:var(--ink-3);margin-top:3px}
    .btn-share{width:100%;padding:15px;border:none;border-radius:12px;background:linear-gradient(135deg,#22c55e,#16a34a);color:#fff;font-size:1rem;font-weight:800;cursor:pointer;margin-bottom:10px;font-family:var(--display)}
    .btn-share:active{opacity:.88}
    .found-box{background:var(--surface);border-radius:22px;padding:24px 20px;width:100%;max-width:400px;text-align:center;border:1px solid rgba(255,61,138,0.18);box-shadow:0 0 0 1px rgba(255,61,138,0.08),0 8px 40px rgba(26,24,38,.14);animation:foundPop 0.38s cubic-bezier(.34,1.56,.64,1)}
    .found-label{font-family:var(--mono);font-size:0.75rem;font-weight:600;text-transform:uppercase;letter-spacing:0.12em;color:var(--magenta);margin-bottom:6px}
    .found-box h2{font-size:1.15rem;font-weight:800;margin-bottom:6px;font-family:var(--mono);text-transform:uppercase;letter-spacing:0.03em}
    .found-box p{font-size:0.84rem;color:var(--ink-2);margin-bottom:12px;line-height:1.5}
    .found-box .duration{font-size:1.45rem;font-weight:800;color:#4ade80;margin-bottom:6px;font-family:var(--mono)}
    .found-emoji{margin-bottom:8px;display:flex;align-items:center;justify-content:center;min-height:40px;animation:bounceIn 0.5s cubic-bezier(.34,1.56,.64,1) 0.2s both;color:var(--magenta)}
    /* ── Pause screen ── */
    #pauseScreen{display:none;position:fixed;inset:0;background:rgba(5,6,16,.97);z-index:800;align-items:center;justify-content:center;text-align:center;flex-direction:column;gap:16px}
    #pauseScreen.open{display:flex;animation:fadeInFast 0.3s ease}
    /* ── Boutons carte ── */
    #arrowToggleBtn{min-height:48px!important;min-width:48px!important;padding:10px 16px!important;font-size:0.8rem!important;font-weight:700!important;transition:transform .1s}
    #arrowToggleBtn:active{transform:scale(0.9)}
    /* ── Overlay flèches direction ── */
    #arrowOverlay{position:absolute;inset:0;pointer-events:none;z-index:900;overflow:visible}
    .dir-arrow{position:absolute;pointer-events:auto;cursor:pointer;transform:translate(-50%,-50%);-webkit-tap-highlight-color:transparent}
    .dir-arrow:active{opacity:0.7}
    .dir-arrow-label{position:absolute;pointer-events:auto;cursor:pointer;background:rgba(15,23,42,.92);font-size:0.8rem;font-weight:800;padding:3px 9px;border-radius:10px;border:1.5px solid;white-space:nowrap;backdrop-filter:blur(4px);transform:translate(-50%,-50%);line-height:1}
    /* ── Fond radar boussole (désactivé pour lisibilité carte) ── */
    #radarBg{display:none!important;pointer-events:none}
    #radarBg.active{display:block}
    .radar-ring{position:absolute;border-radius:50%;border:1px solid rgba(56,189,248,0.2);top:50%;left:50%;transform:translate(-50%,-50%)}
    .radar-spoke{position:absolute;top:50%;left:50%;transform-origin:50% 100%;z-index:1}
    .radar-spoke.major{width:2px;height:44%;background:linear-gradient(180deg,rgba(251,113,133,.72),rgba(251,113,133,0))}
    .radar-spoke.minor{width:1px;height:39%;background:linear-gradient(180deg,rgba(251,113,133,.35),rgba(251,113,133,0))}
    #radarCenterDot{position:absolute;width:14px;height:14px;border-radius:50%;background:#fb7185;box-shadow:0 0 14px rgba(251,113,133,.9),0 0 4px rgba(255,255,255,.5);top:50%;left:50%;transform:translate(-50%,-50%);z-index:3}
    #radarCenterLabel{display:none}
    .radar-cardinal{position:absolute;font-size:0.7rem;font-weight:900;color:#fda4af;font-family:var(--mono);transform:translate(-50%,-50%);z-index:2;text-shadow:0 0 8px rgba(251,113,133,.85);letter-spacing:.05em}
    /* ── Compass corner widget (rose des vents transparente) ── */
    #compassCorner{position:absolute;left:10px;bottom:56px;z-index:1000;display:none;align-items:center;justify-content:center;background:transparent;border:none;border-radius:0;padding:0;box-shadow:none;font-family:var(--mono);width:60px;height:60px;overflow:visible}
    #compassCorner.active{display:flex}
    #compassRose{position:relative;width:58px;height:58px;display:flex;align-items:center;justify-content:center;transform:rotate(0deg);transform-origin:50% 50%;transition:transform .24s ease;overflow:visible}
    #compassRoseSvg{width:58px;height:58px;display:block;overflow:visible;filter:drop-shadow(0 1px 4px rgba(45,36,24,.32))}
    /* ── Android GPS settle hint ── */
    #gpsSettleHint{position:absolute;left:50%;bottom:18px;transform:translateX(-50%);z-index:1000;display:none;align-items:center;gap:8px;padding:8px 12px;border-radius:999px;background:rgba(255,255,255,.9);border:1px solid var(--line-2);box-shadow:0 6px 18px rgba(26,24,38,.14);font-family:var(--mono);color:var(--ink-2);font-size:0.75rem;font-weight:700;letter-spacing:.02em;backdrop-filter:blur(5px)}
    #gpsSettleHint.active{display:flex}
    .gsh-icon{position:relative;width:18px;height:18px;display:inline-flex;align-items:center;justify-content:center}
    .gsh-icon::before,.gsh-icon::after{content:'';position:absolute;border-radius:50%;border:1.7px solid #0ea5e9;border-top-color:transparent;border-left-color:rgba(14,165,233,.45)}
    .gsh-icon::before{inset:0;animation:gshSpin 1.1s linear infinite}
    .gsh-icon::after{inset:4px;animation:gshSpin .75s linear reverse infinite}
    .gsh-dot{width:5px;height:5px;border-radius:50%;background:#0ea5e9;box-shadow:0 0 0 0 rgba(14,165,233,.55);animation:gshPulse 1.4s ease-out infinite}
    @keyframes gshSpin{to{transform:rotate(360deg)}}
    @keyframes gshPulse{0%{box-shadow:0 0 0 0 rgba(14,165,233,.5)}70%{box-shadow:0 0 0 7px rgba(14,165,233,0)}100%{box-shadow:0 0 0 0 rgba(14,165,233,0)}}
    #gpsKickBtn{display:none;position:absolute;top:10px;left:10px;z-index:1000;padding:11px 14px;background:rgba(217,119,6,.96);border:1px solid #f59e0b;border-radius:12px;color:#fff7ed;font-size:0.78rem;font-weight:800;cursor:pointer;min-height:48px;align-items:center;gap:8px}
    #gpsKickBtn svg{width:16px;height:16px;stroke:currentColor;fill:none;flex-shrink:0}
    #locateMeBtn{min-height:48px!important;min-width:48px!important;padding:10px!important;transition:transform .1s}
    #locateMeBtn:active{transform:scale(0.9)}
    /* ── QR Scanner overlay ── */
    #qrOverlay{display:none;position:fixed;inset:0;background:var(--bg);z-index:2000;flex-direction:column;align-items:center;justify-content:center}
    #qrOverlay.open{display:flex}
    #qrUI{display:flex;flex-direction:column;align-items:center;gap:18px;padding:32px 24px calc(32px + env(safe-area-inset-bottom));width:100%;max-width:420px}
    #qrStatus{color:var(--ink);font-size:1rem;font-weight:700;text-align:center;line-height:1.5;font-family:var(--mono)}
    #qrTarget{display:none;font-family:var(--mono);text-align:center;padding:10px 16px;background:var(--surface);border:1.5px solid var(--line-2);border-radius:14px;width:100%;box-sizing:border-box}
    #qrTarget .qrt-lbl{font-size:0.70rem;font-weight:600;text-transform:uppercase;letter-spacing:0.08em;color:var(--ink-3);display:block;margin-bottom:3px}
    #qrTarget .qrt-name{font-size:1rem;font-weight:800;color:var(--ink);display:block}
    #qrTarget .qrt-quest{font-size:0.75rem;font-weight:600;color:var(--ink-2);display:block;margin-top:1px}
    #qrStatus.qr-ok{color:#4ade80}
    #qrStatus.qr-err{color:#f87171}
    #qrReader{width:100%;border-radius:14px;overflow:hidden;display:none;background:#000;position:relative}
    #qrReader video{width:100%!important;display:block;max-height:50vh;object-fit:cover}
    #qrReader__header_message,#qrReader__status_span,#qrReader__filescan_input{display:none!important}
    #qrReader__scan_region{background:#000}
    #qrPreviewWrap{width:100%;border-radius:14px;overflow:hidden;display:none;border:2px solid var(--line-2)}
    #qrPreviewImg{width:100%;display:block;max-height:50vh;object-fit:contain;background:var(--surface)}
    #qrTorchBtn{display:none;align-items:center;justify-content:center;gap:10px;padding:12px 0;background:linear-gradient(135deg,#374151,#111827);border:none;border-radius:12px;color:#fff;font-size:0.95rem;font-weight:700;cursor:pointer;width:100%;min-height:48px;letter-spacing:.02em;box-shadow:0 3px 16px rgba(17,24,39,.3);font-family:var(--display)}
    #qrPhotoBtn{display:flex;align-items:center;justify-content:center;gap:10px;padding:16px 0;background:linear-gradient(135deg,#2563eb,#4f46e5);border:none;border-radius:14px;color:#fff;font-size:1.05rem;font-weight:800;cursor:pointer;width:100%;min-height:56px;letter-spacing:.02em;box-shadow:0 4px 20px rgba(37,99,235,.4);font-family:var(--display)}
    #qrCloseBtn{padding:14px 0;background:var(--bg);border:1px solid var(--line-2);border-radius:12px;color:var(--ink);font-size:1rem;font-weight:700;cursor:pointer;min-height:52px;width:100%;backdrop-filter:blur(6px);font-family:var(--display)}

    /* ── Quick tutorial ── */
    #quickTutorial{display:none;position:fixed;inset:0;background:rgba(3,6,16,.72);z-index:2600;align-items:flex-end;justify-content:center;padding:0}
    #quickTutorial.open{display:flex}
    #quickTutorialCard{width:100%;max-width:520px;background:#fff;border-radius:22px 22px 0 0;border:1px solid var(--line-2);padding:20px 18px calc(20px + env(safe-area-inset-bottom));box-shadow:0 -12px 42px rgba(2,6,23,.35)}
    #quickTutorial h3{font-size:1rem;font-weight:900;color:var(--ink);margin-bottom:4px}
    #quickTutorial p{font-size:0.82rem;color:var(--ink-2);line-height:1.45;margin-bottom:10px}
    .qt-grid{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-bottom:12px}
    .qt-card{border:1px solid var(--line-2);border-radius:12px;padding:10px;background:#fafafa}
    .qt-card strong{display:block;font-size:0.74rem;color:var(--ink);margin-bottom:3px}
    .qt-card span{font-size:0.75rem;color:var(--ink-2);line-height:1.35}
    .qt-actions{display:flex;gap:8px;flex-wrap:wrap}
    .qt-btn{flex:1;min-width:140px;min-height:52px;border:none;border-radius:12px;padding:12px 10px;font-size:0.84rem;font-weight:800;cursor:pointer}
    .qt-btn.primary{background:linear-gradient(135deg,#3b82f6,#1d4ed8);color:#fff}
    .qt-btn.secondary{background:#111827;color:#f9fafb}
    .qt-btn.ghost{background:#fff;color:#111827;border:1px solid var(--line-2)}
    .qt-note{font-size:0.7rem;color:var(--ink-3);margin-top:10px}

    /* ── COMPOSANTS JADIKAN ────────────────────────────── */

    /* Pin lumineux (Leaflet L.divIcon) */
    .pin{position:relative;display:flex;align-items:center;justify-content:center;width:36px;height:36px}
    .pin-halo{position:absolute;inset:-6px;border-radius:50%;animation:pinPulse 2.4s ease-in-out infinite;pointer-events:none}
    .pin-core{width:36px;height:36px;border-radius:50%;display:flex;align-items:center;justify-content:center;position:relative;z-index:1;font-size:0.8rem;font-weight:700;font-family:var(--mono);color:#fff}
    .pin-num{font-size:0.72rem;font-weight:700;font-family:var(--mono);color:#fff;position:absolute;z-index:2}
    /* Variantes couleur */
    .pin.magenta .pin-core{background:radial-gradient(circle at 35% 35%,#ff7eb8,var(--magenta));box-shadow:var(--glow-magenta)}
    .pin.magenta .pin-halo{background:radial-gradient(circle,rgba(255,61,138,0.35) 0%,transparent 70%)}
    .pin.cyan .pin-core{background:radial-gradient(circle at 35% 35%,#7fffff,var(--cyan));box-shadow:var(--glow-cyan)}
    .pin.cyan .pin-halo{background:radial-gradient(circle,rgba(0,229,255,0.35) 0%,transparent 70%)}
    .pin.amber .pin-core{background:radial-gradient(circle at 35% 35%,#ffd870,var(--amber));box-shadow:var(--glow-amber)}
    .pin.amber .pin-halo{background:radial-gradient(circle,rgba(255,176,32,0.35) 0%,transparent 70%)}
    .pin.violet .pin-core{background:radial-gradient(circle at 35% 35%,#cc88ff,var(--violet));box-shadow:var(--glow-violet)}
    .pin.violet .pin-halo{background:radial-gradient(circle,rgba(168,85,247,0.35) 0%,transparent 70%)}
    .pin.found .pin-core{background:radial-gradient(circle at 35% 35%,#86efac,#16a34a);box-shadow:0 0 14px rgba(34,197,94,0.55),0 0 30px rgba(34,197,94,0.25)}
    .pin.found .pin-halo{background:radial-gradient(circle,rgba(34,197,94,0.3) 0%,transparent 70%)}
    @keyframes pinPulse{0%,100%{transform:scale(1);opacity:0.7}50%{transform:scale(1.5);opacity:0}}

    /* Carte composant */
    .card{background:var(--surface);border:1px solid var(--line-2);border-radius:var(--radius-lg);padding:20px;backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px)}
    .card-glow-magenta{box-shadow:0 0 0 1px rgba(255,61,138,0.3),0 8px 32px rgba(255,61,138,0.12)}
    .card-glow-cyan{box-shadow:0 0 0 1px rgba(0,229,255,0.3),0 8px 32px rgba(0,229,255,0.12)}

    /* Chip mono */
    .chip{display:inline-flex;align-items:center;gap:4px;padding:4px 10px;border-radius:20px;font-size:0.78rem;font-weight:600;font-family:var(--mono);text-transform:uppercase;letter-spacing:0.06em;background:var(--surface);border:1px solid var(--line-2);color:var(--ink-2)}
    .chip-magenta{background:rgba(255,61,138,0.1);border-color:rgba(255,61,138,0.35);color:var(--magenta)}
    .chip-cyan{background:rgba(0,229,255,0.1);border-color:rgba(0,229,255,0.35);color:var(--cyan)}
    .chip-amber{background:rgba(255,176,32,0.1);border-color:rgba(255,176,32,0.35);color:var(--amber)}

    /* Label mono */
    .t-mono{font-family:var(--mono);font-size:0.78rem;font-weight:600;text-transform:uppercase;letter-spacing:0.08em;color:var(--ink-3)}

    /* Badge Unique */
    .unique-badge{display:inline-flex;align-items:center;gap:4px;padding:3px 10px;border-radius:20px;font-size:0.7rem;font-weight:700;font-family:var(--mono);text-transform:uppercase;letter-spacing:0.06em;background:linear-gradient(135deg,rgba(255,61,138,0.2),rgba(168,85,247,0.2));border:1px solid rgba(255,61,138,0.4);color:var(--magenta)}

    /* Indice trouvaille */
    .hint-quote{font-style:italic;font-size:0.9rem;color:var(--ink-2);line-height:1.6;padding-left:14px;border-left:3px solid;border-image:linear-gradient(to bottom,var(--magenta),var(--cyan)) 1}

    /* Séparateur lumineux */
    .lp-line{height:1px;border:none;background:linear-gradient(90deg,transparent,var(--magenta),var(--cyan),transparent);opacity:0.5;margin:16px 0}

    /* Point GPS "moi" */
    .me-dot{width:16px;height:16px;border-radius:50%;background:#3b82f6;border:3px solid #fff;box-shadow:0 0 0 4px rgba(59,130,246,0.35)}

    /* ── Nearest list (bas de la Carte) ── */
    #nearestList{background:rgba(255,255,255,.9);border-top:1px solid var(--line);flex-shrink:0;display:none;align-items:center;gap:6px;box-shadow:0 -2px 12px rgba(26,24,38,.06);padding:5px 8px calc(5px + env(safe-area-inset-bottom));overflow-x:auto;white-space:nowrap}
    .nl-header{font-family:var(--mono);font-size:0.52rem;font-weight:700;text-transform:uppercase;letter-spacing:0.08em;color:var(--ink-3);padding:4px 6px;border:1px solid var(--line);border-radius:10px;flex-shrink:0;background:var(--surface)}
    .nl-item{display:inline-flex;align-items:center;gap:6px;padding:5px 8px;cursor:pointer;border:1px solid var(--line);border-radius:10px;flex-shrink:0;background:var(--surface)}
    .nl-item:active{background:var(--bg)}
    .nl-dot{width:7px;height:7px;border-radius:2px;flex-shrink:0}
    .nl-name{max-width:92px;min-width:0;font-size:0.7rem;font-weight:600;color:var(--ink);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
    .nl-dist{font-family:var(--mono);font-size:0.70rem;color:var(--ink-3);flex-shrink:0;margin-right:0}
    .nl-arr{font-size:0.8rem;color:var(--ink-3);flex-shrink:0}

    /* ── Treasure sheet (bottom sheet au tap d'un pin) ── */
    #treasureSheet{display:none;position:fixed;inset:0;z-index:1200}
    #treasureSheet.open{display:block}
    .ts-backdrop{position:absolute;inset:0;background:rgba(5,6,16,0.82);backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px)}
    .ts-card{position:absolute;bottom:0;left:0;right:0;background:var(--surface);border-radius:var(--radius-lg) var(--radius-lg) 0 0;padding:0 0 calc(24px + env(safe-area-inset-bottom));max-height:90vh;overflow-y:auto;animation:slideUp 0.28s cubic-bezier(.16,1,.3,1)}
    .ts-handle{width:36px;height:4px;border-radius:2px;background:var(--line-2);margin:12px auto 18px}
    .ts-badge-wrap{padding:0 20px 14px;text-align:center}
    .ts-badge{display:inline-flex;align-items:center;gap:6px;padding:4px 14px;border-radius:20px;font-family:var(--mono);font-size:0.74rem;font-weight:700;text-transform:uppercase;letter-spacing:0.1em;background:rgba(255,61,138,0.08);border:1px solid rgba(255,61,138,0.25);color:var(--magenta)}
    .ts-badge-fixed{background:rgba(0,229,255,0.08);border-color:rgba(0,229,255,0.25);color:var(--cyan)}
    .ts-photo{width:calc(100% - 40px);margin:0 20px 16px;height:180px;object-fit:cover;border-radius:var(--radius);display:block;cursor:zoom-in}
    .ts-photo-placeholder{width:calc(100% - 40px);margin:0 20px 16px;height:90px;background:var(--bg);border-radius:var(--radius);display:flex;align-items:center;justify-content:center;font-size:2.5rem;color:var(--ink-3)}
    .ts-name{font-size:1.35rem;font-weight:800;color:var(--ink);padding:0 20px;margin-bottom:4px;line-height:1.2}
    .ts-loc{font-family:var(--mono);font-size:0.7rem;color:var(--ink-3);padding:0 20px;margin-bottom:14px}
    .ts-hint-wrap{margin:0 20px 16px;padding:10px 12px;background:var(--bg);border-radius:var(--radius-sm);border-left:3px solid var(--magenta)}
    .ts-hint{font-style:italic;font-size:0.86rem;color:var(--ink-2);line-height:1.6}
    .ts-stats{display:flex;margin:0 20px 18px;border:1px solid var(--line);border-radius:var(--radius-sm);overflow:hidden}
    .ts-stat{flex:1;text-align:center;padding:12px 4px;border-right:1px solid var(--line)}
    .ts-stat:last-child{border-right:none}
    .ts-stat-val{font-size:1.05rem;font-weight:800;color:var(--ink);font-family:var(--mono)}
    .ts-stat-val.ts-magenta{color:var(--magenta)}
    .ts-stat-key{font-family:var(--mono);font-size:0.58rem;font-weight:600;text-transform:uppercase;letter-spacing:0.1em;color:var(--ink-3);margin-top:3px}
    .ts-cta{display:flex;align-items:center;justify-content:center;gap:8px;margin:0 20px;padding:16px;background:var(--ink);border:none;border-radius:var(--radius);color:var(--surface);font-size:1.05rem;font-weight:800;cursor:pointer;width:calc(100% - 40px);letter-spacing:0.02em;font-family:var(--display)}
    .ts-cta:active{opacity:0.85}
    .ts-cta-taken{background:var(--line);color:var(--ink-3);cursor:default}
    .ts-top-row{display:flex;align-items:center;gap:8px;padding:0 20px 12px}
    .ts-type{font-family:var(--mono);font-size:0.72rem;color:var(--ink-3);margin-left:auto}
    .ts-dist{font-family:var(--mono);font-size:0.78rem;color:var(--ink-3);padding:0 20px;margin-bottom:12px}
    .ts-badge-found{background:rgba(74,222,128,0.12);border-color:rgba(74,222,128,0.35);color:#16a34a}
    .ts-badge-taken{background:rgba(148,163,184,0.12);border-color:rgba(148,163,184,0.3);color:var(--ink-3)}
    .ts-badge-open{background:rgba(99,102,241,0.08);border-color:rgba(99,102,241,0.25);color:#6366f1}
    .ts-photos{padding:0 20px 8px}
    .ts-hint{font-style:italic;font-size:0.86rem;color:var(--ink-2);line-height:1.6;margin:0 20px 16px;padding:10px 12px;background:var(--bg);border-radius:var(--radius-sm);border-left:3px solid #6366f1}

    /* ── Balises / quete (dans Compte) ── */
    .bl-header{padding:18px 0 8px}
    .bl-header-top{font-family:var(--mono);font-size:0.75rem;font-weight:600;text-transform:uppercase;letter-spacing:0.1em;color:var(--ink-3);margin-bottom:4px}
    .bl-header-count{font-size:1.6rem;font-weight:800;color:var(--ink);line-height:1.1}
    .bl-section{font-family:var(--mono);font-size:0.70rem;font-weight:600;text-transform:uppercase;letter-spacing:0.1em;color:var(--ink-3);padding:14px 0 6px;border-bottom:1px solid var(--line);margin-bottom:8px}
    .bl-item{display:flex;align-items:center;gap:12px;padding:12px 14px;background:var(--surface);border-radius:var(--radius);margin-bottom:8px;border:1px solid var(--line);cursor:pointer;transition:border-color 0.15s,box-shadow 0.15s}
    .bl-item:active{border-color:var(--magenta)}
    .bl-num{width:32px;height:32px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-family:var(--mono);font-size:0.8rem;font-weight:700;flex-shrink:0;color:#fff}
    .bl-body{flex:1;min-width:0}
    .bl-name{font-size:0.95rem;font-weight:700;color:var(--ink);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
    .bl-dist{font-family:var(--mono);font-size:0.7rem;color:var(--ink-3);margin-top:2px}
    .bl-arr{font-size:0.85rem;color:var(--ink-3)}
    .bl-info{flex:1;min-width:0}
    .bl-item-name{font-size:0.95rem;font-weight:700;color:var(--ink);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
    .bl-item-sub{font-family:var(--mono);font-size:0.75rem;color:var(--ink-3);margin-top:2px}
    .bl-empty{text-align:center;padding:56px 20px;color:var(--ink-3);font-family:var(--mono);font-size:0.76rem;text-transform:uppercase;letter-spacing:0.06em}
    .bl-section{display:flex;align-items:center;justify-content:space-between}
    .bl-quest-prog{font-size:0.7rem;font-weight:700;padding:2px 8px;border-radius:10px;background:rgba(26,24,38,.07);color:var(--ink-3)}
    .bl-quest-prog.started{background:rgba(251,191,36,.15);color:#d97706}
    .bl-quest-prog.done{background:rgba(34,197,94,.15);color:#16a34a}
    .bl-item.found{border-color:rgba(34,197,94,.35);background:rgba(240,255,244,.6)}

    /* ── MOI panel ── */
    #panelMoi{flex:1;overflow-y:auto;padding:18px 12px 72px;max-width:560px;margin:0 auto;width:100%}
    .moi-top{display:flex;align-items:center;gap:14px;margin-bottom:18px}
    .moi-avatar{width:58px;height:58px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:1.2rem;font-weight:800;font-family:var(--mono);color:#fff;text-shadow:0 2px 8px rgba(0,0,0,.25);flex-shrink:0}
    .moi-info{flex:1;min-width:0}
    .moi-pseudo{font-size:1.4rem;font-weight:800;color:var(--ink);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
    .moi-since{font-family:var(--mono);font-size:0.74rem;color:var(--ink-3);text-transform:uppercase;letter-spacing:0.08em;margin-top:2px}
    .moi-stats{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-bottom:16px}
    .moi-stat-card{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);padding:12px 10px;text-align:center}
    .moi-stat-val{font-size:1.35rem;font-weight:800;color:var(--ink);font-family:var(--mono)}
    .moi-stat-val.moi-magenta{color:var(--magenta)}
    .moi-stat-key{font-family:var(--mono);font-size:0.6rem;font-weight:600;text-transform:uppercase;letter-spacing:0.08em;color:var(--ink-3);margin-top:4px}
    .moi-btn{width:100%;padding:14px;background:transparent;border:1px solid var(--line-2);border-radius:var(--radius);color:var(--ink-2);font-size:0.9rem;font-weight:600;cursor:pointer;font-family:var(--display);margin-bottom:10px;text-align:center}
    .moi-btn-danger{border-color:rgba(248,113,113,0.4);color:#ef4444}
    .moi-pseudo{font-size:1.4rem;font-weight:800;color:var(--ink);text-align:center;margin:10px 0 16px}
    .moi-grid{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-bottom:16px}
    .moi-tile{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);padding:14px 10px;text-align:center}
    .moi-tile-val{font-size:1.4rem;font-weight:800;color:var(--ink);font-family:var(--mono)}
    .moi-tile-lbl{font-family:var(--mono);font-size:0.6rem;font-weight:600;text-transform:uppercase;letter-spacing:0.08em;color:var(--ink-3);margin-top:4px}
    .moi-calib{width:100%;padding:12px;background:transparent;border:1px solid rgba(99,102,241,0.25);border-radius:var(--radius);color:#818cf8;font-size:0.88rem;font-weight:600;cursor:pointer;font-family:var(--display);text-align:center;margin-bottom:8px}
    .moi-logout{width:100%;padding:12px;background:transparent;border:1px solid rgba(248,113,113,0.25);border-radius:var(--radius);color:#ef4444;font-size:0.88rem;font-weight:600;cursor:pointer;font-family:var(--display);text-align:center}
    .moi-bsaver{width:100%;padding:12px;background:transparent;border:1px solid rgba(74,222,128,0.25);border-radius:var(--radius);color:#4ade80;font-size:0.88rem;font-weight:600;cursor:pointer;font-family:var(--display);text-align:center;margin-bottom:8px}
    .moi-bsaver.active{background:rgba(74,222,128,.12);border-color:#16a34a;color:#16a34a}
    #batterySaverOverlay{display:none;position:absolute;inset:0;z-index:10;background:rgba(5,6,16,.88);align-items:center;justify-content:center;flex-direction:column;gap:12px;backdrop-filter:blur(3px);-webkit-backdrop-filter:blur(3px)}
    #batterySaverOverlay.active{display:flex}
    .bso-icon{font-size:2.4rem}
    .bso-msg{font-family:var(--mono);font-size:0.82rem;font-weight:700;color:#94a3b8;text-align:center;line-height:1.5;padding:0 20px}
    .bso-sub{font-size:0.72rem;color:#4ade80;font-family:var(--mono);font-weight:600}
