Files
2026-07-08 15:34:08 -05:00

708 lines
14 KiB
CSS

:root {
--accent: rgb(151, 110, 255);
--accent-dark: rgba(151, 110, 255, 0.5);
/* ImGui window chrome, straight from the original snippet */
--outer-fill: rgb(30, 30, 30);
--inner-fill: rgb(15, 15, 15);
--border-black: rgb(0, 0, 0);
--border-grey: rgb(46, 46, 46);
--outline: rgb(60, 60, 60);
--page-bg: #17171a;
--text: #ffffff;
--text-dim: rgb(150, 150, 155);
--text-dimmer: rgb(95, 95, 100);
}
* { box-sizing: border-box; }
html, body {
margin: 0;
padding: 0;
background: var(--page-bg);
}
body.is-loading {
overflow: hidden;
}
body {
color: var(--text);
/*font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif;
font-size: 13px;
text-shadow: 0 1px 0 rgba(0,0,0,0.8);*/
font-family: Tahoma, Geneva, sans-serif;
font-size: 13px;
text-rendering: optimizeSpeed;
-webkit-font-smoothing: none; /* mac webkit only, toggles grayscale vs subpixel */
font-smoothing: none;
padding-bottom: 96px;
}
a { color: var(--text); text-decoration: none; }
.loading-screen {
position: fixed;
inset: 0;
z-index: 100;
display: flex;
align-items: center;
justify-content: center;
pointer-events: none;
background: transparent;
}
.loading-bar-shell {
width: min(760px, calc(100vw - 16px));
background: var(--outer-fill);
border: 1px solid var(--border-black);
box-shadow: 0 0 0 2px var(--border-grey);
padding: 8px;
}
.loading-bar-row {
display: flex;
align-items: center;
justify-content: space-between;
gap: 12px;
margin-bottom: 8px;
font-size: 11px;
text-transform: lowercase;
letter-spacing: 0.5px;
}
.loading-label {
color: var(--accent);
font-weight: 700;
}
.loading-status {
color: var(--text-dimmer);
white-space: nowrap;
}
.loading-track {
height: 8px;
background: var(--inner-fill);
border: 1px solid var(--border-grey);
overflow: hidden;
}
.loading-fill {
width: 100%;
height: 100%;
background: linear-gradient(90deg, rgba(151, 110, 255, 0.25), var(--accent), rgba(151, 110, 255, 0.25));
transform-origin: left center;
animation: loading-fill 5s linear forwards;
}
@keyframes loading-fill {
from { transform: scaleX(0); }
to { transform: scaleX(1); }
}
body:not(.is-loading) .loading-screen {
display: none;
}
.page-container {
opacity: 1;
transform: translateY(0);
transition: opacity 450ms ease, transform 450ms ease;
will-change: opacity, transform;
}
body.is-loading .page-container {
opacity: 0;
transform: translateY(8px);
pointer-events: none;
}
body:not(.is-loading) .page-container {
opacity: 1;
transform: translateY(0);
}
::-webkit-scrollbar { width: 6px; height: 6px; }
::-webkit-scrollbar-thumb { background: var(--accent); border: 1px solid black; }
::-webkit-scrollbar-track { background: black; }
/* ============================================================
ImGui window chrome — the shared unit every section is built from.
outer fill (30,30,30) -> 1px top accent line -> inner fill (15,15,15)
with its own top accent line -> double border (black, then grey)
============================================================ */
.imgui-window {
position: relative;
background: var(--outer-fill);
border: 1px solid var(--border-black);
box-shadow: 0 0 0 2px var(--border-grey);
padding: 2px;
}
.imgui-window::before {
content: "";
position: absolute;
top: 2px; left: 2px; right: 2px;
height: 1px;
background: linear-gradient(to right, transparent, var(--accent), transparent);
}
.imgui-content {
position: relative;
background: var(--inner-fill);
border: 1px solid var(--border-grey);
padding: 8px;
}
.imgui-content::before {
content: "";
position: absolute;
top: 0; left: 2px; right: 2px;
height: 1px;
background: var(--accent);
}
.imgui-heading {
color: var(--accent);
font-size: 12px;
font-weight: 600;
text-transform: lowercase;
letter-spacing: 0.5px;
margin: 2px 0 8px 2px;
}
/* ============ NAV ============ */
.navigation-bar {
position: sticky;
top: 0;
z-index: 50;
margin: 8px 8px 0 8px;
}
.navigation-bar .imgui-content {
display: flex;
align-items: center;
padding: 6px 10px;
}
.navigation-logo {
width: 16px; height: 16px;
margin-right: 8px;
/* background: var(--accent); */
/* box-shadow: 0 0 8px 1px rgba(127,72,163,0.5); */
flex-shrink: 0;
}
.nav-spacer {
font-weight: 700;
letter-spacing: 0.4px;
margin-right: 10px;
}
.nav-date {
color: var(--text-dimmer);
font-size: 11.5px;
margin-right: 10px;
}
.nav-border {
width: 1px;
height: 16px;
background: var(--outline);
margin-right: 10px;
}
.nav-links {
display: flex;
align-items: center;
gap: 16px;
margin-left: auto;
}
.nav-link {
font-size: 12.5px;
color: var(--text-dim);
transition: color .1s ease;
}
.nav-link:hover { color: var(--accent); }
@media (max-width: 720px) {
.nav-links { display: none; }
}
/* ============ CONTAINER / LAYOUT ============ */
.page-container {
margin: 8px;
}
.sections-container {
display: flex;
flex-wrap: wrap;
gap: 10px;
margin-top: 10px;
}
@media (max-width: 900px) {
.sections-container { flex-direction: column; }
}
.left-section, .right-section {
display: flex;
flex-direction: column;
gap: 10px;
}
.left-section { flex: 1 1 55%; min-width: 320px; }
.right-section { flex: 1 1 38%; min-width: 260px; }
/* ============ LIST BOX (news / stats scroll areas) ============ */
.list-box {
max-height: 250px;
overflow-y: auto;
padding-right: 2px;
}
.item-card {
position: relative;
background: var(--outer-fill);
border: 1px solid var(--border-black);
box-shadow: 0 0 0 1px var(--border-grey);
padding: 8px 9px;
margin-bottom: 7px;
}
.item-card:last-child { margin-bottom: 0; }
.item-title {
font-weight: 600;
font-size: 12.5px;
margin: 0 0 3px 0;
}
.item-timestamp {
float: right;
color: var(--text-dimmer);
font-size: 10.5px;
font-weight: 400;
}
.item-content {
font-size: 12px;
color: var(--text-dim);
margin: 0;
line-height: 1.5;
}
/* ============ SERVICES STRIP ============ */
.services-strip {
display: flex;
gap: 8px;
overflow-x: auto;
padding-bottom: 2px;
}
.service-chip {
font-size: 11px;
color: var(--text-dim);
background: var(--outer-fill);
border: 1px solid var(--border-black);
box-shadow: 0 0 0 1px var(--border-grey);
padding: 6px 11px;
white-space: nowrap;
display: flex;
align-items: center;
gap: 6px;
}
.service-chip .dot {
width: 5px; height: 5px;
background: var(--accent);
box-shadow: 0 0 6px 0 rgba(127,72,163,0.6);
}
/* ============ STATS GRID ============ */
.stat-columns {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 8px;
}
@media (max-width: 680px) {
.stat-columns { grid-template-columns: 1fr; }
}
.stat-col-title {
font-size: 10.5px;
text-transform: lowercase;
letter-spacing: 0.5px;
color: var(--text-dimmer);
margin-bottom: 6px;
}
.stat-row {
display: flex;
justify-content: space-between;
font-size: 11.5px;
padding: 4px 6px;
background: var(--outer-fill);
border: 1px solid var(--border-black);
box-shadow: 0 0 0 1px var(--border-grey);
margin-bottom: 5px;
}
.stat-row:last-child { margin-bottom: 0; }
.stat-row .val { color: var(--text-dim); }
.stat-card {
background: var(--outer-fill);
border: 1px solid var(--border-black);
box-shadow: 0 0 0 1px var(--border-grey);
padding: 7px 9px;
margin-bottom: 6px;
}
.stat-card:last-child { margin-bottom: 0; }
.stat-card h4 {
margin: 0 0 4px 0;
font-size: 12px;
color: var(--accent);
}
.stat-card p {
margin: 0;
font-size: 10.5px;
color: var(--text-dim);
line-height: 1.6;
}
/* ============ MEDIA GRID ============ */
.media-grid {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 8px;
}
.media-item {
background: var(--outer-fill);
border: 1px solid var(--border-black);
box-shadow: 0 0 0 1px var(--border-grey);
padding: 6px;
}
.media-title {
font-size: 11px;
font-weight: 600;
margin: 0 0 5px 2px;
}
.img-embed {
position: relative;
aspect-ratio: 16/9;
background: repeating-linear-gradient(45deg, #101012 0, #101012 8px, #131316 8px, #131316 16px);
border: 1px solid var(--border-grey);
display: flex;
align-items: center;
justify-content: center;
color: var(--text-dimmer);
font-size: 10.5px;
}
/* ============ FOOTER ============ */
.footer {
position: fixed;
left: 8px;
right: 8px;
bottom: 8px;
margin: 0;
z-index: 40;
}
.footer .imgui-content {
display: flex;
align-items: center;
flex-wrap: wrap;
gap: 6px 0;
padding: 10px 14px;
}
.footer-tagline {
font-size: 11.5px;
color: var(--text-dimmer);
margin-right: 14px;
}
.footer-links {
display: flex;
gap: 16px;
margin-left: auto;
}
.footer-link {
font-size: 12px;
color: var(--text-dim);
transition: color .1s ease;
}
.footer-link:hover { color: var(--accent); }
/* ============ ADMIN PANEL ============ */
.admin-grid {
display: grid;
grid-template-columns: minmax(0, 1.15fr) minmax(300px, 0.85fr);
gap: 10px;
align-items: start;
}
@media (max-width: 980px) {
.admin-grid {
grid-template-columns: 1fr;
}
}
.admin-stack {
display: flex;
flex-direction: column;
gap: 10px;
}
.panel-row {
display: flex;
flex-wrap: wrap;
gap: 8px;
align-items: center;
justify-content: space-between;
margin-bottom: 10px;
}
.panel-note {
color: var(--text-dimmer);
font-size: 11px;
line-height: 1.5;
margin: 0;
}
.status-pill {
display: inline-flex;
align-items: center;
gap: 6px;
padding: 4px 8px;
border: 1px solid var(--border-black);
box-shadow: 0 0 0 1px var(--border-grey);
background: var(--outer-fill);
font-size: 11px;
color: var(--text-dim);
white-space: nowrap;
}
.status-pill .dot {
width: 6px;
height: 6px;
background: var(--accent);
box-shadow: 0 0 6px rgba(151, 110, 255, 0.55);
}
.admin-form {
display: grid;
gap: 8px;
}
.admin-form .field-grid {
display: grid;
grid-template-columns: repeat(2, minmax(0, 1fr));
gap: 8px;
}
@media (max-width: 560px) {
.admin-form .field-grid {
grid-template-columns: 1fr;
}
}
.field {
display: grid;
gap: 5px;
}
.field label {
font-size: 10.5px;
color: var(--text-dimmer);
text-transform: lowercase;
letter-spacing: 0.4px;
}
.field input,
.field select,
.field textarea {
width: 100%;
color: var(--text);
background: var(--outer-fill);
border: 1px solid var(--border-black);
box-shadow: 0 0 0 1px var(--border-grey);
padding: 8px 9px;
font: inherit;
resize: vertical;
}
.field textarea {
min-height: 92px;
}
.field input:focus,
.field select:focus,
.field textarea:focus,
.action-button:focus {
outline: 1px solid var(--accent);
outline-offset: 1px;
}
.action-button {
appearance: none;
border: 1px solid var(--border-black);
box-shadow: 0 0 0 1px var(--border-grey);
background: linear-gradient(to bottom, #2a2a2a, #1b1b1b);
color: var(--text);
padding: 8px 11px;
font: inherit;
font-size: 12px;
cursor: pointer;
}
.action-button:hover {
color: var(--accent);
}
.action-button.is-danger {
color: #ffb6b6;
}
.action-button.is-danger:hover {
color: #ff8080;
}
.action-button.is-inline {
padding: 5px 8px;
font-size: 11px;
}
.action-toolbar {
display: flex;
flex-wrap: wrap;
gap: 8px;
}
.record-list {
display: grid;
gap: 6px;
max-height: 280px;
overflow: auto;
padding-right: 2px;
}
.record-card {
display: grid;
gap: 6px;
background: var(--outer-fill);
border: 1px solid var(--border-black);
box-shadow: 0 0 0 1px var(--border-grey);
padding: 8px 9px;
}
.record-topline {
display: flex;
gap: 8px;
justify-content: space-between;
align-items: start;
}
.record-title {
margin: 0;
font-weight: 600;
font-size: 12px;
}
.record-meta {
margin: 0;
color: var(--text-dimmer);
font-size: 10.5px;
}
.record-body {
margin: 0;
color: var(--text-dim);
font-size: 11.5px;
line-height: 1.5;
white-space: pre-wrap;
word-break: break-word;
}
.admin-toast {
font-size: 11px;
color: var(--text-dimmer);
min-height: 1.3em;
}
.admin-toast.is-error {
color: #ff8d8d;
}
.admin-toast.is-success {
color: #8bd18b;
}
.mini-columns {
display: grid;
grid-template-columns: repeat(2, minmax(0, 1fr));
gap: 8px;
}
@media (max-width: 640px) {
.mini-columns {
grid-template-columns: 1fr;
}
}
.mini-card {
background: var(--outer-fill);
border: 1px solid var(--border-black);
box-shadow: 0 0 0 1px var(--border-grey);
padding: 8px 9px;
}
.mini-card h4 {
margin: 0 0 4px 0;
font-size: 12px;
color: var(--accent);
}
.mini-card p {
margin: 0;
font-size: 10.5px;
color: var(--text-dim);
line-height: 1.55;
}
.endpoint-list {
display: grid;
gap: 6px;
}
.endpoint-item {
display: flex;
gap: 8px;
justify-content: space-between;
align-items: center;
background: var(--outer-fill);
border: 1px solid var(--border-black);
box-shadow: 0 0 0 1px var(--border-grey);
padding: 6px 8px;
font-size: 11px;
}
.endpoint-item .route {
color: var(--accent);
white-space: nowrap;
}
.endpoint-item .desc {
color: var(--text-dimmer);
text-align: right;
}