Soundtrack

Not officially a licensed product or anything, but I do have a whole bunch of songs that I play regularly to set the mood for writing Paradiso. It’s hard to nail down exactly what this playlist is, maybe 1980s synth-pop meets industrial meets alt-rock?

/* Scoped to this block only */ #paradiso-grit{ –teal:#22e0d7; –rose:#ff86b0; –ink1:#0a0711; –ink2:#130d1d; –gold:#d9bf78; –radius:20px; –edge:2px; max-width:960px; margin:2.5rem auto; padding:0 16px; position:relative; } /* Card: darker, dirtier, vignette */ #paradiso-grit .card{ position:relative; overflow:hidden; text-align:center; color:#e8ecf3; border-radius:var(–radius); background: radial-gradient(120% 160% at 70% -20%, rgba(34,224,215,.10), transparent 60%), radial-gradient(100% 140% at 10% 0%, rgba(255,134,176,.09), transparent 55%), linear-gradient(180deg, var(–ink2), var(–ink1)); box-shadow: 0 0 0 var(–edge) rgba(217,191,120,.65) inset, 0 0 0 calc(var(–edge)*3) rgba(217,191,120,.25) inset, 0 0 40px rgba(34,224,215,.28), 0 0 86px rgba(255,134,176,.16); padding: 2.4rem 1.4rem 1.6rem; } /* gritty vignette */ #paradiso-grit .vignette{ content:””; position:absolute; inset:-20px; pointer-events:none; mix-blend-mode:multiply; background: radial-gradient(120% 120% at 50% 50%, transparent 62%, rgba(0,0,0,.55) 100%), radial-gradient(140% 140% at 20% 0%, rgba(0,0,0,.35), transparent 40%), radial-gradient(140% 140% at 80% 0%, rgba(0,0,0,.28), transparent 42%); z-index:3; } /* Heavy VHS grain (stronger + jitter) */ #paradiso-grit .grain{ content:””; position:absolute; inset:-2% -2% -2% -2%; pointer-events:none; mix-blend-mode:screen; z-index:2; background-image: repeating-linear-gradient(to bottom, rgba(255,255,255,.08) 0 1px, transparent 1px 4px), repeating-linear-gradient(90deg, rgba(255,255,255,.015) 0 2px, transparent 2px 6px); opacity:.6; animation: grit-jitter 1.3s steps(4) infinite; } @keyframes grit-jitter{ 0%{ transform: translate(0,0) } 25%{ transform: translate(-1px,1px) } 50%{ transform: translate(1px,-1px) } 75%{ transform: translate(0.5px,0.5px) } 100%{ transform: translate(0,0) } } /* Neon rain (kept minimal) */ #paradiso-grit .rain{ content:””; position:absolute; inset:-40% -20% -40% -20%; z-index:1; pointer-events:none; mix-blend-mode:screen; opacity:.45; background-image: repeating-linear-gradient( to bottom-right, rgba(34,224,215,.06) 0 2px, transparent 2px 22px), repeating-linear-gradient( to bottom-left, rgba(255,134,176,.05) 0 1px, transparent 1px 18px); animation: rain-move 14s linear infinite; } @keyframes rain-move{ 0%{ transform: translateY(-2%) } 100%{ transform: translateY(2%) } } /* Title: chrome + chromatic aberration */ #paradiso-grit .title-wrap{ position:relative; width:min(560px,92%); margin:0 auto 1.1rem; } #paradiso-grit .title{ position:relative; padding:.6rem 1rem; border-radius:14px; overflow:hidden; border:1px solid rgba(217,191,120,.6); background:linear-gradient(180deg, rgba(217,191,120,.16), rgba(217,191,120,.05)); text-transform:uppercase; letter-spacing:.22em; font-weight:900; font-size:1.02rem; background-clip:text; -webkit-background-clip:text; color:transparent; background-image: linear-gradient(90deg, #eaf2ff, #a5b6ff 45%, #f6a3d0 70%, #eef4ff); text-shadow: 0 0 10px rgba(255,134,176,.45), 0 0 22px rgba(34,224,215,.35); } /* RGB split (aberration) */ #paradiso-grit .title.aberr-r{ position:absolute; inset:0; transform:translateX(1px); color:transparent; text-shadow: 1px 0 0 rgba(255,0,70,.35); filter: blur(.2px); pointer-events:none; } #paradiso-grit .title.aberr-b{ position:absolute; inset:0; transform:translateX(-1px); color:transparent; text-shadow: -1px 0 0 rgba(0,200,255,.35); filter: blur(.2px); pointer-events:none; } /* hard scanlines over plate */ #paradiso-grit .title-wrap:after{ content:””; position:absolute; inset:0; border-radius:14px; pointer-events:none; mix-blend-mode:screen; background: repeating-linear-gradient(to bottom, rgba(255,255,255,.11) 0 1px, transparent 1px 3px); opacity:.45; animation: scan 4.8s linear infinite; } @keyframes scan{ 0%{ transform:translateY(-20%) } 100%{ transform:translateY(20%) } } /* Player with CRT bow + bezel */ #paradiso-grit .frame{ position:relative; margin:1.2rem auto 0; max-width:900px; z-index:4; } /* bezel / glow behind */ #paradiso-grit .bezel{ position:absolute; inset:-16px; border-radius:18px; z-index:3; pointer-events:none; background: radial-gradient(120% 140% at 50% 10%, rgba(34,224,215,.18), transparent 60%), radial-gradient(100% 140% at 50% 90%, rgba(255,134,176,.16), transparent 60%); filter: blur(18px); } /* CRT curvature via 3D transform + mask vignette */ #paradiso-grit .tube{ position:relative; z-index:5; border-radius:16px; overflow:hidden; box-shadow: 0 0 26px rgba(34,224,215,.45), 0 0 60px rgba(34,224,215,.22); transform: perspective(1200px) translateZ(0) scale(1) rotateX(.4deg); isolation:isolate; } #paradiso-grit .tube:after{ content:””; position:absolute; inset:0; pointer-events:none; z-index:6; background: radial-gradient(110% 140% at 50% 50%, transparent 64%, rgba(0,0,0,.38) 100%); mix-blend-mode:multiply; } #paradiso-grit iframe{ display:block; width:100%; height:420px; border:0; transform: translateZ(0); /* keep it crisp */ } /* Safety note */ #paradiso-grit .note{ margin:1.05rem 0 0; font-size:.92rem; opacity:.85; z-index:5; position:relative; } #paradiso-grit .note a{ color:var(–teal); text-decoration:none; border-bottom:1px dotted rgba(34,224,215,.6); } /* Mobile */ @media (max-width:600px){ #paradiso-grit .card{ padding:2rem 1rem 1.25rem; } #paradiso-grit iframe{ height:300px; } } /* Reduced motion */ @media (prefers-reduced-motion: reduce){ #paradiso-grit .grain, #paradiso-grit .rain{ animation:none !important; } }
PARADISO — OFFICIAL PLAYLIST
PARADISO — OFFICIAL PLAYLIST
PARADISO — OFFICIAL PLAYLIST

Trouble on Safari with blockers? Open the playlist on YouTube.

This playlist is definitely going to get longer and longer, so I’ll probably have a couple of them uploaded here, maybe grouped together by theme … or scene? Or you know what? I’ll just figure that bridge-crossing strategy when I have to.

In the meantime, enjoy!