*{box-sizing:border-box}body{margin:0;font:20px/1.45 -apple-system,system-ui,Segoe UI,Roboto,sans-serif;background:#faf7f0;color:#222}
header{position:sticky;top:0;background:#2f5d3a;padding:env(safe-area-inset-top) 0 0;z-index:5}
.hdr{background:none;border:0;color:#fff;font-size:22px;font-weight:700;padding:14px 16px;width:100%;text-align:left}
main{padding:16px;max-width:640px;margin:0 auto 80px}
h1{font-size:28px;margin:8px 0 12px}h2{font-size:22px;margin:24px 0 8px}
.btn{display:block;width:100%;font-size:21px;font-weight:600;padding:16px;margin:10px 0;border-radius:14px;border:0;background:#2f5d3a;color:#fff;min-height:56px}
.btn.alt{background:#fff;color:#2f5d3a;border:2px solid #2f5d3a}.btn.warn{background:#b23b3b}
.row{display:flex;gap:10px}.row .btn{flex:1}
label{display:block;font-weight:600;margin:14px 0 4px}
input,textarea,select{width:100%;font-size:20px;padding:14px;border:2px solid #bbb;border-radius:12px;background:#fff}
textarea{min-height:110px}input:focus,textarea:focus,select:focus{border-color:#2f5d3a;outline:none}
.card{background:#fff;border-radius:14px;padding:14px 16px;margin:10px 0;box-shadow:0 1px 3px #0002}
.person{display:block;width:100%;text-align:left;border:0;font-size:20px;cursor:pointer}
.person small,.muted{color:#666;font-size:17px}.center{text-align:center}
.badge{display:inline-block;font-size:15px;font-weight:700;padding:3px 10px;border-radius:20px;margin-right:6px}
.Confirmed{background:#d6f0d6;color:#1d5e1d}.Likely{background:#fff0c2;color:#7a5a00}.Guess{background:#f3dada;color:#8a2a2a}
.src{word-break:break-all;font-size:17px}.pending{border-left:6px solid #e0a400}
.tree{overflow-x:auto}.tree ul{list-style:none;padding-left:22px;margin:0;border-left:2px solid #c9d8c9}
.tree li{margin:6px 0}.tree .me{font-weight:700;background:#e5f1e5}
.tnode{background:#fff;border:2px solid #2f5d3a;border-radius:10px;padding:8px 12px;font-size:18px;color:#222}
#toast{position:fixed;left:16px;right:16px;bottom:20px;background:#222;color:#fff;padding:14px;border-radius:12px;font-size:18px;text-align:center;opacity:0;transition:.3s;pointer-events:none}
#toast.on{opacity:1}
button,a,input,select,textarea{scroll-margin-top:90px}

.sugs .sug{border-top:1px solid #ddd;padding-top:8px;margin-top:8px}.ghost{color:#888;font-style:italic;background:#f4f4f4}
#fview{position:relative;height:62vh;overflow:hidden;background:#fff;border-radius:14px;box-shadow:0 1px 3px #0002;touch-action:none;margin:10px -8px}
#fcan{position:absolute;left:0;top:0;transform-origin:0 0}#fcan svg{position:absolute;left:0;top:0;pointer-events:none}#fcan svg{overflow:visible}#fcan path{fill:none;stroke-width:3}#fcan path.marr{stroke:#9b4d7a;stroke-width:3}
#fcan path.k0{stroke:#5f8a66}#fcan path.k1{stroke:#8a7a4f}#fcan path.k2{stroke:#4f6f8a}#fcan path.k3{stroke:#8a5f6f}
.fnode{position:absolute;width:170px;height:76px;background:#fff;border:3px solid #2f5d3a;border-radius:14px;padding:6px 30px 6px 10px;cursor:pointer;overflow:hidden}
.fnode b{display:block;font-size:19px;line-height:1.2;max-height:46px;overflow:hidden}.fnode small{color:#555;font-size:16px}
.fnode.f{border-color:#9b4d7a}.fnode.m{border-color:#2f5d7a}.fnode.hit{background:#fff3b0;box-shadow:0 0 0 6px #e0a400}
.plus{position:absolute;right:2px;top:2px;width:30px;height:30px;border-radius:50%;border:0;background:#2f5d3a;color:#fff;font-size:18px;padding:0}
.loose{display:flex;gap:10px;overflow-x:auto}.loose .person{min-width:180px}.relpath li{margin:6px 0}
.story h3{font-size:21px;margin:18px 0 6px}.storyBody p{margin:0 0 14px}.srcs li{margin:6px 0}a.storyItem{color:#222;text-decoration:none}
.bub{border-radius:16px;padding:10px 14px;margin:10px 0;max-width:88%;box-shadow:0 1px 3px #0002}.bub p{margin:4px 0}.bub small{color:#555;font-size:15px}.bub.fam{background:#e5f1e5;margin-left:auto}.bub.roots{background:#fff}
.dot{color:#e0a400}.rvGroup h2 a{color:#2f5d3a}.rvItem .row .btn{font-size:18px}
