Files
the-nexus/style.css
Alexander Whitestone b28490e8fe
Some checks failed
CI / validate (pull_request) Has been cancelled
feat: interactive portal previews on hover (#136)
- Load portals from portals.json and render as glowing 3D rings in scene
- Raycast on mousemove to detect portal hover
- Show tooltip card with portal name, description, destination URL, and screenshot
- Screenshot falls back to a colored radial-gradient placeholder if image missing
- Portals animate with slow Z-spin and opacity pulse each frame

Fixes #136
2026-03-24 00:05:25 -04:00

143 lines
2.4 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);
}
/* === PORTAL PREVIEW === */
.portal-preview {
position: fixed;
z-index: 100;
background: rgba(0, 0, 20, 0.93);
border: 1px solid var(--color-primary);
border-radius: 6px;
padding: 10px;
width: 224px;
pointer-events: none;
transition: opacity 0.18s ease;
box-shadow: 0 0 20px rgba(68, 136, 255, 0.3);
}
.portal-preview.hidden {
opacity: 0;
}
.portal-preview-screenshot {
width: 204px;
height: 120px;
border-radius: 4px;
overflow: hidden;
margin-bottom: 8px;
background: var(--color-secondary);
}
.portal-preview-screenshot img {
width: 100%;
height: 100%;
object-fit: cover;
display: block;
}
.portal-preview-placeholder {
width: 100%;
height: 100%;
display: flex;
align-items: center;
justify-content: center;
font-size: 11px;
letter-spacing: 0.08em;
text-transform: uppercase;
border: 1px solid transparent;
border-radius: 4px;
}
.portal-preview-name {
font-size: 13px;
font-weight: bold;
color: var(--color-text);
margin-bottom: 4px;
}
.portal-preview-desc {
font-size: 11px;
color: var(--color-text-muted);
margin-bottom: 6px;
line-height: 1.4;
}
.portal-preview-url {
font-size: 10px;
color: var(--color-primary);
opacity: 0.7;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
/* === 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;
}