- Game1 terminal: flesh out the virtual filesystem with a realistic spread of Linux directories/files (~70 dirs, ~140 files) so it no longer reads as an obviously small puzzle set, without touching any win-condition or rapport files. - Add app:hints:check command + a php-cron container (BusyBox crond) that nudges players who haven't contacted every teammate 5 minutes into a session, via a new 'hint' Mercure message type. - Log the cron command's output to var/log/cron/cron.log and rotate it (25MB / 90 days) via logrotate, run daily from the same crontab. - Redirect PHP's error_log and Symfony's prod app/deprecation logs from stderr-only into var/log/php/*.log (kept alongside stderr), with the same rotation policy. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
143 lines
2.6 KiB
CSS
143 lines
2.6 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: 14px;
|
|
}
|
|
|
|
div.message {
|
|
color: #C0C0C0;
|
|
white-space: pre-wrap;
|
|
line-height: 1.35;
|
|
margin-bottom: 2px;
|
|
}
|
|
|
|
div.message-virus {
|
|
color: #F00;
|
|
font-weight: bold;
|
|
}
|
|
|
|
div.message-mainframe {
|
|
color: #0F0;
|
|
}
|
|
|
|
div.message-hint {
|
|
color: #FF0;
|
|
font-weight: bold;
|
|
}
|
|
|
|
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: 6px 10px;
|
|
background: #111;
|
|
border: 1px solid #A00000;
|
|
color: #C0C0C0;
|
|
font-size: 14px;
|
|
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;
|
|
}
|
|
}
|