Back to Atlas map viewer
SOURCE / PINNED RELEASE

Made of little things.

Atlas map viewer

Release
1d2807e80b44…
Author-recorded commit
43810ed2b368…
License
LICENSE
Author’s source reference
nostr://npub182jczunncwe0jn6frpqwq3e0qjws7yqqnc3auccqv9nte2dnd63scjm4rf/wss%3A%2F%2Fgit.napplet.soy%2F/n-4757dbabc86

Archive hash verified: 8db6876d96c460ac…. The source-to-build association is the author’s claim; it has not been independently rebuilt.

app/src/styles.css
/* App-owned cartographic instrument: warm paper, blue controls, map-first HUD. */
:root { font-family:ui-sans-serif,system-ui,-apple-system,sans-serif; color:#243c49; background:#edf1eb; font-synthesis:none; --paper:#fcfcf5; --line:#c8d5d3; --blue:#2a6588; --muted:#576f79; }
* { box-sizing:border-box; } html, body, #app { height:100%; margin:0; } #app { position:relative; overflow:hidden; }
button, summary, label { cursor:pointer; } button { color:var(--blue); background:var(--paper); border:1px solid var(--line); border-radius:8px; font:inherit; min-height:44px; padding:8px 12px; } button:hover { background:#e8f1f6; } button:disabled { opacity:.45; cursor:default; } :focus-visible { outline:3px solid #bd7625; outline-offset:2px; } input { accent-color:var(--blue); width:17px; height:17px; flex:none; }
.map-scene { position:absolute; inset:0; background:#e8e6d6; background-image:linear-gradient(#b2c3c233 1px,transparent 1px),linear-gradient(90deg,#b2c3c233 1px,transparent 1px); background-size:48px 48px; }
#map,.composition-overlay,.raster-plane { position:absolute; inset:0; width:100%; height:100%; } #map { touch-action:none; } .composition-overlay,.raster-plane { pointer-events:none; }
.connection { position:absolute; top:18px; left:18px; right:84px; width:fit-content; max-width:calc(100% - 102px); display:flex; gap:10px; align-items:flex-start; padding:12px 16px; border:1px solid var(--line); border-radius:12px; background:#fcfcf5ef; box-shadow:0 3px 18px #233e4910; pointer-events:none; }
.connection strong { font-size:15px; font-weight:650; } .connection p { margin:4px 0 0; font-size:12px; color:var(--muted); line-height:1.5; } .signal { flex:none; width:9px; height:9px; border-radius:50%; background:#b48d48; margin-top:6px; } body[data-state=ready] .signal { background:#4a936d; } body[data-state=error] .signal { background:#c26745; }
.map-controls { position:absolute; top:18px; right:18px; display:grid; gap:4px; } .map-controls button { width:44px; height:44px; font-size:25px; line-height:1; padding:4px; }
.workspace { position:absolute; top:110px; left:18px; bottom:34px; width:340px; max-width:calc(100% - 92px); overflow:auto; scrollbar-width:thin; overscroll-behavior:contain; background:#fcfcf5f5; border:1px solid var(--line); border-top:3px solid #679cba; border-radius:12px; box-shadow:0 5px 30px #243c4918; padding:0 15px 12px; height:fit-content; max-height:calc(100% - 144px); }
details { border-top:1px solid var(--line); } details.picker { border-top:0; } summary { font-size:13px; font-weight:650; padding:13px 0; min-height:44px; } summary span { float:right; font-family:ui-monospace,monospace; font-size:11px; color:var(--muted); } p { font-size:12px; line-height:1.5; } .muted,.preview-note { color:var(--muted); font-size:11px; } .muted:empty { display:none; }
.discovery-row { display:flex; gap:8px; align-items:center; justify-content:space-between; } .discovery-row p { margin:0; } .discovery-row button { font-size:11px; padding:6px 9px; }
#catalog { margin-top:10px; } .map-option { display:flex; align-items:center; border-top:1px solid #c8d5d380; gap:4px; } .map-option label { display:flex; align-items:center; gap:9px; min-height:54px; flex:1; min-width:0; padding:7px 0; } .map-option strong { display:block; font-size:12px; overflow-wrap:anywhere; } .map-option small { display:block; font-size:10px; margin-top:4px; color:var(--muted); } .map-option button { flex:none; min-width:44px; font-size:18px; }
fieldset { border:0; padding:0; margin:0 0 10px; } legend { font-size:11px; color:var(--muted); padding:0; } .options { display:grid; grid-template-columns:1fr 1fr; } .options label,.option { display:flex; align-items:center; gap:7px; min-height:44px; font-size:12px; } #layers label { text-transform:capitalize; }
.proof { border-top:1px solid var(--line); } .numbers { display:grid; grid-template-columns:1.4fr 1fr; gap:10px; margin:12px 0; } .numbers strong { display:block; font-size:23px; font-weight:580; font-variant-numeric:tabular-nums; letter-spacing:-.5px; } .numbers span { display:block; margin-top:4px; font-size:10px; color:var(--muted); } #render-status { font-size:11px; color:var(--muted); margin:0 0 10px; }
dl { margin:12px 0; font-size:11px; } dt { color:var(--muted); margin-top:12px; } dd { margin:4px 0 0; line-height:1.5; overflow-wrap:anywhere; white-space:pre-wrap; font-family:ui-monospace,monospace; user-select:text; } #error { color:#a64832; font-size:12px; overflow-wrap:anywhere; }
.minimum-notice { display:none; } footer { position:absolute; bottom:9px; left:18px; right:18px; font-size:10px; color:#294a5c; text-shadow:0 0 3px white; pointer-events:none; } footer span { float:right; } [hidden] { display:none!important; }
@media(max-width:520px) { .connection { top:10px; left:10px; right:64px; max-width:calc(100% - 74px); padding:9px 11px; gap:7px; } .connection strong { font-size:12px; } .connection p { font-size:10px; } .map-controls { top:10px; right:10px; } .workspace { top:108px; left:10px; max-width:calc(100% - 74px); width:320px; padding:0 10px 10px; max-height:calc(100% - 140px); } .options { grid-template-columns:1fr; } .numbers { gap:6px; } .numbers strong { font-size:19px; } footer { left:10px; right:10px; font-size:9px; } footer span { display:none; } }
@media(max-height:400px) and (min-width:521px) { .connection { top:8px; left:8px; padding:7px 10px; } .connection p { display:none; } .workspace { top:58px; left:8px; max-height:calc(100% - 84px); } .map-controls { top:8px; right:8px; } }
@media(max-width:259px),(max-height:219px) { .connection,.workspace,.map-controls,footer { display:none; } .minimum-notice { display:block; position:absolute; left:10px; right:10px; top:10px; margin:0; padding:12px; background:var(--paper); border:1px solid var(--line); border-radius:8px; font-size:13px; } .minimum-notice small { display:block; color:var(--muted); font-size:11px; margin-top:6px; } }