Connects the previously-disconnected /decode command to per-player messages: player 1 unlocks sudo for everyone, player 2 unlocks a scan command that reveals which files the AI virus has locked, player 3 learns those files should be removed. Also adds a retaliation mechanic: successfully removing a file locks the player's terminal. The AI virus locks it out in red immediately; the mainframe reveals a 12-character recovery code in green after 30 seconds, which can be submitted via /unlock to restore access early, otherwise the terminal auto-recovers after 45 seconds.
136 lines
2.5 KiB
CSS
136 lines
2.5 KiB
CSS
/* Styles specific to Game1 */
|
|
|
|
/* page-level indicator to confirm CSS is loaded */
|
|
/* Custom scrollbar for WebKit browsers */
|
|
html::-webkit-scrollbar,
|
|
body::-webkit-scrollbar {
|
|
width: 1px;
|
|
}
|
|
|
|
html::-webkit-scrollbar-track,
|
|
body::-webkit-scrollbar-track {
|
|
background: #000;
|
|
}
|
|
|
|
html::-webkit-scrollbar-thumb,
|
|
body::-webkit-scrollbar-thumb {
|
|
background: #F00;
|
|
}
|
|
|
|
/* Standard properties for Firefox */
|
|
body {
|
|
background-color: #000;
|
|
min-height: 100vh;
|
|
font-family: monospace;
|
|
margin: 0;
|
|
scrollbar-width: thin;
|
|
scrollbar-color: #F00 #000;
|
|
}
|
|
|
|
div#game-timer {
|
|
position: fixed;
|
|
top: 0;
|
|
left: 0;
|
|
width: 100%;
|
|
padding: 20px;
|
|
background-color: #000;
|
|
color: #F00;
|
|
font-size: 28px;
|
|
z-index: 100;
|
|
}
|
|
|
|
div#message-container {
|
|
padding: 20px;
|
|
padding-top: 80px; /* Space for fixed timer */
|
|
display: flex;
|
|
flex-direction: column;
|
|
justify-content: flex-end;
|
|
min-height: calc(100vh - 100px); /* Fill most of the viewport initially */
|
|
box-sizing: border-box;
|
|
font-size: 20px;
|
|
}
|
|
|
|
div.message {
|
|
color: #C0C0C0;
|
|
white-space: pre-wrap;
|
|
}
|
|
|
|
div.message-virus {
|
|
color: #F00;
|
|
font-weight: bold;
|
|
}
|
|
|
|
div.message-mainframe {
|
|
color: #0F0;
|
|
}
|
|
|
|
div#lock-banner {
|
|
position: fixed;
|
|
top: 68px;
|
|
left: 0;
|
|
width: 100%;
|
|
padding: 12px 20px;
|
|
background-color: #200;
|
|
border-top: 1px solid #F00;
|
|
border-bottom: 1px solid #F00;
|
|
color: #F00;
|
|
font-size: 18px;
|
|
font-weight: bold;
|
|
letter-spacing: 1px;
|
|
z-index: 99;
|
|
display: flex;
|
|
justify-content: space-between;
|
|
align-items: center;
|
|
animation: lock-banner-pulse 1s ease-in-out infinite;
|
|
}
|
|
|
|
@keyframes lock-banner-pulse {
|
|
0%, 100% {
|
|
background-color: #200;
|
|
}
|
|
50% {
|
|
background-color: #400;
|
|
}
|
|
}
|
|
|
|
body.locked div#message-container {
|
|
padding-top: 130px;
|
|
}
|
|
|
|
div#input {
|
|
padding: 20px;
|
|
}
|
|
|
|
input#input-message {
|
|
width: 100%;
|
|
padding: 10px;
|
|
background: #111;
|
|
border: 1px solid #A00000;
|
|
color: #C0C0C0;
|
|
font-size: 18px;
|
|
box-sizing: border-box;
|
|
font-family: monospace;
|
|
}
|
|
|
|
.flash-red::after {
|
|
content: '';
|
|
position: fixed;
|
|
bottom: 0;
|
|
left: 0;
|
|
right: 0;
|
|
height: 100px;
|
|
pointer-events: none;
|
|
background: linear-gradient(to top, rgba(255, 0, 0, 0.8), transparent);
|
|
animation: flash-red-anim 0.1s linear forwards;
|
|
z-index: 9999;
|
|
}
|
|
|
|
@keyframes flash-red-anim {
|
|
0% {
|
|
opacity: 1;
|
|
}
|
|
100% {
|
|
opacity: 0;
|
|
}
|
|
}
|