218 lines
7.2 KiB
CSS
218 lines
7.2 KiB
CSS
/*
|
||
* Reifen Späth – App Interop styles
|
||
* Reconnect overlay + idle-lock overlay.
|
||
* Uses global design tokens from app.css.
|
||
*/
|
||
|
||
/* =============================================
|
||
Blazor reconnect overlay (replaces default)
|
||
The framework toggles styles on:
|
||
#components-reconnect-modal
|
||
via classes: components-reconnect-show / hide / failed / rejected
|
||
============================================= */
|
||
#components-reconnect-modal {
|
||
display: none;
|
||
position: fixed;
|
||
inset: 0;
|
||
z-index: 2147483000;
|
||
align-items: center;
|
||
justify-content: center;
|
||
padding: var(--space-4, 1rem);
|
||
background: rgba(0, 0, 0, 0.78);
|
||
backdrop-filter: blur(12px);
|
||
-webkit-backdrop-filter: blur(12px);
|
||
font-family: var(--font-family-base, sans-serif);
|
||
color: var(--text-primary, #fff);
|
||
}
|
||
|
||
#components-reconnect-modal.components-reconnect-show,
|
||
#components-reconnect-modal.components-reconnect-failed,
|
||
#components-reconnect-modal.components-reconnect-rejected {
|
||
display: flex;
|
||
}
|
||
|
||
#components-reconnect-modal .reconnect-dialog {
|
||
background: var(--surface-primary, rgba(28, 28, 30, 0.95));
|
||
border: 0.5px solid var(--border-default, rgba(255, 255, 255, 0.1));
|
||
border-radius: var(--radius-xl, 20px);
|
||
box-shadow: var(--shadow-xl, 0 20px 40px rgba(0, 0, 0, 0.5));
|
||
padding: var(--space-6, 1.5rem);
|
||
width: 100%;
|
||
max-width: 420px;
|
||
text-align: center;
|
||
}
|
||
|
||
#components-reconnect-modal .reconnect-icon {
|
||
width: 56px;
|
||
height: 56px;
|
||
margin: 0 auto var(--space-4, 1rem);
|
||
display: flex;
|
||
align-items: center;
|
||
justify-content: center;
|
||
border-radius: 50%;
|
||
background: rgba(220, 38, 38, 0.15);
|
||
color: var(--color-primary-light, #ef4444);
|
||
}
|
||
|
||
#components-reconnect-modal .reconnect-icon svg {
|
||
animation: reconnect-spin 1.4s linear infinite;
|
||
}
|
||
|
||
@keyframes reconnect-spin {
|
||
to { transform: rotate(360deg); }
|
||
}
|
||
|
||
#components-reconnect-modal h2 {
|
||
margin: 0 0 var(--space-2, 0.5rem);
|
||
font-size: var(--text-xl, 1.25rem);
|
||
font-family: var(--font-family-base, sans-serif);
|
||
font-weight: var(--font-weight-semibold, 600);
|
||
}
|
||
|
||
#components-reconnect-modal p {
|
||
margin: 0 0 var(--space-5, 1.25rem);
|
||
color: var(--text-secondary, rgba(255, 255, 255, 0.7));
|
||
font-size: var(--text-sm, 0.875rem);
|
||
line-height: var(--line-height-relaxed, 1.6);
|
||
}
|
||
|
||
#components-reconnect-modal .reconnect-actions {
|
||
display: flex;
|
||
flex-direction: column;
|
||
gap: var(--space-3, 0.75rem);
|
||
}
|
||
|
||
#components-reconnect-modal .reconnect-text-show,
|
||
#components-reconnect-modal .reconnect-text-failed,
|
||
#components-reconnect-modal .reconnect-text-rejected,
|
||
#components-reconnect-modal .reconnect-actions-failed {
|
||
display: none;
|
||
}
|
||
|
||
#components-reconnect-modal.components-reconnect-show .reconnect-text-show { display: block; }
|
||
#components-reconnect-modal.components-reconnect-failed .reconnect-text-failed,
|
||
#components-reconnect-modal.components-reconnect-failed .reconnect-actions-failed { display: block; }
|
||
#components-reconnect-modal.components-reconnect-failed .reconnect-actions-failed { display: flex; flex-direction: column; gap: var(--space-3, 0.75rem); }
|
||
#components-reconnect-modal.components-reconnect-rejected .reconnect-text-rejected,
|
||
#components-reconnect-modal.components-reconnect-rejected .reconnect-actions-failed { display: block; }
|
||
#components-reconnect-modal.components-reconnect-rejected .reconnect-actions-failed { display: flex; flex-direction: column; gap: var(--space-3, 0.75rem); }
|
||
|
||
/* Hide default retry countdown */
|
||
#components-reconnect-modal .components-reconnect-current-attempt,
|
||
#components-reconnect-modal .components-reconnect-max-retries {
|
||
color: var(--text-tertiary, rgba(255, 255, 255, 0.5));
|
||
font-size: var(--text-xs, 0.75rem);
|
||
}
|
||
|
||
#components-reconnect-modal button {
|
||
min-height: var(--touch-target, 44px);
|
||
padding: var(--space-3, 0.75rem) var(--space-5, 1.25rem);
|
||
border-radius: var(--radius-md, 10px);
|
||
border: none;
|
||
font-family: var(--font-family-base, sans-serif);
|
||
font-size: var(--text-sm, 0.875rem);
|
||
font-weight: var(--font-weight-semibold, 600);
|
||
cursor: pointer;
|
||
transition: all var(--duration-fast, 150ms) var(--ease-out, ease);
|
||
}
|
||
|
||
#components-reconnect-modal .reconnect-retry {
|
||
background: linear-gradient(180deg, var(--color-primary-light, #ef4444) 0%, var(--color-primary, #dc2626) 100%);
|
||
color: var(--text-primary, #fff);
|
||
box-shadow: var(--shadow-btn-primary, 0 4px 12px rgba(220, 38, 38, 0.3));
|
||
}
|
||
|
||
#components-reconnect-modal .reconnect-reload {
|
||
background: rgba(255, 255, 255, 0.08);
|
||
color: var(--text-primary, #fff);
|
||
border: 0.5px solid var(--border-default, rgba(255, 255, 255, 0.1));
|
||
}
|
||
|
||
#components-reconnect-modal button:hover:not(:disabled) {
|
||
transform: translateY(-1px);
|
||
}
|
||
|
||
/* =============================================
|
||
Idle lock overlay
|
||
============================================= */
|
||
#app-idle-overlay {
|
||
display: none;
|
||
position: fixed;
|
||
inset: 0;
|
||
z-index: 2147482000;
|
||
align-items: center;
|
||
justify-content: center;
|
||
padding: var(--space-4, 1rem);
|
||
background: rgba(0, 0, 0, 0.82);
|
||
backdrop-filter: blur(12px);
|
||
-webkit-backdrop-filter: blur(12px);
|
||
font-family: var(--font-family-base, sans-serif);
|
||
color: var(--text-primary, #fff);
|
||
animation: fadeIn var(--duration-normal, 250ms) var(--ease-out, ease);
|
||
}
|
||
|
||
#app-idle-overlay.visible {
|
||
display: flex;
|
||
}
|
||
|
||
#app-idle-overlay .app-idle-dialog {
|
||
background: var(--surface-primary, rgba(28, 28, 30, 0.95));
|
||
border: 0.5px solid var(--border-default, rgba(255, 255, 255, 0.1));
|
||
border-radius: var(--radius-xl, 20px);
|
||
box-shadow: var(--shadow-xl, 0 20px 40px rgba(0, 0, 0, 0.5));
|
||
padding: var(--space-6, 1.5rem);
|
||
width: 100%;
|
||
max-width: 420px;
|
||
text-align: center;
|
||
}
|
||
|
||
#app-idle-overlay .app-idle-icon {
|
||
width: 64px;
|
||
height: 64px;
|
||
margin: 0 auto var(--space-4, 1rem);
|
||
display: flex;
|
||
align-items: center;
|
||
justify-content: center;
|
||
border-radius: 50%;
|
||
background: rgba(251, 191, 36, 0.15);
|
||
color: var(--color-warning, #fbbf24);
|
||
}
|
||
|
||
#app-idle-overlay h2 {
|
||
margin: 0 0 var(--space-2, 0.5rem);
|
||
font-size: var(--text-xl, 1.25rem);
|
||
font-weight: var(--font-weight-semibold, 600);
|
||
}
|
||
|
||
#app-idle-overlay p {
|
||
margin: 0 0 var(--space-5, 1.25rem);
|
||
color: var(--text-secondary, rgba(255, 255, 255, 0.7));
|
||
font-size: var(--text-sm, 0.875rem);
|
||
line-height: var(--line-height-relaxed, 1.6);
|
||
}
|
||
|
||
#app-idle-overlay .app-idle-resume {
|
||
min-height: var(--touch-target, 44px);
|
||
width: 100%;
|
||
padding: var(--space-3, 0.75rem) var(--space-5, 1.25rem);
|
||
border-radius: var(--radius-md, 10px);
|
||
border: none;
|
||
background: linear-gradient(180deg, var(--color-primary-light, #ef4444) 0%, var(--color-primary, #dc2626) 100%);
|
||
color: var(--text-primary, #fff);
|
||
font-family: var(--font-family-base, sans-serif);
|
||
font-size: var(--text-base, 1rem);
|
||
font-weight: var(--font-weight-semibold, 600);
|
||
cursor: pointer;
|
||
box-shadow: var(--shadow-btn-primary, 0 4px 12px rgba(220, 38, 38, 0.3));
|
||
transition: transform var(--duration-fast, 150ms) var(--ease-out, ease);
|
||
}
|
||
|
||
#app-idle-overlay .app-idle-resume:hover {
|
||
transform: translateY(-1px);
|
||
}
|
||
|
||
#app-idle-overlay .app-idle-resume:focus-visible {
|
||
outline: 3px solid rgba(220, 38, 38, 0.5);
|
||
outline-offset: 2px;
|
||
}
|