:root{
  --blue:#0b3444; --blue2:#0f5f78; --sea:#22a6b3; --sand:#f4dfb8; --sun:#ffb347;
  --bg:#f6f8fb; --card:#ffffff; --text:#172b35; --muted:#667985; --line:#e4ebef;
  --danger:#c0392b; --ok:#15803d; --warn:#b45309;
}
*{box-sizing:border-box}
body{margin:0;font-family:system-ui,-apple-system,Segoe UI,Roboto,Arial,sans-serif;background:var(--bg);color:var(--text);line-height:1.55}
a{color:var(--blue2);text-decoration:none}a:hover{text-decoration:underline}
.container{width:min(1180px,92vw);margin:0 auto}.narrow{width:min(860px,92vw)}
.site-header{position:sticky;top:0;z-index:50;background:rgba(255,255,255,.94);backdrop-filter:blur(12px);border-bottom:1px solid var(--line)}
.header-inner{display:flex;align-items:center;justify-content:space-between;gap:24px;min-height:76px}.brand{display:flex;align-items:center;gap:12px;color:var(--blue);font-weight:800;font-size:1.12rem}.brand-mark{width:42px;height:42px;border-radius:16px;background:linear-gradient(135deg,var(--blue),var(--sea));display:grid;place-items:center;color:white;box-shadow:0 8px 18px rgba(12,77,95,.22)}
.nav-toggle{display:none;border:1px solid var(--line);background:#fff;border-radius:12px;padding:10px 12px}
.nav-menu,.submenu{list-style:none;margin:0;padding:0}.nav-menu{display:flex;align-items:center;gap:6px}.nav-menu>li{position:relative}.nav-menu a{display:block;padding:10px 12px;border-radius:12px;color:var(--blue);font-weight:650}.nav-menu a:hover{background:#eef8fb;text-decoration:none}.submenu{display:none;position:absolute;top:100%;left:0;min-width:230px;background:white;border:1px solid var(--line);border-radius:18px;box-shadow:0 18px 40px rgba(18,48,60,.14);padding:8px}.has-children:hover>.submenu{display:block}.submenu .submenu{left:100%;top:0}.submenu a{white-space:nowrap;font-weight:550}
.hero{background:linear-gradient(135deg,rgba(11,52,68,.92),rgba(34,166,179,.74)),url('../img/placeholder.svg') center/cover; color:white;padding:88px 0 72px}.hero-grid{display:grid;grid-template-columns:1.25fr .75fr;gap:36px;align-items:center}.eyebrow{letter-spacing:.08em;text-transform:uppercase;font-weight:800;color:#e5f7fb;font-size:.8rem}.hero h1{font-size:clamp(2.2rem,5vw,4.7rem);line-height:1.02;margin:12px 0 18px}.hero p{font-size:1.18rem;max-width:760px;color:#effcff}.hero-card{background:rgba(255,255,255,.14);border:1px solid rgba(255,255,255,.28);border-radius:28px;padding:24px;box-shadow:0 24px 60px rgba(0,0,0,.2)}
.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;border:0;border-radius:999px;padding:11px 18px;font-weight:800;cursor:pointer;text-decoration:none}.btn:hover{text-decoration:none}.btn-primary{background:var(--sun);color:#3b2302}.btn-dark{background:var(--blue);color:white}.btn-light{background:white;color:var(--blue)}.btn-outline{background:white;border:1px solid var(--line);color:var(--blue)}.btn-danger{background:var(--danger);color:white}.btn-sm{padding:7px 11px;font-size:.88rem}.actions{display:flex;flex-wrap:wrap;gap:10px;margin-top:22px}
.section{padding:56px 0}.section-title{display:flex;align-items:end;justify-content:space-between;gap:20px;margin-bottom:24px}.section-title h2{font-size:clamp(1.65rem,3vw,2.45rem);margin:0;color:var(--blue)}.section-title p{max-width:650px;color:var(--muted);margin:8px 0 0}
.grid{display:grid;gap:20px}.grid-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-4{grid-template-columns:repeat(4,minmax(0,1fr))}
.card{background:var(--card);border:1px solid var(--line);border-radius:24px;box-shadow:0 12px 30px rgba(23,43,53,.06);overflow:hidden}.card-body{padding:20px}.card h3{margin:0 0 8px;color:var(--blue);font-size:1.2rem}.card p{color:var(--muted)}.card-img{width:100%;height:210px;object-fit:cover;background:#d8eef4}.card-meta{display:flex;flex-wrap:wrap;gap:8px;margin:10px 0}.badge{display:inline-flex;align-items:center;border-radius:999px;padding:4px 9px;font-weight:800;font-size:.78rem;background:#eef4f6;color:#38525d}.badge-ok{background:#dcfce7;color:#166534}.badge-warn{background:#ffedd5;color:#9a3412}.badge-muted{background:#e5e7eb;color:#4b5563}.badge-blue{background:#e0f2fe;color:#075985}.badge-gold{background:#fef3c7;color:#92400e}
.filters{background:white;border:1px solid var(--line);border-radius:24px;padding:18px;margin-bottom:24px;display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px}.field{display:flex;flex-direction:column;gap:6px}.field label{font-weight:750;color:#314852}.input,select,textarea{width:100%;border:1px solid var(--line);border-radius:14px;padding:11px 12px;font:inherit;background:white;color:var(--text)}textarea{min-height:130px}.form-row{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px}.form-card{background:white;border:1px solid var(--line);border-radius:24px;padding:22px;box-shadow:0 12px 30px rgba(23,43,53,.06)}
.page-hero{background:linear-gradient(135deg,#f7fbfd,#fff1d4);padding:46px 0;border-bottom:1px solid var(--line)}.page-hero h1{font-size:clamp(2rem,4vw,3.3rem);margin:0 0 10px;color:var(--blue)}.prose{font-size:1.06rem}.prose img{max-width:100%;border-radius:20px}.prose h2,.prose h3{color:var(--blue)}
.map-wrap{height:640px;border-radius:28px;overflow:hidden;border:1px solid var(--line);box-shadow:0 18px 40px rgba(23,43,53,.1)}#map{height:100%;width:100%}.leaflet-popup-content .btn{padding:7px 10px;font-size:.82rem;margin-top:8px}
.footer{background:#082b38;color:#d8edf2;padding:44px 0;margin-top:60px}.footer a{color:white}.footer-grid{display:grid;grid-template-columns:2fr 1fr 1fr;gap:24px}.footer h3{color:white;margin-top:0}.small{font-size:.9rem;color:var(--muted)}
.alert{border-radius:16px;padding:13px 15px;margin:12px 0;border:1px solid}.alert-success{background:#ecfdf5;color:#14532d;border-color:#bbf7d0}.alert-danger{background:#fef2f2;color:#7f1d1d;border-color:#fecaca}.alert-info{background:#eff6ff;color:#1e3a8a;border-color:#bfdbfe}
.table{width:100%;border-collapse:collapse;background:white;border-radius:18px;overflow:hidden;border:1px solid var(--line)}.table th,.table td{padding:12px;border-bottom:1px solid var(--line);text-align:left;vertical-align:top}.table th{background:#f4f8fa;color:#27424f}.admin-shell{display:grid;grid-template-columns:250px 1fr;min-height:100vh}.admin-sidebar{background:#0d1b2a;color:white;padding:20px}.admin-sidebar a{display:block;color:#dbeafe;padding:10px 12px;border-radius:12px;text-decoration:none}.admin-sidebar a:hover,.admin-sidebar a.active{background:#1b263b}.admin-main{padding:24px}.admin-top{display:flex;justify-content:space-between;align-items:center;margin-bottom:22px}.admin-card{background:white;border:1px solid var(--line);border-radius:22px;padding:20px;box-shadow:0 10px 24px rgba(23,43,53,.05)}
@media(max-width:900px){.hero-grid,.grid-3,.grid-4,.grid-2,.footer-grid,.form-row,.filters{grid-template-columns:1fr}.nav-toggle{display:block}.nav-menu{display:none;position:absolute;left:4vw;right:4vw;top:70px;background:white;border:1px solid var(--line);border-radius:20px;padding:12px;box-shadow:0 18px 40px rgba(18,48,60,.14)}.nav-menu.open{display:block}.submenu{position:static;display:block;box-shadow:none;border:0;padding-left:14px}.admin-shell{grid-template-columns:1fr}.admin-sidebar{position:static}.map-wrap{height:460px}}

/* Page mobilité : bus, parkings, recharge */
.mobility-page{font-size:1rem}.mobility-page h2,.mobility-page h3{color:var(--blue)}
.mobility-lead{display:grid;grid-template-columns:1.35fr .65fr;gap:22px;align-items:stretch;margin-bottom:22px}
.mobility-lead>div:first-child,.mobility-highlight,.mobility-section,.mobility-kpi,.parking-zone,.charge-list article,.scenario-grid>div{background:#fff;border:1px solid var(--line);border-radius:26px;box-shadow:0 12px 30px rgba(23,43,53,.06)}
.mobility-lead>div:first-child{padding:26px}.mobility-lead h2{font-size:clamp(1.9rem,4vw,3.1rem);line-height:1.05;margin:.4rem 0 1rem}.mobility-pill{display:inline-flex;border-radius:999px;background:#e0f2fe;color:#075985;font-weight:900;padding:6px 11px;font-size:.78rem;text-transform:uppercase;letter-spacing:.06em}.mobility-actions{display:flex;flex-wrap:wrap;gap:10px;margin-top:18px}.mobility-highlight{padding:24px;background:linear-gradient(145deg,#0b3444,#0f5f78);color:white}.mobility-highlight strong{font-size:1.3rem}.mobility-highlight p{color:#e7fbff;margin-bottom:0}
.mobility-kpis{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:14px;margin:22px 0}.mobility-kpi{padding:18px}.mobility-kpi strong{display:block;font-size:1.45rem;color:var(--blue)}.mobility-kpi span{color:var(--muted);font-weight:650}
.mobility-section{padding:26px;margin:22px 0}.mobility-section.soft{background:#f8fbfd}.section-title-inline{display:flex;align-items:center;gap:12px;margin-bottom:12px}.section-title-inline span{width:42px;height:42px;border-radius:16px;display:grid;place-items:center;background:var(--sun);color:#442400;font-weight:900}.section-title-inline h2{margin:0;font-size:clamp(1.45rem,3vw,2.1rem)}
.mobility-grid{display:grid;gap:16px;margin-top:18px}.mobility-grid.two{grid-template-columns:repeat(2,minmax(0,1fr))}.mobility-card{padding:20px;border-radius:22px;background:#fff;border:1px solid var(--line)}.mobility-card h3{margin-top:0}.mobility-card.warning{border-color:#fed7aa;background:#fff7ed}.mobility-card.ok{border-color:#bbf7d0;background:#f0fdf4}.text-link{font-weight:900}.parking-list{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px;margin-top:18px}.parking-zone{padding:20px}.parking-zone h3{margin-top:0}.parking-zone.featured{background:linear-gradient(145deg,#fff,#fff8e7);border-color:#fde68a}.parking-zone li{margin:.55rem 0}.charge-list{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px;margin-top:18px}.charge-list article{padding:20px}.charge-list h3{margin-top:0}.mobility-note{margin-top:18px;border-left:6px solid var(--sea);background:#eefbfc;border-radius:18px;padding:16px 18px;color:#23424d}.scenario-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:14px;margin-top:18px}.scenario-grid>div{padding:18px}.scenario-grid strong{display:block;color:var(--blue);font-size:1.05rem}.scenario-grid p{margin:.4rem 0 0;color:var(--muted)}.links-panel{background:linear-gradient(135deg,#0b3444,#0f5f78);color:white}.links-panel h2{color:white}.useful-links{display:flex;flex-wrap:wrap;gap:10px}.useful-links a{display:inline-flex;padding:10px 14px;border-radius:999px;background:rgba(255,255,255,.12);border:1px solid rgba(255,255,255,.25);color:white;font-weight:800;text-decoration:none}.useful-links a:hover{background:white;color:var(--blue)}
@media(max-width:900px){.mobility-lead,.mobility-kpis,.mobility-grid.two,.parking-list,.charge-list,.scenario-grid{grid-template-columns:1fr}.mobility-lead>div:first-child{padding:20px}}


/* Analytics admin */
.analytics-toolbar{display:flex;justify-content:space-between;align-items:flex-start;gap:18px;background:white;border:1px solid var(--line);border-radius:22px;padding:20px;box-shadow:0 10px 24px rgba(23,43,53,.05);margin-bottom:20px}.analytics-toolbar h2{margin:0;color:var(--blue)}
.analytics-kpis .admin-card strong,.analytics-kpis strong{display:block;font-size:2.2rem;line-height:1;color:var(--blue);margin-top:6px}.analytics-kpis .admin-card span,.analytics-kpis span{color:var(--muted);font-weight:800;text-transform:uppercase;font-size:.78rem;letter-spacing:.04em}.analytics-kpis>div:not(.admin-card){background:#f8fbfd;border:1px solid var(--line);border-radius:18px;padding:16px}
.analytics-bars{display:grid;gap:10px}.analytics-bar-row{display:grid;grid-template-columns:54px 1fr 60px 90px;gap:10px;align-items:center}.analytics-bar{height:14px;background:#edf3f6;border-radius:999px;overflow:hidden}.analytics-bar i{display:block;height:100%;background:linear-gradient(90deg,var(--sea),var(--blue2));border-radius:999px}.analytics-bar-row strong{color:var(--blue)}.analytics-bar-row em{font-style:normal;color:var(--muted);font-size:.86rem}.table.compact th,.table.compact td{padding:9px 10px;font-size:.94rem}
@media(max-width:900px){.analytics-toolbar{display:block}.analytics-bar-row{grid-template-columns:44px 1fr 44px}.analytics-bar-row em{grid-column:2 / 4}}

/* Pages légales / pied de page V1.3 */
.footer-grid-v13{grid-template-columns:1.7fr 1fr 1.1fr .9fr}.footer-menu,.footer-menu ul{list-style:none;margin:0;padding:0}.footer-menu li{margin:.35rem 0}.footer-menu ul{margin-left:12px;margin-top:4px}.footer .small{color:#b8d2d9}.legal-page{background:white;border:1px solid var(--line);border-radius:28px;padding:28px;box-shadow:0 12px 30px rgba(23,43,53,.06)}.legal-page h2{margin-top:1.6rem}.legal-page h2:first-child{margin-top:0}.legal-alert{border:1px solid #fde68a;background:#fffbeb;color:#784b00;border-radius:18px;padding:14px 16px;margin-bottom:20px}.legal-note{border-left:6px solid var(--sea);background:#eefbfc;border-radius:18px;padding:16px 18px;margin:18px 0}.legal-table-wrap{overflow-x:auto}.clean-list{list-style:none;margin:0;padding:0}.clean-list li{border-bottom:1px solid var(--line);padding:9px 0}.clean-list li:last-child{border-bottom:0}.sitemap-grid{display:grid;grid-template-columns:1fr 1fr 1fr;gap:18px}.legal-card{background:white;border:1px solid var(--line);border-radius:24px;padding:22px;box-shadow:0 12px 30px rgba(23,43,53,.06)}.legal-card h2{color:var(--blue);margin-top:0}
@media(max-width:900px){.footer-grid-v13,.sitemap-grid{grid-template-columns:1fr}.legal-page{padding:20px}}

/* V1.4 - Webcam plage */
.webcam-page .webcam-lead{
  font-size:1.08rem;
  color:#425466;
  max-width:900px;
}
.webcam-hero-grid{
  display:grid;
  grid-template-columns:1.6fr .9fr;
  gap:1.5rem;
  align-items:start;
  margin:1.5rem 0 2rem;
}
.webcam-embed-box{
  background:#fff;
  border:1px solid rgba(13,27,42,.08);
  border-radius:24px;
  box-shadow:0 18px 45px rgba(13,27,42,.10);
  overflow:hidden;
}
.webcam-frame{
  position:relative;
  width:100%;
  aspect-ratio:16/9;
  background:#0d1b2a;
}
.webcam-frame iframe{
  position:absolute;
  inset:0;
  width:100%;
  height:100%;
  border:0;
}
.webcam-source{
  margin:0;
  padding:.9rem 1rem;
  font-size:.92rem;
  background:#f6f8fb;
}
.webcam-fallback{
  padding:2rem;
}
.webcam-info-card{
  background:linear-gradient(135deg,#0d1b2a,#1b4965);
  color:#fff;
  border-radius:24px;
  padding:1.4rem;
  box-shadow:0 18px 45px rgba(13,27,42,.16);
}
.webcam-info-card h2,
.webcam-info-card h3{color:#fff;margin-top:0;}
.webcam-info-card ul{padding-left:1.1rem;margin-bottom:0;}
.webcam-actions{
  display:flex;
  gap:.7rem;
  flex-wrap:wrap;
  margin-top:1rem;
}
.webcam-section{
  background:#fff;
  border:1px solid rgba(13,27,42,.08);
  border-radius:24px;
  padding:1.4rem;
  margin:1rem 0;
}
.webcam-grid{
  display:grid;
  grid-template-columns:repeat(3,1fr);
  gap:1rem;
}
.webcam-mini-card{
  background:#f8fafc;
  border-radius:18px;
  padding:1rem;
  border:1px solid rgba(13,27,42,.06);
}
.webcam-mini-card strong{display:block;margin-bottom:.35rem;color:#0d1b2a;}
@media (max-width: 900px){
  .webcam-hero-grid,.webcam-grid{grid-template-columns:1fr;}
}
