:root{
  --navy:#16212E; --navy2:#233549; --navy3:#0f1822;
  --cream:#F1E9D8; --cream2:#e7dcc3; --ink:#221F1A;
  --sage:#93A398; --red:#B4392E; --red-d:#8f2b22; --red-l:#d1584b;
  --gold:#C7A344; --gold-d:#a9862f; --gold-l:#e0c56e;
  --green:#7d9679;
}
*{box-sizing:border-box}
html,body{margin:0;height:100%}
body{background:var(--navy);font-family:"PT Sans",system-ui,sans-serif;color:var(--cream);overflow:hidden}
.app{position:fixed;inset:0;overflow:hidden}
.app a{color:var(--gold-l);text-decoration:none}
.app a:hover{color:var(--cream)}

/* ---- canvas ---- */
.viewport{position:absolute;inset:0;cursor:grab;touch-action:none;
  background:
   radial-gradient(120% 90% at 50% -8%, #2b3f56 0%, var(--navy) 46%, var(--navy3) 100%),
   url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='150' height='150'><g fill='none' stroke='%23F1E9D8' stroke-width='1.5' opacity='0.05'><path d='M40 78 a22 22 0 1 1 22 22 a13 13 0 1 1 -13 -13 a5 5 0 1 1 5 5'/><path d='M110 78 a22 22 0 1 0 -22 22 a13 13 0 1 0 13 -13 a5 5 0 1 0 -5 5'/><path d='M75 20 q-9 12 0 24 q9 -12 0 -24'/></g></svg>");
  background-repeat:no-repeat,repeat;background-size:cover,150px 150px;}
.viewport.grabbing{cursor:grabbing}
.viewport::after{content:"";position:absolute;inset:0;pointer-events:none;
  background:radial-gradient(130% 110% at 50% 0%, transparent 40%, rgba(6,11,17,.55) 100%);}
.world{position:absolute;top:0;left:0;transform-origin:0 0;will-change:transform}
.links{position:absolute;top:0;left:0;overflow:visible;pointer-events:none}
.gens{position:absolute;top:0;left:0;pointer-events:none}
.genline{position:absolute;left:0;height:1px;background:linear-gradient(90deg,rgba(199,163,68,.28),rgba(199,163,68,.06) 60%,transparent);}
.genlab{position:absolute;font:italic 12px/1 "PT Sans";color:var(--sage);letter-spacing:.04em;transform:translateY(-50%);white-space:nowrap;
  font-feature-settings:"tnum";}
.nodes{position:absolute;top:0;left:0}

/* ---- node tiles (felt) ---- */
.node{position:absolute;display:flex;align-items:center;gap:6px;height:34px;padding:0 12px;
  background:linear-gradient(180deg,#f6efe0,var(--cream));color:var(--ink);
  font:400 13.5px/1 "PT Sans";border-radius:5px;white-space:nowrap;cursor:pointer;
  border:1px solid #cbbd9c;box-shadow:0 1px 0 #fff inset,0 2px 5px rgba(0,0,0,.32);
  transition:box-shadow .15s,transform .12s,opacity .2s,border-color .15s;user-select:none}
.node:hover{transform:translateY(-1px);box-shadow:0 1px 0 #fff inset,0 5px 12px rgba(0,0,0,.4)}
.node .nm{overflow:hidden}
.node .ni{width:15px;height:15px;flex:none;stroke-width:1.7}
/* stitched inner border */
.node::before{content:"";position:absolute;inset:2px;border:1px dashed rgba(140,120,80,.35);border-radius:3px;pointer-events:none}

/* red-line */
.node.star{font-weight:700;border-color:var(--gold);
  box-shadow:0 1px 0 #fff inset,0 2px 6px rgba(0,0,0,.36),-3px 0 0 var(--red);
  padding-left:14px;border-radius:5px}
/* leader */
.node.leader .ni.k{color:var(--gold-d)}
.node.leader{border-color:var(--gold)}
/* tribe */
.node.tribe{font-style:italic;border-color:var(--green);
  background:linear-gradient(180deg,#eef0e4,#e3e6d3)}
.node.tribe .ni.t{color:var(--green)}
/* root */
.node.root{height:44px;padding:0 18px;font-family:"PT Serif";font-weight:700;font-size:18px;letter-spacing:.02em;
  color:var(--cream);background:linear-gradient(180deg,var(--red-l),var(--red-d));
  border:1.5px solid var(--gold-l);
  box-shadow:0 0 0 3px rgba(199,163,68,.18),0 4px 14px rgba(0,0,0,.5),0 1px 0 rgba(255,255,255,.15) inset}
.node.root::before{border-color:rgba(240,228,205,.4)}
.node.root .ni{color:var(--gold-l);width:18px;height:18px}

/* collapsed = hides descendants -> felt stack behind */
.node.collapsed{box-shadow:
  0 1px 0 #fff inset,3px 4px 0 -1px var(--cream2),4px 6px 0 -1px #d8cba8,
  6px 9px 0 -1px #cbbd9c,0 4px 10px rgba(0,0,0,.38)}
.node.collapsed.star{box-shadow:
  0 1px 0 #fff inset,-3px 0 0 var(--red),3px 4px 0 -1px var(--cream2),
  5px 7px 0 -1px #d8cba8,7px 10px 0 -1px #cbbd9c,0 4px 10px rgba(0,0,0,.4)}

/* toggle pill */
.tgl{position:absolute;left:50%;top:100%;transform:translate(-50%,7px);
  display:inline-flex;align-items:center;gap:3px;height:24px;min-width:30px;padding:0 9px;
  border-radius:12px;font:700 12px/1 "PT Sans";cursor:pointer;white-space:nowrap;z-index:3;
  border:1.5px solid;box-shadow:0 2px 6px rgba(0,0,0,.4);transition:transform .12s,filter .12s;
  font-feature-settings:"tnum"}
.tgl:hover{transform:translate(-50%,7px) scale(1.08);filter:brightness(1.08)}
.tgl::after{content:"";position:absolute;left:50%;bottom:100%;width:2px;height:7px;background:var(--gold);transform:translateX(-50%);opacity:.6}
.tgl.plus{background:linear-gradient(180deg,var(--red-l),var(--red));color:var(--cream);border-color:var(--gold)}
.tgl.minus{background:linear-gradient(180deg,#2c4056,#1c2a39);color:var(--gold-l);border-color:var(--gold-d)}
.tgl .pc{font-size:11px}

/* states */
.node.selected{outline:2.5px solid var(--gold-l);outline-offset:3px}
.node.active{border-color:var(--gold-l);box-shadow:0 0 0 2px rgba(224,197,110,.5),0 3px 10px rgba(0,0,0,.4)}
.node.active.star{box-shadow:0 0 0 2px rgba(224,197,110,.55),-3px 0 0 var(--red),0 3px 10px rgba(0,0,0,.4)}
.node.match{background:linear-gradient(180deg,#f7e58a,#ecc94b);border-color:var(--gold-d);color:#3a2c07}
.node.match::before{border-color:rgba(120,90,20,.4)}

/* ancestor-chain knot */
.knotlayer{position:absolute;top:0;left:0;pointer-events:none}
.knot{position:absolute;transform:translate(-50%,-50%);pointer-events:auto;cursor:pointer;
  display:flex;flex-direction:column;align-items:center;gap:5px;z-index:2}
.knot .dia{width:34px;height:34px;display:grid;place-items:center;
  background:radial-gradient(circle,#2b3f56,#16212e);border:1.5px dashed var(--gold);
  transform:rotate(45deg);border-radius:7px;box-shadow:0 2px 8px rgba(0,0,0,.5)}
.knot .dia svg{transform:rotate(-45deg);width:18px;height:18px;color:var(--gold-l)}
.knot:hover .dia{border-color:var(--gold-l);background:radial-gradient(circle,#33506e,#1a2634)}
.knot .kl{font:italic 11.5px/1.2 "PT Sans";color:var(--gold-l);background:rgba(15,24,34,.82);
  padding:3px 9px;border-radius:10px;border:1px solid rgba(199,163,68,.4);white-space:nowrap}

/* ---- header ---- */
.bar{position:absolute;top:0;left:0;right:0;z-index:20;display:flex;align-items:center;gap:14px;
  padding:12px 18px;flex-wrap:wrap;
  background:linear-gradient(180deg,rgba(11,18,26,.94) 0%,rgba(15,24,34,.72) 68%,transparent 100%);}
.brand{display:flex;align-items:center;gap:11px;padding-right:8px;margin-right:2px}
.brand .horn{width:38px;height:38px;color:var(--gold-l);flex:none}
.brand .bt{font:700 18px/1 "PT Serif";letter-spacing:.16em;color:var(--cream)}
.brand .bs{font:italic 12px/1 "PT Sans";color:var(--sage);margin-top:3px;letter-spacing:.02em}
.spring{flex:1 1 8px}
.searchwrap{position:relative;display:flex;align-items:center}
.searchwrap .si{position:absolute;left:11px;width:16px;height:16px;color:var(--sage);pointer-events:none}
.search{width:220px;height:38px;padding:0 44px 0 34px;border-radius:19px;
  background:rgba(20,31,44,.85);border:1px solid rgba(199,163,68,.4);color:var(--cream);
  font:400 14px "PT Sans";outline:none}
.search::placeholder{color:var(--sage)}
.search:focus{border-color:var(--gold);box-shadow:0 0 0 3px rgba(199,163,68,.16)}
.mcount{position:absolute;right:12px;font:700 12px/1 "PT Sans";color:var(--gold-l);
  font-feature-settings:"tnum";opacity:0;transition:opacity .15s}
.mcount.on{opacity:1}
.ancbtn{appearance:none;cursor:pointer;font:700 13px/1 "PT Sans";letter-spacing:.02em;
  padding:0 15px;height:38px;border-radius:19px;color:var(--gold-l);white-space:nowrap;
  background:rgba(20,31,44,.7);border:1px dashed var(--gold);display:inline-flex;align-items:center;gap:7px}
.ancbtn:hover{background:rgba(37,53,73,.9);color:var(--cream)}
.ancbtn svg{width:15px;height:15px}
.langsel-wrap{position:relative;display:inline-flex;align-items:center}
.langsel-wrap svg{position:absolute;left:11px;width:15px;height:15px;color:var(--gold-l);pointer-events:none}
.langsel{appearance:none;-webkit-appearance:none;-moz-appearance:none;cursor:pointer;
  font:700 13px/1 "PT Sans";letter-spacing:.02em;color:var(--cream);
  background:rgba(20,31,44,.8) url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23C7A344' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'><path d='M6 9l6 6 6-6'/></svg>") no-repeat right 10px center/13px;
  border:1px solid rgba(199,163,68,.4);border-radius:19px;height:38px;padding:0 30px 0 33px;outline:none}
.langsel:hover{background-color:rgba(37,53,73,.9);color:var(--gold-l)}
.langsel:focus{border-color:var(--gold);box-shadow:0 0 0 3px rgba(199,163,68,.16)}
.langsel option{background:var(--navy2);color:var(--cream)}
.zoom{display:inline-flex;gap:6px}
.zbtn{width:38px;height:38px;border-radius:9px;display:grid;place-items:center;cursor:pointer;
  background:rgba(20,31,44,.8);border:1px solid rgba(199,163,68,.4);color:var(--cream);transition:.15s}
.zbtn:hover{background:var(--navy2);border-color:var(--gold);color:var(--gold-l)}
.zbtn svg{width:19px;height:19px}

/* ---- legend & flourishes ---- */
.legend{position:absolute;left:20px;bottom:18px;z-index:6;max-width:min(46vw,560px);
  font:italic 12px/1.7 "PT Sans";color:var(--sage)}
.legend b{color:var(--cream);font-style:normal;font-weight:700}
.legend .lg{color:var(--gold-l)}
.flourish{position:absolute;bottom:0;width:190px;height:150px;color:rgba(199,163,68,.5);z-index:1;pointer-events:none}
.flourish.l{left:0}
.flourish.r{right:0;transform:scaleX(-1)}

/* ---- detail panel ---- */
.scrim{position:absolute;inset:0;background:rgba(6,11,17,.5);z-index:29;opacity:0;visibility:hidden;transition:.25s}
.scrim.on{opacity:1;visibility:visible}
.panel{position:absolute;top:0;right:0;bottom:0;width:352px;z-index:30;
  background:linear-gradient(180deg,#1b2836,#131e29);border-left:1px solid var(--gold);
  box-shadow:-14px 0 40px rgba(0,0,0,.45);transform:translateX(100%);transition:transform .3s cubic-bezier(.4,0,.15,1);
  display:flex;flex-direction:column;overflow:hidden}
.panel.on{transform:none}
.panel .pscroll{overflow-y:auto;padding:26px 24px 34px;flex:1}
.pclose{position:absolute;top:14px;right:14px;width:34px;height:34px;border-radius:50%;
  display:grid;place-items:center;cursor:pointer;background:rgba(20,31,44,.8);
  border:1px solid rgba(199,163,68,.4);color:var(--gold-l);z-index:2}
.pclose:hover{background:var(--navy2);color:var(--cream)}
.eyebrow{font:700 11px/1 "PT Sans";letter-spacing:.22em;text-transform:uppercase;color:var(--gold-l);
  font-feature-settings:"tnum"}
.pname{font:700 30px/1.08 "PT Serif";color:var(--cream);margin:12px 0 0;padding-left:14px;
  border-left:3px solid var(--red);text-wrap:pretty}
.ptag{display:inline-flex;align-items:center;gap:6px;margin-top:11px;font:italic 13px "PT Sans";color:var(--sage)}
.ptag svg{width:15px;height:15px;color:var(--gold-l)}
.pdesc{margin:16px 0 0;font:400 15px/1.6 "PT Serif";color:#dcd3c2;text-align:justify;hyphens:auto}
.pexpand{margin-top:18px;width:100%;height:44px;border-radius:8px;cursor:pointer;
  font:700 14px "PT Sans";letter-spacing:.02em;color:var(--cream);
  background:linear-gradient(180deg,var(--red-l),var(--red-d));border:1px solid var(--gold);
  display:flex;align-items:center;justify-content:center;gap:8px}
.pexpand:hover{filter:brightness(1.08)}
.psec{margin-top:24px}
.psec h4{font:700 11px/1 "PT Sans";letter-spacing:.18em;text-transform:uppercase;color:var(--sage);
  margin:0 0 12px;padding-bottom:9px;border-bottom:1px solid rgba(199,163,68,.28)}
.slist{list-style:none;margin:0;padding:0;display:flex;flex-wrap:wrap;gap:8px}
.slist li a{display:inline-block;padding:6px 12px;border-radius:16px;font:400 13.5px "PT Sans";
  background:rgba(20,31,44,.7);border:1px solid rgba(199,163,68,.3);color:var(--cream)}
.slist li a:hover{border-color:var(--gold);color:var(--gold-l)}
.anc{list-style:none;margin:0;padding:0}
.anc li{display:flex;align-items:center;gap:8px;padding:5px 0;font:400 14px "PT Serif"}
.anc li a{color:#d7cdbb}.anc li a:hover{color:var(--gold-l)}
.anc li .g{color:var(--gold);flex:none;width:16px;text-align:center;font-size:13px}
.anc li.cur a{color:var(--gold-l);font-weight:700}
.stats{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.stat{border:1px solid rgba(199,163,68,.3);border-radius:8px;padding:16px 14px;background:rgba(20,31,44,.4)}
.stat .n{font:700 30px/1 "PT Serif";color:var(--gold-l);font-feature-settings:"tnum"}
.stat .l{font:400 12.5px/1.3 "PT Sans";color:var(--sage);margin-top:7px}

@media (max-width:760px){
  .bar{padding:9px 12px;gap:9px;row-gap:9px}
  .brand .bt{font-size:15px;letter-spacing:.1em}
  .brand .bs{display:none}
  .brand .horn{width:30px;height:30px}
  .spring{display:none}
  .searchwrap{order:5;flex:1 1 100%}
  .search{width:100%}
  .ancbtn{order:7;flex:1 1 auto;justify-content:center}
  .langsel-wrap{order:6;flex:0 0 auto}
  .langsel{height:44px;padding:0 30px 0 33px}
  .zoom{position:fixed;right:12px;bottom:calc(12px + env(safe-area-inset-bottom));flex-direction:column;z-index:25}
  .zbtn{width:44px;height:44px}
  .legend,.flourish{display:none}
  .panel{top:auto;left:0;right:0;bottom:0;width:auto;height:64vh;border-left:none;
    border-top:1px solid var(--gold);border-radius:18px 18px 0 0;
    transform:translateY(100%);box-shadow:0 -14px 40px rgba(0,0,0,.5)}
  .panel .pscroll{padding-top:30px}
  .panel .grip{position:absolute;top:9px;left:50%;transform:translateX(-50%);width:44px;height:5px;
    border-radius:3px;background:rgba(199,163,68,.5);z-index:2}
  .pclose{top:12px}
  .pname{font-size:26px}
}

@media (prefers-reduced-motion: reduce) {
  * { transition: none !important; }
}
