diff --git a/docs/diagrams/design/district-topology.d2 b/docs/diagrams/design/district-topology.d2 new file mode 100644 index 000000000..08b10773c --- /dev/null +++ b/docs/diagrams/design/district-topology.d2 @@ -0,0 +1,235 @@ +# District Topology — Sova Transit District +# D-093 spatial layout. D-094 hierarchy: 256×256 vt (4×4 blocks). +# North = span gate entry. South-east = tram entry. + +direction: down + +vars: { + bg: "#1a1e24" + txt: "#c8d0e0" + acc: "#c8d8f0" + + pub: "#1a3320" + spub: "#2e2a10" + spriv: "#2e1a08" + priv: "#2a0e0e" + comm: "#0e1a2e" + neut: "#1e2228" + + s-pub: "#3a8a50" + s-spub: "#b8a020" + s-spriv: "#c86010" + s-priv: "#c02020" + s-comm: "#3060c0" + s-neut: "#4a5060" +} + +# ── LEGEND ── + +legend: Legend { + style.fill: ${bg} + style.stroke: ${acc} + style.font-color: ${txt} + style.font-size: 11 + direction: right + + l1: Public { style.fill: ${pub}; style.stroke: ${s-pub}; style.font-color: ${txt} } + l2: Semi-pub { style.fill: ${spub}; style.stroke: ${s-spub}; style.font-color: ${txt} } + l3: Semi-priv { style.fill: ${spriv}; style.stroke: ${s-spriv}; style.font-color: ${txt} } + l4: Private { style.fill: ${priv}; style.stroke: ${s-priv}; style.font-color: ${txt} } + l5: Commission { style.fill: ${comm}; style.stroke: ${s-comm}; style.font-color: ${txt} } +} + +# ── NORTH ENTRY: SPAN GATE ── + +span_gate: The Ring\n(span gate aperture) { + shape: hexagon + style.fill: ${comm} + style.stroke: ${s-comm} + style.font-color: ${txt} +} + +# ── GATE CLUSTER ── + +gate: Gate Cluster · 40×32 vt { + style.fill: ${bg} + style.stroke: ${s-comm} + style.font-color: ${txt} + style.border-radius: 4 + + aperture: Aperture\n8×4 { + style.fill: ${priv}; style.stroke: ${s-priv}; style.font-color: ${txt} + } + staging: Freight Staging\n24×8 { + style.fill: ${priv}; style.stroke: ${s-priv}; style.font-color: ${txt} + } + pab: Passenger Arrival\n12×8 { + style.fill: ${spub}; style.stroke: ${s-spub}; style.font-color: ${txt} + } + customs: Customs Lanes\n(freight 5×4vt + ped 3×2vt) { + style.fill: ${spriv}; style.stroke: ${s-spriv}; style.font-color: ${txt} + } + concourse: Concourse\n40×8 · PUBLIC { + style.fill: ${pub}; style.stroke: ${s-pub}; style.font-color: ${txt} + } + gallery: Gallery · z=2\n32×10 · COMMISSION { + style.fill: ${comm}; style.stroke: ${s-comm}; style.font-color: ${txt} + } + + aperture -> staging: freight { style.stroke: ${s-priv} } + aperture -> pab: passenger { style.stroke: ${s-spub} } + staging -> customs { style.stroke: ${s-spriv} } + pab -> customs { style.stroke: ${s-spub} } + customs -> concourse { style.stroke: ${s-pub} } + concourse -> gallery: "staircase (Commission)" { + style.stroke: ${s-comm}; style.stroke-dash: 4 + } + gallery -> customs: "LOS z=2 down" { + style.stroke: ${s-comm}; style.stroke-dash: 4 + } +} + +span_gate -> gate.aperture: "dual-use transit\n(90s flicker)" { + style.stroke: ${s-comm} +} + +# ── TERMINAL ── + +terminal: Terminal · 44×28 vt { + style.fill: ${bg} + style.stroke: ${s-spriv} + style.font-color: ${txt} + style.border-radius: 4 + + forecourt: Forecourt\n44×4 { + style.fill: ${spub}; style.stroke: ${s-spub}; style.font-color: ${txt} + } + cargo: Cargo Floor + Main Corridor { + style.fill: ${spriv}; style.stroke: ${s-spriv}; style.font-color: ${txt} + } + storage: Restricted Storage\n(single coded door) { + style.fill: ${priv}; style.stroke: ${s-priv}; style.font-color: ${txt} + } + hatch_t: M-HATCH-T { + shape: diamond + style.fill: ${priv}; style.stroke: ${s-priv}; style.font-color: ${txt} + } + + forecourt -> cargo { style.stroke: ${s-spriv} } + cargo -> storage: "coded door" { style.stroke: ${s-priv} } + storage -> hatch_t { style.stroke: ${s-priv} } +} + +gate.concourse -> terminal.forecourt: "district spine (south)" { + style.stroke: ${s-pub} +} + +# ── TRANSITION CORRIDOR ── + +corridor: Transition Corridor\n~40×6 vt { + style.fill: ${spub} + style.stroke: ${s-spub} + style.font-color: ${txt} + style.border-radius: 4 +} + +terminal.cargo -> corridor: "public route" { + style.stroke: ${s-spub} +} + +# ── BAR ── + +bar: The Last Shift · 28×22 vt { + style.fill: ${bg} + style.stroke: ${s-pub} + style.font-color: ${txt} + style.border-radius: 4 + + approach: Bar Approach\n28×3 { + style.fill: ${spub}; style.stroke: ${s-spub}; style.font-color: ${txt} + } + floor: Main Floor\n(corner booth · card table) { + style.fill: ${pub}; style.stroke: ${s-pub}; style.font-color: ${txt} + } + bathroom: Bathroom Corridor\n(east ext.) { + style.fill: ${spriv}; style.stroke: ${s-spriv}; style.font-color: ${txt} + } + backroom: Back Room\n(Lera) { + style.fill: ${priv}; style.stroke: ${s-priv}; style.font-color: ${txt} + } + hatch_b: M-HATCH-B { + shape: diamond + style.fill: ${priv}; style.stroke: ${s-priv}; style.font-color: ${txt} + } + + approach -> floor { style.stroke: ${s-pub} } + floor -> bathroom: "east door" { style.stroke: ${s-spriv} } + floor -> backroom: "staff only" { style.stroke: ${s-priv} } + bathroom -> hatch_b { style.stroke: ${s-priv} } +} + +corridor -> bar.approach: "bar-side decompression" { + style.stroke: ${s-spub} +} + +# ── MAINTENANCE CORRIDOR (z=0) ── + +maint: Maintenance Corridor\n(z=0 · Era 1 · 2vt wide)\nzero public traffic { + style.fill: ${priv} + style.stroke: ${s-priv} + style.font-color: ${txt} + style.border-radius: 4 + style.stroke-dash: 5 +} + +junc: JUNC-1 { + shape: diamond + style.fill: ${priv}; style.stroke: ${s-priv}; style.font-color: ${txt} +} + +terminal.hatch_t -> maint: "z=1 down z=0" { + style.stroke: ${s-priv}; style.stroke-dash: 5 +} +maint -> junc { style.stroke: ${s-priv}; style.stroke-dash: 5 } +junc -> bar.hatch_b: "z=0 up z=1" { + style.stroke: ${s-priv}; style.stroke-dash: 5 +} + +# ── SOUTH-EAST ENTRY: TRAM ── + +the_loop: The Loop\n(station tram · 6 districts) { + shape: hexagon + style.fill: ${neut} + style.stroke: ${s-neut} + style.font-color: ${txt} +} + +platform: Transit Platform\n~12×8 vt · bar-side\n(encounter node) { + style.fill: ${pub} + style.stroke: ${s-pub} + style.font-color: ${txt} + style.border-radius: 4 +} + +the_loop -> platform: "workers arrive here (G-11)" { + style.stroke: ${s-neut} +} +platform -> bar.approach: "adjacent" { + style.stroke: ${s-pub} +} + +# ── SECTOR 3 ── + +sector3: Sector 3 Residential\n~15×12 vt · Drin/Naia { + style.fill: ${spub} + style.stroke: ${s-spub} + style.font-color: ${txt} + style.border-radius: 4 +} + +sector3 -> terminal.forecourt: "near Terminal" { + style.stroke: ${s-spub}; style.stroke-dash: 3 +} +sector3 -> maint: "adjacent to spine" { + style.stroke: ${s-neut}; style.stroke-dash: 3 +} diff --git a/docs/diagrams/design/district-topology.png b/docs/diagrams/design/district-topology.png new file mode 100644 index 000000000..d0644d5f6 Binary files /dev/null and b/docs/diagrams/design/district-topology.png differ