:root{--bg: #11161a;--panel: #12181ceb;--panel-solid: #151c21;--panel-2: #1e262cf2;--line: #d8b46e47;--line-strong: #d8b46e99;--gold: #d8a640;--gold-2: #f0cc7a;--text: #e9e2d0;--muted: #9aa3a8;--good: #6cd07a;--bad: #ff6a5a;--info: #7ab8ff;--radius: 10px;--font: "Inter", system-ui, -apple-system, "Segoe UI", sans-serif;--display: "Cinzel", Georgia, serif}*{box-sizing:border-box}html,body,#app{height:100%;margin:0}body{background:var(--bg);color:var(--text);font:14px/1.4 var(--font);-webkit-font-smoothing:antialiased}button,input,select,textarea{font:inherit;color:inherit}a{color:var(--gold-2)}h1,h2,h3{margin:0 0 8px}p{margin:6px 0}.panel{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);box-shadow:0 12px 40px #00000073,inset 0 1px #ffffff0a}.pad{padding:18px 20px}.btn{appearance:none;border:1px solid var(--line-strong);color:var(--text);white-space:nowrap;cursor:pointer;background:linear-gradient(#2a3238,#1d2428);border-radius:5px;justify-content:center;align-items:center;gap:6px;min-width:72px;min-height:36px;padding:0 16px;font-size:14px;font-weight:600;letter-spacing:.02em;line-height:1.2;text-decoration:none;transition:transform 80ms,background .15s,border-color .15s;display:inline-flex}.btn:hover{border-color:var(--gold);background:linear-gradient(#323b42,#222a2f)}.btn:active{transform:translateY(1px)}.btn:disabled{opacity:.45;cursor:default}.btn.primary{color:#1a1408;text-shadow:0 1px #ffffff40;background:linear-gradient(#e0b04c,#b8862a);border-color:#f0cc7a;box-shadow:0 0 14px #d8a64040}.btn.primary:hover{background:linear-gradient(#ecbe5c,#c49234)}.btn.small{min-width:52px;min-height:28px;padding:0 10px;font-size:12px}.btn.ghost{background:0 0}.btn.danger{border-color:#ff6a5a99}.muted{color:var(--muted)}.small{font-size:12px}.bad-text{color:var(--bad)}.title{font-family:var(--display);letter-spacing:.06em;color:var(--gold-2)}.title.heading{text-align:center;letter-spacing:.08em;text-shadow:0 0 18px #d8a64040;margin:0;font-size:22px;font-weight:800;text-transform:uppercase}.title.sub{font-size:13px;margin:14px 0 6px}.row{align-items:center;gap:8px;display:flex}.row.wrap{flex-wrap:wrap}.spacer,.grow{flex:1;min-width:0}.center{display:grid;place-items:center;height:100%;padding:24px}.shell{display:flex;flex-direction:column;height:100%;background:radial-gradient(ellipse at 50% -20%,#2a2412,#11161a 55%)}.top{position:relative;display:grid;grid-template-columns:1fr auto 1fr;align-items:center;gap:12px;padding:18px 16px 10px;border-bottom:1px solid var(--line)}.top nav{display:flex;gap:14px;font-size:13px}.top nav.end{justify-content:flex-end}.top nav a{color:var(--muted);text-decoration:none}.top nav a:hover,.top nav a.on{color:var(--gold-2)}.runes{text-align:center;letter-spacing:.35em;color:#d8a64061;white-space:nowrap;pointer-events:none;-webkit-user-select:none;user-select:none;font-size:11px;position:absolute;top:4px;left:0;right:0;overflow:hidden}.planner{flex:1;min-height:0;display:grid;grid-template-columns:min(var(--left-w, 405px),40vw) minmax(0,1fr) min(var(--right-w, 435px),40vw)}.resizer{position:absolute;top:0;bottom:0;width:9px;z-index:6;cursor:col-resize;touch-action:none}.resizer.left{left:-5px}.resizer.right{right:-5px}.resizer:after{content:"";position:absolute;top:0;bottom:0;left:4px;width:1px;background:transparent;transition:background .15s,box-shadow .15s}.resizer:hover:after,.resizer:active:after,.resizer:focus-visible:after{background:var(--gold-2);box-shadow:0 0 6px var(--gold)}.resizer:focus-visible{outline:none}.side{overflow-y:auto;padding:14px 14px 24px;background:#0e1316cc}.side.left{border-right:1px solid var(--line)}.side.right{border-left:1px solid var(--line)}.side h2{font-size:16px}.treewrap{position:relative;display:flex;flex-direction:column;min-width:0;min-height:0;padding:10px 12px 12px;gap:8px}.legendrow{display:flex;align-items:center;gap:16px;font-size:13px;flex-wrap:wrap}.legendrow .hint{font-size:12px}.skill-legend{display:inline-flex;align-items:center;gap:6px;color:#c8bea8}.skill-legend i{width:12px;height:12px;border:2px solid #a8c8ff;border-radius:50%;display:inline-block}.skill-legend i.act{border-color:var(--gold-2);border-radius:3px;transform:rotate(45deg)}.banner{display:flex;align-items:center;gap:10px;padding:8px 12px;border:1px solid var(--line-strong);border-radius:6px;background:#2a22108c;font-size:13px}.banner.bad{border-color:#ff6a5a99;background:#2a12108c}.statline{border-bottom:1px dotted #ffffff0f;justify-content:space-between;gap:8px;padding:2px 0;display:flex}.statline span{color:#c8bea8}.overcap{color:#ff9a6a;font-size:11px;font-style:normal}.capline{padding:4px 0 6px;border-bottom:1px dotted #ffffff0f}.capline .row>span{color:#c8bea8}.bar{height:5px;margin-top:4px;border-radius:3px;background:#ffffff14;overflow:hidden;display:flex}.bar i{display:block;height:100%}.bar i.g{background:#7a8a96}.bar i.t{background:var(--gold)}.ability{display:flex;align-items:center;gap:8px;padding:3px 0;font-size:13px}.ability .ico{border-radius:6px;flex:none}.foot{margin-top:16px}input.num,input.text,select,textarea.text{background:#00000059;border:1px solid var(--line);border-radius:5px;padding:4px 6px;min-height:28px}input.num{width:58px;text-align:right}input.num.wide{width:72px}input.num.target{width:92px}input.text,select,textarea.text{width:100%}input:focus-visible,select:focus-visible,textarea:focus-visible,.btn:focus-visible{outline:2px solid var(--gold-2);outline-offset:1px}select option{background:#151c21}.field{display:flex;align-items:center;justify-content:space-between;gap:8px;margin:6px 0}.field.col{flex-direction:column;align-items:stretch}.field span{color:#c8bea8}.field select{width:auto;min-width:0;max-width:100%;flex:0 1 auto}.field>span{flex:none}.check{display:flex;align-items:center;gap:8px;margin:8px 0;cursor:pointer}.section{border-top:1px solid var(--line);padding:2px 0 10px}.section summary{cursor:pointer;list-style:none}.section summary:before{content:"▸ ";color:var(--muted)}.section[open] summary:before{content:"▾ "}.goal{border:1px solid var(--line);border-radius:6px;padding:6px 8px;margin:6px 0;background:#0000002e}.goal label{display:flex;align-items:center;gap:5px;font-size:12px;color:var(--muted)}.goal .x,.chip{background:none;border:0;color:var(--muted);cursor:pointer}.goal .x{font-size:18px;line-height:1;padding:0 4px}.goal .x:hover,.chip:hover{color:var(--bad)}select.add{margin:4px 0}.templates{border-bottom:1px dotted #ffffff1f;padding-bottom:8px;margin-bottom:6px}.templates .btn.small{min-width:0}.chips{display:flex;flex-wrap:wrap;gap:4px}.chip{border:1px solid var(--line);border-radius:12px;padding:2px 8px;font-size:12px;color:var(--text)}.result{border:1px solid var(--line-strong);border-radius:6px;padding:8px 10px;margin-top:10px;background:#2a22104d}.weights{display:grid;gap:3px;margin-top:8px}.weights label{display:flex;align-items:center;justify-content:space-between;gap:8px;font-size:12.5px;color:#c8bea8}.weights.wide{grid-template-columns:repeat(auto-fill,minmax(230px,1fr));gap:4px 24px}.constellation .cnode.miss{opacity:.16}.constellation .cnode.hit{box-shadow:0 0 0 3px #fff,0 0 22px 6px var(--gold-2);z-index:2}.constellation .cnode.unlinked{border-style:dashed;border-color:var(--bad)}.constellation .cnode.changed{outline:3px dashed var(--info);outline-offset:4px}.constellation .cnode .val{position:absolute;top:-9px;left:-9px;padding:0 4px;border-radius:7px;font-size:9.5px;font-weight:700;color:#10140c;pointer-events:none;background:color-mix(in srgb,#8fe08f calc(var(--heat) * 100%),#5a6a70);border:1px solid #00000080}.constellation .cnode.act .val,.constellation .cnode.bridge .val{transform:rotate(-45deg)}.constellation .ico{display:grid;place-items:center;background-repeat:no-repeat}.skillcard{width:300px;z-index:5}.cardgrid{display:grid;grid-template-columns:auto 1fr;gap:2px 10px;margin-top:8px;font-size:12px}.cardgrid>span:nth-child(2n){text-align:right}.home{max-width:860px;margin:0 auto;padding:28px 20px;width:100%}.cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:16px;margin-top:16px}.card{display:block;padding:18px 20px;color:var(--text);text-decoration:none;transition:border-color .15s}.card:hover{border-color:var(--gold)}.admin{max-width:1100px;width:100%;margin:0 auto;padding:18px 20px 40px;display:grid;gap:14px;overflow-y:auto}.shell.page-admin,.shell.page-home{overflow-y:auto}.login{width:min(340px,100%);display:grid;gap:8px}.tbl{width:100%;border-collapse:collapse}.tbl th{text-align:left;color:var(--muted);font-weight:600;font-size:12px;padding:4px 8px}.tbl td{padding:8px;border-top:1px solid var(--line);vertical-align:middle}.tbl td.actions{white-space:nowrap;text-align:right}.tbl td.actions>*{margin-left:4px}.tag{border:1px solid var(--good);color:var(--good);border-radius:10px;padding:0 7px;font-size:11px}.diff{margin-top:12px;border:1px solid var(--line);border-radius:6px;padding:10px 12px;background:#0000002e;max-height:340px;overflow:auto}.diff ul,.log{margin:6px 0 0;padding-left:18px;font-size:13px}.log{list-style:none;padding:0;max-height:280px;overflow:auto}.log li{padding:3px 0;border-top:1px dotted #ffffff0f}textarea.area{min-height:130px;margin:6px 0;resize:vertical}textarea.mono{font:12px/1.45 ui-monospace,Menlo,Consolas,monospace;min-height:200px}@media(max-width:1000px){.planner{grid-template-columns:1fr;grid-template-rows:minmax(420px,70vh) auto auto;overflow-y:auto}.treewrap{order:-1}.resizer{display:none}.side{border:0;border-top:1px solid var(--line);overflow:visible}.top{grid-template-columns:1fr;text-align:center}.top nav,.top nav.end{justify-content:center}.legendrow .hint{display:none}}.constellation .cnode.root{background:radial-gradient(circle at 40% 35%,#343a44,#0b0e12);border-width:3px;width:58px;height:58px;margin:-29px 0 0 -29px}.constellation .cnode.key{border-style:double;border-width:5px;border-radius:10px;width:54px;height:54px;margin:-27px 0 0 -27px}.constellation .cnode.cap{border-width:3px;width:66px;height:66px;margin:-33px 0 0 -33px}.constellation .cnode.sm{background:radial-gradient(circle at 40% 35%,#262b32,#0b0e12);border-width:2px;width:28px;height:28px;margin:-14px 0 0 -14px}.constellation .cnode.sm .ico{border-radius:50%}.constellation .cnode.sm .rk{padding:0 4px;font-size:9px;bottom:-8px}.constellation .cnode.sm.have{box-shadow:0 0 10px color-mix(in srgb,var(--bc) 70%,transparent),inset 0 0 8px color-mix(in srgb,var(--bc) 45%,transparent)}.constellation .cnode.sm.can{box-shadow:0 0 9px -1px var(--bc)}.constellation .cnode.bridge{border-radius:6px;transform:rotate(45deg)}.constellation .cnode.bridge .ico{transform:rotate(-45deg)}.constellation .cnode.bridge .rk{bottom:-10px;transform:translate(-50%)rotate(-45deg)}.constellation .cnode.key.have{box-shadow:0 0 22px color-mix(in srgb,var(--bc) 80%,transparent),inset 0 0 16px color-mix(in srgb,var(--bc) 50%,transparent)}.constellation .cnode.locked{opacity:.42}.constellation .cnode.locked.sm{opacity:.35}.constellation svg line.edge.half{filter:none}.ico{flex:none;display:inline-block}.ico.flare{background-repeat:no-repeat;border-radius:6px}.ico.gi{background-repeat:no-repeat}.cell .ico{pointer-events:none}.node .ico{filter:grayscale()brightness(.55)}.node.have .ico,.node.can .ico{filter:none}.hotbar .slot.wrong .ico{filter:grayscale()brightness(.6)}.constellation{cursor:grab;-webkit-user-select:none;user-select:none;background:radial-gradient(circle,#d8a6401a,#0000 35%),radial-gradient(1px 1px at 12% 18%,#ffffff80,#0000),radial-gradient(1px 1px at 72% 34%,#fff6,#0000),radial-gradient(1px 1px at 33% 76%,#ffffff73,#0000),radial-gradient(1.5px 1.5px at 88% 82%,#ffffff80,#0000),radial-gradient(1px 1px at 54% 12%,#ffffff59,#0000),radial-gradient(1px 1px at 22% 52%,#ffffff4d,#0000),radial-gradient(#12181f,#07090c 75%);border:1px solid #d8a64033;border-radius:6px;flex:1;min-height:420px;position:relative;overflow:hidden}.constellation.drag{cursor:grabbing}.constellation .stage{width:0;height:0;position:absolute;top:50%;left:50%}.constellation svg{pointer-events:none;position:absolute;top:0;left:0;overflow:visible}.cnode{cursor:pointer;background:radial-gradient(circle at 40% 35%,#2a2f36,#0b0e12);border:2px solid #ffffff24;border-radius:50%;place-items:center;width:44px;height:44px;margin:-22px 0 0 -22px;transition:transform .12s,box-shadow .2s,border-color .2s;display:grid;position:absolute}.cnode .ico{filter:grayscale()brightness(.45);border-radius:50%}.cnode.act{border-radius:12px;width:52px;height:52px;margin:-26px 0 0 -26px;transform:rotate(45deg)}.cnode.act .ico{border-radius:6px;transform:rotate(-45deg)}.cnode.cap{border-width:3px;width:62px;height:62px;margin:-31px 0 0 -31px}.cnode.can{border-color:color-mix(in srgb,var(--bc) 80%,#fff);box-shadow:0 0 14px -2px var(--bc);animation:1.6s ease-in-out infinite alternate canPulse}.cnode.can .ico,.cnode.have .ico{filter:none}.cnode.have{border-color:var(--bc);box-shadow:0 0 18px color-mix(in srgb,var(--bc) 70%,transparent),inset 0 0 14px color-mix(in srgb,var(--bc) 45%,transparent)}.cnode.max{border-color:var(--gold-2);box-shadow:0 0 22px #f0cc7a8c,inset 0 0 14px color-mix(in srgb,var(--bc) 45%,transparent)}.cnode.locked{opacity:.5}.cnode:hover{z-index:3;filter:brightness(1.2)}.cnode .kind{color:#1a1408;background:var(--gold);pointer-events:none;border:1px solid #fff0c0;border-radius:50%;place-items:center;width:16px;height:16px;font-size:9px;display:grid;position:absolute;top:-7px;right:-7px;box-shadow:0 0 6px #d8a64099}.cnode.act .kind{top:-10px;right:-10px;transform:rotate(-45deg)}.kind-act{color:var(--gold-2)}.kind-pas{color:#a8c8ff}.cnode .rk{white-space:nowrap;background:#0d1012;border:1px solid #d8a64066;border-radius:8px;padding:0 5px;font-size:10px;font-weight:700;position:absolute;bottom:-9px;left:50%;transform:translate(-50%)}.cnode.act .rk{bottom:-12px;transform:translate(-50%)rotate(-45deg)}@keyframes canPulse{to{box-shadow:0 0 22px 2px var(--bc)}}.chub{text-align:center;width:96px;height:96px;font-family:var(--display);color:var(--gold-2);background:radial-gradient(circle,#d8a64059,#141008e6 70%);border:2px solid #d8a640b3;border-radius:50%;place-items:center;margin:-48px 0 0 -48px;display:grid;position:absolute;box-shadow:0 0 40px #d8a64059}.chub b{font-size:26px;line-height:1;display:block}.chub small{letter-spacing:.1em;font-size:10px}.cbranch{font-family:var(--display);letter-spacing:.08em;color:color-mix(in srgb,var(--bc) 85%,#fff);text-shadow:0 0 12px var(--bc);white-space:nowrap;text-align:center;pointer-events:none;font-size:15px;position:absolute;transform:translate(-50%,-50%)}.cbranch small{font-family:var(--font);color:var(--muted);text-shadow:none;letter-spacing:0;font-size:10.5px;display:block}.skillcard{pointer-events:none;background:linear-gradient(#1a1e1ef5,#0e1112f7);border:1px solid #d8a64073;border-radius:6px;width:280px;padding:12px 14px;font-size:12.5px;position:absolute;top:12px;right:12px}.skillcard b{font-family:var(--display);color:var(--gold-2);font-size:15px}.skillcard .bad{color:var(--bad);margin-top:6px}.zoomctl{gap:4px;display:flex;position:absolute;bottom:12px;left:12px}.zoomctl button{width:30px;height:30px;color:var(--gold-2);cursor:pointer;background:#0000008c;border:1px solid #d8a64066;border-radius:4px;font-weight:700}.hotbar .slot .ico.fill{border-radius:inherit;position:absolute;inset:0;width:100%!important;height:100%!important}
