<div id="case">
<div id="bezel">
<div id="tube">
<code id='screen'>10 PRINT CHR$(205.5+RND(1)); : GOTO 10
RUN
</code>
</div>
</div>
<div id="bottom-panel">
<div id="badge">
<svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 212.57 27.72">
<defs>
<linearGradient id="chrome" x1="0" y1="-5%" x2="100%" y2="5%">
<stop offset="0%" style="stop-color:#ccc;stop-opacity:1" />
<stop offset="33%" style="stop-color:#999;stop-opacity:1" />
<stop offset="33.5%" style="stop-color:#666;stop-opacity:1" />
<stop offset="60%" style="stop-color:#ccc;stop-opacity:1" />
<stop offset="60.5%" style="stop-color:#666;stop-opacity:1" />
<stop offset="65%" style="stop-color:#999;stop-opacity:1" />
<stop offset="100%" style="stop-color:#ccc;stop-opacity:1" />
</linearGradient>
</defs>
<path d="M187.25 7.67h-3.96v11.36h4.13v-5.94c0-1.55.95-2.33 2.67-2.33s2.15.52 2.24 1.98h3.88c0-3.87-.52-5.34-4.65-5.34-2.5 0-3.36.52-4.31 2.41V7.67zM24.73 14.5h-6.65v5.45h11.96l-5.31-5.45zm5.31-6.58H18.08v5.45h6.58l5.38-5.45zm176.24 8.87c-3.96 0-4.56-.35-4.56-2.33h10.85c-.17-5.51-.17-6.8-7.49-6.8-6.2 0-7.58 1.12-7.58 6.03 0 4.56 1.81 5.68 6.8 5.77 5.6 0 8.27-.26 8.27-3.96h-4.05c-.17.87-.51 1.29-2.24 1.29zm-4.65-4.73c.17-1.21.52-1.64 3.27-1.64 3.02 0 3.45.17 3.62 1.64h-6.89zm-153.97.43h4.13c-.34-3.88-1.46-4.82-7.23-4.82-6.54 0-8.01 1.03-8.01 5.86 0 4.82 1.38 5.94 7.49 5.94 6.46 0 7.75-.86 7.75-4.91h-4.13c0 1.12-.43 1.64-3.62 1.64-2.76 0-3.36-.69-3.36-2.93 0-2.15.6-2.15 3.88-2.15 2.41-.01 2.84.25 3.1 1.37zm96.02.69c0-4.65-1.38-5.6-8.01-5.6-7.15 0-8.01 1.2-8.01 6.03 0 4.82 1.2 5.86 8.01 5.86 7.23 0 8.01-1.21 8.01-6.29zm-11.8.26c0-2.33.52-2.58 3.53-2.58 3.36 0 3.96.08 3.96 2.58 0 2.33-.43 2.76-3.62 2.76-3.44-.01-3.87-.35-3.87-2.76zm48.91-.26c0-4.65-1.29-5.6-7.92-5.6-7.06 0-7.92 1.12-7.92 5.94 0 4.91 1.2 5.94 7.92 5.94 7.23.01 7.92-1.2 7.92-6.28zm-11.71.26c0-2.33.52-2.58 3.53-2.58 3.36 0 3.96.08 3.96 2.58 0 2.33-.43 2.76-3.62 2.76-3.44-.01-3.87-.35-3.87-2.76zm-98.94-.26c0-4.65-1.29-5.6-7.92-5.6-7.15 0-8.01 1.12-8.01 5.94 0 4.91 1.21 5.94 8.01 5.94 7.23.01 7.92-1.2 7.92-6.28zm-11.63.26c0-2.33.52-2.58 3.45-2.58 3.36 0 3.96.08 3.96 2.58 0 2.33-.43 2.76-3.62 2.76-3.36-.01-3.79-.35-3.79-2.76zm99.55-10.6v6.63c-.95-1.29-1.81-1.98-5.25-1.98-5.51 0-6.54 1.46-6.54 5.94 0 4.57 1.46 5.85 6.8 5.85 3.36 0 4.39-.86 5.17-2.32v2.06h4.13V2.83l-4.31.01zm-3.02 7.93c2.32 0 3.1.34 3.1 2.15 0 2.76-.17 3.02-3.44 3.02s-4.13-.09-4.13-2.41c0-2.68 1.03-2.76 4.47-2.76zM17.71 7.55V.53C16.29.16 15.32.01 13.9.01 6.5.01 0 6.21 0 13.91c0 7.92 6.57 13.82 13.97 13.82 1.35 0 2.09-.15 3.74-.6v-7.17c-1.64.82-2.46 1.05-3.81 1.05-4.11 0-7.25-3.44-7.25-7.25 0-3.96 3.06-7.32 7.17-7.32 1.42-.01 2.62.36 3.89 1.11zm58.97.12h-3.87v11.36h4.13v-5.86c0-1.72.86-2.32 3.19-2.32 2.15 0 2.76.77 2.76 2.93v5.25h4.22V13c0-1.64 1.29-2.15 3.27-2.15 1.9 0 2.76.52 2.76 2.15v6.03h4.13v-6.72c0-3.36-2.07-4.91-5.85-4.91-3.27 0-4.48 1.21-4.91 2.5-.86-1.46-2.07-2.5-5.34-2.5-3.1 0-3.96 1.03-4.48 2.93l-.01-2.66zm27.82 0h-3.88v11.36h4.13v-5.86c0-1.72 1.03-2.32 3.1-2.32 2.15 0 2.76.69 2.76 2.93v5.25h4.22V13c0-1.64 1.21-2.15 3.19-2.15 1.89 0 2.84.6 2.84 2.15v6.03h4.13v-6.72c0-3.36-2.07-4.91-5.85-4.91-3.27 0-4.39 1.12-4.91 2.5-.86-1.46-2.07-2.5-5.34-2.5-3.01 0-3.79 1.03-4.39 2.93V7.67z" fill="url(#chrome)"/>
</svg>
<div id="power">POWER</div>
</div>
<div id="ident">
<div>Video Monitor</div>
<div>Model 1702</div>
</div>
<div id="power-btn"></div>
<div id="door"></div>
<div id="video"></div>
<div id="audio"></div>
</div>
</div>
@import url('https://fonts.googleapis.com/css?family=Syncopate:700&display=swap');
@font-face {
font-family: 'C64';
src: url('https://s3-us-west-2.amazonaws.com/s.cdpn.io/49914/C64_Pro-STYLE.woff') format('woff2'),
url('https://s3-us-west-2.amazonaws.com/s.cdpn.io/49914/C64_Pro-STYLE.woff2') format('woff');
}
$fore: #887ecb;
$back: #50459b;
$dbeige: rgb(73, 65, 48);
$beige: rgb(215,200,190);
$gray: rgb(51,50,48);
:root {
background-color: #111;
background-image: radial-gradient(
circle,
#222,
#111
);
}
body {
width: 100vw;
height: 100vh;
display: flex;
justify-content: center;
align-items: center;
flex-direction: column;
}
#case {
position: relative;
padding: 3vmin 3vmin;
background-color: $beige;
border-radius: 1.25vmin;
border-top: 0.25vmin solid lighten($beige, 10%);
border-bottom: 0.75vmin solid darken($beige, 20%);
box-shadow:
inset 0 1vmin 2vmin darken($beige, 20%);
}
#bezel {
border-radius: 0.5vmin;
background-image:
linear-gradient(to right,
darken($gray, 5%),
$gray,
lighten($gray, 2%),
$gray,
darken($gray, 5%)
);
padding: 8vmin;
position: relative;
border-left: 2px solid darken($gray, 15%);
border-right: 2px solid darken($gray, 15%);
border-top: 1px solid lighten($gray, 35%);
border-bottom: 3px solid darken($gray, 15%);
box-shadow:
0 -1vmin 0.25vmin 0.5vmin darken($beige, 15%),
0 1vmin 0 0.5vmin lighten($beige, 10%);
&::before {
content: '';
position: absolute;
top: 3vmin; left: 3vmin;
right: 3vmin; bottom: 3vmin;
border: 1px solid $gray;
border-left-color: darken($gray, 10%);
border-right-color: darken($gray, 10%);
border-radius: 1vmin;
box-shadow:
inset 0 -1.5vmin 2vmin -0.05vmin darken($gray, 10%),
inset 0 1.5vmin 2vmin -0.05vmin darken($gray, 10%);
}
}
#tube {
box-shadow:
0 -3px 2px darken($gray, 8%),
0 2px 0 -1px lighten($gray, 30%),
0 3px lighten($gray, 10%);
$margin: 6vmin;
color: $fore;
background-color: $back;
padding: 2px;
font-size: 2vmin;
font-family: C64;
line-height: 1.11;
border: $margin solid $fore;
position: relative;
border-radius: 2vmin;
&::before, &::after {
border-radius: 2vmin;
position: absolute;
content: '';
top: $margin * -1;
left: $margin * -1;
right: $margin * -1;
bottom: $margin * -1;
}
//scanlines
&::before {
@keyframes scanlines {
from { background-position: 0 0px; }
to { background-position: 0 4px; }
}
animation: scanlines 16ms infinite steps(4, start);
mix-blend-mode: overlay;
background-size:
1vw 3px;
background-image:
linear-gradient(to bottom,
transparent 2px,
rgba(mix(black, $back), 0.6) 2px,
rgba(mix(black, $back), 0.9) 3px
)
}
// glare
&::after {
box-shadow:
inset 0 0 1vmin 0.25vmin rgba(black, 0.85),
0 0 10vmin -2vmin $back,
0 0 10vmin -5vmin darken($back, 20%);
background-blend-mode: multiply, normal, screen;
background-image:
radial-gradient(
ellipse closest-corner,
transparent 70%,
rgba($back, 0.7),
),
linear-gradient(
85deg,
rgba(darken($back, 20%), 0.2) 0%,
rgba(white, 0) 64.5%,
rgba(mix(#bbb, $fore, 75%), 0.05) 74.5%,
rgba(mix(#fff, $fore, 90%), 0.05) 75%,
rgba(mix(#eee, $fore, 75%), 0.07) 85%,
rgba(white, 0) 85.5%,
)
}
}
#screen {
display: block;
width: 72vmin ;
height: 53vmin;
white-space: pre-wrap;
word-wrap: break-word;
overflow: hidden;
user-select: none;
}
#bottom-panel {
position: absolute;
top: 100.9%;
left: 1vmin; right: 1vmin;
height: 16vmin;
background-color: $beige;
border-radius-bottom-left: 1rem;
border-left: 0.25vmin solid darken($beige, 5%);
border-right: 0.25vmin solid darken($beige, 5%);
background-image:
linear-gradient(
to bottom,
darken($beige, 40%) 0%,
lighten($beige, 15%) 1.25vmin,
lighten($beige, 10%) 6.5vmin,
rgba($beige,0) 7.25vmin
);
perspective: 12in;
}
#badge {
position: absolute;
z-index: 1;
top: -1vmin;
height: 7vmin;
left: 33vmin;
right: 33vmin;
background-image:
linear-gradient(-10deg,
$dbeige,
darken($dbeige, 7%)
);
border-left: 0.25vmin solid $beige;
border-right: 0.25vmin solid $beige;
svg {
width: 18vmin;
position: absolute;
top: 51%;
left: 1vmin;
transform: translate(0, -50%);
}
// rainbow
&::after {
content: '';
position: absolute;
top: 0.5vmin;
bottom: 0.5vmin;
right: 8vmin;
width: 10vmin;
opacity: 0.5;
background-image: linear-gradient(
to bottom,
red 0%,
red 15%, transparent 15%,
transparent 21.25%, orange 21.25%,
orange 36.25%, transparent 36.25%,
transparent 42.5%, yellow 42.5%,
yellow 57.5%, transparent 57.5%,
transparent 63.75%, limegreen 63.75%,
limegreen 78.75%, transparent 78.75%,
transparent 85%, cyan 85%,
cyan 100%
)
}
#power {
position: absolute;
right: 2vmin;
top: 0;
bottom: 0;
width: 5vmin;
background-color: black;
color: #666;
font: normal 0.75vmin system-ui, sans-serif;
text-align: center;
line-height: 11vmin;
}
}
#ident {
line-height: 1.5;
position: absolute;
top: 1vmin;
right: 13vmin;
height: 5vmin;
display: flex;
flex-direction: column;
justify-content: center;
font-family: 'Syncopate', sans-serif;
font-size: 1.25vmin;
font-weight: 700;
text-transform: uppercase;
color: rgba($gray, 0.85);
text-shadow:
-1px -1px lighten($beige, 30%),
1px 1px darken($beige, 10%);
border-radius: 0.333vmin;
border-top: 1px solid lighten($beige, 5%);
border-left: 1px solid lighten($beige, 25%);
box-shadow: 0.25vmin 0.25vmin 0.25vmin darken($beige, 10%);
padding: 0 3vmin 0 1vmin;
transform: skewx(3.5deg);
}
#door {
position: absolute;
bottom: 0;
left: 0;
width: 83vmin;
height: 7.5vmin;
border-top: 4px groove lighten($beige, 7.5%);
border-right: 2px groove lighten($beige, 5%);
}
#video, #audio {
font: normal 1vmin system-ui, sans-serif;
color: darken($beige, 50%);
position: absolute;
top: 9vmin;
width: 5vmin; height: 5vmin;
border-radius: 50%;
box-sizing: border-box;
border: 1px solid black;
border-color: lighten($beige, 5%) darken($beige, 10%) darken($beige, 10%) lighten($beige, 5%);
background-image:
radial-gradient(circle, darken($beige, 35%), rgba(black, 0.0));
box-shadow:
inset -0.5vmin -0.5vmin 0.5vmin -0.5vmin white,
inset -1vmin -1vmin 2vmin -1vmin lighten($beige, 10%),
inset 0.5vmin 0.5vmin 0.5vmin -0.5vmin rgba(0,0,0, 0.5),
inset 1vmin 1vmin 1vmin darken($beige, 35%);
&::before {
content: '';
position: absolute;
top: 0.75vmin; left: 0.75vmin;
bottom: 0.75vmin; right: 0.75vmin;
border-radius: 50%;
box-sizing: border-box;
box-shadow:
0 0.25vmin 0.1vmin rgba(black, 0.4),
0 0 0.75vmin darken($beige, 60%);
background-image:
radial-gradient(
circle at 50% 45%,
rgba(black, 0) 64%, rgba(black, 0.4) 70%,
),
radial-gradient(
circle 3.75vmin at 50% 85%,
rgba(white, 0) 64%, rgba(white, 0.4) 70%,
),
radial-gradient(
circle,
rgba(black, 0.8), rgba(black, 0.8) 15%,
rgba(black, 0.0) 40%,
rgba(black, 0.0) 45%,
darken(silver, 10%) 45%,
silver 50%, black,
);
}
&::after {
position: absolute;
bottom: -2em;
left: 0; right: 0;
text-align: center;
}
}
#video {
right: 15vmin;
&::before { background-color: yellow; }
&::after { content: 'VIDEO'; }
}
#audio {
right: 9vmin;
&::before { background-color: white; }
&::after { content: 'AUDIO'; }
}
#power-btn {
font: normal 1vmin system-ui, sans-serif;
color: darken($beige, 30%);
position: absolute;
width: 6.8vmin;
height: 3.8vmin;
right: 2.6vmin;
top: 1.5vmin;
background-color: black;
border: 1px solid darken($beige, 25%);
&::before {
content: '';
position: absolute;
top: 2px; left: 1px;
right: 1px; bottom: 1px;
border-radius: 2px;
background-image:
linear-gradient(
to bottom,
lighten(mix($beige, $gray), 10%),
mix($beige, $gray) 2px,
lighten(mix($beige, $gray), 15%)
);
box-sizing: border-box;
border-top: 0.5vmin solid mix($beige, $gray);
border-bottom: 3px solid darken(mix($beige, $gray), 15%);
border-right: 1px solid darken(mix($beige, $gray), 10%);
border-left: 1px solid darken(mix($beige, $gray), 10%);
}
&::after {
content: 'POWER';
position: absolute;
top: calc(100% + 0.5vmin);
left: 0; right: 0; text-align: center;
}
}
View Compiled
// 10 PRINT CHR$(205.5+RND(1)); : GOTO 10
setInterval(() => PRINT(STR$(205.5 + RND(1))), 20)
// support
const stdout = document.getElementById('screen');
const PRINT = (str) => { stdout.innerHTML += str; stdout.scrollTop = stdout.scrollHeight };
const STR$ = (val) => String.fromCodePoint((9380 + val)>>>0);
const RND = (range) => Math.random() * range;
View Compiled
This Pen doesn't use any external CSS resources.
This Pen doesn't use any external JavaScript resources.