Indítópult launcher page + universal app placeholder icon (v0.163.0)
New /launcher page: a grid of large tappable tiles, one per openable deployed app (subdomain presence is the single openability criterion, shared with the Megnyitás button via the extracted Server.subdomainMap helper). Colored tiles (deterministic slug color or .felhom.yml brand_color), white glyph/monogram fallback, target=_blank links for operational apps, greyed unclickable tiles for stopped ones. First sidebar item; / stays the Vezérlőpult. Universal app placeholder: new AppPlaceholderSVG served at /static/app-placeholder.svg, now the default FallbackIcon on app_list_row so a logo-less app shows a placeholder instead of visibility:hidden. Brand mark is never an app placeholder. New Metadata.BrandColor; new funcmap tileColor/initial. 10 new test functions + 4 red-proofs. No agent coupling; MinAgent unchanged.
This commit is contained in:
@@ -1111,6 +1111,68 @@ a.stat-card:hover {
|
||||
[data-href] { cursor: pointer; }
|
||||
|
||||
.empty-state { text-align: center; padding: 3rem; color: var(--text-3); }
|
||||
.empty-state-link { color: var(--blue-bright); }
|
||||
|
||||
/* Indítópult (launcher) — a grid of large tappable app tiles. Each tile has a deterministic
|
||||
per-app background (tileColor / brand_color override), the white monogram fallback UNDER the
|
||||
logo (revealed when the logo fails to load), and the app name below. */
|
||||
.launch-grid {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(auto-fill, minmax(112px, 1fr));
|
||||
gap: 1.25rem;
|
||||
margin-top: .5rem;
|
||||
}
|
||||
.launch-cell {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
gap: .5rem;
|
||||
text-decoration: none;
|
||||
color: var(--text-1);
|
||||
}
|
||||
.launch-tile {
|
||||
position: relative;
|
||||
width: 100%;
|
||||
aspect-ratio: 1 / 1;
|
||||
border-radius: var(--radius);
|
||||
border: 1px solid var(--line);
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
overflow: hidden;
|
||||
transition: transform .12s ease, border-color .12s ease;
|
||||
}
|
||||
.launch-cell:hover .launch-tile {
|
||||
transform: translateY(-2px);
|
||||
border-color: var(--blue);
|
||||
}
|
||||
.launch-mono {
|
||||
position: absolute;
|
||||
color: #fff;
|
||||
font-family: var(--font-ui);
|
||||
font-size: 2.4rem;
|
||||
font-weight: 600;
|
||||
line-height: 1;
|
||||
user-select: none;
|
||||
}
|
||||
.launch-logo {
|
||||
position: relative;
|
||||
width: 58%;
|
||||
height: 58%;
|
||||
object-fit: contain;
|
||||
}
|
||||
.launch-name {
|
||||
max-width: 100%;
|
||||
font-size: .85rem;
|
||||
color: var(--text-1);
|
||||
text-align: center;
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
.launch-cell--off { cursor: default; }
|
||||
.launch-tile--off { opacity: .4; }
|
||||
.launch-cell--off .launch-name { color: var(--text-3); }
|
||||
|
||||
/* Login page */
|
||||
.login-body {
|
||||
|
||||
Reference in New Issue
Block a user