:root{--bg:#0e0b14;--fg:#b78cff;--muted:#a994c7;--line:#7651a8;--card:rgba(28,20,40,.94)}*{box-sizing:border-box}html,body{margin:0;width:100%;height:100%;overflow:hidden}body{font-family:system-ui,sans-serif;background:var(--bg);color:var(--fg)}body.light{--bg:#f3eef8;--fg:#68409a;--muted:#756683;--line:#a58abb;--card:rgba(255,255,255,.95)}#map{position:fixed;inset:0;overflow:hidden;cursor:grab}#map.dragging{cursor:grabbing}#world{position:absolute;left:50%;top:50%;width:1100px;height:720px;transform-origin:0 0}#links{position:absolute;inset:0;width:100%;height:100%;pointer-events:none;overflow:visible}.link{stroke:var(--line);stroke-width:1.5;opacity:.58;stroke-dasharray:7 9;animation:flow 8s linear infinite;transition:.25s}.link.active{stroke:var(--fg);stroke-width:2.5;opacity:1}@keyframes flow{to{stroke-dashoffset:-64}}.node{position:absolute;transform:translate(-50%,-50%);border:0;background:transparent;color:var(--fg);cursor:grab;touch-action:none;padding:10px;border-radius:24px;animation:float 5.5s ease-in-out infinite;transition:.25s}.node:hover,.node.active{transform:translate(-50%,-50%) scale(1.06);background:var(--card);box-shadow:0 12px 35px #0004}.node.dragging{cursor:grabbing;animation:none!important;transition:none!important;z-index:5}.node.returning{transition:left 1.8s cubic-bezier(.16,.72,.22,1),top 1.8s cubic-bezier(.16,.72,.22,1),transform .25s!important}@keyframes float{0%,100%{margin-top:0}50%{margin-top:-12px}}.node-visual{display:flex;flex-direction:column;align-items:center;gap:10px;pointer-events:none}.node-image{width:150px;height:105px;object-fit:cover;border-radius:16px;border:1px solid #b78cff55;box-shadow:0 12px 34px #0005}.central .node-image{width:235px;height:180px;border-radius:22px}.node-label{max-width:210px;white-space:normal;text-align:center;font-size:15px;font-weight:600}.central .node-label{font-size:20px;max-width:270px}header{position:fixed;z-index:50;left:18px;right:18px;top:16px;display:flex;gap:12px;align-items:center;pointer-events:none}header>*{pointer-events:auto}header div{display:flex;flex-direction:column}header small{font-size:10px;letter-spacing:.15em;color:var(--muted)}#mapTitle{font-size:15px}header #theme{margin-left:auto}header button,nav button{width:42px;height:42px;border:0;border-radius:50%;background:var(--card);color:var(--fg);font-size:18px;cursor:pointer;box-shadow:0 8px 30px #0002}#back:disabled{opacity:.25}#preview{position:fixed;z-index:30;width:300px;padding:16px;border-radius:16px;background:var(--card);box-shadow:0 18px 50px #0004;opacity:0;pointer-events:none;transform:translateY(8px);transition:.2s}#preview.show{opacity:1;transform:none}#preview img{width:100%;height:145px;object-fit:cover;border-radius:11px;margin-bottom:12px}#preview b{display:block;margin-bottom:7px}#preview span{font-size:13px;line-height:1.45;color:var(--muted)}aside{position:fixed;z-index:45;right:0;top:0;width:min(36vw,560px);height:100%;padding:68px 38px;background:var(--card);box-shadow:-20px 0 60px #0004;transform:translateX(105%);transition:.4s;overflow:auto}aside.open{transform:none}#close{position:absolute;right:22px;top:20px;border:0;background:transparent;color:var(--fg);font-size:28px;cursor:pointer}.hero{width:100%;max-height:340px;object-fit:cover;border-radius:16px;margin-bottom:22px}aside h2{font-size:31px;line-height:1.08}aside p{line-height:1.6;color:var(--muted)}.actions{display:flex;gap:9px;flex-wrap:wrap}.actions a,.actions button{padding:11px 15px;border-radius:10px;border:1px solid var(--fg);font:inherit;text-decoration:none;cursor:pointer}.actions a{background:var(--fg);color:var(--bg)}.actions button{background:transparent;color:var(--fg)}nav{position:fixed;z-index:40;left:18px;bottom:18px;display:flex;gap:6px;padding:6px;background:var(--card);border-radius:14px}@media(max-width:760px){aside{width:100%;height:58%;top:auto;bottom:0;transform:translateY(105%)}.central .node-image{width:190px;height:145px}.node-image{width:125px;height:90px}}
/* V11 — transitions, panneau fermable et mini-carte */
#world{transition:opacity .42s ease,filter .42s ease}
#world.map-out{opacity:0;filter:blur(9px)}
#world.map-in{opacity:0;filter:blur(7px)}
#panel{padding-top:78px}
#close{position:fixed;right:24px;top:20px;width:42px;height:42px;border:1px solid color-mix(in srgb,var(--fg) 45%,transparent);border-radius:50%;background:var(--card);display:grid;place-items:center;line-height:1;z-index:3;box-shadow:0 7px 24px #0003;transition:transform .2s,background .2s}
#close:hover{transform:scale(1.08) rotate(4deg);background:var(--fg);color:var(--bg)}
nav{left:50%;bottom:18px;transform:translateX(-50%)}
#minimap{position:fixed;z-index:42;left:18px;bottom:18px;width:260px;padding:10px 12px 12px;border:1px solid color-mix(in srgb,var(--fg) 22%,transparent);border-radius:16px;background:var(--card);box-shadow:0 12px 36px #0003;backdrop-filter:blur(12px);transition:.25s}
.minimap-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:6px}.minimap-head span{font-size:9px;letter-spacing:.15em;color:var(--muted)}#minimapToggle{width:25px;height:25px;border:0;border-radius:50%;background:transparent;color:var(--fg);cursor:pointer;font-size:17px}
#minimapCanvas{position:relative;height:135px;overflow:hidden;transition:.25s}#minimap.collapsed{width:176px}#minimap.collapsed #minimapCanvas{height:0}#minimap.collapsed .minimap-head{margin:0}
#miniSvg{position:absolute;inset:0;width:100%;height:100%;pointer-events:none}.mini-edge{stroke:var(--line);stroke-width:1.2;opacity:.55;stroke-dasharray:3 4}
.mini-node{position:absolute;transform:translate(-50%,-50%);max-width:105px;border:0;background:transparent;color:var(--muted);font:600 10px/1.15 system-ui,sans-serif;text-align:center;cursor:pointer;padding-top:17px}
.mini-node::before{content:"";position:absolute;left:50%;top:1px;width:9px;height:9px;transform:translateX(-50%);border-radius:50%;background:var(--line);border:2px solid var(--card);box-shadow:0 0 0 1px var(--line)}
.mini-node:hover,.mini-node.current{color:var(--fg)}.mini-node.current::before{width:12px;height:12px;top:0;background:var(--fg);box-shadow:0 0 16px var(--fg)}
@media(max-width:760px){#minimap{width:205px;left:10px;bottom:10px}#minimapCanvas{height:105px}nav{bottom:10px;left:auto;right:10px;transform:none}#close{right:16px;top:auto;bottom:calc(58% - 54px)}}

/* V11.1 — croix sur le bord gauche du panneau */
#close{
  position:absolute;
  left:-54px;
  right:auto;
  top:22px;
  bottom:auto;
  width:44px;
  height:44px;
  z-index:60;
  border-radius:50%;
}
#panel{overflow:visible}
#panel > p,#panel > h2,#panel > .hero,#panel > .actions{position:relative}
@media(max-width:760px){
  #close{
    position:absolute;
    left:14px;
    right:auto;
    top:-54px;
    bottom:auto;
  }
}

/* V11.2 — palette noir / blanc / gris */
:root{
  --bg:#0a0a0a;
  --fg:#f2f2f2;
  --muted:#9d9d9d;
  --line:#666;
  --card:rgba(24,24,24,.96);
}
body.light{
  --bg:#f2f2f2;
  --fg:#111;
  --muted:#666;
  --line:#999;
  --card:rgba(250,250,250,.97);
}
.node-image{border-color:#777;filter:grayscale(18%);transition:filter .3s,transform .3s}
.node:hover .node-image,.node.active .node-image{filter:grayscale(0%)}
#close{
  left:-45px;
  width:34px;
  height:34px;
  font-size:21px;
  border-color:#777;
}
#reader{
  position:fixed;inset:0;z-index:100;background:var(--bg);
  opacity:0;visibility:hidden;transform:translateY(12px);
  transition:opacity .3s ease,transform .3s ease,visibility .3s;
}
#reader.open{opacity:1;visibility:visible;transform:none}
.reader-bar{
  height:58px;display:flex;align-items:center;gap:18px;padding:0 20px;
  background:var(--card);border-bottom:1px solid #555;color:var(--fg);
}
#readerBack{
  border:1px solid #777;border-radius:999px;background:transparent;color:var(--fg);
  padding:8px 13px;cursor:pointer;font:inherit;
}
#readerTitle{font-size:13px;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
#readerFrame{display:block;width:100%;height:calc(100% - 58px);border:0;background:white}

/* V12 — autonomie / mode édition */
#editMode.active{outline:2px solid var(--fg);outline-offset:2px}
body.editing .node{animation:none}
body.editing .node::after{
  content:"déplacer";position:absolute;left:50%;bottom:-13px;transform:translateX(-50%);
  font-size:8px;letter-spacing:.12em;text-transform:uppercase;color:var(--muted)
}
#devErrors{
  position:fixed;z-index:300;left:50%;top:72px;transform:translateX(-50%);
  width:min(620px,calc(100% - 30px));padding:16px 46px 16px 18px;border:1px solid #888;
  border-radius:14px;background:#111;color:#eee;box-shadow:0 20px 60px #0008;font:13px/1.45 system-ui,sans-serif
}
#devErrors b{display:block;margin-bottom:8px}#devErrors div{color:#bbb;margin-top:5px}
#devErrors button{position:absolute;right:12px;top:10px;border:0;background:transparent;color:#eee;font-size:20px;cursor:pointer}

/* V12.1 — lignes pleines + séparation auteur/public */
.link{stroke-dasharray:none!important;animation:none!important}
.mini-edge{stroke-dasharray:none!important}
#authorPanel{position:fixed;inset:0;z-index:400;background:#0009;display:grid;place-items:center;opacity:0;visibility:hidden;transition:.2s}
#authorPanel.open{opacity:1;visibility:visible}
.author-box{position:relative;width:min(650px,calc(100% - 32px));padding:26px;border:1px solid #666;border-radius:18px;background:var(--card);color:var(--fg);box-shadow:0 24px 80px #0009}
.author-box h2{margin-top:0}.author-box p{color:var(--muted);line-height:1.5}.author-box code{color:var(--fg)}
.author-close{position:absolute;right:14px;top:12px;border:0;background:transparent;color:var(--fg);font-size:24px;cursor:pointer}
#positionsExport{width:100%;height:210px;resize:vertical;padding:12px;border:1px solid #555;border-radius:10px;background:#0b0b0b;color:#eee;font:12px/1.5 ui-monospace,SFMono-Regular,Menlo,monospace}
#copyPositions{margin-top:12px;padding:9px 14px;border:1px solid #777;border-radius:999px;background:transparent;color:var(--fg);cursor:pointer}
