Vanguard media stack: ingest, copyparty, Syncthing, normalize sweep, Authentik, Jellyfin + Vanguard Metadata plugin, MariaDB, Gitea, bot runtime

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
2026-10-30 15:43:30 -05:00
commit c602a6ff52
66 changed files with 4229 additions and 0 deletions

55
dock/vanguard.css Normal file
View File

@@ -0,0 +1,55 @@
/* Vanguard skin for copyparty's control-panel / login page only.
Scoped to #wrap (splash) so the file browser keeps copyparty's own theme. */
html:has(#wrap > #lf), html:has(#wrap > div > #lf) { background:#1e1e1e; }
body:has(#wrap > div > #lf), body:has(#wrap > #b) {
margin:0; background:#1e1e1e; color:#e6e6e6;
font:15px/1.5 system-ui,-apple-system,"Segoe UI",Roboto,sans-serif;
min-height:100vh; display:flex; align-items:center; justify-content:center;
}
#wrap {
width:min(420px, calc(100vw - 32px)); margin:24px auto; padding:28px 28px 22px;
background:#2a2a2a; border:1px solid #3a3a3a; border-radius:12px; box-shadow:0 12px 40px rgba(0,0,0,.45);
}
#wrap::before {
content:"Vanguard Stream"; display:block; font-size:22px; font-weight:700; letter-spacing:.3px;
color:#fff; margin:0 0 4px;
}
/* greeting */
#wrap > #b { margin:0 0 20px; color:#9a9a9a; font-size:13px; }
#wrap > #b small { color:#7a7a7a; }
/* clutter: refresh/connect links, "other stuff", recent uploads, reset, footer, repl */
#wrap > #a, #wrap > #v, #wrap > #cc, #wrap .agr, #repl, #pb { display:none !important; }
/* headings */
#wrap h1 { font-size:12px; text-transform:uppercase; letter-spacing:.08em; color:#9a9a9a; margin:18px 0 8px; }
#wrap > #l { margin-top:0; }
/* login form */
#lf { display:grid; gap:10px; }
#lf input[type=text], #lf input[type=password] {
width:100%; box-sizing:border-box; padding:11px 12px; font-size:15px;
background:#1e1e1e; color:#e6e6e6; border:1px solid #444; border-radius:8px; outline:none;
}
#lf input:focus { border-color:#3d8bfd; box-shadow:0 0 0 3px rgba(61,139,253,.25); }
#lf input[type=submit] {
width:100%; padding:12px; margin-top:4px; font-size:15px; font-weight:600; cursor:pointer;
background:#3d8bfd; color:#fff; border:0; border-radius:8px;
}
#lf input[type=submit]:hover { background:#2f7af0; }
#lm { color:#e74c3c; font-size:13px; min-height:1em; }
/* logged in: volume list becomes tiles */
#wrap ul { list-style:none; padding:0; margin:6px 0 0; display:grid; gap:8px; }
#wrap ul li a {
display:block; padding:12px 14px; border-radius:8px; background:#1e1e1e; border:1px solid #3a3a3a;
color:#e6e6e6; text-decoration:none; font-weight:600;
}
#wrap ul li a:hover { border-color:#3d8bfd; background:#232833; }
#wrap ul li a::before { content:"▸ "; color:#3d8bfd; }
/* logout / misc links that remain */
#wrap a { color:#3d8bfd; }