* box-sizing border-box :root --on 0 --bg 'hsl(%s, %s, %s)' % (calc(200 - (var(--on) * 160)) calc((20 + (var(--on) * 50)) * 1%) calc((20 + (var(--on) * 60)) * 1%)) --cord 'hsl(0, 0%, %s)' % (calc((60 - (var(--on) * 50)) * 1%)) --stroke 'hsl(0, 0%, %s)' % (calc((60 - (var(--on) * 50)) * 1%)) --shine 'hsla(0, 0%, 100%, %s)' % calc(0.75 - (var(--on) * 0.5)) --cap 'hsl(0, 0%, %s)' % calc((40 + (var(--on) * 30)) * 1%) --filament 'hsl(45, %s, %s)' % (calc(var(--on) * 80%) calc((25 + (var(--on) * 75)) * 1%)) body min-height 100vh display flex align-items center justify-content center background var(--bg) .toggle-scene // !important for CodePen overflow visible !important height 50vmin position absolute &__cord stroke var(--cord) cursor move // Hide all cords if there's no JavaScript? &:nth-of-type(1) display none // Hide cords by default &:nth-of-type(2) &:nth-of-type(3) &:nth-of-type(4) &:nth-of-type(5) display none &-end stroke var(--cord) fill var(--cord) .toggle-scene__dummy-cord stroke-width 6 stroke var(--cord) .bulb &__filament stroke var(--filament) &__shine stroke var(--shine) &__flash stroke hsl(45, 80%, 80%) display none &__bulb stroke var(--stroke) fill 'hsla(%s, 80%, 80%, %s)' % (calc(180 - (95 * var(--on))) calc(0.1 + (0.4 * var(--on)))) &__cap fill var(--cap) &-shine fill var(--shine) &-outline stroke var(--stroke)