Project 04 / 06 · website
Streetlight Studios
A concept landing page for cinema-grade video ads. A concept, not client work.
Overview
Screenshots
Evidence tier: Existing evidence


See proof
Claim
Streetlight Studios: a concept landing page for cinema-grade video ads. A concept, not client work.
Stated by Danilo
Evidence
- Screenshots of the Streetlight Studios concept page (desktop and mobile) · manual · checked 29 September 2026Taken on 29/09/2026 from the page's own source file, because it is not online.
- Screen recording of the Streetlight Studios page opening (7.6 s, no sound) · manual · checked 29 September 2026Recorded on 29/09/2026 with Playwright from the page's own source file, from the first frame: loader, letterbox, headline.
- Streetlight source: letterbox bars (CSS) (mockup-cinema-ads.html, lines 137–142) · manual · checked 29 September 2026Copied verbatim from the real source file on 29/09/2026 (line endings normalised).
- Streetlight source: loading screen (CSS) (mockup-cinema-ads.html, lines 92–115) · manual · checked 29 September 2026Copied verbatim from the real source file on 29/09/2026 (line endings normalised).
- Streetlight source: logo draw-in (CSS) (mockup-cinema-ads.html, lines 317–331) · manual · checked 29 September 2026Copied verbatim from the real source file on 29/09/2026 (line endings normalised).
- Streetlight source: headline line reveal (CSS) (mockup-cinema-ads.html, lines 443–452) · manual · checked 29 September 2026Copied verbatim from the real source file on 29/09/2026 (line endings normalised).
- Streetlight source: reduced-motion rules (CSS) (mockup-cinema-ads.html, lines 351–363) · manual · checked 29 September 2026Copied verbatim from the real source file on 29/09/2026 (line endings normalised).
- Streetlight source: hiding the loading screen (JavaScript) (mockup-cinema-ads.html, lines 2244–2262) · manual · checked 29 September 2026Copied verbatim from the real source file on 29/09/2026 (line endings normalised).
- Streetlight source: typewriter hero text (JavaScript) (mockup-cinema-ads.html, lines 2486–2510) · manual · checked 29 September 2026Copied verbatim from the real source file on 29/09/2026 (line endings normalised).
Result
Real screenshots of the page, taken from its source file on 29/09/2026. That Danilo built it is his statement.
On this page
- 02 Motion breakdown: the opening, then its CSS animations taken apart
- 03 Code: the script behind the opening, and the reduced-motion rules
Not on this page
- Live: the page is not online; it runs from its own source file.
Motion breakdown
First the opening as it runs; then each of its CSS animations, read from the page’s own stylesheet and laid out on one timeline.
Assembled: the opening as it runs
Evidence tier: Existing evidence
Taken apart: every animation of the opening
Evidence tier: Existing evidence
Each bar starts at the rule’s delay and lasts its duration, counted from the moment the element appears. The numbers are read from the CSS excerpts below at build time; nothing is re-timed. The loading screen is then hidden by a script as soon as the hero video can play, or after 2.5 s at most (see Code).
Loading screen
.loading-namefade-up · starts 0.2 s · runs 0.6 s · ease-out.loading-subfade-up · starts 0.4 s · runs 0.6 s · ease-out.loading-bar-wrapfade-up · starts 0.5 s · runs 0.4 s · ease-out.loading-bar-fillload-fill · starts 0.6 s · runs 1.8 s · ease-out
Letterbox bars
.lb-tlb-t · starts 0.15 s · runs 0.95 s · cubic-bezier(.16,1,.3,1).lb-blb-b · starts 0.15 s · runs 0.95 s · cubic-bezier(.16,1,.3,1)
Logo draw-in
nav .logo .logo-svg circle[r="19"]logo-draw · starts 0.1 s · runs 1.2 s · cubic-bezier(.16,1,.3,1)nav .logo .logo-svg circle[r="8"]logo-draw · starts 0.5 s · runs 0.9 s · cubic-bezier(.16,1,.3,1)nav .logo .logo-svg circle:not([r="19"]):not([r="8"])logo-fade · starts 0.9 s · runs 0.4 s · ease
Headline line reveal
.hero-h1 .line:nth-child(1) spanline-up · starts 0.15 s · runs 0.75 s · cubic-bezier(.16,1,.3,1).hero-h1 .line:nth-child(2) spanline-up · starts 0.3 s · runs 0.75 s · cubic-bezier(.16,1,.3,1).hero-h1 .line:nth-child(3) spanline-up · starts 0.45 s · runs 0.75 s · cubic-bezier(.16,1,.3,1)
.loading-name{
font-family:var(--font-d);
font-size:1.5rem;letter-spacing:.35em;
text-transform:uppercase;color:var(--accent);
animation:fade-up .6s ease-out .2s both;
}
.loading-sub{
font-family:var(--font-m);
font-size:.44rem;letter-spacing:.32em;
text-transform:uppercase;color:var(--muted);
animation:fade-up .6s ease-out .4s both;
}
.loading-bar-wrap{
width:130px;height:1px;
background:var(--border);
position:relative;overflow:hidden;
animation:fade-up .4s ease-out .5s both;
}
.loading-bar-fill{
position:absolute;top:0;left:-100%;height:100%;
background:linear-gradient(90deg,var(--deep),var(--accent));
animation:load-fill 1.8s ease-out .6s forwards;
}
@keyframes load-fill{to{left:0}}
Evidence tier: Existing evidence
/* ── Letterbox ── */
.lb{position:fixed;left:0;right:0;height:52px;background:#000;z-index:9998}
.lb-t{top:0;animation:lb-t .95s cubic-bezier(.16,1,.3,1) .15s forwards}
.lb-b{bottom:0;animation:lb-b .95s cubic-bezier(.16,1,.3,1) .15s forwards}
@keyframes lb-t{to{transform:translateY(-100%)}}
@keyframes lb-b{to{transform:translateY(100%)}}
Evidence tier: Existing evidence
/* ── Logo draw-in stroke animation */
nav .logo .logo-svg circle[r="19"]{
stroke-dasharray:120;stroke-dashoffset:120;
animation:logo-draw 1.2s cubic-bezier(.16,1,.3,1) .1s both;
}
nav .logo .logo-svg circle[r="8"]{
stroke-dasharray:51;stroke-dashoffset:51;
animation:logo-draw .9s cubic-bezier(.16,1,.3,1) .5s both;
}
nav .logo .logo-svg circle:not([r="19"]):not([r="8"]){
opacity:0;
animation:logo-fade .4s ease .9s both;
}
@keyframes logo-draw{ to{ stroke-dashoffset:0; } }
@keyframes logo-fade{ to{ opacity:1; } }
Evidence tier: Existing evidence
.hero-h1 .line span{
display:block;
animation:line-up .75s cubic-bezier(.16,1,.3,1) both;
}
.hero-h1 .line:nth-child(1) span{animation-delay:.15s}
.hero-h1 .line:nth-child(2) span{animation-delay:.3s}
.hero-h1 .line:nth-child(3) span{animation-delay:.45s}
.hero-h1 em{font-style:italic;color:transparent;-webkit-text-stroke:1.5px var(--accent)}
@keyframes line-up{from{transform:translateY(110%)}to{transform:translateY(0)}}
@keyframes fade-up{from{opacity:0;transform:translateY(14px)}to{opacity:1;transform:none}}
Evidence tier: Existing evidence
Code
The loading screen and the typewriter are small scripts. For visitors who ask for reduced motion, the loading screen is skipped, and the rules below switch off the hero animations and the film grain.
/* ══ 1. LOADING OVERLAY ══ */
(function(){
const overlay = document.getElementById('loading-overlay');
// Fix #17: instant hide for reduced-motion users
if(window.matchMedia('(prefers-reduced-motion:reduce)').matches){
overlay.style.display='none';
return;
}
const heroVid = document.querySelector('#hero video');
function hideOverlay(){
overlay.classList.add('hide');
setTimeout(()=>{ overlay.style.display='none'; },1000);
}
if(heroVid){
heroVid.addEventListener('canplay', hideOverlay, {once:true});
setTimeout(hideOverlay, 2500); // max wait 2.5s
} else {
setTimeout(hideOverlay, 1000);
}
Evidence tier: Existing evidence
})();
/* ══ 11. TYPEWRITER HERO BODY ══ */
(function(){
const el = document.getElementById('hero-body-text');
if(!el) return;
const text = el.dataset.text || '';
el.textContent = '';
const cur = document.createElement('span');
cur.className = 'typewriter-cursor';
el.appendChild(cur);
let i = 0;
const delay = 1100; // start after hero headline animates
setTimeout(()=>{
const iv = setInterval(()=>{
if(i<text.length){
cur.before(document.createTextNode(text[i]));
i++;
} else {
clearInterval(iv);
setTimeout(()=>cur.remove(),1200);
}
}, 22);
}, delay);
})();
Evidence tier: Existing evidence
@media (prefers-reduced-motion: reduce){
.reveal,.hero-tag,.hero-body,.hero-ctas,.hero-trust{
opacity:1!important;transform:none!important;animation:none!important;
}
.hero-h1 .line span{transform:none!important;animation:none!important;}
.phone-card{animation:none!important;transform:none!important;}
.phone-cards{transform:none!important;}
.guarantee-badge-ring{animation:none!important;}
body::after{animation:none!important;}
.films-body,.pricing-desc,.guarantee-body,.cta-body,.hiw-body{
opacity:1!important;transform:none!important;
}
}
Evidence tier: Existing evidence