-
Notifications
You must be signed in to change notification settings - Fork 31
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
0 parents
commit a4a112b
Showing
170 changed files
with
451 additions
and
0 deletions.
There are no files selected for viewing
Empty file.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,27 @@ | ||
export class DpiWatcher { | ||
static getDpi() { | ||
return window.devicePixelRatio; | ||
} | ||
static start(callback) { | ||
//console.info(`Starting DPI watcher with callback ${callback._id}...`); | ||
DpiWatcher.lastDpi = window.devicePixelRatio; | ||
DpiWatcher.timerId = window.setInterval(DpiWatcher.update, 1000); | ||
DpiWatcher.callback = callback; | ||
return DpiWatcher.lastDpi; | ||
} | ||
static stop() { | ||
//console.info(`Stopping DPI watcher with callback ${DpiWatcher.callback._id}...`); | ||
window.clearInterval(DpiWatcher.timerId); | ||
DpiWatcher.callback = undefined; | ||
} | ||
static update() { | ||
if (!DpiWatcher.callback) | ||
return; | ||
const currentDpi = window.devicePixelRatio; | ||
const lastDpi = DpiWatcher.lastDpi; | ||
DpiWatcher.lastDpi = currentDpi; | ||
if (Math.abs(lastDpi - currentDpi) > 0.001) { | ||
DpiWatcher.callback.invokeMethod('Invoke', lastDpi, currentDpi); | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,173 @@ | ||
export class SKHtmlCanvas { | ||
constructor(useGL, element, callback) { | ||
this.renderLoopEnabled = false; | ||
this.renderLoopRequest = 0; | ||
this.htmlCanvas = element; | ||
this.renderFrameCallback = callback; | ||
if (useGL) { | ||
const ctx = SKHtmlCanvas.createWebGLContext(this.htmlCanvas); | ||
if (!ctx) { | ||
console.error(`Failed to create WebGL context: err ${ctx}`); | ||
return null; | ||
} | ||
// make current | ||
const GL = SKHtmlCanvas.getGL(); | ||
GL.makeContextCurrent(ctx); | ||
// read values | ||
const GLctx = SKHtmlCanvas.getGLctx(); | ||
const fbo = GLctx.getParameter(GLctx.FRAMEBUFFER_BINDING); | ||
this.glInfo = { | ||
context: ctx, | ||
fboId: fbo ? fbo.id : 0, | ||
stencil: GLctx.getParameter(GLctx.STENCIL_BITS), | ||
sample: 0, | ||
depth: GLctx.getParameter(GLctx.DEPTH_BITS), | ||
}; | ||
} | ||
} | ||
static initGL(element, elementId, callback) { | ||
var view = SKHtmlCanvas.init(true, element, elementId, callback); | ||
if (!view || !view.glInfo) | ||
return null; | ||
return view.glInfo; | ||
} | ||
static initRaster(element, elementId, callback) { | ||
var view = SKHtmlCanvas.init(false, element, elementId, callback); | ||
if (!view) | ||
return false; | ||
return true; | ||
} | ||
static init(useGL, element, elementId, callback) { | ||
var htmlCanvas = element; | ||
if (!htmlCanvas) { | ||
console.error(`No canvas element was provided.`); | ||
return null; | ||
} | ||
if (!SKHtmlCanvas.elements) | ||
SKHtmlCanvas.elements = new Map(); | ||
SKHtmlCanvas.elements[elementId] = element; | ||
const view = new SKHtmlCanvas(useGL, element, callback); | ||
htmlCanvas.SKHtmlCanvas = view; | ||
return view; | ||
} | ||
static deinit(elementId) { | ||
if (!elementId) | ||
return; | ||
const element = SKHtmlCanvas.elements[elementId]; | ||
SKHtmlCanvas.elements.delete(elementId); | ||
const htmlCanvas = element; | ||
if (!htmlCanvas || !htmlCanvas.SKHtmlCanvas) | ||
return; | ||
htmlCanvas.SKHtmlCanvas.deinit(); | ||
htmlCanvas.SKHtmlCanvas = undefined; | ||
} | ||
static requestAnimationFrame(element, renderLoop, width, height) { | ||
const htmlCanvas = element; | ||
if (!htmlCanvas || !htmlCanvas.SKHtmlCanvas) | ||
return; | ||
htmlCanvas.SKHtmlCanvas.requestAnimationFrame(renderLoop, width, height); | ||
} | ||
static setEnableRenderLoop(element, enable) { | ||
const htmlCanvas = element; | ||
if (!htmlCanvas || !htmlCanvas.SKHtmlCanvas) | ||
return; | ||
htmlCanvas.SKHtmlCanvas.setEnableRenderLoop(enable); | ||
} | ||
static putImageData(element, pData, width, height) { | ||
const htmlCanvas = element; | ||
if (!htmlCanvas || !htmlCanvas.SKHtmlCanvas) | ||
return; | ||
htmlCanvas.SKHtmlCanvas.putImageData(pData, width, height); | ||
} | ||
deinit() { | ||
this.setEnableRenderLoop(false); | ||
} | ||
requestAnimationFrame(renderLoop, width, height) { | ||
// optionally update the render loop | ||
if (renderLoop !== undefined && this.renderLoopEnabled !== renderLoop) | ||
this.setEnableRenderLoop(renderLoop); | ||
// make sure the canvas is scaled correctly for the drawing | ||
if (width && height) { | ||
this.htmlCanvas.width = width; | ||
this.htmlCanvas.height = height; | ||
} | ||
// skip because we have a render loop | ||
if (this.renderLoopRequest !== 0) | ||
return; | ||
// add the draw to the next frame | ||
this.renderLoopRequest = window.requestAnimationFrame(() => { | ||
if (this.glInfo) { | ||
// make current | ||
const GL = SKHtmlCanvas.getGL(); | ||
GL.makeContextCurrent(this.glInfo.context); | ||
} | ||
this.renderFrameCallback.invokeMethod('Invoke'); | ||
this.renderLoopRequest = 0; | ||
// we may want to draw the next frame | ||
if (this.renderLoopEnabled) | ||
this.requestAnimationFrame(); | ||
}); | ||
} | ||
setEnableRenderLoop(enable) { | ||
this.renderLoopEnabled = enable; | ||
// either start the new frame or cancel the existing one | ||
if (enable) { | ||
//console.info(`Enabling render loop with callback ${this.renderFrameCallback._id}...`); | ||
this.requestAnimationFrame(); | ||
} | ||
else if (this.renderLoopRequest !== 0) { | ||
window.cancelAnimationFrame(this.renderLoopRequest); | ||
this.renderLoopRequest = 0; | ||
} | ||
} | ||
putImageData(pData, width, height) { | ||
if (this.glInfo || !pData || width <= 0 || width <= 0) | ||
return false; | ||
var ctx = this.htmlCanvas.getContext('2d'); | ||
if (!ctx) { | ||
console.error(`Failed to obtain 2D canvas context.`); | ||
return false; | ||
} | ||
// make sure the canvas is scaled correctly for the drawing | ||
this.htmlCanvas.width = width; | ||
this.htmlCanvas.height = height; | ||
// set the canvas to be the bytes | ||
var buffer = new Uint8ClampedArray(Module.HEAPU8.buffer, pData, width * height * 4); | ||
var imageData = new ImageData(buffer, width, height); | ||
ctx.putImageData(imageData, 0, 0); | ||
return true; | ||
} | ||
static createWebGLContext(htmlCanvas) { | ||
const contextAttributes = { | ||
alpha: 1, | ||
depth: 1, | ||
stencil: 8, | ||
antialias: 1, | ||
premultipliedAlpha: 1, | ||
preserveDrawingBuffer: 0, | ||
preferLowPowerToHighPerformance: 0, | ||
failIfMajorPerformanceCaveat: 0, | ||
majorVersion: 2, | ||
minorVersion: 0, | ||
enableExtensionsByDefault: 1, | ||
explicitSwapControl: 0, | ||
renderViaOffscreenBackBuffer: 0, | ||
}; | ||
const GL = SKHtmlCanvas.getGL(); | ||
let ctx = GL.createContext(htmlCanvas, contextAttributes); | ||
if (!ctx && contextAttributes.majorVersion > 1) { | ||
console.warn('Falling back to WebGL 1.0'); | ||
contextAttributes.majorVersion = 1; | ||
contextAttributes.minorVersion = 0; | ||
ctx = GL.createContext(htmlCanvas, contextAttributes); | ||
} | ||
return ctx; | ||
} | ||
static getGL() { | ||
return globalThis.SkiaSharpGL || Module.GL || GL; | ||
} | ||
static getGLctx() { | ||
const GL = SKHtmlCanvas.getGL(); | ||
return GL.currentContext && GL.currentContext.GLctx || GLctx; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,41 @@ | ||
export class SizeWatcher { | ||
static observe(element, elementId, callback) { | ||
if (!element || !callback) | ||
return; | ||
//console.info(`Adding size watcher observation with callback ${callback._id}...`); | ||
SizeWatcher.init(); | ||
const watcherElement = element; | ||
watcherElement.SizeWatcher = { | ||
callback: callback | ||
}; | ||
SizeWatcher.elements[elementId] = element; | ||
SizeWatcher.observer.observe(element); | ||
SizeWatcher.invoke(element); | ||
} | ||
static unobserve(elementId) { | ||
if (!elementId || !SizeWatcher.observer) | ||
return; | ||
//console.info('Removing size watcher observation...'); | ||
const element = SizeWatcher.elements[elementId]; | ||
SizeWatcher.elements.delete(elementId); | ||
SizeWatcher.observer.unobserve(element); | ||
} | ||
static init() { | ||
if (SizeWatcher.observer) | ||
return; | ||
//console.info('Starting size watcher...'); | ||
SizeWatcher.elements = new Map(); | ||
SizeWatcher.observer = new ResizeObserver((entries) => { | ||
for (let entry of entries) { | ||
SizeWatcher.invoke(entry.target); | ||
} | ||
}); | ||
} | ||
static invoke(element) { | ||
const watcherElement = element; | ||
const instance = watcherElement.SizeWatcher; | ||
if (!instance || !instance.callback) | ||
return; | ||
return instance.callback.invokeMethod('Invoke', element.clientWidth, element.clientHeight); | ||
} | ||
} |
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file added
BIN
+14.3 KB
_framework/Microsoft.Extensions.DependencyInjection.Abstractions.wasm
Binary file not shown.
Binary file added
BIN
+5.07 KB
_framework/Microsoft.Extensions.DependencyInjection.Abstractions.wasm.br
Binary file not shown.
Binary file added
BIN
+5.68 KB
_framework/Microsoft.Extensions.DependencyInjection.Abstractions.wasm.gz
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,70 @@ | ||
{ | ||
"mainAssemblyName": "BlazingTrains", | ||
"resources": { | ||
"hash": "sha256-U37MTs3TtMNLJ1B3YTzsYblEtQI4QfJna93Iaw5oKlk=", | ||
"jsModuleNative": { | ||
"dotnet.native.8.0.5.12iw1pb0x4.js": "sha256-F2Od6IvFLvZuya4VNOaUGYOMFyYTWw77MGxUUOn/hYg=" | ||
}, | ||
"jsModuleRuntime": { | ||
"dotnet.runtime.8.0.5.2lv40rbvkv.js": "sha256-5oi05+Ql/1JzyAphppAHmbRquli4a3/0XLMa8mQDKn8=" | ||
}, | ||
"wasmNative": { | ||
"dotnet.native.wasm": "sha256-eMQvOtJUAD2R7ZVd9cDCQILCVCJ1DqBsoGV1qM6l/qU=" | ||
}, | ||
"assembly": { | ||
"BlazingTrains.wasm": "sha256-4/AC/G5K+HVwaOotFYZ3eehOUgl/tdLY5U8Igq3kq/k=", | ||
"Blazored.LocalStorage.wasm": "sha256-OaMAAd5n7ORfyur5e3QIyEVKJ76MKIvwbg7/icnnYcU=", | ||
"Microsoft.AspNetCore.Components.wasm": "sha256-kWSYtPaFbcDJZueu04a5M+Zpj73i/vbbSre8n0Yc3ho=", | ||
"Microsoft.AspNetCore.Components.Web.wasm": "sha256-19NO7wyi+3iWhvyIC5IxgBMkGwV7pYrpULh91VNDPgY=", | ||
"Microsoft.AspNetCore.Components.WebAssembly.wasm": "sha256-FY3VE6UgaC8f5y5XSyaqfCavK3XjCXy4UDz1+9f5RD8=", | ||
"Microsoft.Extensions.Configuration.Abstractions.wasm": "sha256-87sn2TYqgdZ95sXmavjKEzoEfMgHnYQ9LOvnMX+aZcI=", | ||
"Microsoft.Extensions.Configuration.Json.wasm": "sha256-Sxmy2ZS134URxbHEvdbS6NcQ3zXS7UWx/5ZPpwiW7FA=", | ||
"Microsoft.Extensions.Configuration.wasm": "sha256-jYqHUZ07UYWc8POk7xhas6xQYH7t1qoTcylqoDqncJk=", | ||
"Microsoft.Extensions.DependencyInjection.Abstractions.wasm": "sha256-j4s8Iwu2bDc5MUAO2YMkqoeP24KHc0Ko8MX0KZArhV8=", | ||
"Microsoft.Extensions.DependencyInjection.wasm": "sha256-gg8xZqJsBBrrNEyUGzYqhL3sqkuZ4AHAvdTdL9nZ0S0=", | ||
"Microsoft.Extensions.Logging.Abstractions.wasm": "sha256-HEr+Yo6bhWQ5zsFn21/s1dq117hM+wBLjD2ssFb9oAA=", | ||
"Microsoft.Extensions.Logging.wasm": "sha256-8BH+kQfjYuZWxprOICXJ4+tU0OdJOYDKN7G0S3zYYHI=", | ||
"Microsoft.Extensions.Options.wasm": "sha256-gPPZRTQqitiKOLH4eTwkqKIc38wJ+tD00CHwjTBrUyc=", | ||
"Microsoft.Extensions.Primitives.wasm": "sha256-opoh5mb9g1OUt3obpwrrOvmcQ+5UbUJPcBRMoP63AhU=", | ||
"Microsoft.JSInterop.wasm": "sha256-gF3tU2/wm2+YVgqHGxGGOiwESPF4ts+L3jeEqVRQCYc=", | ||
"Microsoft.JSInterop.WebAssembly.wasm": "sha256-ZyIqQss3I64BQC2gc7JEDrkYq14vXKEXuw5vBJ5oFYM=", | ||
"SkiaSharp.Views.Blazor.wasm": "sha256-CtRji9mF5LCm/1NPgdnyMCDV2OuWChQ/vVTUmrD2YxQ=", | ||
"SkiaSharp.wasm": "sha256-nmdGD1XHvycjbrgqDh9ocPd3XyVayLlMZDW8oV3CVjs=", | ||
"System.Collections.Concurrent.wasm": "sha256-XEvb7FrZ0WPpX5a6Z40lnywdbBYmP2UAK7qQIK3V6dI=", | ||
"System.Collections.Immutable.wasm": "sha256-E0NN0wXfuFW3hFXxyAj1ZSnoCj6qa6lR8zJlY0SuGXY=", | ||
"System.Collections.wasm": "sha256-Z91jqPoQU6Q0Z/PkxKnwDiiOyB4dCKS8efsGF2MoIm8=", | ||
"System.ComponentModel.Primitives.wasm": "sha256-IjLHmQeldR47Uz8WXUVNHpwyJ8491gfiULKcNcCVmhQ=", | ||
"System.ComponentModel.TypeConverter.wasm": "sha256-7i6gFfbteKP4X3zOe/1w9urYCgLCuBCmagU5iWOxRFM=", | ||
"System.ComponentModel.wasm": "sha256-RLeTQOOEEy4QXGeQLyLNY8k+aaF4W/EDE4Gx/TW+zxY=", | ||
"System.Console.wasm": "sha256-wrHO4XoLQ7SrFfNknCrHKuZA57AlOzjAwYnWBs7U0hE=", | ||
"System.Diagnostics.Process.wasm": "sha256-jtkiNyeFnCLQkZpAlt+JAVSl/c3IjC8n2UlAOz7pSDs=", | ||
"System.Linq.wasm": "sha256-7Wo32c0OiNgF78G3g3SLoOeq7Kdw58tTZoU161vAYi4=", | ||
"System.Memory.wasm": "sha256-9HUy4gMJdNTLo7N0VwoI8QasP0gpyKztKnHbnQcS3e8=", | ||
"System.Net.Http.wasm": "sha256-dNw+0qE8/Sp6HZupDFKYxe+CbqA3DdGWU8lNaBpNd80=", | ||
"System.Net.Primitives.wasm": "sha256-kqcIbMBUCbf4DB88ACNSE264ZOxmyLQuZFeNbqIsCM4=", | ||
"System.Numerics.Vectors.wasm": "sha256-bPQq+096xer2b0Ayw26TXf9h0BzIn8c/gP0TYZO8uro=", | ||
"System.ObjectModel.wasm": "sha256-jYVzDR5kNDqZCj0vqLc5mXzN6xhxj+pKOV9VoOrxWAc=", | ||
"System.Private.CoreLib.wasm": "sha256-pnz41bKUOxgRRPxU0jpu0vbgoq16++Ly83YUt4fiZj4=", | ||
"System.Private.Uri.wasm": "sha256-cyJb2orAleFHfDFbG8bD6Z7CYZPm4GlwPoMbftN/I4M=", | ||
"System.Runtime.InteropServices.JavaScript.wasm": "sha256-9Bmhf95Vju/zsMHWwmsVboR31tWQeh/SfePN+0A87m8=", | ||
"System.Runtime.wasm": "sha256-ibD7zAPE9aDggg9SzIE33RlJSE7zKPWJjmKo3cqbLPs=", | ||
"System.Text.Encodings.Web.wasm": "sha256-UTeO3M1Fpkq6cIINv2bOypUDVjn2+CKsaF5pkyQwBdo=", | ||
"System.Text.Json.wasm": "sha256-q1YaLrTndY04vLyXRGkTL7ZGLvnWglXBpE8VoxBcZ8I=", | ||
"System.Text.RegularExpressions.wasm": "sha256-o4BKBOvqtDxUhvb0KUBAnYZRKFmRzqLPOHm7dgyPKRw=", | ||
"System.Threading.Thread.wasm": "sha256-3cCXiH9rHf5clqY2AiFl79RJuw4erpG4RKTC35PbKkY=", | ||
"System.Threading.wasm": "sha256-THmsXPmjIgdfe+hWGo2ByK446MLjJsyfu9S5lNnoxsc=", | ||
"System.wasm": "sha256-Kde8HSQqjpfQd9umKlcWPnnVunhjh4zZOAieXftEYhU=", | ||
"Trains.NET.Engine.wasm": "sha256-hQXRdfJPv4/acQbkGy5WlHUHQmMCx24iqFiFaGJgqB4=", | ||
"Trains.NET.Instrumentation.wasm": "sha256-AzWdNDiQ5AB8y0VpDjiNWRlF00Hgh9gfy0q+DQFqt94=", | ||
"Trains.NET.Rendering.Skia.wasm": "sha256-yW0AdU06cBfazAdsz1Oc+vyOjLXYH9iPoZV20znyzRI=", | ||
"Trains.NET.Rendering.wasm": "sha256-rRO0d+wb1qp9l+b9JJvo+NLFHEZUdbRwDL8oE7dArGM=" | ||
} | ||
}, | ||
"cacheBootResources": true, | ||
"debugLevel": 0, | ||
"linkerEnabled": true, | ||
"globalizationMode": "invariant", | ||
"extensions": { | ||
"blazor": {} | ||
} | ||
} |
Binary file not shown.
Binary file not shown.
Large diffs are not rendered by default.
Oops, something went wrong.
Binary file not shown.
Binary file not shown.
Large diffs are not rendered by default.
Oops, something went wrong.
Binary file not shown.
Binary file not shown.
Large diffs are not rendered by default.
Oops, something went wrong.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Large diffs are not rendered by default.
Oops, something went wrong.
Binary file not shown.
Binary file not shown.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,57 @@ | ||
html, body { | ||
font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; | ||
overscroll-behavior: none; | ||
margin: 0px; | ||
position: fixed; | ||
left: 0px; | ||
top: 0px; | ||
width: 100%; | ||
height: 100%; | ||
overflow: hidden; | ||
height: -webkit-fill-available; | ||
min-height: -webkit-fill-available; | ||
background-color: #58c467; | ||
user-select: none; | ||
} | ||
|
||
#banner { | ||
position: absolute; | ||
top: 30vh; | ||
width: 100%; | ||
text-align: center; | ||
background: url(trainloop.gif) top center no-repeat; | ||
background-size: 420px; | ||
padding: 50px 0px 50px 0px; | ||
} | ||
|
||
a { | ||
color: #0077cc; | ||
} | ||
|
||
canvas { | ||
position: fixed; | ||
left: 0px; | ||
top: 0px; | ||
width: 100vw; | ||
height: 100vh; | ||
overflow: hidden; | ||
} | ||
|
||
#blazor-error-ui { | ||
background: lightyellow; | ||
bottom: 0; | ||
box-shadow: 0 -1px 2px rgba(0, 0, 0, 0.2); | ||
display: none; | ||
left: 0; | ||
padding: 0.6rem 1.25rem 0.7rem 1.25rem; | ||
position: fixed; | ||
width: 100%; | ||
z-index: 1000; | ||
} | ||
|
||
#blazor-error-ui .dismiss { | ||
cursor: pointer; | ||
position: absolute; | ||
right: 0.75rem; | ||
top: 0.5rem; | ||
} |
Large diffs are not rendered by default.
Oops, something went wrong.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Oops, something went wrong.