:) CREATE TEMPORARY TABLE test (x Tuple(a String, b Array(Tuple(c Tuple(e String), d String))), y String)
+
+CREATE TEMPORARY TABLE test
+(
+ `x` Tuple(
+ a String,
+ b Array(Tuple(
+ c Tuple(
+ e String),
+ d String))),
+ `y` String
+)
+
+
+
+
+
create_if_not_exists As a Setting
+
+
A usual way:
+
+
CREATE TABLE IF NOT EXISTS test (x UInt8) ORDER BY ();
+
+
+
A new option, since 24.9:
+
+
SET create_if_not_exists = 1;
+
+CREATE TABLE test (x UInt8) ORDER BY ();
+
+
+
— "out of band" if not exists specification as a setting.
+
+
Developer: Peter Nguyen.
+
+
+
+
+
New Functions overlay, overlayUTF8
+
+
Replaces a fragment in a string with another string in a specified position.
+
+
SELECT overlay('Hello, world!', 'test', 8, 5) AS res
+
+ ┌─res──────────┐
+1. │ Hello, test! │
+ └──────────────┘
+
+WITH 'Hello, world!' AS s, 'test' AS replacement, 8 AS pos, 5 AS length
+SELECT concat(substring(s, 1, pos - 1),
+ replacement,
+ substring(s, pos + length)) AS res
+
+ ┌─res──────────┐
+1. │ Hello, test! │
+ └──────────────┘
+
+
+
Developer: TaiYang Li.
+
+
+
+
input_format_json_empty_as_default
+
+
:) CREATE TEMPORARY TABLE test (x String DEFAULT 'ClickHouse')
+:) INSERT INTO test FORMAT JSONEachRow {"x":""}
+ ┌─x─┐
+1. │ │
+ └───┘
+:) SET input_format_json_empty_as_default = 1
+:) INSERT INTO test FORMAT JSONEachRow {"x":""}
+ ┌─x──────────┐
+1. │ │
+2. │ ClickHouse │
+ └────────────┘
+:) ALTER TABLE test ADD COLUMN y UInt8 DEFAULT 123
+:) INSERT INTO test FORMAT JSONEachRow {"x":"","y":""}
+ ┌─x──────────┬───y─┐
+1. │ │ 0 │
+2. │ ClickHouse │ 0 │
+3. │ ClickHouse │ 123 │
+ └────────────┴─────┘
+
+
+
Developer: Alexis Arnaud.
+
+
+
+
input_format_json_empty_as_default
+
+
But you will rarely need it:
+
+
— omitted fields in JSON are interpreted as default;
+
— input_format_null_as_default is also enabled,
+ and nulls in JSON will be interpreted as default;
+
+
The new setting, input_format_json_empty_as_default is for rare cases when an empty string should be mapped to the default expression.
+
+
+
+
+
+
DELETE ... IN PARTITION
+
+
DELETE FROM test IN PARTITION 202409 WHERE data LIKE '%trash%'
+
+
An option for DELETE query to explicitly limit it for a specified partition.
+
+
It avoids copying parts metadata for unrelated partitions.
+
+
Developer: Sunny.
+
+
+
+
+
system.projections
+
+
A table in ClickHouse can contain "projections" — they represent the same data in a different physical order or an aggregation, to automatically optimize queries by using this data.
+
+
CREATE TABLE hits (CounterID UInt32, URL String
+PROJECTION totals (SELECT CounterID, count(), uniq(URL) GROUP BY CounterID)
+) ENGINE = MergeTree ORDER BY (CounterID, EventTime);
+
+
+
A new system table to introspect projections.
+
+
Demo
+
+
+
+
Developer: Jordi Villar.
+
+
+
+
_headers Column For URL Engine
+
+
Obtain a dictionary of HTTP response headers when querying a remote server.
— enables virtual columns from the paths: type, year, quarter
+ and automatically infers their types.
+
+
ClickHouse 24.9:
+
+
— does automatic partition pruning!
+
+
Demo
+
+
+
+
Developer: Yarik Briukhovetskyi.
+
+
+
+
Faster Array/Map Construction
+
+
:) SELECT [a, b, c] FROM table
+
+
+
Demo
+
+
+
+
Developer: TaiYang Li.
+
+
+
+
Faster JOINs
+
+
By a low-level optimization for the case of repeating keys.
+
+
Demo
+
+
+
+
Developer: KevinyhZou.
+
+
+
+
+
Something Interesting
+
+
+
+
Iceberg On Azure And Local
+
+
In version 24.8, Iceberg tables were supported only for S3.
+
+
In version 24.9, it is supported for Azure Blob storage
+ and local filesystem.
+
+
Now there are IcebergS3, IcebergAzure, and IcebergLocal table engines,
+ as well as icebergS3, icebergAzure, and icebergLocal table functions.
+
+
Developer: Daniil Ivanik.
+
+
+
+
Multiple Credentials For a User
+
+
-- create a user with two alternative passwords:
+CREATE USER test IDENTIFIED
+ BY 'abc' VALID UNTIL '2024-10-01',
+ BY 'def' VALID UNTIL '2024-11-01';
+
+-- create a user with multiple authentication methods:
+CREATE USER test IDENTIFIED
+ WITH sha256_password BY 'abc',
+ WITH ssh_key BY KEY '...' TYPE 'ssh-ed25519';
+
+-- add a new method:
+ALTER USER test ADD IDENTIFIED ...;
+
+-- keep only the latest method:
+ALTER USER test RESET AUTHENTICATION METHODS TO NEW;
+
+
+Developer: Arthur Passos.
+
+
+
+
APPEND For Refreshable Materialized Views 🧪
+
+
CREATE MATERIALIZED VIEW [IF NOT EXISTS] [db.]table_name
+ REFRESH EVERY|AFTER interval [OFFSET interval]
+ RANDOMIZE FOR interval
+ DEPENDS ON [db.]name [, [db.]name [, ...]]
+ [APPEND] [TO [db.]name] [(columns)] [ENGINE = engine]
+ AS SELECT ...
+
+
+
Refreshable Materialized Views exist since 23.11.
+
The APPEND mode is new in 24.9.
+
+
Developer: Michael Kolupaev.
+
+
+
+
APPEND For Refreshable Materialized Views 🧪
+
+
Run the SELECT query in background and atomically
+replace or append to the table with its result.
+
Run the refresh process using a flexible configured schedule.
+
Support a dependency graph with multiple materialized views.
+
+
Example: periodically request an external API with the url table function
+ and keep accumulating results in a table.
+
+
+
+
+
Developer: Michael Kolupaev.
+
+
+
+
Variant Types In Schema Inference 🧪
+
+
Now ClickHouse supports automatic usage of the Variant data type
+ for schema inference.
SELECT DISTINCT arrayJoin(JSONAllPaths(data)) FROM website_traffic;
+
+SELECT distinctJSONPaths(data) FROM website_traffic;
+
+
Developer: Pavel Kruglov.
+
+
+
+
Bonus
+
+
+
+
50th International Conference on Very Large Databases, Guangzhou, China - August 26-30, 2024.
+
+
+
+
+
Integrations
+
ClickPipes:
+ — allows custom certificates for authentication in Kafka (SASL, TLS);
+ — shows the ingestion latency graph for Kafka and Kinesis;
+ — scaling controls for (private beta);
+ — allows to put the entire raw message into a single column.
+
+
Java connector: version 0.7.0 with memory and performance optimizations.
— How we built our DWH;
+ — VLDB paper + videos;
+ — Building apps with query API endpoints;
+ — Salesforce analytics with Estuary Flow;
+ — ePilot migrated from Redshift and Influx to ClickHouse;
+ — How Weights&Biases uses ClickHouse;
+ — ClickHouse for ML & AI;
+
+
+
+
+
Q&A
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/release_24.9/pictures/LICENSE b/release_24.9/pictures/LICENSE
new file mode 100644
index 0000000..bc48ba5
--- /dev/null
+++ b/release_24.9/pictures/LICENSE
@@ -0,0 +1,2 @@
+Some photos are from Shutterstock, some photos are personal (Alexey Milovidov).
+No rights granted.
diff --git a/release_24.9/pictures/back1.jpg b/release_24.9/pictures/back1.jpg
new file mode 100644
index 0000000..979ea87
Binary files /dev/null and b/release_24.9/pictures/back1.jpg differ
diff --git a/release_24.9/pictures/back2.jpg b/release_24.9/pictures/back2.jpg
new file mode 100644
index 0000000..634b5a8
Binary files /dev/null and b/release_24.9/pictures/back2.jpg differ
diff --git a/release_24.9/pictures/back3.jpg b/release_24.9/pictures/back3.jpg
new file mode 100644
index 0000000..de46849
Binary files /dev/null and b/release_24.9/pictures/back3.jpg differ
diff --git a/release_24.9/pictures/back4.jpg b/release_24.9/pictures/back4.jpg
new file mode 100644
index 0000000..8639cc8
Binary files /dev/null and b/release_24.9/pictures/back4.jpg differ
diff --git a/release_24.9/pictures/back5.jpg b/release_24.9/pictures/back5.jpg
new file mode 100644
index 0000000..71c59df
Binary files /dev/null and b/release_24.9/pictures/back5.jpg differ
diff --git a/release_24.9/pictures/back6.jpg b/release_24.9/pictures/back6.jpg
new file mode 100644
index 0000000..9acaf23
Binary files /dev/null and b/release_24.9/pictures/back6.jpg differ
diff --git a/release_24.9/pictures/back7.jpg b/release_24.9/pictures/back7.jpg
new file mode 100644
index 0000000..9ad34ec
Binary files /dev/null and b/release_24.9/pictures/back7.jpg differ
diff --git a/release_24.9/pictures/blog.png b/release_24.9/pictures/blog.png
new file mode 100644
index 0000000..e4ca6ea
Binary files /dev/null and b/release_24.9/pictures/blog.png differ
diff --git a/release_24.9/pictures/meetups.jpg b/release_24.9/pictures/meetups.jpg
new file mode 100644
index 0000000..f211e38
Binary files /dev/null and b/release_24.9/pictures/meetups.jpg differ
diff --git a/release_24.9/pictures/vldb.png b/release_24.9/pictures/vldb.png
new file mode 100644
index 0000000..25e18bf
Binary files /dev/null and b/release_24.9/pictures/vldb.png differ
diff --git a/release_24.9/pictures/wing.jpg b/release_24.9/pictures/wing.jpg
new file mode 100644
index 0000000..6915a95
Binary files /dev/null and b/release_24.9/pictures/wing.jpg differ
diff --git a/release_24.9/shower/shower-video.css b/release_24.9/shower/shower-video.css
new file mode 100644
index 0000000..da33b65
--- /dev/null
+++ b/release_24.9/shower/shower-video.css
@@ -0,0 +1,9 @@
+/*!
+ Video plugin for Shower, HTML presentation engine (github.com/shower/shower)
+
+ Browser support: latest versions of all major browsers
+
+ @url github.com/operatino/shower-video
+ @author Robert Haritonov
+ @twitter @operatino
+*/video{background-color:#000}.mobile .video_wrapper{display:none}.slide.cover video:not(.background){z-index:1}.ipad .slide.cover.w video{width:1024px;height:576px}.ipad .slide.cover.h video{width:1365.33333px;height:768px}.iphone .slide.cover .video_wrapper{position:relative;height:300px}.iphone .slide.cover .video_wrapper video{width:100%;height:100%}
diff --git a/release_24.9/shower/shower-video.js b/release_24.9/shower/shower-video.js
new file mode 100644
index 0000000..dc6f3b4
--- /dev/null
+++ b/release_24.9/shower/shower-video.js
@@ -0,0 +1,202 @@
+/*!
+ Video plugin for Shower, HTML presentation engine (github.com/shower/shower)
+
+ Browser support: latest versions of all major browsers
+
+ @url github.com/operatino/shower-video
+ @author Robert Haritonov
+ @twitter @operatino
+*/
+
+/*
+ TODO:
+ * rerun video if it finished playback or next slide tick
+ * check preload on android mobile devices
+ * mark videos as played for turning off autoplay on iphone
+
+ */
+
+if(!(window.showerVideo && window.showerVideo.init)) {
+
+window.showerVideo = (function(window, document, undefined) {
+
+ var showerVideo = {},
+ u = {},
+ html = document.getElementsByTagName('html')[0],
+ showerCssInit = 0;
+
+ showerVideo.debug = false;
+
+ showerVideo.isMobile = false;
+ showerVideo.isIPhone = false;
+ showerVideo.isIPad = false;
+
+ /*
+
+ Utils
+
+ */
+
+ u.query = function(query) {
+ return document.querySelectorAll(query);
+ };
+
+ u.forEach = function(array, callback) {
+ Array.prototype.forEach.call(array, function(item){
+ callback(item);
+ });
+ };
+
+
+ /*
+
+ Core
+
+ */
+
+ showerVideo.prepareEnv = function(){
+ if (navigator.userAgent.match(/Android/i)
+ || navigator.userAgent.match(/webOS/i)
+ || navigator.userAgent.match(/iPhone/i)
+ || navigator.userAgent.match(/iPad/i)
+ || navigator.userAgent.match(/iPod/i)
+ || navigator.userAgent.match(/BlackBerry/i)
+ || navigator.userAgent.match(/Windows Phone/i)
+ ) {
+ showerVideo.isMobile = true;
+ html.classList.add('mobile');
+ }
+
+ if ( navigator.userAgent.match(/iPhone/i) ) {
+ showerVideo.isIPhone = true;
+ html.classList.add('iphone');
+ }
+
+ if ( navigator.userAgent.match(/iPad/i) ) {
+ showerVideo.isIPad = true;
+ html.classList.add('ipad');
+ }
+ };
+
+ showerVideo.startVideo = function(){
+ //pause all videos first
+ var allVideos = u.query('video');
+
+ u.forEach(allVideos, function(el){
+ el.pause();
+
+ if (showerVideo.isMobile) { el.parentNode.style.display = 'none';}
+ });
+
+ //Fetch all videos on current slide
+ var activeVideos = u.query('.slide.active video');
+ u.forEach(activeVideos, function(el){
+ var play = function() {
+ //Resetting video
+ el.currentTime = 0;
+ el.play();
+ };
+
+ var prepareForPlaying = function(){
+ //For triggering video load on iPad
+// el.load();
+// el.play();
+
+ //And then pause till video fully downloaded
+// el.pause();
+
+ //TODO: add loader
+
+ //Waiting till video fully loads
+ el.addEventListener('canplaythrough', play, false);
+ };
+
+ if(el && el.currentTime !== undefined) {
+ if (el.readyState !== 4) { //HAVE_ENOUGH_DATA
+
+ if (showerVideo.debug) console.log('Video not ready');
+
+ if(showerVideo.isMobile && showerCssInit === 0) {
+ //TODO: add loader
+ //TODO: on first page visit with video, add play button
+
+ //initing video after first Shower CSS init, to avoid CPU load bottleneck
+ setTimeout(function(){
+ //TODO: move this init to Full mode check
+ showerCssInit = 1;
+
+ el.parentNode.style.display = 'block';
+
+ prepareForPlaying();
+ }, 700);
+
+ } else {
+
+ //Init video for mobile devices
+ if (showerVideo.isMobile) { el.parentNode.style.display = 'block';}
+
+ prepareForPlaying();
+ }
+
+ } else {
+ if (showerVideo.debug) console.log('Video is ready');
+
+ if (showerVideo.isMobile) { el.parentNode.style.display = 'block';}
+
+ play();
+ }
+ }
+ });
+ };
+
+ showerVideo.startGif = function(){
+ var activeSlideGifs = u.query('.slide.active .gif'),
+ allGifs = u.query('.slide .gif');
+
+ if( activeSlideGifs.length !== 0) {
+
+ u.forEach(activeSlideGifs, function(item){
+ if (item.classList.contains('real')) {
+ item.style.display = 'block';
+ } else {
+ item.style.display = 'none';
+ }
+ });
+
+ } else {
+
+ u.forEach(allGifs, function(item){
+ if (item.classList.contains('real')) {
+ item.style.display = 'none';
+ } else {
+ item.style.display = 'block';
+ }
+ });
+ }
+ };
+
+ showerVideo.init = function(){
+ showerVideo.prepareEnv();
+
+ // Listen for the Slide Switch event
+ // TODO: wait for proper API implementation in Shower
+ document.addEventListener('keyup', function (e) {
+ showerVideo.startVideo();
+ showerVideo.startGif();
+ }, false);
+ };
+
+
+ /*
+
+ Init
+
+ */
+
+ showerVideo.init();
+
+ return showerVideo;
+
+})(this, this.document);
+
+}
\ No newline at end of file
diff --git a/release_24.9/shower/shower.min.js b/release_24.9/shower/shower.min.js
new file mode 100644
index 0000000..449843a
--- /dev/null
+++ b/release_24.9/shower/shower.min.js
@@ -0,0 +1,8 @@
+/**
+ * Core for Shower HTML presentation engine
+ * shower-core v2.0.7, https://github.com/shower/core
+ * @copyright 2010–2016 Vadim Makeev, http://pepelsbey.net/
+ * @license MIT
+ */
+!function(a){var b,c={NOT_RESOLVED:"NOT_RESOLVED",IN_RESOLVING:"IN_RESOLVING",RESOLVED:"RESOLVED"},d=function(){var l={trackCircularDependencies:!0,allowMultipleDeclarations:!0},m={},n=!1,o=[],p=function(a,d,e){e||(e=d,d=[]);var f=m[a];f||(f=m[a]={name:a,decl:b}),f.decl={name:a,prev:f.decl,fn:e,state:c.NOT_RESOLVED,deps:d,dependents:[],exports:b}},q=function(b,c,d){"string"==typeof b&&(b=[b]),n||(n=!0,k(v)),o.push({deps:b,cb:function(b,f){f?(d||e)(f):c.apply(a,b)}})},r=function(a){var b=m[a];return b?c[b.decl.state]:"NOT_DEFINED"},s=function(a){return!!m[a]},t=function(a){for(var b in a)a.hasOwnProperty(b)&&(l[b]=a[b])},u=function(){var a,b={};for(var c in m)m.hasOwnProperty(c)&&(a=m[c],(b[a.decl.state]||(b[a.decl.state]=[])).push(c));return b},v=function(){n=!1,w()},w=function(){var a,b=o,c=0;for(o=[];a=b[c++];)x(null,a.deps,[],a.cb)},x=function(a,b,c,d){var e=b.length;e||d([]);for(var g,h,i=[],j=function(a,b){if(b)return void d(null,b);if(!--e){for(var c,f=[],g=0;c=i[g++];)f.push(c.exports);d(f)}},k=0,l=e;k ")+'"')},h=function(a){return Error('Declaration of module "'+a.name+'" has already been provided')},i=function(a){return Error('Multiple declarations of module "'+a.name+'" have been detected')},j=function(a,b){for(var c,d=0;c=b[d++];)if(a===c)return!0;return!1},k=function(){var b=[],c=function(a){return 1===b.push(a)},d=function(){var a=b,c=0,d=b.length;for(b=[];c=0&&!b.defaultPrevented();){var d=a[c];d&&(d.context?d.callback.call(d.context,b):d.callback(b)),c--}}}),a(e)}),shower.modules.define("Plugins",["Emitter","util.extend"],function(a,b,c){function d(a){this.events=new b({context:this}),this._showerGlobal=a,this._showerInstances=a.getInited(),this._plugins={},this._instances=[],a.events.on("init",this._onShowerInit,this)}c(d.prototype,{destroy:function(){this._showerGlobal.events.off("init",this._onShowerInit,this),this._plugins=null},add:function(a,b){if(this._plugins.hasOwnProperty(a))throw new Error("Plugin "+a+" already exist.");return this._requireAndAdd({name:a,options:b}),this},remove:function(a){if(!this._plugins.hasOwnProperty(a))throw new Error("Plugin "+a+" not found.");return delete this._plugins[a],this.events.emit("remove",{name:a}),this},get:function(a,b){var c,d=this._plugins[a];if(d&&b)for(var e=0,f=this._instances.length;e=0;e--)if(d[e].getId()===a){b=d[e],c=e;break}return{slide:b,index:c}},_onSlideActivate:function(a){window.location.hash=a.get("slide").getId(),this._setTitle()},_onContainerSlideModeChange:function(){this._setTitle(),this.save()},_isSlideMode:function(){return this._shower.container.isSlideMode()},_onPopstate:function(){var a,b=this._shower,c=window.location.hash.substr(1),d=b.player.getCurrentSlide(),e=b.player.getCurrentSlideIndex();this._isSlideMode()&&e===-1?b.player.go(0):e===-1&&""!==window.location.hash&&b.player.go(0),d&&c!==d.getId()&&(a=this._getSlideById(c),b.player.go(a.index))},_setTitle:function(){var a=document.title,b=this._isSlideMode(),c=this._shower.player.getCurrentSlide();if(b&&c){var d=c.getTitle();document.title=d?d+" — "+this._documentTitle:this._documentTitle}else this._documentTitle!==a&&(document.title=this._documentTitle)}}),a(e)}),shower.modules.define("shower.Player",["Emitter","util.bound","util.extend"],function(a,b,c,d){function e(a){this.events=new b({context:this,parent:a.events}),this._shower=a,this._showerListeners=null,this._playerListeners=null,this._currentSlideNumber=-1,this._currentSlide=null,this.init()}d(e.prototype,{init:function(){this._showerListeners=this._shower.events.group().on("slideadd",this._onSlideAdd,this).on("slideremove",this._onSlideRemove,this).on("slidemodeenter",this._onSlideModeEnter,this),this._playerListeners=this.events.group().on("prev",this._onPrev,this).on("next",this._onNext,this),document.addEventListener("keydown",c(this,"_onKeyDown"))},destroy:function(){this._showerListeners.offAll(),this._playerListeners.offAll(),document.removeEventListener("keydown",c(this,"_onKeyDown")),this._currentSlide=null,this._currentSlideNumber=null,this._shower=null},next:function(){return this.events.emit("next"),this},prev:function(){return this.events.emit("prev"),this},first:function(){return this.go(0),this},last:function(){return this.go(this._shower.getSlidesCount()-1),this},go:function(a){"number"!=typeof a&&(a=this._shower.getSlideIndex(a));var b=this._shower.getSlidesCount(),c=this._currentSlide;return a!=this._currentSlideNumber&&a=0&&(c&&c.isActive()&&c.deactivate(),c=this._shower.get(a),this._currentSlide=c,this._currentSlideNumber=a,c.isActive()||c.activate(),this.events.emit("activate",{index:a,slide:c})),this},getCurrentSlide:function(){return this._currentSlide},getCurrentSlideIndex:function(){return this._currentSlideNumber},_onPrev:function(){this._changeSlide(this._currentSlideNumber-1)},_onNext:function(){this._changeSlide(this._currentSlideNumber+1)},_changeSlide:function(a){this.go(a)},_onSlideAdd:function(a){var b=a.get("slide");b.events.on("activate",this._onSlideActivate,this)},_onSlideRemove:function(a){var b=a.get("slide");b.events.off("activate",this._onSlideActivate,this)},_onSlideActivate:function(a){var b=a.get("slide"),c=this._shower.getSlideIndex(b);this.go(c)},_onKeyDown:function(a){if(this._shower.isHotkeysEnabled()&&!/^(?:button|input|select|textarea)$/i.test(a.target.tagName))switch(this.events.emit("keydown",{event:a}),a.which){case 33:case 38:case 37:case 72:case 75:if(a.altKey||a.ctrlKey||a.metaKey)return;a.preventDefault(),this.prev();break;case 34:case 40:case 39:case 76:case 74:if(a.altKey||a.ctrlKey||a.metaKey)return;a.preventDefault(),this.next();break;case 36:a.preventDefault(),this.first();break;case 35:a.preventDefault(),this.last();break;case 32:this._shower.container.isSlideMode()&&(a.shiftKey?this.prev():this.next())}},_onSlideModeEnter:function(){this._currentSlide||this.go(0)}}),a(e)}),shower.modules.define("shower.slidesParser",["Slide"],function(a,b){function c(a,c){var d=a.querySelectorAll(c);return d=Array.prototype.slice.call(d),d.map(function(a,c){var d=new b(a);return a.id||(a.id=c+1),d})}a(c)}),shower.modules.define("Slide",["shower.defaultOptions","Emitter","Options","slide.Layout","slide.layoutFactory","util.Store","util.extend"],function(a,b,c,d,e,f,g,h){function i(a,b,e){this.events=new c,this.options=new d(b),this.layout=null,this.state=new g({visited:0,index:null},e),this._content=a,this._isVisited=this.state.get("visited")>0,this._isActive=!1,this.init()}h(i.prototype,{init:function(){this.layout="string"==typeof this._content?new f.createLayout({content:this._content}):new e(this._content,this.options),this.layout.setParent(this),this._setupListeners()},destroy:function(){this._clearListeners(),this._isActive=null,this.options=null,this.layout.destroy()},activate:function(){this._isActive=!0;var a=this.state.get("visited");return this.state.set("visited",++a),this.events.emit("activate",{slide:this}),this},deactivate:function(){return this._isActive=!1,this.events.emit("deactivate",{slide:this}),this},isActive:function(){return this._isActive},isVisited:function(){return this.state.get("visited")>0},getTitle:function(){return this.layout.getTitle()},setTitle:function(a){return this.layout.setTitle(a),this},getId:function(){return this.layout.getElement().id},getContent:function(){return this.layout.getContent()},_setupListeners:function(){this.layoutListeners=this.layout.events.group().on("click",this._onSlideClick,this)},_clearListeners:function(){this.layoutListeners.offAll()},_onSlideClick:function(){this.activate(),this.events.emit("click",{slide:this})}}),a(i)}),shower.modules.define("slide.Layout",["Options","shower.defaultOptions","Emitter","util.bound","util.extend"],function(a,b,c,d,e,f){function g(a,e){this.options=new b({title_element_selector:c.slide_title_element_selector,active_classname:c.slide_active_classname,visited_classname:c.slide_visited_classname},e),this.events=new d,this._element=a,this._parent=null,this._parentElement=null,this.init()}f(g.prototype,{init:function(){var a=this._element.parentNode;a?this._parentElement=a:this.setParentElement(a)},destroy:function(){this.setParent(null)},setParent:function(a){this._parent!=a&&(this._clearListeners(),this._parent=a,this._parent&&this._setupListeners(),this.events.emit("parentchange",{parent:a}))},getParent:function(){return this._parent},setParentElement:function(a){a!=this._parentElement&&(this._parentElement=a,a.appendChild(this._element),this.events.emit("parentelementchange",{parentElement:a}))},getParentElement:function(){return this._parentElement},getElement:function(){return this._element},setTitle:function(a){var b=this.options.get("title_element_selector"),c=this._element.querySelector(b);c?c.innerHTML=a:(c=document.createElement(b),c.innerHTML=a,this._element.insertBefore(c,this._element.firstChild))},getTitle:function(){var a=this.options.get("title_element_selector"),b=this._element.querySelector(a);return b?b.textContent:null},getData:function(a){var b=this._element;return b.dataset?b.dataset[a]:b.getAttribute("data-"+a)},getContent:function(){return this._element.innerHTML},_setupListeners:function(){this._slideListeners=this._parent.events.group().on("activate",this._onSlideActivate,this).on("deactivate",this._onSlideDeactivate,this),this._element.addEventListener("click",e(this,"_onSlideClick"),!1)},_clearListeners:function(){this._slideListeners&&this._slideListeners.offAll(),this._element.removeEventListener("click",e(this,"_onSlideClick"))},_onSlideActivate:function(){this._element.classList.add(this.options.get("active_classname"))},_onSlideDeactivate:function(){var a=this._element.classList;a.remove(this.options.get("active_classname")),a.add(this.options.get("visited_classname"))},_onSlideClick:function(){this.events.emit("click")}}),a(g)}),shower.modules.define("slide.layoutFactory",["slide.Layout","util.extend"],function(a,b,c){var d={};c(d,{createLayout:function(a){a=a||{};var e=d._createElement(c({content:"",contentType:"slide"},a));return new b(e)},_createElement:function(a){var b=document.createElement("section");return b.innerHTML=a.content,b.classList.add(a.contentType),b}}),a(d)}),shower.modules.define("util.bound",function(a){function b(a,b){return a["__bound_"+b]||(a["__bound_"+b]=a[b].bind(a))}a(b)}),shower.modules.define("util.extend",function(a){function b(a){if(!a)throw new Error("util.extend: Target not found");return"undefined"==typeof Object.assign?c.apply(null,arguments):Object.assign.apply(null,arguments)}function c(a){for(var b=1,c=arguments.length;b0&&(a.preventDefault(),this.prev())},_go:function(){for(var a=0,b=this._elements.length;awindow.innerWidth/2?c.player.next():c.player.prev()),d||f.activate())},_onTouchMove:function(a){this._shower.container.isSlideMode()&&a.preventDefault()},_getSlideByElement:function(a){for(var b=this._shower.getSlides(),c=null,d=0,e=b.length;d` of your presentation.
+
+## PDF
+
+Ribbon could be exported to PDF by printing it from the list mode in Chrome or Opera browsers. See [printing documentation](https://github.com/shower/shower/blob/master/docs/printing-en.md) for more options.
+
+## Development
+
+If you want to adjust theme for your needs:
+
+1. Fork this repository and clone it to your local machine.
+2. Install dependencies: `npm install`.
+3. Start a local server with watcher: `npm run dev` or just `gulp` if you have it installed globally.
+4. Edit your files and see changes in the opened browser.
+
+To take part in Ribbon development please read [contributing guidelines](CONTRIBUTING.md) first and [file an issue](https://github.com/shower/shower/issues/new) before sending any pull request.
+
+---
+Licensed under [MIT License](LICENSE.md).
diff --git a/release_24.9/shower/themes/yandex/styles/0w7OcWZM_QLP8x-LQUXFOgXO6dE.svg b/release_24.9/shower/themes/yandex/styles/0w7OcWZM_QLP8x-LQUXFOgXO6dE.svg
new file mode 100644
index 0000000..01f90bd
--- /dev/null
+++ b/release_24.9/shower/themes/yandex/styles/0w7OcWZM_QLP8x-LQUXFOgXO6dE.svg
@@ -0,0 +1,730 @@
+
diff --git a/release_24.9/shower/themes/yandex/styles/1jvKJ_-hCXl3s7gmFl-y_-UHTaI.woff b/release_24.9/shower/themes/yandex/styles/1jvKJ_-hCXl3s7gmFl-y_-UHTaI.woff
new file mode 100644
index 0000000..57233a2
Binary files /dev/null and b/release_24.9/shower/themes/yandex/styles/1jvKJ_-hCXl3s7gmFl-y_-UHTaI.woff differ
diff --git a/release_24.9/shower/themes/yandex/styles/40vXwNl4eYYMgteIVgLP49dwmfc.woff b/release_24.9/shower/themes/yandex/styles/40vXwNl4eYYMgteIVgLP49dwmfc.woff
new file mode 100644
index 0000000..d08b30a
Binary files /dev/null and b/release_24.9/shower/themes/yandex/styles/40vXwNl4eYYMgteIVgLP49dwmfc.woff differ
diff --git a/release_24.9/shower/themes/yandex/styles/4UDe4nlVvgEJ-VmLWNVq3SxCsA.ttf b/release_24.9/shower/themes/yandex/styles/4UDe4nlVvgEJ-VmLWNVq3SxCsA.ttf
new file mode 100644
index 0000000..329edc5
Binary files /dev/null and b/release_24.9/shower/themes/yandex/styles/4UDe4nlVvgEJ-VmLWNVq3SxCsA.ttf differ
diff --git a/release_24.9/shower/themes/yandex/styles/9nzjfpCR2QHvK1EzHpDEIoVFGuY.ttf b/release_24.9/shower/themes/yandex/styles/9nzjfpCR2QHvK1EzHpDEIoVFGuY.ttf
new file mode 100644
index 0000000..789d2f8
Binary files /dev/null and b/release_24.9/shower/themes/yandex/styles/9nzjfpCR2QHvK1EzHpDEIoVFGuY.ttf differ
diff --git a/release_24.9/shower/themes/yandex/styles/COPYING b/release_24.9/shower/themes/yandex/styles/COPYING
new file mode 100644
index 0000000..11955ca
--- /dev/null
+++ b/release_24.9/shower/themes/yandex/styles/COPYING
@@ -0,0 +1 @@
+Yandex fonts can be used only with unmodified version of presentation from ClickHouse authors.
diff --git a/release_24.9/shower/themes/yandex/styles/CYblzLEXzCqQIvrYs7QKQe2omRk.woff2 b/release_24.9/shower/themes/yandex/styles/CYblzLEXzCqQIvrYs7QKQe2omRk.woff2
new file mode 100644
index 0000000..8553d6b
Binary files /dev/null and b/release_24.9/shower/themes/yandex/styles/CYblzLEXzCqQIvrYs7QKQe2omRk.woff2 differ
diff --git a/release_24.9/shower/themes/yandex/styles/EKLr1STNokPqxLAQa_RyN82pL98.svg b/release_24.9/shower/themes/yandex/styles/EKLr1STNokPqxLAQa_RyN82pL98.svg
new file mode 100644
index 0000000..57ba366
--- /dev/null
+++ b/release_24.9/shower/themes/yandex/styles/EKLr1STNokPqxLAQa_RyN82pL98.svg
@@ -0,0 +1,733 @@
+
diff --git a/release_24.9/shower/themes/yandex/styles/H63jN0veW07XQUIA2317lr9UIm8.eot b/release_24.9/shower/themes/yandex/styles/H63jN0veW07XQUIA2317lr9UIm8.eot
new file mode 100644
index 0000000..613cf7f
Binary files /dev/null and b/release_24.9/shower/themes/yandex/styles/H63jN0veW07XQUIA2317lr9UIm8.eot differ
diff --git a/release_24.9/shower/themes/yandex/styles/LGiRvlfqQHlWR9YKLhsw5e7KGNA.woff2 b/release_24.9/shower/themes/yandex/styles/LGiRvlfqQHlWR9YKLhsw5e7KGNA.woff2
new file mode 100644
index 0000000..c007907
Binary files /dev/null and b/release_24.9/shower/themes/yandex/styles/LGiRvlfqQHlWR9YKLhsw5e7KGNA.woff2 differ
diff --git a/release_24.9/shower/themes/yandex/styles/LI6l3L2RqcgxBe2pXmuUha37czQ.eot b/release_24.9/shower/themes/yandex/styles/LI6l3L2RqcgxBe2pXmuUha37czQ.eot
new file mode 100644
index 0000000..f2596d7
Binary files /dev/null and b/release_24.9/shower/themes/yandex/styles/LI6l3L2RqcgxBe2pXmuUha37czQ.eot differ
diff --git a/release_24.9/shower/themes/yandex/styles/PzD8hWLMunow5i3RfJ6WQJAL7aI.ttf b/release_24.9/shower/themes/yandex/styles/PzD8hWLMunow5i3RfJ6WQJAL7aI.ttf
new file mode 100644
index 0000000..65e740a
Binary files /dev/null and b/release_24.9/shower/themes/yandex/styles/PzD8hWLMunow5i3RfJ6WQJAL7aI.ttf differ
diff --git a/release_24.9/shower/themes/yandex/styles/X6zG5x_wO8-AtwJ-vDLJcKC5228.ttf b/release_24.9/shower/themes/yandex/styles/X6zG5x_wO8-AtwJ-vDLJcKC5228.ttf
new file mode 100644
index 0000000..8f3ca88
Binary files /dev/null and b/release_24.9/shower/themes/yandex/styles/X6zG5x_wO8-AtwJ-vDLJcKC5228.ttf differ
diff --git a/release_24.9/shower/themes/yandex/styles/ZKhaR0m08c8CRRL77GtFKoHcLYA.svg b/release_24.9/shower/themes/yandex/styles/ZKhaR0m08c8CRRL77GtFKoHcLYA.svg
new file mode 100644
index 0000000..e5501c3
--- /dev/null
+++ b/release_24.9/shower/themes/yandex/styles/ZKhaR0m08c8CRRL77GtFKoHcLYA.svg
@@ -0,0 +1,736 @@
+
diff --git a/release_24.9/shower/themes/yandex/styles/ayAFYoY8swgBLhq_I56tKj2JftU.eot b/release_24.9/shower/themes/yandex/styles/ayAFYoY8swgBLhq_I56tKj2JftU.eot
new file mode 100644
index 0000000..c5bfba7
Binary files /dev/null and b/release_24.9/shower/themes/yandex/styles/ayAFYoY8swgBLhq_I56tKj2JftU.eot differ
diff --git a/release_24.9/shower/themes/yandex/styles/f0AAJ9GJ4iiwEmhG-7PWMHk6vUY.woff b/release_24.9/shower/themes/yandex/styles/f0AAJ9GJ4iiwEmhG-7PWMHk6vUY.woff
new file mode 100644
index 0000000..a129cc9
Binary files /dev/null and b/release_24.9/shower/themes/yandex/styles/f0AAJ9GJ4iiwEmhG-7PWMHk6vUY.woff differ
diff --git a/release_24.9/shower/themes/yandex/styles/g8_MyyKVquSZ3xEL6tarK__V9Vw.eot b/release_24.9/shower/themes/yandex/styles/g8_MyyKVquSZ3xEL6tarK__V9Vw.eot
new file mode 100644
index 0000000..ef1ca5e
Binary files /dev/null and b/release_24.9/shower/themes/yandex/styles/g8_MyyKVquSZ3xEL6tarK__V9Vw.eot differ
diff --git a/release_24.9/shower/themes/yandex/styles/gwyBTpxSwkFCF1looxqs6JokKls.svg b/release_24.9/shower/themes/yandex/styles/gwyBTpxSwkFCF1looxqs6JokKls.svg
new file mode 100644
index 0000000..6eb3c51
--- /dev/null
+++ b/release_24.9/shower/themes/yandex/styles/gwyBTpxSwkFCF1looxqs6JokKls.svg
@@ -0,0 +1,732 @@
+
diff --git a/release_24.9/shower/themes/yandex/styles/lF_KG5g4tpQNlYIgA0e77fBSZ5s.svg b/release_24.9/shower/themes/yandex/styles/lF_KG5g4tpQNlYIgA0e77fBSZ5s.svg
new file mode 100644
index 0000000..ca4d666
--- /dev/null
+++ b/release_24.9/shower/themes/yandex/styles/lF_KG5g4tpQNlYIgA0e77fBSZ5s.svg
@@ -0,0 +1,726 @@
+
diff --git a/release_24.9/shower/themes/yandex/styles/lGQcYklLVV0hyvz1HFmFsUTj8_0.woff2 b/release_24.9/shower/themes/yandex/styles/lGQcYklLVV0hyvz1HFmFsUTj8_0.woff2
new file mode 100644
index 0000000..5372ef4
Binary files /dev/null and b/release_24.9/shower/themes/yandex/styles/lGQcYklLVV0hyvz1HFmFsUTj8_0.woff2 differ
diff --git a/release_24.9/shower/themes/yandex/styles/pUcnOdRwl83MvPPzrNomhyletnA.woff b/release_24.9/shower/themes/yandex/styles/pUcnOdRwl83MvPPzrNomhyletnA.woff
new file mode 100644
index 0000000..302fa0e
Binary files /dev/null and b/release_24.9/shower/themes/yandex/styles/pUcnOdRwl83MvPPzrNomhyletnA.woff differ
diff --git a/release_24.9/shower/themes/yandex/styles/sUYVCPUAQE7ExrvMS7FoISoO83s.woff2 b/release_24.9/shower/themes/yandex/styles/sUYVCPUAQE7ExrvMS7FoISoO83s.woff2
new file mode 100644
index 0000000..679db73
Binary files /dev/null and b/release_24.9/shower/themes/yandex/styles/sUYVCPUAQE7ExrvMS7FoISoO83s.woff2 differ
diff --git a/release_24.9/shower/themes/yandex/styles/screen-16x10.css b/release_24.9/shower/themes/yandex/styles/screen-16x10.css
new file mode 100644
index 0000000..af873e3
--- /dev/null
+++ b/release_24.9/shower/themes/yandex/styles/screen-16x10.css
@@ -0,0 +1,204 @@
+/**
+ * Ribbon theme for Shower HTML presentation engine
+ * shower-ribbon v2.0.8, https://github.com/shower/ribbon
+ * @copyright 2010–2016 Vadim Makeev, http://pepelsbey.net/
+ * @license MIT
+ */
+@charset "UTF-8";
+
+ @font-face {
+ font-family: 'Yandex Sans Text Web';
+ src: url(yy5JveR58JFkc97waf-xp0i6_jM.eot);
+ src: url(yy5JveR58JFkc97waf-xp0i6_jM.eot?#iefix) format('embedded-opentype'),
+ url(CYblzLEXzCqQIvrYs7QKQe2omRk.woff2) format('woff2'),
+ url(pUcnOdRwl83MvPPzrNomhyletnA.woff) format('woff'),
+ url(vNFEmXOcGYKJ4AAidUprHWoXrLU.ttf) format('truetype'),
+ url(0w7OcWZM_QLP8x-LQUXFOgXO6dE.svg#YandexSansTextWeb-Bold) format('svg');
+ font-weight: 700;
+ font-style: normal;
+ font-stretch: normal
+ }
+
+ @font-face {
+ font-family: 'Yandex Sans Text Web';
+ src: url(LI6l3L2RqcgxBe2pXmuUha37czQ.eot);
+ src: url(LI6l3L2RqcgxBe2pXmuUha37czQ.eot?#iefix) format('embedded-opentype'),
+ url(z3MYElcut0R2MF_Iw1RDNrstgYs.woff2) format('woff2'),
+ url(1jvKJ_-hCXl3s7gmFl-y_-UHTaI.woff) format('woff'),
+ url(9nzjfpCR2QHvK1EzHpDEIoVFGuY.ttf) format('truetype'),
+ url(gwyBTpxSwkFCF1looxqs6JokKls.svg#YandexSansTextWeb-Regular) format('svg');
+ font-weight: 400;
+ font-style: normal;
+ font-stretch: normal
+ }
+
+ @font-face {
+ font-family: 'Yandex Sans Text Web';
+ src: url(ayAFYoY8swgBLhq_I56tKj2JftU.eot);
+ src: url(ayAFYoY8swgBLhq_I56tKj2JftU.eot?#iefix) format('embedded-opentype'),
+ url(lGQcYklLVV0hyvz1HFmFsUTj8_0.woff2) format('woff2'),
+ url(f0AAJ9GJ4iiwEmhG-7PWMHk6vUY.woff) format('woff'),
+ url(4UDe4nlVvgEJ-VmLWNVq3SxCsA.ttf) format('truetype'),
+ url(EKLr1STNokPqxLAQa_RyN82pL98.svg#YandexSansTextWeb-Light) format('svg');
+ font-weight: 300;
+ font-style: normal;
+ font-stretch: normal
+ }
+
+ @font-face {
+ font-family: 'Yandex Sans Display Web';
+ src: url(H63jN0veW07XQUIA2317lr9UIm8.eot);
+ src: url(H63jN0veW07XQUIA2317lr9UIm8.eot?#iefix) format('embedded-opentype'),
+ url(sUYVCPUAQE7ExrvMS7FoISoO83s.woff2) format('woff2'),
+ url(v2Sve_obH3rKm6rKrtSQpf-eB7U.woff) format('woff'),
+ url(PzD8hWLMunow5i3RfJ6WQJAL7aI.ttf) format('truetype'),
+ url(lF_KG5g4tpQNlYIgA0e77fBSZ5s.svg#YandexSansDisplayWeb-Regular) format('svg');
+ font-weight: 400;
+ font-style: normal;
+ font-stretch: normal
+ }
+
+ @font-face {
+ font-family: 'Yandex Sans Display Web';
+ src: url(g8_MyyKVquSZ3xEL6tarK__V9Vw.eot);
+ src: url(g8_MyyKVquSZ3xEL6tarK__V9Vw.eot?#iefix) format('embedded-opentype'),
+ url(LGiRvlfqQHlWR9YKLhsw5e7KGNA.woff2) format('woff2'),
+ url(40vXwNl4eYYMgteIVgLP49dwmfc.woff) format('woff'),
+ url(X6zG5x_wO8-AtwJ-vDLJcKC5228.ttf) format('truetype'),
+ url(ZKhaR0m08c8CRRL77GtFKoHcLYA.svg#YandexSansDisplayWeb-Light) format('svg');
+ font-weight: 300;
+ font-style: normal;
+ font-stretch: normal
+ }
+
+*,::after,::before{box-sizing:border-box}
+a,abbr,acronym,address,applet,article,aside,audio,b,big,blockquote,body,canvas,caption,center,cite,code,dd,del,details,dfn,div,dl,dt,em,embed,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,header,hgroup,html,i,iframe,img,ins,kbd,label,legend,li,mark,menu,nav,object,ol,output,p,pre,q,ruby,s,samp,section,small,span,strike,strong,sub,summary,sup,table,tbody,td,tfoot,th,thead,time,tr,tt,u,ul,var,video{margin:0;padding:0;border:0;font:inherit;vertical-align:baseline}
+article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section{display:block}
+.caption p,body{line-height:1}
+p {line-height: 1.2}
+ol,ul{list-style:none}
+blockquote,q{quotes:none}
+blockquote::after,blockquote::before,q::after,q::before{content:none}
+table{border-collapse:collapse;border-spacing:0}
+a{text-decoration:none}
+@page{margin:0;size:1024px 640px}
+.shower{color:#000;counter-reset:slide;font:25px/2 Yandex Sans Display Web,sans-serif;-webkit-print-color-adjust:exact;-webkit-text-size-adjust:none;-moz-text-size-adjust:none;-ms-text-size-adjust:none}
+@media print{.shower{text-rendering:geometricPrecision}
+}
+.caption{font-size:25px;display:none;margin-top:-.2em;padding:0 1em .93em;width:100%;color:#3c3d40;text-shadow:0 1px 0 #8d8e90}
+@media (min-width:1174px){.caption{font-size:50px}
+}
+@media (min-width:2348px){.caption{font-size:100px}
+}
+.caption h1{padding-bottom:.15em;font:1em/2 Yandex Sans Display Web,sans-serif}
+.caption p{font-size:.6em}
+.caption a{color:#4b86c2;text-shadow:0 -1px 0 #1f3f60}
+.slide{position:relative;z-index:1;overflow:hidden;padding:20px 100px 0;width:1024px;height:640px;background: #FFF; font-size:25px}
+
+/*.slide::after{position:absolute;top:0;right:100px;padding-top:15px;width:50px;height:100px;background:url(../images/ribbon.svg) no-repeat;color:#fff;counter-increment:slide;content:counter(slide);text-align:center}*/
+
+.slide h1{vertical-align:middle; color:#000;font:400 50px/2 Yandex Sans Display Web,sans-serif}
+.slide h2{margin-bottom:34px;color:#000;font:400 50px/2 Yandex Sans Display Web,sans-serif}
+.slide p{margin-bottom:1em}
+.slide p.note{color:#979a9e}
+.slide a{color:#4b86c2}
+.slide b,.slide strong{font-weight:700}
+.slide blockquote,.slide dfn,.slide em,.slide i{font-style:italic}
+.slide code,.slide kbd,.slide mark,.slide samp{padding:.1em .3em;border-radius:.2em}
+.slide code,.slide kbd,.slide samp{background:rgba(88,90,94,.1);line-height:1.25;font-family:PT Mono,monospace,monospace}
+.slide mark{background:#fafaa2}
+.slide sub,.slide sup{position:relative;line-height:0;font-size:75%}
+.slide sub{bottom:-.25em}
+.slide sup{top:-.5em}
+.slide blockquote::before{position:absolute;margin:-.15em 0 0 -.43em;color:#ccc;line-height:1;font-size:8em;content:'\201C'}
+.slide blockquote+figcaption{margin:-1em 0 1em;font-style:italic;font-weight:700}
+.slide ol,.slide ul{margin-bottom:0em;counter-reset:list}
+.slide ol li,.slide ul li{page-break-inside:avoid;text-indent:-2em}
+.slide ol li::before,.slide ul li::before{display:inline-block;width:2em;color:#979a9e;text-align:right}
+.slide ol ol,.slide ol ul,.slide ul ol,.slide ul ul{margin-bottom:0;margin-left:2em}
+.slide ul>li::before{padding-right:.5em;content:'•'}
+.slide ul>li:lang(ru)::before{content:'—'}
+.slide ol>li::before{padding-right:.4em;counter-increment:list;content:counter(list) "."}
+.slide table{margin-left:-100px;margin-bottom:1em;width:calc(100% + 100px + 100px)}
+.slide table td:first-child,.slide table th:first-child{padding-left:96px}
+.slide table td:last-child,.slide table th:last-child{padding-right:96px}
+.slide table th{text-align:left;font-weight:700}
+.slide table tr:not(:last-of-type)>*{background:-webkit-linear-gradient(bottom,rgba(88,90,94,.5) .055em,transparent .055em) repeat-x;background:linear-gradient(to top,rgba(88,90,94,.5) .055em,transparent .055em) repeat-x}
+.slide table.striped tr:nth-child(even){background:rgba(88,90,94,.1)}
+.slide table.striped tr>*{background-image:none}
+.slide pre{margin-bottom:1em;counter-reset:code;white-space:pre;font-family:Monospace,Courier New;line-height:1;}
+.slide pre code{display:block;margin-left:-100px;padding:0 0 0 100px;width:calc(100% + 100px + 100px);border-radius:0;background:0 0;line-height:2;white-space:pre;-moz-tab-size:4;-o-tab-size:4;tab-size:4}
+.slide pre code:not(:only-child).mark{background:rgba(88,90,94,.1)}
+.slide pre code:not(:only-child)::before{position:absolute;margin-left:-2em;color:#979a9e;counter-increment:code;content:counter(code,decimal-leading-zero) "."}
+.slide pre mark{position:relative;z-index:-1;margin:0 -.3em}
+.slide pre mark.important{background:#c00;color:#fff}
+.slide pre .comment{color:#999}
+.slide footer{position:absolute;right:0;bottom:-640px;left:0;display:none;padding:41px 100px 8px;background:#fbfbba;box-shadow:0 1px 0 #fafaa2 inset;-webkit-transition:bottom .3s;transition:bottom .3s}
+.slide footer mark{background:rgba(255,255,255,.8)}
+.slide:hover>footer{bottom:0}
+.slide.grid{background-image:url(../images/grid.png);-ms-interpolation-mode:nearest-neighbor;image-rendering:-webkit-optimize-contrast;image-rendering:-moz-crisp-edges;image-rendering:pixelated}
+@media (-webkit-min-device-pixel-ratio:2),(min-resolution:2dppx){.slide.grid{background-image:url(../images/grid@2x.png);background-size:1024px auto}
+}
+.slide.black{background-color:#000}
+.slide.black::after,.slide.white::after{visibility:hidden}
+.slide.white{background-color:#fff}
+.slide .double,.slide .triple{-webkit-column-gap:75px;-moz-column-gap:75px;column-gap:75px;-webkit-hyphens:auto;-ms-hyphens:auto;hyphens:auto}
+.slide .double{-webkit-column-count:2;-moz-column-count:2;column-count:2}
+.slide .triple{-webkit-column-count:3;-moz-column-count:3;column-count:3}
+.slide .shout{position:absolute;top:50%;left:0;width:100%;text-align:center;line-height:1;font-size:150px;-webkit-transform:translateY(-50%);transform:translateY(-50%)}
+.slide .shout a{background:-webkit-linear-gradient(bottom,currentColor .11em,transparent .11em) repeat-x;background:linear-gradient(to top,currentColor .11em,transparent .11em) repeat-x}
+.slide .cover{z-index:-1;max-width:100%;max-height:100%}
+.slide .cover.w,.slide .cover.width{width:100%;max-height:none}
+.slide .cover.h,.slide .cover.height{height:100%;max-width:none}
+.slide .cover+figcaption{position:absolute;bottom:20px;right:10px;font-size:12px;opacity:.7;-webkit-transform-origin:0 100%;transform-origin:0 100%;-webkit-transform:translateX(100%) rotate(-90deg);transform:translateX(100%) rotate(-90deg)}
+.slide .cover+figcaption.white{color:#fff}
+.slide .cover+figcaption a{color:currentcolor}
+.slide .cover,.slide .place{position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}
+.slide .place.b.l,.slide .place.b.r,.slide .place.bottom.left,.slide .place.bottom.right,.slide .place.t.l,.slide .place.t.r,.slide .place.top.left,.slide .place.top.right{-webkit-transform:none;transform:none}
+.slide .place.b,.slide .place.bottom,.slide .place.t,.slide .place.top{-webkit-transform:translate(-50%,0);transform:translate(-50%,0)}
+.slide .place.l,.slide .place.left,.slide .place.r,.slide .place.right{-webkit-transform:translate(0,-50%);transform:translate(0,-50%)}
+.slide .place.t,.slide .place.t.r,.slide .place.top,.slide .place.top.left,.slide .place.top.right{top:0}
+.slide .place.r,.slide .place.right{right:0;left:auto}
+.slide .place.b,.slide .place.b.l,.slide .place.b.r,.slide .place.bottom,.slide .place.bottom.left,.slide .place.bottom.right{top:auto;bottom:0}
+.slide .place.l,.slide .place.left{left:0}
+.progress{left:-20px;bottom:0;z-index:1;display:none;width:0;height:0;box-sizing:content-box;border:10px solid #4b86c2;border-right-color:transparent;-webkit-transition:width .2s linear;transition:width .2s linear;clip:rect(10px,1044px,20px,20px)}
+.progress[style*='100%']{padding-left:10px}
+.badge,.badge a,.progress{position:absolute}
+.badge{font-size:10px;top:0;z-index:1;overflow:hidden;display:none;width:9em;height:9em;right:0;visibility:hidden}
+@media (min-width:1174px){.badge{font-size:20px}
+}
+@media (min-width:2348px){.badge{font-size:40px}
+}
+.badge a{right:-50%;bottom:50%;left:-50%;visibility:visible;background:#4b86c2;color:#fff;text-align:center;line-height:2;-webkit-transform-origin:50% 100%;transform-origin:50% 100%;-webkit-transform:rotate(45deg);transform:rotate(45deg)}
+.region{display:none}
+@media screen{.shower.list{padding-top:25px;width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;background:#585a5e;position:absolute;clip:rect(0,auto,auto,0)}
+}
+@media screen and (min-width:1174px){.shower.list{padding-top:50px}
+}
+@media screen and (min-width:2348px){.shower.list{padding-top:100px}
+}
+@media screen{.shower.list .caption{display:block}
+.shower.list .slide{-webkit-transform-origin:0 0;transform-origin:0 0;margin:0 -640px -455px 25px;-webkit-transform:scale(.25);transform:scale(.25);border-radius:2px;box-shadow:0 20px 50px rgba(0,0,0,.3)}
+}
+@media screen and (min-width:1174px){.shower.list .slide{margin:0 -512px -270px 50px;-webkit-transform:scale(.5);transform:scale(.5)}
+}
+@media screen and (min-width:2348px){.shower.list .slide{margin:0 0 100px 100px;-webkit-transform:scale(1);transform:scale(1)}
+}
+@media screen{.shower.list .slide:hover{box-shadow:0 0 0 20px rgba(0,0,0,.1),0 20px 50px rgba(0,0,0,.3)}
+.shower.list .slide:target{box-shadow:0 0 0 1px #376da3,0 0 0 20px #4b86c2,0 20px 50px rgba(0,0,0,.3)}
+.shower.list .slide *{pointer-events:none}
+.shower.list .badge,.shower.list .slide footer{display:block}
+.shower.full{position:absolute;top:50%;left:50%;overflow:hidden;margin:-320px 0 0 -512px;width:1024px;height:640px;background:#000}
+.shower.full .slide{position:absolute;top:0;left:0;margin-left:-150%;visibility:hidden}
+.shower.full .slide:target{margin:0;visibility:visible}
+.shower.full .slide pre code:not(:only-child).mark.next{visibility:visible;background:0 0}
+.shower.full .slide pre code:not(:only-child).mark.next.active{background:rgba(88,90,94,.1)}
+.shower.full .slide .next{visibility:hidden}
+.shower.full .slide .next.active{visibility:visible}
+.shower.full .slide .shout.grow,.shower.full .slide .shout.shrink{opacity:0;-webkit-transition:.4s ease-out;transition:.4s ease-out;-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,transform;transition-property:opacity,transform,-webkit-transform}
+.shower.full .slide .shout.grow{-webkit-transform:scale(.1) translateY(-50%);transform:scale(.1) translateY(-50%)}
+.shower.full .slide .shout.shrink{-webkit-transform:scale(10) translateY(-50%);transform:scale(10) translateY(-50%)}
+.shower.full .slide:target .shout.grow,.shower.full .slide:target .shout.shrink{opacity:1;-webkit-transform:scale(1) translateY(-50%);transform:scale(1) translateY(-50%)}
+.shower.full .progress{display:block;-webkit-transform:translateZ(0);transform:translateZ(0)}
+.shower.full .region{position:absolute;clip:rect(0 0 0 0);overflow:hidden;margin:-1px;padding:0;width:1px;height:1px;border:none;display:block}
+}
diff --git a/release_24.9/shower/themes/yandex/styles/screen-16x9.css b/release_24.9/shower/themes/yandex/styles/screen-16x9.css
new file mode 100644
index 0000000..7249fc7
--- /dev/null
+++ b/release_24.9/shower/themes/yandex/styles/screen-16x9.css
@@ -0,0 +1,204 @@
+/**
+ * Ribbon theme for Shower HTML presentation engine
+ * shower-ribbon v2.0.8, https://github.com/shower/ribbon
+ * @copyright 2010–2016 Vadim Makeev, http://pepelsbey.net/
+ * @license MIT
+ */
+@charset "UTF-8";
+
+ @font-face {
+ font-family: 'Yandex Sans Text Web';
+ src: url(yy5JveR58JFkc97waf-xp0i6_jM.eot);
+ src: url(yy5JveR58JFkc97waf-xp0i6_jM.eot?#iefix) format('embedded-opentype'),
+ url(CYblzLEXzCqQIvrYs7QKQe2omRk.woff2) format('woff2'),
+ url(pUcnOdRwl83MvPPzrNomhyletnA.woff) format('woff'),
+ url(vNFEmXOcGYKJ4AAidUprHWoXrLU.ttf) format('truetype'),
+ url(0w7OcWZM_QLP8x-LQUXFOgXO6dE.svg#YandexSansTextWeb-Bold) format('svg');
+ font-weight: 700;
+ font-style: normal;
+ font-stretch: normal
+ }
+
+ @font-face {
+ font-family: 'Yandex Sans Text Web';
+ src: url(LI6l3L2RqcgxBe2pXmuUha37czQ.eot);
+ src: url(LI6l3L2RqcgxBe2pXmuUha37czQ.eot?#iefix) format('embedded-opentype'),
+ url(z3MYElcut0R2MF_Iw1RDNrstgYs.woff2) format('woff2'),
+ url(1jvKJ_-hCXl3s7gmFl-y_-UHTaI.woff) format('woff'),
+ url(9nzjfpCR2QHvK1EzHpDEIoVFGuY.ttf) format('truetype'),
+ url(gwyBTpxSwkFCF1looxqs6JokKls.svg#YandexSansTextWeb-Regular) format('svg');
+ font-weight: 400;
+ font-style: normal;
+ font-stretch: normal
+ }
+
+ @font-face {
+ font-family: 'Yandex Sans Text Web';
+ src: url(ayAFYoY8swgBLhq_I56tKj2JftU.eot);
+ src: url(ayAFYoY8swgBLhq_I56tKj2JftU.eot?#iefix) format('embedded-opentype'),
+ url(lGQcYklLVV0hyvz1HFmFsUTj8_0.woff2) format('woff2'),
+ url(f0AAJ9GJ4iiwEmhG-7PWMHk6vUY.woff) format('woff'),
+ url(4UDe4nlVvgEJ-VmLWNVq3SxCsA.ttf) format('truetype'),
+ url(EKLr1STNokPqxLAQa_RyN82pL98.svg#YandexSansTextWeb-Light) format('svg');
+ font-weight: 300;
+ font-style: normal;
+ font-stretch: normal
+ }
+
+ @font-face {
+ font-family: 'Yandex Sans Display Web';
+ src: url(H63jN0veW07XQUIA2317lr9UIm8.eot);
+ src: url(H63jN0veW07XQUIA2317lr9UIm8.eot?#iefix) format('embedded-opentype'),
+ url(sUYVCPUAQE7ExrvMS7FoISoO83s.woff2) format('woff2'),
+ url(v2Sve_obH3rKm6rKrtSQpf-eB7U.woff) format('woff'),
+ url(PzD8hWLMunow5i3RfJ6WQJAL7aI.ttf) format('truetype'),
+ url(lF_KG5g4tpQNlYIgA0e77fBSZ5s.svg#YandexSansDisplayWeb-Regular) format('svg');
+ font-weight: 400;
+ font-style: normal;
+ font-stretch: normal
+ }
+
+ @font-face {
+ font-family: 'Yandex Sans Display Web';
+ src: url(g8_MyyKVquSZ3xEL6tarK__V9Vw.eot);
+ src: url(g8_MyyKVquSZ3xEL6tarK__V9Vw.eot?#iefix) format('embedded-opentype'),
+ url(LGiRvlfqQHlWR9YKLhsw5e7KGNA.woff2) format('woff2'),
+ url(40vXwNl4eYYMgteIVgLP49dwmfc.woff) format('woff'),
+ url(X6zG5x_wO8-AtwJ-vDLJcKC5228.ttf) format('truetype'),
+ url(ZKhaR0m08c8CRRL77GtFKoHcLYA.svg#YandexSansDisplayWeb-Light) format('svg');
+ font-weight: 300;
+ font-style: normal;
+ font-stretch: normal
+ }
+
+*,::after,::before{box-sizing:border-box}
+a,abbr,acronym,address,applet,article,aside,audio,b,big,blockquote,body,canvas,caption,center,cite,code,dd,del,details,dfn,div,dl,dt,em,embed,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,header,hgroup,html,i,iframe,img,ins,kbd,label,legend,li,mark,menu,nav,object,ol,output,p,pre,q,ruby,s,samp,section,small,span,strike,strong,sub,summary,sup,table,tbody,td,tfoot,th,thead,time,tr,tt,u,ul,var,video{margin:0;padding:0;border:0;font:inherit;vertical-align:baseline}
+article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section{display:block}
+.caption p,body{line-height:1}
+p {line-height: 1.1}
+ol,ul{list-style:none}
+blockquote,q{quotes:none}
+blockquote::after,blockquote::before,q::after,q::before{content:none}
+table{border-collapse:collapse;border-spacing:0}
+a{text-decoration:none}
+@page{margin:0;size:1024px 576px}
+.shower{color:#000;counter-reset:slide;font:25px/2 Yandex Sans Display Web,sans-serif;-webkit-print-color-adjust:exact;-webkit-text-size-adjust:none;-moz-text-size-adjust:none;-ms-text-size-adjust:none}
+@media print{.shower{text-rendering:geometricPrecision}
+}
+.caption{font-size:25px;display:none;margin-top:-.2em;padding:0 1em .93em;width:100%;color:#3c3d40;text-shadow:0 1px 0 #8d8e90}
+@media (min-width:1174px){.caption{font-size:50px}
+}
+@media (min-width:2348px){.caption{font-size:100px}
+}
+.caption h1{padding-bottom:.15em;font:1em/2 Yandex Sans Display Web,sans-serif}
+.caption p{font-size:.6em}
+.caption a{color:#4b86c2;text-shadow:0 -1px 0 #1f3f60}
+.slide{position:relative;z-index:1;overflow:hidden;padding:20px 100px 0;width:1024px;height:576px;background: #FFF url('../../../../pictures/inner.png') no-repeat right bottom; background-size: 100%; font-size:25px}
+
+/*.slide::after{position:absolute;top:0;right:100px;padding-top:15px;width:50px;height:100px;background:url(../images/ribbon.svg) no-repeat;color:#fff;counter-increment:slide;content:counter(slide);text-align:center}*/
+
+.slide h1{vertical-align:middle; color:#000;font:400 50px/2 Yandex Sans Display Web,sans-serif}
+.slide h2{margin-bottom:34px;color:#000;font:400 50px/2 Yandex Sans Display Web,sans-serif}
+.slide p{margin-bottom:1em}
+.slide p.note{color:#979a9e}
+.slide a{color:#4b86c2}
+.slide b,.slide strong{font-weight:700}
+.slide blockquote,.slide dfn,.slide em,.slide i{font-style:italic}
+.slide code,.slide kbd,.slide mark,.slide samp{padding:.1em .3em;border-radius:.2em}
+.slide code,.slide kbd,.slide samp{background:rgba(88,90,94,.1);line-height:1;font-family:PT Mono,monospace,monospace}
+.slide mark{background:#fafaa2}
+.slide sub,.slide sup{position:relative;line-height:0;font-size:75%}
+.slide sub{bottom:-.25em}
+.slide sup{top:-.5em}
+.slide blockquote::before{position:absolute;margin:-.15em 0 0 -.43em;color:#ccc;line-height:1;font-size:8em;content:'\201C'}
+.slide blockquote+figcaption{margin:-1em 0 1em;font-style:italic;font-weight:700}
+.slide ol,.slide ul{margin-bottom:0em;counter-reset:list}
+.slide ol li,.slide ul li{page-break-inside:avoid;text-indent:-2em}
+.slide ol li::before,.slide ul li::before{display:inline-block;width:2em;color:#979a9e;text-align:right}
+.slide ol ol,.slide ol ul,.slide ul ol,.slide ul ul{margin-bottom:0;margin-left:2em}
+.slide ul>li::before{padding-right:.5em;content:'•'}
+.slide ul>li:lang(ru)::before{content:'—'}
+.slide ol>li::before{padding-right:.4em;counter-increment:list;content:counter(list) "."}
+.slide table{margin-left:-100px;margin-bottom:1em;width:calc(100% + 100px + 100px)}
+.slide table td:first-child,.slide table th:first-child{padding-left:96px}
+.slide table td:last-child,.slide table th:last-child{padding-right:96px}
+.slide table th{text-align:left;font-weight:700}
+.slide table tr:not(:last-of-type)>*{background:-webkit-linear-gradient(bottom,rgba(88,90,94,.5) .055em,transparent .055em) repeat-x;background:linear-gradient(to top,rgba(88,90,94,.5) .055em,transparent .055em) repeat-x}
+.slide table.striped tr:nth-child(even){background:rgba(88,90,94,.1)}
+.slide table.striped tr>*{background-image:none}
+.slide pre{margin-bottom:1em;counter-reset:code;white-space:pre;font-family:Monospace,Courier New;line-height:1;}
+.slide pre code{display:block;margin-left:-100px;padding:0 0 0 100px;width:calc(100% + 100px + 100px);border-radius:0;background:0 0;line-height:2;white-space:pre;-moz-tab-size:4;-o-tab-size:4;tab-size:4}
+.slide pre code:not(:only-child).mark{background:rgba(88,90,94,.1)}
+.slide pre code:not(:only-child)::before{position:absolute;margin-left:-2em;color:#979a9e;counter-increment:code;content:counter(code,decimal-leading-zero) "."}
+.slide pre mark{position:relative;z-index:-1;margin:0 -.3em}
+.slide pre mark.important{background:#c00;color:#fff}
+.slide pre .comment{color:#999}
+.slide footer{position:absolute;right:0;bottom:-576px;left:0;display:none;padding:41px 100px 8px;background:#fbfbba;box-shadow:0 1px 0 #fafaa2 inset;-webkit-transition:bottom .3s;transition:bottom .3s}
+.slide footer mark{background:rgba(255,255,255,.8)}
+.slide:hover>footer{bottom:0}
+.slide.grid{background-image:url(../images/grid.png);-ms-interpolation-mode:nearest-neighbor;image-rendering:-webkit-optimize-contrast;image-rendering:-moz-crisp-edges;image-rendering:pixelated}
+@media (-webkit-min-device-pixel-ratio:2),(min-resolution:2dppx){.slide.grid{background-image:url(../images/grid@2x.png);background-size:1024px auto}
+}
+.slide.black{background-color:#000}
+.slide.black::after,.slide.white::after{visibility:hidden}
+.slide.white{background-color:#fff}
+.slide .double,.slide .triple{-webkit-column-gap:75px;-moz-column-gap:75px;column-gap:75px;-webkit-hyphens:auto;-ms-hyphens:auto;hyphens:auto}
+.slide .double{-webkit-column-count:2;-moz-column-count:2;column-count:2}
+.slide .triple{-webkit-column-count:3;-moz-column-count:3;column-count:3}
+.slide .shout{position:absolute;top:50%;left:0;width:100%;text-align:center;line-height:1;font-size:150px;-webkit-transform:translateY(-50%);transform:translateY(-50%)}
+.slide .shout a{background:-webkit-linear-gradient(bottom,currentColor .11em,transparent .11em) repeat-x;background:linear-gradient(to top,currentColor .11em,transparent .11em) repeat-x}
+.slide .cover{z-index:-1;max-width:100%;max-height:100%}
+.slide .cover.w,.slide .cover.width{width:100%;max-height:none}
+.slide .cover.h,.slide .cover.height{height:100%;max-width:none}
+.slide .cover+figcaption{position:absolute;bottom:20px;right:10px;font-size:12px;opacity:.7;-webkit-transform-origin:0 100%;transform-origin:0 100%;-webkit-transform:translateX(100%) rotate(-90deg);transform:translateX(100%) rotate(-90deg)}
+.slide .cover+figcaption.white{color:#fff}
+.slide .cover+figcaption a{color:currentcolor}
+.slide .cover,.slide .place{position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}
+.slide .place.b.l,.slide .place.b.r,.slide .place.bottom.left,.slide .place.bottom.right,.slide .place.t.l,.slide .place.t.r,.slide .place.top.left,.slide .place.top.right{-webkit-transform:none;transform:none}
+.slide .place.b,.slide .place.bottom,.slide .place.t,.slide .place.top{-webkit-transform:translate(-50%,0);transform:translate(-50%,0)}
+.slide .place.l,.slide .place.left,.slide .place.r,.slide .place.right{-webkit-transform:translate(0,-50%);transform:translate(0,-50%)}
+.slide .place.t,.slide .place.t.r,.slide .place.top,.slide .place.top.left,.slide .place.top.right{top:0}
+.slide .place.r,.slide .place.right{right:0;left:auto}
+.slide .place.b,.slide .place.b.l,.slide .place.b.r,.slide .place.bottom,.slide .place.bottom.left,.slide .place.bottom.right{top:auto;bottom:0}
+.slide .place.l,.slide .place.left{left:0}
+.progress{left:-20px;bottom:0;z-index:1;display:none;width:0;height:0;box-sizing:content-box;border:10px solid #4b86c2;border-right-color:transparent;-webkit-transition:width .2s linear;transition:width .2s linear;clip:rect(10px,1044px,20px,20px)}
+.progress[style*='100%']{padding-left:10px}
+.badge,.badge a,.progress{position:absolute}
+.badge{font-size:10px;top:0;z-index:1;overflow:hidden;display:none;width:9em;height:9em;right:0;visibility:hidden}
+@media (min-width:1174px){.badge{font-size:20px}
+}
+@media (min-width:2348px){.badge{font-size:40px}
+}
+.badge a{right:-50%;bottom:50%;left:-50%;visibility:visible;background:#4b86c2;color:#fff;text-align:center;line-height:2;-webkit-transform-origin:50% 100%;transform-origin:50% 100%;-webkit-transform:rotate(45deg);transform:rotate(45deg)}
+.region{display:none}
+@media screen{.shower.list{padding-top:25px;width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;background:#585a5e;position:absolute;clip:rect(0,auto,auto,0)}
+}
+@media screen and (min-width:1174px){.shower.list{padding-top:50px}
+}
+@media screen and (min-width:2348px){.shower.list{padding-top:100px}
+}
+@media screen{.shower.list .caption{display:block}
+.shower.list .slide{-webkit-transform-origin:0 0;transform-origin:0 0;margin:0 -576px -455px 25px;-webkit-transform:scale(.25);transform:scale(.25);border-radius:2px;box-shadow:0 20px 50px rgba(0,0,0,.3)}
+}
+@media screen and (min-width:1174px){.shower.list .slide{margin:0 -512px -270px 50px;-webkit-transform:scale(.5);transform:scale(.5)}
+}
+@media screen and (min-width:2348px){.shower.list .slide{margin:0 0 100px 100px;-webkit-transform:scale(1);transform:scale(1)}
+}
+@media screen{.shower.list .slide:hover{box-shadow:0 0 0 20px rgba(0,0,0,.1),0 20px 50px rgba(0,0,0,.3)}
+.shower.list .slide:target{box-shadow:0 0 0 1px #376da3,0 0 0 20px #4b86c2,0 20px 50px rgba(0,0,0,.3)}
+.shower.list .slide *{pointer-events:none}
+.shower.list .badge,.shower.list .slide footer{display:block}
+.shower.full{position:absolute;top:50%;left:50%;overflow:hidden;margin:-288px 0 0 -512px;width:1024px;height:576px;background:#000}
+.shower.full .slide{position:absolute;top:0;left:0;margin-left:-150%;visibility:hidden}
+.shower.full .slide:target{margin:0;visibility:visible}
+.shower.full .slide pre code:not(:only-child).mark.next{visibility:visible;background:0 0}
+.shower.full .slide pre code:not(:only-child).mark.next.active{background:rgba(88,90,94,.1)}
+.shower.full .slide .next{visibility:hidden}
+.shower.full .slide .next.active{visibility:visible}
+.shower.full .slide .shout.grow,.shower.full .slide .shout.shrink{opacity:0;-webkit-transition:.4s ease-out;transition:.4s ease-out;-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,transform;transition-property:opacity,transform,-webkit-transform}
+.shower.full .slide .shout.grow{-webkit-transform:scale(.1) translateY(-50%);transform:scale(.1) translateY(-50%)}
+.shower.full .slide .shout.shrink{-webkit-transform:scale(10) translateY(-50%);transform:scale(10) translateY(-50%)}
+.shower.full .slide:target .shout.grow,.shower.full .slide:target .shout.shrink{opacity:1;-webkit-transform:scale(1) translateY(-50%);transform:scale(1) translateY(-50%)}
+.shower.full .progress{display:block;-webkit-transform:translateZ(0);transform:translateZ(0)}
+.shower.full .region{position:absolute;clip:rect(0 0 0 0);overflow:hidden;margin:-1px;padding:0;width:1px;height:1px;border:none;display:block}
+}
diff --git a/release_24.9/shower/themes/yandex/styles/v2Sve_obH3rKm6rKrtSQpf-eB7U.woff b/release_24.9/shower/themes/yandex/styles/v2Sve_obH3rKm6rKrtSQpf-eB7U.woff
new file mode 100644
index 0000000..e8f80da
Binary files /dev/null and b/release_24.9/shower/themes/yandex/styles/v2Sve_obH3rKm6rKrtSQpf-eB7U.woff differ
diff --git a/release_24.9/shower/themes/yandex/styles/vNFEmXOcGYKJ4AAidUprHWoXrLU.ttf b/release_24.9/shower/themes/yandex/styles/vNFEmXOcGYKJ4AAidUprHWoXrLU.ttf
new file mode 100644
index 0000000..074a005
Binary files /dev/null and b/release_24.9/shower/themes/yandex/styles/vNFEmXOcGYKJ4AAidUprHWoXrLU.ttf differ
diff --git a/release_24.9/shower/themes/yandex/styles/yy5JveR58JFkc97waf-xp0i6_jM.eot b/release_24.9/shower/themes/yandex/styles/yy5JveR58JFkc97waf-xp0i6_jM.eot
new file mode 100644
index 0000000..df62803
Binary files /dev/null and b/release_24.9/shower/themes/yandex/styles/yy5JveR58JFkc97waf-xp0i6_jM.eot differ
diff --git a/release_24.9/shower/themes/yandex/styles/z3MYElcut0R2MF_Iw1RDNrstgYs.woff2 b/release_24.9/shower/themes/yandex/styles/z3MYElcut0R2MF_Iw1RDNrstgYs.woff2
new file mode 100644
index 0000000..dd50c49
Binary files /dev/null and b/release_24.9/shower/themes/yandex/styles/z3MYElcut0R2MF_Iw1RDNrstgYs.woff2 differ