:root{--bg:#151b16;--panel:#252f25;--edge:#4c5a43;--text:#efe9d7;--muted:#b8bda7;--accent:#b5a06a;--gold:#dfc28a}*{box-sizing:border-box}body{margin:0;background:radial-gradient(ellipse at top,#2c382a,#151b16 70%);color:var(--text);font:14px system-ui,-apple-system,Segoe UI,sans-serif}main{max-width:940px;margin:auto;padding:24px 16px}header{display:flex;justify-content:space-between;gap:16px;align-items:center;margin-bottom:20px}small,.muted{color:var(--muted)}.eyebrow{font-size:10px;letter-spacing:2px;color:var(--accent);font-weight:700}h1{font-size:clamp(25px,5vw,37px);letter-spacing:.5px;margin:4px 0}h2{font-size:16px;margin:0 0 14px}.stats{display:flex;gap:8px;flex-wrap:wrap}.stat{background:var(--panel);border:1px solid var(--edge);padding:10px 16px;border-radius:7px;min-width:90px}.stat strong{display:block;font-size:21px;color:var(--gold);margin-top:2px}section{background:var(--panel);border:1px solid var(--edge);border-radius:10px;padding:16px;margin-bottom:14px}.arena{background:#151e17;border:1px solid #5e6546;border-radius:6px;overflow:hidden}canvas{display:block;width:100%;height:auto;image-rendering:pixelated}.arena-caption{display:flex;justify-content:space-between;padding:9px 12px;font-size:11px;color:var(--muted)}.bottom{display:grid;grid-template-columns:1fr 1fr;gap:14px}.name{display:flex;justify-content:space-between;align-items:center;font-weight:700}.bar{height:9px;background:#394437;border-radius:5px;overflow:hidden;margin:11px 0 7px}.fill{height:100%;width:100%;background:#7c9d61;transition:width .2s}.enemy .fill{background:#e98b78}.details{display:flex;justify-content:space-between;font-size:12px;color:var(--muted)}button{background:var(--accent);border:0;color:#1b2016;border-radius:6px;padding:11px 16px;font:700 13px system-ui;cursor:pointer}button:hover{filter:brightness(1.1)}button:disabled{opacity:.4;cursor:default}.controls{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin-top:14px}.message{color:var(--muted);font-size:12px;min-height:18px;margin-top:12px}footer{text-align:center;font-size:11px;color:var(--muted);padding:8px} @media(max-width:620px){header{align-items:flex-start;flex-direction:column}.bottom{grid-template-columns:1fr}}

/* v0.2 — Awakening Arts: compact skill status */
.skill-list{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;margin-top:12px}.skill{border:1px solid #5d694a;background:#202b22;border-radius:5px;padding:13px;display:flex;gap:6px;flex-direction:column}.skill strong{color:#f1e6ca;font-size:14px}.skill small{color:#c3c4a8}.skill span{color:#d5bd80;font-weight:700;font-size:12px}@media(max-width:550px){.skill-list{grid-template-columns:1fr}}

/* Manual casting is available when auto skills are switched off. */
.cast{align-self:flex-start;padding:7px 11px;font-size:12px}.cast:disabled{background:#414a3e;color:#b4b7a6}

/* v0.4 — Path of Growth: permanent upgrades */
.upgrade-header{display:flex;justify-content:space-between;align-items:start;gap:12px;flex-wrap:wrap}.upgrade-header p{margin:0 0 14px;font-size:12px}.upgrade-total{font-size:11px;color:var(--accent);padding:6px 9px;border:1px solid var(--edge);border-radius:5px}.upgrade-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px}.upgrade{background:#1c261d;border:1px solid #4e5a44;border-radius:7px;padding:13px;display:flex;flex-direction:column;gap:9px;min-width:0}.upgrade-name{display:flex;align-items:center;justify-content:space-between;gap:5px}.upgrade-name span{color:var(--accent);font-size:11px;white-space:nowrap}.upgrade small{font-size:11px;line-height:1.5;min-height:33px}.upgrade-bonus{font-size:13px;font-weight:700;color:#dfc28a}.upgrade button{margin-top:auto;padding:9px 5px;font-size:11px}.upgrade button:disabled{background:#454d3d;color:#c4c5ae}@media(max-width:760px){.upgrade-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}@media(max-width:380px){.upgrade-grid{grid-template-columns:1fr}}

/* Ancient Wilds — subtle woodland surfaces, weathered brass controls */
button{background:#a99565;color:#191f16;border:1px solid #c6b17a}button:hover:not(:disabled){background:#c4b27d;filter:none}.stat,.skill,.upgrade{box-shadow:inset 0 1px 0 #ffffff08}.arena{border-color:#65684a}.eyebrow,.upgrade-total,.upgrade-name span{color:#d7c38c}

/* v0.5: Ancient Wilds talent tree */
.talent-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px;margin-top:16px}.talent-branch{border:1px solid #495944;background:#202a22;border-radius:8px;padding:14px}.talent-branch h3{margin:0 0 12px;color:#d9c394;font-size:17px}.talent-node{border-left:3px solid #8c9d65;background:#2c382d;padding:12px;margin:10px 0;border-radius:4px;display:flex;flex-direction:column;gap:7px}.talent-node strong{color:#e9ead7}.talent-node small{color:#b8c2a9}.talent-node button{align-self:flex-start}.talent-node.learned{border-left-color:#d1b474;background:#3b402e}.talent-node.locked{opacity:.68}.talent-note{margin:14px 0 0}@media(max-width:600px){.talent-grid{grid-template-columns:1fr}}

/* v0.5 UI refinement — icon-only connected talent paths */
.talent-grid{gap:16px}.talent-branch{min-width:0;padding:18px 12px 24px}.talent-branch h3{text-align:center;letter-spacing:1px;font-size:14px;text-transform:uppercase;margin:0 0 19px}.talent-path{display:flex;flex-direction:column;align-items:center;gap:0;padding:8px 0 20px}.talent-node{position:relative;display:block;flex:none;padding:0;margin:0;border:0;border-radius:50%;background:transparent;opacity:1}.talent-node.locked{opacity:.75}.talent-icon{width:64px;height:64px;display:grid;place-items:center;border-radius:14px;border:2px solid #59674e;background:linear-gradient(150deg,#354232,#1b261d);color:#b9c1a6;font-size:30px;line-height:1;box-shadow:0 4px 0 #101810, inset 0 1px 0 #ffffff12;cursor:pointer;transition:transform .15s,border-color .15s,background .15s}.talent-icon:hover,.talent-icon:focus-visible{transform:translateY(-2px);border-color:#e2c68c;outline:2px solid #b5a16f;outline-offset:3px}.talent-node.learned{background:transparent;border:0}.talent-node.learned .talent-icon{background:linear-gradient(140deg,#73623d,#3c4930);border-color:#ddbd76;color:#ffebaf;box-shadow:0 0 15px #d7b66b30,0 4px 0 #101810}.talent-node.locked .talent-icon{filter:grayscale(.6);border-color:#455344}.talent-connector{width:4px;height:39px;background:#485744;display:block;border-radius:2px}.talent-connector.connected{background:#c3a66d;box-shadow:0 0 9px #c4ad6d44}.talent-tooltip{display:none;position:absolute;z-index:20;left:calc(100% + 13px);top:50%;transform:translateY(-50%);width:190px;max-width:60vw;padding:11px 12px;border:1px solid #b9a16d;border-radius:6px;background:#121b15;color:#eee8d5;box-shadow:0 8px 22px #0009;text-align:left;pointer-events:none}.talent-tooltip strong,.talent-tooltip small,.talent-tooltip em{display:block}.talent-tooltip strong{font-size:13px;color:#f1d8a0}.talent-tooltip small{font-size:12px;color:#d4d9c5;margin:6px 0}.talent-tooltip em{font-size:11px;font-style:normal;color:#b9bd9c}.talent-node:hover .talent-tooltip,.talent-node:focus-within .talent-tooltip,.talent-node.show-tip .talent-tooltip{display:block}@media(max-width:600px){.talent-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}.talent-branch{padding:12px 4px 20px}.talent-icon{width:54px;height:54px;font-size:26px}.talent-tooltip{left:50%;top:auto;bottom:calc(100% + 10px);transform:translateX(-50%);width:170px;max-width:75vw}.talent-branch:first-child .talent-tooltip{left:0;transform:none}.talent-branch:last-child .talent-tooltip{left:auto;right:0;transform:none}}

/* v0.5 UI polish — compact permanent stat upgrades */
.upgrades{padding:13px}.upgrades .upgrade-header h2{margin-bottom:4px}.upgrades .upgrade-header p{margin-bottom:9px}
.upgrade-grid{gap:7px}.upgrade{padding:9px;gap:5px;border-radius:6px}.upgrade-name strong{font-size:12px}.upgrade-name span,.upgrade small{font-size:10px}.upgrade small{min-height:0;line-height:1.35}.upgrade-bonus{font-size:12px}.upgrade button{padding:7px 4px;font-size:10px}
/* Talent popup — Ancient Wilds */
.talent-launch{display:flex;align-items:center;justify-content:space-between;gap:14px;flex-wrap:wrap;padding:13px 16px}.talent-launch h2{margin:0 0 4px}.talent-launch p{font-size:12px;margin:0}.talent-launch-actions{display:flex;align-items:center;gap:9px;flex-wrap:wrap}
.talent-modal[hidden]{display:none}.modal-open{overflow:hidden}.talent-modal{position:fixed;inset:0;z-index:1000;display:flex;align-items:center;justify-content:center;padding:16px}.talent-backdrop{position:absolute;inset:0;background:#080d09d9;backdrop-filter:blur(4px)}.talent-dialog{position:relative;z-index:1;display:flex;flex-direction:column;width:min(930px,100%);max-height:min(90vh,900px);background:#1c271d;border:1px solid #9d9063;border-radius:12px;box-shadow:0 22px 70px #000c;overflow:hidden}.talent-dialog-head{display:flex;justify-content:space-between;align-items:start;gap:14px;padding:19px 22px 13px;border-bottom:1px solid #465441}.talent-dialog-head h2{font-size:24px;margin:3px 0}.talent-dialog-head p{font-size:12px;margin:0}.talent-dialog-actions{display:flex;align-items:center;gap:10px}.talent-dialog-actions button{padding:8px 12px;font-size:16px}.talent-dialog .talent-grid{overflow-y:auto;overflow-x:hidden;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:13px;margin:0;padding:18px 22px 24px;min-height:0}.talent-dialog .talent-branch{background:#243126;padding:12px 8px 22px}.talent-branch-heading{text-align:center;min-height:53px}.talent-branch-heading h3{margin:0 0 3px}.talent-branch-heading small{font-size:11px}.talent-dialog .talent-path{padding:6px 0}.talent-dialog .talent-icon{width:51px;height:51px;font-size:23px;border-radius:12px}.talent-dialog .talent-connector{height:21px}.talent-dialog-foot{padding:10px 22px;color:#b8bda7;font-size:11px;border-top:1px solid #465441}.talent-dialog .talent-tooltip{left:calc(100% + 12px);max-width:190px}.talent-dialog .talent-branch:last-child .talent-tooltip{left:auto;right:calc(100% + 12px)}
@media(max-width:620px){.talent-modal{padding:7px}.talent-dialog{max-height:96vh}.talent-dialog-head{padding:12px;align-items:center}.talent-dialog-head h2{font-size:19px}.talent-dialog-head p{font-size:10px}.talent-dialog-actions{flex-direction:column-reverse;gap:5px}.talent-dialog .talent-grid{padding:10px 6px;gap:5px}.talent-dialog .talent-branch{padding:10px 2px}.talent-dialog .talent-icon{width:43px;height:43px;font-size:20px}.talent-dialog .talent-tooltip{left:50%;top:auto;bottom:calc(100% + 9px);transform:translateX(-50%);width:155px;max-width:85vw}.talent-dialog .talent-branch:first-child .talent-tooltip{left:0;transform:none}.talent-dialog .talent-branch:last-child .talent-tooltip{left:auto;right:0;transform:none}.upgrade-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}

/* Branching talent graph: forked routes and converging capstones */
.talent-dialog{width:min(1160px,100%)}
.talent-dialog .talent-grid{overflow:auto;grid-template-columns:repeat(3,minmax(285px,1fr));gap:12px}
.talent-graph{height:420px;position:relative;width:100%;min-width:270px}
.talent-lines{position:absolute;inset:0;width:100%;height:100%;overflow:visible;pointer-events:none}
.branch-line{fill:none;stroke:#55634c;stroke-width:3;stroke-linejoin:round;stroke-linecap:round}
.branch-line.connected{stroke:#d5b875;filter:drop-shadow(0 0 3px #c8a35b66)}
.talent-dialog .graph-node{position:absolute;transform:translate(-50%,-50%);z-index:1}
.talent-dialog .graph-node .talent-icon{width:52px;height:52px}
.talent-dialog .graph-node .talent-tooltip{left:calc(100% + 9px)}
.talent-dialog .talent-branch:last-child .graph-node .talent-tooltip{left:auto;right:calc(100% + 9px)}
@media(max-width:920px){.talent-dialog .talent-grid{grid-template-columns:repeat(3,285px)}.talent-dialog-foot::after{content:' · Scroll sideways to view all paths'}}

/* v0.5 — compact passive web, five independent branching clusters */
.talent-dialog{width:min(1200px,98vw)}
.talent-dialog .talent-grid{display:grid;grid-template-columns:repeat(3,minmax(270px,1fr));gap:10px;overflow:auto;padding:12px;align-items:start}
.web-branch{background:#202b21;border:1px solid #52634c;border-radius:8px;padding:8px;min-width:270px}
.web-branch-head{font-weight:800;color:#e5d4a8;font-size:12px;text-align:center;padding:5px 0 9px}
.web-graph{height:350px;width:100%;position:relative;--branch-accent:#c9b178}
.web-lines{position:absolute;inset:0;width:100%;height:100%;pointer-events:none}
.web-edge{stroke:#506047;stroke-width:2;fill:none}.web-edge.lit{stroke:var(--branch-accent);stroke-width:3}
.web-node{position:absolute;transform:translate(-50%,-50%);z-index:1}
.web-icon{width:33px;height:33px;padding:0;border-radius:9px;background:#2b392b;border:2px solid #627054;color:#c1c5ae;font-size:17px;display:grid;place-items:center;box-shadow:0 2px 5px #0008}
.web-node.learned .web-icon{background:#59573a;border-color:var(--branch-accent);color:#ffe3a7;box-shadow:0 0 10px #cfba7c55}
.web-node.available .web-icon{border-color:#b6a474}.web-node.locked .web-icon{opacity:.62;filter:grayscale(.4)}
.web-icon:hover,.web-icon:focus-visible{outline:2px solid #e1c990;outline-offset:2px;transform:scale(1.1)}
.web-tooltip{display:none;position:absolute;z-index:50;bottom:calc(100% + 8px);left:50%;transform:translateX(-50%);width:185px;padding:10px;background:#111a13;border:1px solid #b4a075;border-radius:6px;box-shadow:0 6px 24px #000c;pointer-events:none;text-align:left}
.web-tooltip strong,.web-tooltip span,.web-tooltip small{display:block}.web-tooltip strong{color:#f1d9a2;font-size:12px}.web-tooltip span{color:#e1e3d2;font-size:11px;margin:5px 0}.web-tooltip small{color:#b9bda7;font-size:10px}
.web-node:hover .web-tooltip,.web-node:focus-within .web-tooltip,.web-node.inspect .web-tooltip{display:block}
@media(max-width:900px){.talent-dialog .talent-grid{grid-template-columns:repeat(2,minmax(270px,1fr))}}
@media(max-width:620px){.talent-dialog .talent-grid{grid-template-columns:minmax(270px,1fr)}.talent-dialog{max-height:96vh}}

/* Three starting talents feed the five compact specialization webs. */
.web-origins{grid-column:1/-1;background:#19241b;border:1px solid #68744d;border-radius:9px;padding:14px 18px;margin-bottom:5px;text-align:center}
.web-origin-title{font-size:11px;letter-spacing:2px;color:#d8c69c;font-weight:800;margin-bottom:12px}
.web-root-row{display:flex;justify-content:space-evenly;gap:20px;flex-wrap:wrap}
.web-root-item{display:flex;align-items:center;flex-direction:column;gap:6px;color:#dfdfc8;font-size:11px;position:relative;min-width:90px}
.web-root-item:after{content:"";position:absolute;top:65px;height:16px;width:2px;background:#8b885d}
.web-root{width:52px;height:52px;border:2px solid #aa9b6b;background:#334231;color:#e6d8a5;border-radius:13px;font-size:26px;cursor:pointer}
.web-root.learned{background:#6b6240;box-shadow:0 0 13px #c6ae6b88;border-color:#ebd28d}
.web-root:hover,.web-root:focus-visible{outline:2px solid #f1dca3;outline-offset:3px}
.web-branch{position:relative}
.web-branch:before{content:"";position:absolute;left:50%;top:-11px;width:2px;height:11px;background:#8b885d}

/* Heartwood Web: one connected radial talent map, center-out progression. */
.talent-dialog{width:min(1260px,99vw)}
.talent-dialog .talent-grid{display:block;overflow:auto;max-height:min(75vh,820px);padding:0;background:radial-gradient(circle at center,#36422b 0%,#1b251d 42%,#111a15 100%);border:1px solid #536348;border-radius:7px}
.radial-world{width:1200px;height:1000px;position:relative;margin:auto;isolation:isolate;background:repeating-radial-gradient(circle at center,transparent 0 98px,#a2a16b0c 99px 100px)}
.radial-lines{position:absolute;inset:0;width:100%;height:100%;pointer-events:none}
.radial-edge{fill:none;stroke:#52614b;stroke-width:2.5}.radial-edge.main{stroke-width:3.5}.radial-edge.lit{stroke:#c4b077;stroke-width:4;filter:drop-shadow(0 0 3px #c9ad5a)}
.radial-node{position:absolute;transform:translate(-50%,-50%);z-index:2}.radial-icon{width:36px;height:36px;border-radius:50%;border:2px solid #647359;background:#27342b;color:#c8d0ae;font-size:18px;padding:0;cursor:pointer;box-shadow:0 2px 6px #0009}
.radial-node.origin .radial-icon{width:59px;height:59px;border:3px solid #d4b979;font-size:28px;background:#4a5134;box-shadow:0 0 0 5px #a89e5130,0 0 20px #c2ac6455}
.radial-node.learned .radial-icon{border-color:#ead18a;background:#625c36;color:#fff2bf;box-shadow:0 0 12px #d4b36c88}
.radial-node.locked .radial-icon{opacity:.7}.radial-node.available .radial-icon{border-color:#c4b77e}
.radial-icon:hover,.radial-icon:focus-visible{outline:2px solid #f1d28d;outline-offset:3px}
.radial-tip{display:none;position:absolute;bottom:calc(100% + 9px);left:50%;transform:translateX(-50%);z-index:30;pointer-events:none;width:185px;padding:9px 11px;background:#101a13;border:1px solid #c0ad76;border-radius:5px;box-shadow:0 5px 20px #000b;text-align:left}
.radial-tip strong,.radial-tip span,.radial-tip small{display:block}.radial-tip strong{color:#efd79e;font-size:12px}.radial-tip span{color:#e3e8d9;font-size:11px;margin:5px 0}.radial-tip small{color:#acb8a4;font-size:10px}
.radial-node:hover .radial-tip,.radial-node:focus-within .radial-tip,.radial-node.inspect .radial-tip{display:block}
.radial-hub{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);color:#c9b785;font-weight:800;font-size:10px;letter-spacing:2px;background:#18251a;padding:6px 8px;border:1px solid #576247;border-radius:20px}
.radial-label{position:absolute;transform:translate(-50%,-50%);font-size:13px;letter-spacing:2px;text-transform:uppercase;color:#c5b58d;font-weight:800;pointer-events:none;text-shadow:0 2px 5px #111}
@media(max-width:800px){.radial-world{margin:0}.talent-dialog .talent-grid{max-height:68vh}}

/* Lineage restrictions: unrelated branches stay visible for planning, but muted. */
.radial-label.lineage-locked{opacity:.4;filter:grayscale(1)}
.radial-node.locked .radial-icon{cursor:help}

/* Heartwood polished map: one clean interactive canvas, not a scrollable document */
.talent-dialog{width:min(1380px,97vw);max-height:94vh;border:1px solid #857955;background:#151e17;box-shadow:0 30px 110px #000e}
.talent-dialog-head{background:linear-gradient(105deg,#263526,#18241c);padding:15px 22px}
.talent-dialog-head h2{font-size:23px}
.talent-map-shell{min-height:0;display:flex;flex-direction:column;flex:1}
.talent-map-toolbar{display:flex;align-items:center;justify-content:flex-end;gap:7px;padding:8px 12px;background:#19261c;border-bottom:1px solid #4a5a44}
.talent-map-hint{margin-right:auto;color:#aebda8;font-size:11px;letter-spacing:.3px}
.talent-map-toolbar button{height:29px;min-width:32px;padding:2px 8px;background:#344331;border:1px solid #6d7859;color:#e8dfbe;font-size:17px}
.talent-dialog .talent-grid{display:block;position:relative;flex:1;min-height:390px;height:min(70vh,730px);max-height:none;overflow:hidden;padding:0;margin:0;border:0;border-radius:0;cursor:grab;touch-action:none;background:radial-gradient(ellipse at 50% 50%,#2d3c2a 0%,#1b291f 45%,#111b15 100%)}
.talent-dialog .talent-grid:active{cursor:grabbing}
.radial-world{position:absolute;top:0;left:0;margin:0;transform-origin:top left;background:repeating-radial-gradient(circle at 50% 50%,transparent 0 99px,#b9b17c10 100px 101px);will-change:transform}
.radial-edge{stroke:#63735b;stroke-width:2.2;opacity:.78}.radial-edge.main{stroke-width:3}.radial-edge.lit{stroke:#e4c785;stroke-width:3.3;opacity:1;filter:drop-shadow(0 0 3px #e4b85a)}
.radial-icon{width:35px;height:35px;border:1.8px solid #73836b;background:radial-gradient(circle at 35% 25%,#344734,#1c2b22);color:#d1d7c2;box-shadow:0 2px 8px #0009;transition:border-color .12s,background .12s,box-shadow .12s}
.radial-node.origin .radial-icon{width:62px;height:62px;background:radial-gradient(circle at 35% 30%,#6c7044,#333d2d);border:3px solid #d5b879;box-shadow:0 0 0 5px #a99a5a29,0 0 23px #c2ac6444}
.radial-node.learned .radial-icon{background:radial-gradient(circle at 35% 30%,#877347,#48432e);border-color:#f1d18d;box-shadow:0 0 12px #e2b45c77}
.radial-node.locked .radial-icon{opacity:.45;filter:saturate(.55)}.radial-node.available .radial-icon{border-color:#b9b783}
.radial-node:hover{z-index:30}.radial-node:hover .radial-icon{border-color:#f0d99e;box-shadow:0 0 16px #e5bd7170}
.radial-tip{width:210px;background:#121e16;border:1px solid #b3a276;border-radius:9px;padding:12px;box-shadow:0 12px 32px #000e}
.radial-tip strong{font-size:13px}.radial-tip span{font-size:12px}.radial-tip small{line-height:1.4}
.radial-label{font-size:13px;color:#d7c18e;letter-spacing:2.5px;text-shadow:0 2px 8px #000}
.radial-hub{font-size:10px;letter-spacing:1px;padding:7px 10px;border:1px solid #867d51;background:#19261c;box-shadow:0 0 15px #0007}
.talent-dialog-foot{background:#19261c;padding:9px 18px}
@media(max-width:620px){.talent-dialog{max-height:97vh}.talent-dialog .talent-grid{min-height:360px;height:65vh}.talent-map-hint{font-size:10px}.talent-dialog-head{padding:12px}.talent-dialog-head h2{font-size:19px}}

/* Spacious sector layout; reserved room for future rings */
.radial-world{width:1800px;height:1600px;background:repeating-radial-gradient(circle at 50% 50%,transparent 0 124px,#b9b17c10 125px 126px)}
.radial-label{white-space:nowrap;transform:translate(-50%,-50%);padding:6px 12px;background:#152219c9;border:1px solid #4d624d;border-radius:20px;font-size:12px;pointer-events:none}
.radial-node{transform:translate(-50%,-50%)}
.radial-tip{bottom:calc(100% + 9px);left:50%;transform:translateX(-50%);max-width:220px;pointer-events:none}
.radial-hub{transform:translate(-50%,-50%);white-space:nowrap}

/* Deterministic tree geometry: same coordinate system for SVG and nodes. */
.radial-world{width:2200px;height:2200px;background:repeating-radial-gradient(circle at 50% 50%,transparent 0 174px,#b9b17c0e 175px 176px)}
.radial-lines{width:2200px;height:2200px}
.radial-edge{stroke-width:2;opacity:.7}.radial-edge.main{stroke-width:2.5}

/* Five origin roots, stable drag gesture, and non-selectable map text. */
#talentGrid,#talentGrid *, .radial-world,.radial-world *{
 user-select:none;-webkit-user-select:none;
 -webkit-touch-callout:none;
}
#talentGrid{touch-action:none;cursor:grab}
#talentGrid.is-dragging{cursor:grabbing}
#talentGrid .radial-node button{touch-action:manipulation}
.radial-node.origin .radial-icon{width:57px;height:57px}

/* Compact five-lineage web: 125px ring spacing, color-coded paths. */
.radial-world,.radial-lines{width:auto;height:auto}
.radial-world{background:repeating-radial-gradient(circle at 50% 50%,transparent 0 124px,#c4b78a0d 125px 126px)}
.radial-node .radial-icon{border-color:var(--lineage-color,#9ba58a);box-shadow:0 0 0 2px color-mix(in srgb,var(--lineage-color,#9ba58a) 12%,transparent),0 2px 8px #0008}
.radial-node.origin .radial-icon{background:radial-gradient(circle at 35% 28%,color-mix(in srgb,var(--lineage-color) 42%,#394334),#253125);border-color:var(--lineage-color)}
.radial-node.learned .radial-icon{background:radial-gradient(circle at 35% 28%,color-mix(in srgb,var(--lineage-color) 55%,#5e5436),#3a3c2c);box-shadow:0 0 13px color-mix(in srgb,var(--lineage-color) 65%,transparent)}
.radial-node.locked .radial-icon{opacity:.48;filter:saturate(.65)}
.radial-node.available .radial-icon{opacity:1}
.radial-edge{stroke:var(--lineage-color,#75826d);opacity:.48}
.radial-edge.lit{stroke:var(--lineage-color,#d3bb82);opacity:1;filter:drop-shadow(0 0 3px var(--lineage-color))}
.radial-label{color:var(--lineage-color,#d7c18e);text-shadow:0 2px 9px #000}

/* Expansion-ready world sizing is controlled by JavaScript, not fixed CSS. */
.radial-world,.radial-lines{max-width:none;max-height:none}
.radial-world{background-size:auto}

/* v0.6 — expedition / permanent progression */
.ascension-panel{border:1px solid #806e46;background:linear-gradient(135deg,#263327,#19251d)}
.ascension-stats{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px;margin:16px 0}
.ascension-stats>div{border:1px solid #526249;border-radius:9px;background:#1a291f;padding:12px;display:flex;flex-direction:column;gap:5px}
.ascension-stats small{color:#c4c6ad}.ascension-stats strong{font-size:21px;color:#e2c88b}
.ascension-actions{display:flex;align-items:center;gap:14px;flex-wrap:wrap;margin-bottom:20px}
.ascension-panel h3{margin:18px 0 12px;color:#e2c88b}.ascension-panel h3 small{font-weight:normal;color:#b7c0ac;font-size:12px}
@media(max-width:650px){.ascension-stats{grid-template-columns:repeat(2,minmax(0,1fr))}}


/* v0.6 — Compact Expedition UI. Presentation only; no canvas logic changes. */
main{max-width:880px;padding:16px 14px}
header{margin-bottom:12px;gap:10px}
h1{font-size:clamp(22px,3.8vw,30px);margin:2px 0}
header small{font-size:11px}
section{padding:12px 14px;margin-bottom:10px;border-radius:8px}
h2{font-size:15px;margin-bottom:9px}
.stat{padding:7px 12px;min-width:78px}
.stat strong{font-size:18px;margin-top:0}
/* The simulation retains its native 640x300 drawing buffer; CSS scales it only. */
.arena{width:min(100%,520px);margin:0 auto;border-radius:7px}
.arena canvas{width:100%;height:auto;aspect-ratio:640/300;image-rendering:pixelated}
.arena-caption{padding:6px 9px;font-size:10px;gap:8px}
.controls{justify-content:center;gap:7px;margin-top:10px}
.controls button{padding:8px 11px;font-size:11px}
.message{text-align:center;margin-top:7px;min-height:16px;font-size:11px}
.upgrade-header p{margin-bottom:7px}
.upgrade-grid{gap:8px}
.upgrade{padding:10px;gap:6px}
.upgrade small{font-size:10px;min-height:28px;line-height:1.4}
.upgrade button{padding:7px 5px}
.skill-list{gap:8px;margin-top:8px}
.skill{padding:10px;gap:4px}
.skill strong{font-size:12px}
.skill small{font-size:10px}
.skill button{padding:7px 10px}
.ascension-stats{gap:8px;margin:10px 0}
.ascension-stats>div{padding:9px;gap:3px}
.ascension-stats strong{font-size:17px}
.ascension-stats small{font-size:10px}
.ascension-actions{gap:9px;margin-bottom:12px}
.ascension-actions button{padding:9px 12px}
.ascension-panel h3{margin:12px 0 9px}
.bottom{gap:10px}
.bar{margin:8px 0 5px}
footer{padding:5px}
@media(max-width:620px){
 main{padding:10px 8px}
 header{flex-direction:row;align-items:center;flex-wrap:wrap}
 .stat{min-width:70px;padding:6px 9px}
 section{padding:10px;margin-bottom:8px}
 .arena{width:100%}
 .arena-caption{font-size:9px}
 .controls button{flex:1 1 auto}
 .upgrade-grid{grid-template-columns:repeat(2,minmax(0,1fr))}
 .bottom{grid-template-columns:1fr 1fr}
}
@media(max-width:420px){.bottom{grid-template-columns:1fr}.arena-caption span:first-child{display:none}}


