Liveweave: Generative AI Web Editor & HTML/CSS/JS Playground
Initializing
Liveweave
Web
expand_more
home
Home
Palette
Color Explorer
arrow_outward
Polyline
Graphics Editor
arrow_outward
frame_source
Python Playground
arrow_outward
build
Tools
expand_more
restart_alt
Load "Hello Weaver!"
post_add
Generate Lorem ipsum...
code
Format HTML
code_blocks
Format CSS
data_object
Format JavaScript
library_add
Library
expand_more
A
Algolia JS
Animate CSS
Apex Charts JS
B
Bulma CSS
Bootstrap
C
Chart JS
Chartist
Create JS
D
D3
Dojo
F
Foundation
Fullpage JS
G
Granim JS
Google Charts
H
Halfmoon
J
jQuery
M
Materialize
Moment JS
Masonry JS
Milligram CSS
P
Pure CSS
Primer CSS
Popper JS
Pattern CSS
Picnic CSS
R
React JS
Raphael JS
Raisin CSS
S
Semantic UI
Skeleton CSS
Spectre CSS
Tachyons CSS
T
Tailwind
Three JS
U
UI Kit
Vis JS
W
Water CSS
download
Download
expand_more
developer_mode
Download as HTML
folder_zip
Download as .ZIP
cloud_upload
Fork
account_circle
Login
settings
Settings
expand_more
Editor font
14
px
A
A
Night mode
Line number
Mini map
Word wrap
sync_alt
Reset Settings
smart_display
Run
left_panel_close
AI Assistant
dashboard
All
HTML
CSS
JS
visibility
Preview
bolt
Live Preview
terminal
JS Console
<!DOCTYPE html> <html> <head> <title>Retro cassette player demo</title> </head> <body> <!-- Start your code here --> <div class="scene"> <div class="grid"></div> <div class="player"> <div class="player-top"> <span>STEREO</span> <span class="model">LW-84</span> </div> <div class="screen"> <div class="screen-info"> <span>PLAY</span> <span>SIDE A</span> </div> <div class="equalizer"> <i></i> <i></i> <i></i> <i></i> <i></i> <i></i> <i></i> <i></i> <i></i> <i></i> <i></i> </div> </div> <div class="cassette"> <div class="cassette-label"> <div class="label-top"> <strong>NIGHT DRIVE</strong> <span>90</span> </div> <div class="label-line"></div> <div class="tape-window"> <div class="reel reel-left"> <div class="hub"></div> </div> <div class="tape-path"></div> <div class="reel reel-right"> <div class="hub"></div> </div> </div> <div class="label-bottom"> LIVEWEAVE • CHROME TYPE </div> </div> <div class="cassette-bottom"> <div class="screw"></div> <div class="tape-head"> <span></span> <span></span> <span></span> </div> <div class="screw"></div> </div> </div> <div class="controls"> <button>■</button> <button>◀◀</button> <button class="play">▶</button> <button>▶▶</button> <button>●</button> </div> </div> <div class="shadow"></div> </div> <!-- End your code here --> </body> </html>
* { box-sizing: border-box; } html, body { margin: 0; width: 100%; height: 100%; } body { overflow: hidden; font-family: "Trebuchet MS", Arial, sans-serif; background: #080711; } .scene { position: relative; width: 100vw; height: 100vh; min-height: 650px; display: flex; justify-content: center; align-items: center; overflow: hidden; background: radial-gradient( circle at 50% 38%, rgba(236, 59, 255, 0.18), transparent 27% ), radial-gradient( circle at 50% 70%, rgba(0, 229, 255, 0.13), transparent 35% ), linear-gradient( 180deg, #111020 0%, #080710 62%, #030307 100% ); } /* ----------------------------- RETRO FLOOR GRID ----------------------------- */ .grid { position: absolute; left: -25%; bottom: -34%; width: 150%; height: 72%; background-image: linear-gradient( rgba(0, 229, 255, 0.18) 1px, transparent 1px ), linear-gradient( 90deg, rgba(238, 56, 255, 0.17) 1px, transparent 1px ); background-size: 55px 42px; transform: perspective(350px) rotateX(64deg); -webkit-mask-image: linear-gradient( to bottom, transparent, black 35% ); mask-image: linear-gradient( to bottom, transparent, black 35% ); animation: gridMove 2s linear infinite; } @keyframes gridMove { from { background-position: 0 0; } to { background-position: 0 42px; } } /* ----------------------------- PLAYER ----------------------------- */ .player { position: relative; z-index: 5; width: 430px; padding: 22px 24px 26px; border: 1px solid #555563; border-radius: 25px; background: linear-gradient( 145deg, #353541, #15151c 48%, #292932 ); box-shadow: inset 2px 2px 2px rgba(255,255,255,0.15), inset -3px -3px 6px rgba(0,0,0,0.7), 0 35px 60px rgba(0,0,0,0.65), 0 0 70px rgba(222,47,255,0.08); animation: playerFloat 5s ease-in-out infinite; } @keyframes playerFloat { 0%, 100% { transform: translateY(8px) rotate(-0.5deg); } 50% { transform: translateY(-8px) rotate(0.5deg); } } /* ----------------------------- HEADER ----------------------------- */ .player-top { display: flex; justify-content: space-between; align-items: center; padding: 0 5px 14px; color: #c8c8cf; font-size: 11px; font-weight: bold; letter-spacing: 3px; } .model { color: #ff4be1; } /* ----------------------------- DIGITAL DISPLAY ----------------------------- */ .screen { position: relative; height: 85px; padding: 12px 15px; overflow: hidden; border: 2px solid #0b0c10; border-radius: 8px; background: linear-gradient( 180deg, #061b1e, #021011 ); box-shadow: inset 0 0 20px rgba(0,0,0,0.9), 0 1px rgba(255,255,255,0.08); } .screen::before { content: ""; position: absolute; inset: 0; background: repeating-linear-gradient( to bottom, transparent 0, transparent 3px, rgba(255,255,255,0.018) 4px ); pointer-events: none; } .screen-info { display: flex; justify-content: space-between; color: #6effd9; font-family: monospace; font-size: 11px; letter-spacing: 2px; text-shadow: 0 0 7px #00ffc8; } /* ----------------------------- EQUALIZER ----------------------------- */ .equalizer { position: absolute; left: 15px; right: 15px; bottom: 12px; height: 40px; display: flex; align-items: flex-end; gap: 7px; } .equalizer i { display: block; flex: 1; height: 12px; border-radius: 2px 2px 0 0; background: linear-gradient( to top, #00ffc8, #00bfff 60%, #ff43df ); box-shadow: 0 0 8px rgba(0,255,210,0.45); animation: equalize 0.75s ease-in-out infinite alternate; } .equalizer i:nth-child(2) { animation-delay: -0.5s; } .equalizer i:nth-child(3) { animation-delay: -0.15s; } .equalizer i:nth-child(4) { animation-delay: -0.65s; } .equalizer i:nth-child(5) { animation-delay: -0.3s; } .equalizer i:nth-child(6) { animation-delay: -0.7s; } .equalizer i:nth-child(7) { animation-delay: -0.2s; } .equalizer i:nth-child(8) { animation-delay: -0.55s; } .equalizer i:nth-child(9) { animation-delay: -0.35s; } .equalizer i:nth-child(10) { animation-delay: -0.8s; } .equalizer i:nth-child(11) { animation-delay: -0.1s; } @keyframes equalize { 0% { height: 8px; } 50% { height: 36px; } 100% { height: 18px; } } /* ----------------------------- CASSETTE ----------------------------- */ .cassette { position: relative; width: 350px; height: 218px; margin: 22px auto 20px; padding: 15px; border-radius: 14px; background: linear-gradient( 145deg, #e8e4d8, #b8b3a9 ); border: 2px solid #111; box-shadow: inset 2px 2px 4px rgba(255,255,255,0.8), inset -4px -4px 7px rgba(0,0,0,0.25), 0 8px 16px rgba(0,0,0,0.45); } .cassette::before, .cassette::after { content: ""; position: absolute; width: 7px; height: 7px; border-radius: 50%; background: #333; box-shadow: inset 1px 1px 2px #000, 0 0 0 1px #888; } .cassette::before { left: 10px; top: 10px; } .cassette::after { right: 10px; top: 10px; } /* ----------------------------- CASSETTE LABEL ----------------------------- */ .cassette-label { height: 142px; padding: 10px 17px; border-radius: 6px; background: linear-gradient( 165deg, #fff8db, #e6ddba ); box-shadow: inset 0 0 7px rgba(0,0,0,0.18); } .label-top { display: flex; justify-content: space-between; align-items: center; color: #262327; } .label-top strong { font-size: 16px; letter-spacing: 2px; } .label-top span { font-size: 22px; font-weight: 900; color: #ec3b78; } .label-line { height: 5px; margin: 6px 0 9px; background: linear-gradient( 90deg, #ff477e 0 34%, #ffaf3f 34% 66%, #5b5be8 66% ); } /* ----------------------------- TAPE WINDOW ----------------------------- */ .tape-window { position: relative; height: 65px; display: flex; justify-content: space-between; align-items: center; padding: 0 33px; overflow: hidden; border: 3px solid #393638; border-radius: 33px; background: linear-gradient( 180deg, #201d1e, #080708 ); box-shadow: inset 0 3px 8px rgba(0,0,0,0.9); } .reel { position: relative; z-index: 3; width: 50px; height: 50px; border-radius: 50%; border: 5px solid #d8d2bc; background: repeating-conic-gradient( #eee6cb 0deg 14deg, #77736a 14deg 27deg ); box-shadow: 0 0 0 2px #333, inset 0 0 0 5px #1b1919; animation: spin 1.8s linear infinite; } .hub { position: absolute; left: 50%; top: 50%; width: 17px; height: 17px; transform: translate(-50%, -50%); border-radius: 50%; background: #191718; border: 3px solid #e1d8ba; } @keyframes spin { to { transform: rotate(360deg); } } .tape-path { position: absolute; left: 70px; right: 70px; height: 10px; background: #392018; box-shadow: 0 -3px 7px rgba(150,80,50,0.25), 0 3px 7px rgba(0,0,0,0.8); } .label-bottom { margin-top: 5px; text-align: center; font-size: 8px; font-weight: bold; letter-spacing: 2px; color: #4d4843; } /* ----------------------------- BOTTOM CASSETTE AREA ----------------------------- */ .cassette-bottom { height: 46px; display: flex; align-items: center; justify-content: space-around; padding-top: 10px; } .screw { width: 9px; height: 9px; border-radius: 50%; background: #4c4c4c; box-shadow: inset 1px 1px 2px #111, 0 0 0 1px #888; } .tape-head { width: 165px; height: 33px; display: flex; justify-content: center; gap: 25px; align-items: center; clip-path: polygon( 12% 0, 88% 0, 100% 100%, 0 100% ); background: #4b4744; } .tape-head span { width: 10px; height: 10px; border-radius: 50%; background: #d3cdbd; border: 2px solid #222; } /* ----------------------------- CONTROLS ----------------------------- */ .controls { display: flex; justify-content: center; gap: 8px; } .controls button { width: 55px; height: 39px; cursor: pointer; border: 0; border-bottom: 4px solid #09090d; border-radius: 5px; color: #aaaab4; background: linear-gradient( #393942, #202027 ); box-shadow: inset 0 1px rgba(255,255,255,0.15), 0 3px 5px rgba(0,0,0,0.4); transition: transform 0.15s, color 0.15s; } .controls button:hover { color: #ffffff; transform: translateY(-2px); } .controls button:active { transform: translateY(2px); border-bottom-width: 1px; } .controls .play { color: #6effd9; text-shadow: 0 0 8px #00ffc8; } /* ----------------------------- FLOOR SHADOW ----------------------------- */ .shadow { position: absolute; z-index: 2; left: 50%; top: calc(50% + 285px); width: 410px; height: 45px; transform: translateX(-50%); border-radius: 50%; background: rgba(0,0,0,0.65); filter: blur(15px); animation: shadowPulse 5s ease-in-out infinite; } @keyframes shadowPulse { 0%, 100% { transform: translateX(-50%) scaleX(1); opacity: 0.65; } 50% { transform: translateX(-50%) scaleX(0.88); opacity: 0.45; } } /* ----------------------------- SMALL SCREEN SUPPORT ----------------------------- */ @media (max-width: 520px) { .player { transform: scale(0.78); } @keyframes playerFloat { 0%, 100% { transform: scale(0.78) translateY(8px); } 50% { transform: scale(0.78) translateY(-8px); } } }
// Write JavaScript here
terminal
JavaScript Console
Preview
Clear
close
›
Run