:root{--ink: #3a3128;--ink-soft: #7a6c58;--paper: #f6efe2;--paper-solid: #fbf6ec;--line: #ddd0b6;--accent: #d97757;--accent-2: #7c6bd8;--good: #62a87c;--serif: "Noto Serif SC", "Songti SC", "Georgia", serif;--sans: "PingFang SC", "Hiragino Sans GB", "Nunito", system-ui, sans-serif;--shadow: 0 8px 30px rgba(90, 70, 40, .14)}*{box-sizing:border-box}html,body{margin:0;height:100%;overflow:hidden}body{font-family:var(--sans);color:var(--ink);background:#f3ead9;-webkit-font-smoothing:antialiased}canvas#view{position:fixed;inset:0;width:100%;height:100%;display:block}.panel{background:#fbf6ece6;border:1px solid var(--line);border-radius:16px;box-shadow:var(--shadow);backdrop-filter:blur(8px)}.crosshair{position:fixed;left:50%;top:50%;width:40px;height:40px;transform:translate(-50%,-50%);pointer-events:none;opacity:.8}.crosshair .ring{fill:none;stroke:#3a3128;stroke-width:1.5;opacity:.35;stroke-dasharray:94.2;stroke-dashoffset:94.2;transform:rotate(-90deg);transform-origin:50% 50%}.crosshair .dot{fill:#3a3128;opacity:.7}.hurt{position:fixed;inset:0;pointer-events:none;opacity:0;background:radial-gradient(ellipse at center,transparent 45%,rgba(200,60,50,.55) 100%);transition:opacity .18s ease-out}.card{position:fixed;top:18px;left:18px;width:288px;padding:14px 16px}.card header{display:flex;align-items:baseline;gap:8px}.card h1{font-family:var(--serif);font-size:21px;margin:0;letter-spacing:.04em}.card p{margin:6px 0 10px;font-size:12.5px;line-height:1.55;color:var(--ink-soft)}.badge{font-size:10px;padding:2px 7px;border-radius:999px;letter-spacing:.06em;background:var(--line);color:var(--ink-soft);text-transform:uppercase}.badge[data-source=agent]{background:#efe6ff;color:#5b4bc4}.badge[data-source=fallback]{background:#ffeede;color:#b4622f}.badge[data-source=cache]{background:#e2f0e6;color:#3f7a55}.meter{height:5px;border-radius:3px;background:var(--line);overflow:hidden}.meter .fill{height:100%;width:0;border-radius:3px;background:linear-gradient(90deg,var(--good),var(--accent));transition:width .4s cubic-bezier(.2,.9,.3,1)}.warn{list-style:none;margin:8px 0 0;padding:0}.warn li{font-size:11px;line-height:1.5;color:#a05a2c;padding-left:14px;position:relative}.warn li:before{content:"⚠";position:absolute;left:0;opacity:.7}.stats{position:fixed;top:18px;right:18px;width:178px;padding:12px 14px}.hp{position:relative;height:20px;border-radius:10px;background:var(--line);overflow:hidden;margin-bottom:10px}.hpfill{height:100%;width:100%;background:linear-gradient(90deg,#e0644f,#f0a03c);transition:width .2s}.hp span{position:absolute;inset:0;display:grid;place-items:center;font-size:11px;font-weight:700;color:#fff;text-shadow:0 1px 2px rgba(0,0,0,.3)}.stats dl{margin:0;display:grid;grid-template-columns:1fr 1fr;gap:6px 10px}.stats dl>div{display:flex;justify-content:space-between;align-items:baseline}.stats dt{font-size:10.5px;color:var(--ink-soft)}.stats dd{margin:0;font-size:13px;font-weight:700;font-variant-numeric:tabular-nums}.suppress{margin:8px 0 0;font-size:10.5px;color:#a05a2c;min-height:13px}.forge{position:fixed;left:50%;bottom:24px;transform:translate(-50%);width:min(720px,calc(100vw - 40px));display:grid;grid-template-columns:1fr auto;gap:8px}.forge input{font-family:var(--sans);font-size:14px;padding:13px 16px;border:1px solid var(--line);border-radius:14px;background:#fbf6ecf0;color:var(--ink);box-shadow:var(--shadow);outline:none;backdrop-filter:blur(8px)}.forge input:focus{border-color:var(--accent)}.forge button{font-family:var(--serif);font-size:14px;letter-spacing:.1em;padding:0 22px;border:none;border-radius:14px;cursor:pointer;background:var(--ink);color:var(--paper);box-shadow:var(--shadow);transition:transform .12s,background .2s}.forge button:hover{transform:translateY(-1px)}.forge button:disabled{background:var(--ink-soft);cursor:progress}.fstatus{grid-column:1 / -1;margin:8px 2px 0;font-size:11px;color:var(--ink-soft);text-align:center;min-height:15px}.fstatus kbd{font-family:var(--sans);font-size:10px;padding:1px 5px;border-radius:5px;background:#3a312814;border:1px solid var(--line)}.fstatus.busy{color:var(--accent-2)}.fstatus.err{color:#b4432f}.graphpanel{position:fixed;right:18px;top:50%;transform:translateY(-50%);width:min(520px,36vw);max-height:60vh;padding:12px 6px 12px 14px;display:flex;flex-direction:column;transition:opacity .2s,transform .2s}.graphpanel[hidden]{display:none}.graphpanel header{display:flex;align-items:baseline;justify-content:space-between;padding-right:10px}.graphpanel h2{font-family:var(--serif);font-size:14px;margin:0 0 8px;letter-spacing:.08em}.graphpanel small{font-size:10.5px;color:var(--ink-soft);font-variant-numeric:tabular-nums}.graphbody{overflow:auto;padding-right:8px}svg.graph{display:block;overflow:visible;height:auto}svg.graph .edge{fill:none;stroke:var(--line);stroke-width:1.5}svg.graph .n rect{fill:#fff;stroke:var(--line);stroke-width:1}svg.graph .n text{font-family:var(--sans);font-size:11px;fill:var(--ink)}svg.graph .n text.sub{font-size:9px;fill:var(--ink-soft)}svg.graph .n-root rect{fill:var(--ink)}svg.graph .n-root text{fill:var(--paper)}svg.graph .n-root text.sub{fill:#f6efe2b3}svg.graph .n-body rect{fill:#ede4d2}svg.graph .n-event rect{fill:#fff4e2;stroke:#e6c9a0}svg.graph .n-action rect{fill:#fff}svg.graph .n-entity rect{fill:#f0eaff;stroke:#cbbdf5}svg.graph .n-field rect{fill:#e6f3ef;stroke:#a8d3c3}.gallery{position:fixed;inset:0;background:#3a312852;display:grid;place-items:center;z-index:20;backdrop-filter:blur(3px)}.gallery[hidden]{display:none}.gallery-inner{width:min(880px,calc(100vw - 48px));max-height:78vh;padding:18px 20px;display:flex;flex-direction:column}.gallery-inner header{display:flex;justify-content:space-between;align-items:center}.gallery-inner h2{font-family:var(--serif);font-size:18px;margin:0 0 12px;letter-spacing:.08em}.gallery-inner button{border:none;background:none;font-size:22px;cursor:pointer;color:var(--ink-soft);line-height:1}.glist{overflow:auto;display:grid;grid-template-columns:repeat(auto-fill,minmax(232px,1fr));gap:10px}.gitem{text-align:left;padding:12px 14px;border:1px solid var(--line);border-radius:13px;background:#fff;cursor:pointer;font-family:var(--sans);transition:transform .12s,border-color .2s}.gitem:hover{transform:translateY(-2px);border-color:var(--accent)}.gitem b{font-family:var(--serif);font-size:14px;display:block;margin-bottom:3px}.gitem em{font-style:normal;font-size:10.5px;color:var(--accent-2)}.gitem p{margin:5px 0 0;font-size:11px;line-height:1.5;color:var(--ink-soft)}.boot{position:fixed;inset:0;display:grid;place-items:center;z-index:30;background:radial-gradient(circle at 50% 40%,#fdf8ee,#e8dcc4);text-align:center;transition:opacity .5s ease;padding:24px}.boot[hidden]{display:none}.boot h1{font-family:var(--serif);font-size:clamp(30px,6vw,52px);margin:0 0 14px;letter-spacing:.06em}.boot p{font-size:14px;line-height:1.85;color:var(--ink-soft);margin:0 auto 26px;max-width:46ch}.boot strong{color:var(--accent)}.boot button{font-family:var(--serif);font-size:15px;letter-spacing:.16em;padding:13px 40px;border:none;border-radius:999px;cursor:pointer;background:var(--ink);color:var(--paper);box-shadow:var(--shadow)}.boot small{display:block;margin-top:18px;font-size:11px;color:var(--ink-soft)}.dmg{position:fixed;pointer-events:none;font-family:var(--serif);font-weight:700;font-size:15px;color:#fff;text-shadow:0 2px 4px rgba(0,0,0,.35);will-change:transform,opacity}.dmg.crit{color:#ffd166;font-size:19px}@media(max-width:860px){.graphpanel{display:none}.card{width:232px}}
