:root{
  --encre:#071A1E;
  --carte:rgba(255,255,255,.06); --carte-2:rgba(255,255,255,.10);
  --bord:rgba(255,255,255,.13); --bord-fort:rgba(255,255,255,.22);
  --creme:#FFF8EE; --sourdine:rgba(255,248,238,.76); --minus:rgba(255,248,238,.62);
  --lime:#C8FF4D; --spritz:#FF7A69; --verre:#86DCCB;
  --r:20px;
  --bas:calc(84px + env(safe-area-inset-bottom,0px));
  --haut:calc(14px + env(safe-area-inset-top,0px));
}
*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}
html,body{margin:0;padding:0;overflow-x:clip;background:var(--encre);color:var(--creme);
  font-family:Inter,system-ui,-apple-system,sans-serif;font-size:15px;line-height:1.45;
  -webkit-text-size-adjust:100%;overscroll-behavior-y:auto}
body{min-height:100dvh;padding-bottom:var(--bas);background:
  radial-gradient(900px 480px at 82% -8%,rgba(200,255,77,.10),transparent 62%),
  radial-gradient(700px 420px at -10% 22%,rgba(127,216,200,.10),transparent 60%),
  radial-gradient(600px 500px at 50% 110%,rgba(255,107,90,.06),transparent 65%),var(--encre)}
body::after{content:"";position:fixed;inset:0;pointer-events:none;opacity:.045;z-index:0;
  background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='160' height='160'><filter id='n'><feTurbulence type='fractalNoise' baseFrequency='.8' numOctaves='3'/></filter><rect width='160' height='160' filter='url(%23n)' opacity='.55'/></svg>")}
h1,h2,h3,h4{font-family:"Bricolage Grotesque",Inter,sans-serif;letter-spacing:-.02em;margin:0;font-weight:700}
p{margin:0}
a{color:var(--lime)}
button{font-family:inherit;color:inherit;touch-action:manipulation}

.enveloppe{position:relative;z-index:1;max-width:540px;margin:0 auto;padding:var(--haut) 16px 30px}

/* barre de marque, collante comme dans la maquette */
.marque{position:sticky;top:0;z-index:30;display:flex;align-items:center;gap:7px;
  font-family:"Bricolage Grotesque";font-weight:800;font-size:20px;letter-spacing:-.03em;
  padding:10px 2px 12px;margin:0 -16px 14px;
  background:linear-gradient(180deg,rgba(7,26,30,.98) 70%,rgba(7,26,30,.86));
  backdrop-filter:blur(16px);-webkit-backdrop-filter:blur(16px);
  box-shadow:0 1px 0 rgba(255,255,255,.06)}
.marque .pt{width:8px;height:8px;border-radius:50%;background:var(--lime);
  box-shadow:0 0 14px var(--lime);animation:pulse 2.4s infinite;flex:0 0 auto;margin-left:16px}
.marque{padding-left:16px}
.marque b{color:var(--lime)}
@keyframes pulse{0%,100%{opacity:1;transform:scale(1)}50%{opacity:.4;transform:scale(.75)}}
@keyframes entree{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:none}}
section:not(.cache){animation:entree .34s cubic-bezier(.22,.8,.3,1) both}

h1{font-size:32px;line-height:1.12;font-weight:800;letter-spacing:-.035em;margin-bottom:6px}
.aide{font-size:14px;color:var(--sourdine);margin:8px 0 18px;line-height:1.5}
.note{font-size:12.5px;color:var(--minus);margin-top:3px;line-height:1.45}

/* héros : l'heure qui bascule la journée */
.heure{font-family:"Bricolage Grotesque";font-size:clamp(46px,13vw,60px);font-weight:800;line-height:1;
  letter-spacing:-.045em;margin:6px 0 6px;display:flex;align-items:baseline;gap:10px}
.heure span{font-size:13px;font-weight:600;letter-spacing:.12em;text-transform:uppercase;color:var(--verre)}
.accroche{font-size:21px;line-height:1.3;font-weight:500;margin:0 0 6px;max-width:17em}
.accroche em{font-style:normal;color:var(--lime)}
.sous{font-size:14px;color:var(--sourdine);margin:8px 0 16px;line-height:1.5}

/* le geste principal */
.geste{width:100%;border:0;border-radius:18px;background:var(--lime);color:#0A1F0A;
  font-family:"Bricolage Grotesque";font-weight:800;font-size:18px;letter-spacing:-.01em;
  padding:17px;display:flex;align-items:center;justify-content:center;gap:10px;
  box-shadow:0 12px 30px -10px rgba(200,255,77,.55),inset 0 1px 0 rgba(255,255,255,.5);
  transition:transform .16s ease,box-shadow .16s ease}
.geste:active{transform:scale(.975);box-shadow:0 6px 16px -8px rgba(200,255,77,.5)}

.onglets{display:flex;gap:8px;margin-bottom:18px;background:rgba(255,255,255,.06);
  border:1px solid var(--bord);border-radius:13px;padding:4px}
.onglets button{flex:1;padding:11px;border-radius:10px;border:0;background:transparent;
  color:var(--sourdine);font-weight:600;font-size:14px}
.onglets button.on{background:var(--creme);color:#0A1F0A}

.champ{margin-bottom:14px}
.champ label{display:block;font-size:13.5px;font-weight:600;margin-bottom:7px;color:var(--creme)}
input,textarea,select{font-size:16px}
input:not([type=checkbox]):not([type=radio]):not([type=file]):not([type=range]):not([type=submit]):not([type=button]),
select,textarea{
  width:100%;background:rgba(255,255,255,.05);border:1px solid var(--bord);border-radius:13px;
  padding:14px;color:var(--creme);font-size:16px;font-family:Inter;outline:none;
  -webkit-appearance:none;appearance:none}
input::placeholder,textarea::placeholder{color:rgba(255,248,238,.42)}
input:focus,select:focus,textarea:focus{border-color:rgba(200,255,77,.55);background:rgba(255,255,255,.07)}
select{background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='14' height='14' fill='none' stroke='%23FFF8EE' stroke-width='2'><path d='M3 5l4 4 4-4'/></svg>");
  background-repeat:no-repeat;background-position:right 14px center}
.duo{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.coche{display:flex;align-items:flex-start;gap:11px;font-size:13.5px;color:var(--sourdine);line-height:1.45;margin:14px 0}
.coche input{width:22px;height:22px;flex:0 0 auto;accent-color:#C8FF4D;margin:0;
  -webkit-appearance:auto;appearance:auto;background:transparent;border:0;padding:0}

.btn{width:100%;border:1px solid var(--bord);background:var(--carte);color:var(--creme);
  border-radius:15px;padding:15px 16px;font-size:15.5px;font-weight:600;margin-top:10px;
  display:flex;align-items:center;justify-content:center;gap:9px;transition:background .15s}
.btn:active{background:var(--carte-2)}
.btn.plein{background:var(--lime);border-color:transparent;color:#0A1F0A;font-weight:700}
.btn.plein:active{background:#b6ef3c}
.btn.danger{color:#FF9C90;border-color:rgba(255,122,105,.35);background:rgba(255,122,105,.08)}
.btn.petit{width:auto;padding:10px 14px;font-size:13.5px;margin:0;border-radius:11px}
.btn-row{display:flex;gap:9px;margin-top:12px}
.btn-row .btn{margin:0;flex:1}
.retour{margin-bottom:12px}

.carte{background:var(--carte);border:1px solid var(--bord);border-radius:var(--r);
  padding:16px;margin-bottom:11px;width:100%;text-align:left;display:block}
.carte h3{font-size:16.5px;font-weight:700;margin-bottom:4px;line-height:1.3}
.carte p{font-size:14px;color:var(--sourdine);line-height:1.5}
.carte.actionnable:active{background:var(--carte-2)}
.turq{position:relative;border:1px solid rgba(160,245,232,.3);overflow:hidden;color:#fff;
  background:linear-gradient(135deg,#0A6E76,#17578F 94%);box-shadow:0 18px 34px -24px rgba(23,87,143,.95)}
.turq::after{content:"";position:absolute;inset:0;pointer-events:none;
  background:radial-gradient(150px 100px at 88% -20%,rgba(255,255,255,.26),transparent 70%)}
.turq h3,.turq h2{color:#fff}
.turq p{color:rgba(255,255,255,.92)}
.carte-bas{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-top:13px;position:relative;z-index:1}
.pastilles{display:flex;align-items:center}
.pastilles span{width:30px;height:30px;border-radius:50%;margin-left:-8px;border:2px solid #0C4C63;
  display:grid;place-items:center;font-size:11.5px;font-weight:700;color:#08211A;
  background:linear-gradient(145deg,#C8FF4D,#7FD8C8)}
.pastilles span:first-child{margin-left:0}
.pastilles span:nth-child(2){background:linear-gradient(145deg,#FFB08A,#FF7A69)}
.pastilles span:nth-child(3){background:linear-gradient(145deg,#A9CDFF,#7E9BFF)}
.pastilles .plus{background:rgba(7,26,30,.36);color:#fff;border-color:rgba(255,255,255,.4);font-size:11px}
.etat{font-size:11px;letter-spacing:.09em;text-transform:uppercase;font-weight:700;
  background:rgba(7,26,30,.3);border:1px solid rgba(255,255,255,.34);padding:5px 9px;border-radius:999px;
  display:inline-flex;align-items:center;gap:5px;white-space:nowrap;color:#fff}
.etat.or{background:rgba(200,255,77,.94);color:#0A1F0A;border-color:transparent}

.section{display:flex;align-items:baseline;justify-content:space-between;gap:10px;margin:26px 2px 12px}
.section h2{font-size:17px;font-weight:700}
.section span{font-size:12px;letter-spacing:.1em;text-transform:uppercase;color:var(--minus);font-weight:600}

.ligne{display:flex;align-items:center;gap:13px;padding:13px;border-radius:16px;
  border:1px solid var(--bord);background:var(--carte);margin-bottom:9px;width:100%;text-align:left}
.ligne:active{background:var(--carte-2)}
.avatar{width:46px;height:46px;border-radius:50%;margin:0;flex:0 0 auto;display:grid;place-items:center;
  font-family:"Bricolage Grotesque";font-weight:800;font-size:18px;color:#08211A;
  background:linear-gradient(145deg,#C8FF4D,#7FD8C8);overflow:hidden;
  box-shadow:0 8px 20px -10px rgba(127,216,200,.8)}
.avatar.grand{width:64px;height:64px;font-size:24px}
.avatar img{width:100%;height:100%;object-fit:cover}
.ligne .corps{flex:1;min-width:0}
.ligne .corps b{display:block;font-size:15px;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.ligne .corps span{display:block;font-size:13px;color:var(--sourdine);margin-top:2px;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis}

.code{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;letter-spacing:.18em;font-weight:700;color:var(--lime)}
.code-input{text-align:center;letter-spacing:.35em;font-size:22px;text-transform:uppercase;font-family:ui-monospace,Menlo,monospace}

.entete{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:14px}
.entete h1{font-size:26px;margin:0}

/* sécurité : jauge + échelle */
.verre-carte{display:flex;gap:16px;align-items:center;padding:17px;border-radius:var(--r);
  border:1px solid var(--bord);background:linear-gradient(135deg,rgba(127,216,200,.15),rgba(255,255,255,.03) 58%);
  margin-bottom:11px;position:relative;overflow:hidden}
.verre-carte::before{content:"";position:absolute;inset:auto -30% -70% auto;width:220px;height:220px;
  background:radial-gradient(circle,rgba(127,216,200,.22),transparent 66%);filter:blur(10px)}
.jauge{flex:0 0 64px}
.jauge svg{display:block;width:64px;height:80px;overflow:visible}
.liquide{transform-origin:50% 100%;animation:balance 5s ease-in-out infinite}
@keyframes balance{0%,100%{transform:translateY(0) rotate(0)}35%{transform:translateY(-1.4px) rotate(-1.2deg)}70%{transform:translateY(.6px) rotate(1deg)}}
.verre-txt{flex:1;min-width:0;position:relative;z-index:1}
.verre-txt .taux{font-family:"Bricolage Grotesque";font-size:38px;font-weight:800;letter-spacing:-.03em;line-height:1.02;display:block}
.verre-txt .taux small{font-size:17px;font-weight:600;letter-spacing:0;opacity:.9}
.verre-txt .conseil{margin-top:6px;font-size:13.5px;color:var(--creme);line-height:1.45}
.verre-txt .conseil b{color:var(--lime);font-weight:600}
.echelle{display:flex;gap:3px;margin-top:11px}
.echelle i{height:4px;flex:1;border-radius:2px;background:rgba(255,255,255,.13)}
.echelle i.on{background:var(--verre)}
.echelle i.warn{background:var(--spritz)}

.rangee{display:flex;gap:8px;overflow-x:auto;padding:2px 0 6px;scrollbar-width:none}
.rangee::-webkit-scrollbar{display:none}
.pastille-boisson{flex:0 0 auto;display:flex;flex-direction:column;align-items:center;gap:5px;
  padding:12px 14px;border-radius:15px;border:1px solid var(--bord);background:var(--carte);
  font-size:20px;color:var(--sourdine);min-width:76px}
.pastille-boisson:active{background:rgba(200,255,77,.14);border-color:rgba(200,255,77,.4)}
.pastille-boisson span{font-size:11.5px;color:var(--sourdine)}

.fil{display:flex;flex-direction:column;gap:9px;margin:14px 0}
.bulle{max-width:82%;padding:11px 14px;border-radius:16px;font-size:14.5px;line-height:1.45;
  overflow-wrap:anywhere;word-break:break-word;background:var(--carte);border:1px solid var(--bord);align-self:flex-start}
.bulle.moi{align-self:flex-end;background:var(--lime);color:#0A1F0A;border-color:transparent;font-weight:500}
.bulle .qui{display:block;font-size:11.5px;font-weight:700;color:var(--verre);margin-bottom:3px}
.bulle.moi .qui{display:none}
.composeur{display:flex;gap:9px;align-items:center;padding:8px 0 4px}
.composeur input{flex:1;background:rgba(255,255,255,.07);border:1px solid var(--bord);border-radius:999px;
  padding:13px 16px;color:var(--creme);font-size:16px}
.composeur button{width:46px;height:46px;border-radius:50%;border:0;background:var(--lime);
  color:#0A1F0A;display:grid;place-items:center;font-size:18px;flex:0 0 auto}

.vide{text-align:center;padding:30px 18px;border:1px dashed var(--bord);border-radius:var(--r);
  color:var(--sourdine);font-size:14px;line-height:1.5}
.erreur{color:#FFB3AA;font-size:13.5px;margin-top:10px;min-height:18px}
.cache{display:none !important}

.toast{position:fixed;left:50%;bottom:calc(104px + env(safe-area-inset-bottom,0px));transform:translate(-50%,16px);
  background:var(--creme);color:#08211A;font-size:14px;font-weight:600;padding:13px 18px;border-radius:14px;
  box-shadow:0 20px 40px -18px rgba(0,0,0,.8);opacity:0;pointer-events:none;transition:.3s cubic-bezier(.2,.8,.3,1);
  z-index:80;max-width:88vw;text-align:center;line-height:1.4;display:none}
.toast.on{display:block;opacity:1;transform:translate(-50%,0)}

/* tabbar flottante, comme la maquette */
.tabbar{position:fixed;left:0;right:0;bottom:0;z-index:40;display:flex;justify-content:center;
  padding:8px 14px calc(8px + env(safe-area-inset-bottom,0px));
  background:linear-gradient(180deg,transparent,rgba(7,26,30,.92) 40%);
  backdrop-filter:blur(18px);-webkit-backdrop-filter:blur(18px)}
.tabbar .inner{display:flex;width:100%;max-width:540px;background:rgba(11,36,41,.92);
  border:1px solid var(--bord);border-radius:22px;padding:6px;box-shadow:0 18px 40px -20px #000;gap:4px}
.tabbar button{flex:1;border:0;background:transparent;color:var(--sourdine);font-size:11.5px;
  font-weight:600;padding:9px 4px;border-radius:16px;position:relative}
.tabbar button.on{background:rgba(200,255,77,.15);color:var(--lime)}
.tabbar .badge{position:absolute;top:2px;right:calc(50% - 26px);min-width:16px;height:16px;border-radius:999px;
  background:var(--spritz);color:#2A0A06;font-size:10px;font-weight:800;display:grid;place-items:center;padding:0 4px}

/* cases : jamais invisible */
input.case{-webkit-appearance:none;appearance:none;width:26px;height:26px;padding:0;flex:0 0 auto;
  border-radius:8px;border:1.5px solid rgba(255,255,255,.28);background:rgba(255,255,255,.05);
  position:relative;transition:background .15s,border-color .15s}
input.case:checked{background:#C8FF4D;border-color:#C8FF4D}
input.case:checked::after{content:"";position:absolute;left:9px;top:4px;width:6px;height:12px;
  border:solid #071A1E;border-width:0 2.5px 2.5px 0;transform:rotate(45deg)}
.inter-ligne{display:flex;align-items:center;justify-content:space-between;gap:12px;
  padding:12px 0;border-bottom:1px solid rgba(255,255,255,.07);font-size:15px}
.inter-ligne:last-of-type{border-bottom:0}

/* admin */
.stats{display:grid;grid-template-columns:repeat(2,1fr);gap:10px;margin-bottom:18px}
.stat{background:var(--carte);border:1px solid var(--bord);border-radius:16px;padding:14px}
.stat b{display:block;font-family:"Bricolage Grotesque";font-size:26px;font-weight:800;line-height:1}
.stat span{display:block;font-size:11.5px;color:var(--minus);margin-top:4px}
.pastille{display:inline-block;font-size:11px;font-weight:700;padding:3px 8px;border-radius:999px;
  background:rgba(200,255,77,.15);color:#DBFF95;border:1px solid rgba(200,255,77,.3)}
.pastille.rouge{background:rgba(255,122,105,.14);color:#FFB3AA;border-color:rgba(255,122,105,.32)}
.tablo{width:100%;border-collapse:collapse;font-size:13.5px}
.tablo th{text-align:left;font-size:11.5px;text-transform:uppercase;letter-spacing:.08em;
  color:var(--minus);padding:8px 6px;border-bottom:1px solid var(--bord)}
.tablo td{padding:10px 6px;border-bottom:1px solid rgba(255,255,255,.06)}

@media (max-width:360px){ body{font-size:14.5px} h1{font-size:28px} }

/* tirer pour actualiser */
.ptr{position:fixed;top:calc(6px + env(safe-area-inset-top,0px));left:50%;z-index:70;
  display:flex;align-items:center;gap:8px;padding:8px 14px;border-radius:999px;
  background:rgba(11,36,41,.96);border:1px solid var(--bord);color:var(--sourdine);font-size:12.5px;
  font-weight:600;transform:translate(-50%,-60px);opacity:0;pointer-events:none;
  transition:transform .18s ease,opacity .18s ease;box-shadow:0 14px 30px -18px #000}
.ptr.on{opacity:1}
.ptr.pret{color:var(--lime);border-color:rgba(200,255,77,.45)}
.ptr-rond{width:15px;height:15px;border-radius:50%;border:2px solid rgba(255,248,238,.3);
  border-top-color:var(--lime);transform:rotate(0deg)}
.ptr.tourne .ptr-rond{animation:tourne .8s linear infinite}
@keyframes tourne{to{transform:rotate(360deg)}}

/* les grilles ne doivent jamais être poussées par un champ large */
.duo>*{min-width:0}
input,select,textarea{min-width:0;max-width:100%}

.badge-msg{min-width:20px;height:20px;border-radius:999px;background:var(--spritz);color:#2A0A06;
  font-size:11px;font-weight:800;display:grid;place-items:center;padding:0 5px;flex:0 0 auto}
.btn.fantome{background:transparent}

/* code promo */
.code-box{display:block;text-align:center;margin:10px 0;font-family:"Bricolage Grotesque";
  font-size:42px;font-weight:800;letter-spacing:.12em;color:var(--lime);line-height:1.1}

.avatar.petit-avatar{width:38px;height:38px;font-size:15px}
.avatar.gris{background:rgba(255,255,255,.12);color:var(--sourdine)}
.avatar img{width:100%;height:100%;object-fit:cover;border-radius:50%}


/* carte : fond sombre épuré, accordé à l'app */
.carte-map{position:relative;height:240px;border-radius:22px;overflow:hidden;border:1px solid var(--bord);
  margin:14px 0 8px;background:#0A2025;box-shadow:0 22px 44px -30px #000}
.carte-map::after{content:"";position:absolute;inset:0;pointer-events:none;border-radius:22px;
  box-shadow:inset 0 0 0 1px rgba(200,255,77,.08),inset 0 -50px 60px -40px rgba(7,26,30,.9);z-index:400}
#carteLeaflet{position:absolute;inset:0}
.leaflet-container{background:#0A2025;font-family:Inter,sans-serif}
.leaflet-control-attribution{background:rgba(7,26,30,.7);color:rgba(255,248,238,.45);font-size:9.5px;border-radius:8px 0 0 0}
.leaflet-control-attribution a{color:rgba(134,220,203,.8)}
.leaflet-control-zoom{border:0;margin:10px}
.leaflet-control-zoom a{background:rgba(11,36,41,.92);color:var(--creme);border:1px solid var(--bord);
  width:32px;height:32px;line-height:30px;font-size:16px}
.leaflet-control-zoom a:hover{background:rgba(200,255,77,.15);color:var(--lime)}
.btn-position{position:absolute;right:10px;bottom:10px;z-index:500;border:1px solid var(--bord);
  background:rgba(11,36,41,.92);backdrop-filter:blur(10px);color:var(--creme);font-size:12.5px;font-weight:600;
  padding:9px 13px;border-radius:999px;display:flex;align-items:center;gap:6px}
.btn-position:active{background:rgba(200,255,77,.18)}
/* marqueurs */
.pin{width:30px;height:30px;border-radius:50%;display:grid;place-items:center;font-size:14px;
  border:2px solid rgba(7,26,30,.9);box-shadow:0 6px 16px rgba(0,0,0,.55)}
.pin.soiree{background:linear-gradient(145deg,#C8FF4D,#8FE03C)}
.pin.evenement{background:linear-gradient(145deg,#86DCCB,#3FB3A2)}
.pin.bar{background:linear-gradient(145deg,#FFB08A,#FF7A69)}
.pin.halo::before{content:"";position:absolute;inset:-7px;border-radius:50%;border:2px solid rgba(200,255,77,.5);
  animation:halo 2.2s ease-out infinite}
@keyframes halo{0%{transform:scale(.7);opacity:.9}100%{transform:scale(1.5);opacity:0}}
.leaflet-popup-content-wrapper{background:#0C272D;color:var(--creme);border-radius:16px;
  border:1px solid var(--bord);box-shadow:0 22px 44px -24px #000}
.leaflet-popup-tip{background:#0C272D}
.leaflet-popup-content{margin:12px 14px;font-size:13.5px;line-height:1.45}
.leaflet-popup-content b{font-family:"Bricolage Grotesque";font-size:15.5px}
.leaflet-popup-close-button{color:var(--sourdine) !important}
