/* Reticle pages. Drawn from the app's own vector geometry. */
.reticle-fig{margin:2rem 0;text-align:center}
.reticle-fig figcaption{margin-top:.9rem;font-size:.8rem;color:var(--ink-soft);
  letter-spacing:.03em}
svg.reticle{width:min(560px,86vw);height:auto;aspect-ratio:1;background:#05070f;
  border:1px solid var(--line,#1b2140);border-radius:6px;padding:1rem;
  box-shadow:0 0 60px rgba(34,211,238,.07)}
/* Any CSS rule beats an SVG presentation attribute, so fill="none" and
   stroke="none" on the shapes must be restated here or the colour rules wipe
   them out (until 17 Oct ranging circles drew as filled discs and every taper
   and illuminated dot picked up a 1-unit stroke). Filled shapes: dots, tapers,
   general chevrons. Stroked: lines, rings, arcs, legacy chevrons. */
svg.reticle line,svg.reticle path,svg.reticle circle[fill=none]{stroke:#e8f0ff;stroke-linecap:butt}
svg.reticle circle,svg.reticle path[stroke=none]{fill:#e8f0ff;stroke:none}
svg.reticle [fill=none]{fill:none}
svg.reticle text{fill:#9fb3d9;font-family:"JetBrains Mono",ui-monospace,monospace;
  text-anchor:middle;dominant-baseline:middle}
svg.reticle .ill{stroke:#ff4d4d}
svg.reticle circle.ill,svg.reticle path.ill[stroke=none],svg.reticle text.ill{fill:#ff4d4d;stroke:none}
svg.reticle .ill[fill=none]{fill:none;stroke:#ff4d4d}
dl.spec{display:grid;grid-template-columns:auto 1fr;gap:.45rem 1.2rem;margin:.4rem 0 1rem}
dl.spec dt{color:var(--ink-soft);font-size:.8rem;letter-spacing:.04em}
dl.spec dd{margin:0}
p.mono{font-family:"JetBrains Mono",ui-monospace,monospace;font-size:.78rem;
  line-height:1.7;color:var(--ink-soft);word-break:break-word}
p.src{font-size:.8rem;color:var(--ink-soft);margin-top:1.2rem}
.muted{color:var(--ink-soft);font-size:.75rem}
.hubgrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:1rem;margin:1.6rem 0}
.hubcard svg.reticle{width:100%;padding:.4rem;box-shadow:none}
.hubcard h2{font-size:1rem;margin:.7rem 0 .2rem}
.hubcard p{margin:.2rem 0}
