:root{--bg:#f2f0e9;--ink:#13232f;--muted:#6b7680;--gold:#b59d74;--gold2:#d8c7a6;--card:#fff;--line:#c9c2b2;--ok:#2f7d4f;--warn:#b5651d;--bad:#a33;--blue:#1d4f6e;--r:16px;--sh:0 2px 10px rgba(19,35,47,.08)}
*{box-sizing:border-box}
html,body{margin:0;height:100%;background:var(--bg);color:var(--ink);font:14px/1.45 -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Helvetica,Arial,sans-serif}
h1,h2,h3,.serif{font-family:"Cormorant Garamond","EB Garamond",Georgia,"Times New Roman",serif;font-weight:500}
h1{font-size:30px;font-style:italic;margin:6px 0 4px}h2{font-size:24px;margin:18px 0 8px}h3{font-size:19px;margin:14px 0 6px}
a{color:var(--blue)}
button,input,select,textarea{font:inherit;color:inherit}
.btn{display:inline-flex;align-items:center;gap:6px;border:1px solid var(--line);background:#fff;border-radius:999px;padding:6px 14px;cursor:pointer;text-decoration:none;color:var(--ink);white-space:nowrap}
.btn:hover{border-color:var(--gold)}.btn.primary{background:var(--ink);color:#fff;border-color:var(--ink)}.btn.primary:hover{background:#22394a}
.btn.danger{color:var(--bad);border-color:#e3b7b7}.btn.small{padding:3px 10px;font-size:12.5px}.btn.big{padding:12px 22px;font-size:16px}.btn.icon{padding:6px 10px}
.btn:disabled{opacity:.5;cursor:default}
input[type=text],input[type=email],input[type=date],input[type=search],input[type=tel],select,textarea{border:1px solid var(--line);border-radius:10px;padding:7px 10px;background:#fff;width:100%}
textarea{min-height:70px;resize:vertical}
label.f{display:block;margin:8px 0}label.f>span{display:block;font-size:12px;color:var(--muted);margin-bottom:3px}
.hint{font-size:12px;color:var(--muted)}.warn{color:var(--warn)}.err{color:var(--bad)}.ok{color:var(--ok)}
.badge{display:inline-block;border:1px solid var(--gold2);color:#7d6a48;border-radius:999px;padding:1px 9px;font-size:11.5px;background:#fbf8f1;margin:2px 2px 0 0}
.badge.warn{border-color:#ebc9a6;color:var(--warn);background:#fff7ef}.badge.bad{border-color:#e9b9b9;color:var(--bad);background:#fff4f4}.badge.ok{border-color:#b8dcc5;color:var(--ok);background:#f2fbf5}
.avatar{border-radius:50%;object-fit:cover;background:#e8e3d8;border:2px solid var(--gold);display:inline-flex;align-items:center;justify-content:center;color:#7d6a48;font-weight:600;flex:none;overflow:hidden}
.avatar.vac{border-style:dashed;background:#faf8f3;color:var(--muted)}
/* login */
body.login{display:flex;align-items:center;justify-content:center;min-height:100vh}
.login-box{background:#fff;border-radius:22px;box-shadow:var(--sh);padding:40px 36px;max-width:420px;text-align:center}
.brand{font-family:"Cormorant Garamond",Georgia,serif;font-size:30px;letter-spacing:.08em;margin-bottom:10px}.brand span{font-style:italic;letter-spacing:0;color:var(--gold)}
.login-box .dev{margin-top:18px;display:flex;gap:6px}
/* header */
header.top{position:sticky;top:0;z-index:30;background:var(--ink);color:#fff;display:flex;align-items:center;gap:14px;padding:8px 16px;flex-wrap:wrap}
header.top .brand{font-size:22px;margin:0;color:#fff}
nav.tabs{display:flex;gap:4px;overflow-x:auto;flex:1}
nav.tabs a{color:#cfd6dc;text-decoration:none;padding:6px 12px;border-radius:999px;white-space:nowrap}
nav.tabs a.on,nav.tabs a:hover{background:rgba(255,255,255,.12);color:#fff}
nav.tabs .count{background:var(--gold);color:var(--ink);border-radius:999px;padding:0 6px;font-size:11px;margin-left:4px;font-weight:600}
.searchbox{position:relative;width:260px}.searchbox input{border-radius:999px;border:none;padding:7px 14px}
.sugg{position:absolute;top:110%;left:0;right:0;background:#fff;color:var(--ink);border-radius:12px;box-shadow:0 8px 30px rgba(0,0,0,.2);max-height:60vh;overflow:auto;z-index:50}
.sugg div{display:flex;gap:10px;align-items:center;padding:7px 10px;cursor:pointer}.sugg div:hover,.sugg div.on{background:#f4f1ea}
.sugg small{color:var(--muted);display:block}
.hdr-right{display:flex;gap:8px;align-items:center}
.bell{position:relative;background:none;border:none;color:#fff;cursor:pointer;width:36px;height:36px;border-radius:50%;display:inline-flex;align-items:center;justify-content:center;padding:0}.bell:hover{background:rgba(255,255,255,.12)}.bell svg{display:block}
.bell b{position:absolute;top:1px;right:0;min-width:18px;height:18px;line-height:18px;text-align:center;background:#e5484d;color:#fff;font-size:11px;font-weight:700;border-radius:999px;padding:0 5px;box-shadow:0 0 0 2px var(--ink)}
.menu{position:absolute;right:12px;top:52px;background:#fff;color:var(--ink);border-radius:14px;box-shadow:0 10px 40px rgba(0,0,0,.2);width:360px;max-height:70vh;overflow:auto;z-index:60;padding:8px}
.menu .n{padding:8px;border-bottom:1px solid #eee;font-size:13px}.menu .n.unread{background:#fbf8f1}.menu .n small{color:var(--muted);display:block}
main.page{padding:18px 22px;max-width:1300px;margin:0 auto}
/* chart */
.chart-wrap{position:fixed;top:var(--hdr,52px);left:0;right:0;bottom:0;overflow:hidden;background:radial-gradient(circle at 1px 1px,#dcd6c8 1px,transparent 0) 0 0/22px 22px}
.viewport{position:absolute;inset:0;cursor:grab;touch-action:none}.viewport.drag{cursor:grabbing}
.canvas{position:absolute;left:0;top:0;transform-origin:0 0}
.canvas.anim{transition:transform .45s cubic-bezier(.2,.7,.2,1)}
.canvas svg{position:absolute;left:0;top:0;overflow:visible;pointer-events:none}
.canvas path{fill:none;stroke:var(--line);stroke-width:2}
.node{position:absolute;width:340px;background:var(--card);border-radius:var(--r);box-shadow:var(--sh);border:1px solid #e6e0d3;overflow:hidden}
.node.hl{box-shadow:0 0 0 4px var(--gold),var(--sh)}
.node .nh{height:48px;padding:6px 12px;display:flex;align-items:center;gap:8px;border-bottom:1px solid #eee8dc;cursor:pointer;border-top:4px solid var(--uc,var(--gold))}
.node .nh .t{flex:1;min-width:0}.node .nh .t b{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-size:14px}
.node .nh .t small{color:var(--muted);font-size:11px;text-transform:uppercase;letter-spacing:.05em}
.node .nh .cnt{font-size:12px;color:var(--muted);white-space:nowrap}
.node .mgr{height:84px;display:flex;align-items:center;gap:12px;padding:0 14px;cursor:pointer;background:#fcfbf7;border-bottom:1px solid #f0ebe0}
.node .mgr .avatar{width:58px;height:58px;font-size:18px}
.node .mgr b{display:block;font-size:14.5px}.node .mgr small{color:var(--muted);display:block;line-height:1.25;max-height:2.5em;overflow:hidden}
.node .mem{padding:12px;display:grid;grid-template-columns:1fr 1fr;gap:8px}
.mc{height:64px;display:flex;align-items:center;gap:8px;border-radius:10px;padding:0 6px;cursor:pointer;min-width:0}
.mc:hover{background:#f6f3ec}.mc .avatar{width:40px;height:40px;font-size:13px;border-width:1.5px}
.mc span{min-width:0;font-size:12px;line-height:1.2}.mc b{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;font-weight:600;line-height:1.15;overflow-wrap:anywhere}
.mc small{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;color:var(--muted);font-size:11px;line-height:1.15;margin-top:2px}
.mc.vac{border:1.5px dashed var(--gold2)}.mc.arr{background:#f1f7f3}.mc.hl{box-shadow:0 0 0 3px var(--gold)}
.node .tog{height:28px;width:100%;border:none;border-top:1px solid #eee8dc;background:#faf8f3;cursor:pointer;font-size:12px;color:var(--muted)}
.node .tog:hover{background:#f3efe5;color:var(--ink)}
.node .big{display:none}
.far .node .nh,.far .node .mgr,.far .node .mem,.far .node .tog{visibility:hidden}
.far .node .big{display:flex;position:absolute;inset:0;align-items:center;justify-content:center;text-align:center;padding:10px;flex-direction:column;cursor:pointer;background:#fff;border-top:6px solid var(--uc,var(--gold))}
.far .node .big b{font-family:"Cormorant Garamond",Georgia,serif;font-size:clamp(22px,calc(11px / var(--s,1)),46px);line-height:1.05;max-width:100%;overflow-wrap:anywhere}
.far .node .big small{font-size:clamp(14px,calc(8px / var(--s,1)),30px);color:var(--muted);margin-top:6px}
.toolbar{position:absolute;left:14px;top:14px;display:flex;gap:6px;flex-wrap:wrap;z-index:5;align-items:center;max-width:calc(100% - 28px)}
.toolbar select{width:auto;max-width:240px;border-radius:999px}
.zoomlbl{font-size:12px;color:var(--muted);background:#fff;border-radius:999px;padding:4px 10px;border:1px solid var(--line)}
.minimap{position:absolute;right:14px;bottom:14px;width:200px;height:140px;background:rgba(255,255,255,.9);border:1px solid var(--line);border-radius:12px;overflow:hidden;z-index:5;cursor:pointer}
.minimap canvas{width:100%;height:100%}
/* trombinoscope */
.filters{display:flex;gap:8px;flex-wrap:wrap;margin:10px 0 18px;align-items:center}.filters select,.filters input{width:auto;min-width:170px;border-radius:999px}.filters input[type=checkbox]{min-width:0}
.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(210px,1fr));gap:18px}
.card{background:#fff;border-radius:20px;box-shadow:var(--sh);padding:22px 14px 16px;text-align:center;cursor:pointer;border:1px solid #ece6da}
.card:hover{border-color:var(--gold)}.card .avatar{width:110px;height:110px;border-width:4px;font-size:30px;margin-bottom:10px}
.card h3{margin:2px 0;font-size:22px}.card .job{color:var(--muted);font-size:13px;min-height:2.6em}.card .unit{font-size:12px;color:#8a7c62;margin-top:4px}
.card.vac{border:2px dashed var(--gold2)}
/* modal */
.ov{position:fixed;inset:0;background:rgba(19,35,47,.45);z-index:80;display:flex;align-items:flex-start;justify-content:center;overflow:auto;padding:30px 12px}
.modal{background:#fff;border-radius:22px;max-width:760px;width:100%;padding:24px 26px;position:relative;box-shadow:0 20px 60px rgba(0,0,0,.3)}
.modal.wide{max-width:980px}
.modal .x{position:absolute;right:14px;top:12px;border:none;background:none;font-size:24px;cursor:pointer;color:var(--muted)}
.fiche-top{display:flex;gap:22px;align-items:center;flex-wrap:wrap}
.fiche-top .avatar{width:140px;height:140px;border-width:4px;font-size:40px}
.fiche-top h1{margin:0}.fiche-top .job{color:var(--muted);font-size:15px}
.kv{display:grid;grid-template-columns:170px 1fr;gap:4px 14px;margin:8px 0}.kv dt{color:var(--muted)}.kv dd{margin:0;word-break:break-word}
.box{background:#faf8f3;border-radius:14px;padding:12px 16px;margin:14px 0}.box.rh{background:#f5f0fb;border:1px solid #e1d6f0}
.cols{display:grid;grid-template-columns:1fr 1fr;gap:0 16px}
.actions{display:flex;gap:8px;flex-wrap:wrap;margin-top:14px}
.reports{display:flex;flex-wrap:wrap;gap:6px}
.chip{display:inline-flex;align-items:center;gap:6px;background:#f6f3ec;border-radius:999px;padding:3px 10px 3px 3px;cursor:pointer;font-size:12.5px}
.chip .avatar{width:26px;height:26px;font-size:10px;border-width:1.5px}
.hist{font-size:12.5px;max-height:220px;overflow:auto}.hist div{padding:4px 0;border-bottom:1px solid #eee}
/* tables, gestion */
table.t{width:100%;border-collapse:collapse;background:#fff;border-radius:14px;overflow:hidden;box-shadow:var(--sh)}
table.t th,table.t td{padding:8px 10px;text-align:left;border-bottom:1px solid #f0ece3;vertical-align:middle}
table.t th{font-size:12px;color:var(--muted);font-weight:500;background:#faf8f3}
table.t td .avatar{width:34px;height:34px;font-size:12px;border-width:1.5px}
.unitblock{background:#fff;border-radius:16px;box-shadow:var(--sh);margin:12px 0;padding:12px 16px;border-left:5px solid var(--uc,var(--gold))}
.unitblock .uh{display:flex;align-items:center;gap:10px;flex-wrap:wrap}.unitblock .uh h3{margin:0;flex:1}
.unitblock .who{display:flex;align-items:center;gap:8px;padding:6px 0;border-top:1px solid #f2eee6;flex-wrap:wrap}
.unitblock .who .nm{flex:1;min-width:180px;cursor:pointer}.unitblock .who .avatar{width:34px;height:34px;font-size:12px;border-width:1.5px}
.subtabs{display:flex;gap:6px;flex-wrap:wrap;margin:8px 0 14px}.subtabs a{padding:5px 12px;border-radius:999px;background:#fff;border:1px solid var(--line);text-decoration:none;color:var(--ink)}.subtabs a.on{background:var(--ink);color:#fff;border-color:var(--ink)}
.req{background:#fff;border-radius:14px;box-shadow:var(--sh);padding:12px 16px;margin:10px 0}
.req .rh{display:flex;gap:10px;align-items:center;flex-wrap:wrap}.req .rh b{flex:1}
.empty{color:var(--muted);padding:30px;text-align:center;background:#fff;border-radius:16px}
.toast{position:fixed;bottom:20px;left:50%;transform:translateX(-50%);background:var(--ink);color:#fff;padding:10px 18px;border-radius:999px;z-index:120;box-shadow:0 8px 30px rgba(0,0,0,.3);max-width:90vw}
.toast.err{background:var(--bad)}
/* recadrage photo */
.crop{display:flex;flex-direction:column;align-items:center;gap:12px}
.crop .stage{width:300px;height:300px;border-radius:50%;overflow:hidden;position:relative;background:#eee;touch-action:none;cursor:grab;border:4px solid var(--gold)}
.crop .stage img{position:absolute;left:0;top:0;transform-origin:0 0;user-select:none;-webkit-user-drag:none;max-width:none}
.crop input[type=range]{width:260px}
.switch{display:flex;align-items:center;gap:10px;margin:10px 0}
@media (max-width:760px){
  header.top{gap:8px;padding:8px 10px}.searchbox{order:3;width:100%}nav.tabs{order:4;flex-basis:100%}
  main.page{padding:12px}.modal{padding:18px 16px;border-radius:16px}.ov{padding:0}.modal{min-height:100%;border-radius:0}
  .kv{grid-template-columns:1fr}.kv dt{margin-top:6px}.cols{grid-template-columns:1fr}.minimap{display:none}
  .grid{grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:10px}.card .avatar{width:84px;height:84px}.card h3{font-size:18px}
  .menu{left:8px;right:8px;width:auto}.toolbar .hide-m{display:none}
}
@media print{
  header.top,.toolbar,.minimap,.ov{display:none!important}
  .chart-wrap{position:static;background:none;overflow:visible}.viewport{position:static}
  body{background:#fff}
}

.soc{display:inline-flex;gap:5px;flex-wrap:wrap;vertical-align:middle}
.soc a{display:inline-flex;align-items:center;justify-content:center;width:26px;height:26px;border-radius:50%;color:#fff;font-size:10.5px;font-weight:700;text-decoration:none;letter-spacing:-.02em}
.soc a:hover{opacity:.85}.soc a.linkedin{background:#0a66c2}.soc a.instagram{background:linear-gradient(45deg,#f09433,#dc2743,#bc1888)}.soc a.facebook{background:#1877f2}.soc a.tiktok{background:#111}.soc a.youtube{background:#e00}
.card .soc{justify-content:center;margin-top:8px}.unitblock .soc{margin-left:4px}

.ov{backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);background:rgba(19,35,47,.32)}
.soc a.x{background:#000}.soc a.whatsapp{background:#25d366}
.bd-cols{display:grid;grid-template-columns:1fr 1fr;gap:22px}
.bd{display:flex;align-items:center;gap:12px;background:#fff;border-radius:14px;box-shadow:var(--sh);padding:10px 14px;margin:8px 0;cursor:pointer;border:1px solid #ece6da}
.bd:hover{border-color:var(--gold)}.bd .avatar{width:48px;height:48px;font-size:15px}.bd .w{flex:1;min-width:0}.bd .w small{display:block;color:var(--muted)}
.bd .when{text-align:right;font-size:13px;white-space:nowrap}.bd .when b{display:block;font-size:15px}.bd.today{background:#fbf6ea;border-color:var(--gold)}
@media (max-width:760px){.bd-cols{grid-template-columns:1fr}}
