.clock
	- for (var i = 0; i < 60; i++)
		.block(data-num=i)
	.divider

.switch-theme
	p Change theme
	label.switch
		input(type='checkbox' onchange='changeTheme(event)')
		span.slider
		
View Compiled
body
	width: 100vw
	height: 100vh
	display: flex
	justify-content: center
	align-items: center
	background: linear-gradient(to bottom right, #0f0f0f, #1a1a1a)
	transition: all .4s
	font-family: 'Roboto Mono', monospace
	font-weight: 300

// clock styles
// ------------------

.clock
	position: relative
	display: flex
	flex-flow: column wrap
	width: 280px
	height: 100px

.block
	width: calc(100% / 12)
	height: 20%
	color: lighten(#333, 8%)
	transition: .4s
	&:not(:nth-child(n + 16)):nth-child(n + 11),
	&:not(:nth-child(n + 46)):nth-child(n + 41)
		margin-right: 10px
	&:not(:nth-child(n + 31)):nth-child(n + 26)
		margin-right: 20px
	&:before
		content: attr(data-num)
		position: relative
		display: block
		font-size: 16px
		width: 100%
		height: 100%
		line-height: 20px
		text-align: center
	&:nth-child(-n + 10):before
		content: '0' attr(data-num)
	&.active:before
		color: whitesmoke
		font-weight: 500
	&.second:before
		color: #FF8300

.divider
	position: absolute
	width: 2px
	background-color: whitesmoke
	height: 60%
	top: 20%
	left: calc(50% + 19px)

// light theme
// ------------------------

body.light-theme
	background: lighten(silver, 15%)
	.block
		outline: 1px solid lighten(silver, 12%)
		color: darken(silver, 8%)
		&.active:before
			color: #333
		&.second
			background: lighten(silver, 8%)
			&:before
				color: #333
	.divider
		background: #333

// toggle button - taken straight from W3C
// ------------------------

.switch-theme
	position: absolute
	bottom: 40px
	right: 40px
	color: grey

.switch 
	position: relative
	display: inline-block
	width: 60px
	height: 34px
	margin-left: 30px
	input
		display: none

.slider 
	position: absolute
	cursor: pointer
	top: 0
	left: 0
	right: 0
	bottom: 0
	background-color: #ccc
	transition: all .4s
	border-radius: 34px

	&:before 
		position: absolute
		content: ''
		height: 26px
		width: 26px
		left: 4px
		bottom: 4px
		background-color: white
		transition: .4s
		border-radius: 50%

input:checked + .slider 
	background-color: #333

input:focus + .slider 
	box-shadow: 0 0 1px #2196F3

input:checked + .slider:before 
	transform: translateX(26px)
View Compiled
const numbers = [
	[1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1], // 0
	[1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1], // 1
	[1, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 0, 1], // 2
	[1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1], // 3
	[1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1], // 4
	[1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 1, 1], // 5
	[1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, 1, 1], // 6
	[1, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0], // 7
	[1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1], // 8
	[1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1]  // 9
];

const blocks = [];
const digits = Array.from(document.querySelectorAll('.block'));

for (let i = 0; i < 4; i++) {
	blocks.push(digits.slice( i * 15, i * 15 + 15 ));
}

const setNum = (block, num) => {
	let n = numbers[num];
	for (let i = 0; i < block.length; i++) {
		 block[i].classList[ n[i] === 1 ?  'add' : 'remove']('active');
	}
};

const time = {
	s: '',
	m: '',
	h: '',
	p: null
};

// time loop
const animator = () => {
	let d = new Date(),
		 h = d.getHours().toString(),
		 m = d.getMinutes().toString(),
		 s = d.getSeconds().toString();
	
	s = s.length === 1 ? '0' + s : s;
	m = m.length === 1 ? '0' + m : m;
	h = h.length === 1 ? '0' + h : h;
	
	if (s !== time.s) {
		for (let i = 0; i < digits.length; i++) {
			let d = digits[i];
			if (i === +s) {
				d.classList.add('second');
				if (time.p !== null)
					digits[time.p].classList.remove('second');
				time.p = i;
				time.s = s;
			}
		}
	}
	
	if (m !== time.m) {
		setNum(blocks[2], m[0]);
		setNum(blocks[3], m[1]);
		time.m = m;
	}
	
	if (h !== time.h) {
		setNum(blocks[0], h[0]);
		setNum(blocks[1], h[1]);
		time.h = h;
	}
 	window.requestAnimationFrame(animator)
}

// init
window.requestAnimationFrame(animator)

// toggle button

const body = document.querySelector('body');
changeTheme = ev => {
	body.classList.toggle('light-theme');
};

External CSS

  1. https://fonts.googleapis.com/css?family=Roboto+Mono:300,500

External JavaScript

This Pen doesn't use any external JavaScript resources.