mcp-pacemaker 2.0.1

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.
Files changed (47) hide show
  1. package/CHANGELOG.md +452 -0
  2. package/CONTRIBUTING.md +222 -0
  3. package/LICENSE +21 -0
  4. package/README.md +621 -0
  5. package/SECURITY.md +120 -0
  6. package/THIRD_PARTY_NOTICES.txt +366 -0
  7. package/autostart/windows/launcher.vbs +11 -0
  8. package/autostart/windows/register-task.ps1 +63 -0
  9. package/bin/cli.mjs +880 -0
  10. package/bin/config-checks.mjs +62 -0
  11. package/bin/logs.mjs +465 -0
  12. package/bin/mcp-bridge.mjs +2162 -0
  13. package/bin/pooling-batch-scheduler.mjs +129 -0
  14. package/bin/pooling-batches.mjs +270 -0
  15. package/bin/pooling-config.mjs +577 -0
  16. package/bin/pooling-editor.mjs +128 -0
  17. package/bin/pooling-errors.mjs +23 -0
  18. package/bin/pooling-execution.mjs +104 -0
  19. package/bin/pooling-files.mjs +541 -0
  20. package/bin/pooling-trace.mjs +218 -0
  21. package/bin/pooling-writer.mjs +242 -0
  22. package/bin/prewarm.mjs +233 -0
  23. package/bin/server-metrics.mjs +69 -0
  24. package/bin/service-control.mjs +124 -0
  25. package/bin/shared-sessions.mjs +1083 -0
  26. package/bin/top.mjs +115 -0
  27. package/bin/update-check.mjs +153 -0
  28. package/bin/windows/PoolingSecurityHelper.build.json +42 -0
  29. package/bin/windows/PoolingSecurityHelper.exe +0 -0
  30. package/bin/windows/src/AssemblyInfo.cs +11 -0
  31. package/bin/windows/src/PoolingNativeFiles.cs +678 -0
  32. package/bin/windows/src/PoolingSecurityHelper.cs +178 -0
  33. package/bin/windows/src/PoolingSecurityReader.cs +50 -0
  34. package/docs/shared-sessions.md +181 -0
  35. package/examples/servers.example.json +31 -0
  36. package/package.json +77 -0
  37. package/supervisor/bridge-child.mjs +14 -0
  38. package/supervisor/supervise.mjs +172 -0
  39. package/supervisor/supervise.ps1 +23 -0
  40. package/supervisor/supervise.sh +11 -0
  41. package/tools/windows-security-helper/README.md +238 -0
  42. package/tools/windows-security-helper/build.ps1 +262 -0
  43. package/ui/dist/THIRD_PARTY_NOTICES.txt +366 -0
  44. package/ui/dist/assets/index-CaLPg0c-.css +1 -0
  45. package/ui/dist/assets/index-CgPruWYi.js +9 -0
  46. package/ui/dist/index.html +14 -0
  47. package/ui/dist/third-party-manifest.json +597 -0
@@ -0,0 +1,262 @@
1
+ <#
2
+ .SYNOPSIS
3
+ Builds or verifies the packaged Windows security helper.
4
+ .DESCRIPTION
5
+ Uses installed Visual Studio Roslyn and .NET Framework 4.6.2 reference assemblies.
6
+ Builds twice in temporary directories and requires identical bytes. No tools are downloaded.
7
+ .PARAMETER Verify
8
+ Checks source, build script, toolchain, references, and rebuilt bytes against packaged metadata.
9
+ Does not replace packaged files.
10
+ .PARAMETER CompilerPath
11
+ Optional installed Roslyn csc.exe path. Otherwise discovers the newest Visual Studio with MSBuild.
12
+ .PARAMETER ReferenceAssemblyPath
13
+ Optional directory containing the .NET Framework 4.6.2 reference assemblies.
14
+ .OUTPUTS
15
+ Build or verification status and the executable SHA256.
16
+ .EXAMPLE
17
+ .\tools\windows-security-helper\build.ps1
18
+ .EXAMPLE
19
+ .\tools\windows-security-helper\build.ps1 -Verify
20
+ #>
21
+ [CmdletBinding()]
22
+ param(
23
+ [switch]$Verify,
24
+ [string]$CompilerPath,
25
+ [string]$ReferenceAssemblyPath
26
+ )
27
+
28
+ Set-StrictMode -Version Latest
29
+ $ErrorActionPreference = 'Stop'
30
+
31
+ function Get-SourceHash {
32
+ param([Parameter(Mandatory)][string]$Path)
33
+
34
+ $text = [System.IO.File]::ReadAllText($Path).Replace("`r`n", "`n")
35
+ $hash = [System.Security.Cryptography.SHA256]::Create()
36
+ try {
37
+ $bytes = [System.Text.Encoding]::UTF8.GetBytes($text)
38
+ return [System.BitConverter]::ToString($hash.ComputeHash($bytes)).Replace('-', '').ToLowerInvariant()
39
+ }
40
+ finally {
41
+ $hash.Dispose()
42
+ }
43
+ }
44
+
45
+ function Get-BinaryHash {
46
+ param([Parameter(Mandatory)][string]$Path)
47
+
48
+ $hash = [System.Security.Cryptography.SHA256]::Create()
49
+ $stream = $null
50
+ try {
51
+ $stream = [System.IO.File]::OpenRead($Path)
52
+ return [System.BitConverter]::ToString($hash.ComputeHash($stream)).Replace('-', '').ToLowerInvariant()
53
+ }
54
+ finally {
55
+ if ($stream) {
56
+ $stream.Dispose()
57
+ }
58
+
59
+ $hash.Dispose()
60
+ }
61
+ }
62
+
63
+ if ($env:OS -ne 'Windows_NT') {
64
+ throw 'Build on Windows with installed Visual Studio Roslyn and the .NET Framework 4.6.2 targeting pack.'
65
+ }
66
+
67
+ $root = [System.IO.Path]::GetFullPath((Join-Path $PSScriptRoot '..\..'))
68
+ $binaryDirectory = Join-Path $root 'bin\windows'
69
+ $sourceDirectory = Join-Path $binaryDirectory 'src'
70
+ $binaryName = 'PoolingSecurityHelper.exe'
71
+ $binaryPath = Join-Path $binaryDirectory $binaryName
72
+ $metadataPath = Join-Path $binaryDirectory 'PoolingSecurityHelper.build.json'
73
+ $sourceNames = @('AssemblyInfo.cs', 'PoolingSecurityReader.cs', 'PoolingSecurityHelper.cs', 'PoolingNativeFiles.cs')
74
+ $referenceNames = @('mscorlib.dll', 'System.dll', 'System.Core.dll', 'System.Web.Extensions.dll')
75
+
76
+ if (-not $CompilerPath) {
77
+ $vswhere = Join-Path ${env:ProgramFiles(x86)} 'Microsoft Visual Studio\Installer\vswhere.exe'
78
+ if (Test-Path -LiteralPath $vswhere) {
79
+ $installation = & $vswhere -latest -products '*' -requires Microsoft.Component.MSBuild -property installationPath
80
+ if ($LASTEXITCODE -ne 0) {
81
+ throw 'vswhere failed. Specify -CompilerPath with an installed Visual Studio Roslyn csc.exe.'
82
+ }
83
+
84
+ if ($installation) {
85
+ $CompilerPath = Join-Path $installation 'MSBuild\Current\Bin\Roslyn\csc.exe'
86
+ }
87
+ }
88
+
89
+ if (-not $CompilerPath) {
90
+ $CompilerPath = Join-Path $env:ProgramFiles 'Microsoft Visual Studio\2022\Enterprise\MSBuild\Current\Bin\Roslyn\csc.exe'
91
+ }
92
+ }
93
+
94
+ if (-not (Test-Path -LiteralPath $CompilerPath -PathType Leaf)) {
95
+ throw 'Roslyn csc.exe was not found. Install Visual Studio/Build Tools with MSBuild, or specify -CompilerPath. The Windows Framework csc.exe is too old.'
96
+ }
97
+
98
+ $CompilerPath = (Resolve-Path -LiteralPath $CompilerPath).Path
99
+ $compilerVersion = (& $CompilerPath /version | Out-String).Trim()
100
+ if ($LASTEXITCODE -ne 0) {
101
+ throw 'Roslyn csc.exe /version failed.'
102
+ }
103
+
104
+ $compilerHelp = @(& $CompilerPath /help)
105
+ $hasDeterministic = @($compilerHelp | Where-Object { $_.Trim().StartsWith('-deterministic ') }).Length -gt 0
106
+ $hasPathMap = @($compilerHelp | Where-Object { $_.Trim().StartsWith('-pathmap:') }).Length -gt 0
107
+ if ($LASTEXITCODE -ne 0 -or
108
+ -not $hasDeterministic -or
109
+ -not $hasPathMap) {
110
+ throw 'The installed compiler must support /deterministic and /pathmap.'
111
+ }
112
+
113
+ if (-not $ReferenceAssemblyPath) {
114
+ $ReferenceAssemblyPath = Join-Path ${env:ProgramFiles(x86)} 'Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.2'
115
+ }
116
+
117
+ foreach ($name in $referenceNames) {
118
+ if (-not (Test-Path -LiteralPath (Join-Path $ReferenceAssemblyPath $name) -PathType Leaf)) {
119
+ throw "Missing .NET Framework 4.6.2 reference assembly: $name. Install its targeting pack, or specify -ReferenceAssemblyPath."
120
+ }
121
+ }
122
+
123
+ $ReferenceAssemblyPath = (Resolve-Path -LiteralPath $ReferenceAssemblyPath).Path
124
+ $frameworkListPath = Join-Path $ReferenceAssemblyPath 'RedistList\FrameworkList.xml'
125
+ if (-not (Test-Path -LiteralPath $frameworkListPath -PathType Leaf)) {
126
+ throw 'The reference directory must contain the .NET Framework 4.6.2 targeting pack, including RedistList\FrameworkList.xml.'
127
+ }
128
+
129
+ $frameworkList = [xml](Get-Content -LiteralPath $frameworkListPath -Raw)
130
+ if ($frameworkList.FileList.Name -cne '.NET Framework 4.6.2') {
131
+ throw 'The reference directory is not the .NET Framework 4.6.2 targeting pack.'
132
+ }
133
+
134
+ $compilerArguments = @(
135
+ '/nologo',
136
+ '/noconfig',
137
+ '/nostdlib+',
138
+ '/target:exe',
139
+ '/platform:anycpu',
140
+ '/langversion:7.3',
141
+ '/optimize+',
142
+ '/debug-',
143
+ '/deterministic+',
144
+ '/checked-',
145
+ '/unsafe-',
146
+ '/warn:4',
147
+ '/warnaserror+',
148
+ '/utf8output'
149
+ )
150
+ $sourceHashes = [ordered]@{}
151
+ foreach ($name in $sourceNames) {
152
+ $sourceHashes[$name] = Get-SourceHash -Path (Join-Path $sourceDirectory $name)
153
+ }
154
+
155
+ $referenceHashes = [ordered]@{}
156
+ foreach ($name in $referenceNames) {
157
+ $referenceHashes[$name] = Get-BinaryHash -Path (Join-Path $ReferenceAssemblyPath $name)
158
+ }
159
+
160
+ $inputs = [ordered]@{
161
+ targetFramework = '.NETFramework,Version=v4.6.2'
162
+ platform = 'AnyCPU'
163
+ compilerVersion = $compilerVersion
164
+ compilerSha256 = Get-BinaryHash -Path $CompilerPath
165
+ compilerArguments = $compilerArguments
166
+ pathMap = '/_/mcp-pacemaker/windows-security-helper'
167
+ sourceEncoding = 'UTF-8 without BOM, LF line endings'
168
+ sourceSha256 = $sourceHashes
169
+ buildScriptSha256 = Get-SourceHash -Path $PSCommandPath
170
+ referenceSha256 = $referenceHashes
171
+ }
172
+ $inputsJson = $inputs | ConvertTo-Json -Depth 5 -Compress
173
+ $expectedMetadata = $null
174
+ if ($Verify) {
175
+ if (-not (Test-Path -LiteralPath $metadataPath -PathType Leaf)) {
176
+ throw 'Packaged helper metadata is missing. Build and review the helper before verification.'
177
+ }
178
+
179
+ $expectedMetadata = Get-Content -LiteralPath $metadataPath -Raw | ConvertFrom-Json
180
+ if ($expectedMetadata.schemaVersion -ne 1 -or
181
+ $expectedMetadata.binary -cne $binaryName) {
182
+ throw 'The packaged helper metadata schema or executable name is invalid.'
183
+ }
184
+
185
+ $expectedInputsJson = $expectedMetadata.inputs | ConvertTo-Json -Depth 5 -Compress
186
+ if ($inputsJson -cne $expectedInputsJson) {
187
+ throw "Source/build inputs differ from metadata. Expected Roslyn $($expectedMetadata.inputs.compilerVersion) and the recorded compiler/reference hashes. Current Roslyn: $compilerVersion. Use the recorded toolchain, or explicitly rebuild and review changed assets."
188
+ }
189
+
190
+ if ((Get-BinaryHash -Path $binaryPath) -cne $expectedMetadata.binarySha256) {
191
+ throw 'The packaged helper SHA256 does not match its metadata.'
192
+ }
193
+ }
194
+
195
+ $temporaryRoot = Join-Path ([System.IO.Path]::GetTempPath()) ('mcp-security-build-' + [Guid]::NewGuid().ToString('N'))
196
+ $createdFiles = [System.Collections.Generic.List[string]]::new()
197
+ $createdDirectories = [System.Collections.Generic.List[string]]::new()
198
+ $outputs = [System.Collections.Generic.List[string]]::new()
199
+ try {
200
+ [System.IO.Directory]::CreateDirectory($temporaryRoot) | Out-Null
201
+ $createdDirectories.Add($temporaryRoot)
202
+ foreach ($pass in @('first', 'second')) {
203
+ $passDirectory = Join-Path $temporaryRoot $pass
204
+ [System.IO.Directory]::CreateDirectory($passDirectory) | Out-Null
205
+ $createdDirectories.Add($passDirectory)
206
+ $sourcePaths = foreach ($name in $sourceNames) {
207
+ $sourcePath = Join-Path $passDirectory $name
208
+ $text = [System.IO.File]::ReadAllText((Join-Path $sourceDirectory $name)).Replace("`r`n", "`n")
209
+ $createdFiles.Add($sourcePath)
210
+ [System.IO.File]::WriteAllText($sourcePath, $text, [System.Text.UTF8Encoding]::new($false))
211
+ $sourcePath
212
+ }
213
+
214
+ $output = Join-Path $passDirectory $binaryName
215
+ $createdFiles.Add($output)
216
+ $arguments = $compilerArguments + @("/out:$output", "/pathmap:$passDirectory=$($inputs.pathMap)")
217
+ foreach ($name in $referenceNames) {
218
+ $arguments += '/reference:' + (Join-Path $ReferenceAssemblyPath $name)
219
+ }
220
+
221
+ & $CompilerPath @arguments @sourcePaths
222
+ if ($LASTEXITCODE -ne 0) {
223
+ throw "Windows security helper compilation failed on pass $pass."
224
+ }
225
+
226
+ $outputs.Add($output)
227
+ }
228
+
229
+ $binaryHash = Get-BinaryHash -Path $outputs[0]
230
+ if ($binaryHash -cne (Get-BinaryHash -Path $outputs[1])) {
231
+ throw 'Two builds produced different bytes. No packaged files were updated.'
232
+ }
233
+
234
+ if ($Verify) {
235
+ if ($binaryHash -cne $expectedMetadata.binarySha256) {
236
+ throw 'The deterministic rebuild does not match the packaged helper. No packaged files were updated.'
237
+ }
238
+
239
+ Write-Output "Verified source, toolchain and byte-for-byte rebuild: SHA256 $binaryHash"
240
+ }
241
+ else {
242
+ $metadata = [ordered]@{
243
+ schemaVersion = 1
244
+ binary = $binaryName
245
+ binarySha256 = $binaryHash
246
+ inputs = $inputs
247
+ }
248
+ $metadataJson = ($metadata | ConvertTo-Json -Depth 6).Replace("`r`n", "`n") + "`n"
249
+ [System.IO.File]::Copy($outputs[0], $binaryPath, $true)
250
+ [System.IO.File]::WriteAllText($metadataPath, $metadataJson, [System.Text.UTF8Encoding]::new($false))
251
+ Write-Output "Built two matching executables with Roslyn ${compilerVersion}: SHA256 $binaryHash"
252
+ }
253
+ }
254
+ finally {
255
+ foreach ($path in $createdFiles) {
256
+ Remove-Item -LiteralPath $path -Force -ErrorAction SilentlyContinue
257
+ }
258
+
259
+ for ($index = $createdDirectories.Count - 1; $index -ge 0; $index--) {
260
+ [System.IO.Directory]::Delete($createdDirectories[$index])
261
+ }
262
+ }
@@ -0,0 +1,366 @@
1
+ MCP Pacemaker - third-party notices
2
+
3
+ Dashboard entries come from retained Rollup modules and observed generated CSS.
4
+ Runtime supplements bind upstream license text to reviewed installed producer versions.
5
+ ui/dist/third-party-manifest.json records module and artifact hashes.
6
+ The project itself remains under its separate MIT LICENSE.
7
+ This inventory is technical attribution evidence, not a legal compliance certification.
8
+
9
+ CLI dependencies are installed separately by npm, not copied into this UI bundle.
10
+ Attribution supplied by those packages remains in their installed package directories.
11
+ This UI inventory does not audit every separately resolved CLI dependency.
12
+ Those dependencies are not represented as bundled UI code in this notice.
13
+
14
+ Bundled dashboard code
15
+
16
+ ==============================================================================
17
+ lucide-react@0.462.0
18
+ Declared license: ISC
19
+
20
+ --- LICENSE ---
21
+ ISC License
22
+
23
+ Copyright (c) for portions of Lucide are held by Cole Bemis 2013-2022 as part of Feather (MIT). All other copyright (c) for Lucide are held by Lucide Contributors 2022.
24
+
25
+ Permission to use, copy, modify, and/or distribute this software for any
26
+ purpose with or without fee is hereby granted, provided that the above
27
+ copyright notice and this permission notice appear in all copies.
28
+
29
+ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
30
+ WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
31
+ MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
32
+ ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
33
+ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
34
+ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
35
+ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
36
+
37
+ --- upstream/feather-LICENSE.txt ---
38
+ Source: https://raw.githubusercontent.com/feathericons/feather/1b002399e8758fb2bccea4d07312dc9e0f43dcb8/LICENSE
39
+ Lucide's LICENSE identifies Feather MIT portions. Its bundled terminal icon retains the polyline and line in this upstream revision; this is a license source, not a claim that the Feather npm package is installed.
40
+
41
+ The MIT License (MIT)
42
+
43
+ Copyright (c) 2013-2023 Cole Bemis
44
+
45
+ Permission is hereby granted, free of charge, to any person obtaining a copy
46
+ of this software and associated documentation files (the "Software"), to deal
47
+ in the Software without restriction, including without limitation the rights
48
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
49
+ copies of the Software, and to permit persons to whom the Software is
50
+ furnished to do so, subject to the following conditions:
51
+
52
+ The above copyright notice and this permission notice shall be included in all
53
+ copies or substantial portions of the Software.
54
+
55
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
56
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
57
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
58
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
59
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
60
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
61
+ SOFTWARE.
62
+
63
+ --- Notices retained from contributing source files ---
64
+ /**
65
+ * @license lucide-react v0.462.0 - ISC
66
+ *
67
+ * This source code is licensed under the ISC license.
68
+ * See the LICENSE file in the root directory of this source tree.
69
+ */
70
+
71
+ ==============================================================================
72
+ react@18.3.1
73
+ Declared license: MIT
74
+
75
+ --- LICENSE ---
76
+ MIT License
77
+
78
+ Copyright (c) Facebook, Inc. and its affiliates.
79
+
80
+ Permission is hereby granted, free of charge, to any person obtaining a copy
81
+ of this software and associated documentation files (the "Software"), to deal
82
+ in the Software without restriction, including without limitation the rights
83
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
84
+ copies of the Software, and to permit persons to whom the Software is
85
+ furnished to do so, subject to the following conditions:
86
+
87
+ The above copyright notice and this permission notice shall be included in all
88
+ copies or substantial portions of the Software.
89
+
90
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
91
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
92
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
93
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
94
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
95
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
96
+ SOFTWARE.
97
+
98
+ --- Notices retained from contributing source files ---
99
+ /**
100
+ * @license React
101
+ * react-jsx-runtime.production.min.js
102
+ *
103
+ * Copyright (c) Facebook, Inc. and its affiliates.
104
+ *
105
+ * This source code is licensed under the MIT license found in the
106
+ * LICENSE file in the root directory of this source tree.
107
+ */
108
+ /**
109
+ * @license React
110
+ * react.production.min.js
111
+ *
112
+ * Copyright (c) Facebook, Inc. and its affiliates.
113
+ *
114
+ * This source code is licensed under the MIT license found in the
115
+ * LICENSE file in the root directory of this source tree.
116
+ */
117
+
118
+ ==============================================================================
119
+ react-dom@18.3.1
120
+ Declared license: MIT
121
+
122
+ --- LICENSE ---
123
+ MIT License
124
+
125
+ Copyright (c) Facebook, Inc. and its affiliates.
126
+
127
+ Permission is hereby granted, free of charge, to any person obtaining a copy
128
+ of this software and associated documentation files (the "Software"), to deal
129
+ in the Software without restriction, including without limitation the rights
130
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
131
+ copies of the Software, and to permit persons to whom the Software is
132
+ furnished to do so, subject to the following conditions:
133
+
134
+ The above copyright notice and this permission notice shall be included in all
135
+ copies or substantial portions of the Software.
136
+
137
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
138
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
139
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
140
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
141
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
142
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
143
+ SOFTWARE.
144
+
145
+ --- Notices retained from contributing source files ---
146
+ /**
147
+ * @license React
148
+ * react-dom.production.min.js
149
+ *
150
+ * Copyright (c) Facebook, Inc. and its affiliates.
151
+ *
152
+ * This source code is licensed under the MIT license found in the
153
+ * LICENSE file in the root directory of this source tree.
154
+ */
155
+
156
+ ==============================================================================
157
+ scheduler@0.23.2
158
+ Declared license: MIT
159
+
160
+ --- LICENSE ---
161
+ MIT License
162
+
163
+ Copyright (c) Facebook, Inc. and its affiliates.
164
+
165
+ Permission is hereby granted, free of charge, to any person obtaining a copy
166
+ of this software and associated documentation files (the "Software"), to deal
167
+ in the Software without restriction, including without limitation the rights
168
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
169
+ copies of the Software, and to permit persons to whom the Software is
170
+ furnished to do so, subject to the following conditions:
171
+
172
+ The above copyright notice and this permission notice shall be included in all
173
+ copies or substantial portions of the Software.
174
+
175
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
176
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
177
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
178
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
179
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
180
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
181
+ SOFTWARE.
182
+
183
+ --- Notices retained from contributing source files ---
184
+ /**
185
+ * @license React
186
+ * scheduler.production.min.js
187
+ *
188
+ * Copyright (c) Facebook, Inc. and its affiliates.
189
+ *
190
+ * This source code is licensed under the MIT license found in the
191
+ * LICENSE file in the root directory of this source tree.
192
+ */
193
+
194
+ ==============================================================================
195
+ tailwindcss@3.4.19
196
+ Declared license: MIT
197
+
198
+ --- LICENSE ---
199
+ MIT License
200
+
201
+ Copyright (c) Tailwind Labs, Inc.
202
+
203
+ Permission is hereby granted, free of charge, to any person obtaining a copy
204
+ of this software and associated documentation files (the "Software"), to deal
205
+ in the Software without restriction, including without limitation the rights
206
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
207
+ copies of the Software, and to permit persons to whom the Software is
208
+ furnished to do so, subject to the following conditions:
209
+
210
+ The above copyright notice and this permission notice shall be included in all
211
+ copies or substantial portions of the Software.
212
+
213
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
214
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
215
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
216
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
217
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
218
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
219
+ SOFTWARE.
220
+
221
+ --- lib/css/LICENSE ---
222
+ MIT License
223
+
224
+ Copyright (c) Nicolas Gallagher
225
+ Copyright (c) Jonathan Neal
226
+ Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)
227
+ Copyright (c) Adam Wathan
228
+ Copyright (c) Jonathan Reinink
229
+
230
+ Permission is hereby granted, free of charge, to any person obtaining a copy
231
+ of this software and associated documentation files (the "Software"), to deal
232
+ in the Software without restriction, including without limitation the rights
233
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
234
+ copies of the Software, and to permit persons to whom the Software is
235
+ furnished to do so, subject to the following conditions:
236
+
237
+ The above copyright notice and this permission notice shall be included in all
238
+ copies or substantial portions of the Software.
239
+
240
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
241
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
242
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
243
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
244
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
245
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
246
+ SOFTWARE.
247
+
248
+ ==============================================================================
249
+ vite@7.3.6
250
+ Declared license: MIT
251
+
252
+ --- LICENSE.md: # Vite core license ---
253
+ # Vite core license
254
+ Vite is released under the MIT license:
255
+
256
+ MIT License
257
+
258
+ Copyright (c) 2019-present, VoidZero Inc. and Vite contributors
259
+
260
+ Permission is hereby granted, free of charge, to any person obtaining a copy
261
+ of this software and associated documentation files (the "Software"), to deal
262
+ in the Software without restriction, including without limitation the rights
263
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
264
+ copies of the Software, and to permit persons to whom the Software is
265
+ furnished to do so, subject to the following conditions:
266
+
267
+ The above copyright notice and this permission notice shall be included in all
268
+ copies or substantial portions of the Software.
269
+
270
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
271
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
272
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
273
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
274
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
275
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
276
+ SOFTWARE.
277
+
278
+ --- LICENSE.md: ## @rollup/plugin-alias, @rollup/plugin-commonjs, @rollup/plugin-dynamic-import-vars, @rollup/pluginutils ---
279
+ ## @rollup/plugin-alias, @rollup/plugin-commonjs, @rollup/plugin-dynamic-import-vars, @rollup/pluginutils
280
+ License: MIT
281
+ By: Johannes Stein
282
+ Repository: https://github.com/rollup/plugins
283
+
284
+ License: MIT
285
+ By: Rich Harris
286
+ Repository: https://github.com/rollup/plugins
287
+
288
+ License: MIT
289
+ By: LarsDenBakker
290
+ Repository: https://github.com/rollup/plugins
291
+
292
+ License: MIT
293
+ By: Rich Harris
294
+ Repository: https://github.com/rollup/plugins
295
+
296
+ > The MIT License (MIT)
297
+ >
298
+ > Copyright (c) 2019 RollupJS Plugin Contributors (https://github.com/rollup/plugins/graphs/contributors)
299
+ >
300
+ > Permission is hereby granted, free of charge, to any person obtaining a copy
301
+ > of this software and associated documentation files (the "Software"), to deal
302
+ > in the Software without restriction, including without limitation the rights
303
+ > to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
304
+ > copies of the Software, and to permit persons to whom the Software is
305
+ > furnished to do so, subject to the following conditions:
306
+ >
307
+ > The above copyright notice and this permission notice shall be included in
308
+ > all copies or substantial portions of the Software.
309
+ >
310
+ > THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
311
+ > IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
312
+ > FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
313
+ > AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
314
+ > LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
315
+ > OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
316
+ > THE SOFTWARE.
317
+
318
+ ---------------------------------------
319
+
320
+ Separately installed runtime supplements (not UI-bundled)
321
+
322
+ ==============================================================================
323
+ yoga-layout@3.2.1
324
+ Declared license: MIT
325
+
326
+ --- upstream/yoga-LICENSE.txt ---
327
+ Source: https://raw.githubusercontent.com/facebook/yoga/042f5013152eb81c1552dec945b88f7b95ca350f/LICENSE
328
+ Supplement for the separately npm-installed runtime package, whose published source refers to this upstream LICENSE. This package is not bundled into the dashboard.
329
+
330
+ MIT License
331
+
332
+ Copyright (c) Facebook, Inc. and its affiliates.
333
+
334
+ Permission is hereby granted, free of charge, to any person obtaining a copy
335
+ of this software and associated documentation files (the "Software"), to deal
336
+ in the Software without restriction, including without limitation the rights
337
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
338
+ copies of the Software, and to permit persons to whom the Software is
339
+ furnished to do so, subject to the following conditions:
340
+
341
+ The above copyright notice and this permission notice shall be included in all
342
+ copies or substantial portions of the Software.
343
+
344
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
345
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
346
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
347
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
348
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
349
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
350
+ SOFTWARE.
351
+
352
+ --- Notices retained from contributing source files ---
353
+ /**
354
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
355
+ *
356
+ * This source code is licensed under the MIT license found in the
357
+ * LICENSE file in the root directory of this source tree.
358
+ *
359
+ * @format
360
+ */
361
+ /**
362
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
363
+ *
364
+ * This source code is licensed under the MIT license found in the
365
+ * LICENSE file in the root directory of this source tree.
366
+ */
@@ -0,0 +1 @@
1
+ *,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}.\!visible{visibility:visible!important}.visible{visibility:visible}.sticky{position:sticky}.top-0{top:0}.z-10{z-index:10}.col-span-full{grid-column:1 / -1}.m-0{margin:0}.mx-auto{margin-left:auto;margin-right:auto}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.mb-4{margin-bottom:1rem}.ml-2{margin-left:.5rem}.ml-3{margin-left:.75rem}.ml-auto{margin-left:auto}.mt-1{margin-top:.25rem}.mt-2{margin-top:.5rem}.mt-3{margin-top:.75rem}.mt-4{margin-top:1rem}.flex{display:flex}.table{display:table}.grid{display:grid}.h-2\.5{height:.625rem}.max-h-52{max-height:13rem}.min-h-screen{min-height:100vh}.w-2\.5{width:.625rem}.w-40{width:10rem}.w-full{width:100%}.min-w-0{min-width:0px}.min-w-\[260px\]{min-width:260px}.max-w-\[1160px\]{max-width:1160px}.max-w-\[1400px\]{max-width:1400px}.max-w-\[900px\]{max-width:900px}.flex-1{flex:1 1 0%}.shrink-0{flex-shrink:0}@keyframes spin{to{transform:rotate(360deg)}}.animate-spin{animation:spin 1s linear infinite}.grid-cols-\[14px_160px_1fr\]{grid-template-columns:14px 160px 1fr}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-start{align-items:flex-start}.items-center{align-items:center}.items-baseline{align-items:baseline}.justify-between{justify-content:space-between}.gap-1{gap:.25rem}.gap-1\.5{gap:.375rem}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.gap-\[18px\]{gap:18px}.overflow-auto{overflow:auto}.overflow-x-auto{overflow-x:auto}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.rounded{border-radius:.25rem}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-md{border-radius:.375rem}.rounded-xl{border-radius:.75rem}.border{border-width:1px}.border-b{border-bottom-width:1px}.border-t{border-top-width:1px}.border-accent{--tw-border-opacity: 1;border-color:rgb(110 168 254 / var(--tw-border-opacity, 1))}.border-amber{--tw-border-opacity: 1;border-color:rgb(240 180 41 / var(--tw-border-opacity, 1))}.border-amber\/50{border-color:#f0b42980}.border-danger{--tw-border-opacity: 1;border-color:rgb(248 113 113 / var(--tw-border-opacity, 1))}.border-danger\/50{border-color:#f8717180}.border-line{--tw-border-opacity: 1;border-color:rgb(42 47 58 / var(--tw-border-opacity, 1))}.border-ok{--tw-border-opacity: 1;border-color:rgb(52 211 153 / var(--tw-border-opacity, 1))}.bg-accent\/10{background-color:#6ea8fe1a}.bg-amber{--tw-bg-opacity: 1;background-color:rgb(240 180 41 / var(--tw-bg-opacity, 1))}.bg-amber\/5{background-color:#f0b4290d}.bg-danger{--tw-bg-opacity: 1;background-color:rgb(248 113 113 / var(--tw-bg-opacity, 1))}.bg-danger\/5{background-color:#f871710d}.bg-ok{--tw-bg-opacity: 1;background-color:rgb(52 211 153 / var(--tw-bg-opacity, 1))}.bg-panel{--tw-bg-opacity: 1;background-color:rgb(23 26 35 / var(--tw-bg-opacity, 1))}.bg-panel2{--tw-bg-opacity: 1;background-color:rgb(30 34 45 / var(--tw-bg-opacity, 1))}.p-16{padding:4rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-6{padding:1.5rem}.p-8{padding:2rem}.px-1\.5{padding-left:.375rem;padding-right:.375rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-2\.5{padding-left:.625rem;padding-right:.625rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-5{padding-left:1.25rem;padding-right:1.25rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.py-0\.5{padding-top:.125rem;padding-bottom:.125rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-3\.5{padding-top:.875rem;padding-bottom:.875rem}.pb-3{padding-bottom:.75rem}.pt-3{padding-top:.75rem}.text-left{text-align:left}.text-center{text-align:center}.align-top{vertical-align:top}.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.text-\[11px\]{font-size:11px}.text-\[13px\]{font-size:13px}.text-base{font-size:1rem;line-height:1.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-medium{font-weight:500}.font-normal{font-weight:400}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.capitalize{text-transform:capitalize}.leading-relaxed{line-height:1.625}.text-accent{--tw-text-opacity: 1;color:rgb(110 168 254 / var(--tw-text-opacity, 1))}.text-amber{--tw-text-opacity: 1;color:rgb(240 180 41 / var(--tw-text-opacity, 1))}.text-danger{--tw-text-opacity: 1;color:rgb(248 113 113 / var(--tw-text-opacity, 1))}.text-fg{--tw-text-opacity: 1;color:rgb(230 232 238 / var(--tw-text-opacity, 1))}.text-muted{--tw-text-opacity: 1;color:rgb(154 163 178 / var(--tw-text-opacity, 1))}.text-muted\/40{color:#9aa3b266}.text-muted\/60{color:#9aa3b299}.text-ok{--tw-text-opacity: 1;color:rgb(52 211 153 / var(--tw-text-opacity, 1))}.shadow-\[0_0_6px\]{--tw-shadow: 0 0 6px;--tw-shadow-colored: 0 0 6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-ok{--tw-shadow-color: #34d399;--tw-shadow: var(--tw-shadow-colored)}.outline-none{outline:2px solid transparent;outline-offset:2px}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.\[grid-template-columns\:repeat\(auto-fit\,minmax\(320px\,1fr\)\)\]{grid-template-columns:repeat(auto-fit,minmax(320px,1fr))}:root{color-scheme:dark}body{margin:0;background:#0f1117;color:#e6e8ee;font:14px/1.5 ui-sans-serif,system-ui,Segoe UI,Roboto,sans-serif}.hover\:border-accent:hover{--tw-border-opacity: 1;border-color:rgb(110 168 254 / var(--tw-border-opacity, 1))}.hover\:bg-accent\/20:hover{background-color:#6ea8fe33}.hover\:text-fg:hover{--tw-text-opacity: 1;color:rgb(230 232 238 / var(--tw-text-opacity, 1))}.focus\:border-accent:focus{--tw-border-opacity: 1;border-color:rgb(110 168 254 / var(--tw-border-opacity, 1))}.disabled\:cursor-default:disabled{cursor:default}.disabled\:opacity-40:disabled{opacity:.4}