hypgraph 0.1.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
hypgraph/ui/atlas.css ADDED
@@ -0,0 +1,219 @@
1
+ /* HypGraph Atlas — the research graph explorer.
2
+ Theme with --hg-* on any ancestor (a host's own tokens), or leave the defaults. Dark by default; data-theme="light". */
3
+
4
+ .atlas {
5
+ --a-bg: var(--hg-bg, #0a0d14); --a-bg1: var(--hg-bg1, #0e131d); --a-bg2: var(--hg-bg2, #141b28);
6
+ --a-panel: var(--hg-panel, #111826);
7
+ --a-ink: var(--hg-ink, #e6ecf5); --a-ink2: var(--hg-ink2, #9aa8bd); --a-ink3: var(--hg-ink3, #5d6b80);
8
+ --a-line: var(--hg-line, #1e2838); --a-line2: var(--hg-line2, #2b3850); --a-accent: var(--hg-accent, #7cf3ff);
9
+ --a-good: var(--hg-good, #4ee08a); --a-warn: var(--hg-warn, #ffb547); --a-bad: var(--hg-bad, #ff4d5e);
10
+ --a-info: var(--hg-info, #6cb6ff);
11
+ --a-mono: var(--hg-mono, ui-monospace, "JetBrains Mono", "SFMono-Regular", Menlo, Consolas, monospace);
12
+ --a-body: var(--hg-body, system-ui, -apple-system, "Segoe UI", Roboto, sans-serif);
13
+ --a-display: var(--hg-display, var(--a-mono));
14
+ position: relative; overflow: hidden; background: var(--a-bg); color: var(--a-ink);
15
+ font-family: var(--a-body); font-size: 13px;
16
+ display: flex; flex-direction: column; height: 100%; min-height: 480px;
17
+ color-scheme: dark;
18
+ }
19
+ .atlas[data-theme="light"] {
20
+ --a-bg: var(--hg-light-bg, #f7f8fb); --a-bg1: var(--hg-light-bg1, #eef1f6); --a-bg2: var(--hg-light-bg2, #e3e8f0);
21
+ --a-panel: var(--hg-light-panel, #ffffff);
22
+ --a-ink: var(--hg-light-ink, #0d1321); --a-ink2: var(--hg-light-ink2, #4a5568); --a-ink3: var(--hg-light-ink3, #8a96a8);
23
+ --a-line: var(--hg-light-line, #d8dee8); --a-line2: var(--hg-light-line2, #bfc8d6);
24
+ --a-accent: var(--hg-light-accent, #0b6bcb);
25
+ --a-good: #0a7a3c; --a-warn: #a35f00; --a-bad: #c4182a; --a-info: #0063a8;
26
+ color-scheme: light;
27
+ }
28
+ .atlas *, .atlas *::before, .atlas *::after { box-sizing: border-box; }
29
+
30
+ /* ── top bar ── */
31
+ .at-bar {
32
+ display: flex; align-items: center; gap: 14px; padding: 8px 14px; flex-shrink: 0; flex-wrap: wrap;
33
+ border-bottom: 1px solid var(--a-line2); background: linear-gradient(180deg, var(--a-bg2), var(--a-bg1));
34
+ }
35
+ .at-brand { font-family: var(--a-display); letter-spacing: .14em; color: var(--a-accent); font-size: 14px; }
36
+ .at-brand span { color: var(--a-ink2); font-family: var(--a-mono); letter-spacing: 0; font-size: 11px; }
37
+ .at-k { font-family: var(--a-mono); font-size: 10px; letter-spacing: .08em; color: var(--a-ink2); text-transform: uppercase; }
38
+ .at-inv-wrap { display: flex; flex-direction: column; gap: 2px; }
39
+ .at-inv-wrap select, .at-hud select {
40
+ background: var(--a-bg); color: var(--a-ink); border: 1px solid var(--a-line2); padding: 4px 6px;
41
+ font-family: var(--a-mono); font-size: 12px; max-width: 320px;
42
+ }
43
+ .at-tabs { display: flex; gap: 2px; }
44
+ .at-tabs button {
45
+ background: transparent; color: var(--a-ink2); border: 1px solid transparent; padding: 6px 11px;
46
+ font-family: var(--a-mono); font-size: 12px; cursor: pointer; letter-spacing: .04em;
47
+ }
48
+ .at-tabs button:hover { color: var(--a-ink); border-color: var(--a-line2); }
49
+ .at-tabs button.on { color: var(--a-accent); border-color: var(--a-accent); background: var(--a-bg); }
50
+ .at-search { position: relative; flex: 1; min-width: 180px; max-width: 360px; }
51
+ .at-search input, .at-table-bar input {
52
+ width: 100%; background: var(--a-bg); color: var(--a-ink); border: 1px solid var(--a-line2);
53
+ padding: 6px 9px; font-family: var(--a-mono); font-size: 12px;
54
+ }
55
+ .at-results {
56
+ position: absolute; top: 100%; left: 0; right: 0; z-index: 30; max-height: 360px; overflow: auto;
57
+ background: var(--a-panel); border: 1px solid var(--a-line2); box-shadow: 0 8px 24px rgba(0,0,0,.4);
58
+ }
59
+ .at-results button {
60
+ display: block; width: 100%; text-align: left; background: none; border: 0; border-bottom: 1px solid var(--a-line);
61
+ color: var(--a-ink); padding: 6px 9px; cursor: pointer; font-size: 12px;
62
+ }
63
+ .at-results button:hover, .at-results button:focus { background: var(--a-bg2); outline: none; }
64
+ .at-bar-right { margin-left: auto; display: flex; align-items: center; gap: 8px; }
65
+ .at-chip {
66
+ font-family: var(--a-mono); font-size: 10px; padding: 3px 7px; border: 1px solid var(--a-line2); color: var(--a-ink2);
67
+ letter-spacing: .06em; white-space: nowrap;
68
+ }
69
+ .at-chip.ok { color: var(--a-good); border-color: var(--a-good); }
70
+ .at-chip.bad { color: var(--a-bad); border-color: var(--a-bad); }
71
+ .at-live::before { content: "●"; margin-right: 5px; color: var(--a-good); }
72
+ .at-live.off::before { color: var(--a-ink3); }
73
+ .at-btn {
74
+ background: var(--a-bg); color: var(--a-ink); border: 1px solid var(--a-line2); padding: 5px 9px; cursor: pointer;
75
+ font-family: var(--a-mono); font-size: 12px;
76
+ }
77
+ .at-btn:hover:not(:disabled) { border-color: var(--a-accent); color: var(--a-accent); }
78
+ .at-btn:disabled { opacity: .4; cursor: default; }
79
+ .at-btn:focus-visible, .at-tabs button:focus-visible { outline: 2px solid var(--a-accent); outline-offset: 1px; }
80
+
81
+ /* ── layout ── */
82
+ .at-body { flex: 1; min-height: 0; display: grid; grid-template-columns: 220px 1fr 380px; }
83
+ .at-rail { border-right: 1px solid var(--a-line); overflow: auto; padding: 10px 12px; background: var(--a-bg1); }
84
+ .at-main { position: relative; min-width: 0; min-height: 0; }
85
+ .at-insp { border-left: 1px solid var(--a-line); overflow: auto; background: var(--a-bg1); padding: 12px 14px; }
86
+ .at-sec { margin-bottom: 16px; }
87
+ .at-sec h3 { font-family: var(--a-mono); font-size: 10px; letter-spacing: .12em; color: var(--a-ink2); text-transform: uppercase;
88
+ margin: 0 0 7px; font-weight: normal; }
89
+ .at-types label, .at-checks label, .at-toggle {
90
+ display: flex; align-items: center; gap: 7px; padding: 2px 0; cursor: pointer; font-size: 12px; color: var(--a-ink);
91
+ }
92
+ .at-types .sw { width: 11px; height: 11px; display: inline-block; flex-shrink: 0; border-radius: 2px; }
93
+ .at-types .n, .at-checks .n { margin-left: auto; font-family: var(--a-mono); font-size: 11px; color: var(--a-ink2); }
94
+ .at-legend div { display: flex; align-items: center; gap: 7px; font-size: 11px; color: var(--a-ink2); padding: 2px 0; }
95
+ .at-legend .ln { width: 22px; height: 0; border-top: 2px solid; display: inline-block; }
96
+ .at-legend .ln.dot { border-top-style: dotted; } .at-legend .ln.dash { border-top-style: dashed; }
97
+ .ring { width: 12px; height: 12px; border-radius: 50%; display: inline-block; border: 2px solid; }
98
+ .ring.checked { border-color: var(--a-good); } .ring.unchecked { border-color: var(--a-ink3); border-style: dashed; }
99
+ .ring.needs_revalidation { border-color: var(--a-warn); border-style: dashed; }
100
+ .ring.contested { border-color: var(--a-bad); border-width: 3px; }
101
+ .ring.at-risk { border-color: transparent; box-shadow: 0 0 0 3px rgba(255,51,68,.45); }
102
+ .at-stats { font-family: var(--a-mono); font-size: 11px; color: var(--a-ink2); line-height: 1.6; }
103
+
104
+ .at-view { display: none; position: absolute; inset: 0; flex-direction: column; }
105
+ .at-view.on { display: flex; }
106
+ .at-cy { flex: 1; min-height: 0; }
107
+ .at-hud {
108
+ position: absolute; left: 10px; bottom: 10px; right: 10px; display: flex; align-items: center; gap: 8px; flex-wrap: wrap;
109
+ background: color-mix(in srgb, var(--a-panel) 88%, transparent); border: 1px solid var(--a-line2); padding: 6px 9px;
110
+ }
111
+ .at-hint { margin-left: auto; font-size: 11px; color: var(--a-ink3); }
112
+ .at-tip {
113
+ position: absolute; z-index: 20; pointer-events: none; max-width: 380px; background: var(--a-panel); color: var(--a-ink);
114
+ border: 1px solid var(--a-line2); padding: 7px 9px; font-size: 12px; box-shadow: 0 6px 18px rgba(0,0,0,.45);
115
+ }
116
+ .at-tip b { color: var(--a-accent); font-family: var(--a-mono); }
117
+ .at-tip .st { color: var(--a-ink2); font-size: 11px; margin-top: 4px; }
118
+ .at-scroll { flex: 1; overflow: auto; padding: 14px 16px; }
119
+
120
+ /* ── inspector ── */
121
+ .at-empty { color: var(--a-ink3); font-size: 12px; line-height: 1.5; padding-top: 30px; }
122
+ .at-i-head { display: flex; align-items: baseline; gap: 8px; flex-wrap: wrap; }
123
+ .at-i-code { font-family: var(--a-mono); font-size: 16px; color: var(--a-accent); }
124
+ .at-badge { font-family: var(--a-mono); font-size: 10px; padding: 2px 6px; border: 1px solid; letter-spacing: .05em; }
125
+ .at-i-title { margin: 6px 0 8px; font-size: 14px; line-height: 1.45; }
126
+ .at-sentence { font-size: 12px; line-height: 1.5; color: var(--a-ink2); border-left: 2px solid var(--a-accent); padding: 4px 8px;
127
+ background: var(--a-bg); margin-bottom: 10px; }
128
+ .at-dims { display: grid; grid-template-columns: auto 1fr; gap: 3px 10px; font-size: 12px; margin-bottom: 10px; }
129
+ .at-dims dt { font-family: var(--a-mono); font-size: 10px; color: var(--a-ink2); text-transform: uppercase; padding-top: 2px; }
130
+ .at-dims dd { margin: 0; }
131
+ .st-good { color: var(--a-good); } .st-warn { color: var(--a-warn); } .st-bad { color: var(--a-bad); } .st-dim { color: var(--a-ink3); }
132
+ .at-i-sec { margin-top: 14px; }
133
+ .at-i-sec h4 { font-family: var(--a-mono); font-size: 10px; letter-spacing: .1em; color: var(--a-ink2); margin: 0 0 6px;
134
+ text-transform: uppercase; font-weight: normal; border-bottom: 1px solid var(--a-line); padding-bottom: 3px; }
135
+ .at-field { font-size: 12px; margin-bottom: 6px; line-height: 1.45; word-break: break-word; }
136
+ .at-field .k { font-family: var(--a-mono); font-size: 10px; color: var(--a-ink2); display: block; }
137
+ .at-field pre { margin: 2px 0 0; white-space: pre-wrap; font-family: var(--a-mono); font-size: 11px; color: var(--a-ink);
138
+ background: var(--a-bg); padding: 5px 7px; max-height: 180px; overflow: auto; }
139
+ .at-edge { display: flex; gap: 6px; align-items: baseline; font-size: 12px; padding: 2px 0; }
140
+ .at-edge .rel { font-family: var(--a-mono); font-size: 10px; color: var(--a-ink2); min-width: 86px; }
141
+ .at-link { background: none; border: 0; padding: 0; color: var(--a-info); cursor: pointer; font-family: var(--a-mono); font-size: 12px; text-align: left; }
142
+ .at-link:hover { text-decoration: underline; }
143
+ .at-actions { display: flex; gap: 6px; flex-wrap: wrap; margin: 6px 0 4px; }
144
+ .at-ver { font-size: 11px; padding: 4px 0; border-bottom: 1px dashed var(--a-line); }
145
+ .at-ver .ch { color: var(--a-warn); font-family: var(--a-mono); }
146
+
147
+ /* ── tables, cards ── */
148
+ .at-table-bar { display: flex; gap: 10px; align-items: center; padding: 10px 16px 0; }
149
+ .at-table-bar input { max-width: 360px; }
150
+ .at-table { width: 100%; border-collapse: collapse; font-size: 12px; }
151
+ .at-table th { position: sticky; top: 0; background: var(--a-bg1); text-align: left; font-family: var(--a-mono); font-size: 10px;
152
+ letter-spacing: .06em; color: var(--a-ink2); padding: 7px 8px; border-bottom: 1px solid var(--a-line2); cursor: pointer;
153
+ user-select: none; white-space: nowrap; text-transform: uppercase; font-weight: normal; }
154
+ .at-table th.sorted::after { content: " ▾"; } .at-table th.sorted.asc::after { content: " ▴"; }
155
+ .at-table td { padding: 6px 8px; border-bottom: 1px solid var(--a-line); vertical-align: top; }
156
+ .at-table tr { cursor: pointer; } .at-table tbody tr:hover { background: var(--a-bg2); }
157
+ .at-table td.code { font-family: var(--a-mono); color: var(--a-accent); white-space: nowrap; }
158
+ .at-table td.num { font-family: var(--a-mono); text-align: right; }
159
+ .at-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(320px, 1fr)); gap: 12px; }
160
+ .at-card { background: var(--a-panel); border: 1px solid var(--a-line2); padding: 10px 12px; }
161
+ .at-card h5 { margin: 0 0 6px; font-size: 13px; line-height: 1.4; }
162
+ .at-card .meta { font-size: 11px; color: var(--a-ink2); }
163
+ .at-card ul { margin: 6px 0 0 16px; padding: 0; font-size: 12px; }
164
+ .at-h2 { font-family: var(--a-mono); font-size: 11px; letter-spacing: .12em; color: var(--a-ink2); text-transform: uppercase;
165
+ margin: 18px 0 8px; }
166
+ .at-h2:first-child { margin-top: 0; }
167
+ .at-matrix td.cell { font-size: 11px; }
168
+ .at-matrix .exp { color: var(--a-ink2); } .at-matrix .act { display: block; font-family: var(--a-mono); }
169
+
170
+ /* provenance */
171
+ .at-chain { display: grid; grid-auto-flow: column; grid-auto-columns: minmax(220px, 1fr); gap: 14px; overflow-x: auto;
172
+ padding-bottom: 8px; }
173
+ .at-col h6 { font-family: var(--a-mono); font-size: 10px; letter-spacing: .1em; color: var(--a-ink2); margin: 0 0 6px;
174
+ text-transform: uppercase; font-weight: normal; }
175
+ .at-hash { font-family: var(--a-mono); font-size: 10px; color: var(--a-ink3); word-break: break-all; }
176
+ .at-group { border-left: 3px solid; padding-left: 8px; margin-bottom: 8px; }
177
+
178
+ /* work */
179
+ .at-work-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); gap: 12px; }
180
+ .at-bar-row { display: grid; grid-template-columns: 110px 1fr 40px; align-items: center; gap: 8px; font-size: 12px; padding: 2px 0; }
181
+ .at-bar-row .bar { height: 8px; background: var(--a-accent); border-radius: 0 2px 2px 0; }
182
+
183
+ /* timeline */
184
+ .at-tl-top { display: flex; align-items: center; gap: 10px; padding: 10px 16px; border-bottom: 1px solid var(--a-line); }
185
+ .at-tl-top input[type=range] { flex: 1; accent-color: var(--a-accent); }
186
+ .at-tl-chart { width: 100%; height: 150px; flex-shrink: 0; display: block; }
187
+ .at-feed .ev { display: grid; grid-template-columns: 150px 90px 90px 1fr; gap: 8px; font-size: 12px; padding: 3px 0;
188
+ border-bottom: 1px solid var(--a-line); }
189
+ .at-feed .ev .t { font-family: var(--a-mono); color: var(--a-ink3); font-size: 11px; }
190
+
191
+ .at-toast { position: absolute; right: 400px; bottom: 16px; z-index: 40; background: var(--a-panel); border: 1px solid var(--a-accent);
192
+ color: var(--a-ink); padding: 8px 12px; font-size: 12px; box-shadow: 0 6px 18px rgba(0,0,0,.4); }
193
+
194
+ /* narrower screens: the rail goes (a display:none grid item gives up its column, so the template drops it too) */
195
+ @media (max-width: 1280px) {
196
+ .at-body { grid-template-columns: 1fr 320px; }
197
+ .at-rail { display: none; }
198
+ .at-toast { right: 340px; }
199
+ }
200
+ @media (max-width: 900px) {
201
+ .at-body { grid-template-columns: 1fr; grid-template-rows: minmax(0, 1fr) 42%; }
202
+ .at-insp { border-left: 0; border-top: 1px solid var(--a-line); }
203
+ .at-toast { right: 16px; }
204
+ .at-hint { display: none; }
205
+ }
206
+ @media (prefers-reduced-motion: reduce) { .at-live::before { animation: none; } }
207
+
208
+ .at-spark { display: flex; align-items: flex-end; gap: 2px; height: 36px; margin-top: 6px; }
209
+ .at-spark span { flex: 1; min-width: 3px; background: var(--a-accent); opacity: .8; border-radius: 2px 2px 0 0; }
210
+
211
+ .at-table-wrap { overflow-x: auto; }
212
+ .atlas button, .atlas select, .atlas input { font: inherit; }
213
+ @media (max-width: 640px) {
214
+ .at-bar { gap: 8px; padding: 8px 10px; }
215
+ .at-tabs { overflow-x: auto; max-width: 100%; }
216
+ .at-tabs button { padding: 6px 8px; }
217
+ .at-search { max-width: none; flex-basis: 100%; }
218
+ .at-bar-right { margin-left: 0; }
219
+ }