├── .bowerrc ├── .gitignore ├── .tern-project ├── LICENSE ├── README.md ├── bower.json ├── deployGithub.sh ├── fixScript.js ├── gulpfile.js ├── intro.gif ├── package.json ├── public ├── .nojekyll ├── SWCrawlTitle.sfd ├── SWCrawlTitle2.ttf ├── SWCrawlTitle_original.ttf ├── StarWars.js ├── Starjedi.ttf ├── atat.css ├── atat.html ├── bb8.css ├── bg-stars.png ├── bitcoin.svg ├── bitcoinEther.js ├── createdIntros.js ├── deathstar.png ├── donateButtons.html ├── errorFunction.js ├── favicon.png ├── index.html ├── intro.mp3 ├── intro.ogg ├── logo.svg ├── main.js ├── preview.png ├── redirectToNewWebsite.js ├── stic.jpg ├── styles.css ├── termsOfService.html ├── textDisplay.css ├── textDisplay.html ├── tfa.mp3 ├── tfa.ogg └── wic.jpg ├── sass ├── styles.scss └── textDisplay.scss ├── ss1.png ├── ss2.png └── termsOfService.md /.bowerrc: -------------------------------------------------------------------------------- 1 | { 2 | "directory":"public/libs" 3 | } -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | dist/* 3 | public/libs/ 4 | /.project 5 | *.log 6 | .cache -------------------------------------------------------------------------------- /.tern-project: -------------------------------------------------------------------------------- 1 | { 2 | "ecmaVersion": 6, 3 | "libs": [ 4 | "browser", 5 | "jquery" 6 | ], 7 | "loadEagerly": [ 8 | "*.js" 9 | ], 10 | "plugins": { 11 | "complete_strings": { 12 | "maxLength": 15 13 | }, 14 | "doc_comment": { 15 | "fullDocs": true, 16 | "strong": false 17 | }, 18 | "node": { 19 | "dontLoad": "", 20 | "load": "", 21 | "modules": "" 22 | }, 23 | "node_resolve": {}, 24 | "modules": { 25 | "dontLoad": "", 26 | "load": "", 27 | "modules": "" 28 | }, 29 | "es_modules": {} 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2018 Bruno Orlandi 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |

2 | 3 | 4 | 5 |

6 | 7 | # Star Wars Intro Creator 8 | 9 | Create your own Star Wars movie opening. 10 | Fill the inputs with any text and hit Play. 11 | You can share the URL generated and anyone can see your intro. 12 | Access: [https://brorlandi.github.io/StarWarsIntroCreator/](https://brorlandi.github.io/StarWarsIntroCreator/) 13 | 14 | ## Credits 15 | Build on top of the [work by Tim Pietrusky](http://timpietrusky.com/star-wars-opening-crawl-from-1977) 16 | By [Bruno Orlandi](https://github.com/BrOrlandi) and [Nihey Takizawa](https://github.com/nihey) 17 | 18 | ## Supported by 19 | 20 | 21 | 22 | 23 | ## Screenshots 24 | ![Intro 1](ss1.png) 25 | 26 | ![Intro 2](ss2.png) 27 | -------------------------------------------------------------------------------- /bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "star-wars-opening", 3 | "description": "A Star Wars Opening Creator", 4 | "main": "", 5 | "authors": [ 6 | "Bruno Orlandi " 7 | ], 8 | "license": "MIT", 9 | "moduleType": [], 10 | "homepage": "", 11 | "private": true, 12 | "ignore": [ 13 | "**/.*", 14 | "node_modules", 15 | "bower_components", 16 | "test", 17 | "tests" 18 | ], 19 | "dependencies": { 20 | "jquery": "~2.1.4", 21 | "sweetalert": "~1.1.3", 22 | "handlebars": "~4.0.5" 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /deployGithub.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | if [[ $# -eq 0 ]] ; then 3 | echo 'Use: ./deployGithub.sh "Commit message"' 4 | exit 1 5 | fi 6 | 7 | git checkout master 8 | npm run build 9 | git checkout gh-pages 10 | git pull 11 | mv dist/* ./ 12 | mv dist/.* ./ 13 | git add . 14 | git commit -m "$1" 15 | git push 16 | git checkout master 17 | -------------------------------------------------------------------------------- /fixScript.js: -------------------------------------------------------------------------------- 1 | 2 | var p = fetch('https://starwarsopening.firebaseio.com/openings.json'); 3 | p.then(function(data){ 4 | return data.json(); 5 | }).then(function(data){ 6 | var keys = Object.keys(data); 7 | var c = 0; 8 | for(var i=0;i", 6 | "license": "MIT", 7 | "scripts": { 8 | "install": "bower install", 9 | "build": "gulp build", 10 | "start": "gulp" 11 | }, 12 | "devDependencies": { 13 | "del": "^2.2.0", 14 | "gulp": "^3.9.0", 15 | "gulp-connect": "^2.2.0", 16 | "gulp-if": "^2.0.0", 17 | "gulp-minify-css": "^1.2.2", 18 | "gulp-sass": "^2.1.1", 19 | "gulp-uglify": "^1.5.1", 20 | "gulp-useref": "^3.0.4" 21 | }, 22 | "dependencies": {} 23 | } 24 | -------------------------------------------------------------------------------- /public/.nojekyll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BrOrlandi/StarWarsIntroCreator/98a992a3c934a0247de3112028b847c56287eef5/public/.nojekyll -------------------------------------------------------------------------------- /public/SWCrawlTitle2.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BrOrlandi/StarWarsIntroCreator/98a992a3c934a0247de3112028b847c56287eef5/public/SWCrawlTitle2.ttf -------------------------------------------------------------------------------- /public/SWCrawlTitle_original.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BrOrlandi/StarWarsIntroCreator/98a992a3c934a0247de3112028b847c56287eef5/public/SWCrawlTitle_original.ttf -------------------------------------------------------------------------------- /public/StarWars.js: -------------------------------------------------------------------------------- 1 | /* 2 | http://codepen.io/TimPietrusky/pen/eHGfj 3 | 4 | * Star Wars opening crawl from 1977 5 | * 6 | * I freaking love Star Wars, but could not find 7 | * a web version of the original opening crawl from 1977. 8 | * So I created this one. 9 | * 10 | * I wrote an article where I explain how this works: 11 | * http://timpietrusky.com/star-wars-opening-crawl-from-1977 12 | * 13 | * Watch the Start Wars opening crawl on YouTube. 14 | * http://www.youtube.com/watch?v=7jK-jZo6xjY 15 | * 16 | * Stuff I used: 17 | * - CSS (animation, transform) 18 | * - HTML audio (the opening theme) 19 | * - SVG (the Star Wars logo from wikimedia.org) 20 | * http://commons.wikimedia.org/wiki/File:Star_Wars_Logo.svg 21 | * - JavaScript (to sync the animation/audio) 22 | * 23 | * Thanks to Craig Buckler for his amazing article 24 | * which helped me to create this remake of the Star Wars opening crawl. 25 | * http://www.sitepoint.com/css3-starwars-scrolling-text/ 26 | * 27 | * Sound copyright by The Walt Disney Company. 28 | * 29 | * 30 | * 2013 by Tim Pietrusky 31 | * timpietrusky.com 32 | * 33 | */ 34 | StarWarsOpening = (function() { 35 | 36 | /* 37 | * Constructor 38 | */ 39 | function StarWarsOpening(args) { 40 | // Context wrapper 41 | this.el = $(args.el); 42 | 43 | // Audio to play the opening crawl 44 | this.audio = this.el.find('audio').get(0); 45 | 46 | this.audioDefer = $.Deferred(); 47 | var that = this; 48 | this.audio.oncanplaythrough = function() { 49 | that.audioDefer.resolve(); 50 | }; 51 | 52 | // Start the animation 53 | this.start = this.el.find('.start'); 54 | 55 | // The animation wrapper 56 | this.animation = this.el.find('.animation'); 57 | 58 | // Remove animation and shows the start screen 59 | this.reset(); 60 | 61 | // Reset the animation and shows the start screen 62 | $(this.audio).bind('ended', $.proxy(function() { 63 | this.audio.currentTime = 0; 64 | this.reset(); 65 | 66 | var o = this.opening; 67 | // set data on form 68 | $("#f-intro").val(o.intro); 69 | $("#f-logo").val(o.logo || "Star\nwars"); 70 | $("#f-episode").val(o.episode); 71 | $("#f-title").val(o.title); 72 | $("#f-text").val(o.text); 73 | $("#f-center").prop('checked',o.center || false); 74 | $('#f-text').css('text-align', o.center? 'center' : 'initial'); 75 | 76 | setTimeout(function(){ 77 | if($('.start').css('display') === 'block') 78 | $('body').removeClass('running'); 79 | },10000); 80 | }, this)); 81 | } 82 | 83 | /* 84 | * Resets the animation and shows the start screen. 85 | */ 86 | StarWarsOpening.prototype.reset = function() { 87 | this.start.show(); // show config form 88 | $('.pageHide').show(); // show footer and social buttons 89 | // reset the animation 90 | this.cloned = this.animation.clone(true); 91 | this.animation.remove(); 92 | this.animation = this.cloned; 93 | $(window).trigger('resize'); // trigger resize to allow scrol in the config form 94 | }; 95 | 96 | StarWarsOpening.prototype.resetAudio = function() { 97 | this.audio.pause(); 98 | this.audio.currentTime = 0; 99 | }; 100 | 101 | StarWarsOpening.prototype.play = function(){ 102 | this.start.hide(); 103 | $('.pageHide').hide(); 104 | unsetLoading(); // grants the loader to hide. Sometimes doesn't hide, maybe due to history navigation in browser. 105 | $('body').removeClass('running'); 106 | $('body').addClass('running'); 107 | $('body').scrollTop(0); 108 | this.audio.play(); 109 | this.el.append(this.animation); 110 | 111 | // adjust animation speed 112 | var titles = $('.titles > div',this.animation)[0]; 113 | if(titles.offsetHeight > 1977) // 1997 is year of the first Star Wars movie. 114 | { 115 | var exceedSize = titles.offsetHeight - 1977; 116 | var animConstant = 0.04041570438799076; 117 | var animDist = 20 - exceedSize*animConstant; 118 | var cssRule; 119 | var ss = document.styleSheets; 120 | for (var i = 0; i < ss.length; ++i) { 121 | // loop through all the rules! 122 | for (var x = 0; x < ss[i].cssRules.length; ++x) { 123 | var rule = ss[i].cssRules[x]; 124 | if (rule.name == "titles" && rule.type == CSSRule.KEYFRAMES_RULE) { 125 | cssRule = rule; 126 | } 127 | } 128 | } 129 | if(cssRule) 130 | cssRule.appendRule("100% { top: "+ animDist +"% }"); 131 | } 132 | } 133 | 134 | return StarWarsOpening; 135 | })(); 136 | 137 | var StarWars = new StarWarsOpening({ 138 | el : '.starwars' 139 | }); 140 | -------------------------------------------------------------------------------- /public/Starjedi.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BrOrlandi/StarWarsIntroCreator/98a992a3c934a0247de3112028b847c56287eef5/public/Starjedi.ttf -------------------------------------------------------------------------------- /public/atat.css: -------------------------------------------------------------------------------- 1 | html, 2 | body { 3 | width: 100%; 4 | height: 100%; 5 | } 6 | body { 7 | overflow:hidden; 8 | background: black; 9 | } 10 | .at-at { 11 | position: absolute; 12 | left: 50%; 13 | top: 50%; 14 | margin: -135px 0 0 -120px; 15 | width: 250px; 16 | height: 114px; 17 | z-index: 95; 18 | } 19 | .at-at-content { 20 | position: absolute; 21 | left: 0; 22 | top: 0; 23 | width: 100%; 24 | height: 100%; 25 | z-index: 10; 26 | } 27 | .at-at-content .dark-bg { 28 | position: absolute; 29 | right: 50px; 30 | bottom: -10px; 31 | width: 145px; 32 | height: 104px; 33 | background: #666666; 34 | } 35 | .at-at-content .dark-bg:before, 36 | .at-at-content .dark-bg:after { 37 | content: ''; 38 | position: absolute; 39 | bottom: -22px; 40 | width: 60px; 41 | height: 60px; 42 | border-radius: 30px; 43 | background: #666666; 44 | } 45 | .at-at-content .dark-bg:before { 46 | left: -43px; 47 | } 48 | .at-at-content .dark-bg:after { 49 | right: -45px; 50 | } 51 | .at-at-content .dark-bg-right { 52 | position: absolute; 53 | left: 100%; 54 | bottom: 0; 55 | width: 50px; 56 | height: 50px; 57 | background: #666666; 58 | } 59 | .at-at-content .dark-bg-right:after { 60 | content: ''; 61 | position: absolute; 62 | right: -14px; 63 | top: 0; 64 | width: 0; 65 | height: 0; 66 | border-style: solid; 67 | border-width: 50px 14px 0 0; 68 | border-color: #666666 transparent transparent transparent; 69 | } 70 | .at-at-content .dark-bg-right:before { 71 | content: ''; 72 | position: absolute; 73 | right: -14px; 74 | top: -18px; 75 | width: 0; 76 | height: 0; 77 | border-style: solid; 78 | border-width: 18px 0 0 54px; 79 | border-color: transparent transparent transparent #666666; 80 | } 81 | .at-at-body { 82 | position: absolute; 83 | left: 75px; 84 | top: -16px; 85 | margin-top: 15px; 86 | width: 100px; 87 | height: 96px; 88 | background: white; 89 | z-index: 20; 90 | -webkit-animation: at-at-body 2.5s infinite; 91 | animation: at-at-body 2.5s infinite; 92 | -webkit-animation-timing-function: ease-out; 93 | animation-timing-function: ease-out; 94 | } 95 | .at-at-body-bg { 96 | position: absolute; 97 | left: 7px; 98 | bottom: 7px; 99 | padding: 4px 5px 0 65px; 100 | width: 86px; 101 | height: 32px; 102 | border-radius: 6px; 103 | background: #e2e2e2; 104 | *zoom: 1; 105 | } 106 | .at-at-body-bg:before, 107 | .at-at-body-bg:after { 108 | display: table; 109 | content: ""; 110 | } 111 | .at-at-body-bg:after { 112 | clear: both; 113 | } 114 | .at-at-body-bg .i { 115 | position: absolute; 116 | left: 6px; 117 | top: 12px; 118 | width: 4px; 119 | height: 8px; 120 | border-radius: 2px; 121 | background: #666666; 122 | } 123 | .at-at-body-bg > i { 124 | float: right; 125 | margin: 0 0 2px 0; 126 | width: 16px; 127 | height: 4px; 128 | border-radius: 2px; 129 | background: #666666; 130 | } 131 | .at-at-body-bg-first-block { 132 | position: absolute; 133 | left: 0; 134 | top: 0; 135 | width: 35%; 136 | height: 57px; 137 | border-right: 2px solid #e2e2e2; 138 | } 139 | .at-at-body-bg-first-block i { 140 | position: absolute; 141 | width: 4px; 142 | height: 8px; 143 | border-radius: 2px; 144 | background: #e2e2e2; 145 | } 146 | .at-at-body-bg-first-block .at-at-body-bg-first-block-item-1 { 147 | left: 9px; 148 | top: 10px; 149 | } 150 | .at-at-body-bg-first-block .at-at-body-bg-first-block-item-2 { 151 | left: 15px; 152 | top: 10px; 153 | } 154 | .at-at-body-bg-first-block .at-at-body-bg-first-block-item-3 { 155 | left: 15px; 156 | top: 34px; 157 | } 158 | .at-at-body-bg-second-block { 159 | position: absolute; 160 | left: 35%; 161 | top: 0; 162 | width: 30%; 163 | height: 57px; 164 | } 165 | .at-at-body-bg-second-block i { 166 | position: absolute; 167 | width: 4px; 168 | height: 8px; 169 | border-radius: 2px; 170 | background: #e2e2e2; 171 | } 172 | .at-at-body-bg-second-block .at-at-body-bg-second-block-item-1 { 173 | left: 18px; 174 | top: 10px; 175 | } 176 | .at-at-body-bg-second-block .at-at-body-bg-second-block-item-2 { 177 | left: 8px; 178 | top: 34px; 179 | } 180 | .at-at-body-bg-third-block { 181 | position: absolute; 182 | right: 0; 183 | top: 0; 184 | width: 35%; 185 | height: 57px; 186 | border-left: 2px solid #e2e2e2; 187 | } 188 | .at-at-body-bg-third-block i { 189 | position: absolute; 190 | width: 4px; 191 | height: 8px; 192 | border-radius: 2px; 193 | background: #e2e2e2; 194 | } 195 | .at-at-body-bg-third-block .at-at-body-bg-third-block-item-1 { 196 | left: 10px; 197 | top: 10px; 198 | } 199 | .at-at-body-bg-third-block .at-at-body-bg-third-block-item-2 { 200 | left: 16px; 201 | top: 10px; 202 | } 203 | .at-at-body-bg-third-block .at-at-body-bg-third-block-item-3 { 204 | left: 5px; 205 | top: 34px; 206 | } 207 | .at-at-head { 208 | position: absolute; 209 | right: 100%; 210 | bottom: -5px; 211 | margin: 0 88px 0 0; 212 | width: 64px; 213 | height: 38px; 214 | background: white; 215 | } 216 | .at-at-neck { 217 | position: absolute; 218 | left: 100%; 219 | bottom: 10px; 220 | width: 34px; 221 | height: 36px; 222 | } 223 | .at-at-neck .neck-bg { 224 | position: absolute; 225 | left: 0; 226 | top: 0; 227 | width: 100%; 228 | height: 100%; 229 | background: #666666; 230 | } 231 | .at-at-neck .neck-bg:after { 232 | content: ''; 233 | position: absolute; 234 | top: -15px; 235 | left: 0; 236 | width: 0; 237 | height: 0; 238 | border-style: solid; 239 | border-width: 0 0 15px 34px; 240 | border-color: transparent transparent #666666 transparent; 241 | } 242 | .at-at-neck .neck-ribs { 243 | position: absolute; 244 | left: 0; 245 | top: -2px; 246 | width: 100%; 247 | height: 40px; 248 | z-index: 2; 249 | overflow: hidden; 250 | *zoom: 1; 251 | } 252 | .at-at-neck .neck-ribs:before, 253 | .at-at-neck .neck-ribs:after { 254 | display: table; 255 | content: ""; 256 | } 257 | .at-at-neck .neck-ribs:after { 258 | clear: both; 259 | } 260 | .at-at-neck .neck-ribs i { 261 | float: left; 262 | margin: 0 0 0 2px; 263 | width: 6px; 264 | height: 100%; 265 | background: #e2e2e2; 266 | } 267 | .at-at-neck .neck-ribs .neck-cable-first { 268 | position: absolute; 269 | left: -6px; 270 | top: 0px; 271 | width: 8px; 272 | height: 200%; 273 | background: white; 274 | -webkit-transform: rotate(-20deg); 275 | transform: rotate(-20deg); 276 | -webkit-transform-origin: left top; 277 | transform-origin: left top; 278 | } 279 | .at-at-neck .neck-ribs .neck-cable-second { 280 | position: absolute; 281 | left: 16px; 282 | top: 0px; 283 | width: 8px; 284 | height: 200%; 285 | background: white; 286 | -webkit-transform: rotate(-20deg); 287 | transform: rotate(-20deg); 288 | -webkit-transform-origin: left top; 289 | transform-origin: left top; 290 | } 291 | .at-at-neck .neck-ribs .neck-cable-last { 292 | position: absolute; 293 | left: 32px; 294 | top: 0px; 295 | width: 8px; 296 | height: 200%; 297 | background: white; 298 | -webkit-transform: rotate(20deg); 299 | transform: rotate(20deg); 300 | -webkit-transform-origin: left top; 301 | transform-origin: left top; 302 | } 303 | .head-bg { 304 | position: absolute; 305 | left: 0; 306 | top: 0; 307 | width: 100%; 308 | height: 100%; 309 | z-index: 10; 310 | } 311 | .head-bg i { 312 | position: absolute; 313 | width: 4px; 314 | height: 8px; 315 | border-radius: 2px; 316 | background: #e2e2e2; 317 | } 318 | .head-bg .head-bg-first { 319 | right: 6px; 320 | top: -6px; 321 | } 322 | .head-bg .head-bg-second { 323 | right: 6px; 324 | bottom: 7px; 325 | } 326 | .head-snout { 327 | position: absolute; 328 | left: 5px; 329 | top: 3px; 330 | width: 34px; 331 | height: 34px; 332 | border-radius: 18px; 333 | border: 3px solid #e2e2e2; 334 | } 335 | .head-snout .in-head-snout { 336 | position: absolute; 337 | right: 0; 338 | top: 0; 339 | width: 14px; 340 | height: 14px; 341 | overflow: hidden; 342 | } 343 | .head-snout .in-head-snout:after { 344 | content: ''; 345 | position: absolute; 346 | right: 0; 347 | top: 0; 348 | border-radius: 20px; 349 | width: 20px; 350 | height: 20px; 351 | border: 4px solid #e2e2e2; 352 | } 353 | .head-snout .head-snout-gun { 354 | position: absolute; 355 | bottom: 2px; 356 | left: -8px; 357 | width: 16px; 358 | height: 4px; 359 | background: #e2e2e2; 360 | } 361 | .head-snout .head-snout-gun:before { 362 | content: ''; 363 | position: absolute; 364 | left: -8px; 365 | top: -2px; 366 | width: 8px; 367 | height: 8px; 368 | background: #e2e2e2; 369 | } 370 | .head-snout .head-snout-gun:after { 371 | content: ''; 372 | position: absolute; 373 | right: -12px; 374 | top: -2px; 375 | width: 12px; 376 | height: 8px; 377 | background: #e2e2e2; 378 | } 379 | .head { 380 | position: absolute; 381 | left: 0; 382 | top: 0; 383 | width: 100%; 384 | height: 100%; 385 | z-index: 5; 386 | } 387 | .head:after { 388 | content: ''; 389 | position: absolute; 390 | left: 0; 391 | top: -15px; 392 | width: 0; 393 | height: 0; 394 | border-style: solid; 395 | border-width: 0 0 15px 64px; 396 | border-color: transparent transparent white transparent; 397 | } 398 | .head:before { 399 | content: ''; 400 | position: absolute; 401 | top: 0; 402 | left: -16px; 403 | width: 0; 404 | height: 0; 405 | border-style: solid; 406 | border-width: 0 0 38px 16px; 407 | border-color: transparent transparent white transparent; 408 | } 409 | .head-chin { 410 | position: absolute; 411 | left: 5px; 412 | bottom: -9px; 413 | width: 18px; 414 | height: 9px; 415 | background: white; 416 | } 417 | .head-chin:before { 418 | content: ''; 419 | position: absolute; 420 | left: -6px; 421 | top: 0; 422 | width: 0; 423 | height: 0; 424 | border-style: solid; 425 | border-width: 0 6px 9px 0; 426 | border-color: transparent white transparent transparent; 427 | z-index: 5; 428 | } 429 | .head-chin:after { 430 | content: ''; 431 | position: absolute; 432 | right: -18px; 433 | top: 0; 434 | width: 0; 435 | height: 0; 436 | border-style: solid; 437 | border-width: 9px 18px 0 0; 438 | border-color: white transparent transparent transparent; 439 | } 440 | .head-chin .head-chin-bg-first { 441 | position: absolute; 442 | left: 5px; 443 | bottom: 0; 444 | width: 4px; 445 | height: 6px; 446 | border-radius: 2px 2px 0 0; 447 | background: #666666; 448 | } 449 | .head-chin .head-chin-bg-second { 450 | position: absolute; 451 | left: 11px; 452 | bottom: 0; 453 | width: 4px; 454 | height: 6px; 455 | border-radius: 2px 2px 0 0; 456 | background: #666666; 457 | } 458 | .head-gun { 459 | position: absolute; 460 | right: 20px; 461 | bottom: 0; 462 | width: 25px; 463 | height: 4px; 464 | background: #666666; 465 | z-index: 5; 466 | } 467 | .head-gun:after { 468 | content: ''; 469 | position: absolute; 470 | left: -8px; 471 | top: -2px; 472 | width: 8px; 473 | height: 8px; 474 | background: #5d5d5d; 475 | } 476 | .head-left-bg { 477 | position: absolute; 478 | left: -16px; 479 | top: 12px; 480 | width: 8px; 481 | height: 12px; 482 | background: #5d5d5d; 483 | -webkit-transform: rotate(22deg); 484 | transform: rotate(22deg); 485 | } 486 | .head-left-bg:after { 487 | content: ''; 488 | position: absolute; 489 | left: 0; 490 | top: -8px; 491 | width: 0; 492 | height: 0; 493 | border-style: solid; 494 | border-width: 0 0 8px 8px; 495 | border-color: transparent transparent #5d5d5d transparent; 496 | } 497 | .head-top-bg { 498 | position: absolute; 499 | left: 4px; 500 | top: -12px; 501 | display: block; 502 | width: 32px; 503 | height: 8px; 504 | overflow: hidden; 505 | z-index: 1; 506 | -webkit-transform: rotate(-14deg); 507 | transform: rotate(-14deg); 508 | } 509 | .head-top-bg:after { 510 | content: ''; 511 | position: absolute; 512 | bottom: 0; 513 | left: 0; 514 | width: 0; 515 | height: 0; 516 | border-style: solid; 517 | border-width: 0 16px 50px 16px; 518 | border-color: transparent transparent #5d5d5d transparent; 519 | } 520 | .at-at-body-left { 521 | position: absolute; 522 | right: 100%; 523 | top: 28px; 524 | margin: 0 4px 0 0; 525 | width: 50px; 526 | height: 68px; 527 | background: white; 528 | } 529 | .at-at-body-left:after { 530 | content: ''; 531 | position: absolute; 532 | left: 0; 533 | top: -16px; 534 | width: 0; 535 | height: 0; 536 | border-style: solid; 537 | border-width: 0 0 16px 50px; 538 | border-color: transparent transparent white transparent; 539 | } 540 | .at-at-body-left-bg { 541 | position: absolute; 542 | left: 16px; 543 | top: 16px; 544 | width: 20px; 545 | height: 24px; 546 | border-radius: 6px; 547 | background: #e2e2e2; 548 | } 549 | .at-at-body-left-bg-1, 550 | .at-at-body-left-bg-2, 551 | .at-at-body-left-bg-3, 552 | .at-at-body-left-bg-4, 553 | .at-at-body-left-bg-5 { 554 | position: absolute; 555 | width: 4px; 556 | height: 8px; 557 | border-radius: 2px; 558 | background: #e2e2e2; 559 | } 560 | .at-at-body-left-bg-1 { 561 | left: 21px; 562 | top: 6px; 563 | } 564 | .at-at-body-left-bg-2 { 565 | left: 27px; 566 | top: 6px; 567 | } 568 | .at-at-body-left-bg-3 { 569 | left: 39px; 570 | top: 6px; 571 | } 572 | .at-at-body-left-bg-4 { 573 | left: 7px; 574 | bottom: 7px; 575 | } 576 | .at-at-body-left-bg-5 { 577 | left: 13px; 578 | bottom: 7px; 579 | } 580 | .at-at-body-right { 581 | position: absolute; 582 | left: 100%; 583 | top: 31px; 584 | margin: 0 0 0 4px; 585 | width: 68px; 586 | height: 65px; 587 | background: white; 588 | } 589 | .at-at-body-right:after { 590 | content: ''; 591 | position: absolute; 592 | left: 0; 593 | top: -26px; 594 | width: 0; 595 | height: 0; 596 | border-style: solid; 597 | border-width: 26px 0 0 68px; 598 | border-color: transparent transparent transparent white; 599 | } 600 | .at-at-body-right-bg-1, 601 | .at-at-body-right-bg-2, 602 | .at-at-body-right-bg-3, 603 | .at-at-body-right-bg-4, 604 | .at-at-body-right-bg-5 { 605 | position: absolute; 606 | width: 4px; 607 | height: 8px; 608 | border-radius: 2px; 609 | background: #e2e2e2; 610 | } 611 | .at-at-body-right-bg-1 { 612 | left: 4px; 613 | top: 4px; 614 | } 615 | .at-at-body-right-bg-2 { 616 | left: 31px; 617 | top: 4px; 618 | } 619 | .at-at-body-right-bg-3 { 620 | left: 37px; 621 | top: 4px; 622 | } 623 | .at-at-body-right-bg-4 { 624 | left: 59px; 625 | top: 4px; 626 | } 627 | .at-at-body-right-bg-5 { 628 | left: 4px; 629 | bottom: 7px; 630 | } 631 | .at-at-body-right-bg { 632 | position: absolute; 633 | right: 5px; 634 | bottom: 7px; 635 | width: 32px; 636 | height: 32px; 637 | border-radius: 6px; 638 | background: #e2e2e2; 639 | } 640 | .at-at-body-right-bg:after { 641 | content: ''; 642 | position: absolute; 643 | right: 5px; 644 | top: 5px; 645 | width: 10px; 646 | height: 10px; 647 | background: #666666; 648 | } 649 | .at-at-body-bottom { 650 | position: absolute; 651 | right: 0; 652 | top: 100%; 653 | margin-top: 3px; 654 | width: 60px; 655 | height: 20px; 656 | background: white; 657 | } 658 | .at-at-body-bottom .body-bottom-left { 659 | position: absolute; 660 | left: -40px; 661 | top: 0; 662 | width: 40px; 663 | height: 20px; 664 | } 665 | .at-at-body-bottom .body-bottom-left:before { 666 | content: ''; 667 | position: absolute; 668 | left: 0; 669 | top: 0; 670 | width: 0; 671 | height: 0; 672 | border-style: solid; 673 | border-width: 0 48px 16px 0; 674 | border-color: transparent white transparent transparent; 675 | } 676 | .at-at-body-bottom .body-bottom-left:after { 677 | content: ''; 678 | position: absolute; 679 | left: 25px; 680 | bottom: 0; 681 | width: 0; 682 | height: 0; 683 | border-style: solid; 684 | border-width: 0 15px 12px 0; 685 | border-color: transparent white transparent transparent; 686 | } 687 | .at-at-body-bottom-bg { 688 | padding: 4px 0 4px 15px; 689 | width: 100%; 690 | height: 100%; 691 | *zoom: 1; 692 | } 693 | .at-at-body-bottom-bg:before, 694 | .at-at-body-bottom-bg:after { 695 | display: table; 696 | content: ""; 697 | } 698 | .at-at-body-bottom-bg:after { 699 | clear: both; 700 | } 701 | .at-at-body-bottom-bg i { 702 | float: left; 703 | margin: 0 3px 0 0; 704 | width: 4px; 705 | height: 12px; 706 | border-radius: 2px; 707 | background: #666666; 708 | } 709 | .leg-front-back { 710 | left: 30px; 711 | z-index: 5; 712 | -webkit-animation: legs 10s infinite; 713 | animation: legs 10s infinite; 714 | -webkit-animation-delay: 5s; 715 | animation-delay: 5s; 716 | } 717 | .leg-front-back .leg-first { 718 | -webkit-animation: leg-first 10s infinite; 719 | animation: leg-first 10s infinite; 720 | -webkit-animation-delay: 5s; 721 | animation-delay: 5s; 722 | } 723 | .leg-front-back .leg-second { 724 | -webkit-animation: leg-second 10s infinite; 725 | animation: leg-second 10s infinite; 726 | -webkit-animation-delay: 5s; 727 | animation-delay: 5s; 728 | } 729 | .leg-front-back .in-second-leg { 730 | -webkit-animation: leg-foot 10s infinite; 731 | animation: leg-foot 10s infinite; 732 | -webkit-animation-delay: 5s; 733 | animation-delay: 5s; 734 | } 735 | .leg-rear-back { 736 | left: 203px; 737 | z-index: 5; 738 | -webkit-animation: legs 10s infinite; 739 | animation: legs 10s infinite; 740 | -webkit-animation-delay: 7.5s; 741 | animation-delay: 7.5s; 742 | } 743 | .leg-rear-back .leg-first { 744 | -webkit-animation: leg-first 10s infinite; 745 | animation: leg-first 10s infinite; 746 | -webkit-animation-delay: 7.5s; 747 | animation-delay: 7.5s; 748 | } 749 | .leg-rear-back .leg-second { 750 | -webkit-animation: leg-second 10s infinite; 751 | animation: leg-second 10s infinite; 752 | -webkit-animation-delay: 7.5s; 753 | animation-delay: 7.5s; 754 | } 755 | .leg-rear-back .in-second-leg { 756 | -webkit-animation: leg-foot 10s infinite; 757 | animation: leg-foot 10s infinite; 758 | -webkit-animation-delay: 7.5s; 759 | animation-delay: 7.5s; 760 | } 761 | .leg-front { 762 | left: 30px; 763 | z-index: 15; 764 | -webkit-animation: legs 10s infinite; 765 | animation: legs 10s infinite; 766 | } 767 | .leg-front .leg-first { 768 | -webkit-animation: leg-first 10s infinite; 769 | animation: leg-first 10s infinite; 770 | } 771 | .leg-front .leg-second { 772 | -webkit-animation: leg-second 10s infinite; 773 | animation: leg-second 10s infinite; 774 | } 775 | .leg-front .in-second-leg { 776 | -webkit-animation: leg-foot 10s infinite; 777 | animation: leg-foot 10s infinite; 778 | } 779 | .leg-rear { 780 | left: 203px; 781 | z-index: 15; 782 | -webkit-animation: legs 10s infinite; 783 | animation: legs 10s infinite; 784 | -webkit-animation-delay: 2.5s; 785 | animation-delay: 2.5s; 786 | } 787 | .leg-rear .leg-first { 788 | -webkit-animation: leg-first 10s infinite; 789 | animation: leg-first 10s infinite; 790 | -webkit-animation-delay: 2.5s; 791 | animation-delay: 2.5s; 792 | } 793 | .leg-rear .leg-second { 794 | -webkit-animation: leg-second 10s infinite; 795 | animation: leg-second 10s infinite; 796 | -webkit-animation-delay: 2.5s; 797 | animation-delay: 2.5s; 798 | } 799 | .leg-rear .in-second-leg { 800 | -webkit-animation: leg-foot 10s infinite; 801 | animation: leg-foot 10s infinite; 802 | -webkit-animation-delay: 2.5s; 803 | animation-delay: 2.5s; 804 | } 805 | .leg-content { 806 | position: absolute; 807 | bottom: -15px; 808 | width: 40px; 809 | height: 40px; 810 | } 811 | .leg-content .leg-first-joint { 812 | position: absolute; 813 | left: -8px; 814 | bottom: -8px; 815 | border-radius: 20px; 816 | border: 4px solid white; 817 | width: 40px; 818 | height: 40px; 819 | background: #e2e2e2; 820 | z-index: 2; 821 | } 822 | .leg-content .leg-first-joint i { 823 | position: absolute; 824 | left: 0; 825 | top: 50%; 826 | margin-top: -5px; 827 | width: 100%; 828 | height: 10px; 829 | background: white; 830 | } 831 | .leg-content .leg-first-joint i:after { 832 | content: ''; 833 | position: absolute; 834 | left: 50%; 835 | top: 50%; 836 | margin: -2px 0 0 -4px; 837 | width: 8px; 838 | height: 4px; 839 | background: #e2e2e2; 840 | } 841 | .leg-content .leg-first { 842 | position: absolute; 843 | left: 0; 844 | top: 35px; 845 | width: 28px; 846 | height: 60px; 847 | background: #e2e2e2; 848 | -webkit-transform: rotate(-30deg); 849 | transform: rotate(-30deg); 850 | -webkit-transform-origin: left top; 851 | transform-origin: left top; 852 | } 853 | .leg-content .leg-first .leg-first-hr-a, 854 | .leg-content .leg-first .leg-first-hr-b { 855 | position: absolute; 856 | left: 8px; 857 | top: 0; 858 | width: 2px; 859 | height: 100%; 860 | background: #666666; 861 | } 862 | .leg-content .leg-first .leg-first-hr-b { 863 | left: auto; 864 | right: 8px; 865 | } 866 | .leg-content .in-first-leg { 867 | position: absolute; 868 | left: -6px; 869 | bottom: -6px; 870 | width: 40px; 871 | height: 40px; 872 | } 873 | .leg-content .leg-second-joint { 874 | position: absolute; 875 | left: 4px; 876 | top: 20px; 877 | border-radius: 20px; 878 | border: 4px solid white; 879 | width: 32px; 880 | height: 32px; 881 | background: #e2e2e2; 882 | z-index: 2; 883 | } 884 | .leg-content .leg-second-joint i { 885 | position: absolute; 886 | left: 0; 887 | top: 50%; 888 | margin-top: -3px; 889 | width: 100%; 890 | height: 6px; 891 | background: white; 892 | } 893 | .leg-content .leg-second { 894 | position: absolute; 895 | left: 6px; 896 | top: 30px; 897 | width: 28px; 898 | height: 50px; 899 | background: #e2e2e2; 900 | -webkit-transform-origin: left top; 901 | transform-origin: left top; 902 | } 903 | .leg-content .leg-second .leg-second-hr { 904 | position: absolute; 905 | left: 50%; 906 | top: 0; 907 | margin: 0 0 0 -3px; 908 | width: 6px; 909 | height: 60%; 910 | border-radius: 0 0 4px 4px; 911 | background: #666666; 912 | } 913 | .leg-content .in-second-leg { 914 | position: absolute; 915 | left: 0px; 916 | bottom: -15px; 917 | width: 40px; 918 | height: 40px; 919 | -webkit-transform: rotate(30deg); 920 | transform: rotate(30deg); 921 | -webkit-transform-origin: left top; 922 | transform-origin: left top; 923 | } 924 | .leg-content .foot-joint { 925 | position: absolute; 926 | left: 0px; 927 | top: 2px; 928 | width: 40px; 929 | height: 18px; 930 | overflow: hidden; 931 | z-index: 2; 932 | } 933 | .leg-content .foot-joint .foot-ankle { 934 | position: relative; 935 | display: block; 936 | width: 100%; 937 | height: 100%; 938 | } 939 | .leg-content .foot-joint .foot-ankle:before, 940 | .leg-content .foot-joint .foot-ankle:after { 941 | content: ''; 942 | position: absolute; 943 | bottom: 2px; 944 | width: 8px; 945 | height: 8px; 946 | border-radius: 4px; 947 | background: #e2e2e2; 948 | z-index: 4; 949 | } 950 | .leg-content .foot-joint .foot-ankle:before { 951 | left: 9px; 952 | } 953 | .leg-content .foot-joint .foot-ankle:after { 954 | right: 9px; 955 | } 956 | .leg-content .foot-joint .foot-ankle-bg { 957 | position: absolute; 958 | left: 0; 959 | bottom: 0; 960 | width: 0; 961 | height: 0; 962 | border-style: solid; 963 | border-width: 0 20px 100px 20px; 964 | border-color: transparent transparent white transparent; 965 | } 966 | .leg-content .foot-ankle-bottom { 967 | position: absolute; 968 | top: 18px; 969 | width: 40px; 970 | height: 8px; 971 | overflow: hidden; 972 | z-index: 2; 973 | } 974 | .leg-content .foot-ankle-bottom:after { 975 | content: ''; 976 | position: absolute; 977 | left: 0; 978 | top: 1px; 979 | width: 0; 980 | height: 0; 981 | border-style: solid; 982 | border-width: 40px 20px 0 20px; 983 | border-color: white transparent transparent transparent; 984 | } 985 | .leg-content .foot-ankle-space { 986 | position: absolute; 987 | left: -5px; 988 | top: 14px; 989 | width: 50px; 990 | height: 26px; 991 | border-radius: 20px 20px 0 0; 992 | border: 8px solid #e2e2e2; 993 | border-bottom: 3px solid #e2e2e2; 994 | } 995 | .leg-content .foot { 996 | position: absolute; 997 | left: 50%; 998 | top: 30px; 999 | margin: 0 0 0 -12px; 1000 | width: 24px; 1001 | height: 37px; 1002 | background: white; 1003 | } 1004 | .leg-content .foot-bottom { 1005 | position: absolute; 1006 | left: 50%; 1007 | bottom: 0; 1008 | margin: 0 0 0 -27px; 1009 | width: 54px; 1010 | height: 18px; 1011 | overflow: hidden; 1012 | z-index: 2; 1013 | } 1014 | .leg-content .foot-bottom:before { 1015 | content: ''; 1016 | position: absolute; 1017 | left: 0; 1018 | bottom: 0; 1019 | width: 0; 1020 | height: 0; 1021 | border-style: solid; 1022 | border-width: 0 27px 100px 27px; 1023 | border-color: transparent transparent white transparent; 1024 | } 1025 | .leg-content .foot-bottom:after { 1026 | content: ''; 1027 | position: absolute; 1028 | left: 50%; 1029 | bottom: 0; 1030 | margin: 0 0 0 -8px; 1031 | width: 16px; 1032 | height: 4px; 1033 | background: #e2e2e2; 1034 | } 1035 | .leg-content .foot-land { 1036 | position: absolute; 1037 | left: 50%; 1038 | bottom: 0; 1039 | margin: 0 0 0 -40px; 1040 | width: 80px; 1041 | height: 10px; 1042 | overflow: hidden; 1043 | } 1044 | .leg-content .foot-land:before { 1045 | content: ''; 1046 | position: absolute; 1047 | left: 50%; 1048 | bottom: 0; 1049 | margin: 0 0 0 -60px; 1050 | width: 0; 1051 | height: 0; 1052 | border-style: solid; 1053 | border-width: 0 60px 10px 60px; 1054 | border-color: transparent transparent #e2e2e2 transparent; 1055 | } 1056 | .leg-front-back .leg-first-joint, 1057 | .leg-rear-back .leg-first-joint { 1058 | border-color: #666666; 1059 | background: #666666; 1060 | } 1061 | .leg-front-back .leg-first-joint i, 1062 | .leg-rear-back .leg-first-joint i { 1063 | display: none; 1064 | } 1065 | .leg-front-back .leg-first, 1066 | .leg-rear-back .leg-first { 1067 | background: #666666; 1068 | } 1069 | .leg-front-back .leg-second-joint, 1070 | .leg-rear-back .leg-second-joint { 1071 | border-color: #9d9d9d; 1072 | background: #9d9d9d; 1073 | } 1074 | .leg-front-back .leg-second-joint i, 1075 | .leg-rear-back .leg-second-joint i { 1076 | display: none; 1077 | } 1078 | .leg-front-back .leg-second, 1079 | .leg-rear-back .leg-second { 1080 | background: #666666; 1081 | } 1082 | .leg-front-back .foot-joint .foot-ankle:before, 1083 | .leg-rear-back .foot-joint .foot-ankle:before, 1084 | .leg-front-back .foot-joint .foot-ankle:after, 1085 | .leg-rear-back .foot-joint .foot-ankle:after { 1086 | display: none; 1087 | } 1088 | .leg-front-back .foot-joint .foot-ankle-bg, 1089 | .leg-rear-back .foot-joint .foot-ankle-bg { 1090 | border-color: transparent transparent #9d9d9d transparent; 1091 | } 1092 | .leg-front-back .foot-ankle-bottom:after, 1093 | .leg-rear-back .foot-ankle-bottom:after { 1094 | border-color: #9d9d9d transparent transparent transparent; 1095 | } 1096 | .leg-front-back .foot-ankle-space, 1097 | .leg-rear-back .foot-ankle-space { 1098 | border: 8px solid #666666; 1099 | border-bottom: 3px solid #666666; 1100 | } 1101 | .leg-front-back .foot, 1102 | .leg-rear-back .foot { 1103 | background: #9d9d9d; 1104 | } 1105 | .leg-front-back .foot-bottom:before, 1106 | .leg-rear-back .foot-bottom:before { 1107 | border-color: transparent transparent #9d9d9d transparent; 1108 | } 1109 | .leg-front-back .foot-bottom:after, 1110 | .leg-rear-back .foot-bottom:after { 1111 | background: #666666; 1112 | } 1113 | .leg-front-back .foot-land:before, 1114 | .leg-rear-back .foot-land:before { 1115 | border-color: transparent transparent #666666 transparent; 1116 | } 1117 | @-webkit-keyframes at-at-body { 1118 | 0% { 1119 | margin-top: 15px; 1120 | } 1121 | 20% { 1122 | margin-top: 10px; 1123 | } 1124 | 75% { 1125 | margin-top: 10px; 1126 | } 1127 | 80% { 1128 | margin-top: 15px; 1129 | } 1130 | 100% { 1131 | margin-top: 15px; 1132 | } 1133 | } 1134 | @keyframes at-at-body { 1135 | 0% { 1136 | margin-top: 15px; 1137 | } 1138 | 20% { 1139 | margin-top: 10px; 1140 | } 1141 | 75% { 1142 | margin-top: 10px; 1143 | } 1144 | 80% { 1145 | margin-top: 15px; 1146 | } 1147 | 100% { 1148 | margin-top: 15px; 1149 | } 1150 | } 1151 | @-webkit-keyframes legs { 1152 | 0% { 1153 | bottom: -15px; 1154 | } 1155 | 10% { 1156 | bottom: -5px; 1157 | } 1158 | 15% { 1159 | bottom: -5px; 1160 | } 1161 | 25% { 1162 | bottom: -15px; 1163 | } 1164 | } 1165 | @keyframes legs { 1166 | 0% { 1167 | bottom: -15px; 1168 | } 1169 | 10% { 1170 | bottom: -5px; 1171 | } 1172 | 15% { 1173 | bottom: -5px; 1174 | } 1175 | 25% { 1176 | bottom: -15px; 1177 | } 1178 | } 1179 | @-webkit-keyframes leg-first { 1180 | 0% { 1181 | left: 0px; 1182 | -webkit-transform: rotate(-30deg); 1183 | transform: rotate(-30deg); 1184 | } 1185 | 15% { 1186 | left: 0; 1187 | top: 20px; 1188 | height: 50px; 1189 | -webkit-transform: rotate(40deg); 1190 | transform: rotate(40deg); 1191 | } 1192 | 30% { 1193 | left: 0; 1194 | top: 20px; 1195 | height: 60px; 1196 | -webkit-transform: rotate(40deg); 1197 | transform: rotate(40deg); 1198 | } 1199 | } 1200 | @keyframes leg-first { 1201 | 0% { 1202 | left: 0px; 1203 | -webkit-transform: rotate(-30deg); 1204 | transform: rotate(-30deg); 1205 | } 1206 | 15% { 1207 | left: 0; 1208 | top: 20px; 1209 | height: 50px; 1210 | -webkit-transform: rotate(40deg); 1211 | transform: rotate(40deg); 1212 | } 1213 | 30% { 1214 | left: 0; 1215 | top: 20px; 1216 | height: 60px; 1217 | -webkit-transform: rotate(40deg); 1218 | transform: rotate(40deg); 1219 | } 1220 | } 1221 | @-webkit-keyframes leg-second { 1222 | 0% { 1223 | top: 30px; 1224 | left: 6px; 1225 | height: 50px; 1226 | -webkit-transform: rotate(0deg); 1227 | transform: rotate(0deg); 1228 | } 1229 | 15% { 1230 | top: 50px; 1231 | left: 10px; 1232 | height: 50px; 1233 | -webkit-transform: rotate(-60deg); 1234 | transform: rotate(-60deg); 1235 | } 1236 | 25% { 1237 | top: 45px; 1238 | left: 5px; 1239 | height: 50px; 1240 | -webkit-transform: rotate(0deg); 1241 | transform: rotate(0deg); 1242 | } 1243 | 33% { 1244 | top: 45px; 1245 | left: 5px; 1246 | height: 50px; 1247 | -webkit-transform: rotate(0deg); 1248 | transform: rotate(0deg); 1249 | } 1250 | 50% { 1251 | height: 30px; 1252 | } 1253 | 60% { 1254 | height: 35px; 1255 | } 1256 | } 1257 | @keyframes leg-second { 1258 | 0% { 1259 | top: 30px; 1260 | left: 6px; 1261 | height: 50px; 1262 | -webkit-transform: rotate(0deg); 1263 | transform: rotate(0deg); 1264 | } 1265 | 15% { 1266 | top: 50px; 1267 | left: 10px; 1268 | height: 50px; 1269 | -webkit-transform: rotate(-60deg); 1270 | transform: rotate(-60deg); 1271 | } 1272 | 25% { 1273 | top: 45px; 1274 | left: 5px; 1275 | height: 50px; 1276 | -webkit-transform: rotate(0deg); 1277 | transform: rotate(0deg); 1278 | } 1279 | 33% { 1280 | top: 45px; 1281 | left: 5px; 1282 | height: 50px; 1283 | -webkit-transform: rotate(0deg); 1284 | transform: rotate(0deg); 1285 | } 1286 | 50% { 1287 | height: 30px; 1288 | } 1289 | 60% { 1290 | height: 35px; 1291 | } 1292 | } 1293 | @-webkit-keyframes leg-foot { 1294 | 0% { 1295 | left: 0px; 1296 | bottom: -15px; 1297 | -webkit-transform: rotate(30deg); 1298 | transform: rotate(30deg); 1299 | } 1300 | 15% { 1301 | left: -5px; 1302 | bottom: -25px; 1303 | -webkit-transform: rotate(10deg); 1304 | transform: rotate(10deg); 1305 | } 1306 | 20% { 1307 | left: -5px; 1308 | bottom: -40px; 1309 | -webkit-transform: rotate(-35deg); 1310 | transform: rotate(-35deg); 1311 | } 1312 | 25% { 1313 | left: -5px; 1314 | bottom: -40px; 1315 | -webkit-transform: rotate(-35deg); 1316 | transform: rotate(-35deg); 1317 | } 1318 | 33% { 1319 | left: -5px; 1320 | bottom: -40px; 1321 | -webkit-transform: rotate(-30deg); 1322 | transform: rotate(-30deg); 1323 | } 1324 | } 1325 | @keyframes leg-foot { 1326 | 0% { 1327 | left: 0px; 1328 | bottom: -15px; 1329 | -webkit-transform: rotate(30deg); 1330 | transform: rotate(30deg); 1331 | } 1332 | 15% { 1333 | left: -5px; 1334 | bottom: -25px; 1335 | -webkit-transform: rotate(10deg); 1336 | transform: rotate(10deg); 1337 | } 1338 | 20% { 1339 | left: -5px; 1340 | bottom: -40px; 1341 | -webkit-transform: rotate(-35deg); 1342 | transform: rotate(-35deg); 1343 | } 1344 | 25% { 1345 | left: -5px; 1346 | bottom: -40px; 1347 | -webkit-transform: rotate(-35deg); 1348 | transform: rotate(-35deg); 1349 | } 1350 | 33% { 1351 | left: -5px; 1352 | bottom: -40px; 1353 | -webkit-transform: rotate(-30deg); 1354 | transform: rotate(-30deg); 1355 | } 1356 | } 1357 | @media screen and (max-width: 1025px), screen and (max-height: 500px) { 1358 | .at-at { 1359 | margin-top: -120px; 1360 | -webkit-transform: scale(0.8); 1361 | transform: scale(0.8); 1362 | } 1363 | } 1364 | @media screen and (max-width: 740px), screen and (max-height: 500px) { 1365 | .at-at { 1366 | margin-top: -60px; 1367 | -webkit-transform: scale(0.5); 1368 | transform: scale(0.5); 1369 | } 1370 | } 1371 | .c { 1372 | *zoom: 1; 1373 | } 1374 | .c:before, 1375 | .c:after { 1376 | display: table; 1377 | content: ""; 1378 | } 1379 | .c:after { 1380 | clear: both; 1381 | } 1382 | -------------------------------------------------------------------------------- /public/atat.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 | 15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 | 24 | 25 |
26 |
27 |
28 | 29 | 30 | 31 |
32 |
33 | 34 | 35 |
36 |
37 | 38 | 39 | 40 | 41 | 42 |
43 |
44 |
45 | 46 | 47 | 48 | 49 | 50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 | 58 |
59 |
60 |
61 | 62 | 63 | 64 |
65 |
66 | 67 | 68 |
69 |
70 | 71 | 72 | 73 |
74 |
75 |
76 | 77 |
78 |
79 |
80 |
81 |
82 | 83 | 84 |
85 |
86 |
87 | 88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 | 106 | 107 |
108 |
109 |
110 | 111 |
112 |
113 |
114 |
115 |
116 |
117 |
118 |
119 |
120 |
121 |
122 |
123 |
124 |
125 |
126 |
127 |
128 | 129 | 130 |
131 |
132 |
133 | 134 |
135 |
136 |
137 |
138 |
139 |
140 |
141 |
142 |
143 |
144 |
145 |
146 |
147 |
148 |
149 |
150 |
151 | 152 | 153 |
154 |
155 |
156 | 157 |
158 |
159 |
160 |
161 |
162 |
163 |
164 |
165 |
166 |
167 |
168 |
169 |
170 |
171 |
172 | 173 | -------------------------------------------------------------------------------- /public/bb8.css: -------------------------------------------------------------------------------- 1 | 2 | .bb8 { 3 | width: 20em; 4 | height: 28em; 5 | margin-top: -14em; 6 | top: 50%; 7 | left: 50%; 8 | margin-left: -10em; 9 | position: absolute; 10 | -moz-animation: bump 0.1s infinite linear alternate; 11 | -webkit-animation: bump 0.1s infinite linear alternate; 12 | animation: bump 0.1s infinite linear alternate; 13 | } 14 | 15 | .bb8-top { 16 | height: 8em; 17 | width: 12em; 18 | margin: 0 auto; 19 | position: relative; 20 | } 21 | 22 | .bb8-head { 23 | background: #f3f2f2; 24 | height: 8em; 25 | width: 12em; 26 | z-index: 99; 27 | position: absolute; 28 | top: 1.6em; 29 | -moz-border-radius: 15em 15em 85% 85%; 30 | -webkit-border-radius: 15em; 31 | border-radius: 15em 15em 85% 85%; 32 | overflow: hidden; 33 | border-bottom: 0.5em solid #dbd7d7; 34 | } 35 | .bb8-head:after { 36 | background: transparent; 37 | border: 0.5em #959fa3 solid; 38 | width: 20em; 39 | height: 10em; 40 | left: 50%; 41 | position: absolute; 42 | bottom: .2em; 43 | margin-left: -10.25em; 44 | display: block; 45 | content: ""; 46 | -moz-border-radius: 85%; 47 | -webkit-border-radius: 85%; 48 | border-radius: 85%; 49 | } 50 | 51 | .orange-stripe { 52 | background: transparent; 53 | border: 0.5em #db7c2e solid; 54 | width: 20em; 55 | height: 10em; 56 | left: 50%; 57 | position: absolute; 58 | bottom: .6em; 59 | margin-left: -10.25em; 60 | -moz-border-radius: 85%; 61 | -webkit-border-radius: 85%; 62 | border-radius: 85%; 63 | } 64 | .orange-stripe:before { 65 | display: block; 66 | content: ""; 67 | background: #f3f2f2; 68 | position: absolute; 69 | width: 7em; 70 | height: 2em; 71 | bottom: -1em; 72 | left: 50%; 73 | margin-left: -2.5em; 74 | } 75 | 76 | .hat { 77 | background: #959fa3; 78 | height: 4em; 79 | width: 8em; 80 | position: absolute; 81 | top: -2em; 82 | right: 50%; 83 | margin-right: -4em; 84 | -moz-border-radius: 50%; 85 | -webkit-border-radius: 50%; 86 | border-radius: 50%; 87 | } 88 | .hat:before { 89 | background: #f3f2f2; 90 | height: 2em; 91 | width: 4em; 92 | content: ''; 93 | display: block; 94 | position: absolute; 95 | top: 1em; 96 | left: 50%; 97 | margin-left: -2em; 98 | -moz-border-radius: 50%; 99 | -webkit-border-radius: 50%; 100 | border-radius: 50%; 101 | } 102 | .hat:after { 103 | background: transparent; 104 | border: 0.5em #db7c2e solid; 105 | content: ''; 106 | display: block; 107 | position: absolute; 108 | z-index: 1; 109 | height: 4.5em; 110 | width: 9em; 111 | left: 50%; 112 | margin-left: -5em; 113 | top: 50%; 114 | margin-top: -2.75em; 115 | -moz-border-radius: 50%; 116 | -webkit-border-radius: 50%; 117 | border-radius: 50%; 118 | } 119 | 120 | .eye { 121 | height: 2.5em; 122 | width: 2.5em; 123 | background: #323c48; 124 | -moz-border-radius: 50%; 125 | -webkit-border-radius: 50%; 126 | border-radius: 50%; 127 | position: absolute; 128 | top: 50%; 129 | right: 12%; 130 | -moz-transform: scale(0.65); 131 | -ms-transform: scale(0.65); 132 | -webkit-transform: scale(0.65); 133 | transform: scale(0.65); 134 | } 135 | .eye:before { 136 | border: 0.2em #f3f2f2 solid; 137 | background: #08060d; 138 | height: 2em; 139 | width: 2em; 140 | position: absolute; 141 | content: ''; 142 | display: block; 143 | -moz-border-radius: 50%; 144 | -webkit-border-radius: 50%; 145 | border-radius: 50%; 146 | left: 50%; 147 | top: 50%; 148 | margin-left: -1em; 149 | margin-top: -1em; 150 | } 151 | .eye:after { 152 | background: white; 153 | height: .25em; 154 | width: .25em; 155 | left: 1em; 156 | bottom: .55em; 157 | content: ''; 158 | display: block; 159 | position: absolute; 160 | -moz-border-radius: 50%; 161 | -webkit-border-radius: 50%; 162 | border-radius: 50%; 163 | -webkit-filter: blur(0.15em); 164 | filter: blur(0.15em); 165 | } 166 | 167 | .eye-large { 168 | height: 3.5em; 169 | width: 3.5em; 170 | background: #323c48; 171 | border: 0.25em solid #f3f2f2; 172 | -moz-border-radius: 50%; 173 | -webkit-border-radius: 50%; 174 | border-radius: 50%; 175 | position: absolute; 176 | top: 25%; 177 | left: 50%; 178 | margin-left: -2em; 179 | z-index: 100; 180 | } 181 | .eye-large:before { 182 | background: #08060d; 183 | height: 2.75em; 184 | width: 2.75em; 185 | position: absolute; 186 | content: ''; 187 | display: block; 188 | -moz-border-radius: 50%; 189 | -webkit-border-radius: 50%; 190 | border-radius: 50%; 191 | left: 50%; 192 | top: 50%; 193 | margin-left: -1.375em; 194 | margin-top: -1.375em; 195 | } 196 | .eye-large:after { 197 | background: #ee2f22; 198 | height: 1em; 199 | width: 1em; 200 | left: 1em; 201 | bottom: 1em; 202 | content: ''; 203 | display: block; 204 | position: absolute; 205 | -moz-border-radius: 50%; 206 | -webkit-border-radius: 50%; 207 | border-radius: 50%; 208 | -webkit-filter: blur(0.15em); 209 | filter: blur(0.15em); 210 | opacity: 0.5; 211 | } 212 | 213 | .bb8-antena { 214 | background: #f3f2f2; 215 | width: .25em; 216 | height: 2em; 217 | -moz-border-radius: 100%; 218 | -webkit-border-radius: 100%; 219 | border-radius: 100%; 220 | position: absolute; 221 | top: 0; 222 | left: 50%; 223 | margin-left: -.5em; 224 | } 225 | 226 | .bb8-antena-2 { 227 | background: #f3f2f2; 228 | width: .25em; 229 | height: 5em; 230 | -moz-border-radius: 100%; 231 | -webkit-border-radius: 100%; 232 | border-radius: 100%; 233 | position: absolute; 234 | top: -2em; 235 | left: 50%; 236 | margin-left: .75em; 237 | overflow: hidden; 238 | } 239 | .bb8-antena-2:before { 240 | display: block; 241 | content: ''; 242 | width: 1em; 243 | background: #181e2c; 244 | height: 1em; 245 | } 246 | .bb8-antena-2:after { 247 | display: block; 248 | content: ''; 249 | width: 1em; 250 | background: #181e2c; 251 | height: .8em; 252 | position: absolute; 253 | bottom: .75em; 254 | } 255 | 256 | .bb8-body { 257 | background: #f3f2f2; 258 | width: 20em; 259 | height: 20em; 260 | overflow: hidden; 261 | position: relative; 262 | -moz-border-radius: 20em; 263 | -webkit-border-radius: 20em; 264 | border-radius: 20em; 265 | -moz-animation: spin 1s infinite linear; 266 | -webkit-animation: spin 1s infinite linear; 267 | animation: spin 1s infinite linear; 268 | } 269 | 270 | div[class^=panel-] { 271 | width: 11em; 272 | height: 11em; 273 | background: #db7c2e; 274 | -moz-border-radius: 11em; 275 | -webkit-border-radius: 11em; 276 | border-radius: 11em; 277 | position: absolute; 278 | } 279 | div[class^=panel-]:before { 280 | height: 8em; 281 | width: 8em; 282 | -moz-border-radius: 11em; 283 | -webkit-border-radius: 11em; 284 | border-radius: 11em; 285 | background: #f3f2f2; 286 | display: block; 287 | content: ''; 288 | left: 50%; 289 | top: 50%; 290 | margin-top: -4em; 291 | margin-left: -4em; 292 | position: absolute; 293 | } 294 | 295 | .panel-1 { 296 | top: -8em; 297 | left: -3em; 298 | } 299 | 300 | .panel-2 { 301 | bottom: -2em; 302 | left: -8em; 303 | } 304 | 305 | .panel-3 { 306 | right: 1em; 307 | bottom: -8em; 308 | -moz-transform: rotate(-20deg); 309 | -ms-transform: rotate(-20deg); 310 | -webkit-transform: rotate(-20deg); 311 | transform: rotate(-20deg); 312 | } 313 | 314 | .panel-4 { 315 | right: -7em; 316 | top: -1em; 317 | -moz-transform: rotate(20deg); 318 | -ms-transform: rotate(20deg); 319 | -webkit-transform: rotate(20deg); 320 | transform: rotate(20deg); 321 | } 322 | 323 | .panel-5 { 324 | top: 4em; 325 | left: 4em; 326 | -moz-transform: rotate(20deg); 327 | -ms-transform: rotate(20deg); 328 | -webkit-transform: rotate(20deg); 329 | transform: rotate(20deg); 330 | } 331 | 332 | div[class^=inset-] { 333 | width: 2em; 334 | height: 8em; 335 | position: absolute; 336 | left: 50%; 337 | top: 50%; 338 | margin-top: -4em; 339 | margin-left: -1em; 340 | } 341 | div[class^=inset-]:before { 342 | position: absolute; 343 | top: 0; 344 | display: block; 345 | content: ''; 346 | border-top: 2em solid #db7c2e; 347 | border-left: .5em solid transparent; 348 | border-right: .5em solid transparent; 349 | height: 0; 350 | width: 1em; 351 | } 352 | div[class^=inset-]:after { 353 | position: absolute; 354 | bottom: 0; 355 | display: block; 356 | content: ''; 357 | border-bottom: 2em solid #db7c2e; 358 | border-left: .5em solid transparent; 359 | border-right: .5em solid transparent; 360 | height: 0; 361 | width: 1em; 362 | } 363 | 364 | .plating { 365 | background: #959fa3; 366 | height: 3.5em; 367 | width: 3.5em; 368 | position: absolute; 369 | left: 50%; 370 | top: 50%; 371 | margin-left: -1.75em; 372 | margin-top: -1.75em; 373 | overflow: hidden; 374 | -moz-border-radius: 2em; 375 | -webkit-border-radius: 2em; 376 | border-radius: 2em; 377 | } 378 | .plating:before { 379 | height: 6em; 380 | width: 2.7em; 381 | content: ''; 382 | display: block; 383 | position: absolute; 384 | top: -1em; 385 | right: -1.3em; 386 | background: #f3f2f2; 387 | } 388 | 389 | .inset-1 { 390 | -moz-transform: rotate(90deg); 391 | -ms-transform: rotate(90deg); 392 | -webkit-transform: rotate(90deg); 393 | transform: rotate(90deg); 394 | } 395 | 396 | @-moz-keyframes spin { 397 | 100% { 398 | -moz-transform: rotate(360deg); 399 | transform: rotate(360deg); 400 | } 401 | } 402 | @-webkit-keyframes spin { 403 | 100% { 404 | -webkit-transform: rotate(360deg); 405 | transform: rotate(360deg); 406 | } 407 | } 408 | @keyframes spin { 409 | 100% { 410 | -moz-transform: rotate(360deg); 411 | -ms-transform: rotate(360deg); 412 | -webkit-transform: rotate(360deg); 413 | transform: rotate(360deg); 414 | } 415 | } 416 | @-moz-keyframes bump { 417 | 100% { 418 | margin-top: -13.8em; 419 | } 420 | } 421 | @-webkit-keyframes bump { 422 | 100% { 423 | margin-top: -13.8em; 424 | } 425 | } 426 | @keyframes bump { 427 | 100% { 428 | margin-top: -13.8em; 429 | } 430 | } 431 | -------------------------------------------------------------------------------- /public/bg-stars.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BrOrlandi/StarWarsIntroCreator/98a992a3c934a0247de3112028b847c56287eef5/public/bg-stars.png -------------------------------------------------------------------------------- /public/bitcoin.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /public/bitcoinEther.js: -------------------------------------------------------------------------------- 1 | document.querySelector('#btcether').addEventListener("click", function(e) { 2 | e.preventDefault(); 3 | swal({ 4 | title: '

Donate Bitcoin and Ether

', 5 | html: true, 6 | text:'

You can donate Bitcoins and Ether to the following Wallets. Please send us an email to tell us about your donation.

'+ 7 | '

Bitcoin: 1KAYmrrYYobx2k6p5zxkziGeggbXqPdYJ6

' + 8 | '

Ether: 0xe5c26Be15597B3b03519f2517592AE2dBdFf4E63

', 9 | allowOutsideClick: false, 10 | }); 11 | }); -------------------------------------------------------------------------------- /public/createdIntros.js: -------------------------------------------------------------------------------- 1 | function createdIntros(){ 2 | var source = '{{#if intros.length}}' + 3 | '
'+ 4 | '{{#each intros}}'+ 5 | '
'+ 6 | '
'+ 7 | ''+ 10 | '
'+ 11 | '{{this.title}}'+ 12 | '
'+ 13 | '{{/each}}'+ 14 | '
'+ 15 | '{{/if}}'; 16 | this.template = Handlebars.compile(source); 17 | 18 | this.element = $('#createdIntros'); 19 | 20 | this.remove = function(index){ 21 | var that = this; 22 | swal({ 23 | html: true, 24 | title: '

remove intro

', 25 | text: '

'+ 26 | 'This will not remove the intro from the database. Are you sure you want to remove the intro from this browser?
'+ 27 | '

', 28 | showCancelButton: true, 29 | confirmButtonText: "Yes", 30 | cancelButtonText: "No", 31 | animation: "slide-from-top" 32 | },function(confirm){ 33 | if(confirm){ 34 | var intros = JSON.parse(localStorage.StarWarsIntros); 35 | intros.splice(index,1); 36 | localStorage.StarWarsIntros = JSON.stringify(intros); 37 | that.load(); 38 | } 39 | }); 40 | } 41 | 42 | this.load = function(){ 43 | var intros = localStorage.StarWarsIntros ? JSON.parse(localStorage.StarWarsIntros) : []; 44 | 45 | var html = $(this.template({intros:intros})); 46 | var that = this; 47 | html.find('.removeButton').click(function(e){ 48 | that.remove(e.target.dataset.id); 49 | }); 50 | this.element.html(html); 51 | }; 52 | 53 | var getTitle = function(intro){ 54 | var see = ['title','episode','logo','text']; 55 | for(var i=0;i 2 |
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 28 | -------------------------------------------------------------------------------- /public/errorFunction.js: -------------------------------------------------------------------------------- 1 | function ajaxErrorFunction(bodyMessage){ 2 | var body = encodeURI("Hi, the website didn't work as expected. \n\n"+bodyMessage); 3 | return function (){ 4 | swal({ 5 | html: true, 6 | title: '

an error has occured

', 7 | text: '

Something went wrong! Sorry about that! Please try again, if this error repeats please contact us: : '+ 8 | '
brorlandi@gmail.com
nihey.takizawa@gmail.com

', 9 | type: "error", 10 | confirmButtonText: "Ok" 11 | }); 12 | } 13 | } -------------------------------------------------------------------------------- /public/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BrOrlandi/StarWarsIntroCreator/98a992a3c934a0247de3112028b847c56287eef5/public/favicon.png -------------------------------------------------------------------------------- /public/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Star Wars Intro Creator 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 |
39 | 46 | 47 |
48 |
49 |
50 |
51 | 55 | 91 |
92 |
93 |
94 |

Star wars
intro CReator

95 | 96 | 99 | 102 | 103 | 104 | 109 | 110 |
111 | 112 | 113 | 114 |

115 | 116 | 119 |
120 | and request your video to download 121 |
122 |
123 | 124 |
125 | 126 |
127 | 128 |
129 | 130 |
131 |
132 |
133 |
134 |
135 | 136 |
137 |
138 |

139 |

140 |

141 |

142 |
143 |
144 |
145 |
146 | 147 |
148 | 155 |
156 |
157 |
158 |
159 | 160 |
161 | 194 |
195 | Stranger Things Intro Creator 196 | Westworld Intro Creator 197 | Share your Story with us
198 | Terms of Service 199 |
200 | 203 | 230 | 231 | 232 | 233 | 234 | 235 | 236 | 237 | 238 | 246 | 263 | 264 | 274 | 275 | 276 | -------------------------------------------------------------------------------- /public/intro.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BrOrlandi/StarWarsIntroCreator/98a992a3c934a0247de3112028b847c56287eef5/public/intro.mp3 -------------------------------------------------------------------------------- /public/intro.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BrOrlandi/StarWarsIntroCreator/98a992a3c934a0247de3112028b847c56287eef5/public/intro.ogg -------------------------------------------------------------------------------- /public/logo.svg: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | 14 | 15 | 16 | 40 | 41 | 42 | 52 | 53 | 54 | 64 | 65 | 66 | 72 | 73 | 74 | 86 | 87 | 88 | 89 | -------------------------------------------------------------------------------- /public/main.js: -------------------------------------------------------------------------------- 1 | // sweet alerts config 2 | swal.setDefaults({ 3 | customClass: 'star-wars-alert', 4 | }); 5 | 6 | var OpeningKey = null; 7 | 8 | var defaultOpening = null; // to check if user not edited the default opening 9 | 10 | // make audio load on mobile devices 11 | var audio = document.getElementsByTagName('audio')[0]; 12 | var audioIsLoaded = false; 13 | var loadData = function () { 14 | if(!audioIsLoaded){ 15 | audio.load(); 16 | audioIsLoaded = true; 17 | } 18 | }; 19 | document.body.addEventListener('touchstart', loadData); 20 | 21 | 22 | // prevent arrow scrolling in firefox 23 | window.addEventListener("keydown", function(e) { 24 | // space and arrow keys 25 | var type = document.activeElement.type || ''; 26 | if(!type.startsWith('text')){ 27 | if([32, 37, 38, 39, 40].indexOf(e.keyCode) > -1) { 28 | e.preventDefault(); 29 | } 30 | } 31 | }, false); 32 | 33 | var notPlayed = true; 34 | var showFooter = true; 35 | window.setLoading = function (){ 36 | $('#loader').show(); 37 | $('#form-starwars').hide(); 38 | } 39 | 40 | window.unsetLoading = function (){ 41 | $('#loader').hide(); 42 | $('#form-starwars').show(); 43 | } 44 | 45 | setLoading(); 46 | 47 | $('#form-starwars').submit(function(event) { 48 | event.preventDefault(); 49 | var opening = getOpeningFormValues(); 50 | var before = StarWars.opening; 51 | if(!isOpeningsDifferents(opening, before)){ // User replay the same intro without modification, doesn't need to create a new one 52 | var hashbefore = location.hash; 53 | var hashnow = '!/'+OpeningKey; 54 | location.hash = hashnow; 55 | if(hashbefore !== hashnow){ // if user is in edit form but not in /edit url, force hashchange because the hash will be the same. 56 | window.dispatchEvent(new Event('hashchange')); 57 | } 58 | return; 59 | } 60 | 61 | if(!isOpeningsDifferents(opening,defaultOpening)){ 62 | setLoading(); 63 | location.hash = '!/Episode8'; 64 | return; 65 | } 66 | 67 | var aLogo = opening.logo.split('\n'); 68 | if(aLogo.length > 2){ 69 | sweetAlert("Oops...", "Logo can't have more than 2 lines.", "warning"); 70 | return; 71 | } 72 | var aIntro = opening.intro.split('\n'); 73 | if(aIntro.length > 2){ 74 | sweetAlert("Oops...", "Intro text can't have more than 2 lines.", "warning"); 75 | return; 76 | } 77 | 78 | 79 | for(var key in opening){ 80 | if(opening[key] == "string" && opening[key].indexOf("??") > -1){ 81 | sweetAlert("Oops...", "Your text can't contain the sequence \"??\", please fix it and submit again.", "error"); 82 | return; 83 | } 84 | } 85 | 86 | setLoading(); 87 | $.ajax({ 88 | url: "https://starwarsopeninga.firebaseio.com/openings.json", 89 | method: "POST", 90 | data: JSON.stringify(opening), 91 | dataType: "json", 92 | success: function(data){ 93 | var key = 'A'+data.name.substring(1); 94 | CreatedIntros.save(key,opening); 95 | location.hash = '!/'+key; 96 | }, 97 | error: ajaxErrorFunction('Error when creating the intro.\n\n'+JSON.stringify(opening)) 98 | }); 99 | }); 100 | 101 | $(window).on('hashchange', function() { 102 | 103 | var urlByKey = function(key){ 104 | var code = key.charAt(0); 105 | if(code === "A"){ 106 | key = key.substr(1); 107 | return 'https://starwarsopeninga.firebaseio.com/openings/-'+key+'.json'; 108 | }else{ 109 | return 'https://starwarsopening.firebaseio.com/openings/-'+key+'.json'; 110 | } 111 | }; 112 | 113 | 114 | $("#playBut").remove(); 115 | var params = location.hash.replace('#!/', '').split('/'); 116 | var key = params[0]; 117 | var edit = false; 118 | try{ 119 | edit = params[1] === "edit"; 120 | }catch(e){} 121 | $('body').removeClass('running'); 122 | if(key != ""){ 123 | $('[name=custom]').val(key); 124 | try{ 125 | key = parseSpecialKeys(key); 126 | var url = urlByKey(key); 127 | $.ajax({ 128 | url: url, 129 | success: function(opening) { 130 | if(opening == null){ 131 | sweetAlert("Oops...", "Introduction not found!", "error"); 132 | return; 133 | } 134 | StarWars.opening = opening; 135 | OpeningKey = key; 136 | $("#videoButton").show(); 137 | 138 | var intro = opening.intro.replace(//g,">"); 140 | intro = intro.replace(/\n/g,"
"); 141 | StarWars.animation.find("#intro").html(intro); 142 | StarWars.animation.find("#episode").text(opening.episode); 143 | 144 | var title = StarWars.animation.find("#title") 145 | if(checkCompatibleSWFont(opening.title)){ 146 | title.addClass('SWFont'); 147 | } 148 | title.text(opening.title); 149 | 150 | var ps = opening.text.split('\n'); 151 | 152 | var div = StarWars.animation.find("#text"); 153 | div.text(''); 154 | for(var i in ps){ 155 | div.append($('

').text(ps[i])); 156 | } 157 | 158 | div.css('text-align',opening.center ? 'center':''); 159 | 160 | $('#logosvg',StarWars.animation).css('width',$(window).width()+'px'); // set width of the logo 161 | $('#logoimg',StarWars.animation).css('width',$(window).width()+'px'); 162 | 163 | var logoText = opening.logo ? opening.logo : "star\nwars"; 164 | var aLogo = logoText.split('\n'); // breaks logo text in 2 lines 165 | var logo1 = aLogo[0]; 166 | var logo2 = aLogo[1] || ""; 167 | if(logoText.toLowerCase() != "star\nwars"){ 168 | var texts = $('#logosvg text',StarWars.animation); 169 | texts[0].textContent = logo1; 170 | texts[1].textContent = logo2; 171 | 172 | // calculate the svg viewBox using the number of characters of the longest world in the logo. 173 | var logosize = logo1.length > logo2.length ? logo1 : logo2; 174 | var vbox = '0 0 '+logosize.length*200+' 500'; 175 | $('#logosvg',StarWars.animation).each(function () {$(this)[0].setAttribute('viewBox', vbox) }); 176 | $('#logosvg',StarWars.animation).show(); 177 | $('#logoimg',StarWars.animation).hide(); 178 | }else{ // if the logo text is "Star Wars" set to the logo SVG. 179 | $('#logosvg',StarWars.animation).hide(); 180 | $('#logoimg',StarWars.animation).show(); 181 | } 182 | 183 | var play = function(){ 184 | $.when(StarWars.audioDefer).then(function(){ 185 | var buffered = StarWars.audio.buffered.end(StarWars.audio.buffered.length-1); 186 | if(buffered == 0 && !audioIsLoaded){ 187 | unsetLoading(); 188 | playbutton = $('

'); 189 | $('body').append(playbutton); 190 | $('#playBut',playbutton).click(function(){ 191 | setLoading(); 192 | playbutton.remove(); 193 | }); 194 | StarWars.audio.oncanplaythrough = function () { 195 | notPlayed = false; 196 | StarWars.play(); 197 | }; 198 | }else{ 199 | notPlayed = false; 200 | StarWars.play(); 201 | } 202 | if(edit){ 203 | StarWars.audio.currentTime = 97; 204 | $('#form-starwars').show(); 205 | } 206 | }); 207 | }; 208 | 209 | if(document.hasFocus()){ // play if has focus 210 | play(); 211 | }else{ 212 | $(window).focus(function(){ // play when got focus 213 | if(notPlayed){ 214 | play(); 215 | } 216 | }); 217 | } 218 | 219 | }, 220 | error: ajaxErrorFunction('Error when try to load the intro '+key) 221 | }); 222 | }catch(error){ 223 | location.hash = ""; 224 | setLoading(); 225 | } 226 | }else{ 227 | if(!notPlayed){ 228 | StarWars.reset(); 229 | StarWars.resetAudio(); 230 | }else{ 231 | unsetLoading(); 232 | } 233 | 234 | } 235 | ga('send', 'pageview', { 236 | 'page': location.pathname + location.search + location.hash 237 | }); 238 | }); 239 | 240 | function getInternetExplorerVersion() 241 | { 242 | var rv = -1; 243 | if (navigator.appName == 'Microsoft Internet Explorer') 244 | { 245 | var ua = navigator.userAgent; 246 | var re = new RegExp("MSIE ([0-9]{1,}[\.0-9]{0,})"); 247 | if (re.exec(ua) != null) 248 | rv = parseFloat( RegExp.$1 ); 249 | } 250 | else if (navigator.appName == 'Netscape') 251 | { 252 | var ua = navigator.userAgent; 253 | var re = new RegExp("Trident/.*rv:([0-9]{1,}[\.0-9]{0,})"); 254 | if (re.exec(ua) != null) 255 | rv = parseFloat( RegExp.$1 ); 256 | } 257 | return rv; 258 | } 259 | 260 | $(document).ready(function() { 261 | if(getInternetExplorerVersion() !== -1){ 262 | sweetAlert("Internet Explorer Detected", "This website is not compatible with Internet Explorer, please use Chrome. Sorry for the inconvenience.", "error"); 263 | unsetLoading(); 264 | return; 265 | } 266 | defaultOpening = getOpeningFormValues(); // get the default opening from the default form values 267 | window.dispatchEvent(new Event('hashchange')); 268 | 269 | $('#f-center').change(function(){ 270 | var center = $(this).is(':checked'); 271 | $('#f-text').css('text-align', center == true ? 'center' : 'initial'); 272 | }); 273 | }); 274 | 275 | var calcTime = function(queue){ 276 | var minutes = (queue+1)*30; 277 | var hours = Math.floor(minutes/60); 278 | var days = Math.floor(hours/24); 279 | var time = ""; 280 | if(days > 0){ 281 | time += days + " days"; 282 | } 283 | if(days < 3){ 284 | hours = hours%24; 285 | minutes = minutes%60; 286 | if(hours > 0){ 287 | time += " " +hours + " hours"; 288 | } 289 | if(minutes > 0){ 290 | time += " " +minutes + " minutes"; 291 | } 292 | } 293 | return time; 294 | }; 295 | 296 | function validateEmail(email) { 297 | var re = /^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/; 298 | return re.test(email); 299 | } 300 | 301 | var termsOfServiceText = 'By using this website you are agreeing to our Terms of Service.'; 302 | 303 | var requestVideo = function(donate, email){ 304 | if(email === false) return false; 305 | if (!validateEmail(email)) { 306 | swal.showInputError("You need to type an e-mail!"); 307 | return false; 308 | } 309 | 310 | var url = "https://endor.nihey.org/request?code="+ OpeningKey +"&email=" + email; 311 | $.ajax({ 312 | url: url, 313 | type: 'GET', 314 | crossDomain: true, 315 | success: function(data){ 316 | var queue = data.queue; 317 | swal({ 318 | html: true, 319 | title: '

video request sent

', 320 | text:'

'+ 321 | 'Your video has been queued. Your current position on the queue is '+ 322 | (queue+1) + ', which will take up to '+ calcTime(queue) +'.
'+ 323 | 'The link to download the video will be sent to the e-mail:
'+ 324 | '

'+email+''+ 325 | ( 326 | donate ? 327 | ( 328 | '

But as you donated, we will bump you up on the queue.'+ 329 | ' Thank you so much for supporting us! You should receive the confirmation email within a few minutes.'+ 330 | '

' 331 | ) : 332 | '' 333 | ) + 334 | '

'+termsOfServiceText+'

' 335 | }); 336 | }, 337 | error: ajaxErrorFunction('Error when request video download.') 338 | }); 339 | 340 | }; 341 | 342 | $("#videoButton").click(function(){ 343 | var now = getOpeningFormValues(); 344 | var before = StarWars.opening; 345 | 346 | if(isOpeningsDifferents(now, before)){ // prevent user to request download without save the edited intro 347 | swal({ 348 | html: true, 349 | title: '

Text modified

', 350 | text: '

'+ 351 | 'You have changed some of the text inputs. You need to play the new intro to save and request a download.', 352 | showCancelButton: true, 353 | confirmButtonText: "Ok, play it!", 354 | confirmButtonColor: "#807300", 355 | animation: "slide-from-top" 356 | },function(ok){ 357 | if(ok){ 358 | $('#form-starwars').submit(); 359 | } 360 | }); 361 | return; 362 | } 363 | // swal({ 364 | // html: true, 365 | // title: '

loading

', 366 | // text: '', 367 | // animation: "slide-from-top", 368 | // showConfirmButton: false 369 | // }); 370 | $.ajax({ 371 | url: "https://endor.nihey.org/status?code="+OpeningKey, 372 | crossDomain: true, 373 | success: function(data){ 374 | var queue = data.queue; 375 | if(data.url){ 376 | swal({ 377 | html: true, 378 | title: '

Download

', 379 | text: '

'+ 380 | 'This video has already been generated, click the link below to download.

'+ 381 | ''+data.url+'

', 382 | }); 383 | }else{ 384 | swal({ 385 | html: true, 386 | title: '

Donate and Download

', 387 | text: '

'+ 388 | 'We want to provide videos for free, but we have to use a server to render it, which costs money.
'+ 389 | 'There are '+(queue+1)+' videos in front of you and it will take '+calcTime(queue)+' to be processed.

'+ 390 | 'Can\'t wait for it? Donate at least 5 US Dollars, you will jump the queue and your video will be ready in few hours.
'+ 391 | 'The video will be rendered in HD quality and MP4 file. To see a sample video click '+ 392 | 'here.'+ 393 | 'Donate at least 10 US Dollars and you will get the video in Full HD resolution (1920x1080)

'+ 394 | 'Attention! Make sure there are no typos in your text, there will be no correction after the video rendering.
'+ 395 | termsOfServiceText+ 396 | '

'+ 397 | '', 398 | showCancelButton: true, 399 | confirmButtonText: "Yes, donate!", 400 | confirmButtonColor: "#807300", 401 | cancelButtonText: "No, I'll get in the queue!", 402 | closeOnConfirm: false, 403 | closeOnCancel: false, 404 | animation: false 405 | },function(donate){ 406 | 407 | var generateAlert = { 408 | html: true, 409 | title: '

Generate video

', 410 | text: '

'+ 411 | 'Type your email below and you will receive a message with the URL to download your video when it\'s ready. We promise not to send spam!'+ 412 | '

' + (donate ? [ 413 | '

', 414 | ' Please, use the same email from you PayPal account.', 415 | " If you want to receive in another e-mail too, click on download button again and add more e-mails. You don't need to donate again.", 416 | '

', 417 | ' Attention! Make sure there are no typos in your text, you will need to request a new video download and donate again.

', 418 | ' '+termsOfServiceText, 419 | '

', 420 | ].join('') : ''), 421 | type: 'input', 422 | showCancelButton: true, 423 | inputPlaceholder: "Your e-mail...", 424 | closeOnConfirm: false, 425 | showLoaderOnConfirm: true, 426 | }; 427 | 428 | if(donate){ 429 | generateAlert.title = '

Donate

'; 430 | generateAlert.text = 'Click on the button below:' 431 | +'
'+generateAlert.text; 432 | } 433 | swal(generateAlert, requestVideo.bind(window, donate)); 434 | }); 435 | } 436 | }, 437 | error: ajaxErrorFunction('Error when request video information to download.') 438 | }); 439 | 440 | }); 441 | 442 | function getOpeningFormValues(){ // read the opening from form and create the object 443 | return { 444 | intro: $("#f-intro").val(), 445 | logo: $("#f-logo").val(), 446 | episode: $("#f-episode").val(), 447 | title: $("#f-title").val(), 448 | text: $("#f-text").val(), 449 | center: $("#f-center").prop('checked') 450 | }; 451 | }; 452 | 453 | function isOpeningsDifferents(a,b){ // compare two openings texts to see if they are different 454 | var changes =[]; 455 | if(a === null || b == null ){ 456 | return true; 457 | } 458 | changes.push(a.intro !== b.intro); 459 | changes.push(a.logo !== b.logo); 460 | changes.push(a.episode !== b.episode); 461 | changes.push(a.title !== b.title); 462 | changes.push(a.text !== b.text); 463 | changes.push(a.center !== b.center && b.center !== undefined); 464 | 465 | return changes.reduce(function(c,e){ 466 | return c || e; 467 | },false); 468 | }; 469 | 470 | function parseSpecialKeys(key){ 471 | switch (key) { 472 | case "Episode7": // Episode7 is a special key for URL, it plays the Episode 7 opening 473 | return "AKcKeYMPogupSU_r1I_g"; 474 | case "Episode8": 475 | return "AL6yNfOxCGkHKBUi54xp"; 476 | // TODO other eps 477 | default: 478 | return key; 479 | } 480 | } 481 | 482 | function checkCompatibleSWFont(title){ 483 | var supportedChars = " qwertyuiopasdfghjklzxcvbnm0123456789!$".split(''); // all supported supported chars 484 | var unique = title.toLowerCase().split('').filter(function(item, i, ar){ return ar.indexOf(item) === i; }); // get unique characters from the input string 485 | for(var i=0;i -1; 11 | } 12 | 13 | function redirectToNewWebsite(){ 14 | location.assign('https://starwarsintrocreator.kassellabs.io/?ref=redirect'+location.hash); 15 | } 16 | 17 | function randomShouldRedirect() { 18 | // return Math.random() < redirectPercentage; 19 | return true; 20 | } 21 | 22 | $(document).ready(function() { 23 | var redirectInfoFromStorage = localStorage.KasselLabsRedirect; 24 | redirectInfoFromStorage = redirectInfoFromStorage && JSON.parse(redirectInfoFromStorage); 25 | 26 | checkRedirect(redirectInfoFromStorage); 27 | }); 28 | 29 | function checkRedirect(redirectInfo) { 30 | if (!redirectInfo || (redirectInfo.stage < stageNow && !redirectInfo.redirect)) { 31 | const shouldRedirect = randomShouldRedirect(); 32 | var redirect = false; 33 | if (shouldRedirect) { 34 | redirect = true; 35 | } 36 | 37 | redirectInfo = { 38 | redirect: redirect, 39 | stage: stageNow, 40 | } 41 | } 42 | 43 | const fallback = isFallback(); 44 | if (fallback && redirectInfo.redirect) { 45 | redirectInfo = { 46 | redirect: false, 47 | stage: stageNow, 48 | } 49 | } 50 | 51 | saveRedirect(redirectInfo); 52 | 53 | const redirectNow = redirectInfo.redirect; 54 | if (redirectNow && redirectActive) { 55 | redirectToNewWebsite(); 56 | } 57 | } -------------------------------------------------------------------------------- /public/stic.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BrOrlandi/StarWarsIntroCreator/98a992a3c934a0247de3112028b847c56287eef5/public/stic.jpg -------------------------------------------------------------------------------- /public/styles.css: -------------------------------------------------------------------------------- 1 | @import url(https://fonts.googleapis.com/css?family=News+Cycle:400,700); 2 | @font-face { 3 | font-family: StarWars; 4 | src: url("Starjedi.ttf"); } 5 | 6 | @font-face { 7 | font-family: StarWarsTitle; 8 | src: url("SWCrawlTitle2.ttf"); } 9 | 10 | html, 11 | body { 12 | width: 100%; 13 | height: 100%; 14 | font: 700 1em "News Cycle", sans-serif; 15 | letter-spacing: .15em; 16 | color: #ffd54e; 17 | margin: 0; 18 | background-color: black; } 19 | 20 | /* Remove dotted border on Firefox (http://stackoverflow.com/a/199319) */ 21 | button::-moz-focus-inner { 22 | border: 0; } 23 | 24 | .starwars section { 25 | position: absolute; 26 | top: 45%; 27 | left: 50%; 28 | z-index: 1; } 29 | 30 | .starwars .start { 31 | font-size: 200%; 32 | width: 100%; 33 | margin: 0 0 0 -50%; 34 | text-align: center; 35 | top: 0; } 36 | .starwars .start #config { 37 | margin: 0 auto; 38 | width: 500px; } 39 | 40 | .starwars .introBg { 41 | position: absolute; 42 | top: 0px; 43 | left: 0px; 44 | width: 100%; 45 | height: 100%; 46 | background-color: black; 47 | animation: introBg 9s; 48 | opacity: 0; } 49 | 50 | .starwars .intro { 51 | margin: 0 auto; 52 | padding: 0 100px; 53 | position: static; 54 | top: 0px; 55 | left: 0px; 56 | font-size: 500%; 57 | font-weight: 400; 58 | color: #4bd5ee; 59 | opacity: 0; 60 | animation: intro 6s ease-out 1s; } 61 | @media (max-height: 720px) { 62 | .starwars .intro { 63 | font-size: 350%; } } 64 | 65 | .starwars .logo { 66 | font-family: StarWars; 67 | text-align: center; 68 | position: static; 69 | margin: 0 auto; 70 | opacity: 0; 71 | animation: logo 11s cubic-bezier(0.11, 0.51, 0.48, 0.88) 9s; } 72 | .starwars .logo img { 73 | width: 300px; } 74 | 75 | .starwars .titles { 76 | width: 14.65em; 77 | margin: 0 0 0 -7.325em; 78 | top: auto; 79 | bottom: 0; 80 | height: 50em; 81 | font-size: 350%; 82 | text-align: justify; 83 | overflow: hidden; 84 | word-wrap: break-word; 85 | transform-origin: 50% 100%; 86 | -moz-transform: perspective(300px) rotateX(25deg); 87 | -o-transform: perspective(300px) rotateX(25deg); 88 | -ms-transform: perspective(300px) rotateX(25deg); 89 | -webkit-transform: perspective(300px) rotateX(25deg); 90 | transform: perspective(300px) rotateX(25deg); } 91 | @media screen and (min-width: 1920px) and (max-width: 1920px) { 92 | .starwars .titles { 93 | zoom: 1.9; 94 | -moz-transform: perspective(266px) rotateX(29deg) scaleX(1.2); 95 | -o-transform: perspective(266px) rotateX(29deg) scaleX(1.2); 96 | -ms-transform: perspective(266px) rotateX(29deg) scaleX(1.2); 97 | -webkit-transform: perspective(266px) rotateX(29deg) scaleX(1.2); 98 | transform: perspective(266px) rotateX(29deg) scaleX(1.2); } } 99 | @media screen and (min-width: 1366px) and (max-width: 1366px) { 100 | .starwars .titles { 101 | zoom: 1.5; 102 | -moz-transform: perspective(216px) rotateX(26deg); 103 | -o-transform: perspective(216px) rotateX(26deg); 104 | -ms-transform: perspective(216px) rotateX(26deg); 105 | -webkit-transform: perspective(216px) rotateX(26deg); 106 | transform: perspective(216px) rotateX(26deg); } } 107 | @media screen and (min-width: 1280px) and (max-width: 1280px) { 108 | .starwars .titles { 109 | zoom: 1.5; 110 | -moz-transform: perspective(216px) rotateX(26deg); 111 | -o-transform: perspective(216px) rotateX(26deg); 112 | -ms-transform: perspective(216px) rotateX(26deg); 113 | -webkit-transform: perspective(216px) rotateX(26deg); 114 | transform: perspective(216px) rotateX(26deg); } } 115 | .starwars .titles > div { 116 | position: absolute; 117 | top: 100%; 118 | animation: titles 73s linear 13s; } 119 | .starwars .titles > div > p { 120 | margin: 1.35em 0 1.85em 0; 121 | line-height: 1.35em; 122 | -webkit-backface-visibility: hidden; 123 | -moz-backface-visibility: hidden; 124 | -ms-backface-visibility: hidden; 125 | -o-backface-visibility: hidden; 126 | backface-visibility: hidden; } 127 | .starwars .titles > div .tcenter { 128 | margin: 1.35em 0 -1em 0; 129 | text-align: center; } 130 | 131 | .verticalWrapper { 132 | display: flex; 133 | align-items: center; 134 | height: 100%; 135 | width: 100%; 136 | position: absolute; 137 | top: 0px; 138 | left: 0px; 139 | right: 0px; 140 | bottom: 0px; } 141 | 142 | @keyframes intro { 143 | 0% { 144 | opacity: 0; } 145 | 20% { 146 | opacity: 1; } 147 | 90% { 148 | opacity: 1; } 149 | 100% { 150 | opacity: 0; } } 151 | 152 | @keyframes introBg { 153 | 0% { 154 | opacity: 1; } 155 | 100% { 156 | opacity: 1; } } 157 | 158 | @keyframes logo { 159 | 0% { 160 | -moz-transform: scale(1.3); 161 | -o-transform: scale(1.3); 162 | -ms-transform: scale(1.3); 163 | -webkit-transform: scale(1.3); 164 | transform: scale(1.3); 165 | opacity: 1; } 166 | 95% { 167 | opacity: 1; } 168 | 100% { 169 | -moz-transform: scale(0.01); 170 | -o-transform: scale(0.01); 171 | -ms-transform: scale(0.01); 172 | -webkit-transform: scale(0.01); 173 | transform: scale(0.01); 174 | opacity: 0; } } 175 | 176 | @keyframes titles { 177 | 0% { 178 | top: 100%; 179 | opacity: 1; } 180 | 95% { 181 | opacity: 1; } 182 | 100% { 183 | top: 20%; 184 | opacity: 0; } } 185 | 186 | .noselect { 187 | -webkit-touch-callout: none; 188 | -webkit-user-select: none; 189 | -khtml-user-select: none; 190 | -moz-user-select: none; 191 | -ms-user-select: none; 192 | user-select: none; } 193 | 194 | .playButton, .downloadButton { 195 | font-family: StarWars; 196 | cursor: pointer; 197 | font-size: 50px; 198 | border: 0; 199 | background: transparent; 200 | color: #ffd54e; 201 | text-shadow: none; 202 | transition: text-shadow 0.5s ease-out; 203 | outline: none; } 204 | .playButton:focus, .downloadButton:focus, .playButton:hover, .downloadButton:hover { 205 | text-shadow: -1px 1px 8px #45f500, 1px -1px 8px #45f500; } 206 | 207 | #form-starwars { 208 | width: 500px; } 209 | #form-starwars input, #form-starwars textarea { 210 | width: 97%; 211 | margin-bottom: 0px; 212 | padding: 0.3em; 213 | border: 3px solid rgba(255, 213, 78, 0.2); 214 | border-radius: 3px; 215 | background: black; 216 | color: #ffd54e; 217 | transition: border-color 0.7s ease-out; 218 | overflow-x: hidden; } 219 | #form-starwars input:active, #form-starwars input:focus, #form-starwars textarea:active, #form-starwars textarea:focus { 220 | border-color: #ffd54e; } 221 | #form-starwars textarea { 222 | resize: none; } 223 | #form-starwars textarea#f-logo { 224 | color: black; 225 | border: 0.0666em solid rgba(255, 213, 78, 0.2); 226 | border-radius: 0.0533em; 227 | font-family: StarWars; 228 | font-size: 50px; 229 | font-weight: normal; 230 | height: 92px; 231 | line-height: 86%; 232 | width: 93%; 233 | text-shadow: -2px -2px 0 #ffd54e, -2px -1px 0 #ffd54e, -2px 0px 0 #ffd54e, -2px 1px 0 #ffd54e, -2px 2px 0 #ffd54e, -1px -2px 0 #ffd54e, -1px -1px 0 #ffd54e, -1px 0px 0 #ffd54e, -1px 1px 0 #ffd54e, -1px 2px 0 #ffd54e, 0px -2px 0 #ffd54e, 0px -1px 0 #ffd54e, 0px 0px 0 #ffd54e, 0px 1px 0 #ffd54e, 0px 2px 0 #ffd54e, 1px -2px 0 #ffd54e, 1px -1px 0 #ffd54e, 1px 0px 0 #ffd54e, 1px 1px 0 #ffd54e, 1px 2px 0 #ffd54e, 2px -2px 0 #ffd54e, 2px -1px 0 #ffd54e, 2px 0px 0 #ffd54e, 2px 1px 0 #ffd54e, 2px 2px 0 #ffd54e; } 234 | #form-starwars textarea#f-text { 235 | margin-top: 10px; } 236 | 237 | #f-intro { 238 | color: #4bd5ee !important; } 239 | 240 | #f-text { 241 | height: 200px; } 242 | 243 | #f-logo, #f-title, #f-episode { 244 | text-align: center; } 245 | 246 | #loader .inner { 247 | width: 100%; 248 | text-align: center; } 249 | 250 | #pageTitle { 251 | line-height: 100%; 252 | font-family: StarWars; } 253 | 254 | .star-wars-alert { 255 | background-color: black !important; 256 | border: 2px solid #ffd54e; } 257 | .star-wars-alert h2, .star-wars-alert p { 258 | color: #ffd54e !important; } 259 | .star-wars-alert button { 260 | border: 2px solid #ffd54e !important; 261 | color: #ffd54e !important; 262 | background-color: black !important; } 263 | 264 | #footer { 265 | position: fixed; 266 | width: 100%; 267 | bottom: 1em; 268 | text-align: center; 269 | font-size: 0.7em; 270 | color: #9e9e42; } 271 | #footer a { 272 | color: #ffd54e; 273 | text-decoration: none; } 274 | #footer a:hover { 275 | color: #fff; 276 | text-decoration: none; } 277 | 278 | .socialButtons { 279 | position: fixed; 280 | bottom: 1em; 281 | left: 1em; 282 | z-index: 10; } 283 | .socialButtons form { 284 | margin-bottom: 5px; } 285 | .socialButtons div { 286 | margin-bottom: 0.33em; } 287 | .socialButtons div:last-of-type { 288 | margin-bottom: 0; } 289 | 290 | .bg { 291 | width: 100%; 292 | height: 4100px; 293 | position: absolute; 294 | top: 0; 295 | left: 0; 296 | background-color: black; 297 | background: url("bg-stars.png") repeat; } 298 | 299 | .running { 300 | overflow: hidden; } 301 | .running .bg { 302 | animation: scrolldown 7s 86s forwards; } 303 | 304 | @keyframes scrolldown { 305 | 0% { 306 | transform: translateY(0); } 307 | 100% { 308 | transform: translateY(-2200px); } } 309 | 310 | .deathstar { 311 | background: black url(deathstar.png) no-repeat; 312 | width: 655px; 313 | height: 663px; 314 | position: absolute; 315 | bottom: 1150px; 316 | right: 100px; } 317 | 318 | #logosvg { 319 | width: 900px; 320 | display: none; 321 | font-size: 210px; } 322 | 323 | .playAudio { 324 | width: 100%; 325 | text-align: center; 326 | font-size: 50px; } 327 | 328 | #videoButton { 329 | display: none; 330 | margin-bottom: 30px; 331 | font-size: 60px; } 332 | 333 | .sweet-alert fieldset input { 334 | width: 100%; 335 | margin-bottom: 10px; 336 | padding: 0.25em; 337 | border: 0.25em solid rgba(255, 213, 78, 0.2); 338 | border-radius: 0.2em; 339 | background: black; 340 | color: #ffd54e; 341 | transition: border-color 0.7s ease-out; } 342 | .sweet-alert fieldset input:active, .sweet-alert fieldset input:focus { 343 | outline: none; 344 | box-shadow: none; 345 | border: 0.25em solid #ffd54e; } 346 | 347 | .sweet-alert .icon, .sweet-alert .sa-input-error::before, .sweet-alert .sa-input-error::after { 348 | background-color: #C31D00 !important; } 349 | 350 | .sa-error-container { 351 | background-color: #3c3808 !important; } 352 | 353 | iframe { 354 | border: none; } 355 | 356 | .termsOfService { 357 | text-align: center; 358 | position: fixed; 359 | bottom: 1em; 360 | right: 1em; 361 | z-index: 10; } 362 | .termsOfService a { 363 | color: #ffd54e; 364 | text-decoration: none; } 365 | .termsOfService a:hover { 366 | text-decoration: underline; } 367 | 368 | @keyframes pulseDownload { 369 | 0% { 370 | text-shadow: none; } 371 | 40% { 372 | text-shadow: -1px 1px 93px #45f500, 1px -1px 23px #45f500; } 373 | 60% { 374 | text-shadow: -1px 1px 93px #45f500, 1px -1px 23px #45f500; } 375 | 100% { 376 | text-shadow: none; } } 377 | 378 | .downloadButton { 379 | animation: pulseDownload 3s ease 0s infinite; } 380 | .downloadButton:hover { 381 | text-shadow: -1px 1px 93px #45f500, 1px -1px 23px #45f500; 382 | animation: none; } 383 | 384 | #createdIntros #box { 385 | position: fixed; 386 | top: 1em; 387 | left: 1em; 388 | z-index: 10; 389 | border: #ffd54e 3px solid; 390 | border-radius: 7px; 391 | padding: 10px; 392 | color: #ffd54e; 393 | max-width: 20%; } 394 | #createdIntros #box div { 395 | max-width: 100%; 396 | white-space: nowrap; 397 | overflow: hidden; 398 | text-overflow: ellipsis; } 399 | #createdIntros #box div a { 400 | color: #ffd54e; 401 | text-decoration: none; } 402 | #createdIntros #box div a.link { 403 | width: 250px; } 404 | #createdIntros #box div a.link:hover { 405 | text-decoration: underline; } 406 | #createdIntros #box div .circCont { 407 | display: inline-block; 408 | float: right; 409 | margin-top: 4px; 410 | margin-left: 5px; } 411 | #createdIntros #box div .circCont .circle { 412 | width: 20px; 413 | height: 20px; 414 | background: transparent; 415 | border: 2px solid #ffd54e; 416 | -moz-border-radius: 50%; 417 | -webkit-border-radius: 50%; 418 | border-radius: 50%; 419 | position: relative; 420 | cursor: pointer; 421 | display: inline-block; } 422 | #createdIntros #box div .circCont .circle:after { 423 | width: 12px; 424 | height: 2px; 425 | background-color: #ffd54e; 426 | content: ""; 427 | left: 50%; 428 | top: 50%; 429 | margin-left: -6px; 430 | margin-top: -1px; 431 | position: absolute; 432 | -moz-transform: rotate(-45deg); 433 | -ms-transform: rotate(-45deg); 434 | -webkit-transform: rotate(-45deg); 435 | transform: rotate(-45deg); 436 | /*@include transform-origin(100%,100%);*/ } 437 | #createdIntros #box div .circCont .circle:before { 438 | left: 50%; 439 | top: 50%; 440 | margin-left: -6px; 441 | margin-top: -1px; 442 | width: 12px; 443 | height: 2px; 444 | background-color: #ffd54e; 445 | content: ""; 446 | position: absolute; 447 | -moz-transform: rotate(45deg); 448 | -ms-transform: rotate(45deg); 449 | -webkit-transform: rotate(45deg); 450 | transform: rotate(45deg); 451 | /*@include transform-origin(0%,0%);*/ } 452 | #createdIntros #box div .circCont .fromMiddle:before, #createdIntros #box div .circCont .fromMiddle:after { 453 | z-index: 9999; 454 | -moz-transition-delay: 150ms; 455 | -o-transition-delay: 150ms; 456 | -webkit-transition-delay: 150ms; 457 | transition-delay: 150ms; 458 | -moz-transition: ease-in-out 400ms; 459 | -o-transition: ease-in-out 400ms; 460 | -webkit-transition: ease-in-out 400ms; 461 | transition: ease-in-out 400ms; } 462 | #createdIntros #box div .circCont .fromMiddle span { 463 | width: 18px; 464 | height: 18px; 465 | background-color: #ffd54e; 466 | display: inline-block; 467 | position: absolute; 468 | -moz-border-radius: 100%; 469 | -webkit-border-radius: 100%; 470 | border-radius: 100%; 471 | left: -1px; 472 | top: -1px; 473 | z-index: -9999; 474 | -moz-transform: scale(0.3); 475 | -ms-transform: scale(0.3); 476 | -webkit-transform: scale(0.3); 477 | transform: scale(0.3); 478 | opacity: 0; 479 | -moz-transition: ease-in-out 300ms; 480 | -o-transition: ease-in-out 300ms; 481 | -webkit-transition: ease-in-out 300ms; 482 | transition: ease-in-out 300ms; } 483 | #createdIntros #box div .circCont .fromMiddle:hover:before, #createdIntros #box div .circCont .fromMiddle:hover:after { 484 | position: absolute; 485 | background-color: black; } 486 | #createdIntros #box div .circCont .fromMiddle:hover span { 487 | -moz-transform: scale(1); 488 | -ms-transform: scale(1); 489 | -webkit-transform: scale(1); 490 | transform: scale(1); 491 | opacity: 1; } 492 | 493 | #videoRequestAdvise { 494 | font-size: 50%; } 495 | 496 | #flabel { 497 | font-size: 13px; 498 | font-family: Arial; 499 | font-weight: normal; 500 | display: inline; 501 | vertical-align: middle; } 502 | 503 | .regular-checkbox { 504 | display: none; } 505 | 506 | .regular-checkbox + label { 507 | background-color: black; 508 | border: 3px solid rgba(255, 213, 78, 0.2); 509 | padding: 9px; 510 | border-radius: 3px; 511 | display: inline-block; 512 | position: relative; 513 | top: 3px; } 514 | 515 | .regular-checkbox:checked + label { 516 | color: #99a1a7; } 517 | 518 | .regular-checkbox:checked + label:after { 519 | content: '\2714'; 520 | font-size: 14px; 521 | position: absolute; 522 | bottom: -2px; 523 | left: 3px; 524 | color: #ffd54e; } 525 | 526 | #text { 527 | line-height: 1.5em; } 528 | 529 | #episode { 530 | margin-bottom: -2em; } 531 | 532 | #title.SWFont { 533 | font-family: StarWarsTitle; 534 | font-weight: normal; 535 | font-size: 210%; 536 | transform: scaleY(1); 537 | margin-bottom: -0.1em; 538 | margin-top: 1.35em; 539 | text-transform: lowercase; } 540 | 541 | #title { 542 | transform: scaleY(2); 543 | margin-bottom: 1.6em; 544 | margin-top: 3.5em; 545 | text-transform: uppercase; } 546 | 547 | #playBut { 548 | z-index: 1000; } 549 | 550 | .sweet-alert { 551 | box-sizing: border-box; 552 | max-height: 100% !important; 553 | overflow-y: auto !important; 554 | padding: 0 17px 17px !important; 555 | width: 512px !important; } 556 | 557 | .sweet-alert:before { 558 | content: ""; 559 | display: block; 560 | height: 17px; 561 | width: 0; } 562 | 563 | #btcether { 564 | font-weight: bold; 565 | display: flex; 566 | line-height: 25px; } 567 | #btcether:hover { 568 | text-decoration: underline; 569 | cursor: pointer; } 570 | #btcether span { 571 | margin-left: 5px; } 572 | -------------------------------------------------------------------------------- /public/termsOfService.html: -------------------------------------------------------------------------------- 1 | 2 | 22 | 23 | 24 | Black and White 25 |

Star Wars Intro Creator
Terms of Service

26 |

Last updated: Febrary 25, 2017.

27 |

These Terms of Service (“Terms”, “Terms of Service”) refers to the Star Wars Intro Creator website (brorlandi.github.io/StarWarsIntroCreator) (the “Service”) operated by Bruno Orlandi and Nihey Takizawa (“us”, “we”, or “our”). 28 | Your access to and use of the Service is conditioned on your acceptance of and compliance with these Terms. These Terms apply to all visitors, users and others who access or use the Service.

29 |

About the Service

30 |

This website is not related or to Lucasfilm Ltd., Walt Disney, or Twentieth Century Fox. The music and the Star Wars logo are copyrights of Lucasfilm Ltd. This website is developed by fans only.

31 |

We are not responsible for the content inserted in our service. This service should not be used to publish content to suggest violence, discrimination, illegal acts, transgression and hatred. 32 | You must not defame, stalk, bully, abuse, harass, threaten, impersonate or intimidate people or entities via the Service.
33 | The content published in the service is registered by a unique key available in the URL. The content of this service is publicly available to anyone who knows the URL. You can not prevent others from accessing your content if it was published to the service. If you want your content removed from the site, please contact us via email. We don't share users' personal information with anyone.

34 |

About Download Videos

35 |

The videos are rendered on a 1280 x 720 pixel resolution, thus, we do not guarantee that the rendered videos are identical to the creations in this service. The quality may differ depending on the device on which the content is displayed. You can see a sample of a video rendered here: https://www.youtube.com/watch?v=IQf8AN07T_E

36 |

The videos are rendered in our servers and takes 50 minutes on average to be rendered. To deliver this feature for free we have a queue of videos to be rendered. You will be prompted to put your email in. Your email will be only used to send a link to download the video when it’s ready. We don’t send spam and we don’t share your email address with third parties.

37 |

We are not responsible for any errors (typos, misspellings) made when rendering the video, the rendered video is reproduced exactly how it was received. Any fix(es) requested in a rendered text will be subject to our current availability.

38 |

We cannot ensure the video will be properly delivered when it was caused by any issues that are beyond the domains of Star Wars Intro Creator (misspelled email, user inbox is full, inactive user account, the email service sent the video notification e-mail to spam).

39 |

The videos have rendered content, logo and music, copyrighted to Lucasfilm Ltd and its reproduction may depend on the terms of service of third party applications. We are not responsible for the reproduction of videos on third party services. The reproduction of the videos for commercial use is subject to the copyrights of Lucasfilm Ltd.

40 |

Sharing the rendered video on services like Facebook and YouTube may violate copyright, which is not allowed by such services. In those cases it may be better to use the shareable link to Star Wars Intro Creator’s Web Intro.

41 |

About Donations

42 |

Donations are used to maintain the video rendering servers up.

43 |

As a reward for donors who donate at least 5 US Dollars we will provide the video before the entire queue. The donation must be in the exact value or greater than 5 US Dollars. Multiple donations that add up to the value of 5 US Dollars will not be accepted to get the video earlier. For 10 US Dollars or more the video will be rendered in Full HD resolution (1920x1080).

44 |

You must use the same email you have used in your PayPal account used to donate to ask for the video rendering. We are not responsible for misspelled emails, user inbox is full, inactivate user account and spam filters.

45 |

Donators will generally get their video within 2-4 hours, but the time it takes for a given video to be ready may vary on how many video requests were made recently. You should receive a confirmation email about your donation and your video being processed, if not, contact us.

46 |

Only donations made via the website buttons will be processed. If you make a donation directly to our PayPal account it will not be processed automatically, please contact us if it’s the case.

47 |

If you want to donate a greater value to get more videos, you can, contact us for further details.

48 |

We use PayPal to receive donations and it’s only way we accept donations at the time.

49 |

About third parties

50 |

Our Service may contain links to third-party web sites or services that are not owned or controlled by Star Wars Intro Creator. Star Wars Intro Creator has no control over, and assumes no responsibility for: the content, privacy policies, or practices of any third party web sites or services. You further acknowledge and agree that Star Wars Intro Creator shall not be responsible or liable, directly or indirectly, for any damage or loss caused or alleged to be caused by or in connection with use of or reliance on any such content, goods or services available on or through any such web sites or services.

51 |

We reserve the right, at our sole discretion, to modify or replace these Terms at any time.

52 |

If you have any questions about these Terms, please contact us via brorlandi@gmail.com and nihey.takizawa@gmail.com .

53 | 54 | 81 | 92 | 93 | 103 | 104 | 105 | -------------------------------------------------------------------------------- /public/textDisplay.css: -------------------------------------------------------------------------------- 1 | #logoimg { 2 | display: none; 3 | display: block; } 4 | 5 | #logosvg { 6 | display: block; } 7 | 8 | #showIntroDiv { 9 | position: absolute; 10 | top: 20px; 11 | left: 50px; 12 | z-index: 20; } 13 | 14 | #showLogo { 15 | position: absolute; 16 | top: 80px; 17 | left: -60px; 18 | width: 200px; 19 | z-index: 20; } 20 | 21 | #logoConfig { 22 | position: absolute; 23 | top: 200px; 24 | left: -50px; 25 | width: 200px; 26 | -webkit-transform: rotate(90deg); 27 | z-index: 20; } 28 | 29 | #textHeightConfig { 30 | position: absolute; 31 | top: 500px; 32 | left: -50px; 33 | width: 200px; 34 | -webkit-transform: rotate(90deg); 35 | z-index: 20; } 36 | 37 | .configRanges { 38 | position: absolute; 39 | top: 80px; 40 | left: 50px; } 41 | .configRanges.second { 42 | top: 380px; } 43 | 44 | .starwars .intro { 45 | display: none; 46 | opacity: 1; 47 | animation: 0 !important; } 48 | 49 | .starwars .titles > div { 50 | top: 80%; 51 | opacity: 1; } 52 | 53 | .starwars .logo { 54 | display: none; 55 | opacity: 1; } 56 | 57 | @keyframes titles {}@keyframes logo {} 58 | -------------------------------------------------------------------------------- /public/textDisplay.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | Star Wars Intro Creator 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 |
34 |
35 |
36 |
37 |
38 | 39 | 40 |
41 | 42 | Logo 43 | 44 | Titles 45 | 46 |
47 |
48 |
49 | A long time ago in a galaxy far, 50 |
far away.... 51 |
52 |
53 |
54 |
55 |

56 | Episode IV 57 |

58 |

59 | A NEW HOPE 60 |

61 |
62 |

It is a period of civil war. Rebel spaceships, striking from a hidden base, have won their first victory against the evil Galactic Empire.

63 |

During the battle, Rebel spies managed to steal secret plans to the Empire's ultimate weapon, the DEATH STAR, an armored space station with enough power to destroy an entire planet.

64 |

Pursued by the Empire's sinister agents, Princess Leia races home aboard her starship, custodian of the stolen plan that can save her people and restore freedom to the galaxy....

65 |
66 |
67 |
68 |
69 |
76 | 77 |
78 | 79 |
80 | 81 | 82 | 114 | 115 | 116 | 117 | -------------------------------------------------------------------------------- /public/tfa.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BrOrlandi/StarWarsIntroCreator/98a992a3c934a0247de3112028b847c56287eef5/public/tfa.mp3 -------------------------------------------------------------------------------- /public/tfa.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BrOrlandi/StarWarsIntroCreator/98a992a3c934a0247de3112028b847c56287eef5/public/tfa.ogg -------------------------------------------------------------------------------- /public/wic.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BrOrlandi/StarWarsIntroCreator/98a992a3c934a0247de3112028b847c56287eef5/public/wic.jpg -------------------------------------------------------------------------------- /sass/styles.scss: -------------------------------------------------------------------------------- 1 | // generic transform 2 | @mixin transform($transforms) { 3 | -moz-transform: $transforms; 4 | -o-transform: $transforms; 5 | -ms-transform: $transforms; 6 | -webkit-transform: $transforms; 7 | transform: $transforms; 8 | } 9 | 10 | @mixin backface-visibility ($arguments) { 11 | -webkit-backface-visibility: $arguments; 12 | -moz-backface-visibility: $arguments; 13 | -ms-backface-visibility: $arguments; 14 | -o-backface-visibility: $arguments; 15 | backface-visibility: $arguments; 16 | } 17 | 18 | 19 | @import url(https://fonts.googleapis.com/css?family=News+Cycle:400,700); 20 | 21 | @font-face { 22 | font-family: StarWars; 23 | src: url('Starjedi.ttf'); 24 | } 25 | 26 | @font-face { 27 | font-family: StarWarsTitle; 28 | src: url('SWCrawlTitle2.ttf'); 29 | } 30 | 31 | $timeFactor: 1; 32 | $introColor: rgb(75, 213, 238); 33 | $titlesColor: #ffd54e; 34 | 35 | html, 36 | body { 37 | width: 100%; 38 | height: 100%; 39 | font: 700 1em "News Cycle", sans-serif; 40 | letter-spacing:.15em; 41 | color: $titlesColor; 42 | margin: 0; 43 | background-color: black; 44 | } 45 | 46 | /* Remove dotted border on Firefox (http://stackoverflow.com/a/199319) */ 47 | button::-moz-focus-inner { 48 | border: 0; 49 | } 50 | 51 | .starwars { 52 | 53 | section { 54 | position: absolute; 55 | top: 45%; 56 | left: 50%; 57 | z-index: 1; 58 | } 59 | 60 | .start { 61 | font-size: 200%; 62 | $start-width: 100%; 63 | width: $start-width; 64 | margin: 0 0 0 (- $start-width / 2); 65 | text-align: center; 66 | top: 0; 67 | 68 | #config{ 69 | margin: 0 auto; 70 | width: 500px; 71 | } 72 | } 73 | .introBg{ 74 | position: absolute; 75 | top: 0px; 76 | left: 0px; 77 | width: 100%; 78 | height: 100%; 79 | background-color: black; 80 | animation: introBg 9s * $timeFactor; 81 | opacity: 0; 82 | } 83 | 84 | .intro { 85 | margin: 0 auto; 86 | padding: 0 100px; 87 | position: static; 88 | top: 0px; 89 | left: 0px; 90 | font-size: 500%; 91 | font-weight: 400; 92 | color: $introColor; 93 | opacity: 0; 94 | animation: intro 6s * $timeFactor ease-out 1s * $timeFactor; 95 | @media (max-height: 720px){ 96 | font-size: 350%; 97 | } 98 | } 99 | 100 | .logo { 101 | font-family: StarWars; 102 | text-align:center; 103 | position: static; 104 | 105 | margin: 0 auto; 106 | opacity: 0; 107 | animation: logo 11s * $timeFactor cubic-bezier(0.11, 0.51, 0.48, 0.88) 9s * $timeFactor; 108 | // animation-iteration-count: infinite; // for testing only 109 | // animation-delay: 0s; 110 | 111 | img { 112 | width: 300px; 113 | } 114 | } 115 | 116 | .titles { 117 | $titles-width: 14.65em; 118 | width: $titles-width; 119 | margin: 0 0 0 (- $titles-width / 2); 120 | top: auto; 121 | bottom: 0; 122 | height: 50em; 123 | font-size: 350%; 124 | text-align: justify; 125 | overflow: hidden; 126 | word-wrap: break-word; 127 | transform-origin: 50% 100%; 128 | @include transform(perspective(300px) rotateX(25deg)); 129 | 130 | @media screen and (min-width: 1920px) and (max-width: 1920px) { 131 | // and (min-height: 1080px) and (max-height: 1080px) { 132 | zoom: 1.9; 133 | @include transform(perspective(266px) rotateX(29deg) scaleX(1.2)); 134 | } 135 | 136 | @media screen and (min-width: 1366px) and (max-width: 1366px) { 137 | zoom: 1.5; 138 | @include transform(perspective(216px) rotateX(26deg)); 139 | } 140 | 141 | @media screen and (min-width: 1280px) and (max-width: 1280px) { 142 | zoom: 1.5; 143 | @include transform(perspective(216px) rotateX(26deg)); 144 | } 145 | 146 | > div { 147 | position: absolute; 148 | top: 100%; 149 | animation: titles 73s * $timeFactor linear 13s * $timeFactor; 150 | 151 | > p { 152 | margin: 1.35em 0 1.85em 0; 153 | line-height: 1.35em; 154 | 155 | @include backface-visibility(hidden); 156 | } 157 | 158 | .tcenter{ 159 | margin: 1.35em 0 -1em 0; 160 | text-align: center; 161 | } 162 | } 163 | } 164 | } 165 | 166 | .verticalWrapper{ 167 | display: flex; 168 | align-items: center; 169 | height: 100%; 170 | width: 100%; 171 | position: absolute; 172 | top: 0px; 173 | left: 0px; 174 | right: 0px; 175 | bottom: 0px; 176 | } 177 | 178 | @keyframes intro { 179 | 0% { 180 | opacity: 0; 181 | } 182 | 20% { 183 | opacity: 1; 184 | } 185 | 90% { 186 | opacity: 1; 187 | } 188 | 100% { 189 | opacity: 0; 190 | } 191 | } 192 | 193 | @keyframes introBg { 194 | 0% { 195 | opacity: 1; 196 | } 197 | 100% { 198 | opacity: 1; 199 | } 200 | } 201 | 202 | @keyframes logo { 203 | 0% { 204 | @include transform(scale(1.3)); 205 | opacity: 1; 206 | } 207 | 95% { 208 | opacity: 1; 209 | } 210 | 100% { 211 | @include transform(scale(.01)); 212 | opacity: 0; 213 | } 214 | } 215 | 216 | @keyframes titles { 217 | 0% { 218 | top: 100%; 219 | opacity: 1; 220 | } 221 | 95% { 222 | opacity: 1; 223 | } 224 | 100% { 225 | top: 20%; 226 | opacity: 0; 227 | } 228 | } 229 | 230 | 231 | .noselect { 232 | -webkit-touch-callout: none; 233 | -webkit-user-select: none; 234 | -khtml-user-select: none; 235 | -moz-user-select: none; 236 | -ms-user-select: none; 237 | user-select: none; 238 | } 239 | 240 | .playButton{ 241 | font-family: StarWars; 242 | cursor: pointer; 243 | font-size: 50px; 244 | border: 0; 245 | background: transparent; 246 | color: $titlesColor; 247 | text-shadow: none; 248 | transition: text-shadow 0.5s ease-out; 249 | outline: none; 250 | 251 | &:focus, &:hover { 252 | text-shadow: -1px 1px 8px #45f500, 1px -1px 8px #45f500; 253 | } 254 | } 255 | 256 | // Used only in the Form input. The text is a outlined SVG Text 257 | /// Stroke font-character 258 | /// @param {Integer} $stroke - Stroke width 259 | /// @param {Color} $color - Stroke color 260 | /// @return {List} - text-shadow list 261 | @function stroke($stroke, $color) { 262 | $shadow: (); 263 | $from: $stroke*-1; 264 | @for $i from $from through $stroke { 265 | @for $j from $from through $stroke { 266 | $shadow: append($shadow, $i*1px $j*1px 0 $color, comma); 267 | } 268 | } 269 | @return $shadow; 270 | } 271 | /// Stroke font-character 272 | /// @param {Integer} $stroke - Stroke width 273 | /// @param {Color} $color - Stroke color 274 | /// @return {Style} - text-shadow 275 | @mixin stroke($stroke, $color) { 276 | text-shadow: stroke($stroke, $color); 277 | } 278 | 279 | #form-starwars{ 280 | // display: none; 281 | width: 500px; 282 | 283 | input,textarea { 284 | width: 97%; 285 | margin-bottom: 0px; 286 | padding: 0.3em; 287 | border: 3px solid transparentize($titlesColor, 0.8); 288 | border-radius: 3px; 289 | background: black; 290 | color: $titlesColor; 291 | transition: border-color 0.7s ease-out; 292 | overflow-x: hidden; 293 | 294 | &:active, &:focus { 295 | border-color: $titlesColor; 296 | } 297 | 298 | } 299 | 300 | textarea{ 301 | resize: none; 302 | &#f-logo{ 303 | color: black; 304 | border: 0.0666em solid transparentize($titlesColor, 0.8); 305 | border-radius: 0.0533em; 306 | font-family: StarWars; 307 | font-size: 50px; 308 | font-weight: normal; 309 | height: 92px; 310 | line-height: 86%; 311 | // width: 481.66px; 312 | width: 93%; 313 | @include stroke(2,$titlesColor); 314 | } 315 | 316 | &#f-text{ 317 | margin-top: 10px; 318 | } 319 | } 320 | } 321 | 322 | #f-intro{ 323 | color: $introColor !important; 324 | } 325 | #f-text{ 326 | height: 200px; 327 | } 328 | 329 | #f-logo,#f-title,#f-episode{ 330 | text-align: center; 331 | } 332 | 333 | #loader{ 334 | .inner { 335 | width: 100%; 336 | text-align: center; 337 | } 338 | } 339 | 340 | #pageTitle{ 341 | line-height: 100%; 342 | font-family: StarWars; 343 | } 344 | 345 | .star-wars-alert{ 346 | background-color: black !important; 347 | 348 | border: 2px solid $titlesColor; 349 | h2, p{ 350 | color: $titlesColor !important; 351 | } 352 | 353 | button{ 354 | border: 2px solid $titlesColor !important; 355 | color: $titlesColor !important; 356 | background-color: black !important; 357 | } 358 | } 359 | 360 | #footer { 361 | position: fixed; 362 | width: 100%; 363 | bottom: 1em; 364 | text-align: center; 365 | font-size: 0.7em; 366 | color: #9e9e42; 367 | 368 | a { 369 | color: $titlesColor; 370 | text-decoration: none; 371 | &:hover { 372 | color: #fff; 373 | text-decoration: none; 374 | } 375 | } 376 | } 377 | 378 | .socialButtons{ 379 | position: fixed; 380 | bottom: 1em; 381 | left: 1em; 382 | z-index: 10; 383 | 384 | form { 385 | margin-bottom: 5px; 386 | } 387 | 388 | div { 389 | margin-bottom: 0.33em; 390 | 391 | &:last-of-type{ 392 | margin-bottom: 0; 393 | } 394 | } 395 | } 396 | 397 | .bg { 398 | width: 100%; 399 | height: 4100px; 400 | position: absolute; 401 | top: 0; 402 | left: 0; 403 | background-color: black; 404 | background: url('bg-stars.png') repeat; 405 | } 406 | 407 | .running { 408 | overflow: hidden; 409 | .bg{ 410 | animation: scrolldown 7s * $timeFactor 86s * $timeFactor forwards; 411 | } 412 | } 413 | 414 | @keyframes scrolldown { 415 | 0% { 416 | transform: translateY(0); 417 | } 418 | 100% { 419 | transform: translateY(-2200px); 420 | } 421 | } 422 | 423 | .deathstar { 424 | background: black url(deathstar.png) no-repeat; 425 | width: 655px; 426 | height: 663px; 427 | position: absolute; 428 | bottom: 1150px; 429 | right: 100px; 430 | } 431 | 432 | #logosvg{ 433 | width: 900px; 434 | display: none; 435 | font-size: 210px; 436 | } 437 | 438 | .playAudio{ 439 | width: 100%; 440 | text-align: center; 441 | font-size: 50px; 442 | } 443 | 444 | #videoButton{ 445 | display: none; 446 | margin-bottom: 30px; 447 | font-size: 60px; 448 | } 449 | 450 | .sweet-alert { 451 | fieldset{ 452 | input { 453 | width: 100%; 454 | margin-bottom: 10px; 455 | padding: 0.25em; 456 | border: 0.25em solid transparentize($titlesColor, 0.8); 457 | border-radius: 0.2em; 458 | background: black; 459 | color: $titlesColor; 460 | transition: border-color 0.7s ease-out; 461 | 462 | &:active, &:focus { 463 | outline: none; 464 | box-shadow: none; 465 | border: 0.25em solid $titlesColor; 466 | } 467 | } 468 | } 469 | .icon, .sa-input-error::before, .sa-input-error::after{ 470 | background-color: #C31D00 !important; 471 | } 472 | } 473 | 474 | .sa-error-container{ 475 | background-color: #3c3808 !important; 476 | } 477 | 478 | iframe{ 479 | border: none; 480 | } 481 | 482 | .termsOfService{ 483 | text-align: center; 484 | position: fixed; 485 | bottom: 1em; 486 | right: 1em; 487 | z-index: 10; 488 | 489 | a{ 490 | color: $titlesColor; 491 | text-decoration: none; 492 | 493 | &:hover{ 494 | text-decoration: underline; 495 | } 496 | } 497 | } 498 | 499 | @keyframes pulseDownload { 500 | 0%{ 501 | text-shadow: none; 502 | } 503 | 504 | 40%{ 505 | text-shadow: -1px 1px 93px #45f500, 1px -1px 23px #45f500; 506 | } 507 | 508 | 60%{ 509 | text-shadow: -1px 1px 93px #45f500, 1px -1px 23px #45f500; 510 | } 511 | 512 | 100%{ 513 | text-shadow: none; 514 | } 515 | } 516 | 517 | .downloadButton{ 518 | @extend .playButton; 519 | animation: pulseDownload 3s ease 0s infinite; 520 | 521 | &:hover{ 522 | text-shadow: -1px 1px 93px #45f500, 1px -1px 23px #45f500; 523 | animation: none; 524 | } 525 | } 526 | 527 | #createdIntros{ 528 | #box{ 529 | position: fixed; 530 | top: 1em; 531 | left: 1em; 532 | z-index: 10; 533 | border: $titlesColor 3px solid; 534 | border-radius: 7px; 535 | padding: 10px; 536 | color: $titlesColor; 537 | max-width: 20%; 538 | 539 | div{ 540 | max-width: 100%; 541 | white-space: nowrap; 542 | overflow: hidden; 543 | text-overflow: ellipsis; 544 | a{ 545 | color: $titlesColor; 546 | text-decoration: none; 547 | &.link{ 548 | width: 250px; 549 | &:hover{ 550 | text-decoration: underline; 551 | } 552 | } 553 | } 554 | .circCont{ 555 | display:inline-block; 556 | float: right; 557 | margin-top: 4px; 558 | margin-left: 5px; 559 | .circle { 560 | width: 20px; 561 | height: 20px; 562 | background: transparent; 563 | border: 2px solid $titlesColor; 564 | -moz-border-radius: 50%; 565 | -webkit-border-radius: 50%; 566 | border-radius: 50%; 567 | position: relative; 568 | cursor: pointer; 569 | display: inline-block; 570 | } 571 | .circle:after { 572 | width: 12px; 573 | height: 2px; 574 | background-color: $titlesColor; 575 | content: ""; 576 | left: 50%; 577 | top: 50%; 578 | margin-left: -6px; 579 | margin-top: -1px; 580 | position: absolute; 581 | -moz-transform: rotate(-45deg); 582 | -ms-transform: rotate(-45deg); 583 | -webkit-transform: rotate(-45deg); 584 | transform: rotate(-45deg); 585 | /*@include transform-origin(100%,100%);*/ 586 | } 587 | .circle:before { 588 | left: 50%; 589 | top: 50%; 590 | margin-left: -6px; 591 | margin-top: -1px; 592 | width: 12px; 593 | height: 2px; 594 | background-color: $titlesColor; 595 | content: ""; 596 | position: absolute; 597 | -moz-transform: rotate(45deg); 598 | -ms-transform: rotate(45deg); 599 | -webkit-transform: rotate(45deg); 600 | transform: rotate(45deg); 601 | /*@include transform-origin(0%,0%);*/ 602 | } 603 | .fromMiddle:before, .fromMiddle:after { 604 | z-index: 9999; 605 | -moz-transition-delay: 150ms; 606 | -o-transition-delay: 150ms; 607 | -webkit-transition-delay: 150ms; 608 | transition-delay: 150ms; 609 | -moz-transition: ease-in-out 400ms; 610 | -o-transition: ease-in-out 400ms; 611 | -webkit-transition: ease-in-out 400ms; 612 | transition: ease-in-out 400ms; 613 | } 614 | .fromMiddle span { 615 | width: 18px; 616 | height: 18px; 617 | background-color: $titlesColor; 618 | display: inline-block; 619 | position: absolute; 620 | -moz-border-radius: 100%; 621 | -webkit-border-radius: 100%; 622 | border-radius: 100%; 623 | left: -1px; 624 | top: -1px; 625 | z-index: -9999; 626 | -moz-transform: scale(0.3); 627 | -ms-transform: scale(0.3); 628 | -webkit-transform: scale(0.3); 629 | transform: scale(0.3); 630 | opacity: 0; 631 | -moz-transition: ease-in-out 300ms; 632 | -o-transition: ease-in-out 300ms; 633 | -webkit-transition: ease-in-out 300ms; 634 | transition: ease-in-out 300ms; 635 | } 636 | 637 | .fromMiddle:hover:before, .fromMiddle:hover:after { 638 | position: absolute; 639 | background-color: black; 640 | } 641 | .fromMiddle:hover span { 642 | -moz-transform: scale(1); 643 | -ms-transform: scale(1); 644 | -webkit-transform: scale(1); 645 | transform: scale(1); 646 | opacity: 1; 647 | } 648 | } 649 | 650 | } 651 | } 652 | } 653 | 654 | #videoRequestAdvise{ 655 | font-size: 50%; 656 | } 657 | 658 | #flabel{ 659 | font-size: 13px; 660 | font-family: Arial; 661 | font-weight: normal; 662 | display: inline; 663 | vertical-align: middle; 664 | 665 | } 666 | 667 | .regular-checkbox { 668 | display: none; 669 | } 670 | 671 | .regular-checkbox + label { 672 | background-color: black; 673 | // border: 1px solid #cacece; 674 | border: 3px solid transparentize($titlesColor, 0.8); 675 | // box-shadow: 0 1px 2px rgba(0,0,0,0.05), inset 0px -15px 10px -12px rgba(0,0,0,0.05); 676 | padding: 9px; 677 | border-radius: 3px; 678 | display: inline-block; 679 | position: relative; 680 | top: 3px; 681 | } 682 | 683 | .regular-checkbox + label:active, .regular-checkbox:checked + label:active { 684 | // box-shadow: 0 1px 2px rgba(0,0,0,0.05), inset 0px 1px 3px rgba(0,0,0,0.1); 685 | } 686 | 687 | .regular-checkbox:checked + label { 688 | // border: 1px solid #adb8c0; 689 | // box-shadow: 0 1px 2px rgba(0,0,0,0.05), inset 0px -15px 10px -12px rgba(0,0,0,0.05), inset 15px 10px -12px rgba(255,255,255,0.1); 690 | color: #99a1a7; 691 | } 692 | 693 | .regular-checkbox:checked + label:after { 694 | content: '\2714'; 695 | font-size: 14px; 696 | position: absolute; 697 | bottom: -2px; 698 | left: 3px; 699 | color: $titlesColor; 700 | } 701 | 702 | #text{ 703 | line-height: 1.5em; 704 | } 705 | 706 | #episode{ 707 | margin-bottom: -2em; 708 | } 709 | 710 | #title.SWFont{ 711 | font-family: StarWarsTitle; 712 | font-weight: normal; 713 | font-size: 210%; 714 | transform: scaleY(1); 715 | margin-bottom: -0.1em; 716 | margin-top: 1.35em; 717 | text-transform: lowercase; 718 | } 719 | 720 | #title{ 721 | transform: scaleY(2); 722 | margin-bottom: 1.6em; 723 | margin-top: 3.5em; 724 | text-transform: uppercase; 725 | } 726 | 727 | #playBut{ 728 | z-index: 1000; 729 | } 730 | 731 | .sweet-alert { 732 | box-sizing : border-box; 733 | max-height : 100% !important; 734 | overflow-y : auto !important; 735 | padding : 0 17px 17px !important; 736 | width : 512px !important; 737 | } 738 | .sweet-alert:before { 739 | content : ""; 740 | display : block; 741 | height : 17px; 742 | width : 0; 743 | } 744 | 745 | #btcether { 746 | &:hover { 747 | text-decoration: underline; 748 | cursor: pointer; 749 | } 750 | font-weight: bold; 751 | display: flex; 752 | line-height: 25px; 753 | span { 754 | margin-left: 5px; 755 | } 756 | } -------------------------------------------------------------------------------- /sass/textDisplay.scss: -------------------------------------------------------------------------------- 1 | #logoimg{ 2 | display: none; 3 | display: block; 4 | } 5 | 6 | #logosvg{ 7 | //display: none; 8 | display: block; 9 | } 10 | 11 | 12 | $titlesColor: #ffd54e; 13 | 14 | #showIntroDiv{ 15 | position: absolute; 16 | top: 20px; 17 | left: 50px; 18 | z-index: 20; 19 | } 20 | 21 | #showLogo{ 22 | position: absolute; 23 | top: 80px; 24 | left: -60px; 25 | width: 200px; 26 | z-index: 20; 27 | } 28 | 29 | #logoConfig { 30 | position: absolute; 31 | top: 200px; 32 | left: -50px; 33 | width: 200px; 34 | -webkit-transform: rotate(90deg); 35 | z-index: 20; 36 | } 37 | 38 | #textHeightConfig { 39 | position: absolute; 40 | top: 500px; 41 | left: -50px; 42 | width: 200px; 43 | -webkit-transform: rotate(90deg); 44 | z-index: 20; 45 | } 46 | 47 | .configRanges{ 48 | position: absolute; 49 | $first: 80px; 50 | top: $first; 51 | left: 50px; 52 | &.second{ 53 | top: $first + 300px; 54 | } 55 | } 56 | 57 | 58 | .starwars { 59 | 60 | .intro { 61 | display: none; 62 | opacity: 1; 63 | animation: 0 !important; 64 | } 65 | 66 | .titles { 67 | 68 | > div { 69 | top: 80%; 70 | opacity: 1; 71 | } 72 | } 73 | 74 | .logo { 75 | display: none; 76 | opacity: 1; 77 | } 78 | } 79 | 80 | @keyframes titles { 81 | 82 | } 83 | 84 | @keyframes logo { 85 | 86 | } 87 | -------------------------------------------------------------------------------- /ss1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BrOrlandi/StarWarsIntroCreator/98a992a3c934a0247de3112028b847c56287eef5/ss1.png -------------------------------------------------------------------------------- /ss2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BrOrlandi/StarWarsIntroCreator/98a992a3c934a0247de3112028b847c56287eef5/ss2.png -------------------------------------------------------------------------------- /termsOfService.md: -------------------------------------------------------------------------------- 1 | Last updated: February 25, 2017. 2 | 3 | These Terms of Service ("Terms", "Terms of Service") refers to the Star Wars Intro Creator website (brorlandi.github.io/StarWarsIntroCreator) (the "Service") operated by Bruno Orlandi and Nihey Takizawa ("us", "we", or "our"). 4 | Your access to and use of the Service is conditioned on your acceptance of and compliance with these Terms. These Terms apply to all visitors, users and others who access or use the Service. 5 | 6 | #### About the Service 7 | 8 | This website is not related or to Lucasfilm Ltd., Walt Disney, or Twentieth Century Fox. The music and the Star Wars logo are copyrights of Lucasfilm Ltd. This website is developed by fans only. 9 | 10 | We are not responsible for the content inserted in our service. This service should not be used to publish content to suggest violence, discrimination, illegal acts, transgression and hatred. 11 | You must not defame, stalk, bully, abuse, harass, threaten, impersonate or intimidate people or entities via the Service. 12 | The content published in the service is registered by a unique key available in the URL. The content of this service is publicly available to anyone who knows the URL. You can not prevent others from accessing your content if it was published to the service. If you want your content removed from the site, please contact us via email. We don't share users' personal information with anyone. 13 | 14 | #### About Download Videos 15 | 16 | The videos are rendered on a 1280 x 720 pixel resolution, thus, we do not guarantee that the rendered videos are identical to the creations in this service. The quality may differ depending on the device on which the content is displayed. You can see a sample of a video rendered here: [https://www.youtube.com/watch?v=IQf8AN07T_E](https://www.youtube.com/watch?v=IQf8AN07T_E) 17 | 18 | The videos are rendered in our servers and takes 50 minutes on average to be rendered. To deliver this feature for free we have a queue of videos to be rendered. You will be prompted to put your email in. Your email will be only used to send a link to download the video when it’s ready. We don’t send spam and we don’t share your email address with third parties. 19 | 20 | We are not responsible for any errors (typos, misspellings) made when rendering the video, the rendered video is reproduced exactly how it was received. Any fix(es) requested in a rendered text will be subject to our current availability. 21 | 22 | We cannot ensure the video will be properly delivered when it was caused by any issues that are beyond the domains of Star Wars Intro Creator (misspelled email, user inbox is full, inactive user account, the email service sent the video notification e-mail to spam). 23 | 24 | The videos have rendered content, logo and music, copyrighted to Lucasfilm Ltd and its reproduction may depend on the terms of service of third party applications. We are not responsible for the reproduction of videos on third party services. The reproduction of the videos for commercial use is subject to the copyrights of Lucasfilm Ltd. 25 | 26 | Sharing the rendered video on services like Facebook and YouTube may violate copyright, which is not allowed by such services. In those cases it may be better to use the shareable link to Star Wars Intro Creator’s Web Intro. 27 | 28 | #### About Donations 29 | 30 | Donations are used to maintain the video rendering servers up. 31 | 32 | As a reward for donors who donate at least 5 US Dollars we will provide the video before the entire queue. The donation must be in the exact value or greater than 5 US Dollars. Multiple donations that add up to the value of 5 US Dollars will not be accepted to get the video earlier. For 10 US Dollars or more the video will be rendered in Full HD resolution (1920x1080). 33 | 34 | You must use the same email you have used in your PayPal account used to donate to ask for the video rendering. We are not responsible for misspelled emails, user inbox is full, inactivate user account and spam filters. 35 | 36 | Donators will generally get their video within 2-4 hours, but the time it takes for a given video to be ready may vary on how many video requests were made recently. You should receive a confirmation email about your donation and your video being processed, if not, contact us. 37 | 38 | Only donations made via the website buttons will be processed. If you make a donation directly to our PayPal account it will not be processed automatically, please contact us if it's the case. 39 | 40 | If you want to donate a greater value to get more videos, you can, contact us for further details. 41 | 42 | We use PayPal to receive donations and it’s only way we accept donations at the time. 43 | 44 | #### About third parties 45 | 46 | Our Service may contain links to third-party web sites or services that are not owned or controlled by Star Wars Intro Creator. Star Wars Intro Creator has no control over, and assumes no responsibility for: the content, privacy policies, or practices of any third party web sites or services. You further acknowledge and agree that Star Wars Intro Creator shall not be responsible or liable, directly or indirectly, for any damage or loss caused or alleged to be caused by or in connection with use of or reliance on any such content, goods or services available on or through any such web sites or services. 47 | 48 | We reserve the right, at our sole discretion, to modify or replace these Terms at any time. 49 | 50 | If you have any questions about these Terms, please contact us via brorlandi@gmail.com and nihey.takizawa@gmail.com . 51 | --------------------------------------------------------------------------------