├── .gitignore
├── README.md
├── google86bf114afc1faecb.html
├── package.json
├── src
├── client.js
├── components
│ ├── Nav.html
│ ├── Recorder.html
│ └── Toast.html
├── routes
│ ├── _error.html
│ ├── _layout.html
│ ├── demo
│ │ ├── chat.html
│ │ ├── checkout-form.html
│ │ └── tetris.html
│ ├── index.html
│ └── replay.html
├── server.js
├── service-worker.js
└── template.html
├── static
├── chat.png
├── checkout.png
├── demo
│ ├── bootstrap-solid.svg
│ ├── bootstrap.min.css
│ ├── bootstrap.min.js
│ ├── holder.min.js
│ ├── jquery.slim.min.js
│ ├── music.mp3
│ ├── popper.min.js
│ ├── tetris-1.0.1.css
│ ├── tetris-1.0.1.js
│ └── tetris-loader.css
├── events.json
├── favicon.png
├── global.css
├── logos
│ ├── highlight.png
│ ├── posthog.png
│ ├── record-once.png
│ └── smartx.png
├── manifest.json
├── rrweb-player.css
└── tetris.png
├── webpack.config.js
└── yarn.lock
/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | node_modules
3 | yarn-error.log
4 | /__sapper__
5 | package-lock.json
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # sapper-template
2 |
3 | The default [Sapper](https://github.com/sveltejs/sapper) template. To clone it and get started:
4 |
5 | ```bash
6 | npx degit sveltejs/sapper-template my-app
7 | cd my-app
8 | npm install # or yarn!
9 | npm run dev
10 | ```
11 |
12 | Open up [localhost:3000](http://localhost:3000) and start clicking around.
13 |
14 | Consult [sapper.svelte.technology](https://sapper.svelte.technology) for help getting started.
15 |
16 | *[Click here for the Rollup version of this template](https://github.com/sveltejs/sapper-template/tree/rollup)*
17 |
18 | ## Structure
19 |
20 | Sapper expects to find three directories in the root of your project — `app`, `assets` and `routes`.
21 |
22 |
23 | ### app
24 |
25 | The [app](app) directory contains the entry points for your app — `client.js`, `server.js` and (optionally) a `service-worker.js` — along with a `template.html` file.
26 |
27 |
28 | ### assets
29 |
30 | The [assets](assets) directory contains any static assets that should be available. These are served using [sirv](https://github.com/lukeed/sirv).
31 |
32 | In your [service-worker.js](app/service-worker.js) file, you can import these as `assets` from the generated manifest...
33 |
34 | ```js
35 | import { assets } from './manifest/service-worker.js';
36 | ```
37 |
38 | ...so that you can cache them (though you can choose not to, for example if you don't want to cache very large files).
39 |
40 |
41 | ### routes
42 |
43 | This is the heart of your Sapper app. There are two kinds of routes — *pages*, and *server routes*.
44 |
45 | **Pages** are Svelte components written in `.html` files. When a user first visits the application, they will be served a server-rendered version of the route in question, plus some JavaScript that 'hydrates' the page and initialises a client-side router. From that point forward, navigating to other pages is handled entirely on the client for a fast, app-like feel. (Sapper will preload and cache the code for these subsequent pages, so that navigation is instantaneous.)
46 |
47 | **Server routes** are modules written in `.js` files, that export functions corresponding to HTTP methods. Each function receives Express `request` and `response` objects as arguments, plus a `next` function. This is useful for creating a JSON API, for example.
48 |
49 | There are three simple rules for naming the files that define your routes:
50 |
51 | * A file called `routes/about.html` corresponds to the `/about` route. A file called `routes/blog/[slug].html` corresponds to the `/blog/:slug` route, in which case `params.slug` is available to the route
52 | * The file `routes/index.html` (or `routes/index.js`) corresponds to the root of your app. `routes/about/index.html` is treated the same as `routes/about.html`.
53 | * Files and directories with a leading underscore do *not* create routes. This allows you to colocate helper modules and components with the routes that depend on them — for example you could have a file called `routes/_helpers/datetime.js` and it would *not* create a `/_helpers/datetime` route
54 |
55 |
56 | ## Webpack config
57 |
58 | Sapper uses webpack to provide code-splitting, dynamic imports and hot module reloading, as well as compiling your Svelte components. As long as you don't do anything daft, you can edit the configuration files to add whatever loaders and plugins you'd like.
59 |
60 |
61 | ## Production mode and deployment
62 |
63 | To start a production version of your app, run `npm run build && npm start`. This will disable hot module replacement, and activate the appropriate webpack plugins.
64 |
65 | You can deploy your application to any environment that supports Node 8 or above. As an example, to deploy to [Now](https://zeit.co/now), run these commands:
66 |
67 | ```bash
68 | npm install -g now
69 | now
70 | ```
71 |
72 |
73 | ## Using external components
74 |
75 | When using Svelte components installed from npm, such as [@sveltejs/svelte-virtual-list](https://github.com/sveltejs/svelte-virtual-list), Svelte needs the original component source (rather than any precompiled JavaScript that ships with the component). This allows the component to be rendered server-side, and also keeps your client-side app smaller.
76 |
77 | Because of that, it's essential that webpack doesn't treat the package as an *external dependency*. You can either modify the `externals` option in [webpack/server.config.js](webpack/server.config.js), or simply install the package to `devDependencies` rather than `dependencies`, which will cause it to get bundled (and therefore compiled) with your app:
78 |
79 | ```bash
80 | yarn add -D @sveltejs/svelte-virtual-list
81 | ```
82 |
83 |
84 | ## Bugs and feedback
85 |
86 | Sapper is in early development, and may have the odd rough edge here and there. Please be vocal over on the [Sapper issue tracker](https://github.com/sveltejs/sapper/issues).
87 |
--------------------------------------------------------------------------------
/google86bf114afc1faecb.html:
--------------------------------------------------------------------------------
1 | google-site-verification: google86bf114afc1faecb.html
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "rrweb-io",
3 | "description": "rrweb homepage source code",
4 | "version": "0.0.1",
5 | "scripts": {
6 | "dev": "sapper dev",
7 | "build": "sapper build",
8 | "export": "sapper export",
9 | "start": "node __sapper__/build"
10 | },
11 | "dependencies": {
12 | "compression": "^1.7.1",
13 | "conversational-form": "^0.9.90",
14 | "polka": "^0.4.0",
15 | "rrweb": "^1.0.1",
16 | "rrweb-player": "^0.7.3",
17 | "sirv": "^0.2.0"
18 | },
19 | "devDependencies": {
20 | "npm-run-all": "^4.1.5",
21 | "sapper": "^0.22.1",
22 | "svelte": "^2.16.0",
23 | "svelte-loader": "^2.9.0",
24 | "webpack": "^4.28.1"
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/src/client.js:
--------------------------------------------------------------------------------
1 | import * as sapper from '../__sapper__/client.js';
2 | import { Store } from 'svelte/store.js';
3 |
4 | sapper.start({
5 | target: document.querySelector('#sapper'),
6 | store: data => {
7 | const store = new Store(data)
8 | // for debug
9 | window.store = store
10 |
11 | return store
12 | }
13 | });
--------------------------------------------------------------------------------
/src/components/Nav.html:
--------------------------------------------------------------------------------
1 |
78 |
79 |
85 |
--------------------------------------------------------------------------------
/src/components/Recorder.html:
--------------------------------------------------------------------------------
1 |
5 |
6 |
26 |
--------------------------------------------------------------------------------
/src/components/Toast.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
19 |
20 |
34 |
--------------------------------------------------------------------------------
/src/routes/_error.html:
--------------------------------------------------------------------------------
1 |
2 | {status}
3 |
4 |
5 | {status}
6 |
7 | {error.message}
8 |
9 | {#if dev && error.stack}
10 | {error.stack}
11 | {/if}
12 |
13 |
34 |
35 |
42 |
--------------------------------------------------------------------------------
/src/routes/_layout.html:
--------------------------------------------------------------------------------
1 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/src/routes/demo/chat.html:
--------------------------------------------------------------------------------
1 |
2 |
3 | rrweb.ui | Conversational Form
4 |
5 |
6 |
94 |
95 |
96 | {#if message}
97 |
98 | { message }
99 |
100 | {/if}
101 |
102 |
103 |
104 |
147 |
148 |
--------------------------------------------------------------------------------
/src/routes/demo/checkout-form.html:
--------------------------------------------------------------------------------
1 |
2 |
3 | rrweb.io | Checkout form demo
4 |
5 |
6 |
7 |
8 |
9 |
10 |
Checkout form
11 |
Below is an example form built entirely with Bootstrap's form controls. Each required form group has
12 | a validation state that can be triggered by attempting to submit the form without completing it.
13 |
14 |
15 |
16 |
17 |
18 | Your cart
19 | 3
20 |
21 |
22 |
23 |
24 |
Product name
25 | Brief description
26 |
27 | $12
28 |
29 |
30 |
31 |
Second product
32 | Brief description
33 |
34 | $8
35 |
36 |
37 |
38 |
Third item
39 | Brief description
40 |
41 | $5
42 |
43 |
44 |
45 |
Promo code
46 | EXAMPLECODE
47 |
48 | -$5
49 |
50 |
51 | Total (USD)
52 | $20
53 |
54 |
55 |
56 |
64 |
65 |
66 |
Billing address
67 |
211 |
212 |
213 |
214 | You can click the replay button to replay your actions.
215 |
216 |
217 |
218 | {#if message}
219 |
220 | { message }
221 |
222 | {/if}
223 |
224 |
225 |
226 |
269 |
270 |
--------------------------------------------------------------------------------
/src/routes/demo/tetris.html:
--------------------------------------------------------------------------------
1 |
2 |
3 | rrweb.io | Tetris game demo
4 |
5 |
6 |
7 |
8 |
9 |
14 |
15 |
16 |
17 |
44 |
--------------------------------------------------------------------------------
/src/routes/index.html:
--------------------------------------------------------------------------------
1 |
2 | rrweb.io | Open source web session replay library
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 | Record and replay the web
14 |
15 |
16 | rrweb is an open source web session replay library, which provides
17 | easy-to-use APIs to record user's interactions and replay it
18 | remotely.
19 |
20 |
Join Community
21 |
Try rrweb
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
User analysis
67 |
68 | With the pixel-perfect replay of what users do on your site, you
69 | will find it easy to understand your users and optimize their
70 | experience.
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
Reproduce bugs
84 |
85 | You can replay problem and debug it in your browser remotely
86 | with consistent behavior. This lets you understand the cause of
87 | every bug.
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
Demonstrate web
104 |
105 | Instead of recording videos to show your web, rrweb provides a
106 | more lightweight and pixel-perfect way of doing that.
107 |
108 |
109 |
110 |
111 |
112 |
113 |
114 |
115 |
116 |
117 |
118 |
119 |
120 |
121 |
122 |
123 |
124 | Real-time collaboration
125 |
126 |
127 | With the power of rrweb, it should not be hard to share your
128 | interactions on the site with others in real-time.
129 |
130 |
131 |
132 |
133 |
134 |
135 |
136 |
137 |
189 |
190 |
191 |
192 |
193 |
194 |
195 |
Who's using rrweb
196 |
Trusted by these great companies:
197 |
198 |
203 |
208 |
213 |
218 |
219 |
220 |
221 |
222 |
223 |
224 |
225 |
226 |
227 |
228 |
229 |
230 |
231 |
232 |
233 |
234 |
235 |
236 |
237 |
238 |
239 |
240 |
241 |
242 |
243 |
244 |
245 |
246 |
247 |
248 |
249 |
250 |
251 |
252 |
253 |
254 |
255 |
256 |
257 |
300 |
301 |
302 |
303 |
--------------------------------------------------------------------------------
/src/routes/replay.html:
--------------------------------------------------------------------------------
1 |
2 | rrweb.io | rrweb replayer
3 |
4 |
5 |
6 |
7 |
8 |
36 |
37 |
45 |
--------------------------------------------------------------------------------
/src/server.js:
--------------------------------------------------------------------------------
1 | import sirv from 'sirv';
2 | import polka from 'polka';
3 | import compression from 'compression';
4 | import * as sapper from '../__sapper__/server.js';
5 | import { Store } from 'svelte/store.js';
6 |
7 | const { PORT, NODE_ENV } = process.env;
8 | const dev = NODE_ENV === 'development';
9 |
10 | const data = {
11 | events: [],
12 | }
13 |
14 | polka() // You can also use Express
15 | .use(
16 | compression({ threshold: 0 }),
17 | sirv('static', { dev }),
18 | sapper.middleware({
19 | store: request => {
20 | return new Store(data)
21 | }
22 | })
23 | )
24 | .listen(PORT, err => {
25 | if (err) console.log('error', err);
26 | });
27 |
--------------------------------------------------------------------------------
/src/service-worker.js:
--------------------------------------------------------------------------------
1 | import { timestamp, files, shell, routes } from '../__sapper__/service-worker.js';
2 |
3 | const ASSETS = `cache${timestamp}`;
4 |
5 | // `shell` is an array of all the files generated by webpack,
6 | // `files` is an array of everything in the `static` directory
7 | const to_cache = shell.concat(files);
8 | const cached = new Set(to_cache);
9 |
10 | self.addEventListener('install', event => {
11 | event.waitUntil(
12 | caches
13 | .open(ASSETS)
14 | .then(cache => cache.addAll(to_cache))
15 | .then(() => {
16 | self.skipWaiting();
17 | })
18 | );
19 | });
20 |
21 | self.addEventListener('activate', event => {
22 | event.waitUntil(
23 | caches.keys().then(async keys => {
24 | // delete old caches
25 | for (const key of keys) {
26 | if (key !== ASSETS) await caches.delete(key);
27 | }
28 |
29 | self.clients.claim();
30 | })
31 | );
32 | });
33 |
34 | self.addEventListener('fetch', event => {
35 | if (event.request.method !== 'GET' || event.request.headers.has('range')) return;
36 |
37 | const url = new URL(event.request.url);
38 |
39 | // don't try to handle e.g. data: URIs
40 | if (!url.protocol.startsWith('http')) return;
41 |
42 | // ignore dev server requests
43 | if (url.hostname === self.location.hostname && url.port !== self.location.port) return;
44 |
45 | // always serve assets and webpack-generated files from cache
46 | if (url.host === self.location.host && cached.has(url.pathname)) {
47 | event.respondWith(caches.match(event.request));
48 | return;
49 | }
50 |
51 | // for pages, you might want to serve a shell `index.html` file,
52 | // which Sapper has generated for you. It's not right for every
53 | // app, but if it's right for yours then uncomment this section
54 | /*
55 | if (url.origin === self.origin && routes.find(route => route.pattern.test(url.pathname))) {
56 | event.respondWith(caches.match('/index.html'));
57 | return;
58 | }
59 | */
60 |
61 | if (event.request.cache === 'only-if-cached') return;
62 |
63 | // for everything else, try the network first, falling back to
64 | // cache if the user is offline. (If the pages never change, you
65 | // might prefer a cache-first approach to a network-first one.)
66 | event.respondWith(
67 | caches
68 | .open(`offline${timestamp}`)
69 | .then(async cache => {
70 | try {
71 | const response = await fetch(event.request);
72 | cache.put(event.request, response.clone());
73 | return response;
74 | } catch(err) {
75 | const response = await cache.match(event.request);
76 | if (response) return response;
77 |
78 | throw err;
79 | }
80 | })
81 | );
82 | });
83 |
--------------------------------------------------------------------------------
/src/template.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | %sapper.base%
9 |
10 |
11 |
12 |
13 |
14 |
17 | %sapper.styles%
18 |
22 |
23 |
32 |
33 |
34 |
35 |
36 |
38 | %sapper.head%
39 |
40 |
41 |
43 | %sapper.html%
44 |
45 |
46 |
47 |
48 |
49 |
52 | %sapper.scripts%
53 |
54 |
55 |
56 |
--------------------------------------------------------------------------------
/static/chat.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rrweb-io/web/eecd16423cb7dbb6f305709a5172cdbd3ad828ef/static/chat.png
--------------------------------------------------------------------------------
/static/checkout.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rrweb-io/web/eecd16423cb7dbb6f305709a5172cdbd3ad828ef/static/checkout.png
--------------------------------------------------------------------------------
/static/demo/bootstrap-solid.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/static/demo/bootstrap.min.js:
--------------------------------------------------------------------------------
1 | /*!
2 | * Bootstrap v4.1.3 (https://getbootstrap.com/)
3 | * Copyright 2011-2018 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
4 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
5 | */
6 | !function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("jquery"),require("popper.js")):"function"==typeof define&&define.amd?define(["exports","jquery","popper.js"],e):e(t.bootstrap={},t.jQuery,t.Popper)}(this,function(t,e,h){"use strict";function i(t,e){for(var n=0;nthis._items.length-1||t<0))if(this._isSliding)P(this._element).one(Q.SLID,function(){return e.to(t)});else{if(n===t)return this.pause(),void this.cycle();var i=ndocument.documentElement.clientHeight;!this._isBodyOverflowing&&t&&(this._element.style.paddingLeft=this._scrollbarWidth+"px"),this._isBodyOverflowing&&!t&&(this._element.style.paddingRight=this._scrollbarWidth+"px")},t._resetAdjustments=function(){this._element.style.paddingLeft="",this._element.style.paddingRight=""},t._checkScrollbar=function(){var t=document.body.getBoundingClientRect();this._isBodyOverflowing=t.left+t.right
',trigger:"hover focus",title:"",delay:0,html:!(Ie={AUTO:"auto",TOP:"top",RIGHT:"right",BOTTOM:"bottom",LEFT:"left"}),selector:!(Se={animation:"boolean",template:"string",title:"(string|element|function)",trigger:"string",delay:"(number|object)",html:"boolean",selector:"(string|boolean)",placement:"(string|function)",offset:"(number|string)",container:"(string|element|boolean)",fallbackPlacement:"(string|array)",boundary:"(string|element)"}),placement:"top",offset:0,container:!1,fallbackPlacement:"flip",boundary:"scrollParent"},we="out",Ne={HIDE:"hide"+Ee,HIDDEN:"hidden"+Ee,SHOW:(De="show")+Ee,SHOWN:"shown"+Ee,INSERTED:"inserted"+Ee,CLICK:"click"+Ee,FOCUSIN:"focusin"+Ee,FOCUSOUT:"focusout"+Ee,MOUSEENTER:"mouseenter"+Ee,MOUSELEAVE:"mouseleave"+Ee},Oe="fade",ke="show",Pe=".tooltip-inner",je=".arrow",He="hover",Le="focus",Re="click",xe="manual",We=function(){function i(t,e){if("undefined"==typeof h)throw new TypeError("Bootstrap tooltips require Popper.js (https://popper.js.org)");this._isEnabled=!0,this._timeout=0,this._hoverState="",this._activeTrigger={},this._popper=null,this.element=t,this.config=this._getConfig(e),this.tip=null,this._setListeners()}var t=i.prototype;return t.enable=function(){this._isEnabled=!0},t.disable=function(){this._isEnabled=!1},t.toggleEnabled=function(){this._isEnabled=!this._isEnabled},t.toggle=function(t){if(this._isEnabled)if(t){var e=this.constructor.DATA_KEY,n=pe(t.currentTarget).data(e);n||(n=new this.constructor(t.currentTarget,this._getDelegateConfig()),pe(t.currentTarget).data(e,n)),n._activeTrigger.click=!n._activeTrigger.click,n._isWithActiveTrigger()?n._enter(null,n):n._leave(null,n)}else{if(pe(this.getTipElement()).hasClass(ke))return void this._leave(null,this);this._enter(null,this)}},t.dispose=function(){clearTimeout(this._timeout),pe.removeData(this.element,this.constructor.DATA_KEY),pe(this.element).off(this.constructor.EVENT_KEY),pe(this.element).closest(".modal").off("hide.bs.modal"),this.tip&&pe(this.tip).remove(),this._isEnabled=null,this._timeout=null,this._hoverState=null,(this._activeTrigger=null)!==this._popper&&this._popper.destroy(),this._popper=null,this.element=null,this.config=null,this.tip=null},t.show=function(){var e=this;if("none"===pe(this.element).css("display"))throw new Error("Please use show on visible elements");var t=pe.Event(this.constructor.Event.SHOW);if(this.isWithContent()&&this._isEnabled){pe(this.element).trigger(t);var n=pe.contains(this.element.ownerDocument.documentElement,this.element);if(t.isDefaultPrevented()||!n)return;var i=this.getTipElement(),r=Fn.getUID(this.constructor.NAME);i.setAttribute("id",r),this.element.setAttribute("aria-describedby",r),this.setContent(),this.config.animation&&pe(i).addClass(Oe);var o="function"==typeof this.config.placement?this.config.placement.call(this,i,this.element):this.config.placement,s=this._getAttachment(o);this.addAttachmentClass(s);var a=!1===this.config.container?document.body:pe(document).find(this.config.container);pe(i).data(this.constructor.DATA_KEY,this),pe.contains(this.element.ownerDocument.documentElement,this.tip)||pe(i).appendTo(a),pe(this.element).trigger(this.constructor.Event.INSERTED),this._popper=new h(this.element,i,{placement:s,modifiers:{offset:{offset:this.config.offset},flip:{behavior:this.config.fallbackPlacement},arrow:{element:je},preventOverflow:{boundariesElement:this.config.boundary}},onCreate:function(t){t.originalPlacement!==t.placement&&e._handlePopperPlacementChange(t)},onUpdate:function(t){e._handlePopperPlacementChange(t)}}),pe(i).addClass(ke),"ontouchstart"in document.documentElement&&pe(document.body).children().on("mouseover",null,pe.noop);var l=function(){e.config.animation&&e._fixTransition();var t=e._hoverState;e._hoverState=null,pe(e.element).trigger(e.constructor.Event.SHOWN),t===we&&e._leave(null,e)};if(pe(this.tip).hasClass(Oe)){var c=Fn.getTransitionDurationFromElement(this.tip);pe(this.tip).one(Fn.TRANSITION_END,l).emulateTransitionEnd(c)}else l()}},t.hide=function(t){var e=this,n=this.getTipElement(),i=pe.Event(this.constructor.Event.HIDE),r=function(){e._hoverState!==De&&n.parentNode&&n.parentNode.removeChild(n),e._cleanTipClass(),e.element.removeAttribute("aria-describedby"),pe(e.element).trigger(e.constructor.Event.HIDDEN),null!==e._popper&&e._popper.destroy(),t&&t()};if(pe(this.element).trigger(i),!i.isDefaultPrevented()){if(pe(n).removeClass(ke),"ontouchstart"in document.documentElement&&pe(document.body).children().off("mouseover",null,pe.noop),this._activeTrigger[Re]=!1,this._activeTrigger[Le]=!1,this._activeTrigger[He]=!1,pe(this.tip).hasClass(Oe)){var o=Fn.getTransitionDurationFromElement(n);pe(n).one(Fn.TRANSITION_END,r).emulateTransitionEnd(o)}else r();this._hoverState=""}},t.update=function(){null!==this._popper&&this._popper.scheduleUpdate()},t.isWithContent=function(){return Boolean(this.getTitle())},t.addAttachmentClass=function(t){pe(this.getTipElement()).addClass(Te+"-"+t)},t.getTipElement=function(){return this.tip=this.tip||pe(this.config.template)[0],this.tip},t.setContent=function(){var t=this.getTipElement();this.setElementContent(pe(t.querySelectorAll(Pe)),this.getTitle()),pe(t).removeClass(Oe+" "+ke)},t.setElementContent=function(t,e){var n=this.config.html;"object"==typeof e&&(e.nodeType||e.jquery)?n?pe(e).parent().is(t)||t.empty().append(e):t.text(pe(e).text()):t[n?"html":"text"](e)},t.getTitle=function(){var t=this.element.getAttribute("data-original-title");return t||(t="function"==typeof this.config.title?this.config.title.call(this.element):this.config.title),t},t._getAttachment=function(t){return Ie[t.toUpperCase()]},t._setListeners=function(){var i=this;this.config.trigger.split(" ").forEach(function(t){if("click"===t)pe(i.element).on(i.constructor.Event.CLICK,i.config.selector,function(t){return i.toggle(t)});else if(t!==xe){var e=t===He?i.constructor.Event.MOUSEENTER:i.constructor.Event.FOCUSIN,n=t===He?i.constructor.Event.MOUSELEAVE:i.constructor.Event.FOCUSOUT;pe(i.element).on(e,i.config.selector,function(t){return i._enter(t)}).on(n,i.config.selector,function(t){return i._leave(t)})}pe(i.element).closest(".modal").on("hide.bs.modal",function(){return i.hide()})}),this.config.selector?this.config=l({},this.config,{trigger:"manual",selector:""}):this._fixTitle()},t._fixTitle=function(){var t=typeof this.element.getAttribute("data-original-title");(this.element.getAttribute("title")||"string"!==t)&&(this.element.setAttribute("data-original-title",this.element.getAttribute("title")||""),this.element.setAttribute("title",""))},t._enter=function(t,e){var n=this.constructor.DATA_KEY;(e=e||pe(t.currentTarget).data(n))||(e=new this.constructor(t.currentTarget,this._getDelegateConfig()),pe(t.currentTarget).data(n,e)),t&&(e._activeTrigger["focusin"===t.type?Le:He]=!0),pe(e.getTipElement()).hasClass(ke)||e._hoverState===De?e._hoverState=De:(clearTimeout(e._timeout),e._hoverState=De,e.config.delay&&e.config.delay.show?e._timeout=setTimeout(function(){e._hoverState===De&&e.show()},e.config.delay.show):e.show())},t._leave=function(t,e){var n=this.constructor.DATA_KEY;(e=e||pe(t.currentTarget).data(n))||(e=new this.constructor(t.currentTarget,this._getDelegateConfig()),pe(t.currentTarget).data(n,e)),t&&(e._activeTrigger["focusout"===t.type?Le:He]=!1),e._isWithActiveTrigger()||(clearTimeout(e._timeout),e._hoverState=we,e.config.delay&&e.config.delay.hide?e._timeout=setTimeout(function(){e._hoverState===we&&e.hide()},e.config.delay.hide):e.hide())},t._isWithActiveTrigger=function(){for(var t in this._activeTrigger)if(this._activeTrigger[t])return!0;return!1},t._getConfig=function(t){return"number"==typeof(t=l({},this.constructor.Default,pe(this.element).data(),"object"==typeof t&&t?t:{})).delay&&(t.delay={show:t.delay,hide:t.delay}),"number"==typeof t.title&&(t.title=t.title.toString()),"number"==typeof t.content&&(t.content=t.content.toString()),Fn.typeCheckConfig(ve,t,this.constructor.DefaultType),t},t._getDelegateConfig=function(){var t={};if(this.config)for(var e in this.config)this.constructor.Default[e]!==this.config[e]&&(t[e]=this.config[e]);return t},t._cleanTipClass=function(){var t=pe(this.getTipElement()),e=t.attr("class").match(be);null!==e&&e.length&&t.removeClass(e.join(""))},t._handlePopperPlacementChange=function(t){var e=t.instance;this.tip=e.popper,this._cleanTipClass(),this.addAttachmentClass(this._getAttachment(t.placement))},t._fixTransition=function(){var t=this.getTipElement(),e=this.config.animation;null===t.getAttribute("x-placement")&&(pe(t).removeClass(Oe),this.config.animation=!1,this.hide(),this.show(),this.config.animation=e)},i._jQueryInterface=function(n){return this.each(function(){var t=pe(this).data(ye),e="object"==typeof n&&n;if((t||!/dispose|hide/.test(n))&&(t||(t=new i(this,e),pe(this).data(ye,t)),"string"==typeof n)){if("undefined"==typeof t[n])throw new TypeError('No method named "'+n+'"');t[n]()}})},s(i,null,[{key:"VERSION",get:function(){return"4.1.3"}},{key:"Default",get:function(){return Ae}},{key:"NAME",get:function(){return ve}},{key:"DATA_KEY",get:function(){return ye}},{key:"Event",get:function(){return Ne}},{key:"EVENT_KEY",get:function(){return Ee}},{key:"DefaultType",get:function(){return Se}}]),i}(),pe.fn[ve]=We._jQueryInterface,pe.fn[ve].Constructor=We,pe.fn[ve].noConflict=function(){return pe.fn[ve]=Ce,We._jQueryInterface},We),Jn=(qe="popover",Ke="."+(Fe="bs.popover"),Me=(Ue=e).fn[qe],Qe="bs-popover",Be=new RegExp("(^|\\s)"+Qe+"\\S+","g"),Ve=l({},zn.Default,{placement:"right",trigger:"click",content:"",template:''}),Ye=l({},zn.DefaultType,{content:"(string|element|function)"}),ze="fade",Ze=".popover-header",Ge=".popover-body",$e={HIDE:"hide"+Ke,HIDDEN:"hidden"+Ke,SHOW:(Je="show")+Ke,SHOWN:"shown"+Ke,INSERTED:"inserted"+Ke,CLICK:"click"+Ke,FOCUSIN:"focusin"+Ke,FOCUSOUT:"focusout"+Ke,MOUSEENTER:"mouseenter"+Ke,MOUSELEAVE:"mouseleave"+Ke},Xe=function(t){var e,n;function i(){return t.apply(this,arguments)||this}n=t,(e=i).prototype=Object.create(n.prototype),(e.prototype.constructor=e).__proto__=n;var r=i.prototype;return r.isWithContent=function(){return this.getTitle()||this._getContent()},r.addAttachmentClass=function(t){Ue(this.getTipElement()).addClass(Qe+"-"+t)},r.getTipElement=function(){return this.tip=this.tip||Ue(this.config.template)[0],this.tip},r.setContent=function(){var t=Ue(this.getTipElement());this.setElementContent(t.find(Ze),this.getTitle());var e=this._getContent();"function"==typeof e&&(e=e.call(this.element)),this.setElementContent(t.find(Ge),e),t.removeClass(ze+" "+Je)},r._getContent=function(){return this.element.getAttribute("data-content")||this.config.content},r._cleanTipClass=function(){var t=Ue(this.getTipElement()),e=t.attr("class").match(Be);null!==e&&0=this._offsets[r]&&("undefined"==typeof this._offsets[r+1]||t li > .active",xn='[data-toggle="tab"], [data-toggle="pill"], [data-toggle="list"]',Wn=".dropdown-toggle",Un="> .dropdown-menu .active",qn=function(){function i(t){this._element=t}var t=i.prototype;return t.show=function(){var n=this;if(!(this._element.parentNode&&this._element.parentNode.nodeType===Node.ELEMENT_NODE&&bn(this._element).hasClass(Nn)||bn(this._element).hasClass(On))){var t,i,e=bn(this._element).closest(Hn)[0],r=Fn.getSelectorFromElement(this._element);if(e){var o="UL"===e.nodeName?Rn:Ln;i=(i=bn.makeArray(bn(e).find(o)))[i.length-1]}var s=bn.Event(Dn.HIDE,{relatedTarget:this._element}),a=bn.Event(Dn.SHOW,{relatedTarget:i});if(i&&bn(i).trigger(s),bn(this._element).trigger(a),!a.isDefaultPrevented()&&!s.isDefaultPrevented()){r&&(t=document.querySelector(r)),this._activate(this._element,e);var l=function(){var t=bn.Event(Dn.HIDDEN,{relatedTarget:n._element}),e=bn.Event(Dn.SHOWN,{relatedTarget:i});bn(i).trigger(t),bn(n._element).trigger(e)};t?this._activate(t,t.parentNode,l):l()}}},t.dispose=function(){bn.removeData(this._element,Sn),this._element=null},t._activate=function(t,e,n){var i=this,r=("UL"===e.nodeName?bn(e).find(Rn):bn(e).children(Ln))[0],o=n&&r&&bn(r).hasClass(kn),s=function(){return i._transitionComplete(t,r,n)};if(r&&o){var a=Fn.getTransitionDurationFromElement(r);bn(r).one(Fn.TRANSITION_END,s).emulateTransitionEnd(a)}else s()},t._transitionComplete=function(t,e,n){if(e){bn(e).removeClass(Pn+" "+Nn);var i=bn(e.parentNode).find(Un)[0];i&&bn(i).removeClass(Nn),"tab"===e.getAttribute("role")&&e.setAttribute("aria-selected",!1)}if(bn(t).addClass(Nn),"tab"===t.getAttribute("role")&&t.setAttribute("aria-selected",!0),Fn.reflow(t),bn(t).addClass(Pn),t.parentNode&&bn(t.parentNode).hasClass(wn)){var r=bn(t).closest(jn)[0];if(r){var o=[].slice.call(r.querySelectorAll(Wn));bn(o).addClass(Nn)}t.setAttribute("aria-expanded",!0)}n&&n()},i._jQueryInterface=function(n){return this.each(function(){var t=bn(this),e=t.data(Sn);if(e||(e=new i(this),t.data(Sn,e)),"string"==typeof n){if("undefined"==typeof e[n])throw new TypeError('No method named "'+n+'"');e[n]()}})},s(i,null,[{key:"VERSION",get:function(){return"4.1.3"}}]),i}(),bn(document).on(Dn.CLICK_DATA_API,xn,function(t){t.preventDefault(),qn._jQueryInterface.call(bn(this),"show")}),bn.fn.tab=qn._jQueryInterface,bn.fn.tab.Constructor=qn,bn.fn.tab.noConflict=function(){return bn.fn.tab=An,qn._jQueryInterface},qn);!function(t){if("undefined"==typeof t)throw new TypeError("Bootstrap's JavaScript requires jQuery. jQuery must be included before Bootstrap's JavaScript.");var e=t.fn.jquery.split(" ")[0].split(".");if(e[0]<2&&e[1]<9||1===e[0]&&9===e[1]&&e[2]<1||4<=e[0])throw new Error("Bootstrap's JavaScript requires at least jQuery v1.9.1 but less than v4.0.0")}(e),t.Util=Fn,t.Alert=Kn,t.Button=Mn,t.Carousel=Qn,t.Collapse=Bn,t.Dropdown=Vn,t.Modal=Yn,t.Popover=Jn,t.Scrollspy=Zn,t.Tab=Gn,t.Tooltip=zn,Object.defineProperty(t,"__esModule",{value:!0})});
7 | //# sourceMappingURL=bootstrap.min.js.map
--------------------------------------------------------------------------------
/static/demo/holder.min.js:
--------------------------------------------------------------------------------
1 | /*!
2 |
3 | Holder - client side image placeholders
4 | Version 2.9.4+cabil
5 | © 2016 Ivan Malopinsky - http://imsky.co
6 |
7 | Site: http://holderjs.com
8 | Issues: https://github.com/imsky/holder/issues
9 | License: MIT
10 |
11 | */
12 | !function(e){if(e.document){var t=e.document;t.querySelectorAll||(t.querySelectorAll=function(n){var r,i=t.createElement("style"),o=[];for(t.documentElement.firstChild.appendChild(i),t._qsa=[],i.styleSheet.cssText=n+"{x-qsa:expression(document._qsa && document._qsa.push(this))}",e.scrollBy(0,0),i.parentNode.removeChild(i);t._qsa.length;)r=t._qsa.shift(),r.style.removeAttribute("x-qsa"),o.push(r);return t._qsa=null,o}),t.querySelector||(t.querySelector=function(e){var n=t.querySelectorAll(e);return n.length?n[0]:null}),t.getElementsByClassName||(t.getElementsByClassName=function(e){return e=String(e).replace(/^|\s+/g,"."),t.querySelectorAll(e)}),Object.keys||(Object.keys=function(e){if(e!==Object(e))throw TypeError("Object.keys called on non-object");var t,n=[];for(t in e)Object.prototype.hasOwnProperty.call(e,t)&&n.push(t);return n}),Array.prototype.forEach||(Array.prototype.forEach=function(e){if(void 0===this||null===this)throw TypeError();var t=Object(this),n=t.length>>>0;if("function"!=typeof e)throw TypeError();var r,i=arguments[1];for(r=0;r>16&255)),i.push(String.fromCharCode(o>>8&255)),i.push(String.fromCharCode(255&o)),a=0,o=0),r+=1;return 12===a?(o>>=4,i.push(String.fromCharCode(255&o))):18===a&&(o>>=2,i.push(String.fromCharCode(o>>8&255)),i.push(String.fromCharCode(255&o))),i.join("")},e.btoa=e.btoa||function(e){e=String(e);var n,r,i,o,a,s,l,h=0,u=[];if(/[^\x00-\xFF]/.test(e))throw Error("InvalidCharacterError");for(;h>2,a=(3&n)<<4|r>>4,s=(15&r)<<2|i>>6,l=63&i,h===e.length+2?(s=64,l=64):h===e.length+1&&(l=64),u.push(t.charAt(o),t.charAt(a),t.charAt(s),t.charAt(l));return u.join("")}}(e),Object.prototype.hasOwnProperty||(Object.prototype.hasOwnProperty=function(e){var t=this.__proto__||this.constructor.prototype;return e in this&&(!(e in t)||t[e]!==this[e])}),function(){if("performance"in e==!1&&(e.performance={}),Date.now=Date.now||function(){return(new Date).getTime()},"now"in e.performance==!1){var t=Date.now();performance.timing&&performance.timing.navigationStart&&(t=performance.timing.navigationStart),e.performance.now=function(){return Date.now()-t}}}(),e.requestAnimationFrame||(e.webkitRequestAnimationFrame&&e.webkitCancelAnimationFrame?!function(e){e.requestAnimationFrame=function(t){return webkitRequestAnimationFrame(function(){t(e.performance.now())})},e.cancelAnimationFrame=e.webkitCancelAnimationFrame}(e):e.mozRequestAnimationFrame&&e.mozCancelAnimationFrame?!function(e){e.requestAnimationFrame=function(t){return mozRequestAnimationFrame(function(){t(e.performance.now())})},e.cancelAnimationFrame=e.mozCancelAnimationFrame}(e):!function(e){e.requestAnimationFrame=function(t){return e.setTimeout(t,1e3/60)},e.cancelAnimationFrame=e.clearTimeout}(e))}}(this),function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.Holder=t():e.Holder=t()}(this,function(){return function(e){function t(r){if(n[r])return n[r].exports;var i=n[r]={exports:{},id:r,loaded:!1};return e[r].call(i.exports,i,i.exports,t),i.loaded=!0,i.exports}var n={};return t.m=e,t.c=n,t.p="",t(0)}([function(e,t,n){e.exports=n(1)},function(e,t,n){(function(t){function r(e,t,n,r){var a=i(n.substr(n.lastIndexOf(e.domain)),e);a&&o({mode:null,el:r,flags:a,engineSettings:t})}function i(e,t){var n={theme:k(O.settings.themes.gray,null),stylesheets:t.stylesheets,instanceOptions:t},r=e.indexOf("?"),i=[e];r!==-1&&(i=[e.slice(0,r),e.slice(r+1)]);var o=i[0].split("/");n.holderURL=e;var a=o[1],s=a.match(/([\d]+p?)x([\d]+p?)/);if(!s)return!1;if(n.fluid=a.indexOf("p")!==-1,n.dimensions={width:s[1].replace("p","%"),height:s[2].replace("p","%")},2===i.length){var l=v.parse(i[1]);if(w.truthy(l.ratio)){n.fluid=!0;var h=parseFloat(n.dimensions.width.replace("%","")),u=parseFloat(n.dimensions.height.replace("%",""));u=Math.floor(100*(u/h)),h=100,n.dimensions.width=h+"%",n.dimensions.height=u+"%"}if(n.auto=w.truthy(l.auto),l.bg&&(n.theme.bg=w.parseColor(l.bg)),l.fg&&(n.theme.fg=w.parseColor(l.fg)),l.bg&&!l.fg&&(n.autoFg=!0),l.theme&&n.instanceOptions.themes.hasOwnProperty(l.theme)&&(n.theme=k(n.instanceOptions.themes[l.theme],null)),l.text&&(n.text=l.text),l.textmode&&(n.textmode=l.textmode),l.size&&(n.size=l.size),l.font&&(n.font=l.font),l.align&&(n.align=l.align),l.lineWrap&&(n.lineWrap=l.lineWrap),n.nowrap=w.truthy(l.nowrap),n.outline=w.truthy(l.outline),w.truthy(l.random)){O.vars.cache.themeKeys=O.vars.cache.themeKeys||Object.keys(n.instanceOptions.themes);var c=O.vars.cache.themeKeys[0|Math.random()*O.vars.cache.themeKeys.length];n.theme=k(n.instanceOptions.themes[c],null)}}return n}function o(e){var t=e.mode,n=e.el,r=e.flags,i=e.engineSettings,o=r.dimensions,s=r.theme,l=o.width+"x"+o.height;t=null==t?r.fluid?"fluid":"image":t;var c=/holder_([a-z]+)/g,d=!1;if(null!=r.text&&(s.text=r.text,"object"===n.nodeName.toLowerCase())){for(var f=s.text.split("\\n"),p=0;p1){var b,x=0,A=0,C=0;w=new s.Group("line"+C),"left"!==e.align&&"right"!==e.align||(o=e.width*(1-2*(1-r)));for(var E=0;E=o||T===!0)&&(t(g,w,x,g.properties.leading),g.add(w),x=0,A+=g.properties.leading,C+=1,w=new s.Group("line"+C),w.y=A),T!==!0&&(v.moveTo(x,0),x+=m.spaceWidth+k.width,w.add(v))}if(t(g,w,x,g.properties.leading),g.add(w),"left"===e.align)g.moveTo(e.width-i,null,null);else if("right"===e.align){for(b in g.children)w=g.children[b],w.moveTo(e.width-w.width,null,null);g.moveTo(0-(e.width-i),null,null)}else{for(b in g.children)w=g.children[b],w.moveTo((g.width-w.width)/2,null,null);g.moveTo((e.width-g.width)/2,null,null)}g.moveTo(null,(e.height-g.height)/2,null),(e.height-g.height)/2<0&&g.moveTo(null,0,null)}else v=new s.Text(e.text),w=new s.Group("line0"),w.add(v),g.add(w),"left"===e.align?g.moveTo(e.width-i,null,null):"right"===e.align?g.moveTo(0-(e.width-i),null,null):g.moveTo((e.width-m.boundingBox.width)/2,null,null),g.moveTo(null,(e.height-m.boundingBox.height)/2,null);return a}function l(e,t,n,r){var i=parseInt(e,10),o=parseInt(t,10),a=Math.max(i,o),s=Math.min(i,o),l=.8*Math.min(s,a*r);return Math.round(Math.max(n,l))}function h(e){var t;t=null==e||null==e.nodeType?O.vars.resizableImages:[e];for(var n=0,r=t.length;n1){n.nodeValue="";for(var v=0;v=0?t:1)}function o(e){x?i(e):S.push(e)}null==document.readyState&&document.addEventListener&&(document.addEventListener("DOMContentLoaded",function C(){document.removeEventListener("DOMContentLoaded",C,!1),document.readyState="complete"},!1),document.readyState="loading");var a=e.document,s=a.documentElement,l="load",h=!1,u="on"+l,c="complete",d="readyState",f="attachEvent",p="detachEvent",g="addEventListener",m="DOMContentLoaded",v="onreadystatechange",y="removeEventListener",w=g in a,b=h,x=h,S=[];if(a[d]===c)i(t);else if(w)a[g](m,n,h),e[g](l,n,h);else{a[f](v,n),e[f](u,n);try{b=null==e.frameElement&&s}catch(A){}b&&b.doScroll&&!function E(){if(!x){try{b.doScroll("left")}catch(e){return i(E,50)}r(),t()}}()}return o.version="1.4.0",o.isReady=function(){return x},o}e.exports="undefined"!=typeof window&&n(window)},function(e,t,n){var r=encodeURIComponent,i=decodeURIComponent,o=n(4),a=n(5),s=/(\w+)\[(\d+)\]/,l=/\w+\.\w+/;t.parse=function(e){if("string"!=typeof e)return{};if(e=o(e),""===e)return{};"?"===e.charAt(0)&&(e=e.slice(1));for(var t={},n=e.split("&"),r=0;r=0;r--)n=e.charCodeAt(r),n>128?t.unshift(["",n,";"].join("")):t.unshift(e[r]);return t.join("")},t.imageExists=function(e,t){var n=new Image;n.onerror=function(){t.call(this,!1)},n.onload=function(){t.call(this,!0)},n.src=e},t.decodeHtmlEntity=function(e){return e.replace(/(\d+);/g,function(e,t){return String.fromCharCode(t)})},t.dimensionCheck=function(e){var t={height:e.clientHeight,width:e.clientWidth};return!(!t.height||!t.width)&&t},t.truthy=function(e){return"string"==typeof e?"true"===e||"yes"===e||"1"===e||"on"===e||"✓"===e:!!e},t.parseColor=function(e){var t,n=/(^(?:#?)[0-9a-f]{6}$)|(^(?:#?)[0-9a-f]{3}$)/i,r=/^rgb\((\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*\)$/,i=/^rgba\((\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(0\.\d{1,}|1)\)$/,o=e.match(n);return null!==o?(t=o[1]||o[2],"#"!==t[0]?"#"+t:t):(o=e.match(r),null!==o?t="rgb("+o.slice(1).join(",")+")":(o=e.match(i),null!==o?t="rgba("+o.slice(1).join(",")+")":null))},t.canvasRatio=function(){var t=1,n=1;if(e.document){var r=e.document.createElement("canvas");if(r.getContext){var i=r.getContext("2d");t=e.devicePixelRatio||1,n=i.webkitBackingStorePixelRatio||i.mozBackingStorePixelRatio||i.msBackingStorePixelRatio||i.oBackingStorePixelRatio||i.backingStorePixelRatio||1}}return t/n}}).call(t,function(){return this}())},function(e,t,n){(function(e){var r=n(9),i="http://www.w3.org/2000/svg",o=8;t.initSVG=function(e,t,n){var a,s,l=!1;e&&e.querySelector?(s=e.querySelector("style"),null===s&&(l=!0)):(e=r.newEl("svg",i),l=!0),l&&(a=r.newEl("defs",i),s=r.newEl("style",i),r.setAttr(s,{type:"text/css"}),a.appendChild(s),e.appendChild(a)),e.webkitMatchesSelector&&e.setAttribute("xmlns",i);for(var h=0;h=0;l--){var h=s.createProcessingInstruction("xml-stylesheet",'href="'+a[l]+'" rel="stylesheet"');s.insertBefore(h,s.firstChild)}s.removeChild(s.documentElement),o=i.serializeToString(s)}var u=i.serializeToString(t);return u=u.replace(/\&(\#[0-9]{2,}\;)/g,"&$1"),o+u}}}).call(t,function(){return this}())},function(e,t){(function(e){t.newEl=function(t,n){if(e.document)return null==n?e.document.createElement(t):e.document.createElementNS(n,t)},t.setAttr=function(e,t){for(var n in t)e.setAttribute(n,t[n])},t.createXML=function(){if(e.DOMParser)return(new DOMParser).parseFromString(" ","application/xml")},t.getNodeArray=function(t){var n=null;return"string"==typeof t?n=document.querySelectorAll(t):e.NodeList&&t instanceof e.NodeList?n=t:e.Node&&t instanceof e.Node?n=[t]:e.HTMLCollection&&t instanceof e.HTMLCollection?n=t:t instanceof Array?n=t:null===t&&(n=[]),n=Array.prototype.slice.call(n)}}).call(t,function(){return this}())},function(e,t){var n=function(e,t){"string"==typeof e&&(this.original=e,"#"===e.charAt(0)&&(e=e.slice(1)),/[^a-f0-9]+/i.test(e)||(3===e.length&&(e=e.replace(/./g,"$&$&")),6===e.length&&(this.alpha=1,t&&t.alpha&&(this.alpha=t.alpha),this.set(parseInt(e,16)))))};n.rgb2hex=function(e,t,n){function r(e){var t=(0|e).toString(16);return e<16&&(t="0"+t),t}return[e,t,n].map(r).join("")},n.hsl2rgb=function(e,t,n){var r=e/60,i=(1-Math.abs(2*n-1))*t,o=i*(1-Math.abs(parseInt(r)%2-1)),a=n-i/2,s=0,l=0,h=0;return r>=0&&r<1?(s=i,l=o):r>=1&&r<2?(s=o,l=i):r>=2&&r<3?(l=i,h=o):r>=3&&r<4?(l=o,h=i):r>=4&&r<5?(s=o,h=i):r>=5&&r<6&&(s=i,h=o),s+=a,l+=a,h+=a,s=parseInt(255*s),l=parseInt(255*l),h=parseInt(255*h),[s,l,h]},n.prototype.set=function(e){this.raw=e;var t=(16711680&this.raw)>>16,n=(65280&this.raw)>>8,r=255&this.raw,i=.2126*t+.7152*n+.0722*r,o=-.09991*t-.33609*n+.436*r,a=.615*t-.55861*n-.05639*r;return this.rgb={r:t,g:n,b:r},this.yuv={y:i,u:o,v:a},this},n.prototype.lighten=function(e){var t=Math.min(1,Math.max(0,Math.abs(e)))*(e<0?-1:1),r=255*t|0,i=Math.min(255,Math.max(0,this.rgb.r+r)),o=Math.min(255,Math.max(0,this.rgb.g+r)),a=Math.min(255,Math.max(0,this.rgb.b+r)),s=n.rgb2hex(i,o,a);return new n(s)},n.prototype.toHex=function(e){return(e?"#":"")+this.raw.toString(16)},n.prototype.lighterThan=function(e){return e instanceof n||(e=new n(e)),this.yuv.y>e.yuv.y},n.prototype.blendAlpha=function(e){e instanceof n||(e=new n(e));var t=e,r=this,i=t.alpha*t.rgb.r+(1-t.alpha)*r.rgb.r,o=t.alpha*t.rgb.g+(1-t.alpha)*r.rgb.g,a=t.alpha*t.rgb.b+(1-t.alpha)*r.rgb.b;return new n(n.rgb2hex(i,o,a))},e.exports=n},function(e,t){e.exports={version:"2.9.4",svg_ns:"http://www.w3.org/2000/svg"}},function(e,t,n){function r(e,t){return c.element({tag:t,width:e.width,height:e.height,fill:e.properties.fill})}function i(e){return h.cssProps({fill:e.fill,"font-weight":e.font.weight,"font-family":e.font.family+", monospace","font-size":e.font.size+e.font.units})}function o(e,t,n){var r=n/2;return["M",r,r,"H",e-r,"V",t-r,"H",r,"V",0,"M",0,r,"L",e,t-r,"M",0,t-r,"L",e,r].join(" ")}var a=n(13),s=n(8),l=n(11),h=n(7),u=l.svg_ns,c={element:function(e){var t=e.tag,n=e.content||"";return delete e.tag,delete e.content,[t,n,e]}};e.exports=function(e,t){var n=t.engineSettings,l=n.stylesheets,h=l.map(function(e){return''}).join("\n"),d="holder_"+Number(new Date).toString(16),f=e.root,p=f.children.holderTextGroup,g="#"+d+" text { "+i(p.properties)+" } ";p.y+=.8*p.textPositionData.boundingBox.height;var m=[];Object.keys(p.children).forEach(function(e){var t=p.children[e];Object.keys(t.children).forEach(function(e){var n=t.children[e],r=p.x+t.x+n.x,i=p.y+t.y+n.y,o=c.element({tag:"text",content:n.properties.text,x:r,y:i});m.push(o)})});var v=c.element({tag:"g",content:m}),y=null;if(f.children.holderBg.properties.outline){var w=f.children.holderBg.properties.outline;y=c.element({tag:"path",d:o(f.children.holderBg.width,f.children.holderBg.height,w.width),"stroke-width":w.width,stroke:w.fill,fill:"none"})}var b=r(f.children.holderBg,"rect"),x=[];x.push(b),w&&x.push(y),x.push(v);var S=c.element({tag:"g",id:d,content:x}),A=c.element({tag:"style",content:g,type:"text/css"}),C=c.element({tag:"defs",content:A}),E=c.element({tag:"svg",content:[C,S],width:f.properties.width,height:f.properties.height,xmlns:u,viewBox:[0,0,f.properties.width,f.properties.height].join(" "),preserveAspectRatio:"none"}),k=a(E);k=h+k[0];var T=s.svgStringToDataURI(k,"background"===t.mode);return T}},function(e,t,n){n(14);e.exports=function r(e,t,n){"use strict";function i(e){var t=e.match(/^[\w-]+/),r={tag:t?t[0]:"div",attr:{},children:[]},i=e.match(/#([\w-]+)/),o=e.match(/\$([\w-]+)/),a=e.match(/\.[\w-]+/g);return i&&(r.attr.id=i[1],n[i[1]]=r),o&&(n[o[1]]=r),a&&(r.attr["class"]=a.join(" ").replace(/\./g,"")),e.match(/&$/g)&&(f=!1),r}function o(e,t){if(null!==t&&t!==!1&&void 0!==t)return"string"!=typeof t&&"object"!=typeof t?String(t):t}function a(e){return e||0===e?String(e).replace(/&/g,"&").replace(/"/g,"""):""}function s(e){return String(e).replace(/&/g,"&").replace(/"/g,""").replace(/'/g,"'").replace(//g,">")}var l,h,u,c,d=1,f=!0;if(n=n||{},"string"==typeof e[0])e[0]=i(e[0]);else{if(!Array.isArray(e[0]))throw new Error("First element of array must be a string, or an array and not "+JSON.stringify(e[0]));d=0}for(;d",e[0].children.forEach(function(e){l+=e}),l+=""+e[0].tag+">",e[0]=l}return n[0]=e[0],u&&u(e[0]),n}},function(e,t){"use strict";function n(e){var t=""+e,n=r.exec(t);if(!n)return t;var i,o="",a=0,s=0;for(a=n.index;a]/;e.exports=n},function(e,t,n){var r=n(9),i=n(7);e.exports=function(){var e=r.newEl("canvas"),t=null;return function(n){null==t&&(t=e.getContext("2d"));var r=i.canvasRatio(),o=n.root;e.width=r*o.properties.width,e.height=r*o.properties.height,t.textBaseline="middle";var a=o.children.holderBg,s=r*a.width,l=r*a.height,h=2,u=h/2;t.fillStyle=a.properties.fill,t.fillRect(0,0,s,l),a.properties.outline&&(t.strokeStyle=a.properties.outline.fill,t.lineWidth=a.properties.outline.width,t.moveTo(u,u),t.lineTo(s-u,u),t.lineTo(s-u,l-u),t.lineTo(u,l-u),t.lineTo(u,u),t.moveTo(0,u),t.lineTo(s,l-u),t.moveTo(0,l-u),t.lineTo(s,u),t.stroke());var c=o.children.holderTextGroup;t.font=c.properties.font.weight+" "+r*c.properties.font.size+c.properties.font.units+" "+c.properties.font.family+", monospace",t.fillStyle=c.properties.fill;for(var d in c.children){var f=c.children[d];for(var p in f.children){var g=f.children[p],m=r*(c.x+f.x+g.x),v=r*(c.y+f.y+g.y+c.properties.leading/2);t.fillText(g.properties.text,m,v)}}return e.toDataURL("image/png")}}()}])}),function(e,t){t&&(Holder=e.Holder);
13 | }(this,"undefined"!=typeof Meteor&&"undefined"!=typeof Package);
--------------------------------------------------------------------------------
/static/demo/music.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rrweb-io/web/eecd16423cb7dbb6f305709a5172cdbd3ad828ef/static/demo/music.mp3
--------------------------------------------------------------------------------
/static/demo/popper.min.js:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright (C) Federico Zivolo 2018
3 | Distributed under the MIT License (license terms are at http://opensource.org/licenses/MIT).
4 | */(function(e,t){'object'==typeof exports&&'undefined'!=typeof module?module.exports=t():'function'==typeof define&&define.amd?define(t):e.Popper=t()})(this,function(){'use strict';function e(e){return e&&'[object Function]'==={}.toString.call(e)}function t(e,t){if(1!==e.nodeType)return[];var o=getComputedStyle(e,null);return t?o[t]:o}function o(e){return'HTML'===e.nodeName?e:e.parentNode||e.host}function n(e){if(!e)return document.body;switch(e.nodeName){case'HTML':case'BODY':return e.ownerDocument.body;case'#document':return e.body;}var i=t(e),r=i.overflow,p=i.overflowX,s=i.overflowY;return /(auto|scroll|overlay)/.test(r+s+p)?e:n(o(e))}function r(e){return 11===e?re:10===e?pe:re||pe}function p(e){if(!e)return document.documentElement;for(var o=r(10)?document.body:null,n=e.offsetParent;n===o&&e.nextElementSibling;)n=(e=e.nextElementSibling).offsetParent;var i=n&&n.nodeName;return i&&'BODY'!==i&&'HTML'!==i?-1!==['TD','TABLE'].indexOf(n.nodeName)&&'static'===t(n,'position')?p(n):n:e?e.ownerDocument.documentElement:document.documentElement}function s(e){var t=e.nodeName;return'BODY'!==t&&('HTML'===t||p(e.firstElementChild)===e)}function d(e){return null===e.parentNode?e:d(e.parentNode)}function a(e,t){if(!e||!e.nodeType||!t||!t.nodeType)return document.documentElement;var o=e.compareDocumentPosition(t)&Node.DOCUMENT_POSITION_FOLLOWING,n=o?e:t,i=o?t:e,r=document.createRange();r.setStart(n,0),r.setEnd(i,0);var l=r.commonAncestorContainer;if(e!==l&&t!==l||n.contains(i))return s(l)?l:p(l);var f=d(e);return f.host?a(f.host,t):a(e,d(t).host)}function l(e){var t=1=o.clientWidth&&n>=o.clientHeight}),l=0a[e]&&!t.escapeWithReference&&(n=J(f[o],a[e]-('right'===e?f.width:f.height))),ae({},o,n)}};return l.forEach(function(e){var t=-1===['left','top'].indexOf(e)?'secondary':'primary';f=le({},f,m[t](e))}),e.offsets.popper=f,e},priority:['left','right','top','bottom'],padding:5,boundariesElement:'scrollParent'},keepTogether:{order:400,enabled:!0,fn:function(e){var t=e.offsets,o=t.popper,n=t.reference,i=e.placement.split('-')[0],r=Z,p=-1!==['top','bottom'].indexOf(i),s=p?'right':'bottom',d=p?'left':'top',a=p?'width':'height';return o[s]r(n[s])&&(e.offsets.popper[d]=r(n[s])),e}},arrow:{order:500,enabled:!0,fn:function(e,o){var n;if(!q(e.instance.modifiers,'arrow','keepTogether'))return e;var i=o.element;if('string'==typeof i){if(i=e.instance.popper.querySelector(i),!i)return e;}else if(!e.instance.popper.contains(i))return console.warn('WARNING: `arrow.element` must be child of its popper element!'),e;var r=e.placement.split('-')[0],p=e.offsets,s=p.popper,d=p.reference,a=-1!==['left','right'].indexOf(r),l=a?'height':'width',f=a?'Top':'Left',m=f.toLowerCase(),h=a?'left':'top',c=a?'bottom':'right',u=S(i)[l];d[c]-us[c]&&(e.offsets.popper[m]+=d[m]+u-s[c]),e.offsets.popper=g(e.offsets.popper);var b=d[m]+d[l]/2-u/2,y=t(e.instance.popper),w=parseFloat(y['margin'+f],10),E=parseFloat(y['border'+f+'Width'],10),v=b-e.offsets.popper[m]-w-E;return v=$(J(s[l]-u,v),0),e.arrowElement=i,e.offsets.arrow=(n={},ae(n,m,Q(v)),ae(n,h,''),n),e},element:'[x-arrow]'},flip:{order:600,enabled:!0,fn:function(e,t){if(W(e.instance.modifiers,'inner'))return e;if(e.flipped&&e.placement===e.originalPlacement)return e;var o=v(e.instance.popper,e.instance.reference,t.padding,t.boundariesElement,e.positionFixed),n=e.placement.split('-')[0],i=T(n),r=e.placement.split('-')[1]||'',p=[];switch(t.behavior){case he.FLIP:p=[n,i];break;case he.CLOCKWISE:p=z(n);break;case he.COUNTERCLOCKWISE:p=z(n,!0);break;default:p=t.behavior;}return p.forEach(function(s,d){if(n!==s||p.length===d+1)return e;n=e.placement.split('-')[0],i=T(n);var a=e.offsets.popper,l=e.offsets.reference,f=Z,m='left'===n&&f(a.right)>f(l.left)||'right'===n&&f(a.left)f(l.top)||'bottom'===n&&f(a.top)f(o.right),g=f(a.top)f(o.bottom),b='left'===n&&h||'right'===n&&c||'top'===n&&g||'bottom'===n&&u,y=-1!==['top','bottom'].indexOf(n),w=!!t.flipVariations&&(y&&'start'===r&&h||y&&'end'===r&&c||!y&&'start'===r&&g||!y&&'end'===r&&u);(m||b||w)&&(e.flipped=!0,(m||b)&&(n=p[d+1]),w&&(r=G(r)),e.placement=n+(r?'-'+r:''),e.offsets.popper=le({},e.offsets.popper,C(e.instance.popper,e.offsets.reference,e.placement)),e=P(e.instance.modifiers,e,'flip'))}),e},behavior:'flip',padding:5,boundariesElement:'viewport'},inner:{order:700,enabled:!1,fn:function(e){var t=e.placement,o=t.split('-')[0],n=e.offsets,i=n.popper,r=n.reference,p=-1!==['left','right'].indexOf(o),s=-1===['top','left'].indexOf(o);return i[p?'left':'top']=r[o]-(s?i[p?'width':'height']:0),e.placement=T(t),e.offsets.popper=g(i),e}},hide:{order:800,enabled:!0,fn:function(e){if(!q(e.instance.modifiers,'hide','preventOverflow'))return e;var t=e.offsets.reference,o=D(e.instance.modifiers,function(e){return'preventOverflow'===e.name}).boundaries;if(t.bottomo.right||t.top>o.bottom||t.rightdiv{width:100px;height:54px;background:#364d4b;display:inline-block;border-radius:4px;position:relative;color:#acc3c1;font-size:16px}._2iIk>div em{display:block;width:0;height:0;border:6px solid;border-color:transparent transparent #acc3c1;position:absolute;top:50%;left:50%;margin:-9px 0 0 -6px}._2iIk>div:after,._2iIk>div:before{content:"";display:block;width:100%;height:100%;position:absolute;top:0;left:0;border-radius:4px;box-shadow:inset 0 5px 10px hsla(0,0%,100%,.15)}._2iIk>div:before{box-shadow:inset 0 -5px 10px rgba(0,0,0,.15)}._2iIk ._2fH-{height:60px;display:block;margin:0 auto 2px}._2iIk ._1Pbk{margin:0 10px}._2iIk ._3qj_{left:auto;bottom:5%;height:80px;width:400px;line-height:80px;letter-spacing:2px}
2 | /*# sourceMappingURL=tetris-1.0.1.css.map*/
--------------------------------------------------------------------------------
/static/demo/tetris-loader.css:
--------------------------------------------------------------------------------
1 | body{
2 | background: #009688;
3 | padding: 0;
4 | margin: 0;
5 | }
6 | .load{
7 | width:240px;
8 | height:240px;
9 | position:absolute;
10 | top:50%;
11 | left:50%;
12 | margin:-120px 0 0 -120px;
13 | color:#efcc19;
14 | -webkit-animation:fadeIn 2s infinite ease-in-out;
15 | animation:fadeIn 2s infinite ease-in-out;
16 | -webkit-animation-delay:2s;
17 | animation-delay:2s;
18 | opacity:0;
19 | }
20 | .load .loader,.load .loader:before,.load .loader:after{
21 | background:#efcc19;
22 | -webkit-animation:load 1s infinite ease-in-out;
23 | animation:load 1s infinite ease-in-out;
24 | width:1em;
25 | height:4em
26 | }
27 | .load .loader:before,.load .loader:after{
28 | position:absolute;
29 | top:0;
30 | content:''
31 | }
32 | .load .loader:before{
33 | left:-1.5em;
34 | -webkit-animation-delay:-0.32s;
35 | animation-delay:-0.32s
36 | }
37 | .load .loader{
38 | text-indent:-9999em;
39 | margin:8em auto;
40 | position:relative;
41 | font-size:11px;
42 | -webkit-animation-delay:-0.16s;
43 | animation-delay:-0.16s
44 | }
45 | .load .loader:after{
46 | left:1.5em
47 | }
48 | @-webkit-keyframes load{
49 | 0%,80%,100%{
50 | box-shadow:0 0 #efcc19;
51 | height:4em
52 | }
53 | 40%{
54 | box-shadow:0 -2em #efcc19;height:5em
55 | }
56 | }
57 |
58 | @keyframes load{
59 | 0%,80%,100%{
60 | box-shadow:0 0 #efcc19;
61 | height:4em
62 | }
63 | 40%{
64 | box-shadow:0 -2em #efcc19;
65 | height:5em
66 | }
67 | }
68 |
69 | @-webkit-keyframes fadeIn{
70 | 0%{
71 | opacity:0;
72 | }
73 | 100%{
74 | opacity:1;
75 | }
76 | }
77 | @keyframes fadeIn{
78 | 0%{
79 | opacity:0;
80 | }
81 | 100%{
82 | opacity:1;
83 | }
84 | }
--------------------------------------------------------------------------------
/static/favicon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rrweb-io/web/eecd16423cb7dbb6f305709a5172cdbd3ad828ef/static/favicon.png
--------------------------------------------------------------------------------
/static/global.css:
--------------------------------------------------------------------------------
1 | /*-------------------------------------------------------------- # Variables, functions and mixins --------------------------------------------------------------*/
2 | /*-------------------------------------------------------------- 1.0 Normalize * normalize.css v7.0.0 | MIT License * github.com/necolas/normalize.css --------------------------------------------------------------*/
3 | html {
4 | line-height: 1.15;
5 | -ms-text-size-adjust: 100%;
6 | -webkit-text-size-adjust: 100%;
7 | }
8 | body {
9 | margin: 0;
10 | }
11 | article,
12 | aside,
13 | footer,
14 | header,
15 | nav,
16 | section {
17 | display: block;
18 | }
19 | h1 {
20 | font-size: 2em;
21 | margin: 0.67em 0;
22 | }
23 | figcaption,
24 | figure,
25 | main {
26 | display: block;
27 | }
28 | figure {
29 | margin: 1em 40px;
30 | }
31 | hr {
32 | box-sizing: content-box;
33 | height: 0;
34 | overflow: visible;
35 | }
36 | pre {
37 | font-family: monospace, monospace;
38 | font-size: 1em;
39 | }
40 | a {
41 | background-color: transparent;
42 | -webkit-text-decoration-skip: objects;
43 | }
44 | abbr[title] {
45 | border-bottom: none;
46 | text-decoration: underline;
47 | -webkit-text-decoration: underline dotted;
48 | text-decoration: underline dotted;
49 | }
50 | b,
51 | strong {
52 | font-weight: inherit;
53 | }
54 | b,
55 | strong {
56 | font-weight: bolder;
57 | }
58 | code,
59 | kbd,
60 | samp {
61 | font-family: monospace, monospace;
62 | font-size: 1em;
63 | }
64 | dfn {
65 | font-style: italic;
66 | }
67 | mark {
68 | background-color: #ff0;
69 | color: #000;
70 | }
71 | small {
72 | font-size: 80%;
73 | }
74 | sub,
75 | sup {
76 | font-size: 75%;
77 | line-height: 0;
78 | position: relative;
79 | vertical-align: baseline;
80 | }
81 | sub {
82 | bottom: -0.25em;
83 | }
84 | sup {
85 | top: -0.5em;
86 | }
87 | audio,
88 | video {
89 | display: inline-block;
90 | }
91 | audio:not([controls]) {
92 | display: none;
93 | height: 0;
94 | }
95 | img {
96 | border-style: none;
97 | }
98 | svg:not(:root) {
99 | overflow: hidden;
100 | }
101 | button,
102 | input,
103 | optgroup,
104 | select,
105 | textarea {
106 | font-family: sans-serif;
107 | font-size: 100%;
108 | line-height: 1.15;
109 | margin: 0;
110 | }
111 | button,
112 | input {
113 | overflow: visible;
114 | }
115 | button,
116 | select {
117 | text-transform: none;
118 | }
119 | button,
120 | html [type="button"],
121 | [type="reset"],
122 | [type="submit"] {
123 | -webkit-appearance: button;
124 | }
125 | button::-moz-focus-inner,
126 | [type="button"]::-moz-focus-inner,
127 | [type="reset"]::-moz-focus-inner,
128 | [type="submit"]::-moz-focus-inner {
129 | border-style: none;
130 | padding: 0;
131 | }
132 | button:-moz-focusring,
133 | [type="button"]:-moz-focusring,
134 | [type="reset"]:-moz-focusring,
135 | [type="submit"]:-moz-focusring {
136 | outline: 1px dotted ButtonText;
137 | }
138 | fieldset {
139 | padding: 0.35em 0.75em 0.625em;
140 | }
141 | legend {
142 | box-sizing: border-box;
143 | color: inherit;
144 | display: table;
145 | max-width: 100%;
146 | padding: 0;
147 | white-space: normal;
148 | }
149 | progress {
150 | display: inline-block;
151 | vertical-align: baseline;
152 | }
153 | textarea {
154 | overflow: auto;
155 | }
156 | [type="checkbox"],
157 | [type="radio"] {
158 | box-sizing: border-box;
159 | padding: 0;
160 | }
161 | [type="number"]::-webkit-inner-spin-button,
162 | [type="number"]::-webkit-outer-spin-button {
163 | height: auto;
164 | }
165 | [type="search"] {
166 | -webkit-appearance: textfield;
167 | outline-offset: -2px;
168 | }
169 | [type="search"]::-webkit-search-cancel-button,
170 | [type="search"]::-webkit-search-decoration {
171 | -webkit-appearance: none;
172 | }
173 | ::-webkit-file-upload-button {
174 | -webkit-appearance: button;
175 | font: inherit;
176 | }
177 | details,
178 | menu {
179 | display: block;
180 | }
181 | summary {
182 | display: list-item;
183 | }
184 | canvas {
185 | display: inline-block;
186 | }
187 | template {
188 | display: none;
189 | }
190 | [hidden] {
191 | display: none;
192 | }
193 | /*-------------------------------------------------------------- # Base --------------------------------------------------------------*/
194 | html {
195 | box-sizing: border-box;
196 | }
197 | *,
198 | *:before,
199 | *:after {
200 | /* Inherit box-sizing to make it easier to change the property for components that leverage other behavior;
201 | see http://css-tricks.com/inheriting-box-sizing-probably-slightly-better-best-practice/ */
202 | box-sizing: inherit;
203 | }
204 | body {
205 | background: #ffffff;
206 | /* Fallback for when there is no custom background color defined. */
207 | -moz-osx-font-smoothing: grayscale;
208 | -webkit-font-smoothing: antialiased;
209 | }
210 | hr {
211 | border: 0;
212 | display: block;
213 | height: 1px;
214 | background: #d2daf0;
215 | background: linear-gradient(
216 | to right,
217 | rgba(210, 218, 240, 0.1) 0,
218 | rgba(210, 218, 240, 0.6) 50%,
219 | rgba(210, 218, 240, 0.1) 100%
220 | );
221 | margin-top: 24px;
222 | margin-bottom: 24px;
223 | }
224 | ul,
225 | ol {
226 | margin-top: 0;
227 | margin-bottom: 24px;
228 | padding-left: 24px;
229 | }
230 | ul {
231 | list-style: disc;
232 | }
233 | ol {
234 | list-style: decimal;
235 | }
236 | li > ul,
237 | li > ol {
238 | margin-bottom: 0;
239 | }
240 | dl {
241 | margin-top: 0;
242 | margin-bottom: 24px;
243 | }
244 | dt {
245 | font-weight: 700;
246 | }
247 | dd {
248 | margin-left: 24px;
249 | margin-bottom: 24px;
250 | }
251 | img {
252 | height: auto;
253 | /* Make sure images are scaled correctly. */
254 | max-width: 100%;
255 | /* Adhere to container width. */
256 | vertical-align: middle;
257 | }
258 | figure {
259 | margin: 24px 0;
260 | /* Extra wide images within figure tags don't overflow the content area. */
261 | }
262 | figcaption {
263 | font-size: 16px;
264 | line-height: 24px;
265 | padding: 8px 0;
266 | }
267 | img,
268 | svg {
269 | display: block;
270 | }
271 | table {
272 | border-collapse: collapse;
273 | margin-bottom: 24px;
274 | width: 100%;
275 | }
276 | tr {
277 | border-bottom: 1px solid #d2daf0;
278 | }
279 | th {
280 | text-align: left;
281 | }
282 | th,
283 | td {
284 | padding: 10px 16px;
285 | }
286 | th:first-child,
287 | td:first-child {
288 | padding-left: 0;
289 | }
290 | th:last-child,
291 | td:last-child {
292 | padding-right: 0;
293 | }
294 | /*-------------------------------------------------------------- # Typography --------------------------------------------------------------*/
295 | html {
296 | font-size: 18px;
297 | line-height: 27px;
298 | }
299 | @media (min-width: 641px) {
300 | html {
301 | font-size: 20px;
302 | line-height: 30px;
303 | letter-spacing: -0.1px;
304 | }
305 | }
306 | body {
307 | color: #565678;
308 | font-size: 1rem;
309 | }
310 | body,
311 | button,
312 | input,
313 | select,
314 | textarea {
315 | font-family: "Heebo", sans-serif;
316 | }
317 | a {
318 | color: #4950f6;
319 | text-decoration: none;
320 | }
321 | a:hover,
322 | a:active {
323 | outline: 0;
324 | text-decoration: underline;
325 | }
326 | h1,
327 | h2,
328 | h3,
329 | h4,
330 | h5,
331 | h6,
332 | .h1,
333 | .h2,
334 | .h3,
335 | .h4,
336 | .h5,
337 | .h6 {
338 | clear: both;
339 | color: #11103e;
340 | font-family: "Fira Sans", serif;
341 | font-weight: 600;
342 | }
343 | h1,
344 | .h1 {
345 | font-size: 40px;
346 | line-height: 50px;
347 | letter-spacing: 0px;
348 | }
349 | @media (min-width: 641px) {
350 | h1,
351 | .h1 {
352 | font-size: 46px;
353 | line-height: 56px;
354 | letter-spacing: 0px;
355 | }
356 | }
357 | h2,
358 | .h2 {
359 | font-size: 32px;
360 | line-height: 42px;
361 | letter-spacing: 0px;
362 | }
363 | @media (min-width: 641px) {
364 | h2,
365 | .h2 {
366 | font-size: 40px;
367 | line-height: 50px;
368 | letter-spacing: 0px;
369 | }
370 | }
371 | h3,
372 | .h3,
373 | blockquote {
374 | font-size: 22px;
375 | line-height: 32px;
376 | letter-spacing: -0.1px;
377 | }
378 | @media (min-width: 641px) {
379 | h3,
380 | .h3,
381 | blockquote {
382 | font-size: 32px;
383 | line-height: 42px;
384 | letter-spacing: 0px;
385 | }
386 | }
387 | h4,
388 | h5,
389 | h6,
390 | .h4,
391 | .h5,
392 | .h6 {
393 | font-size: 20px;
394 | line-height: 30px;
395 | letter-spacing: -0.1px;
396 | }
397 | @media (min-width: 641px) {
398 | h4,
399 | h5,
400 | h6,
401 | .h4,
402 | .h5,
403 | .h6 {
404 | font-size: 22px;
405 | line-height: 32px;
406 | letter-spacing: -0.1px;
407 | }
408 | }
409 | @media (max-width: 640px) {
410 | .h1-mobile {
411 | font-size: 40px;
412 | line-height: 50px;
413 | letter-spacing: 0px;
414 | }
415 | .h2-mobile {
416 | font-size: 32px;
417 | line-height: 42px;
418 | letter-spacing: 0px;
419 | }
420 | .h3-mobile {
421 | font-size: 22px;
422 | line-height: 32px;
423 | letter-spacing: -0.1px;
424 | }
425 | .h4-mobile,
426 | .h5-mobile,
427 | .h6-mobile {
428 | font-size: 20px;
429 | line-height: 30px;
430 | letter-spacing: -0.1px;
431 | }
432 | }
433 | .text-light {
434 | color: rgba(255, 255, 255, 0.4);
435 | }
436 | .text-light a {
437 | color: rgba(255, 255, 255, 0.4);
438 | }
439 | .text-light h1,
440 | .text-light h2,
441 | .text-light h3,
442 | .text-light h4,
443 | .text-light h5,
444 | .text-light h6,
445 | .text-light .h1,
446 | .text-light .h2,
447 | .text-light .h3,
448 | .text-light .h4,
449 | .text-light .h5,
450 | .text-light .h6 {
451 | color: #fff !important;
452 | }
453 | .text-sm {
454 | font-size: 18px;
455 | line-height: 27px;
456 | letter-spacing: -0.1px;
457 | }
458 | .text-xs {
459 | font-size: 16px;
460 | line-height: 24px;
461 | letter-spacing: -0.1px;
462 | }
463 | h1,
464 | h2,
465 | .h1,
466 | .h2 {
467 | margin-top: 48px;
468 | margin-bottom: 16px;
469 | }
470 | h3,
471 | .h3 {
472 | margin-top: 36px;
473 | margin-bottom: 12px;
474 | }
475 | h4,
476 | h5,
477 | h6,
478 | .h4,
479 | .h5,
480 | .h6 {
481 | margin-top: 24px;
482 | margin-bottom: 4px;
483 | }
484 | p {
485 | margin-top: 0;
486 | margin-bottom: 24px;
487 | }
488 | dfn,
489 | cite,
490 | em,
491 | i {
492 | font-style: italic;
493 | }
494 | blockquote {
495 | color: #ababc9;
496 | font-style: italic;
497 | margin-top: 24px;
498 | margin-bottom: 24px;
499 | margin-left: 24px;
500 | }
501 | blockquote::before {
502 | content: "\201C";
503 | }
504 | blockquote::after {
505 | content: "\201D";
506 | }
507 | blockquote p {
508 | display: inline;
509 | }
510 | address {
511 | color: #565678;
512 | border-width: 1px 0;
513 | border-style: solid;
514 | border-color: #d2daf0;
515 | padding: 24px 0;
516 | margin: 0 0 24px;
517 | }
518 | pre,
519 | pre h1,
520 | pre h2,
521 | pre h3,
522 | pre h4,
523 | pre h5,
524 | pre h6,
525 | pre .h1,
526 | pre .h2,
527 | pre .h3,
528 | pre .h4,
529 | pre .h5,
530 | pre .h6 {
531 | font-family: "Courier 10 Pitch", Courier, monospace;
532 | }
533 | pre,
534 | code,
535 | kbd,
536 | tt,
537 | var {
538 | background: #eef1fa;
539 | }
540 | pre {
541 | font-size: 16px;
542 | line-height: 24px;
543 | margin-bottom: 1.6em;
544 | max-width: 100%;
545 | overflow: auto;
546 | padding: 24px;
547 | margin-top: 24px;
548 | margin-bottom: 24px;
549 | }
550 | code,
551 | kbd,
552 | tt,
553 | var {
554 | font-family: Monaco, Consolas, "Andale Mono", "DejaVu Sans Mono", monospace;
555 | font-size: 16px;
556 | padding: 2px 4px;
557 | }
558 | abbr,
559 | acronym {
560 | cursor: help;
561 | }
562 | mark,
563 | ins {
564 | text-decoration: none;
565 | }
566 | small {
567 | font-size: 18px;
568 | line-height: 27px;
569 | letter-spacing: -0.1px;
570 | }
571 | b,
572 | strong {
573 | font-weight: 700;
574 | }
575 | button,
576 | input,
577 | select,
578 | textarea {
579 | font-size: 18px;
580 | line-height: 27px;
581 | }
582 | /*-------------------------------------------------------------- # Helpers --------------------------------------------------------------*/
583 | .container,
584 | .container-sm {
585 | width: 100%;
586 | margin: 0 auto;
587 | padding-left: 16px;
588 | padding-right: 16px;
589 | }
590 | @media (min-width: 481px) {
591 | .container,
592 | .container-sm {
593 | padding-left: 24px;
594 | padding-right: 24px;
595 | }
596 | }
597 | .container {
598 | max-width: 1128px;
599 | }
600 | .container-sm {
601 | max-width: 848px;
602 | }
603 | .container .container-sm {
604 | max-width: 800px;
605 | padding-left: 0;
606 | padding-right: 0;
607 | }
608 | /* Text meant only for screen readers. */
609 | .screen-reader-text {
610 | clip: rect(1px, 1px, 1px, 1px);
611 | position: absolute !important;
612 | height: 1px;
613 | width: 1px;
614 | overflow: hidden;
615 | word-wrap: normal !important;
616 | /* Many screen reader and browser combinations announce broken words as they would appear visually. */
617 | }
618 | .screen-reader-text:focus {
619 | border-radius: 2px;
620 | box-shadow: 0 0 2px 2px rgba(0, 0, 0, 0.6);
621 | clip: auto !important;
622 | display: block;
623 | font-size: 14px;
624 | letter-spacing: 0px;
625 | font-weight: 700;
626 | text-transform: uppercase;
627 | line-height: 16px;
628 | text-decoration: none;
629 | background-color: #ffffff;
630 | color: #4950f6 !important;
631 | border: none;
632 | height: auto;
633 | left: 8px;
634 | padding: 16px 32px;
635 | top: 8px;
636 | width: auto;
637 | z-index: 100000;
638 | }
639 | .list-reset {
640 | list-style: none;
641 | padding: 0;
642 | }
643 | .text-left {
644 | text-align: left;
645 | }
646 | .text-center {
647 | text-align: center;
648 | }
649 | .text-right {
650 | text-align: right;
651 | }
652 | .text-primary {
653 | color: #4950f6;
654 | }
655 | .text-secondary {
656 | color: #ff6381;
657 | }
658 | .has-top-divider {
659 | position: relative;
660 | }
661 | .has-top-divider::before {
662 | content: "";
663 | position: absolute;
664 | top: 0;
665 | left: 0;
666 | width: 100%;
667 | display: block;
668 | height: 1px;
669 | background: #d2daf0;
670 | background: linear-gradient(
671 | to right,
672 | rgba(210, 218, 240, 0.1) 0,
673 | rgba(210, 218, 240, 0.6) 50%,
674 | rgba(210, 218, 240, 0.1) 100%
675 | );
676 | }
677 | .has-bottom-divider {
678 | position: relative;
679 | }
680 | .has-bottom-divider::after {
681 | content: "";
682 | position: absolute;
683 | bottom: 0;
684 | left: 0;
685 | width: 100%;
686 | display: block;
687 | height: 1px;
688 | background: #d2daf0;
689 | background: linear-gradient(
690 | to right,
691 | rgba(210, 218, 240, 0.1) 0,
692 | rgba(210, 218, 240, 0.6) 50%,
693 | rgba(210, 218, 240, 0.1) 100%
694 | );
695 | }
696 | .m-0 {
697 | margin: 0;
698 | }
699 | .mt-0 {
700 | margin-top: 0;
701 | }
702 | .mr-0 {
703 | margin-right: 0;
704 | }
705 | .mb-0 {
706 | margin-bottom: 0;
707 | }
708 | .ml-0 {
709 | margin-left: 0;
710 | }
711 | .m-8 {
712 | margin: 8px;
713 | }
714 | .mt-8 {
715 | margin-top: 8px;
716 | }
717 | .mr-8 {
718 | margin-right: 8px;
719 | }
720 | .mb-8 {
721 | margin-bottom: 8px;
722 | }
723 | .ml-8 {
724 | margin-left: 8px;
725 | }
726 | .m-16 {
727 | margin: 16px;
728 | }
729 | .mt-16 {
730 | margin-top: 16px;
731 | }
732 | .mr-16 {
733 | margin-right: 16px;
734 | }
735 | .mb-16 {
736 | margin-bottom: 16px;
737 | }
738 | .ml-16 {
739 | margin-left: 16px;
740 | }
741 | .m-24 {
742 | margin: 24px;
743 | }
744 | .mt-24 {
745 | margin-top: 24px;
746 | }
747 | .mr-24 {
748 | margin-right: 24px;
749 | }
750 | .mb-24 {
751 | margin-bottom: 24px;
752 | }
753 | .ml-24 {
754 | margin-left: 24px;
755 | }
756 | .m-32 {
757 | margin: 32px;
758 | }
759 | .mt-32 {
760 | margin-top: 32px;
761 | }
762 | .mr-32 {
763 | margin-right: 32px;
764 | }
765 | .mb-32 {
766 | margin-bottom: 32px;
767 | }
768 | .ml-32 {
769 | margin-left: 32px;
770 | }
771 | .m-40 {
772 | margin: 40px;
773 | }
774 | .mt-40 {
775 | margin-top: 40px;
776 | }
777 | .mr-40 {
778 | margin-right: 40px;
779 | }
780 | .mb-40 {
781 | margin-bottom: 40px;
782 | }
783 | .ml-40 {
784 | margin-left: 40px;
785 | }
786 | .m-48 {
787 | margin: 48px;
788 | }
789 | .mt-48 {
790 | margin-top: 48px;
791 | }
792 | .mr-48 {
793 | margin-right: 48px;
794 | }
795 | .mb-48 {
796 | margin-bottom: 48px;
797 | }
798 | .ml-48 {
799 | margin-left: 48px;
800 | }
801 | .m-56 {
802 | margin: 56px;
803 | }
804 | .mt-56 {
805 | margin-top: 56px;
806 | }
807 | .mr-56 {
808 | margin-right: 56px;
809 | }
810 | .mb-56 {
811 | margin-bottom: 56px;
812 | }
813 | .ml-56 {
814 | margin-left: 56px;
815 | }
816 | .m-64 {
817 | margin: 64px;
818 | }
819 | .mt-64 {
820 | margin-top: 64px;
821 | }
822 | .mr-64 {
823 | margin-right: 64px;
824 | }
825 | .mb-64 {
826 | margin-bottom: 64px;
827 | }
828 | .ml-64 {
829 | margin-left: 64px;
830 | }
831 | .p-0 {
832 | padding: 0;
833 | }
834 | .pt-0 {
835 | padding-top: 0;
836 | }
837 | .pr-0 {
838 | padding-right: 0;
839 | }
840 | .pb-0 {
841 | padding-bottom: 0;
842 | }
843 | .pl-0 {
844 | padding-left: 0;
845 | }
846 | .p-8 {
847 | padding: 8px;
848 | }
849 | .pt-8 {
850 | padding-top: 8px;
851 | }
852 | .pr-8 {
853 | padding-right: 8px;
854 | }
855 | .pb-8 {
856 | padding-bottom: 8px;
857 | }
858 | .pl-8 {
859 | padding-left: 8px;
860 | }
861 | .p-16 {
862 | padding: 16px;
863 | }
864 | .pt-16 {
865 | padding-top: 16px;
866 | }
867 | .pr-16 {
868 | padding-right: 16px;
869 | }
870 | .pb-16 {
871 | padding-bottom: 16px;
872 | }
873 | .pl-16 {
874 | padding-left: 16px;
875 | }
876 | .p-24 {
877 | padding: 24px;
878 | }
879 | .pt-24 {
880 | padding-top: 24px;
881 | }
882 | .pr-24 {
883 | padding-right: 24px;
884 | }
885 | .pb-24 {
886 | padding-bottom: 24px;
887 | }
888 | .pl-24 {
889 | padding-left: 24px;
890 | }
891 | .p-32 {
892 | padding: 32px;
893 | }
894 | .pt-32 {
895 | padding-top: 32px;
896 | }
897 | .pr-32 {
898 | padding-right: 32px;
899 | }
900 | .pb-32 {
901 | padding-bottom: 32px;
902 | }
903 | .pl-32 {
904 | padding-left: 32px;
905 | }
906 | .p-40 {
907 | padding: 40px;
908 | }
909 | .pt-40 {
910 | padding-top: 40px;
911 | }
912 | .pr-40 {
913 | padding-right: 40px;
914 | }
915 | .pb-40 {
916 | padding-bottom: 40px;
917 | }
918 | .pl-40 {
919 | padding-left: 40px;
920 | }
921 | .p-48 {
922 | padding: 48px;
923 | }
924 | .pt-48 {
925 | padding-top: 48px;
926 | }
927 | .pr-48 {
928 | padding-right: 48px;
929 | }
930 | .pb-48 {
931 | padding-bottom: 48px;
932 | }
933 | .pl-48 {
934 | padding-left: 48px;
935 | }
936 | .p-56 {
937 | padding: 56px;
938 | }
939 | .pt-56 {
940 | padding-top: 56px;
941 | }
942 | .pr-56 {
943 | padding-right: 56px;
944 | }
945 | .pb-56 {
946 | padding-bottom: 56px;
947 | }
948 | .pl-56 {
949 | padding-left: 56px;
950 | }
951 | .p-64 {
952 | padding: 64px;
953 | }
954 | .pt-64 {
955 | padding-top: 64px;
956 | }
957 | .pr-64 {
958 | padding-right: 64px;
959 | }
960 | .pb-64 {
961 | padding-bottom: 64px;
962 | }
963 | .pl-64 {
964 | padding-left: 64px;
965 | }
966 | /* Reveal animations */
967 | .sr .has-animations .is-revealing {
968 | visibility: hidden;
969 | }
970 | .has-animations .anime-element {
971 | visibility: hidden;
972 | }
973 | .anime-ready .has-animations .anime-element {
974 | visibility: visible;
975 | }
976 | /*-------------------------------------------------------------- # Forms --------------------------------------------------------------*/
977 | .input,
978 | .textarea {
979 | background-color: #ffffff;
980 | border-width: 1px;
981 | border-style: solid;
982 | border-color: #d2daf0;
983 | border-radius: 2px;
984 | color: #565678;
985 | max-width: 100%;
986 | width: 100%;
987 | }
988 | .input::-webkit-input-placeholder,
989 | .textarea::-webkit-input-placeholder {
990 | color: #ababc9;
991 | }
992 | .input:-ms-input-placeholder,
993 | .textarea:-ms-input-placeholder {
994 | color: #ababc9;
995 | }
996 | .input::-ms-input-placeholder,
997 | .textarea::-ms-input-placeholder {
998 | color: #ababc9;
999 | }
1000 | .input::placeholder,
1001 | .textarea::placeholder {
1002 | color: #ababc9;
1003 | }
1004 | .input::-ms-input-placeholder,
1005 | .textarea::-ms-input-placeholder {
1006 | color: #ababc9;
1007 | }
1008 | .input:-ms-input-placeholder,
1009 | .textarea:-ms-input-placeholder {
1010 | color: #ababc9;
1011 | }
1012 | .input:hover,
1013 | .textarea:hover {
1014 | border-color: #bfcaea;
1015 | }
1016 | .input:active,
1017 | .input:focus,
1018 | .textarea:active,
1019 | .textarea:focus {
1020 | outline: none;
1021 | border-color: #4950f6;
1022 | }
1023 | .input[disabled],
1024 | .textarea[disabled] {
1025 | cursor: not-allowed;
1026 | background-color: #eef1fa;
1027 | border-color: #eef1fa;
1028 | }
1029 | .input {
1030 | -moz-appearance: none;
1031 | -webkit-appearance: none;
1032 | font-size: 16px;
1033 | letter-spacing: -0.1px;
1034 | line-height: 20px;
1035 | padding: 13px 16px;
1036 | height: 48px;
1037 | box-shadow: none;
1038 | }
1039 | .input .inline-input {
1040 | display: inline;
1041 | width: auto;
1042 | }
1043 | .textarea {
1044 | display: block;
1045 | min-width: 100%;
1046 | resize: vertical;
1047 | }
1048 | .textarea .inline-textarea {
1049 | display: inline;
1050 | width: auto;
1051 | }
1052 | .field-grouped > .control:not(:last-child) {
1053 | margin-bottom: 8px;
1054 | }
1055 | @media (min-width: 641px) {
1056 | .field-grouped {
1057 | display: flex;
1058 | }
1059 | .field-grouped > .control {
1060 | flex-shrink: 0;
1061 | }
1062 | .field-grouped > .control.control-expanded {
1063 | flex-grow: 1;
1064 | flex-shrink: 1;
1065 | }
1066 | .field-grouped > .control:not(:last-child) {
1067 | margin-bottom: 0;
1068 | margin-right: 8px;
1069 | }
1070 | }
1071 | /*-------------------------------------------------------------- # Buttons --------------------------------------------------------------*/
1072 | .button {
1073 | display: inline-flex;
1074 | font-size: 14px;
1075 | letter-spacing: 0px;
1076 | font-weight: 700;
1077 | text-transform: uppercase;
1078 | line-height: 16px;
1079 | text-decoration: none !important;
1080 | background-color: #ffffff;
1081 | color: #4950f6 !important;
1082 | border: none;
1083 | border-radius: 2px;
1084 | cursor: pointer;
1085 | justify-content: center;
1086 | padding: 16px 32px;
1087 | height: 48px;
1088 | text-align: center;
1089 | white-space: nowrap;
1090 | }
1091 | .button:active {
1092 | outline: 0;
1093 | }
1094 | .button::before {
1095 | border-radius: 2px;
1096 | }
1097 | .button-sm {
1098 | padding: 8px 24px;
1099 | height: 32px;
1100 | }
1101 | .button-primary {
1102 | color: #fff !important;
1103 | transition: background 0.15s ease;
1104 | }
1105 | .button-primary {
1106 | background: #4950f6;
1107 | }
1108 | .button-primary:hover {
1109 | background: #3f47f6;
1110 | }
1111 | .button-block {
1112 | display: flex;
1113 | }
1114 | /*-------------------------------------------------------------- # Header --------------------------------------------------------------*/
1115 | .site-header {
1116 | position: relative;
1117 | padding: 24px 0;
1118 | }
1119 | .header-shape {
1120 | position: absolute;
1121 | }
1122 | .header-shape-1 {
1123 | display: none;
1124 | top: 0;
1125 | }
1126 | .header-shape-2 {
1127 | top: -40px;
1128 | right: -53px;
1129 | }
1130 | .site-header-inner {
1131 | position: relative;
1132 | /* To display all elements above the background color */
1133 | display: flex;
1134 | justify-content: space-between;
1135 | align-items: center;
1136 | }
1137 | .header-links {
1138 | display: inline-flex;
1139 | }
1140 | .header-links li {
1141 | display: inline-flex;
1142 | }
1143 | .header-links a:not(.button) {
1144 | font-size: 16px;
1145 | line-height: 24px;
1146 | letter-spacing: -0.1px;
1147 | font-weight: 700;
1148 | color: rgba(73, 80, 246, 0.7);
1149 | text-transform: uppercase;
1150 | text-decoration: none;
1151 | line-height: 16px;
1152 | padding: 8px 12px;
1153 | }
1154 | .header-links a:not(.button):hover,
1155 | .header-links a:not(.button):active {
1156 | color: rgba(73, 80, 246, 0.9);
1157 | }
1158 | @media (min-width: 641px) {
1159 | .header-shape-1 {
1160 | display: block;
1161 | left: 687px;
1162 | }
1163 | .header-shape-2 {
1164 | top: -92px;
1165 | left: 440px;
1166 | right: auto;
1167 | }
1168 | .header-shape-2 svg {
1169 | width: 220px;
1170 | height: 220px;
1171 | }
1172 | }
1173 | @media (min-width: 1025px) {
1174 | .header-shape-1 {
1175 | left: auto;
1176 | right: 0;
1177 | }
1178 | .header-shape-2 {
1179 | left: auto;
1180 | right: 38%;
1181 | }
1182 | }
1183 | /*-------------------------------------------------------------- # Hero --------------------------------------------------------------*/
1184 | .hero {
1185 | text-align: center;
1186 | padding-top: 40px;
1187 | }
1188 | .hero-paragraph {
1189 | font-size: 20px;
1190 | line-height: 30px;
1191 | letter-spacing: -0.1px;
1192 | margin-bottom: 40px;
1193 | }
1194 | @media (min-width: 641px) {
1195 | .hero-paragraph {
1196 | font-size: 22px;
1197 | line-height: 32px;
1198 | letter-spacing: -0.1px;
1199 | }
1200 | }
1201 | .hero-form {
1202 | max-width: 440px;
1203 | margin: 0 auto;
1204 | }
1205 | .hero-illustration {
1206 | position: relative;
1207 | margin-top: 48px;
1208 | }
1209 | .hero-shape {
1210 | display: none;
1211 | position: absolute;
1212 | }
1213 | @media (min-width: 641px) {
1214 | .hero {
1215 | text-align: left;
1216 | padding-top: 160px;
1217 | }
1218 | .hero-inner {
1219 | /* Split hero in two half */
1220 | display: flex;
1221 | }
1222 | .hero-copy {
1223 | padding-right: 48px;
1224 | min-width: 512px;
1225 | }
1226 | .hero-form {
1227 | margin: 0;
1228 | }
1229 | .hero-illustration {
1230 | margin-top: -143px;
1231 | padding-bottom: 0;
1232 | }
1233 | .hero-shape {
1234 | display: block;
1235 | }
1236 | .hero-shape-1 {
1237 | left: -32px;
1238 | top: 542px;
1239 | }
1240 | .hero-shape-2 {
1241 | left: -733px;
1242 | top: 538px;
1243 | }
1244 | }
1245 | @media (min-width: 1025px) {
1246 | .hero-copy {
1247 | padding-right: 92px;
1248 | min-width: 620px;
1249 | }
1250 | }
1251 | .hero-copy > .button {
1252 | display: block;
1253 | margin-top: 10px;
1254 | }
1255 | @media (min-width: 641px) {
1256 | .hero-copy > .button {
1257 | display: inline-flex;
1258 | }
1259 | }
1260 | /*-------------------------------------------------------------- # Features --------------------------------------------------------------*/
1261 | .features {
1262 | position: relative;
1263 | }
1264 | .features::before {
1265 | content: "";
1266 | width: 100%;
1267 | height: 400px;
1268 | position: absolute;
1269 | left: 0;
1270 | bottom: 0;
1271 | background: #eef1fa;
1272 | background: linear-gradient(to bottom, #eef1fa, rgba(238, 241, 250, 0));
1273 | }
1274 | .features-wrap {
1275 | display: flex;
1276 | flex-wrap: wrap;
1277 | /* align-items: flex-start;
1278 | // disables equal height boxes */
1279 | justify-content: center;
1280 | margin-right: -16px;
1281 | margin-left: -16px;
1282 | }
1283 | .features-wrap:first-child {
1284 | margin-top: -16px;
1285 | }
1286 | .features-wrap:last-child {
1287 | margin-bottom: -16px;
1288 | }
1289 | .feature {
1290 | position: relative;
1291 | padding: 16px;
1292 | width: 388px;
1293 | max-width: 388px;
1294 | flex-grow: 1;
1295 | }
1296 | .feature-inner {
1297 | position: relative;
1298 | height: 100%;
1299 | background: #ffffff;
1300 | padding: 48px 24px 72px;
1301 | }
1302 | .feature-inner::before {
1303 | content: "";
1304 | position: absolute;
1305 | top: 0;
1306 | right: 0;
1307 | bottom: 0;
1308 | left: 0;
1309 | box-shadow: 0 24px 48px rgba(17, 16, 62, 0.12);
1310 | mix-blend-mode: multiply;
1311 | }
1312 | .feature-icon {
1313 | position: relative;
1314 | margin: 0 auto;
1315 | width: 88px;
1316 | height: 88px;
1317 | border-radius: 50%;
1318 | }
1319 | .feature-icon::before {
1320 | content: "";
1321 | display: block;
1322 | background: #ffffff;
1323 | width: 64px;
1324 | height: 64px;
1325 | position: absolute;
1326 | top: 12px;
1327 | left: 12px;
1328 | border-radius: 50%;
1329 | box-shadow: 12px 24px 32px rgba(17, 16, 62, 0.12);
1330 | }
1331 | .feature-icon svg {
1332 | position: relative;
1333 | /* To display the svg icon above the background color */
1334 | transform: scale(0.4);
1335 | }
1336 | @media (min-width: 641px) {
1337 | .features .section-paragraph {
1338 | padding-left: 72px;
1339 | padding-right: 72px;
1340 | }
1341 | .features-wrap {
1342 | padding-top: 24px;
1343 | margin-right: -24px;
1344 | margin-left: -24px;
1345 | }
1346 | .features-wrap:first-child {
1347 | margin-top: -24px;
1348 | }
1349 | .features-wrap:last-child {
1350 | margin-bottom: -24px;
1351 | }
1352 | .feature {
1353 | padding: 24px;
1354 | }
1355 | }
1356 | @media (min-width: 1025px) {
1357 | .features .section-inner {
1358 | padding-bottom: 168px;
1359 | /* 88+80px second column offset */
1360 | }
1361 | .feature:nth-child(even) {
1362 | top: 80px;
1363 | }
1364 | }
1365 | /*--- # companys ---*/
1366 | .logo-wrapper {
1367 | display: flex;
1368 | justify-content: space-evenly;
1369 | gap: 10px;
1370 | }
1371 | .logo {
1372 | width: 25%;
1373 | height: 60px;
1374 | align-items: center;
1375 | }
1376 | .logo img {
1377 | width: 100%;
1378 | height: 100%;
1379 | object-fit: scale-down;
1380 | margin: auto;
1381 | }
1382 | /*-------------------------------------------------------------- # sponsors --------------------------------------------------------------*/
1383 | .sponsors img {
1384 | display: inline-block;
1385 | }
1386 | /*-------------------------------------------------------------- # demos --------------------------------------------------------------*/
1387 | .demos {
1388 | position: relative;
1389 | }
1390 | .demos .section-inner {
1391 | padding-top: 0;
1392 | padding-bottom: 108px;
1393 | }
1394 | .demos-shape {
1395 | position: absolute;
1396 | }
1397 | .demos-shape-1 {
1398 | bottom: 52px;
1399 | left: calc(50% - 80px);
1400 | }
1401 | .demos-shape-2 {
1402 | top: 84px;
1403 | left: calc(50% + 30px);
1404 | }
1405 | .demos-shape-3 {
1406 | display: none;
1407 | }
1408 | .demos-wrap {
1409 | display: flex;
1410 | flex-wrap: wrap;
1411 | justify-content: center;
1412 | margin-right: -16px;
1413 | margin-left: -16px;
1414 | }
1415 | .demos-wrap:first-child {
1416 | margin-top: -16px;
1417 | }
1418 | .demos-wrap:last-child {
1419 | margin-bottom: -16px;
1420 | }
1421 | .demo {
1422 | position: relative;
1423 | padding: 16px;
1424 | width: 388px;
1425 | max-width: 388px;
1426 | flex-grow: 1;
1427 | }
1428 | .demo-inner {
1429 | position: relative;
1430 | height: 100%;
1431 | display: flex;
1432 | flex-wrap: wrap;
1433 | background: #ffffff;
1434 | padding: 24px;
1435 | }
1436 | .demo-inner > * {
1437 | width: 100%;
1438 | }
1439 | .demo-inner p {
1440 | text-decoration: none;
1441 | }
1442 | .demo-inner::before {
1443 | content: "";
1444 | position: absolute;
1445 | top: 0;
1446 | right: 0;
1447 | bottom: 0;
1448 | left: 0;
1449 | box-shadow: 0 24px 48px rgba(17, 16, 62, 0.12);
1450 | mix-blend-mode: multiply;
1451 | }
1452 | .demo-main {
1453 | position: relative;
1454 | }
1455 | .demo-header {
1456 | position: absolute;
1457 | top: -80px;
1458 | }
1459 | .demo-header img {
1460 | width: 56px;
1461 | height: auto;
1462 | border-radius: 50%;
1463 | box-shadow: 0 16px 24px rgba(17, 16, 62, 0.12);
1464 | }
1465 | .demo-footer {
1466 | align-self: flex-end;
1467 | }
1468 | .demo-footer {
1469 | font-weight: 500;
1470 | margin-bottom: 12px;
1471 | }
1472 | @media (min-width: 641px) {
1473 | .demos .section-inner {
1474 | padding-bottom: 166px;
1475 | /* 126+40px second column offset */
1476 | }
1477 | .demos-wrap {
1478 | margin-right: -24px;
1479 | margin-left: -24px;
1480 | }
1481 | .demos-wrap:first-child {
1482 | margin-top: -24px;
1483 | }
1484 | .demos-wrap:last-child {
1485 | margin-bottom: -24px;
1486 | }
1487 | .demo {
1488 | padding: 24px;
1489 | }
1490 | .demos-shape-1 {
1491 | bottom: auto;
1492 | top: 170px;
1493 | left: calc(50% - 305px);
1494 | }
1495 | .demos-shape-1 svg {
1496 | width: 400px;
1497 | height: 400px;
1498 | }
1499 | .demos-shape-2 {
1500 | top: 480px;
1501 | left: calc(50% + 190px);
1502 | }
1503 | .demos-shape-3 {
1504 | display: block;
1505 | top: 570px;
1506 | left: calc(50% - 320px);
1507 | }
1508 | }
1509 | @media (min-width: 1025px) {
1510 | .demo:nth-child(odd) {
1511 | top: 40px;
1512 | }
1513 | }
1514 | /*-------------------------------------------------------------- # Newsletter --------------------------------------------------------------*/
1515 | .newsletter {
1516 | position: relative;
1517 | background-color: #11103e;
1518 | }
1519 | .newsletter::before {
1520 | content: "";
1521 | position: absolute;
1522 | top: 0;
1523 | right: 0;
1524 | width: 279px;
1525 | height: 274px;
1526 | background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjk0IiBoZWlnaHQ9IjI3NCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4gIDxkZWZzPiAgICA8bGluZWFyR3JhZGllbnQgeDE9IjEwNC42NTclIiB5MT0iLTQ1LjI3NCUiIHgyPSIyMS45NDQlIiB5Mj0iNC4wNzklIiBpZD0iYSI+ICAgICAgPHN0b3Agc3RvcC1jb2xvcj0iIzU2NTY3OCIgb2Zmc2V0PSIwJSIvPiAgICAgIDxzdG9wIHN0b3AtY29sb3I9IiM1NjU2NzgiIHN0b3Atb3BhY2l0eT0iMCIgb2Zmc2V0PSIxMDAlIi8+ICAgIDwvbGluZWFyR3JhZGllbnQ+ICA8L2RlZnM+ICA8cGF0aCBkPSJNMTA4My4xMzYgMTI2SDE0NDB2MTc3Ljc4MkMxNDA0LjkxMyAzNjEuNDcgMTM0MS40NTYgNDAwIDEyNjkgNDAwYy0xMTAuNDU3IDAtMjAwLTg5LjU0My0yMDAtMjAwIDAtMjYuMTQxIDUuMDE1LTUxLjExMSAxNC4xMzYtNzR6IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMTE0NiAtMTI2KSIgZmlsbD0idXJsKCNhKSIgZmlsbC1ydWxlPSJldmVub2RkIiBmaWxsLW9wYWNpdHk9Ii40OCIvPjwvc3ZnPg==);
1527 | background-repeat: no-repeat;
1528 | }
1529 | .newsletter .section-paragraph {
1530 | margin-bottom: 32px;
1531 | }
1532 | .newsletter-form {
1533 | max-width: 440px;
1534 | margin: 0 auto;
1535 | }
1536 | @media (min-width: 641px) {
1537 | .newsletter .section-paragraph {
1538 | margin-bottom: 40px;
1539 | padding-left: 72px;
1540 | padding-right: 72px;
1541 | }
1542 | }
1543 | /*-------------------------------------------------------------- # Site content --------------------------------------------------------------*/
1544 | .is-boxed {
1545 | background: #eef1fa;
1546 | }
1547 | .body-wrap {
1548 | background: #ffffff;
1549 | overflow: hidden;
1550 | /* Sticky footer */
1551 | display: flex;
1552 | flex-direction: column;
1553 | min-height: 100vh;
1554 | }
1555 | .boxed-container {
1556 | max-width: 1440px;
1557 | margin: 0 auto;
1558 | box-shadow: 0 24px 48px rgba(17, 16, 62, 0.12);
1559 | }
1560 | main {
1561 | flex: 1 0 auto;
1562 | }
1563 | .section-inner {
1564 | position: relative;
1565 | /* To always display inner elements above pseudo decorative stuff */
1566 | padding-top: 48px;
1567 | padding-bottom: 48px;
1568 | }
1569 | @media (min-width: 641px) {
1570 | .section-inner {
1571 | padding-top: 88px;
1572 | padding-bottom: 88px;
1573 | }
1574 | }
1575 | /*-------------------------------------------------------------- # Footer --------------------------------------------------------------*/
1576 | .site-footer {
1577 | position: relative;
1578 | font-size: 14px;
1579 | line-height: 20px;
1580 | letter-spacing: 0px;
1581 | color: #ababc9;
1582 | background-color: #11103e;
1583 | }
1584 | .site-footer::before {
1585 | content: "";
1586 | position: absolute;
1587 | bottom: 0;
1588 | left: 30%;
1589 | width: 298px;
1590 | height: 93px;
1591 | background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjk4IiBoZWlnaHQ9IjkzIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPiAgPGRlZnM+ICAgIDxsaW5lYXJHcmFkaWVudCB4MT0iMjguOTQlIiB5MT0iLTMwLjY4MyUiIHgyPSI2Ny40NzMlIiB5Mj0iMTM1LjAyMiUiIGlkPSJhIj4gICAgICA8c3RvcCBzdG9wLWNvbG9yPSIjNTY1Njc4IiBvZmZzZXQ9IjAlIi8+ICAgICAgPHN0b3Agc3RvcC1jb2xvcj0iIzU2NTY3OCIgc3RvcC1vcGFjaXR5PSIwIiBvZmZzZXQ9IjEwMCUiLz4gICAgPC9saW5lYXJHcmFkaWVudD4gIDwvZGVmcz4gIDxwYXRoIGQ9Ik00MDMuMjQ0IDY5MGMyNC4yMDktNTQuNzc2IDc5LjAxOS05MyAxNDIuNzU2LTkzIDUzLjI1NSAwIDEyMy40NTggNTAuNjc0IDE5Ny4yMTUgOTNoLTMzOS45N3oiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC00MDMgLTU5NykiIGZpbGw9InVybCgjYSkiIGZpbGwtcnVsZT0iZXZlbm9kZCIgZmlsbC1vcGFjaXR5PSIuMjQiLz48L3N2Zz4=);
1592 | background-repeat: no-repeat;
1593 | }
1594 | .site-footer a {
1595 | color: #ababc9;
1596 | text-decoration: none;
1597 | }
1598 | .site-footer a:hover,
1599 | .site-footer a:active {
1600 | color: #fff;
1601 | text-decoration: underline;
1602 | }
1603 | .site-footer-inner {
1604 | position: relative;
1605 | /* To display all elements above the background color */
1606 | display: flex;
1607 | flex-wrap: wrap;
1608 | padding-top: 48px;
1609 | padding-bottom: 48px;
1610 | }
1611 | .site-footer-inner.has-top-divider::before {
1612 | background: #565678;
1613 | background: linear-gradient(
1614 | to right,
1615 | rgba(86, 86, 120, 0.1) 0,
1616 | rgba(86, 86, 120, 0.6) 50%,
1617 | rgba(86, 86, 120, 0.1) 100%
1618 | );
1619 | }
1620 | .footer-brand,
1621 | .footer-links,
1622 | .footer-social-links,
1623 | .footer-copyright {
1624 | flex: none;
1625 | width: 100%;
1626 | display: inline-flex;
1627 | justify-content: center;
1628 | }
1629 | .footer-brand,
1630 | .footer-links,
1631 | .footer-social-links {
1632 | margin-bottom: 24px;
1633 | }
1634 | .footer-links li + li,
1635 | .footer-social-links li + li {
1636 | margin-left: 16px;
1637 | }
1638 | .footer-social-links li {
1639 | display: inline-flex;
1640 | }
1641 | .footer-social-links li a {
1642 | padding: 8px;
1643 | }
1644 | @media (min-width: 641px) {
1645 | .site-footer-inner {
1646 | justify-content: space-between;
1647 | }
1648 | .footer-brand,
1649 | .footer-links,
1650 | .footer-social-links,
1651 | .footer-copyright {
1652 | flex: 50%;
1653 | }
1654 | .footer-brand,
1655 | .footer-copyright {
1656 | justify-content: flex-start;
1657 | }
1658 | .footer-links,
1659 | .footer-social-links {
1660 | justify-content: flex-end;
1661 | }
1662 | .footer-links {
1663 | order: 1;
1664 | margin-bottom: 0;
1665 | }
1666 | }
1667 |
1668 | .clearfix:after {
1669 | content: "";
1670 | display: table;
1671 | clear: both;
1672 | }
1673 |
1674 | .tetris-demo p {
1675 | margin-bottom: 0;
1676 | }
1677 |
1678 | cf-chat-response.robot text > p.show,
1679 | .cf-button {
1680 | color: black;
1681 | font-weight: bold;
1682 | }
1683 |
1684 | .banner {
1685 | padding: 0.5rem 0.75rem;
1686 | text-align: center;
1687 | background-color: black;
1688 | font-weight: 700;
1689 | }
1690 |
1691 | .banner .tag {
1692 | background: #4950f6;
1693 | color: white;
1694 | padding: 6px 8px;
1695 | border-radius: 3px;
1696 | margin-right: 4px;
1697 | font-weight: 12px;
1698 | }
1699 |
1700 | .banner a {
1701 | color: white !important;
1702 | border-bottom: 2px solid rgba(255, 255, 255, 0.6);
1703 | text-decoration: none;
1704 | }
1705 |
--------------------------------------------------------------------------------
/static/logos/highlight.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rrweb-io/web/eecd16423cb7dbb6f305709a5172cdbd3ad828ef/static/logos/highlight.png
--------------------------------------------------------------------------------
/static/logos/posthog.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rrweb-io/web/eecd16423cb7dbb6f305709a5172cdbd3ad828ef/static/logos/posthog.png
--------------------------------------------------------------------------------
/static/logos/record-once.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rrweb-io/web/eecd16423cb7dbb6f305709a5172cdbd3ad828ef/static/logos/record-once.png
--------------------------------------------------------------------------------
/static/logos/smartx.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rrweb-io/web/eecd16423cb7dbb6f305709a5172cdbd3ad828ef/static/logos/smartx.png
--------------------------------------------------------------------------------
/static/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "background_color": "#ffffff",
3 | "theme_color": "#aa1e1e",
4 | "name": "TODO",
5 | "short_name": "TODO",
6 | "display": "minimal-ui",
7 | "start_url": "/",
8 | "icons": [
9 | {
10 | "src": "favicon.png",
11 | "sizes": "200x200",
12 | "type": "image/png"
13 | }
14 | ]
15 | }
16 |
--------------------------------------------------------------------------------
/static/rrweb-player.css:
--------------------------------------------------------------------------------
1 | .rr-controller.svelte-dxnc1j.svelte-dxnc1j {
2 | width: 100%;
3 | height: 80px;
4 | background: #fff;
5 | display: flex;
6 | flex-direction: column;
7 | justify-content: space-around;
8 | align-items: center;
9 | border-radius: 0 0 5px 5px;
10 | }
11 | .rr-timeline.svelte-dxnc1j.svelte-dxnc1j {
12 | width: 80%;
13 | display: flex;
14 | align-items: center;
15 | }
16 | .rr-timeline__time.svelte-dxnc1j.svelte-dxnc1j {
17 | display: inline-block;
18 | width: 100px;
19 | text-align: center;
20 | color: #11103e;
21 | }
22 | .rr-progress.svelte-dxnc1j.svelte-dxnc1j {
23 | flex: 1;
24 | height: 12px;
25 | background: #eee;
26 | position: relative;
27 | border-radius: 3px;
28 | cursor: pointer;
29 | box-sizing: border-box;
30 | border-top: solid 4px #fff;
31 | border-bottom: solid 4px #fff;
32 | }
33 | .rr-progress.disabled.svelte-dxnc1j.svelte-dxnc1j {
34 | cursor: not-allowed;
35 | }
36 | .rr-progress__step.svelte-dxnc1j.svelte-dxnc1j {
37 | height: 100%;
38 | position: absolute;
39 | left: 0;
40 | top: 0;
41 | background: #e0e1fe;
42 | }
43 | .rr-progress__handler.svelte-dxnc1j.svelte-dxnc1j {
44 | width: 20px;
45 | height: 20px;
46 | border-radius: 10px;
47 | position: absolute;
48 | top: 2px;
49 | transform: translate(-50%, -50%);
50 | background: rgb(73, 80, 246);
51 | }
52 | .rr-controller__btns.svelte-dxnc1j.svelte-dxnc1j {
53 | display: flex;
54 | align-items: center;
55 | justify-content: center;
56 | font-size: 13px;
57 | }
58 | .rr-controller__btns.svelte-dxnc1j button.svelte-dxnc1j {
59 | width: 32px;
60 | height: 32px;
61 | display: flex;
62 | padding: 0;
63 | align-items: center;
64 | justify-content: center;
65 | background: none;
66 | border: none;
67 | border-radius: 50%;
68 | cursor: pointer;
69 | }
70 | .rr-controller__btns.svelte-dxnc1j button.svelte-dxnc1j:active {
71 | background: #e0e1fe;
72 | }
73 | .rr-controller__btns.svelte-dxnc1j button.active.svelte-dxnc1j {
74 | color: #fff;
75 | background: rgb(73, 80, 246);
76 | }
77 | .rr-controller__btns.svelte-dxnc1j button.svelte-dxnc1j:disabled {
78 | cursor: not-allowed;
79 | }
80 | .replayer-wrapper {
81 | position: relative;
82 | }
83 | .replayer-mouse {
84 | position: absolute;
85 | width: 20px;
86 | height: 20px;
87 | transition: 0.05s linear;
88 | background-size: contain;
89 | background-position: 50%;
90 | background-repeat: no-repeat;
91 | background-image: url("data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjMwMCIgd2lkdGg9IjMwMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBkYXRhLW5hbWU9IkxheWVyIDEiIHZpZXdCb3g9IjAgMCA1MCA1MCI+PHBhdGggZD0iTTQ4LjcxIDQyLjkxTDM0LjA4IDI4LjI5IDQ0LjMzIDE4YTEgMSAwIDAwLS4zMy0xLjYxTDIuMzUgMS4wNmExIDEgMCAwMC0xLjI5IDEuMjlMMTYuMzkgNDRhMSAxIDAgMDAxLjY1LjM2bDEwLjI1LTEwLjI4IDE0LjYyIDE0LjYzYTEgMSAwIDAwMS40MSAwbDQuMzgtNC4zOGExIDEgMCAwMC4wMS0xLjQyem0tNS4wOSAzLjY3TDI5IDMyYTEgMSAwIDAwLTEuNDEgMGwtOS44NSA5Ljg1TDMuNjkgMy42OWwzOC4xMiAxNEwzMiAyNy41OEExIDEgMCAwMDMyIDI5bDE0LjU5IDE0LjYyeiIvPjwvc3ZnPg==");
92 | }
93 | .replayer-mouse:after {
94 | content: "";
95 | display: inline-block;
96 | width: 20px;
97 | height: 20px;
98 | border-radius: 10px;
99 | background: #4950f6;
100 | transform: translate(-10px, -10px);
101 | opacity: 0.3;
102 | }
103 | .replayer-mouse.active:after {
104 | animation: click 0.2s ease-in-out 1;
105 | }
106 | .replayer-mouse-tail {
107 | position: absolute;
108 | pointer-events: none;
109 | }
110 | @keyframes click {
111 | 0% {
112 | opacity: 0.3;
113 | width: 20px;
114 | height: 20px;
115 | border-radius: 10px;
116 | transform: translate(-10px, -10px);
117 | }
118 | 50% {
119 | opacity: 0.5;
120 | width: 10px;
121 | height: 10px;
122 | border-radius: 5px;
123 | transform: translate(-5px, -5px);
124 | }
125 | }
126 | .rr-player {
127 | position: relative;
128 | background: white;
129 | float: left;
130 | border-radius: 5px;
131 | box-shadow: 0 24px 48px rgba(17, 16, 62, 0.12);
132 | }
133 | .rr-player__frame {
134 | overflow: hidden;
135 | }
136 | .replayer-wrapper {
137 | float: left;
138 | clear: both;
139 | transform-origin: top left;
140 | left: 50%;
141 | top: 50%;
142 | }
143 | .replayer-wrapper > iframe {
144 | border: none;
145 | }
146 | .switch.svelte-1mmdovf.svelte-1mmdovf {
147 | height: 1em;
148 | display: flex;
149 | align-items: center;
150 | }
151 | .switch.disabled.svelte-1mmdovf.svelte-1mmdovf {
152 | opacity: 0.5;
153 | }
154 | .label.svelte-1mmdovf.svelte-1mmdovf {
155 | margin: 0 8px;
156 | }
157 | .switch.svelte-1mmdovf input[type="checkbox"].svelte-1mmdovf {
158 | position: absolute;
159 | opacity: 0;
160 | }
161 | .switch.svelte-1mmdovf label.svelte-1mmdovf {
162 | width: 2em;
163 | height: 1em;
164 | position: relative;
165 | cursor: pointer;
166 | display: block;
167 | }
168 | .switch.disabled.svelte-1mmdovf label.svelte-1mmdovf {
169 | cursor: not-allowed;
170 | }
171 | .switch.svelte-1mmdovf label.svelte-1mmdovf:before {
172 | content: "";
173 | position: absolute;
174 | width: 2em;
175 | height: 1em;
176 | left: 0.1em;
177 | transition: background 0.1s ease;
178 | background: rgba(73, 80, 246, 0.5);
179 | border-radius: 50px;
180 | }
181 | .switch.svelte-1mmdovf label.svelte-1mmdovf:after {
182 | content: "";
183 | position: absolute;
184 | width: 1em;
185 | height: 1em;
186 | border-radius: 50px;
187 | left: 0;
188 | transition: all 0.2s ease;
189 | box-shadow: 0px 2px 5px 0px rgba(0, 0, 0, 0.3);
190 | background: #fcfff4;
191 | animation: switch-off 0.2s ease-out;
192 | z-index: 2;
193 | }
194 | .switch
195 | input[type="checkbox"]:checked
196 | + label.svelte-1mmdovf.svelte-1mmdovf:before {
197 | background: rgb(73, 80, 246);
198 | }
199 | .switch
200 | input[type="checkbox"]:checked
201 | + label.svelte-1mmdovf.svelte-1mmdovf:after {
202 | animation: switch-on 0.2s ease-out;
203 | left: 1.1em;
204 | }
205 |
206 | /*# sourceMappingURL=style.css.map */
207 |
--------------------------------------------------------------------------------
/static/tetris.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rrweb-io/web/eecd16423cb7dbb6f305709a5172cdbd3ad828ef/static/tetris.png
--------------------------------------------------------------------------------
/webpack.config.js:
--------------------------------------------------------------------------------
1 | const webpack = require('webpack');
2 | const config = require('sapper/config/webpack.js');
3 | const pkg = require('./package.json');
4 |
5 | const mode = process.env.NODE_ENV;
6 | const dev = mode === 'development';
7 |
8 | module.exports = {
9 | client: {
10 | entry: config.client.entry(),
11 | output: config.client.output(),
12 | resolve: {
13 | extensions: ['.js', '.json', '.html'],
14 | mainFields: ['svelte', 'module', 'browser', 'main']
15 | },
16 | module: {
17 | rules: [
18 | {
19 | test: /\.html$/,
20 | use: {
21 | loader: 'svelte-loader',
22 | options: {
23 | dev,
24 | hydratable: true,
25 | hotReload: true
26 | }
27 | }
28 | }
29 | ]
30 | },
31 | mode,
32 | plugins: [
33 | dev && new webpack.HotModuleReplacementPlugin(),
34 | new webpack.DefinePlugin({
35 | 'process.browser': true,
36 | 'process.env.NODE_ENV': JSON.stringify(mode)
37 | }),
38 | ].filter(Boolean),
39 | devtool: dev && 'inline-source-map'
40 | },
41 |
42 | server: {
43 | entry: config.server.entry(),
44 | output: config.server.output(),
45 | target: 'node',
46 | resolve: {
47 | extensions: ['.js', '.json', '.html'],
48 | mainFields: ['svelte', 'module', 'browser', 'main']
49 | },
50 | externals: Object.keys(pkg.dependencies).concat('encoding'),
51 | module: {
52 | rules: [
53 | {
54 | test: /\.html$/,
55 | use: {
56 | loader: 'svelte-loader',
57 | options: {
58 | css: false,
59 | generate: 'ssr',
60 | dev
61 | }
62 | }
63 | }
64 | ]
65 | },
66 | mode: process.env.NODE_ENV,
67 | performance: {
68 | hints: false // it doesn't matter if server.js is large
69 | }
70 | },
71 |
72 | serviceworker: {
73 | entry: config.serviceworker.entry(),
74 | output: config.serviceworker.output(),
75 | mode: process.env.NODE_ENV
76 | }
77 | };
78 |
--------------------------------------------------------------------------------