More resource section

This commit is contained in:
Dan 2026-01-07 16:06:49 +00:00
parent a3b9bd2680
commit 569f64e1da
7 changed files with 168 additions and 422 deletions

View file

@ -26,12 +26,12 @@
0 0; 0 0;
&::before { &::before {
content: "TEST 19"; content: "TEST 06";
position: absolute; position: absolute;
top: 55%; top: 55%;
right: 8%; right: 8%;
transform: translateY(-50%); transform: translateY(-50%);
font-family: Verdana, "Trebuchet MS", Tahoma, sans-serif; font-family: "Barlow Condensed", sans-serif;
font-size: 6rem; font-size: 6rem;
font-weight: 700; font-weight: 700;
color: rgba(255, 255, 255, 0.3); color: rgba(255, 255, 255, 0.3);
@ -301,16 +301,124 @@
} }
} }
.whiteboard { .portal-sign {
position: relative; position: relative;
padding: 3rem 2rem; padding: 3rem 2rem;
border: 10px solid black;
background: white;
max-width: 900px;
margin: auto;
box-shadow:
0 8px 24px rgba(0, 0, 0, 0.6),
0 0 40px rgba(0, 0, 0, 0.6);
@include media-up(md) { @include media-up(md) {
padding: 4rem 3rem; padding: 4rem 3rem;
} }
.portal-sign-decor {
border-top: 10px solid black;
border-bottom: 10px solid black;
margin-left: 6rem;
position: relative;
@include media-down(lg) {
margin-left: auto;
}
.portal-sign-text {
p {
margin-bottom: 1rem;
}
font-family: "caveat", cursive;
font-size: 1.5rem;
position: absolute;
text-align: right;
right: 0;
top: 50px;
width: 50%;
transform: rotate(10deg);
@include media-down(md) {
position: relative;
transform: none;
top: auto;
left: auto;
width: 100%;
text-align: left;
margin-top: 1em;
}
}
.portal-sign-number {
position: relative;
font-family: "Barlow Condensed", sans-serif;
font-size: 30rem;
@include media-down(md) {
display: none;
}
}
.portal-sign-sub {
font-family: "Barlow Condensed", sans-serif;
font-size: 3rem;
font-weight: bold;
@include media-down(md) {
display: none;
}
}
}
.portal-sign-lines {
margin-left: 6rem;
margin-top: 1rem;
padding-bottom: 5rem;
display: block;
position: relative;
border-bottom: 10px solid black;
@include media-down(md) {
display: none;
}
@include media-down(lg) {
margin-left: auto;
}
&::before {
content: "";
height: 50px;
width: 10px;
background-color: black;
display: block;
/* repeat the line 5 more times */
box-shadow:
20px 0 0 black,
40px 0 0 black,
60px 0 0 black,
80px 0 0 black,
100px 0 0 black;
}
}
.portal-sign-content {
margin-left: 6rem;
margin-top: 1rem;
@include media-down(lg) {
margin-left: auto;
}
}
} }
.whiteboard-header { .portal-header {
text-align: center; text-align: center;
margin-bottom: 4rem; margin-bottom: 4rem;
position: relative; position: relative;
@ -323,215 +431,58 @@
font-weight: 700; font-weight: 700;
text-shadow: 0 0 20px rgba(0, 150, 255, 0.6); text-shadow: 0 0 20px rgba(0, 150, 255, 0.6);
} }
.whiteboard-description {
font-family: Verdana, "Trebuchet MS", Tahoma, sans-serif;
font-size: 1.1rem;
font-weight: 400;
color: rgba(255, 255, 255, 0.9);
max-width: 700px;
margin: 0 auto;
line-height: 1.7;
text-shadow: 0 2px 4px rgba(0, 0, 0, 0.5);
p {
color: rgba(255, 255, 255, 0.85);
margin: 0.5rem 0;
}
}
} }
.whiteboard-pins { .portal-sign-items {
display: grid; display: grid;
grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); grid-template-columns: 1fr 1fr 1fr;
gap: 3rem; gap: 1em;
position: relative;
z-index: 1;
@include media-up(lg) {
grid-template-columns: repeat(auto-fill, minmax(350px, 1fr));
}
} }
// Resource Pin (Post-it note style) .resource-pin a {
.resource-pin { color: #000;
position: relative;
transform: rotate(0deg);
transition:
transform 0.3s ease,
box-shadow 0.3s ease;
// Random slight rotations for pins
&:nth-child(3n + 1) {
transform: rotate(-1deg);
}
&:nth-child(3n + 2) {
transform: rotate(1deg);
}
&:nth-child(3n + 3) {
transform: rotate(-0.5deg);
}
&:hover {
transform: rotate(0deg) translateY(-5px) !important;
box-shadow: 0 15px 30px rgba(0, 0, 0, 0.2);
z-index: 10;
.pin-tack {
transform: translateY(-2px);
}
}
} }
// Aperture Science indicator at the top
.pin-tack {
position: absolute;
top: -20px;
left: 50%;
transform: translateX(-50%);
width: 30px;
height: 30px;
background: radial-gradient(
circle at center,
rgba(255, 255, 255, 0.1) 0%,
rgba(255, 255, 255, 0.05) 50%,
transparent 100%
);
border-radius: 50%;
border: 2px solid rgba(255, 255, 255, 0.3);
z-index: 2;
transition: all 0.3s ease;
// Aperture Science logo segments
&::before {
content: "";
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
width: 14px;
height: 14px;
border-radius: 50%;
border: 2px solid rgba(255, 255, 255, 0.6);
border-top-color: transparent;
border-left-color: transparent;
}
&::after {
content: "";
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
width: 6px;
height: 6px;
background: rgba(255, 255, 255, 0.8);
border-radius: 50%;
}
}
// Resource panel (Aperture Science test chamber panel)
.resource-card { .resource-card {
background: linear-gradient(
145deg,
rgba(255, 255, 255, 0.95) 0%,
rgba(240, 245, 250, 0.9) 100%
);
padding: 2rem 1.5rem 1.5rem; padding: 2rem 1.5rem 1.5rem;
border-radius: 8px; aspect-ratio: 1/1;
box-shadow:
0 8px 24px rgba(0, 0, 0, 0.2),
inset 0 1px 0 rgba(255, 255, 255, 0.9),
0 0 40px rgba(0, 0, 0, 0.1);
min-height: 280px;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
gap: 1rem; gap: 1rem;
border: 3px solid; border: 3px solid;
position: relative; position: relative;
backdrop-filter: blur(10px); display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
// Vary border colors with Portal theme .resource-info {
.resource-pin:nth-child(4n + 1) & {
border-color: rgba(0, 150, 255, 0.5);
box-shadow:
0 8px 24px rgba(0, 0, 0, 0.2),
0 0 30px rgba(0, 150, 255, 0.3),
inset 0 1px 0 rgba(255, 255, 255, 0.9);
&::before {
background: linear-gradient(180deg, rgba(0, 150, 255, 0.15) 0%, transparent 100%);
}
}
.resource-pin:nth-child(4n + 2) & {
border-color: rgba(255, 120, 0, 0.5);
box-shadow:
0 8px 24px rgba(0, 0, 0, 0.2),
0 0 30px rgba(255, 120, 0, 0.3),
inset 0 1px 0 rgba(255, 255, 255, 0.9);
&::before {
background: linear-gradient(180deg, rgba(255, 120, 0, 0.15) 0%, transparent 100%);
}
}
.resource-pin:nth-child(4n + 3) & {
border-color: rgba(0, 150, 255, 0.6);
box-shadow:
0 8px 24px rgba(0, 0, 0, 0.2),
0 0 35px rgba(0, 150, 255, 0.35),
inset 0 1px 0 rgba(255, 255, 255, 0.9);
&::before {
background: linear-gradient(180deg, rgba(0, 150, 255, 0.18) 0%, transparent 100%);
}
}
.resource-pin:nth-child(4n + 4) & {
border-color: rgba(255, 120, 0, 0.6);
box-shadow:
0 8px 24px rgba(0, 0, 0, 0.2),
0 0 35px rgba(255, 120, 0, 0.35),
inset 0 1px 0 rgba(255, 255, 255, 0.9);
&::before {
background: linear-gradient(180deg, rgba(255, 120, 0, 0.18) 0%, transparent 100%);
}
}
// Subtle gradient overlay
&::before {
content: "";
position: absolute; position: absolute;
top: 0; top: 0;
left: 0; left: 0;
right: 0; right: 0;
height: 60%; bottom: 0;
pointer-events: none; display: flex;
border-radius: 6px 6px 0 0; flex-direction: column;
} align-items: center;
justify-content: center;
// Tech panel grid pattern background: rgba(255, 255, 255, 0.6);
&::after { font-size: 2rem;
content: ""; text-align: center;
position: absolute; font-family: "caveat", cursive;
inset: 0;
background-image: opacity: 0;
linear-gradient(rgba(0, 0, 0, 0.02) 1px, transparent 1px),
linear-gradient(90deg, rgba(0, 0, 0, 0.02) 1px, transparent 1px); &:hover {
background-size: 20px 20px; opacity: 1;
pointer-events: none; }
border-radius: 8px;
opacity: 0.5;
} }
} }
.resource-icon { .resource-icon {
width: 80px; width: 100px;
height: 80px; height: 100px;
margin: 0 auto 1rem; margin: 0 auto 1rem;
position: relative; position: relative;
@ -541,13 +492,12 @@
180deg, 180deg,
transparent 0%, transparent 0%,
transparent 20%, transparent 20%,
#9333ea 20%, #000 20%,
#7c3aed 100% #000 100%
); );
border-radius: 10px 10px 40px 40px; border-radius: 10px 10px 40px 40px;
border: 3px solid #6b21a8; border: 3px solid #000;
position: relative; position: relative;
box-shadow: inset 0 0 20px rgba(147, 51, 234, 0.3);
// Lamp base // Lamp base
&::before { &::before {
@ -556,7 +506,7 @@
bottom: -8px; bottom: -8px;
left: 50%; left: 50%;
transform: translateX(-50%); transform: translateX(-50%);
width: 90%; width: 70%;
height: 12px; height: 12px;
background: #1f2937; background: #1f2937;
border-radius: 4px; border-radius: 4px;
@ -570,16 +520,15 @@
left: 30%; left: 30%;
width: 25px; width: 25px;
height: 30px; height: 30px;
background: radial-gradient(circle, #ec4899 0%, #db2777 100%); background: #fff;
border-radius: 50% 50% 40% 60%; border-radius: 50% 50% 40% 60%;
opacity: 0.9;
animation: float-blob 4s ease-in-out infinite; animation: float-blob 4s ease-in-out infinite;
} }
} }
// Last.fm stats icon // Last.fm stats icon
&.lastfm-stats { &.lastfm-stats {
background: linear-gradient(135deg, #d32323 0%, #b71c1c 100%); background: black;
border-radius: 8px; border-radius: 8px;
display: flex; display: flex;
align-items: center; align-items: center;
@ -612,44 +561,6 @@
} }
} }
// Additional lava blob for lavalamp
.resource-icon.lavalamp {
& > span {
position: absolute;
top: 50%;
right: 25%;
width: 20px;
height: 25px;
background: radial-gradient(circle, #f97316 0%, #ea580c 100%);
border-radius: 60% 40% 50% 50%;
opacity: 0.85;
animation: float-blob-2 3.5s ease-in-out infinite;
}
// Create the blob with a pseudo-element instead
&:not(:empty)::before {
// Override for when we add content
animation: float-blob 4s ease-in-out infinite;
}
}
// Last.fm additional bars
.resource-icon.lastfm-stats {
& > span {
position: absolute;
bottom: 15px;
width: 8px;
background: #fff;
border-radius: 2px;
&:nth-child(1) {
left: 50px;
height: 30px;
animation: equalizer-3 0.8s ease-in-out infinite 0.4s;
}
}
}
@keyframes float-blob { @keyframes float-blob {
0%, 0%,
100% { 100% {
@ -660,16 +571,6 @@
} }
} }
@keyframes float-blob-2 {
0%,
100% {
transform: translateY(0) scale(1);
}
50% {
transform: translateY(-20px) scale(0.9);
}
}
@keyframes equalizer-1 { @keyframes equalizer-1 {
0%, 0%,
100% { 100% {
@ -690,153 +591,6 @@
} }
} }
@keyframes equalizer-3 {
0%,
100% {
height: 30px;
}
50% {
height: 15px;
}
}
.resource-info {
flex: 1;
display: flex;
flex-direction: column;
position: relative;
z-index: 2;
h2 {
font-size: 1.4rem;
margin: 0 0 0.5rem 0;
color: #1a1a1a;
font-weight: 700;
font-family: Verdana, "Trebuchet MS", Tahoma, sans-serif;
text-transform: uppercase;
letter-spacing: 0.08em;
a {
color: inherit;
text-decoration: none;
transition: all 0.3s ease;
&:hover {
color: #0096ff;
text-shadow: 0 0 15px rgba(0, 150, 255, 0.5);
}
}
}
}
.resource-description {
color: #2c3e50;
font-size: 0.95rem;
line-height: 1.6;
margin: 0 0 1rem 0;
flex: 1;
font-family: Verdana, "Trebuchet MS", Tahoma, sans-serif;
position: relative;
z-index: 2;
}
.resource-tags {
display: flex;
flex-wrap: wrap;
gap: 0.5rem;
margin-bottom: 1rem;
position: relative;
z-index: 2;
.tag {
background: linear-gradient(135deg, rgba(0, 150, 255, 0.2) 0%, rgba(0, 120, 200, 0.15) 100%);
padding: 0.35rem 0.9rem;
border-radius: 4px;
font-size: 0.7rem;
color: #0080dd;
text-decoration: none;
transition: all 0.3s ease;
border: 2px solid rgba(0, 150, 255, 0.4);
text-transform: uppercase;
letter-spacing: 0.08em;
font-weight: 700;
font-family: Verdana, "Trebuchet MS", Tahoma, sans-serif;
&:hover {
background: linear-gradient(135deg, rgba(0, 150, 255, 0.3) 0%, rgba(255, 120, 0, 0.2) 100%);
border-color: rgba(0, 150, 255, 0.6);
color: #0096ff;
box-shadow: 0 0 15px rgba(0, 150, 255, 0.3);
transform: translateY(-1px);
}
}
}
.resource-links {
display: flex;
gap: 0.75rem;
margin-top: auto;
position: relative;
z-index: 2;
.resource-link {
flex: 1;
padding: 0.7rem 1.3rem;
text-align: center;
text-decoration: none;
border-radius: 6px;
font-weight: 700;
font-size: 0.8rem;
transition: all 0.3s ease;
text-transform: uppercase;
letter-spacing: 0.1em;
font-family: Verdana, "Trebuchet MS", Tahoma, sans-serif;
border: 3px solid;
&.demo {
background: linear-gradient(135deg, #0096ff 0%, #0075cc 100%);
color: #fff;
border-color: #0096ff;
box-shadow:
0 4px 12px rgba(0, 150, 255, 0.4),
inset 0 1px 0 rgba(255, 255, 255, 0.3);
&:hover {
background: linear-gradient(135deg, #00aaff 0%, #0096ff 100%);
transform: translateY(-3px);
box-shadow:
0 8px 20px rgba(0, 150, 255, 0.5),
0 0 30px rgba(0, 150, 255, 0.4),
inset 0 1px 0 rgba(255, 255, 255, 0.4);
border-color: #66ccff;
}
}
&.source {
background: linear-gradient(135deg, #ff7800 0%, #dd6600 100%);
color: #fff;
border-color: #ff7800;
box-shadow:
0 4px 12px rgba(255, 120, 0, 0.4),
inset 0 1px 0 rgba(255, 255, 255, 0.3);
&:hover {
background: linear-gradient(135deg, #ff8800 0%, #ff7800 100%);
transform: translateY(-3px);
box-shadow:
0 8px 20px rgba(255, 120, 0, 0.5),
0 0 30px rgba(255, 120, 0, 0.4),
inset 0 1px 0 rgba(255, 255, 255, 0.4);
border-color: #ffaa66;
}
}
&:active {
transform: translateY(0);
}
}
}
// Single Resource Page // Single Resource Page
.resource-single { .resource-single {
margin: 0 auto; margin: 0 auto;

View file

@ -26,7 +26,7 @@
@import "pages/media"; @import "pages/media";
@import "pages/resources"; @import "pages/resources";
@import url("https://fonts.bunny.net/css2?family=Caveat:wght@400..700&family=Lato:ital,wght@0,100;0,300;0,400;0,700;0,900;1,100;1,300;1,400;1,700;1,900&family=Neonderthaw&display=swap"); @import url(https://fonts.bunny.net/css?family=abel:400|barlow-condensed:400,500|caveat:400|lato:300,300i,400,400i|neonderthaw:400);
@font-face { @font-face {
font-family: "DSEG7-Classic"; font-family: "DSEG7-Classic";

View file

@ -4,3 +4,5 @@ draft: false
--- ---
Welcome to my test chamber, here you'll find various experiements, tests and resources. Take a look around. Welcome to my test chamber, here you'll find various experiements, tests and resources. Take a look around.
The cake isn't a lie.

View file

@ -1,7 +1,6 @@
--- ---
title: "Last.fm Weekly Stats" title: "Last.fm Weekly Stats"
date: 2026-01-04 date: 2026-01-04
tags: ["javascript", "api", "last.fm"]
description: "Fetch and display your weekly listening stats from Last.fm" description: "Fetch and display your weekly listening stats from Last.fm"
icon: "lastfm-stats" icon: "lastfm-stats"
demo_url: "" demo_url: ""

View file

@ -1,7 +1,6 @@
--- ---
title: "HTML/CSS Lavalamp" title: "HTML/CSS Lavalamp"
date: 2026-01-04 date: 2026-01-04
tags: ["css", "html", "animation"]
description: "A pure CSS lavalamp animation with floating blobs" description: "A pure CSS lavalamp animation with floating blobs"
icon: "lavalamp" icon: "lavalamp"
demo_url: "" demo_url: ""

View file

@ -12,15 +12,24 @@
<div class="portal-icon orange-portal hidden-md-down"></div> <div class="portal-icon orange-portal hidden-md-down"></div>
</div> </div>
<div class="whiteboard"> <div class="portal-sign">
<div class="whiteboard-header"> <div class="portal-sign-decor">
<div class="whiteboard-description">{{ .Content }}</div> <div class="portal-sign-text">{{ .Content }}</div>
<div class="portal-sign-number">06</div>
<div class="portal-sign-sub">06/19</div>
</div>
<div class="portal-sign-lines"></div>
<div class="portal-sign-content">
<div class="portal-sign-header">
<div class="portal-description"></div>
</div> </div>
<div class="whiteboard-pins"> <div class="portal-sign-items">
{{ range .Pages }} {{ .Render "summary" }} {{ end }} {{ range .Pages }} {{ .Render "summary" }} {{ end }}
</div> </div>
</div> </div>
</div>
<div class="companion-cube"></div> <div class="companion-cube"></div>
</div> </div>

View file

@ -1,25 +1,8 @@
<div class="resource-pin" data-icon="{{ .Params.icon }}"> <div class="resource-pin" data-icon="{{ .Params.icon }}">
<div class="pin-tack"></div> <a href="{{ .Permalink }}">
<div class="resource-card"> <div class="resource-card">
<div class="resource-icon {{ .Params.icon }}"></div> <div class="resource-icon {{ .Params.icon }}"></div>
<div class="resource-info"> <div class="resource-info">{{ .Title }}</div>
<h2><a href="{{ .Permalink }}">{{ .Title }}</a></h2>
<p class="resource-description">{{ .Params.description }}</p>
{{ if .Params.tags }}
<div class="resource-tags">
{{ range .Params.tags }}
<span class="tag">{{ . }}</span>
{{ end }}
</div>
{{ end }}
<div class="resource-links">
{{ if .Params.demo_url }}
<a href="{{ .Params.demo_url }}" class="resource-link demo" target="_blank">Demo</a>
{{ end }}
{{ if .Params.source_url }}
<a href="{{ .Params.source_url }}" class="resource-link source" target="_blank">Source</a>
{{ end }}
</div>
</div>
</div> </div>
</a>
</div> </div>