Merge branch 'develop'

This commit is contained in:
Dan 2026-01-03 13:03:13 +00:00
commit ab9e348410
10 changed files with 674 additions and 680 deletions

View file

@ -0,0 +1,236 @@
@keyframes flicker {
0% {
opacity: 0.27861;
}
5% {
opacity: 0.34769;
}
10% {
opacity: 0.23604;
}
15% {
opacity: 0.90626;
}
20% {
opacity: 0.18128;
}
25% {
opacity: 0.83891;
}
30% {
opacity: 0.65583;
}
35% {
opacity: 0.67807;
}
40% {
opacity: 0.26559;
}
45% {
opacity: 0.84693;
}
50% {
opacity: 0.96019;
}
55% {
opacity: 0.08594;
}
60% {
opacity: 0.20313;
}
65% {
opacity: 0.71988;
}
70% {
opacity: 0.53455;
}
75% {
opacity: 0.37288;
}
80% {
opacity: 0.71428;
}
85% {
opacity: 0.70419;
}
90% {
opacity: 0.7003;
}
95% {
opacity: 0.36108;
}
100% {
opacity: 0.24387;
}
}
@keyframes textShadow {
0% {
text-shadow:
0.4389924193300864px 0 1px rgba(0, 30, 255, 0.5),
-0.4389924193300864px 0 1px rgba(255, 0, 80, 0.3),
0 0 3px;
}
5% {
text-shadow:
2.7928974010788217px 0 1px rgba(0, 30, 255, 0.5),
-2.7928974010788217px 0 1px rgba(255, 0, 80, 0.3),
0 0 3px;
}
10% {
text-shadow:
0.02956275843481219px 0 1px rgba(0, 30, 255, 0.5),
-0.02956275843481219px 0 1px rgba(255, 0, 80, 0.3),
0 0 3px;
}
15% {
text-shadow:
0.40218538552878136px 0 1px rgba(0, 30, 255, 0.5),
-0.40218538552878136px 0 1px rgba(255, 0, 80, 0.3),
0 0 3px;
}
20% {
text-shadow:
3.4794037899852017px 0 1px rgba(0, 30, 255, 0.5),
-3.4794037899852017px 0 1px rgba(255, 0, 80, 0.3),
0 0 3px;
}
25% {
text-shadow:
1.6125630401149584px 0 1px rgba(0, 30, 255, 0.5),
-1.6125630401149584px 0 1px rgba(255, 0, 80, 0.3),
0 0 3px;
}
30% {
text-shadow:
0.7015590085143956px 0 1px rgba(0, 30, 255, 0.5),
-0.7015590085143956px 0 1px rgba(255, 0, 80, 0.3),
0 0 3px;
}
35% {
text-shadow:
3.896914047650351px 0 1px rgba(0, 30, 255, 0.5),
-3.896914047650351px 0 1px rgba(255, 0, 80, 0.3),
0 0 3px;
}
40% {
text-shadow:
3.870905614848819px 0 1px rgba(0, 30, 255, 0.5),
-3.870905614848819px 0 1px rgba(255, 0, 80, 0.3),
0 0 3px;
}
45% {
text-shadow:
2.231056963361899px 0 1px rgba(0, 30, 255, 0.5),
-2.231056963361899px 0 1px rgba(255, 0, 80, 0.3),
0 0 3px;
}
50% {
text-shadow:
0.08084290417898504px 0 1px rgba(0, 30, 255, 0.5),
-0.08084290417898504px 0 1px rgba(255, 0, 80, 0.3),
0 0 3px;
}
55% {
text-shadow:
2.3758461067427543px 0 1px rgba(0, 30, 255, 0.5),
-2.3758461067427543px 0 1px rgba(255, 0, 80, 0.3),
0 0 3px;
}
60% {
text-shadow:
2.202193051050636px 0 1px rgba(0, 30, 255, 0.5),
-2.202193051050636px 0 1px rgba(255, 0, 80, 0.3),
0 0 3px;
}
65% {
text-shadow:
2.8638780614874975px 0 1px rgba(0, 30, 255, 0.5),
-2.8638780614874975px 0 1px rgba(255, 0, 80, 0.3),
0 0 3px;
}
70% {
text-shadow:
0.48874025155497314px 0 1px rgba(0, 30, 255, 0.5),
-0.48874025155497314px 0 1px rgba(255, 0, 80, 0.3),
0 0 3px;
}
75% {
text-shadow:
1.8948491305757957px 0 1px rgba(0, 30, 255, 0.5),
-1.8948491305757957px 0 1px rgba(255, 0, 80, 0.3),
0 0 3px;
}
80% {
text-shadow:
0.0833037308038857px 0 1px rgba(0, 30, 255, 0.5),
-0.0833037308038857px 0 1px rgba(255, 0, 80, 0.3),
0 0 3px;
}
85% {
text-shadow:
0.09769827255241735px 0 1px rgba(0, 30, 255, 0.5),
-0.09769827255241735px 0 1px rgba(255, 0, 80, 0.3),
0 0 3px;
}
90% {
text-shadow:
3.443339761481782px 0 1px rgba(0, 30, 255, 0.5),
-3.443339761481782px 0 1px rgba(255, 0, 80, 0.3),
0 0 3px;
}
95% {
text-shadow:
2.1841838852799786px 0 1px rgba(0, 30, 255, 0.5),
-2.1841838852799786px 0 1px rgba(255, 0, 80, 0.3),
0 0 3px;
}
100% {
text-shadow:
2.6208764473832513px 0 1px rgba(0, 30, 255, 0.5),
-2.6208764473832513px 0 1px rgba(255, 0, 80, 0.3),
0 0 3px;
}
}
@keyframes pulse {
0%,
100% {
opacity: 1;
box-shadow:
0 0 10px #0f0,
0 0 20px #0f0;
}
50% {
opacity: 0.5;
box-shadow:
0 0 5px #0f0,
0 0 10px #0f0;
}
}
@keyframes text-glitch-cycle {
0%,
6.67% {
text-shadow:
-2px 0 #f0f,
2px 0 #0ff;
transform: translate(0, 0);
}
13.33% {
text-shadow:
2px 0 #f0f,
-2px 0 #0ff;
transform: translate(-3px, 2px);
}
20% {
text-shadow:
-1px 0 #f0f,
1px 0 #0ff;
transform: translate(3px, -2px);
}
26.67%,
100% {
text-shadow: none;
transform: translate(0, 0);
}
}

View file

@ -1,4 +1,3 @@
// Define your breakpoints
$breakpoints: ( $breakpoints: (
xs: 0, xs: 0,
sm: 576px, sm: 576px,

View file

@ -0,0 +1,222 @@
.homepage-container {
position: relative;
z-index: 10;
display: grid;
grid-template-columns: 1fr;
padding-top: 200px;
> div {
display: grid;
align-items: center;
justify-content: center;
@include media-up(lg) {
justify-content: left;
}
&:first-child {
@include media-up(lg) {
justify-content: right;
}
}
}
@include media-up(md) {
grid-template-columns: 1fr auto 1fr;
}
@include media-down(lg) {
padding-top: 50px;
grid-template-columns: 1fr 1fr;
}
.monitor-stand {
position: absolute;
background: none;
box-shadow: none;
bottom: -80px;
left: 50%;
transform: translateX(-50%);
width: 120px;
height: 80px;
z-index: -1;
}
.secondary-screen {
position: relative;
display: block;
border-radius: 8px;
z-index: 6;
padding: 8px 10px 20px 10px;
margin: auto;
text-decoration: none !important;
background: linear-gradient(145deg, #d8d0b8, #b8b098);
box-shadow:
0 8px 20px rgba(0, 0, 0, 0.7),
inset 0 2px 4px rgba(255, 255, 255, 0.3),
inset 0 -2px 4px rgba(0, 0, 0, 0.3);
padding: 6px 8px 18px 8px;
}
.updates-monitor {
width: 200px;
height: 200px;
padding: 5px 7px 15px 7px;
@include media-up(lg) {
margin-right: 10px;
}
&::after {
content: "";
position: absolute;
bottom: 4px;
right: 7px;
width: 4px;
height: 4px;
background: #0f0;
border-radius: 50%;
box-shadow: 0 0 6px #0f0;
animation: pulse 2s ease-in-out infinite;
}
}
.wall-monitor-4 {
width: 300px;
height: 225px;
transform: rotate(-1deg);
}
.wall-monitor-4::after {
content: "";
position: absolute;
bottom: 4px;
right: 7px;
width: 4px;
height: 4px;
background: #fa0;
border-radius: 50%;
box-shadow: 0 0 6px #fa0;
animation: pulse 2.1s ease-in-out infinite;
}
.wall-monitor-2 {
width: 300px;
height: 245px;
transform: rotate(-1deg);
}
.wall-monitor-2::after {
content: "";
position: absolute;
bottom: 5px;
right: 8px;
width: 5px;
height: 5px;
background: #0ff;
border-radius: 50%;
box-shadow: 0 0 6px #0ff;
animation: pulse 1.8s ease-in-out infinite;
}
.blog-monitor {
width: 195px;
height: 140px;
transform: rotate(1deg);
@include media-up(lg) {
margin-left: 10px;
}
.screen-display {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
}
&::after {
content: "";
position: absolute;
bottom: 5px;
right: 8px;
width: 5px;
height: 5px;
background: #f00;
border-radius: 50%;
box-shadow: 0 0 6px #f00;
animation: pulse 2.3s ease-in-out infinite;
}
&:hover pre {
animation: text-glitch-cycle 3s ease infinite;
}
}
}
.navigation {
position: relative;
z-index: 999;
display: grid;
grid-template-columns: 1fr 1fr;
@include media-up(lg) {
grid-template-columns: repeat(4, 1fr);
}
> div {
width: 100%;
margin: 20px auto 20px auto;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
}
.time-display {
width: 150px;
margin: auto;
padding: 0.5em;
background: linear-gradient(180deg, #2a2a2a 0%, #1a1a1a 100%);
border: 1px solid #333;
box-shadow:
0 2px 8px rgba(0, 0, 0, 0.5),
inset 0 1px 2px rgba(255, 255, 255, 0.1);
border-radius: 1em;
cursor: pointer;
&::after {
content: "Interests and Tools";
position: absolute;
width: 150px;
color: white;
font-size: 20px;
font-weight: bold;
z-index: 8000;
transform: rotate(-10deg);
border: 1px solid #0f0;
padding: 2px;
padding-left: 5px;
padding-right: 5px;
border-radius: 5px;
background-color: rgba(0, 0, 0, 0.7);
opacity: 0;
transition: opacity 0.3s ease;
text-align: center;
@include media-down(lg) {
margin-left: -0.5em;
opacity: 1;
bottom: 0;
font-size: 20px;
}
}
&:hover::after {
opacity: 1;
}
}
}

View file

@ -39,7 +39,9 @@
height: 4px; height: 4px;
background: #ff0000; background: #ff0000;
border-radius: 50%; border-radius: 50%;
box-shadow: 0 0 6px #ff0000, 0 0 3px #ff0000; box-shadow:
0 0 6px #ff0000,
0 0 3px #ff0000;
animation: pulse 2s ease-in-out infinite; animation: pulse 2s ease-in-out infinite;
} }
@ -94,8 +96,10 @@
width: 100%; width: 100%;
height: 100%; height: 100%;
background: background:
repeating-radial-gradient(#000 0 0.0001%, #aaa 0 0.0002%) 50% 0/2500px 2500px, repeating-radial-gradient(#000 0 0.0001%, #aaa 0 0.0002%) 50% 0/2500px
repeating-conic-gradient(#000 0 0.0001%, #999 0 0.0002%) 60% 60%/2500px 2500px; 2500px,
repeating-conic-gradient(#000 0 0.0001%, #999 0 0.0002%) 60% 60%/2500px
2500px;
background-blend-mode: difference; background-blend-mode: difference;
transition: opacity 0.3s ease; transition: opacity 0.3s ease;
animation: tv-static-noise 0.2s infinite alternate; animation: tv-static-noise 0.2s infinite alternate;
@ -103,7 +107,11 @@
} }
@keyframes tv-static-noise { @keyframes tv-static-noise {
100% { background-position: 50% 0, 60% 50%; } 100% {
background-position:
50% 0,
60% 50%;
}
} }
.tv-static::before { .tv-static::before {
@ -131,7 +139,12 @@
left: 0; left: 0;
width: 100%; width: 100%;
height: 100%; height: 100%;
background: linear-gradient(0deg, transparent 94%, rgba(255,255,255,0.08) 96%, transparent 98%); background: linear-gradient(
0deg,
transparent 94%,
rgba(255, 255, 255, 0.08) 96%,
transparent 98%
);
animation: interference-scan 1.5s linear infinite; animation: interference-scan 1.5s linear infinite;
mix-blend-mode: screen; mix-blend-mode: screen;
z-index: 3; z-index: 3;
@ -163,6 +176,15 @@
letter-spacing: 1px; letter-spacing: 1px;
z-index: 2; z-index: 2;
white-space: nowrap; white-space: nowrap;
@include media-down(lg) {
opacity: 1;
z-index: 100;
color: #000;
text-shadow:
0 0 4px #fff,
0 0 2px #fff;
}
} }
.crt-tv:hover .tv-static { .crt-tv:hover .tv-static {
@ -172,7 +194,9 @@
.crt-tv:hover .tv-text { .crt-tv:hover .tv-text {
opacity: 1; opacity: 1;
animation: glitch-in 0.3s ease forwards, tv-text-glitch-cycle 3s ease 0.3s infinite; animation:
glitch-in 0.3s ease forwards,
tv-text-glitch-cycle 3s ease 0.3s infinite;
} }
@keyframes glitch-out { @keyframes glitch-out {
@ -206,22 +230,30 @@
0% { 0% {
opacity: 0; opacity: 0;
transform: translate(-50%, -50%) translate(-3px, 2px); transform: translate(-50%, -50%) translate(-3px, 2px);
text-shadow: -2px 0 #f0f, 2px 0 #0ff; text-shadow:
-2px 0 #f0f,
2px 0 #0ff;
} }
20% { 20% {
opacity: 0.3; opacity: 0.3;
transform: translate(-50%, -50%) translate(2px, -2px); transform: translate(-50%, -50%) translate(2px, -2px);
text-shadow: 2px 0 #f0f, -2px 0 #0ff; text-shadow:
2px 0 #f0f,
-2px 0 #0ff;
} }
40% { 40% {
opacity: 0.6; opacity: 0.6;
transform: translate(-50%, -50%) translate(-1px, 1px); transform: translate(-50%, -50%) translate(-1px, 1px);
text-shadow: 1px 0 #f0f, -1px 0 #0ff; text-shadow:
1px 0 #f0f,
-1px 0 #0ff;
} }
60% { 60% {
opacity: 0.8; opacity: 0.8;
transform: translate(-50%, -50%) translate(1px, -1px); transform: translate(-50%, -50%) translate(1px, -1px);
text-shadow: -1px 0 #f0f, 1px 0 #0ff; text-shadow:
-1px 0 #f0f,
1px 0 #0ff;
} }
80% { 80% {
opacity: 0.9; opacity: 0.9;
@ -236,7 +268,8 @@
} }
@keyframes tv-text-glitch-cycle { @keyframes tv-text-glitch-cycle {
0%, 6.67% { 0%,
6.67% {
text-shadow: text-shadow:
-2px 0 #f0f, -2px 0 #f0f,
2px 0 #0ff, 2px 0 #0ff,
@ -260,7 +293,8 @@
0 0 4px #0f0; 0 0 4px #0f0;
transform: translate(-50%, -50%) translate(3px, -2px); transform: translate(-50%, -50%) translate(3px, -2px);
} }
26.67%, 100% { 26.67%,
100% {
text-shadow: text-shadow:
0 0 8px #0f0, 0 0 8px #0f0,
0 0 4px #0f0; 0 0 4px #0f0;

View file

@ -12,6 +12,10 @@ footer[role="contentinfo"] {
border-left: 1px solid #0f0; border-left: 1px solid #0f0;
border-top-left-radius: 5px; border-top-left-radius: 5px;
@include media-down(lg) {
display: none;
}
a { a {
color: #0f0; color: #0f0;
text-decoration: none; text-decoration: none;

View file

@ -1,7 +1,4 @@
.music { .music {
// position: absolute;
// bottom: 15%;
// right: 27%;
cursor: pointer; cursor: pointer;
position: relative; position: relative;
height: 100px; height: 100px;
@ -29,7 +26,7 @@
@include media-down(lg) { @include media-down(lg) {
opacity: 1; opacity: 1;
transform: rotate(0deg); //transform: rotate(0deg);
bottom: 0; bottom: 0;
font-size: 14px; font-size: 14px;
} }

View file

@ -1,12 +1,16 @@
/* Neon sign styling */ /* Neon sign styling */
.neon-sign { .neon-sign {
position: absolute;
top: 5%;
left: 60%;
transform: translateX(-50%) rotate(-10deg);
z-index: 1;
text-align: center; text-align: center;
line-height: 5rem; line-height: 5rem;
transform: rotate(-10deg);
@include media-up(lg) {
position: absolute;
top: 5%;
left: 60%;
transform: translateX(-50%) rotate(-10deg);
z-index: 1;
}
> .neon-text { > .neon-text {
font-family: "Neonderthaw", cursive; font-family: "Neonderthaw", cursive;

View file

@ -1,7 +1,7 @@
/* VU Meter on desk */ /* VU Meter on desk */
.vu-meter { .vu-meter {
position: absolute; position: absolute;
left: 90px; left: 50%;
top: 10px; top: 10px;
width: 120px; width: 120px;
height: 60px; height: 60px;

View file

@ -1,5 +1,6 @@
@import "normalize"; @import "normalize";
@import "mixins"; @import "mixins";
@import "animations";
@import "partials/global-styles"; @import "partials/global-styles";
@ -16,6 +17,7 @@
@import "partials/content-screens"; @import "partials/content-screens";
@import "pages/homepage";
@import "pages/about"; @import "pages/about";
@import "pages/audio"; @import "pages/audio";
@import "pages/now"; @import "pages/now";
@ -58,203 +60,10 @@ body {
position: relative; position: relative;
} }
.latest-post { #latest-post {
display: none; display: none;
} }
@keyframes flicker {
0% {
opacity: 0.27861;
}
5% {
opacity: 0.34769;
}
10% {
opacity: 0.23604;
}
15% {
opacity: 0.90626;
}
20% {
opacity: 0.18128;
}
25% {
opacity: 0.83891;
}
30% {
opacity: 0.65583;
}
35% {
opacity: 0.67807;
}
40% {
opacity: 0.26559;
}
45% {
opacity: 0.84693;
}
50% {
opacity: 0.96019;
}
55% {
opacity: 0.08594;
}
60% {
opacity: 0.20313;
}
65% {
opacity: 0.71988;
}
70% {
opacity: 0.53455;
}
75% {
opacity: 0.37288;
}
80% {
opacity: 0.71428;
}
85% {
opacity: 0.70419;
}
90% {
opacity: 0.7003;
}
95% {
opacity: 0.36108;
}
100% {
opacity: 0.24387;
}
}
@keyframes textShadow {
0% {
text-shadow:
0.4389924193300864px 0 1px rgba(0, 30, 255, 0.5),
-0.4389924193300864px 0 1px rgba(255, 0, 80, 0.3),
0 0 3px;
}
5% {
text-shadow:
2.7928974010788217px 0 1px rgba(0, 30, 255, 0.5),
-2.7928974010788217px 0 1px rgba(255, 0, 80, 0.3),
0 0 3px;
}
10% {
text-shadow:
0.02956275843481219px 0 1px rgba(0, 30, 255, 0.5),
-0.02956275843481219px 0 1px rgba(255, 0, 80, 0.3),
0 0 3px;
}
15% {
text-shadow:
0.40218538552878136px 0 1px rgba(0, 30, 255, 0.5),
-0.40218538552878136px 0 1px rgba(255, 0, 80, 0.3),
0 0 3px;
}
20% {
text-shadow:
3.4794037899852017px 0 1px rgba(0, 30, 255, 0.5),
-3.4794037899852017px 0 1px rgba(255, 0, 80, 0.3),
0 0 3px;
}
25% {
text-shadow:
1.6125630401149584px 0 1px rgba(0, 30, 255, 0.5),
-1.6125630401149584px 0 1px rgba(255, 0, 80, 0.3),
0 0 3px;
}
30% {
text-shadow:
0.7015590085143956px 0 1px rgba(0, 30, 255, 0.5),
-0.7015590085143956px 0 1px rgba(255, 0, 80, 0.3),
0 0 3px;
}
35% {
text-shadow:
3.896914047650351px 0 1px rgba(0, 30, 255, 0.5),
-3.896914047650351px 0 1px rgba(255, 0, 80, 0.3),
0 0 3px;
}
40% {
text-shadow:
3.870905614848819px 0 1px rgba(0, 30, 255, 0.5),
-3.870905614848819px 0 1px rgba(255, 0, 80, 0.3),
0 0 3px;
}
45% {
text-shadow:
2.231056963361899px 0 1px rgba(0, 30, 255, 0.5),
-2.231056963361899px 0 1px rgba(255, 0, 80, 0.3),
0 0 3px;
}
50% {
text-shadow:
0.08084290417898504px 0 1px rgba(0, 30, 255, 0.5),
-0.08084290417898504px 0 1px rgba(255, 0, 80, 0.3),
0 0 3px;
}
55% {
text-shadow:
2.3758461067427543px 0 1px rgba(0, 30, 255, 0.5),
-2.3758461067427543px 0 1px rgba(255, 0, 80, 0.3),
0 0 3px;
}
60% {
text-shadow:
2.202193051050636px 0 1px rgba(0, 30, 255, 0.5),
-2.202193051050636px 0 1px rgba(255, 0, 80, 0.3),
0 0 3px;
}
65% {
text-shadow:
2.8638780614874975px 0 1px rgba(0, 30, 255, 0.5),
-2.8638780614874975px 0 1px rgba(255, 0, 80, 0.3),
0 0 3px;
}
70% {
text-shadow:
0.48874025155497314px 0 1px rgba(0, 30, 255, 0.5),
-0.48874025155497314px 0 1px rgba(255, 0, 80, 0.3),
0 0 3px;
}
75% {
text-shadow:
1.8948491305757957px 0 1px rgba(0, 30, 255, 0.5),
-1.8948491305757957px 0 1px rgba(255, 0, 80, 0.3),
0 0 3px;
}
80% {
text-shadow:
0.0833037308038857px 0 1px rgba(0, 30, 255, 0.5),
-0.0833037308038857px 0 1px rgba(255, 0, 80, 0.3),
0 0 3px;
}
85% {
text-shadow:
0.09769827255241735px 0 1px rgba(0, 30, 255, 0.5),
-0.09769827255241735px 0 1px rgba(255, 0, 80, 0.3),
0 0 3px;
}
90% {
text-shadow:
3.443339761481782px 0 1px rgba(0, 30, 255, 0.5),
-3.443339761481782px 0 1px rgba(255, 0, 80, 0.3),
0 0 3px;
}
95% {
text-shadow:
2.1841838852799786px 0 1px rgba(0, 30, 255, 0.5),
-2.1841838852799786px 0 1px rgba(255, 0, 80, 0.3),
0 0 3px;
}
100% {
text-shadow:
2.6208764473832513px 0 1px rgba(0, 30, 255, 0.5),
-2.6208764473832513px 0 1px rgba(255, 0, 80, 0.3),
0 0 3px;
}
}
.crt::after { .crt::after {
content: " "; content: " ";
display: block; display: block;
@ -681,33 +490,6 @@ body {
} }
/* CRT Monitor container */ /* CRT Monitor container */
.crt-container {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
z-index: 10;
@include media-down(lg) {
position: relative;
transform: none;
top: auto;
left: auto;
}
/* Monitor stand */
> .monitor-stand {
position: absolute;
background: none;
box-shadow: none;
bottom: -80px;
left: 50%;
transform: translateX(-50%);
width: 120px;
height: 80px;
z-index: -1;
}
}
/* CRT Monitor bezel */ /* CRT Monitor bezel */
.crt-monitor { .crt-monitor {
@ -762,22 +544,6 @@ body {
animation: pulse 2s ease-in-out infinite; animation: pulse 2s ease-in-out infinite;
} }
@keyframes pulse {
0%,
100% {
opacity: 1;
box-shadow:
0 0 10px #0f0,
0 0 20px #0f0;
}
50% {
opacity: 0.5;
box-shadow:
0 0 5px #0f0,
0 0 10px #0f0;
}
}
/* Stand neck */ /* Stand neck */
.stand-neck { .stand-neck {
width: 40px; width: 40px;
@ -1046,7 +812,6 @@ body {
z-index: 7; z-index: 7;
} }
/* Better curved cables using SVG paths */
.cable-svg { .cable-svg {
position: absolute; position: absolute;
bottom: 20%; bottom: 20%;
@ -1065,149 +830,14 @@ body {
border-radius: 8px; border-radius: 8px;
z-index: 6; z-index: 6;
padding: 8px 10px 20px 10px; padding: 8px 10px 20px 10px;
text-decoration: none !important;
} }
/* Wall-mounted CRT 1 - upper left relative to main */ /* Wall-mounted CRT 1 - upper left relative to main */
.wall-monitor-1 {
top: 3%;
left: -34%;
width: 200px;
height: 200px;
background: linear-gradient(145deg, #c8c8c0, #a8a898);
box-shadow:
0 8px 20px rgba(0, 0, 0, 0.7),
inset 0 2px 4px rgba(255, 255, 255, 0.3),
inset 0 -2px 4px rgba(0, 0, 0, 0.3);
padding: 5px 7px 15px 7px;
}
.wall-monitor-1::after {
content: "";
position: absolute;
bottom: 4px;
right: 7px;
width: 4px;
height: 4px;
background: #0f0;
border-radius: 50%;
box-shadow: 0 0 6px #0f0;
animation: pulse 2s ease-in-out infinite;
}
/* Wall-mounted CRT 2 - upper right, larger, closely stacked */ /* Wall-mounted CRT 2 - upper right, larger, closely stacked */
.wall-monitor-2 {
top: 4%;
right: -50%;
width: 300px;
height: 245px;
background: linear-gradient(145deg, #b8b8b0, #989888);
box-shadow:
0 8px 20px rgba(0, 0, 0, 0.7),
inset 0 2px 4px rgba(255, 255, 255, 0.3),
inset 0 -2px 4px rgba(0, 0, 0, 0.3);
padding: 6px 8px 18px 8px;
transform: rotate(-1deg);
}
.wall-monitor-2::after {
content: "";
position: absolute;
bottom: 5px;
right: 8px;
width: 5px;
height: 5px;
background: #0ff;
border-radius: 50%;
box-shadow: 0 0 6px #0ff;
animation: pulse 1.8s ease-in-out infinite;
}
/* Wall-mounted CRT 3 - lower right, larger, closely aligned to monitor 2 */
.wall-monitor-3 {
top: 57%;
right: -33%;
width: 195px;
height: 140px;
background: linear-gradient(145deg, #d8d0b8, #b8b098);
box-shadow:
0 8px 20px rgba(0, 0, 0, 0.7),
inset 0 2px 4px rgba(255, 255, 255, 0.3),
inset 0 -2px 4px rgba(0, 0, 0, 0.3);
padding: 6px 8px 18px 8px;
transform: rotate(1deg);
}
.wall-monitor-3::after {
content: "";
position: absolute;
bottom: 5px;
right: 8px;
width: 5px;
height: 5px;
background: #f00;
border-radius: 50%;
box-shadow: 0 0 6px #f00;
animation: pulse 2.3s ease-in-out infinite;
}
.wall-monitor-3:hover pre {
animation: text-glitch-cycle 3s ease infinite;
}
@keyframes text-glitch-cycle {
0%,
6.67% {
text-shadow:
-2px 0 #f0f,
2px 0 #0ff;
transform: translate(0, 0);
}
13.33% {
text-shadow:
2px 0 #f0f,
-2px 0 #0ff;
transform: translate(-3px, 2px);
}
20% {
text-shadow:
-1px 0 #f0f,
1px 0 #0ff;
transform: translate(3px, -2px);
}
26.67%,
100% {
text-shadow: none;
transform: translate(0, 0);
}
}
/* Wall-mounted CRT 4 - lower left relative to main */ /* Wall-mounted CRT 4 - lower left relative to main */
.wall-monitor-4 {
top: 50%;
left: -53%;
width: 300px;
height: 225px;
background: linear-gradient(145deg, #a8a898, #888878);
box-shadow:
0 8px 20px rgba(0, 0, 0, 0.7),
inset 0 2px 4px rgba(255, 255, 255, 0.3),
inset 0 -2px 4px rgba(0, 0, 0, 0.3);
padding: 5px 7px 15px 7px;
transform: rotate(-1deg);
}
.wall-monitor-4::after {
content: "";
position: absolute;
bottom: 4px;
right: 7px;
width: 4px;
height: 4px;
background: #fa0;
border-radius: 50%;
box-shadow: 0 0 6px #fa0;
animation: pulse 2.1s ease-in-out infinite;
}
/* Desk-mounted CRT - on desk left side */ /* Desk-mounted CRT - on desk left side */
.desk-monitor { .desk-monitor {
@ -1560,128 +1190,3 @@ body {
opacity: 0.3; opacity: 0.3;
} }
} }
/* Desk clutter */
.desk-item {
position: absolute;
z-index: 8;
}
/* Keyboard */
.keyboard {
bottom: 9%;
left: 42%;
width: 170px;
height: 55px;
background: linear-gradient(180deg, #3a3a3a 0%, #2a2a2a 100%);
border-radius: 3px;
box-shadow:
0 3px 10px rgba(0, 0, 0, 0.6),
inset 0 1px 2px rgba(255, 255, 255, 0.1);
}
.keyboard::before {
content: "";
position: absolute;
top: 8px;
left: 10px;
right: 10px;
bottom: 8px;
background:
repeating-linear-gradient(
0deg,
#1a1a1a 0px,
#1a1a1a 6px,
transparent 6px,
transparent 8px
),
repeating-linear-gradient(
90deg,
#1a1a1a 0px,
#1a1a1a 8px,
transparent 8px,
transparent 10px
);
}
/* Mouse */
.mouse {
bottom: 8.5%;
right: 45%;
width: 25px;
height: 35px;
background: linear-gradient(145deg, #2a2a2a, #1a1a1a);
border-radius: 12px 12px 8px 8px;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.6);
}
.mouse::before {
content: "";
position: absolute;
top: 5px;
left: 50%;
transform: translateX(-50%);
width: 2px;
height: 12px;
background: #111;
border-radius: 1px;
}
.navigation {
position: absolute;
bottom: 10%;
left: 0;
right: 0;
z-index: 999;
display: flex;
justify-content: space-evenly;
align-items: center;
@include media-down(lg) {
position: relative;
}
.time-display {
width: 150px;
z-index: 30;
padding: 0.5em;
background: linear-gradient(180deg, #2a2a2a 0%, #1a1a1a 100%);
border: 1px solid #333;
box-shadow:
0 2px 8px rgba(0, 0, 0, 0.5),
inset 0 1px 2px rgba(255, 255, 255, 0.1);
border-radius: 1em;
cursor: pointer;
&::after {
content: "Interests and Tools";
position: absolute;
width: 150px;
color: white;
font-size: 20px;
font-weight: bold;
z-index: 8000;
transform: rotate(-10deg);
border: 1px solid #0f0;
padding: 2px;
padding-left: 5px;
padding-right: 5px;
border-radius: 5px;
background-color: rgba(0, 0, 0, 0.7);
opacity: 0;
transition: opacity 0.3s ease;
text-align: center;
@include media-down(lg) {
opacity: 1;
transform: rotate(0deg);
bottom: 0;
font-size: 14px;
}
}
&:hover::after {
opacity: 1;
}
}
}

View file

@ -3,23 +3,23 @@
{{ end }}{{ define "main" }} {{ end }}{{ define "main" }}
<div class="wall"></div> <div class="wall"></div>
<div class="window">{{ partial "elements/window.html" . }}</div> <div class="window hidden-lg-down">{{ partial "elements/window.html" . }}</div>
<!-- Neon sign above monitor --> <!-- Neon sign above monitor -->
{{ partial "elements/neon-sign.html" . }} {{ partial "elements/neon-sign.html" . }}
<!-- Sticky notes --> <!-- Sticky notes -->
<div class="sticky-note note1">fix bugs</div> <div class="sticky-note note1 hidden-xl-down">fix bugs</div>
<div class="sticky-note note2">pwd:<br />puppies</div> <div class="sticky-note note2 hidden-xl-down">pwd:<br />puppies</div>
<div class="sticky-note note3">finish<br />coffee</div> <div class="sticky-note note3 hidden-xl-down">finish<br />coffee</div>
<div class="sticky-note note4">CALL<br />WIFE</div> <div class="sticky-note note4 hidden-xl-down">CALL<br />WIFE</div>
<!-- Papers pinned to wall --> <!-- Papers pinned to wall -->
<div class="wall-paper paper1"></div> <div class="wall-paper paper1"></div>
<div class="wall-paper paper2"></div> <div class="wall-paper paper2"></div>
<!-- X-Files "I want to believe" poster --> <!-- X-Files "I want to believe" poster -->
<div class="xfiles-poster"> <div class="xfiles-poster hidden-lg-down">
<div class="xfiles-content"> <div class="xfiles-content">
<div class="ufo-illustration"> <div class="ufo-illustration">
<div class="ufo-dome"></div> <div class="ufo-dome"></div>
@ -38,7 +38,7 @@
</div> </div>
<!-- Now playing poster on wall --> <!-- Now playing poster on wall -->
<div class="poster"> <div class="poster hidden-xl-down">
<div class="poster-image" id="posterImage"> <div class="poster-image" id="posterImage">
<script src="/js/nowplaying.js"></script> <script src="/js/nowplaying.js"></script>
@ -68,145 +68,75 @@
<!-- Desk --> <!-- Desk -->
<div class="desk"></div> <div class="desk"></div>
<div class="crt-container"> <div class="homepage-container">
<div class="crt-monitor"> <!-- LEFT COLUMN -->
<div class="crt-screen"> <div>
<div class="content crt"> <div class="secondary-screen updates-monitor">
<div id="terminal"> <div class="screen-display crt">
<div id="output"></div> <div class="scroll">
<div id="input-container" class="input-line hidden"> > updates -lah<br />
<span class="prompt">></span> {{ range first 10 (where .Site.RegularPages "Type"
<input "updates").ByDate.Reverse }} [<time
type="text" >{{ .Lastmod.Format "02-01-2006" }}</time
id="input" >]<br />
autocomplete="off" {{ .Plain }}<br />
spellcheck="false" ---<br />
/> {{ end }}
</div>
<span class="cursor-blink">_</span>
</div> </div>
</div> </div>
</div> </div>
</div>
<div class="monitor-stand">
<div class="stand-neck"></div>
<div class="stand-base"></div>
</div>
<!-- Wall-mounted monitors -->
<div class="secondary-screen wall-monitor-1 hidden-xl-down">
<div class="screen-display crt">
<div class="scroll">
> updates -lah<br />
{{ range first 10 (where .Site.RegularPages "Type"
"updates").ByDate.Reverse }} [<time
>{{ .Lastmod.Format "02-01-2006" }}</time
>]<br />
{{ .Plain }}<br />
---<br />
{{ end }}
<div class="secondary-screen wall-monitor-4 hidden-xl-down">
<div class="screen-display tiny amber crt">
> tail -f /var/log<br />
[INFO] Process OK<br />
[WARN] High load detected - time for coffee break<br />
[INFO] Connected to database (it's in a relationship now)<br />
[ERROR] 404: Motivation not found<br />
[WARN] Firewall detected actual fire, calling emergency services<br />
[INFO] Successfully hacked into mainframe (jk it's just localhost)<br />
[ERROR] Keyboard not found. Press F1 to continue.<br />
[WARN] Too many open tabs. Browser having existential crisis.<br />
[INFO] Ping 127.0.0.1 - there's no place like home<br />
[ERROR] SQL injection attempt detected. Nice try, Bobby Tables.<br />
<span class="cursor-blink">_</span> <span class="cursor-blink">_</span>
</div> </div>
</div> </div>
</div> </div>
<!-- END LEFT COLUMN -->
<div class="secondary-screen wall-monitor-2 hidden-xl-down"> <!-- CENTER COLUMN -->
<div class="screen-display tiny cyan crt"> <div class="hidden-lg-down">
<div class="scroll-text"> <div class="crt-monitor">
[PKT] 192.168.1.1:443<br /> <div class="crt-screen">
[PKT] 10.0.0.15:8080<br /> <div class="content crt">
[PKT] 172.16.0.1:22<br /> <div id="terminal">
[PKT] 192.168.1.1:443<br /> <div id="output"></div>
[PKT] 10.0.0.15:8080<br /> <div id="input-container" class="input-line hidden">
[PKT] 192.168.1.1:443<br /> <span class="prompt">></span>
[PKT] 10.0.0.15:8080<br /> <input
[PKT] 172.16.0.1:22<br /> type="text"
[PKT] 192.168.1.1:443<br /> id="input"
[PKT] 10.0.0.15:8080<br /> autocomplete="off"
[PKT] 192.168.1.1:443<br /> spellcheck="false"
[PKT] 10.0.0.15:8080<br /> />
[PKT] 172.16.0.1:22<br /> </div>
[PKT] 192.168.1.1:443<br /> </div>
[PKT] 10.0.0.15:8080<br /> </div>
[PKT] 192.168.1.1:443<br />
[PKT] 10.0.0.15:8080<br />
[PKT] 172.16.0.1:22<br />
[PKT] 192.168.1.1:443<br />
[PKT] 10.0.0.15:8080<br />
[PKT] 192.168.1.1:443<br />
[PKT] 10.0.0.15:8080<br />
[PKT] 172.16.0.1:22<br />
[PKT] 192.168.1.1:443<br />
[PKT] 10.0.0.15:8080<br />
[PKT] 192.168.1.1:443<br />
[PKT] 10.0.0.15:8080<br />
[PKT] 172.16.0.1:22<br />
[PKT] 192.168.1.1:443<br />
[PKT] 10.0.0.15:8080<br />
[PKT] 192.168.1.1:443<br />
[PKT] 10.0.0.15:8080<br />
[PKT] 172.16.0.1:22<br />
[PKT] 192.168.1.1:443<br />
[PKT] 10.0.0.15:8080<br />
[PKT] 192.168.1.1:443<br />
[PKT] 10.0.0.15:8080<br />
[PKT] 172.16.0.1:22<br />
[PKT] 192.168.1.1:443<br />
[PKT] 10.0.0.15:8080<br />
[PKT] 192.168.1.1:443<br />
[PKT] 10.0.0.15:8080<br />
[PKT] 172.16.0.1:22<br />
[PKT] 192.168.1.1:443<br />
[PKT] 10.0.0.15:8080<br />
[PKT] 192.168.1.1:443<br />
[PKT] 10.0.0.15:8080<br />
[PKT] 172.16.0.1:22<br />
[PKT] 192.168.1.1:443<br />
[PKT] 10.0.0.15:8080<br />
[PKT] 192.168.1.1:443<br />
[PKT] 10.0.0.15:8080<br />
[PKT] 172.16.0.1:22<br />
[PKT] 192.168.1.1:443<br />
[PKT] 10.0.0.15:8080<br />
[PKT] 192.168.1.1:443<br />
[PKT] 10.0.0.15:8080<br />
[PKT] 172.16.0.1:22<br />
[PKT] 192.168.1.1:443<br />
[PKT] 10.0.0.15:8080<br />
[PKT] 192.168.1.1:443<br />
[PKT] 10.0.0.15:8080<br />
[PKT] 172.16.0.1:22<br />
[PKT] 192.168.1.1:443<br />
[PKT] 10.0.0.15:8080<br />
[PKT] 192.168.1.1:443<br />
[PKT] 10.0.0.15:8080<br />
[PKT] 172.16.0.1:22<br />
[PKT] 192.168.1.1:443<br />
[PKT] 10.0.0.15:8080<br />
[PKT] 192.168.1.1:443<br />
[PKT] 10.0.0.15:8080<br />
[PKT] 172.16.0.1:22<br />
[PKT] 192.168.1.1:443<br />
[PKT] 10.0.0.15:8080<br />
</div> </div>
</div> </div>
<div class="monitor-stand">
<div class="stand-neck"></div>
<div class="stand-base"></div>
</div>
</div> </div>
<!-- END CENTER COLUMN -->
<a <!-- RIGHT COLUMN -->
href="/blog/" <div>
class="secondary-screen wall-monitor-3 hidden-xl-down" <a href="/blog/" class="secondary-screen blog-monitor">
style="text-decoration: none !important" <div class="screen-display crt">
> <pre>
<div
class="screen-display crt"
style="
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
"
>
<pre>
▄▄ ▄▄
█▄ ██ █▄ ██
██ ██ ▄▄ ██ ██ ▄▄
@ -215,26 +145,93 @@
▄████▀▄██▄▀███▀ ▀████ ▄████▀▄██▄▀███▀ ▀████
██ ██
██ NEW! ██▶▶▶ ▀▀▀</pre ██ NEW! ██▶▶▶ ▀▀▀</pre
> >
</div> </div>
</a> </a>
<div class="secondary-screen wall-monitor-4 hidden-xl-down"> <div class="secondary-screen wall-monitor-2 hidden-xl-down">
<div class="screen-display tiny amber crt"> <div class="screen-display tiny cyan crt">
> tail -f /var/log<br /> <div class="scroll-text">
[INFO] Process OK<br /> [PKT] 192.168.1.1:443<br />
[WARN] High load detected - time for coffee break<br /> [PKT] 10.0.0.15:8080<br />
[INFO] Connected to database (it's in a relationship now)<br /> [PKT] 172.16.0.1:22<br />
[ERROR] 404: Motivation not found<br /> [PKT] 192.168.1.1:443<br />
[WARN] Firewall detected actual fire, calling emergency services<br /> [PKT] 10.0.0.15:8080<br />
[INFO] Successfully hacked into mainframe (jk it's just localhost)<br /> [PKT] 192.168.1.1:443<br />
[ERROR] Keyboard not found. Press F1 to continue.<br /> [PKT] 10.0.0.15:8080<br />
[WARN] Too many open tabs. Browser having existential crisis.<br /> [PKT] 172.16.0.1:22<br />
[INFO] Ping 127.0.0.1 - there's no place like home<br /> [PKT] 192.168.1.1:443<br />
[ERROR] SQL injection attempt detected. Nice try, Bobby Tables.<br /> [PKT] 10.0.0.15:8080<br />
<span class="cursor-blink">_</span> [PKT] 192.168.1.1:443<br />
[PKT] 10.0.0.15:8080<br />
[PKT] 172.16.0.1:22<br />
[PKT] 192.168.1.1:443<br />
[PKT] 10.0.0.15:8080<br />
[PKT] 192.168.1.1:443<br />
[PKT] 10.0.0.15:8080<br />
[PKT] 172.16.0.1:22<br />
[PKT] 192.168.1.1:443<br />
[PKT] 10.0.0.15:8080<br />
[PKT] 192.168.1.1:443<br />
[PKT] 10.0.0.15:8080<br />
[PKT] 172.16.0.1:22<br />
[PKT] 192.168.1.1:443<br />
[PKT] 10.0.0.15:8080<br />
[PKT] 192.168.1.1:443<br />
[PKT] 10.0.0.15:8080<br />
[PKT] 172.16.0.1:22<br />
[PKT] 192.168.1.1:443<br />
[PKT] 10.0.0.15:8080<br />
[PKT] 192.168.1.1:443<br />
[PKT] 10.0.0.15:8080<br />
[PKT] 172.16.0.1:22<br />
[PKT] 192.168.1.1:443<br />
[PKT] 10.0.0.15:8080<br />
[PKT] 192.168.1.1:443<br />
[PKT] 10.0.0.15:8080<br />
[PKT] 172.16.0.1:22<br />
[PKT] 192.168.1.1:443<br />
[PKT] 10.0.0.15:8080<br />
[PKT] 192.168.1.1:443<br />
[PKT] 10.0.0.15:8080<br />
[PKT] 172.16.0.1:22<br />
[PKT] 192.168.1.1:443<br />
[PKT] 10.0.0.15:8080<br />
[PKT] 192.168.1.1:443<br />
[PKT] 10.0.0.15:8080<br />
[PKT] 172.16.0.1:22<br />
[PKT] 192.168.1.1:443<br />
[PKT] 10.0.0.15:8080<br />
[PKT] 192.168.1.1:443<br />
[PKT] 10.0.0.15:8080<br />
[PKT] 172.16.0.1:22<br />
[PKT] 192.168.1.1:443<br />
[PKT] 10.0.0.15:8080<br />
[PKT] 192.168.1.1:443<br />
[PKT] 10.0.0.15:8080<br />
[PKT] 172.16.0.1:22<br />
[PKT] 192.168.1.1:443<br />
[PKT] 10.0.0.15:8080<br />
[PKT] 192.168.1.1:443<br />
[PKT] 10.0.0.15:8080<br />
[PKT] 172.16.0.1:22<br />
[PKT] 192.168.1.1:443<br />
[PKT] 10.0.0.15:8080<br />
[PKT] 192.168.1.1:443<br />
[PKT] 10.0.0.15:8080<br />
[PKT] 172.16.0.1:22<br />
[PKT] 192.168.1.1:443<br />
[PKT] 10.0.0.15:8080<br />
[PKT] 192.168.1.1:443<br />
[PKT] 10.0.0.15:8080<br />
[PKT] 172.16.0.1:22<br />
[PKT] 192.168.1.1:443<br />
[PKT] 10.0.0.15:8080<br />
</div>
</div>
</div> </div>
</div> </div>
<!-- END RIGHT COLUMN -->
</div> </div>
<div class="navigation"> <div class="navigation">
@ -246,9 +243,7 @@
{{ partial "elements/ipod.html" . }} {{ partial "elements/ipod.html" . }}
<div class="hidden-md-down"> <div class="">{{ partial "elements/vu-meter.html" . }}</div>
{{ partial "elements/vu-meter.html" . }}
</div>
<div class="notes"> <div class="notes">
<div class="note"></div> <div class="note"></div>
@ -270,9 +265,7 @@
</a> </a>
</div> </div>
<div> <div>{{ partial "elements/crt-tv.html" . }}</div>
{{ partial "elements/crt-tv.html" . }}
</div>
</div> </div>
{{ range first 1 (where .Site.RegularPages "Type" "updates").ByDate.Reverse }} {{ range first 1 (where .Site.RegularPages "Type" "updates").ByDate.Reverse }}