Merge branch 'feature/homepage-mega-rejig' into develop

This commit is contained in:
Dan 2026-01-03 13:03:08 +00:00
commit a59883b80b
13 changed files with 694 additions and 687 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: (
xs: 0,
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;
background: #ff0000;
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;
}
@ -94,8 +96,10 @@
width: 100%;
height: 100%;
background:
repeating-radial-gradient(#000 0 0.0001%, #aaa 0 0.0002%) 50% 0/2500px 2500px,
repeating-conic-gradient(#000 0 0.0001%, #999 0 0.0002%) 60% 60%/2500px 2500px;
repeating-radial-gradient(#000 0 0.0001%, #aaa 0 0.0002%) 50% 0/2500px
2500px,
repeating-conic-gradient(#000 0 0.0001%, #999 0 0.0002%) 60% 60%/2500px
2500px;
background-blend-mode: difference;
transition: opacity 0.3s ease;
animation: tv-static-noise 0.2s infinite alternate;
@ -103,7 +107,11 @@
}
@keyframes tv-static-noise {
100% { background-position: 50% 0, 60% 50%; }
100% {
background-position:
50% 0,
60% 50%;
}
}
.tv-static::before {
@ -131,7 +139,12 @@
left: 0;
width: 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;
mix-blend-mode: screen;
z-index: 3;
@ -163,6 +176,15 @@
letter-spacing: 1px;
z-index: 2;
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 {
@ -172,7 +194,9 @@
.crt-tv:hover .tv-text {
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 {
@ -206,22 +230,30 @@
0% {
opacity: 0;
transform: translate(-50%, -50%) translate(-3px, 2px);
text-shadow: -2px 0 #f0f, 2px 0 #0ff;
text-shadow:
-2px 0 #f0f,
2px 0 #0ff;
}
20% {
opacity: 0.3;
transform: translate(-50%, -50%) translate(2px, -2px);
text-shadow: 2px 0 #f0f, -2px 0 #0ff;
text-shadow:
2px 0 #f0f,
-2px 0 #0ff;
}
40% {
opacity: 0.6;
transform: translate(-50%, -50%) translate(-1px, 1px);
text-shadow: 1px 0 #f0f, -1px 0 #0ff;
text-shadow:
1px 0 #f0f,
-1px 0 #0ff;
}
60% {
opacity: 0.8;
transform: translate(-50%, -50%) translate(1px, -1px);
text-shadow: -1px 0 #f0f, 1px 0 #0ff;
text-shadow:
-1px 0 #f0f,
1px 0 #0ff;
}
80% {
opacity: 0.9;
@ -236,7 +268,8 @@
}
@keyframes tv-text-glitch-cycle {
0%, 6.67% {
0%,
6.67% {
text-shadow:
-2px 0 #f0f,
2px 0 #0ff,
@ -260,7 +293,8 @@
0 0 4px #0f0;
transform: translate(-50%, -50%) translate(3px, -2px);
}
26.67%, 100% {
26.67%,
100% {
text-shadow:
0 0 8px #0f0,
0 0 4px #0f0;

View file

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

View file

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

View file

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

View file

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

View file

@ -1,5 +1,6 @@
@import "normalize";
@import "mixins";
@import "animations";
@import "partials/global-styles";
@ -16,6 +17,7 @@
@import "partials/content-screens";
@import "pages/homepage";
@import "pages/about";
@import "pages/audio";
@import "pages/now";
@ -58,203 +60,10 @@ body {
position: relative;
}
.latest-post {
#latest-post {
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 {
content: " ";
display: block;
@ -681,33 +490,6 @@ body {
}
/* 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 {
@ -762,22 +544,6 @@ body {
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 {
width: 40px;
@ -1046,7 +812,6 @@ body {
z-index: 7;
}
/* Better curved cables using SVG paths */
.cable-svg {
position: absolute;
bottom: 20%;
@ -1065,149 +830,14 @@ body {
border-radius: 8px;
z-index: 6;
padding: 8px 10px 20px 10px;
text-decoration: none !important;
}
/* 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-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-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-monitor {
@ -1560,128 +1190,3 @@ body {
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;
}
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.1 MiB

After

Width:  |  Height:  |  Size: 880 KiB

Before After
Before After

View file

@ -1,7 +1,25 @@
#!/bin/bash
# Convert HEIC/HEIF to JPG and resize to max 2000px on either side
find content -type f \( -iname "*.heic" -o -iname "*.heif" \) | while read -r file; do
output="${file%.*}.jpg"
magick "$file" -quality 85 "$output"
magick "$file" -resize '2000x2000>' -quality 85 "$output"
echo "Converted $file to $output"
# Strip GPS data from the converted image
exiftool -gps:all= -overwrite_original "$output"
echo "Stripped GPS data from $output"
# Delete the original HEIC/HEIF file after successful conversion
rm "$file"
echo "Deleted $file"
done
# Strip GPS data from existing JPG, JPEG, and PNG files
find content -type f \( -iname "*.jpg" -o -iname "*.jpeg" -o -iname "*.png" \) | while read -r file; do
# Check if file has GPS data before processing
if exiftool -gps:all "$file" | grep -q "GPS"; then
exiftool -gps:all= -overwrite_original "$file"
echo "Stripped GPS data from $file"
fi
done

View file

@ -3,23 +3,23 @@
{{ end }}{{ define "main" }}
<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 -->
{{ partial "elements/neon-sign.html" . }}
<!-- Sticky notes -->
<div class="sticky-note note1">fix bugs</div>
<div class="sticky-note note2">pwd:<br />puppies</div>
<div class="sticky-note note3">finish<br />coffee</div>
<div class="sticky-note note4">CALL<br />WIFE</div>
<div class="sticky-note note1 hidden-xl-down">fix bugs</div>
<div class="sticky-note note2 hidden-xl-down">pwd:<br />puppies</div>
<div class="sticky-note note3 hidden-xl-down">finish<br />coffee</div>
<div class="sticky-note note4 hidden-xl-down">CALL<br />WIFE</div>
<!-- Papers pinned to wall -->
<div class="wall-paper paper1"></div>
<div class="wall-paper paper2"></div>
<!-- X-Files "I want to believe" poster -->
<div class="xfiles-poster">
<div class="xfiles-poster hidden-lg-down">
<div class="xfiles-content">
<div class="ufo-illustration">
<div class="ufo-dome"></div>
@ -38,7 +38,7 @@
</div>
<!-- Now playing poster on wall -->
<div class="poster">
<div class="poster hidden-xl-down">
<div class="poster-image" id="posterImage">
<script src="/js/nowplaying.js"></script>
@ -68,7 +68,46 @@
<!-- Desk -->
<div class="desk"></div>
<div class="crt-container">
<div class="homepage-container">
<!-- LEFT COLUMN -->
<div>
<div class="secondary-screen updates-monitor">
<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 }}
<span class="cursor-blink">_</span>
</div>
</div>
</div>
<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>
</div>
</div>
</div>
<!-- END LEFT COLUMN -->
<!-- CENTER COLUMN -->
<div class="hidden-lg-down">
<div class="crt-monitor">
<div class="crt-screen">
<div class="content crt">
@ -91,24 +130,24 @@
<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>
<!-- END CENTER COLUMN -->
<!-- RIGHT COLUMN -->
<div>
<a href="/blog/" class="secondary-screen blog-monitor">
<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 }}
<span class="cursor-blink">_</span>
</div>
</div>
<pre>
▄▄
█▄ ██
██ ██ ▄▄
████▄ ██ ▄███▄ ▄████
██ ██ ██ ██ ██ ██ ██
▄████▀▄██▄▀███▀ ▀████
██
██ NEW! ██▶▶▶ ▀▀▀</pre
>
</div>
</a>
<div class="secondary-screen wall-monitor-2 hidden-xl-down">
<div class="screen-display tiny cyan crt">
@ -191,50 +230,8 @@
</div>
</div>
</div>
<a
href="/blog/"
class="secondary-screen wall-monitor-3 hidden-xl-down"
style="text-decoration: none !important"
>
<div
class="screen-display crt"
style="
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
"
>
<pre>
▄▄
█▄ ██
██ ██ ▄▄
████▄ ██ ▄███▄ ▄████
██ ██ ██ ██ ██ ██ ██
▄████▀▄██▄▀███▀ ▀████
██
██ NEW! ██▶▶▶ ▀▀▀</pre
>
</div>
</a>
<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>
</div>
</div>
<!-- END RIGHT COLUMN -->
</div>
<div class="navigation">
@ -246,9 +243,7 @@
{{ partial "elements/ipod.html" . }}
<div class="hidden-md-down">
{{ partial "elements/vu-meter.html" . }}
</div>
<div class="">{{ partial "elements/vu-meter.html" . }}</div>
<div class="notes">
<div class="note"></div>
@ -270,9 +265,7 @@
</a>
</div>
<div>
{{ partial "elements/crt-tv.html" . }}
</div>
<div>{{ partial "elements/crt-tv.html" . }}</div>
</div>
{{ range first 1 (where .Site.RegularPages "Type" "updates").ByDate.Reverse }}

View file

@ -18,8 +18,3 @@
src="{{ $terminalBundle.RelPermalink }}"
integrity="{{ $terminalBundle.Data.Integrity }}"
></script>
<script
defer
data-domain="ritual.sh"
src="https://analytics.ritual.sh/faenz.js"
></script>