diff --git a/.gitattributes b/.gitattributes
index d3877a53..63306dc2 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -1,2 +1,2 @@
* text=auto eol=lf
-*.svg binary
+*.svg text
diff --git a/1-js/03-code-quality/01-debugging-chrome/chrome-open-sources.svg b/1-js/03-code-quality/01-debugging-chrome/chrome-open-sources.svg
index a3c7db6e..5fc6dce3 100644
--- a/1-js/03-code-quality/01-debugging-chrome/chrome-open-sources.svg
+++ b/1-js/03-code-quality/01-debugging-chrome/chrome-open-sources.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/1-js/03-code-quality/01-debugging-chrome/chrome-sources-breakpoint.svg b/1-js/03-code-quality/01-debugging-chrome/chrome-sources-breakpoint.svg
index 6e7b60f8..63bf4966 100644
--- a/1-js/03-code-quality/01-debugging-chrome/chrome-sources-breakpoint.svg
+++ b/1-js/03-code-quality/01-debugging-chrome/chrome-sources-breakpoint.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/1-js/03-code-quality/01-debugging-chrome/chrome-sources-console.svg b/1-js/03-code-quality/01-debugging-chrome/chrome-sources-console.svg
index d5d2a0b9..3fe5f124 100644
--- a/1-js/03-code-quality/01-debugging-chrome/chrome-sources-console.svg
+++ b/1-js/03-code-quality/01-debugging-chrome/chrome-sources-console.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/1-js/03-code-quality/01-debugging-chrome/chrome-sources-debugger-pause.svg b/1-js/03-code-quality/01-debugging-chrome/chrome-sources-debugger-pause.svg
index 83468fdd..0147c2e0 100644
--- a/1-js/03-code-quality/01-debugging-chrome/chrome-sources-debugger-pause.svg
+++ b/1-js/03-code-quality/01-debugging-chrome/chrome-sources-debugger-pause.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/1-js/03-code-quality/01-debugging-chrome/chrome-sources-debugger-trace-1.svg b/1-js/03-code-quality/01-debugging-chrome/chrome-sources-debugger-trace-1.svg
index 23937e0d..9fa1b3b8 100644
--- a/1-js/03-code-quality/01-debugging-chrome/chrome-sources-debugger-trace-1.svg
+++ b/1-js/03-code-quality/01-debugging-chrome/chrome-sources-debugger-trace-1.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/1-js/03-code-quality/01-debugging-chrome/chrome-tabs.svg b/1-js/03-code-quality/01-debugging-chrome/chrome-tabs.svg
index 41a3d878..01670825 100644
--- a/1-js/03-code-quality/01-debugging-chrome/chrome-tabs.svg
+++ b/1-js/03-code-quality/01-debugging-chrome/chrome-tabs.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/1-js/03-code-quality/02-coding-style/code-style.svg b/1-js/03-code-quality/02-coding-style/code-style.svg
index 12a755c9..739d9f1e 100644
--- a/1-js/03-code-quality/02-coding-style/code-style.svg
+++ b/1-js/03-code-quality/02-coding-style/code-style.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/1-js/99-js-misc/01-proxy/proxy.svg b/1-js/99-js-misc/01-proxy/proxy.svg
index 157e350f..6b2224cf 100644
--- a/1-js/99-js-misc/01-proxy/proxy.svg
+++ b/1-js/99-js-misc/01-proxy/proxy.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/2-ui/1-document/02-dom-nodes/domconsole0.svg b/2-ui/1-document/02-dom-nodes/domconsole0.svg
index ea0d9141..eb99f193 100644
--- a/2-ui/1-document/02-dom-nodes/domconsole0.svg
+++ b/2-ui/1-document/02-dom-nodes/domconsole0.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/2-ui/1-document/02-dom-nodes/domconsole1.svg b/2-ui/1-document/02-dom-nodes/domconsole1.svg
index d7f32deb..02ef5f0a 100644
--- a/2-ui/1-document/02-dom-nodes/domconsole1.svg
+++ b/2-ui/1-document/02-dom-nodes/domconsole1.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/2-ui/1-document/02-dom-nodes/elk.svg b/2-ui/1-document/02-dom-nodes/elk.svg
index 1797a099..448eea9d 100644
--- a/2-ui/1-document/02-dom-nodes/elk.svg
+++ b/2-ui/1-document/02-dom-nodes/elk.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/2-ui/1-document/02-dom-nodes/inspect.svg b/2-ui/1-document/02-dom-nodes/inspect.svg
index a894a5c0..60696ec0 100644
--- a/2-ui/1-document/02-dom-nodes/inspect.svg
+++ b/2-ui/1-document/02-dom-nodes/inspect.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/2-ui/1-document/09-size-and-scroll/4-put-ball-in-center/field.svg b/2-ui/1-document/09-size-and-scroll/4-put-ball-in-center/field.svg
index 4ae90b1c..f5bd9f4f 100644
--- a/2-ui/1-document/09-size-and-scroll/4-put-ball-in-center/field.svg
+++ b/2-ui/1-document/09-size-and-scroll/4-put-ball-in-center/field.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/2-ui/1-document/09-size-and-scroll/metric-all.svg b/2-ui/1-document/09-size-and-scroll/metric-all.svg
index a5dadb47..20a59e18 100644
--- a/2-ui/1-document/09-size-and-scroll/metric-all.svg
+++ b/2-ui/1-document/09-size-and-scroll/metric-all.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/2-ui/1-document/09-size-and-scroll/metric-client-width-height.svg b/2-ui/1-document/09-size-and-scroll/metric-client-width-height.svg
index 83864b4c..2603b05f 100644
--- a/2-ui/1-document/09-size-and-scroll/metric-client-width-height.svg
+++ b/2-ui/1-document/09-size-and-scroll/metric-client-width-height.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/2-ui/1-document/09-size-and-scroll/metric-css.svg b/2-ui/1-document/09-size-and-scroll/metric-css.svg
index 13aa62af..1f2e5f78 100644
--- a/2-ui/1-document/09-size-and-scroll/metric-css.svg
+++ b/2-ui/1-document/09-size-and-scroll/metric-css.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/2-ui/1-document/09-size-and-scroll/metric-offset-parent.svg b/2-ui/1-document/09-size-and-scroll/metric-offset-parent.svg
index 9e247639..2d108473 100644
--- a/2-ui/1-document/09-size-and-scroll/metric-offset-parent.svg
+++ b/2-ui/1-document/09-size-and-scroll/metric-offset-parent.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/2-ui/1-document/09-size-and-scroll/metric-offset-width-height.svg b/2-ui/1-document/09-size-and-scroll/metric-offset-width-height.svg
index 49bdccda..4d30d90c 100644
--- a/2-ui/1-document/09-size-and-scroll/metric-offset-width-height.svg
+++ b/2-ui/1-document/09-size-and-scroll/metric-offset-width-height.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/2-ui/1-document/09-size-and-scroll/metric-scroll-top.svg b/2-ui/1-document/09-size-and-scroll/metric-scroll-top.svg
index c6d14d0f..7f72de42 100644
--- a/2-ui/1-document/09-size-and-scroll/metric-scroll-top.svg
+++ b/2-ui/1-document/09-size-and-scroll/metric-scroll-top.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/2-ui/1-document/09-size-and-scroll/metric-scroll-width-height.svg b/2-ui/1-document/09-size-and-scroll/metric-scroll-width-height.svg
index 0c3d2995..75a24e3b 100644
--- a/2-ui/1-document/09-size-and-scroll/metric-scroll-width-height.svg
+++ b/2-ui/1-document/09-size-and-scroll/metric-scroll-width-height.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/2-ui/1-document/10-size-and-scroll-window/document-client-width-height.svg b/2-ui/1-document/10-size-and-scroll-window/document-client-width-height.svg
index 829d27ee..18cd37a7 100644
--- a/2-ui/1-document/10-size-and-scroll-window/document-client-width-height.svg
+++ b/2-ui/1-document/10-size-and-scroll-window/document-client-width-height.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/2-ui/2-events/01-introduction-browser-events/04-move-ball-field/move-ball-coords.svg b/2-ui/2-events/01-introduction-browser-events/04-move-ball-field/move-ball-coords.svg
index fc26b023..2acc6b03 100644
--- a/2-ui/2-events/01-introduction-browser-events/04-move-ball-field/move-ball-coords.svg
+++ b/2-ui/2-events/01-introduction-browser-events/04-move-ball-field/move-ball-coords.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/2-ui/3-event-details/4-mouse-drag-and-drop/2-drag-heroes/solution.view/field.svg b/2-ui/3-event-details/4-mouse-drag-and-drop/2-drag-heroes/solution.view/field.svg
index 4ae90b1c..f5bd9f4f 100644
--- a/2-ui/3-event-details/4-mouse-drag-and-drop/2-drag-heroes/solution.view/field.svg
+++ b/2-ui/3-event-details/4-mouse-drag-and-drop/2-drag-heroes/solution.view/field.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/2-ui/99-ui-misc/02-selection-range/range-example-p-0-1.svg b/2-ui/99-ui-misc/02-selection-range/range-example-p-0-1.svg
index 9ebcffaa..a97d1b47 100644
--- a/2-ui/99-ui-misc/02-selection-range/range-example-p-0-1.svg
+++ b/2-ui/99-ui-misc/02-selection-range/range-example-p-0-1.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/2-ui/99-ui-misc/02-selection-range/range-example-p-1-3.svg b/2-ui/99-ui-misc/02-selection-range/range-example-p-1-3.svg
index 088c71c2..2a8f9aca 100644
--- a/2-ui/99-ui-misc/02-selection-range/range-example-p-1-3.svg
+++ b/2-ui/99-ui-misc/02-selection-range/range-example-p-1-3.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/2-ui/99-ui-misc/02-selection-range/range-example-p-2-b-3-range.svg b/2-ui/99-ui-misc/02-selection-range/range-example-p-2-b-3-range.svg
index f13c6d74..32843436 100644
--- a/2-ui/99-ui-misc/02-selection-range/range-example-p-2-b-3-range.svg
+++ b/2-ui/99-ui-misc/02-selection-range/range-example-p-2-b-3-range.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/2-ui/99-ui-misc/02-selection-range/range-example-p-2-b-3.svg b/2-ui/99-ui-misc/02-selection-range/range-example-p-2-b-3.svg
index 4bf5b00b..859f755c 100644
--- a/2-ui/99-ui-misc/02-selection-range/range-example-p-2-b-3.svg
+++ b/2-ui/99-ui-misc/02-selection-range/range-example-p-2-b-3.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/2-ui/99-ui-misc/02-selection-range/selection-direction-backward.svg b/2-ui/99-ui-misc/02-selection-range/selection-direction-backward.svg
index 6399f9d5..85615d38 100644
--- a/2-ui/99-ui-misc/02-selection-range/selection-direction-backward.svg
+++ b/2-ui/99-ui-misc/02-selection-range/selection-direction-backward.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/2-ui/99-ui-misc/02-selection-range/selection-direction-forward.svg b/2-ui/99-ui-misc/02-selection-range/selection-direction-forward.svg
index 03c6fc5c..511b00a2 100644
--- a/2-ui/99-ui-misc/02-selection-range/selection-direction-forward.svg
+++ b/2-ui/99-ui-misc/02-selection-range/selection-direction-forward.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/2-ui/99-ui-misc/02-selection-range/selection-firefox.svg b/2-ui/99-ui-misc/02-selection-range/selection-firefox.svg
index 050852d3..aa7ff1eb 100644
--- a/2-ui/99-ui-misc/02-selection-range/selection-firefox.svg
+++ b/2-ui/99-ui-misc/02-selection-range/selection-firefox.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/5-network/11-websocket/websocket-handshake.svg b/5-network/11-websocket/websocket-handshake.svg
index 79fa2776..96c2cd3e 100644
--- a/5-network/11-websocket/websocket-handshake.svg
+++ b/5-network/11-websocket/websocket-handshake.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/7-animation/1-bezier-curve/article.md b/7-animation/1-bezier-curve/article.md
index b9e2cf6e..63b9a03c 100644
--- a/7-animation/1-bezier-curve/article.md
+++ b/7-animation/1-bezier-curve/article.md
@@ -4,6 +4,12 @@ Bezier curves are used in computer graphics to draw shapes, for CSS animation an
They are a very simple thing, worth to study once and then feel comfortable in the world of vector graphics and advanced animations.
+```smart header="Some theory, please"
+This article provides a theoretical, but very needed insight into what Bezier curves are, while [the next one](info:css-animations#bezier-curve) shows how we can use them for CSS animations.
+
+Please take your time to read and understand the concept, it'll serve you well.
+```
+
## Control points
A [bezier curve](https://en.wikipedia.org/wiki/B%C3%A9zier_curve) is defined by control points.
diff --git a/7-animation/1-bezier-curve/bezier3-draw1.svg b/7-animation/1-bezier-curve/bezier3-draw1.svg
index fd3ca092..b3cf15ae 100644
--- a/7-animation/1-bezier-curve/bezier3-draw1.svg
+++ b/7-animation/1-bezier-curve/bezier3-draw1.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/7-animation/2-css-animations/article.md b/7-animation/2-css-animations/article.md
index 1b1b0ca0..807545e8 100644
--- a/7-animation/2-css-animations/article.md
+++ b/7-animation/2-css-animations/article.md
@@ -254,7 +254,15 @@ As we know, `y` measures "the completion of the animation process". The value `y
That's a "soft" variant for sure. If we put `y` values like `-99` and `99` then the train would jump out of the range much more.
-But how do we make a Bezier curve for a specific task? There are many tools. For instance, we can do it on the site .
+But how do we make a Bezier curve for a specific task? There are many tools.
+
+- For instance, we can do it on the site .
+- Browser developer tools also have special support for Bezier curves in CSS:
+ 1. Open the developer tools with `key:F12` (Mac: `key:Cmd+Opt+I`).
+ 2. Select the `Elements` tab, then pay attention to the `Styles` sub-panel at the right side.
+ 3. CSS properties with a word `cubic-bezier` will have an icon before this word.
+ 4. Click this icon to edit the curve.
+
### Steps
@@ -266,7 +274,19 @@ Here's a list of digits, without any animations, just as a source:
[codetabs src="step-list"]
-We'll make the digits appear in a discrete way by making the part of the list outside of the red "window" invisible and shifting the list to the left with each step.
+In the HTML, a stripe of digits is enclosed into a fixed-length `
`:
+
+```html
+
+
0123456789
+
+```
+
+The `#digit` div has a fixed width and a border, so it looks like a red window.
+
+We'll make a timer: the digits will appear one by one, in a discrete way.
+
+To achieve that, we'll hide the `#stripe` outside of `#digit` using `overflow: hidden`, and then shift the `#stripe` to the left step-by-step.
There will be 9 steps, a step-move for each digit:
@@ -277,17 +297,17 @@ There will be 9 steps, a step-move for each digit:
}
```
-In action:
-
-[codetabs src="step"]
-
The first argument of `steps(9, start)` is the number of steps. The transform will be split into 9 parts (10% each). The time interval is automatically divided into 9 parts as well, so `transition: 9s` gives us 9 seconds for the whole animation – 1 second per digit.
The second argument is one of two words: `start` or `end`.
The `start` means that in the beginning of animation we need to make the first step immediately.
-We can observe that during the animation: when we click on the digit it changes to `1` (the first step) immediately, and then changes in the beginning of the next second.
+In action:
+
+[codetabs src="step"]
+
+A click on the digit changes it to `1` (the first step) immediately, and then changes in the beginning of the next second.
The process is progressing like this:
@@ -297,6 +317,8 @@ The process is progressing like this:
- `8s` -- `-90%`
- (the last second shows the final value).
+Here, the first change was immediate because of `start` in the `steps`.
+
The alternative value `end` would mean that the change should be applied not in the beginning, but at the end of each second.
So the process for `steps(9, end)` would go like this:
@@ -307,20 +329,20 @@ So the process for `steps(9, end)` would go like this:
- ...
- `9s` -- `-90%`
-Here's `steps(9, end)` in action (note the pause between the first digit change):
+Here's `steps(9, end)` in action (note the pause before the first digit change):
[codetabs src="step-end"]
-There are also shorthand values:
+There are also some pre-defined shorthands for `steps(...)`:
- `step-start` -- is the same as `steps(1, start)`. That is, the animation starts immediately and takes 1 step. So it starts and finishes immediately, as if there were no animation.
- `step-end` -- the same as `steps(1, end)`: make the animation in a single step at the end of `transition-duration`.
-These values are rarely used, because that's not really animation, but rather a single-step change.
+These values are rarely used, as they represent not a real animation, but rather a single-step change. We mention them here for completeness.
-## Event transitionend
+## Event: "transitionend"
-When the CSS animation finishes the `transitionend` event triggers.
+When the CSS animation finishes, the `transitionend` event triggers.
It is widely used to do an action after the animation is done. Also we can join animations.
diff --git a/8-web-components/1-webcomponents-intro/web-components-twitter.svg b/8-web-components/1-webcomponents-intro/web-components-twitter.svg
index 9d3b0b00..8f59f789 100644
--- a/8-web-components/1-webcomponents-intro/web-components-twitter.svg
+++ b/8-web-components/1-webcomponents-intro/web-components-twitter.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/figures.sketch b/figures.sketch
index 44c75eb0..10433319 100644
Binary files a/figures.sketch and b/figures.sketch differ