:root{
  --paper:#f4ecd9; --paper-2:#fbf6ea; --ink:#2b2418; --ink-2:#5e5240; --muted:#8a7d66;
  --line:#6b5838; --card:#fffaf0; --card-b:#d9c9a6; --shadow:0 2px 10px rgba(60,40,10,.14);
  --green:#3d5a2e; --head:#2f3a2a;
  --doc:#3f7a3a; --q:#c27a1c;
  --b-gorchakov:#3d5a2e; --b-ilchenko:#b8892a; --b-smirnov:#9b3d2a; --b-valyaev:#6d3f72; --b-volkov:#2f5878;
}
*{box-sizing:border-box}
html,body{margin:0;height:100%;background:var(--paper);color:var(--ink);font-family:"PT Serif",Georgia,serif}
body{display:flex;flex-direction:column;overflow:hidden}
a{color:var(--green)}
button{font:inherit;color:inherit}

/* header */
.top{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:10px 18px;background:var(--head);color:#f3ead2;
  box-shadow:0 2px 8px rgba(0,0,0,.25);z-index:5;flex-wrap:wrap}
.brand{display:flex;align-items:center;gap:12px;min-width:0}
.crest{width:40px;height:40px;color:#d9c47e;flex:none}
.crest svg{width:100%;height:100%}
h1{font-family:"Cormorant Garamond",serif;font-weight:700;font-size:26px;margin:0;letter-spacing:.3px;line-height:1.05}
.sub{margin:2px 0 0;font-size:13px;color:#cbbf9f;letter-spacing:.4px}
.tools{display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.btn{background:#46553c;border:1px solid #5d6e50;color:#f3ead2;padding:7px 12px;border-radius:8px;cursor:pointer;font-size:14px}
.btn:hover{background:#556748}
.btn.ghost{width:34px;padding:7px 0;font-style:italic;font-weight:700}
.search{position:relative}
#q{width:230px;padding:8px 12px;border-radius:8px;border:1px solid #5d6e50;background:#fbf6ea;color:var(--ink);font:inherit;font-size:14px}
#results{position:absolute;top:40px;left:0;right:0;min-width:260px;max-height:320px;overflow:auto;margin:0;padding:4px;list-style:none;
  background:var(--card);border:1px solid var(--card-b);border-radius:10px;box-shadow:var(--shadow);color:var(--ink);z-index:20}
#results li{padding:7px 10px;border-radius:6px;cursor:pointer;font-size:14px}
#results li small{color:var(--muted);margin-left:6px}
#results li:hover,#results li.act{background:#efe3c6}

/* viewport */
main{position:relative;flex:1;overflow:hidden;cursor:grab;touch-action:none;
  background:linear-gradient(rgba(244,236,217,.82),rgba(244,236,217,.88)),url(img/bg.jpg) center/cover no-repeat fixed}
main.drag{cursor:grabbing}
#stage{position:absolute;left:0;top:0;transform-origin:0 0;will-change:transform}
#lines{position:absolute;left:0;top:0;overflow:visible;pointer-events:none}
#lines path{fill:none;stroke:var(--line);stroke-width:2;stroke-linejoin:round;stroke-linecap:round}
#lines path.dash{stroke-dasharray:6 5;opacity:.75}
#lines circle{fill:var(--paper-2);stroke:var(--line);stroke-width:2}

.node{position:absolute;width:172px;min-height:96px;padding:9px 10px 8px;background:var(--card);border:1px solid var(--card-b);
  border-top:4px solid var(--bc,#999);border-radius:10px;box-shadow:var(--shadow);cursor:pointer;text-align:center;
  transition:transform .12s ease, box-shadow .12s ease;user-select:none}
.node:hover{transform:translateY(-2px);box-shadow:0 6px 18px rgba(60,40,10,.22)}
.node.direct{border:3px solid var(--bc,#999);border-top-width:7px;box-shadow:0 4px 14px rgba(60,40,10,.25);background:#fffdf6}
.node.direct .sn{font-size:20px}
.legend i.dl{width:16px;height:12px;border:3px solid var(--line);border-top-width:5px;border-radius:3px;background:#fffdf6}
.node.ego{border-width:3px;border-top-width:7px;border-color:#b8962e;background:#fff6dd}
.node.hl{outline:3px solid #d9a521;outline-offset:2px}
.node.dim{opacity:.35}
.node .sn{font-family:"Cormorant Garamond",serif;font-weight:700;font-size:19px;line-height:1.05;color:var(--ink)}
.node .gv{font-size:13.5px;line-height:1.2;margin-top:2px;font-weight:700;color:var(--ink)}
.node .yr{font-size:12.5px;color:var(--ink-2);margin-top:4px}
.node .sh{font-size:11.5px;color:var(--muted);margin-top:3px;line-height:1.25;font-style:italic}
.badge{display:inline-flex;align-items:center;justify-content:center;width:20px;height:20px;border-radius:50%;color:#fff;font-size:12px;font-weight:700;font-family:Arial,sans-serif;vertical-align:middle}
.badge.doc{background:var(--doc)} .badge.q{background:var(--q)}
.node .badge{position:absolute;top:-10px;right:-8px;box-shadow:0 1px 3px rgba(0,0,0,.3)}
.node .ph{position:absolute;top:-10px;left:-8px;width:22px;height:22px;border-radius:50%;background:#efe3c6 center/cover;border:2px solid #fff;box-shadow:0 1px 3px rgba(0,0,0,.3)}

.zoom{position:absolute;right:14px;bottom:14px;display:flex;flex-direction:column;gap:6px}
.zbtn{width:40px;height:40px;border-radius:10px;border:1px solid var(--card-b);background:var(--card);font-size:22px;cursor:pointer;box-shadow:var(--shadow)}
.legend{position:absolute;left:14px;bottom:14px;display:flex;flex-wrap:wrap;gap:6px 12px;max-width:min(560px,calc(100% - 90px));
  background:rgba(255,250,240,.92);border:1px solid var(--card-b);border-radius:10px;padding:8px 12px;font-size:13px;box-shadow:var(--shadow)}
.legend span{display:inline-flex;align-items:center;gap:6px;cursor:pointer}
.legend i{width:14px;height:6px;border-radius:3px;display:inline-block}
.legend .sep{width:1px;height:16px;background:var(--card-b);cursor:default}

/* modal */
.modal{position:fixed;inset:0;z-index:50;display:flex;align-items:center;justify-content:center;padding:16px}
.modal[hidden]{display:none}
.backdrop{position:absolute;inset:0;background:rgba(30,24,14,.55)}
.card-full{position:relative;background:var(--paper-2);width:min(720px,100%);max-height:calc(100vh - 32px);overflow:auto;border-radius:14px;
  box-shadow:0 20px 60px rgba(0,0,0,.4);border-top:6px solid var(--bc,var(--green));padding:22px 26px 24px}
.close{position:absolute;top:8px;right:12px;border:0;background:none;font-size:30px;line-height:1;cursor:pointer;color:var(--ink-2)}
.m-head{padding-right:30px}
.m-role{font-size:12.5px;letter-spacing:.8px;text-transform:uppercase;color:var(--muted)}
.card-full h2{font-family:"Cormorant Garamond",serif;font-size:32px;line-height:1.05;margin:4px 0 2px}
.m-maiden{font-style:italic;color:var(--ink-2)}
.facts{display:grid;grid-template-columns:auto 1fr;gap:6px 14px;margin:16px 0 6px;font-size:15px}
.facts dt{color:var(--muted)} .facts dd{margin:0}
.m-section{margin-top:16px;font-size:15.5px;line-height:1.55}
.m-section h3{font-family:"Cormorant Garamond",serif;font-size:21px;margin:0 0 6px;color:var(--green)}
.m-section ul{padding-left:20px;margin:6px 0} .m-section li{margin:3px 0}
.status{display:inline-flex;align-items:center;gap:8px;margin-top:10px;font-size:14px;color:var(--ink-2)}
.rel{display:flex;flex-wrap:wrap;gap:6px}
.chip{border:1px solid var(--card-b);background:var(--card);border-left:4px solid var(--bc,#999);border-radius:8px;padding:5px 9px;font-size:13.5px;cursor:pointer}
.chip:hover{background:#efe3c6}
.chip small{color:var(--muted)}
.rels{display:grid;grid-template-columns:120px 1fr;gap:8px 12px;align-items:start}
.rels .lbl{color:var(--muted);font-size:14px;padding-top:5px}
.photos{display:flex;gap:12px;flex-wrap:wrap}
.photos figure{margin:0;background:#fff;padding:8px 8px 6px;box-shadow:var(--shadow);transform:rotate(-1deg)}
.photos figure:nth-child(2){transform:rotate(1.2deg)}
.photos img{display:block;max-height:240px;max-width:100%}
.photos figcaption{font-size:12.5px;color:var(--ink-2);text-align:center;margin-top:4px;font-style:italic}
.muted{color:var(--muted);font-size:13.5px}
.note{background:#f1e7cf;border-left:3px solid var(--line);padding:8px 12px;border-radius:6px;font-size:14px}

@media (max-width:700px){
  h1{font-size:21px} .sub{display:none} .crest{width:32px;height:32px}
  .top{padding:8px 12px;gap:8px}
  #q{width:150px}
  .legend{font-size:11.5px;padding:6px 8px;left:8px;right:8px;bottom:8px;max-width:none;gap:4px 10px}
  .legend .sep,.legend span:nth-last-child(-n+2){display:none}
  .zoom{display:none}
  .card-full{padding:18px 16px 20px}
  .card-full h2{font-size:27px}
  .rels{grid-template-columns:1fr}
  .rels .lbl{padding-top:0}
}

.why{background:#eef0e2;border-left:3px solid var(--green);padding:9px 12px;border-radius:6px;font-size:14.5px}
.srcs{padding-left:22px;margin:6px 0;font-size:14px}
.srcs li{margin:5px 0}
.srcs a{color:var(--green);text-decoration:underline;text-underline-offset:2px;word-break:break-word}
