Files
the-nexus/style.css
Alexander Whitestone fea13910a8
Some checks failed
CI / validate (pull_request) Failing after 22s
feat: add guestbook with localStorage persistence
Visitors can leave a short message (up to 140 chars) via a panel
toggled from the bottom-left corner. Entries are stored in
localStorage (capped at 20), displayed newest-first, and
HTML-escaped before rendering.

Fixes #135
2026-03-24 00:06:11 -04:00

242 lines
4.3 KiB
CSS

/* === DESIGN SYSTEM — NEXUS === */
:root {
--color-bg: #000008;
--color-primary: #4488ff;
--color-secondary: #334488;
--color-text: #ccd6f6;
--color-text-muted: #4a5568;
--font-body: 'Courier New', monospace;
}
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
background: var(--color-bg);
color: var(--color-text);
font-family: var(--font-body);
overflow: hidden;
width: 100vw;
height: 100vh;
}
canvas {
display: block;
position: fixed;
top: 0;
left: 0;
}
/* === HUD === */
.hud-controls {
z-index: 10;
}
/* === AUDIO TOGGLE === */
#audio-toggle {
font-size: 14px;
background-color: var(--color-primary);
color: var(--color-bg);
padding: 4px 8px;
border: none;
border-radius: 4px;
font-family: var(--font-body);
transition: background-color 0.3s ease;
cursor: pointer;
}
#audio-toggle:hover {
background-color: var(--color-secondary);
}
#audio-toggle.muted {
background-color: var(--color-text-muted);
}
/* === DEBUG MODE === */
#debug-toggle {
margin-left: 8px;
}
.collision-box {
outline: 2px solid red;
outline-offset: 2px;
}
.light-source {
outline: 2px dashed yellow;
outline-offset: 2px;
}
/* === OVERVIEW MODE === */
#overview-indicator {
display: none;
position: fixed;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
color: var(--color-primary);
font-family: var(--font-body);
font-size: 11px;
letter-spacing: 0.2em;
text-transform: uppercase;
pointer-events: none;
z-index: 20;
border: 1px solid var(--color-primary);
padding: 4px 10px;
background: rgba(0, 0, 8, 0.6);
white-space: nowrap;
animation: overview-pulse 2s ease-in-out infinite;
}
#overview-indicator.visible {
display: block;
}
.overview-hint {
margin-left: 12px;
color: var(--color-text-muted);
font-size: 10px;
}
@keyframes overview-pulse {
0%, 100% { opacity: 0.7; }
50% { opacity: 1; }
}
/* === GUESTBOOK === */
#guestbook-panel {
display: none;
position: fixed;
bottom: 56px;
left: 16px;
width: 280px;
max-height: 400px;
background: rgba(0, 0, 16, 0.88);
border: 1px solid var(--color-primary);
border-radius: 6px;
z-index: 30;
font-family: var(--font-body);
font-size: 12px;
color: var(--color-text);
box-shadow: 0 0 18px rgba(68, 136, 255, 0.18);
flex-direction: column;
}
#guestbook-panel.open {
display: flex;
}
#guestbook-header {
display: flex;
justify-content: space-between;
align-items: center;
padding: 8px 12px;
border-bottom: 1px solid var(--color-secondary);
letter-spacing: 0.15em;
color: var(--color-primary);
font-size: 11px;
text-transform: uppercase;
}
#guestbook-close {
background: none;
border: none;
color: var(--color-text-muted);
cursor: pointer;
font-size: 12px;
padding: 0 2px;
line-height: 1;
}
#guestbook-close:hover {
color: var(--color-text);
}
#guestbook-messages {
overflow-y: auto;
flex: 1;
padding: 8px 12px;
min-height: 60px;
max-height: 200px;
}
.guestbook-entry {
padding: 5px 0;
border-bottom: 1px solid rgba(51, 68, 136, 0.3);
}
.guestbook-entry:last-child {
border-bottom: none;
}
.guestbook-entry-name {
color: var(--color-primary);
font-size: 11px;
margin-bottom: 2px;
}
.guestbook-entry-msg {
color: var(--color-text);
font-size: 12px;
word-break: break-word;
}
.guestbook-empty {
color: var(--color-text-muted);
font-size: 11px;
text-align: center;
padding: 12px 0;
}
#guestbook-form {
display: flex;
flex-direction: column;
gap: 6px;
padding: 8px 12px;
border-top: 1px solid var(--color-secondary);
}
#guestbook-name,
#guestbook-msg {
background: rgba(0, 0, 16, 0.6);
border: 1px solid var(--color-secondary);
border-radius: 3px;
color: var(--color-text);
font-family: var(--font-body);
font-size: 12px;
padding: 5px 8px;
outline: none;
resize: none;
}
#guestbook-name:focus,
#guestbook-msg:focus {
border-color: var(--color-primary);
}
#guestbook-msg {
height: 56px;
}
#guestbook-form button[type="submit"] {
background-color: var(--color-primary);
color: var(--color-bg);
border: none;
border-radius: 3px;
padding: 5px 0;
font-family: var(--font-body);
font-size: 12px;
cursor: pointer;
letter-spacing: 0.1em;
transition: background-color 0.2s;
}
#guestbook-form button[type="submit"]:hover {
background-color: var(--color-secondary);
color: var(--color-text);
}