Some checks failed
CI / validate (pull_request) Failing after 16s
- Build complete Three.js scene with stars, fog, grid and portal rings loaded from portals.json - Each portal has a canvas-rendered holographic sign showing name, description and status, colour-matched to the portal colour - Signs float up/down, pulse opacity, and have a drifting scanline overlay for a holographic look - Portal rings spin slowly; point lights pulse intensity in sync - Vertical connecting beam links each sign to its portal ring - Full HTML with Three.js import map (v0.183), HUD elements, CSS design system with dark-space theme and CSS variables Fixes #108
115 lines
2.2 KiB
CSS
115 lines
2.2 KiB
CSS
/* === DESIGN SYSTEM: NEXUS — DARK SPACE THEME === */
|
|
|
|
:root {
|
|
--color-bg: #000814;
|
|
--color-primary: #00f5ff;
|
|
--color-secondary: #7b00ff;
|
|
--color-accent: #ff006e;
|
|
--color-text: #e0e0e0;
|
|
--color-text-muted: #888888;
|
|
--color-panel-bg: rgba(0, 8, 20, 0.82);
|
|
--color-panel-border: rgba(0, 245, 255, 0.3);
|
|
|
|
--font-body: "Courier New", "Courier", monospace;
|
|
--font-display: "Courier New", "Courier", monospace;
|
|
}
|
|
|
|
*, *::before, *::after {
|
|
box-sizing: border-box;
|
|
}
|
|
|
|
html, body {
|
|
margin: 0;
|
|
padding: 0;
|
|
width: 100%;
|
|
height: 100%;
|
|
overflow: hidden;
|
|
background: var(--color-bg);
|
|
color: var(--color-text);
|
|
font-family: var(--font-body);
|
|
}
|
|
|
|
/* Three.js canvas fills the viewport */
|
|
canvas {
|
|
display: block;
|
|
position: fixed;
|
|
top: 0; left: 0;
|
|
width: 100%;
|
|
height: 100%;
|
|
z-index: 0;
|
|
}
|
|
|
|
/* === HUD PANELS === */
|
|
.hud-panel {
|
|
position: fixed;
|
|
z-index: 10;
|
|
background: var(--color-panel-bg);
|
|
border: 1px solid var(--color-panel-border);
|
|
border-radius: 4px;
|
|
padding: 6px 14px;
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: 2px;
|
|
pointer-events: none;
|
|
backdrop-filter: blur(4px);
|
|
}
|
|
|
|
#hud-title {
|
|
top: 14px;
|
|
left: 14px;
|
|
}
|
|
|
|
.hud-label {
|
|
font-size: 13px;
|
|
font-weight: bold;
|
|
color: var(--color-primary);
|
|
letter-spacing: 0.12em;
|
|
text-shadow: 0 0 8px var(--color-primary);
|
|
}
|
|
|
|
.hud-sub {
|
|
font-size: 10px;
|
|
color: var(--color-text-muted);
|
|
letter-spacing: 0.06em;
|
|
}
|
|
|
|
.hud-bottom {
|
|
bottom: 14px;
|
|
left: 50%;
|
|
transform: translateX(-50%);
|
|
flex-direction: row;
|
|
align-items: center;
|
|
gap: 8px;
|
|
}
|
|
|
|
/* === AUDIO TOGGLE === */
|
|
.hud-controls {
|
|
position: fixed;
|
|
top: 14px;
|
|
right: 14px;
|
|
z-index: 10;
|
|
}
|
|
|
|
#audio-toggle {
|
|
font-size: 14px;
|
|
background: var(--color-panel-bg);
|
|
color: var(--color-primary);
|
|
border: 1px solid var(--color-panel-border);
|
|
padding: 5px 10px;
|
|
border-radius: 4px;
|
|
font-family: var(--font-body);
|
|
cursor: pointer;
|
|
transition: background-color 0.2s, box-shadow 0.2s;
|
|
backdrop-filter: blur(4px);
|
|
}
|
|
|
|
#audio-toggle:hover {
|
|
background: rgba(0, 245, 255, 0.1);
|
|
box-shadow: 0 0 10px var(--color-primary);
|
|
}
|
|
|
|
#audio-toggle.muted {
|
|
color: var(--color-text-muted);
|
|
border-color: rgba(136, 136, 136, 0.3);
|
|
}
|