/* =================================================================
   PLANET BIO x DE BOUANA - Feuille de styles partagee
   Utilisee par : index.html, public.html, cockpit.html, portals.html
   ================================================================= */
@import url('https://fonts.googleapis.com/css2?family=Sora:wght@400;600;700;800&family=Manrope:wght@400;500;600;700&display=swap');
:root{
 --bg:#eef3ec; --bg2:#e2ebe1; --surface:rgba(255,255,255,.86); --elev:#ffffff;
 --panel:rgba(255,255,255,.9); --panel2:#ffffff;
 --stroke:rgba(18,48,33,.13); --stroke2:rgba(18,48,33,.22);
 --txt:#14261b; --muted:#566b60; --muted2:#7d9187; --grid:rgba(18,48,33,.09); --track:rgba(18,48,33,.1);
 --sh:0 10px 30px rgba(24,55,40,.09); --shhover:0 20px 44px rgba(24,55,40,.16);
 --green:#1faf60; --green-d:#0f5c37; --lime:#5fb838; --emer:#159a5b;
 --gold:#c1902a; --gold-d:#a3781f; --earth:#a9713f;
 --danger:#e13b3b; --warn:#d9861a; --info:#2385d6; --sky:#12a7c9; --violet:#6d55e6;
 --grad-green:linear-gradient(135deg,#2fc574,#0f7a45);
 --grad-gold:linear-gradient(135deg,#eaca70,#bd8f28);
 --grad-head:linear-gradient(90deg,#0f7a45,#22b866 55%,#bd8f28);
 --grad-bright:linear-gradient(90deg,#eafff2,#8ff0b0 60%,#f0d488);
 --aurora1:#c3ead2; --aurora2:#f0e4b4; --auroraOp:.55;
 --nav-on:#0f5c37;
 --r:18px; --r2:14px;
}
[data-theme=dark]{
 --bg:#060a08; --bg2:#0a120e; --surface:rgba(9,16,12,.82); --elev:#0d1712;
 --panel:rgba(255,255,255,.045); --panel2:rgba(255,255,255,.07);
 --stroke:rgba(255,255,255,.09); --stroke2:rgba(255,255,255,.14);
 --txt:#e9f2ec; --muted:#8ba69a; --muted2:#6f887c; --grid:rgba(255,255,255,.07); --track:rgba(255,255,255,.09);
 --sh:none; --shhover:0 26px 60px rgba(0,0,0,.5);
 --green:#3ad07a; --green-d:#0f5c37; --lime:#8ff06a; --emer:#159a5b;
 --gold:#e8c66a; --gold-d:#c19a3e; --earth:#c08a5b;
 --danger:#ff6b6b; --warn:#ffb14e; --info:#5bb8ff; --sky:#61e6ff; --violet:#b18cff;
 --grad-green:linear-gradient(135deg,#4be08a,#0f5c37);
 --grad-gold:linear-gradient(135deg,#f2d78a,#c19a3e);
 --grad-head:linear-gradient(90deg,#eafff2,#8ff0b0 60%,#e8c66a);
 --aurora1:#14894f; --aurora2:#8a6a1e; --auroraOp:.5;
 --nav-on:#eafff2;
}
*{box-sizing:border-box}
html,body{margin:0;height:100%}
body{background:var(--bg);color:var(--txt);font-family:'Manrope','Segoe UI',system-ui,-apple-system,Roboto,sans-serif;overflow-x:hidden;-webkit-font-smoothing:antialiased;transition:background .35s,color .35s}
h1,h2,h3,h4{font-family:'Sora','Manrope',system-ui,sans-serif;margin:0;line-height:1.15;font-weight:700}
button{font-family:inherit;cursor:pointer}
::-webkit-scrollbar{width:10px;height:10px}
::-webkit-scrollbar-thumb{background:var(--stroke2);border-radius:20px}
::-webkit-scrollbar-track{background:transparent}
.aurora{position:fixed;inset:0;z-index:0;overflow:hidden;pointer-events:none}
.aurora::before,.aurora::after{content:'';position:absolute;width:60vw;height:60vw;border-radius:50%;filter:blur(90px);opacity:var(--auroraOp)}
.aurora::before{background:radial-gradient(circle,var(--aurora1),transparent 65%);top:-15vw;left:-10vw;animation:float1 22s ease-in-out infinite}
.aurora::after{background:radial-gradient(circle,var(--aurora2),transparent 65%);bottom:-20vw;right:-12vw;animation:float2 26s ease-in-out infinite}
@keyframes float1{50%{transform:translate(12vw,8vh) scale(1.15)}}
@keyframes float2{50%{transform:translate(-10vw,-8vh) scale(1.1)}}
#app{position:relative;z-index:1;min-height:100vh}
.glass{background:var(--panel);border:1px solid var(--stroke);backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);box-shadow:var(--sh)}
.gtext{background:var(--grad-head);-webkit-background-clip:text;background-clip:text;color:transparent}

/* ============ LANDING ============ */
.land{min-height:100vh;display:flex;flex-direction:column;padding:34px clamp(20px,6vw,90px)}
.land-top{display:flex;justify-content:space-between;align-items:center}
.brand{display:flex;align-items:center;gap:12px;font-weight:800;font-family:'Sora';letter-spacing:.3px}
.brand .logo{width:42px;height:42px;border-radius:12px;background:var(--grad-green);display:grid;place-items:center;box-shadow:0 6px 22px rgba(58,208,122,.35)}
.brand .logo svg{width:24px;height:24px;stroke:#04140b;fill:none;stroke-width:2}
.brand small{display:block;font-size:11px;font-weight:600;color:var(--muted);letter-spacing:2px}
.land-hero{flex:1;display:flex;flex-direction:column;justify-content:center;max-width:1000px}
.eyebrow{display:inline-flex;align-items:center;gap:8px;padding:7px 14px;border-radius:100px;font-size:12.5px;font-weight:600;color:var(--green);background:rgba(58,208,122,.1);border:1px solid rgba(58,208,122,.25);width:fit-content;letter-spacing:.4px}
.eyebrow svg{width:15px;height:15px;stroke:currentColor;fill:none;stroke-width:1.9}
.land h1{font-size:clamp(34px,6vw,68px);font-weight:800;margin:20px 0 14px;letter-spacing:-1px}
.land .lead{font-size:clamp(16px,2vw,21px);color:var(--muted);max-width:720px;line-height:1.55}
.plat-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:20px;margin-top:44px}
.plat-card{position:relative;padding:26px;border-radius:var(--r);overflow:hidden;cursor:pointer;transition:.35s;background:var(--panel);border:1px solid var(--stroke)}
.plat-card:hover{transform:translateY(-8px);border-color:var(--stroke2);box-shadow:0 26px 60px rgba(0,0,0,.5)}
.plat-card .pc-ic{width:52px;height:52px;border-radius:14px;display:grid;place-items:center;margin-bottom:18px}
.plat-card .pc-ic svg{width:26px;height:26px;stroke:#04140b;fill:none;stroke-width:1.9}
.plat-card h3{font-size:20px;margin-bottom:8px}
.plat-card p{color:var(--muted);font-size:14px;line-height:1.5;margin:0 0 16px}
.plat-card .pc-go{display:flex;align-items:center;gap:8px;font-weight:700;font-size:13.5px;color:var(--green)}
.pc-go svg{width:16px;height:16px;stroke:currentColor;fill:none;stroke-width:2}
.plat-card .pc-num{position:absolute;top:18px;right:22px;font-family:'Sora';font-weight:800;font-size:46px;color:rgba(255,255,255,.05)}
.plat-card .glow{position:absolute;inset:0;background:radial-gradient(400px circle at 50% -10%,rgba(58,208,122,.18),transparent 60%);opacity:0;transition:.35s}
.plat-card:hover .glow{opacity:1}
.land-foot{display:flex;gap:26px;flex-wrap:wrap;margin-top:36px;color:var(--muted2);font-size:12.5px}
.land-foot b{color:var(--txt)}

/* ============ LAYOUT ============ */
.layout{display:grid;grid-template-columns:260px 1fr;min-height:100vh}
.sidebar{background:var(--surface);border-right:1px solid var(--stroke);padding:20px 14px;display:flex;flex-direction:column;gap:6px;position:sticky;top:0;height:100vh;overflow-y:auto}
.sb-brand{display:flex;align-items:center;gap:11px;padding:6px 8px 16px;cursor:pointer;text-decoration:none;color:inherit}
.sb-brand .logo{width:36px;height:36px;border-radius:10px;background:var(--grad-green);display:grid;place-items:center}
.sb-brand .logo svg{width:20px;height:20px;stroke:#04140b;fill:none;stroke-width:2}
.sb-brand b{font-family:'Sora';font-size:15px}
.sb-brand small{display:block;font-size:10px;color:var(--muted);letter-spacing:1.5px}
.sb-group{font-size:10.5px;letter-spacing:1.6px;text-transform:uppercase;color:var(--muted2);padding:14px 12px 6px;font-weight:700}
.nav-i{display:flex;align-items:center;gap:11px;padding:10px 12px;border-radius:11px;color:var(--muted);font-size:13.5px;font-weight:600;transition:.18s;border:1px solid transparent;position:relative;cursor:pointer;text-decoration:none}
.nav-i svg{width:19px;height:19px;stroke:currentColor;fill:none;stroke-width:1.7;flex-shrink:0}
.nav-i:hover{color:var(--txt);background:var(--panel)}
.nav-i.on{color:var(--nav-on);background:rgba(58,208,122,.12);border-color:rgba(58,208,122,.28)}
.nav-i.on::before{content:'';position:absolute;left:-14px;top:50%;transform:translateY(-50%);width:4px;height:22px;border-radius:4px;background:var(--green);box-shadow:0 0 12px var(--green)}
.nav-i .nb{margin-left:auto;background:var(--danger);color:#fff;font-size:10px;font-weight:800;padding:1px 7px;border-radius:20px}
.sb-foot{margin-top:auto;padding:12px;border-radius:12px;background:var(--panel);border:1px solid var(--stroke);font-size:11.5px;color:var(--muted);display:flex;gap:10px;align-items:center}
.sb-foot .av{width:34px;height:34px;border-radius:9px;background:var(--grad-gold);display:grid;place-items:center;color:#221a06;font-weight:800;font-size:13px}
.main{min-width:0;display:flex;flex-direction:column;position:relative}
.topbar{position:sticky;top:0;z-index:30;display:flex;align-items:center;gap:16px;padding:14px 26px;background:var(--surface);backdrop-filter:blur(16px);border-bottom:1px solid var(--stroke)}
.topbar h2{font-size:17px}
.topbar .crumb{color:var(--muted);font-size:12.5px;margin-top:2px}
.tb-search{margin-left:auto;display:flex;align-items:center;gap:9px;padding:8px 14px;border-radius:11px;background:var(--panel);border:1px solid var(--stroke);color:var(--muted);font-size:13px;min-width:230px}
.tb-search svg{width:16px;height:16px;stroke:currentColor;fill:none;stroke-width:1.8}
.tb-btn{width:40px;height:40px;border-radius:11px;background:var(--panel);border:1px solid var(--stroke);display:grid;place-items:center;color:var(--muted);position:relative;transition:.18s}
.tb-btn:hover{color:var(--txt);border-color:var(--stroke2)}
.tb-btn svg{width:19px;height:19px;stroke:currentColor;fill:none;stroke-width:1.8}
.tb-btn .dot{position:absolute;top:8px;right:9px;width:8px;height:8px;border-radius:50%;background:var(--danger);border:2px solid var(--bg)}
.tb-lang{display:flex;gap:2px;padding:3px;border-radius:10px;background:var(--panel);border:1px solid var(--stroke)}
.tb-lang button{border:0;background:transparent;color:var(--muted);font-weight:700;font-size:12px;padding:5px 10px;border-radius:7px}
.tb-lang button.on{background:var(--grad-green);color:#04140b}
.tb-burger{display:none}                     /* hamburger : visible seulement en mobile */
.tb-title{min-width:0}                        /* permet la troncature du titre en mobile */
.nav-scrim{display:none}                      /* fond du tiroir : active seulement en mobile */
.screen{padding:24px 26px 60px;animation:fadeUp .5s ease}
@keyframes fadeUp{from{opacity:0;transform:translateY(12px)}}
@keyframes fadeIn{from{opacity:0}}

/* ============ COMPONENTS ============ */
.pg-head{display:flex;align-items:flex-end;justify-content:space-between;gap:16px;margin-bottom:20px;flex-wrap:wrap}
.pg-head h1{font-size:25px}
.pg-head p{color:var(--muted);font-size:14px;margin:6px 0 0;max-width:640px;line-height:1.5}
.row{display:grid;gap:16px}
.c2{grid-template-columns:repeat(2,1fr)}.c3{grid-template-columns:repeat(3,1fr)}.c4{grid-template-columns:repeat(4,1fr)}.c5{grid-template-columns:repeat(5,1fr)}
.c-2-1{grid-template-columns:2fr 1fr}.c-1-2{grid-template-columns:1fr 2fr}.c-3-2{grid-template-columns:3fr 2fr}
@media(max-width:1150px){.c4,.c5{grid-template-columns:repeat(2,1fr)}.c3{grid-template-columns:repeat(2,1fr)}}
@media(max-width:920px){
 .layout{grid-template-columns:1fr}
 /* KPI (.c4/.c5) restent sur 2 colonnes ; le reste passe en pleine largeur */
 .c2,.c3,.c-2-1,.c-1-2,.c-3-2,.plat-grid{grid-template-columns:1fr}
 /* Barre laterale -> tiroir hors-ecran coulissant */
 .sidebar{position:fixed;top:0;left:0;z-index:80;width:min(286px,84vw);height:100dvh;transform:translateX(-102%);transition:transform .28s ease;box-shadow:0 30px 80px rgba(0,0,0,.55)}
 .sidebar.open{transform:none}
 .nav-scrim{display:block;position:fixed;inset:0;z-index:70;background:rgba(3,7,5,.5);backdrop-filter:blur(2px);-webkit-backdrop-filter:blur(2px);opacity:0;visibility:hidden;transition:opacity .28s,visibility .28s}
 .nav-scrim.open{opacity:1;visibility:visible}
 /* Barre superieure compacte */
 .tb-burger{display:grid}
 .topbar{padding:11px 14px;gap:10px}
 .tb-title{flex:1 1 auto}
 .topbar h2{font-size:15.5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
 .topbar .crumb{display:none}
 .tb-search,.tb-lang{display:none}
 /* Densite de contenu adaptee au mobile */
 .screen{padding:16px 14px 56px}
 .pg-head{margin-bottom:16px}
 .pg-head h1{font-size:21px}
 .kpi{padding:15px}
 .kpi-val{font-size:22px}
 .ai-line{flex-wrap:wrap}
 .notif-panel{top:58px;right:10px;left:10px;width:auto}
}
@media(max-width:340px){.c4,.c5{grid-template-columns:1fr}}
.kpi{padding:18px;border-radius:var(--r2);transition:.25s;position:relative;overflow:hidden}
.kpi:hover{transform:translateY(-4px);border-color:var(--stroke2)}
.kpi-top{display:flex;justify-content:space-between;align-items:center;margin-bottom:14px}
.kpi-ic{width:38px;height:38px;border-radius:10px;display:grid;place-items:center}
.kpi-ic svg{width:19px;height:19px;stroke:#04140b;fill:none;stroke-width:1.9}
.i-green{background:var(--grad-green)}.i-gold{background:var(--grad-gold)}.i-gold svg{stroke:#221a06}
.i-info{background:linear-gradient(135deg,#7fd0ff,#2b6fae)}.i-violet{background:linear-gradient(135deg,#c4a6ff,#6a48b8)}
.i-earth{background:linear-gradient(135deg,#d8a877,#8a5a32)}.i-danger{background:linear-gradient(135deg,#ff9a9a,#c23b3b)}
.i-warn{background:linear-gradient(135deg,#ffd08a,#c07a12)}.i-warn svg{stroke:#2b1b02}
.kpi-val{font-family:'Sora';font-size:26px;font-weight:800;letter-spacing:-.5px}
.kpi-lbl{color:var(--muted);font-size:12.5px;margin-top:3px;font-weight:600}
.kpi-spark{margin-top:10px}
.trend{font-size:11.5px;font-weight:800;padding:3px 8px;border-radius:20px}
.trend.up{color:var(--green);background:rgba(58,208,122,.13)}
.trend.down{color:var(--danger);background:rgba(255,107,107,.13)}
.panel{border-radius:var(--r);overflow:hidden}
.panel-h{display:flex;justify-content:space-between;align-items:flex-start;gap:12px;padding:16px 18px;border-bottom:1px solid var(--stroke)}
.panel-h h3{font-size:15.5px}.panel-h .sub{color:var(--muted);font-size:12px;margin:4px 0 0}
.panel-b{padding:16px 18px}
.chart{width:100%;height:auto;display:block;overflow:visible}
.chart .gl{stroke:var(--grid)}
.chart .ax{fill:var(--muted2);font-size:10px;font-family:'Manrope'}
.chart .ln{stroke-dasharray:100;stroke-dashoffset:100;animation:draw 1.6s cubic-bezier(.4,0,.2,1) forwards}
.chart .bar{transform-box:fill-box;transform-origin:bottom;animation:grow .9s cubic-bezier(.2,.8,.2,1) both}
.chart .area{animation:fadeIn 1.4s ease both}
@keyframes draw{to{stroke-dashoffset:0}}
@keyframes grow{from{transform:scaleY(0)}}
@keyframes fillx{from{width:0!important}}
.spark{width:100%;max-width:130px;height:34px}
.spark polyline{stroke-dasharray:100;stroke-dashoffset:100;animation:draw 1.4s ease forwards}
.donut{position:relative;display:grid;place-items:center}
.donut svg circle{transition:1s}.donut-c{position:absolute;text-align:center}
.donut-c b{font-family:'Sora';font-size:22px;display:block}.donut-c span{font-size:11px;color:var(--muted)}
.gauge{position:relative;display:grid;place-items:center;max-width:220px;margin:0 auto}
.gauge svg path{transition:1.2s}
.gauge-v{position:absolute;bottom:6px;text-align:center}
.gauge-v b{font-family:'Sora';font-size:26px;display:block}.gauge-v span{font-size:11px;color:var(--muted)}
.ring{position:relative;display:grid;place-items:center}
.ring-c{position:absolute;text-align:center}.ring-c b{font-family:'Sora';font-size:19px;display:block}.ring-c span{font-size:10.5px;color:var(--muted)}
.pb{height:9px;border-radius:20px;background:var(--track);overflow:hidden}
.pb-f{height:100%;border-radius:20px;animation:fillx 1.1s cubic-bezier(.3,.8,.3,1) both}
.tbl-wrap{overflow-x:auto}
.tbl{width:100%;border-collapse:collapse;font-size:13px}
.tbl th{text-align:left;color:var(--muted2);font-weight:700;font-size:11px;letter-spacing:.5px;text-transform:uppercase;padding:9px 12px;border-bottom:1px solid var(--stroke)}
.tbl td{padding:11px 12px;border-bottom:1px solid var(--grid)}
.tbl tr:hover td{background:var(--panel)}
.tbl tr:last-child td{border-bottom:0}
.chip{display:inline-flex;align-items:center;gap:6px;font-size:11.5px;font-weight:700;padding:3px 10px;border-radius:20px}
.chip.g{color:var(--green);background:rgba(58,208,122,.13)}
.chip.gold{color:var(--gold);background:rgba(232,198,106,.14)}
.chip.r{color:var(--danger);background:rgba(255,107,107,.13)}
.chip.w{color:var(--warn);background:rgba(255,177,78,.14)}
.chip.i{color:var(--info);background:rgba(91,184,255,.13)}
.chip.m{color:var(--muted);background:rgba(255,255,255,.07)}
.dotb{width:8px;height:8px;border-radius:50%;display:inline-block}
.ai-card{border-radius:var(--r);padding:18px;position:relative;overflow:hidden;background:linear-gradient(135deg,rgba(58,208,122,.11),rgba(232,198,106,.06));border:1px solid rgba(58,208,122,.28)}
.ai-h{display:flex;align-items:center;gap:10px;margin-bottom:14px}
.ai-h b{font-family:'Sora';font-size:15px}
.ai-orb{width:26px;height:26px;border-radius:50%;background:radial-gradient(circle at 30% 30%,#8ff0b0,#159a5b);box-shadow:0 0 16px rgba(58,208,122,.6);animation:pulse 2.4s ease-in-out infinite;flex-shrink:0}
@keyframes pulse{50%{box-shadow:0 0 26px rgba(58,208,122,.9);transform:scale(1.08)}}
.ai-tag{margin-left:auto;font-size:10px;font-weight:800;letter-spacing:1px;color:var(--gold);background:rgba(232,198,106,.12);padding:4px 9px;border-radius:20px}
.ai-line{display:flex;align-items:center;gap:11px;padding:10px 0;border-bottom:1px solid var(--grid);font-size:13.5px;line-height:1.45}
.ai-line:last-child{border-bottom:0}
.ai-line svg{width:17px;height:17px;stroke:var(--green);fill:none;stroke-width:1.8;flex-shrink:0}
.ai-line.warn svg{stroke:var(--warn)}.ai-line.danger svg{stroke:var(--danger)}.ai-line.gold svg{stroke:var(--gold)}
.ai-line b{color:var(--txt)}
.ai-act{margin-left:auto;border:1px solid var(--stroke2);background:var(--panel2);color:var(--txt);font-size:11.5px;font-weight:700;padding:5px 12px;border-radius:9px;white-space:nowrap;flex-shrink:0}
.ai-act:hover{background:var(--grad-green);color:#04140b;border-color:transparent}
.btn{display:inline-flex;align-items:center;gap:8px;border:1px solid var(--stroke2);background:var(--panel2);color:var(--txt);font-weight:700;font-size:13px;padding:9px 16px;border-radius:11px;transition:.2s}
.btn:hover{border-color:var(--stroke2);background:rgba(255,255,255,.1)}
.btn svg{width:16px;height:16px;stroke:currentColor;fill:none;stroke-width:1.9}
.btn.pri{background:var(--grad-green);color:#04140b;border:0}
.btn.pri:hover{filter:brightness(1.08)}
.btn.pri svg{stroke:#04140b}
.btn.gold{background:var(--grad-gold);color:#221a06;border:0}
.btn.gold svg{stroke:#221a06}
.seg{display:inline-flex;padding:3px;border-radius:11px;background:var(--panel);border:1px solid var(--stroke);gap:2px}
.seg button{border:0;background:transparent;color:var(--muted);font-weight:700;font-size:12px;padding:6px 13px;border-radius:8px;transition:.15s}
.seg button.on{background:var(--panel2);color:var(--txt);box-shadow:0 2px 8px rgba(0,0,0,.3)}
.stat-line{display:flex;justify-content:space-between;align-items:center;padding:11px 0;border-bottom:1px solid var(--grid);font-size:13px}
.stat-line:last-child{border-bottom:0}
.stat-line .v{font-weight:800;font-family:'Sora'}
.legend{display:flex;flex-wrap:wrap;gap:12px;margin-top:10px}
.legend span{display:flex;align-items:center;gap:6px;font-size:12px;color:var(--muted)}

/* map */
.map-wrap{position:relative;border-radius:var(--r);overflow:hidden;background:radial-gradient(120% 120% at 30% 10%,#0d2318,#060d09);border:1px solid var(--stroke);min-height:420px}
.map-svg{width:100%;height:auto;display:block}
.region{stroke:rgba(255,255,255,.42);stroke-width:1;vector-effect:non-scaling-stroke;transition:filter .2s,stroke-width .2s}
.region:hover{filter:brightness(1.1);stroke:rgba(255,255,255,.9);stroke-width:1.5}
.map-outline{fill:none;stroke:rgba(255,255,255,.92);stroke-width:2;stroke-linecap:round;stroke-linejoin:round;vector-effect:non-scaling-stroke;pointer-events:none;filter:drop-shadow(0 0 3px rgba(0,0,0,.55))}
.region-label{font:600 8px/1 'Sora',sans-serif;fill:rgba(255,255,255,.78);text-anchor:middle;pointer-events:none;paint-order:stroke;stroke:rgba(0,0,0,.32);stroke-width:2px}
.cap{fill:#151515;stroke:#fff;stroke-width:.8;vector-effect:non-scaling-stroke}
.capital-label{font:600 6.5px/1 'Sora',sans-serif;fill:rgba(255,255,255,.9);pointer-events:none;paint-order:stroke;stroke:rgba(0,0,0,.55);stroke-width:1.5px}
.mk{cursor:pointer;outline:none}
.mk:focus-visible .pin{stroke:#ffd86b;stroke-width:2.5}
.mk .pin{transition:.2s}
.mk:hover .pin{transform:scale(1.25);transform-origin:center}
.mk .pulse{transform-origin:center;animation:mkpulse 2.6s ease-out infinite}
@keyframes mkpulse{0%{opacity:.7;transform:scale(.6)}70%{opacity:0;transform:scale(2.6)}100%{opacity:0}}
@media (prefers-reduced-motion:reduce){.mk .pulse{display:none}.region{transition:none}}
.map-legend{position:absolute;bottom:14px;left:14px;display:flex;flex-direction:column;gap:6px;background:rgba(6,12,9,.7);backdrop-filter:blur(8px);padding:10px 13px;border-radius:12px;border:1px solid var(--stroke);font-size:11.5px}
.map-legend span{display:flex;align-items:center;gap:7px;color:var(--muted)}

/* modal */
.modal-bg{position:fixed;inset:0;z-index:100;background:rgba(3,7,5,.72);backdrop-filter:blur(6px);display:grid;place-items:center;padding:20px;animation:fadeIn .25s}
.modal{width:min(720px,calc(100vw - 40px));max-height:88vh;overflow-y:auto;border-radius:20px;background:var(--elev);border:1px solid var(--stroke2);box-shadow:0 40px 100px rgba(0,0,0,.3);animation:fadeUp .35s}
.modal-h{display:flex;justify-content:space-between;align-items:flex-start;gap:12px;padding:20px 22px;border-bottom:1px solid var(--stroke);position:sticky;top:0;background:var(--elev)}
.modal-h h3{font-size:18px}.modal-h .sub{color:var(--muted);font-size:12.5px;margin-top:4px}
.x{width:34px;height:34px;border-radius:10px;border:1px solid var(--stroke);background:var(--panel);color:var(--muted);font-size:18px;display:grid;place-items:center}
.x:hover{color:var(--txt)}
.modal-b{padding:20px 22px}
/* toast */
#toast-root{position:fixed;bottom:22px;right:22px;z-index:200;display:flex;flex-direction:column;gap:10px}
.toast{display:flex;align-items:center;gap:11px;padding:13px 16px;border-radius:13px;background:var(--elev);border:1px solid var(--stroke2);box-shadow:0 20px 50px rgba(0,0,0,.25);font-size:13.5px;font-weight:600;animation:fadeUp .3s;max-width:340px}
.toast .tb{width:32px;height:32px;border-radius:9px;display:grid;place-items:center;flex-shrink:0}
.toast svg{width:17px;height:17px;stroke:#04140b;fill:none;stroke-width:2}
/* chatbot */
.fab{position:fixed;bottom:24px;right:24px;z-index:90;width:60px;height:60px;border-radius:50%;background:var(--grad-green);border:0;display:grid;place-items:center;box-shadow:0 14px 40px rgba(58,208,122,.4);animation:pulse 3s ease-in-out infinite}
.fab svg{width:26px;height:26px;stroke:#04140b;fill:none;stroke-width:2}
.chatbox{position:fixed;bottom:96px;right:24px;z-index:91;width:min(360px,92vw);border-radius:20px;overflow:hidden;background:var(--elev);border:1px solid var(--stroke2);box-shadow:0 30px 80px rgba(0,0,0,.6);animation:fadeUp .3s}
.chat-h{display:flex;align-items:center;gap:11px;padding:15px 17px;background:linear-gradient(135deg,rgba(58,208,122,.16),rgba(232,198,106,.08));border-bottom:1px solid var(--stroke)}
.chat-h .ai-orb{width:30px;height:30px}
.chat-h b{font-family:'Sora';font-size:14px}.chat-h small{color:var(--muted);font-size:11px}
.chat-body{padding:16px;height:300px;overflow-y:auto;display:flex;flex-direction:column;gap:10px}
.msg{max-width:82%;padding:10px 13px;border-radius:14px;font-size:13px;line-height:1.45}
.msg.bot{background:var(--panel2);border:1px solid var(--stroke);border-bottom-left-radius:4px;align-self:flex-start}
.msg.usr{background:var(--grad-green);color:#04140b;font-weight:600;border-bottom-right-radius:4px;align-self:flex-end}
.chat-q{display:flex;flex-wrap:wrap;gap:7px;padding:12px 16px;border-top:1px solid var(--stroke)}
.chat-q button{border:1px solid var(--stroke2);background:var(--panel);color:var(--txt);font-size:12px;font-weight:600;padding:7px 11px;border-radius:20px}
.chat-q button:hover{background:var(--grad-green);color:#04140b;border-color:transparent}
.tl{position:relative;padding-left:26px}
.tl::before{content:'';position:absolute;left:7px;top:4px;bottom:4px;width:2px;background:linear-gradient(180deg,var(--green),var(--gold))}
.tl-i{position:relative;padding:0 0 20px}
.tl-i::before{content:'';position:absolute;left:-23px;top:3px;width:12px;height:12px;border-radius:50%;background:var(--green);box-shadow:0 0 0 4px rgba(58,208,122,.15)}
.tl-i b{font-family:'Sora';font-size:14px}.tl-i .yr{color:var(--gold);font-weight:800;font-size:12px}
.tl-i p{color:var(--muted);font-size:13px;margin:5px 0 0;line-height:1.5}
.prod{border-radius:var(--r);overflow:hidden;transition:.3s;cursor:pointer}
.prod:hover{transform:translateY(-6px);border-color:var(--stroke2)}
.prod-b{padding:15px}
.prod-b h4{font-size:15px}.prod-b p{color:var(--muted);font-size:12.5px;margin:5px 0 0;line-height:1.45}
.hero-pub{position:relative;border-radius:24px;overflow:hidden;padding:clamp(28px,5vw,60px);background:radial-gradient(120% 140% at 80% 0%,#12432a,#07110b);border:1px solid var(--stroke);color:#eef7f0}
.hero-pub .eyebrow{margin-bottom:16px;color:#8ff0b0;background:rgba(255,255,255,.1);border-color:rgba(255,255,255,.2)}
.hero-scene{position:absolute;inset:0;z-index:0}
.hero-scene>svg{position:absolute;inset:0;width:100%;height:100%}
.hero-scene>img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}
.hero-scene::after{content:'';position:absolute;inset:0;background:linear-gradient(90deg,rgba(6,17,11,.92),rgba(6,17,11,.62) 55%,rgba(6,17,11,.25))}
.hero-pub>*{position:relative;z-index:1}
.hero-pub h1{font-size:clamp(30px,5vw,54px);font-weight:800;letter-spacing:-1px;max-width:800px}
.hero-pub p{color:rgba(255,255,255,.82);font-size:clamp(15px,2vw,19px);max-width:620px;margin:16px 0 26px;line-height:1.55}
.hero-cta{display:flex;gap:12px;flex-wrap:wrap}
.hero-badges{position:absolute;right:40px;bottom:40px;display:flex;flex-direction:column;gap:10px}
@media(max-width:920px){.hero-badges{display:none}}
.flow{display:flex;align-items:stretch;gap:0;flex-wrap:wrap}
.flow-node{flex:1;min-width:120px;padding:16px;border-radius:14px;background:var(--panel);border:1px solid var(--stroke);text-align:center;position:relative}
.flow-node .fn-ic{width:44px;height:44px;border-radius:12px;margin:0 auto 10px;display:grid;place-items:center;background:var(--grad-green)}
.flow-node .fn-ic svg{width:22px;height:22px;stroke:#04140b;fill:none;stroke-width:1.8}
.flow-node b{font-size:13px;display:block}.flow-node span{font-size:11px;color:var(--muted)}
.flow-arrow{display:grid;place-items:center;color:var(--green);font-size:20px;padding:0 4px;align-self:center}
@media(max-width:920px){.flow-arrow{transform:rotate(90deg)}}
.slider-row{display:flex;align-items:center;gap:14px;margin-bottom:16px}
.slider-row label{font-size:13px;font-weight:600;flex:1}
.slider-row .sv{font-family:'Sora';font-weight:800;color:var(--green);min-width:110px;text-align:right}
input[type=range]{-webkit-appearance:none;appearance:none;width:100%;height:6px;border-radius:20px;background:var(--stroke2);outline:none}
input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;width:20px;height:20px;border-radius:50%;background:#3ad07a;cursor:pointer;box-shadow:0 3px 10px rgba(58,208,122,.5)}
input[type=range]::-moz-range-thumb{width:20px;height:20px;border:0;border-radius:50%;background:#3ad07a;cursor:pointer}
.big-num{font-family:'Sora';font-size:clamp(24px,4vw,38px);font-weight:800;letter-spacing:-1px}
.form-g{display:flex;flex-direction:column;gap:6px;margin-bottom:14px}
.form-g label{font-size:12.5px;font-weight:600;color:var(--muted)}
.form-g input,.form-g select,.form-g textarea{background:var(--panel);border:1px solid var(--stroke);border-radius:11px;padding:11px 13px;color:var(--txt);font-family:inherit;font-size:13.5px}
.form-g input:focus,.form-g textarea:focus,.form-g select:focus{border-color:var(--green);outline:none}
.portal-pick{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;margin-top:6px}
@media(max-width:820px){.portal-pick{grid-template-columns:1fr}}
.pp{padding:20px;border-radius:16px;background:var(--panel);border:1px solid var(--stroke);cursor:pointer;transition:.25s}
.pp:hover{transform:translateY(-6px);border-color:var(--green);box-shadow:0 20px 50px rgba(0,0,0,.4)}
.pp .pp-ic{width:46px;height:46px;border-radius:12px;display:grid;place-items:center;margin-bottom:12px}
.pp .pp-ic svg{width:23px;height:23px;stroke:#04140b;fill:none;stroke-width:1.8}
.notif-panel{position:absolute;top:60px;right:26px;width:340px;border-radius:16px;background:var(--elev);border:1px solid var(--stroke2);box-shadow:0 30px 70px rgba(0,0,0,.6);z-index:40;overflow:hidden;animation:fadeUp .25s}
.notif-i{display:flex;gap:11px;padding:13px 16px;border-bottom:1px solid var(--stroke);font-size:13px}
.notif-i:last-child{border-bottom:0}
.notif-i .nd{width:9px;height:9px;border-radius:50%;margin-top:5px;flex-shrink:0}
.notif-i small{color:var(--muted2);font-size:11px}
.ph{position:relative;border-radius:14px;overflow:hidden;border:1px solid var(--stroke);background:#0f3322}
.ph>svg{position:absolute;inset:0;width:100%;height:100%}
.ph>img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;z-index:1}
.ph-grad{position:absolute;inset:0;z-index:2;background:linear-gradient(180deg,transparent 42%,rgba(4,14,8,.66))}
.ph-tag{position:absolute;top:10px;left:12px;z-index:3}
.ph-cap{position:absolute;bottom:11px;left:14px;right:14px;z-index:3;color:#fff;font-weight:700;font-size:13.5px;text-shadow:0 2px 10px rgba(0,0,0,.55);font-family:'Sora'}
.ph-cap small{display:block;font-weight:500;font-size:11.5px;color:rgba(255,255,255,.85);margin-top:2px;font-family:'Manrope';text-shadow:0 1px 6px rgba(0,0,0,.6)}
.gallery{display:grid;grid-template-columns:repeat(4,1fr);gap:12px}
@media(max-width:920px){.gallery{grid-template-columns:repeat(2,1fr)}}
.g-thumb{position:relative;height:130px;border-radius:14px;overflow:hidden;cursor:pointer;transition:.3s;border:1px solid var(--stroke)}
.g-thumb:hover{transform:translateY(-4px);box-shadow:var(--shhover)}
.g-thumb .play{position:absolute;inset:0;z-index:4;display:grid;place-items:center}
.g-thumb .play span{width:42px;height:42px;border-radius:50%;background:rgba(255,255,255,.9);display:grid;place-items:center;color:#0f5c37;box-shadow:0 6px 18px rgba(0,0,0,.35)}
.g-thumb .play svg{width:18px;height:18px;fill:#0f5c37;stroke:none}
.theme-btn svg{width:19px;height:19px;stroke:currentColor;fill:none;stroke-width:1.8}
[data-theme=dark] .land .theme-btn,[data-theme=dark] .land .theme-btn:hover{color:#fff}
.plat-scene{height:118px;margin:-26px -26px 18px;position:relative;border-bottom:1px solid var(--stroke)}
.mod-hero{margin-bottom:18px}

/* ============ SITE WEB PUBLIC (en-tete + pied de page) ============
   Utilise uniquement par la plateforme 'public' (renderSiteShell). Les autres
   plateformes conservent la barre laterale .layout/.sidebar. */
.site{min-height:100vh;display:flex;flex-direction:column;position:relative;z-index:1}
.site-hd{position:sticky;top:0;z-index:50;background:var(--surface);backdrop-filter:blur(16px);-webkit-backdrop-filter:blur(16px);border-bottom:1px solid var(--stroke);transition:box-shadow .3s,background .3s}
.site-hd.scrolled{box-shadow:0 8px 30px rgba(24,55,40,.10)}
.site-hd-in{max-width:1260px;margin:0 auto;display:flex;align-items:center;gap:18px;padding:12px clamp(16px,4vw,40px)}
.site-brand{display:flex;align-items:center;gap:11px;text-decoration:none;color:inherit;white-space:nowrap}
.site-brand .logo{width:38px;height:38px;border-radius:10px;background:var(--grad-green);display:grid;place-items:center;box-shadow:0 6px 18px rgba(31,175,96,.32)}
.site-brand .logo svg{width:21px;height:21px;stroke:#04140b;fill:none;stroke-width:2}
.site-brand b{font-family:'Sora';font-size:16px;line-height:1.05;display:block}
.site-brand small{display:block;font-size:9.5px;color:var(--muted);letter-spacing:2px;font-weight:600}
.site-nav{margin-left:auto;display:flex;align-items:center;gap:3px}
.site-hd .nav-i{padding:8px 13px;border-radius:9px;color:var(--muted);font-weight:600;font-size:14px;border:1px solid transparent;text-decoration:none;transition:.16s}
.site-hd .nav-i:hover{color:var(--txt);background:var(--panel)}
.site-hd .nav-i.on{color:var(--nav-on);background:rgba(31,175,96,.12)}
.site-hd .nav-i.on::before{display:none}
.site-hd-act{display:flex;align-items:center;gap:10px}
.site-nav-cta{display:none}                 /* CTA de secours affiche seulement dans le tiroir mobile */
.site-cta{white-space:nowrap}
.site-burger{display:none;width:42px;height:42px;border-radius:11px;background:var(--panel);border:1px solid var(--stroke);place-items:center;color:var(--txt)}
.site-burger svg{width:22px;height:22px;stroke:currentColor;fill:none;stroke-width:2}
.site .site-screen{max-width:1260px;width:100%;margin:0 auto;padding:30px clamp(16px,4vw,40px) 72px}

/* Pied de page */
.site-ft{margin-top:auto;background:var(--surface);border-top:1px solid var(--stroke);backdrop-filter:blur(14px)}
.site-ft-in{max-width:1260px;margin:0 auto;padding:52px clamp(16px,4vw,40px) 30px;display:grid;grid-template-columns:1.7fr 1fr 1.1fr 1fr;gap:34px}
.site-ft h4{font-size:12.5px;text-transform:uppercase;letter-spacing:1.2px;color:var(--muted2);margin-bottom:15px}
.site-ft .ft-brand .site-brand{margin-bottom:6px}
.site-ft .ft-brand p{color:var(--muted);font-size:13.5px;line-height:1.6;margin:14px 0;max-width:340px}
.ft-badges{display:flex;gap:8px;flex-wrap:wrap}
.ft-badges span{font-size:11px;font-weight:700;letter-spacing:.5px;color:var(--muted);padding:4px 10px;border-radius:100px;background:var(--panel);border:1px solid var(--stroke)}
.ft-links{display:flex;flex-direction:column;gap:10px}
.ft-links a,.ft-contact span{color:var(--muted);text-decoration:none;font-size:14px;display:flex;align-items:center;gap:9px}
.ft-links a:hover{color:var(--txt)}
.ft-contact svg,.ft-links a svg{width:16px;height:16px;stroke:currentColor;fill:none;stroke-width:1.8;flex-shrink:0;color:var(--green)}
.site-ft-bar{border-top:1px solid var(--stroke)}
.site-ft-bar{max-width:1260px;margin:0 auto;padding:18px clamp(16px,4vw,40px);display:flex;justify-content:space-between;gap:12px;flex-wrap:wrap;color:var(--muted2);font-size:12.5px}

@media(max-width:940px){
 .site-nav{position:absolute;top:100%;left:0;right:0;margin:0;flex-direction:column;align-items:stretch;gap:2px;background:var(--elev);border-bottom:1px solid var(--stroke);box-shadow:0 24px 44px rgba(0,0,0,.16);padding:12px clamp(16px,4vw,40px) 16px;display:none}
 .site-hd.open .site-nav{display:flex}
 .site-hd .nav-i{padding:12px 12px;font-size:15px;border-radius:10px}
 .site-nav-cta{display:inline-flex;justify-content:center;margin-top:8px}
 .site-cta{display:none}
 .site-burger{display:grid}
}
@media(max-width:520px){.site-lang{display:none}.site-brand small{display:none}}
@media(max-width:860px){.site-ft-in{grid-template-columns:1fr 1fr;gap:28px}.site-ft .ft-brand{grid-column:1/-1}}
@media(max-width:520px){.site-ft-in{grid-template-columns:1fr}}
