Add iPad support, auto-pinning, and comprehensive logging
- Adaptive iPhone/iPad layout with NavigationSplitView sidebar - Auto-detect SSL-pinned domains, fall back to passthrough - Certificate install via local HTTP server (Safari profile flow) - App Group-backed CA, per-domain leaf cert LRU cache - DB-backed config repository, Darwin notification throttling - Rules engine, breakpoint rules, pinned domain tracking - os.Logger instrumentation across tunnel/proxy/mitm/capture/cert/rules/db/ipc/ui - Fix dyld framework embed, race conditions, thread safety
13
icons/design-philosophy.md
Normal file
@@ -0,0 +1,13 @@
|
||||
# Signal Geometry
|
||||
|
||||
## A Visual Philosophy
|
||||
|
||||
**Signal Geometry** holds that invisible infrastructure — the unseen pathways through which information travels — possesses an inherent visual beauty when rendered with the precision of cartographic science and the soul of concrete poetry. The philosophy treats data flow not as abstraction but as *terrain*: something that can be surveyed, contoured, and mapped with the same reverence a geologist brings to lithographic cross-sections. Every mark is meticulously crafted, the product of deep expertise and painstaking attention to spatial relationships that most would overlook entirely.
|
||||
|
||||
Form emerges from the tension between containment and passage. Circles suggest endpoints, nodes, origins. Lines suggest transit, inspection, the liminal space between request and response. The philosophy demands that these elemental shapes — circles bisected by lines, arrows that curve through bounded fields, apertures that frame what flows through them — carry all meaning. There is no decoration; every stroke is structural. The composition must appear as though someone at the absolute top of their field labored over every radius, every weight, every negative-space pocket until the geometry itself *breathes*. Master-level execution is the only acceptable standard.
|
||||
|
||||
Color operates as signal classification. A constrained palette — no more than three hues per composition — encodes function through chromatic discipline. Cool tones (deep navy, slate, teal) convey the substrate: the network itself, the infrastructure layer. A single warm or luminous accent (electric blue, amber, signal green) marks the point of intervention — the moment where passive flow becomes observed flow. This accent must feel *earned*, appearing only where the concept demands it, calibrated with the care of a master colorist mixing pigments for a single decisive brushstroke. The interplay between muted ground and vivid signal creates visual hierarchy without a single word of explanation.
|
||||
|
||||
Space is sacred and structural. Generous negative space is not emptiness but *bandwidth* — the capacity that makes transmission possible. Elements float in considered relationship to one another, their distances as meaningful as their forms. The philosophy insists on mathematical harmony: golden ratios, consistent stroke weights, curves that resolve with the inevitability of well-engineered protocols. Density is reserved for moments of visual emphasis — a cluster of concentric forms, a grid of repeated elements — surrounded by vast quiet that amplifies their presence. Every composition should reward sustained viewing, revealing secondary relationships and subtle alignments that prove this was the work of countless hours of refinement.
|
||||
|
||||
Typography, when it appears at all, exists as specimen rather than communication — a single word rendered as geometric artifact, its letterforms chosen for structural compatibility with the surrounding shapes. It whispers. It labels. It never explains. The mark of Signal Geometry is that the viewer understands through form alone what words could only diminish. The final artifact must feel like it was extracted from some future discipline's reference manual — systematic, authoritative, and quietly beautiful in its precision.
|
||||
BIN
icons/icon_1_lens.png
Normal file
|
After Width: | Height: | Size: 21 KiB |
34
icons/icon_1_lens.svg
Normal file
@@ -0,0 +1,34 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024 1024" width="1024" height="1024">
|
||||
<defs>
|
||||
<clipPath id="roundrect">
|
||||
<rect x="0" y="0" width="1024" height="1024" rx="224" ry="224"/>
|
||||
</clipPath>
|
||||
</defs>
|
||||
<g clip-path="url(#roundrect)">
|
||||
<rect width="1024" height="1024" fill="#0A1628"/>
|
||||
|
||||
<!-- Outer concentric rings - the observation apparatus -->
|
||||
<circle cx="512" cy="512" r="380" fill="none" stroke="#1B2D4A" stroke-width="1.5"/>
|
||||
<circle cx="512" cy="512" r="320" fill="none" stroke="#1B2D4A" stroke-width="1.5"/>
|
||||
<circle cx="512" cy="512" r="260" fill="none" stroke="#1E3454" stroke-width="2"/>
|
||||
<circle cx="512" cy="512" r="200" fill="none" stroke="#243D5C" stroke-width="2.5"/>
|
||||
<circle cx="512" cy="512" r="140" fill="none" stroke="#2A4766" stroke-width="3"/>
|
||||
|
||||
<!-- The core lens -->
|
||||
<circle cx="512" cy="512" r="80" fill="none" stroke="#3B6B8A" stroke-width="4"/>
|
||||
<circle cx="512" cy="512" r="36" fill="#00E5CC" opacity="0.15"/>
|
||||
<circle cx="512" cy="512" r="8" fill="#00E5CC"/>
|
||||
|
||||
<!-- The signal line — data in transit, passing through the lens -->
|
||||
<line x1="80" y1="512" x2="432" y2="512" stroke="#00E5CC" stroke-width="3" opacity="0.6"/>
|
||||
<line x1="592" y1="512" x2="944" y2="512" stroke="#00E5CC" stroke-width="3" opacity="0.6"/>
|
||||
|
||||
<!-- Entry/exit nodes -->
|
||||
<circle cx="80" cy="512" r="6" fill="#00E5CC" opacity="0.4"/>
|
||||
<circle cx="944" cy="512" r="6" fill="#00E5CC" opacity="0.4"/>
|
||||
|
||||
<!-- Subtle grid marks -->
|
||||
<line x1="512" y1="100" x2="512" y2="380" stroke="#1B2D4A" stroke-width="1" opacity="0.5"/>
|
||||
<line x1="512" y1="644" x2="512" y2="924" stroke="#1B2D4A" stroke-width="1" opacity="0.5"/>
|
||||
</g></svg>
|
||||
|
After Width: | Height: | Size: 1.6 KiB |
BIN
icons/icon_2_prism.png
Normal file
|
After Width: | Height: | Size: 15 KiB |
40
icons/icon_2_prism.svg
Normal file
@@ -0,0 +1,40 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024 1024" width="1024" height="1024">
|
||||
<defs>
|
||||
<clipPath id="roundrect">
|
||||
<rect x="0" y="0" width="1024" height="1024" rx="224" ry="224"/>
|
||||
</clipPath>
|
||||
</defs>
|
||||
<g clip-path="url(#roundrect)">
|
||||
<rect width="1024" height="1024" fill="#0D1117"/>
|
||||
|
||||
<!-- The prism — a rotated square -->
|
||||
<polygon points="512,220 780,512 512,804 244,512" fill="none" stroke="#2D3748" stroke-width="3"/>
|
||||
<polygon points="512,280 720,512 512,744 304,512" fill="#151D2B" stroke="#374863" stroke-width="1.5"/>
|
||||
|
||||
<!-- Input signal — single beam entering -->
|
||||
<line x1="80" y1="512" x2="304" y2="512" stroke="#F0B429" stroke-width="4" opacity="0.8"/>
|
||||
|
||||
<!-- Output signals — separated/inspected streams -->
|
||||
<line x1="720" y1="512" x2="944" y2="390" stroke="#F0B429" stroke-width="2" opacity="0.7"/>
|
||||
<line x1="720" y1="512" x2="944" y2="512" stroke="#F0B429" stroke-width="2" opacity="0.5"/>
|
||||
<line x1="720" y1="512" x2="944" y2="634" stroke="#F0B429" stroke-width="2" opacity="0.3"/>
|
||||
|
||||
<!-- Exit nodes -->
|
||||
<circle cx="944" cy="390" r="5" fill="#F0B429" opacity="0.7"/>
|
||||
<circle cx="944" cy="512" r="5" fill="#F0B429" opacity="0.5"/>
|
||||
<circle cx="944" cy="634" r="5" fill="#F0B429" opacity="0.3"/>
|
||||
|
||||
<!-- Entry node -->
|
||||
<circle cx="80" cy="512" r="6" fill="#F0B429" opacity="0.8"/>
|
||||
|
||||
<!-- Inner detail — crosshair in prism center -->
|
||||
<circle cx="512" cy="512" r="24" fill="none" stroke="#F0B429" stroke-width="1.5" opacity="0.4"/>
|
||||
<circle cx="512" cy="512" r="4" fill="#F0B429"/>
|
||||
|
||||
<!-- Subtle measurement ticks -->
|
||||
<line x1="512" y1="220" x2="512" y2="190" stroke="#2D3748" stroke-width="1"/>
|
||||
<line x1="512" y1="804" x2="512" y2="834" stroke="#2D3748" stroke-width="1"/>
|
||||
<line x1="244" y1="512" x2="214" y2="512" stroke="#2D3748" stroke-width="1"/>
|
||||
<line x1="780" y1="512" x2="810" y2="512" stroke="#2D3748" stroke-width="1"/>
|
||||
</g></svg>
|
||||
|
After Width: | Height: | Size: 1.9 KiB |
BIN
icons/icon_3_node.png
Normal file
|
After Width: | Height: | Size: 14 KiB |
40
icons/icon_3_node.svg
Normal file
@@ -0,0 +1,40 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024 1024" width="1024" height="1024">
|
||||
<defs>
|
||||
<clipPath id="roundrect">
|
||||
<rect x="0" y="0" width="1024" height="1024" rx="224" ry="224"/>
|
||||
</clipPath>
|
||||
</defs>
|
||||
<g clip-path="url(#roundrect)">
|
||||
<rect width="1024" height="1024" fill="#F5F5F0"/>
|
||||
|
||||
<!-- Radiating connection lines from center -->
|
||||
<line x1="512" y1="512" x2="200" y2="240" stroke="#1A1A2E" stroke-width="1.5" opacity="0.3"/>
|
||||
<line x1="512" y1="512" x2="824" y2="240" stroke="#1A1A2E" stroke-width="1.5" opacity="0.3"/>
|
||||
<line x1="512" y1="512" x2="200" y2="784" stroke="#1A1A2E" stroke-width="1.5" opacity="0.3"/>
|
||||
<line x1="512" y1="512" x2="824" y2="784" stroke="#1A1A2E" stroke-width="1.5" opacity="0.3"/>
|
||||
<line x1="512" y1="512" x2="140" y2="512" stroke="#1A1A2E" stroke-width="1.5" opacity="0.3"/>
|
||||
<line x1="512" y1="512" x2="884" y2="512" stroke="#1A1A2E" stroke-width="1.5" opacity="0.3"/>
|
||||
|
||||
<!-- Endpoint nodes -->
|
||||
<circle cx="200" cy="240" r="20" fill="none" stroke="#1A1A2E" stroke-width="2" opacity="0.25"/>
|
||||
<circle cx="824" cy="240" r="20" fill="none" stroke="#1A1A2E" stroke-width="2" opacity="0.25"/>
|
||||
<circle cx="200" cy="784" r="20" fill="none" stroke="#1A1A2E" stroke-width="2" opacity="0.25"/>
|
||||
<circle cx="824" cy="784" r="20" fill="none" stroke="#1A1A2E" stroke-width="2" opacity="0.25"/>
|
||||
<circle cx="140" cy="512" r="20" fill="none" stroke="#1A1A2E" stroke-width="2" opacity="0.25"/>
|
||||
<circle cx="884" cy="512" r="20" fill="none" stroke="#1A1A2E" stroke-width="2" opacity="0.25"/>
|
||||
|
||||
<!-- Small dots at endpoints -->
|
||||
<circle cx="200" cy="240" r="4" fill="#1A1A2E" opacity="0.3"/>
|
||||
<circle cx="824" cy="240" r="4" fill="#1A1A2E" opacity="0.3"/>
|
||||
<circle cx="200" cy="784" r="4" fill="#1A1A2E" opacity="0.3"/>
|
||||
<circle cx="824" cy="784" r="4" fill="#1A1A2E" opacity="0.3"/>
|
||||
<circle cx="140" cy="512" r="4" fill="#1A1A2E" opacity="0.3"/>
|
||||
<circle cx="884" cy="512" r="4" fill="#1A1A2E" opacity="0.3"/>
|
||||
|
||||
<!-- The central proxy node — prominent -->
|
||||
<circle cx="512" cy="512" r="64" fill="none" stroke="#1A1A2E" stroke-width="3"/>
|
||||
<circle cx="512" cy="512" r="40" fill="none" stroke="#1A1A2E" stroke-width="1.5"/>
|
||||
<circle cx="512" cy="512" r="16" fill="#2563EB"/>
|
||||
<circle cx="512" cy="512" r="8" fill="#F5F5F0"/>
|
||||
</g></svg>
|
||||
|
After Width: | Height: | Size: 2.2 KiB |
BIN
icons/icon_4_gate.png
Normal file
|
After Width: | Height: | Size: 8.9 KiB |
42
icons/icon_4_gate.svg
Normal file
@@ -0,0 +1,42 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024 1024" width="1024" height="1024">
|
||||
<defs>
|
||||
<clipPath id="roundrect">
|
||||
<rect x="0" y="0" width="1024" height="1024" rx="224" ry="224"/>
|
||||
</clipPath>
|
||||
</defs>
|
||||
<g clip-path="url(#roundrect)">
|
||||
<rect width="1024" height="1024" fill="#0F2027"/>
|
||||
|
||||
<!-- Left gate pillar -->
|
||||
<rect x="300" y="180" width="60" height="664" rx="6" fill="#E8E8E0" opacity="0.9"/>
|
||||
|
||||
<!-- Right gate pillar -->
|
||||
<rect x="664" y="180" width="60" height="664" rx="6" fill="#E8E8E0" opacity="0.9"/>
|
||||
|
||||
<!-- Horizontal bars connecting the gate -->
|
||||
<rect x="300" y="180" width="424" height="6" fill="#E8E8E0" opacity="0.5"/>
|
||||
<rect x="300" y="838" width="424" height="6" fill="#E8E8E0" opacity="0.5"/>
|
||||
|
||||
<!-- The signal passing through the gate -->
|
||||
<line x1="100" y1="512" x2="300" y2="512" stroke="#00D4AA" stroke-width="3" opacity="0.5"/>
|
||||
<line x1="724" y1="512" x2="924" y2="512" stroke="#00D4AA" stroke-width="3" opacity="0.5"/>
|
||||
|
||||
<!-- Inspection dot at the gate center -->
|
||||
<circle cx="512" cy="512" r="28" fill="none" stroke="#00D4AA" stroke-width="2.5"/>
|
||||
<circle cx="512" cy="512" r="6" fill="#00D4AA"/>
|
||||
|
||||
<!-- Through-line (the inspected data) -->
|
||||
<line x1="360" y1="512" x2="484" y2="512" stroke="#00D4AA" stroke-width="2" stroke-dasharray="8,6" opacity="0.6"/>
|
||||
<line x1="540" y1="512" x2="664" y2="512" stroke="#00D4AA" stroke-width="2" stroke-dasharray="8,6" opacity="0.6"/>
|
||||
|
||||
<!-- Subtle scan lines -->
|
||||
<line x1="360" y1="380" x2="664" y2="380" stroke="#1A3A4A" stroke-width="0.5" opacity="0.4"/>
|
||||
<line x1="360" y1="440" x2="664" y2="440" stroke="#1A3A4A" stroke-width="0.5" opacity="0.4"/>
|
||||
<line x1="360" y1="580" x2="664" y2="580" stroke="#1A3A4A" stroke-width="0.5" opacity="0.4"/>
|
||||
<line x1="360" y1="640" x2="664" y2="640" stroke="#1A3A4A" stroke-width="0.5" opacity="0.4"/>
|
||||
|
||||
<!-- Entry/exit arrows -->
|
||||
<circle cx="100" cy="512" r="5" fill="#00D4AA" opacity="0.4"/>
|
||||
<circle cx="924" cy="512" r="5" fill="#00D4AA" opacity="0.4"/>
|
||||
</g></svg>
|
||||
|
After Width: | Height: | Size: 2.0 KiB |
BIN
icons/icon_5_shield.png
Normal file
|
After Width: | Height: | Size: 15 KiB |
40
icons/icon_5_shield.svg
Normal file
@@ -0,0 +1,40 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024 1024" width="1024" height="1024">
|
||||
<defs>
|
||||
<clipPath id="roundrect">
|
||||
<rect x="0" y="0" width="1024" height="1024" rx="224" ry="224"/>
|
||||
</clipPath>
|
||||
</defs>
|
||||
<g clip-path="url(#roundrect)">
|
||||
<defs>
|
||||
<linearGradient id="bg5" x1="0" y1="0" x2="0" y2="1">
|
||||
<stop offset="0%" stop-color="#0F0F1A"/>
|
||||
<stop offset="100%" stop-color="#1A1A2E"/>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<rect width="1024" height="1024" fill="url(#bg5)"/>
|
||||
|
||||
<!-- Shield outline — a pointed-bottom rounded form -->
|
||||
<path d="M512 160 C680 160 800 220 800 340 L800 540 C800 700 680 830 512 880 C344 830 224 700 224 540 L224 340 C224 220 344 160 512 160 Z"
|
||||
fill="none" stroke="#2A2A4E" stroke-width="3"/>
|
||||
|
||||
<path d="M512 210 C650 210 750 260 750 360 L750 530 C750 670 650 780 512 825 C374 780 274 670 274 530 L274 360 C274 260 374 210 512 210 Z"
|
||||
fill="#12122A" stroke="#333360" stroke-width="1.5"/>
|
||||
|
||||
<!-- The aperture/eye at center -->
|
||||
<ellipse cx="512" cy="480" rx="120" ry="70" fill="none" stroke="#4466FF" stroke-width="2.5" opacity="0.6"/>
|
||||
<ellipse cx="512" cy="480" rx="70" ry="42" fill="none" stroke="#4466FF" stroke-width="1.5" opacity="0.4"/>
|
||||
<circle cx="512" cy="480" r="18" fill="#4466FF" opacity="0.8"/>
|
||||
<circle cx="512" cy="480" r="6" fill="#FFFFFF"/>
|
||||
|
||||
<!-- Subtle radial lines from the eye -->
|
||||
<line x1="512" y1="410" x2="512" y2="340" stroke="#4466FF" stroke-width="1" opacity="0.2"/>
|
||||
<line x1="512" y1="550" x2="512" y2="620" stroke="#4466FF" stroke-width="1" opacity="0.2"/>
|
||||
<line x1="392" y1="480" x2="340" y2="480" stroke="#4466FF" stroke-width="1" opacity="0.2"/>
|
||||
<line x1="632" y1="480" x2="684" y2="480" stroke="#4466FF" stroke-width="1" opacity="0.2"/>
|
||||
|
||||
<!-- Small label-like text element -->
|
||||
<text x="512" y="720" text-anchor="middle" fill="#4466FF" opacity="0.25"
|
||||
font-family="Helvetica Neue, Helvetica, Arial" font-size="18" font-weight="300"
|
||||
letter-spacing="8">PROXY</text>
|
||||
</g></svg>
|
||||
|
After Width: | Height: | Size: 2.0 KiB |