/* ============ THE OBSERVATORY — 4D sitemap ============ */
body[data-page="observatory"]{overflow:hidden}
.obs-wrap{position:fixed;inset:0;z-index:1;overflow:hidden;cursor:grab;touch-action:none}
.obs-wrap.grabbing{cursor:grabbing}
.obs-stars{position:absolute;inset:-20%;pointer-events:none;background-repeat:repeat}
.obs-space{position:absolute;top:0;left:0;transform-origin:0 0;will-change:transform}
.obs-threads{position:absolute;top:0;left:0;pointer-events:none;overflow:visible}
.obs-thread{stroke:rgba(238,243,233,.12);stroke-width:1.4;transition:stroke .3s}
.obs-thread.lit{stroke:var(--lime);stroke-width:2}
.obs-node{position:absolute;transform:translate(-50%,-50%);display:flex;flex-direction:column;align-items:center;gap:.35rem;text-decoration:none;text-align:center;width:120px}
.obs-dot{width:16px;height:16px;border-radius:50%;background:var(--nc,#8DF250);box-shadow:0 0 14px var(--nc,#8DF250);transition:transform .25s,box-shadow .25s}
.obs-node:hover .obs-dot{transform:scale(1.5);box-shadow:0 0 24px var(--nc,#8DF250)}
.obs-node .obs-label{font-family:var(--font-mono);font-size:.62rem;letter-spacing:.06em;color:var(--ink);background:rgba(6,8,16,.6);padding:.15rem .45rem;border-radius:6px;line-height:1.3;max-width:120px}
.obs-node.big{width:150px}
.obs-node.big .obs-art{width:84px;height:84px}
.obs-node.big .obs-label{font-family:var(--font-display);font-size:.95rem;letter-spacing:.05em;text-transform:uppercase;background:none}
.obs-node.dim{opacity:.2}
.obs-node.match .obs-dot{transform:scale(1.8)}
.obs-node.here::after{content:"YOU ARE HERE";position:absolute;top:-1.4rem;font-family:var(--font-mono);font-size:.55rem;letter-spacing:.16em;color:var(--lime);white-space:nowrap;animation:hereBlink 1.6s ease-in-out infinite}
@keyframes hereBlink{50%{opacity:.3}}
.obs-beacon{position:absolute;width:60px;height:60px;transform:translate(-50%,-50%);border:2px solid var(--lime);border-radius:50%;pointer-events:none;animation:beacon 2s ease-out infinite}
@keyframes beacon{0%{transform:translate(-50%,-50%) scale(.4);opacity:1}100%{transform:translate(-50%,-50%) scale(2.4);opacity:0}}
/* controls + search */
.obs-ui{position:fixed;z-index:7;left:0;right:0;top:64px;display:flex;justify-content:center;pointer-events:none}
.obs-search{pointer-events:auto;background:rgba(6,8,16,.85);border:1px solid rgba(141,242,80,.4);border-radius:24px;color:var(--ink);font-family:var(--font-body);font-size:.9rem;padding:.55rem 1.1rem;width:min(80vw,360px);backdrop-filter:blur(6px)}
.obs-zoom{position:fixed;right:16px;bottom:70px;z-index:7;display:flex;flex-direction:column;gap:.4rem}
.obs-zoom button{width:40px;height:40px;border-radius:10px;background:rgba(6,8,16,.8);border:1px solid rgba(238,243,233,.2);color:var(--ink);font-size:1.2rem;cursor:pointer;backdrop-filter:blur(6px)}
.obs-zoom button:hover{border-color:var(--lime);color:var(--lime)}
.obs-legend{position:fixed;left:16px;bottom:16px;z-index:7;display:flex;flex-direction:column;gap:.3rem;font-family:var(--font-mono);font-size:.58rem;letter-spacing:.08em;text-transform:uppercase;color:var(--ink-dim);pointer-events:none}
.obs-legend span{display:flex;align-items:center;gap:.4rem}
.obs-legend i{width:9px;height:9px;border-radius:50%}
.obs-hint{position:fixed;left:50%;bottom:16px;transform:translateX(-50%);z-index:7;font-family:var(--font-mono);font-size:.56rem;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-dim);pointer-events:none}
/* accessible fallback list */
.obs-fallback{position:absolute;left:-9999px}
/* undiscovered specimens read as faint until observed */
.obs-node.undisc .obs-dot{background:#3a4152;box-shadow:none;opacity:.65}
.obs-node.undisc .obs-label{opacity:.45}
.obs-node.undisc:hover .obs-dot{background:var(--nc,#8DF250);box-shadow:0 0 14px var(--nc,#8DF250);opacity:1}
