:root{--paper: #efe9dd;--card: #fbf8f1;--card-solid: #fdfbf6;--ink: #2f2b25;--ink-soft: #514b42;--muted: #6b6459;--faint: #8c8578;--ghost: #a49c8d;--line: rgba(120, 106, 84, .16);--line-strong: rgba(120, 106, 84, .26);--accent: #ff8a3d;--accent-deep: #d9701f;--accent-ink: #a4643a;--serif: "Spectral", Georgia, serif;--mono: "IBM Plex Mono", ui-monospace, monospace;--shadow-card: 0 1px 2px rgba(60, 50, 35, .05), 0 22px 52px -34px rgba(60, 50, 35, .42);--shadow-float: 0 12px 34px -22px rgba(60, 50, 35, .55);--hatch: repeating-linear-gradient(45deg, #e6e0d3, #e6e0d3 3px, #f2eee4 3px, #f2eee4 6px)}*{box-sizing:border-box}html,body{margin:0;height:100%;overflow:hidden;background:var(--paper)}body{font-family:var(--serif);color:var(--ink)}#app{position:fixed;top:0;right:0;bottom:0;left:0;overflow:hidden}::-webkit-scrollbar{width:9px;height:9px}::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{background:#cfc4ae;border-radius:5px}.mono{font-family:var(--mono)}.board{position:absolute;top:0;right:0;bottom:0;left:0;cursor:grab;background-color:var(--paper);background-image:radial-gradient(circle,rgba(120,106,84,.26) 1.1px,transparent 1.1px)}.board.dragging{cursor:grabbing}.world{position:absolute;left:0;top:0;transform-origin:0 0}.wash{position:absolute;border-radius:50%;filter:blur(26px);pointer-events:none}.section{position:absolute;display:flex;flex-direction:column;gap:14px}.section-head{display:flex;align-items:baseline;gap:14px}.section-tag{font-family:var(--mono);font-size:12px;font-weight:600;color:#fdf8ef;background:var(--accent);padding:4px 11px;border-radius:2px;letter-spacing:.06em}.section-title{font-size:24px}.section-sub{font-size:15px;font-style:italic;color:var(--faint)}.card{background:var(--card);background-image:radial-gradient(ellipse 520px 300px at 0% 0%,rgba(255,218,186,.3),transparent 60%),radial-gradient(ellipse 560px 320px at 100% 100%,rgba(200,224,226,.28),transparent 62%);border:1px solid #e2dacb;border-radius:4px;box-shadow:var(--shadow-card);overflow:hidden}.eyebrow{font-family:var(--mono);font-size:10.5px;letter-spacing:.2em;text-transform:uppercase;color:var(--faint)}.eyebrow.accent{color:var(--accent-deep)}.note{font-size:14px;line-height:1.55;color:var(--muted);text-wrap:pretty}.small-note{font-size:13px;line-height:1.45;color:var(--faint);font-style:italic;text-wrap:pretty}.overlay{position:absolute;background:#fffdf8e0;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border:1px solid var(--line);border-radius:13px;box-shadow:var(--shadow-float)}.chip{font-family:var(--mono);font-size:12.5px;padding:7px 13px;border-radius:18px;cursor:pointer;border:1px solid var(--line-strong);background:#fffdf8d9;color:var(--muted);white-space:nowrap;-webkit-user-select:none;user-select:none}.chip:hover{border-color:var(--accent);color:var(--accent-deep)}.chip.on{background:var(--accent);color:#fffaf3;border-color:var(--accent)}.chip.mini{font-size:11.5px;padding:5px 10px}.zbtn{font-family:var(--mono);font-size:16px;width:30px;height:30px;display:flex;align-items:center;justify-content:center;border-radius:8px;border:1px solid var(--line-strong);cursor:pointer;color:var(--muted);-webkit-user-select:none;user-select:none}.zbtn:hover{border-color:var(--accent);color:var(--accent-deep)}.panel{position:absolute;right:22px;top:86px;bottom:22px;width:min(430px,36vw);background:#fdfaf4f5;-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px);border:1px solid var(--line-strong);border-radius:16px;box-shadow:0 24px 60px -34px #3c32238c;display:flex;flex-direction:column;overflow:hidden;transition:transform .26s cubic-bezier(.22,1,.36,1),opacity .2s}.panel.hidden{transform:translate(480px);opacity:0;pointer-events:none}.panel-head{padding:18px 22px 14px;border-bottom:1px solid var(--line);flex-shrink:0}.panel-body{flex:1;overflow-y:auto;padding:18px 22px 34px;display:flex;flex-direction:column;gap:22px;min-height:0}.tag-pill{font-family:var(--mono);font-size:11px;letter-spacing:.16em;text-transform:uppercase;padding:4px 10px;border-radius:4px;display:inline-block}.stat-card{border:1px solid var(--line);background:#fff9;border-radius:11px;padding:12px 13px;display:flex;flex-direction:column;gap:6px;flex:1}.metric-row{display:flex;flex-direction:column;gap:5px;padding:9px 0;border-top:1px solid rgba(120,106,84,.12)}.bar-track{height:6px;border-radius:3px;background:#786a541f;overflow:hidden}.bar-fill{height:100%;border-radius:3px}.t-row{display:flex;align-items:center;gap:11px;padding:8px 11px;border-radius:9px;background:#ffffff8c;border:1px solid rgba(120,106,84,.13);cursor:pointer}.t-row:hover{border-color:var(--accent)}.t-row.on{background:#fff0e0e6;border-color:#e8b07a}.search-box input{font-family:var(--mono);font-size:13px;color:var(--ink);background:transparent;border:none;outline:none;width:210px;padding:9px 4px}.search-drop{position:absolute;top:44px;left:0;right:0;max-height:380px;overflow-y:auto;background:#fdfaf4fa;border:1px solid var(--line-strong);border-radius:10px;box-shadow:var(--shadow-float);display:flex;flex-direction:column;padding:6px}.search-item{padding:7px 10px;border-radius:7px;cursor:pointer;display:flex;align-items:center;gap:9px}.search-item:hover,.search-item.on{background:#ff8a3d1f}.tip{position:fixed;pointer-events:none;z-index:60;max-width:340px;background:#2f2b25f0;color:#f3efe6;border-radius:9px;padding:9px 12px;font-size:13px;line-height:1.45;box-shadow:0 14px 30px -18px #0009;opacity:0;transition:opacity .12s}.tip.show{opacity:1}.tip .mono{color:#ffd9b8}.minimap{position:absolute;right:22px;bottom:22px;cursor:pointer;overflow:hidden}.minimap .mm-sec{position:absolute;border-radius:2px}.minimap .mm-view{position:absolute;border:1.6px solid var(--accent);border-radius:3px;background:#ff8a3d14}select.plain{font-family:var(--mono);font-size:12.5px;color:var(--muted);background:#fffdf8e6;border:1px solid var(--line-strong);border-radius:9px;padding:7px 9px;cursor:pointer;outline:none}.wall-cell{cursor:pointer}.wall-cell:hover{outline:1.5px solid rgba(47,43,37,.65);outline-offset:0;z-index:2}@keyframes flow{to{stroke-dashoffset:-220}}@keyframes pulse{0%,to{opacity:.5}50%{opacity:.95}}.fade-in{animation:fadein .3s ease-out}@keyframes fadein{0%{opacity:0}to{opacity:1}}
