aboutsummaryrefslogtreecommitdiffstats
path: root/assets/css/pages/admin.css
diff options
context:
space:
mode:
authorsillylaird <sillyfanboy@gmail.com>2026-09-03 00:33:59 +0000
committersillylaird <sillyfanboy@gmail.com>2026-09-03 00:33:59 +0000
commit898b52edcb47bcb3e9d6106e74ca73e74ea01e70 (patch)
tree85c6ee5ad58b860144551184d4cf86b560c62b91 /assets/css/pages/admin.css
downloadwww-main.tar.gz
www-main.zip
import live www.sillylaird.ca webrootHEADmain
Diffstat (limited to 'assets/css/pages/admin.css')
-rw-r--r--assets/css/pages/admin.css392
1 files changed, 392 insertions, 0 deletions
diff --git a/assets/css/pages/admin.css b/assets/css/pages/admin.css
new file mode 100644
index 0000000..6262433
--- /dev/null
+++ b/assets/css/pages/admin.css
@@ -0,0 +1,392 @@
+/* Unified admin panel — terminal theme helpers */
+
+.admin-tabs {
+ display: flex;
+ flex-wrap: wrap;
+ gap: var(--space-xs);
+ margin: 0 0 var(--space-lg);
+ border-bottom: 1px solid var(--border);
+}
+
+.admin-tabs a {
+ padding: var(--space-sm) var(--space-md);
+ border: 1px solid var(--border);
+ border-bottom: none;
+ border-radius: var(--r) var(--r) 0 0;
+ color: var(--muted);
+ font-weight: 700;
+}
+
+.admin-tabs a.active {
+ color: var(--ink);
+ border-color: var(--accent);
+ background: #0a0000;
+}
+
+.admin-flash {
+ padding: var(--space-sm) var(--space-md);
+ border-radius: var(--r);
+ margin-bottom: var(--space-md);
+ border: 1px solid var(--border);
+}
+
+.admin-flash.ok { border-color: #2e7d32; }
+.admin-flash.err { border-color: var(--accent); }
+
+.admin-cols {
+ display: grid;
+ grid-template-columns: 1fr 1fr;
+ gap: var(--space-lg);
+ align-items: start;
+}
+
+@media (max-width: 800px) {
+ .admin-cols { grid-template-columns: 1fr; }
+}
+
+.panel {
+ border: 1px solid var(--border);
+ border-radius: var(--r);
+ margin-bottom: var(--space-md);
+}
+
+.panel-head {
+ padding: var(--space-sm) var(--space-md);
+ border-bottom: 1px solid var(--border);
+ font-size: var(--fs-xs);
+ text-transform: uppercase;
+ letter-spacing: .07em;
+ color: var(--muted);
+}
+
+.panel-body { padding: var(--space-md); }
+
+.admin-field { margin-bottom: var(--space-md); }
+
+.admin-field label {
+ display: block;
+ margin-bottom: 4px;
+ font-size: var(--fs-sm);
+}
+
+.admin-field input,
+.admin-field textarea,
+.admin-field select {
+ width: 100%;
+ box-sizing: border-box;
+ background: #050000;
+ border: 1px solid var(--border);
+ color: #d00000;
+ padding: 10px;
+ border-radius: var(--r);
+ font: inherit;
+}
+
+.md-toolbar {
+ display: flex;
+ flex-wrap: wrap;
+ gap: 4px;
+ margin-bottom: 6px;
+}
+
+.md-toolbar button {
+ padding: 6px 10px;
+ font-size: var(--fs-xs);
+}
+
+#md-preview {
+ background: #050000;
+ border: 1px solid var(--border);
+ border-radius: var(--r);
+ padding: 12px;
+ min-height: 200px;
+ overflow: auto;
+ line-height: 1.6;
+}
+
+.admin-list {
+ list-style: none;
+ padding: 0;
+ margin: 0;
+}
+
+.admin-item {
+ border: 1px solid var(--border);
+ border-radius: var(--r);
+ padding: var(--space-sm) var(--space-md);
+ margin-bottom: var(--space-sm);
+}
+
+.admin-item small {
+ color: var(--muted);
+ font-family: monospace;
+}
+
+.inline-form { display: inline; }
+
+.admin-checks {
+ display: flex;
+ flex-direction: column;
+ gap: 6px;
+ margin: 0 0 var(--space-md);
+}
+
+.admin-checks label {
+ font-size: var(--fs-sm);
+}
+
+.admin-motd-actions {
+ display: flex;
+ flex-wrap: wrap;
+ gap: var(--space-sm);
+ margin: 0 0 var(--space-md);
+}
+
+.motd-xmpp-preview {
+ margin: 0;
+ white-space: pre-wrap;
+ overflow-wrap: anywhere;
+ font-family: var(--font-mono, ui-monospace, monospace);
+ font-size: var(--fs-sm);
+ line-height: 1.55;
+ color: var(--ink);
+}
+
+.type-badge {
+ font-family: monospace;
+ padding: 1px 7px;
+ border: 1px solid var(--border);
+ border-radius: var(--r);
+ color: var(--muted);
+}
+
+table.admin-table {
+ width: 100%;
+ border-collapse: collapse;
+}
+
+table.admin-table th,
+table.admin-table td {
+ border: 1px solid var(--border);
+ padding: 6px 8px;
+ text-align: left;
+ vertical-align: top;
+ font-size: var(--fs-sm);
+}
+
+.ratio-wrap {
+ position: relative;
+ padding-top: 56.25%;
+}
+
+.ratio-wrap iframe {
+ position: absolute;
+ inset: 0;
+ width: 100%;
+ height: 100%;
+ border: 0;
+ border-radius: var(--r);
+}
+
+.preview-panel img,
+.preview-panel video,
+.preview-panel audio {
+ max-width: 100%;
+ border-radius: var(--r);
+ display: block;
+}
+
+/* Utility replacements for residual inline styles */
+.admin-section-title {
+ font-size: var(--fs-lg);
+ margin: var(--space-2xl) 0 var(--space-md);
+}
+
+.admin-section-label {
+ font-size: var(--fs-sm);
+ text-transform: uppercase;
+ letter-spacing: .07em;
+ color: var(--muted);
+ margin: var(--space-xl) 0 var(--space-sm);
+}
+
+.admin-stack-gap {
+ margin-bottom: var(--space-2xl);
+}
+
+.admin-inline-note {
+ font-size: var(--fs-sm);
+ color: var(--accent);
+}
+
+.admin-search-input {
+ padding: 8px;
+ background: #050000;
+ border: 1px solid var(--border);
+ color: #d00000;
+ border-radius: var(--r);
+}
+
+body.light-mode .admin-tabs a.active {
+ background: #fff4f4;
+}
+
+body.light-mode .admin-field input,
+body.light-mode .admin-field textarea,
+body.light-mode .admin-field select,
+body.light-mode #md-preview,
+body.light-mode .admin-search-input {
+ background: #fff;
+ color: #2a1212;
+}
+
+/* ---- Traffic analytics ---- */
+.traffic-live-bar {
+ display: flex;
+ align-items: center;
+ gap: 0.4rem;
+ margin: 0 0 var(--space-md);
+ font-family: var(--font-mono, ui-monospace, monospace);
+ font-size: var(--fs-xs);
+ letter-spacing: 0.04em;
+ text-transform: uppercase;
+ color: var(--muted);
+}
+.traffic-live-dot {
+ width: 8px;
+ height: 8px;
+ border-radius: 50%;
+ background: #39ff14;
+ box-shadow: 0 0 8px rgba(57, 255, 20, 0.7);
+ animation: traffic-live-pulse 1.6s ease-in-out infinite;
+}
+.traffic-live-bar--ok .traffic-live-dot {
+ background: #39ff14;
+}
+.traffic-live-bar--err .traffic-live-dot {
+ background: #ff4d4d;
+ box-shadow: 0 0 8px rgba(255, 77, 77, 0.55);
+ animation: none;
+}
+.traffic-live-bar--err #traffic-live-status {
+ color: #ff6b6b;
+}
+@keyframes traffic-live-pulse {
+ 0%, 100% { opacity: 1; transform: scale(1); }
+ 50% { opacity: 0.45; transform: scale(0.85); }
+}
+body.light-mode .traffic-live-dot {
+ background: #1a7a12;
+ box-shadow: none;
+}
+body.light-mode .traffic-live-bar--err .traffic-live-dot {
+ background: #c0392b;
+}
+
+.traffic-kpi-grid {
+ display: grid;
+ grid-template-columns: repeat(auto-fit, minmax(120px, 1fr));
+ gap: var(--space-sm);
+ margin: 0 0 var(--space-lg);
+}
+.traffic-kpi-val.traffic-kpi-flash {
+ animation: traffic-kpi-pop 0.55s ease;
+}
+@keyframes traffic-kpi-pop {
+ 0% { transform: scale(1); }
+ 35% { transform: scale(1.12); filter: brightness(1.35); }
+ 100% { transform: scale(1); }
+}
+.traffic-kpi {
+ border: 1px solid var(--border);
+ border-radius: var(--r);
+ padding: var(--space-md);
+ background: #0a0000;
+ text-align: center;
+}
+.traffic-kpi-val {
+ display: block;
+ font-family: var(--font-mono, ui-monospace, monospace);
+ font-size: 1.6rem;
+ font-weight: 700;
+ color: #39ff14;
+ text-shadow: 0 0 8px rgba(57, 255, 20, .25);
+ line-height: 1.2;
+}
+.traffic-kpi-label {
+ display: block;
+ margin-top: 4px;
+ font-size: var(--fs-xs);
+ text-transform: uppercase;
+ letter-spacing: .06em;
+ color: var(--muted);
+}
+.traffic-kpi--bots {
+ border-color: rgba(255, 159, 26, 0.45);
+}
+.traffic-kpi--bots .traffic-kpi-val {
+ color: #ff9f1a;
+ text-shadow: 0 0 8px rgba(255, 159, 26, .3);
+}
+.traffic-row--bot {
+ opacity: 0.78;
+}
+.traffic-badge--bot {
+ background: rgba(255, 159, 26, 0.18);
+ color: #ff9f1a;
+ border: 1px solid rgba(255, 159, 26, 0.4);
+}
+body.light-mode .traffic-kpi--bots .traffic-kpi-val {
+ color: #a65c00;
+ text-shadow: none;
+}
+body.light-mode .traffic-badge--bot {
+ background: rgba(166, 92, 0, 0.1);
+ color: #a65c00;
+ border-color: rgba(166, 92, 0, 0.35);
+}
+.traffic-chart-panel .panel-body {
+ padding-bottom: var(--space-sm);
+}
+.traffic-chart {
+ display: block;
+ width: 100%;
+ max-width: 100%;
+ height: auto;
+ background: #050000;
+ border: 1px solid var(--border);
+ border-radius: var(--r);
+}
+.traffic-chart-legend {
+ display: flex;
+ flex-wrap: wrap;
+ gap: 1rem;
+ margin-top: var(--space-sm);
+ font-size: var(--fs-xs);
+ color: var(--muted);
+ font-family: var(--font-mono, ui-monospace, monospace);
+}
+.traffic-swatch {
+ display: inline-block;
+ width: 12px;
+ height: 12px;
+ border-radius: 2px;
+ margin-right: 4px;
+ vertical-align: -1px;
+}
+.traffic-swatch--hits { background: #39ff14; box-shadow: 0 0 6px rgba(57,255,20,.4); }
+.traffic-swatch--uniq { background: #5b9dff; box-shadow: 0 0 6px rgba(91,157,255,.35); }
+.traffic-swatch--bots { background: #ff9f1a; box-shadow: 0 0 6px rgba(255,159,26,.4); }
+.traffic-chart-row { margin-bottom: var(--space-md); }
+body.light-mode .traffic-swatch--bots { background: #a65c00; box-shadow: none; }
+
+body.light-mode .traffic-kpi {
+ background: #f8fbfd;
+}
+body.light-mode .traffic-kpi-val {
+ color: #1a7a12;
+ text-shadow: none;
+}
+body.light-mode .traffic-chart {
+ background: #f4f7fa;
+}