/* ProdMap — feuille de service : carte à gauche, liste à droite, catégories en bouts de gaffer */
:root{
  --bg:#e8eaeb; --surface:#f7f8f8; --ink:#15191c; --muted:#59636a; --line:#c8cdd1;
  --land:#d9dee1; --land-edge:#a9b1b7; --gaffer:#f2c230; --gaffer-ink:#1b1a12;
  --c-prod:#e2ae12; --c-mat:#2b6cd4; --c-vehic:#de5640; --c-studio:#25915c; --c-inst:#7d5bc4;
  --ok:#25915c; --warn:#b5520f; --focus:#2b6cd4;
  --f-display:"Big Shoulders Display","Arial Narrow","Roboto Condensed",Impact,sans-serif;
  --f-body:"IBM Plex Sans",system-ui,-apple-system,"Segoe UI",sans-serif;
  --f-mono:"IBM Plex Mono",ui-monospace,"SF Mono",Menlo,monospace;
  color-scheme:light;
}
@media (prefers-color-scheme: dark){:root:not([data-theme="light"]){
  --bg:#111416; --surface:#192024; --ink:#e7ebed; --muted:#97a2a9; --line:#2d353a;
  --land:#232b30; --land-edge:#46525a;
  --c-prod:#f0c033; --c-mat:#5b93f0; --c-vehic:#f07a63; --c-studio:#45b47c; --c-inst:#a487e6;
  --ok:#45b47c; --warn:#f0954f; --focus:#5b93f0; color-scheme:dark }}
:root[data-theme="dark"]{
  --bg:#111416; --surface:#192024; --ink:#e7ebed; --muted:#97a2a9; --line:#2d353a;
  --land:#232b30; --land-edge:#46525a;
  --c-prod:#f0c033; --c-mat:#5b93f0; --c-vehic:#f07a63; --c-studio:#45b47c; --c-inst:#a487e6;
  --ok:#45b47c; --warn:#f0954f; --focus:#5b93f0; color-scheme:dark }

*{box-sizing:border-box}
html{-webkit-text-size-adjust:100%}
body{background:var(--bg);color:var(--ink);font:15px/1.5 var(--f-body);margin:0;min-height:100vh;display:flex;flex-direction:column}
a{color:inherit}
:focus-visible{outline:2px solid var(--focus);outline-offset:2px}
[hidden]{display:none!important}
.wrap{padding-left:max(16px,env(safe-area-inset-left,0px));padding-right:max(16px,env(safe-area-inset-right,0px));max-width:1440px;margin:0 auto;width:100%}
.muted{color:var(--muted)}
.vh{position:absolute;width:1px;height:1px;opacity:0;pointer-events:none}

/* En-tête */
header.site{position:sticky;top:0;z-index:20;background:var(--bg);border-bottom:1px solid var(--line);padding-top:env(safe-area-inset-top,0px)}
.top{display:flex;align-items:center;gap:8px 20px;flex-wrap:wrap;padding-block:10px}
.logo{display:inline-block;background:var(--gaffer);color:var(--gaffer-ink);font:900 28px/1 var(--f-display);text-transform:uppercase;letter-spacing:.02em;padding:7px 16px 5px;text-decoration:none;
  clip-path:polygon(0 8%,4% 0,9% 10%,14% 2%,100% 0,96% 35%,100% 60%,97% 100%,91% 90%,86% 100%,0 100%,3% 60%);transform:rotate(-1.5deg)}
nav.tabs{display:flex;gap:2px;overflow-x:auto;flex:1;min-width:0;scrollbar-width:none}
nav.tabs a{font:700 17px/1 var(--f-display);text-transform:uppercase;letter-spacing:.04em;text-decoration:none;color:var(--muted);padding:10px 12px 8px;border-bottom:3px solid transparent;white-space:nowrap}
nav.tabs a[aria-current="page"]{color:var(--ink);border-bottom-color:var(--gaffer)}
nav.tabs a.acct{margin-left:auto;color:var(--ink)}
.badge{display:inline-block;margin-left:6px;font:500 11px/1 var(--f-mono);background:var(--warn);color:#fff;border-radius:9px;padding:3px 6px;vertical-align:2px}

main{padding-block:20px 48px;flex:1}
.intro{display:flex;flex-direction:column;gap:6px;margin-bottom:18px}
h1{font:800 clamp(30px,4.4vw,44px)/1 var(--f-display);text-transform:uppercase;letter-spacing:.01em;margin:0;text-wrap:balance}
h2{font:800 24px/1.1 var(--f-display);text-transform:uppercase;letter-spacing:.01em;margin:28px 0 10px}
.intro p,.lead{margin:0;color:var(--muted);max-width:66ch}
.stats{font:500 12px/1.3 var(--f-mono);color:var(--muted);text-transform:uppercase;letter-spacing:.06em;display:flex;gap:16px}
.stats b{color:var(--ink);font-weight:500;font-variant-numeric:tabular-nums}
.row-gap{display:flex;flex-wrap:wrap;gap:10px;margin-top:6px}

/* Grille carte + liste */
.grid{display:grid;grid-template-columns:minmax(0,1.25fr) minmax(0,1fr);gap:20px;align-items:start}
.grid.people{grid-template-columns:minmax(0,1fr) minmax(0,1.1fr)}
@media (max-width:860px){.grid,.grid.people{grid-template-columns:minmax(0,1fr)}}
.mapbox{position:sticky;top:76px;background:var(--surface);border:1px solid var(--line);border-radius:6px;overflow:hidden;height:clamp(340px,74vh,820px);isolation:isolate}
@media (max-width:860px){.mapbox{position:relative;top:0;height:clamp(320px,92vw,520px)}}
#map{position:absolute;inset:0;background:#1d2a33}
.leaflet-container{font-family:var(--f-body)}
.pm-pin span{display:block;width:100%;height:100%;border-radius:50%;border:2.5px solid #fff;box-shadow:0 1px 4px rgba(0,0,0,.55)}
.pm-pin.sel span{border-color:#111;box-shadow:0 0 0 3px #fff,0 2px 8px rgba(0,0,0,.6)}
.pm-cluster{display:grid;place-items:center;background:rgba(21,25,28,.88);color:#fff;border:2.5px solid #fff;border-radius:50%;font:600 13px var(--f-mono);box-shadow:0 1px 6px rgba(0,0,0,.5)}
.leaflet-tooltip{font:500 13px var(--f-body)}
.mapctl{position:absolute;right:10px;top:10px;display:flex;flex-direction:column;gap:6px;z-index:500}
.mapctl button,.jump button,.basesw button{font:600 13px var(--f-mono);background:var(--surface);color:var(--ink);border:1px solid var(--line);border-radius:4px;min-width:34px;height:34px;cursor:pointer;box-shadow:0 1px 4px rgba(0,0,0,.25)}
.mapctl button:hover,.jump button:hover,.basesw button:hover{border-color:var(--ink)}
.jump{position:absolute;left:10px;bottom:22px;right:56px;display:flex;flex-wrap:wrap;gap:6px;z-index:500}
.jump button{height:30px;padding:0 10px;font-size:12px}
.basesw{position:absolute;left:10px;top:10px;display:flex;z-index:500;box-shadow:0 1px 4px rgba(0,0,0,.25);border-radius:4px}
.basesw button{height:32px;padding:0 12px;font-size:12px;box-shadow:none;border-radius:0}
.basesw button:first-child{border-radius:4px 0 0 4px}.basesw button:last-child{border-radius:0 4px 4px 0;border-left:0}
.basesw button[aria-pressed="true"]{background:var(--gaffer);color:var(--gaffer-ink);border-color:var(--gaffer)}

.side{display:flex;flex-direction:column;gap:14px;min-width:0}
.search{font:15px var(--f-body);padding:11px 12px;border:1px solid var(--line);border-radius:4px;background:var(--surface);color:var(--ink);width:100%}
.chips{display:flex;flex-wrap:wrap;gap:8px}
.tape{--c:var(--muted);display:inline-flex;align-items:center;gap:6px;font:700 15px/1 var(--f-display);text-transform:uppercase;letter-spacing:.04em;padding:7px 12px 6px;border:0;cursor:pointer;
  background:var(--c);color:#fff;clip-path:polygon(0 0,100% 0,97% 25%,100% 50%,97% 75%,100% 100%,0 100%,3% 75%,0 50%,3% 25%)}
.tape[data-cat="prod"]{--c:var(--c-prod);color:var(--gaffer-ink)}
.tape[data-cat="mat"]{--c:var(--c-mat)} .tape[data-cat="vehic"]{--c:var(--c-vehic)} .tape[data-cat="studio"]{--c:var(--c-studio)} .tape[data-cat="inst"]{--c:var(--c-inst)}
.tape[data-cat="audiovisuel"]{--c:var(--c-mat)} .tape[data-cat="evenementiel"]{--c:var(--c-vehic)} .tape[data-cat="les-deux"]{--c:var(--c-studio)}
.tape[aria-pressed="false"]{background:transparent;color:var(--muted);box-shadow:inset 0 0 0 1.5px var(--line);clip-path:none;border-radius:2px}
.tape .n{font:500 11px var(--f-mono);opacity:.85}
.tape.small{font-size:13px;padding:5px 9px 4px;cursor:default}

.detail{background:var(--surface);border:1px solid var(--line);border-radius:6px;padding:16px 18px;display:flex;flex-direction:column;gap:10px;min-width:0}
.detail.sticky{position:sticky;top:76px}
@media (max-width:860px){.detail.sticky{position:static}}
.detail h2{font-size:28px;margin:0;line-height:1.05;text-wrap:balance}
.meta{font:500 12px var(--f-mono);color:var(--muted);text-transform:uppercase;letter-spacing:.05em}
.detail p{margin:0;max-width:62ch;overflow-wrap:anywhere}
.links{display:flex;flex-wrap:wrap;gap:8px}
.gate{border:1.5px dashed var(--line);border-radius:6px;padding:14px;display:flex;flex-direction:column;gap:10px;align-items:flex-start}
.gate p{margin:0}
.kv{display:grid;grid-template-columns:auto minmax(0,1fr) auto;gap:6px 12px;align-items:center}
.kv dt{font:500 12px var(--f-mono);color:var(--muted);text-transform:uppercase;letter-spacing:.05em}
.kv dd{margin:0;overflow-wrap:anywhere;user-select:text}
.src{font:500 11px var(--f-mono);color:var(--muted)}

.btn{font:600 14px var(--f-body);display:inline-flex;align-items:center;gap:6px;padding:8px 13px;border-radius:4px;border:1px solid var(--line);background:var(--surface);color:var(--ink);text-decoration:none;cursor:pointer}
.btn:hover{border-color:var(--ink)}
.btn:disabled{opacity:.55;cursor:default}
.btn.primary{background:var(--ink);color:var(--surface);border-color:var(--ink)}
.btn.ok{background:var(--ok);border-color:var(--ok);color:#fff}
.btn.danger{color:var(--warn);border-color:currentColor;background:transparent}
.btn.mini{padding:4px 8px;font-size:12.5px}
.linkbtn{all:unset;cursor:pointer;color:var(--muted);text-decoration:underline;font-size:14px}
.linkbtn:focus-visible{outline:2px solid var(--focus)}

.listhead{display:flex;justify-content:space-between;align-items:baseline;gap:8px;font:500 12px var(--f-mono);color:var(--muted);text-transform:uppercase;letter-spacing:.06em}
ul.list{list-style:none;margin:0;padding:0;border-top:1px solid var(--line)}
ul.list li{border-bottom:1px solid var(--line)}
ul.list button{all:unset;box-sizing:border-box;display:grid;grid-template-columns:10px minmax(0,1fr) auto;gap:4px 12px;align-items:baseline;width:100%;padding:11px 6px;cursor:pointer}
ul.list button:hover,ul.list button[aria-selected="true"]{background:var(--surface)}
ul.list button:focus-visible{outline:2px solid var(--focus);outline-offset:-2px}
ul.plain li{padding:10px 4px;display:flex;justify-content:space-between;gap:12px;flex-wrap:wrap}
.dot{width:10px;height:10px;border-radius:50%;align-self:center}
.nm{font-weight:600;min-width:0;overflow-wrap:anywhere}
.ct{font:500 12px var(--f-mono);color:var(--muted);text-align:right}
.ds{grid-column:2/4;color:var(--muted);font-size:13.5px;min-width:0}
.empty{padding:22px 4px;color:var(--muted)}
.status{font:500 11px var(--f-mono);text-transform:uppercase;letter-spacing:.06em;padding:3px 7px;border-radius:3px;border:1px solid currentColor}
.status.pending{color:var(--warn)} .status.published{color:var(--ok)} .status.rejected{color:var(--muted)}

/* Avis */
.reviews{display:flex;flex-direction:column;gap:10px;border-top:1px solid var(--line);padding-top:12px}
.review{display:flex;flex-direction:column;gap:2px}
.stars{color:var(--c-prod);letter-spacing:2px;font-size:15px}
.starpick{display:flex;gap:2px}
.starpick button{all:unset;cursor:pointer;font-size:24px;color:var(--line);padding:0 2px}
.starpick button[aria-pressed="true"]{color:var(--c-prod)}
.starpick button:focus-visible{outline:2px solid var(--focus)}

/* Formulaires */
.panel{max-width:780px;display:flex;flex-direction:column;gap:14px}
.panel.wide{max-width:1100px}
form.f,.f{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px 16px;background:var(--surface);border:1px solid var(--line);border-radius:6px;padding:18px}
@media (max-width:600px){form.f,.f{grid-template-columns:minmax(0,1fr)}}
.f h2{margin:0}
.full{grid-column:1/-1}
.fld{display:flex;flex-direction:column;gap:5px;min-width:0}
.fld label{font:600 12px var(--f-mono);text-transform:uppercase;letter-spacing:.06em;color:var(--muted)}
.fld input,.fld select,.fld textarea{font:15px var(--f-body);padding:10px 11px;border:1px solid var(--line);border-radius:4px;background:var(--bg);color:var(--ink);width:100%}
.fld textarea{min-height:96px;resize:vertical}
.fld small{color:var(--muted);font-size:12.5px}
.check{display:flex;gap:10px;align-items:flex-start;font-size:14.5px}
.check input{margin-top:3px;width:17px;height:17px;flex:none}
fieldset.opts{border:1px solid var(--line);border-radius:4px;padding:10px 14px 12px;display:flex;flex-wrap:wrap;gap:8px 22px}
fieldset.opts legend{font:600 12px var(--f-mono);text-transform:uppercase;letter-spacing:.06em;color:var(--muted);padding:0 6px}
.formrow{grid-column:1/-1;display:flex;flex-wrap:wrap;align-items:center;gap:12px}
.msg{font-size:14px;margin:0}
.msg.ok{color:var(--ok)} .msg.err{color:var(--warn)}
.seg{display:inline-flex;border:1px solid var(--line);border-radius:4px;overflow:hidden;width:max-content;max-width:100%}
.seg button{all:unset;cursor:pointer;padding:9px 14px;font:600 14px var(--f-body);color:var(--muted)}
.seg button[aria-selected="true"]{background:var(--ink);color:var(--surface)}
.seg button:focus-visible{outline:2px solid var(--focus);outline-offset:-2px}
.acct-head{display:flex;flex-wrap:wrap;align-items:baseline;gap:6px 16px}
.cvbox{margin-top:14px}

/* Modération */
.mod{display:flex;flex-direction:column;gap:12px}
.card{background:var(--surface);border:1px solid var(--line);border-radius:6px;padding:14px 16px;display:flex;flex-direction:column;gap:10px}
.card h3{margin:0;font:800 22px/1.1 var(--f-display);text-transform:uppercase}
.card .row{display:flex;flex-wrap:wrap;gap:10px;align-items:end}
.card .row .fld{width:130px}

/* Pages légales */
.legal h2{font-size:22px}
.legal p,.legal li{max-width:72ch}
.todo{background:var(--gaffer);color:var(--gaffer-ink);padding:0 4px;font-weight:600}

.site-foot{display:flex;flex-wrap:wrap;justify-content:space-between;gap:10px 20px;padding-block:18px calc(18px + env(safe-area-inset-bottom,0px));border-top:1px solid var(--line);color:var(--muted);font-size:13.5px}
.site-foot nav{display:flex;flex-wrap:wrap;gap:16px}
.toast{position:fixed;left:50%;bottom:calc(20px + env(safe-area-inset-bottom,0px));transform:translateX(-50%);background:var(--ink);color:var(--surface);padding:10px 16px;border-radius:4px;font-size:14px;z-index:50;max-width:calc(100% - 32px)}
@media (prefers-reduced-motion: reduce){*{transition:none!important;scroll-behavior:auto!important}}

/* Fiche société : formulaire et infos légales */
.cform{display:flex;flex-direction:column;gap:16px}
.grid2{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px 16px}
@media (max-width:600px){.grid2{grid-template-columns:minmax(0,1fr)}}
.grid2 .sub{font:700 17px/1.1 var(--f-display);text-transform:uppercase;letter-spacing:.04em;margin:8px 0 -4px;color:var(--ink)}
.grid2 .sub .muted{font:400 12px var(--f-body);text-transform:none;letter-spacing:0}
.lbl{font:600 12px var(--f-mono);text-transform:uppercase;letter-spacing:.06em;color:var(--muted)}
.lookup{display:flex;flex-direction:column;gap:6px;background:var(--bg);border:1.5px dashed var(--line);border-radius:6px;padding:12px}
.lookrow{display:flex;gap:8px}
.lookrow input{flex:1;min-width:0;font:15px var(--f-body);padding:10px 11px;border:1px solid var(--line);border-radius:4px;background:var(--surface);color:var(--ink)}
.lkres{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:6px}
.lkres button{all:unset;box-sizing:border-box;width:100%;display:flex;flex-direction:column;gap:2px;padding:9px 11px;border:1px solid var(--line);border-radius:4px;background:var(--surface);cursor:pointer;font-size:14px}
.lkres button:hover{border-color:var(--ink)}
.lkres button:focus-visible{outline:2px solid var(--focus)}
.lkres .muted{font-size:12.5px}
.phones{display:flex;flex-direction:column;gap:6px}
.phone{display:flex;gap:6px}
.phone input{flex:1;min-width:0;font:15px var(--f-body);padding:10px 11px;border:1px solid var(--line);border-radius:4px;background:var(--bg);color:var(--ink)}
.kv2{display:grid;grid-template-columns:auto minmax(0,1fr);gap:5px 14px;margin:0;font-size:14px;border-top:1px solid var(--line);padding-top:10px}
.kv2 dt{font:500 11.5px var(--f-mono);color:var(--muted);text-transform:uppercase;letter-spacing:.05em;padding-top:2px}
.kv2 dd{margin:0;overflow-wrap:anywhere}
