librelad d39852aa3d refactor(webui): reorganize into components/ + core/ taxonomy
Final modularization layout (user-chosen): every page is a self-contained
folder under components/<id>/ (controllers + CSS + its html fragment), and all
shared/framework code folds into core/:
  core/kernel  (feature-registry, lifecycle, services, spa)
  core/boot    (auth, system-loader/orchestrator, setup, loaders)
  core/lib     (data-loader, router, helpers, the task kernel, shared modules)
  core/ui      (topbar, modal, notifications, … + topbar.html)
  core/css     (all shared stylesheets)
  core/icons
Top level is now just: components/, core/, themes/, index.html (+ runtime data/).

Every path reference rewritten (index.html, scripts arrays, fetch()/
loadFragment()/loadScript() literals, system-loader + config-manager controller
paths, kernel manifest URL, feature.json, backend FEATURES_DIR). The
/api/features/list endpoint NAME is unchanged (it now scans components/).
Deleted 3 dead files (app-content.html, apps-content.html, html-cache.js).
Verified: 0 stale prefixes, 0 double-rewrites, all JS/JSON valid.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Signed-off-by: librelad <librelad@digitalangels.vip>
2026-05-30 07:13:52 +01:00

92 lines
2.0 KiB
CSS

/* SSH Access page. Reuses the .backup-ssh-key-card / button styles from
backup.css for the cards; this file only adds page chrome + the key list. */
.ssh-page {
padding: 4px 2px 40px;
}
/* "Tools" group heading in the Admin (config) sidebar, above SSH Access. */
.sidebar-group-label {
margin: 14px 8px 4px;
padding-top: 10px;
border-top: 1px solid rgba(var(--text-rgb), 0.08);
font-size: 0.7rem;
font-weight: 700;
letter-spacing: 0.06em;
text-transform: uppercase;
color: rgba(var(--text-rgb), 0.45);
}
/* SSH Access uses the config page's section layout (.config-category /
.domains-wrapper); these just space the content inside each section. */
.ssh-section-body {
display: flex;
flex-direction: column;
gap: 10px;
padding: 2px 0;
}
.ssh-section-actions {
display: flex;
flex-wrap: wrap;
gap: 8px;
margin-top: 2px;
}
/* Login + Add-a-key are light on content, so sit them side by side (50/50) on
tablet/desktop; stack on mobile. Authorized keys stays full width below. */
.ssh-cols {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 16px;
align-items: stretch;
}
@media (max-width: 640px) {
.ssh-cols { grid-template-columns: 1fr; }
}
.ssh-key-list {
display: flex;
flex-direction: column;
gap: 8px;
}
.ssh-key-row {
display: flex;
align-items: center;
justify-content: space-between;
gap: 12px;
padding: 10px 12px;
border: 1px solid rgba(var(--text-rgb), 0.10);
border-radius: 8px;
background: var(--card-bg);
}
.ssh-key-row-main {
display: flex;
flex-direction: column;
gap: 2px;
min-width: 0;
}
.ssh-key-type {
font-size: 0.72rem;
font-weight: 700;
text-transform: uppercase;
letter-spacing: 0.04em;
color: var(--accent);
}
.ssh-key-comment {
font-size: 0.9rem;
font-weight: 600;
color: var(--text-primary);
}
.ssh-key-fp {
font-family: var(--font-mono, monospace);
font-size: 0.74rem;
color: rgba(var(--text-rgb), 0.6);
word-break: break-all;
}