specrails-hub 1.58.4 → 1.59.0
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/client/dist/index.html +81 -38
- package/package.json +1 -1
- package/server/dist/hub-db.js +1 -1
- package/server/dist/hub-router.js +1 -1
package/client/dist/index.html
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
<head>
|
|
4
4
|
<meta charset="UTF-8" />
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
6
|
-
<title>
|
|
6
|
+
<title>Specrails</title>
|
|
7
7
|
<!--
|
|
8
8
|
Anti-FOUC: read the cached theme synchronously and apply it to <html>
|
|
9
9
|
BEFORE Vite's module bundle loads. Without this, every boot would flash
|
|
@@ -94,39 +94,68 @@
|
|
|
94
94
|
opacity: 0;
|
|
95
95
|
visibility: hidden;
|
|
96
96
|
}
|
|
97
|
-
.specrails-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
animation:
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
97
|
+
.specrails-splash__mark {
|
|
98
|
+
width: 136px;
|
|
99
|
+
height: 136px;
|
|
100
|
+
display: block;
|
|
101
|
+
overflow: visible;
|
|
102
|
+
}
|
|
103
|
+
.specrails-splash__mark .pill {
|
|
104
|
+
transform-box: fill-box;
|
|
105
|
+
transform-origin: center;
|
|
106
|
+
animation: splash-pill-travel 2.4s ease-in-out infinite;
|
|
107
|
+
}
|
|
108
|
+
.specrails-splash__mark .pill-body {
|
|
109
|
+
filter:
|
|
110
|
+
drop-shadow(0 0 14px var(--splash-primary))
|
|
111
|
+
drop-shadow(0 0 26px color-mix(in srgb, var(--splash-secondary) 55%, transparent));
|
|
112
|
+
}
|
|
113
|
+
.specrails-splash__mark .bar-1 {
|
|
114
|
+
animation: splash-bar 2.4s ease-in-out infinite;
|
|
115
|
+
}
|
|
116
|
+
.specrails-splash__mark .bar-2 {
|
|
117
|
+
animation: splash-bar 2.4s ease-in-out infinite;
|
|
118
|
+
animation-delay: 0.4s;
|
|
119
|
+
}
|
|
120
|
+
.specrails-splash__glow {
|
|
121
|
+
position: absolute;
|
|
122
|
+
inset: 0;
|
|
123
|
+
pointer-events: none;
|
|
124
|
+
background: radial-gradient(
|
|
125
|
+
ellipse 60% 45% at 50% 50%,
|
|
126
|
+
color-mix(in srgb, var(--splash-primary) 22%, transparent) 0%,
|
|
127
|
+
color-mix(in srgb, var(--splash-primary) 6%, transparent) 30%,
|
|
128
|
+
transparent 58%
|
|
129
|
+
);
|
|
130
|
+
animation: splash-glow 2.4s ease-in-out infinite;
|
|
131
|
+
}
|
|
132
|
+
/* The pill rides the rails: fades in from the left, rests in the
|
|
133
|
+
centre for ~0.5s, then shoots off to the right and fades out. */
|
|
134
|
+
@keyframes splash-pill-travel {
|
|
135
|
+
0% { transform: translateX(-1000px); opacity: 0; }
|
|
136
|
+
28% { transform: translateX(0); opacity: 1; }
|
|
137
|
+
48% { transform: translateX(0); opacity: 1;
|
|
138
|
+
animation-timing-function: cubic-bezier(0.6, 0, 0.85, 0.15); }
|
|
139
|
+
60% { transform: translateX(1100px); opacity: 0; }
|
|
140
|
+
100% { transform: translateX(1100px); opacity: 0; }
|
|
141
|
+
}
|
|
142
|
+
@keyframes splash-bar {
|
|
143
|
+
0%, 100% { opacity: 0.28; }
|
|
144
|
+
50% { opacity: 0.6; }
|
|
145
|
+
}
|
|
146
|
+
@keyframes splash-glow {
|
|
147
|
+
0%, 100% { opacity: 0.1; }
|
|
148
|
+
28%, 48% { opacity: 0.45; }
|
|
149
|
+
60% { opacity: 0.1; }
|
|
127
150
|
}
|
|
128
151
|
@media (prefers-reduced-motion: reduce) {
|
|
129
|
-
.specrails-
|
|
152
|
+
.specrails-splash__mark .pill,
|
|
153
|
+
.specrails-splash__mark .bar-1,
|
|
154
|
+
.specrails-splash__mark .bar-2,
|
|
155
|
+
.specrails-splash__glow {
|
|
156
|
+
animation: none;
|
|
157
|
+
}
|
|
158
|
+
.specrails-splash__mark .pill { opacity: 1; }
|
|
130
159
|
}
|
|
131
160
|
</style>
|
|
132
161
|
<script type="module" crossorigin src="/assets/index-B3FJB_DS.js"></script>
|
|
@@ -137,12 +166,26 @@
|
|
|
137
166
|
<link rel="stylesheet" crossorigin href="/assets/index-CrP8xKWG.css">
|
|
138
167
|
</head>
|
|
139
168
|
<body>
|
|
140
|
-
<div id="specrails-splash" aria-hidden="false" role="status" aria-label="Loading
|
|
141
|
-
<div class="specrails-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
169
|
+
<div id="specrails-splash" aria-hidden="false" role="status" aria-label="Loading Specrails">
|
|
170
|
+
<div class="specrails-splash__glow" aria-hidden="true"></div>
|
|
171
|
+
<svg
|
|
172
|
+
class="specrails-splash__mark"
|
|
173
|
+
viewBox="64 166 384 182"
|
|
174
|
+
role="img"
|
|
175
|
+
aria-label="Specrails"
|
|
176
|
+
>
|
|
177
|
+
<defs>
|
|
178
|
+
<linearGradient id="splash-pillfill" x1="0" y1="0" x2="1" y2="0">
|
|
179
|
+
<stop offset="0%" stop-color="var(--splash-primary)"></stop>
|
|
180
|
+
<stop offset="100%" stop-color="var(--splash-secondary)"></stop>
|
|
181
|
+
</linearGradient>
|
|
182
|
+
</defs>
|
|
183
|
+
<rect class="bar-1" x="80" y="182" width="352" height="18" rx="9" fill="var(--splash-muted)"></rect>
|
|
184
|
+
<rect class="bar-2" x="80" y="314" width="352" height="18" rx="9" fill="var(--splash-muted)"></rect>
|
|
185
|
+
<g class="pill">
|
|
186
|
+
<rect class="pill-body" x="80" y="220" width="352" height="72" rx="36" fill="url(#splash-pillfill)"></rect>
|
|
187
|
+
</g>
|
|
188
|
+
</svg>
|
|
146
189
|
</div>
|
|
147
190
|
<div id="root"></div>
|
|
148
191
|
</body>
|
package/package.json
CHANGED
package/server/dist/hub-db.js
CHANGED
|
@@ -147,7 +147,7 @@ function applyHubMigrations(db) {
|
|
|
147
147
|
// Allow-list enforced at the route layer (server/hub-router.ts) and the
|
|
148
148
|
// client (client/src/lib/themes.ts).
|
|
149
149
|
() => {
|
|
150
|
-
db.prepare('INSERT OR IGNORE INTO hub_settings (key, value) VALUES (?, ?)').run('ui_theme', '
|
|
150
|
+
db.prepare('INSERT OR IGNORE INTO hub_settings (key, value) VALUES (?, ?)').run('ui_theme', 'specrails');
|
|
151
151
|
},
|
|
152
152
|
// Migration 9: seed code-explorer hub settings — summary language + monthly
|
|
153
153
|
// budget cap. Enforced by FileSummaryManager + hub-router.
|
|
@@ -616,7 +616,7 @@ function createHubRouter(registry, broadcast) {
|
|
|
616
616
|
// Persisted under hub_settings key `ui_theme`. Default seeded by migration 8.
|
|
617
617
|
router.get('/theme', (_req, res) => {
|
|
618
618
|
const stored = (0, hub_db_1.getHubSetting)(registry.hubDb, 'ui_theme');
|
|
619
|
-
const theme = stored && THEME_ID_ALLOWLIST.has(stored) ? stored : '
|
|
619
|
+
const theme = stored && THEME_ID_ALLOWLIST.has(stored) ? stored : 'specrails';
|
|
620
620
|
res.json({ theme });
|
|
621
621
|
});
|
|
622
622
|
router.patch('/theme', (req, res) => {
|