@raingor/pi-web-switch 0.4.3 → 0.4.4
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.
- package/dist/index.html +4 -4
- package/index.html +2 -2
- package/package.json +5 -3
- package/public/manifest.webmanifest +2 -2
- package/public/sw.js +51 -51
- package/server/pi-reader.ts +326 -19
- package/src/App.tsx +2 -0
- package/src/components/dashboard/DashboardPage.tsx +341 -27
- package/src/components/layout/AppShell.tsx +45 -13
- package/src/components/layout/Sidebar.tsx +78 -74
- package/src/components/providers/ProvidersModelsPage.tsx +125 -131
- package/src/components/sessions/MemoryPage.tsx +32 -12
- package/src/components/sessions/SessionsPage.tsx +18 -4
- package/src/components/settings/SettingsPage.tsx +6 -1
- package/src/components/speedtest/ModelSpeedTestPage.tsx +429 -0
- package/src/components/ui/EmptyState.tsx +7 -6
- package/src/components/ui/Modal.tsx +33 -25
- package/src/components/ui/StatCard.tsx +10 -13
- package/src/data/builtin-providers.test.ts +109 -0
- package/src/data/builtin-providers.ts +67 -44
- package/src/data/model-catalog.test.ts +122 -0
- package/src/data/model-catalog.ts +697 -478
- package/src/index.css +624 -210
- package/src/lib/translations/en.ts +88 -9
- package/src/lib/translations/ja.ts +88 -9
- package/src/lib/translations/zh-CN.ts +88 -9
- package/src/lib/translations/zh-TW.ts +87 -9
- package/src/main.tsx +99 -22
- package/vite.config.ts +62 -137
- package/src/data/mock-config.ts +0 -247
- package/src/data/mock-usage.ts +0 -151
package/src/index.css
CHANGED
|
@@ -1,245 +1,659 @@
|
|
|
1
1
|
@import "tailwindcss";
|
|
2
2
|
|
|
3
|
-
/* ───
|
|
3
|
+
/* ─── Signal Console Design System ─────────────────────── */
|
|
4
4
|
|
|
5
5
|
:root,
|
|
6
6
|
.light {
|
|
7
7
|
--color-scheme: light;
|
|
8
|
-
--page-bg: #
|
|
9
|
-
--page-
|
|
10
|
-
--
|
|
11
|
-
--card-
|
|
12
|
-
--card-
|
|
13
|
-
--card-
|
|
14
|
-
--
|
|
15
|
-
--
|
|
16
|
-
--input-
|
|
17
|
-
--
|
|
18
|
-
--
|
|
19
|
-
--
|
|
20
|
-
--
|
|
21
|
-
--
|
|
22
|
-
--
|
|
23
|
-
--sidebar-
|
|
24
|
-
--sidebar-
|
|
25
|
-
--sidebar-
|
|
26
|
-
--sidebar-
|
|
27
|
-
--sidebar-
|
|
28
|
-
--sidebar-
|
|
29
|
-
--
|
|
30
|
-
--
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
--
|
|
34
|
-
--
|
|
35
|
-
--
|
|
36
|
-
--
|
|
37
|
-
--
|
|
38
|
-
--
|
|
39
|
-
--
|
|
40
|
-
--
|
|
41
|
-
--
|
|
42
|
-
--font-
|
|
8
|
+
--page-bg: #eef3f5;
|
|
9
|
+
--page-bg-deep: #e4ecef;
|
|
10
|
+
--page-text: #10252b;
|
|
11
|
+
--card-bg: rgba(248, 252, 252, 0.86);
|
|
12
|
+
--card-bg-solid: #f8fcfc;
|
|
13
|
+
--card-border: rgba(38, 86, 96, 0.18);
|
|
14
|
+
--card-header-border: rgba(38, 86, 96, 0.14);
|
|
15
|
+
--card-header-text: #213b42;
|
|
16
|
+
--input-bg: rgba(255, 255, 255, 0.76);
|
|
17
|
+
--input-border: rgba(40, 90, 101, 0.23);
|
|
18
|
+
--input-text: #10252b;
|
|
19
|
+
--muted-text: #60757b;
|
|
20
|
+
--subtle-text: #8a9ba0;
|
|
21
|
+
--accent-bg: rgba(0, 173, 204, 0.09);
|
|
22
|
+
--hover-bg: rgba(0, 173, 204, 0.07);
|
|
23
|
+
--sidebar-bg: rgba(244, 249, 249, 0.94);
|
|
24
|
+
--sidebar-border: rgba(37, 78, 87, 0.16);
|
|
25
|
+
--sidebar-logo: #00a6c2;
|
|
26
|
+
--sidebar-active-bg: rgba(0, 175, 205, 0.1);
|
|
27
|
+
--sidebar-active-text: #007f97;
|
|
28
|
+
--sidebar-text: #586f75;
|
|
29
|
+
--sidebar-hover-bg: rgba(0, 173, 204, 0.06);
|
|
30
|
+
--sidebar-hover-text: #17343c;
|
|
31
|
+
--scrollbar-thumb: rgba(41, 84, 94, 0.25);
|
|
32
|
+
--scrollbar-thumb-hover: rgba(0, 158, 188, 0.55);
|
|
33
|
+
--signal-cyan: #00a9c7;
|
|
34
|
+
--signal-cyan-bright: #00c9eb;
|
|
35
|
+
--signal-lime: #70a900;
|
|
36
|
+
--signal-amber: #d88914;
|
|
37
|
+
--signal-red: #e64d6b;
|
|
38
|
+
--signal-violet: #7161d9;
|
|
39
|
+
--grid-line: rgba(31, 83, 94, 0.055);
|
|
40
|
+
--panel-shadow: 0 18px 50px rgba(28, 60, 67, 0.08), 0 1px 0 rgba(255, 255, 255, 0.9) inset;
|
|
41
|
+
--font-display: "Avenir Next", Avenir, "Century Gothic", sans-serif;
|
|
42
|
+
--font-body: "Avenir Next", Avenir, "Segoe UI", sans-serif;
|
|
43
|
+
--font-mono: "SFMono-Regular", "Cascadia Code", "Roboto Mono", Consolas, monospace;
|
|
44
|
+
|
|
45
|
+
--bg: var(--page-bg);
|
|
46
|
+
--bg-panel: var(--card-bg);
|
|
47
|
+
--bg-hover: var(--hover-bg);
|
|
48
|
+
--bg-selected: var(--sidebar-active-bg);
|
|
49
|
+
--border: var(--card-border);
|
|
50
|
+
--text: var(--page-text);
|
|
51
|
+
--text-muted: var(--muted-text);
|
|
52
|
+
--text-dim: var(--subtle-text);
|
|
53
|
+
--accent: var(--signal-cyan);
|
|
43
54
|
}
|
|
44
55
|
|
|
45
56
|
.dark {
|
|
46
57
|
--color-scheme: dark;
|
|
47
|
-
--page-bg: #
|
|
48
|
-
--page-
|
|
49
|
-
--
|
|
50
|
-
--card-
|
|
51
|
-
--card-
|
|
52
|
-
--card-
|
|
53
|
-
--
|
|
54
|
-
--
|
|
55
|
-
--input-
|
|
56
|
-
--
|
|
57
|
-
--
|
|
58
|
-
--
|
|
59
|
-
--
|
|
60
|
-
--
|
|
61
|
-
--
|
|
62
|
-
--sidebar-
|
|
63
|
-
--sidebar-
|
|
64
|
-
--sidebar-
|
|
65
|
-
--sidebar-
|
|
66
|
-
--sidebar-
|
|
67
|
-
--sidebar-
|
|
68
|
-
--
|
|
69
|
-
--
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
--
|
|
73
|
-
--
|
|
74
|
-
--
|
|
75
|
-
--
|
|
76
|
-
--
|
|
77
|
-
--
|
|
78
|
-
--
|
|
79
|
-
--
|
|
80
|
-
|
|
81
|
-
--
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
:
|
|
85
|
-
|
|
58
|
+
--page-bg: #05090d;
|
|
59
|
+
--page-bg-deep: #020507;
|
|
60
|
+
--page-text: #e8f5f5;
|
|
61
|
+
--card-bg: rgba(11, 20, 25, 0.82);
|
|
62
|
+
--card-bg-solid: #0b1419;
|
|
63
|
+
--card-border: rgba(117, 180, 190, 0.16);
|
|
64
|
+
--card-header-border: rgba(117, 180, 190, 0.13);
|
|
65
|
+
--card-header-text: #d7e7e9;
|
|
66
|
+
--input-bg: rgba(13, 24, 30, 0.92);
|
|
67
|
+
--input-border: rgba(113, 172, 182, 0.22);
|
|
68
|
+
--input-text: #edfafa;
|
|
69
|
+
--muted-text: #849ba0;
|
|
70
|
+
--subtle-text: #53676c;
|
|
71
|
+
--accent-bg: rgba(0, 216, 255, 0.09);
|
|
72
|
+
--hover-bg: rgba(0, 216, 255, 0.07);
|
|
73
|
+
--sidebar-bg: rgba(5, 10, 14, 0.96);
|
|
74
|
+
--sidebar-border: rgba(104, 169, 179, 0.14);
|
|
75
|
+
--sidebar-logo: #00d8ff;
|
|
76
|
+
--sidebar-active-bg: rgba(0, 216, 255, 0.08);
|
|
77
|
+
--sidebar-active-text: #6cecff;
|
|
78
|
+
--sidebar-text: #789096;
|
|
79
|
+
--sidebar-hover-bg: rgba(0, 216, 255, 0.045);
|
|
80
|
+
--sidebar-hover-text: #d4e9eb;
|
|
81
|
+
--scrollbar-thumb: rgba(99, 145, 152, 0.28);
|
|
82
|
+
--scrollbar-thumb-hover: rgba(0, 216, 255, 0.55);
|
|
83
|
+
--signal-cyan: #00d8ff;
|
|
84
|
+
--signal-cyan-bright: #7cecff;
|
|
85
|
+
--signal-lime: #9ef01a;
|
|
86
|
+
--signal-amber: #ffb84d;
|
|
87
|
+
--signal-red: #ff5c7a;
|
|
88
|
+
--signal-violet: #9f8cff;
|
|
89
|
+
--grid-line: rgba(102, 181, 192, 0.045);
|
|
90
|
+
--panel-shadow: 0 22px 60px rgba(0, 0, 0, 0.28), 0 1px 0 rgba(255, 255, 255, 0.025) inset;
|
|
91
|
+
|
|
92
|
+
--bg: var(--page-bg);
|
|
93
|
+
--bg-panel: var(--card-bg);
|
|
94
|
+
--bg-hover: var(--hover-bg);
|
|
95
|
+
--bg-selected: var(--sidebar-active-bg);
|
|
96
|
+
--border: var(--card-border);
|
|
97
|
+
--text: var(--page-text);
|
|
98
|
+
--text-muted: var(--muted-text);
|
|
99
|
+
--text-dim: var(--subtle-text);
|
|
100
|
+
--accent: var(--signal-cyan);
|
|
86
101
|
}
|
|
87
102
|
|
|
103
|
+
:root { color-scheme: var(--color-scheme, dark); }
|
|
104
|
+
|
|
105
|
+
* { box-sizing: border-box; }
|
|
106
|
+
html, body, #root { min-height: 100%; }
|
|
88
107
|
body {
|
|
89
|
-
|
|
90
|
-
|
|
108
|
+
margin: 0;
|
|
109
|
+
overflow: hidden;
|
|
110
|
+
font-family: var(--font-body);
|
|
111
|
+
background: var(--page-bg);
|
|
91
112
|
color: var(--page-text);
|
|
113
|
+
letter-spacing: 0.005em;
|
|
92
114
|
}
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
background-color: var(--card-bg);
|
|
97
|
-
border-color: var(--card-border);
|
|
115
|
+
button, input, select, textarea { font: inherit; }
|
|
116
|
+
button, a, input, select, textarea {
|
|
117
|
+
transition: color 160ms ease, border-color 160ms ease, background-color 160ms ease, box-shadow 160ms ease, transform 160ms ease, opacity 160ms ease;
|
|
98
118
|
}
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
border-color: var(--input-border);
|
|
103
|
-
color: var(--input-text);
|
|
119
|
+
button:focus-visible, a:focus-visible, input:focus-visible, select:focus-visible, textarea:focus-visible {
|
|
120
|
+
outline: 1px solid var(--signal-cyan);
|
|
121
|
+
outline-offset: 2px;
|
|
104
122
|
}
|
|
123
|
+
::selection { color: #001014; background: var(--signal-cyan-bright); }
|
|
105
124
|
|
|
106
|
-
/*
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
125
|
+
/* ─── Application Shell ───────────────────────────────── */
|
|
126
|
+
|
|
127
|
+
.app-shell {
|
|
128
|
+
position: relative;
|
|
129
|
+
display: flex;
|
|
130
|
+
width: calc(100% / var(--ui-zoom, 1));
|
|
131
|
+
height: calc(100vh / var(--ui-zoom, 1));
|
|
132
|
+
min-height: 0;
|
|
133
|
+
overflow: hidden;
|
|
134
|
+
transform: scale(var(--ui-zoom, 1));
|
|
135
|
+
transform-origin: top left;
|
|
136
|
+
isolation: isolate;
|
|
137
|
+
background:
|
|
138
|
+
linear-gradient(90deg, var(--grid-line) 1px, transparent 1px),
|
|
139
|
+
linear-gradient(0deg, var(--grid-line) 1px, transparent 1px),
|
|
140
|
+
radial-gradient(circle at 76% 5%, color-mix(in srgb, var(--signal-cyan) 8%, transparent), transparent 32%),
|
|
141
|
+
radial-gradient(circle at 18% 92%, color-mix(in srgb, var(--signal-violet) 5%, transparent), transparent 27%),
|
|
142
|
+
var(--page-bg);
|
|
143
|
+
background-size: 44px 44px, 44px 44px, auto, auto, auto;
|
|
120
144
|
}
|
|
121
145
|
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
146
|
+
.app-atmosphere { position: fixed; inset: 0; z-index: -1; overflow: hidden; pointer-events: none; }
|
|
147
|
+
.app-atmosphere::before {
|
|
148
|
+
content: "";
|
|
149
|
+
position: absolute;
|
|
150
|
+
inset: 0;
|
|
151
|
+
opacity: .17;
|
|
152
|
+
background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 180 180' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.95' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='.12'/%3E%3C/svg%3E");
|
|
153
|
+
mix-blend-mode: soft-light;
|
|
154
|
+
}
|
|
155
|
+
.app-orbit { position: absolute; border: 1px solid color-mix(in srgb, var(--signal-cyan) 12%, transparent); border-radius: 50%; }
|
|
156
|
+
.app-orbit::before, .app-orbit::after { content: ""; position: absolute; border-radius: 50%; border: 1px dashed color-mix(in srgb, var(--signal-cyan) 8%, transparent); }
|
|
157
|
+
.app-orbit-one { width: 620px; height: 620px; right: -240px; top: -250px; animation: orbit-drift 24s linear infinite; }
|
|
158
|
+
.app-orbit-one::before { inset: 66px; }
|
|
159
|
+
.app-orbit-one::after { inset: 148px; }
|
|
160
|
+
.app-orbit-two { width: 360px; height: 360px; left: 15%; bottom: -240px; animation: orbit-drift 32s linear reverse infinite; }
|
|
161
|
+
.app-scanline {
|
|
162
|
+
position: absolute;
|
|
163
|
+
left: 0; right: 0; top: -10%; height: 20%;
|
|
164
|
+
background: linear-gradient(180deg, transparent, color-mix(in srgb, var(--signal-cyan) 3%, transparent), transparent);
|
|
165
|
+
animation: ambient-scan 13s ease-in-out infinite;
|
|
125
166
|
}
|
|
126
167
|
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
168
|
+
.app-stage { display: flex; min-width: 0; flex: 1; flex-direction: column; }
|
|
169
|
+
.app-main { min-width: 0; flex: 1; overflow-y: auto; overflow-x: hidden; }
|
|
170
|
+
.app-main-full { overflow: hidden; }
|
|
171
|
+
.app-canvas { width: min(100%, 1440px); margin: 0 auto; padding: 38px 42px 56px; animation: canvas-enter 480ms cubic-bezier(.22,.8,.25,1) both; }
|
|
172
|
+
.mobile-command-bar { display: none; }
|
|
173
|
+
.sidebar-scrim { display: none; }
|
|
131
174
|
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
.
|
|
151
|
-
.
|
|
152
|
-
|
|
153
|
-
}
|
|
154
|
-
.
|
|
155
|
-
.
|
|
156
|
-
.
|
|
157
|
-
.
|
|
158
|
-
|
|
159
|
-
}
|
|
160
|
-
.
|
|
161
|
-
|
|
162
|
-
}
|
|
163
|
-
.
|
|
164
|
-
.
|
|
165
|
-
.
|
|
166
|
-
|
|
167
|
-
}
|
|
168
|
-
.
|
|
169
|
-
|
|
170
|
-
}
|
|
171
|
-
.
|
|
172
|
-
|
|
173
|
-
}
|
|
174
|
-
.
|
|
175
|
-
|
|
176
|
-
}
|
|
177
|
-
.
|
|
178
|
-
|
|
179
|
-
}
|
|
180
|
-
.
|
|
181
|
-
.
|
|
182
|
-
|
|
183
|
-
}
|
|
184
|
-
.
|
|
185
|
-
|
|
186
|
-
}
|
|
187
|
-
.
|
|
188
|
-
|
|
175
|
+
/* ─── Command Sidebar ─────────────────────────────────── */
|
|
176
|
+
|
|
177
|
+
.command-sidebar {
|
|
178
|
+
position: relative;
|
|
179
|
+
z-index: 30;
|
|
180
|
+
display: flex;
|
|
181
|
+
width: 252px;
|
|
182
|
+
min-width: 252px;
|
|
183
|
+
height: 100vh;
|
|
184
|
+
flex-direction: column;
|
|
185
|
+
overflow: hidden;
|
|
186
|
+
border-right: 1px solid var(--sidebar-border);
|
|
187
|
+
background:
|
|
188
|
+
linear-gradient(180deg, color-mix(in srgb, var(--signal-cyan) 2%, transparent), transparent 24%),
|
|
189
|
+
var(--sidebar-bg);
|
|
190
|
+
box-shadow: 16px 0 50px rgba(0, 0, 0, .035);
|
|
191
|
+
backdrop-filter: blur(24px);
|
|
192
|
+
}
|
|
193
|
+
.sidebar-edge { position: absolute; right: -1px; top: 0; width: 1px; height: 130px; background: linear-gradient(var(--signal-cyan), transparent); opacity: .68; }
|
|
194
|
+
.brand-block { position: relative; display: flex; align-items: center; gap: 13px; min-height: 94px; padding: 20px 20px 18px; border-bottom: 1px solid var(--sidebar-border); }
|
|
195
|
+
.brand-block::after { content: ""; position: absolute; left: 20px; right: 20px; bottom: -1px; height: 1px; background: linear-gradient(90deg, var(--signal-cyan), transparent 72%); opacity: .36; }
|
|
196
|
+
.brand-mark { position: relative; display: grid; width: 44px; height: 44px; flex: 0 0 auto; place-items: center; }
|
|
197
|
+
.brand-mark img { position: relative; z-index: 2; width: 34px; height: 34px; border-radius: 10px; filter: saturate(.9) hue-rotate(-34deg); box-shadow: 0 0 24px color-mix(in srgb, var(--signal-cyan) 22%, transparent); }
|
|
198
|
+
.brand-orbit { position: absolute; inset: 0; border: 1px solid color-mix(in srgb, var(--signal-cyan) 30%, transparent); border-radius: 50%; animation: brand-rotate 12s linear infinite; }
|
|
199
|
+
.brand-orbit::before { content: ""; position: absolute; width: 4px; height: 4px; top: 3px; left: 8px; border-radius: 50%; background: var(--signal-cyan); box-shadow: 0 0 8px var(--signal-cyan); }
|
|
200
|
+
.brand-name { overflow: hidden; color: var(--page-text); font-family: var(--font-display); font-size: 16px; font-weight: 700; letter-spacing: -.02em; text-overflow: ellipsis; white-space: nowrap; }
|
|
201
|
+
.brand-subtitle { margin-top: 1px; overflow: hidden; color: var(--subtle-text); font-family: var(--font-mono); font-size: 9px; letter-spacing: .08em; text-overflow: ellipsis; text-transform: uppercase; white-space: nowrap; }
|
|
202
|
+
.sidebar-close { display: none; margin-left: auto; padding: 7px; color: var(--muted-text); border: 1px solid var(--sidebar-border); border-radius: 7px; }
|
|
203
|
+
.sidebar-system-label { display: flex; align-items: center; gap: 10px; padding: 24px 20px 10px; color: var(--subtle-text); font-family: var(--font-mono); font-size: 8px; font-weight: 700; letter-spacing: .18em; }
|
|
204
|
+
.sidebar-label-line { flex: 1; height: 1px; background: linear-gradient(90deg, var(--sidebar-border), transparent); }
|
|
205
|
+
.command-nav { display: flex; flex: 1; flex-direction: column; gap: 4px; padding: 3px 12px 16px; }
|
|
206
|
+
.command-nav-item { position: relative; display: grid; grid-template-columns: 24px 31px minmax(0,1fr) 14px; align-items: center; min-height: 44px; padding: 0 10px; overflow: hidden; color: var(--sidebar-text); border: 1px solid transparent; border-radius: 8px; text-decoration: none; }
|
|
207
|
+
.command-nav-item::before { content: ""; position: absolute; inset: 0; opacity: 0; background: linear-gradient(90deg, color-mix(in srgb, var(--signal-cyan) 9%, transparent), transparent 75%); transform: translateX(-25%); transition: opacity 180ms ease, transform 180ms ease; }
|
|
208
|
+
.command-nav-item:hover { color: var(--sidebar-hover-text); background: var(--sidebar-hover-bg); }
|
|
209
|
+
.command-nav-item:hover::before, .command-nav-item.is-active::before { opacity: 1; transform: translateX(0); }
|
|
210
|
+
.command-nav-item.is-active { color: var(--sidebar-active-text); border-color: color-mix(in srgb, var(--signal-cyan) 18%, transparent); background: var(--sidebar-active-bg); box-shadow: 0 10px 30px color-mix(in srgb, var(--signal-cyan) 5%, transparent), inset 2px 0 0 var(--signal-cyan); }
|
|
211
|
+
.nav-code { position: relative; z-index: 1; color: var(--subtle-text); font-family: var(--font-mono); font-size: 8px; letter-spacing: .08em; }
|
|
212
|
+
.nav-icon { position: relative; z-index: 1; display: grid; place-items: center; }
|
|
213
|
+
.nav-label { position: relative; z-index: 1; overflow: hidden; font-size: 13px; font-weight: 600; letter-spacing: .005em; text-overflow: ellipsis; white-space: nowrap; }
|
|
214
|
+
.nav-signal { position: relative; z-index: 1; width: 4px; height: 4px; margin-left: auto; border-radius: 50%; background: var(--sidebar-border); }
|
|
215
|
+
.command-nav-item.is-active .nav-signal { background: var(--signal-cyan); box-shadow: 0 0 10px var(--signal-cyan); }
|
|
216
|
+
.sidebar-footer { border-top: 1px solid var(--sidebar-border); }
|
|
217
|
+
.node-status { display: flex; align-items: center; gap: 10px; margin: 14px 14px 8px; padding: 11px 10px; border: 1px solid var(--sidebar-border); border-radius: 8px; background: color-mix(in srgb, var(--card-bg-solid) 52%, transparent); }
|
|
218
|
+
.node-status-icon { display: grid; width: 30px; height: 30px; place-items: center; color: var(--signal-cyan); border: 1px solid color-mix(in srgb, var(--signal-cyan) 22%, transparent); border-radius: 7px; background: var(--accent-bg); }
|
|
219
|
+
.node-status-label, .node-status-value { display: block; font-family: var(--font-mono); font-size: 8px; letter-spacing: .1em; }
|
|
220
|
+
.node-status-label { color: var(--subtle-text); }
|
|
221
|
+
.node-status-value { margin-top: 3px; color: var(--muted-text); }
|
|
222
|
+
.node-status-value i { display: inline-block; width: 5px; height: 5px; margin-right: 5px; border-radius: 50%; background: var(--signal-lime); box-shadow: 0 0 8px var(--signal-lime); animation: signal-pulse 2.2s ease-in-out infinite; }
|
|
223
|
+
.language-panel { position: relative; padding: 0 14px 12px; }
|
|
224
|
+
.language-trigger { display: flex; width: 100%; align-items: center; gap: 9px; padding: 9px 10px; color: var(--sidebar-text); border-radius: 7px; font-size: 12px; }
|
|
225
|
+
.language-trigger:hover { color: var(--sidebar-hover-text); background: var(--sidebar-hover-bg); }
|
|
226
|
+
.language-menu { position: absolute; left: 14px; right: 14px; bottom: calc(100% + 5px); padding: 5px; border: 1px solid var(--card-border); border-radius: 9px; background: var(--card-bg-solid); box-shadow: var(--panel-shadow); }
|
|
227
|
+
.language-option { display: flex; width: 100%; align-items: center; justify-content: space-between; padding: 8px 9px; color: var(--muted-text); border-radius: 6px; font-size: 11px; }
|
|
228
|
+
.language-option:hover, .language-option.is-selected { color: var(--page-text); background: var(--hover-bg); }
|
|
229
|
+
.language-option i { width: 5px; height: 5px; border-radius: 50%; background: var(--signal-cyan); box-shadow: 0 0 8px var(--signal-cyan); }
|
|
230
|
+
.version-strip { display: flex; justify-content: space-between; padding: 10px 20px 13px; color: var(--subtle-text); border-top: 1px solid var(--sidebar-border); font-family: var(--font-mono); font-size: 7px; letter-spacing: .08em; }
|
|
231
|
+
|
|
232
|
+
/* ─── Page / Panel Language ───────────────────────────── */
|
|
233
|
+
|
|
234
|
+
main h1, main h2, main h3 { font-family: var(--font-display); letter-spacing: -.025em; }
|
|
235
|
+
main h1 { font-size: clamp(1.28rem, 2vw, 1.65rem) !important; font-weight: 720 !important; }
|
|
236
|
+
.page-kicker { display: flex; align-items: center; gap: 7px; margin-bottom: 6px; color: var(--signal-cyan); font-family: var(--font-mono); font-size: 8px; font-weight: 700; letter-spacing: .15em; }
|
|
237
|
+
.page-kicker span { width: 18px; height: 1px; background: var(--signal-cyan); box-shadow: 0 0 8px var(--signal-cyan); }
|
|
238
|
+
.dashboard-command-header { position: relative; padding-bottom: 17px; border-bottom: 1px solid var(--card-border); }
|
|
239
|
+
.dashboard-command-header::after { content: ""; position: absolute; left: 0; bottom: -1px; width: 100px; height: 1px; background: linear-gradient(90deg, var(--signal-cyan), transparent); }
|
|
240
|
+
|
|
241
|
+
.tech-panel,
|
|
242
|
+
.rounded-xl.border.border-gray-800,
|
|
243
|
+
.rounded-xl.border.border-gray-800\/50 {
|
|
244
|
+
position: relative;
|
|
245
|
+
border-color: var(--card-border) !important;
|
|
246
|
+
background:
|
|
247
|
+
linear-gradient(135deg, color-mix(in srgb, var(--signal-cyan) 2.5%, transparent), transparent 38%),
|
|
248
|
+
var(--card-bg) !important;
|
|
249
|
+
box-shadow: var(--panel-shadow);
|
|
250
|
+
backdrop-filter: blur(16px);
|
|
251
|
+
}
|
|
252
|
+
.tech-panel::before,
|
|
253
|
+
.rounded-xl.border.border-gray-800::before {
|
|
254
|
+
content: "";
|
|
255
|
+
position: absolute;
|
|
256
|
+
inset: 0;
|
|
257
|
+
pointer-events: none;
|
|
258
|
+
border-radius: inherit;
|
|
259
|
+
background: linear-gradient(90deg, color-mix(in srgb, var(--signal-cyan) 16%, transparent), transparent 22%) top left / 100% 1px no-repeat;
|
|
260
|
+
opacity: .7;
|
|
261
|
+
}
|
|
262
|
+
.tech-panel:hover { border-color: color-mix(in srgb, var(--signal-cyan) 28%, var(--card-border)) !important; }
|
|
263
|
+
.dashboard-stat-card { min-height: 174px; overflow: hidden; border-radius: 10px !important; transition: transform 180ms ease, border-color 180ms ease, box-shadow 180ms ease; }
|
|
264
|
+
.dashboard-stat-card::after { content: ""; position: absolute; width: 85px; height: 85px; right: -50px; bottom: -50px; border: 1px solid color-mix(in srgb, var(--signal-cyan) 14%, transparent); border-radius: 50%; box-shadow: 0 0 0 18px color-mix(in srgb, var(--signal-cyan) 3%, transparent); }
|
|
265
|
+
.dashboard-stat-card:hover { transform: translateY(-2px); box-shadow: 0 24px 58px color-mix(in srgb, var(--signal-cyan) 8%, transparent); }
|
|
266
|
+
.dashboard-stat-card > div:first-child > div:last-child { border: 1px solid color-mix(in srgb, var(--signal-cyan) 15%, transparent); border-radius: 7px !important; }
|
|
267
|
+
.dashboard-stat-card > p:nth-of-type(1) { font-family: var(--font-mono); font-variant-numeric: tabular-nums; }
|
|
268
|
+
.telemetry-chart { min-height: 384px; overflow: hidden; border-radius: 10px !important; background:
|
|
269
|
+
linear-gradient(90deg, var(--grid-line) 1px, transparent 1px),
|
|
270
|
+
linear-gradient(0deg, var(--grid-line) 1px, transparent 1px),
|
|
271
|
+
linear-gradient(135deg, color-mix(in srgb, var(--signal-cyan) 3%, transparent), transparent 44%),
|
|
272
|
+
var(--card-bg) !important;
|
|
273
|
+
background-size: 24px 24px, 24px 24px, auto, auto !important;
|
|
274
|
+
}
|
|
275
|
+
.telemetry-chart h3::before { content: "// "; color: var(--signal-cyan); font-family: var(--font-mono); }
|
|
276
|
+
.data-console { border-radius: 10px !important; }
|
|
277
|
+
.data-console thead { background: color-mix(in srgb, var(--signal-cyan) 3.5%, transparent); }
|
|
278
|
+
.data-console tbody tr { transition: background-color 120ms ease; }
|
|
279
|
+
.data-console tbody tr:hover { background: color-mix(in srgb, var(--signal-cyan) 4%, transparent); }
|
|
280
|
+
.data-console th { font-family: var(--font-mono); font-size: 9px !important; letter-spacing: .06em; text-transform: uppercase; }
|
|
281
|
+
.data-console td { font-variant-numeric: tabular-nums; }
|
|
282
|
+
|
|
283
|
+
/* Upgrade generic page panels and controls without changing page logic. */
|
|
284
|
+
[class*="rounded-xl"][class*="border-gray-800"],
|
|
285
|
+
[class*="rounded-lg"][class*="border-gray-800"] { border-color: var(--card-border) !important; }
|
|
286
|
+
[class*="bg-gray-900/50"], [class*="bg-gray-900/40"], [class*="bg-gray-900/30"], [class*="bg-gray-900/70"] { background-color: var(--card-bg) !important; }
|
|
287
|
+
input, select, textarea {
|
|
288
|
+
color: var(--input-text);
|
|
289
|
+
border-color: var(--input-border) !important;
|
|
290
|
+
border-radius: 7px !important;
|
|
291
|
+
background: var(--input-bg) !important;
|
|
292
|
+
box-shadow: 0 1px 0 color-mix(in srgb, white 5%, transparent) inset;
|
|
293
|
+
}
|
|
294
|
+
input:focus, select:focus, textarea:focus { border-color: color-mix(in srgb, var(--signal-cyan) 65%, var(--input-border)) !important; box-shadow: 0 0 0 3px color-mix(in srgb, var(--signal-cyan) 9%, transparent); }
|
|
295
|
+
button[class*="bg-blue-600"], button[class*="bg-blue-500"] {
|
|
296
|
+
color: #001014 !important;
|
|
297
|
+
background: linear-gradient(135deg, var(--signal-cyan-bright), var(--signal-cyan)) !important;
|
|
298
|
+
box-shadow: 0 8px 24px color-mix(in srgb, var(--signal-cyan) 18%, transparent);
|
|
299
|
+
}
|
|
300
|
+
button[class*="bg-blue-600"]:hover, button[class*="bg-blue-500"]:hover { transform: translateY(-1px); filter: brightness(1.06); }
|
|
301
|
+
table { border-collapse: collapse; }
|
|
302
|
+
.font-mono { font-family: var(--font-mono) !important; font-variant-numeric: tabular-nums; }
|
|
303
|
+
|
|
304
|
+
/* ─── Shared Components ───────────────────────────────── */
|
|
305
|
+
|
|
306
|
+
.stat-instrument { min-height: 154px; padding: 20px; overflow: hidden; border: 1px solid var(--card-border); border-radius: 10px; }
|
|
307
|
+
.panel-corner { position: absolute; width: 12px; height: 12px; pointer-events: none; }
|
|
308
|
+
.panel-corner-tl { left: 7px; top: 7px; border-left: 1px solid var(--signal-cyan); border-top: 1px solid var(--signal-cyan); }
|
|
309
|
+
.panel-corner-br { right: 7px; bottom: 7px; border-right: 1px solid var(--signal-cyan); border-bottom: 1px solid var(--signal-cyan); }
|
|
310
|
+
.instrument-label { color: var(--muted-text); font-family: var(--font-mono); font-size: 9px; font-weight: 700; letter-spacing: .12em; text-transform: uppercase; }
|
|
311
|
+
.instrument-value { color: var(--page-text); font-family: var(--font-display); font-size: 25px; font-weight: 760; letter-spacing: -.04em; }
|
|
312
|
+
.instrument-meta { color: var(--subtle-text); font-size: 10px; }
|
|
313
|
+
.instrument-icon { display: grid; width: 36px; height: 36px; place-items: center; color: var(--signal-cyan); border: 1px solid color-mix(in srgb, var(--signal-cyan) 17%, transparent); border-radius: 8px; background: var(--accent-bg); }
|
|
314
|
+
.instrument-trend { display: inline-flex; align-items: center; gap: 4px; margin-top: 7px; font-family: var(--font-mono); font-size: 10px; }
|
|
315
|
+
.instrument-trend.is-positive { color: var(--signal-lime); }
|
|
316
|
+
.instrument-trend.is-negative { color: var(--signal-red); }
|
|
317
|
+
.empty-signal { position: relative; display: flex; flex-direction: column; align-items: center; justify-content: center; min-height: 280px; padding: 44px 24px; overflow: hidden; text-align: center; border: 1px dashed var(--card-border); border-radius: 10px; background: radial-gradient(circle at center, color-mix(in srgb, var(--signal-cyan) 5%, transparent), transparent 48%); }
|
|
318
|
+
.empty-signal-radar { position: relative; display: grid; width: 74px; height: 74px; margin-bottom: 18px; place-items: center; color: var(--signal-cyan); border: 1px solid color-mix(in srgb, var(--signal-cyan) 28%, transparent); border-radius: 50%; }
|
|
319
|
+
.empty-signal-radar::before, .empty-signal-radar::after { content: ""; position: absolute; inset: 9px; border: 1px dashed color-mix(in srgb, var(--signal-cyan) 19%, transparent); border-radius: 50%; animation: brand-rotate 14s linear infinite; }
|
|
320
|
+
.empty-signal-radar::after { inset: -12px; animation-direction: reverse; }
|
|
321
|
+
.empty-signal-code { color: var(--signal-cyan) !important; font-family: var(--font-mono); font-size: 8px !important; letter-spacing: .16em; }
|
|
322
|
+
.empty-signal h3 { margin-top: 7px; color: var(--page-text); font-family: var(--font-display); font-size: 17px; font-weight: 700; }
|
|
323
|
+
.empty-signal > p:last-of-type { max-width: 430px; margin-top: 5px; color: var(--muted-text); font-size: 12px; }
|
|
324
|
+
.modal-shell { position: fixed; inset: 0; z-index: 60; display: flex; align-items: center; justify-content: center; padding: 20px; }
|
|
325
|
+
.modal-backdrop { position: absolute; inset: 0; background: rgba(0, 7, 10, .68); backdrop-filter: blur(12px); }
|
|
326
|
+
.tech-modal { position: relative; width: 100%; overflow: hidden; border: 1px solid color-mix(in srgb, var(--signal-cyan) 24%, var(--card-border)); border-radius: 11px; background: var(--card-bg-solid); box-shadow: 0 30px 100px rgba(0,0,0,.4), 0 0 70px color-mix(in srgb, var(--signal-cyan) 8%, transparent); animation: modal-enter 180ms ease-out both; }
|
|
327
|
+
.tech-modal::before { content: ""; position: absolute; left: 0; top: 0; width: 32%; height: 1px; background: linear-gradient(90deg, var(--signal-cyan), transparent); }
|
|
328
|
+
.modal-header { display: flex; align-items: center; justify-content: space-between; padding: 17px 20px; border-bottom: 1px solid var(--card-border); }
|
|
329
|
+
.modal-kicker { display: block; margin-bottom: 2px; color: var(--signal-cyan); font-family: var(--font-mono); font-size: 7px; letter-spacing: .16em; }
|
|
330
|
+
.modal-header h2 { color: var(--page-text); font-family: var(--font-display); font-size: 17px; font-weight: 700; }
|
|
331
|
+
.modal-close { display: grid; width: 32px; height: 32px; place-items: center; color: var(--muted-text); border: 1px solid var(--card-border); border-radius: 7px; }
|
|
332
|
+
.modal-close:hover { color: var(--signal-cyan); border-color: color-mix(in srgb, var(--signal-cyan) 32%, var(--card-border)); background: var(--accent-bg); }
|
|
333
|
+
.modal-content { max-height: min(82vh, 900px); overflow-y: auto; padding: 20px; }
|
|
334
|
+
|
|
335
|
+
/* ─── Loading / Feedback ──────────────────────────────── */
|
|
336
|
+
|
|
337
|
+
.loading-console { position: relative; display: flex; height: 100vh; align-items: center; justify-content: center; overflow: hidden; background: var(--page-bg-deep); }
|
|
338
|
+
.loading-console::before { content: ""; position: absolute; inset: 0; background: linear-gradient(90deg, var(--grid-line) 1px, transparent 1px), linear-gradient(0deg, var(--grid-line) 1px, transparent 1px); background-size: 36px 36px; }
|
|
339
|
+
.loading-core { position: relative; display: flex; flex-direction: column; align-items: center; gap: 16px; color: var(--muted-text); font-family: var(--font-mono); font-size: 10px; letter-spacing: .1em; }
|
|
340
|
+
.loading-ring { position: relative; width: 48px; height: 48px; border: 1px solid var(--card-border); border-radius: 50%; }
|
|
341
|
+
.loading-ring::before { content: ""; position: absolute; inset: 5px; border: 2px solid transparent; border-top-color: var(--signal-cyan); border-right-color: color-mix(in srgb, var(--signal-cyan) 35%, transparent); border-radius: 50%; animation: brand-rotate .85s linear infinite; box-shadow: 0 0 18px color-mix(in srgb, var(--signal-cyan) 13%, transparent); }
|
|
342
|
+
|
|
343
|
+
/* ─── Scrollbar ───────────────────────────────────────── */
|
|
344
|
+
::-webkit-scrollbar { width: 7px; height: 7px; }
|
|
345
|
+
::-webkit-scrollbar-track { background: transparent; }
|
|
346
|
+
::-webkit-scrollbar-thumb { background: var(--scrollbar-thumb); border: 2px solid transparent; border-radius: 8px; background-clip: padding-box; }
|
|
347
|
+
::-webkit-scrollbar-thumb:hover { background: var(--scrollbar-thumb-hover); background-clip: padding-box; }
|
|
348
|
+
|
|
349
|
+
/* ─── Light mode utility remaps ───────────────────────── */
|
|
350
|
+
.light .text-white, .light .text-gray-100 { color: var(--page-text); }
|
|
351
|
+
.light .text-gray-200, .light .text-gray-300 { color: #31494f; }
|
|
352
|
+
.light .text-gray-400 { color: var(--muted-text); }
|
|
353
|
+
.light .text-gray-500, .light .text-gray-600 { color: var(--subtle-text); }
|
|
354
|
+
.light .bg-gray-950, .light .bg-gray-900 { background-color: var(--card-bg-solid); }
|
|
355
|
+
.light .bg-gray-900\/50, .light .bg-gray-900\/30, .light .bg-gray-900\/70 { background-color: var(--card-bg); }
|
|
356
|
+
.light .bg-gray-800, .light .bg-gray-800\/30, .light .bg-gray-800\/50, .light .bg-gray-800\/20 { background-color: rgba(222, 232, 234, .72); }
|
|
357
|
+
.light .bg-black\/60 { background-color: rgba(12, 30, 35, .52); }
|
|
358
|
+
.light .border-gray-800, .light .border-gray-800\/50, .light .border-gray-700, .light .border-gray-600 { border-color: var(--card-border); }
|
|
359
|
+
.light .text-blue-400 { color: var(--signal-cyan); }
|
|
360
|
+
.light .bg-blue-600 { background-color: var(--signal-cyan); }
|
|
361
|
+
.light .bg-blue-500\/10, .light .bg-blue-600\/10 { background-color: var(--accent-bg); }
|
|
362
|
+
.light .text-emerald-400 { color: #558d00; }
|
|
363
|
+
.light .text-amber-400 { color: #b46b00; }
|
|
364
|
+
.light .text-purple-400 { color: var(--signal-violet); }
|
|
365
|
+
.light .text-red-400 { color: #d73558; }
|
|
366
|
+
.light .bg-red-600 { background-color: #d73558; }
|
|
367
|
+
.light .bg-red-950\/20 { background-color: rgba(215,53,88,.07); }
|
|
368
|
+
.light .border-red-700, .light .border-red-900\/30 { border-color: rgba(215,53,88,.3); }
|
|
369
|
+
.light .bg-emerald-500\/10 { background-color: rgba(85,141,0,.08); }
|
|
370
|
+
.light .bg-amber-500\/10 { background-color: rgba(180,107,0,.08); }
|
|
371
|
+
.light .hover\:bg-gray-800:hover, .light .hover\:bg-gray-800\/70:hover, .light .hover\:bg-gray-800\/60:hover, .light .hover\:bg-gray-800\/40:hover, .light .hover\:bg-gray-800\/30:hover { background-color: var(--hover-bg); }
|
|
372
|
+
.light .hover\:bg-gray-700:hover { background-color: rgba(204,219,222,.8); }
|
|
373
|
+
.light .hover\:text-gray-200:hover { color: var(--page-text); }
|
|
374
|
+
.light .placeholder-gray-500::placeholder, .light .placeholder-gray-600::placeholder { color: var(--subtle-text); }
|
|
375
|
+
|
|
376
|
+
/* ─── Responsive ──────────────────────────────────────── */
|
|
377
|
+
|
|
378
|
+
@media (max-width: 1100px) {
|
|
379
|
+
.app-canvas { padding-inline: 28px; }
|
|
380
|
+
.command-sidebar { width: 232px; min-width: 232px; }
|
|
189
381
|
}
|
|
190
|
-
|
|
191
|
-
|
|
382
|
+
|
|
383
|
+
@media (max-width: 820px) {
|
|
384
|
+
body { overflow: hidden; }
|
|
385
|
+
.dashboard-command-header > div:last-child { display: flex; flex-wrap: wrap; gap: 6px; }
|
|
386
|
+
.dashboard-command-header > div:last-child > .flex.items-center.gap-1.rounded-lg.border.p-0\.5 { order: 10; width: 100%; justify-content: center; }
|
|
387
|
+
.command-sidebar { position: fixed; left: 0; top: 0; width: min(86vw, 290px); min-width: 0; transform: translateX(-105%); box-shadow: 28px 0 80px rgba(0,0,0,.34); transition: transform 240ms cubic-bezier(.22,.8,.25,1); }
|
|
388
|
+
.command-sidebar.is-open { transform: translateX(0); }
|
|
389
|
+
.sidebar-close { display: grid; place-items: center; }
|
|
390
|
+
.sidebar-scrim { position: fixed; inset: 0; z-index: 20; display: block; border: 0; background: rgba(1,8,11,.58); backdrop-filter: blur(5px); }
|
|
391
|
+
.mobile-command-bar { display: flex; height: 58px; flex: 0 0 auto; align-items: center; justify-content: space-between; padding: 0 16px; border-bottom: 1px solid var(--card-border); background: color-mix(in srgb, var(--sidebar-bg) 88%, transparent); backdrop-filter: blur(18px); }
|
|
392
|
+
.command-icon-button { display: grid; width: 34px; height: 34px; place-items: center; color: var(--page-text); border: 1px solid var(--card-border); border-radius: 8px; background: var(--card-bg); }
|
|
393
|
+
.mobile-brand { display: flex; align-items: center; gap: 8px; color: var(--signal-cyan); font-family: var(--font-mono); font-size: 9px; font-weight: 700; letter-spacing: .14em; }
|
|
394
|
+
.system-pulse { width: 7px; height: 7px; border-radius: 50%; background: var(--signal-lime); box-shadow: 0 0 10px var(--signal-lime); animation: signal-pulse 2.2s ease-in-out infinite; }
|
|
395
|
+
.app-canvas { padding: 24px 18px 42px; }
|
|
396
|
+
.dashboard-command-header { align-items: flex-start !important; }
|
|
397
|
+
.dashboard-command-header > div:last-child { width: 100%; overflow-x: auto; padding-bottom: 4px; }
|
|
192
398
|
}
|
|
193
|
-
|
|
194
|
-
|
|
399
|
+
|
|
400
|
+
@media (max-width: 560px) {
|
|
401
|
+
.app-canvas { padding-inline: 14px; }
|
|
402
|
+
.dashboard-page { gap: 14px; }
|
|
403
|
+
.dashboard-stat-card { min-height: 150px; }
|
|
404
|
+
.telemetry-chart { min-height: 340px; padding: 16px !important; }
|
|
405
|
+
.data-console > div:first-child { overflow-x: auto; }
|
|
406
|
+
.data-console > div:first-child button { white-space: nowrap; }
|
|
407
|
+
.modal-shell { padding: 10px; }
|
|
195
408
|
}
|
|
196
|
-
|
|
197
|
-
|
|
409
|
+
|
|
410
|
+
@media (prefers-reduced-motion: reduce) {
|
|
411
|
+
*, *::before, *::after { scroll-behavior: auto !important; animation-duration: .01ms !important; animation-iteration-count: 1 !important; transition-duration: .01ms !important; }
|
|
198
412
|
}
|
|
199
|
-
|
|
200
|
-
|
|
413
|
+
|
|
414
|
+
/* ─── Motion ──────────────────────────────────────────── */
|
|
415
|
+
@keyframes brand-rotate { to { transform: rotate(360deg); } }
|
|
416
|
+
@keyframes orbit-drift { 50% { transform: rotate(180deg) scale(1.025); } to { transform: rotate(360deg); } }
|
|
417
|
+
@keyframes ambient-scan { 0%, 18% { transform: translateY(-70vh); opacity: 0; } 30% { opacity: 1; } 76% { opacity: .8; } 100% { transform: translateY(125vh); opacity: 0; } }
|
|
418
|
+
@keyframes signal-pulse { 0%,100% { opacity: .5; transform: scale(.82); } 50% { opacity: 1; transform: scale(1.1); } }
|
|
419
|
+
@keyframes canvas-enter { from { opacity: 0; transform: translateY(8px); } to { opacity: 1; transform: translateY(0); } }
|
|
420
|
+
@keyframes modal-enter { from { opacity: 0; transform: translateY(8px) scale(.985); } to { opacity: 1; transform: translateY(0) scale(1); } }
|
|
421
|
+
|
|
422
|
+
/* ─── Rich dashboard analytics ────────────────────────── */
|
|
423
|
+
.dashboard-analytics-grid { display: grid; grid-template-columns: repeat(12, minmax(0, 1fr)); gap: 14px; }
|
|
424
|
+
.analytics-overview-panel { grid-column: span 7; padding: 18px; border-radius: 10px; }
|
|
425
|
+
.composition-panel { grid-column: span 5; padding: 18px; border-radius: 10px; }
|
|
426
|
+
.distribution-panel, .activity-panel, .model-leaderboard-panel { grid-column: span 4; min-height: 294px; padding: 18px; border-radius: 10px; }
|
|
427
|
+
.analytics-panel-header { display: flex; align-items: flex-start; justify-content: space-between; gap: 12px; padding-bottom: 13px; border-bottom: 1px solid var(--card-border); }
|
|
428
|
+
.analytics-panel-header h3 { margin-top: 3px; color: var(--page-text); font-size: 14px; font-weight: 700; }
|
|
429
|
+
.analytics-panel-kicker { color: var(--subtle-text); font-family: var(--font-mono); font-size: 8px; font-weight: 700; letter-spacing: .13em; }
|
|
430
|
+
.analytics-metrics-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 9px; padding-top: 14px; }
|
|
431
|
+
.analytics-metric { display: flex; min-width: 0; align-items: flex-start; gap: 9px; padding: 11px 9px; border: 1px solid var(--card-border); border-radius: 8px; background: color-mix(in srgb, var(--card-bg-solid) 28%, transparent); }
|
|
432
|
+
.analytics-metric-icon { display: grid; width: 29px; height: 29px; flex: 0 0 auto; place-items: center; border: 1px solid; border-radius: 7px; }
|
|
433
|
+
.analytics-metric-label { overflow: hidden; color: var(--muted-text); font-family: var(--font-mono); font-size: 8px; letter-spacing: .06em; text-overflow: ellipsis; text-transform: uppercase; white-space: nowrap; }
|
|
434
|
+
.analytics-metric-value { margin-top: 5px; overflow: hidden; color: var(--page-text); font-family: var(--font-display); font-size: 17px; font-weight: 750; letter-spacing: -.03em; text-overflow: ellipsis; white-space: nowrap; }
|
|
435
|
+
.analytics-metric-detail { margin-top: 3px; overflow: hidden; color: var(--subtle-text); font-size: 9px; text-overflow: ellipsis; white-space: nowrap; }
|
|
436
|
+
.composition-layout { display: grid; grid-template-columns: 148px minmax(0, 1fr); align-items: center; gap: 13px; min-height: 199px; }
|
|
437
|
+
.composition-chart { position: relative; width: 148px; height: 148px; }
|
|
438
|
+
.composition-chart::before { content: ""; position: absolute; inset: 18px; border: 10px solid color-mix(in srgb, var(--card-border) 46%, transparent); border-radius: 50%; }
|
|
439
|
+
.composition-center { position: absolute; inset: 0; display: flex; flex-direction: column; align-items: center; justify-content: center; pointer-events: none; }
|
|
440
|
+
.composition-center strong { color: var(--page-text); font-family: var(--font-display); font-size: 18px; letter-spacing: -.04em; }
|
|
441
|
+
.composition-center span { margin-top: 3px; color: var(--subtle-text); font-family: var(--font-mono); font-size: 7px; letter-spacing: .1em; text-transform: uppercase; }
|
|
442
|
+
.composition-legend { display: flex; flex-direction: column; gap: 9px; }
|
|
443
|
+
.composition-legend-row { display: grid; grid-template-columns: 7px minmax(0, 1fr) auto; align-items: center; gap: 7px; color: var(--muted-text); font-size: 10px; }
|
|
444
|
+
.composition-legend-row strong { color: var(--page-text); font-family: var(--font-mono); font-size: 9px; font-weight: 600; }
|
|
445
|
+
.legend-dot { width: 7px; height: 7px; border-radius: 50%; box-shadow: 0 0 8px currentColor; }
|
|
446
|
+
.composition-summary { display: flex; align-items: center; justify-content: space-between; margin-top: 3px; padding-top: 9px; color: var(--muted-text); border-top: 1px solid var(--card-border); font-family: var(--font-mono); font-size: 8px; letter-spacing: .05em; text-transform: uppercase; }
|
|
447
|
+
.composition-summary strong { color: var(--signal-lime); font-size: 10px; }
|
|
448
|
+
.distribution-list, .leaderboard-list { display: flex; flex-direction: column; gap: 13px; padding-top: 15px; }
|
|
449
|
+
.distribution-row { position: relative; min-width: 0; padding-bottom: 1px; }
|
|
450
|
+
.distribution-row-head { display: flex; align-items: baseline; justify-content: space-between; gap: 8px; }
|
|
451
|
+
.distribution-name { display: block; overflow: hidden; color: var(--page-text); font-size: 11px; font-weight: 650; text-overflow: ellipsis; white-space: nowrap; }
|
|
452
|
+
.distribution-meta { display: block; margin-top: 2px; overflow: hidden; color: var(--subtle-text); font-family: var(--font-mono); font-size: 8px; text-overflow: ellipsis; white-space: nowrap; }
|
|
453
|
+
.distribution-value { flex: 0 0 auto; color: var(--muted-text); font-family: var(--font-mono); font-size: 9px; }
|
|
454
|
+
.distribution-track { height: 4px; margin-top: 7px; overflow: hidden; border-radius: 99px; background: color-mix(in srgb, var(--card-border) 70%, transparent); }
|
|
455
|
+
.distribution-track span { display: block; height: 100%; min-width: 0; border-radius: inherit; box-shadow: 0 0 10px color-mix(in srgb, currentColor 30%, transparent); transition: width 400ms ease; }
|
|
456
|
+
.distribution-percent { position: absolute; right: 0; bottom: -1px; color: var(--subtle-text); font-family: var(--font-mono); font-size: 8px; }
|
|
457
|
+
.activity-chart { height: 202px; padding-top: 11px; }
|
|
458
|
+
.activity-footer { display: flex; align-items: center; justify-content: space-between; margin-top: 2px; padding-top: 11px; border-top: 1px solid var(--card-border); color: var(--muted-text); font-family: var(--font-mono); font-size: 8px; letter-spacing: .05em; text-transform: uppercase; }
|
|
459
|
+
.activity-footer strong { color: var(--signal-cyan); font-size: 11px; }
|
|
460
|
+
.leaderboard-row { display: flex; min-width: 0; align-items: center; gap: 9px; padding: 8px 0; border-bottom: 1px solid color-mix(in srgb, var(--card-border) 75%, transparent); }
|
|
461
|
+
.leaderboard-row:last-child { border-bottom: 0; }
|
|
462
|
+
.leaderboard-rank { color: var(--signal-violet); font-family: var(--font-mono); font-size: 8px; }
|
|
463
|
+
.leaderboard-name { overflow: hidden; color: var(--page-text); font-size: 10px; font-weight: 650; text-overflow: ellipsis; white-space: nowrap; }
|
|
464
|
+
.leaderboard-meta { margin-top: 2px; overflow: hidden; color: var(--subtle-text); font-family: var(--font-mono); font-size: 8px; text-overflow: ellipsis; white-space: nowrap; }
|
|
465
|
+
.leaderboard-value { flex: 0 0 auto; color: var(--page-text); font-family: var(--font-mono); font-size: 9px; }
|
|
466
|
+
.analytics-no-data { padding: 30px 0; color: var(--subtle-text); font-size: 11px; text-align: center; }
|
|
467
|
+
|
|
468
|
+
@media (max-width: 1080px) {
|
|
469
|
+
.analytics-overview-panel, .composition-panel { grid-column: span 12; }
|
|
470
|
+
.distribution-panel, .activity-panel, .model-leaderboard-panel { grid-column: span 4; }
|
|
201
471
|
}
|
|
202
|
-
|
|
203
|
-
.
|
|
204
|
-
|
|
472
|
+
@media (max-width: 820px) {
|
|
473
|
+
.analytics-metrics-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
|
|
474
|
+
.distribution-panel, .activity-panel, .model-leaderboard-panel { grid-column: span 12; }
|
|
205
475
|
}
|
|
206
|
-
|
|
207
|
-
|
|
476
|
+
@media (max-width: 560px) {
|
|
477
|
+
.analytics-metrics-grid { grid-template-columns: 1fr; }
|
|
478
|
+
.composition-layout { grid-template-columns: 132px minmax(0, 1fr); gap: 8px; }
|
|
479
|
+
.composition-chart { width: 132px; height: 132px; }
|
|
480
|
+
.analytics-overview-panel, .composition-panel, .distribution-panel, .activity-panel, .model-leaderboard-panel { padding: 14px; }
|
|
208
481
|
}
|
|
209
|
-
|
|
210
|
-
|
|
482
|
+
|
|
483
|
+
/* ─── Memory workspace ────────────────────────────────── */
|
|
484
|
+
.memory-command-header { position: relative; padding-bottom: 16px; border-bottom: 1px solid var(--card-border); }
|
|
485
|
+
.memory-command-header::after, .providers-command-header::after { content: ""; position: absolute; left: 0; bottom: -1px; width: 120px; height: 1px; background: linear-gradient(90deg, var(--signal-cyan), transparent); }
|
|
486
|
+
.memory-readout-grid, .providers-readout-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 12px; }
|
|
487
|
+
.memory-readout-card, .providers-readout-card { min-height: 92px; padding: 14px 16px; overflow: hidden; border-radius: 9px; }
|
|
488
|
+
.memory-readout-card span, .providers-readout-card span { display: block; color: var(--subtle-text); font-family: var(--font-mono); font-size: 8px; letter-spacing: .13em; }
|
|
489
|
+
.memory-readout-card strong, .providers-readout-card strong { display: block; margin-top: 9px; color: var(--page-text); font-family: var(--font-display); font-size: 21px; letter-spacing: -.04em; }
|
|
490
|
+
.memory-readout-card small, .providers-readout-card small { display: block; margin-top: 3px; color: var(--muted-text); font-size: 10px; }
|
|
491
|
+
.memory-toolbar { display: flex; align-items: center; justify-content: space-between; gap: 18px; padding: 12px 14px; border-radius: 9px; }
|
|
492
|
+
.memory-file-jump { display: flex; min-width: 0; flex-wrap: wrap; align-items: center; gap: 7px; }
|
|
493
|
+
.memory-toolbar-label { margin-right: 3px; color: var(--subtle-text); font-family: var(--font-mono); font-size: 8px; letter-spacing: .12em; }
|
|
494
|
+
.memory-file-chip { display: inline-flex; align-items: center; gap: 5px; padding: 6px 8px; color: var(--muted-text); border: 1px solid var(--card-border); border-radius: 6px; font-family: var(--font-mono); font-size: 9px; text-decoration: none; }
|
|
495
|
+
.memory-file-chip:hover { color: var(--signal-cyan); border-color: color-mix(in srgb, var(--signal-cyan) 35%, var(--card-border)); background: var(--accent-bg); }
|
|
496
|
+
.memory-file-chip b { color: var(--page-text); font-size: 8px; }
|
|
497
|
+
.memory-search { width: min(290px, 100%); flex: 0 0 auto; }
|
|
498
|
+
.memory-sections { display: flex; flex-direction: column; gap: 14px; }
|
|
499
|
+
.memory-file-panel { padding: 18px; overflow: hidden; border-radius: 10px; }
|
|
500
|
+
.memory-file-header { position: relative; }
|
|
501
|
+
.memory-file-header::before { content: ""; position: absolute; left: 0; bottom: -1px; width: 70px; height: 1px; background: var(--signal-cyan); opacity: .65; }
|
|
502
|
+
.memory-timeline { position: relative; }
|
|
503
|
+
.memory-timeline::before { content: ""; position: absolute; left: 10px; top: 8px; bottom: 10px; width: 1px; background: linear-gradient(var(--signal-cyan), transparent); opacity: .35; }
|
|
504
|
+
.memory-entry-card { margin-left: 16px; border-color: var(--card-border) !important; background: color-mix(in srgb, var(--card-bg-solid) 32%, transparent) !important; transition: border-color 160ms ease, transform 160ms ease, background-color 160ms ease; }
|
|
505
|
+
.memory-entry-card::before { content: ""; position: absolute; left: -20px; top: 17px; width: 7px; height: 7px; border: 1px solid var(--signal-cyan); border-radius: 50%; background: var(--page-bg); box-shadow: 0 0 8px color-mix(in srgb, var(--signal-cyan) 70%, transparent); }
|
|
506
|
+
.memory-entry-card:hover { transform: translateX(2px); border-color: color-mix(in srgb, var(--signal-cyan) 30%, var(--card-border)) !important; background: color-mix(in srgb, var(--signal-cyan) 4%, var(--card-bg-solid)) !important; }
|
|
507
|
+
.memory-entry-actions { opacity: 1 !important; }
|
|
508
|
+
.memory-entry-actions button { border: 1px solid transparent; }
|
|
509
|
+
.memory-entry-actions button:hover { border-color: var(--card-border); background: var(--accent-bg); }
|
|
510
|
+
.memory-empty-state { display: flex; min-height: 300px; flex-direction: column; align-items: center; justify-content: center; padding: 42px; text-align: center; border: 1px dashed var(--card-border); border-radius: 10px; background: radial-gradient(circle, color-mix(in srgb, var(--signal-cyan) 5%, transparent), transparent 55%); }
|
|
511
|
+
.memory-empty-radar { display: grid; width: 72px; height: 72px; place-items: center; color: var(--signal-cyan); border: 1px solid color-mix(in srgb, var(--signal-cyan) 28%, transparent); border-radius: 50%; box-shadow: 0 0 0 10px color-mix(in srgb, var(--signal-cyan) 3%, transparent); }
|
|
512
|
+
|
|
513
|
+
/* ─── Providers workspace ────────────────────────────── */
|
|
514
|
+
.providers-command-header { position: relative; display: flex; align-items: flex-start; justify-content: space-between; padding-bottom: 16px; }
|
|
515
|
+
.providers-header-signal { display: inline-flex; align-items: center; gap: 7px; padding-top: 9px; color: var(--signal-lime); font-family: var(--font-mono); font-size: 8px; letter-spacing: .12em; }
|
|
516
|
+
.providers-header-signal span { width: 6px; height: 6px; border-radius: 50%; background: var(--signal-lime); box-shadow: 0 0 10px var(--signal-lime); }
|
|
517
|
+
.providers-readout-card strong { font-size: 20px; }
|
|
518
|
+
.providers-console { position: relative; border-radius: 10px !important; box-shadow: var(--panel-shadow); }
|
|
519
|
+
.providers-console::before { content: ""; position: absolute; left: 0; right: 0; top: 0; height: 1px; background: linear-gradient(90deg, var(--signal-cyan), transparent 34%); opacity: .7; }
|
|
520
|
+
.provider-rail { background: color-mix(in srgb, var(--card-bg-solid) 50%, transparent); }
|
|
521
|
+
.provider-detail { background: linear-gradient(135deg, color-mix(in srgb, var(--signal-cyan) 2%, transparent), transparent 38%); }
|
|
522
|
+
.provider-rail button.provider-list-item { border-color: transparent !important; }
|
|
523
|
+
.provider-rail button:hover { color: var(--page-text) !important; border-color: color-mix(in srgb, var(--signal-cyan) 15%, transparent) !important; background: var(--hover-bg) !important; }
|
|
524
|
+
.provider-rail button.provider-list-item.is-active { border-color: color-mix(in srgb, var(--signal-cyan) 42%, var(--card-border)) !important; background: var(--accent-bg) !important; box-shadow: inset 2px 0 var(--signal-cyan), 0 0 18px color-mix(in srgb, var(--signal-cyan) 7%, transparent); }
|
|
525
|
+
.provider-detail > div:first-child { padding-bottom: 13px; border-bottom: 1px solid var(--card-border); }
|
|
526
|
+
.provider-detail label { font-family: var(--font-mono); font-size: 9px; letter-spacing: .06em; text-transform: uppercase; }
|
|
527
|
+
.provider-detail input, .provider-detail select { min-height: 38px; }
|
|
528
|
+
.provider-detail > div:nth-of-type(1) + div { margin-top: 18px; }
|
|
529
|
+
.provider-detail [class*="rounded-lg"][class*="border-gray-800"] { background: color-mix(in srgb, var(--card-bg-solid) 30%, transparent) !important; }
|
|
530
|
+
.provider-detail [class*="bg-gray-900/70"] { background: color-mix(in srgb, var(--card-bg-solid) 38%, transparent) !important; }
|
|
531
|
+
.provider-detail [class*="bg-gray-900/70"]:hover { border-color: color-mix(in srgb, var(--signal-cyan) 23%, var(--card-border)) !important; }
|
|
532
|
+
|
|
533
|
+
@media (max-width: 820px) {
|
|
534
|
+
.memory-toolbar { align-items: stretch; flex-direction: column; }
|
|
535
|
+
.memory-search { width: 100%; }
|
|
536
|
+
.providers-command-header { flex-direction: column; gap: 5px; }
|
|
537
|
+
.providers-header-signal { padding-top: 0; }
|
|
538
|
+
.providers-console { flex-direction: column; overflow: visible; }
|
|
539
|
+
.provider-rail { width: 100% !important; border-right: 0 !important; border-bottom: 1px solid var(--card-border); }
|
|
540
|
+
.provider-rail > div { max-height: 250px; overflow-y: auto; }
|
|
541
|
+
.providers-console { min-height: 0; }
|
|
542
|
+
.provider-detail { padding: 18px !important; }
|
|
543
|
+
.provider-detail > * { min-width: 0; }
|
|
544
|
+
.provider-model-list { max-height: 52vh; overflow-y: auto; }
|
|
545
|
+
.provider-model-row { flex-wrap: wrap; }
|
|
546
|
+
.provider-model-row > .min-w-0 { flex: 1 1 180px; }
|
|
547
|
+
.provider-model-row > button, .provider-model-row > span { max-width: 100%; }
|
|
548
|
+
|
|
211
549
|
}
|
|
212
|
-
|
|
213
|
-
|
|
550
|
+
@media (max-width: 560px) {
|
|
551
|
+
.memory-readout-grid, .providers-readout-grid { grid-template-columns: 1fr; }
|
|
552
|
+
.memory-file-panel { padding: 14px; }
|
|
553
|
+
.memory-entry-card { margin-left: 13px; }
|
|
214
554
|
}
|
|
215
|
-
.
|
|
216
|
-
.
|
|
217
|
-
.
|
|
218
|
-
.
|
|
219
|
-
.
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
555
|
+
.provider-list-item::after { content: ""; width: 4px; height: 4px; margin-left: 2px; border-radius: 50%; background: var(--card-border); }
|
|
556
|
+
.provider-list-item:hover::after, .provider-list-item.is-active::after { background: var(--signal-cyan); box-shadow: 0 0 8px var(--signal-cyan); }
|
|
557
|
+
.provider-model-list { background: color-mix(in srgb, var(--card-bg-solid) 24%, transparent); }
|
|
558
|
+
.provider-model-row { transition: border-color 160ms ease, background-color 160ms ease, transform 160ms ease; }
|
|
559
|
+
.provider-model-row:hover { transform: translateX(2px); border-color: color-mix(in srgb, var(--signal-cyan) 24%, var(--card-border)) !important; background: color-mix(in srgb, var(--signal-cyan) 5%, var(--card-bg-solid)) !important; }
|
|
560
|
+
|
|
561
|
+
/* ─── Dashboard data source switcher ─────────────────── */
|
|
562
|
+
.dashboard-source-strip { display: flex; min-width: 0; align-items: center; gap: 12px; padding: 10px 12px; overflow: hidden; border-radius: 9px; }
|
|
563
|
+
.dashboard-source-label { flex: 0 0 auto; color: var(--subtle-text); font-family: var(--font-mono); font-size: 8px; font-weight: 700; letter-spacing: .13em; text-transform: uppercase; }
|
|
564
|
+
.dashboard-source-options { display: flex; min-width: 0; flex: 1; align-items: center; gap: 5px; overflow-x: auto; padding: 2px; scrollbar-width: none; }
|
|
565
|
+
.dashboard-source-options::-webkit-scrollbar { display: none; }
|
|
566
|
+
.dashboard-source-option { display: inline-flex; flex: 0 0 auto; align-items: center; gap: 6px; padding: 6px 9px; color: var(--muted-text); border: 1px solid transparent; border-radius: 6px; font-family: var(--font-mono); font-size: 9px; }
|
|
567
|
+
.dashboard-source-option:hover { color: var(--page-text); background: var(--hover-bg); }
|
|
568
|
+
.dashboard-source-option.is-active { color: var(--signal-cyan); border-color: color-mix(in srgb, var(--signal-cyan) 26%, transparent); background: var(--accent-bg); box-shadow: inset 0 -1px color-mix(in srgb, var(--signal-cyan) 50%, transparent); }
|
|
569
|
+
.dashboard-source-dot { width: 5px; height: 5px; border-radius: 50%; background: var(--card-border); }
|
|
570
|
+
.dashboard-source-option.is-active .dashboard-source-dot { background: var(--signal-cyan); box-shadow: 0 0 8px var(--signal-cyan); }
|
|
571
|
+
.dashboard-source-note { flex: 0 1 280px; color: var(--subtle-text); font-size: 9px; line-height: 1.45; }
|
|
572
|
+
@media (max-width: 820px) {
|
|
573
|
+
.dashboard-source-strip { align-items: stretch; flex-direction: column; gap: 7px; }
|
|
574
|
+
.dashboard-source-note { flex-basis: auto; }
|
|
223
575
|
}
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
}
|
|
229
|
-
.
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
576
|
+
|
|
577
|
+
/* Keep UI zoom independent from the root rem/font-size preference. The
|
|
578
|
+
application canvas expands in layout space before it is visually scaled,
|
|
579
|
+
so reduced zoom reveals more of dense pages instead of clipping them. */
|
|
580
|
+
:root { --ui-zoom: 1; }
|
|
581
|
+
.app-shell { flex: 0 0 auto; }
|
|
582
|
+
|
|
583
|
+
|
|
584
|
+
/* Compatibility controls use readable body text rather than compact field-label typography. */
|
|
585
|
+
.provider-detail .provider-compat-label {
|
|
586
|
+
color: var(--page-text);
|
|
587
|
+
font-family: var(--font-body);
|
|
588
|
+
font-size: 14px;
|
|
589
|
+
font-weight: 500;
|
|
590
|
+
letter-spacing: 0;
|
|
591
|
+
line-height: 1.55;
|
|
592
|
+
text-transform: none;
|
|
593
|
+
}
|
|
594
|
+
.provider-detail .provider-compat-description {
|
|
595
|
+
color: var(--muted-text) !important;
|
|
596
|
+
font-family: var(--font-body);
|
|
597
|
+
font-size: 13px !important;
|
|
598
|
+
font-weight: 400;
|
|
599
|
+
letter-spacing: 0;
|
|
600
|
+
line-height: 1.55;
|
|
601
|
+
text-transform: none;
|
|
602
|
+
}
|
|
603
|
+
@media (max-width: 820px) {
|
|
604
|
+
.provider-detail .provider-compat-row { align-items: flex-start; }
|
|
605
|
+
.provider-detail .provider-compat-label { font-size: 13px; }
|
|
606
|
+
.provider-detail .provider-compat-description { display: block; margin-top: 3px; margin-left: 0 !important; }
|
|
238
607
|
}
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
608
|
+
|
|
609
|
+
|
|
610
|
+
/* ─── Official Usage Query ───────────────────────────── */
|
|
611
|
+
.official-usage-header { position: relative; display: flex; align-items: flex-start; justify-content: space-between; padding-bottom: 16px; border-bottom: 1px solid var(--card-border); }
|
|
612
|
+
.official-usage-header h1 { margin-top: 3px; }
|
|
613
|
+
.official-usage-header p { margin-top: 5px; color: var(--muted-text); font-size: 13px; }
|
|
614
|
+
.official-usage-status { display: inline-flex; align-items: center; gap: 7px; padding-top: 9px; color: var(--signal-lime); font-family: var(--font-mono); font-size: 8px; letter-spacing: .12em; }
|
|
615
|
+
.official-usage-status span { width: 6px; height: 6px; border-radius: 50%; background: var(--signal-lime); box-shadow: 0 0 10px var(--signal-lime); }
|
|
616
|
+
.official-usage-config, .official-usage-results { padding: 18px; border-radius: 10px; }
|
|
617
|
+
.official-usage-section-head, .official-usage-result-header { display: flex; align-items: flex-start; justify-content: space-between; gap: 12px; padding-bottom: 14px; border-bottom: 1px solid var(--card-border); }
|
|
618
|
+
.official-usage-section-head span, .official-usage-result-header span { color: var(--subtle-text); font-family: var(--font-mono); font-size: 8px; letter-spacing: .14em; }
|
|
619
|
+
.official-usage-section-head h2, .official-usage-result-header h2 { margin-top: 4px; color: var(--page-text); font-family: var(--font-display); font-size: 16px; font-weight: 700; }
|
|
620
|
+
.official-usage-form-grid { display: grid; grid-template-columns: minmax(0, 1fr) minmax(180px, .35fr); gap: 16px; padding-top: 18px; }
|
|
621
|
+
.official-usage-field { display: flex; flex-direction: column; gap: 7px; min-width: 0; }
|
|
622
|
+
.official-usage-field-wide { grid-column: 1 / -1; }
|
|
623
|
+
.official-usage-field > span { display: flex; align-items: center; gap: 7px; color: var(--muted-text); font-family: var(--font-mono); font-size: 9px; letter-spacing: .08em; text-transform: uppercase; }
|
|
624
|
+
.official-usage-field > span svg { width: 14px; height: 14px; color: var(--signal-cyan); }
|
|
625
|
+
.official-usage-field input, .official-usage-field select, .official-usage-field textarea { width: 100%; min-height: 40px; padding: 9px 11px; color: var(--input-text); border: 1px solid var(--input-border); border-radius: 7px; outline: none; background: var(--input-bg); }
|
|
626
|
+
.official-usage-field textarea { resize: vertical; font-family: var(--font-mono); font-size: 12px; line-height: 1.5; }
|
|
627
|
+
.official-usage-field small { color: var(--subtle-text); font-size: 10px; }
|
|
628
|
+
.official-usage-actions { display: flex; align-items: center; flex-wrap: wrap; gap: 12px; padding-top: 17px; }
|
|
629
|
+
.official-usage-primary, .official-usage-refresh { display: inline-flex; align-items: center; gap: 7px; border: 1px solid color-mix(in srgb, var(--signal-cyan) 40%, var(--card-border)); border-radius: 7px; }
|
|
630
|
+
.official-usage-primary { padding: 10px 15px; color: #001014; background: linear-gradient(135deg, var(--signal-cyan-bright), var(--signal-cyan)); font-size: 12px; font-weight: 700; text-shadow: 0 1px 0 rgba(255,255,255,0.35); }
|
|
631
|
+
.official-usage-primary:disabled { cursor: not-allowed; opacity: .45; }
|
|
632
|
+
.official-usage-primary svg, .official-usage-refresh svg { width: 15px; height: 15px; }
|
|
633
|
+
.official-usage-saved { display: inline-flex; align-items: center; gap: 5px; color: var(--signal-lime); font-size: 11px; }
|
|
634
|
+
.official-usage-saved svg { width: 14px; height: 14px; }
|
|
635
|
+
.official-usage-error { display: flex; align-items: flex-start; gap: 7px; margin-top: 14px; padding: 10px 12px; color: var(--signal-red); border: 1px solid color-mix(in srgb, var(--signal-red) 25%, transparent); border-radius: 7px; background: color-mix(in srgb, var(--signal-red) 6%, transparent); font-size: 12px; }
|
|
636
|
+
.official-usage-error svg { width: 15px; height: 15px; flex: 0 0 auto; }
|
|
637
|
+
.official-usage-refresh { padding: 7px 10px; color: var(--page-text); background: var(--card-bg); font-size: 11px; border: 1px solid var(--card-border); }
|
|
638
|
+
.official-usage-refresh:hover { color: var(--signal-cyan); background: var(--accent-bg); border-color: color-mix(in srgb, var(--signal-cyan) 40%, var(--card-border)); }
|
|
639
|
+
.official-usage-cards { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 12px; padding-top: 16px; }
|
|
640
|
+
.official-usage-card { min-height: 112px; padding: 15px; border-radius: 8px; }
|
|
641
|
+
.official-usage-card span { display: block; color: var(--subtle-text); font-family: var(--font-mono); font-size: 8px; letter-spacing: .12em; text-transform: uppercase; }
|
|
642
|
+
.official-usage-card strong { display: block; margin-top: 10px; color: var(--page-text); font-family: var(--font-display); font-size: 25px; letter-spacing: -.04em; }
|
|
643
|
+
.official-usage-card small { color: var(--muted-text); font-size: 10px; }
|
|
644
|
+
.official-usage-progress { margin-top: 12px; padding: 16px; border-radius: 8px; }
|
|
645
|
+
.official-usage-progress-head, .official-usage-progress-foot { display: flex; align-items: center; justify-content: space-between; gap: 10px; color: var(--muted-text); font-family: var(--font-mono); font-size: 10px; }
|
|
646
|
+
.official-usage-progress-head strong { color: var(--signal-lime); font-size: 16px; }
|
|
647
|
+
.official-usage-progress-track { height: 12px; margin: 12px 0 9px; overflow: hidden; border: 1px solid color-mix(in srgb, var(--signal-lime) 22%, transparent); border-radius: 99px; background: color-mix(in srgb, var(--card-border) 65%, transparent); }
|
|
648
|
+
.official-usage-progress-track span { display: block; height: 100%; border-radius: inherit; background: linear-gradient(90deg, var(--signal-lime), var(--signal-cyan)); box-shadow: 0 0 18px color-mix(in srgb, var(--signal-lime) 38%, transparent); transition: width 450ms ease; }
|
|
649
|
+
.official-usage-loading, .official-usage-empty { display: flex; min-height: 240px; flex-direction: column; align-items: center; justify-content: center; gap: 10px; color: var(--muted-text); text-align: center; }
|
|
650
|
+
.official-usage-empty { padding: 30px; border-radius: 10px; }
|
|
651
|
+
.official-usage-empty svg { width: 34px; height: 34px; color: var(--signal-cyan); }
|
|
652
|
+
.official-usage-empty h2 { color: var(--page-text); font-size: 16px; font-weight: 700; }
|
|
653
|
+
.official-usage-empty p { max-width: 440px; color: var(--muted-text); font-size: 12px; }
|
|
654
|
+
@media (max-width: 820px) {
|
|
655
|
+
.official-usage-header { flex-direction: column; gap: 5px; }
|
|
656
|
+
.official-usage-form-grid { grid-template-columns: 1fr; }
|
|
657
|
+
.official-usage-field-wide { grid-column: auto; }
|
|
658
|
+
.official-usage-cards { grid-template-columns: 1fr; }
|
|
245
659
|
}
|